From 80eb8285630c409cf2eb0a12150a16fbf15f541b Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 19 Dec 2015 22:39:47 -0500 Subject: [PATCH 001/442] this shit dosen't even compile yet... --- code/_onclick/hud/action.dm | 16 + code/datums/datumvars.dm | 4 +- code/datums/spells/inflict_handler.dm | 6 +- code/datums/spells/summonitem.dm | 2 +- code/game/asteroid.dm | 4 +- .../gamemodes/changeling/powers/panacea.dm | 9 + .../gamemodes/changeling/powers/revive.dm | 2 +- code/game/gamemodes/cult/runes.dm | 4 +- code/game/gamemodes/wizard/artefact.dm | 2 +- code/game/gamemodes/wizard/godhand.dm | 7 +- code/game/machinery/adv_med.dm | 4 +- code/game/machinery/cloning.dm | 2 +- code/game/machinery/computer/cloning.dm | 2 +- code/game/machinery/flasher.dm | 2 +- code/game/objects/effects/aliens.dm | 19 +- code/game/objects/items.dm | 6 +- .../objects/items/devices/laserpointer.dm | 2 +- code/game/objects/items/devices/scanners.dm | 2 +- code/game/objects/items/weapons/defib.dm | 2 +- .../items/weapons/grenades/flashbang.dm | 2 +- code/game/objects/items/weapons/tools.dm | 2 +- .../stool_bed_chair_nest/alien_nests.dm | 6 +- code/modules/client/preferences.dm | 2 +- code/modules/food/recipes_microwave.dm | 2 +- code/modules/food/recipes_oven.dm | 2 +- code/modules/mining/equipment_locker.dm | 2 +- code/modules/mob/language.dm | 2 +- code/modules/mob/living/carbon/alien/alien.dm | 15 +- .../carbon/alien/humanoid/caste/drone.dm | 8 +- .../carbon/alien/humanoid/caste/hunter.dm | 1 + .../carbon/alien/humanoid/caste/sentinel.dm | 6 +- .../living/carbon/alien/humanoid/empress.dm | 8 +- .../mob/living/carbon/alien/humanoid/queen.dm | 8 +- .../mob/living/carbon/alien/larva/larva.dm | 2 + .../carbon/alien/special/alien_embryo.dm | 108 +++--- .../living/carbon/alien/special/facehugger.dm | 31 +- code/modules/mob/living/carbon/brain/MMI.dm | 12 +- .../mob/living/carbon/brain/brain_item.dm | 32 +- code/modules/mob/living/carbon/brain/death.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/carbon/human/death.dm | 4 +- .../mob/living/carbon/human/examine.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 6 +- .../mob/living/carbon/human/human_damage.dm | 8 +- .../mob/living/carbon/human/human_organs.dm | 10 +- .../mob/living/carbon/human/inventory.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 4 +- .../mob/living/carbon/human/species/apollo.dm | 24 +- .../mob/living/carbon/human/species/golem.dm | 2 +- .../mob/living/carbon/human/species/shadow.dm | 2 +- .../living/carbon/human/species/species.dm | 21 +- .../living/carbon/human/species/station.dm | 34 +- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/mob/living/carbon/life.dm | 9 + code/modules/mob/living/living.dm | 26 ++ .../mob/living/silicon/robot/component.dm | 2 +- .../simple_animal/hostile/mining_mobs.dm | 25 +- .../simple_animal/slaughter/slaughter.dm | 14 +- code/modules/mob/mob_grab.dm | 2 +- code/modules/mob/mob_helpers.dm | 2 +- code/modules/organs/organ_internal.dm | 171 --------- code/modules/organs/subtypes/xenos.dm | 66 ---- code/modules/power/supermatter/supermatter.dm | 2 +- code/modules/reagents/newchem/medicine.dm | 2 +- .../reagents/drink/reagents_alcohol.dm | 2 +- .../oldchem/reagents/reagents_admin.dm | 2 +- .../reagents/oldchem/reagents/reagents_med.dm | 2 +- .../designs/mechfabricator_designs.dm | 4 +- code/modules/surgery/eye.dm | 8 +- code/modules/surgery/implant.dm | 1 + code/modules/{ => surgery}/organs/blood.dm | 2 +- code/modules/surgery/organs/body_egg.dm | 53 +++ code/modules/surgery/organs/helpers.dm | 35 ++ code/modules/{ => surgery}/organs/organ.dm | 49 +-- .../{ => surgery}/organs/organ_external.dm | 12 +- .../{ => surgery}/organs/organ_icon.dm | 4 +- code/modules/surgery/organs/organ_internal.dm | 350 ++++++++++++++++++ .../{ => surgery}/organs/organ_stump.dm | 0 code/modules/{ => surgery}/organs/pain.dm | 4 +- .../modules/{ => surgery}/organs/robolimbs.dm | 0 code/modules/{ => surgery}/organs/skeleton.dm | 0 .../{ => surgery}/organs/subtypes/diona.dm | 97 ++--- .../{ => surgery}/organs/subtypes/machine.dm | 25 +- .../{ => surgery}/organs/subtypes/misc.dm | 26 +- .../organs/subtypes/nucleation.dm | 20 +- .../{ => surgery}/organs/subtypes/standard.dm | 0 .../organs/subtypes/unbreakable.dm | 0 .../{ => surgery}/organs/subtypes/wryn.dm | 9 +- code/modules/surgery/organs/subtypes/xenos.dm | 158 ++++++++ code/modules/{ => surgery}/organs/wound.dm | 0 code/modules/surgery/organs_internal.dm | 67 +++- code/modules/surgery/robotics.dm | 18 +- code/modules/virus2/effect.dm | 8 +- icons/obj/surgery.dmi | Bin 26775 -> 30051 bytes paradise.dme | 38 +- 95 files changed, 1140 insertions(+), 648 deletions(-) delete mode 100644 code/modules/organs/organ_internal.dm delete mode 100644 code/modules/organs/subtypes/xenos.dm rename code/modules/{ => surgery}/organs/blood.dm (99%) create mode 100644 code/modules/surgery/organs/body_egg.dm create mode 100644 code/modules/surgery/organs/helpers.dm rename code/modules/{ => surgery}/organs/organ.dm (87%) rename code/modules/{ => surgery}/organs/organ_external.dm (98%) rename code/modules/{ => surgery}/organs/organ_icon.dm (96%) create mode 100644 code/modules/surgery/organs/organ_internal.dm rename code/modules/{ => surgery}/organs/organ_stump.dm (100%) rename code/modules/{ => surgery}/organs/pain.dm (94%) rename code/modules/{ => surgery}/organs/robolimbs.dm (100%) rename code/modules/{ => surgery}/organs/skeleton.dm (100%) rename code/modules/{ => surgery}/organs/subtypes/diona.dm (81%) rename code/modules/{ => surgery}/organs/subtypes/machine.dm (84%) rename code/modules/{ => surgery}/organs/subtypes/misc.dm (81%) rename code/modules/{ => surgery}/organs/subtypes/nucleation.dm (62%) rename code/modules/{ => surgery}/organs/subtypes/standard.dm (100%) rename code/modules/{ => surgery}/organs/subtypes/unbreakable.dm (100%) rename code/modules/{ => surgery}/organs/subtypes/wryn.dm (64%) create mode 100644 code/modules/surgery/organs/subtypes/xenos.dm rename code/modules/{ => surgery}/organs/wound.dm (100%) diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 9987fe47511..4461e1c8539 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -221,6 +221,22 @@ /datum/action/item_action/hands_free check_flags = AB_CHECK_ALIVE|AB_CHECK_INSIDE +///prset for organ actions +/datum/action/item_action/organ_action + check_flags = AB_CHECK_ALIVE + +/datum/action/item_action/organ_action/CheckRemoval(mob/living/carbon/user) + if(!iscarbon(user)) + return 1 + if(target in user.internal_organs) + return 0 + return 1 + +/datum/action/item_action/organ_action/IsAvailable() + var/obj/item/organ/internal/I = target + if(!I.owner) + return 0 + return ..() //Preset for spells /datum/action/spell_action diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 89f4a277796..47818f24967 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -1006,7 +1006,7 @@ client usr << "This can only be done to instances of type /mob/living/carbon" return - var/obj/item/organ/rem_organ = input("Please choose an organ to remove.","Organ",null) as null|anything in M.internal_organs + var/obj/item/organ/internal/rem_organ = input("Please choose an organ to remove.","Organ",null) as null|anything in M.internal_organs if(!M) usr << "Mob doesn't exist anymore" @@ -1017,7 +1017,7 @@ client return usr << "Removed [rem_organ] from [M]." - rem_organ.removed() + rem_organ.Remove(M) message_admins("[key_name_admin(usr)] has removed the organ [rem_organ] from [key_name_admin(M)]") log_admin("[key_name(usr)] has removed the organ [rem_organ] from [key_name(M)]") qdel(rem_organ) diff --git a/code/datums/spells/inflict_handler.dm b/code/datums/spells/inflict_handler.dm index 7e8eb6b1641..ae985308ba5 100644 --- a/code/datums/spells/inflict_handler.dm +++ b/code/datums/spells/inflict_handler.dm @@ -28,9 +28,11 @@ if("gib_brain") if(ishuman(target)) var/mob/living/carbon/C = target - if(C.brain_op_stage != 4) // Their brain is already taken out - var/obj/item/organ/brain/B = new(C.loc) + var/obj/item/organ/internal/brain/B = C_target.get_int_organ(/obj/item/organ/internal/brain)//do we has brains? + if(B) + B.loc = get_turf(C_target) B.transfer_identity(C) + C_target.internal_organs -= B target.gib() if("disintegrate") target.dust() diff --git a/code/datums/spells/summonitem.dm b/code/datums/spells/summonitem.dm index 438be56b522..b8a8b12a997 100644 --- a/code/datums/spells/summonitem.dm +++ b/code/datums/spells/summonitem.dm @@ -24,7 +24,7 @@ if(!marked_item) //linking item to the spell message = "" for(var/obj/item in hand_items) - if(istype(item, /obj/item/organ/brain)) //Yeah, sadly this doesn't work due to the organ system. + if(istype(item, /obj/item/organ/internal/brain)) //Yeah, sadly this doesn't work due to the organ system. break marked_item = item message += "You mark [item] for recall." diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index cdb0cb7de64..d38e05c701b 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -61,7 +61,7 @@ var/global/max_secret_rooms = 6 walltypes = list(/turf/simulated/wall/r_wall=2,/turf/simulated/wall=2,/turf/simulated/mineral/random/high_chance=1) floortypes = list(/turf/simulated/floor,/turf/simulated/floor/engine) treasureitems = list(/obj/machinery/bot/medbot/mysterious=1, /obj/item/weapon/circular_saw=1, /obj/structure/closet/critter/cat=2) - fluffitems = list(/obj/effect/decal/cleanable/blood=5,/obj/item/organ/appendix=2,/obj/structure/closet/crate/freezer=2, + fluffitems = list(/obj/effect/decal/cleanable/blood=5,/obj/item/organ/internal/appendix=2,/obj/structure/closet/crate/freezer=2, /obj/machinery/optable=1,/obj/item/weapon/scalpel=1,/obj/item/weapon/storage/firstaid/regular=3, /obj/item/weapon/tank/anesthetic=1, /obj/item/weapon/surgical_drapes=2, /obj/item/device/mass_spectrometer/adv=1,/obj/item/clothing/glasses/hud/health=1) @@ -72,7 +72,7 @@ var/global/max_secret_rooms = 6 treasureitems = list(/obj/item/device/soulstone=1, /obj/item/clothing/suit/space/cult=1, /obj/item/weapon/bedsheet/cult=2, /obj/item/clothing/suit/cultrobes=2, /mob/living/simple_animal/hostile/creature=3) fluffitems = list(/obj/effect/gateway=1,/obj/effect/gibspawner=1,/obj/structure/cult/talisman=1,/obj/item/toy/crayon/red=2, - /obj/item/organ/heart=2, /obj/effect/decal/cleanable/blood=4,/obj/structure/table/woodentable=2,/obj/item/weapon/ectoplasm=3, + /obj/item/organ/internal/heart=2, /obj/effect/decal/cleanable/blood=4,/obj/structure/table/woodentable=2,/obj/item/weapon/ectoplasm=3, /obj/item/clothing/head/helmet/space/cult=1, /obj/item/clothing/shoes/cult=1) if("wizden") diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm index 469283d1436..25fc19bd04b 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -10,6 +10,15 @@ /obj/effect/proc_holder/changeling/panacea/sting_action(var/mob/user) user << "We cleanse impurities from our form." + + var/obj/item/organ/internal/body_egg/egg = user.get_int_organ(/obj/item/organ/internal/body_egg) + if(egg) + egg.Remove(user) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.vomit(0) + egg.loc = get_turf(user) + user.reagents.add_reagent("mutadone", 10) user.reagents.add_reagent("potass_iodide", 10) user.reagents.add_reagent("charcoal", 20) diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index f7cbbd4195f..797f8887767 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -57,7 +57,7 @@ O.trace_chemicals = list() O.wounds = list() O.wound_update_accuracy = 1 - for(var/obj/item/organ/IO in H.internal_organs) + for(var/obj/item/organ/internal/IO in H.internal_organs) IO.damage = 0 IO.trace_chemicals = list() H.updatehealth() diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 18883600ad4..43bb42dbd8c 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -582,8 +582,8 @@ var/list/sacrificed = list() if(!(iscultist(V))) victims += V//Checks for cult status and mob type for(var/obj/item/I in src.loc)//Checks for MMIs/brains/Intellicards - if(istype(I,/obj/item/organ/brain)) - var/obj/item/organ/brain/B = I + if(istype(I,/obj/item/organ/internal/brain)) + var/obj/item/organ/internal/brain/B = I victims += B.brainmob else if(istype(I,/obj/item/device/mmi)) var/obj/item/device/mmi/B = I diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 17e60881cc5..1ec636f5db6 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -461,7 +461,7 @@ var/global/list/multiverse = list() if("cyborg") if(M.get_species() != "Machine") - for(var/obj/item/organ/O in M.organs) + for(var/obj/item/organ/internal/O in M.organs) O.robotize() M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) M.equip_to_slot_or_del(sword, slot_r_hand) diff --git a/code/game/gamemodes/wizard/godhand.dm b/code/game/gamemodes/wizard/godhand.dm index e8bdb02c764..63793e6424e 100644 --- a/code/game/gamemodes/wizard/godhand.dm +++ b/code/game/gamemodes/wizard/godhand.dm @@ -46,10 +46,11 @@ var/mob/M = target if(ishuman(M) || issmall(M)) var/mob/living/carbon/C_target = M - var/obj/item/organ/brain/B - if(C_target.brain_op_stage != 4) // Their brain is already taken out - B = new(C_target.loc) + var/obj/item/organ/internal/brain/B = C_target.get_int_organ(/obj/item/organ/internal/brain) + if(B) + B.loc = get_turf(C_target) B.transfer_identity(C_target) + C_target.internal_organs -= B var/datum/effect/system/spark_spread/sparks = new sparks.set_up(4, 0, M.loc) //no idea what the 0 is sparks.start() diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 53e49224c6c..6a4e663b7a7 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -399,7 +399,7 @@ occupantData["extOrgan"] = extOrganData var/intOrganData[0] - for(var/obj/item/organ/I in H.internal_organs) + for(var/obj/item/organ/internal/I in H.internal_organs) var/organData[0] organData["name"] = I.name organData["desc"] = I.desc @@ -579,7 +579,7 @@ else dat += "[e.name]--Not Found" dat += "" - for(var/obj/item/organ/i in occupant.internal_organs) + for(var/obj/item/organ/internal/i in occupant.internal_organs) var/mech = i.desc var/infection = "None" switch (i.germ_level) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 4de2a851d18..08add7db621 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -132,7 +132,7 @@ if ((M.stat != 2) || (!M.client)) continue //They need a brain! - if ((istype(M, /mob/living/carbon/human)) && (M:brain_op_stage >= 4.0)) + if(istype(M, /mob/living/carbon/human) && !M.get_int_organ(/obj/item/organ/internal/brain)) continue if (M.ckey == find_key) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index a04ecb252b0..4effab8bd78 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -349,7 +349,7 @@ scantemp = "Error: Unable to locate valid genetic data." nanomanager.update_uis(src) return - if (subject.brain_op_stage == 4.0) + if (!subject.get_int_organ(/obj/item/organ/internal/brain)) scantemp = "Error: No signs of intelligence detected." nanomanager.update_uis(src) return diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index f22c68bb0f0..86a8360b01f 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -84,7 +84,7 @@ O.visible_message("[O] gasps and shields their eyes!") if (istype(O, /mob/living/carbon/human)) var/mob/living/carbon/human/H = O - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] if (E && (E.damage > E.min_bruised_damage && prob(E.damage + 50))) flick("e_flash", O:flash) E.damage += rand(1, 2) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 59bfefa78c9..b86c330d762 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -322,8 +322,23 @@ /obj/structure/alien/egg/attack_hand(mob/user) - user << "It feels slimy." - + if(user.getorgan(/obj/item/organ/internal/xenos/plasmavessel)) + switch(status) + if(BURST) + user << "You clear the hatched egg." + playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) + qdel(src) + return + if(GROWING) + user << "The child is not developed yet." + return + if(GROWN) + user << "You retrieve the child." + Burst(0) + return + else + user << "It feels slimy." + user.changeNext_move(CLICK_CD_MELEE) /obj/structure/alien/egg/proc/GetFacehugger() return locate(/obj/item/clothing/mask/facehugger) in contents diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index c535f53a753..5dfabafe4a5 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -324,10 +324,10 @@ //the mob M is attempting to equip this item into the slot passed through as 'slot'. Return 1 if it can do this and 0 if it can't. //If you are making custom procs but would like to retain partial or complete functionality of this one, include a 'return ..()' to where you want this to happen. -//Set disable_warning to 1 if you wish it to not give you outputs. +//Set disable_warning to 1 if you wish it to not give you outputs. /obj/item/proc/mob_can_equip(mob/M, slot, disable_warning = 0) if(!M) - return 0 + return 0 return M.can_equip(src, slot, disable_warning) @@ -427,7 +427,7 @@ "\red You stab yourself in the eyes with [src]!" \ ) if(istype(H)) - var/obj/item/organ/eyes/eyes = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = H.internal_organs_by_name["eyes"] if(!eyes) return eyes.take_damage(rand(3,4), 1) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index ed55d931d8c..97ae4caba04 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -113,7 +113,7 @@ severity -= 1 severity = min(max(severity, 0), 4) var/mob/living/carbon/human/H = C - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] switch(severity) if(0) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index e7337e1042d..41297357974 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -202,7 +202,7 @@ REAGENT SCANNER // user.show_message("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("epinephrine")] units of rejuvenation chemicals.") if (M.has_brain_worms()) user.show_message("\red Subject suffering from aberrant brain activity. Recommend further scanning.") - else if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0) + else if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && !M.get_int_organ(/obj/item/organ/internal/brain)) user.show_message("\red Subject is brain dead.") else if (M.getBrainLoss() >= 60) user.show_message("\red Severe brain damage detected. Subject likely to have mental retardation.") diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 0cef06f2fa2..d7d0ba827d8 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -383,7 +383,7 @@ defib.deductcharge(revivecost) add_logs(M, user, "revived", object="defibrillator") else - if(tplus > tlimit) + if(tplus > tlimit|| !H.get_int_organ(/obj/item/organ/internal/heart)) user.visible_message("[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.") else if(total_burn >= 180 || total_brute >= 180) user.visible_message("[defib] buzzes: Resuscitation failed - Severe tissue damage detected.") diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 260160a63c3..25d819f63c2 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -46,7 +46,7 @@ if(!eye_safety && ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] flick("e_flash", M.flash) if (E) E.damage += eye_damage diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 73a9e6ebc7e..90a25d9f4f3 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -358,7 +358,7 @@ var/safety = user:eyecheck() if(ishuman(user)) var/mob/living/carbon/human/H = user - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] if(!istype(E)) // No eyes? No problem! return switch(safety) diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index 98e3d01e542..feafebd26f8 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -16,7 +16,7 @@ if(buckled_mob && buckled_mob.buckled == src) var/mob/living/M = buckled_mob - if(isalien(user)) + if(user.get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)) unbuckle_mob() add_fingerprint(user) return @@ -50,9 +50,9 @@ if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) ) return - if(isalien(M)) + if(M.get_int_organ(/obj/item/organ/internal/alien/plasmavessel)) return - if(!isalien(user)) + if(!user.get_int_organ(/obj/item/organ/internal/alien/plasmavessel)) return unbuckle_mob() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e7987280d48..64389d8066a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1575,7 +1575,7 @@ datum/preferences else O.robotize() else - var/obj/item/organ/I = character.internal_organs_by_name[name] + var/obj/item/organ/internal/I = character.internal_organs_by_name[name] if(I) if(status == "assisted") I.mechassist() diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 98b8e782546..a9135316abe 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -76,7 +76,7 @@ /datum/recipe/microwave/brainburger items = list( /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/organ/brain + /obj/item/organ/internal/brain ) result = /obj/item/weapon/reagent_containers/food/snacks/brainburger diff --git a/code/modules/food/recipes_oven.dm b/code/modules/food/recipes_oven.dm index 914362ef45e..99d76a29526 100644 --- a/code/modules/food/recipes_oven.dm +++ b/code/modules/food/recipes_oven.dm @@ -352,7 +352,7 @@ /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/organ/brain + /obj/item/organ/internal/brain ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 9383a78588c..4ad70ebe1c4 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -988,7 +988,7 @@ /obj/item/weapon/hivelordstabilizer/afterattack(obj/item/M, mob/user) var/obj/item/asteroid/hivelord_core/C = M - if(!istype(C, /obj/item/asteroid/hivelord_core)) + if(!istype(C, /obj/item/organ/internal/hivelord_core)) user << "The stabilizer only works on hivelord cores." return ..() C.preserved = 1 diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 03ed2d630b4..a18f2fab8d0 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -363,7 +363,7 @@ var/mob/living/carbon/M = other if(!istype(M)) return 1 - if(locate(/obj/item/organ/wryn/hivenode) in M.internal_organs) + if(locate(/obj/item/organ/internal/wryn/hivenode) in M.internal_organs) return 1 return 0 diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 956453c4640..3c462638335 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -34,7 +34,10 @@ /mob/living/carbon/alien/New() verbs += /mob/living/carbon/verb/mob_sleep verbs += /mob/living/verb/lay_down - internal_organs += new /obj/item/organ/brain/xeno + internal_organs += new /obj/item/organ/internal/brain/xeno + internal_organs += new /obj/item/organ/internal/xenos/hivenode + for(var/obj/item/organ/internal/I in internal_organs) + I.Insert(src) ..() /mob/living/carbon/alien/get_default_language() @@ -258,9 +261,11 @@ Des: Gives the client of the alien an image on each infected mob. if (client) for (var/mob/living/C in mob_list) if(C.status_flags & XENO_HOST) - var/obj/item/alien_embryo/A = locate() in C - var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[A.stage]") - client.images += I + var/obj/item/organ/internal/body_egg/alien_embryo/A = C.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]") + if(A) + var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]") + client.images += I return @@ -317,4 +322,4 @@ Des: Removes all infected images from the alien. playsound(T, S, volume, 1, range) return 1 - return 0 + return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index 201ab0e1f77..cff294c42cb 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -13,8 +13,12 @@ if(src.name == "alien drone") src.name = text("alien drone ([rand(1, 1000)])") src.real_name = src.name - verbs.Add(/mob/living/carbon/alien/humanoid/proc/resin,/mob/living/carbon/alien/humanoid/proc/corrosive_acid) - ..() + internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/large + internal_organs += new /obj/item/organ/internal/xenos/resinspinner + internal_organs += new /obj/item/organ/internal/xenos/acid + //verbs.Add(/mob/living/carbon/alien/humanoid/proc/resin,/mob/living/carbon/alien/humanoid/proc/corrosive_acid) + //..() + //Drones use the same base as generic humanoids. //Drone verbs diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 6e4589b02c3..dca1719b0e3 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -15,6 +15,7 @@ if(name == "alien hunter") name = text("alien hunter ([rand(1, 1000)])") real_name = name + internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/hunter ..() /mob/living/carbon/alien/humanoid/hunter/handle_regular_hud_updates() diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index d6b8a18fc7b..12d5c4e155c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -45,8 +45,10 @@ if(name == "alien sentinel") name = text("alien sentinel ([rand(1, 1000)])") real_name = name - verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin) - ..() + internal_organs += new /obj/item/organ/internal/xenos/plasmavessel + internal_organs += new /obj/item/organ/internal/xenos/acid + internal_organs += new /obj/item/organ/internal/xenos/neurotoxin + //..() /mob/living/carbon/alien/humanoid/sentinel/handle_regular_hud_updates() ..() //-Yvarov diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm index 6d20f4e1e45..24c1809382f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm @@ -48,8 +48,12 @@ break real_name = src.name - verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/resin) - ..() + internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen + internal_organs += new /obj/item/organ/internal/xenos/resinspinner + internal_organs += new /obj/item/organ/internal/xenos/acid + internal_organs += new /obj/item/organ/internal/xenos/neurotoxin + internal_organs += new /obj/item/organ/internal/xenos/eggsac + //..() /mob/living/carbon/alien/humanoid/empress diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index f27ac91d398..690e2722ddc 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -24,8 +24,12 @@ break real_name = src.name - verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin,/mob/living/carbon/alien/humanoid/proc/resin) - ..() + internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/lqueen + internal_organs += new /obj/item/organ/internal/xenos/resinspinner + internal_organs += new /obj/item/organ/internal/xenos/acid + internal_organs += new /obj/item/organ/internal/xenos/neurotoxin + internal_organs += new /obj/item/organ/internal/xenos/eggsac +// ..() /mob/living/carbon/alien/humanoid/queen diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 7a309ac28dd..28104b67a18 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -25,6 +25,8 @@ regenerate_icons() add_language("Xenomorph") add_language("Hivemind") + internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/larva + ..() //This is fine, works the same as a human diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 5494b199a87..f7bbbd5e985 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -2,7 +2,7 @@ // It functions almost identically (see code/datums/diseases/alien_embryo.dm) var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds -/obj/item/alien_embryo +/obj/item/organ/internal/body_egg/alien_embryo name = "alien embryo" desc = "All slimy and yuck." icon = 'icons/mob/alien.dmi' @@ -10,30 +10,49 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds var/mob/living/affected_mob var/stage = 0 -/obj/item/alien_embryo/New() - if(istype(loc, /mob/living)) - affected_mob = loc - affected_mob.status_flags |= XENO_HOST - if(istype(affected_mob,/mob/living/carbon)) - var/mob/living/carbon/H = affected_mob - H.med_hud_set_status() - processing_objects.Add(src) - spawn(0) - AddInfectionImages(affected_mob) +/obj/item/organ/internal/body_egg/alien_embryo/on_find(mob/living/finder) + ..() + if(stage < 4) + finder << "It's small and weak, barely the size of a foetus." else - qdel(src) + finder << "It's grown quite large, and writhes slightly as you look at it." + if(prob(10)) + AttemptGrow(0) -/obj/item/alien_embryo/Destroy() - if(affected_mob) - affected_mob.status_flags &= ~(XENO_HOST) - if(istype(affected_mob,/mob/living/carbon)) - var/mob/living/carbon/H = affected_mob - H.med_hud_set_status() - spawn(0) - RemoveInfectionImages(affected_mob) - return ..() +/obj/item/organ/internal/body_egg/alien_embryo/prepare_eat() + var/obj/S = ..() + S.reagents.add_reagent("sacid", 10) + return S -/obj/item/alien_embryo/process() +/obj/item/organ/internal/body_egg/alien_embryo/on_life() + switch(stage) + if(2, 3) + if(prob(2)) + owner.emote("sneeze") + if(prob(2)) + owner.emote("cough") + if(prob(2)) + owner << "Your throat feels sore." + if(prob(2)) + owner << "Mucous runs down the back of your throat." + if(4) + if(prob(2)) + owner.emote("sneeze") + if(prob(2)) + owner.emote("cough") + if(prob(4)) + owner << "Your muscles ache." + if(prob(20)) + owner.take_organ_damage(1) + if(prob(4)) + owner << "Your stomach hurts." + if(prob(20)) + owner.adjustToxLoss(1) + if(5) + owner << "You feel something tearing its way out of your stomach..." + owner.adjustToxLoss(10) + +/obj/item/organ/internal/body_egg/alien_embryo/egg_process() if(!affected_mob) return if(loc != affected_mob) affected_mob.status_flags &= ~(XENO_HOST) @@ -51,38 +70,15 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds spawn(0) RefreshInfectionImage() - switch(stage) - if(2, 3) - if(prob(1)) - affected_mob.emote("sneeze") - if(prob(1)) - affected_mob.emote("cough") - if(prob(1)) - affected_mob << "Your throat feels sore." - if(prob(1)) - affected_mob << "Mucous runs down the back of your throat." - if(4) - if(prob(1)) - affected_mob.emote("sneeze") - if(prob(1)) - affected_mob.emote("cough") - if(prob(2)) - affected_mob << "Your muscles ache." - if(prob(20)) - affected_mob.take_organ_damage(1) - if(prob(2)) - affected_mob << "Your stomach hurts." - if(prob(20)) - affected_mob.adjustToxLoss(1) - affected_mob.updatehealth() - if(5) - affected_mob << "You feel something tearing its way out of your stomach..." - affected_mob.adjustToxLoss(10) - affected_mob.updatehealth() - if(prob(50)) - AttemptGrow() -/obj/item/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1) + if(stage == 5 && prob(50)) + //for(var/datum/surgery/S in owner.surgeries) + // if(S.location == "chest" && istype(S.get_surgery_step(), /datum/surgery_step/manipulate_organs)) + // AttemptGrow(0) + // return + AttemptGrow() + +/obj/item/organ/internal/body_egg/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1) var/list/candidates = get_candidates(BE_ALIEN,ALIEN_AFK_BRACKET,1) var/client/C = null @@ -123,7 +119,7 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds Proc: RefreshInfectionImage() Des: Removes the current icons located in the infected mob adds the current stage ----------------------------------------*/ -/obj/item/alien_embryo/proc/RefreshInfectionImage() +/obj/item/organ/internal/body_egg/proc/RefreshInfectionImage() RemoveInfectionImages() AddInfectionImages() @@ -131,7 +127,7 @@ Des: Removes the current icons located in the infected mob adds the current stag Proc: AddInfectionImages(C) Des: Adds the infection image to all aliens for this embryo ----------------------------------------*/ -/obj/item/alien_embryo/proc/AddInfectionImages() +/obj/item/organ/internal/body_egg/proc/AddInfectionImages() for(var/mob/living/carbon/alien/alien in player_list) if(alien.client) var/I = image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "infected[stage]") @@ -141,7 +137,7 @@ Des: Adds the infection image to all aliens for this embryo Proc: RemoveInfectionImage(C) Des: Removes all images from the mob infected by this embryo ----------------------------------------*/ -/obj/item/alien_embryo/proc/RemoveInfectionImages() +/obj/item/organ/internal/body_egg/proc/RemoveInfectionImages() for(var/mob/living/carbon/alien/alien in player_list) if(alien.client) for(var/image/I in alien.client.images) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 351c7387826..d8ad905221e 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -103,6 +103,8 @@ var/const/MAX_ACTIVE_TIME = 400 Attach(hit_atom) /obj/item/clothing/mask/facehugger/proc/Attach(M as mob) + if(!isliving(M)) + return 0 if( (!iscorgi(M) && !iscarbon(M)) || isalien(M)) return 0 if(attached) @@ -112,24 +114,26 @@ var/const/MAX_ACTIVE_TIME = 400 spawn(MAX_IMPREGNATION_TIME) attached = 0 - var/mob/living/L = M //just so I don't need to use : + if(M.get_int_organ(/obj/item/organ/internal/xenos/hivenode)) + return 0 + if(M.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo)) + return 0 - if(loc == L) return 0 - if(stat != CONSCIOUS) return 0 - if(locate(/obj/item/alien_embryo) in L) return 0 - if(!sterile) L.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage + if(loc == M) return 0 - L.visible_message("[src] leaps at [L]'s face!") + if(!sterile) M.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage - if(ishuman(L)) - var/mob/living/carbon/human/H = L + M.visible_message("[src] leaps at [M]'s face!") + + if(ishuman(M)) + var/mob/living/carbon/human/H = M if(H.head && H.head.flags & HEADCOVERSMOUTH) H.visible_message("[src] smashes against [H]'s [H.head]!") death() return 0 if(iscarbon(M)) - var/mob/living/carbon/target = L + var/mob/living/carbon/target = M if(target.wear_mask) if(prob(20)) return 0 @@ -144,7 +148,7 @@ var/const/MAX_ACTIVE_TIME = 400 src.loc = target target.equip_to_slot(src, slot_wear_mask,,0) - if(!sterile) L.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings + if(!sterile) M.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings else if (iscorgi(M)) var/mob/living/simple_animal/pet/corgi/C = M loc = C @@ -154,7 +158,7 @@ var/const/MAX_ACTIVE_TIME = 400 GoIdle() //so it doesn't jump the people that tear it off spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME)) - Impregnate(L) + Impregnate(M) return 1 @@ -234,7 +238,7 @@ var/const/MAX_ACTIVE_TIME = 400 return -/proc/CanHug(var/mob/M) +/proc/CanHug(var/mob/living/M) if(!M || !ismob(M)) return 0 @@ -244,6 +248,9 @@ var/const/MAX_ACTIVE_TIME = 400 if(iscorgi(M)) return 1 + if(M.get_int_organ(/obj/item/organ/internal/xenos/hivenode)) + return 0 + var/mob/living/carbon/C = M if(ishuman(C)) var/mob/living/carbon/human/H = C diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 5e6b142038c..0fb95f6c22d 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -17,10 +17,10 @@ // I'm using this for mechs giving MMIs HUDs now attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(istype(O, /obj/item/organ/brain/crystal )) + if(istype(O, /obj/item/organ/internal/brain/crystal )) user << " This brain is too malformed to be able to use with the [src]." return - if(istype(O,/obj/item/organ/brain) && !brainmob) //Time to stick a brain in it --NEO + if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO if(!O:brainmob) user << "\red You aren't sure where this brain came from, but you're pretty sure it's a useless brain." return @@ -36,7 +36,7 @@ living_mob_list += brainmob user.drop_item() - if(istype(O,/obj/item/organ/brain/xeno)) + if(istype(O,/obj/item/organ/internal/brain/xeno)) name = "Man-Machine Interface: Alien - [brainmob.real_name]" icon = 'icons/mob/alien.dmi' icon_state = "AlienMMI" @@ -67,10 +67,10 @@ else user << "You unlock and upend the MMI, spilling the brain onto the floor." if(alien) - var/obj/item/organ/brain/xeno/brain = new(user.loc) + var/obj/item/organ/internal/brain/xeno/brain = new(user.loc) dropbrain(brain,get_turf(user)) else - var/obj/item/organ/brain/brain = new(user.loc) + var/obj/item/organ/internal/brain/brain = new(user.loc) dropbrain(brain,get_turf(user)) icon = 'icons/obj/assemblies.dmi' icon_state = "mmi_empty" @@ -89,7 +89,7 @@ return //I made this proc as a way to have a brainmob be transferred to any created brain, and to solve the //problem i was having with alien/nonalien brain drops. - dropbrain(var/obj/item/organ/brain/brain, var/turf/dropspot) + dropbrain(var/obj/item/organ/internal/brain/brain, var/turf/dropspot) brainmob.container = null//Reset brainmob mmi var. brainmob.loc = brain//Throw mob into brain. respawnable_list += brainmob diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 10b8d580447..733f97df63a 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -1,4 +1,4 @@ -/obj/item/organ/brain +/obj/item/organ/internal/brain name = "brain" health = 400 //They need to live awhile longer than other organs. max_damage = 200 @@ -15,28 +15,27 @@ parent_organ = "head" vital = 1 -/obj/item/organ/brain/attack_self(mob/user as mob) +/obj/item/organ/internal/brain/attack_self(mob/user as mob) return //let's not have players taken out of the round as easily as a click, once you have their brain. -/obj/item/organ/brain/surgeryize() +/obj/item/organ/internal/brain/surgeryize() if(!owner) return owner.ear_damage = 0 //Yeah, didn't you...hear? The ears are totally inside the brain. owner.ear_deaf = 0 -/obj/item/organ/brain/xeno +/obj/item/organ/internal/brain/xeno name = "thinkpan" desc = "It looks kind of like an enormous wad of purple bubblegum." - icon = 'icons/mob/alien.dmi' - icon_state = "chitin" + icon_state = "brain-x-d" -/obj/item/organ/brain/New() +/obj/item/organ/internal/brain/New() ..() spawn(5) if(brainmob && brainmob.client) brainmob.client.screen.len = null //clear the hud -/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H) +/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H) name = "\the [H]'s [initial(src.name)]" brainmob = new(src) brainmob.name = H.real_name @@ -49,14 +48,14 @@ brainmob << "You feel slightly disoriented. That's normal when you're just a [initial(src.name)]." callHook("debrain", list(brainmob)) -/obj/item/organ/brain/examine(mob/user) // -- TLE +/obj/item/organ/internal/brain/examine(mob/user) // -- TLE ..(user) if(brainmob && brainmob.client)//if thar be a brain inside... the brain. user << "You can feel the small spark of life still left in this one." else user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.." -/obj/item/organ/brain/removed(var/mob/living/user) +/obj/item/organ/internal/brain/Remove(var/mob/living/user) if(!owner) return ..() // Probably a redundant removal; just bail name = "[owner.real_name]'s brain" @@ -68,13 +67,13 @@ owner.brain_op_stage = 4.0 - var/obj/item/organ/brain/B = src + var/obj/item/organ/internal/brain/B = src if(istype(B) && istype(owner)) B.transfer_identity(owner) ..() -/obj/item/organ/brain/replaced(var/mob/living/target) +/obj/item/organ/internal/brain/Insert(var/mob/living/target) if(target.key) target.ghostize() @@ -88,19 +87,22 @@ target.key = brainmob.key ..() -/obj/item/organ/brain/slime +/obj/item/organ/internal/brain/prepare_eat() + return // Too important to eat. + +/obj/item/organ/internal/brain/slime name = "slime core" desc = "A complex, organic knot of jelly and crystalline particles." icon = 'icons/mob/slimes.dmi' icon_state = "green slime extract" -/obj/item/organ/brain/golem +/obj/item/organ/internal/brain/golem name = "chem" desc = "A tightly furled roll of paper, covered with indecipherable runes." icon = 'icons/obj/wizard.dmi' icon_state = "scroll" -/obj/item/organ/brain/Destroy() //copypasted from MMIs. +/obj/item/organ/internal/brain/Destroy() //copypasted from MMIs. if(brainmob) qdel(brainmob) brainmob = null diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm index efcfac98624..efb1b8e8d87 100644 --- a/code/modules/mob/living/carbon/brain/death.dm +++ b/code/modules/mob/living/carbon/brain/death.dm @@ -36,7 +36,7 @@ if(container && istype(container, /obj/item/device/mmi)) qdel(container)//Gets rid of the MMI if there is one if(loc) - if(istype(loc,/obj/item/organ/brain)) + if(istype(loc,/obj/item/organ/internal/brain)) qdel(loc)//Gets rid of the brain item spawn(15) if(animation) qdel(animation) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 3179f32d3f7..7ad0adf9eb7 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1,4 +1,4 @@ -mob/living +/mob/living var/canEnterVentWith = "/obj/item/weapon/implant=0&/obj/item/clothing/mask/facehugger=0&/obj/item/device/radio/borg=0&/obj/machinery/camera=0" var/datum/middleClickOverride/middleClickOverride = null diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index bac4225bd9c..fd1560b6ace 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -13,9 +13,9 @@ playsound(src.loc, 'sound/effects/gib.ogg', 100, 1, 10) - for(var/obj/item/organ/I in internal_organs) + for(var/obj/item/organ/internal/I in internal_organs) if(istype(loc,/turf)) - I.removed() + I.Remove(src) spawn() I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 15761fb3421..26cd094ee3b 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -250,7 +250,7 @@ if(getBrainLoss() >= 60) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - if(species.show_ssd && (!species.has_organ["brain"] || brain_op_stage != 4) && stat != DEAD) + if(species.show_ssd && (!species.has_organ["brain"] || species.get_int_organ(/obj/item/organ/internal/brain)) && stat != DEAD) if(!key) msg += "[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.\n" else if(!client) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 38c7bb154f9..9a763813f06 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1294,7 +1294,7 @@ species.create_organs(src) if(!client || !key) //Don't boot out anyone already in the mob. - for (var/obj/item/organ/brain/H in world) + for (var/obj/item/organ/internal/brain/H in world) if(H.brainmob) if(H.brainmob.real_name == src.real_name) if(H.brainmob.mind) @@ -1310,14 +1310,14 @@ ..() /mob/living/carbon/human/proc/is_lung_ruptured() - var/obj/item/organ/lungs/L = internal_organs_by_name["lungs"] + var/obj/item/organ/internal/lungs/L = internal_organs_by_name["lungs"] if(!L) return 0 return L.is_bruised() /mob/living/carbon/human/proc/rupture_lung() - var/obj/item/organ/lungs/L = internal_organs_by_name["lungs"] + var/obj/item/organ/internal/lungs/L = internal_organs_by_name["lungs"] if(!L) return 0 diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index df69c687ec4..ec075fcf9f2 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -18,7 +18,7 @@ if(((100 - total_burn) < config.health_threshold_dead) && stat == DEAD) //100 is the magic human max health number ChangeToHusk() //BECAUSE NO ONE THOUGHT TO USE LIVING/VAR/MAXHEALTH I GUESS if(species.can_revive_by_healing) - var/obj/item/organ/brain/B = internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/B = internal_organs_by_name["brain"] if(B) if((health >= (config.health_threshold_dead / 100 * 75)) && stat == DEAD) update_revive() @@ -32,7 +32,7 @@ return 0 //godmode if(species && species.has_organ["brain"]) - var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] if(sponge) sponge.take_damage(amount, 1) brainloss = sponge.damage @@ -46,7 +46,7 @@ return 0 //godmode if(species && species.has_organ["brain"]) - var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] if(sponge) sponge.damage = min(max(amount, 0),(maxHealth*2)) brainloss = sponge.damage @@ -60,7 +60,7 @@ return 0 //godmode if(species && species.has_organ["brain"]) - var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] if(sponge) brainloss = min(sponge.damage,maxHealth*2) else diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index c83c35bd61b..0dc5851a8ee 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -1,5 +1,5 @@ /mob/living/carbon/human/proc/update_eyes() - var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name["eyes"] if(eyes) eyes.update_colour() regenerate_icons() @@ -24,7 +24,7 @@ bad_external_organs |= Ex //processing internal organs is pretty cheap, do that first. - for(var/obj/item/organ/I in internal_organs) + for(var/obj/item/organ/internal/I in internal_organs) I.process() //handle_stance() @@ -47,7 +47,7 @@ if (!lying && world.time - l_move_time < 15) //Moving around with fractured ribs won't do you any good if (E.is_broken() && E.internal_organs && E.internal_organs.len && prob(15)) - var/obj/item/organ/I = pick(E.internal_organs) + var/obj/item/organ/internal/I = pick(E.internal_organs) custom_pain("You feel broken bones moving in your [E.name]!", 1) I.take_damage(rand(3,5)) @@ -143,12 +143,12 @@ /mob/living/carbon/human/proc/handle_trace_chems() //New are added for reagents to random organs. for(var/datum/reagent/A in reagents.reagent_list) - var/obj/item/organ/O = pick(organs) + var/obj/item/organ/internal/O = pick(organs) O.trace_chemicals[A.name] = 100 /mob/living/carbon/human/proc/sync_organ_dna() var/list/all_bits = internal_organs|organs - for(var/obj/item/organ/O in all_bits) + for(var/obj/item/organ/internal/O in all_bits) O.set_dna(dna) /* diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index e728fb2db9d..9ea472ea764 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -111,7 +111,7 @@ if(!. || !I) return - var/obj/item/organ/O = I //Organs shouldn't be removed unless you call droplimb. + var/obj/item/organ/internal/O = I //Organs shouldn't be removed unless you call droplimb. if(istype(O) && O.owner == src) return diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 80640ce7bcf..92c2e7049de 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -892,7 +892,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc //Vision //god knows why this is here - var/obj/item/organ/vision + var/obj/item/organ/internal/vision if(species.vision_organ) vision = internal_organs_by_name[species.vision_organ] @@ -1207,7 +1207,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc /mob/living/carbon/human/proc/handle_heartbeat() var/client/C = src.client if(C && C.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref - var/obj/item/organ/heart/H = internal_organs_by_name["heart"] + var/obj/item/organ/internal/heart/H = internal_organs_by_name["heart"] if(!H) //H.status will runtime if there is no H (obviously) return diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm index 8d0e64d44af..a8254337c8d 100644 --- a/code/modules/mob/living/carbon/human/species/apollo.dm +++ b/code/modules/mob/living/carbon/human/species/apollo.dm @@ -28,11 +28,11 @@ body_temperature = 286 has_organ = list( - "heart" = /obj/item/organ/heart, - "brain" = /obj/item/organ/brain, - "eyes" = /obj/item/organ/eyes, - "appendix" = /obj/item/organ/appendix, - "antennae" = /obj/item/organ/wryn/hivenode + "heart" = /obj/item/organ/internal/heart, + "brain" = /obj/item/organ/internal/brain, + "eyes" = /obj/item/organ/internal/eyes, + "appendix" = /obj/item/organ/internal/appendix, + "antennae" = /obj/item/organ/internal/wryn/hivenode ) flags = IS_WHITELISTED | HAS_LIPS | NO_BREATHE | HAS_SKIN_COLOR | NO_SCAN | NO_SCAN | HIVEMIND @@ -47,7 +47,7 @@ /datum/species/wryn/handle_death(var/mob/living/carbon/human/H) for(var/mob/living/carbon/C in living_mob_list) - if(locate(/obj/item/organ/wryn/hivenode) in C.internal_organs) + if(locate(/obj/item/organ/internal/wryn/hivenode) in C.internal_organs) C << "Your antennae tingle as you are overcome with pain..." C << "It feels like part of you has died." @@ -64,7 +64,7 @@ if(p_loc == M.loc && p_loc_m == H.loc) qdel(H.internal_organs_by_name["antennae"]) H.remove_language("Wryn Hivemind") - new /obj/item/organ/wryn/hivenode(M.loc) + new /obj/item/organ/internal/wryn/hivenode(M.loc) M << "You hear a loud crunch as you mercilessly pull off [H]'s antennae." H << "You hear a loud crunch as your antennae is ripped off your head by [M]." H << "It's so quiet..." @@ -96,11 +96,11 @@ reagent_tag = PROCESS_ORG has_organ = list( - "heart" = /obj/item/organ/heart, - "crystalized brain" = /obj/item/organ/brain/crystal, - "eyes" = /obj/item/organ/eyes/luminescent_crystal, - "strange crystal" = /obj/item/organ/nucleation/strange_crystal, - "resonant crystal" = /obj/item/organ/nucleation/resonant_crystal + "heart" = /obj/item/organ/internal/heart, + "crystalized brain" = /obj/item/organ/internal/brain/crystal, + "eyes" = /obj/item/organ/internal/eyes/luminescent_crystal, + "strange crystal" = /obj/item/organ/internal/nucleation/strange_crystal, + "resonant crystal" = /obj/item/organ/internal/nucleation/resonant_crystal ) /datum/species/nucleation/handle_post_spawn(var/mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index aaa073879fb..c3930a8531a 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -15,7 +15,7 @@ has_organ = list( - "brain" = /obj/item/organ/brain/golem + "brain" = /obj/item/organ/internal/brain/golem ) /datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species/shadow.dm b/code/modules/mob/living/carbon/human/species/shadow.dm index 3727bd8de0a..7b7bf1c8096 100644 --- a/code/modules/mob/living/carbon/human/species/shadow.dm +++ b/code/modules/mob/living/carbon/human/species/shadow.dm @@ -13,7 +13,7 @@ blood_color = "#CCCCCC" flesh_color = "#AAAAAA" has_organ = list( - "brain" = /obj/item/organ/brain + "brain" = /obj/item/organ/internal/brain ) flags = NO_BLOOD | NO_BREATHE | NO_SCAN diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e679991ed2e..ad225fec69d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -96,13 +96,13 @@ // Determines the organs that the species spawns with and var/list/has_organ = list( // which required-organ checks are conducted. - "heart" = /obj/item/organ/heart, - "lungs" = /obj/item/organ/lungs, - "liver" = /obj/item/organ/liver, - "kidneys" = /obj/item/organ/kidneys, - "brain" = /obj/item/organ/brain, - "appendix" = /obj/item/organ/appendix, - "eyes" = /obj/item/organ/eyes + "heart" = /obj/item/organ/internal/heart, + "lungs" = /obj/item/organ/internal/lungs, + "liver" = /obj/item/organ/internal/liver, + "kidneys" = /obj/item/organ/internal/kidneys, + "brain" = /obj/item/organ/internal/brain, + "appendix" = /obj/item/organ/internal/appendix, + "eyes" = /obj/item/organ/internal/eyes ) var/vision_organ // If set, this organ is required for vision. Defaults to "eyes" if the species has them. var/list/has_limbs = list( @@ -133,7 +133,11 @@ /datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. for(var/obj/item/organ/organ in H.contents) - if((organ in H.organs) || (organ in H.internal_organs)) + if((organ in H.organs)) + qdel(organ) + + for(var/obj/item/organ/internal/organ in H.contents) + if((organ in H.internal_organs)) qdel(organ) if(H.organs) H.organs.Cut() @@ -155,6 +159,7 @@ for(var/organ in has_organ) var/organ_type = has_organ[organ] H.internal_organs_by_name[organ] = new organ_type(H,1) + internal_organs += new organ for(var/name in H.organs_by_name) H.organs |= H.organs_by_name[name] diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 1e85a1e2e52..96e834dd749 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -279,13 +279,13 @@ icon_template = 'icons/mob/human_races/r_armalis.dmi' has_organ = list( - "heart" = /obj/item/organ/heart, - "lungs" = /obj/item/organ/lungs, - "liver" = /obj/item/organ/liver, - "kidneys" = /obj/item/organ/kidneys, - "brain" = /obj/item/organ/brain, - "eyes" = /obj/item/organ/eyes, - "stack" = /obj/item/organ/stack/vox + "heart" = /obj/item/organ/internal/heart, + "lungs" = /obj/item/organ/internal/lungs, + "liver" = /obj/item/organ/internal/liver, + "kidneys" = /obj/item/organ/internal/kidneys, + "brain" = /obj/item/organ/internal/brain, + "eyes" = /obj/item/organ/internal/eyes, + "stack" = /obj/item/organ/internal/stack/vox ) /datum/species/kidan @@ -326,7 +326,7 @@ //ventcrawler = 1 //ventcrawling commented out has_organ = list( - "brain" = /obj/item/organ/brain/slime + "brain" = /obj/item/organ/internal/brain/slime ) /datum/species/grey @@ -407,12 +407,12 @@ reagent_tag = PROCESS_ORG has_organ = list( - "nutrient channel" = /obj/item/organ/diona/nutrients, - "neural strata" = /obj/item/organ/diona/strata, - "response node" = /obj/item/organ/diona/node, - "gas bladder" = /obj/item/organ/diona/bladder, - "polyp segment" = /obj/item/organ/diona/polyp, - "anchoring ligament" = /obj/item/organ/diona/ligament + "nutrient channel" = /obj/item/organ/internal/diona/nutrients, + "neural strata" = /obj/item/organ/internal/diona/strata, + "response node" = /obj/item/organ/internal/diona/node, + "gas bladder" = /obj/item/organ/internal/diona/bladder, + "polyp segment" = /obj/item/organ/internal/diona/polyp, + "anchoring ligament" = /obj/item/organ/internal/diona/ligament ) has_limbs = list( @@ -502,9 +502,9 @@ reagent_tag = PROCESS_SYN has_organ = list( - "brain" = /obj/item/organ/mmi_holder/posibrain, - "cell" = /obj/item/organ/cell, - "optics" = /obj/item/organ/optical_sensor + "brain" = /obj/item/organ/internal/mmi_holder/posibrain, + "cell" = /obj/item/organ/internal/cell, + "optics" = /obj/item/organ/internal/optical_sensor ) vision_organ = "optics" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index d21aea4bde2..d9b00be4126 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -245,7 +245,7 @@ var/global/list/damage_icon_parts = list() qdel(stand_icon) stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") var/icon_key = "" - var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name["eyes"] if(eyes) icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 33af21120de..8d6b835eb8b 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -9,6 +9,8 @@ if(..()) . = 1 + for(var/obj/item/organ/internal/O in internal_organs) + O.on_life() handle_changeling() handle_wetness() @@ -478,6 +480,13 @@ if(see_override) see_invisible = see_override + +/mob/living/carbon/handle_actions() + ..() + for(var/obj/item/I in internal_organs) + give_action_button(I, 1) + + /mob/living/carbon/handle_hud_icons() return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c426c3d8f4c..580dd5e035e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -924,3 +924,29 @@ //used in datum/reagents/reaction() proc /mob/living/proc/get_permeability_protection() return 0 + +/mob/living/proc/handle_actions() + //Pretty bad, i'd use picked/dropped instead but the parent calls in these are nonexistent + for(var/datum/action/A in actions) + if(A.CheckRemoval(src)) + A.Remove(src) + for(var/obj/item/I in src) + give_action_button(I, 1) + return + +/mob/living/proc/give_action_button(var/obj/item/I, recursive = 0) + if(I.action_button_name) + if(!I.action) + if(istype(I, /obj/item/organ/internal)) + I.action = new/datum/action/item_action/organ_action + else if(I.action_button_is_hands_free) + I.action = new/datum/action/item_action/hands_free + else + I.action = new/datum/action/item_action + I.action.name = I.action_button_name + I.action.target = I + I.action.Grant(src) + + if(recursive) + for(var/obj/item/T in I) + give_action_button(I, recursive - 1) diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index 7eb1e62090c..7666fabff93 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -245,7 +245,7 @@ user << "Internal prosthetics:" organ_found = null if(H.internal_organs.len) - for(var/obj/item/organ/O in H.internal_organs) + for(var/obj/item/organ/internal/O in H.internal_organs) if(!(O.status & ORGAN_ROBOT)) continue organ_found = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 7b8b7617431..b3bce76f8b3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -268,24 +268,38 @@ /mob/living/simple_animal/hostile/asteroid/hivelord/death() if(stat != DEAD) - new /obj/item/asteroid/hivelord_core(src.loc) + new /obj/item/organ/internal/hivelord_core(src.loc) ..() -/obj/item/asteroid/hivelord_core +/obj/item/organ/internal/hivelord_core name = "hivelord remains" desc = "All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly. Try not to think about what you're eating." icon = 'icons/obj/food/food.dmi' icon_state = "boiledrorocore" + slot = "hivecore" var/inert = 0 var/preserved = 0 -/obj/item/asteroid/hivelord_core/New() +/obj/item/organ/internal/hivelord_core/New() spawn(2400) if(!preserved) inert = 1 desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested." -/obj/item/asteroid/hivelord_core/attack(mob/living/M as mob, mob/living/user as mob) +/obj/item/organ/internal/hivelord_core/on_life() + ..() + if(owner) + owner.adjustBruteLoss(-1) + owner.adjustFireLoss(-1) + owner.adjustOxyLoss(-2) + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + var/datum/reagent/blood/B = locate() in H.vessel.reagent_list //Grab some blood + var/blood_volume = round(H.vessel.get_reagent_amount("blood")) + if(B && blood_volume < 560 && blood_volume) + B.volume += 2 // Fast blood regen + +/obj/item/organ/internal/hivelord_core/attack(mob/living/M as mob, mob/living/user as mob) if(ishuman(M)) var/mob/living/carbon/human/H = M if(inert) @@ -304,6 +318,9 @@ qdel(src) ..() +/obj/item/organ/internal/hivelord_core/prepare_eat() + return null + /mob/living/simple_animal/hostile/asteroid/hivelordbrood name = "hivelord brood" desc = "A fragment of the original Hivelord, rallying behind its original. One isn't much of a threat, but..." diff --git a/code/modules/mob/living/simple_animal/slaughter/slaughter.dm b/code/modules/mob/living/simple_animal/slaughter/slaughter.dm index f5edb4ac363..e03d2b74a01 100644 --- a/code/modules/mob/living/simple_animal/slaughter/slaughter.dm +++ b/code/modules/mob/living/simple_animal/slaughter/slaughter.dm @@ -93,7 +93,7 @@ new /obj/effect/decal/cleanable/blood (src.loc) new /obj/effect/gibspawner/generic(get_turf(src)) new /obj/effect/gibspawner/generic(get_turf(src)) - new /obj/item/weapon/demonheart(src.loc) + new /obj/item/organ/internal/heart/demonheart(src.loc) playsound(get_turf(src),'sound/misc/demon_dies.ogg', 200, 1) visible_message("[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.") for(var/mob/living/M in consumed_mobs) @@ -138,7 +138,7 @@ //////////The Loot //The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl -/obj/item/weapon/demonheart +/obj/item/organ/internal/heart/demonheart name = "demon heart" desc = "Still it beats furiously, emanating an aura of utter hate." icon = 'icons/obj/surgery.dmi' @@ -146,7 +146,7 @@ origin_tech = "combat=5;biotech=8" -/obj/item/weapon/demonheart/attack_self(mob/living/user) +/obj/item/organ/internal/heart/demonheart/attack_self(mob/living/user) user.visible_message("[user] raises [src] to their mouth and tears into it with their teeth!", \ "An unnatural hunger consumes you. You raise [src] to your mouth and devour it!") playsound(user, 'sound/misc/Demon_consume.ogg', 50, 1) @@ -159,8 +159,14 @@ user.bloodcrawl = BLOODCRAWL_EAT else user <<"...and you don't feel any different." - qdel(src) + user.drop_item() + src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E + +/obj/item/organ/internal/heart/demonheart/Remove(mob/living/carbon/M, special = 0) + ..() + if(M.mind) + M.bloodcrawl = 0 //Objectives and helpers. diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index a40316ecb98..d1d05c3b7ac 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -360,7 +360,7 @@ assailant.attack_log += text("\[[time_stamp()]\] Pressed fingers into the eyes of [affecting.name] ([affecting.ckey])") affecting.attack_log += text("\[[time_stamp()]\] Had fingers pressed into their eyes by [assailant.name] ([assailant.ckey])") msg_admin_attack("[key_name(assailant)] has pressed his fingers into [key_name(affecting)]'s eyes.") - var/obj/item/organ/eyes/eyes = affected.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = affected.internal_organs_by_name["eyes"] eyes.damage += rand(3,4) if (eyes.damage >= eyes.min_broken_damage) if(M.stat != 2) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 2e34a1a5b45..46ee6eae9a1 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -167,7 +167,7 @@ proc/isovermind(A) return 1 return 0 -proc/isorgan(A) +/proc/isorgan(A) if(istype(A, /obj/item/organ/external)) return 1 return 0 diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm deleted file mode 100644 index 46d7f01b0d9..00000000000 --- a/code/modules/organs/organ_internal.dm +++ /dev/null @@ -1,171 +0,0 @@ -#define PROCESS_ACCURACY 10 - -/**************************************************** - INTERNAL ORGANS DEFINES -****************************************************/ - - -// Brain is defined in brain_item.dm. -/obj/item/organ/heart - name = "heart" - icon_state = "heart-on" - organ_tag = "heart" - parent_organ = "chest" - dead_icon = "heart-off" - vital = 1 - -/obj/item/organ/lungs - name = "lungs" - icon_state = "lungs" - gender = PLURAL - organ_tag = "lungs" - parent_organ = "chest" - -/obj/item/organ/lungs/process() - ..() - - if(!owner) - return - - if (germ_level > INFECTION_LEVEL_ONE) - if(prob(5)) - owner.emote("cough") //respitory tract infection - - if(is_bruised()) - if(prob(2)) - spawn owner.custom_emote(1, "coughs up blood!") - owner.drip(10) - if(prob(4)) - spawn owner.custom_emote(1, "gasps for air!") - owner.losebreath += 5 - -/obj/item/organ/kidneys - name = "kidneys" - icon_state = "kidneys" - gender = PLURAL - organ_tag = "kidneys" - parent_organ = "groin" - -/obj/item/organ/kidneys/process() - - ..() - - if(!owner) - return - - // Coffee is really bad for you with busted kidneys. - // This should probably be expanded in some way, but fucked if I know - // what else kidneys can process in our reagent list. - var/datum/reagent/coffee = locate(/datum/reagent/drink/coffee) in owner.reagents.reagent_list - if(coffee) - if(is_bruised()) - owner.adjustToxLoss(0.1 * PROCESS_ACCURACY) - else if(is_broken()) - owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) - - -/obj/item/organ/eyes - name = "eyeballs" - icon_state = "eyes" - gender = PLURAL - organ_tag = "eyes" - parent_organ = "head" - var/list/eye_colour = list(0,0,0) - -/obj/item/organ/eyes/proc/update_colour() - if(!owner) - return - eye_colour = list( - owner.r_eyes ? owner.r_eyes : 0, - owner.g_eyes ? owner.g_eyes : 0, - owner.b_eyes ? owner.b_eyes : 0 - ) - -/obj/item/organ/eyes/surgeryize() - if(!owner) - return - owner.disabilities &= ~NEARSIGHTED - owner.sdisabilities &= ~BLIND - owner.eye_blurry = 0 - owner.eye_blind = 0 - -/obj/item/organ/liver - name = "liver" - icon_state = "liver" - organ_tag = "liver" - parent_organ = "groin" - -/obj/item/organ/liver/process() - - ..() - - if(!owner) - return - - if (germ_level > INFECTION_LEVEL_ONE) - if(prob(1)) - owner << "\red Your skin itches." - if (germ_level > INFECTION_LEVEL_TWO) - if(prob(1)) - spawn owner.vomit() - - if(owner.life_tick % PROCESS_ACCURACY == 0) - - //High toxins levels are dangerous - if(owner.getToxLoss() >= 60 && !owner.reagents.has_reagent("charcoal")) - //Healthy liver suffers on its own - if (src.damage < min_broken_damage) - src.damage += 0.2 * PROCESS_ACCURACY - //Damaged one shares the fun - else - var/obj/item/organ/O = pick(owner.internal_organs) - if(O) - O.damage += 0.2 * PROCESS_ACCURACY - - //Detox can heal small amounts of damage - if (src.damage && src.damage < src.min_bruised_damage && owner.reagents.has_reagent("charcoal")) - src.damage -= 0.2 * PROCESS_ACCURACY - - if(src.damage < 0) - src.damage = 0 - - // Get the effectiveness of the liver. - var/filter_effect = 3 - if(is_bruised()) - filter_effect -= 1 - if(is_broken()) - filter_effect -= 2 - - // Damaged liver means some chemicals are very dangerous - if(src.damage >= src.min_bruised_damage) - for(var/datum/reagent/R in owner.reagents.reagent_list) - // Ethanol and all drinks are bad - if(istype(R, /datum/reagent/ethanol)) - owner.adjustToxLoss(0.1 * PROCESS_ACCURACY) - - // Can't cope with toxins at all - for(var/toxin in list("toxin", "plasma", "sacid", "facid", "cyanide", "amanitin", "carpotoxin")) - if(owner.reagents.has_reagent(toxin)) - owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) - -/obj/item/organ/appendix - name = "appendix" - icon_state = "appendix" - organ_tag = "appendix" - parent_organ = "groin" - - -/* -/obj/item/organ/appendix/removed() - - if(owner) - var/inflamed = 0 - for(var/datum/disease/appendicitis/appendicitis in owner.viruses) - inflamed = 1 - appendicitis.cure() - owner.resistances += appendicitis - if(inflamed) - icon_state = "appendixinflamed" - name = "inflamed appendix" - ..() -*/ \ No newline at end of file diff --git a/code/modules/organs/subtypes/xenos.dm b/code/modules/organs/subtypes/xenos.dm deleted file mode 100644 index 7052237b163..00000000000 --- a/code/modules/organs/subtypes/xenos.dm +++ /dev/null @@ -1,66 +0,0 @@ -//XENOMORPH ORGANS -/obj/item/organ/xenos/eggsac - name = "egg sac" - parent_organ = "groin" - -/obj/item/organ/xenos/plasmavessel - name = "plasma vessel" - parent_organ = "chest" - var/stored_plasma = 0 - var/max_plasma = 500 - -/obj/item/organ/xenos/plasmavessel/queen - name = "bloated plasma vessel" - stored_plasma = 200 - max_plasma = 500 - -/obj/item/organ/xenos/plasmavessel/sentinel - stored_plasma = 100 - max_plasma = 250 - -/obj/item/organ/xenos/plasmavessel/hunter - name = "tiny plasma vessel" - stored_plasma = 100 - max_plasma = 150 - -/obj/item/organ/xenos/acidgland - name = "acid gland" - parent_organ = "head" - -/obj/item/organ/xenos/hivenode - name = "hive node" - parent_organ = "chest" - -/obj/item/organ/xenos/resinspinner - name = "resin spinner" - parent_organ = "head" - -/obj/item/organ/xenos - name = "xeno organ" - icon = 'icons/effects/blood.dmi' - desc = "It smells like an accident in a chemical factory." - -/obj/item/organ/xenos/eggsac - name = "egg sac" - icon_state = "xgibmid1" - organ_tag = "egg sac" - -/obj/item/organ/xenos/plasmavessel - name = "plasma vessel" - icon_state = "xgibdown1" - organ_tag = "plasma vessel" - -/obj/item/organ/xenos/acidgland - name = "acid gland" - icon_state = "xgibtorso" - organ_tag = "acid gland" - -/obj/item/organ/xenos/hivenode - name = "hive node" - icon_state = "xgibmid2" - organ_tag = "hive node" - -/obj/item/organ/xenos/resinspinner - name = "hive node" - icon_state = "xgibmid2" - organ_tag = "resin spinner" \ No newline at end of file diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 597a078b320..80c591d3cf9 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -182,7 +182,7 @@ continue // Where we're going, we don't need eyes. // Prosthetic eyes will also protect against this business. - var/obj/item/organ/eyes = l.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes = l.internal_organs_by_name["eyes"] if(!istype(eyes)) continue l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) ) diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index 8d6294b4156..ba18e879729 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -525,7 +525,7 @@ datum/reagent/oculine/on_mob_life(var/mob/living/M as mob) if(prob(80)) if(ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] if(istype(E)) E.damage = max(E.damage-1, 0) M.eye_blurry = max(M.eye_blurry-1 , 0) diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm index 0dd38567ccc..2d4a7bded8b 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -63,7 +63,7 @@ M:drowsyness = max(M:drowsyness, 30/sober_str) if(ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"] + var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"] if (istype(L)) L.take_damage(0.1, 1) H.adjustToxLoss(0.1) diff --git a/code/modules/reagents/oldchem/reagents/reagents_admin.dm b/code/modules/reagents/oldchem/reagents/reagents_admin.dm index dd9e73a96b1..ad4048c4efe 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_admin.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_admin.dm @@ -24,7 +24,7 @@ M.eye_blind = 0 if(ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] if(istype(E)) E.damage = max(E.damage-5 , 0) M.SetWeakened(0) diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm index 1a43b01f0e7..61f4b66255c 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -79,7 +79,7 @@ //Mitocholide is hard enough to get, it's probably fair to make this all internal organs for(var/name in H.internal_organs_by_name) - var/obj/item/organ/I = H.internal_organs_by_name[name] + var/obj/item/organ/internal/I = H.internal_organs_by_name[name] if(I.damage > 0) I.damage = max(I.damage-0.4, 0) ..() diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index c3d48fdb88e..227cd4618a4 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -984,7 +984,7 @@ name = "IPC Microbattery" id = "ipc_cell" build_type = MECHFAB - build_path = /obj/item/organ/cell + build_path = /obj/item/organ/internal/cell materials = list(MAT_METAL=2000, MAT_GLASS=750) construction_time = 200 category = list("Misc") @@ -993,7 +993,7 @@ name = "IPC Optical Sensor" id = "ipc_optics" build_type = MECHFAB - build_path = /obj/item/organ/optical_sensor + build_path = /obj/item/organ/internal/optical_sensor materials = list(MAT_METAL=1000, MAT_GLASS=2500) construction_time = 200 category = list("Misc") \ No newline at end of file diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm index 327a90170d9..7cafa8e6ab9 100644 --- a/code/modules/surgery/eye.dm +++ b/code/modules/surgery/eye.dm @@ -39,7 +39,7 @@ target.blinded += 1.5 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing [target]'s eyes wth \the [tool]!" , \ "\red Your hand slips, slicing [target]'s eyes wth \the [tool]!" ) @@ -69,7 +69,7 @@ target.op_stage.eyes = 2 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, damaging [target]'s eyes with \the [tool]!", \ "\red Your hand slips, damaging [target]'s eyes with \the [tool]!") @@ -100,7 +100,7 @@ target.op_stage.eyes = 3 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, stabbing \the [tool] into [target]'s eye!", \ "\red Your hand slips, stabbing \the [tool] into [target]'s eye!") @@ -136,7 +136,7 @@ target.op_stage.eyes = 0 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, searing [target]'s eyes with \the [tool]!", \ "\red Your hand slips, searing [target]'s eyes with \the [tool]!") diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index a6cd4553270..b8a8f072545 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -130,6 +130,7 @@ affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) user.drop_item() affected.hidden = tool + target.internal_organs += tool tool.loc = target affected.cavity = 0 diff --git a/code/modules/organs/blood.dm b/code/modules/surgery/organs/blood.dm similarity index 99% rename from code/modules/organs/blood.dm rename to code/modules/surgery/organs/blood.dm index f3f9c48b614..0e909ec5b18 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/surgery/organs/blood.dm @@ -87,7 +87,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 // Damaged heart virtually reduces the blood volume, as the blood isn't // being pumped properly anymore. - var/obj/item/organ/heart/heart = internal_organs_by_name["heart"] + var/obj/item/organ/internal/heart/heart = internal_organs_by_name["heart"] if(heart) if(heart.damage > 1 && heart.damage < heart.min_bruised_damage) diff --git a/code/modules/surgery/organs/body_egg.dm b/code/modules/surgery/organs/body_egg.dm new file mode 100644 index 00000000000..3a8580cf04f --- /dev/null +++ b/code/modules/surgery/organs/body_egg.dm @@ -0,0 +1,53 @@ +/obj/item/organ/internal/body_egg + name = "body egg" + desc = "All slimy and yuck." + icon_state = "innards" + origin_tech = "biotech=5" + parent_organ = "chest" + slot = "parasite_egg" + +/obj/item/organ/internal/body_egg/on_find(mob/living/finder) + ..() + finder << "You found an unknown alien organism in [owner]'s [parent_organ]!" + +/obj/item/organ/internal/body_egg/New(loc) + if(iscarbon(loc)) + src.Insert(loc) + return ..() + +/obj/item/organ/internal/body_egg/Insert(var/mob/living/carbon/M, special = 0) + ..() + owner.status_flags |= XENO_HOST + processing_objects.Add(src) + owner.med_hud_set_status() + spawn(0) + AddInfectionImages(owner) + +/obj/item/organ/internal/body_egg/Remove(var/mob/living/carbon/M, special = 0) + processing_objects.Remove(src) + if(owner) + owner.status_flags &= ~(XENO_HOST) + owner.med_hud_set_status() + spawn(0) + RemoveInfectionImages(owner) + ..() + +/obj/item/organ/internal/body_egg/process() + if(!owner) return + if(!(src in owner.internal_organs)) + Remove(owner) + return + egg_process() + +/obj/item/organ/internal/body_egg/proc/egg_process() + return + +/obj/item/organ/internal/body_egg/proc/RefreshInfectionImage() + RemoveInfectionImages() + AddInfectionImages() + +/obj/item/organ/internal/body_egg/proc/AddInfectionImages() + return + +/obj/item/organ/internal/body_egg/proc/RemoveInfectionImages() + return \ No newline at end of file diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm new file mode 100644 index 00000000000..755ca5e4417 --- /dev/null +++ b/code/modules/surgery/organs/helpers.dm @@ -0,0 +1,35 @@ +/mob/proc/get_int_organ(typepath) //int stands for internal + return + +/mob/proc/get_organs_zone(zone) + return + +/mob/proc/get_organ_slot(slot) //is it a brain, is it a brain_tumor? + return + +/mob/living/carbon/get_int_organ(typepath) + return (locate(typepath) in internal_organs) + + +/mob/living/carbon/get_organs_zone(zone, var/subzones = 0) + var/list/returnorg = list() + if(subzones) + // Include subzones - groin for chest, eyes and mouth for head + //Fethas note:We have check_zone, i may need to remove the below + if(zone == "head") + returnorg = get_organs_zone("eyes") + get_organs_zone("mouth") + if(zone == "chest") + returnorg = get_organs_zone("groin") + + for(var/obj/item/organ/internal/O in internal_organs) + if(parent_organ == O.parent_organ) + returnorg += O + return returnorg + +/mob/living/carbon/get_organ_slot(slot) + for(var/obj/item/organ/internal/O in internal_organs) + if(slot == O.slot) + return O + +/proc/is_int_organ(atom/A) + return istype(A, /obj/item/organ/internal) \ No newline at end of file diff --git a/code/modules/organs/organ.dm b/code/modules/surgery/organs/organ.dm similarity index 87% rename from code/modules/organs/organ.dm rename to code/modules/surgery/organs/organ.dm index e7d4fd89eba..9ecda01a4e3 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -4,7 +4,7 @@ var/list/organ_cache = list() name = "organ" icon = 'icons/obj/surgery.dmi' var/dead_icon - var/mob/living/carbon/human/owner = null + var/mob/living/carbon/owner = null var/status = 0 var/vital //Lose a vital limb, die immediately. var/damage = 0 // amount of damage to the organ @@ -27,7 +27,7 @@ var/list/organ_cache = list() /obj/item/organ/Destroy() if(!owner) return ..() - +/* if(istype(owner, /mob/living/carbon)) if((owner.internal_organs) && (src in owner.internal_organs)) owner.internal_organs -= src @@ -38,17 +38,12 @@ var/list/organ_cache = list() owner.organs -= src if((owner.organs_by_name) && (src in owner.organs_by_name)) owner.organs_by_name -= src +*/ if(src in owner.contents) owner.contents -= src return ..() -/obj/item/organ/attack_self(mob/user as mob) - - // Convert it to an edible form, yum yum. - if(!robotic && user.a_intent == I_HARM) - bitten(user) - return /obj/item/organ/proc/update_health() return @@ -260,11 +255,6 @@ var/list/organ_cache = list() if(!istype(owner)) return - owner.internal_organs_by_name[organ_tag] = null - owner.internal_organs_by_name -= organ_tag - owner.internal_organs_by_name -= null - owner.internal_organs -= src - var/obj/item/organ/external/affected = owner.get_organ(parent_organ) if(affected) affected.internal_organs -= src @@ -289,41 +279,12 @@ var/list/organ_cache = list() owner = target processing_objects -= src - target.internal_organs |= src + //target.internal_organs |= src affected.internal_organs |= src - target.internal_organs_by_name[organ_tag] = src + //target.internal_organs_by_name[organ_tag] = src src.loc = target if(robotic) status |= ORGAN_ROBOT -/obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target) - - // Apply our eye colour to the target. - if(istype(target) && eye_colour) - target.r_eyes = eye_colour[1] - target.g_eyes = eye_colour[2] - target.b_eyes = eye_colour[3] - target.update_eyes() - ..() - -/obj/item/organ/proc/bitten(mob/user) - - if(robotic) - return - - user << "\blue You take a bite out of \the [src]." - - user.unEquip(src) - var/obj/item/weapon/reagent_containers/food/snacks/organ/O = new(get_turf(src)) - O.name = name - O.icon_state = dead_icon ? dead_icon : icon_state - - if(fingerprints) O.fingerprints = fingerprints.Copy() - if(fingerprintshidden) O.fingerprintshidden = fingerprintshidden.Copy() - if(fingerprintslast) O.fingerprintslast = fingerprintslast - - user.put_in_active_hand(O) - qdel(src) - /obj/item/organ/proc/surgeryize() return \ No newline at end of file diff --git a/code/modules/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm similarity index 98% rename from code/modules/organs/organ_external.dm rename to code/modules/surgery/organs/organ_external.dm index 1c6ca1d176b..7810f5a51e3 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -70,7 +70,7 @@ qdel(C) if(internal_organs) - for(var/obj/item/organ/O in internal_organs) + for(var/obj/item/organ/internal/O in internal_organs) qdel(O) return ..() @@ -161,7 +161,7 @@ if(internal_organs && (brute_dam >= max_damage || (((sharp && brute >= 5) || brute >= 10) && prob(5)))) // Damage an internal organ if(internal_organs && internal_organs.len) - var/obj/item/organ/I = pick(internal_organs) + var/obj/item/organ/internal/I = pick(internal_organs) I.take_damage(brute / 2) brute -= brute / 2 @@ -280,7 +280,7 @@ This function completely restores a damaged organ to perfect condition. burn_dam = 0 // handle internal organs - for(var/obj/item/organ/current_organ in internal_organs) + for(var/obj/item/organ/internal/current_organ in internal_organs) current_organ.rejuvenate() @@ -448,8 +448,8 @@ Note that amputating the affected organ does in fact remove the infection from t if(germ_level >= INFECTION_LEVEL_TWO) //spread the infection to internal organs - var/obj/item/organ/target_organ = null //make internal organs become infected one at a time instead of all at once - for (var/obj/item/organ/I in internal_organs) + var/obj/item/organ/internal/target_organ = null //make internal organs become infected one at a time instead of all at once + for (var/obj/item/organ/internal/I in internal_organs) if (I.germ_level > 0 && I.germ_level < min(germ_level, INFECTION_LEVEL_TWO)) //once the organ reaches whatever we can give it, or level two, switch to a different one if (!target_organ || I.germ_level > target_organ.germ_level) //choose the organ with the highest germ_level target_organ = I @@ -457,7 +457,7 @@ Note that amputating the affected organ does in fact remove the infection from t if (!target_organ) //figure out which organs we can spread germs to and pick one at random var/list/candidate_organs = list() - for (var/obj/item/organ/I in internal_organs) + for (var/obj/item/organ/internal/I in internal_organs) if (I.germ_level < germ_level) candidate_organs |= I if (candidate_organs.len) diff --git a/code/modules/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm similarity index 96% rename from code/modules/organs/organ_icon.dm rename to code/modules/surgery/organs/organ_icon.dm index e3e95e78df3..94b0aa5b95c 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -33,7 +33,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human) ..() - var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name["eyes"] if(eyes) eyes.update_colour() /obj/item/organ/external/head/removed() @@ -48,7 +48,7 @@ var/global/list/limb_icon_cache = list() return if(species.has_organ["eyes"]) - var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name["eyes"] if(species.eyes) var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes) if(eyes) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm new file mode 100644 index 00000000000..5a26ed82447 --- /dev/null +++ b/code/modules/surgery/organs/organ_internal.dm @@ -0,0 +1,350 @@ +#define PROCESS_ACCURACY 10 + +/**************************************************** + INTERNAL ORGANS DEFINES +****************************************************/ +/obj/item/organ/internal + origin_tech = "biotech=2" + force = 1 + w_class = 2 + throwforce = 0 + organ_tag = "guts" + parent_organ = "chest" //aka the zone + var/slot + vital = 0 + var/organ_action_name = null + +/obj/item/organ/internal/proc/Insert(mob/living/carbon/M, special = 0)//insert the thing into the slot + if(!iscarbon(M) || owner == M) + return + + var/obj/item/organ/internal/replaced = M.get_organ_slot(slot) + if(replaced) + replaced.Remove(M, special = 1) + + owner = M + M.internal_organs |= src + M.internal_organs_by_name[organ_tag] = src + loc = null + if(organ_action_name) + action_button_name = organ_action_name + +/obj/item/organ/internal/proc/Remove(mob/living/carbon/M, special = 0) + owner = null + if(M) + M.internal_organs_by_name[organ_tag] = null + M.internal_organs_by_name -= organ_tag + M.internal_organs_by_name -= null + M.internal_organs -= src + + loc = get_turf(M) + processing_objects |= src + var/datum/reagent/blood/organ_blood + if(reagents) organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list + if(!organ_blood || !organ_blood.data["blood_DNA"]) + M.vessel.trans_to(src, 5, 1, 1) + + if(vital && !special) + //if(user) + // user.attack_log += "\[[time_stamp()]\] removed a vital organ ([src]) from [key_name(M)] (INTENT: [uppertext(user.a_intent)])" + // M.attack_log += "\[[time_stamp()]\] had a vital organ ([src]) removed by [key_name(user)] (INTENT: [uppertext(user.a_intent)])" + // msg_admin_attack("[key_name_admin(user)] removed a vital organ ([src]) from [key_name_admin(M)]") + M.death() + + + if(organ_action_name) + action_button_name = null + +/obj/item/organ/internal/proc/on_find(mob/living/finder) + return + +/obj/item/organ/internal/proc/on_life() + return + + +/obj/item/organ/internal/proc/prepare_eat() + var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new + S.name = name + S.desc = desc + S.icon = icon + S.icon_state = icon_state + S.origin_tech = origin_tech + S.w_class = w_class + + return S + +/obj/item/weapon/reagent_containers/food/snacks/organ + name = "appendix" + icon_state = "appendix" + icon = 'icons/obj/surgery.dmi' + + reagents.add_reagent("nutriment",5) + + +/obj/item/organ/internal/Destroy() + if(owner) + Remove(owner, 1) + return + +/obj/item/organ/internal/attack(mob/living/carbon/M, mob/user) + if(robotic) + return + + if(M == user && ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/weapon/reagent_containers/food/snacks/S = prepare_eat() + if(S) + H.unEquip() + H.put_in_active_hand(S) + if(fingerprints) S.fingerprints = fingerprints.Copy() + if(fingerprintshidden) S.fingerprintshidden = fingerprintshidden.Copy() + if(fingerprintslast) S.fingerprintslast = fingerprintslast + S.attack(H, H) + qdel(src) + else + ..() + + +///THE ORGANS + +// Brain is defined in brain_item.dm. +/obj/item/organ/internal/heart + name = "heart" + icon_state = "heart-on" + organ_tag = "heart" + parent_organ = "chest" + slot = "heart" + origin_tech = "biotech=3" + vital = 1 + var/beating + +/obj/item/organ/internal/heart/update_icon() + if(beating) + icon_state = "heart-on" + else + icon_state = "heart-off" + +/obj/item/organ/internal/heart/Insert(mob/living/carbon/M, special = 0) + ..() + beating = 1 + update_icon() + +/obj/item/organ/internal/heart/Remove(mob/living/carbon/M, special = 0) + ..() + spawn(120) + beating = 0 + update_icon() + +/obj/item/organ/internal/heart/prepare_eat() + var/obj/S = ..() + S.icon_state = "heart-off" + return S + +/obj/item/organ/internal/lungs + name = "lungs" + icon_state = "lungs" + gender = PLURAL + organ_tag = "lungs" + parent_organ = "chest" + slot = "lungs" + origin_tech = "biotech=2" + +/obj/item/organ/internal/lungs/process()///Fethas note, Should this be organ on life? + ..() +//to_do per fethas: Could we handle some of the species breathing in here? + + if(!owner) + return + + if (germ_level > INFECTION_LEVEL_ONE) + if(prob(5)) + owner.emote("cough") //respitory tract infection + + if(is_bruised()) + if(prob(2)) + spawn owner.custom_emote(1, "coughs up blood!") + owner.drip(10) + if(prob(4)) + spawn owner.custom_emote(1, "gasps for air!") + owner.losebreath += 5 + +/obj/item/organ/internal/kidneys + name = "kidneys" + icon_state = "kidneys" + gender = PLURAL + organ_tag = "kidneys" + parent_organ = "groin" + slot = "kidneys" + origin_tech = "biotech=2" + + +/obj/item/organ/internal/kidneys/process() + + ..() + + if(!owner) + return + + // Coffee is really bad for you with busted kidneys. + // This should probably be expanded in some way, but fucked if I know + // what else kidneys can process in our reagent list. + var/datum/reagent/coffee = locate(/datum/reagent/drink/coffee) in owner.reagents.reagent_list + if(coffee) + if(is_bruised()) + owner.adjustToxLoss(0.1 * PROCESS_ACCURACY) + else if(is_broken()) + owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) + + +/obj/item/organ/internal/eyes + name = "eyeballs" + icon_state = "eyes" + gender = PLURAL + organ_tag = "eyes" + parent_organ = "head" + slot = "eyes" + origin_tech = "biotech=2" + var/list/eye_colour = list(0,0,0) + +/obj/item/organ/internal/eyes/proc/update_colour() + if(!owner) + return + eye_colour = list( + owner.r_eyes ? owner.r_eyes : 0, + owner.g_eyes ? owner.g_eyes : 0, + owner.b_eyes ? owner.b_eyes : 0 + ) + +/obj/item/organ/internal/eyes/Insert(mob/living/carbon/M, special = 0) + ..() + // Apply our eye colour to the target. + if(istype(M) && eye_colour) + M.r_eyes = eye_colour[1] + M.g_eyes = eye_colour[2] + M.b_eyes = eye_colour[3] + M.update_eyes() + + +/obj/item/organ/internal/eyes/surgeryize() + if(!owner) + return + owner.disabilities &= ~NEARSIGHTED + owner.sdisabilities &= ~BLIND + owner.eye_blurry = 0 + owner.eye_blind = 0 + +/obj/item/organ/internal/liver + name = "liver" + icon_state = "liver" + organ_tag = "liver" + parent_organ = "groin" + slot = "liver" + origin_tech = "biotech=1" + +/obj/item/organ/internal/liver/process() + + ..() + + if(!owner) + return + + if (germ_level > INFECTION_LEVEL_ONE) + if(prob(1)) + owner << "\red Your skin itches." + if (germ_level > INFECTION_LEVEL_TWO) + if(prob(1)) + spawn owner.vomit() + + if(owner.life_tick % PROCESS_ACCURACY == 0) + + //High toxins levels are dangerous + if(owner.getToxLoss() >= 60 && !owner.reagents.has_reagent("charcoal")) + //Healthy liver suffers on its own + if (src.damage < min_broken_damage) + src.damage += 0.2 * PROCESS_ACCURACY + //Damaged one shares the fun + else + var/obj/item/organ/O = pick(owner.internal_organs) + if(O) + O.damage += 0.2 * PROCESS_ACCURACY + + //Detox can heal small amounts of damage + if (src.damage && src.damage < src.min_bruised_damage && owner.reagents.has_reagent("charcoal")) + src.damage -= 0.2 * PROCESS_ACCURACY + + if(src.damage < 0) + src.damage = 0 + + // Get the effectiveness of the liver. + var/filter_effect = 3 + if(is_bruised()) + filter_effect -= 1 + if(is_broken()) + filter_effect -= 2 + + // Damaged liver means some chemicals are very dangerous + if(src.damage >= src.min_bruised_damage) + for(var/datum/reagent/R in owner.reagents.reagent_list) + // Ethanol and all drinks are bad + if(istype(R, /datum/reagent/ethanol)) + owner.adjustToxLoss(0.1 * PROCESS_ACCURACY) + + // Can't cope with toxins at all + for(var/toxin in list("toxin", "plasma", "sacid", "facid", "cyanide", "amanitin", "carpotoxin")) + if(owner.reagents.has_reagent(toxin)) + owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) + +/obj/item/organ/internal/appendix + name = "appendix" + icon_state = "appendix" + organ_tag = "appendix" + parent_organ = "groin" + slot = "appendix" + origin_tech = "biotech=1" + +/* +/obj/item/organ/appendix/removed() + + if(owner) + var/inflamed = 0 + for(var/datum/disease/appendicitis/appendicitis in owner.viruses) + inflamed = 1 + appendicitis.cure() + owner.resistances += appendicitis + if(inflamed) + icon_state = "appendixinflamed" + name = "inflamed appendix" + ..() +*/ + +//shadowling brain tumor +/obj/item/organ/internal/shadowtumor + name = "black tumor" + desc = "A tiny black mass with red tendrils trailing from it. It seems to shrivel in the light." + icon_state = "blacktumor" + origin_tech = "biotech=4" + w_class = 1 + organ_tag = "blacktumor" + parent_organ = "head" + slot = "brain_tumor" + health = 3 + +/obj/item/organ/internal/shadowtumor/New() + ..() + processing_object.Add(src) + +/obj/item/organ/internal/shadowtumor/Destroy() + processing_object.Remove(src) + ..() + +/obj/item/organ/internal/shadowtumor/process() + if(isturf(loc)) + var/turf/T = loc + var/light_count = T.get_lumcount() + if(light_count > 4 && health > 0) //Die in the light + health-- + else if(light_count < 2 && health < 3) //Heal in the dark + health++ + if(health <= 0) + visible_message("[src] collapses in on itself!") + qdel(src) \ No newline at end of file diff --git a/code/modules/organs/organ_stump.dm b/code/modules/surgery/organs/organ_stump.dm similarity index 100% rename from code/modules/organs/organ_stump.dm rename to code/modules/surgery/organs/organ_stump.dm diff --git a/code/modules/organs/pain.dm b/code/modules/surgery/organs/pain.dm similarity index 94% rename from code/modules/organs/pain.dm rename to code/modules/surgery/organs/pain.dm index ebfc3442d54..76a91d8a7c2 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/surgery/organs/pain.dm @@ -118,8 +118,8 @@ mob/living/carbon/human/proc/handle_pain() // Damage to internal organs hurts a lot. - for(var/obj/item/organ/I in internal_organs) - if(istype(I, /obj/item/organ/brain)) //the brain has no pain receptors, and brain damage is meant to be a stealthy damage type. + for(var/obj/item/organ/internal/I in internal_organs) + if(istype(I, /obj/item/organ/internal/brain)) //the brain has no pain receptors, and brain damage is meant to be a stealthy damage type. continue if(I.damage > 2) if(prob(2)) var/obj/item/organ/external/parent = get_organ(I.parent_organ) diff --git a/code/modules/organs/robolimbs.dm b/code/modules/surgery/organs/robolimbs.dm similarity index 100% rename from code/modules/organs/robolimbs.dm rename to code/modules/surgery/organs/robolimbs.dm diff --git a/code/modules/organs/skeleton.dm b/code/modules/surgery/organs/skeleton.dm similarity index 100% rename from code/modules/organs/skeleton.dm rename to code/modules/surgery/organs/skeleton.dm diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/surgery/organs/subtypes/diona.dm similarity index 81% rename from code/modules/organs/subtypes/diona.dm rename to code/modules/surgery/organs/subtypes/diona.dm index e41c8ce3c62..60875eff479 100644 --- a/code/modules/organs/subtypes/diona.dm +++ b/code/modules/surgery/organs/subtypes/diona.dm @@ -149,35 +149,62 @@ /obj/item/organ/diona/process() return -/obj/item/organ/diona/strata +/obj/item/organ/internal/diona/strata name = "neural strata" - parent_organ = "chest" - -/obj/item/organ/diona/bladder - name = "gas bladder" - parent_organ = "head" - -/obj/item/organ/diona/polyp - name = "polyp segment" - parent_organ = "groin" - -/obj/item/organ/diona/ligament - name = "anchoring ligament" - parent_organ = "groin" - -/obj/item/organ/diona/node - name = "receptor node" - parent_organ = "head" - -/obj/item/organ/diona/nutrients - name = "nutrient vessel" - parent_organ = "chest" - -/obj/item/organ/diona - name = "diona nymph" icon = 'icons/obj/objects.dmi' icon_state = "nymph" organ_tag = "special" // Turns into a nymph instantly, no transplanting possible. + origin_tech = "biotech=3" + parent_organ = "chest" + slot = "heart" + +/obj/item/organ/internal/diona/bladder + name = "gas bladder" + parent_organ = "head" + icon = 'icons/obj/objects.dmi' + icon_state = "nymph" + organ_tag = "special" // Turns into a nymph instantly, no transplanting possible. + origin_tech = "biotech=3" + slot = "brain" + +/obj/item/organ/internal/diona/polyp + name = "polyp segment" + icon = 'icons/obj/objects.dmi' + icon_state = "nymph" + organ_tag = "special" // Turns into a nymph instantly, no transplanting possible. + origin_tech = "biotech=3" + parent_organ = "groin" + slot = "kidneys" + +/obj/item/organ/internal/diona/ligament + name = "anchoring ligament" + icon = 'icons/obj/objects.dmi' + icon_state = "nymph" + organ_tag = "special" // Turns into a nymph instantly, no transplanting possible. + origin_tech = "biotech=3" + parent_organ = "groin" + slot = "appendix" + +/obj/item/organ/internal/diona/node + name = "receptor node" + organ_tag = "receptor node" + icon = 'icons/mob/alien.dmi' + icon_state = "claw" + origin_tech = "biotech=3" + parent_organ = "head" + slot = "eyes" + +//TODO:Make absorb rads on insert + +/obj/item/organ/internal/diona/nutrients + name = "nutrient vessel" + parent_organ = "chest" + organ_tag = "nutrient vessel" + icon = 'icons/mob/alien.dmi' + icon_state = "claw" + slot = "nutri_vessel" + +//TODO:Make absorb light on insert. /*/obj/item/organ/diona/removed(var/mob/living/user) var/mob/living/carbon/human/H = owner @@ -186,23 +213,3 @@ H.death() if(prob(50) && spawn_diona_nymph_from_organ(src)) qdel(src) */ - -// These are different to the standard diona organs as they have a purpose in other -// species (absorbing radiation and light respectively) -/obj/item/organ/diona/nutrients - name = "nutrient vessel" - organ_tag = "nutrient vessel" - icon = 'icons/mob/alien.dmi' - icon_state = "claw" - -/obj/item/organ/diona/nutrients/removed() - return - -/obj/item/organ/diona/node - name = "receptor node" - organ_tag = "receptor node" - icon = 'icons/mob/alien.dmi' - icon_state = "claw" - -/obj/item/organ/diona/node/removed() - return diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm similarity index 84% rename from code/modules/organs/subtypes/machine.dm rename to code/modules/surgery/organs/subtypes/machine.dm index 3e651613164..b0de4619003 100644 --- a/code/modules/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -53,48 +53,51 @@ robotize("Morpheus Cyberkinetics") ..() -/obj/item/organ/cell +/obj/item/organ/internal/cell name = "microbattery" desc = "A small, powerful cell for use in fully prosthetic bodies." icon = 'icons/obj/power.dmi' icon_state = "scell" organ_tag = "cell" parent_organ = "chest" + slot = "heart" vital = 1 -/obj/item/organ/cell/New() +/obj/item/organ/internal/cell/New() robotize() ..() -/obj/item/organ/cell/replaced() +/obj/item/organ/internal/cell/Insert() ..() // This is very ghetto way of rebooting an IPC. TODO better way. if(owner && owner.stat == DEAD) owner.stat = CONSCIOUS owner.visible_message("\The [owner] twitches visibly!") -/obj/item/organ/optical_sensor +/obj/item/organ/internal/optical_sensor name = "optical sensor" organ_tag = "optics" parent_organ = "head" icon = 'icons/obj/robot_component.dmi' icon_state = "camera" - dead_icon = "camera_broken" + slot = "eyes" +// dead_icon = "camera_broken" -/obj/item/organ/optical_sensor/New() +/obj/item/organ/internal/optical_sensor/New() robotize() ..() // Used for an MMI or posibrain being installed into a human. -/obj/item/organ/mmi_holder +/obj/item/organ/internal/mmi_holder name = "brain" organ_tag = "brain" parent_organ = "chest" vital = 1 max_damage = 200 + slot = "brain" var/obj/item/device/mmi/stored_mmi -/obj/item/organ/mmi_holder/proc/update_from_mmi() +/obj/item/organ/internal/mmi_holder/proc/update_from_mmi() if(!stored_mmi) return name = stored_mmi.name @@ -102,7 +105,7 @@ icon = stored_mmi.icon icon_state = stored_mmi.icon_state -/obj/item/organ/mmi_holder/removed(var/mob/living/user) +/obj/item/organ/internal/mmi_holder/Remove(var/mob/living/user) if(stored_mmi) stored_mmi.loc = get_turf(src) if(owner.mind) @@ -114,7 +117,7 @@ holder_mob.unEquip(src) qdel(src) -/obj/item/organ/mmi_holder/New() +/obj/item/organ/internal/mmi_holder/New() ..() // This is very ghetto way of rebooting an IPC. TODO better way. spawn(1) @@ -122,7 +125,7 @@ owner.stat = CONSCIOUS owner.visible_message("\The [owner] twitches visibly!") -/obj/item/organ/mmi_holder/posibrain/New() +/obj/item/organ/internal/mmi_holder/posibrain/New() robotize() stored_mmi = new /obj/item/device/mmi/posibrain(src) ..() diff --git a/code/modules/organs/subtypes/misc.dm b/code/modules/surgery/organs/subtypes/misc.dm similarity index 81% rename from code/modules/organs/subtypes/misc.dm rename to code/modules/surgery/organs/subtypes/misc.dm index a2febc6d1e4..adab834919e 100644 --- a/code/modules/organs/subtypes/misc.dm +++ b/code/modules/surgery/organs/subtypes/misc.dm @@ -1,10 +1,14 @@ //CORTICAL BORER ORGANS. -/obj/item/organ/borer +/obj/item/organ/internal/borer name = "cortical borer" + icon = 'icons/obj/objects.dmi' + icon_state = "borer" parent_organ = "head" + organ_tag = "brain" + slot = "borer" vital = 1 -/obj/item/organ/borer/process() +/obj/item/organ/internal/borer/process() // Borer husks regenerate health, feel no pain, and are resistant to stuns and brainloss. for(var/chem in list("saline", "sailcylic", "meth", "mannitol")) @@ -26,14 +30,7 @@ goo.basecolor = "#412464" goo.update_icon() -/obj/item/organ/borer - name = "cortical borer" - icon = 'icons/obj/objects.dmi' - icon_state = "borer" - organ_tag = "brain" - desc = "A disgusting space slug." - -/obj/item/organ/borer/removed(var/mob/living/user) +/obj/item/organ/internal/borer/Remove(var/mob/living/user) ..() @@ -46,22 +43,23 @@ qdel(src) //VOX ORGANS. -/obj/item/organ/stack +/obj/item/organ/internal/stack name = "cortical stack" icon_state = "brain-prosthetic" parent_organ = "head" organ_tag = "stack" + slot = "brain" robotic = 2 vital = 1 var/backup_time = 0 var/datum/mind/backup -/obj/item/organ/stack/process() +/obj/item/organ/internal/stack/process() if(owner && owner.stat != 2 && !is_broken()) backup_time = world.time if(owner.mind) backup = owner.mind -/obj/item/organ/stack/vox +/obj/item/organ/internal/stack/vox name = "vox cortical stack" -/obj/item/organ/stack/vox/stack +/obj/item/organ/internal/stack/vox/stack diff --git a/code/modules/organs/subtypes/nucleation.dm b/code/modules/surgery/organs/subtypes/nucleation.dm similarity index 62% rename from code/modules/organs/subtypes/nucleation.dm rename to code/modules/surgery/organs/subtypes/nucleation.dm index 40d7745d86e..f174cf9d75d 100644 --- a/code/modules/organs/subtypes/nucleation.dm +++ b/code/modules/surgery/organs/subtypes/nucleation.dm @@ -1,33 +1,37 @@ //NUCLEATION ORGAN -/obj/item/organ/nucleation +/obj/item/organ/internal/nucleation name = "nucleation organ" icon = 'icons/obj/surgery.dmi' desc = "A crystalized human organ. /red It has a strangely iridescent glow." -/obj/item/organ/nucleation/resonant_crystal +/obj/item/organ/internal/nucleation/resonant_crystal name = "resonant crystal" icon_state = "resonant-crystal" organ_tag = "resonant crystal" parent_organ = "head" + slot = "res_crystal" -/obj/item/organ/nucleation/strange_crystal +/obj/item/organ/internal/nucleation/strange_crystal name = "strange crystal" icon_state = "strange-crystal" organ_tag = "strange crystal" parent_organ = "chest" + slot = "heart" -/obj/item/organ/eyes/luminescent_crystal + +/obj/item/organ/internal/eyes/luminescent_crystal name = "luminescent eyes" icon_state = "crystal-eyes" organ_tag = "luminescent eyes" light_color = "#1C1C00" parent_organ = "head" + slot = "eyes" - New() - set_light(2) +/obj/item/organ/internal/eyes/luminescent_crystal/New() + set_light(2) -/obj/item/organ/brain/crystal +/obj/item/organ/internal/brain/crystal name = "crystalized brain" icon_state = "crystal-brain" organ_tag = "crystalized brain" - \ No newline at end of file + slot = "brain" diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/surgery/organs/subtypes/standard.dm similarity index 100% rename from code/modules/organs/subtypes/standard.dm rename to code/modules/surgery/organs/subtypes/standard.dm diff --git a/code/modules/organs/subtypes/unbreakable.dm b/code/modules/surgery/organs/subtypes/unbreakable.dm similarity index 100% rename from code/modules/organs/subtypes/unbreakable.dm rename to code/modules/surgery/organs/subtypes/unbreakable.dm diff --git a/code/modules/organs/subtypes/wryn.dm b/code/modules/surgery/organs/subtypes/wryn.dm similarity index 64% rename from code/modules/organs/subtypes/wryn.dm rename to code/modules/surgery/organs/subtypes/wryn.dm index 5d0c687f9f2..14a5d46dd8f 100644 --- a/code/modules/organs/subtypes/wryn.dm +++ b/code/modules/surgery/organs/subtypes/wryn.dm @@ -1,11 +1,8 @@ //WRYN ORGAN -/obj/item/organ/wryn/hivenode - name = "antennae" - parent_organ = "head" - -/obj/item/organ/wryn/hivenode +/obj/item/organ/internal/wryn/hivenode name = "antennae" organ_tag = "antennae" icon = 'icons/mob/human_races/r_wryn.dmi' icon_state = "antennae" - \ No newline at end of file + parent_organ = "head" + slot = "hivenode" \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm new file mode 100644 index 00000000000..30f5f9af02f --- /dev/null +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -0,0 +1,158 @@ +/obj/item/organ/internal/xenos + origin_tech = "biotech=5" + icon_state = "xgibmid2" + var/list/alien_powers = list() + +/obj/item/organ/internal/xenos/New() + for(var/A in alien_powers) + if(ispath(A)) + alien_powers -= A + alien_powers += new A(src) + ..() + +///can be changed if xenos get an update.. +/obj/item/organ/internal/xenos/Insert(mob/living/carbon/M, special = 0) + ..() + for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) + verbs += P + +/obj/item/organ/internal/alien/Remove(mob/living/carbon/M, special = 0) + for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) + verbs -= P + + ..() + +/obj/item/organ/internal/xenos/prepare_eat() + var/obj/S = ..() + S.reagents.add_reagent("sacid", 10) + return S + +//XENOMORPH ORGANS + +/obj/item/organ/internal/xenos/plasmavessel + name = "plasma vessel" + icon_state = "plasma" + origin_tech = "biotech=5;plasmatech=2" + w_class = 3 + parent_organ = "chest" + slot = "plasmavessel" + alien_powers = list(/mob/living/carbon/alien/humanoid/verb/plant, /mob/living/carbon/alien/humanoid/verb/transfer_plasma) + + + var/stored_plasma = 0 + var/max_plasma = 500 + var/heal_rate = 5 + var/plasma_rate = 10 + +/obj/item/organ/internal/xenos/plasmavessel/prepare_eat() + var/obj/S = ..() + S.reagents.add_reagent("plasma", stored_plasma/10) + return S + +/obj/item/organ/internal/xenos/plasmavessel/queen + name = "bloated plasma vessel" + icon_state = "plasma_large" + origin_tech = "biotech=6;plasma=3" + stored_plasma = 200 + max_plasma = 500 + plasma_rate = 25 + +/obj/item/organ/internal/xenos/plasmavessel/drone + name = "large plasma vessel" + icon_state = "plasma_large" + stored_plasma = 200 + max_plasma = 500 + +/obj/item/organ/internal/xenos/plasmavessel/sentinel + stored_plasma = 100 + max_plasma = 250 + +/obj/item/organ/internal/xenos/plasmavessel/hunter + name = "small plasma vessel" + icon_state = "plasma_tiny" + stored_plasma = 100 + max_plasma = 150 + alien_powers = list(/mob/living/carbon/alien/humanoid/verb/plant) + +/obj/item/organ/internal/xenos/plasmavessel/larva + name = "tiny plasma vessel" + icon_state = "plasma_tiny" + max_plasma = 100 + + +/obj/item/organ/internal/xenos/plasmavessel/on_life() + //If there are alien weeds on the ground then heal if needed or give some plasma + if(locate(/obj/structure/alien/weeds) in owner.loc) + if(owner.health >= owner.maxHealth) + owner.adjustPlasma(plasma_rate) + else + var/heal_amt = heal_rate + if(!isalien(owner)) + heal_amt *= 0.2 + owner.adjustPlasma(plasma_rate*0.5) + owner.adjustBruteLoss(-heal_amt) + owner.adjustFireLoss(-heal_amt) + owner.adjustOxyLoss(-heal_amt) + owner.adjustCloneLoss(-heal_amt) + +/obj/item/organ/internal/xenos/plasmavessel/Insert(mob/living/carbon/M, special = 0) + ..() + if(isalien(M)) + var/mob/living/carbon/alien/A = M + A.updatePlasmaDisplay() + +/obj/item/organ/internal/alien/plasmavessel/Remove(mob/living/carbon/M, special = 0) + ..() + if(isalien(M)) + var/mob/living/carbon/alien/A = M + A.updatePlasmaDisplay() + + +/obj/item/organ/internal/xenos/acidgland + name = "acid gland" + parent_organ = "head" + slot = "acidgland" + origin_tech = "biotech=5;materials=2;combat=2" + alien_powers = list(/mob/living/carbon/alien/humanoid/proc/corrosive_acid) + + +/obj/item/organ/internal/xenos/hivenode + name = "hive node" + parent_organ = "head" + slot = "hivenode" + origin_tech = "biotech=5;magnets=4;bluespace=3" + w_class = 1 + alien_powers = list(/mob/living/carbon/alien/humanoid/verb/whisp) + +/obj/item/organ/internal/xenos/hivenode/Insert(mob/living/carbon/M, special = 0) + ..() + M.faction |= "alien" + +/obj/item/organ/internal/xenos/hivenode/Remove(mob/living/carbon/M, special = 0) + M.faction -= "alien" + ..() + +/obj/item/organ/internal/xenos/neurotoxin + name = "neurotoxin gland" + icon_state = "neurotox" + parent_organ = "head" + slot = "neurotoxingland" + origin_tech = "biotech=5;combat=5" + alien_powers = list(/mob/living/carbon/alien/humanoid/proc/neurotoxin) + +/obj/item/organ/internal/xenos/resinspinner + name = "resin spinner" + parent_organ = "head" + icon_state = "stomach-x" + slot = "resinspinner" + origin_tech = "biotech=5;materials=4" + alien_powers = list(/mob/living/carbon/alien/humanoid/proc/resin) + +/obj/item/organ/internal/xenos/eggsac + name = "egg sac" + icon_state = "eggsac" + parent_organ = "groin" + slot = "eggsac" + w_class = 4 + origin_tech = "biotech=8" + alien_powers = list(/mob/living/carbon/alien/humanoid/queen/verb/lay_egg) \ No newline at end of file diff --git a/code/modules/organs/wound.dm b/code/modules/surgery/organs/wound.dm similarity index 100% rename from code/modules/organs/wound.dm rename to code/modules/surgery/organs/wound.dm diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index b0b840d138c..967a9c06d22 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -45,6 +45,7 @@ user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") ticker.mode.remove_thrall(target.mind,0) + new /obj/item/organ/internal/shadowtumor(get_turf(target)) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/braincase = target.named_organ_parent("brain") @@ -72,9 +73,10 @@ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/embryo = 0 - for(var/obj/item/alien_embryo/A in target) + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) embryo = 1 - break + //break if (!hasorgans(target)) return @@ -92,8 +94,32 @@ user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", "You rip the larva out of [target]'s ribcage!") - for(var/obj/item/alien_embryo/A in target) - A.loc = A.loc.loc + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + user << "You found an unknown alien organism in [target]'s chest!" + if(A.stage < 4) + user << "It's small and weak, barely the size of a foetus." + else + user << "It's grown quite large, and writhes slightly as you look at it." + if(prob(10)) + A.AttemptGrow() + + A.Remove(target) + A.loc = get_turf(target) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!hasorgans(target)) + return + + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + if(prob(50)) + A.AttemptGrow(0) + user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") + else + target.adjustOxyLoss(30) + user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") ////////////////////////////////////////////////////////////////// @@ -116,7 +142,7 @@ if(!affected) return var/is_organ_damaged = 0 - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I.damage > 0 && I.robotic < 2) is_organ_damaged = 1 break @@ -133,7 +159,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic < 2) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ @@ -153,7 +179,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I) I.surgeryize() if(I && I.damage > 0) @@ -180,7 +206,7 @@ target.adjustToxLoss(10) affected.createwound(CUT, 5) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) I.take_damage(dam_amt,0) @@ -209,7 +235,7 @@ var/list/attached_organs = list() for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/I = target.internal_organs_by_name[organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) attached_organs |= organ @@ -234,7 +260,7 @@ user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status |= ORGAN_CUT_AWAY @@ -264,7 +290,7 @@ var/list/removable_organs = list() for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/I = target.internal_organs_by_name[organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] if((I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) removable_organs |= organ @@ -287,9 +313,10 @@ // Extract the organ! if(target.op_stage.current_organ) - var/obj/item/organ/O = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/O = target.internal_organs_by_name[target.op_stage.current_organ] if(O && istype(O)) - O.removed(user) + O.Remove(user) + O.loc = get_turf(target) target.op_stage.current_organ = null fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -300,7 +327,7 @@ /datum/surgery_step/internal/replace_organ allowed_tools = list( - /obj/item/organ = 100 + /obj/item/organ/internal = 100 ) min_duration = 60 @@ -308,7 +335,7 @@ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/O = tool + var/obj/item/organ/internal/O = tool var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!affected) return var/organ_compatible @@ -366,14 +393,14 @@ user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ "\blue You have transplanted \the [tool] into [target]'s [affected.name].") user.drop_item(tool) - var/obj/item/organ/O = tool + var/obj/item/organ/internal/O = tool if(istype(O)) - O.replaced(target,affected) + O.Insert(target) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ "\red Your hand slips, damaging \the [tool]!") - var/obj/item/organ/I = tool + var/obj/item/organ/internal/I = tool if(istype(I)) I.take_damage(rand(3,5),0) @@ -395,7 +422,7 @@ var/list/removable_organs = list() for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/I = target.internal_organs_by_name[organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] if(I && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) removable_organs |= organ @@ -416,7 +443,7 @@ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index fa6fd6f215f..62fa8fca992 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -220,7 +220,7 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!affected) return var/is_organ_damaged = 0 - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I.damage > 0 && I.robotic >= 2) is_organ_damaged = 1 break @@ -232,7 +232,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic >= 2) user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \ @@ -247,7 +247,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic >= 2) @@ -267,7 +267,7 @@ target.adjustToxLoss(5) affected.createwound(CUT, 5) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I) I.take_damage(rand(3,5),0) @@ -292,7 +292,7 @@ var/list/attached_organs = list() for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/I = target.internal_organs_by_name[organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) attached_organs |= organ @@ -313,7 +313,7 @@ user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status |= ORGAN_CUT_AWAY @@ -341,7 +341,7 @@ var/list/removable_organs = list() for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/I = target.internal_organs_by_name[organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] if(I && (I.status & ORGAN_CUT_AWAY) && (I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) removable_organs |= organ @@ -361,7 +361,7 @@ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY @@ -424,7 +424,7 @@ "\blue You have installed \the [tool] into [target]'s [affected.name].") var/obj/item/device/mmi/M = tool - var/obj/item/organ/mmi_holder/holder = new(target, 1) + var/obj/item/organ/internal/mmi_holder/holder = new(target, 1) if (istype(M, /obj/item/device/mmi/posibrain)) holder.robotize() diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index 6a9fcd3ffad..4955d200252 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -221,7 +221,7 @@ activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob - var/obj/item/organ/brain/B = H.internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"] if (B.damage < B.min_broken_damage) B.take_damage(5, 1) else @@ -442,7 +442,7 @@ activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob - var/obj/item/organ/brain/B = H.internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"] if (B.damage < B.min_broken_damage) B.take_damage(1, 1) else @@ -704,7 +704,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human) activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob - var/obj/item/organ/brain/B = H.internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"] if (B.damage < B.min_broken_damage) B.take_damage(0.5, 1) else @@ -936,7 +936,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human) name = "Watery Eyes" stage = 1 activate(var/mob/living/carbon/human/mob,var/multiplier) - var/obj/item/organ/eyes/E = mob.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = mob.internal_organs_by_name["eyes"] if(!istype(E) || (E.status & ORGAN_ROBOT)) // No eyes or robotic eyes? No problem! return mob << "Your eyes sting and water!" diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index dfef3e3dcbd98ccca236bf2cebb187d3f9cc8007..619678fd650e6f3861513d518138898a6862316e 100644 GIT binary patch literal 30051 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

}-N#TQE3y;r+>L6by#htt)|kI~R*@ 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 LMYiCnk?;Ql^xh(5 literal 26775 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 HKKy?HS Date: Mon, 21 Dec 2015 23:19:27 -0500 Subject: [PATCH 002/442] commit so i can swap branches... please note, anything further on changling may invovle updates to game mode, so another pr. and yes with the brains its jut blocked from prepare_eat() proc --- code/_onclick/hud/action.dm | 3 - .../changeling/powers/augmented_eyesight.dm | 77 ++++- code/game/objects/items/devices/scanners.dm | 8 + .../mob/living/carbon/brain/brain_item.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 14 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../living/carbon/human/species/species.dm | 5 +- code/modules/mob/living/life.dm | 44 ++- code/modules/surgery/organs/augments_eyes.dm | 125 +++++++++ .../surgery/organs/augments_internal.dm | 264 ++++++++++++++++++ code/modules/surgery/organs/organ_icon.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 4 + code/modules/surgery/organs/subtypes/xenos.dm | 20 +- paradise.dme | 2 + 14 files changed, 521 insertions(+), 53 deletions(-) create mode 100644 code/modules/surgery/organs/augments_eyes.dm create mode 100644 code/modules/surgery/organs/augments_internal.dm diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 4461e1c8539..f4f96b555e7 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -215,9 +215,6 @@ /datum/action/item_action check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_ALIVE|AB_CHECK_INSIDE -/datum/action/item_action/CheckRemoval(mob/living/user) - return !(target in user) - /datum/action/item_action/hands_free check_flags = AB_CHECK_ALIVE|AB_CHECK_INSIDE diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index d303d022753..cd2419fa1ae 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -4,18 +4,79 @@ /obj/effect/proc_holder/changeling/augmented_eyesight name = "Augmented Eyesight" desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability." - helptext = "Grants us night vision and thermal vision. It may be toggled on or off." + helptext = "Grants us thermal vision or flash protection. We will become a lot more vulnerable to flash-based devices while thermal vision is active." chemical_cost = 0 dna_cost = 2 //Would be 1 without thermal vision + var/active = 0 //Whether or not vision is enhanced + +/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user) + if(!istype(user)) + return + if(user.get_int_organ(/obj/item/organ/internal/cyberimp/eyes/thermals/ling)) + user << "Our eyes are protected from flashes." + var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling() + O.Insert(user) -/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(var/mob/user) - if(!user.vision_type) - user << "We feel a minute twitch in our eyes, and darkness creeps away." - user.vision_type = new /datum/vision_override/nightvision/thermals/ling_augmented_eyesight else - user << "Our vision dulls. Shadows gather." - user.vision_type = null + var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/thermals/ling() + O.Insert(user) + return 1 + /obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) - user.vision_type = null \ No newline at end of file + var/obj/item/organ/internal/cyberimp/eyes/O = user.get_organ_slot("eye_ling") + if(O) + O.Remove(user) + qdel(O) + + + + + +/obj/item/organ/internal/cyberimp/eyes/shield/ling + name = "protective membranes" + desc = "These variable transparency organic membranes will protect you from welders and flashes and heal your eye damage." + icon_state = "ling_eyeshield" + eye_color = null + implant_overlay = null + origin_tech = "biotech=4" + slot = "eye_ling" + status = ORGAN_ORGANIC + +/obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life() + ..() + if(owner.eye_blind || owner.eye_stat || owner.eye_blurry || (owner.disabilities & BLIND) || (owner.disabilities & NEARSIGHT)) + owner.reagents.add_reagent("oculine", 1) + +/obj/item/organ/internal/cyberimp/eyes/shield/ling/prepare_eat() + var/obj/S = ..() + S.reagents.add.reagent("oculine", 15) + return S + + +/obj/item/organ/internal/cyberimp/eyes/thermals/ling + name = "heat receptors" + desc = "These heat receptors dramatically increases eyes light sensing ability." + icon_state = "ling_thermal" + eye_color = null + implant_overlay = null + origin_tech = "biotech=5;magnets=5" + slot = "eye_ling" + status = ORGAN_ORGANIC + aug_message = "You feel a minute twitch in our eyes, and darkness creeps away." + +/obj/item/organ/internal/cyberimp/eyes/thermals/ling/emp_act(severity) + return + +/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Insert(mob/living/carbon/M, special = 0) + ..() + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.weakeyes = 1 + +/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Remove(mob/living/carbon/M, special = 0) + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.weakeyes = 0 + ..() \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 41297357974..5afaabd00d4 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -245,6 +245,14 @@ REAGENT SCANNER if(H.heart_attack) user.show_message("Subject suffering from heart attack: Apply defibrillator immediately.") user.show_message("\blue Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.") + var/implant_detect + for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs) + if(CI.status == ORGAN_ROBOT && !(species && species.name == "Machine")) + implant_detect += "[H.name] is modified with a [CI.name].
" + if(implant_detect) + user.show_message("Detected cybernetic modifications:") + user.show_message("[implant_detect]") + src.add_fingerprint(user) return diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 733f97df63a..bb7d27b0aaf 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -13,11 +13,9 @@ var/mob/living/carbon/brain/brainmob = null organ_tag = "brain" parent_organ = "head" + slot = "brain" vital = 1 -/obj/item/organ/internal/brain/attack_self(mob/user as mob) - return //let's not have players taken out of the round as easily as a click, once you have their brain. - /obj/item/organ/internal/brain/surgeryize() if(!owner) return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 7ad0adf9eb7..5fbdd068d60 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -738,4 +738,16 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, handcuffed, legcuffed, back, - wear_mask) \ No newline at end of file + wear_mask) + +/mob/living/carbon/emp_act(severity) + for(var/obj/item/organ/internal/O in internal_organs) + O.emp_act(severity) + ..() + + + /mob/living/carbon/check_eye_prot() + var/number = ..() + for(var/obj/item/organ/internal/cyberimp/eyes/EFP in internal_organs) + number += EFP.flash_protect + return number diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9a763813f06..a25a7273243 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1100,7 +1100,7 @@ ///eyecheck() ///Returns a number between -1 to 2 /mob/living/carbon/human/eyecheck() - var/number = 0 + var/number = ..() if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item number += HFP.flash_protect diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index ad225fec69d..3052db0793d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -159,7 +159,10 @@ for(var/organ in has_organ) var/organ_type = has_organ[organ] H.internal_organs_by_name[organ] = new organ_type(H,1) - internal_organs += new organ + internal_organs += new has_organ[organ] + + for(var/obj/item/organ/internal/I in internal_organs) + I.Insert(src) for(var/name in H.organs_by_name) H.organs |= H.organs_by_name[name] diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 062a8e3b69e..03682334dae 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -225,31 +225,25 @@ if(A.CheckRemoval(src)) A.Remove(src) for(var/obj/item/I in src) - if(istype(I,/obj/item/clothing/under)) - var/obj/item/clothing/under/U = I - for(var/obj/item/IU in U) - if(istype(IU, /obj/item/clothing/accessory)) - var/obj/item/clothing/accessory/A = IU - if(A.action_button_name) - if(!A.action) - if(A.action_button_is_hands_free) - A.action = new/datum/action/item_action/hands_free - else - A.action = new/datum/action/item_action - A.action.name = A.action_button_name - A.action.target = A - A.action.check_flags &= ~AB_CHECK_INSIDE - A.action.Grant(src) - if(I.action_button_name) - if(!I.action) - if(I.action_button_is_hands_free) - I.action = new/datum/action/item_action/hands_free - else - I.action = new/datum/action/item_action - I.action.name = I.action_button_name - I.action.target = I - I.action.Grant(src) - return + give_action_button(I, 1) + return + +/mob/living/proc/give_action_button(var/obj/item/I, recursive = 0) + if(I.action_button_name) + if(!I.action) + if(istype(I, /obj/item/organ/internal)) + I.action = new/datum/action/organ_action + else if(I.action_button_is_hands_free) + I.action = new/datum/action/item_action/hands_free + else + I.action = new/datum/action/item_action + I.action.name = I.action_button_name + I.action.target = I + I.action.Grant(src) + + if(recursive) + for(var/obj/item/T in I) + give_action_button(I, recursive - 1) /mob/living/update_action_buttons() if(!hud_used) return diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm new file mode 100644 index 00000000000..2af447757f2 --- /dev/null +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -0,0 +1,125 @@ +/obj/item/organ/internal/cyberimp/eyes + name = "cybernetic eyes" + desc = "artificial photoreceptors with specialized functionality" + icon_state = "eye_implant" + implant_overlay = "eye_implant_overlay" + slot = "eye_sight" + parent_organ = "eyes" + w_class = 1 + + var/sight_flags = 0 + var/eye_color = "fff" + var/old_eye_color = "fff" + var/flash_protect = 0 + var/aug_message = "Your vision is augmented!" + + + +/obj/item/organ/internal/cyberimp/eyes/Insert(var/mob/living/carbon/M, var/special = 0) + ..() + if(istype(owner, /mob/living/carbon/human) && eye_color) + var/mob/living/carbon/human/HMN = owner + old_eye_color = HMN.eye_color + HMN.eye_color = eye_color + HMN.regenerate_icons() + if(aug_message && !special) + owner << "[aug_message]" + M.sight |= sight_flags + +/obj/item/organ/internal/cyberimp/eyes/Remove(var/mob/living/carbon/M, var/special = 0) + ..() + M.sight ^= sight_flags + if(istype(owner,/mob/living/carbon/human) && eye_color) + var/mob/living/carbon/human/HMN = owner + HMN.eye_color = old_eye_color + HMN.regenerate_icons() + +/obj/item/organ/internal/cyberimp/eyes/on_life() + ..() + owner.sight |= sight_flags + +/obj/item/organ/internal/cyberimp/eyes/emp_act(severity) + if(!owner) + return + if(severity > 1) + if(prob(10 * severity)) + return + var/save_sight = owner.sight + owner.sight &= 0 + owner.disabilities |= BLIND + owner << "Static obfuscates your vision!" + spawn(60 / severity) + if(owner) + owner.sight |= save_sight + owner.disabilities ^= BLIND + + + +/obj/item/organ/internal/cyberimp/eyes/xray + name = "X-ray implant" + desc = "These cybernetic eye implants will give you X-ray vision. Blinking is futile." + eye_color = "000" + implant_color = "#000000" + origin_tech = "materials=6;programming=4;biotech=6;magnets=5" + sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS + +/obj/item/organ/internal/cyberimp/eyes/thermals + name = "Thermals implant" + desc = "These cybernetic eye implants will give you Thermal vision. Vertical slit pupil included." + eye_color = "FC0" + implant_color = "#FFCC00" + sight_flags = SEE_MOBS + flash_protect = -1 + origin_tech = "materials=6;programming=4;biotech=5;magnets=5;syndicate=4" + aug_message = "You see prey everywhere you look..." + +// HUD implants +/obj/item/organ/internal/cyberimp/eyes/hud + name = "HUD implant" + desc = "These cybernetic eyes will display a HUD over everything you see. Maybe." + slot = "eye_hud" + var/HUD_type = 0 + +/obj/item/organ/internal/cyberimp/eyes/hud/Insert(var/mob/living/carbon/M, var/special = 0) + ..() + if(HUD_type) + var/datum/atom_hud/H = huds[HUD_type] + H.add_hud_to(M) + M.permanent_huds |= H + +/obj/item/organ/internal/cyberimp/eyes/hud/Remove(var/mob/living/carbon/M, var/special = 0) + ..() + if(HUD_type) + var/datum/atom_hud/H = huds[HUD_type] + M.permanent_huds ^= H + H.remove_hud_from(M) + +/obj/item/organ/internal/cyberimp/eyes/hud/medical + name = "Medical HUD implant" + desc = "These cybernetic eye implants will display a medical HUD over everything you see." + eye_color = "0ff" + implant_color = "#00FFFF" + origin_tech = "materials=4;programming=3;biotech=4" + aug_message = "You suddenly see health bars floating above people's heads..." + HUD_type = DATA_HUD_MEDICAL_ADVANCED + +/obj/item/organ/internal/cyberimp/eyes/hud/security + name = "Security HUD implant" + desc = "These cybernetic eye implants will display a security HUD over everything you see." + eye_color = "d00" + implant_color = "#CC0000" + origin_tech = "materials=4;programming=4;biotech=3;combat=1" + aug_message = "Job indicator icons pop up in your vision. That is not a certified surgeon..." + HUD_type = DATA_HUD_SECURITY_ADVANCED + +// Welding shield implant +/obj/item/organ/internal/cyberimp/eyes/shield + name = "welding shield implant" + desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision." + slot = "eye_shield" + origin_tech = "materials=4;biotech=3" + implant_color = "#101010" + flash_protect = 2 + // Welding with thermals will still hurt your eyes a bit. +/obj/item/organ/internal/cyberimp/eyes/shield/emp_act(severity) + return \ No newline at end of file diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm new file mode 100644 index 00000000000..bff7e2ed3ff --- /dev/null +++ b/code/modules/surgery/organs/augments_internal.dm @@ -0,0 +1,264 @@ +//note i am putting External in robolimbs. + +#define STUN_SET_AMOUNT 2 + +/obj/item/organ/internal/cyberimp + name = "cybernetic implant" + desc = "a state-of-the-art implant that improves a baseline's functionality" + status = ORGAN_ROBOT + var/implant_color = "#FFFFFF" + var/implant_overlay + +/obj/item/organ/internal/cyberimp/New(var/mob/M = null) + if(iscarbon(M)) + src.Insert(M) + if(implant_overlay) + var/image/overlay = new /image(icon, implant_overlay) + overlay.color = implant_color + overlays |= overlay + return ..() + + + +//[[[[BRAIN]]]] + +/obj/item/organ/internal/cyberimp/brain + name = "cybernetic brain implant" + desc = "injectors of extra sub-routines for the brain" + icon_state = "brain_implant" + implant_overlay = "brain_implant_overlay" + parent_organ = "head" + +/obj/item/organ/internal/cyberimp/brain/emp_act(severity) + if(!owner) + return + var/stun_amount = 5 + (severity-1 ? 0 : 5) + owner.Stun(stun_amount) + owner << "Your body seizes up!" + return stun_amount + + +/obj/item/organ/internal/cyberimp/brain/anti_drop + name = "Anti-drop implant" + desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." + var/active = 0 + var/l_hand_ignore = 0 + var/r_hand_ignore = 0 + var/obj/item/l_hand_obj = null + var/obj/item/r_hand_obj = null + implant_color = "#DE7E00" + slot = "brain_antidrop" + origin_tech = "materials=5;programming=4;biotech=4" + organ_action_name = "Toggle Anti-Drop" + +/obj/item/organ/internal/cyberimp/brain/anti_drop/ui_action_click() + active = !active + if(active) + l_hand_obj = owner.l_hand + r_hand_obj = owner.r_hand + if(l_hand_obj) + if(owner.l_hand.flags & NODROP) + l_hand_ignore = 1 + else + owner.l_hand.flags |= NODROP + l_hand_ignore = 0 + + if(r_hand_obj) + if(owner.r_hand.flags & NODROP) + r_hand_ignore = 1 + else + owner.r_hand.flags |= NODROP + r_hand_ignore = 0 + + if(!l_hand_obj && !r_hand_obj) + owner << "You are not holding any items, your hands relax..." + active = 0 + else + var/msg = 0 + msg += !l_hand_ignore && l_hand_obj ? 1 : 0 + msg += !r_hand_ignore && r_hand_obj ? 2 : 0 + switch(msg) + if(1) + owner << "Your left hand's grip tightens." + if(2) + owner << "Your right hand's grip tightens." + if(3) + owner << "Both of your hand's grips tighten." + else + release_items() + owner << "Your hands relax..." + l_hand_obj = null + r_hand_obj = null + +/obj/item/organ/internal/cyberimp/brain/anti_drop/emp_act(severity) + if(!owner) + return + var/range = severity ? 10 : 5 + var/atom/A + var/obj/item/L_item = owner.l_hand + var/obj/item/R_item = owner.r_hand + + release_items() + ..() + if(L_item) + A = pick(oview(range)) + L_item.throw_at(A, range, 2) + owner << "Your left arm spasms and throws the [L_item.name]!" + if(R_item) + A = pick(oview(range)) + R_item.throw_at(A, range, 2) + owner << "Your right arm spasms and throws the [R_item.name]!" + +/obj/item/organ/internal/cyberimp/brain/anti_drop/proc/release_items() + if(!l_hand_ignore && l_hand_obj in owner.contents) + l_hand_obj.flags ^= NODROP + if(!r_hand_ignore && r_hand_obj in owner.contents) + r_hand_obj.flags ^= NODROP + +/obj/item/organ/internal/cyberimp/brain/anti_drop/Remove(var/mob/living/carbon/M, special = 0) + ..() + if(active) + ui_action_click() + + +/obj/item/organ/internal/cyberimp/brain/anti_stun + name = "CNS Rebooter implant" + desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." + implant_color = "#FFFF00" + slot = "brain_antistun" + origin_tech = "materials=6;programming=4;biotech=5" + +/obj/item/organ/internal/cyberimp/brain/anti_stun/on_life() + ..() + if(crit_fail) + return + if(owner.stunned > STUN_SET_AMOUNT) + owner.stunned = STUN_SET_AMOUNT + if(owner.weakened > STUN_SET_AMOUNT) + owner.weakened = STUN_SET_AMOUNT + +/obj/item/organ/internal/cyberimp/brain/anti_stun/emp_act(severity) + if(crit_fail) + return + crit_fail = 1 + spawn(90 / severity) + crit_fail = 0 + +//[[[[CHEST]]]] +/obj/item/organ/internal/cyberimp/chest + name = "cybernetic torso implant" + desc = "implants for the organs in your torso" + icon_state = "chest_implant" + implant_overlay = "chest_implant_overlay" + parent_organ = "chest" + +/obj/item/organ/internal/cyberimp/chest/nutriment + name = "Nutriment pump implant" + desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." + icon_state = "chest_implant" + implant_color = "#00AA00" + var/hunger_threshold = NUTRITION_LEVEL_STARVING + var/synthesizing = 0 + var/poison_amount = 5 + slot = "stomach" + origin_tech = "materials=5;programming=3;biotech=4" + +/obj/item/organ/internal/cyberimp/chest/nutriment/on_life() + if(synthesizing) + return + if(owner.stat == DEAD) + return + if(owner.nutrition <= hunger_threshold) + synthesizing = 1 + owner << "You feel less hungry..." + owner.nutrition += 50 + spawn(50) + synthesizing = 0 + +/obj/item/organ/internal/cyberimp/chest/nutriment/emp_act(severity) + if(!owner) + return + owner.reagents.add_reagent("????",poison_amount / severity) //food poisoning + owner << "You feel like your insides are burning." + +/obj/item/organ/internal/cyberimp/chest/nutriment/plus + name = "Nutriment pump implant PLUS" + desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." + icon_state = "chest_implant" + implant_color = "#006607" + hunger_threshold = NUTRITION_LEVEL_HUNGRY + poison_amount = 10 + origin_tech = "materials=5;programming=3;biotech=5" + +/obj/item/organ/internal/cyberimp/chest/reviver + name = "Reviver implant" + desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" + icon_state = "chest_implant" + implant_color = "#AD0000" + origin_tech = "materials=6;programming=3;biotech=6;syndicate=4" + slot = "heartdrive" + var/revive_cost = 0 + var/reviving = 0 + var/cooldown = 0 + +/obj/item/organ/internal/cyberimp/chest/reviver/on_life() + if(reviving) + if(owner.stat == UNCONSCIOUS) + spawn(30) + if(prob(90) && owner.getOxyLoss()) + owner.adjustOxyLoss(-3) + revive_cost += 5 + if(prob(75) && owner.getBruteLoss()) + owner.adjustBruteLoss(-1) + revive_cost += 20 + if(prob(75) && owner.getFireLoss()) + owner.adjustFireLoss(-1) + revive_cost += 20 + if(prob(40) && owner.getToxLoss()) + owner.adjustToxLoss(-1) + revive_cost += 50 + else + cooldown = revive_cost + world.time + reviving = 0 + return + if(cooldown > world.time) + return + if(owner.stat != UNCONSCIOUS) + return + if(owner.suiciding) + return + revive_cost = 0 + reviving = 1 + +/obj/item/organ/internal/cyberimp/chest/reviver/emp_act(severity) + if(!owner) + return + if(reviving) + revive_cost += 200 + else + cooldown += 200 + if(istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner + if(H.stat != DEAD && prob(50 / severity)) + H.heart_attack = 1 + spawn(600 / severity) + H.heart_attack = 0 + if(H.stat == CONSCIOUS) + H << "You feel your heart beating again!" + +//BOX O' IMPLANTS +/obj/item/weapon/storage/box/cyber_implants + name = "boxed cybernetic implants" + desc = "A sleek, sturdy box." + icon_state = "cyber_implants" + var/list/boxed = list(/obj/item/organ/internal/cyberimp/eyes/xray,/obj/item/organ/internal/cyberimp/eyes/thermals, + /obj/item/organ/internal/cyberimp/brain/anti_stun, /obj/item/organ/internal/cyberimp/chest/reviver) + var/amount = 5 + +/obj/item/weapon/storage/box/cyber_implants/New() + ..() + var/i + var/implant + for(i = 0, i < amount, i++) + implant = pick(boxed) + new implant(src) \ No newline at end of file diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index 94b0aa5b95c..dd10ec7920b 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -33,7 +33,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human) ..() - var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ("eyes")//owner.internal_organs_by_name["eyes"] if(eyes) eyes.update_colour() /obj/item/organ/external/head/removed() diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 5a26ed82447..b6575e970cd 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -78,6 +78,10 @@ icon_state = "appendix" icon = 'icons/obj/surgery.dmi' +/obj/item/weapon/reagent_containers/food/snacks/organ/New() + + ..() + reagents.add_reagent("nutriment",5) diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index 30f5f9af02f..8863e79455f 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -30,7 +30,7 @@ //XENOMORPH ORGANS /obj/item/organ/internal/xenos/plasmavessel - name = "plasma vessel" + name = "xeno plasma vessel" icon_state = "plasma" origin_tech = "biotech=5;plasmatech=2" w_class = 3 @@ -50,7 +50,7 @@ return S /obj/item/organ/internal/xenos/plasmavessel/queen - name = "bloated plasma vessel" + name = "bloated xeno plasma vessel" icon_state = "plasma_large" origin_tech = "biotech=6;plasma=3" stored_plasma = 200 @@ -58,7 +58,7 @@ plasma_rate = 25 /obj/item/organ/internal/xenos/plasmavessel/drone - name = "large plasma vessel" + name = "large xeno plasma vessel" icon_state = "plasma_large" stored_plasma = 200 max_plasma = 500 @@ -68,14 +68,14 @@ max_plasma = 250 /obj/item/organ/internal/xenos/plasmavessel/hunter - name = "small plasma vessel" + name = "small xeno plasma vessel" icon_state = "plasma_tiny" stored_plasma = 100 max_plasma = 150 alien_powers = list(/mob/living/carbon/alien/humanoid/verb/plant) /obj/item/organ/internal/xenos/plasmavessel/larva - name = "tiny plasma vessel" + name = "tiny xeno plasma vessel" icon_state = "plasma_tiny" max_plasma = 100 @@ -109,7 +109,7 @@ /obj/item/organ/internal/xenos/acidgland - name = "acid gland" + name = "xeno acid gland" parent_organ = "head" slot = "acidgland" origin_tech = "biotech=5;materials=2;combat=2" @@ -117,7 +117,7 @@ /obj/item/organ/internal/xenos/hivenode - name = "hive node" + name = "xeno hive node" parent_organ = "head" slot = "hivenode" origin_tech = "biotech=5;magnets=4;bluespace=3" @@ -133,7 +133,7 @@ ..() /obj/item/organ/internal/xenos/neurotoxin - name = "neurotoxin gland" + name = "xeno neurotoxin gland" icon_state = "neurotox" parent_organ = "head" slot = "neurotoxingland" @@ -141,7 +141,7 @@ alien_powers = list(/mob/living/carbon/alien/humanoid/proc/neurotoxin) /obj/item/organ/internal/xenos/resinspinner - name = "resin spinner" + name = "xeno resin organ"//...there tiger.... parent_organ = "head" icon_state = "stomach-x" slot = "resinspinner" @@ -149,7 +149,7 @@ alien_powers = list(/mob/living/carbon/alien/humanoid/proc/resin) /obj/item/organ/internal/xenos/eggsac - name = "egg sac" + name = "xeno egg sac" icon_state = "eggsac" parent_organ = "groin" slot = "eggsac" diff --git a/paradise.dme b/paradise.dme index 948894c7d8f..07c7f4e7ed2 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1837,6 +1837,8 @@ #include "code\modules\surgery\slime.dm" #include "code\modules\surgery\surgery.dm" #include "code\modules\surgery\tools.dm" +#include "code\modules\surgery\organs\augments_eyes.dm" +#include "code\modules\surgery\organs\augments_internal.dm" #include "code\modules\surgery\organs\blood.dm" #include "code\modules\surgery\organs\body_egg.dm" #include "code\modules\surgery\organs\helpers.dm" From 046b0b997dc46b517a5a5cbc71ace278d605f420 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 23 Dec 2015 11:40:16 -0500 Subject: [PATCH 003/442] almost.... --- code/datums/hud.dm | 4 +- code/datums/spells/inflict_handler.dm | 6 +- .../changeling/powers/augmented_eyesight.dm | 12 ++-- .../gamemodes/changeling/powers/panacea.dm | 4 +- .../mutiny/directives/ipc_virus_directive.dm | 2 +- code/game/objects/effects/aliens.dm | 2 +- code/game/objects/items/devices/scanners.dm | 2 +- code/modules/mining/equipment_locker.dm | 6 +- code/modules/mob/living/carbon/alien/alien.dm | 7 +- .../carbon/alien/humanoid/alien_powers.dm | 38 +++++++++-- .../carbon/alien/humanoid/caste/drone.dm | 15 ++--- .../carbon/alien/humanoid/caste/hunter.dm | 2 +- .../carbon/alien/humanoid/caste/sentinel.dm | 4 +- .../living/carbon/alien/humanoid/empress.dm | 10 +-- .../mob/living/carbon/alien/humanoid/queen.dm | 10 +-- .../mob/living/carbon/alien/larva/larva.dm | 5 +- .../carbon/alien/special/alien_embryo.dm | 6 +- .../living/carbon/alien/special/facehugger.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 26 ++++---- .../mob/living/carbon/human/examine.dm | 10 ++- code/modules/mob/living/carbon/human/human.dm | 3 + .../living/carbon/human/species/species.dm | 6 +- .../mob/living/carbon/human/update_icons.dm | 3 + code/modules/mob/living/life.dm | 4 +- code/modules/mob/living/living.dm | 28 +------- code/modules/mob/mob_defines.dm | 2 + code/modules/mob/mob_helpers.dm | 2 +- code/modules/surgery/organs/augments_eyes.dm | 42 ++++++++---- .../surgery/organs/augments_internal.dm | 4 +- code/modules/surgery/organs/helpers.dm | 2 +- code/modules/surgery/organs/organ.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 62 ++++++++---------- code/modules/surgery/organs/subtypes/xenos.dm | 2 +- icons/mob/human_face.dmi | Bin 74337 -> 74697 bytes 34 files changed, 177 insertions(+), 160 deletions(-) diff --git a/code/datums/hud.dm b/code/datums/hud.dm index f25d18ab255..7b76230864f 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -24,8 +24,8 @@ var/datum/atom_hud/huds = list( \ /datum/atom_hud/proc/remove_hud_from(mob/M) if(!M) return - //if(src in M.permanent_huds)//I will deal with you later -Fethas - // return + if(src in M.permanent_huds)//I will deal with you later -Fethas + return for(var/atom/A in hudatoms) remove_from_single_hud(M, A) hudusers -= M diff --git a/code/datums/spells/inflict_handler.dm b/code/datums/spells/inflict_handler.dm index ae985308ba5..a9aa44c2771 100644 --- a/code/datums/spells/inflict_handler.dm +++ b/code/datums/spells/inflict_handler.dm @@ -28,11 +28,11 @@ if("gib_brain") if(ishuman(target)) var/mob/living/carbon/C = target - var/obj/item/organ/internal/brain/B = C_target.get_int_organ(/obj/item/organ/internal/brain)//do we has brains? + var/obj/item/organ/internal/brain/B = C.get_int_organ(/obj/item/organ/internal/brain)//do we has brains? if(B) - B.loc = get_turf(C_target) + B.loc = get_turf(C) B.transfer_identity(C) - C_target.internal_organs -= B + C.internal_organs -= B target.gib() if("disintegrate") target.dust() diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index cd2419fa1ae..c276d703996 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -38,20 +38,20 @@ name = "protective membranes" desc = "These variable transparency organic membranes will protect you from welders and flashes and heal your eye damage." icon_state = "ling_eyeshield" - eye_color = null + eye_colour = null implant_overlay = null origin_tech = "biotech=4" slot = "eye_ling" - status = ORGAN_ORGANIC + //status = ORGAN_ORGANIC /obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life() ..() - if(owner.eye_blind || owner.eye_stat || owner.eye_blurry || (owner.disabilities & BLIND) || (owner.disabilities & NEARSIGHT)) + if(owner.eye_blind || owner.eye_blurry || (owner.disabilities & BLIND) || (owner.disabilities & NEARSIGHTED)) owner.reagents.add_reagent("oculine", 1) /obj/item/organ/internal/cyberimp/eyes/shield/ling/prepare_eat() var/obj/S = ..() - S.reagents.add.reagent("oculine", 15) + S.reagents.add_reagent("oculine", 15) return S @@ -59,11 +59,11 @@ name = "heat receptors" desc = "These heat receptors dramatically increases eyes light sensing ability." icon_state = "ling_thermal" - eye_color = null + eye_colour = null implant_overlay = null origin_tech = "biotech=5;magnets=5" slot = "eye_ling" - status = ORGAN_ORGANIC + //status = ORGAN_ORGANIC aug_message = "You feel a minute twitch in our eyes, and darkness creeps away." /obj/item/organ/internal/cyberimp/eyes/thermals/ling/emp_act(severity) diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm index 25fc19bd04b..126d30d55ce 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -15,8 +15,8 @@ if(egg) egg.Remove(user) if(iscarbon(user)) - var/mob/living/carbon/C = user - C.vomit(0) + var/mob/living/carbon/human/C = user + C.vomit() egg.loc = get_turf(user) user.reagents.add_reagent("mutadone", 10) diff --git a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm index c67780b709d..5b46cb64b7d 100644 --- a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm +++ b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm @@ -62,7 +62,7 @@ datum/directive/ipc_virus/get_remaining_orders() return text -/hook/debrain/proc/debrain_directive(obj/item/organ/brain/B) +/hook/debrain/proc/debrain_directive(/obj/item/organ/internal/brain/B) var/datum/directive/ipc_virus/D = get_directive("ipc_virus") if (!D) return 1 diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index b86c330d762..e6f14e1e73f 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -322,7 +322,7 @@ /obj/structure/alien/egg/attack_hand(mob/user) - if(user.getorgan(/obj/item/organ/internal/xenos/plasmavessel)) + if(user.get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)) switch(status) if(BURST) user << "You clear the hatched egg." diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 5afaabd00d4..17ba0c69436 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -247,7 +247,7 @@ REAGENT SCANNER user.show_message("\blue Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.") var/implant_detect for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs) - if(CI.status == ORGAN_ROBOT && !(species && species.name == "Machine")) + if(CI.status == ORGAN_ROBOT && !(H.species && H.species.name == "Machine")) implant_detect += "[H.name] is modified with a [CI.name].
" if(implant_detect) user.show_message("Detected cybernetic modifications:") diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 4ad70ebe1c4..5b9a563d0fe 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -986,11 +986,11 @@ w_class = 1 origin_tech = "biotech=1" -/obj/item/weapon/hivelordstabilizer/afterattack(obj/item/M, mob/user) - var/obj/item/asteroid/hivelord_core/C = M +/obj/item/weapon/hivelordstabilizer/afterattack(obj/item/organ/internal/M, mob/user) + var/obj/item/organ/internal/hivelord_core/C = M if(!istype(C, /obj/item/organ/internal/hivelord_core)) user << "The stabilizer only works on hivelord cores." return ..() C.preserved = 1 user << "You inject the hivelord core with the stabilizer. It will no longer go inert." - qdel(src) + qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 3c462638335..e7656c67dab 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -71,7 +71,7 @@ ..(amount) return -/mob/living/carbon/alien/proc/getPlasma() +/mob/living/carbon/alien/getPlasma() return storedPlasma /mob/living/carbon/alien/eyecheck() @@ -262,9 +262,8 @@ Des: Gives the client of the alien an image on each infected mob. for (var/mob/living/C in mob_list) if(C.status_flags & XENO_HOST) var/obj/item/organ/internal/body_egg/alien_embryo/A = C.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]") if(A) - var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]") + var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[A.stage]") client.images += I return @@ -285,7 +284,7 @@ Des: Removes all infected images from the alien. /mob/living/carbon/alien/proc/updatePlasmaDisplay() if(hud_used) //clientless aliens - hud_used.alien_plasma_display.maptext = "

[storedPlasma]
" + hud_used.alien_plasma_display.maptext = "
[getPlasma()]
" /mob/living/carbon/alien/larva/updatePlasmaDisplay() return diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 3a60506ebe1..9600b326281 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -28,7 +28,7 @@ Doesn't work on other aliens/AI.*/ return if(powerc(50,1)) - adjustToxLoss(-50) + adjustPlasma(-50) for(var/mob/O in viewers(src, null)) O.show_message(text("[src] has planted some alien weeds!"), 1) new /obj/structure/alien/weeds/node(loc) @@ -40,7 +40,7 @@ Doesn't work on other aliens/AI.*/ set category = "Alien" if(powerc(10)) - adjustToxLoss(-10) + adjustPlasma(-10) var/msg = sanitize(input("Message:", "Alien Whisper") as text|null) if(msg) log_say("Alien Whisper: [key_name(src)]->[key_name(M)]: [msg]") @@ -61,8 +61,8 @@ Doesn't work on other aliens/AI.*/ amount = abs(round(amount)) if(powerc(amount)) if (get_dist(src,M) <= 1) - M.adjustToxLoss(amount) - adjustToxLoss(-amount) + M.adjustPlasma(amount) + adjustPlasma(-amount) M << "[src] has transfered [amount] plasma to you." src << {"You have trasferred [amount] plasma to [M]"} else @@ -97,7 +97,7 @@ Doesn't work on other aliens/AI.*/ else// Not a type we can acid. return - adjustToxLoss(-200) + adjustPlasma(-200) new /obj/effect/acid(get_turf(O), O) visible_message("[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!") else @@ -110,7 +110,7 @@ Doesn't work on other aliens/AI.*/ set category = "Alien" if(powerc(50)) - adjustToxLoss(-50) + adjustPlasma(-50) src.visible_message("[src] spits neurotoxin!", "You spit neurotoxin.") var/turf/T = loc @@ -136,7 +136,7 @@ Doesn't work on other aliens/AI.*/ var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in list("resin wall","resin membrane","resin nest") //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist if(!choice || !powerc(55)) return - adjustToxLoss(-55) + adjustPlasma(-55) for(var/mob/O in viewers(src, null)) O.show_message(text("[src] vomits up a thick purple substance and shapes it!"), 1) switch(choice) @@ -162,3 +162,27 @@ Doesn't work on other aliens/AI.*/ //Paralyse(10) src.visible_message("[src] hurls out the contents of their stomach!") return + +/mob/living/carbon/proc/getPlasma() + var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel) + if(!vessel) return 0 + return vessel.stored_plasma + + +/mob/living/carbon/proc/adjustPlasma(amount) + var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel) + if(!get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)) return 0 + vessel.stored_plasma = max(vessel.stored_plasma + amount,0) + vessel.stored_plasma = min(vessel.stored_plasma, vessel.max_plasma) //upper limit of max_plasma, lower limit of 0 + return 1 + +/mob/living/carbon/alien/adjustPlasma(amount) + . = ..() + updatePlasmaDisplay() + +/mob/living/carbon/proc/usePlasma(amount) + if(getPlasma() >= amount) + adjustPlasma(-amount) + return 1 + + return 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index cff294c42cb..4a35eb8afa4 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -13,12 +13,11 @@ if(src.name == "alien drone") src.name = text("alien drone ([rand(1, 1000)])") src.real_name = src.name - internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/large - internal_organs += new /obj/item/organ/internal/xenos/resinspinner - internal_organs += new /obj/item/organ/internal/xenos/acid - //verbs.Add(/mob/living/carbon/alien/humanoid/proc/resin,/mob/living/carbon/alien/humanoid/proc/corrosive_acid) - //..() - + internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/drone + internal_organs += new /obj/item/organ/internal/xenos/acidgland + internal_organs += new /obj/item/organ/internal/xenos/resinspinner + ..() +// //Drones use the same base as generic humanoids. //Drone verbs @@ -31,7 +30,7 @@ // Queen check var/no_queen = 1 for(var/mob/living/carbon/alien/humanoid/queen/Q in living_mob_list) - if(!Q.key && Q.brain_op_stage != 4) + if(!Q.key && Q.get_int_organ(/obj/item/organ/internal/brain/))//Q.brain_op_stage != 4) continue no_queen = 0 @@ -39,7 +38,7 @@ src << "We cannot perform this ability at the present time!" return if(no_queen) - adjustToxLoss(-500) + adjustPlasma(-500) src << "You begin to evolve!" for(var/mob/O in viewers(src, null)) O.show_message(text("[src] begins to twist and contort!"), 1) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index dca1719b0e3..567987ff50d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -44,7 +44,7 @@ if(m_intent == "run" || resting) ..() else - adjustToxLoss(-heal_rate) + adjustPlasma(-heal_rate) //Hunter verbs diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 12d5c4e155c..defb8a1554d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -46,8 +46,8 @@ name = text("alien sentinel ([rand(1, 1000)])") real_name = name internal_organs += new /obj/item/organ/internal/xenos/plasmavessel - internal_organs += new /obj/item/organ/internal/xenos/acid - internal_organs += new /obj/item/organ/internal/xenos/neurotoxin + internal_organs += new /obj/item/organ/internal/xenos/acidgland + internal_organs += new /obj/item/organ/internal/xenos/neurotoxin //..() /mob/living/carbon/alien/humanoid/sentinel/handle_regular_hud_updates() diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm index 24c1809382f..3be1e389671 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm @@ -49,11 +49,11 @@ real_name = src.name internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen - internal_organs += new /obj/item/organ/internal/xenos/resinspinner - internal_organs += new /obj/item/organ/internal/xenos/acid - internal_organs += new /obj/item/organ/internal/xenos/neurotoxin - internal_organs += new /obj/item/organ/internal/xenos/eggsac - //..() + internal_organs += new /obj/item/organ/internal/xenos/acidgland + internal_organs += new /obj/item/organ/internal/xenos/eggsac + internal_organs += new /obj/item/organ/internal/xenos/resinspinner + internal_organs += new /obj/item/organ/internal/xenos/neurotoxin +// ..() /mob/living/carbon/alien/humanoid/empress diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 690e2722ddc..e79338f5e90 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -24,11 +24,11 @@ break real_name = src.name - internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/lqueen - internal_organs += new /obj/item/organ/internal/xenos/resinspinner - internal_organs += new /obj/item/organ/internal/xenos/acid - internal_organs += new /obj/item/organ/internal/xenos/neurotoxin - internal_organs += new /obj/item/organ/internal/xenos/eggsac + internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen + internal_organs += new /obj/item/organ/internal/xenos/acidgland + internal_organs += new /obj/item/organ/internal/xenos/eggsac + internal_organs += new /obj/item/organ/internal/xenos/resinspinner + internal_organs += new /obj/item/organ/internal/xenos/neurotoxin // ..() diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 28104b67a18..df0c64f40d0 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -66,8 +66,9 @@ ..() stat(null, "Progress: [amount_grown]/[max_grown]") -/mob/living/carbon/alien/larva/adjustToxLoss(amount) - if(stat != DEAD) + +/mob/living/carbon/alien/larva/adjustPlasma(amount) + if(stat != DEAD && amount > 0) amount_grown = min(amount_grown + 1, max_grown) ..(amount) diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index f7bbbd5e985..efbea778c1a 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -119,7 +119,7 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds Proc: RefreshInfectionImage() Des: Removes the current icons located in the infected mob adds the current stage ----------------------------------------*/ -/obj/item/organ/internal/body_egg/proc/RefreshInfectionImage() +/obj/item/organ/internal/body_egg/alien_embryo/RefreshInfectionImage() RemoveInfectionImages() AddInfectionImages() @@ -127,7 +127,7 @@ Des: Removes the current icons located in the infected mob adds the current stag Proc: AddInfectionImages(C) Des: Adds the infection image to all aliens for this embryo ----------------------------------------*/ -/obj/item/organ/internal/body_egg/proc/AddInfectionImages() +/obj/item/organ/internal/body_egg/alien_embryo/AddInfectionImages() for(var/mob/living/carbon/alien/alien in player_list) if(alien.client) var/I = image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "infected[stage]") @@ -137,7 +137,7 @@ Des: Adds the infection image to all aliens for this embryo Proc: RemoveInfectionImage(C) Des: Removes all images from the mob infected by this embryo ----------------------------------------*/ -/obj/item/organ/internal/body_egg/proc/RemoveInfectionImages() +/obj/item/organ/internal/body_egg/alien_embryo/RemoveInfectionImages() for(var/mob/living/carbon/alien/alien in player_list) if(alien.client) for(var/image/I in alien.client.images) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index d8ad905221e..7711df5d7f6 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -102,7 +102,7 @@ var/const/MAX_ACTIVE_TIME = 400 icon_state = "[initial(icon_state)]" Attach(hit_atom) -/obj/item/clothing/mask/facehugger/proc/Attach(M as mob) +/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M as mob) if(!isliving(M)) return 0 if( (!iscorgi(M) && !iscarbon(M)) || isalien(M)) @@ -185,7 +185,7 @@ var/const/MAX_ACTIVE_TIME = 400 icon_state = "[initial(icon_state)]_impregnated" if(!(target.status_flags & XENO_HOST)) - new /obj/item/alien_embryo(target) + new /obj/item/organ/internal/body_egg/alien_embryo(target) if(iscorgi(target)) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 5fbdd068d60..2426766b212 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -732,22 +732,22 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, else return initial(pixel_y) +/mob/living/carbon/emp_act(severity) + for(var/obj/item/organ/internal/O in internal_organs) + O.emp_act(severity) + ..() + +/mob/living/carbon/Stat() + if(statpanel("Status")) + var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel) + if(vessel) + stat(null, "Plasma Stored: [vessel.stored_plasma]/[vessel.max_plasma]") + ..() + /mob/living/carbon/get_all_slots() return list(l_hand, r_hand, handcuffed, legcuffed, back, - wear_mask) - -/mob/living/carbon/emp_act(severity) - for(var/obj/item/organ/internal/O in internal_organs) - O.emp_act(severity) - ..() - - - /mob/living/carbon/check_eye_prot() - var/number = ..() - for(var/obj/item/organ/internal/cyberimp/eyes/EFP in internal_organs) - number += EFP.flash_protect - return number + wear_mask) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 26cd094ee3b..bdc1652231a 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -250,12 +250,15 @@ if(getBrainLoss() >= 60) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - if(species.show_ssd && (!species.has_organ["brain"] || species.get_int_organ(/obj/item/organ/internal/brain)) && stat != DEAD) + if(species.show_ssd && (!species.has_organ["brain"] || src.get_int_organ(/obj/item/organ/internal/brain)) && stat != DEAD) if(!key) msg += "[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.\n" else if(!client) msg += "[t_He] [t_has] suddenly fallen asleep.\n" + if(!get_int_organ(/obj/item/organ/internal/brain)) + msg += "It appears that it's brain is missing...\n" + var/list/wound_flavor_text = list() var/list/is_destroyed = list() var/list/is_bleeding = list() @@ -484,11 +487,12 @@ /proc/hasHUD(mob/M as mob, hudtype) if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M + var/obj/item/organ/internal/cyberimp/eyes/hud/CIH = H.get_int_organ(/obj/item/organ/internal/cyberimp/eyes/hud) switch(hudtype) if("security") - return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses) + return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/security) if("medical") - return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health/health_advanced) + return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health/health_advanced) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/medical) else return 0 else if(istype(M, /mob/living/silicon)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a25a7273243..4c8b53ccfe7 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1110,6 +1110,9 @@ if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask var/obj/item/clothing/mask/MFP = src.wear_mask number += MFP.flash_protect + for(var/obj/item/organ/internal/cyberimp/eyes/EFP in src.internal_organs) + number += EFP.flash_protect + return number ///tintcheck() diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 3052db0793d..2b9135ea044 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -159,10 +159,10 @@ for(var/organ in has_organ) var/organ_type = has_organ[organ] H.internal_organs_by_name[organ] = new organ_type(H,1) - internal_organs += new has_organ[organ] + H.internal_organs += new has_organ[organ] - for(var/obj/item/organ/internal/I in internal_organs) - I.Insert(src) + for(var/obj/item/organ/internal/I in H.internal_organs) + I.Insert(src) for(var/name in H.organs_by_name) H.organs |= H.organs_by_name[name] diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index d9b00be4126..0f21d097f5d 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -393,6 +393,9 @@ var/global/list/damage_icon_parts = list() else //warning("Invalid h_style for [species.name]: [h_style]") + if(!get_int_organ(/obj/item/organ/internal/brain)) + face_standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s", "layer" = -HAIR_LAYER) + overlays_standing[HAIR_LAYER] = image(face_standing) if(update_icons) update_icons() diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 03682334dae..684690de435 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -226,13 +226,13 @@ A.Remove(src) for(var/obj/item/I in src) give_action_button(I, 1) - return + return /mob/living/proc/give_action_button(var/obj/item/I, recursive = 0) if(I.action_button_name) if(!I.action) if(istype(I, /obj/item/organ/internal)) - I.action = new/datum/action/organ_action + I.action = new/datum/action/item_action/organ_action else if(I.action_button_is_hands_free) I.action = new/datum/action/item_action/hands_free else diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 580dd5e035e..3c02732c9f5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -923,30 +923,4 @@ //used in datum/reagents/reaction() proc /mob/living/proc/get_permeability_protection() - return 0 - -/mob/living/proc/handle_actions() - //Pretty bad, i'd use picked/dropped instead but the parent calls in these are nonexistent - for(var/datum/action/A in actions) - if(A.CheckRemoval(src)) - A.Remove(src) - for(var/obj/item/I in src) - give_action_button(I, 1) - return - -/mob/living/proc/give_action_button(var/obj/item/I, recursive = 0) - if(I.action_button_name) - if(!I.action) - if(istype(I, /obj/item/organ/internal)) - I.action = new/datum/action/item_action/organ_action - else if(I.action_button_is_hands_free) - I.action = new/datum/action/item_action/hands_free - else - I.action = new/datum/action/item_action - I.action.name = I.action_button_name - I.action.target = I - I.action.Grant(src) - - if(recursive) - for(var/obj/item/T in I) - give_action_button(I, recursive - 1) + return 0 \ No newline at end of file diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 0a61d9030c1..ebb94255278 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -241,3 +241,5 @@ var/resize = 1 //Badminnery resize var/datum/vision_override/vision_type = null //Vision override datum. + + var/list/permanent_huds = list() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 46ee6eae9a1..29b803a6bea 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -38,7 +38,7 @@ proc/isfacehugger(A) return 0 proc/isembryo(A) - if(istype(A, /obj/item/alien_embryo)) + if(istype(A, /obj/item/organ/internal/body_egg/alien_embryo)) return 1 return 0 diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 2af447757f2..f1137f58897 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -8,20 +8,34 @@ w_class = 1 var/sight_flags = 0 - var/eye_color = "fff" - var/old_eye_color = "fff" + var/list/eye_colour = list(0,0,0) + var/list/old_eye_colour = list(0,0,0) var/flash_protect = 0 var/aug_message = "Your vision is augmented!" +/obj/item/organ/internal/cyberimp/eyes/proc/update_colour() + if(!owner) + return + eye_colour = list( + owner.r_eyes ? owner.r_eyes : 0, + owner.g_eyes ? owner.g_eyes : 0, + owner.b_eyes ? owner.b_eyes : 0 + ) + /obj/item/organ/internal/cyberimp/eyes/Insert(var/mob/living/carbon/M, var/special = 0) ..() - if(istype(owner, /mob/living/carbon/human) && eye_color) + if(istype(owner, /mob/living/carbon/human) && eye_colour) var/mob/living/carbon/human/HMN = owner - old_eye_color = HMN.eye_color - HMN.eye_color = eye_color - HMN.regenerate_icons() + old_eye_colour[1] = HMN.r_eyes + old_eye_colour[2] = HMN.g_eyes + old_eye_colour[2] = HMN.b_eyes + + HMN.r_eyes = eye_colour[1] + HMN.g_eyes = eye_colour[2] + HMN.b_eyes = eye_colour[3] + HMN.update_eyes() if(aug_message && !special) owner << "[aug_message]" M.sight |= sight_flags @@ -29,10 +43,12 @@ /obj/item/organ/internal/cyberimp/eyes/Remove(var/mob/living/carbon/M, var/special = 0) ..() M.sight ^= sight_flags - if(istype(owner,/mob/living/carbon/human) && eye_color) + if(istype(owner,/mob/living/carbon/human) && eye_colour) var/mob/living/carbon/human/HMN = owner - HMN.eye_color = old_eye_color - HMN.regenerate_icons() + HMN.r_eyes = old_eye_colour[1] + HMN.g_eyes = old_eye_colour[2] + HMN.b_eyes = old_eye_colour[3] + HMN.update_eyes() /obj/item/organ/internal/cyberimp/eyes/on_life() ..() @@ -58,7 +74,7 @@ /obj/item/organ/internal/cyberimp/eyes/xray name = "X-ray implant" desc = "These cybernetic eye implants will give you X-ray vision. Blinking is futile." - eye_color = "000" + eye_colour = rgb(0, 0, 0) implant_color = "#000000" origin_tech = "materials=6;programming=4;biotech=6;magnets=5" sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS @@ -66,7 +82,7 @@ /obj/item/organ/internal/cyberimp/eyes/thermals name = "Thermals implant" desc = "These cybernetic eye implants will give you Thermal vision. Vertical slit pupil included." - eye_color = "FC0" + eye_colour = rgb(255, 204, 0) implant_color = "#FFCC00" sight_flags = SEE_MOBS flash_protect = -1 @@ -97,7 +113,7 @@ /obj/item/organ/internal/cyberimp/eyes/hud/medical name = "Medical HUD implant" desc = "These cybernetic eye implants will display a medical HUD over everything you see." - eye_color = "0ff" + eye_colour = rgb(15,15,0) implant_color = "#00FFFF" origin_tech = "materials=4;programming=3;biotech=4" aug_message = "You suddenly see health bars floating above people's heads..." @@ -106,7 +122,7 @@ /obj/item/organ/internal/cyberimp/eyes/hud/security name = "Security HUD implant" desc = "These cybernetic eye implants will display a security HUD over everything you see." - eye_color = "d00" + eye_colour = rgb(208,0,0) implant_color = "#CC0000" origin_tech = "materials=4;programming=4;biotech=3;combat=1" aug_message = "Job indicator icons pop up in your vision. That is not a certified surgeon..." diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index bff7e2ed3ff..fe00f6f2e3e 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -157,7 +157,7 @@ desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." icon_state = "chest_implant" implant_color = "#00AA00" - var/hunger_threshold = NUTRITION_LEVEL_STARVING + var/hunger_threshold = 150 var/synthesizing = 0 var/poison_amount = 5 slot = "stomach" @@ -186,7 +186,7 @@ desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." icon_state = "chest_implant" implant_color = "#006607" - hunger_threshold = NUTRITION_LEVEL_HUNGRY + hunger_threshold = 250 poison_amount = 10 origin_tech = "materials=5;programming=3;biotech=5" diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm index 755ca5e4417..a71e1003fbc 100644 --- a/code/modules/surgery/organs/helpers.dm +++ b/code/modules/surgery/organs/helpers.dm @@ -22,7 +22,7 @@ returnorg = get_organs_zone("groin") for(var/obj/item/organ/internal/O in internal_organs) - if(parent_organ == O.parent_organ) + if(zone == O.parent_organ) returnorg += O return returnorg diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 9ecda01a4e3..85de7330052 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -4,7 +4,7 @@ var/list/organ_cache = list() name = "organ" icon = 'icons/obj/surgery.dmi' var/dead_icon - var/mob/living/carbon/owner = null + var/mob/living/carbon/human/owner = null var/status = 0 var/vital //Lose a vital limb, die immediately. var/damage = 0 // amount of damage to the organ diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index b6575e970cd..dc28e8e22d0 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -24,7 +24,7 @@ owner = M M.internal_organs |= src - M.internal_organs_by_name[organ_tag] = src + //M.internal_organs_by_name[organ_tag] = src loc = null if(organ_action_name) action_button_name = organ_action_name @@ -32,23 +32,12 @@ /obj/item/organ/internal/proc/Remove(mob/living/carbon/M, special = 0) owner = null if(M) - M.internal_organs_by_name[organ_tag] = null - M.internal_organs_by_name -= organ_tag - M.internal_organs_by_name -= null + // M.internal_organs_by_name[organ_tag] = null + // M.internal_organs_by_name -= organ_tag + // M.internal_organs_by_name -= null M.internal_organs -= src - loc = get_turf(M) - processing_objects |= src - var/datum/reagent/blood/organ_blood - if(reagents) organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list - if(!organ_blood || !organ_blood.data["blood_DNA"]) - M.vessel.trans_to(src, 5, 1, 1) - if(vital && !special) - //if(user) - // user.attack_log += "\[[time_stamp()]\] removed a vital organ ([src]) from [key_name(M)] (INTENT: [uppertext(user.a_intent)])" - // M.attack_log += "\[[time_stamp()]\] had a vital organ ([src]) removed by [key_name(user)] (INTENT: [uppertext(user.a_intent)])" - // msg_admin_attack("[key_name_admin(user)] removed a vital organ ([src]) from [key_name_admin(M)]") M.death() @@ -97,14 +86,14 @@ if(M == user && ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/weapon/reagent_containers/food/snacks/S = prepare_eat() - if(S) - H.unEquip() - H.put_in_active_hand(S) - if(fingerprints) S.fingerprints = fingerprints.Copy() - if(fingerprintshidden) S.fingerprintshidden = fingerprintshidden.Copy() - if(fingerprintslast) S.fingerprintslast = fingerprintslast - S.attack(H, H) - qdel(src) + if(S) + H.unEquip() + H.put_in_active_hand(S) + if(fingerprints) S.fingerprints = fingerprints.Copy() + if(fingerprintshidden) S.fingerprintshidden = fingerprintshidden.Copy() + if(fingerprintslast) S.fingerprintslast = fingerprintslast + S.attack(H, H) + qdel(src) else ..() @@ -213,20 +202,23 @@ /obj/item/organ/internal/eyes/proc/update_colour() if(!owner) return - eye_colour = list( - owner.r_eyes ? owner.r_eyes : 0, - owner.g_eyes ? owner.g_eyes : 0, - owner.b_eyes ? owner.b_eyes : 0 - ) + if(istype(owner,/mob/living/carbon/human)) + var/mob/living/carbon/human/eyes = owner + eye_colour = list( + eyes.r_eyes ? owner.r_eyes : 0, + eyes.g_eyes ? owner.g_eyes : 0, + eyes.b_eyes ? owner.b_eyes : 0 + ) /obj/item/organ/internal/eyes/Insert(mob/living/carbon/M, special = 0) ..() // Apply our eye colour to the target. - if(istype(M) && eye_colour) - M.r_eyes = eye_colour[1] - M.g_eyes = eye_colour[2] - M.b_eyes = eye_colour[3] - M.update_eyes() + if(istype(M,/mob/living/carbon/human) && eye_colour) + var/mob/living/carbon/human/eyes = M + eyes.r_eyes = eye_colour[1] + eyes.g_eyes = eye_colour[2] + eyes.b_eyes = eye_colour[3] + eyes.update_eyes() /obj/item/organ/internal/eyes/surgeryize() @@ -335,10 +327,10 @@ /obj/item/organ/internal/shadowtumor/New() ..() - processing_object.Add(src) + processing_objects.Add(src) /obj/item/organ/internal/shadowtumor/Destroy() - processing_object.Remove(src) + processing_objects.Remove(src) ..() /obj/item/organ/internal/shadowtumor/process() diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index 8863e79455f..7ae770d5551 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -16,7 +16,7 @@ for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) verbs += P -/obj/item/organ/internal/alien/Remove(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/xenos/Remove(mob/living/carbon/M, special = 0) for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) verbs -= P diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index e01e99ba040162f9542b46d49d0e3f9b0349347d..4a54071d83cc9837980fcc030f5bf5231c40f254 100644 GIT binary patch delta 11437 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 W%?+5RtD`+g9dxt|G{2}jME*aB;|FyB delta 11080 zcmZ{Kby!r-A2o=Iij>5nD-D9uT@p$OCsk{1L8SwdJsT1o_@yCs&82I=kw zm)fOv-@AT)@AJI>ygmCWcXcf~C%FM<^LYPt2fz2D(J$PEnM5xTFElU(oD>ehbWxQ zZG}MJN3lHgC+*xH$N8S3x6#MzFcV!8gJ|k;^mcu-qmHiBT|2$`V%fQ(qAPInV@%fT z{DvlzW}oUh;2!e#ng6Akd!SjBV1 zC1m&s94INogM5yq@eHv`Jd&Tl2HNbrIt&@I| zHl&<)crn%C)hz$rI|>@q=|5aT0AFP36BlA}uPvt)BA~OC{{4#~&pN9I1y5CVa@_Q! zbE(z7bd9yyGzLmm>%R&iVj+K(OC;F&q(Zl}HUIH*`m1-nMz}q$dMB#X(-b^NC3{zT zRo}bSK0}=0J6Vp$YqbH9y=wm<@@Es2HI;7DL`tPlx@SXe9uDtsKkrIS zZ-q>>TDK|#DZif3u8>7Jp^Vh2p{(+&TcH}zl000n=Z$$A@|kCU;kHpx^ku|!KWre7hUm9^tbODQeg$(H>w{DwVCm|J|w0~Q4*biyWXk@LdZl=OQ$&7%+cAKKPY&A z&yqcmK5Zn$<~gbQX3A1V4ChQ^`b{BK%#Z~Mge^;7Wx>&~>+!4L*;iM*$U}4!*-paM z*?Zb+j(7q2f@ll@RDUzWBGJ^+R@d^U)Mt62kJjzhSHfVnZy!oU> zTsD7tfB79lTs`Dryp%gS+NBzDe0er<43mXjg^tAbSJxeune;5GF?*k@cG+cW%x#}4 zS5j^59?$kci%=icy`Nq>UG@yv*#vfDyMiTIVjcC!_?R-~?CP42 z+bkYuK@5GQyEsosIMaU`|6Wv_Pl8pfXI;5j?YY!E9p8}Zvw9NOon07WIif~YyI)q| zI83U^Yc5P~FS}+6PTLvAdxl(+k(7VpX3(BOIIzv>IQI z&S$<*rF=&PmOt(jy30(ZWFG{d$!}?mP`b+`rS@!n`}m=wppJXc_j?Q0E4b({_kCDS zv(5LP@TEk$dJp_sVkny$U4xQR@TKDNd^KH+F5)#o5^k8j0h+{9NL&3_O`o zo2qZAdCdR_zsz9Yr5{M-dBaF-@Q%-B|AEzRjI_Ww@6(&zXLQ=$?lBuQc>-!vS@kFE zyC|byF(-R+Ie{;Q4dN?2HGO|@zJHd)!b;<;;!~}795LaO4>oqT_Rc10_VC;~N10Rq zqq_L>s?qC(x7BT^PBemF{eFH;5E~qmN0xywzwC%jwT~|H`28ly>T_tdr$=by+f}-o zCi>F5ehb>_6pU#qoYowxt+zlB^q>c}2j-iKutY{|k$HaooiXJXSF4WzKHV#C9@-vvhw!i*dR$D+5H4p&6~BlCrGCtT@Nw@EjKWpA7j+L`1nmx9@{oWFo*YvCKP)y1lIjCT}? zVuOy{53LljE&HpG6iLHAYXldq>dd5{y zSon3gfVlVu?zk9;OTXN)9;+v0XK(86Mdp~6wv39(IY@YWq1g8A(W5lz!qJNz@6RTW zKJAKc^FZtkmH8O|a!F(DcS4*y$>FSbZ~_ozhQ!{b?)@NQ@)aZiF`=f6wjVRnJp%8~ zNJ&YN7*|)WYxgpLQ7E7Hm2xpQiQi_m;9GgbyZC~yDbw&RE z+K~`HXdCl~9-dKFdA7P%d4B)eU0WaVXEP|S?!Hl{`#fa|rD@UBObmVk96~slvCPGE zuy6H49^h-g0l@e4E9vaQp+2R~ZRc+7#noBQc|RtWgMO*~2D;UOq6Ca{yB?|TX{_x| zo$b|5dRgvtHeor#mA`xS`!YX{Fy*C;9rUtA;&D!KYBQZCGpM$Mytw80*lvppd(rJ{ zj7IJLm&fCm#eTbX!-IoNEG%H>SXfGFn3gzYY9bqxfV69(_i$#YplhL~W=vrit1R6F zn-dqO$&K4o4O8>eK#P!TWSIa1_ph(p^cTMNG)y}B9_+H_aJbhKd+Im&3?BskT2`Y& zHZRJ?8NvR6FfyQzq_qD#_7?TT!ntwzkxVG}NrO}EZe@nS?)kQK(=ftM7xlZ;$oGa+ zEqNO7_fw-IcFsGJFEYW>S=rTsAO^l z2r##tjEoGu_b-Xb87i8vEp*Pbj0&`HUNZ?rdXAsb_@GCCGyPhIJ9ZJUwQth&ADoZ8 zV&(aTBgu#cG0qUMGPKT0CMkUlY6-|2%G$Xagg$=w;oW0{2%KuXgOES_Bl`T;qy}xt z`Fn)S2icI|Nus6nbjP>^vBr0ekgK-xmAd1Zb&tRxOIE|!a?wF$iMlzubPh(J!=?Od z^_<0?8m^R1nLpez=i9>+C76&-OK6v+PtHJ=BN?rKX0K$(^R?b0Tb+ZeY5*EhxYPA? z_({MZi-Np-&~tTlRW&tuCFUHxj~0W?8SdCn`Z6Tou~}YT?s9qN&bQw31SmZ#* zTQ&^C(&Hof)pN;-(u6&OfccKhdLUe>hU{jk$cjayAbRA-3HhN=q_;uwsc4E7iZFBv z#MR;36nUm4Fym2haUjkmy3@9(Y*L&uQmX0ULsD{@8Bx)LVRQZ>W(wy{zPKptyw%UR zn%~RzXl=g!Ww1lv*={$!TtmTxI8t{s*L`msF0>FyI4uMK$N8y`t*oq8@^aH2(J~%s z!pTLKO`82@r<;LhlPxd956J6KB(Zjpb8&magwKOXG+dayf!ptw2Jr9u zGe0G~0#YsXUsE_Nx*2^mq&;(ajy|vQru(TK<7&WF4i19`V&S%}w@GYtic_a!5z))@jpwKd;L zKSWjDF)@<%X(#uYc_*Ou*}Pdp%hz(vOo&6*`NN0Kan;Uw+eqbG6hHK5IG#9nLMS(P zn-@NZHh|iN@co~Pjl=*Gyl-{t97S)jI(HVc%_&9QWHJOrZGS|WWGVATbaMUCV(iPtow=RQOw z_1HGS8w`1^A3E4uOi@H`TX61SSTxkHE7Fosu)GyvEXSC3RC*oY@!DLC`;cqGpEEYl z%L9P@IYN*5T&TK+FCRvkH#cK@jB#M^k(cVS36lfOv6u6**3#+Q%{#|v0GE;gc5TGy zjYj%*)-J}3qozs&i-?E&?{A`uclW=2E7@=X6x;aO+^;gwbz#G6 ze`}HzJ2PW$^KRm`Z_&QPA27a1pcbFW?z~g>{oUD-2Vh#%)La`IW<4c_AM=uVo+Dlz zBI&-zuX#_F7HTT&FyN*()E(v@eLN@6$*DDdkh=yScr{(EkGoh7hplBGKYjZ20y*L8 z8fEEXYkc;p=uNj7h#8nokqPaqL#NU`RcM+Ix&nEC{uj)K&oXeZRz00kRDHME370X$ z!`($bKlL!m3Sx28=scO4UtadY&1W7gPM&u}@FZ`qtT)$k)W32cJ2?jj(*$kF<4wIM zYj_}S?a#4!zPA6!d$XMVUpQgma1mk&y>@ST{!sG2O z>fX_H(gQreX<^7}u|n~lBR04A_s+V>@7yTbFo_M%RuY3P1%;o&zdoRjHBHLt=eaAc zI)HT~aeLk1Y{+q;EFGs%`Hcojz^SZ}Wr*(4V3e-CXPtG!%+WKNV|zb;;pm;mlPdcn zF3|?`o(+}X3k@YtdpqtXT1#WlWZ*#t76V*snH)<=@_$H$%1d>5zZZTgb_B{%Ag&Ei ze&wj>six7Xbyx=<`rYB-_@~@AH{RJ4K`0;YC9n)JCY+&_(e4q}v@(V?rV0vz()3t- z_GEE=(%q3WZrH};&CS1_xmzoaW-VU64&io$3M7^|qVVMP-=SlgeV0bYOzx*&dmfFFwCZGy z8#ZB0%#+Wb=*h6y*--~0bz4^BA3dL(;b{FNH^F%)*ufl8aEU$R^SLbP@F)@cu!~u} zMNt(-zIK+_=&Z0*f5u=RPORoy;e6-*pY`#ZaY0%GWz1d8i~)W925i&8NO z!Vxfnxu%aOg*Cyz%o%e`{T*Wo2-S<=E2|*>6#A@$Vlh)JV3J9ggghy#fF*b@gyjT% z%HP89vS{f#+{~;r1f&yA5>|cto72U8e#1(O1Khl?y)TNt-*`fJg=PrRT(Y-oCFYf^ z`%5t`#U9>OMx|+a&Q|dn2pY5`RKV>o<-d2r$d@>qpY)eFTRP?}LRc0fN`EXRz#*cK z+das?F1)1bWBvX9L3xIDzL|FSfC8n-ib~+-M;>=17j}xPP01GlpJOO6GY<5WxZiUj zMd9lx}HGT(X6(|#S$**^G^F-1`(^m}8IO#*ofJE3NDs$96 zqm(7LY?skyk4cQ+=Lw&%kNw(~CWE!;uvwJ91{aXLc-r1SFI_&Qoj;hNcz0TwsW*+$ zEXw&fV4}2e=nbEE>N#sasC#klrPYdPvFVT1{8L14a~x7ZV2$es|FF1Qr=fKE=AC8+ zY$FM>6R5L=0mx6}M$+D{Mv^?pP(ZpV-%8uraGf^!wWgBmbwKl&vhu~auImOU1+@(a z-%*B!r&6A0e`9#Z@k8BLiZdf!Cf}2dw128D)FeZGF5!Ba6>btKdh54CI%n*32k(iL zgF<7O->dHHquBlQL*eQl(AById^W)O8c)Me2`C2_VzxRyX8D8U4E7Sv=sf(`c%lrW zi~|eD(B}*Dfm#5>_6evm8tY6$>ucL~M)mrDIH6V1BQK7;z@({yI8=O>Nxn?^y^FbyK7rpB^imG@fkAtLf`Q z7)LmW$_yJ#E?HA+3v`8>sAO<#VRF8D%08_2%Pbid^%$ZUS}wky+?hUSBS%6id9f6? zo4f*Qli>Mj!dMgzMlZ9S*d}L4Q>Qw#lt61*gex1z0b`5hV`H*6uYJ-2h?dsMIG*1} zG$oqPstsNL)`!u5KdAK0>)M2s??|LW#PG0TvpwdcS{)AvNvm$QSkdJ|x12X{imIjL zHlE%A6AR~OVYD3f5>7`A)}m(yN!ylS&W}iq4h`pMHGLR*LBTF6?pcIX7J>L%U-J2` zr3s+@pLtqJ8>P`w>1?ec_I`VxHNHC`*n`%sDb5kGB=mT#rj1KNr&;?Qen#xYsr$NF zS2{yGOi}VaGFR7$OZ=kT$|*8+8=9(jZnm#f$O{B$Lh(!WkEOtX1?P7m&br54k+3H&%jh)Zd{dOGe(^;jo zUEL}~3K|wGdx-9W?%9s+x$9{A`1R@ze#S~VQ?4dSFgMkpT9htipbXIglt47Q#Lg_$ zz%0{JCbC3)E&T`k6f`pXyq&vv;Yq@2{m+ z;z;8XxnA?fN3%nWBV8D#_yZ{J6kvGVFF|0N2W^mme17v@5PcI;Z8l2cpmOSiXiq7@ z+EAK_oX6MlZSBXOdw~W~Z-(^O0v#rMCXBR_tN)5zAq``!1Yx?Da(E3#a4^)&vojC5 z%tV&+Ak9^TIn_%nc)>g+!a0?Cz=Ny~>uh*xv?)~8NWQTGtQl$a+SX@I)X^}%?CDi8 z)s@8RO5NnXcH<{kj$<`vs|x2!t_nJp#SGCzfEY7Z%;SxYSTLXQYKd5&0g5h&JYG*B zGN$G;2m;+X>>GGEG6)F%T)#z5P~xu{@SlAi({_j4{?9&-enUL*6G6!NiGn{oK*0|J zyjyKcBW6^)Y#_b2yyWC55CWQ%ZD+icluT4DS$a$6>w8o-Csbg}dMZkHD$5e5N6VEj z@UB(${0+D<(=0x-Ya;E#Hhh06(&SOXbBz#L(3h^%kPp`+rjgAfy@|kYLjx0fRv(?U zfNeK}u*W+>*gSAIq0wiG4f7Qbcvn#b*%}iIIKB9!sziS8N-e+T!u~bQ#k*y^WIk8# zgNJe(08r;cT|umEeB)HQhPUqsSYsZ11$T% zG3fW_%W8SuWbsS{`m~i_Lx;wH(PMz?MTsHafq+Jhs*inSWN}}8^o`VB5Z;#8f4l}7 zk|Vc9<#{NdOm*cxz8l*{lMECsTyWh1hBw21@fJ}l_=YiI_}T9jFc8LgdC+VprX>Ay z`e4_>q^UC9oNIhkP|Tne-#DADxd*LsP#fAUk6ubX`vm+W-Gixu7YA+C9;)AS+oH0R zgF7x44WvLg6{Sg+WefP=O)%*H!36{Fo;7IVvBQ z=}^XaHL#HZFl^xj{6a%Yo5PcYBpR3x9$ISKdp#SIsphfrJpmNLEMph}0YLDlN}gcR4QJcELO8Y@qp3o>NhSu`{eP+itNO`*xW1Qd@xXvy)m-az_57t-( zGXQ$#STLtQ+l$#C(a1TCB5yf7t9s;aW#`oTtB`%?9EXBKw5XmUzW9@HPf&+{ugIwW z>HKu1ovyuCq2lC~U^4f?4tF(IztR>n(T2(=K<56okEU>I&#Eac1891wqLEz1pi(t} z%BMU==T*O7HV$@Vq@cw>be!j*!h|8>`8T(h&JhrNt19fgp36f-M3e^KbzW+}37DEPRWVnYo0}JaBc=+D z*djjFBTC2rDH9)v?y!g`{GwxM=czNe{Lh`A2FPig~a6|yymEYQjQ+UpP_ z;2rbRkPjPYc6M-_ad0T`pwDe{6_w->{puofaZ3t?6lzX$yGo;tq;VrFl0=NhGF6haFb zqB^gU8MgNUPm7g{#f^-;W|ZLKkH%y?y0u4UIU~h$#VWHkA2$ zEEseEDQvvRNRXd@AucJlgtj(`sMRA}zif#umPMmOGP!&%x%UmK&v{Z)q_r}mSYqSL zm+V0^jB{r0VFT&S|0>PNaeB#R=*ONsM;|3b`bS`IC$6+85Uyt6-m5{qBsFk@Ar35ge#YmsCOpn%EJ_EqrqL9 zC44&CyrFU4jXH|8(lIp-BDrj9@mE3GL>;&O(vQ!o#zmet0P-*{W7{8DWD(SqpAX1P z*A8^+Mo}OG?Yl7iFtwK^9{pUB^%$$D;E_9{{+_{t%zf0MFkNM0aNqmDP0oT_mi z^Q$5>?~XhH_cxmBHTq|@#L!dy`z4KxY>k9TVB`R1tbfU3R@TZ4oW=zYi=6Ce)(htXBOH-ef>qYv@~3a(#LgOs z3BIs}Ymnzk6J_ep;dwlpYOq8lp!79$1Ua-vzW@}BdIP;LcxeR52Un?UkPNP}1LwZu zoWSV~LmQn`B>d8EVy#pTsqF=^0#P|LR=vaXM*($O9ziJeD2eC_!53~7JG!OKjXwV1 zSFEK%{LW8k%-=Dy6dlX>U%W5HIB)%VsG-1y=*GNw@j}fQE;x2{RAEv6hL27*eL#&j z!PT2#Y;F$Rmdzfqq0IC5+ax3;piyfDNDe8h_8tWe1ykfIyAlu#Em0FDd+HxhZ}kQOliv5wAF@*)I2Si^R*h zT6u4u{JItqrVkd!H#1Gdnw*LAqN-K99hiCRDS>snVDj*ip7#_!&7)hwR5)ctI3HpFdcJhYE{{ zDc?!Iq7aAI*yO0n{#B1>t)lCPCbn4sHs{_nKG}#W@(J$SDH5(7B(xHSupsejue=(S zX>eqr8d~0Rf0Fk09Ggo^HE(?cKCHM%6zAosxYVZTa#Cl5g;O%V8n-@v=Lc*)k#X)8z@XN}X^Jmwpck(vYX!jhd zqUDWcVc*uEXBp%2H; zI9?8L75M7atC)dx_EdEU2SDwm6{`2J`Nvo1G09W*YoXe=q*~NfgE-07s`#PInw>Z6 zTN$jyc0l3j1`$wgH(rz^eagRCRq~>`{#cHSAAJb0tx$2eUK$+*+~{yy9nMipqy6>4 zD&$GGQ?*aGpAs= zd8}G$$@v1~Jm0XJEdztW(C%ejiHUb>eNPXPP6n1cqs~ESBRV>iDBnn4w59wNC^B$T zqD;oqQ-K_jg{GlmMmBX80YPO}W8HL6H@DnZX|}OP6U!`l`48pziT@)!?cvkAnPm)NO4*`OW-3ejJa0jT%T~a5I+qH$kqNJ|jD@48w&{K|N zl-=9LX{1W7A`{iVY|osXpTkk==`y>%21iFn)XP!f;cQ#w`04@w@~hqagS6jQh7TNp z9t%PLSFaGEH8ufN)zuJa09fWlH0U05jzKN^%cMiV)q^C@z~wQ}!??E(Aix_IczRIi zr9;N_Z20-?ZuLs>z-7VL)5)0!Qy7?yO>}p+3Z=8b)s4+fRMdS5mH}B@!^M_vbIj+@ zH@CqPR`SEzrth-WToBhuGgQID--Do35D@&J|KE1c>qqP#pFYvbi=FY?1GzSdU z*;)^6Y;DV?2t)ul`EN_gOmIwqlS%8<@&OsDSu)XOJJb{Cr5Q5BP14A>qH?$Iaj$PL zOK@UT#A7fMm;1i!Qa#490JZ_aq5uHRvJw&x>FMc*$HpG~3vQJUD7|Mw!ob2J<~Z{O z40C9G>*Dl~UF8=i+ zZQs5fW(szrB2oX5&5G=i&A|qHq(+XGS{OOY;xzJ;uMFeVAv2j(REX@%{QBdB(t6L; zDBvP1JTmfkG^=vFQCzi|i;Gs8*V^ zprow4+7SUAo|>}dIuZnfb6M^ny-QC|6OGL50$Z|p`!@3{2R_QH;A%eHkavC43H~&L z37oCNCyPE>oYWQ|Pl95>`a&zQjUsmPMwRvv|FVXL2E@l-SVV*d&YSo8xA%pMI*6xL z7l{F@0V;^V?^9G1ume;#V&0bi{acJXfz54>X^1FehQ^;qwFdYm&!n)Fh-(eE>%X~}N!*SJ zB4#ObTk0Ok)$qBzy!3a{3wWU)0KI=dHY0;MF+IInCzy_&J`U!8n2cO^aBx6=@>f$+ zLmeYHH1ua7ALJkPPJpFq{yIL&_>2YQ=Mx7DLYqPMM2=TFTgm5LuP*rX{!v_vb-JHN zw;j;3UevDb8!8o2Qg6Ir5i9!Q`SWLXb_Kly13f)_&D_nGyD<2EWmOd|{EDdW(U7vB zloS_>nvWcKqRm^&8poNid#ti{eR@4?%45b_R&*aW6{y4hZGx zPWeE5L(zZ(t+DEA%+(^7#MIO{U9E=_fXB{6ncugjrY3R9EFM-?*17if;Ly+p9QOR6 zaoC&li_qE=;`_0(%=GERrp`N9$hm;csYsoNLn0y}cd$JfTEVOH5;|Cfn(!YFM zp^2Y+CSGTo6L=ea`g=s9XJy3#C4v8V@SEfN6lS2n=Th-cHL+XH$n%3YkZ}jO-$fHzLRDzO{TbE$= zE9Y2S>=)7>dkt@IY=j=`BuGn3`ztGV#?-@J2IIT=QZ*a#GCrBnEGsX^{lzVMTg|P@ z=xEA;QF>-@W;aTC?op@XRybr!!4sWsz85MR*C^xV^@{MXQk(*8v6Z51K~ICF;*NZs zCZ$@}Qpmq+DJFdW{CR>SgInAF8wXx*0={+KqUa?y8}O#{rmSFaH7;blSRl6av6zSt zR`S2&f^V!uMq!R9Q|D`Sn;Xr*n-URyjoKn4pFawoq^E&@9{K^?hFj_|Cv;2)_dsw)&dHU02^0Es3>$p8QV From 96c5a5c010a2323e444b8b76fc3a6535b1891ee5 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 23 Dec 2015 22:18:11 -0500 Subject: [PATCH 004/442] might as well fix fonglict --- code/modules/mob/living/carbon/brain/MMI.dm | 198 ++++++++-------- .../mob/living/carbon/brain/brain_item.dm | 85 +++---- code/modules/surgery/organs/organ.dm | 114 ++++++++-- code/modules/surgery/organs/organ_internal.dm | 213 ++---------------- code/modules/surgery/robotics.dm | 38 ++-- icons/mob/human_face.dmi | Bin 74697 -> 77924 bytes 6 files changed, 299 insertions(+), 349 deletions(-) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 0fb95f6c22d..a0168448391 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -12,91 +12,112 @@ var/alien = 0 var/syndiemmi = 0 //Whether or not this is a Syndicate MMI var/mob/living/carbon/brain/brainmob = null//The current occupant. + var/obj/item/organ/brain/held_brain = null // This is so MMI's aren't brainscrubber 9000's var/mob/living/silicon/robot/robot = null//Appears unused. var/obj/mecha/mecha = null//This does not appear to be used outside of reference in mecha.dm. // I'm using this for mechs giving MMIs HUDs now - attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(istype(O, /obj/item/organ/internal/brain/crystal )) - user << " This brain is too malformed to be able to use with the [src]." +/obj/item/device/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob, params) + if(istype(O, /obj/item/organ/brain/crystal )) + user << " This brain is too malformed to be able to use with the [src]." + return + if(istype(O,/obj/item/organ/brain) && !brainmob) //Time to stick a brain in it --NEO + var/obj/item/organ/brain/B = O + if(!B.brainmob) + user << "You aren't sure where this brain came from, but you're pretty sure it's a useless brain." return - if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO - if(!O:brainmob) - user << "\red You aren't sure where this brain came from, but you're pretty sure it's a useless brain." - return - for(var/mob/V in viewers(src, null)) - V.show_message(text("\blue [user] sticks \a [O] into \the [src].")) - brainmob = O:brainmob - O:brainmob = null - brainmob.loc = src - brainmob.container = src - brainmob.stat = 0 - respawnable_list -= brainmob - dead_mob_list -= brainmob//Update dem lists - living_mob_list += brainmob - - user.drop_item() - if(istype(O,/obj/item/organ/internal/brain/xeno)) - name = "Man-Machine Interface: Alien - [brainmob.real_name]" - icon = 'icons/mob/alien.dmi' - icon_state = "AlienMMI" - alien = 1 - else - name = "Man-Machine Interface: [brainmob.real_name]" - icon_state = "mmi_full" - alien = 0 - qdel(O) - - - - feedback_inc("cyborg_mmis_filled",1) - + if(held_brain) + user << "Somehow, this MMI still has a brain in it. Report this to the bug tracker." + log_to_dd("[user] tried to stick a [O] into [src] in [get_area(src)], but the held brain variable wasn't cleared") return - - if(brainmob) - O.attack(brainmob, user)//Oh noooeeeee - // Brainmobs can take damage, but they can't actually die. Maybe should fix. + if(B.status & ORGAN_DEAD) // As it stood, a brain would never become unviable for MMI usage. Perhaps we should keep it that way? + user << "This [B] is dead" return - ..() + for(var/mob/V in viewers(src, null)) + V.show_message("[user] sticks \a [O] into \the [src].") + brainmob = B.brainmob + B.brainmob = null + brainmob.loc = src + brainmob.container = src + brainmob.stat = CONSCIOUS + respawnable_list -= brainmob + dead_mob_list -= brainmob//Update dem lists + living_mob_list += brainmob - - - attack_self(mob/user as mob) - if(!brainmob) - user << "\red You upend the MMI, but there's nothing in it." + user.drop_item() + B.forceMove(src) + held_brain = B + if(istype(O,/obj/item/organ/brain/xeno)) // I'm not sure how well this will work now, since I don't think you can actually get xeno brains + name = "Man-Machine Interface: Alien - [brainmob.real_name]" + icon = 'icons/mob/alien.dmi' + icon_state = "AlienMMI" + alien = 1 else - user << "You unlock and upend the MMI, spilling the brain onto the floor." - if(alien) - var/obj/item/organ/internal/brain/xeno/brain = new(user.loc) - dropbrain(brain,get_turf(user)) - else - var/obj/item/organ/internal/brain/brain = new(user.loc) - dropbrain(brain,get_turf(user)) - icon = 'icons/obj/assemblies.dmi' - icon_state = "mmi_empty" - name = "Man-Machine Interface" - - proc - transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->robot people. - brainmob = new(src) - brainmob.name = H.real_name - brainmob.real_name = H.real_name - brainmob.dna = H.dna.Clone() - brainmob.container = src - name = "Man-Machine Interface: [brainmob.real_name]" icon_state = "mmi_full" - return + alien = 0 + feedback_inc("cyborg_mmis_filled",1) + + return + + if(brainmob) + O.attack(brainmob, user)//Oh noooeeeee + // Brainmobs can take damage, but they can't actually die. Maybe should fix. + return + ..() + + + +/obj/item/device/mmi/attack_self(mob/user as mob) + if(!brainmob) + user << "You upend the MMI, but there's nothing in it." + else + user << "You unlock and upend the MMI, spilling the brain onto the floor." + dropbrain(get_turf(user)) + icon = 'icons/obj/assemblies.dmi' + icon_state = "mmi_empty" + name = "Man-Machine Interface" + +/obj/item/device/mmi/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->robot people. + brainmob = new(src) + brainmob.name = H.real_name + brainmob.real_name = H.real_name + brainmob.dna = H.dna.Clone() + brainmob.container = src + + if(!istype(H.species) || isnull(H.species.return_organ("brain"))) // Diona/buggy people + held_brain = new(src) + else // We have a species, and it has a brain + var/brain_path = H.species.return_organ("brain") + if(!ispath(brain_path, /obj/item/organ/brain)) + brain_path = /obj/item/organ/brain + held_brain = new brain_path(src) // Slime people will keep their slimy brains this way + held_brain.dna = brainmob.dna.Clone() + held_brain.name = "\the [brainmob.name]'s [initial(held_brain.name)]" + + name = "Man-Machine Interface: [brainmob.real_name]" + icon_state = "mmi_full" + return + //I made this proc as a way to have a brainmob be transferred to any created brain, and to solve the //problem i was having with alien/nonalien brain drops. - dropbrain(var/obj/item/organ/internal/brain/brain, var/turf/dropspot) - brainmob.container = null//Reset brainmob mmi var. - brainmob.loc = brain//Throw mob into brain. - respawnable_list += brainmob - living_mob_list -= brainmob//Get outta here - brain.brainmob = brainmob//Set the brain to use the brainmob - brain.brainmob.cancel_camera() - brainmob = null//Set mmi brainmob var to null +/obj/item/device/mmi/proc/dropbrain(var/turf/dropspot) + if(isnull(held_brain)) + log_to_dd("[src] at [loc] attempted to drop brain without a contained brain in [get_area(src)].") + brainmob << "Your MMI did not contain a brain! We'll make a new one for you, but you'd best report this to the bugtracker!" + held_brain = new(dropspot) // Let's not ruin someone's round because of something dumb -- Crazylemon + held_brain.dna = brainmob.dna.Clone() + held_brain.name = "\the [brainmob.name]'s [initial(held_brain.name)]" + + brainmob.container = null//Reset brainmob mmi var. + brainmob.loc = held_brain//Throw mob into brain. + respawnable_list += brainmob + living_mob_list -= brainmob//Get outta here + held_brain.brainmob = brainmob//Set the brain to use the brainmob + held_brain.brainmob.cancel_camera() + brainmob = null//Set mmi brainmob var to null + held_brain.forceMove(dropspot) + held_brain = null /obj/item/device/mmi/radio_enabled @@ -106,25 +127,23 @@ var/obj/item/device/radio/radio = null//Let's give it a radio. - New() - ..() - radio = new(src)//Spawns a radio inside the MMI. - radio.broadcasting = 1//So it's broadcasting from the start. +/obj/item/device/mmi/radio_enabled/New() + ..() + radio = new(src)//Spawns a radio inside the MMI. + radio.broadcasting = 1//So it's broadcasting from the start. - verb//Allows the brain to toggle the radio functions. +/obj/item/device/mmi/radio_enabled/verb/Toggle_Listening() + set name = "Toggle Listening" + set desc = "Toggle listening channel on or off." + set category = "MMI" + set src = usr.loc + set popup_menu = 0 - Toggle_Listening() - set name = "Toggle Listening" - set desc = "Toggle listening channel on or off." - set category = "MMI" - set src = usr.loc - set popup_menu = 0 + if(brainmob.stat) + brainmob << "Can't do that while incapacitated or dead." - if(brainmob.stat) - brainmob << "Can't do that while incapacitated or dead." - - radio.listening = radio.listening==1 ? 0 : 1 - brainmob << "\blue Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast." + radio.listening = radio.listening==1 ? 0 : 1 + brainmob << "Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast." /obj/item/device/mmi/emp_act(severity) if(!brainmob) @@ -153,6 +172,9 @@ if(brainmob) qdel(brainmob) brainmob = null + if(held_brain) + qdel(held_brain) + held_brain = null return ..() /obj/item/device/mmi/syndie diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index bb7d27b0aaf..5a0132f6bd8 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -1,4 +1,4 @@ -/obj/item/organ/internal/brain +/obj/item/organ/brain name = "brain" health = 400 //They need to live awhile longer than other organs. max_damage = 200 @@ -13,32 +13,39 @@ var/mob/living/carbon/brain/brainmob = null organ_tag = "brain" parent_organ = "head" - slot = "brain" vital = 1 -/obj/item/organ/internal/brain/surgeryize() +/obj/item/organ/brain/attack_self(mob/user as mob) + return //let's not have players taken out of the round as easily as a click, once you have their brain. + +/obj/item/organ/brain/surgeryize() if(!owner) return owner.ear_damage = 0 //Yeah, didn't you...hear? The ears are totally inside the brain. owner.ear_deaf = 0 -/obj/item/organ/internal/brain/xeno +/obj/item/organ/brain/xeno name = "thinkpan" desc = "It looks kind of like an enormous wad of purple bubblegum." - icon_state = "brain-x-d" + icon = 'icons/mob/alien.dmi' + icon_state = "chitin" -/obj/item/organ/internal/brain/New() +/obj/item/organ/brain/New() ..() spawn(5) if(brainmob && brainmob.client) brainmob.client.screen.len = null //clear the hud -/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H) - name = "\the [H]'s [initial(src.name)]" +/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H) brainmob = new(src) - brainmob.name = H.real_name - brainmob.real_name = H.real_name - brainmob.dna = H.dna.Clone() + if(isnull(dna)) // someone didn't set this right... + log_to_dd("[src] at [loc] did not contain a dna datum at time of removed.") + dna = H.dna.Clone() + name = "\the [dna.real_name]'s [initial(src.name)]" + brainmob.dna = dna.Clone() // Silly baycode, what you do +// brainmob.dna = H.dna.Clone() Putting in and taking out a brain doesn't make it a carbon copy of the original brain of the body you put it in + brainmob.name = dna.real_name + brainmob.real_name = dna.real_name brainmob.timeofhostdeath = H.timeofdeath if(H.mind) H.mind.transfer_to(brainmob) @@ -46,61 +53,63 @@ brainmob << "You feel slightly disoriented. That's normal when you're just a [initial(src.name)]." callHook("debrain", list(brainmob)) -/obj/item/organ/internal/brain/examine(mob/user) // -- TLE +/obj/item/organ/brain/examine(mob/user) // -- TLE ..(user) if(brainmob && brainmob.client)//if thar be a brain inside... the brain. user << "You can feel the small spark of life still left in this one." else user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.." -/obj/item/organ/internal/brain/Remove(var/mob/living/user) +/obj/item/organ/brain/removed(var/mob/living/user) if(!owner) return ..() // Probably a redundant removal; just bail - name = "[owner.real_name]'s brain" - var/mob/living/simple_animal/borer/borer = owner.has_brain_worms() + var/obj/item/organ/brain/B = src + if(istype(B) && istype(owner) && is_primary_organ()) + var/mob/living/simple_animal/borer/borer = owner.has_brain_worms() - if(borer) - borer.detatch() //Should remove borer if the brain is removed - RR + if(borer) + borer.detatch() //Should remove borer if the brain is removed - RR - owner.brain_op_stage = 4.0 - - var/obj/item/organ/internal/brain/B = src - if(istype(B) && istype(owner)) + owner.brain_op_stage = 4.0 B.transfer_identity(owner) ..() -/obj/item/organ/internal/brain/Insert(var/mob/living/target) +/obj/item/organ/brain/replaced(var/mob/living/target) - if(target.key) - target.ghostize() - var/mob/living/carbon/C = target - if(istype(C)) - C.brain_op_stage = 1.0 - if(brainmob) - if(brainmob.mind) - brainmob.mind.transfer_to(target) - else - target.key = brainmob.key + var/brain_already_exists = 0 + if(istype(target,/mob/living/carbon/human)) // No more IPC multibrain shenanigans + var/mob/living/carbon/human/H = target + if(organ_tag in H.internal_organs_by_name) + brain_already_exists = 1 + + if(!brain_already_exists) + if(target.key) + target.ghostize() + var/mob/living/carbon/C = target + if(istype(C)) + C.brain_op_stage = 1.0 + if(brainmob) + if(brainmob.mind) + brainmob.mind.transfer_to(target) + else + target.key = brainmob.key ..() -/obj/item/organ/internal/brain/prepare_eat() - return // Too important to eat. - -/obj/item/organ/internal/brain/slime +/obj/item/organ/brain/slime name = "slime core" desc = "A complex, organic knot of jelly and crystalline particles." icon = 'icons/mob/slimes.dmi' icon_state = "green slime extract" -/obj/item/organ/internal/brain/golem +/obj/item/organ/brain/golem name = "chem" desc = "A tightly furled roll of paper, covered with indecipherable runes." icon = 'icons/obj/wizard.dmi' icon_state = "scroll" -/obj/item/organ/internal/brain/Destroy() //copypasted from MMIs. +/obj/item/organ/brain/Destroy() //copypasted from MMIs. if(brainmob) qdel(brainmob) brainmob = null diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 85de7330052..82f35730bf8 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -24,10 +24,15 @@ var/list/organ_cache = list() var/datum/dna/dna var/datum/species/species + // Stuff for tracking if this is on a tile with an open freezer or not + var/last_freezer_update_time = 0 + var/freezer_update_period = 100 + var/is_in_freezer = 0 + /obj/item/organ/Destroy() if(!owner) return ..() -/* + if(istype(owner, /mob/living/carbon)) if((owner.internal_organs) && (src in owner.internal_organs)) owner.internal_organs -= src @@ -38,12 +43,17 @@ var/list/organ_cache = list() owner.organs -= src if((owner.organs_by_name) && (src in owner.organs_by_name)) owner.organs_by_name -= src -*/ if(src in owner.contents) owner.contents -= src return ..() +/obj/item/organ/attack_self(mob/user as mob) + + // Convert it to an edible form, yum yum. + if(!robotic && user.a_intent == I_HARM) + bitten(user) + return /obj/item/organ/proc/update_health() return @@ -101,8 +111,7 @@ var/list/organ_cache = list() if(status & ORGAN_DEAD) return - // Don't process if we're in a freezer, an MMI or a stasis bag. //TODO: ambient temperature? - if(istype(loc,/obj/item/device/mmi) || istype(loc,/obj/item/bodybag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer)) + if(is_preserved()) return //Process infections @@ -116,8 +125,11 @@ var/list/organ_cache = list() if(B && prob(40)) reagents.remove_reagent("blood",0.1) blood_splatter(src,B,1) - - germ_level += rand(2,6) + // Maybe scale it down a bit, have it REALLY kick in once past the basic infection threshold + // Another mercy for surgeons preparing transplant organs + germ_level++ + if(germ_level >= INFECTION_LEVEL_ONE) + germ_level += rand(2,6) if(germ_level >= INFECTION_LEVEL_TWO) germ_level += rand(2,6) if(germ_level >= INFECTION_LEVEL_THREE) @@ -135,6 +147,30 @@ var/list/organ_cache = list() if(damage >= max_damage) die() +/obj/item/organ/proc/is_preserved() + if(istype(loc,/obj/item/device/mmi)) + germ_level = max(0, germ_level - 1) // So a brain can slowly recover from being left out of an MMI + return 1 + if(is_found_within(/obj/item/bodybag/cryobag)) + return 1 + if(is_found_within(/obj/structure/closet/crate/freezer)) + return 1 + if(istype(loc,/turf)) + if(world.time - last_freezer_update_time > freezer_update_period) + // I don't want to loop through everything in the tile constantly, especially since it'll be a pile of organs + // if the virologist releases gibbingtons again or something + // There's probably a much less silly way of doing this, but BYOND native algorithms are stupidly naive + is_in_freezer = 0 + for(var/obj/structure/closet/crate/freezer/F in loc.contents) + if(F.opened) + is_in_freezer = 1 // on the same tile, close enough, should keep organs much fresher on avg + break + last_freezer_update_time = world.time + return is_in_freezer // I'd like static varibles, please + + // You can do your cool location temperature organ preserving effects here! + return 0 + /obj/item/organ/examine(mob/user) ..(user) if(status & ORGAN_DEAD) @@ -170,6 +206,7 @@ var/list/organ_cache = list() /obj/item/organ/proc/rejuvenate() damage = 0 + germ_level = 0 /obj/item/organ/proc/is_damaged() return damage > 0 @@ -184,15 +221,16 @@ var/list/organ_cache = list() /obj/item/organ/proc/handle_antibiotics() var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin") - if (!germ_level || antibiotics < 5) + if (!germ_level || antibiotics <= 0.4) return if (germ_level < INFECTION_LEVEL_ONE) germ_level = 0 //cure instantly else if (germ_level < INFECTION_LEVEL_TWO) - germ_level -= 6 //at germ_level == 500, this should cure the infection in a minute + germ_level -= 24 //at germ_level == 500, this should cure the infection in 15 seconds else - germ_level -= 2 //at germ_level == 1000, this will cure the infection in 5 minutes + germ_level -= 8 // at germ_level == 1000, this will cure the infection in 1 minute, 15 seconds + // Let's not drag this on, medbay has only so much antibiotics //Adds autopsy data for used_weapon. /obj/item/organ/proc/add_autopsy_data(var/used_weapon, var/damage) @@ -251,10 +289,16 @@ var/list/organ_cache = list() take_damage(0,3) /obj/item/organ/proc/removed(var/mob/living/user) - if(!istype(owner)) return + if(is_primary_organ()) + owner.internal_organs_by_name[organ_tag] = null + owner.internal_organs_by_name -= organ_tag + owner.internal_organs_by_name -= null // uh what does this line even do this seems silly + + owner.internal_organs -= src + var/obj/item/organ/external/affected = owner.get_organ(parent_organ) if(affected) affected.internal_organs -= src @@ -265,7 +309,7 @@ var/list/organ_cache = list() if(!organ_blood || !organ_blood.data["blood_DNA"]) owner.vessel.trans_to(src, 5, 1, 1) - if(owner && vital) + if(owner && vital && is_primary_organ()) // I'd do another check for species or whatever so that you couldn't "kill" an IPC by removing a human head from them, but it doesn't matter since they'll come right back from the dead if(user) user.attack_log += "\[[time_stamp()]\] removed a vital organ ([src]) from [key_name(owner)] (INTENT: [uppertext(user.a_intent)])" owner.attack_log += "\[[time_stamp()]\] had a vital organ ([src]) removed by [key_name(user)] (INTENT: [uppertext(user.a_intent)])" @@ -279,12 +323,54 @@ var/list/organ_cache = list() owner = target processing_objects -= src - //target.internal_organs |= src + target.internal_organs |= src affected.internal_organs |= src - //target.internal_organs_by_name[organ_tag] = src + if (!(organ_tag in target.internal_organs_by_name)) + target.internal_organs_by_name[organ_tag] = src // In case multiple of the same type are inserted, only the first one is the primary organ src.loc = target if(robotic) status |= ORGAN_ROBOT +/obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target) + + // Apply our eye colour to the target. + if(istype(target) && eye_colour) + target.r_eyes = eye_colour[1] + target.g_eyes = eye_colour[2] + target.b_eyes = eye_colour[3] + target.update_eyes() + ..() + +/obj/item/organ/proc/bitten(mob/user) + + if(robotic) + return + + user << "\blue You take a bite out of \the [src]." + + user.unEquip(src) + var/obj/item/weapon/reagent_containers/food/snacks/organ/O = new(get_turf(src)) + O.name = name + O.icon_state = dead_icon ? dead_icon : icon_state + + if(fingerprints) O.fingerprints = fingerprints.Copy() + if(fingerprintshidden) O.fingerprintshidden = fingerprintshidden.Copy() + if(fingerprintslast) O.fingerprintslast = fingerprintslast + + user.put_in_active_hand(O) + qdel(src) + /obj/item/organ/proc/surgeryize() - return \ No newline at end of file + return + +/* +Returns 1 if this is the organ that is handling all the functionalities of that particular organ slot +Returns 0 if it isn't +I use this so that this can be made better once the organ overhaul rolls out -- Crazylemon +*/ +/obj/item/organ/proc/is_primary_organ(var/mob/living/carbon/human/O = null) + if (isnull(O)) + O = owner + if (!istype(owner)) // You're not the primary organ of ANYTHING, bucko + return 0 + return src == O.internal_organs_by_name[organ_tag] diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index dc28e8e22d0..46d7f01b0d9 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -3,148 +3,26 @@ /**************************************************** INTERNAL ORGANS DEFINES ****************************************************/ -/obj/item/organ/internal - origin_tech = "biotech=2" - force = 1 - w_class = 2 - throwforce = 0 - organ_tag = "guts" - parent_organ = "chest" //aka the zone - var/slot - vital = 0 - var/organ_action_name = null -/obj/item/organ/internal/proc/Insert(mob/living/carbon/M, special = 0)//insert the thing into the slot - if(!iscarbon(M) || owner == M) - return - - var/obj/item/organ/internal/replaced = M.get_organ_slot(slot) - if(replaced) - replaced.Remove(M, special = 1) - - owner = M - M.internal_organs |= src - //M.internal_organs_by_name[organ_tag] = src - loc = null - if(organ_action_name) - action_button_name = organ_action_name - -/obj/item/organ/internal/proc/Remove(mob/living/carbon/M, special = 0) - owner = null - if(M) - // M.internal_organs_by_name[organ_tag] = null - // M.internal_organs_by_name -= organ_tag - // M.internal_organs_by_name -= null - M.internal_organs -= src - - if(vital && !special) - M.death() - - - if(organ_action_name) - action_button_name = null - -/obj/item/organ/internal/proc/on_find(mob/living/finder) - return - -/obj/item/organ/internal/proc/on_life() - return - - -/obj/item/organ/internal/proc/prepare_eat() - var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new - S.name = name - S.desc = desc - S.icon = icon - S.icon_state = icon_state - S.origin_tech = origin_tech - S.w_class = w_class - - return S - -/obj/item/weapon/reagent_containers/food/snacks/organ - name = "appendix" - icon_state = "appendix" - icon = 'icons/obj/surgery.dmi' - -/obj/item/weapon/reagent_containers/food/snacks/organ/New() - - ..() - - reagents.add_reagent("nutriment",5) - - -/obj/item/organ/internal/Destroy() - if(owner) - Remove(owner, 1) - return - -/obj/item/organ/internal/attack(mob/living/carbon/M, mob/user) - if(robotic) - return - - if(M == user && ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/weapon/reagent_containers/food/snacks/S = prepare_eat() - if(S) - H.unEquip() - H.put_in_active_hand(S) - if(fingerprints) S.fingerprints = fingerprints.Copy() - if(fingerprintshidden) S.fingerprintshidden = fingerprintshidden.Copy() - if(fingerprintslast) S.fingerprintslast = fingerprintslast - S.attack(H, H) - qdel(src) - else - ..() - - -///THE ORGANS // Brain is defined in brain_item.dm. -/obj/item/organ/internal/heart +/obj/item/organ/heart name = "heart" icon_state = "heart-on" organ_tag = "heart" parent_organ = "chest" - slot = "heart" - origin_tech = "biotech=3" + dead_icon = "heart-off" vital = 1 - var/beating -/obj/item/organ/internal/heart/update_icon() - if(beating) - icon_state = "heart-on" - else - icon_state = "heart-off" - -/obj/item/organ/internal/heart/Insert(mob/living/carbon/M, special = 0) - ..() - beating = 1 - update_icon() - -/obj/item/organ/internal/heart/Remove(mob/living/carbon/M, special = 0) - ..() - spawn(120) - beating = 0 - update_icon() - -/obj/item/organ/internal/heart/prepare_eat() - var/obj/S = ..() - S.icon_state = "heart-off" - return S - -/obj/item/organ/internal/lungs +/obj/item/organ/lungs name = "lungs" icon_state = "lungs" gender = PLURAL organ_tag = "lungs" parent_organ = "chest" - slot = "lungs" - origin_tech = "biotech=2" -/obj/item/organ/internal/lungs/process()///Fethas note, Should this be organ on life? +/obj/item/organ/lungs/process() ..() -//to_do per fethas: Could we handle some of the species breathing in here? if(!owner) return @@ -161,17 +39,14 @@ spawn owner.custom_emote(1, "gasps for air!") owner.losebreath += 5 -/obj/item/organ/internal/kidneys +/obj/item/organ/kidneys name = "kidneys" icon_state = "kidneys" gender = PLURAL organ_tag = "kidneys" parent_organ = "groin" - slot = "kidneys" - origin_tech = "biotech=2" - -/obj/item/organ/internal/kidneys/process() +/obj/item/organ/kidneys/process() ..() @@ -189,39 +64,24 @@ owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) -/obj/item/organ/internal/eyes +/obj/item/organ/eyes name = "eyeballs" icon_state = "eyes" gender = PLURAL organ_tag = "eyes" parent_organ = "head" - slot = "eyes" - origin_tech = "biotech=2" var/list/eye_colour = list(0,0,0) -/obj/item/organ/internal/eyes/proc/update_colour() +/obj/item/organ/eyes/proc/update_colour() if(!owner) return - if(istype(owner,/mob/living/carbon/human)) - var/mob/living/carbon/human/eyes = owner - eye_colour = list( - eyes.r_eyes ? owner.r_eyes : 0, - eyes.g_eyes ? owner.g_eyes : 0, - eyes.b_eyes ? owner.b_eyes : 0 - ) + eye_colour = list( + owner.r_eyes ? owner.r_eyes : 0, + owner.g_eyes ? owner.g_eyes : 0, + owner.b_eyes ? owner.b_eyes : 0 + ) -/obj/item/organ/internal/eyes/Insert(mob/living/carbon/M, special = 0) - ..() - // Apply our eye colour to the target. - if(istype(M,/mob/living/carbon/human) && eye_colour) - var/mob/living/carbon/human/eyes = M - eyes.r_eyes = eye_colour[1] - eyes.g_eyes = eye_colour[2] - eyes.b_eyes = eye_colour[3] - eyes.update_eyes() - - -/obj/item/organ/internal/eyes/surgeryize() +/obj/item/organ/eyes/surgeryize() if(!owner) return owner.disabilities &= ~NEARSIGHTED @@ -229,15 +89,13 @@ owner.eye_blurry = 0 owner.eye_blind = 0 -/obj/item/organ/internal/liver +/obj/item/organ/liver name = "liver" icon_state = "liver" organ_tag = "liver" parent_organ = "groin" - slot = "liver" - origin_tech = "biotech=1" -/obj/item/organ/internal/liver/process() +/obj/item/organ/liver/process() ..() @@ -290,13 +148,12 @@ if(owner.reagents.has_reagent(toxin)) owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) -/obj/item/organ/internal/appendix +/obj/item/organ/appendix name = "appendix" icon_state = "appendix" organ_tag = "appendix" parent_organ = "groin" - slot = "appendix" - origin_tech = "biotech=1" + /* /obj/item/organ/appendix/removed() @@ -311,36 +168,4 @@ icon_state = "appendixinflamed" name = "inflamed appendix" ..() -*/ - -//shadowling brain tumor -/obj/item/organ/internal/shadowtumor - name = "black tumor" - desc = "A tiny black mass with red tendrils trailing from it. It seems to shrivel in the light." - icon_state = "blacktumor" - origin_tech = "biotech=4" - w_class = 1 - organ_tag = "blacktumor" - parent_organ = "head" - slot = "brain_tumor" - health = 3 - -/obj/item/organ/internal/shadowtumor/New() - ..() - processing_objects.Add(src) - -/obj/item/organ/internal/shadowtumor/Destroy() - processing_objects.Remove(src) - ..() - -/obj/item/organ/internal/shadowtumor/process() - if(isturf(loc)) - var/turf/T = loc - var/light_count = T.get_lumcount() - if(light_count > 4 && health > 0) //Die in the light - health-- - else if(light_count < 2 && health < 3) //Heal in the dark - health++ - if(health <= 0) - visible_message("[src] collapses in on itself!") - qdel(src) \ No newline at end of file +*/ \ No newline at end of file diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 62fa8fca992..87f0e3318cd 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -156,6 +156,10 @@ user.visible_message("\blue [user] finishes patching damage to [target]'s [affected.name] with \the [tool].", \ "\blue You finish patching damage to [target]'s [affected.name] with \the [tool].") affected.heal_damage(rand(30,50),0,1,1) + if(affected.disfigured) + affected.disfigured = 0 + affected.update_icon() + target.regenerate_icons() fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -220,7 +224,7 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!affected) return var/is_organ_damaged = 0 - for(var/obj/item/organ/internal/I in affected.internal_organs) + for(var/obj/item/organ/I in affected.internal_organs) if(I.damage > 0 && I.robotic >= 2) is_organ_damaged = 1 break @@ -232,7 +236,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/internal/I in affected.internal_organs) + for(var/obj/item/organ/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic >= 2) user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \ @@ -247,7 +251,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/internal/I in affected.internal_organs) + for(var/obj/item/organ/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic >= 2) @@ -267,7 +271,7 @@ target.adjustToxLoss(5) affected.createwound(CUT, 5) - for(var/obj/item/organ/internal/I in affected.internal_organs) + for(var/obj/item/organ/I in affected.internal_organs) if(I) I.take_damage(rand(3,5),0) @@ -289,18 +293,20 @@ return 0 target.op_stage.current_organ = null + target.op_stage.organ_ref = null var/list/attached_organs = list() - for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] - if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - attached_organs |= organ + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(I && istype(I) && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) + attached_organs[I.organ_tag] = I var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs if(!organ_to_remove) return 0 target.op_stage.current_organ = organ_to_remove + target.op_stage.organ_ref = attached_organs[organ_to_remove] return ..() && organ_to_remove @@ -313,7 +319,7 @@ user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status |= ORGAN_CUT_AWAY @@ -338,18 +344,20 @@ return 0 target.op_stage.current_organ = null + target.op_stage.organ_ref = null var/list/removable_organs = list() - for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] - if(I && (I.status & ORGAN_CUT_AWAY) && (I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) - removable_organs |= organ + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && (I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) + removable_organs[I.organ_tag] = I var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs if(!organ_to_replace) return 0 target.op_stage.current_organ = organ_to_replace + target.op_stage.organ_ref = removable_organs[organ_to_replace] return ..() begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -361,7 +369,7 @@ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY @@ -424,7 +432,7 @@ "\blue You have installed \the [tool] into [target]'s [affected.name].") var/obj/item/device/mmi/M = tool - var/obj/item/organ/internal/mmi_holder/holder = new(target, 1) + var/obj/item/organ/mmi_holder/holder = new(target, 1) if (istype(M, /obj/item/device/mmi/posibrain)) holder.robotize() diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 4a54071d83cc9837980fcc030f5bf5231c40f254..e772ea8d04898938a42378b9466fa61369d99e73 100644 GIT binary patch literal 77924 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 literal 74697 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 OyAPA36;(y~wwX{n;%#>Z)vXqSt>?$;sr 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 z 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 Date: Thu, 24 Dec 2015 00:14:04 -0500 Subject: [PATCH 005/442] missed one --- code/modules/surgery/organs_internal.dm | 104 +++++++++++------------- 1 file changed, 48 insertions(+), 56 deletions(-) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 967a9c06d22..97f639e76d3 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -45,7 +45,6 @@ user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") ticker.mode.remove_thrall(target.mind,0) - new /obj/item/organ/internal/shadowtumor(get_turf(target)) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/braincase = target.named_organ_parent("brain") @@ -73,10 +72,9 @@ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/embryo = 0 - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) + for(var/obj/item/alien_embryo/A in target) embryo = 1 - //break + break if (!hasorgans(target)) return @@ -94,32 +92,8 @@ user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", "You rip the larva out of [target]'s ribcage!") - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - user << "You found an unknown alien organism in [target]'s chest!" - if(A.stage < 4) - user << "It's small and weak, barely the size of a foetus." - else - user << "It's grown quite large, and writhes slightly as you look at it." - if(prob(10)) - A.AttemptGrow() - - A.Remove(target) - A.loc = get_turf(target) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!hasorgans(target)) - return - - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - if(prob(50)) - A.AttemptGrow(0) - user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") - else - target.adjustOxyLoss(30) - user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + for(var/obj/item/alien_embryo/A in target) + A.loc = A.loc.loc ////////////////////////////////////////////////////////////////// @@ -142,7 +116,7 @@ if(!affected) return var/is_organ_damaged = 0 - for(var/obj/item/organ/internal/I in affected.internal_organs) + for(var/obj/item/organ/I in affected.internal_organs) if(I.damage > 0 && I.robotic < 2) is_organ_damaged = 1 break @@ -159,9 +133,10 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/internal/I in affected.internal_organs) + for(var/obj/item/organ/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic < 2) + spread_germs_to_organ(I, user) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) @@ -179,7 +154,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/internal/I in affected.internal_organs) + for(var/obj/item/organ/I in affected.internal_organs) if(I) I.surgeryize() if(I && I.damage > 0) @@ -206,7 +181,7 @@ target.adjustToxLoss(10) affected.createwound(CUT, 5) - for(var/obj/item/organ/internal/I in affected.internal_organs) + for(var/obj/item/organ/I in affected.internal_organs) if(I && I.damage > 0) I.take_damage(dam_amt,0) @@ -232,18 +207,20 @@ return 0 target.op_stage.current_organ = null + target.op_stage.organ_ref = null var/list/attached_organs = list() - for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - attached_organs |= organ + attached_organs[I.organ_tag] = I var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs if(!organ_to_remove) return 0 target.op_stage.current_organ = organ_to_remove + target.op_stage.organ_ref = attached_organs[organ_to_remove] return ..() && organ_to_remove @@ -260,8 +237,9 @@ user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/I = target.op_stage.organ_ref if(I && istype(I)) + spread_germs_to_organ(I, user) I.status |= ORGAN_CUT_AWAY fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -285,20 +263,26 @@ if (!..()) return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if(!istype(affected)) + return 0 target.op_stage.current_organ = null + target.op_stage.organ_ref = null var/list/removable_organs = list() - for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] - if((I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - removable_organs |= organ + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) + removable_organs[I.organ_tag] = I var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs if(!organ_to_remove) return 0 target.op_stage.current_organ = organ_to_remove + target.op_stage.organ_ref = removable_organs[organ_to_remove] return ..() begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -313,11 +297,10 @@ // Extract the organ! if(target.op_stage.current_organ) - var/obj/item/organ/internal/O = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/O = target.op_stage.organ_ref if(O && istype(O)) - O.Remove(user) - O.loc = get_turf(target) - target.op_stage.current_organ = null + spread_germs_to_organ(O, user) + O.removed(user) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -327,7 +310,7 @@ /datum/surgery_step/internal/replace_organ allowed_tools = list( - /obj/item/organ/internal = 100 + /obj/item/organ = 100 ) min_duration = 60 @@ -335,7 +318,7 @@ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/internal/O = tool + var/obj/item/organ/O = tool var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!affected) return var/organ_compatible @@ -393,14 +376,15 @@ user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ "\blue You have transplanted \the [tool] into [target]'s [affected.name].") user.drop_item(tool) - var/obj/item/organ/internal/O = tool + var/obj/item/organ/O = tool if(istype(O)) - O.Insert(target) + O.replaced(target,affected) + spread_germs_to_organ(O, user) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ "\red Your hand slips, damaging \the [tool]!") - var/obj/item/organ/internal/I = tool + var/obj/item/organ/I = tool if(istype(I)) I.take_damage(rand(3,5),0) @@ -418,19 +402,26 @@ if (!..()) return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if(!istype(affected)) + return 0 + target.op_stage.current_organ = null + target.op_stage.organ_ref = null var/list/removable_organs = list() - for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] - if(I && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) - removable_organs |= organ + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) + removable_organs[I.organ_tag] = I var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs if(!organ_to_replace) return 0 target.op_stage.current_organ = organ_to_replace + target.op_stage.organ_ref = removable_organs[organ_to_replace] return ..() begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -443,9 +434,10 @@ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/I = target.op_stage.organ_ref if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY + spread_germs_to_organ(I, user) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) From 027d9660defce12e9d52f2ecead64cf1a16ea827 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 24 Dec 2015 20:26:46 -0500 Subject: [PATCH 006/442] IT COMPILES --- _maps/map_files/cyberiad/cyberiad.dmm | 4 +- .../mutiny/directives/ipc_virus_directive.dm | 2 +- .../carbon/alien/humanoid/alien_powers.dm | 4 +- code/modules/mob/living/carbon/brain/MMI.dm | 14 +- .../mob/living/carbon/brain/brain_item.dm | 40 ++-- .../living/carbon/human/species/species.dm | 3 +- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/surgery/organs/organ.dm | 35 +--- code/modules/surgery/organs/organ_internal.dm | 171 ++++++++++++++++-- code/modules/surgery/organs_internal.dm | 71 +++++--- code/modules/surgery/robotics.dm | 18 +- icons/mob/human_face.dmi | Bin 77924 -> 78637 bytes 12 files changed, 253 insertions(+), 111 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 913ad6f54c1..5920c286a53 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -8266,6 +8266,7 @@ "dcX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/simulated/floor{dir = 6; icon_state = "caution"},/area/atmos) "dcY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/requests_console{department = "Mechanic"; departmentType = 2; name = "Mechanic's Workshop Requests Console"; pixel_y = 30},/turf/simulated/floor,/area/engine/mechanic_workshop) "dcZ" = (/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor,/area/hallway/primary/starboard/west) +"dda" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ddh" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating,/area/engine/engineering) "ddi" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "atmospherics_south_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "atmospherics_south_sensor"; pixel_x = -8; pixel_y = -30},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "atmospherics_south"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_airpump = "atmospherics_south_pump"; tag_chamber_sensor = "atmospherics_south_sensor"; tag_exterior_door = "atmospherics_south_outer"; tag_interior_door = "atmospherics_south_inner"},/turf/simulated/floor/plating,/area/engine/engineering) "ddj" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/external{aiControlDisabled = 1; frequency = 1379; hackProof = 1; icon_state = "door_locked"; id_tag = "atmospherics_south_inner"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engineering) @@ -8470,7 +8471,6 @@ "dha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhe" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "dhg" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) @@ -8749,7 +8749,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiSdiUdiTbFlbikbFldiVdiVdiVbFlbikbFldiWdiYdiXbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabXabYabZacaacbaccacdaceacfacfaalbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwbikbikdgOdgGdgydgPdgQdgydgydgGdgRbikbikdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiVdiVdiVbFlbikcVGdiZdjbdjadelbikbFldiVdiVdiVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgachaciacjackaclaalacmbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwdgwdgwdgwdgwdgwdgwdgSdgwdgwdgwdgwdgwdgwdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacnacoacpacqacracsacdaalaalaalaalbikbikbikbikbikbikbikabKabLabLabKactactactacuacvactactactabKabKabKabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgHdgNdgTdgTdgTdgTdgTdgTdgmdgUdgmdgTdgTdgTdgTdgTdgTdgNdgJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikabKacFacGactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZdgYdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdhedhddgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikabKacFacGactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZdgYdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdheddadgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikacgacNacOacPacQacRacSacCaalacEacEacUacTacVacEacEacEbikbikbikbikabKacGactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgOdgXdgydgydgydhgdgmdgydgydgydgydgydgmdgydgydhhdgydgXdgRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgadcaddacEacEadeadgadfadiadhacEacEbikbikbikbikbikabKactadjadkadladmadnadoactadpadqadradsadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhjdhidhldhkdhmdgmdhndgydgydgydhodgmdhqdhpdhsdhrdhjdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadwadxadyadzadAadwadBadCacEadEadDadGadFadIadHadJacEbikbikbikbikbikbikactadKadLadMadNacXadOactadPadtadtadtadtaduadvbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhtdhtdgwdgwdgwdgmdhudgydgydgydhvdgmdgwdgwdgwdhtdhtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik diff --git a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm index 5b46cb64b7d..6ec1d60890b 100644 --- a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm +++ b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm @@ -62,7 +62,7 @@ datum/directive/ipc_virus/get_remaining_orders() return text -/hook/debrain/proc/debrain_directive(/obj/item/organ/internal/brain/B) +/hook/debrain/proc/debrain_directive(var/obj/item/organ/internal/brain/B) var/datum/directive/ipc_virus/D = get_directive("ipc_virus") if (!D) return 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 9600b326281..ce95c4dd791 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -170,8 +170,8 @@ Doesn't work on other aliens/AI.*/ /mob/living/carbon/proc/adjustPlasma(amount) - var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel) - if(!get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)) return 0 + var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel) + if(!vessel) return vessel.stored_plasma = max(vessel.stored_plasma + amount,0) vessel.stored_plasma = min(vessel.stored_plasma, vessel.max_plasma) //upper limit of max_plasma, lower limit of 0 return 1 diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index a0168448391..f5e832cdaa7 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -12,17 +12,17 @@ var/alien = 0 var/syndiemmi = 0 //Whether or not this is a Syndicate MMI var/mob/living/carbon/brain/brainmob = null//The current occupant. - var/obj/item/organ/brain/held_brain = null // This is so MMI's aren't brainscrubber 9000's + var/obj/item/organ/internal/brain/held_brain = null // This is so MMI's aren't brainscrubber 9000's var/mob/living/silicon/robot/robot = null//Appears unused. var/obj/mecha/mecha = null//This does not appear to be used outside of reference in mecha.dm. // I'm using this for mechs giving MMIs HUDs now /obj/item/device/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(istype(O, /obj/item/organ/brain/crystal )) + if(istype(O, /obj/item/organ/internal/brain/crystal )) user << " This brain is too malformed to be able to use with the [src]." return - if(istype(O,/obj/item/organ/brain) && !brainmob) //Time to stick a brain in it --NEO - var/obj/item/organ/brain/B = O + if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO + var/obj/item/organ/internal/brain/B = O if(!B.brainmob) user << "You aren't sure where this brain came from, but you're pretty sure it's a useless brain." return @@ -47,7 +47,7 @@ user.drop_item() B.forceMove(src) held_brain = B - if(istype(O,/obj/item/organ/brain/xeno)) // I'm not sure how well this will work now, since I don't think you can actually get xeno brains + if(istype(O,/obj/item/organ/internal/brain/xeno)) // I'm not sure how well this will work now, since I don't think you can actually get xeno brains name = "Man-Machine Interface: Alien - [brainmob.real_name]" icon = 'icons/mob/alien.dmi' icon_state = "AlienMMI" @@ -89,8 +89,8 @@ held_brain = new(src) else // We have a species, and it has a brain var/brain_path = H.species.return_organ("brain") - if(!ispath(brain_path, /obj/item/organ/brain)) - brain_path = /obj/item/organ/brain + if(!ispath(brain_path, /obj/item/organ/internal/brain)) + brain_path = /obj/item/organ/internal/brain held_brain = new brain_path(src) // Slime people will keep their slimy brains this way held_brain.dna = brainmob.dna.Clone() held_brain.name = "\the [brainmob.name]'s [initial(held_brain.name)]" diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 5a0132f6bd8..d647b317a42 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -1,4 +1,4 @@ -/obj/item/organ/brain +/obj/item/organ/internal/brain name = "brain" health = 400 //They need to live awhile longer than other organs. max_damage = 200 @@ -13,33 +13,30 @@ var/mob/living/carbon/brain/brainmob = null organ_tag = "brain" parent_organ = "head" + slot = "brain" vital = 1 -/obj/item/organ/brain/attack_self(mob/user as mob) - return //let's not have players taken out of the round as easily as a click, once you have their brain. - -/obj/item/organ/brain/surgeryize() +/obj/item/organ/internal/brain/surgeryize() if(!owner) return owner.ear_damage = 0 //Yeah, didn't you...hear? The ears are totally inside the brain. owner.ear_deaf = 0 -/obj/item/organ/brain/xeno +/obj/item/organ/internal/brain/xeno name = "thinkpan" desc = "It looks kind of like an enormous wad of purple bubblegum." - icon = 'icons/mob/alien.dmi' - icon_state = "chitin" + icon_state = "brain-x-d" -/obj/item/organ/brain/New() +/obj/item/organ/internal/brain/New() ..() spawn(5) if(brainmob && brainmob.client) brainmob.client.screen.len = null //clear the hud -/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H) +/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H) brainmob = new(src) if(isnull(dna)) // someone didn't set this right... - log_to_dd("[src] at [loc] did not contain a dna datum at time of removed.") + log_to_dd("[src] at [loc] did not contain a dna datum at time of removal.") dna = H.dna.Clone() name = "\the [dna.real_name]'s [initial(src.name)]" brainmob.dna = dna.Clone() // Silly baycode, what you do @@ -53,18 +50,18 @@ brainmob << "You feel slightly disoriented. That's normal when you're just a [initial(src.name)]." callHook("debrain", list(brainmob)) -/obj/item/organ/brain/examine(mob/user) // -- TLE +/obj/item/organ/internal/brain/examine(mob/user) // -- TLE ..(user) if(brainmob && brainmob.client)//if thar be a brain inside... the brain. user << "You can feel the small spark of life still left in this one." else user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.." -/obj/item/organ/brain/removed(var/mob/living/user) +/obj/item/organ/internal/brain/Remove(var/mob/living/user) if(!owner) return ..() // Probably a redundant removal; just bail - var/obj/item/organ/brain/B = src + var/obj/item/organ/internal/brain/B = src if(istype(B) && istype(owner) && is_primary_organ()) var/mob/living/simple_animal/borer/borer = owner.has_brain_worms() @@ -76,12 +73,12 @@ ..() -/obj/item/organ/brain/replaced(var/mob/living/target) +/obj/item/organ/internal/brain/Insert(var/mob/living/target) var/brain_already_exists = 0 if(istype(target,/mob/living/carbon/human)) // No more IPC multibrain shenanigans - var/mob/living/carbon/human/H = target - if(organ_tag in H.internal_organs_by_name) + //var/mob/living/carbon/human/H = target + if(target.get_int_organ(/obj/item/organ/internal/brain)) brain_already_exists = 1 if(!brain_already_exists) @@ -97,19 +94,22 @@ target.key = brainmob.key ..() -/obj/item/organ/brain/slime +/obj/item/organ/internal/brain/prepare_eat() + return // Too important to eat. + +/obj/item/organ/internal/brain/slime name = "slime core" desc = "A complex, organic knot of jelly and crystalline particles." icon = 'icons/mob/slimes.dmi' icon_state = "green slime extract" -/obj/item/organ/brain/golem +/obj/item/organ/internal/brain/golem name = "chem" desc = "A tightly furled roll of paper, covered with indecipherable runes." icon = 'icons/obj/wizard.dmi' icon_state = "scroll" -/obj/item/organ/brain/Destroy() //copypasted from MMIs. +/obj/item/organ/internal/brain/Destroy() //copypasted from MMIs. if(brainmob) qdel(brainmob) brainmob = null diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e469c09cab4..95892601c83 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -159,8 +159,9 @@ for(var/organ in has_organ) var/organ_type = has_organ[organ] + world << "[organ_type]"//debug print H.internal_organs_by_name[organ] = new organ_type(H,1) - H.internal_organs += new has_organ[organ] + H.internal_organs += new organ_type for(var/obj/item/organ/internal/I in H.internal_organs) I.Insert(src) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 0f21d097f5d..f75d9500e7e 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -394,7 +394,7 @@ var/global/list/damage_icon_parts = list() //warning("Invalid h_style for [species.name]: [h_style]") if(!get_int_organ(/obj/item/organ/internal/brain)) - face_standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s", "layer" = -HAIR_LAYER) + face_standing += icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s", "layer" = -HAIR_LAYER) overlays_standing[HAIR_LAYER] = image(face_standing) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 82f35730bf8..5b297ce24e4 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -32,6 +32,7 @@ var/list/organ_cache = list() /obj/item/organ/Destroy() if(!owner) return ..() +/* if(istype(owner, /mob/living/carbon)) if((owner.internal_organs) && (src in owner.internal_organs)) @@ -43,17 +44,13 @@ var/list/organ_cache = list() owner.organs -= src if((owner.organs_by_name) && (src in owner.organs_by_name)) owner.organs_by_name -= src +*/ if(src in owner.contents) owner.contents -= src return ..() -/obj/item/organ/attack_self(mob/user as mob) - // Convert it to an edible form, yum yum. - if(!robotic && user.a_intent == I_HARM) - bitten(user) - return /obj/item/organ/proc/update_health() return @@ -331,34 +328,6 @@ var/list/organ_cache = list() if(robotic) status |= ORGAN_ROBOT -/obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target) - - // Apply our eye colour to the target. - if(istype(target) && eye_colour) - target.r_eyes = eye_colour[1] - target.g_eyes = eye_colour[2] - target.b_eyes = eye_colour[3] - target.update_eyes() - ..() - -/obj/item/organ/proc/bitten(mob/user) - - if(robotic) - return - - user << "\blue You take a bite out of \the [src]." - - user.unEquip(src) - var/obj/item/weapon/reagent_containers/food/snacks/organ/O = new(get_turf(src)) - O.name = name - O.icon_state = dead_icon ? dead_icon : icon_state - - if(fingerprints) O.fingerprints = fingerprints.Copy() - if(fingerprintshidden) O.fingerprintshidden = fingerprintshidden.Copy() - if(fingerprintslast) O.fingerprintslast = fingerprintslast - - user.put_in_active_hand(O) - qdel(src) /obj/item/organ/proc/surgeryize() return diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 46d7f01b0d9..19286ab2784 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -1,27 +1,136 @@ #define PROCESS_ACCURACY 10 +/obj/item/organ/internal + origin_tech = "biotech=2" + force = 1 + w_class = 2 + throwforce = 0 + var/zone = "chest" + var/slot + vital = 0 + var/organ_action_name = null + +/obj/item/organ/internal/proc/Insert(mob/living/carbon/M, special = 0) + if(!iscarbon(M) || owner == M) + return + + var/obj/item/organ/internal/replaced = M.get_organ_slot(slot) + if(replaced) + replaced.Remove(M, special = 1) + + owner = M + M.internal_organs |= src + loc = null + if(organ_action_name) + action_button_name = organ_action_name + + +/obj/item/organ/internal/proc/Remove(mob/living/carbon/M, special = 0) + owner = null + if(M) + M.internal_organs -= src + if(vital && !special) + M.death() + + if(organ_action_name) + action_button_name = null + +/obj/item/organ/internal/proc/on_find(mob/living/finder) + return + +/obj/item/organ/internal/proc/on_life() + return + +/obj/item/organ/internal/proc/prepare_eat() + var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new + S.name = name + S.desc = desc + S.icon = icon + S.icon_state = icon_state + S.origin_tech = origin_tech + S.w_class = w_class + + return S + +/obj/item/weapon/reagent_containers/food/snacks/organ + name = "appendix" + icon_state = "appendix" + icon = 'icons/obj/surgery.dmi' + +/obj/item/weapon/reagent_containers/food/snacks/organ/New() + ..() + + reagents.add_reagent("nutriment" = 5) + + +/obj/item/organ/internal/Destroy() + if(owner) + Remove(owner, 1) + return ..() + +/obj/item/organ/internal/attack(mob/living/carbon/M, mob/user) + if(M == user && ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/weapon/reagent_containers/food/snacks/S = prepare_eat() + if(S) + H.drop_item() + H.put_in_active_hand(S) + S.attack(H, H) + qdel(src) + else + ..() + /**************************************************** INTERNAL ORGANS DEFINES ****************************************************/ // Brain is defined in brain_item.dm. -/obj/item/organ/heart +/obj/item/organ/internal/heart name = "heart" icon_state = "heart-on" organ_tag = "heart" parent_organ = "chest" dead_icon = "heart-off" vital = 1 + var/beating = 0 -/obj/item/organ/lungs +/obj/item/organ/internal/heart/update_icon() + if(beating) + icon_state = "heart-on" + else + icon_state = "heart-off" + +/obj/item/organ/internal/heart/Insert(mob/living/carbon/M, special = 0) + ..() + beating = 1 + update_icon() + +/obj/item/organ/internal/heart/Remove(mob/living/carbon/M, special = 0) + ..() + spawn(120) + beating = 0 + update_icon() + +/obj/item/organ/internal/heart/prepare_eat() + var/obj/S = ..() + S.icon_state = "heart-off" + return S + +/obj/item/organ/internal/lungs name = "lungs" icon_state = "lungs" gender = PLURAL organ_tag = "lungs" parent_organ = "chest" + slot = "lungs" -/obj/item/organ/lungs/process() +//Insert something neat here. +///obj/item/organ/internal/heart/Remove(mob/living/carbon/M, special = 0) +// ..() + + +/obj/item/organ/internal/lungs/process() ..() if(!owner) @@ -39,14 +148,15 @@ spawn owner.custom_emote(1, "gasps for air!") owner.losebreath += 5 -/obj/item/organ/kidneys +/obj/item/organ/internal/kidneys name = "kidneys" icon_state = "kidneys" gender = PLURAL organ_tag = "kidneys" parent_organ = "groin" + slot = "kidneys" -/obj/item/organ/kidneys/process() +/obj/item/organ/internal/kidneys/process() ..() @@ -64,15 +174,16 @@ owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) -/obj/item/organ/eyes +/obj/item/organ/internal/eyes name = "eyeballs" icon_state = "eyes" gender = PLURAL organ_tag = "eyes" parent_organ = "head" + slot = "eyes" var/list/eye_colour = list(0,0,0) -/obj/item/organ/eyes/proc/update_colour() +/obj/item/organ/internal/eyes/proc/update_colour() if(!owner) return eye_colour = list( @@ -81,7 +192,7 @@ owner.b_eyes ? owner.b_eyes : 0 ) -/obj/item/organ/eyes/surgeryize() +/obj/item/organ/internal/eyes/surgeryize() if(!owner) return owner.disabilities &= ~NEARSIGHTED @@ -89,13 +200,14 @@ owner.eye_blurry = 0 owner.eye_blind = 0 -/obj/item/organ/liver +/obj/item/organ/internal/liver name = "liver" icon_state = "liver" organ_tag = "liver" parent_organ = "groin" + slot = "liver" -/obj/item/organ/liver/process() +/obj/item/organ/internal/liver/process() ..() @@ -118,7 +230,7 @@ src.damage += 0.2 * PROCESS_ACCURACY //Damaged one shares the fun else - var/obj/item/organ/O = pick(owner.internal_organs) + var/obj/item/organ/internal/O = pick(owner.internal_organs) if(O) O.damage += 0.2 * PROCESS_ACCURACY @@ -148,15 +260,16 @@ if(owner.reagents.has_reagent(toxin)) owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) -/obj/item/organ/appendix +/obj/item/organ/internal/appendix name = "appendix" icon_state = "appendix" organ_tag = "appendix" parent_organ = "groin" + slot = "appendix" /* -/obj/item/organ/appendix/removed() +/obj/item/organ/internal/appendix/removed() if(owner) var/inflamed = 0 @@ -168,4 +281,34 @@ icon_state = "appendixinflamed" name = "inflamed appendix" ..() -*/ \ No newline at end of file +*/ + +/obj/item/organ/internal/shadowtumor + name = "black tumor" + desc = "A tiny black mass with red tendrils trailing from it. It seems to shrivel in the light." + icon_state = "blacktumor" + origin_tech = "biotech=4" + w_class = 1 + parent_organ = "head" + slot = "brain_tumor" + health = 3 + +/obj/item/organ/internal/shadowtumor/New() + ..() + processing_objects.Add(src) + +/obj/item/organ/internal/shadowtumor/Destroy() + processing_objects.Remove(src) + ..() + +/obj/item/organ/internal/shadowtumor/process() + if(isturf(loc)) + var/turf/T = loc + var/light_count = T.get_lumcount() + if(light_count > 4 && health > 0) //Die in the light + health-- + else if(light_count < 2 && health < 3) //Heal in the dark + health++ + if(health <= 0) + visible_message("[src] collapses in on itself!") + qdel(src) \ No newline at end of file diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 97f639e76d3..b55c3deb534 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -45,7 +45,7 @@ user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") ticker.mode.remove_thrall(target.mind,0) - + new /obj/item/organ/internal/shadowtumor(get_turf(target)) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/braincase = target.named_organ_parent("brain") if(prob(50)) @@ -72,9 +72,10 @@ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/embryo = 0 - for(var/obj/item/alien_embryo/A in target) + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) embryo = 1 - break + //break if (!hasorgans(target)) return @@ -92,8 +93,34 @@ user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", "You rip the larva out of [target]'s ribcage!") - for(var/obj/item/alien_embryo/A in target) - A.loc = A.loc.loc + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + user << "You found an unknown alien organism in [target]'s chest!" + if(A.stage < 4) + user << "It's small and weak, barely the size of a foetus." + else + user << "It's grown quite large, and writhes slightly as you look at it." + if(prob(10)) + A.AttemptGrow() + + A.Remove(target) + A.loc = get_turf(target) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!hasorgans(target)) + return + + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + if(prob(50)) + A.AttemptGrow(0) + user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") + else + target.adjustOxyLoss(30) + user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + + ////////////////////////////////////////////////////////////////// @@ -116,7 +143,7 @@ if(!affected) return var/is_organ_damaged = 0 - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I.damage > 0 && I.robotic < 2) is_organ_damaged = 1 break @@ -133,7 +160,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic < 2) spread_germs_to_organ(I, user) @@ -154,7 +181,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I) I.surgeryize() if(I && I.damage > 0) @@ -181,7 +208,7 @@ target.adjustToxLoss(10) affected.createwound(CUT, 5) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) I.take_damage(dam_amt,0) @@ -211,7 +238,7 @@ var/list/attached_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) attached_organs[I.organ_tag] = I @@ -237,7 +264,7 @@ user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.op_stage.organ_ref + var/obj/item/organ/internal/I = target.op_stage.organ_ref if(I && istype(I)) spread_germs_to_organ(I, user) I.status |= ORGAN_CUT_AWAY @@ -273,7 +300,7 @@ var/list/removable_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) removable_organs[I.organ_tag] = I @@ -297,10 +324,12 @@ // Extract the organ! if(target.op_stage.current_organ) - var/obj/item/organ/O = target.op_stage.organ_ref + var/obj/item/organ/internal/O = target.op_stage.organ_ref if(O && istype(O)) + spread_germs_to_organ(O, user) - O.removed(user) + O.Remove(user) + O.loc = get_turf(target) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -310,7 +339,7 @@ /datum/surgery_step/internal/replace_organ allowed_tools = list( - /obj/item/organ = 100 + /obj/item/organ/internal = 100 ) min_duration = 60 @@ -318,7 +347,7 @@ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/O = tool + var/obj/item/organ/internal/O = tool var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!affected) return var/organ_compatible @@ -376,15 +405,15 @@ user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ "\blue You have transplanted \the [tool] into [target]'s [affected.name].") user.drop_item(tool) - var/obj/item/organ/O = tool + var/obj/item/organ/internal/O = tool if(istype(O)) - O.replaced(target,affected) + O.Insert(target) spread_germs_to_organ(O, user) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ "\red Your hand slips, damaging \the [tool]!") - var/obj/item/organ/I = tool + var/obj/item/organ/internal/I = tool if(istype(I)) I.take_damage(rand(3,5),0) @@ -412,7 +441,7 @@ var/list/removable_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) removable_organs[I.organ_tag] = I @@ -434,7 +463,7 @@ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.op_stage.organ_ref + var/obj/item/organ/internal/I = target.op_stage.organ_ref if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY spread_germs_to_organ(I, user) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 87f0e3318cd..c18f5eafb34 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -224,7 +224,7 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!affected) return var/is_organ_damaged = 0 - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I.damage > 0 && I.robotic >= 2) is_organ_damaged = 1 break @@ -236,7 +236,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic >= 2) user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \ @@ -251,7 +251,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic >= 2) @@ -271,7 +271,7 @@ target.adjustToxLoss(5) affected.createwound(CUT, 5) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I) I.take_damage(rand(3,5),0) @@ -297,7 +297,7 @@ var/list/attached_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(I && istype(I) && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) attached_organs[I.organ_tag] = I @@ -319,7 +319,7 @@ user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status |= ORGAN_CUT_AWAY @@ -348,7 +348,7 @@ var/list/removable_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && (I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) removable_organs[I.organ_tag] = I @@ -369,7 +369,7 @@ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY @@ -432,7 +432,7 @@ "\blue You have installed \the [tool] into [target]'s [affected.name].") var/obj/item/device/mmi/M = tool - var/obj/item/organ/mmi_holder/holder = new(target, 1) + var/obj/item/organ/internal/mmi_holder/holder = new(target, 1) if (istype(M, /obj/item/device/mmi/posibrain)) holder.robotize() diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index e772ea8d04898938a42378b9466fa61369d99e73..1fa0f5c3a222aaeb0fe4488105a2cd164a8597e1 100644 GIT binary patch delta 14837 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 CFCat! From 4e1f63da7ef7349688645d055770e522e9b001d6 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 25 Dec 2015 01:05:47 -0500 Subject: [PATCH 007/442] wot --- code/datums/datumvars.dm | 2 +- .../changeling/powers/augmented_eyesight.dm | 10 +++++----- code/game/gamemodes/changeling/powers/panacea.dm | 2 +- code/modules/mob/living/carbon/alien/alien.dm | 2 +- code/modules/mob/living/carbon/brain/brain_item.dm | 4 ++-- code/modules/mob/living/carbon/human/death.dm | 2 +- .../mob/living/carbon/human/species/species.dm | 5 +++-- .../mob/living/carbon/human/update_icons.dm | 2 +- .../living/simple_animal/slaughter/slaughter.dm | 4 ++-- code/modules/surgery/organs/augments_eyes.dm | 8 ++++---- code/modules/surgery/organs/augments_internal.dm | 4 ++-- code/modules/surgery/organs/body_egg.dm | 8 ++++---- code/modules/surgery/organs/organ_internal.dm | 14 +++++++------- code/modules/surgery/organs/subtypes/machine.dm | 4 ++-- code/modules/surgery/organs/subtypes/misc.dm | 2 +- code/modules/surgery/organs/subtypes/xenos.dm | 12 ++++++------ code/modules/surgery/organs_internal.dm | 6 +++--- 17 files changed, 46 insertions(+), 45 deletions(-) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 47818f24967..1e217acf30a 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -1017,7 +1017,7 @@ client return usr << "Removed [rem_organ] from [M]." - rem_organ.Remove(M) + rem_organ.remove(M) message_admins("[key_name_admin(usr)] has removed the organ [rem_organ] from [key_name_admin(M)]") log_admin("[key_name(usr)] has removed the organ [rem_organ] from [key_name(M)]") qdel(rem_organ) diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index c276d703996..acdee566889 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -15,11 +15,11 @@ if(user.get_int_organ(/obj/item/organ/internal/cyberimp/eyes/thermals/ling)) user << "Our eyes are protected from flashes." var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling() - O.Insert(user) + O.insert(user) else var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/thermals/ling() - O.Insert(user) + O.insert(user) return 1 @@ -27,7 +27,7 @@ /obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) var/obj/item/organ/internal/cyberimp/eyes/O = user.get_organ_slot("eye_ling") if(O) - O.Remove(user) + O.remove(user) qdel(O) @@ -69,13 +69,13 @@ /obj/item/organ/internal/cyberimp/eyes/thermals/ling/emp_act(severity) return -/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/cyberimp/eyes/thermals/ling/insert(mob/living/carbon/M, special = 0) ..() if(ishuman(owner)) var/mob/living/carbon/human/H = owner H.weakeyes = 1 -/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Remove(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/cyberimp/eyes/thermals/ling/remove(mob/living/carbon/M, special = 0) if(ishuman(owner)) var/mob/living/carbon/human/H = owner H.weakeyes = 0 diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm index 126d30d55ce..c3ee9edcae1 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -13,7 +13,7 @@ var/obj/item/organ/internal/body_egg/egg = user.get_int_organ(/obj/item/organ/internal/body_egg) if(egg) - egg.Remove(user) + egg.remove(user) if(iscarbon(user)) var/mob/living/carbon/human/C = user C.vomit() diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index e7656c67dab..a07765d5e82 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -37,7 +37,7 @@ internal_organs += new /obj/item/organ/internal/brain/xeno internal_organs += new /obj/item/organ/internal/xenos/hivenode for(var/obj/item/organ/internal/I in internal_organs) - I.Insert(src) + I.insert(src) ..() /mob/living/carbon/alien/get_default_language() diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index d647b317a42..e253f469da4 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -57,7 +57,7 @@ else user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.." -/obj/item/organ/internal/brain/Remove(var/mob/living/user) +/obj/item/organ/internal/brain/remove(var/mob/living/user) if(!owner) return ..() // Probably a redundant removal; just bail @@ -73,7 +73,7 @@ ..() -/obj/item/organ/internal/brain/Insert(var/mob/living/target) +/obj/item/organ/internal/brain/insert(var/mob/living/target) var/brain_already_exists = 0 if(istype(target,/mob/living/carbon/human)) // No more IPC multibrain shenanigans diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index fd1560b6ace..dc9b7b6d477 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -15,7 +15,7 @@ for(var/obj/item/organ/internal/I in internal_organs) if(istype(loc,/turf)) - I.Remove(src) + I.remove(src) spawn() I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 95892601c83..ebb8674e889 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -159,12 +159,13 @@ for(var/organ in has_organ) var/organ_type = has_organ[organ] - world << "[organ_type]"//debug print + //world << "[organ_type]"//debug print H.internal_organs_by_name[organ] = new organ_type(H,1) H.internal_organs += new organ_type for(var/obj/item/organ/internal/I in H.internal_organs) - I.Insert(src) + if(!H.get_int_organ(I)) + I.insert(src) for(var/name in H.organs_by_name) H.organs |= H.organs_by_name[name] diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f75d9500e7e..2065b63db67 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -394,7 +394,7 @@ var/global/list/damage_icon_parts = list() //warning("Invalid h_style for [species.name]: [h_style]") if(!get_int_organ(/obj/item/organ/internal/brain)) - face_standing += icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s", "layer" = -HAIR_LAYER) + face_standing += icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s") overlays_standing[HAIR_LAYER] = image(face_standing) diff --git a/code/modules/mob/living/simple_animal/slaughter/slaughter.dm b/code/modules/mob/living/simple_animal/slaughter/slaughter.dm index e03d2b74a01..70e3161e89d 100644 --- a/code/modules/mob/living/simple_animal/slaughter/slaughter.dm +++ b/code/modules/mob/living/simple_animal/slaughter/slaughter.dm @@ -161,9 +161,9 @@ user <<"...and you don't feel any different." user.drop_item() - src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E + src.insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E -/obj/item/organ/internal/heart/demonheart/Remove(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/heart/demonheart/remove(mob/living/carbon/M, special = 0) ..() if(M.mind) M.bloodcrawl = 0 diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index f1137f58897..fb8c2d051c6 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -24,7 +24,7 @@ ) -/obj/item/organ/internal/cyberimp/eyes/Insert(var/mob/living/carbon/M, var/special = 0) +/obj/item/organ/internal/cyberimp/eyes/insert(var/mob/living/carbon/M, var/special = 0) ..() if(istype(owner, /mob/living/carbon/human) && eye_colour) var/mob/living/carbon/human/HMN = owner @@ -40,7 +40,7 @@ owner << "[aug_message]" M.sight |= sight_flags -/obj/item/organ/internal/cyberimp/eyes/Remove(var/mob/living/carbon/M, var/special = 0) +/obj/item/organ/internal/cyberimp/eyes/remove(var/mob/living/carbon/M, var/special = 0) ..() M.sight ^= sight_flags if(istype(owner,/mob/living/carbon/human) && eye_colour) @@ -96,14 +96,14 @@ slot = "eye_hud" var/HUD_type = 0 -/obj/item/organ/internal/cyberimp/eyes/hud/Insert(var/mob/living/carbon/M, var/special = 0) +/obj/item/organ/internal/cyberimp/eyes/hud/insert(var/mob/living/carbon/M, var/special = 0) ..() if(HUD_type) var/datum/atom_hud/H = huds[HUD_type] H.add_hud_to(M) M.permanent_huds |= H -/obj/item/organ/internal/cyberimp/eyes/hud/Remove(var/mob/living/carbon/M, var/special = 0) +/obj/item/organ/internal/cyberimp/eyes/hud/remove(var/mob/living/carbon/M, var/special = 0) ..() if(HUD_type) var/datum/atom_hud/H = huds[HUD_type] diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index fe00f6f2e3e..e01a6c18247 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -11,7 +11,7 @@ /obj/item/organ/internal/cyberimp/New(var/mob/M = null) if(iscarbon(M)) - src.Insert(M) + src.insert(M) if(implant_overlay) var/image/overlay = new /image(icon, implant_overlay) overlay.color = implant_color @@ -115,7 +115,7 @@ if(!r_hand_ignore && r_hand_obj in owner.contents) r_hand_obj.flags ^= NODROP -/obj/item/organ/internal/cyberimp/brain/anti_drop/Remove(var/mob/living/carbon/M, special = 0) +/obj/item/organ/internal/cyberimp/brain/anti_drop/remove(var/mob/living/carbon/M, special = 0) ..() if(active) ui_action_click() diff --git a/code/modules/surgery/organs/body_egg.dm b/code/modules/surgery/organs/body_egg.dm index 3a8580cf04f..5fa5df0ab34 100644 --- a/code/modules/surgery/organs/body_egg.dm +++ b/code/modules/surgery/organs/body_egg.dm @@ -12,10 +12,10 @@ /obj/item/organ/internal/body_egg/New(loc) if(iscarbon(loc)) - src.Insert(loc) + src.insert(loc) return ..() -/obj/item/organ/internal/body_egg/Insert(var/mob/living/carbon/M, special = 0) +/obj/item/organ/internal/body_egg/insert(var/mob/living/carbon/M, special = 0) ..() owner.status_flags |= XENO_HOST processing_objects.Add(src) @@ -23,7 +23,7 @@ spawn(0) AddInfectionImages(owner) -/obj/item/organ/internal/body_egg/Remove(var/mob/living/carbon/M, special = 0) +/obj/item/organ/internal/body_egg/remove(var/mob/living/carbon/M, special = 0) processing_objects.Remove(src) if(owner) owner.status_flags &= ~(XENO_HOST) @@ -35,7 +35,7 @@ /obj/item/organ/internal/body_egg/process() if(!owner) return if(!(src in owner.internal_organs)) - Remove(owner) + remove(owner) return egg_process() diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 19286ab2784..65543c4d739 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -10,13 +10,13 @@ vital = 0 var/organ_action_name = null -/obj/item/organ/internal/proc/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/proc/insert(mob/living/carbon/M, special = 0) if(!iscarbon(M) || owner == M) return var/obj/item/organ/internal/replaced = M.get_organ_slot(slot) if(replaced) - replaced.Remove(M, special = 1) + replaced.remove(M, special = 1) owner = M M.internal_organs |= src @@ -25,7 +25,7 @@ action_button_name = organ_action_name -/obj/item/organ/internal/proc/Remove(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/proc/remove(mob/living/carbon/M, special = 0) owner = null if(M) M.internal_organs -= src @@ -65,7 +65,7 @@ /obj/item/organ/internal/Destroy() if(owner) - Remove(owner, 1) + remove(owner, 1) return ..() /obj/item/organ/internal/attack(mob/living/carbon/M, mob/user) @@ -101,12 +101,12 @@ else icon_state = "heart-off" -/obj/item/organ/internal/heart/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/heart/insert(mob/living/carbon/M, special = 0) ..() beating = 1 update_icon() -/obj/item/organ/internal/heart/Remove(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/heart/remove(mob/living/carbon/M, special = 0) ..() spawn(120) beating = 0 @@ -126,7 +126,7 @@ slot = "lungs" //Insert something neat here. -///obj/item/organ/internal/heart/Remove(mob/living/carbon/M, special = 0) +///obj/item/organ/internal/lungs/remove(mob/living/carbon/M, special = 0) // ..() diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index b0de4619003..91ef793f92d 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -67,7 +67,7 @@ robotize() ..() -/obj/item/organ/internal/cell/Insert() +/obj/item/organ/internal/cell/insert() ..() // This is very ghetto way of rebooting an IPC. TODO better way. if(owner && owner.stat == DEAD) @@ -105,7 +105,7 @@ icon = stored_mmi.icon icon_state = stored_mmi.icon_state -/obj/item/organ/internal/mmi_holder/Remove(var/mob/living/user) +/obj/item/organ/internal/mmi_holder/remove(var/mob/living/user) if(stored_mmi) stored_mmi.loc = get_turf(src) if(owner.mind) diff --git a/code/modules/surgery/organs/subtypes/misc.dm b/code/modules/surgery/organs/subtypes/misc.dm index adab834919e..c18af376739 100644 --- a/code/modules/surgery/organs/subtypes/misc.dm +++ b/code/modules/surgery/organs/subtypes/misc.dm @@ -30,7 +30,7 @@ goo.basecolor = "#412464" goo.update_icon() -/obj/item/organ/internal/borer/Remove(var/mob/living/user) +/obj/item/organ/internal/borer/remove(var/mob/living/user) ..() diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index 7ae770d5551..a2f7daf573c 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -11,12 +11,12 @@ ..() ///can be changed if xenos get an update.. -/obj/item/organ/internal/xenos/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/xenos/insert(mob/living/carbon/M, special = 0) ..() for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) verbs += P -/obj/item/organ/internal/xenos/Remove(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/xenos/remove(mob/living/carbon/M, special = 0) for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) verbs -= P @@ -95,13 +95,13 @@ owner.adjustOxyLoss(-heal_amt) owner.adjustCloneLoss(-heal_amt) -/obj/item/organ/internal/xenos/plasmavessel/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/xenos/plasmavessel/insert(mob/living/carbon/M, special = 0) ..() if(isalien(M)) var/mob/living/carbon/alien/A = M A.updatePlasmaDisplay() -/obj/item/organ/internal/alien/plasmavessel/Remove(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/alien/plasmavessel/remove(mob/living/carbon/M, special = 0) ..() if(isalien(M)) var/mob/living/carbon/alien/A = M @@ -124,11 +124,11 @@ w_class = 1 alien_powers = list(/mob/living/carbon/alien/humanoid/verb/whisp) -/obj/item/organ/internal/xenos/hivenode/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/xenos/hivenode/insert(mob/living/carbon/M, special = 0) ..() M.faction |= "alien" -/obj/item/organ/internal/xenos/hivenode/Remove(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/xenos/hivenode/remove(mob/living/carbon/M, special = 0) M.faction -= "alien" ..() diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index b55c3deb534..dd33dbb40fc 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -103,7 +103,7 @@ if(prob(10)) A.AttemptGrow() - A.Remove(target) + A.remove(target) A.loc = get_turf(target) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -328,7 +328,7 @@ if(O && istype(O)) spread_germs_to_organ(O, user) - O.Remove(user) + O.remove(target) O.loc = get_turf(target) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -407,7 +407,7 @@ user.drop_item(tool) var/obj/item/organ/internal/O = tool if(istype(O)) - O.Insert(target) + O.insert(target) spread_germs_to_organ(O, user) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) From 2146cc0d3d8040c00c03ce1cdaf5b0cf04868bdb Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 26 Dec 2015 17:34:38 -0500 Subject: [PATCH 008/442] things and stuff...gonna need to get to those merge conflicts eventually. also purged all mention of internal_organs by name from the face of the earth. we have get_int_organ now...i may need to tweak shit. oh and i broke some things... --- code/__DEFINES/mob.dm | 1 + .../changeling/powers/augmented_eyesight.dm | 6 +-- code/game/machinery/flasher.dm | 2 +- code/game/machinery/rechargestation.dm | 27 ++++++----- code/game/objects/items.dm | 2 +- .../objects/items/devices/laserpointer.dm | 2 +- .../items/weapons/grenades/flashbang.dm | 2 +- code/game/objects/items/weapons/tools.dm | 2 +- code/modules/client/preferences.dm | 4 +- .../mob/living/carbon/carbon_defines.dm | 1 + .../mob/living/carbon/human/examine.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 4 +- .../mob/living/carbon/human/human_damage.dm | 8 ++-- .../mob/living/carbon/human/human_organs.dm | 10 ++-- code/modules/mob/living/carbon/human/life.dm | 6 +-- .../mob/living/carbon/human/species/apollo.dm | 9 ++-- .../living/carbon/human/species/species.dm | 22 ++++----- .../living/carbon/human/species/station.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/power/apc.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 2 +- code/modules/reagents/newchem/medicine.dm | 2 +- .../reagents/drink/reagents_alcohol.dm | 4 +- .../oldchem/reagents/reagents_admin.dm | 2 +- .../reagents/oldchem/reagents/reagents_med.dm | 4 +- code/modules/surgery/eye.dm | 2 +- code/modules/surgery/organs/augments_eyes.dm | 15 +++--- .../surgery/organs/augments_internal.dm | 2 + code/modules/surgery/organs/blood.dm | 2 +- code/modules/surgery/organs/organ.dm | 38 +++++++-------- code/modules/surgery/organs/organ_external.dm | 14 ++++-- code/modules/surgery/organs/organ_icon.dm | 4 +- code/modules/surgery/organs/organ_internal.dm | 44 +++++++++++++++++- .../surgery/organs/subtypes/machine.dm | 10 ++-- code/modules/surgery/organs/subtypes/xenos.dm | 2 + code/modules/surgery/organs_internal.dm | 7 +-- code/modules/surgery/robotics.dm | 10 ++-- code/modules/surgery/surgery.dm | 2 +- code/modules/virus2/effect.dm | 8 ++-- icons/obj/surgery.dmi | Bin 30051 -> 30509 bytes 40 files changed, 170 insertions(+), 122 deletions(-) diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm index 5442c621e1b..eb1efd8d54f 100644 --- a/code/__DEFINES/mob.dm +++ b/code/__DEFINES/mob.dm @@ -27,6 +27,7 @@ #define ORGAN_DEAD 1024 #define ORGAN_MUTATED 2048 #define ORGAN_ASSISTED 4096 +#define ORGAN_ORGANIC 8192 #define DROPLIMB_EDGE 0 #define DROPLIMB_BLUNT 1 diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index acdee566889..af5c62e188f 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -42,7 +42,7 @@ implant_overlay = null origin_tech = "biotech=4" slot = "eye_ling" - //status = ORGAN_ORGANIC + status = ORGAN_ORGANIC /obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life() ..() @@ -63,8 +63,8 @@ implant_overlay = null origin_tech = "biotech=5;magnets=5" slot = "eye_ling" - //status = ORGAN_ORGANIC - aug_message = "You feel a minute twitch in our eyes, and darkness creeps away." + status = ORGAN_ORGANIC + aug_message = "We feel a minute twitch in our eyes, and darkness creeps away." /obj/item/organ/internal/cyberimp/eyes/thermals/ling/emp_act(severity) return diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 86a8360b01f..86e723bca8b 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -84,7 +84,7 @@ O.visible_message("[O] gasps and shields their eyes!") if (istype(O, /mob/living/carbon/human)) var/mob/living/carbon/human/H = O - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) if (E && (E.damage > E.min_bruised_damage && prob(E.damage + 50))) flick("e_flash", O:flash) E.damage += rand(1, 2) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 93b01f3951f..8eedb95a8de 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -57,8 +57,8 @@ return 1 /obj/machinery/recharge_station/Bumped(var/mob/AM) - move_inside(AM) - + move_inside(AM) + /obj/machinery/recharge_station/allow_drop() return 0 @@ -115,7 +115,7 @@ R.cell.charge = min(R.cell.charge + recharge_speed, R.cell.maxcharge) else if(istype(occupant, /mob/living/carbon/human)) var/mob/living/carbon/human/H = occupant - if(!isnull(H.internal_organs_by_name["cell"]) && H.nutrition < 450) + if(H.get_int_organ(/obj/item/organ/internal/cell) && H.nutrition < 450) H.nutrition = min(H.nutrition+recharge_speed_nutrition, 450) if(repairs) H.heal_overall_damage(repairs, repairs, 0, 1) @@ -210,14 +210,14 @@ /obj/machinery/recharge_station/verb/move_inside(var/mob/user = usr) set category = "Object" set src in oview(1) - + if(!user) return - + if (panel_open) usr << "Close the maintenance panel first." - return - + return + var/can_accept_user if(isrobot(user)) var/mob/living/silicon/robot/R = user @@ -232,17 +232,17 @@ R << "Without a power cell, you can't be recharged." //Make sure they actually HAVE a cell, now that they can get in while powerless. --NEO return - can_accept_user = 1 - + can_accept_user = 1 + else if(istype(user, /mob/living/carbon/human)) var/mob/living/carbon/human/H = user - + if(H.stat == DEAD) - return + return if(occupant) H << "The cell is already occupied!" - return - if(isnull(H.internal_organs_by_name["cell"])) + return + if(!H.get_int_organ(/obj/item/organ/internal/cell)) return can_accept_user = 1 @@ -261,4 +261,3 @@ build_icon() update_use_power(1) return - \ No newline at end of file diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 5dfabafe4a5..ead588f462d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -427,7 +427,7 @@ "\red You stab yourself in the eyes with [src]!" \ ) if(istype(H)) - var/obj/item/organ/internal/eyes/eyes = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) if(!eyes) return eyes.take_damage(rand(3,4), 1) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 97ae4caba04..e89f3213b4f 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -113,7 +113,7 @@ severity -= 1 severity = min(max(severity, 0), 4) var/mob/living/carbon/human/H = C - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) switch(severity) if(0) diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 25d819f63c2..51bd36c5839 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -46,7 +46,7 @@ if(!eye_safety && ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) flick("e_flash", M.flash) if (E) E.damage += eye_damage diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 90a25d9f4f3..c7d69593a1b 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -358,7 +358,7 @@ var/safety = user:eyecheck() if(ishuman(user)) var/mob/living/carbon/human/H = user - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) if(!istype(E)) // No eyes? No problem! return switch(safety) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 64389d8066a..0724ba4b292 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1575,9 +1575,9 @@ datum/preferences else O.robotize() else - var/obj/item/organ/internal/I = character.internal_organs_by_name[name] + var/obj/item/organ/internal/I = character.get_int_organ(name) if(I) - if(status == "assisted") + if(status == "assisted")//add an actual organ for this? I.mechassist() else if(status == "mechanical") I.robotize() diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 4288b561f2d..5c1458a73e1 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -2,6 +2,7 @@ gender = MALE hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD) var/list/stomach_contents = list() + var/list/internal_organs = list() var/brain_op_stage = 0.0 var/list/datum/disease2/disease/virus2 = list() var/antibodies = 0 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index bdc1652231a..cb16f0eec19 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -256,8 +256,8 @@ else if(!client) msg += "[t_He] [t_has] suddenly fallen asleep.\n" - if(!get_int_organ(/obj/item/organ/internal/brain)) - msg += "It appears that it's brain is missing...\n" + if(!src.get_int_organ(/obj/item/organ/internal/brain)) + msg += "It appears that thier brain is missing...\n" var/list/wound_flavor_text = list() var/list/is_destroyed = list() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4c8b53ccfe7..ccb4219b62b 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1313,14 +1313,14 @@ ..() /mob/living/carbon/human/proc/is_lung_ruptured() - var/obj/item/organ/internal/lungs/L = internal_organs_by_name["lungs"] + var/obj/item/organ/internal/lungs/L = get_int_organ(/obj/item/organ/internal/lungs) if(!L) return 0 return L.is_bruised() /mob/living/carbon/human/proc/rupture_lung() - var/obj/item/organ/internal/lungs/L = internal_organs_by_name["lungs"] + var/obj/item/organ/internal/lungs/L = get_int_organ(/obj/item/organ/internal/lungs) if(!L) return 0 diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index ec075fcf9f2..30c9e770d7c 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -18,7 +18,7 @@ if(((100 - total_burn) < config.health_threshold_dead) && stat == DEAD) //100 is the magic human max health number ChangeToHusk() //BECAUSE NO ONE THOUGHT TO USE LIVING/VAR/MAXHEALTH I GUESS if(species.can_revive_by_healing) - var/obj/item/organ/internal/brain/B = internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/B = get_int_organ(/obj/item/organ/internal/brain) if(B) if((health >= (config.health_threshold_dead / 100 * 75)) && stat == DEAD) update_revive() @@ -32,7 +32,7 @@ return 0 //godmode if(species && species.has_organ["brain"]) - var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain) if(sponge) sponge.take_damage(amount, 1) brainloss = sponge.damage @@ -46,7 +46,7 @@ return 0 //godmode if(species && species.has_organ["brain"]) - var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain) if(sponge) sponge.damage = min(max(amount, 0),(maxHealth*2)) brainloss = sponge.damage @@ -60,7 +60,7 @@ return 0 //godmode if(species && species.has_organ["brain"]) - var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain) if(sponge) brainloss = min(sponge.damage,maxHealth*2) else diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 0dc5851a8ee..2927b5dda34 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -1,13 +1,13 @@ /mob/living/carbon/human/proc/update_eyes() - var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) if(eyes) eyes.update_colour() regenerate_icons() -/mob/living/carbon/var/list/internal_organs = list() +///mob/living/carbon/var/list/internal_organs = list() /mob/living/carbon/human/var/list/organs = list() /mob/living/carbon/human/var/list/organs_by_name = list() // map organ names to organs -/mob/living/carbon/human/var/list/internal_organs_by_name = list() // so internal organs have less ickiness too +//mob/living/carbon/human/var/list/internal_organs_by_name = list() // so internal organs have less ickiness too // Takes care of organ related updates, such as broken and missing limbs /mob/living/carbon/human/proc/handle_organs() @@ -157,7 +157,7 @@ I use this to standardize shadowling dethrall code -- Crazylemon */ /mob/living/carbon/human/proc/named_organ_parent(var/organ_name) - if (!(organ_name in internal_organs_by_name)) + if (!get_int_organ(organ_name)) return null - var/obj/item/organ/O = internal_organs_by_name[organ_name] + var/obj/item/organ/internal/O = get_int_organ(organ_name) return O.parent_organ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 92c2e7049de..f99c680dc84 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -215,7 +215,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if (radiation) - if((locate(src.internal_organs_by_name["resonant crystal"]) in src.internal_organs)) + if(src.get_int_organ(/obj/item/organ/internal/nucleation/resonant_crystal)) var/rads = radiation/25 radiation -= rads radiation -= 0.1 @@ -894,7 +894,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc //Vision //god knows why this is here var/obj/item/organ/internal/vision if(species.vision_organ) - vision = internal_organs_by_name[species.vision_organ] + vision = get_int_organ(/obj/item/organ/internal/eyes)//wot? if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means. eye_blind = 0 @@ -1207,7 +1207,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc /mob/living/carbon/human/proc/handle_heartbeat() var/client/C = src.client if(C && C.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref - var/obj/item/organ/internal/heart/H = internal_organs_by_name["heart"] + var/obj/item/organ/internal/heart/H = get_int_organ(/obj/item/organ/internal/heart) if(!H) //H.status will runtime if there is no H (obviously) return diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm index a8254337c8d..e3617463aa4 100644 --- a/code/modules/mob/living/carbon/human/species/apollo.dm +++ b/code/modules/mob/living/carbon/human/species/apollo.dm @@ -47,14 +47,14 @@ /datum/species/wryn/handle_death(var/mob/living/carbon/human/H) for(var/mob/living/carbon/C in living_mob_list) - if(locate(/obj/item/organ/internal/wryn/hivenode) in C.internal_organs) + if(C.get_int_organ(/obj/item/organ/internal/wryn/hivenode)) C << "Your antennae tingle as you are overcome with pain..." C << "It feels like part of you has died." /datum/species/wryn/handle_attack_hand(var/mob/living/carbon/human/H, var/mob/living/carbon/human/M) if(M.a_intent == I_HARM) if(H.handcuffed) - if(!(locate(H.internal_organs_by_name["antennae"]) in H.internal_organs)) return + if(!H.get_int_organ(/obj/item/organ/internal/wryn/hivenode)) return var/turf/p_loc = M.loc var/turf/p_loc_m = H.loc @@ -62,9 +62,10 @@ H << "[M] grips your antennae and starts violently pulling!" do_after(H, 250, target = src) if(p_loc == M.loc && p_loc_m == H.loc) - qdel(H.internal_organs_by_name["antennae"]) + var/obj/item/organ/internal/wryn/hivenode/node = new /obj/item/organ/internal/wryn/hivenode H.remove_language("Wryn Hivemind") - new /obj/item/organ/internal/wryn/hivenode(M.loc) + node.remove(H) + node.loc = M.loc M << "You hear a loud crunch as you mercilessly pull off [H]'s antennae." H << "You hear a loud crunch as your antennae is ripped off your head by [M]." H << "It's so quiet..." diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index ebb8674e889..5a01fa7ffca 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -137,19 +137,17 @@ if((organ in H.organs)) qdel(organ) - for(var/obj/item/organ/internal/organ in H.contents) - if((organ in H.internal_organs)) - qdel(organ) + //for(var/obj/item/organ/internal/organ in H.contents) + // if((organ in H.internal_organs)) + // qdel(organ) if(H.organs) H.organs.Cut() - if(H.internal_organs) H.internal_organs.Cut() + //if(H.internal_organs) H.internal_organs.Cut() if(H.organs_by_name) H.organs_by_name.Cut() - if(H.internal_organs_by_name) H.internal_organs_by_name.Cut() H.organs = list() H.internal_organs = list() H.organs_by_name = list() - H.internal_organs_by_name = list() for(var/limb_type in has_limbs) var/list/organ_data = has_limbs[limb_type] @@ -157,15 +155,12 @@ var/obj/item/organ/O = new limb_path(H) organ_data["descriptor"] = O.name - for(var/organ in has_organ) - var/organ_type = has_organ[organ] - //world << "[organ_type]"//debug print - H.internal_organs_by_name[organ] = new organ_type(H,1) - H.internal_organs += new organ_type + for(var/index in has_organ) + var/organ = has_organ[index] + H.internal_organs += new organ(null) for(var/obj/item/organ/internal/I in H.internal_organs) - if(!H.get_int_organ(I)) - I.insert(src) + I.insert(H) for(var/name in H.organs_by_name) H.organs |= H.organs_by_name[name] @@ -609,6 +604,7 @@ Returns the path corresponding to the corresponding organ It'll return null if the organ doesn't correspond, so include null checks when using this! */ +//Fethas Todo:Do i need to redo this? /datum/species/proc/return_organ(var/organ_slot) if(!(organ_slot in has_organ)) return null diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 96e834dd749..ec5998a989d 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -502,7 +502,7 @@ reagent_tag = PROCESS_SYN has_organ = list( - "brain" = /obj/item/organ/internal/mmi_holder/posibrain, + "brain" = /obj/item/organ/internal/brain/mmi_holder/posibrain, "cell" = /obj/item/organ/internal/cell, "optics" = /obj/item/organ/internal/optical_sensor ) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 2065b63db67..faa638f401e 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -245,7 +245,7 @@ var/global/list/damage_icon_parts = list() qdel(stand_icon) stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") var/icon_key = "" - var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) if(eyes) icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 897cfa1f9f1..aa18182ccc5 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -652,7 +652,7 @@ //Synthetic human mob goes here. if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user - if(!isnull(H.internal_organs_by_name["cell"]) && H.a_intent == I_GRAB) + if(H.get_int_organ(/obj/item/organ/internal/cell) && H.a_intent == I_GRAB) if(emagged || stat & BROKEN) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 80c591d3cf9..898ef71febb 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -182,7 +182,7 @@ continue // Where we're going, we don't need eyes. // Prosthetic eyes will also protect against this business. - var/obj/item/organ/internal/eyes = l.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = l.get_int_organ(/obj/item/organ/internal/eyes/) if(!istype(eyes)) continue l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) ) diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index ba18e879729..a4a8a596b22 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -525,7 +525,7 @@ datum/reagent/oculine/on_mob_life(var/mob/living/M as mob) if(prob(80)) if(ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) if(istype(E)) E.damage = max(E.damage-1, 0) M.eye_blurry = max(M.eye_blurry-1 , 0) diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm index 2d4a7bded8b..555710be247 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -63,8 +63,8 @@ M:drowsyness = max(M:drowsyness, 30/sober_str) if(ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"] - if (istype(L)) + if (H.get_int_organ(/obj/item/organ/internal/liver)) + var/obj/item/organ/internal/liver/L = /obj/item/organ/internal/liver L.take_damage(0.1, 1) H.adjustToxLoss(0.1) ..() diff --git a/code/modules/reagents/oldchem/reagents/reagents_admin.dm b/code/modules/reagents/oldchem/reagents/reagents_admin.dm index ad4048c4efe..6c302321b89 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_admin.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_admin.dm @@ -24,7 +24,7 @@ M.eye_blind = 0 if(ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) if(istype(E)) E.damage = max(E.damage-5 , 0) M.SetWeakened(0) diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm index 61f4b66255c..1d684dc5563 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -78,8 +78,8 @@ var/mob/living/carbon/human/H = M //Mitocholide is hard enough to get, it's probably fair to make this all internal organs - for(var/name in H.internal_organs_by_name) - var/obj/item/organ/internal/I = H.internal_organs_by_name[name] + for(var/name in H.internal_organs) + var/obj/item/organ/internal/I = H.get_int_organ(name) if(I.damage > 0) I.damage = max(I.damage-0.4, 0) ..() diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm index 7cafa8e6ab9..f2cc4c59d72 100644 --- a/code/modules/surgery/eye.dm +++ b/code/modules/surgery/eye.dm @@ -39,7 +39,7 @@ target.blinded += 1.5 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = target.get_int_organ(/obj/item/organ/internal/eyes) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing [target]'s eyes wth \the [tool]!" , \ "\red Your hand slips, slicing [target]'s eyes wth \the [tool]!" ) diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index fb8c2d051c6..b358e1f8b25 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -7,13 +7,12 @@ parent_organ = "eyes" w_class = 1 - var/sight_flags = 0 + var/vision_flags = 0 var/list/eye_colour = list(0,0,0) var/list/old_eye_colour = list(0,0,0) var/flash_protect = 0 var/aug_message = "Your vision is augmented!" - /obj/item/organ/internal/cyberimp/eyes/proc/update_colour() if(!owner) return @@ -38,11 +37,12 @@ HMN.update_eyes() if(aug_message && !special) owner << "[aug_message]" - M.sight |= sight_flags + M.sight |= vision_flags + world << "[M.sight]" /obj/item/organ/internal/cyberimp/eyes/remove(var/mob/living/carbon/M, var/special = 0) ..() - M.sight ^= sight_flags + M.sight ^= vision_flags if(istype(owner,/mob/living/carbon/human) && eye_colour) var/mob/living/carbon/human/HMN = owner HMN.r_eyes = old_eye_colour[1] @@ -52,7 +52,7 @@ /obj/item/organ/internal/cyberimp/eyes/on_life() ..() - owner.sight |= sight_flags + owner.sight |= vision_flags /obj/item/organ/internal/cyberimp/eyes/emp_act(severity) if(!owner) @@ -77,14 +77,14 @@ eye_colour = rgb(0, 0, 0) implant_color = "#000000" origin_tech = "materials=6;programming=4;biotech=6;magnets=5" - sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS + vision_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS /obj/item/organ/internal/cyberimp/eyes/thermals name = "Thermals implant" desc = "These cybernetic eye implants will give you Thermal vision. Vertical slit pupil included." eye_colour = rgb(255, 204, 0) implant_color = "#FFCC00" - sight_flags = SEE_MOBS + vision_flags = SEE_MOBS flash_protect = -1 origin_tech = "materials=6;programming=4;biotech=5;magnets=5;syndicate=4" aug_message = "You see prey everywhere you look..." @@ -137,5 +137,6 @@ implant_color = "#101010" flash_protect = 2 // Welding with thermals will still hurt your eyes a bit. + /obj/item/organ/internal/cyberimp/eyes/shield/emp_act(severity) return \ No newline at end of file diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index e01a6c18247..7bbcd155cfb 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -8,6 +8,8 @@ status = ORGAN_ROBOT var/implant_color = "#FFFFFF" var/implant_overlay + tough = 1 //not easyly broken by combat damage + sterile = 1 //not very germy /obj/item/organ/internal/cyberimp/New(var/mob/M = null) if(iscarbon(M)) diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm index 0e909ec5b18..40466818695 100644 --- a/code/modules/surgery/organs/blood.dm +++ b/code/modules/surgery/organs/blood.dm @@ -87,7 +87,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 // Damaged heart virtually reduces the blood volume, as the blood isn't // being pumped properly anymore. - var/obj/item/organ/internal/heart/heart = internal_organs_by_name["heart"] + var/obj/item/organ/internal/heart/heart = get_int_organ(/obj/item/organ/internal/heart) if(heart) if(heart.damage > 1 && heart.damage < heart.min_bruised_damage) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 5b297ce24e4..9808f8d6233 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -32,19 +32,20 @@ var/list/organ_cache = list() /obj/item/organ/Destroy() if(!owner) return ..() -/* + if(istype(owner, /mob/living/carbon)) if((owner.internal_organs) && (src in owner.internal_organs)) - owner.internal_organs -= src + var/obj/item/organ/internal/O = src + O.remove(owner) if(istype(owner, /mob/living/carbon/human)) - if((owner.internal_organs_by_name) && (src in owner.internal_organs_by_name)) - owner.internal_organs_by_name -= src - if((owner.organs) && (src in owner.organs)) - owner.organs -= src - if((owner.organs_by_name) && (src in owner.organs_by_name)) - owner.organs_by_name -= src -*/ + var/obj/item/organ/internal/O = src + O.remove(owner) + if((owner.organs) && (src in owner.organs)) + owner.organs -= src + if((owner.organs_by_name) && (src in owner.organs_by_name)) + owner.organs_by_name -= src + if(src in owner.contents) owner.contents -= src @@ -101,8 +102,8 @@ var/list/organ_cache = list() owner.death() /obj/item/organ/process() - if(loc != owner) - owner = null + //if(loc != owner) + // owner = null //dead already, no need for more processing if(status & ORGAN_DEAD) @@ -289,10 +290,10 @@ var/list/organ_cache = list() if(!istype(owner)) return - if(is_primary_organ()) - owner.internal_organs_by_name[organ_tag] = null - owner.internal_organs_by_name -= organ_tag - owner.internal_organs_by_name -= null // uh what does this line even do this seems silly + //if(is_primary_organ())//Toddo from fethas:Do i need to move ths? + // owner.internal_organs_by_name[organ_tag] = null + // owner.internal_organs_by_name -= organ_tag + // owner.internal_organs_by_name -= null // uh what does this line even do this seems silly owner.internal_organs -= src @@ -320,10 +321,9 @@ var/list/organ_cache = list() owner = target processing_objects -= src - target.internal_organs |= src affected.internal_organs |= src - if (!(organ_tag in target.internal_organs_by_name)) - target.internal_organs_by_name[organ_tag] = src // In case multiple of the same type are inserted, only the first one is the primary organ + if (!target.get_int_organ(src)) + target.internal_organs |= src src.loc = target if(robotic) status |= ORGAN_ROBOT @@ -342,4 +342,4 @@ I use this so that this can be made better once the organ overhaul rolls out -- O = owner if (!istype(owner)) // You're not the primary organ of ANYTHING, bucko return 0 - return src == O.internal_organs_by_name[organ_tag] + return src == O.get_int_organ(organ_tag) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 708926a2e62..4e6e85292c0 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -71,7 +71,9 @@ if(internal_organs) for(var/obj/item/organ/internal/O in internal_organs) - qdel(O) + internal_organs -= O + O.remove(owner) + //qdel(O) return ..() @@ -95,11 +97,12 @@ if(contents.len) var/obj/item/removing = pick(contents) removing.loc = get_turf(user.loc) - var/obj/item/organ/O = removing + var/obj/item/organ/internal/O = removing if(istype(O)) O.status |= ORGAN_CUT_AWAY - spread_germs_to_organ(O,user) // This wouldn't be any cleaner than the actual surgery - O.removed(user) + if(!O.sterile) + spread_germs_to_organ(O,user) // This wouldn't be any cleaner than the actual surgery + O.remove(src) if(!(user.l_hand && user.r_hand)) user.put_in_hands(removing) user.visible_message("[user] extracts [removing] from [src] with [W]!") @@ -166,7 +169,8 @@ // Damage an internal organ if(internal_organs && internal_organs.len) var/obj/item/organ/internal/I = pick(internal_organs) - I.take_damage(brute / 2) + if(!I.tough)//mostly for cybernetic organs + I.take_damage(brute / 2) brute -= brute / 2 if(status & ORGAN_BROKEN && prob(40) && brute) diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index dd10ec7920b..96de3ea89ac 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -33,7 +33,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human) ..() - var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ("eyes")//owner.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ(/obj/item/organ/internal/eyes)//owner.internal_organs_by_name["eyes"] if(eyes) eyes.update_colour() /obj/item/organ/external/head/removed() @@ -48,7 +48,7 @@ var/global/list/limb_icon_cache = list() return if(species.has_organ["eyes"]) - var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ(/obj/item/organ/internal/eyes)//owner.internal_organs_by_name["eyes"] if(species.eyes) var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes) if(eyes) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 65543c4d739..6678c37033d 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -9,6 +9,8 @@ var/slot vital = 0 var/organ_action_name = null + var/sterile = 0 //can the organ be infected by germs? + var/tough = 0 //can organ be easily damaged? /obj/item/organ/internal/proc/insert(mob/living/carbon/M, special = 0) if(!iscarbon(M) || owner == M) @@ -19,7 +21,9 @@ replaced.remove(M, special = 1) owner = M + M.internal_organs |= src + //M.internal_organs_by_name[src] |= src(H,1) loc = null if(organ_action_name) action_button_name = organ_action_name @@ -29,6 +33,7 @@ owner = null if(M) M.internal_organs -= src + //M.internal_organs_by_name[src] -= src if(vital && !special) M.death() @@ -192,6 +197,16 @@ owner.b_eyes ? owner.b_eyes : 0 ) +/obj/item/organ/internal/eyes/insert(mob/living/carbon/M, special = 0) +// Apply our eye colour to the target. + if(istype(M) && eye_colour) + var/mob/living/carbon/human/eyes = M + eyes.r_eyes = eye_colour[1] + eyes.g_eyes = eye_colour[2] + eyes.b_eyes = eye_colour[3] + eyes.update_eyes() + ..() + /obj/item/organ/internal/eyes/surgeryize() if(!owner) return @@ -200,6 +215,7 @@ owner.eye_blurry = 0 owner.eye_blind = 0 + /obj/item/organ/internal/liver name = "liver" icon_state = "liver" @@ -282,7 +298,7 @@ name = "inflamed appendix" ..() */ - +//shadowling tumor /obj/item/organ/internal/shadowtumor name = "black tumor" desc = "A tiny black mass with red tendrils trailing from it. It seems to shrivel in the light." @@ -305,10 +321,34 @@ if(isturf(loc)) var/turf/T = loc var/light_count = T.get_lumcount() + world << "[light_count]" if(light_count > 4 && health > 0) //Die in the light health-- else if(light_count < 2 && health < 3) //Heal in the dark health++ if(health <= 0) visible_message("[src] collapses in on itself!") - qdel(src) \ No newline at end of file + qdel(src) + +//debug and adminbus.... + +/obj/item/organ/internal/honktumor + name = "banana tumor" + desc = "A tiny yellow mass shaped like..a banana?" + icon_state = "honktumor" + origin_tech = "biotech=1" + w_class = 1 + parent_organ = "head" + slot = "brain_tumor" + health = 3 + +/obj/item/organ/internal/honktumor/insert(mob/living/carbon/M, special = 0) + + M.mutations.Add(CLUMSY) + M.dna.SetSEState(COMICBLOCK,1,1) + //genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED) + +/obj/item/organ/internal/honktumor/remove(mob/living/carbon/M, special = 0) + M.mutations.Remove(CLUMSY) + M.mutations.Remove(COMICBLOCK) + //genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED) \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index 91ef793f92d..511ea19b000 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -88,7 +88,7 @@ ..() // Used for an MMI or posibrain being installed into a human. -/obj/item/organ/internal/mmi_holder +/obj/item/organ/internal/brain/mmi_holder name = "brain" organ_tag = "brain" parent_organ = "chest" @@ -97,7 +97,7 @@ slot = "brain" var/obj/item/device/mmi/stored_mmi -/obj/item/organ/internal/mmi_holder/proc/update_from_mmi() +/obj/item/organ/internal/brain/mmi_holder/proc/update_from_mmi() if(!stored_mmi) return name = stored_mmi.name @@ -105,7 +105,7 @@ icon = stored_mmi.icon icon_state = stored_mmi.icon_state -/obj/item/organ/internal/mmi_holder/remove(var/mob/living/user) +/obj/item/organ/internal/brain/mmi_holder/remove(var/mob/living/user) if(stored_mmi) stored_mmi.loc = get_turf(src) if(owner.mind) @@ -117,7 +117,7 @@ holder_mob.unEquip(src) qdel(src) -/obj/item/organ/internal/mmi_holder/New() +/obj/item/organ/internal/brain/mmi_holder/New() ..() // This is very ghetto way of rebooting an IPC. TODO better way. spawn(1) @@ -125,7 +125,7 @@ owner.stat = CONSCIOUS owner.visible_message("\The [owner] twitches visibly!") -/obj/item/organ/internal/mmi_holder/posibrain/New() +/obj/item/organ/internal/brain/mmi_holder/posibrain/New() robotize() stored_mmi = new /obj/item/device/mmi/posibrain(src) ..() diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index a2f7daf573c..4cbad16a7f3 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -2,6 +2,8 @@ origin_tech = "biotech=5" icon_state = "xgibmid2" var/list/alien_powers = list() + tough = 1 + sterile = 1 /obj/item/organ/internal/xenos/New() for(var/A in alien_powers) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index dd33dbb40fc..7cfd46aa6a5 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -163,7 +163,8 @@ for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic < 2) - spread_germs_to_organ(I, user) + if(!I.sterile) + spread_germs_to_organ(I, user) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) @@ -370,13 +371,13 @@ if(O.organ_tag == "limb") return 0 - else if(target.species.has_organ[O.organ_tag]) + else if(target.species.has_organ[O.organ_tag])//need to change this around for cybernetic implants if(O.damage > (O.max_damage * 0.75)) user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." return 2 - if(!target.internal_organs_by_name[O.organ_tag]) + if(!target.get_int_organ(O)) organ_missing = 1 else user << "\red \The [target] already has [o_a][O.organ_tag]." diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index c18f5eafb34..b1e2d8323be 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -319,7 +319,7 @@ user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.get_int_organ(target.op_stage.current_organ) if(I && istype(I)) I.status |= ORGAN_CUT_AWAY @@ -369,7 +369,7 @@ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.get_int_organ(target.op_stage.current_organ) if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY @@ -414,7 +414,7 @@ user << "You're pretty sure [target.species.name_plural] don't normally have a brain." return 2 - if(!isnull(target.internal_organs["brain"])) + if(target.get_int_organ(/obj/item/organ/internal/brain/)) user << "Your subject already has a brain." return 2 @@ -432,11 +432,11 @@ "\blue You have installed \the [tool] into [target]'s [affected.name].") var/obj/item/device/mmi/M = tool - var/obj/item/organ/internal/mmi_holder/holder = new(target, 1) + var/obj/item/organ/internal/brain/mmi_holder/holder = new() if (istype(M, /obj/item/device/mmi/posibrain)) holder.robotize() - target.internal_organs_by_name["brain"] = holder + holder.insert(target) user.unEquip(tool) tool.forceMove(holder) holder.stored_mmi = tool diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index e71df599342..9fd30f31992 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -68,7 +68,7 @@ /proc/spread_germs_to_organ(obj/item/organ/E, mob/living/carbon/human/user) if(!istype(user) || !istype(E)) return - + //world << "Germ spread: [E] : [E.owner]" var/germ_level = user.germ_level if(user.gloves) germ_level = user.gloves.germ_level diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index 4955d200252..86fe433594c 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -221,7 +221,7 @@ activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob - var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/B = H.get_int_organ(/obj/item/organ/internal/brain) if (B.damage < B.min_broken_damage) B.take_damage(5, 1) else @@ -442,7 +442,7 @@ activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob - var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/B = H.get_int_organ(/obj/item/organ/internal/brain) if (B.damage < B.min_broken_damage) B.take_damage(1, 1) else @@ -704,7 +704,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human) activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob - var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"] + var/obj/item/organ/internal/brain/B = H.get_int_organ(/obj/item/organ/internal/brain) if (B.damage < B.min_broken_damage) B.take_damage(0.5, 1) else @@ -936,7 +936,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human) name = "Watery Eyes" stage = 1 activate(var/mob/living/carbon/human/mob,var/multiplier) - var/obj/item/organ/internal/eyes/E = mob.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/E = mob.get_int_organ(/obj/item/organ/internal/eyes) if(!istype(E) || (E.status & ORGAN_ROBOT)) // No eyes or robotic eyes? No problem! return mob << "Your eyes sting and water!" diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 619678fd650e6f3861513d518138898a6862316e..6677e3bcdf797205b4918b4695026e1210394278 100644 GIT binary patch delta 11584 zcmaKSbyQSQ+wU2M4gpD#QWOzEM5LulBn9aPNonaiLxU26G{}I6bayu>sk8_T-Q6(^ z-{Jl4d;hxYveqm%XZGIb*-!qS-)3NTwz){mm<#=g)if( zsvur`&aW8b*1l7f3@14vcy)POxUZRsWK3Zs(=P$p*f+bXI7`}mo4wti$lO_`}ytJyOp!Rq}9ik~X$-k~CWD1i=(|;D8O*;y3Fw?l4D%?%rtn zWkO40Q)X&3`35l^-+OsYQ6IvoYv1DR_XnT@TgwXhMt`N-azxicSi?+FkQk%+^~#J2 zE%`Xgc)3WwMFh(!4ue3$=J!LH60b1eU;0#|(9l;mM| z&b@D9^AYiPWQmm11&OK;C}MFupA-;8eA2A_mc^UG2v?w!-xZ8VACp+leoEN1!mR67 zNrsy{S!=~dOjh>Fa84UZo%=9qEQfLD zf<@#e`%X+qRkb_S?)`}_j1A}E4r5bwI&a$d8X_Q**iE!{A?09f1sOFjUKo0)x3Gqma$zfndmwZ zi%fX(aV;f*sKZN7`qXkhSYA!0omfOUuqZAIn&E40cS?t?iC)h}`ncd*6wN8s~!Rt%ZUzX_F^ls{C zidSuwt8V$ue2SX3^~jvfC&Ba|&?VPCBtQ^-3spp>3R2X{+8PGf{;MY8<>j4h^yDel zuM7D2k&rf0mXd~MajNQltj9oT9=tHD-eHG=iqQijAg|iZ*K@hV=b+&vWTG? z5C0Ai2jr>e=pF+$Ha7I*^9Rd)9+j`A1MA>$uO!k1;pZ2E9}HXD&qqF=%SX*jgvwnV z=-Mf<=<4eF6!ZOM>?mE@iq1LpJw7ez7I1YG&Mhi32gqn?b6+9e=%RF{wqRi+V%gc* zn%z$s@vC2^ucc5@Q4xS4&m8B(E5|Mpy#Q_H$)eP=u|QHu*F);x)5Oz_;iFK?Ad3P2;SZjst<8_KC(s?^1ddUIIP5#N6 zY7{T5+Z8?}m-dm|#R65Y3PjB*qE_h-{3>Bb}S233=La9^& zetjlv|2yMVu7 z6^qb?;gQb<_!~W7*Zl=F2k`-wn^Ih zvA@$7j#+7axBVrr&kNd4KFd7zMV~o6XsZ8UEqk$~QC3#Q4*cxvGg}xJG$tJOKHce> zEHew9sIM1_pclM-J=u)+SmDvaru&M?@aFr0K?Q>!V0dX}bi~oG z&uU^kn=CiJ{N~LYz7``!;)TUUr-LQ=RFsj6OXXkh*)KmmPQjs9Izr@^vO^t7SFBg3 zVw0cD>&?$PVkzUkKFtQiD@pkM0^1NVEOKsl7iqGNW~!@?M3!YaBi&>Ofp_0ksDC_q z2+92zpxn4l+UTu1I5?P`ZSvk9R^WmGUb%xXzzsxGvo@kb9H)_(N|Iz9ro0zZRAsR{|wKf=2NIY6VG5LAdJj&)h0O$rHKpdx{V@DyNHs3*$<_$A|m`2$f;AAKr z?&4Dd_&IYD2rS^w3>gmW$&?w!ApEH}3++9w`T6!rG8t3PW0Bb8@12u((#25^Q zF^d)*Oa#DS`Ss(>_q% zhlz6^YQ0A8**ZHrC!N*(3MFOg&XfxM{N+o>OICc_%6))ovycoR1ZHA?|5lZjm1VbR zzS*p=J(!5R2`yhyejLr&0j;3SkHPA1MAdI`{|i+E)?`P=$HDSHS#ogIAIn9R&1ts3 z>2|6$FlnM20Y%OPN1^}zaFuC1^~Yqn9ks+rAxj5Z{oxv$OnMgaSi&xAp9fyh;vnn+ zq>+Q*9DCw9dlA!%q_7xRWNf&tRfLHd= z*`AQ_gZAi@_(d0qK;B$Iy|9cnI^$~PVdmBWlm z3`?|X5=|OzCT2Vea3$#Ev~7J?dFRd@5I}tY{y*SS@t4$dPnhEzlz^xX_%(p=$>yII{r5vqO(&vv@g6+r$Sb^vZ6(A_tp^@)jGoBIXqqg>ll~s34s!#=% z@ufqZ3&bOQr1PfF;s{ zq5tM_j55)`9wDXQy?cMSU&I;rYma8M^oe%=vEu`nn-PU{54iE&0t>MlHM2Zg zHng7g^gn4P9+jBYb)5!^=D!OZe>Sb@XB0(!{ox|lfzOI0da8FhlkZtn}CN$16YVQV=@eRS5}W%cZ5?Ok@+)P zZC6*`{QP3m!9x}pkguiICi<$aq2R;bRIIgjov8>lm!Z{Ry%A_PeSb8ox|$jwqofQP z(BoTJ&w+&fd(wmSdti%)g98J;jr~9)RhYgcQyGffQbL+crl|**RaCd_7MYwaQK(Ps zbu~{-w(zY5>)|ht*MtgOlLDaK??hAf!okN)Z-am4v)2r@)Qql50MD`mRo6tXjJowJ z*@X`tKih0J0<%=wTM#PI#?tNhn-eT@j?ylJ`1>beUy`gca)%}nhLYu$ zX!jm28_tr}we1gYC^W-YEe1_RuXDrTs*RF0gs;~eCX?(eq(n?!Vz7w$ap?_q(^QD%}m$_YGT%;56L#+umX1ZX;OEXk>kC%FkH%480@E zD|)FAyYwC*PgYdeLIv;vWhFR{@rDT0!_^2<{B+*ac!}7+*NU8aUNoX}q~X=X$R7W3 zpHNyxCU1CnI0(c9VXNacK=APv&c?<@(Bc_bg*hJzOscYGxF3zOf4P?6&|0Xp`B}vG z>EKu4K#hU~BG{ak6Df=79NE(L=-0c*hwU=7tGMr-EQ@_Tw(zwLq7=?-U{-0UU}Fp1owmIW_xn`hMhdvX*d zH~u-?gJAZ&7uU(y51@6fi$e47$XS-Xb!v;MefQNR-n|D8C=*MPnx}U!;}>YOMg`7x zN1io1(MN_~eNL=V0%_rMs5WTXmf_`=cf(?*8P3kI1Cf&utMMN5Up@2G7oc;toP&dtDrcR-W{Hry=)jrIw3b&>_sG>Lq*L8~W9krwXj zhd?Vi9@Y}Z?Fmq6joAsngL$K?B#`Wx)#l8VGN~|7oV}Ld5*J5TY2XOkxBbI>pZHCc z&mLJ%G6y`AN_xzmu!^UG3=kZ8DB3LI^+dDKn1qBxYj|X2cXZvQf7te)u2Ja3Cv^jZ zZ8d|X(OnIJtLjW^KI;M9>wT26%)HB$N%sR}6p6TQpu6Pd-Y4Gyv6dpUrTplJus}SW z0kC)ffo}j%s8t2+wq;O6J%!%1A1Q6j{9{PiMQ(S;#qtk-DlYpi-1M+mTom=|9D_Ir z80)<%oBjZyUphKEdPCH6PV*IGe@dlUq_ zd!MtbT=Z^GVE^HDyyVD$(5>59>G9QDs6|sP7>i9MTYplZLMA=Ywhfz`uKQqnBBrSu zUjo|Rxy2w9WIeJ~k}rQ@V1#52D~3nHUj6E3iYtamkOdih_hc>QT!%Km4|N|iwU8sA_mppZ5^K195p>X> z&NGznRD~frzl*j1#qt@jM|!aRS(F5eLYaln2xE4KY-zZL;|oPG*Xin`IJ1*9Ph04t z$iRRnb`69Xor~(VN#xf9tcQ4tZ5d5du{emdH2O?QJCVcKqlN^`tz9n@J=<>QvW^Bu zP`GiEia@e)S;ga4#cIFV^wtyhUNS~Ts1bi|B8KXLZ0xEom&#~5Icq2$is!GACSY<1 zmy?r&JMNsve@7i3)xo%0&d{yJufmJ(Hpd16$KGC(ZtgH0x|dzn2s?v*4PyB=z1Swa_zjj$hTW|{rV9)(5EQijW;(D@JKn$ zIEuK78e$Uo`o?T{0cLLQH?@2yewQ`X)Rq^+TAHXkwexnKqoZSByf-WH#HIDPv)huI zAnwIh*CfOw6sFff;$XxI*U zeVP4?Q2$q98az_Q&Yv+XZ?v`XBV_|+N*V(?MiY{)u_ZgaSurkWY&L~R``OZhw)j*q)7)?jiQk3&-lh`gx4nN;g0W~ zZnq7OQgdj}{SJC%q~j|oTFcF;Q;yB#^Rr5l1pp{n<)tOw?)i6^5fKt%FRs2k`YmNq z5)<=-dj0b~DF8_1GV1n2Hme@L7&sO1Sfp#$J%!Z_TpNv5*^O6aWB`ZrhQ5R8nczLU z>ZR;a2O@|uFvmzVmnS##99xq%0f(c3x<%B(c=YznJAACSZUUdJFZQ7V0A%?cKe>nh za=(+J)HOP4C;X9ONs<3t2dP-+(fUZ4^$6?B!+st%4vx++a+ba02_vZ@&8+hB+e)qj z0?u+oK*rLPYh0nOxto$brey}i@cZm_65To$^PK)Zq&K(odv&EGuDL>c*5gJ`M0aoB zGBaz^QJ7}nw-VH2V#J;*upWmy@?Fib+f+?$P2ISdUMA$UqM7t!*JvJ7Mi1b+pG(}& zPxRpMaNwk-veI~CG*43mk&;69|KO~_|0S*e!#zizZd2^6`NLdYPc}_#opXmGYZ^8h z0t9$RV_qoAZT^lqEK(ESu`&Os*gdaEHN2~T5%m1!*v^oJ53V@9#a=QEXr{#mt%yE9*P*`nvY_V068$nM22W=d|Bvu?K}2O=99L9 z0#R>YANlRuSX^9Om6b`ubj8ZSwwq@;Ck_(?ut52=iw+tnQzWEUhi z(`Mq$ew7FH(3sPf8XZG5wSe`JoG;A*7eZeL9~!h@6&g0t0nf~PDLY^80f2fm zGZz=Br>AGTQ;zc2a-j(Zi<8Yc@f=+L?BVNya0PbDo6+gJx4K0MBvAd?fkEJjukT!t z$?q&v%D=FX!*;6j*NW&@<(%Plm+vJR%^hC|bjXH4?AsMy$2K~|gR_dvvlofFNV7ZG z9-GL|x8e;;96l5!#dwL_vZ?w_vzEz_gX8!Qk# zx90e-;*z6Pnxlso=%9niUWLBD^;9UL)|e4Afq7{i{n1CNC)!d{9q~s;N5Xbhs$X@C zSOo;M!O7y{Vz*z2n-GJ_B0QBp03xK4n`#n69Hr&PGw%7C9}@)Z5!>P-plbNy#S5Sm z`AAt&@!f*vk7cKY%8&vJ>Hk#B`8$(7jI9u11DRrYp~1lf=4f)C*LVRC z?RC;l#5I@d(A;)@xcV5Mj8O)?bce&fP}9Tc&6|*39x7!V*amE}^-bT^Vziir517fP zaKlGCmD-^V>i9D>IZdX|jC_wZ=6N1Gd{{PUjNxiNyYIF;8<{TRy%0=eC~jfFn#C;c zfn|DFlFRnt+y~mtByip>KPz)iG_%pD#jpJ&{)yIB0!$p`RKsL)s{eN4#kDpnd&_Zz zJ=Jx!DPWKc`{H;r)OzHH$>|O_GfKq#PHG*mT@M#=(J+c%YvrX_$kT*yI|eLqu8SN%V5cd*oPUNU}krDXqKE8^b@)7`rbui1;L ze+~{}UOl$szJVuwuvdari`_Qld=I8=$lekx72{o_yS$G91maV6?$0anHJCu)2n^x{ zsi@2?#Jan^GN&iCNzKeeAV{E(5sxBEy^dl4h5Jt;tw^wBn+(lIH#K(fu^>Opk05Sh zpU0oG*<^b5^-D~q);{yMKQ4vJjWP};$6T|k#p5kWke_x(UXN)RY3wuYi)P2vFN=Bp z6>PYK8o;D(2l%3dW^3NaxNgT7W$P*5K|5(+gb0l?aK z7;#}W@dTzxNH~B^M28p%*jM;N<%Kz4-9KMN!T~Heyo`gL@N{b`n4IEKd+tO*NHyJc z_&Brima)w%NS$kQyw9I2uF_DuEwQtval1VpFnS40k2fD3xmawT6)QSBm$P$nMjmfY zkV2s8VEFs@?{N@EPT5@Yn+;SEu^339ib+TaSz20p=}B2MZ=vU0K+~uzB5r?GTc#T~ zy%7v4G=TJ15!YZtp9UUgM(&55ocsq!}7V`hxXTS^S7*nqbFJ&o|a=bKR}V#XUdE=P1TAbFn?peH+&6Xr(a zQJ*u04xXLtj=ZZQ3-QaquO4hjo!Sr~ZD?h+76*glGQW7?@>)Yp-W%;;JTY z%Jc^Fnn<M^cx@L`8gLa{?s*aE#mX|Mw-(hGJlwkNZ zcz!VTlGbEqaBh@?nGp~;iD3Hd_ADgFU%=nrU)%cGTyi*t)4PeM(g0hicR#W=QnxB7 zzI@DLM9fZ!X!(0iPDO9;>xQ<>g83~(NgTZ6ZW>n&H+(ZLcN^337Q%hZEf?tOc4aqbzf&{0@8#es*@8P_WJa zEH-$yahy+4WCo~>w^8hGj*R5@zaeT7P8I|9V5rH-Nsadt#k}u>-dR{YZ&vALY%K(J zDlp!y2pFiWtUS25f{crM@ZEoD3w8t9x~{M5&JUgQ4)>$OY2+M2HxDeRkJobc>(+;}Lvb0R>%U37DLE9fI5kN1RJ z$>J^9`#0__uhN_f0VCSLHDjYP!;94GU8bcciho?+GUe=I+wYo6NuPE&D+142&+R=yxTIYU97sNnd9>{5>Q) z1w4j245#FL(wo42g2aRX)q`T;Zy)X%-v1_?+9D!VlX#fOgYQBecMGffXu0@H94zdz zSl}3^)wWd&ZI~9daM>Ob^p6;;lA3J(dBP^#^Y!bnwKO&cgzcEbN1>{C-Gv`qx3CsI z*u|>@%tF$IyJ{AVQ^b97WD-BaV*Td|J6m8y% z;Q#^5VNaEJ2DvoQgT{L6Y|W_KDLB$(*ngB9j}18qft$ils04qAkMqZ-3c6X_Gqxf| zfd8K>H2iiPHLdLOQH{KhvnNm!9AE(>4*6Z-(Ik_M-t&v##Ig)&d!;2_-Y z8#<{(RkhabM}OQR0QR=cylBBnBh?@s)wwoA4d#i$Y1^a?+E0R9O>2Z@Z~x*^-%K;j zuM!x)!-=?ouNZ(pBHO80@M$tBRfXqNPy}~x+q<7@xR<*cu-~QnOVM&AV{~@1AMC(n z)Yf0nt75uwMhpCyD}}!PSN}9#iGeAwci7irg1hQVUzU+^QtaCK`|A+2%oZFf3=ei(Y= zC3kmmEP}+yPJREwbmoxf#d^+P5OYks6ZLk!o0BCa!sKk-Ppcj@0Zs)Vq&j-G z_aTrf-^L?@ARCo3{9uHmM4Ki3TGnkSB6yeE1=ENUH(&x{x8^2nE}$2BTP#R#ZO+_9 zi3s3FN7d0hp;4hErg@gU+uKF4zn0{^KNA>OTH@~TlE>-WU*4%hhP}fbfABH>H2(w2 zDp%LsqJltK7o|weK96%>Dao6&pK9x8u@K`InZg4|E4~E?*76Xuu|I_+F$Dxj?TycuLTFxf{9|)V#HDw`!>~IVh9EDJXq_BPs5NJ>*-Ryy zY!L(SOBS|UF;_TOCpM=W=MOLc3Lp*a()xTF6QAueDrkep*<%7%>U>Z2F)%;hme!I5 zzxE=%CdbAlTCXEQakPZ}mX7d@D7o&YN*v{^LdA&2|+4*HZ83+xeX+?KkjG*6PgJz9NfXel1)fRzsltJq>i)Cy+e} ziIiY+4&Psp{W*794>w*IZ-Ef@UfelkRDk(h05OTSyxPBi@o_;_O5}6X!c!fKrB0Rf zwwqIz`)sed)}6z}#l##cl0~~yoP+Xu@IC!R8JYPme}`Gw4v4Wvz-iz2{sCR82x6{z zVMex7k0S`^TP7*JucIm-u*0%hfw!ypRK}+Cjx^FDZF_#p$ z+dMUHa@A;esJ#_Ncy@Z+UX);1Td_-WwB`iYpz+;9cKDz5)w5#b;+kf+AuL&yv48Af z-3G?UC;E|$_)=`)3W2TDTi}^@U4#)aSnhlBv7zwfmkCB~lL3;#wcw6;p!Jkx!TBMz z2>%Db!kSqbN;EIRvEV2a`5_*ntiipYd+M*H^-s0ApOZ61V#~j(^4kLvb#{flpoAvu zXxV}b%+|Ud`k~Ed3;}TnB2nYw%%>YP7%ToMP{m)H(IE)h896N{F-b*gJd`(xpj1;U148T2IYeG@E0h^uNi9qx;+z zMV@iUPO3!`@aXW6I=RIf1&xmyrry~cgDCNC6|x{IgQvhAWgKMkcZa(SCPPcYrkDjC zF*GjMEIgNE#*%Lci8?ZWO_i*BDbDj_Q0a{hYR-I0Wd&NwS^pN83v7kjp4^w}nN~u* zGy2@KWV+W%TB)iUezyTKI`YWU4E(nVI~}9oKKEn_*k7Fa*JS~$*03g430_fjk zT#|vkLB0_ZqnTtAcix(mEAE1Wea?XHRt0BSpLfMgRZ+ delta 11141 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 H4E_HPoYlXi From 5de62e23fdd3ffd84d42ba24b0ae4a73383482d6 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 26 Dec 2015 22:04:34 -0500 Subject: [PATCH 009/442] conflicts AHHHHHHHHHHHHHHH --- .../MetaStation/MetaStation.v41A.II.dmm | 70 ++++--- _maps/map_files/RandomZLevels/evil_santa.dmm | 195 ++++++++++++++++++ _maps/map_files/RandomZLevels/fileList.txt | 22 +- 3 files changed, 254 insertions(+), 33 deletions(-) create mode 100644 _maps/map_files/RandomZLevels/evil_santa.dmm diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index fca6de7ec3c..6f433624813 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -926,7 +926,7 @@ "arP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/fore) "arQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fore) "arR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/fore) -"arS" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) +"arS" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/Doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) "arT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/brig) "arU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor{dir = 10; icon_state = "whitered"},/area/security/brig) "arV" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor{icon_state = "whitered"},/area/security/brig) @@ -2008,9 +2008,9 @@ "aMF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engineering) "aMG" = (/obj/structure/table,/obj/machinery/door_control{id = "Singularity"; name = "Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "11"},/obj/item/weapon/storage/toolbox/electrical{pixel_y = 5},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/engineering) "aMH" = (/obj/machinery/door_control{id = "Singularity"; name = "Shutters Control"; pixel_x = -25; pixel_y = 0; req_access_txt = "11"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/engineering) -"aMI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/engine/engineering) -"aMJ" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering - Particle Accelerator"; dir = 2; network = list("Singulo","SS13")},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/engine/engineering) -"aMK" = (/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHEAST)"; icon_state = "warnplate"; dir = 5},/area/engine/engineering) +"aMI" = (/obj/machinery/power/grounding_rod{anchored = 1},/turf/simulated/floor/plating/airless,/area/space) +"aMJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"aMK" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "aML" = (/turf/simulated/floor,/area/construction) "aMM" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor,/area/construction) "aMN" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/supply) @@ -2085,7 +2085,7 @@ "aOe" = (/obj/structure/particle_accelerator/particle_emitter/right{dir = 4},/turf/simulated/floor/plating,/area/engine/engineering) "aOf" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) "aOg" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/space) -"aOh" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/space) +"aOh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "aOi" = (/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHEAST)"; icon_state = "warnplate"; dir = 5},/area/space) "aOj" = (/obj/item/weapon/crowbar,/turf/space,/area/space) "aOk" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/construction) @@ -2152,9 +2152,9 @@ "aPt" = (/obj/structure/particle_accelerator/fuel_chamber{dir = 4},/turf/simulated/floor/plating,/area/engine/engineering) "aPu" = (/obj/structure/particle_accelerator/power_box{dir = 4},/turf/simulated/floor/plating,/area/engine/engineering) "aPv" = (/obj/structure/particle_accelerator/particle_emitter/center{dir = 4},/turf/simulated/floor/plating,/area/engine/engineering) -"aPw" = (/obj/item/weapon/wirecutters,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) -"aPx" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/space) -"aPy" = (/obj/machinery/the_singularitygen{anchored = 1},/turf/simulated/floor/plating/airless,/area/space) +"aPw" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"aPx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/space) +"aPy" = (/obj/machinery/power/tesla_coil{anchored = 1},/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/space) "aPz" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/space) "aPA" = (/obj/machinery/light_construct{dir = 8},/turf/simulated/floor/plating,/area/construction) "aPB" = (/obj/item/weapon/crowbar/red,/turf/simulated/floor/plating,/area/construction) @@ -2240,7 +2240,7 @@ "aRd" = (/obj/structure/particle_accelerator/particle_emitter/left{dir = 4},/turf/simulated/floor/plating,/area/engine/engineering) "aRe" = (/obj/item/weapon/weldingtool,/turf/space,/area/space) "aRf" = (/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/space) -"aRg" = (/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/space) +"aRg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "aRh" = (/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/space) "aRi" = (/obj/machinery/pipedispenser,/turf/simulated/floor/plating,/area/construction) "aRj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -2376,7 +2376,7 @@ "aTJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/engine/engineering) "aTK" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engine/engineering) "aTL" = (/obj/structure/table,/obj/item/weapon/book/manual/engineering_hacking{pixel_x = 4; pixel_y = 5},/obj/item/weapon/book/manual/engineering_construction{pixel_x = 0; pixel_y = 3},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/book/manual/engineering_singularity_safety{pixel_x = -4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/engineering) -"aTM" = (/obj/structure/lattice,/obj/item/clothing/head/hardhat,/turf/space,/area/space) +"aTM" = (/obj/machinery/power/tesla_coil{anchored = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating/airless,/area/space) "aTN" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/shuttle/pod_1) "aTO" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/pod_1) "aTP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/construction) @@ -2514,7 +2514,7 @@ "aWr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/engine/engineering) "aWs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/engine/engineering) "aWt" = (/obj/machinery/power/rad_collector{anchored = 1},/obj/item/weapon/tank/plasma,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/engine/engineering) -"aWu" = (/obj/machinery/camera/emp_proof{c_tag = "Aft Arm - Near"; dir = 4; network = list("Singulo")},/turf/space,/area/space) +"aWu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/engine/engineering) "aWv" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) "aWw" = (/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window{dir = 2; name = "MiniSat Walkway Access"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "dark"},/area/construction/hallway{name = "\improper MiniSat Exterior"}) "aWx" = (/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/construction/hallway{name = "\improper MiniSat Exterior"}) @@ -2578,7 +2578,7 @@ "aXD" = (/turf/simulated/floor,/area/engine/engineering) "aXE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/engineering) "aXF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engine/engineering) -"aXG" = (/obj/item/weapon/screwdriver,/obj/structure/lattice,/turf/space,/area/space) +"aXG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/engine/engineering) "aXH" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) "aXI" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/construction/hallway{name = "\improper MiniSat Exterior"}) "aXJ" = (/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) @@ -3656,7 +3656,7 @@ "bsp" = (/turf/simulated/wall,/area/crew_quarters/bar) "bsq" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/starboard) "bsr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/maintenance/starboard) -"bss" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bss" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering - Particle Accelerator"; dir = 2; network = list("Singulo","SS13")},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/engine/engineering) "bst" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboard) "bsu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/starboard) "bsv" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/starboard) @@ -8276,6 +8276,7 @@ "ddh" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 10},/obj/item/device/radio/electropack,/turf/simulated/floor,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "ddi" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/shuttle/floor,/area/shuttle/escape) "ddj" = (/obj/structure/table,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ddk" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHEAST)"; icon_state = "warnplate"; dir = 5},/area/engine/engineering) "ddl" = (/obj/machinery/computer/communications,/obj/machinery/status_display{pixel_y = -32},/turf/simulated/shuttle/floor,/area/shuttle/escape) "ddm" = (/obj/machinery/computer/atmos_alert,/turf/simulated/shuttle/floor,/area/shuttle/escape) "ddn" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/turf/simulated/shuttle/floor,/area/shuttle/escape) @@ -8308,7 +8309,20 @@ "ddO" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless,/area/space) "ddP" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/space) "ddQ" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_s"; name = "south of station"; width = 18},/turf/space,/area/space) - +"ddR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) +"ddS" = (/obj/machinery/the_singularitygen{anchored = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/space) +"ddT" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/engine/engineering) +"ddU" = (/obj/item/weapon/wirecutters,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) +"ddV" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"ddW" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/space) +"ddX" = (/obj/machinery/the_singularitygen/tesla{anchored = 1},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/space) +"ddY" = (/obj/machinery/camera/emp_proof{c_tag = "Aft Arm - Near"; dir = 4; network = list("Singulo")},/turf/simulated/floor/plating/airless,/area/space) +"ddZ" = (/obj/machinery/power/tesla_coil{anchored = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/space) +"dea" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/space) +"deb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/space) +"dec" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/space) +"ded" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8404,19 +8418,19 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqarAarAarAarAarAarAarAaCnarAabqabqabqabqapfaoXazSarIakzaaaaCoaCpaCqaCpaCoaCraCraCraCsaCsaCsaCsaCtaCsaCsaCuaCuaCuaCuaCvaCuaCwajgabqaBbaCxaCyaCzaCAaCBaBbaaaayMaCCaCCaCDayMaaaaaaaCEaCFaCGaCHakDaCFaCIaCHakDaCFaCJaCHakDaCKamzaCLakDamzaCMaCNamzamzaCOaCOaCPaCQaCRaCOaCOaCSakDakDakDakDakDatLaBIaCTaCUaCVavravravravravraCWaCXaCYazlazmavvavvavvaoGaCZasIarrasJasIaDaasJaxhaxhaxhaxhaxhaDbaDcaDdaDeaDfaDgaDfaDhaDiaDjaDiaDkaCjaDlaCjaDmaDiaDjaDiaCmaDnaDoabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqabqabqarAarAarAarAataarAarAarAaDparAarAarAarAabqaaaabqakzayBazSaqwapfaaaaASaDqaDraDqaASaCraDsaDtaCsaDuaDvaDwaDxaDyaCsaDzaDAaDBaDCaDDaCuaCwajgaaaaBbaDEaDFaDGaDHaDIaBbaaaazTaDJaCCaDKayMaDLaDLacAaDMaDNaDOakDaDPaDNaDOakDaDQaDNaDOakDaDRaDSaDTakDaDUaDVaDWaDXaDYaCOaDZaEaaEbaEcaEdaEeaCSaEfaEgaEgaEhaEgaEiaBIaEjaEkaElaBIaEmaEnaEmavvaEoaEpaEqaEraEsaEtaEuaEvaBWaEwaxhaxhaxhaxhaxhaxhaxhaExaExaEyaEzaEAaEBaECaEDaCgaCgaCgabqabqaEEaEFaDiaDiaDiaDiaDiaEGaEEaDiaEHaCgaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqarAarAarAarAarAarAarAabqarAabqabqarAarAabqabqapfapfauyazSapfapfaaaaCoaDqaDqaDqaEIaEJaEKaEKaELaEMaENaEOaEPaEQaERaESaETaEUaEVaEWaCuaCwajgaaaaBbaEXaEYaEZaFaaFbaBbaaaayMaFcaCCaCCaFdaFeaFfacAaFgaDNaFhakDaFgaDNaFiakDaFgaDNaFjakDaFkaFlaFmakDaFnaFoaFpaFqaFraCOaFsaFtaFuaFvaFwaFxaCSaFyaFzaFzaFzaFAaFBaBIaFCaFDaFEaBIaFFaFGaFGaFHaFIaFJaFKavvavvavvavvavvaoGaFLaxhaFMaFNaFOaFPaFQaFRaFSaFTaFTaFTaFTaFUaFVaFWaFXaFYaCgaFZabqabqaaaaaaaaaabqabqaaaaaaabqaaaarAaDiaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaarAarAarAarAarAabqabqabqarAarAarAabeaaaabqabqabqapfaGaaoXaoXaGbakzaaaaaaaASaDraDraDraASaCraGcaGdaGeaEMaEKaGfaGgaGhaCsaGiaGjaGkaGlaGmaCuaCwajgabqaBbaGnaGoaGpaGqaGraBbaaaayMaGsaGsaGsayMaDLaGtacAaGuaGvaGwamxaGuaGvaGwamxaGuaGvaGwamxaGxaGyaGzamxamxaCMaGAamxaGBaCOaGCaGDaGEaGFaGGaGHaCSaGIajgajgajgaGJajgaBIaGKaGLaBIaBIaGMaGNaGOaGPaGQaGRaGSazlaGTaGUawWavvaGVaGWaxhaGXaGYaGZaGZaHaaHbaDcaHcaHdaHeaHeaHeaHfaHgaHhaHiaHjaaaaaaabqaaaaaaaaaabqaaaaaaaaaabqaaaaaaabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqaHkaHlaHkabfaaaabqaaaabqapfaHmaHnanEazSapfapfaaaaCoaHoaHpaHqaCoaCraCraCraCsaHraEKaHsaGgaHtaCsaHuaHvaHwaHxaHyaCuaCwajgaaaaBbaHzaHAaHBaHCaBbaBbaaaaHDaHEaHEaHEaHFaHGaHHaHGaHIaHJaHIaHKaHIaHJaHIaHLaHIaHJaHMaHNaHOaHPaHQaHRaHSaHTaHUamxazeaCSaHVaHWaHXaHYaHZaIaaCSaIbaBIaIcaIdaIeaIfaIfaIgaIhaIiaIjaIkaIlaImaInaIoaIpayeaIqaIraIsaItavvaucaGWaxhaIuaIvaIwaIxaIyaIzaIAaIBaICaIDaIDaIDaIEaIFaHhaHiaHjaaaabqabqabqabqabqabqabqabqabqabqabqaaaabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaabqabqaaaaHkaIGaHkabqabqabqabqabqapfaIHapdapdaIIaIJapfaaaaIKaARaILaARaIMabqabqabqaCraINaIOaIPaIQaIRaCsaISaITaIUaIVaIWaCuaCwajgaaaabqaaaaIXaIYaIZaaaabqaaaaHGaDLaDLaDLaHGaHGaJaaJbaJcaJdaJeaJfaJgaJhaJhaJiaJhaJjaJgaJkaJlaJmaJnaJoaJpaJqaJramxazeaCSaCSaJsaJtaCSaJuaCSaCSaGIaBIaBIaBIaJvaJwaJxaJyaJzaJAaJBaJCaJDaJEaJFaJFaJGaJHavvavvavvavvavvaubaGWaxhaJIaJJaJKaJLaJMaJNaJOaJPaJQaJRaJSaJTaJUaJVaHhaHiaHjaHjabqaJWaaaaaaaaaaaaaJWaaaaaaaJWabqabqabqaCgaJXabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaabqaaaaHkaHlaHkaHkaJYaJYaJYaHkaHkaHkaHkaHkaJZaKaapfaaaaaaaaaaaaaaaaaaaaaaaaabqaCraKbaKcaKdaKeaKfaCsaKgaKhaCuaCuaCuaCuaKiajgaKjaKkaKlaKmaKnaKoaKpaKqaKjaHGaKraKsaKsaKtaKuaKvaKwaKxaKyaKzaKAaKBaKCaKDaKEaKCaKFaKGaKHaKIaKJaKKaKLaKMaKNaKOamxazeaKPaCSaKQaKRaCSaKSaKTaKUaKVaBIaKWaKXaKYaKZaBIaLaaLbaLcaBIaLdaLeaLfaLgaLfaLhaLiaLjaLkaLlaLmavvasJaGWaxhaLnaLoaLpaLqaLraFRaLsaLtaJQaLuaCgaCgaLvaLwaCgaHjaHjaHjabqaaaaaaaaaaaaaaaaLxaaaaaaaaaabqabqabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabqaHkaHkaLyaLzaLAaLBaLBaLCaLDaLEaLFaLGaHkaHkazSapfaaaaLHaLIaLIaLIaLIaLIaLJabqaCsaCsaCsaLKaLLaCsaCsaLMaLNaLOaLPaLQaLRaLSaLTaLUaLVaLWaLXaLYaLWaLZaMaaMbaHGaMcaMdaMeaMfaMfaMgaMfaMfaMfaMfaMfaMfaMfaMfaMgaMfaMhaMiaMjaMkaMkaMkaMlaMlaMlaMlaMlaMkaMmaMkaMnaMnaMnaMnaMoaMnaGIaBIaBIaBIaMpaMqaBIaMraBIaMsaBIaMtaMuaMvazlaMwaMxaMyazlaMzaMAaMBavvaMCaMDaxhaCgaCgaCgaCgaCgaFRaMEaMFaJQaMGaCgaMHaMIaEEaMJaEEaMKaHjabqaaaaaaabqabqabqabqabqaaaaaaabqabqarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaHkaMLaMLaMLaLBaLBaLBaLBaLBaLBaMLaMLaMMaHkazSakzaaaaMNaMOaMOaMOaMOaMOaMNabqabqaMPaMQaMRaMSaMTaMUaMVaMWaMXaMYaMZaNaaNbaNcaLRaNdaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaNqaNraNsaNtaMkaNuaNvaNwaNxaNyaNzaNAaNBaNCaMkaNDaNEaNFaNGaNHaMnaNIaBIaNJaNKaJwaMqaBIaNLaBIaNMaBIaNNaNOaNPaNQaNQaNQaNQaNQaNQaNQaNQaNQaoGaNRaxhaNSaNTaNUaNVaCgaNWaIvaMFaNXaNYaNZaOaaObaOcaOdaOeaOfaHjabqaJWabqabqaOgaOhaOiabqaOjaaaabqaaaataaCgaDoabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaHkaOkaLBaLBaLBaLBaLBaLBaLBaLBaMLaMLaMLaOlaOmapfaaaaMNaOnaMOaMOaMOaMOaMNaOoaMPaMPaOpaOqaOraOraOsaOtaOuaOvaOwaOxapfaOyapfapfapfapfaOzaOAaOBaOCaODaOEaOAaOAaOAaOAaOFaaaaaaaOGaOGaOGaOGaOGaOGaOGaaaaaaaMfaOHaOIaOJaOKaOLaNAaOMaONaOOaOPaOQaORaOSaMkaOTaOUaOVaOWaOXaMnaOYaBIaBIaBIaOZaOZaBIaBIaBIaBIaBIaPaaPbaPcaNQaPdaPeaPfaPgaPhaPiaPjaNQaPkaGWaxhaNTaNTaPlaOdaPmaGYaPnaPoaPpaPqaCgaPraPsaPtaPuaPvaPwaHjabqaaaaaaabqaPxaPyaPzabqaaaaaaabqabqarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabqaHkaPAaLBaLBaLBaLBaPBaLBaPCaLBaLBaMLaPDaHkaGbapfaaaaMNaMOaMOaMOaMOaMOaPEaPFaPGaPFaPHaPIaPJaPKaPLaPMaPNaPOaPPaPQaPRaPSaPTaPTaPUaPTaPVaOAaPWaPXaPYaPZaQaaQbaQcaQdaQeaQfaQgaQgaQhaQiaQjaQkaQlaQmaQmaQnaQoaQpaKGaNtaMkaQqaNAaQraNAaQsaNAaQtaNAaNAaMkaQuaQvaOVaQwaQxaMnaQyaQzaQAaQBaQCaQDaQEaQFaQGaQHaQIaQJaQKaQLaNQaQMaQNaQNaQNaQOaQPaQQaNQaQRaGWaxhaQSaQSaQTaOdaPmaJJaQUaQVaQWaQXaQYaQZaRaaRbaRcaRdaOfaHjabqaaaaReabqaRfaRgaRhabqabqaJWabqabqabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJYaLBaLBaLBaLBaLBaLBaLBaLBaLBaLBaRiaHkaHkaRjapfabqaMNaMOaMOaMOaMOaMOaRkaRlaRmaRlaRnaPIaRoaRoaRpaRoaOuaRqaRraRsapfapfapfapfapfapfazSaOAaRtaRuaRvaRwaRxaRxaRxaRyaOFaaaaOGaRzaRAaRAaRAaRAaRAaRBaOGaaaaMfaRCaMiaMjaMkaRDaREaRFaNAaRGaNAaRHaRIaNAaRJaRKaRLaRMaRNaROaMnaRPaRQaRRaRRaRRaRSaRTaRTaRUaRUaRVaRWaRXaRYaRZaSaaSbaSbaSbaScaSdaSeaNQaSfaGWaxhaQSaSgaShaSiaCgaSjaIvaSkaJQaSlaCgaSmaSnaSoaSoaSoaSpaHjabqaaaaaaabqabqabqabqabqaaaaaaabqaaaabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSqaSraSsaaaaJYaLBaLBaLBaLBaLyaLBaStaSuaSuaSvaSwaHkaqBazSapfabqaMNaMOaMOaMOaMOaSxaMNaOoaMPaMPaSyaPIaSzaSAaSBaSCaSDaSEaSFaSGaSHaSIaSJaSKaSLapfaSMaOAaSNaRuaSOaSPaSQaSQaSRaSSaOFaaaaSTaSUaRAaSVaSWaSXaRAaSYaSTaaaaMfaMhaMiaMjaMkaSZaTaaTbaTcaTdaTcaTeaTfaTgaMkaThaTiaTjaTkaTlaMnaTmaTnaToaTpaTqaTraTsaTtaTuaTvaTwaTxaTyaTzaTAaTBaTCaTDaTEaTFaTGaTHaNQasIaGWaxhaCgaCgaCgaCgaCgaFRaTIaTJaTKaTLaCgaCgaLvaLwaCgaHjaHjaHjaTMaaaaaaaaaabqaaaaaaaaaaaaaaaabqaaaabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaTNaTOaTNacJaHkaLBaLBaLBaLBaLBaLBaLBaLBaLBaTPaTQaHkauAaTRapfaaaaMNaMOaMOaMOaMOaMOaTSaRlaTTaRlaRnaPIaRoaRoaRpaRoaOuaOvaTUaTVaTWaTXaTYaTZaUaapfaUbaUcaUdaRuaRuaUeaUfaRuaUgaUhaOFaaaaUiaUjaUkaUlaUmaUlaUkaUnaUoaaaaMfaMhaUpaUqaMkaUraUraUraUraUsaUraUraUtaUraMkaMnaUuaUvaUwaMnaMnaUxaTnaTpaTqaUyaUzaTnaToaTqaTqaTpaUAaUBaUCaUDaUEaSbaSbaUFaScaUGaUHaNQaUIaUJaxhaUKaULaUMaUNaUOaUPaIvaSkaJQaUQaJSaURaUSaUTaHhaHiaHjaHjabqaJWaaaaaaaJWaaaaaaaaaaaaaJWabqabqabqaCgaJXabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaUUaUUaUUaUUaUVaUUaUUaUUaUUaUVaUUaUUaUUaUUaUVaUUaUUaUUaUUaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdaTNaUWaTNafdaHkaPAaMLaLBaLBaLBaLBaLBaUXaLBaUYaUZaHkaVaaAWapfaaaaMNaMOaMOaMOaMOaMOaVbaVcaVdaVcaVeaPIaRoaVfaVgaVhaViaVjaOuaVkaVlaVmaVnaVoaVpapfaVqaOAaVraRuaRuaVsaVtaVuaUgaVvaOFaaaaOGaVwaVxaUkaVyaRAaVzaVAaOGaaaaMfaVBaOIaOJaVCaVDaVEaVEaVEaNCaVEaVEaVFaVGaMkaVHaVIaVJaVKaVLaVMaVKaVNaVOaVOaVPaVQaVRaVSaVTaVUaVVaVSaVWaVXaNQaVYaVZaWaaWbaWcaWdaWeaNQasJaWfaxhaWgaWhaWiaWjaWkaWlaWmaWnaWoaWpaWqaWqaWraWsaHhaWtaHjaWuabqabqabqabqabqabqabqabqabqabqabqaaaabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaWvaWwaWxaWxaWxaWyaWxaWxaWxaWxaWzaWxaWxaWxaWxaWAaWxaWxaWxaWBaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaWDaWEaWFaWGaWDaHkaLCaMLaWHaWIaWJaLBaLBaLBaLBaUYaWKaHkazSapdakzaaaaMNaOnaMOaMOaMOaMOaMNaOoaMPaMPaWLaPIaRoaRoaRpaRoaOuaVjaWMaWNaVlaWOaWPaWQaWRapfazMaOAaWSaWTaWTaWUaWVaRuaUgaWWaOFabqaOGaOGaOGaWXaWYaWZaOGaOGaOGabqaMfaOHaXaaMjaXbaXcaVEaVEaVEaXdaVEaVEaXeaNCaXbaQCaXfaXgaXhaToaXiaToaTnaTpaToaXjaToaXkaTpaTqaToaTqaTpaXlaXmaNQaXnaXoaXpaXqaXraPiaQQaNQaXsaGWaxhaXtaXuaXvaXwaXxaXyaXzaXAaXBaXCaXDaXDaXEaXFaHhaHiaHjaaaaaaabqaaaaaaaaaaaaabqaaaaaaaXGaaaaaaabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaXHaXIaXJaXKaXKaXLaXKaXKaXKaXKaXMaXKaXKaXKaXKaXLaXKaXKaXNaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaarAarAarAarAarAabqabqabqarAarAarAabeaaaabqabqabqapfaGaaoXaoXaGbakzaaaaaaaASaDraDraDraASaCraGcaGdaGeaEMaEKaGfaGgaGhaCsaGiaGjaGkaGlaGmaCuaCwajgabqaBbaGnaGoaGpaGqaGraBbaaaayMaGsaGsaGsayMaDLaGtacAaGuaGvaGwamxaGuaGvaGwamxaGuaGvaGwamxaGxaGyaGzamxamxaCMaGAamxaGBaCOaGCaGDaGEaGFaGGaGHaCSaGIajgajgajgaGJajgaBIaGKaGLaBIaBIaGMaGNaGOaGPaGQaGRaGSazlaGTaGUawWavvaGVaGWaxhaGXaGYaGZaGZaHaaHbaDcaHcaHdaHeaHeaHeaHfaHgaHhaHiaHjaMIaMKaMJaOhaMJaMJaOhaMJaMJaOhaMJaMJaPwarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqaHkaHlaHkabfaaaabqaaaabqapfaHmaHnanEazSapfapfaaaaCoaHoaHpaHqaCoaCraCraCraCsaHraEKaHsaGgaHtaCsaHuaHvaHwaHxaHyaCuaCwajgaaaaBbaHzaHAaHBaHCaBbaBbaaaaHDaHEaHEaHEaHFaHGaHHaHGaHIaHJaHIaHKaHIaHJaHIaHLaHIaHJaHMaHNaHOaHPaHQaHRaHSaHTaHUamxazeaCSaHVaHWaHXaHYaHZaIaaCSaIbaBIaIcaIdaIeaIfaIfaIgaIhaIiaIjaIkaIlaImaInaIoaIpayeaIqaIraIsaItavvaucaGWaxhaIuaIvaIwaIxaIyaIzaIAaIBaICaIDaIDaIDaIEaIFaHhaHiaHjarAaPxarAaPyarAarAaPyarAarAaPyarAarAaPxarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaabqabqaaaaHkaIGaHkabqabqabqabqabqapfaIHapdapdaIIaIJapfaaaaIKaARaILaARaIMabqabqabqaCraINaIOaIPaIQaIRaCsaISaITaIUaIVaIWaCuaCwajgaaaabqaaaaIXaIYaIZaaaabqaaaaHGaDLaDLaDLaHGaHGaJaaJbaJcaJdaJeaJfaJgaJhaJhaJiaJhaJjaJgaJkaJlaJmaJnaJoaJpaJqaJramxazeaCSaCSaJsaJtaCSaJuaCSaCSaGIaBIaBIaBIaJvaJwaJxaJyaJzaJAaJBaJCaJDaJEaJFaJFaJGaJHavvavvavvavvavvaubaGWaxhaJIaJJaJKaJLaJMaJNaJOaJPaJQaJRaJSaJTaJUaJVaHhaHiaHjaHjaPxaJWaaaaaaaaaaaaaJWaaaaaaaJWarAaPxabqaCgaJXabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaabqaaaaHkaHlaHkaHkaJYaJYaJYaHkaHkaHkaHkaHkaJZaKaapfaaaaaaaaaaaaaaaaaaaaaaaaabqaCraKbaKcaKdaKeaKfaCsaKgaKhaCuaCuaCuaCuaKiajgaKjaKkaKlaKmaKnaKoaKpaKqaKjaHGaKraKsaKsaKtaKuaKvaKwaKxaKyaKzaKAaKBaKCaKDaKEaKCaKFaKGaKHaKIaKJaKKaKLaKMaKNaKOamxazeaKPaCSaKQaKRaCSaKSaKTaKUaKVaBIaKWaKXaKYaKZaBIaLaaLbaLcaBIaLdaLeaLfaLgaLfaLhaLiaLjaLkaLlaLmavvasJaGWaxhaLnaLoaLpaLqaLraFRaLsaLtaJQaLuaCgaCgaLvaLwaCgaHjaHjaHjaPxaaaaaaaaaaaaaaaaLxaaaaaaaaaaTMaRgabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabqaHkaHkaLyaLzaLAaLBaLBaLCaLDaLEaLFaLGaHkaHkazSapfaaaaLHaLIaLIaLIaLIaLIaLJabqaCsaCsaCsaLKaLLaCsaCsaLMaLNaLOaLPaLQaLRaLSaLTaLUaLVaLWaLXaLYaLWaLZaMaaMbaHGaMcaMdaMeaMfaMfaMgaMfaMfaMfaMfaMfaMfaMfaMfaMgaMfaMhaMiaMjaMkaMkaMkaMlaMlaMlaMlaMlaMkaMmaMkaMnaMnaMnaMnaMoaMnaGIaBIaBIaBIaMpaMqaBIaMraBIaMsaBIaMtaMuaMvazlaMwaMxaMyazlaMzaMAaMBavvaMCaMDaxhaCgaCgaCgaCgaCgaFRaMEaMFaJQaMGaCgaMHaXGaWubssaWuddkaHjaPxaaaaaaabqabqabqabqabqaaaaaaarAaPxarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaHkaMLaMLaMLaLBaLBaLBaLBaLBaLBaMLaMLaMMaHkazSakzaaaaMNaMOaMOaMOaMOaMOaMNabqabqaMPaMQaMRaMSaMTaMUaMVaMWaMXaMYaMZaNaaNbaNcaLRaNdaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaNqaNraNsaNtaMkaNuaNvaNwaNxaNyaNzaNAaNBaNCaMkaNDaNEaNFaNGaNHaMnaNIaBIaNJaNKaJwaMqaBIaNLaBIaNMaBIaNNaNOaNPaNQaNQaNQaNQaNQaNQaNQaNQaNQaoGaNRaxhaNSaNTaNUaNVaCgaNWaIvaMFaNXaNYaNZaOaaObaOcaOdaOeddRaHjaPxaJWabqabqaOgddSaOiabqaOjaaaarAaPxataaCgaDoabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaHkaOkaLBaLBaLBaLBaLBaLBaLBaLBaMLaMLaMLaOlaOmapfaaaaMNaOnaMOaMOaMOaMOaMNaOoaMPaMPaOpaOqaOraOraOsaOtaOuaOvaOwaOxapfaOyapfapfapfapfaOzaOAaOBaOCaODaOEaOAaOAaOAaOAaOFaaaaaaaOGaOGaOGaOGaOGaOGaOGaaaaaaaMfaOHaOIaOJaOKaOLaNAaOMaONaOOaOPaOQaORaOSaMkaOTaOUaOVaOWaOXaMnaOYaBIaBIaBIaOZaOZaBIaBIaBIaBIaBIaPaaPbaPcaNQaPdaPeaPfaPgaPhaPiaPjaNQaPkaGWaxhaNTaNTaPlaOdaPmaGYaPnaPoaPpaPqaCgaPraPsaPtaPuaPvddUddTddVaaaaaaabqddWcspaPzabqaaaaaaaTMaRgarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabqaHkaPAaLBaLBaLBaLBaPBaLBaPCaLBaLBaMLaPDaHkaGbapfaaaaMNaMOaMOaMOaMOaMOaPEaPFaPGaPFaPHaPIaPJaPKaPLaPMaPNaPOaPPaPQaPRaPSaPTaPTaPUaPTaPVaOAaPWaPXaPYaPZaQaaQbaQcaQdaQeaQfaQgaQgaQhaQiaQjaQkaQlaQmaQmaQnaQoaQpaKGaNtaMkaQqaNAaQraNAaQsaNAaQtaNAaNAaMkaQuaQvaOVaQwaQxaMnaQyaQzaQAaQBaQCaQDaQEaQFaQGaQHaQIaQJaQKaQLaNQaQMaQNaQNaQNaQOaQPaQQaNQaQRaGWaxhaQSaQSaQTaOdaPmaJJaQUaQVaQWaQXaQYaQZaRaaRbaRcaRdaOfaHjaPxaaaaReabqaRfddXaRhabqabqaJWarAaPxabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJYaLBaLBaLBaLBaLBaLBaLBaLBaLBaLBaRiaHkaHkaRjapfabqaMNaMOaMOaMOaMOaMOaRkaRlaRmaRlaRnaPIaRoaRoaRpaRoaOuaRqaRraRsapfapfapfapfapfapfazSaOAaRtaRuaRvaRwaRxaRxaRxaRyaOFaaaaOGaRzaRAaRAaRAaRAaRAaRBaOGaaaaMfaRCaMiaMjaMkaRDaREaRFaNAaRGaNAaRHaRIaNAaRJaRKaRLaRMaRNaROaMnaRPaRQaRRaRRaRRaRSaRTaRTaRUaRUaRVaRWaRXaRYaRZaSaaSbaSbaSbaScaSdaSeaNQaSfaGWaxhaQSaSgaShaSiaCgaSjaIvaSkaJQaSlaCgaSmaSnaSoaSoaSoaSpaHjaPxaaaaaaabqabqabqabqabqaaaaaaarAaPxabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSqaSraSsaaaaJYaLBaLBaLBaLBaLyaLBaStaSuaSuaSvaSwaHkaqBazSapfabqaMNaMOaMOaMOaMOaSxaMNaOoaMPaMPaSyaPIaSzaSAaSBaSCaSDaSEaSFaSGaSHaSIaSJaSKaSLapfaSMaOAaSNaRuaSOaSPaSQaSQaSRaSSaOFaaaaSTaSUaRAaSVaSWaSXaRAaSYaSTaaaaMfaMhaMiaMjaMkaSZaTaaTbaTcaTdaTcaTeaTfaTgaMkaThaTiaTjaTkaTlaMnaTmaTnaToaTpaTqaTraTsaTtaTuaTvaTwaTxaTyaTzaTAaTBaTCaTDaTEaTFaTGaTHaNQasIaGWaxhaCgaCgaCgaCgaCgaFRaTIaTJaTKaTLaCgaCgaLvaLwaCgaHjaHjaHjaPxaaaaaaaaaabqaaaaaaaaaaaaaaaaTMaRgabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaTNaTOaTNacJaHkaLBaLBaLBaLBaLBaLBaLBaLBaLBaTPaTQaHkauAaTRapfaaaaMNaMOaMOaMOaMOaMOaTSaRlaTTaRlaRnaPIaRoaRoaRpaRoaOuaOvaTUaTVaTWaTXaTYaTZaUaapfaUbaUcaUdaRuaRuaUeaUfaRuaUgaUhaOFaaaaUiaUjaUkaUlaUmaUlaUkaUnaUoaaaaMfaMhaUpaUqaMkaUraUraUraUraUsaUraUraUtaUraMkaMnaUuaUvaUwaMnaMnaUxaTnaTpaTqaUyaUzaTnaToaTqaTqaTpaUAaUBaUCaUDaUEaSbaSbaUFaScaUGaUHaNQaUIaUJaxhaUKaULaUMaUNaUOaUPaIvaSkaJQaUQaJSaURaUSaUTaHhaHiaHjaHjaPxaJWaaaaaaaJWaaaaaaaaaaaaaJWarAaPxabqaCgaJXabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaUUaUUaUUaUUaUVaUUaUUaUUaUUaUVaUUaUUaUUaUUaUVaUUaUUaUUaUUaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdaTNaUWaTNafdaHkaPAaMLaLBaLBaLBaLBaLBaUXaLBaUYaUZaHkaVaaAWapfaaaaMNaMOaMOaMOaMOaMOaVbaVcaVdaVcaVeaPIaRoaVfaVgaVhaViaVjaOuaVkaVlaVmaVnaVoaVpapfaVqaOAaVraRuaRuaVsaVtaVuaUgaVvaOFaaaaOGaVwaVxaUkaVyaRAaVzaVAaOGaaaaMfaVBaOIaOJaVCaVDaVEaVEaVEaNCaVEaVEaVFaVGaMkaVHaVIaVJaVKaVLaVMaVKaVNaVOaVOaVPaVQaVRaVSaVTaVUaVVaVSaVWaVXaNQaVYaVZaWaaWbaWcaWdaWeaNQasJaWfaxhaWgaWhaWiaWjaWkaWlaWmaWnaWoaWpaWqaWqaWraWsaHhaWtaHjddYaPxarAddZarAarAddZarAarAddZarAarAaPxabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaWvaWwaWxaWxaWxaWyaWxaWxaWxaWxaWzaWxaWxaWxaWxaWAaWxaWxaWxaWBaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaWDaWEaWFaWGaWDaHkaLCaMLaWHaWIaWJaLBaLBaLBaLBaUYaWKaHkazSapdakzaaaaMNaOnaMOaMOaMOaMOaMNaOoaMPaMPaWLaPIaRoaRoaRpaRoaOuaVjaWMaWNaVlaWOaWPaWQaWRapfazMaOAaWSaWTaWTaWUaWVaRuaUgaWWaOFabqaOGaOGaOGaWXaWYaWZaOGaOGaOGabqaMfaOHaXaaMjaXbaXcaVEaVEaVEaXdaVEaVEaXeaNCaXbaQCaXfaXgaXhaToaXiaToaTnaTpaToaXjaToaXkaTpaTqaToaTqaTpaXlaXmaNQaXnaXoaXpaXqaXraPiaQQaNQaXsaGWaxhaXtaXuaXvaXwaXxaXyaXzaXAaXBaXCaXDaXDaXEaXFaHhaHiaHjaMIdeaaMJdebaMJaMJdebaMJaMJdebaMJaMJdecabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaXHaXIaXJaXKaXKaXLaXKaXKaXKaXKaXMaXKaXKaXKaXKaXLaXKaXKaXNaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaWDaXPaXQaXRaXSaHkaXTaMLaXUaXVaXWaMLaMLaMLaXXaXYaXZaHkaYaaYbapfabqaYcaYdaMOaMOaMOaYeaYfabqabqaMPaWLaYgaPJaPKaYhaYiaYjaYkaYlaYmaYnaYnaYnaYnaYnapfaYoaYpaYqaYraYraYsaYtaYuaYvaYwaYxaaaaaaaaaaOGaOGaYyaOGaOGaaaaaaaaaaNqaNraYzaMjaYAaYBaYCaYDaYEaNCaNCaYFaYGaNCaYAaQCaYHaYIaYJaYKaYLaYKaYMaYNaYOaYPaYKaYKaYKaYKaYKaYKaYQaYRaYSaNQaNQaNQaNQaYTaNQaNQaNQaNQaoGaGWaxhaYUaYVaYVaUNaYWaYXaYYaYZaZaaZbaZcaZdaZeaZfaFXaZgaCgaaaabqabqaaaaaaaaaaaaabqaaaaaaabqabqarAaDiaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaXHaXIaXOaaaaaaaXLaaaaaaaaaaaaaXMaaaaaaaaaaaaaXLaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaWDaWDaZiaZjaWDaWDaWDaZkaWDaWDaZlaZmaWDaWDaWDaZnaWDaWDaZoapfapfabqaZpaZqaZraZraZraZqaZsabqabqaZtaZuaPIaRoaRoaRpaRoaOuaZvaOuaZwaYnaZxaZyaZzaZAapfazSaOAaZBaZCaZDaZEaZFaZGaZHaZIaOFaZJaZKaZJaZLaZMaZNaZOaZLaZJaZKaZJaMfaZPaZQaZRaZSaMkaMkaMkaMkaZTaZUaZVaNCaZWaMkaQCaZXaTraZYaZZaZZaZZaZZaoGaoGaoGbaababbacbadbaebafaZZbagbagaoGbahazAazybaiazybajazybakazybalaxhbambambambambanbaobapbaqbarbasbataIvbaubavaCgaCgaCgabqabqbawbaxaDiaDiaDiaDiaDiaDibawaDibayaCgaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaXHaXIaXOaaaaaaaXLaXLaXLaXLaXLaXMaXLaXLaXLaXLaXLaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaabazbaAbaBbaCbaDbaEbaBbaFbaGbaHbaGbaIbaJbaGbaKbaLbaMbaNbaOapfaaaaaabaPbaQbaQbaQbaRaaaabqaZtbaSaWLaPIaRoaRobaTbaUaOubaVbaWbaXbaYbaZbbabbbbbcapfazSaOAaOAaOAaOBaOBbbdaOFbbebbfaOFbbgbbhbbiaZLbbjbbkbblaZLbbmbbnbbobbpbbqbbrbbsbbtbbubbvbbwaMkaMkaYAbbxaYAaMkaMkaXibbybbzaXibbAbbBbbCbbDbbEbbFaoGaoGaoGaoGbbGaoGaoGaoGaoGaoGaoGaGWasIasJbbHbbHbbHbbHbbHbbHbbHbambbIbbJbbKbambbLbbMbambbNbbOaFRaFRbbPbbQbbRaDfbbSaDfbbTaDibbUaDiaCiaCjbbVaCjaClaDibbUaDiaCmaDnaDoabqabqabfabfabeabqabeabfabfabeabeabfabfabfabeabqabqabqabqabqarBaWvbbWbbXbbXbbXbbXbbXbbYbbYbbYbbZbbYbbYbbYbbXbcabbXbbXbbXbcbaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8429,7 +8443,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablOblPblQblRbkbblSblTblSblTblSblTblSbkbblUblVbccbgVblWbgXblXblYblZbmabmbbmcbgXbmdbmebmfbmgbmhbmibmjbmkbmlbmmbmnbmobmpbmqbmrbmsbmtbmubmvbmwbmxbmybmzbmAbiVbfIbkJbhqbmBbmCbmDbmEbhqbmFbmGbjeabqabqbmHbmIbmJbmKbmLbmMbmNbmObmPbmQbmRbmSbmTabqabqbhwbmUbmVbmWbmXbmYbmZbnabhwbhybnbbncbndbnebnfbnebngbnhbnibnebnebnebnjbnebnkbnlbnmbnnbnebnebnobnkbngbnjbnpbnqbnobnrbnsbntbnubnvbnwbnxbnybnzbnAbnBbnCbnDbnEbnFbnFbnGbnHbnIbnJaaaaaaaaaabqaaaaaaaaaaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqaefblDblEbnKblEbnLaXOaaaaaaaaaaXLbnMbnNbdJbnObnPbnQbnRbnSbnTbdIbdPaXLaXLaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiqbkbbkbbipbkbblSblTblSbnVblSblTblSbkbblUblVbccbnWbnXbnYbnZboabobbocbobbiubiubodboebhcbfwbofbogbohboibojbokbolbfwbombonbojbkCboobfwbopboqborbosbotbiUbkIbfIbkJbhqboubovbowboxbhqboybozbjebkWboAbkWboBboCboDboEboDboFboDboEboDboGboHbkWboAbkWbhwboIboIboIboJboKboLboMbhwboNboOboPboQboRboSboRboTboRboUboRboRboRboVboRboWboXboYboZboRboRbpabpbbpcboVbpdboVbpebpfbpgbntbphbpibpibpjbpkbpibpibplbpmbpnbpobnFbnFbppblBblBbpqaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbpraaaaaaaaaabqbjRbjRbjObpsaXIaXOaaaaaaaaaaXLaXLblHbdIbdIbdIbptbdIbdIbdIbdIbpubcabpvaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablObpwbpxblRbkbblSblTblSblTblSblTblSbkbblUblVbccbpybpzbpAbpBbpCbpDbpDbpEbpFbpBbpGbpHbpIbfwbpJbpKbpLbpMbpNbpObpPbfwbpQbpRbpSbpTbpUbfwbpVbpWbpXbpYbpZbfGbqabjnbqbbqcbqcbqcbqcbqcbhtbqdbqebhtbkWbqfbqgbqhboEboEboEboEbqiboEboEboEboEbqjbqkbqlbkWbqmbqnbqobqpbqqbqrbqrbqsbhwbqtbqubqvbqwbqxbqybqxbqzbqxbqAbqxbqxbqBbqxbqxbqCbqDbqxbqEbqBbqFbqGbqCbqHbqxbqIbqJbqKbqLbqMbqNbqObqPbqQbqRbpnbqSbqSbqTbqUbqVbqWbntbntbntafdbqXabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabqYbqZbrabrbbrcbrdbrebrfaXIaXLaXLaXLaXLaXLbrgbrhbrgbrgbribrjbribrkbrkbrlbrmbrnaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobiobjZbrpbkbbrqbkbbrrbrsbkbbrtbkbbkibrubccbgVbrvbrwbrxbrybrzbrAbrBbrCbrxbrDbrEbrFbfwbrGbhabrHbrIbfwbfwbfwbfwbfwbhabrJbrKbfwbfwbiUbrLbrMbiUbiUbrNbehbfIbrObqcbrPbrQbrRbqcbrSbrTbrUbrVbrWbrXbrYbrZbsabsbbscbsdbsebscbscbsfbsabsgbshbsibkWbhwboIboIboIbsjboIboIboIbhwbskbfIbslbsmbsnbsobsnbsmbspbspbspbspbspbspaoGaoGbsqaoGaoGaoGbsrbssaoGaoGaoGbstaoGbsubsvbswbsxbsybszbsAbsBbqSbsCbsCbsDbqUbsEbjNbntbsFbsGbsHbsIbsJbsJbsKbsLabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabqYbsMbsNaaaabqbsObsPbsQbsRbsSbsTbrgbsUbsVbsWbsXbsYbsZbrgbtabtbbtcbtdbtebtfbtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobiobjZbrpbkbbrqbkbbrrbrsbkbbrtbkbbkibrubccbgVbrvbrwbrxbrybrzbrAbrBbrCbrxbrDbrEbrFbfwbrGbhabrHbrIbfwbfwbfwbfwbfwbhabrJbrKbfwbfwbiUbrLbrMbiUbiUbrNbehbfIbrObqcbrPbrQbrRbqcbrSbrTbrUbrVbrWbrXbrYbrZbsabsbbscbsdbsebscbscbsfbsabsgbshbsibkWbhwboIboIboIbsjboIboIboIbhwbskbfIbslbsmbsnbsobsnbsmbspbspbspbspbspbspaoGaoGbsqaoGaoGaoGbsrdedaoGaoGaoGbstaoGbsubsvbswbsxbsybszbsAbsBbqSbsCbsCbsDbqUbsEbjNbntbsFbsGbsHbsIbsJbsJbsKbsLabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabqYbsMbsNaaaabqbsObsPbsQbsRbsSbsTbrgbsUbsVbsWbsXbsYbsZbrgbtabtbbtcbtdbtebtfbtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobthbiobiqbiobiobiqbiobipbtibtjaWDbtkbtlbtmbfGbtnbtobtpbtobtqbfGbtrbtsbttbtubtvbtwbtxbtybtzbtwbtAbtBbtwbtvbtvbtCbtvbtDbtEbtFbtGbtHbtvbtIbtJbtKbkJbtLbtMbtNbtObqcbjebjebjebjebkWbtPbtQbtRbtSbtTbtUboEbtVbtWbtXbtYbtSbtZbuabubbucbhwbudbuebufbugbuhboIbuibhwbujbfIbukbulbumbunbuobsmbupbuqburbusbutbuubuvbuwbuxaoGbuybuzbuAbuBbuCaoGaxcbuDaoGbuEbuFbuGbnEbuHbuHbuHbuIbuJbqSbqSbuKbuLbuMbuNbuObuPbuQbuRbuSbuTbuTbuUbuVbuWbuWbuWbuXbuWbuWbuWbuWbuWbuWbuXbuWbuWbuWbuWbuWbuWbuXbuWbuYbuZbuTbuTbuTbvabvbbvcbvdbvdbvebvfbvgbvhbvibvjbvkbvlbvmbvnbvobvpbvqbvrbvsbvtbvubvvbbXbbXbvwaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaabccbdRbccbccbccbccbccbccbdRbccaaaaWDbvxbvybvzbfGbvAbvBbvCbvBbvDbfGbvEbvFbvGbvHbvHbvIbvJbvHbvHbvKbvLbvMbvNbvHbvHbvObvHbvHbvHbvPbvQbvRbvRbvSbvTbvUbvVbqcbvWbvXbvYbqcbvZbwabwbbwcbwdbtYbwebtTbwfbwgbwhbwibwjbwibwkbwlbwmbwnbwobwpbwqbhwbwrbwsbwtbwubwvbhwbhwbhwbhybwwbwxbsmbwybwzbwAbsmbwBbwCbwDbwEbwFbwGbwHbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSaoGbsubwTbwUbntbwVbwWbwXbwYbwZbxabxbbxcbxdbqUbxebxfbxgbxhbxiaWCaaaaaabxjbsNabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabxkbxlbsLaaaabqaZhbxmbxnbxobxpbxqbxrbxsbxtbxubxvbxwbxxbxybxzbxAbxBbxCbxDbtfbxEbxFaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccabqaaaabqaaabccbxGbccbxHbxIbfebxJbccbxGbccbccaWDbgVbxKbxLbfGbxMbvBbxNbvBbxObfGbxPbxQbxRbxSbxTbxUbxVbxWbxXbxYbxZbyabxTbxTbxTbybbxTbycbydbxVbyebxTbxTbyfbygbyhbvVbqcbyibyjbykbylbymbynbymbymbwdbyobypbyqbyqbyqbyrbysbytbyubyvbyqbyqbyqbywbyxbkWbhwbyybyzbyAbyBbyCbhwbyDbyEbyFbyGbwxbsnbyHbyIbyJbsmbyKbyLbyMbyNbspbspaoGaoGbyOaoGaoGaoGbyPbyQaoGaoGbyRbySaoGbyTbwTbyUbntbjNbjNbjNbjNbyVbjNbjNbyWbyXbyYbntbntbyZbzabzbbzcaaabqYbzdaaaabqaaaaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabxkbxlbsLabqbzebzfbzgbzhbzibzjbrgbzkbzlbzmbznbzobzpbrgbzqbzrbzsbrkbztbzubtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/RandomZLevels/evil_santa.dmm b/_maps/map_files/RandomZLevels/evil_santa.dmm new file mode 100644 index 00000000000..f7e5978aefc --- /dev/null +++ b/_maps/map_files/RandomZLevels/evil_santa.dmm @@ -0,0 +1,195 @@ +"aa" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/space) +"ab" = (/turf/simulated/mineral,/area/awaymission/challenge/main) +"ac" = (/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"ad" = (/mob/living/simple_animal/hostile/winter/snowman/ranged,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"ae" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"af" = (/obj/structure/snowman,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"ag" = (/turf/simulated/wall,/area/awaymission/challenge/main) +"ah" = (/mob/living/simple_animal/hostile/tree,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"ai" = (/obj/structure/dresser,/turf/simulated/floor/carpet,/area/awaymission/challenge/main) +"aj" = (/turf/simulated/floor/carpet,/area/awaymission/challenge/main) +"ak" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/syndie,/turf/simulated/floor/carpet,/area/awaymission/challenge/main) +"al" = (/obj/structure/flora/grass/both,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"am" = (/turf/simulated/floor,/area/awaymission/challenge/main) +"an" = (/obj/item/weapon/paper/journal_scrap_2,/turf/simulated/floor/carpet,/area/awaymission/challenge/main) +"ao" = (/obj/structure/flora/rock/pile,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"ap" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"aq" = (/obj/structure/mineral_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/simulated/floor,/area/awaymission/challenge/main) +"ar" = (/obj/item/weapon/restraints/legcuffs/beartrap,/turf/simulated/floor,/area/awaymission/challenge/main) +"as" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/awaymission/challenge/main) +"at" = (/obj/structure/table/woodentable,/obj/item/weapon/newton,/turf/simulated/floor,/area/awaymission/challenge/main) +"au" = (/obj/structure/grille,/obj/structure/window/full/basic,/turf/simulated/floor/plating,/area/awaymission/challenge/main) +"av" = (/mob/living/simple_animal/hostile/winter/reindeer,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"aw" = (/obj/machinery/gun_turret/grenade{desc = "Winterized 40mm grenade launcher defense turret. If you've had this much time to look at it, you're probably already dead."; faction = "winter"; name = "winterized mounted grenade launcher (40mm)"},/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"ax" = (/obj/structure/stool,/turf/simulated/floor,/area/awaymission/challenge/main) +"ay" = (/obj/structure/table/woodentable,/obj/structure/safe/floor,/obj/item/weapon/gun/projectile/shotgun/combat,/obj/item/weapon/gun/projectile/automatic/mini_uzi,/turf/simulated/floor,/area/awaymission/challenge/main) +"az" = (/obj/machinery/recharge_station,/turf/simulated/floor,/area/awaymission/challenge/main) +"aA" = (/obj/machinery/mech_bay_recharge_port,/turf/simulated/floor,/area/awaymission/challenge/main) +"aB" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/awaymission/challenge/main) +"aC" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor,/area/awaymission/challenge/main) +"aD" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor,/area/awaymission/challenge/main) +"aE" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/awaymission/challenge/main) +"aF" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor,/area/awaymission/challenge/main) +"aG" = (/obj/machinery/gun_turret/exterior{desc = "Winterized exterior defense turret chambered for 7.62 rounds. Designed to down intruders with heavy calliber bullets."; faction = "winter"; name = "winterized machine gun turret (7.62)"},/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"aH" = (/mob/living/simple_animal/hostile/winter/snowman,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"aI" = (/obj/structure/flora/bush,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"aJ" = (/obj/item/weapon/pickaxe/gold,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"aK" = (/obj/structure/flora/grass/green,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"aL" = (/obj/structure/boulder,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"aM" = (/turf/simulated/wall/rust,/area/awaymission/challenge/main) +"aN" = (/obj/structure/inflatable/door,/obj/effect/decal/snow/clean/edge{tag = "icon-snow_corner (NORTH)"; icon_state = "snow_corner"; dir = 1},/turf/simulated/floor{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/awaymission/challenge/main) +"aO" = (/obj/structure/girder/displaced,/turf/simulated/floor{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/awaymission/challenge/main) +"aP" = (/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/awaymission/challenge/main) +"aQ" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/awaymission/challenge/main) +"aR" = (/turf/simulated/shuttle/wall{icon_state = "swall8"; dir = 2},/area/awaymission/challenge/main) +"aS" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/challenge/main) +"aT" = (/turf/simulated/shuttle/wall{icon_state = "swall4"; dir = 2},/area/awaymission/challenge/main) +"aU" = (/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/awaymission/challenge/main) +"aV" = (/turf/simulated/floor{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/awaymission/challenge/main) +"aW" = (/obj/structure/girder,/turf/simulated/floor{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/awaymission/challenge/main) +"aX" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/awaymission/challenge/main) +"aY" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/challenge/main) +"aZ" = (/turf/simulated/floor{icon_state = "bar"},/area/awaymission/challenge/main) +"ba" = (/obj/effect/decal/cleanable/ash,/turf/simulated/floor{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/awaymission/challenge/main) +"bb" = (/turf/simulated/shuttle/wall{icon_state = "swall1"; dir = 2},/area/awaymission/challenge/main) +"bc" = (/obj/effect/decal/straw/medium,/obj/effect/decal/remains/human,/turf/simulated/floor{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/awaymission/challenge/main) +"bd" = (/obj/item/weapon/paper/journal_scrap_3,/turf/simulated/floor{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/awaymission/challenge/main) +"be" = (/obj/structure/sink/puddle,/turf/simulated/floor{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/awaymission/challenge/main) +"bf" = (/mob/living/simple_animal/hostile/winter/santa/stage_1,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/challenge/main) +"bg" = (/turf/simulated/shuttle/wall{icon_state = "swall2"; dir = 2},/area/awaymission/challenge/main) +"bh" = (/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/awaymission/challenge/main) +"bi" = (/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/awaymission/challenge/main) +"bj" = (/obj/structure/flora/rock,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"bk" = (/obj/structure/flora/grass/brown,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"bl" = (/obj/machinery/chem_heater,/turf/simulated/floor/wood,/area/awaymission/challenge/main) +"bm" = (/obj/machinery/chem_dispenser,/turf/simulated/floor/wood,/area/awaymission/challenge/main) +"bn" = (/obj/machinery/chem_master,/turf/simulated/floor/wood,/area/awaymission/challenge/main) +"bo" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/wood,/area/awaymission/challenge/main) +"bp" = (/turf/simulated/floor/wood,/area/awaymission/challenge/main) +"bq" = (/obj/structure/mineral_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/simulated/floor/wood,/area/awaymission/challenge/main) +"br" = (/obj/machinery/bot/medbot/mysterious,/turf/simulated/floor/wood,/area/awaymission/challenge/main) +"bs" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/awaymission/challenge/main) +"bt" = (/obj/structure/table,/obj/item/clothing/accessory/stethoscope,/obj/item/bodybag,/obj/item/weapon/storage/box/beakers,/turf/simulated/floor/wood,/area/awaymission/challenge/main) +"bu" = (/obj/machinery/vending/cola,/turf/simulated/floor,/area/awaymission/challenge/main) +"bv" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/challenge/main) +"bw" = (/obj/machinery/autolathe,/turf/simulated/floor,/area/awaymission/challenge/main) +"bx" = (/obj/machinery/gun_turret/interior{density = 0; desc = "Winterized interior defense turret chambered for .45 rounds and mounted on a wall. Designed to down intruders without damaging the hull."; faction = "winter"; name = "wall mounted machine gun turret (.45)"; pixel_y = 27},/turf/simulated/floor,/area/awaymission/challenge/main) +"by" = (/obj/structure/table,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/challenge/main) +"bz" = (/obj/item/clothing/head/cone,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"bA" = (/mob/living/simple_animal/walrus,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) +"bB" = (/obj/structure/closet/toolcloset,/turf/simulated/floor,/area/awaymission/challenge/main) +"bC" = (/obj/item/taperoll/engineering,/turf/simulated/floor,/area/awaymission/challenge/main) +"bD" = (/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/awaymission/challenge/main) +"bE" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/gateroom) +"bF" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "challenge"; name = "Gateway Shutters"; p_open = 0},/turf/simulated/floor{tag = "icon-delivery (SOUTHEAST)"; icon_state = "delivery"; dir = 6},/area/awaymission/gateroom) +"bG" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor{tag = "icon-delivery (SOUTHEAST)"; icon_state = "delivery"; dir = 6},/area/awaymission/gateroom) +"bH" = (/turf/simulated/floor,/area/awaymission/gateroom) +"bI" = (/obj/machinery/door_control{id = "challenge"; name = "Gateway Lockdown"; pixel_x = -4; pixel_y = 26; req_access_txt = "0"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/awaymission/gateroom) +"bJ" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/awaymission/gateroom) +"bK" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/greengrid,/area/awaymission/gateroom) +"bL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor,/area/awaymission/gateroom) +"bM" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/item/weapon/paper/journal_scrap_1,/turf/simulated/floor,/area/awaymission/gateroom) +"bN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/awaymission/gateroom) +"bO" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/bluegrid,/area/awaymission/gateroom) +"bP" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/bluegrid,/area/awaymission/gateroom) +"bQ" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/bluegrid,/area/awaymission/gateroom) +"bR" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/main) +"bS" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor,/area/awaymission/gateroom) +"bT" = (/obj/structure/dispenser/oxygen{oxygentanks = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/awaymission/gateroom) +"bU" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/bluegrid,/area/awaymission/gateroom) +"bV" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/bluegrid,/area/awaymission/gateroom) +"bW" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/bluegrid,/area/awaymission/gateroom) +"bX" = (/obj/machinery/power/smes/magical,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/challenge/main) +"bY" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc/noalarm{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/challenge/main) +"bZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/awaymission/gateroom) +"ca" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/awaymission/gateroom) +"cb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor,/area/awaymission/gateroom) +"cc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/awaymission/gateroom) +"cd" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/bluegrid,/area/awaymission/gateroom) +"ce" = (/obj/machinery/gateway,/turf/simulated/floor/bluegrid,/area/awaymission/gateroom) +"cf" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/bluegrid,/area/awaymission/gateroom) +"cg" = (/turf/simulated/floor/plating,/area/awaymission/challenge/main) +"ch" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/challenge/main) +"ci" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/power/apc/noalarm{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/gateroom) +"cj" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/awaymission/gateroom) +"ck" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor,/area/awaymission/gateroom) +"cl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor,/area/awaymission/gateroom) +"cm" = (/obj/structure/table,/obj/item/clothing/accessory/scarf/christmas,/obj/item/clothing/accessory/scarf/christmas,/obj/item/clothing/accessory/scarf/christmas,/obj/item/clothing/accessory/scarf/christmas,/obj/item/clothing/accessory/scarf/christmas,/turf/simulated/floor,/area/awaymission/gateroom) +"cn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/turf/simulated/floor,/area/awaymission/gateroom) +"co" = (/obj/structure/table,/obj/item/clothing/suit/furcoat,/obj/item/clothing/suit/furcoat,/obj/item/clothing/suit/furcoat,/obj/item/clothing/suit/furcoat,/obj/item/clothing/suit/furcoat,/turf/simulated/floor,/area/awaymission/gateroom) +"cp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/awaymission/gateroom) +"cq" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/gateroom) +"cr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/gateroom) +"cs" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/gateroom) +"ct" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/gateroom) +"cu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/gateroom) +"cv" = (/obj/machinery/atmospherics/unary/tank/air{dir = 1},/turf/simulated/floor/plating,/area/awaymission/gateroom) +"cw" = (/turf/space,/area/space) +"cx" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/gateroom) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaababababababababababacacacacacacacacacacacacacacabababababababababababacacacacacacacacacacacacacacacacacacacacabababababababaa +aaabababababababababacacacacacacacacacacacacacacacacabababacacabababababacacacadacacacacacacacacacacacacacacacacacababababababaa +aaabababababababababacacacacacacacacacacacacacacacacacacacacabababababacacacacacaeacacacacacacacacacacacacacacacabababababababaa +aaabababababacababafacacacacacacacacacacacacacacacacacacacacacacababacacacacacacacacacacacacacagagagagagacacacacabababababababaa +aaababababacacacacacacacacacacahacacacacacacacacacacacacacacacacacacacacacacacacacacacacacagagagaiajakagacacacacacacabababababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacalagamamajajajagacacacacacacacababababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacalagamamanajajagacacacacacacacacabababaa +aaabababacacacaoacacacacacacacacacacacacacacacacacacacacapacacacacacacacacacacacacacacacacaqaramamasagagacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacagagagamatauacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacagagagagagagagavacacacacacacacacacacacacacacacacacacacacacacawagaxayauacacacacacacacacacabababaa +aaabababacadacacacacacacacacacacagazaAaBaCaDagacacacacacacacacafacacacacacacacacacacacacacacacagagagagacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacagamamamamamagacacacacacacacacacacacacacaoacacabacacacacacacacacacacacafacacacacacacacacabababaa +aaabababacacacacacacacacacacacacauamamamamamauacacacacacacacacacacacacacacababababacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacalacacacacacagamamamamaEagacacacacacacacacacacacacacacabababababababacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacagasamamamaFagacacacacacacacacacacacacacacacababababababacacacacacacacacacacacacacahacacabababaa +aaabababacacacacacafacacacacacacagagagaqagagagacacacacacacacacacacacacacacacacabababacavacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacaGacacacacalacacacacacacacacacaHacacacacacacacababababacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacaIacacacacacacacacadacacacabacacacacacacacacacacacacacacacacacacacabababaa +aaabababacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabaJabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaKacacacacacacacacacacacacacacacacacacacacacacacababababaa +aaabaHaLacaLacabaKacacacacacacacacacacacaKacacacacacacacacacacacacacacaKacacacacacacacacacacacacacacacaHacacacacacacabababababaa +aaabababacabababababacacacacacaHacacacacaKacacacacacacacacaGacacacaGacacacacacacacacacacacacacacacacacacacacacacacacabacabababaa +aaabaMaMaNaMaOababacacacacacacacacacacacacacacacacacacaPaQaRaSaSaSaTaQaUacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabaMaVaVaVaWababacacacacacacacacacacacacacacacacacacaXaYaZaYaZaYaZaYaXacacacacacacacacacapacacacacacacacacacacacababababababaa +aaabaOaVbaaVaMababacacacacacacacacacacacacacacacacacaGbbaZaYaZaYaZaYaZbbaGacacacacacacacacacacacacacacacacacacacacacabababababaa +aaabaWbcbdbeaOababababacacacacacacaIacacacacacacacacacaSaYaZaYaZaYaZaYaSacacacacacacacacacacacacacacacacacacacacacacabababababaa +aaabaMaMaOaMaWabababacacacacacacacacacacacacacacacacacaSaZaYaZbfaZaYaZaSacacacacacacacacacacacacacacacacavacacacacacabababababaa +aaababababababababacacacacacacacacacacacacacacacacacacaSaYaZaYaZaYaZaYaSacacacacacacacacacacacacacacacacacacacacacacabababababaa +aaabababababababababacacacacacacacacacacacacacacacacaGbgaZaYaZaYaZaYaZbgaGacacacacacacacacacacacaIacacacacacacacacacacababababaa +aaabababacabababababacacacacacacacacacacacacacacacacacaXaYaZaYaZaYaZaYaXacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacbhaQaRaSaSaSaTaQbiacacacaKacacacacaoacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacaHacacacacaGacacacaGacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababbjacacacacacacacacacacacacacacacacacacacacacacababacadacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacabababaa +aaabababacacacacacacacacaHacacacacacacacacacacacacacacacababacacacacacacacacacacacacacacacacacacacacagagagagagacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacbjababacabababababacacacacacacacacaHacacacbkagagblbmbnagacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacababababababababababacacacacacacacacacacacacagagbobpbpbpagacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacababababababababababababacacacacacacacacacacacbqbpbpbpbpbpagbkacacacacabababaa +aaabababacacavacacacacacacacacacacacacacacacacacacacababababababababababababacacacacacacacacacacagbpbpbpbrbpagacacacacacabababaa +aaabababacacacacacacacacacacacapacacacacacacacacacacacacababababababacababacacacacacacacacacacacagagbsbpbpbtagacacacacacabababaa +aaabababacacacacacbkagagagagacacacacacacacacacacacacacacabacabababacacacacacacacacacacacacacacacaGagagauauagagacacacacacabababaa +aaabababacacacacacagagbubvagagacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacagbwamambxagacacacacacacacacacacacacacacacaIacacacacacacacacafacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacaubyamamamagbzacacacacacbjacacacacacacacacacbAacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacauasamamamaqacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacagbBbCambDagbzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacapacacacacacacacacacacacacacacabababaa +aaabababacacacacacagagagagagagacacacacacacacacacacacacacacbEbFbFbFbEbkacacacacacacacacacacacacacacacacacacacacacacaeacacabababaa +aaabababacacacacacalacacacacacacacacacacacacacacacacacaeacbEbGbGbGbEbjaIacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacbEbEbEbEbEbEbFbFbFbEbEbEbEbEbEacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacaeacacacacacacacacacacacacacacacabacabbEbHbHbHbHbIbJbJbJbIbHbHbHbHbEababacacacacacacacacacacacacacacacacacacacabababaa +aaababababacacacacacacadacacacacacacacacababababbEbHbKbKbKbHbLbMbNbHbObPbQbHbEabbjacababacacacacacacacadacacacacacacacacabababaa +aaabababababacacacacacacacacacacacacacababbRbRbRbEbHbKbKbKbHbSbTbSbHbUbVbWbHbEbRbRbRababacacacacacacacacacacacacacacacababababaa +aaabababababacabacacacacacacacacacacacababbRbXbYbEbHbKbKbKbZcacbcacccdcecfbHbEcgcgbRabababacacacacacacacacacacacacacabababababaa +aaababababababababababababababababababababbRchcibEcjbZckckclcmcncocpckckccbHbEcgcgbRabababababababababababababababababababababaa +aaababababababababababababababababababababbRcgcgbEbEcqbEbEcrcsctcscubEbEcqbEbEcgcgbRabababababababababababababababababababababaa +aaababababababababababababababababababababbRcgcgcgbEcvbEcwcxcwcwcwcxcwbEcvbEcgcgcgbRabababababababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomZLevels/fileList.txt b/_maps/map_files/RandomZLevels/fileList.txt index 104b4dac7e4..b135397b4f1 100644 --- a/_maps/map_files/RandomZLevels/fileList.txt +++ b/_maps/map_files/RandomZLevels/fileList.txt @@ -7,17 +7,29 @@ #Do NOT tick the maps during compile -- the game uses this list to decide which map to load. Ticking the maps will result in them ALL being loaded at once. #DO tick the associated code file for the away mission you are enabling. Otherwise, the map will be trying to reference objects which do not exist, which will cause runtime errors! +#===================================# +# BROKEN / INCOMPLETE AWAY MISSIONS # +#===================================# #_maps/map_files/RandomZLevels/academy.dmm -_maps/map_files/RandomZLevels/beach.dmm #_maps/map_files/RandomZLevels/blackmarketpackers.dmm #_maps/map_files/RandomZLevels/challenge.dmm #_maps/map_files/RandomZLevels/centcomAway.dmm #_maps/map_files/RandomZLevels/clownplanet.dmm #_maps/map_files/RandomZLevels/example.dmm -_maps/map_files/RandomZLevels/listeningpost.dmm -_maps/map_files/RandomZLevels/moonoutpost19.dmm #_maps/map_files/RandomZLevels/spacebattle.dmm #_maps/map_files/RandomZLevels/spacehotel.dmm #_maps/map_files/RandomZLevels/stationCollision.dmm -_maps/map_files/RandomZLevels/undergroundoutpost45.dmm -#_maps/map_files/RandomZLevels/wildwest.dmm \ No newline at end of file +#_maps/map_files/RandomZLevels/wildwest.dmm + +#===================================# +# USABLE AWAY MISSIONS # +#===================================# +#_maps/map_files/RandomZLevels/beach.dmm +#_maps/map_files/RandomZLevels/listeningpost.dmm +#_maps/map_files/RandomZLevels/moonoutpost19.dmm +#_maps/map_files/RandomZLevels/undergroundoutpost45.dmm + +#===================================# +# SPECIAL AWAY MISSIONS # +#===================================# +_maps/map_files/RandomZLevels/evil_santa.dmm \ No newline at end of file From 648ede2b9ab8859f92fe093c07679f3316812ca5 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 26 Dec 2015 22:16:41 -0500 Subject: [PATCH 010/442] AAAAAAAAAAAAAAAHHHHHHHHHHHHHHHH --- _maps/map_files/cyberiad/cyberiad.dmm | 129 +++++++++++++++----------- 1 file changed, 77 insertions(+), 52 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 5920c286a53..b3d2b1e0fc8 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -621,7 +621,7 @@ "alW" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/solar/auxport) "alX" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/solar/auxport) "alY" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk8"; icon_state = "catwalk8"},/area/solar/auxport) -"alZ" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/floor/plating,/area/shuttle/siberia) +"alZ" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "window4"},/turf/simulated/floor/plating,/area/shuttle/siberia) "ama" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/siberia) "amb" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/shuttle/siberia) "amc" = (/turf/simulated/wall/r_wall,/area/space) @@ -697,7 +697,7 @@ "anu" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/shuttle/pod_3) "anv" = (/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport) "anw" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/siberia) -"anx" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/shuttle/window,/turf/simulated/floor/plating,/area/shuttle/siberia) +"anx" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "window8"},/turf/simulated/floor/plating,/area/shuttle/siberia) "any" = (/obj/machinery/mineral/labor_claim_console{machinedir = 2; pixel_x = 30; pixel_y = 30},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/siberia) "anz" = (/obj/machinery/flasher_button{id = "gulagshuttleflasher"; name = "Flash Control"; pixel_x = 0; pixel_y = -26; req_access_txt = "1"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/siberia) "anA" = (/obj/machinery/door/airlock/external{id_tag = "laborcamp_home"; name = "Labor Camp Airlock"; req_access_txt = "2"},/turf/simulated/floor/plating,/area/security/prisonershuttle) @@ -748,7 +748,7 @@ "aot" = (/obj/machinery/door/airlock/external{name = "Escape Pod"},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aou" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/shuttle/floor,/area/shuttle/pod_3) "aov" = (/turf/simulated/floor/plating,/area/maintenance/fsmaint) -"aow" = (/obj/machinery/door/airlock/external{name = "Escape Pod"},/obj/docking_port/mobile/pod{dir = 4; id = "pod3"; name = "escape pod 3"},/turf/simulated/shuttle/floor,/area/shuttle/pod_3) +"aow" = (/obj/structure/grille,/obj/structure/window/full/shuttle{dir = 10; icon_state = "9"},/turf/simulated/floor/plating,/area/shuttle/siberia) "aox" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/shuttle/plating,/area/shuttle/pod_3) "aoy" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/pod_3) "aoz" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/pod_3) @@ -1588,10 +1588,10 @@ "aEB" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/maintenance/electrical) "aEC" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/bluegrid,/area/maintenance/electrical) "aED" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/pod_1) -"aEE" = (/obj/machinery/door/airlock/external{name = "Escape Pod Hatch"},/obj/docking_port/mobile/pod{id = "pod1"; name = "escape pod 1"},/turf/simulated/shuttle/floor,/area/shuttle/pod_1) +"aEE" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/window/full/shuttle,/turf/simulated/floor/plating,/area/shuttle/siberia) "aEF" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/pod_2) "aEG" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/pod_2) -"aEH" = (/obj/machinery/door/airlock/external{name = "Escape Pod Hatch"},/obj/docking_port/mobile/pod{id = "pod2"; name = "escape pod 2"},/turf/simulated/shuttle/floor,/area/shuttle/pod_2) +"aEH" = (/obj/docking_port/mobile/pod{dir = 4; id = "pod3"; name = "escape pod 3"},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Escape Pod Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/pod_3) "aEI" = (/obj/machinery/door/airlock/external{name = "Escape Pod"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aEJ" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/hallway/secondary/entry) "aEK" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -7547,7 +7547,7 @@ "cPg" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/engineering) "cPh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/engine/engineering) "cPi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engine/engineering) -"cPj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering) +"cPj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering) "cPk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/engine/engineering) "cPl" = (/obj/structure/particle_accelerator/end_cap,/turf/simulated/floor/plating,/area/engine/engineering) "cPm" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/engine/engineering) @@ -7581,7 +7581,7 @@ "cPO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/clothing/glasses/meson,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/engine/engineering) "cPP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/stool,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/engine/engineering) "cPQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/medical/virology) -"cPR" = (/obj/machinery/door_control{id = "Singularity"; name = "Singularity Blast Doors"; pixel_x = -25; pixel_y = 0; req_access_txt = "10"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering) +"cPR" = (/obj/machinery/door_control{id = "Singularity"; name = "Singularity Blast Doors"; pixel_x = -25; pixel_y = 0; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering) "cPS" = (/obj/machinery/particle_accelerator/control_box,/obj/structure/cable,/turf/simulated/floor/plating,/area/engine/engineering) "cPT" = (/obj/structure/particle_accelerator/fuel_chamber,/turf/simulated/floor/plating,/area/engine/engineering) "cPU" = (/obj/machinery/door_control{id = "Singularity"; name = "Singularity Blast Doors"; pixel_x = 25; pixel_y = 0; req_access_txt = "10"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engine/engineering) @@ -7614,7 +7614,7 @@ "cQv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "engineering_west_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/engine/engineering) "cQw" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engineering) "cQx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engineering) -"cQy" = (/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/crowbar,/obj/machinery/light_switch{pixel_x = -27},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering) +"cQy" = (/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/crowbar,/obj/machinery/light_switch{pixel_x = -27},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering) "cQz" = (/obj/structure/stool,/turf/simulated/floor,/area/engine/engineering) "cQA" = (/obj/structure/particle_accelerator/power_box,/turf/simulated/floor/plating,/area/engine/engineering) "cQB" = (/obj/item/weapon/screwdriver,/turf/simulated/floor,/area/engine/engineering) @@ -7647,7 +7647,7 @@ "cRc" = (/obj/structure/cable,/obj/machinery/power/rad_collector{anchored = 1},/obj/item/weapon/tank/plasma,/turf/simulated/floor/plating,/area/engine/engineering) "cRd" = (/obj/machinery/power/rad_collector{anchored = 1},/obj/structure/cable,/turf/simulated/floor/plating,/area/engine/engineering) "cRe" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) -"cRf" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering) +"cRf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering) "cRg" = (/obj/structure/particle_accelerator/particle_emitter/left,/turf/simulated/floor/plating,/area/engine/engineering) "cRh" = (/obj/structure/particle_accelerator/particle_emitter/center,/turf/simulated/floor/plating,/area/engine/engineering) "cRi" = (/obj/structure/particle_accelerator/particle_emitter/right,/turf/simulated/floor/plating,/area/engine/engineering) @@ -7670,8 +7670,8 @@ "cRz" = (/turf/simulated/floor/plating,/area/storage/secure) "cRA" = (/obj/structure/closet/crate,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/storage/secure) "cRB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "engineering_west_pump"; tag_exterior_door = "engineering_west_outer"; frequency = 1379; id_tag = "engineering_west_airlock"; tag_interior_door = "engineering_west_inner"; pixel_x = 25; req_access_txt = "10;13"; tag_chamber_sensor = "engineering_west_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "engineering_west_sensor"; pixel_x = 25; pixel_y = 12},/turf/simulated/floor/plating,/area/engine/engineering) -"cRC" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/engine/engineering) -"cRD" = (/obj/item/weapon/wirecutters,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/engine/engineering) +"cRC" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/engine/engineering) +"cRD" = (/obj/item/weapon/wirecutters,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/engine/engineering) "cRE" = (/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/engine/engineering) "cRF" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "engineering_east_pump"; tag_exterior_door = "engineering_east_outer"; frequency = 1379; id_tag = "engineering_east_airlock"; tag_interior_door = "engineering_east_inner"; pixel_x = -25; req_access_txt = "10;13"; tag_chamber_sensor = "engineering_east_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "engineering_east_sensor"; pixel_x = -25; pixel_y = 12},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/engine/engineering) "cRG" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "engineering_east_pump"},/turf/simulated/floor/plating,/area/engine/engineering) @@ -7685,9 +7685,9 @@ "cRO" = (/obj/machinery/shieldgen,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/storage/secure) "cRP" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/solar_control,/obj/item/weapon/tracker_electronics,/obj/item/weapon/paper/solar,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/storage/secure) "cRQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "engineering_west_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/engine/engineering) -"cRR" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cRR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/engine/engineering) "cRS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cRT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cRT" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating/airless,/area/space) "cRU" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "engineering_east_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/engine/engineering) "cRV" = (/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 5},/turf/simulated/floor,/area/atmos) "cRW" = (/obj/machinery/atmospherics/trinary/filter{density = 0; dir = 4; filter_type = 2; name = "Gas filter (N2 tank)"; on = 1},/turf/simulated/floor,/area/atmos) @@ -7701,12 +7701,12 @@ "cSe" = (/obj/machinery/the_singularitygen{anchored = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/storage/secure) "cSf" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/storage/secure) "cSg" = (/obj/structure/grille,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cSh" = (/obj/item/weapon/extinguisher,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "engineering_west_airlock"; name = "exterior access button"; pixel_x = 20; pixel_y = 20; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cSi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity North-West"; dir = 2; network = list("Singularity","SS13"); pixel_x = 20; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cSh" = (/obj/machinery/power/grounding_rod{anchored = 1},/turf/simulated/floor/plating/airless,/area/space) +"cSi" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) "cSj" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cSk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cSl" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity North-East"; dir = 2; network = list("Singularity","SS13")},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cSm" = (/obj/item/weapon/wrench,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "engineering_east_airlock"; name = "exterior access button"; pixel_x = -20; pixel_y = 20; req_access_txt = "10;13"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cSl" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity North-West"; dir = 2; network = list("Singularity","SS13"); pixel_x = 20; pixel_y = 0},/obj/machinery/power/grounding_rod{anchored = 1},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cSm" = (/obj/item/weapon/extinguisher,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "engineering_west_airlock"; name = "exterior access button"; pixel_x = 20; pixel_y = 20; req_access_txt = "10;13"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cSn" = (/obj/structure/grille,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cSo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering) "cSp" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Engineer's Desk"; departmentType = 7; name = "Chief Engineer Requests Console"; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/photocopier,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) @@ -7751,7 +7751,7 @@ "cTc" = (/obj/machinery/power/emitter,/turf/simulated/floor/plating,/area/storage/secure) "cTd" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cTe" = (/obj/item/device/multitool,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cTf" = (/obj/item/weapon/wirecutters,/obj/structure/lattice,/turf/space,/area/space) +"cTf" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/space) "cTg" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos) "cTh" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_in_meter"; name = "Mixed Air Tank In"},/turf/simulated/wall/r_wall,/area/atmos) "cTi" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/turf/simulated/wall/r_wall,/area/atmos) @@ -7780,7 +7780,7 @@ "cTF" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "cTG" = (/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cTH" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/space) -"cTI" = (/obj/machinery/the_singularitygen{anchored = 1},/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plating/airless,/area/space) +"cTI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "cTJ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cTK" = (/obj/machinery/light/small,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cTL" = (/obj/machinery/light/small,/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/atmos) @@ -7788,7 +7788,7 @@ "cTN" = (/obj/item/weapon/weldingtool,/turf/space,/area/space) "cTO" = (/obj/item/device/radio/intercom/syndicate{pixel_y = -28},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "cTP" = (/obj/item/device/radio,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cTQ" = (/obj/structure/lattice,/obj/item/clothing/head/hardhat,/turf/space,/area/space) +"cTQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "cTR" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engine/engineering) "cTS" = (/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/space) "cTT" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engine/engineering) @@ -7797,7 +7797,7 @@ "cTW" = (/obj/structure/closet/syndicate/personal,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "cTX" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cTY" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity West"; dir = 4; network = list("Singularity","SS13")},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cTZ" = (/obj/item/weapon/screwdriver,/obj/structure/lattice,/turf/space,/area/space) +"cTZ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "cUa" = (/obj/machinery/power/emitter{anchored = 1; dir = 8; state = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity East"; dir = 8; network = list("Singularity","SS13")},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cUb" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cUc" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "MiniSat Access"; req_access_txt = "75"},/turf/simulated/floor,/area/engine/engineering) @@ -7826,7 +7826,7 @@ "cUz" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/obj/structure/lattice,/turf/space,/area/space) "cUA" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/shuttle/pod_4) "cUB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/shuttle/floor,/area/shuttle/pod_4) -"cUC" = (/obj/machinery/door/airlock/external{name = "Escape Pod"},/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/turf/simulated/shuttle/floor,/area/shuttle/pod_4) +"cUC" = (/obj/docking_port/mobile/pod{id = "pod1"; name = "escape pod 1"},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Escape Pod Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/pod_1) "cUD" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/obj/structure/lattice,/turf/space,/area/space) "cUE" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/shuttle/plating,/area/shuttle/pod_4) "cUF" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/pod_4) @@ -8266,7 +8266,13 @@ "dcX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/simulated/floor{dir = 6; icon_state = "caution"},/area/atmos) "dcY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/requests_console{department = "Mechanic"; departmentType = 2; name = "Mechanic's Workshop Requests Console"; pixel_y = 30},/turf/simulated/floor,/area/engine/mechanic_workshop) "dcZ" = (/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor,/area/hallway/primary/starboard/west) -"dda" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"dda" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity North-East"; dir = 2; network = list("Singularity","SS13")},/obj/machinery/power/grounding_rod{anchored = 1},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"ddb" = (/obj/item/weapon/wrench,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "engineering_east_airlock"; name = "exterior access button"; pixel_x = -20; pixel_y = 20; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"ddc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space) +"ddd" = (/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plating/airless,/area/engine/engineering) +"dde" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plating/airless,/area/engine/engineering) +"ddf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"ddg" = (/obj/machinery/power/tesla_coil{anchored = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/space) "ddh" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating,/area/engine/engineering) "ddi" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "atmospherics_south_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "atmospherics_south_sensor"; pixel_x = -8; pixel_y = -30},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "atmospherics_south"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_airpump = "atmospherics_south_pump"; tag_chamber_sensor = "atmospherics_south_sensor"; tag_exterior_door = "atmospherics_south_outer"; tag_interior_door = "atmospherics_south_inner"},/turf/simulated/floor/plating,/area/engine/engineering) "ddj" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/external{aiControlDisabled = 1; frequency = 1379; hackProof = 1; icon_state = "door_locked"; id_tag = "atmospherics_south_inner"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engineering) @@ -8285,7 +8291,7 @@ "ddw" = (/obj/machinery/door/window{dir = 2; name = "Cockpit"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "ddx" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/turf/space,/area/space) "ddy" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "kitchenhall"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window/westleft{dir = 1; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"ddz" = (/obj/machinery/door/airlock/external{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/obj/docking_port/mobile/emergency{dir = 4; dwidth = 11; height = 13; width = 24},/obj/docking_port/stationary{dir = 4; dwidth = 11; height = 13; id = "emergency_home"; name = "emergency evac bay"; width = 24},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ddz" = (/obj/docking_port/mobile/pod{id = "pod2"; name = "escape pod 2"},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Escape Pod Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/pod_2) "ddA" = (/obj/item/flag/nt,/obj/effect/decal/warning_stripes/east,/turf/simulated/floor,/area/hallway/secondary/exit) "ddB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) "ddC" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) @@ -8295,7 +8301,7 @@ "ddG" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor,/area/shuttle/escape) "ddH" = (/obj/effect/decal/warning_stripes/northeastsouth,/turf/simulated/floor,/area/hallway/secondary/exit) "ddI" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/exit) -"ddJ" = (/obj/machinery/door/airlock/external{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ddJ" = (/obj/docking_port/mobile/emergency{dir = 4; dwidth = 11; height = 13; width = 24},/obj/docking_port/stationary{dir = 4; dwidth = 11; height = 13; id = "emergency_home"; name = "emergency evac bay"; width = 24},/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape) "ddK" = (/obj/machinery/status_display{pixel_y = -30},/obj/machinery/light/spot,/turf/simulated/shuttle/floor,/area/shuttle/escape) "ddL" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32; pixel_y = 0},/obj/effect/decal/warning_stripes/east,/turf/simulated/floor,/area/hallway/secondary/exit) "ddM" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "14"},/turf/simulated/floor/plating,/area/shuttle/escape) @@ -8471,6 +8477,7 @@ "dha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhe" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "dhg" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) @@ -8676,7 +8683,7 @@ "dkY" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "dkZ" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "dla" = (/obj/structure/table,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) -"dlb" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/space,/area/shuttle/constructionsite) +"dlb" = (/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape) "dlc" = (/obj/machinery/computer/shuttle/engineering,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite) "dld" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite) "dle" = (/turf/simulated/shuttle/wall{tag = "icon-swall2"; icon_state = "swall2"; dir = 2},/area/shuttle/constructionsite) @@ -8687,6 +8694,24 @@ "dlj" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/hallway/primary/central/se) "dlk" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/door_control{id = "paramedic"; name = "Garage Door Control"; pixel_x = -1; pixel_y = -24; req_access_txt = "66"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/hallway/primary/central/se) "dll" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/hallway/primary/central/se) +"dlm" = (/obj/structure/lattice,/obj/item/weapon/wirecutters,/turf/space,/area/space) +"dln" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"dlo" = (/obj/machinery/power/tesla_coil{anchored = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating/airless,/area/space) +"dlp" = (/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plating/airless,/area/space) +"dlq" = (/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plating/airless,/area/space) +"dlr" = (/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor/plating/airless,/area/space) +"dls" = (/obj/machinery/the_singularitygen{anchored = 1},/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plating/airless,/area/space) +"dlt" = (/obj/machinery/the_singularitygen/tesla{anchored = 1},/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plating/airless,/area/space) +"dlu" = (/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plating/airless,/area/space) +"dlv" = (/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plating/airless,/area/space) +"dlw" = (/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor/plating/airless,/area/space) +"dlx" = (/obj/machinery/power/tesla_coil{anchored = 1},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating/airless,/area/space) +"dly" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"dlz" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"dlA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"dlB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"dlC" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/space,/area/shuttle/constructionsite) +"dlD" = (/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Escape Pod Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/pod_4) (1,1,1) = {" bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8749,7 +8774,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiSdiUdiTbFlbikbFldiVdiVdiVbFlbikbFldiWdiYdiXbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabXabYabZacaacbaccacdaceacfacfaalbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwbikbikdgOdgGdgydgPdgQdgydgydgGdgRbikbikdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiVdiVdiVbFlbikcVGdiZdjbdjadelbikbFldiVdiVdiVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgachaciacjackaclaalacmbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwdgwdgwdgwdgwdgwdgwdgSdgwdgwdgwdgwdgwdgwdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacnacoacpacqacracsacdaalaalaalaalbikbikbikbikbikbikbikabKabLabLabKactactactacuacvactactactabKabKabKabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgHdgNdgTdgTdgTdgTdgTdgTdgmdgUdgmdgTdgTdgTdgTdgTdgTdgNdgJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikabKacFacGactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZdgYdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdheddadgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikabKacFacGactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZdgYdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdhedhddgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikacgacNacOacPacQacRacSacCaalacEacEacUacTacVacEacEacEbikbikbikbikabKacGactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgOdgXdgydgydgydhgdgmdgydgydgydgydgydgmdgydgydhhdgydgXdgRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgadcaddacEacEadeadgadfadiadhacEacEbikbikbikbikbikabKactadjadkadladmadnadoactadpadqadradsadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhjdhidhldhkdhmdgmdhndgydgydgydhodgmdhqdhpdhsdhrdhjdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadwadxadyadzadAadwadBadCacEadEadDadGadFadIadHadJacEbikbikbikbikbikbikactadKadLadMadNacXadOactadPadtadtadtadtaduadvbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhtdhtdgwdgwdgwdgmdhudgydgydgydhvdgmdgwdgwdgwdhtdhtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8767,12 +8792,12 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGacGafxafxaabaabbikajQbikaabaabafxafxacGacGacGbikbikbikbikbikbikbikbikbikbikbikbikaeAajRajSajTafyajUajVajWakcajtajYajZakaakbaknakdakdajuakeakfakgakhakiajBakjakkaklakmalJajFakoakpakqakqajKakraksaktakuakvakwakxakxakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabbikaabbikbikajQbikbikaabbikaabbikbikacGbikbikbikbikbikbikbikbikbikbikbikbikaeAakFafyakGakHakIakJakKakLajtakMakNakOakOakPakQakRajuakSakTakUakVakiakWakXakYakZalaalbalcaldaleakqalfalgalhalialjalkallalmaiCaiCaiCalnajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabbikbikaabaloaabaabbikbikaloaabbikaabaabajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabalpalpalpalpalpbikalqbikalpalpalpalpalpaabacGbikbikbikbikbikbikbikbikbikbikbikbikaeAalralsakGafyaltakJalualvajtalwalxalyalzakQakQakRajualAalBalCalDalEajBalFalGaklalHalIajFajXalKalLalLalMajdalNalOalPalQaiCaiFaiGaiCalRahAahAahAahAahAahAahAahAahAahAaabaloaabbikajkajlajmbikbikajkajlajmbikbikajkajlajmaabaabbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamaalZalZalZambbikbikbikamcaeAaeAaeAamdamdameamfamgamdajuamhamiamjamkamlammamnajuamoampamqakVamrajGamsamtaXNamvamwajGamxamyamzamAamBamCamDamEamFamGaiCajhamHamIamJahAamKamKamKamKamKbikbikbikbikaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamaalZaowanxambbikbikbikamcaeAaeAaeAamdamdameamfamgamdajuamhamiamjamkamlammamnajuamoampamqakVamrajGamsamtaXNamvamwajGamxamyamzamAamBamCamDamEamFamGaiCajhamHamIamJahAamKamKamKamKamKbikbikbikbikaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikamOamNamQamPamOamRamSamSamTamUamVamWamXamYamZanaanbancajuajuandaneajuajuajuajuajuanfanganhanianfajGajBajCanjajEajFajGankanlanmannahUahUahUahUannanoanpanmahUahAanqahAanrantansansanubikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikaabbikbikbikanxanwanzanyanBanAanDanCanAanGanGanHanIanJanKanLanManNanOanPanQanRanSanTanSanSanUanVanWanXanYanSanZaoaaobaocaodaoeaofaogaohanSaoiaojaokaolaomaonaooaopaoqaoraosaplaotaovaowaouaoyaoxbikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikaabbikbikbikaEEanwanzanyanBanAanDanCanAanGanGanHanIanJanKanLanManNanOanPanQanRanSanTanSanSanUanVanWanXanYanSanZaoaaobaocaodaoeaofaogaohanSaoiaojaokaolaomaonaooaopaoqaoraosaplaotaovaEHaouaoyaoxbikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOanEaoAanFamOamRamSamSamSaoBaoHaoIaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoWaoZapaaoTapbapcapdaoTaoTapdaoXapcapeaoTaoTapbapcaoVapfapgaphapiapjapkaplapmapnaovaozansansapobikaacapqaacbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikaabaabajkajPajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikajjbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamOaoCaoCaoDamObikbikbikapwapwapxapyapzapAapAapAapBapBapBapBapCapDapEapEapEapFapGapHapFapEapEapEapIapJapKapLapMapKapNapJapOapOapOapPapQapOapRapSapTapUapVapWapXapmapnapYapYamKapZapZapZamKaqaamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmaabaabbikaabaiIaabbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGaqbamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikanxaoEaoCaoFamOamRamSamSamSaqgaqhaqiaqjaqkaqlaqmapBaqnaqoaqpaqqaqraqsaqtaquaqvaqwaqxaqyaqzaqAaqsaqBaqCaqDaqEaqFaqGaqHaqCapOaqIaqJaqKaqLapOaqMaqNaqOaqPaqQaqRapXapmaqSaqTaqUaqVaqWaqWaqXamKaqYamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikaabaloaabbikbikaqZbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGaqbamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikaEEaoEaoCaoFamOamRamSamSamSaqgaqhaqiaqjaqkaqlaqmapBaqnaqoaqpaqqaqraqsaqtaquaqvaqwaqxaqyaqzaqAaqsaqBaqCaqDaqEaqFaqGaqHaqCapOaqIaqJaqKaqLapOaqMaqNaqOaqPaqQaqRapXapmaqSaqTaqUaqVaqWaqWaqXamKaqYamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikaabaloaabbikbikaqZbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikacGbikbikbikamOaoGaoCaoCaptanAapuanCanAapvanLarharianGanGarjapBarkarlarmarnaroarparqarrarsartaruarvarrarwarxaryarzarAarBarCarDarEarFarGarHarIarJarKapOarLarMarMarNarMarOapXapmaovaovaovaovarPaovarQarRarSamKakBarTakEbikbikaiIaabaabaabaabaiIaabaabaabaabaiIaabaabaabaabarUarVakEaabbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOaqcaqcaqcamOamRamSamSamSarXarYaoMarZasaanGasbapBascasdaseasfasgashasiasjaskaslasmasnasoaspashasqarFasrassastasrarEasuapOarGaswasxasyapOaszasAarMarNarMasBapXasCasDasEasFasEasGasHamKamKapnamKaloasIasJakCakCarTakCakCakCakCarTakCakCakCakCarTakCakCakCasKasLasIaloaabbikagQaabbikbikbikbikbikbikbikbikbikbikaabbikaabbikasMasMasNasNasNasNasNasNasMasMaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikaqeaqdaqdaqdaqfbikbikbikapwapwapwapwapwasSanGasTasUapBapBapBasVasWapEapEapEapEasXasYapEapEapEasZataatbatcatdateatfatgathapOatiatjatkatlatmatnatoatpatqarMatrapXatsattatuatvatwatxatyatzatAatBamKatCarTatDaabaabbikaabbikbikbikbikbikbikbikbikaabaabaabaabaabatEatFatDaabaabaabaabaabbikbikbikbikbikbikbikbikbikaabbikaabasMasMatGatHatIatJatKatLatMatIasMasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8788,7 +8813,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikappaBpaBobikaBqaBsaBraabaabaAlazHaAlbikbikaabaxVaBuaBvaBwaBxaByaBzaxVaBAazHaBBaBCaBDaBEaBEaBEaBEaBEaBEaBEaBEaBFaxVbikaBGbikbikbikbikbikbikbikbikbikbikbikbikbikbikaBHaBIaBJaBKazMaAwazOaBLafvaBNaAAaABaBOaBPaBPaBPaBPaBPaAIaBPaAKaxlaxqaxrazIaBQaBRaBSaBTaBSaBSaBUaBVaBWaBWaBWaBWaBWaBWaBXaBYaBZaCaaCbaCcaCdaCeavWavWaCfaCgaChaChaChaChaChaCgaCfaabbikbikbikbikazvaCiaCjbikaAiaCkaClaCmaCnayHayHayHayJayHayJaCoayHayHayGayHaCpaCqaCoaAkayHayGaCraCsayGayHaCtayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaBtaCvaBtaCuaCwaCxaCwaCuaabaAlaCzaCAbikbikaxVaxVaxVaxVaxVaCBaCCaCDaCEaCFaCGaCGaCHaCIaCIaCJaCKaxVazHaxVaxVaxVaCLaxVbikaabbikbikbikbikbikbikaabaabaabaabaabaabaabaabaCMaCNaCOaBKazMaAwazOaCPaCQaCRaAAaCSaCTaBPaCUaBPaCVaCVaAIaBPaAKaxlaxqaCWazIaCXaBRaCYaCZaDaaDbaDcaDdaDeaDfaDgaDhaDiaDjaDkaDlaDmaDnaDoaDpaDqaDraDsaDtaCfaCgaChaChaChaChaChaCgaCfaabaabaabaabazvazvaDuaDvazvaAiaDwayHaDxayHayKayHayGayGaDyayGayGaDzayJayJaCoaDAaDBayHayGayHaDCaDCaDCaDCaDCaDCaDCaDCaDCaDDaDDaDDaDDaacaDDaDDaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaBtaCyaBtaDEaCwaDFaCwaDEaxVaAlaDHaDIaAlaAlaxVazHazHazHazHazHazHazHaCBaCLaxVaxVaxVaxVaxVaDJaxVaxVazHaDKaxVaDLaCLaxVaxVaxVbikbikbikbikbikaDMaDMaDMaDMaDMaDMaDMaDMaabaCMaDNaDOaDPaDQaDRaDSaDTaDUaDVaDWaABaDXaBPaDYaDZaEaaEbaEcaEdaAKaxlaxqaxrazIatsaEeaEfaCZaDaaDbaEgaEhaEhaEhaEhaEhaEhaEhaEhaEhaEhaEiaEjaEkaElaEmaEnaEoaEpaCgaChaChaChaChaChaCgaCfaCfaCfbikbikazvayHaEqaEraBhaEsaDAaCoaDxayHaEtayIaEuaAkayHayHayHayHaEvayHayHaDAaEwayHaDzayHaDCaExaEyaEzaDCaEAaEBaECaDCaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaDGaEEaEDaDEaEFaEHaEGaEJaEKazHaELaEMaENaDKaEOazHaxVaxVaxVaxVaxVaxVaxVaCLaxVaEPaEQaERaxVaESaETaEUazHaEOaxVaENaEVaBEaBFaEWbikbikbikbikbikaEXaEYaEZaFaaFbaFcaFdaDMaabaCMaFeaFfaFgaCMaFhazOaFiaFjaFkaFlaABaFnaBPaFoaFpaFqaFraFsaFtaFuaFvaydaFwaFxaFyaFzaFAaCZaDaaDbaFBaEhaFCaFCaFCaEhaEhaFDaFEaFEaFFaEiaFGaFHaFIaFIaFJaFKaFLaFMaChaChaChaChaChaFNaFOaFPaFQbikbikazvayHayHaFRayHaEsaFSayHaFTaFUaFUaFUaFUaFVaFUaFWayHayHayHayHayHayHayHayHayJayIaDCaFXaFYaFYaDCaFZaGaaGbaDCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaDGcUCaEDaDEaEFddzaEGaEJaEKazHaELaEMaENaDKaEOazHaxVaxVaxVaxVaxVaxVaxVaCLaxVaEPaEQaERaxVaESaETaEUazHaEOaxVaENaEVaBEaBFaEWbikbikbikbikbikaEXaEYaEZaFaaFbaFcaFdaDMaabaCMaFeaFfaFgaCMaFhazOaFiaFjaFkaFlaABaFnaBPaFoaFpaFqaFraFsaFtaFuaFvaydaFwaFxaFyaFzaFAaCZaDaaDbaFBaEhaFCaFCaFCaEhaEhaFDaFEaFEaFFaEiaFGaFHaFIaFIaFJaFKaFLaFMaChaChaChaChaChaFNaFOaFPaFQbikbikazvayHayHaFRayHaEsaFSayHaFTaFUaFUaFUaFUaFVaFUaFWayHayHayHayHayHayHayHayHayJayIaDCaFXaFYaFYaDCaFZaGaaGbaDCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaGcaGdaGeaDEaGcaGdaGeaEJaBzazHaGfazHazHazHazHazHaxVaGgaGhaGiaGjaGkaxVaCLaxVaEQaGlaEPaGmaGnaGoaxVaGpaxVaxVaxVaxVaGpaCLaEWbikazyazyazyazyaGqaEYaGraGsaGtaGuaGvaGwaDMaCMaBHaGxaGxaGxaGyaGzaGAaGzaGzaGzaGBaGCaGDaGEaGFaGFaGFaGFaGGaGHaGIaxqaGJazIatsaGKaGLaCZaDaaDbaEgaFCaGMaGMaGNaFCaEhaGOaGPaGPaGQaGRaFGaGSaGTaGUaGVaEhaGWaFQaChaChaChaChaChaFQaGXaGYaFQaabaabayGayHayHayJayJaEsaGZaGZaAiaAiaAiaEsaEsaEsayGaHaaHbayGayJayJayGayJayJayGayGaHcaHdaHeaHfaHgaHhaHiaFXaHjaDCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaDEaEIaHlaCuaDEaEIaHlaCuaxVaCBaxVaxVaxVaxVaxVazHaxVazHaHnaHoazHazHaxVaCLaxVaHpaabaHpaxVaBvaGoaxVaHqaHraxVaENaBzaxVaAwaDMaDMaHsaHsaHsaHsaHsaHsaHsaHsaHsaGvaGvaGwaHtaHuaHvaHwaHxaHyaHzaHAaHBaHBaHBaHBaHCaHDaHEaHFaHGaHBaHBaHHaHHaHIaHJaHKaHLaHMaHNaGKaHOaHPaHPaDbaEgaFCaHQaHRaHSaFCaEhaGOaGPaGPaGQaHTaFGaGSaGUaGUaGVaEhaGWaFQaChaChaChaChaChaFQaHUaGYaFQbikbikayGaHVayHayHaHWayJaHXazwaHYaHZayKayGaFSayKayGaIaayHayGaIbayHayGaIcaIdaIeaFUaIfaFUaIgaIhaIiaIjaIkaIlaImaDCaDDaDDaacaacaDDaDDaDDaDDaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaIoaHkaIoaIqaIoaIoaIoaIsaItaIuaIuaIuaIuaIvaxVazHaxVaIwaIxaIyazHaIzaGpaCLaxVaxVaxVaxVaxVaxVaGpaxVazHaIyaCBazHazHaGvaIAaIBaICaIDaIDaIDaIDaIEaIDaIDaIFaIGaICaIHaIIaIIaIIaIIaIIaIIaIIaIJaIKaIKaIKaIKaILaIMaIKaINaIKaIOaILaIKaIKaIKaIKaIPaIQaIRaISaITaFzaIUaIVaHPaIWaEgaFCaIXaIYaGMaFCaEhaIZaJaaJaaJbaEiaFGaJcaJdaJdaJeaEhaJfaJgaChaChaChaChaChaJhaJiaJjaFQbikbikayGayHayHayHayHayHayHaIeaFUaFUaFUaFUaFUaFUaFUaCmayHayHayHayHaDzayHayHaDxayHaJkaJlaJmaJnaJoaFYaFYaFYaJpaDCaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8808,13 +8833,13 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaInaYYaKzaKBaJraJraKCaKzaYYaKzbcgbchbcibcjaInbckbckaXkbckaXlaDEbclaXnaJraDEbcmbcmbcnbcobcobcobcobcobcobcpbcqbcobcobcobcobcobcobcrbcsbctbctbcubctbcvbcwbcxbcvbcvbcybczbcAbcmbcBbcBbcCbcCbcCbcDbcDbcDbcDbcDbcDbcDbcDbcEbcFbcFbcGbcFbcHbcHbcHbcHbcIbcJbcHbcEbcKbcKbcKbcKbcKbcKbcKbcKbcLbcLbcLaMebcMbcNbcObcObcObcObcPbcQbcRbcSbmubcUbcVbcWbcXbcYaUTaUTbcZbdabdbbdabdaaVbbdcbddbdebdebdebdebdfbdgaVbbdhbdiaRDbdjaTvbbPbbPbbQbbPaTvbdkaRDbdlbdmbdnaQbaRSbdobdpbdqbdqbdrbdsbdtbdubdvbdwbdxbdybdzbavbatbatbdAbaAbikbikbikbikbqUbwnbmKbutbBQbtmbmKbutbBQbtmbmKbFmbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDbikbikbikbikbikbikbikbcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEbikbikbikbikbikbikbikbcKbeGaYibeHaMebeIbcNbcSbcSbcSbcSbcSbeJbeKbcSbcSbcSbnMbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWbeXbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabbikbikaabbdBbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDbikbikbikbikbcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEbikbikbikbikbcKbeGaYibgabgbbgcbgdbgebgfbgcbggbghbgibgjbgkbglbcSbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvbeXbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAbqUbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbcSbhBbhCbcSbhDbhEbglbcSbnMbeMbeMbhFbhGbhHbhIbhJbhKbhLbeMbhMbgubhNbeXbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbKnbIzbPfbNjbiibPfddzbmKbmKbmKbmKbmKbmKbmKbmKbmKbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbcSbhBbhCbcSbhDbhEbglbcSbnMbeMbeMbhFbhGbhHbhIbhJbhKbhLbeMbhMbgubhNbeXbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbKnbIzbPfbNjbiibPfddJbmKbmKbmKbmKbmKbmKbmKbmKbmKbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbltbltblubltbltbltblvbltbltbmPaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbcSbjgbcSbcSbcSbjhbjibcSbhDbjjbglbcSbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatddAbaAbaAbaAbaAbgKbqUddBbmKbutbwmbtmbmKbutbwmbtmbmKddCbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbohbptbojbpwbpwbqWbpwbpwbpwbqWblubjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkMbkLbkObkObkPaYibkQaMebcSbkRbkSbglbcSbkTbkUbcSbkVbkWbglbcSbnMbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatddDbgKblrblrblrbaAbwmbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbwmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbqYbqXbqXbqXbqXbqXbqXbqXbqXbqXbqXbqZbraaGdbraaJrbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbkNbmsbmtaYiaYibjfbcSbnCbcSbcSbcSaRebcSbcSbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatddEbaAbmLbmMbmNbaAbBQbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbBQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbcSbnGbcSbnFbcSbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbltbltblubltbltbltblvbltbltbtnaabaInboibdFbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEboFbnmbnmbnmbnmboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTbplbpkbpkbpkbpkbpmbpJaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatddAbaAbaAbaAbaAbgKbqUddFbmKbmKbmKbmKbmKbmKbmKbmKbmKddGbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCbpBbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbqtbpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqrbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqybqzbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfddJbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCbpBbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbqtbpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqrbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqybqzbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCbBHdjhbDDdjidjidjkdjjbtqbxZbjNaInaInaKBbrWbrXbrYbrXbrXbrXbrXbrZbsabsbbcsbcsbscbsdblCbmUbsebsfbpAblCbsgbshbsgbcobcobcobcobsibcobsjbskbngbslbsmbpFbsnbsobngboCbnmbspbpIbpIbpIbsqbnmbsrbpNboIbpObssbrwbrxbstbsubrAbpTbsvbmgbswbsxbnvbsybszbsAboSbsBbsCbsDbsEbsFbsGbsHbsIbsJbqbbsKbnAbsLbsMbqibqjbqkbqlbqnbsNbqnbqnbqnbqnbsObsPbsPbsPbsPbsQbqnbqnbqnbqnbsRbqnbsNbsSbqnbsTbsUbsVbqnbsWbsXbsXbsYbsZbtabtbbmFbmFbmFbmFbmFbmFbmFbtcbtdbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbtebtfbtfbtgddSddRddUddTddTddTddTddVddWbaAaabbikbikaabbqUddXddZddYdeabqUbikbqUdecdebdecdecbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjldjidjidjidjidjidjidjideHdjnaGddjnaJrbtrbrXbtsbttbtubtvbtwbrZbtxbtybtzbtzbtAbtBblCblCblCbosbtCborbcsbcsbcsbcsbtDbejbejbskbejbsjbskbngbtEbtFbtGbtHboAbngbtIbnmbtJbpIbpIbpIbtKbtLbtMbpNbtNbnqbtObtPbpRbpRbpRbpRbpTbtQbmgbtRbtSbmgbmgbmgbmgbmgbmgbmgbnzbnAbtTbtUbtVbtWbtXbtYbtZbnAbvubuabuabucbucbucbucbucbucbucbudbudbuebufbugbugbufbuebudbudbuhbuhbuhbuhbuhbuhbuibuibujbuibuibuibuibuibukbulbumbunbmFbmFbuobuobupbupbupbupbupbuqbtfbtfbtebtfbmFbtfbtfbtfbtfburbusbusbusbusdedbuubuubuubuubuubuubuubuubuubikbikbikbikbdBddYddYddYdeebqUbikbqUdefdebdebdegbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8876,26 +8901,26 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabcPEcLscLscOXaabaabcMucPHcPIcPacPacPJcMucPKcPLdcOcPNcPOcPPdcPcECcPRcPScPTcGOcPUcECdcQcPWcPXcPNcPNdcRcPZcECcQacLQcQbcQccDFcMNcDFcLScLTcQdcQecMScQfdcScIDcQhcDQcQicQjcQjcCKcHBcoDcNhcNgbVibVicEhbVibVibGycNibVibVicGwbVibVicNkcNjcNmcNlcNQcoAcoAcoAcoAbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbikaabaabbwocNRcunbOMcyJcyJcyJbxXbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikaabaabcPEcLscLscOXaabbikcMucQscPIcPacPacQtcMucQucQvcECcQwcQxcQxdcTcECcQycQzcQAcQBdcUcECcQxcQxcQxcQwcECcQCcQucECcNHcTacQDcQEcQFcQGcQHcQIcQJcQKcIAcQLcJCdcVcJEcNMcEVcQNcQOcQPcCKcHBcoAcoAcEhcdbcNScEhcNTbVibGycNVcNUcNXcNWcMocMocNYcGvbVicNZcoAcoAbikbikaabbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbwobwobwobwobwocOObOMcyJcOQcOPbxXbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcPEcOXdeBcPEbikbikcMucQVcQWcPacPacQXcMucQYcQZdcWcRacRbcRccRdcRecRfcRgcRhcRicPucRecRbcRbcRbcRjdcWcRkcRlcECcNHcRmcMNcRncRocQJcRpcRqcRrcRscRtcRucRvdcXcKQcOLcDQcRxcQjcQjcCKcHBcoAbGycORcOTcOScNYcgmbVibGybGybGycGvcOUbGycGqcFicHrbVicEhbwobikbikbikaabbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbwobxXbxXbxXcyKcOOcOVcyJcPAbxXbxXbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjdbikbikbikbikbikbikbikbikbikbikbikbikbikbikcOgcOhcOhdeFcOhcOhcPFcMucRzcOZcPacPacRAcMucMHcRBcECcECcRecRecRecRecRCcPNcRDcPNcREcRecRecRecRecECcECcRFcRGcECcNHcLQcRHcRIcRocRJcRKcDFcDFcRLcJxcRJcJCcRMcJEcNMcCKcCKcCKcCKcCKcHBcoAcITbGycPCcPBbGycQkbVibVicQlbVicQmcdccyHcQnbVibVibVicEhbwobikbikbikaabbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbwobwobwocQpcQocyKcOObOMbxXbxXbxXcYgbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqcQTcQqcRycQUcMucRNcROcPacPacRPcMucECcRQcECcRRcRScRScLOcLOcLOcLOcLOcLOcLOcLOcLOcRScRScRTcECcRUcECcECcNHcLQcRVcQFcRWcRXcRYcRZcSacRXcSacRXcSbcQJcSccNMcTbcTScTScTScTScUdcYhcYicYicYkcYjcYicYicYicYlcYncYmcQmcYobVicQmbVicYpbVicEhbwocxHcxHcxHbwocxHcxHcxHcxHbwocxHcxHcxHcxHbwobwobwobwobwobwobwobwobwobwoczMbwocyKbwocYqbxXcHycOObOMcyJcyJcLecyJbwoaabczrbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqcQTcQTdlcdlbcMucSdcSecPacPacSfcMucSgcShcSicSjbikbikaabbikbikbikbikbikbikbikaabbikbikcSkcSlcSmcSncECcSocMJcFUcSqcSrcSscStcSucSvcSwcDFcSxcSycSzcSAcNMcUkbikaabaabbikcYscYrdbwcYtcYwcYvcYycYxcYicqTbGybGycYzcdccYAcGvbGybGycYBcMncYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYDcYCcYCcYCcYCcmvcyJbFecnGbxXcYEczMbwobwobwocLebwocOObOMcyJcYFbxXbxXbwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqdldcQqdlfdlecMucRzcOZcPacPacSCcMucSDcSEcSEbikbikaabaabaabaabaabaabaabaabaabaabaabbikbikcSEcSEcSDcECcMHcLQcSAcSFcSGcSHcSIcSJcSAcSHcSAcJEcSAcJEcSAcNMcUkbikacGacGacGcYhcYGcYIcYHcYKcYJcYMcYLcYibGybGybVicQmcYNbVicGvcGqcFicYPcYOcYQcYQcYQcYQcYQcYQcYScYRcYQcYQcYQcYQcYQcYQcYUcYTcYWcYVcYYcYXcYZcYZcYZcYZcZbcZacZccYZcYZcYZcYZcZdbXScyJcOPbxXcZebwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdlgcOhcOhcOhcOhcOhdlhcMucSLcSMcPacPacSNcMucSOcSPcSEaabaabaabcSQbikbikbikbikcSQbikbikcSQaabaabaabcSEcSRcSScECcMHcECaabcSTaabcSUcSVcSWcSXcSYcSXcSZcSXcSZcUmcUqcUkbikacGaabbikcYhcZfcYIcZgcZicZhcZkcZjcYicZlbGybGycGvcZmbVicGvcGvcZncoAcoAcxHcxHcxHcxHbwocxHcxHcxHcxHbwocxHcxHcxHcxHbwocZobxXcyJcJMbxXcyJcyJcxHcxHckVcyJcZpbxXcZpcyJcZrcZqcoVbwobwobwobwobwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcMucTccSMcPacPacSCcMucTdcSEcTebikbikaabbikbikbikbikbikcTfbikbikbikaabbikbikcSEcSEcTdcECcMHcECcCKcTgcEVcTgcCKcTgcEVcTgcCKcThcEVcTicCKaabcUkbikacGaabaabcYhcZscZucZtcZvcZhcZxcZwcZycYPcZAcZzcGvcdcbGycZBcQmbVicoAbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbwocZCczfcyJcZDbxXcyJbikbikbikbikcyJbxXbxXcNRcqecqecqfcqgcqebikaabaabaabaabcZEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcMucTjcOZcPacPacTkcMucTlcTmcSEbikbikaabbikbikaabaabaabaabaabbikbikaabbikbikcSEcTncTocECcTpcECcCKcTqcTrcTscCKcTtcTucTvcCKcTwcTxcTycCKaabcUkbikacGbikaabcZGcZFcZucZHcZJcZIcZLcZKcYicZMcQmbVicQmcZNbVicZOcQmcozcoAcoDcoDcoDazybikaabbikbikbikbikbikbikbikbikbikbwocZPcyJcyJcHxbxXcyJcyJcxHcxHcyJcyJbxXcZQczfcqecrecrfcrgcqebikbikaabaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaaccMucMucMucMucMucMucMucECcSDcSEbikbikaabcSQaabaabaacaacaacaabcTzbikaabbikbikcSEcSDcECcECcMHcECcCKcTAcTBcTAcCKcTCcTDcTCcCKcTEcTFcTEcCKaabcUkbikacGbikbikcYhcZRcZTcZScZucZUcZWcZVcYicZXcZZcZYdaacAhbGycGvcGvdabdaddacbGydaeazybikaabbikcxHcxHcxHbwobwobwobwobwobwodafcyKcyJdagbxXbxXcyJbxXbxXbxXbxXcYqbxXcPAcqecrZcsacsbcqeaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaacaacaabaabaabacGacGcECcECcTGcSEbikbikaabbikbikaabcTHcTIaacaabbikbikaabbikbikcSEcTJcECcECcMHcECcCKcTAcTKcTAcCKcTCcTLcTCcCKcTEcTMcTEcCKaabcUkbikacGbikbikcYhcYhcYhdahcYhdaidajdaicYicZXdakbGycGzdalcFicHrcGvdamcoAcoDcoDcoDdanaabaabbikcxHdaodapcyJbxXdaqdarcNRcyJdasbxXcyJdatbxXbxXdaubxXbwobwobwocxHcxHbwocqectrctscttcqeaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaabaabbikbikaabaabacGcECcECcSDcSEbikbikaabbikcTNaabaacaacaacaabaabcSQaabbikbikcSEcSDcECcECcMHcECcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKaabcUkbikaqZbikbikbikbikbikdavcYhdawdaydaxcYibGydazbGybGydaAdaBcGqdaDdaCcoAbikbikbikbikbikaabbikcxHdaEdaFdaubxXcQobxXbxXdaucZobxXcyJcyJcyJcyJcyJbxXbwoaabbikbikbikaabcuzcuzcuAcuzcuzaabaabczraabaabcZEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabcECcTncTocSEbikbikaabbikbikaabaabaabaabaabbikbikaabbikbikcSEcTlcTmcECcUscECcECcECcECcUvcTScTScTScTScTScTScTScTScTScTScUwbikacGaabaabaabaabaabdaGcYhdaidaHdaicYhcoAdaIcFicFidaJdaLdaKcoAcoAcoAbikbikbikbikbikaabbikcxHdaodaMcyJcNRbxXbxXdaNcyJdaObxXbxXbxXbxXbxXbxXbxXbwoaabbikbikbikaabbikcuzcvEcuzbikaabbikaabbikbikaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikaabcECcTdcSEcTPbikbikcTQbikbikbikaabbikbikbikbikbikaabbikbikcSEcSEcTdcECddhddjddicMHddkcUwbikbikbikbikbikbikbikbikbikbikbikbikacGaabaabaabaabaabdaGcYhdaPdaRdaQdaSaabcoAcoAcoDdaTcoDcoAcoAbikaabbikbikbikbikbikaabaabcxHcxHcxHbwobwobwobxXcyJbwodaUbwobwocNRbFeczfbzNczMbwoaabbikbikbikaabbikcuzcwMcuzbikaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcECcTXcTYcSEaabaabaabcSQbikbikcSQbikbikbikbikcSQaabcTZaabcSEcUacUbcECddlcECcECcECcECcECcECacGacGacGaqZacGacGacGacGacGacGacGacGaahbikbikbikbikdaGcYhcYhdaVcYhcYhbikaabbikbikdaWbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbwodaFdaXbwocGxaabbwobwocxHcxHczMbwobikaabbikbikbikaabbikbikcxZbikbikaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcECcUfcUgcUhbikbikaabaabaabaabaabaabaabaabaabaabaabbikbikcUicUgcUjcECddmcTRddnddocTTcTUcTVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdcdazycYhdaYcYhdaZaabaabbikbikdctbikbikbikbikbikbikbikbikbikbikbikaabaabbikaahbikbikbwodbbdbabwodbcaabbikaabbikbikaabbikbikaabbikbikbikaabbikbikcznbikbikaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcNycECcKDcSkcUhbikbikaabbikbikbikbikbikbikbikaabbikbikcUicSjcKDcECcECddmcUcddpcUlddqcUecTVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikazydbddbedbdazyaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabbikbikbikcxHdbfcxHcxHaabczrbikaabbikbikaabbikagQagQacGaqZaabaabaabaabcGEaabaabaabaabczragiagQagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikcECcECcSkcRScRScRScRScRScRScRScRScRScRScRScRScRScSjcECcECcECcECddrcECcECcECcECcUncECaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabazybikbikbikazyaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikcxHdbgcxHbikbikbikbikaabbikbikaabbikagQbikbikaabbikaabbikbikcHNbikbikaabbikaabbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikcECcECcECcECcECcECcECcECcECcECcECcECcECcECcECcECcECbikcECddtaHmcECbikbikbikcUocUxbikbikbikaabbikbikbikaabbikbikbikaabbikbikbikaabbikaabazyazyazyazyazybikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikcxHdbhcxHbikbikbikbikaabbikbikaabbikagQbikcIYcIYcIYcIYcIYaabcIZaabcIYcIYcIYcIYcIYbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcECcECaIpcECcECcECcECcUrdducUuddxcUucUtcUuddxcUucUucUuddxcUucUtcUuddxcUuddvcUpaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikcxHdbicxHbikbikbikbikbikbikbikaabbikagQaabcKccKdcKdcKdcKdcKecKfcKgcKhcKhcKhcKhcKiaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjdbikbikbikbikbikbikbikbikbikbikbikbikbikbikcOgcOhcOhdeFcOhcOhcPFcMucRzcOZcPacPacRAcMucMHcRBcECcECcRecRecRecRecRCcRRcRDcPNcREcRecRecRecRecECcECcRFcRGcECcNHcLQcRHcRIcRocRJcRKcDFcDFcRLcJxcRJcJCcRMcJEcNMcCKcCKcCKcCKcCKcHBcoAcITbGycPCcPBbGycQkbVibVicQlbVicQmcdccyHcQnbVibVibVicEhbwobikbikbikaabbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbwobwobwocQpcQocyKcOObOMbxXbxXbxXcYgbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqcQTcQqcRycQUcMucRNcROcPacPacRPcMucECcRQcECcRTaaccShcRecRecRecRecSicRecRecRecRecShaaccRTcECcRUcECcECcNHcLQcRVcQFcRWcRXcRYcRZcSacRXcSacRXcSbcQJcSccNMcTbcTScTScTScTScUdcYhcYicYicYkcYjcYicYicYicYlcYncYmcQmcYobVicQmbVicYpbVicEhbwocxHcxHcxHbwocxHcxHcxHcxHbwocxHcxHcxHcxHbwobwobwobwobwobwobwobwobwobwoczMbwocyKbwocYqbxXcHycOObOMcyJcyJcLecyJbwoaabczrbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqcQTcQTdlcdlCcMucSdcSecPacPacSfcMucSgcSmcSlaaccTfcTIcTIcTIcTIcTIcTQcTIcTIcTIcTIcTIcTZaacddaddbcSncECcSocMJcFUcSqcSrcSscStcSucSvcSwcDFcSxcSycSzcSAcNMcUkbikaabaabbikcYscYrdbwcYtcYwcYvcYycYxcYicqTbGybGycYzcdccYAcGvbGybGycYBcMncYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYDcYCcYCcYCcYCcmvcyJbFecnGbxXcYEczMbwobwobwocLebwocOObOMcyJcYFbxXbxXbwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqdldcQqdlfdlecMucRzcOZcPacPacSCcMucSDcSEcSEbikddcaacaacaacaacaacaacaacaacaacaacaacddcbikcSEcSEcSDcECcMHcLQcSAcSFcSGcSHcSIcSJcSAcSHcSAcJEcSAcJEcSAcNMcUkbikacGacGacGcYhcYGcYIcYHcYKcYJcYMcYLcYibGybGybVicQmcYNbVicGvcGqcFicYPcYOcYQcYQcYQcYQcYQcYQcYScYRcYQcYQcYQcYQcYQcYQcYUcYTcYWcYVcYYcYXcYZcYZcYZcYZcZbcZacZccYZcYZcYZcYZcZdbXScyJcOPbxXcZebwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdlgcOhcOhcOhcOhcOhdlhcMucSLcSMcPacPacSNcMucSOcSPdddaabddcaaccSQbikbikbikbikcSQbikbikcSQaacddcbikddecSRcSScECcMHcECaabcSTaabcSUcSVcSWcSXcSYcSXcSZcSXcSZcUmcUqcUkbikacGaabbikcYhcZfcYIcZgcZicZhcZkcZjcYicZlbGybGycGvcZmbVicGvcGvcZncoAcoAcxHcxHcxHcxHbwocxHcxHcxHcxHbwocxHcxHcxHcxHbwocZobxXcyJcJMbxXcyJcyJcxHcxHckVcyJcZpbxXcZpcyJcZrcZqcoVbwobwobwobwobwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcMucTccSMcPacPacSCcMucTdcSEcTebikddfddgbikbikbikbikbikdlmbikbikbikdlodlnbikcSEcSEcTdcECcMHcECcCKcTgcEVcTgcCKcTgcEVcTgcCKcThcEVcTicCKaabcUkbikacGaabaabcYhcZscZucZtcZvcZhcZxcZwcZycYPcZAcZzcGvcdcbGycZBcQmbVicoAbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbwocZCczfcyJcZDbxXcyJbikbikbikbikcyJbxXbxXcNRcqecqecqfcqgcqebikaabaabaabaabcZEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcMucTjcOZcPacPacTkcMucTlcTmcSEbikddcaacbikbikaabaabaabaabaabbikbikaacddcbikcSEcTncTocECcTpcECcCKcTqcTrcTscCKcTtcTucTvcCKcTwcTxcTycCKaabcUkbikacGbikaabcZGcZFcZucZHcZJcZIcZLcZKcYicZMcQmbVicQmcZNbVicZOcQmcozcoAcoDcoDcoDazybikaabbikbikbikbikbikbikbikbikbikbwocZPcyJcyJcHxbxXcyJcyJcxHcxHcyJcyJbxXcZQczfcqecrecrfcrgcqebikbikaabaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaaccMucMucMucMucMucMucMucECcSDcSEbikddcaaccSQaabaabdlqdlpdlraabcTzbikaacddcbikcSEcSDcECcECcMHcECcCKcTAcTBcTAcCKcTCcTDcTCcCKcTEcTFcTEcCKaabcUkbikacGbikbikcYhcZRcZTcZScZucZUcZWcZVcYicZXcZZcZYdaacAhbGycGvcGvdabdaddacbGydaeazybikaabbikcxHcxHcxHbwobwobwobwobwobwodafcyKcyJdagbxXbxXcyJbxXbxXbxXbxXcYqbxXcPAcqecrZcsacsbcqeaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaacaacaabaabaabacGacGcECcECcTGcSEbikddfddgbikbikaabdlscTHdltaabbikbikdlodlnbikcSEcTJcECcECcMHcECcCKcTAcTKcTAcCKcTCcTLcTCcCKcTEcTMcTEcCKaabcUkbikacGbikbikcYhcYhcYhdahcYhdaidajdaicYicZXdakbGycGzdalcFicHrcGvdamcoAcoDcoDcoDdanaabaabbikcxHdaodapcyJbxXdaqdarcNRcyJdasbxXcyJdatbxXbxXdaubxXbwobwobwocxHcxHbwocqectrctscttcqeaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaabaabbikbikaabaabacGcECcECcSDcSEbikddcaacbikcTNaabdlvdludlwaabaabcSQaacddcbikcSEcSDcECcECcMHcECcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKaabcUkbikaqZbikbikbikbikbikdavcYhdawdaydaxcYibGydazbGybGydaAdaBcGqdaDdaCcoAbikbikbikbikbikaabbikcxHdaEdaFdaubxXcQobxXbxXdaucZobxXcyJcyJcyJcyJcyJbxXbwoaabbikbikbikaabcuzcuzcuAcuzcuzaabaabczraabaabcZEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabcECcTncTocSEbikddcaacbikbikaabaabaabaabaabbikbikaacddcbikcSEcTlcTmcECcUscECcECcECcECcUvcTScTScTScTScTScTScTScTScTScTScUwbikacGaabaabaabaabaabdaGcYhdaidaHdaicYhcoAdaIcFicFidaJdaLdaKcoAcoAcoAbikbikbikbikbikaabbikcxHdaodaMcyJcNRbxXbxXdaNcyJdaObxXbxXbxXbxXbxXbxXbxXbwoaabbikbikbikaabbikcuzcvEcuzbikaabbikaabbikbikaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikaabcECcTdcSEcTPbikddfddgbikbikbikaabbikbikbikbikbikdlodlnbikcSEcSEcTdcECddhddjddicMHddkcUwbikbikbikbikbikbikbikbikbikbikbikbikacGaabaabaabaabaabdaGcYhdaPdaRdaQdaSaabcoAcoAcoDdaTcoDcoAcoAbikaabbikbikbikbikbikaabaabcxHcxHcxHbwobwobwobxXcyJbwodaUbwobwocNRbFeczfbzNczMbwoaabbikbikbikaabbikcuzcwMcuzbikaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcECcTXcTYdddaabddcaaccSQbikbikcSQbikbikbikbikcSQaacddcbikddecUacUbcECddlcECcECcECcECcECcECacGacGacGaqZacGacGacGacGacGacGacGacGaahbikbikbikbikdaGcYhcYhdaVcYhcYhbikaabbikbikdaWbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbwodaFdaXbwocGxaabbwobwocxHcxHczMbwobikaabbikbikbikaabbikbikcxZbikbikaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcECcUfcUgcUhbikddcaacaacdlxaacaacdlxaacaacdlxaacaacddcbikcUicUgcUjcECddmcTRddnddocTTcTUcTVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdcdazycYhdaYcYhdaZaabaabbikbikdctbikbikbikbikbikbikbikbikbikbikbikaabaabbikaahbikbikbwodbbdbabwodbcaabbikaabbikbikaabbikbikaabbikbikbikaabbikbikcznbikbikaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcNycECcECdlybikdlzcTIcTIdlAcTIcTIdlAcTIcTIdlAcTIcTIdlBbikdlycECcECcECddmcUcddpcUlddqcUecTVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikazydbddbedbdazyaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabbikbikbikcxHdbfcxHcxHaabczrbikaabbikbikaabbikagQagQacGaqZaabaabaabaabcGEaabaabaabaabczragiagQagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcECcKDcSkcUhaabaabaabaabbikbikbikbikbikaabaabaabaabcUicSjcKDcECcECddrcECcECcECcECcUncECaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabazybikbikbikazyaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikcxHdbgcxHbikbikbikbikaabbikbikaabbikagQbikbikaabbikaabbikbikcHNbikbikaabbikaabbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikcECcECcSkcRScRScRScRScRScRScRScRScRScRScRScRScRScSjcECcECcECddtaHmcECbikbikbikcUocUxbikbikbikaabbikbikbikaabbikbikbikaabbikbikbikaabbikaabazyazyazyazyazybikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikcxHdbhcxHbikbikbikbikaabbikbikaabbikagQbikcIYcIYcIYcIYcIYaabcIZaabcIYcIYcIYcIYcIYbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcECcECcECcECcECcECcECcECcECcECcECcECcECcECcECcECcECbikcECcECaIpcECcECcECcECcUrdducUuddxcUucUtcUuddxcUucUucUuddxcUucUtcUuddxcUuddvcUpaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikcxHdbicxHbikbikbikbikbikbikbikaabbikagQaabcKccKdcKdcKdcKdcKecKfcKgcKhcKhcKhcKhcKiaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcECcMHcMHcUyaIraIrcUAaabaabbikbikbikaabbikbikbikaabbikbikbikaabbikbikbikcUDcULcUxaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabdbHdbjdbjbikbikbikbikbikbikbikaabbikagQaabcLrcLrcLrcLrcLrbikcIZbikcLrcLrcLrcLrcLraabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcECcTpcMHcUCcUBcUFcUEaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabczraabaabcUDcUzcUpbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikaabbikagQbikaabbikaabaabaabbikcIZbikaabbikaabbikaabbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcECcTpcMHdlDcUBcUFcUEaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabczraabaabcUDcUzcUpbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikaabbikagQbikaabbikaabaabaabbikcIZbikaabbikaabbikaabbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjebikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcECcUIcMHcUGaIraIrcUHaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikcUDcULcUpbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikagQbikcIYcIYcIYcIYcIYaabcIZaabcIYcIYcIYcIYcIYaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcNycECcECcECcECcECcECaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikaabcUDcUMaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabcKccKdcKdcKdcKdcKecKfcKgcKhcKhcKhcKhcObaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikaabcUNcUOcUNcUPcUPcUQcUQcUQcUQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabcLrcLrcLrcLrcLrbikcIZaabcLrcLrcLrcLrcLrbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik From 92e15c1b2a4241be4258fbb11753f98976dc8a36 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 31 Dec 2015 01:23:44 -0500 Subject: [PATCH 011/442] BREAK ALL THE THINGS --- code/__HELPERS/global_lists.dm | 6 +- code/_globalvars/lists/objects.dm | 4 +- code/game/objects/items/devices/scanners.dm | 2 +- .../mob/living/carbon/carbon_defenses.dm | 10 + .../mob/living/carbon/carbon_defines.dm | 3 +- .../mob/living/carbon/human/examine.dm | 2 +- .../living/carbon/human/species/species.dm | 5 +- code/modules/mob/living/living_defines.dm | 4 +- .../simple_animal/hostile/mining_mobs.dm | 2 +- code/modules/surgery/bones.dm | 12 + code/modules/surgery/encased.dm | 32 +- code/modules/surgery/face.dm | 64 ++-- code/modules/surgery/generic.dm | 307 ++++++++-------- code/modules/surgery/helpers.dm | 78 +++++ code/modules/surgery/implant.dm | 313 +++++++++-------- code/modules/surgery/organs/organ_external.dm | 3 +- code/modules/surgery/organs_internal.dm | 331 +++++++++++++----- code/modules/surgery/other.dm | 24 +- code/modules/surgery/robotics.dm | 119 ++++--- code/modules/surgery/slime.dm | 5 + code/modules/surgery/surgery.dm | 106 ++++-- code/modules/surgery/tools.dm | 4 + paradise.dme | 1 + 23 files changed, 908 insertions(+), 529 deletions(-) create mode 100644 code/modules/surgery/helpers.dm diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 500553e1f28..8e8f2ca2485 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -15,8 +15,10 @@ //socks init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list, socks_m, socks_f) - init_subtypes(/datum/surgery_step, surgery_steps) - sort_surgeries() + //init_subtypes(/datum/surgery_step, surgery_steps) + + for(var/path in (subtypesof(/datum/surgery))) + surgeries_list += new path() init_datum_subtypes(/datum/job, joblist, list(/datum/job/ai, /datum/job/cyborg), "title") init_datum_subtypes(/datum/superheroes, all_superheroes, null, "name") diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 8cca8a70898..67e27c9697b 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -26,4 +26,6 @@ var/global/list/power_monitors = list() var/global/list/tracking_implants = list() //list of all tracking implants to work out what treks everyone are on. Sadly not on lavaworld not implemented... var/global/list/beacons = list() -var/global/list/shuttle_caller_list = list() //list of all communication consoles and AIs, for automatic shuttle calls when there are none. \ No newline at end of file +var/global/list/shuttle_caller_list = list() //list of all communication consoles and AIs, for automatic shuttle calls when there are none. + +var/global/list/surgeries_list = list() //list of all surgeries by name, associated with their path. \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 17ba0c69436..11edd047df3 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -247,7 +247,7 @@ REAGENT SCANNER user.show_message("\blue Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.") var/implant_detect for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs) - if(CI.status == ORGAN_ROBOT && !(H.species && H.species.name == "Machine")) + if(CI.status == ORGAN_ROBOT ) implant_detect += "[H.name] is modified with a [CI.name].
" if(implant_detect) user.show_message("Detected cybernetic modifications:") diff --git a/code/modules/mob/living/carbon/carbon_defenses.dm b/code/modules/mob/living/carbon/carbon_defenses.dm index ab1c27ca2ee..45c15d35f8a 100644 --- a/code/modules/mob/living/carbon/carbon_defenses.dm +++ b/code/modules/mob/living/carbon/carbon_defenses.dm @@ -19,4 +19,14 @@ /mob/living/carbon/water_act(volume, temperature, source) if(volume > 10) //anything over 10 volume will make the mob wetter. wetlevel = min(wetlevel + 1,5) + ..() + + +/mob/living/carbon/attackby(obj/item/I, mob/user, params) + if(lying) + if(surgeries.len) + if(user != src && user.a_intent == "help") + for(var/datum/surgery/S in surgeries) + if(S.next_step(user, src)) + return 1 ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 5c1458a73e1..43e782eecfa 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -20,7 +20,8 @@ var/obj/item/clothing/suit/wear_suit = null //TODO: necessary? Are they even used? ~Carn //Surgery info - var/datum/surgery_status/op_stage = new/datum/surgery_status + //var/datum/surgery_status/op_stage = new/datum/surgery_status + //Active emote/pose var/pose = null diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index cb16f0eec19..38cdbe5bac3 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -257,7 +257,7 @@ msg += "[t_He] [t_has] suddenly fallen asleep.\n" if(!src.get_int_organ(/obj/item/organ/internal/brain)) - msg += "It appears that thier brain is missing...\n" + msg += "It appears that their brain is missing...\n" var/list/wound_flavor_text = list() var/list/is_destroyed = list() diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 5a01fa7ffca..e79d35e00f8 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -133,6 +133,9 @@ /datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. + if(!ticker) return //FUCKING MONKIES! + + for(var/obj/item/organ/organ in H.contents) if((organ in H.organs)) qdel(organ) @@ -157,7 +160,7 @@ for(var/index in has_organ) var/organ = has_organ[index] - H.internal_organs += new organ(null) + H.internal_organs += new organ(H) for(var/obj/item/organ/internal/I in H.internal_organs) I.insert(H) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 104eb6048c0..0cfa3657d47 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -51,4 +51,6 @@ var/last_played_vent var/list/datum/action/actions = list() - var/step_count = 0 \ No newline at end of file + var/step_count = 0 + + var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them. \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index b3bce76f8b3..ab26322d958 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -296,7 +296,7 @@ var/mob/living/carbon/human/H = owner var/datum/reagent/blood/B = locate() in H.vessel.reagent_list //Grab some blood var/blood_volume = round(H.vessel.get_reagent_amount("blood")) - if(B && blood_volume < 560 && blood_volume) + if(B && blood_volume < H.max_blood && blood_volume) B.volume += 2 // Fast blood regen /obj/item/organ/internal/hivelord_core/attack(mob/living/M as mob, mob/living/user as mob) diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 9bfb67034ab..8eb9f9e0b72 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -3,6 +3,18 @@ // BONE SURGERY // ////////////////////////////////////////////////////////////////// +/datum/surgery/bone_repair + name = "bone repair" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + possible_locs = list("chest","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") + + +/datum/surgery/bone_repair/skull + name = "bone repair" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + possible_locs = list("head") + + /datum/surgery_step/glue_bone allowed_tools = list( /obj/item/weapon/bonegel = 100, \ diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 1e59a3ea458..6bf7d56de19 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -6,7 +6,7 @@ priority = 2 can_infect = 1 blood_level = 1 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return 0 @@ -25,13 +25,13 @@ min_duration = 50 max_duration = 70 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return var/obj/item/organ/external/affected = target.get_organ(target_zone) return ..() && affected && affected.open == 2 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -42,7 +42,7 @@ target.custom_pain("Something hurts horribly in your [affected.name]!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -52,7 +52,7 @@ "\blue You have cut [target]'s [affected.encased] open with \the [tool].") affected.open = 2.5 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -74,13 +74,13 @@ min_duration = 30 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return var/obj/item/organ/external/affected = target.get_organ(target_zone) return ..() && affected && affected.open == 2.5 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -92,7 +92,7 @@ target.custom_pain("Something hurts horribly in your [affected.name]!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -108,7 +108,7 @@ if(prob(10)) affected.fracture() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -130,14 +130,14 @@ min_duration = 20 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return var/obj/item/organ/external/affected = target.get_organ(target_zone) return ..() && affected && affected.open == 3 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -149,7 +149,7 @@ target.custom_pain("Something hurts horribly in your [affected.name]!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -161,7 +161,7 @@ affected.open = 2.5 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -187,14 +187,14 @@ min_duration = 20 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return var/obj/item/organ/external/affected = target.get_organ(target_zone) return ..() && affected && affected.open == 2.5 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -206,7 +206,7 @@ target.custom_pain("Something hurts horribly in your [affected.name]!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index 9513bbe8f07..57c4dc29011 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -2,11 +2,15 @@ ////////////////////////////////////////////////////////////////// // FACE SURGERY // ////////////////////////////////////////////////////////////////// +/datum/surgery/plastic_surgery + name = "plastic surgery" + steps = list(/datum/surgery_step/generic/cut_face, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/face/mend_vocal, /datum/surgery_step/face/fix_face,/datum/surgery_step/face/cauterize) + possible_locs = list("head") /datum/surgery_step/face priority = 2 can_infect = 0 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return 0 var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -24,20 +28,20 @@ min_duration = 90 max_duration = 110 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ..() && target_zone == "mouth" && target.op_stage.face == 0 + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return ..() //&& target_zone == "mouth" && target.op_stage.face == 0//I NEED TO REPLACE THE OPSTAGE SHIT! - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts to cut open [target]'s face and neck with \the [tool].", \ "You start to cut open [target]'s face and neck with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\blue [user] has cut open [target]'s face and neck with \the [tool]." , \ "\blue You have cut open [target]'s face and neck with \the [tool].",) - target.op_stage.face = 1 + //target.op_stage.face = 1//DID I MENTION I NEED TO REPLACE THE OPSTAGE SHIT! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \ "\red Your hand slips, slicing [target]'s throat wth \the [tool]!" ) @@ -54,20 +58,20 @@ min_duration = 70 max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ..() && target.op_stage.face == 1 + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return ..()// && target.op_stage.face == 1 //NO REALLY NED TO REPLACE, MAYBE WITH FUCKING istype(S.get_surgery_step(), /datum/surgery_step/cut_face)) OR SOMETHING - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts mending [target]'s vocal cords with \the [tool].", \ "You start mending [target]'s vocal cords with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\blue [user] mends [target]'s vocal cords with \the [tool].", \ "\blue You mend [target]'s vocal cords with \the [tool].") - target.op_stage.face = 2 + //target.op_stage.face = 2//I NEED TO REPLACE THE OPSTAGE SHIT! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\red [user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!", \ "\red Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!") target.losebreath += 4 @@ -81,20 +85,20 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ..() && target.op_stage.face == 2 + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return ..() //&& target.op_stage.face == 2//I NEED TO REPLACE THE OPSTAGE SHIT! - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts pulling skin on [target]'s face back in place with \the [tool].", \ "You start pulling skin on [target]'s face back in place with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\blue [user] pulls skin on [target]'s face back in place with \the [tool].", \ "\blue You pull skin on [target]'s face back in place with \the [tool].") - target.op_stage.face = 3 + //target.op_stage.face = 3//I NEED TO REPLACE THE OPSTAGE SHIT! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \ "\red Your hand slips, tearing skin on [target]'s face with \the [tool]!") @@ -111,28 +115,28 @@ min_duration = 70 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ..() && target.op_stage.face > 0 + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return ..()// && target.op_stage.face > 0//I NEED TO REPLACE THE OPSTAGE SHIT! - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] is beginning to cauterize the incision on [target]'s face and neck with \the [tool]." , \ "You are beginning to cauterize the incision on [target]'s face and neck with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] cauterizes the incision on [target]'s face and neck with \the [tool].", \ "\blue You cauterize the incision on [target]'s face and neck with \the [tool].") affected.open = 0 affected.status &= ~ORGAN_BLEEDING - if (target.op_stage.face == 3) - var/obj/item/organ/external/head/h = affected - h.disfigured = 0 - h.update_icon() - target.regenerate_icons() - target.op_stage.face = 0 + //if (target.op_stage.face == 3)//I NEED TO REPLACE THE OPSTAGE SHIT! + var/obj/item/organ/external/head/h = affected + h.disfigured = 0 + h.update_icon() + target.regenerate_icons() + //target.op_stage.face = 0//I NEED TO REPLACE THE OPSTAGE SHIT! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, leaving a small burn on [target]'s face with \the [tool]!", \ "\red Your hand slips, leaving a small burn on [target]'s face with \the [tool]!") diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 611963ed915..6deab483af8 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -5,19 +5,20 @@ /datum/surgery_step/generic/ can_infect = 1 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (target_zone == "eyes") //there are specific steps for eye surgery - return 0 - if (!hasorgans(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (affected == null) - return 0 - if (affected.status & ORGAN_DESTROYED) - return 0 - if (affected.status & ORGAN_ROBOT) - return 0 - return 1 + +/datum/surgery_step/generic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (target_zone == "eyes") //there are specific steps for eye surgery + return 0 + if (!hasorgans(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (affected == null) + return 0 + if (affected.status & ORGAN_DESTROYED) + return 0 + if (affected.status & ORGAN_ROBOT) + return 0 + return 1 /datum/surgery_step/generic/cut_with_laser allowed_tools = list( @@ -30,38 +31,38 @@ min_duration = 90 max_duration = 110 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(..()) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected.open == 0 && target_zone != "mouth" +/datum/surgery_step/generic/cut_with_laser/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(..()) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected.open == 0 && target_zone != "mouth" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/generic/cut_with_laser/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts the bloodless incision on [target]'s [affected.name] with \the [tool].", \ "You start the bloodless incision on [target]'s [affected.name] with \the [tool].") target.custom_pain("You feel a horrible, searing pain in your [affected.name]!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You have made a bloodless incision on [target]'s [affected.name] with \the [tool].",) - //Could be cleaner ... - affected.open = 1 +/datum/surgery_step/generic/cut_with_laser/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message(" [user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].", \ + " You have made a bloodless incision on [target]'s [affected.name] with \the [tool].",) + //Could be cleaner ... + affected.open = 1 - if(istype(target) && !(target.species.flags & NO_BLOOD)) - affected.status |= ORGAN_BLEEDING + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING - affected.createwound(CUT, 1) - affected.clamp() - spread_germs_to_organ(affected, user) + affected.createwound(CUT, 1) + affected.clamp() + spread_germs_to_organ(affected, user) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 7.5) - affected.createwound(BURN, 12.5) +/datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message(" [user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!") + affected.createwound(CUT, 7.5) + affected.createwound(BURN, 12.5) /datum/surgery_step/generic/incision_manager allowed_tools = list( @@ -71,32 +72,32 @@ min_duration = 80 max_duration = 120 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(..()) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected.open == 0 && target_zone != "mouth" +/datum/surgery_step/generic/incision_manager/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(..()) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected.open == 0 && target_zone != "mouth" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/generic/incision_manager/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].", \ "You start to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].") target.custom_pain("You feel a horrible, searing pain in your [affected.name] as it is pushed apart!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].", \ - "\blue You have constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].",) - affected.open = 1 +/datum/surgery_step/generic/incision_manager/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].", \ + "\blue You have constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].",) + affected.open = 1 - if(istype(target) && !(target.species.flags & NO_BLOOD)) - affected.status |= ORGAN_BLEEDING + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING - affected.createwound(CUT, 1) - affected.clamp() - affected.open = 2 + affected.createwound(CUT, 1) + affected.clamp() + affected.open = 2 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/generic/incision_manager/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!", \ "\red Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!") @@ -113,30 +114,30 @@ min_duration = 90 max_duration = 110 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!ishuman(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected.open == 0 && target_zone != "mouth" +/datum/surgery_step/generic/cut_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!ishuman(target) || !isalien(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected.open == 0 && target_zone != "mouth" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/generic/cut_open/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts the incision on [target]'s [affected.name] with \the [tool].", \ "You start the incision on [target]'s [affected.name] with \the [tool].") target.custom_pain("You feel a horrible pain as if from a sharp knife in your [affected.name]!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/generic/cut_open/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] has made an incision on [target]'s [affected.name] with \the [tool].", \ "\blue You have made an incision on [target]'s [affected.name] with \the [tool].",) affected.open = 1 affected.status |= ORGAN_BLEEDING affected.createwound(CUT, 1) - if (target_zone == "head") - target.brain_op_stage = 1 + //if (target_zone == "head") + // target.brain_op_stage = 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/generic/cut_open/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!", \ "\red Your hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!") @@ -152,25 +153,27 @@ min_duration = 40 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + +/datum/surgery_step/generic/clamp_bleeders/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) return ..() && affected.open && (affected.status & ORGAN_BLEEDING) - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + +/datum/surgery_step/generic/clamp_bleeders/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts clamping bleeders in [target]'s [affected.name] with \the [tool].", \ "You start clamping bleeders in [target]'s [affected.name] with \the [tool].") target.custom_pain("The pain in your [affected.name] is maddening!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/generic/clamp_bleeders/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] clamps bleeders in [target]'s [affected.name] with \the [tool].", \ "\blue You clamp bleeders in [target]'s [affected.name] with \the [tool].") affected.clamp() spread_germs_to_organ(affected, user) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ "\red Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) @@ -186,49 +189,49 @@ min_duration = 30 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/generic/retract_skin/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) return ..() && affected.open == 1 && !(affected.status & ORGAN_BLEEDING) - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "[user] starts to pry open the incision on [target]'s [affected.name] with \the [tool]." - var/self_msg = "You start to pry open the incision on [target]'s [affected.name] with \the [tool]." - if (target_zone == "chest") - msg = "[user] starts to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]." - self_msg = "You start to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]." - if (target_zone == "groin") - msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." - self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("It feels like the skin on your [affected.name] is on fire!",1) - ..() +/datum/surgery_step/generic/retract_skin/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/msg = "[user] starts to pry open the incision on [target]'s [affected.name] with \the [tool]." + var/self_msg = "You start to pry open the incision on [target]'s [affected.name] with \the [tool]." + if (target_zone == "chest") + msg = "[user] starts to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]." + self_msg = "You start to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]." + if (target_zone == "groin") + msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." + self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("It feels like the skin on your [affected.name] is on fire!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] keeps the incision open on [target]'s [affected.name] with \the [tool]." - var/self_msg = "\blue You keep the incision open on [target]'s [affected.name] with \the [tool]." - if (target_zone == "chest") - msg = "\blue [user] keeps the ribcage open on [target]'s torso with \the [tool]." - self_msg = "\blue You keep the ribcage open on [target]'s torso with \the [tool]." - if (target_zone == "groin") - msg = "\blue [user] keeps the incision open on [target]'s lower abdomen with \the [tool]." - self_msg = "\blue You keep the incision open on [target]'s lower abdomen with \the [tool]." - user.visible_message(msg, self_msg) - affected.open = 2 +/datum/surgery_step/generic/retract_skin/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/msg = "\blue [user] keeps the incision open on [target]'s [affected.name] with \the [tool]." + var/self_msg = "\blue You keep the incision open on [target]'s [affected.name] with \the [tool]." + if (target_zone == "chest") + msg = "\blue [user] keeps the ribcage open on [target]'s torso with \the [tool]." + self_msg = "\blue You keep the ribcage open on [target]'s torso with \the [tool]." + if (target_zone == "groin") + msg = "\blue [user] keeps the incision open on [target]'s lower abdomen with \the [tool]." + self_msg = "\blue You keep the incision open on [target]'s lower abdomen with \the [tool]." + user.visible_message(msg, self_msg) + affected.open = 2 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\red [user]'s hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!" - var/self_msg = "\red Your hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!" - if (target_zone == "chest") - msg = "\red [user]'s hand slips, damaging several organs [target]'s torso with \the [tool]!" - self_msg = "\red Your hand slips, damaging several organs [target]'s torso with \the [tool]!" - if (target_zone == "groin") - msg = "\red [user]'s hand slips, damaging several organs [target]'s lower abdomen with \the [tool]" - self_msg = "\red Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!" - user.visible_message(msg, self_msg) - target.apply_damage(12, BRUTE, affected, sharp=1) +/datum/surgery_step/generic/retract_skin/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/msg = "\red [user]'s hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!" + var/self_msg = "\red Your hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!" + if (target_zone == "chest") + msg = "\red [user]'s hand slips, damaging several organs [target]'s torso with \the [tool]!" + self_msg = "\red Your hand slips, damaging several organs [target]'s torso with \the [tool]!" + if (target_zone == "groin") + msg = "\red [user]'s hand slips, damaging several organs [target]'s lower abdomen with \the [tool]" + self_msg = "\red Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!" + user.visible_message(msg, self_msg) + target.apply_damage(12, BRUTE, affected, sharp=1) /datum/surgery_step/generic/cauterize allowed_tools = list( @@ -241,30 +244,30 @@ min_duration = 70 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected.open && target_zone != "mouth" +/datum/surgery_step/generic/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected.open && target_zone != "mouth" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] is beginning to cauterize the incision on [target]'s [affected.name] with \the [tool]." , \ - "You are beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].") - target.custom_pain("Your [affected.name] is being burned!",1) - ..() +/datum/surgery_step/generic/cauterize/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] is beginning to cauterize the incision on [target]'s [affected.name] with \the [tool]." , \ + "You are beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].") + target.custom_pain("Your [affected.name] is being burned!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] cauterizes the incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You cauterize the incision on [target]'s [affected.name] with \the [tool].") - affected.open = 0 - affected.germ_level = 0 - affected.status &= ~ORGAN_BLEEDING +/datum/surgery_step/generic/cauterize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] cauterizes the incision on [target]'s [affected.name] with \the [tool].", \ + "\blue You cauterize the incision on [target]'s [affected.name] with \the [tool].") + affected.open = 0 + affected.germ_level = 0 + affected.status &= ~ORGAN_BLEEDING - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!") - target.apply_damage(3, BURN, affected) +/datum/surgery_step/generic/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!") + target.apply_damage(3, BURN, affected) /datum/surgery_step/generic/amputate @@ -278,34 +281,34 @@ min_duration = 110 max_duration = 160 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (target_zone == "eyes") //there are specific steps for eye surgery - return 0 - if (!hasorgans(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (affected == null) - return 0 - if (affected.status & ORGAN_DESTROYED) - return 0 - return !affected.cannot_amputate +/datum/surgery_step/generic/amputate/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (target_zone == "eyes") //there are specific steps for eye surgery + return 0 + if (!hasorgans(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (affected == null) + return 0 + if (affected.status & ORGAN_DESTROYED) + return 0 + return !affected.cannot_amputate - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] is beginning to amputate [target]'s [affected.name] with \the [tool]." , \ - "You are beginning to cut through [target]'s [affected.amputation_point] with \the [tool].") - target.custom_pain("Your [affected.amputation_point] is being ripped apart!",1) - ..() +/datum/surgery_step/generic/amputate/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] is beginning to amputate [target]'s [affected.name] with \the [tool]." , \ + "You are beginning to cut through [target]'s [affected.amputation_point] with \the [tool].") + target.custom_pain("Your [affected.amputation_point] is being ripped apart!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ - "\blue You amputate [target]'s [affected.name] with \the [tool].") - affected.droplimb(1,DROPLIMB_EDGE) +/datum/surgery_step/generic/amputate/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ + "\blue You amputate [target]'s [affected.name] with \the [tool].") + affected.droplimb(1,DROPLIMB_EDGE) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 30) - affected.fracture() \ No newline at end of file +/datum/surgery_step/generic/amputate/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!") + affected.createwound(CUT, 30) + affected.fracture() \ No newline at end of file diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm new file mode 100644 index 00000000000..9340099a1bb --- /dev/null +++ b/code/modules/surgery/helpers.dm @@ -0,0 +1,78 @@ +/proc/attempt_initiate_surgery(obj/item/I, mob/living/M, mob/user) + if(istype(M)) + var/mob/living/carbon/human/H + var/obj/item/organ/external/affecting + var/selected_zone = user.zone_sel.selecting + + if(istype(M, /mob/living/carbon/human)) + H = M + affecting = H.get_organ(check_zone(selected_zone)) + + if(can_operate(M)) //if they're prone or a slime + var/datum/surgery/current_surgery + + for(var/datum/surgery/S in M.surgeries) + if(S.location == selected_zone) + current_surgery = S + + if(!current_surgery) + var/list/all_surgeries = surgeries_list.Copy() + var/list/available_surgeries = list() + + for(var/datum/surgery/S in all_surgeries) + if(!S.possible_locs.Find(selected_zone)) + continue + if(affecting && S.requires_organic_bodypart && affecting.status == ORGAN_ROBOT) + continue + if(!S.can_start(user, M)) + continue + + for(var/path in S.allowed_species) + if(istype(M, path)) + available_surgeries[S.name] = S + break + + var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries + if(P && user && user.Adjacent(M) && (I in user)) + var/datum/surgery/S = available_surgeries[P] + var/datum/surgery/procedure = new S.type + if(procedure) + procedure.location = selected_zone + M.surgeries += procedure + procedure.organ_ref = affecting + //just use the scalpel cut message + + else if(!current_surgery.step_in_progress) + if(current_surgery.status == 1) + M.surgeries -= current_surgery + //need a new message + //user.visible_message("[user] removes the drapes from [M]'s [parse_zone(selected_zone)].", \ + // "You remove the drapes from [M]'s [parse_zone(selected_zone)].") + qdel(current_surgery) + else if(istype(user.get_inactive_hand(), /obj/item/weapon/cautery) && current_surgery.can_cancel) + M.surgeries -= current_surgery + user.visible_message("[user] mends the incision on [M]'s [parse_zone(selected_zone)] with the [I] .", \ + "You mend the incision on [M]'s [parse_zone(selected_zone)].") + qdel(current_surgery) + else if(current_surgery.can_cancel) + user << "You need to hold a cautery in inactive hand to stop [M]'s surgery!" + + + return 1 + return 0 + + + +proc/get_location_modifier(mob/M) + var/turf/T = get_turf(M) + if(locate(/obj/machinery/optable, T)) + return 1 + else if(locate(/obj/structure/table, T)) + return 0.8 + else if(locate(/obj/structure/stool/bed, T)) + return 0.7 + else + return 0.5 + +/obj/item/organ/brain/New() + new /obj/item/organ/internal/brain(src.loc) \ No newline at end of file diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index b8a8f072545..0b188380754 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -1,42 +1,50 @@ //Procedures in this file: Putting items in body cavity. Implant removal. Items removal. + ////////////////////////////////////////////////////////////////// // ITEM PLACEMENT SURGERY // ////////////////////////////////////////////////////////////////// +/datum/surgery/cavity_implant + name = "cavity implant" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open, /datum/surgery_step/cavity/make_space,/datum/surgery_step/cavity/place_item,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) + + possible_locs = list("chest","head","groin") + /datum/surgery_step/cavity priority = 1 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(!hasorgans(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING) - proc/get_max_wclass(obj/item/organ/external/affected) - switch (affected.limb_name) - if ("head") - return 1 - if ("chest") - return 3 - if ("groin") - return 2 +/datum/surgery_step/cavity/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(!hasorgans(target)) return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING) - proc/get_cavity(obj/item/organ/external/affected) - switch (affected.limb_name) - if ("head") - return "cranial" - if ("chest") - return "thoracic" - if ("groin") - return "abdominal" - return "" +/datum/surgery_step/cavity/proc/get_max_wclass(obj/item/organ/external/affected) + switch (affected.limb_name) + if ("head") + return 1 + if ("chest") + return 3 + if ("groin") + return 2 + return 0 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 20) +/datum/surgery_step/cavity/proc/get_cavity(obj/item/organ/external/affected) + switch (affected.limb_name) + if ("head") + return "cranial" + if ("chest") + return "thoracic" + if ("groin") + return "abdominal" + return "" + +/datum/surgery_step/cavity/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") + affected.createwound(CUT, 20) /datum/surgery_step/cavity/make_space allowed_tools = list( @@ -48,22 +56,22 @@ min_duration = 60 max_duration = 80 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && !affected.cavity && !affected.hidden +/datum/surgery_step/cavity/make_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && !affected.cavity && !affected.hidden - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ - "You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) - target.custom_pain("The pain in your chest is living hell!",1) - affected.cavity = 1 - ..() +/datum/surgery_step/cavity/make_space/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ + "You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) + target.custom_pain("The pain in your chest is living hell!",1) + affected.cavity = 1 + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ - "\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) +/datum/surgery_step/cavity/make_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ + "\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) /datum/surgery_step/cavity/close_space priority = 2 @@ -77,22 +85,22 @@ min_duration = 60 max_duration = 80 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected.cavity +/datum/surgery_step/cavity/close_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected.cavity - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", \ - "You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool]." ) - target.custom_pain("The pain in your chest is living hell!",1) - affected.cavity = 0 - ..() +/datum/surgery_step/cavity/close_space/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", \ + "You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool]." ) + target.custom_pain("The pain in your chest is living hell!",1) + affected.cavity = 0 + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ - "\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) +/datum/surgery_step/cavity/close_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ + "\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) /datum/surgery_step/cavity/place_item priority = 0 @@ -101,43 +109,50 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!ishuman(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/can_fit = affected && !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected) - return ..() && can_fit - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ - "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) - target.custom_pain("The pain in your chest is living hell!",1) - ..() +/datum/surgery_step/cavity/place_item/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!ishuman(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/can_fit = affected && !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected) + return ..() && can_fit - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) +/datum/surgery_step/cavity/place_item/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ + "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) + target.custom_pain("The pain in your chest is living hell!",1) + ..() - if(istype(tool, /obj/item/weapon/disk/nuclear)) - user << "Central command would kill you if you implanted the disk into someone." - else - user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ - "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) - if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT)) - user << "\red You tear some vessels trying to fit such big object in this cavity." - var/datum/wound/internal_bleeding/I = new () - affected.wounds += I - affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) - user.drop_item() - affected.hidden = tool - target.internal_organs += tool - tool.loc = target - affected.cavity = 0 +/datum/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + + if(istype(tool, /obj/item/weapon/disk/nuclear)) + user << "Central command would kill you if you implanted the disk into someone." + else + user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ + "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) + if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT)) + user << "\red You tear some vessels trying to fit such big object in this cavity." + var/datum/wound/internal_bleeding/I = new () + affected.wounds += I + affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) + user.drop_item() + affected.hidden = tool + target.internal_organs += tool + tool.loc = target + affected.cavity = 0 ////////////////////////////////////////////////////////////////// // IMPLANT/ITEM REMOVAL SURGERY // ////////////////////////////////////////////////////////////////// +///Fethas note:I might could condense this down but it would need to take out the part with poking around with a hemostat +/datum/surgery/cavity_implant_rem + name = "implant removal" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) + possible_locs = list("chest","head","groin") + /datum/surgery_step/cavity/implant_removal allowed_tools = list( /obj/item/weapon/hemostat = 100, \ @@ -148,78 +163,78 @@ min_duration = 80 max_duration = 100 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ - "You start poking around inside [target]'s [affected.name] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() +/datum/surgery_step/cavity/implant_removal/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ + "You start poking around inside [target]'s [affected.name] with \the [tool]." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) +/datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/find_prob = 0 + var/find_prob = 0 - if (affected.implants.len) + if (affected.implants.len) - var/obj/item/obj = affected.implants[1] + var/obj/item/obj = affected.implants[1] + if(istype(obj,/obj/item/weapon/implant)) + var/obj/item/weapon/implant/imp = obj + if (imp.islegal()) + find_prob +=60 + else + find_prob +=40 + else + find_prob +=50 + + if (prob(find_prob)) + user.visible_message("\blue [user] takes something out of [target]'s [affected.name] with \the [tool].", \ + "\blue You take [obj] out of [target]'s [affected.name]s with \the [tool]." ) + affected.implants -= obj + + target.sec_hud_set_implants() + + //Handle possessive brain borers. + if(istype(obj,/mob/living/simple_animal/borer)) + var/mob/living/simple_animal/borer/worm = obj + if(worm.controlling) + target.release_control() + worm.detatch() + worm.leave_host() + + obj.loc = get_turf(target) if(istype(obj,/obj/item/weapon/implant)) var/obj/item/weapon/implant/imp = obj - if (imp.islegal()) - find_prob +=60 - else - find_prob +=40 - else - find_prob +=50 - - if (prob(find_prob)) - user.visible_message("\blue [user] takes something out of [target]'s [affected.name] with \the [tool].", \ - "\blue You take [obj] out of [target]'s [affected.name]s with \the [tool]." ) - affected.implants -= obj - - target.sec_hud_set_implants() - - //Handle possessive brain borers. - if(istype(obj,/mob/living/simple_animal/borer)) - var/mob/living/simple_animal/borer/worm = obj - if(worm.controlling) - target.release_control() - worm.detatch() - worm.leave_host() - - obj.loc = get_turf(target) - if(istype(obj,/obj/item/weapon/implant)) - var/obj/item/weapon/implant/imp = obj - imp.imp_in = null - imp.implanted = 0 - else - user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.name].", \ - "\blue There's something inside [target]'s [affected.name], but you just missed it this time." ) - else if (affected.hidden) - user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) - affected.hidden.loc = get_turf(target) - if(!affected.hidden.blood_DNA) - affected.hidden.blood_DNA = list() - affected.hidden.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type - affected.hidden.update_icon() - affected.hidden = null - + imp.imp_in = null + imp.implanted = 0 else - user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ - "\blue You could not find anything inside [target]'s [affected.name]." ) + user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.name].", \ + "\blue There's something inside [target]'s [affected.name], but you just missed it this time." ) + else if (affected.hidden) + user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ + "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) + affected.hidden.loc = get_turf(target) + if(!affected.hidden.blood_DNA) + affected.hidden.blood_DNA = list() + affected.hidden.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type + affected.hidden.update_icon() + affected.hidden = null - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - ..() - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - if (affected.implants.len) - var/fail_prob = 10 - fail_prob += 100 - tool_quality(tool) - if (prob(fail_prob)) - var/obj/item/weapon/implant/imp = affected.implants[1] - user.visible_message("\red Something beeps inside [target]'s [affected.name]!") - playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) - spawn(25) - imp.activate() + else + user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ + "\blue You could not find anything inside [target]'s [affected.name]." ) + +/datum/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + ..() + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + if (affected.implants.len) + var/fail_prob = 10 + fail_prob += 100 - tool_quality(tool) + if (prob(fail_prob)) + var/obj/item/weapon/implant/imp = affected.implants[1] + user.visible_message("\red Something beeps inside [target]'s [affected.name]!") + playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) + spawn(25) + imp.activate() diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 4e6e85292c0..d435ed6b87e 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -76,7 +76,7 @@ //qdel(O) return ..() - +/* /obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob) switch(stage) if(0) @@ -110,6 +110,7 @@ user.visible_message("[user] fishes around fruitlessly in [src] with [W].") return ..() + */ /obj/item/organ/external/update_health() damage = min(max_damage, (brute_dam + burn_dam)) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 7cfd46aa6a5..0e18d6a357c 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -1,10 +1,29 @@ +/datum/surgery/organ_manipulation + name = "organ manipulation" + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, + /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs) + possible_locs = list("chest", "head") + requires_organic_bodypart = 0 + +/datum/surgery/organ_manipulation/soft + possible_locs = list("groin", "eyes", "mouth") + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs) + +/datum/surgery/organ_manipulation/alien + name = "alien organ manipulation" + possible_locs = list("chest", "head", "groin", "eyes", "mouth") + allowed_species = list(/mob/living/carbon/alien/humanoid) + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs) + + + // Internal surgeries. /datum/surgery_step/internal priority = 2 can_infect = 1 blood_level = 1 -/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return 0 @@ -15,6 +34,11 @@ ////////////////////////////////////////////////////////////////// // Dethrall Shadowling // ////////////////////////////////////////////////////////////////// +/datum/surgery/remove_thrall + name = "dethralling" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall) + possible_locs = list("head") + /datum/surgery_step/internal/dethrall allowed_tools = list( /obj/item/weapon/hemostat = 100, \ @@ -25,40 +49,45 @@ min_duration = 120 max_duration = 120 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain") +/datum/surgery_step/internal/dethrall/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain") - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] begins looking around in [target]'s [braincase].", "You begin looking for foreign influences on [target]'s brain...") - user << "You locate a small, pulsing black tumor on the side of [target]'s brain and begin to remove it." - target << "A small part of your [braincase] pulses with agony as the light impacts it." - user.visible_message("[user] begins removing something from [target]'s [braincase].", \ - "You begin carefully extracting the tumor...") - ..() +/datum/surgery_step/internal/dethrall/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/braincase = target.named_organ_parent("brain") + user.visible_message("[user] begins looking around in [target]'s [braincase].", "You begin looking for foreign influences on [target]'s brain...") + target << "A small part of your [braincase] pulses with agony as the light impacts it." + user.visible_message("[user] begins removing something from [target]'s [braincase].", \ + "You begin carefully extracting the tumor...") + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ - "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") - ticker.mode.remove_thrall(target.mind,0) - new /obj/item/organ/internal/shadowtumor(get_turf(target)) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - if(prob(50)) - user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ - "You fumble and tear out [target]'s tumor!") - target.adjustBrainLoss(110) // This is so you can't just defib'n go - ticker.mode.remove_thrall(target.mind,1) - else - user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") +/datum/surgery_step/internal/dethrall/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/braincase = target.named_organ_parent("brain") + user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ + "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") + ticker.mode.remove_thrall(target.mind,0) + new /obj/item/organ/internal/shadowtumor(get_turf(target)) + +/datum/surgery_step/internal/dethrall/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/braincase = target.named_organ_parent("brain") + if(prob(50)) + user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ + "You fumble and tear out [target]'s tumor!") + target.adjustBrainLoss(110) // This is so you can't just defib'n go + ticker.mode.remove_thrall(target.mind,1) + else + user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") ////////////////////////////////////////////////////////////////// // ALIEN EMBRYO SURGERY // ////////////////////////////////////////////////////////////////// +/datum/surgery/remove_xeno_baby + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) + possible_locs = list("chest") + + /datum/surgery_step/internal/remove_embryo allowed_tools = list( /obj/item/weapon/hemostat = 100, \ @@ -70,7 +99,7 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/embryo = 0 var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) if(A) @@ -82,14 +111,14 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." user.visible_message(msg, self_msg) target.custom_pain("Something hurts horribly in your chest!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", "You rip the larva out of [target]'s ribcage!") @@ -106,7 +135,7 @@ A.remove(target) A.loc = get_turf(target) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -121,11 +150,144 @@ user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") +/datum/surgery_step/internal/manipulate_organs + allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) + var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55) + var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack= 100,/obj/item/stack/medical/bruise_pack = 20 + ) + var/current_type + var/obj/item/organ/internal/I = null + var/obj/item/organ/external/affected = null + min_duration = 70 + max_duration = 90 + +/datum/surgery_step/internal/manipulate_organs/New() + ..() + allowed_tools = allowed_tools + implements_extract + implements_mend + + + + +/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + I = null + affected = target.get_organ(target_zone) + if(isorgan(tool)) + current_type = "insert" + I = tool + if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) + user << "There is no room for [I] in [target]'s [parse_zone(target_zone)]!" + return -1 + + if(I.damage > (I.max_damage * 0.75)) + user << " \The [I] is in no state to be transplanted." + return -1 + + if(target.get_int_organ(I)) + user << "\red \The [target] already has [I]." + return -1 + + user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ + "You start transplanting \the [tool] into [target]'s [affected.name].") + target.custom_pain("Someone's rooting around in your [affected.name]!",1) + + else if(tool in implements_extract) + current_type = "extract" + var/list/organs = target.get_organs_zone(target_zone) + if(!organs.len) + user << "There is no removeable organs in [target]'s [parse_zone(target_zone)]!" + return -1 + else + for(var/obj/item/organ/internal/O in organs) + O.on_find(user) + organs -= O + organs[O.name] = O + + I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs + if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) + I = organs[I] + if(!I) return -1 + user.visible_message("[user] starts to separate [target]'s [I] with \the [tool].", \ + "You start to separate [target]'s [I] with \the [tool] for removal." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + else + return -1 + + else if(tool in implements_mend) + //todo Change message, make it heal the organs... + current_type = "mend" + var/tool_name = "\the [tool]" + if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) + tool_name = "regenerative membrane" + else if (istype(tool, /obj/item/stack/medical/bruise_pack)) + tool_name = "the bandaid" + + if (!hasorgans(target)) + return + for(var/obj/item/organ/internal/I in affected.internal_organs) + if(I && I.damage > 0) + if(I.robotic < 2) + if(!I.sterile) + spread_germs_to_organ(I, user) + user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ + "You start treating damage to [target]'s [I.name] with [tool_name]." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + + else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) + user << "[tool] was biten by someone! It's too damaged to use!" + return -1 + ..() + +/datum/surgery_step/internal/manipulate_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(current_type == "mend") + var/tool_name = "\the [tool]" + if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) + tool_name = "regenerative membrane" + if (istype(tool, /obj/item/stack/medical/bruise_pack)) + tool_name = "the bandaid" + + if (!hasorgans(target)) + return + for(var/obj/item/organ/internal/I in affected.internal_organs) + if(I) + I.surgeryize() + if(I && I.damage > 0) + if(I.robotic < 2) + user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ + "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) + I.damage = 0 + return 1 + else if(current_type == "insert") + I = tool + user.drop_item() + I.insert(target) + spread_germs_to_organ(I, user) + user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ + "\blue You have transplanted \the [tool] into [target]'s [affected.name].") + + I.status &= ~ORGAN_CUT_AWAY + + else if(current_type == "extract") + if(I && I.owner == target) + user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ + "\blue You have separated and extracted [target]'s [I] with \the [tool].") + + add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") + spread_germs_to_organ(I, user) + I.status |= ORGAN_CUT_AWAY + I.remove(target) + I.loc = get_turf(target) + else + user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", + "You can't extract anything from [target]'s [parse_zone(target_zone)]!") + return 0 + ..() ////////////////////////////////////////////////////////////////// // CHEST INTERNAL ORGAN SURGERY // ////////////////////////////////////////////////////////////////// +/* /datum/surgery_step/internal/fix_organ allowed_tools = list( /obj/item/stack/medical/advanced/bruise_pack= 100, \ @@ -135,7 +297,7 @@ min_duration = 70 max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -149,7 +311,7 @@ break return ..() && is_organ_damaged - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/tool_name = "\the [tool]" if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) tool_name = "regenerative membrane" @@ -171,7 +333,7 @@ target.custom_pain("The pain in your [affected.name] is living hell!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/tool_name = "\the [tool]" if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) tool_name = "regenerative membrane" @@ -191,7 +353,7 @@ "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -224,7 +386,7 @@ min_duration = 90 max_duration = 110 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!..()) return 0 @@ -234,8 +396,8 @@ if(!(affected && !(affected.status & ORGAN_ROBOT))) return 0 - target.op_stage.current_organ = null - target.op_stage.organ_ref = null + surgery.current_organ = null + surgery.organ_ref = null var/list/attached_organs = list() for(var/organ in affected.internal_organs) @@ -247,30 +409,30 @@ if(!organ_to_remove) return 0 - target.op_stage.current_organ = organ_to_remove - target.op_stage.organ_ref = attached_organs[organ_to_remove] + surgery.current_organ = organ_to_remove + surgery.organ_ref = attached_organs[organ_to_remove] return ..() && organ_to_remove - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." ) + user.visible_message("[user] starts to separate [target]'s [surgery.current_organ] with \the [tool].", \ + "You start to separate [target]'s [surgery.current_organ] with \the [tool]." ) target.custom_pain("The pain in your [affected.name] is living hell!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\blue [user] has separated [target]'s [surgery.current_organ] with \the [tool]." , \ + "\blue You have separated [target]'s [surgery.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.op_stage.organ_ref + var/obj/item/organ/internal/I = surgery.organ_ref if(I && istype(I)) spread_germs_to_organ(I, user) I.status |= ORGAN_CUT_AWAY - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") @@ -287,7 +449,7 @@ min_duration = 60 max_duration = 80 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!..()) return 0 @@ -296,8 +458,8 @@ if(!istype(affected)) return 0 - target.op_stage.current_organ = null - target.op_stage.organ_ref = null + surgery.current_organ = null + surgery.organ_ref = null var/list/removable_organs = list() for(var/organ in affected.internal_organs) @@ -309,30 +471,30 @@ if(!organ_to_remove) return 0 - target.op_stage.current_organ = organ_to_remove - target.op_stage.organ_ref = removable_organs[organ_to_remove] + surgery.current_organ = organ_to_remove + surgery.organ_ref = removable_organs[organ_to_remove] return ..() - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start removing [target]'s [target.op_stage.current_organ] with \the [tool].") - target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!",1) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("[user] starts removing [target]'s [surgery.current_organ] with \the [tool].", \ + "You start removing [target]'s [surgery.current_organ] with \the [tool].") + target.custom_pain("Someone's ripping out your [surgery.current_organ]!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "\blue You have removed [target]'s [target.op_stage.current_organ] with \the [tool].") + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\blue [user] has removed [target]'s [surgery.current_organ] with \the [tool].", \ + "\blue You have removed [target]'s [surgery.current_organ] with \the [tool].") // Extract the organ! - if(target.op_stage.current_organ) - var/obj/item/organ/internal/O = target.op_stage.organ_ref + if(surgery.current_organ) + var/obj/item/organ/internal/O = surgery.organ_ref if(O && istype(O)) spread_germs_to_organ(O, user) O.remove(target) O.loc = get_turf(target) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") @@ -346,7 +508,7 @@ min_duration = 60 max_duration = 80 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/internal/O = tool var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -394,14 +556,14 @@ return ..() && organ_missing && organ_compatible - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ "You start transplanting \the [tool] into [target]'s [affected.name].") target.custom_pain("Someone's rooting around in your [affected.name]!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ "\blue You have transplanted \the [tool] into [target]'s [affected.name].") @@ -411,7 +573,7 @@ O.insert(target) spread_germs_to_organ(O, user) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ "\red Your hand slips, damaging \the [tool]!") var/obj/item/organ/internal/I = tool @@ -427,7 +589,7 @@ min_duration = 100 max_duration = 120 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!..()) return 0 @@ -437,8 +599,8 @@ if(!istype(affected)) return 0 - target.op_stage.current_organ = null - target.op_stage.organ_ref = null + surgery.current_organ = null + surgery.organ_ref = null var/list/removable_organs = list() for(var/organ in affected.internal_organs) @@ -450,31 +612,32 @@ if(!organ_to_replace) return 0 - target.op_stage.current_organ = organ_to_replace - target.op_stage.organ_ref = removable_organs[organ_to_replace] + surgery.current_organ = organ_to_replace + surgery.organ_ref = removable_organs[organ_to_replace] return ..() - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].") - target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!",1) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("[user] begins reattaching [target]'s [surgery.current_organ] with \the [tool].", \ + "You start reattaching [target]'s [surgery.current_organ] with \the [tool].") + target.custom_pain("Someone's digging needles into your [surgery.current_organ]!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\blue [user] has reattached [target]'s [surgery.current_organ] with \the [tool]." , \ + "\blue You have reattached [target]'s [surgery.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.op_stage.organ_ref + var/obj/item/organ/internal/I = surgery.organ_ref if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY spread_germs_to_organ(I, user) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ "\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") affected.createwound(BRUISE, 20) +*/ ////////////////////////////////////////////////////////////////// // HEART SURGERY // ////////////////////////////////////////////////////////////////// @@ -489,5 +652,5 @@ // min_duration = 30 // max_duration = 40 -// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) // return ..() && target.op_stage.ribcage == 2 \ No newline at end of file diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 99e6a7241d0..7c2d455f319 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -16,7 +16,7 @@ min_duration = 70 max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!affected) return 0 @@ -27,14 +27,14 @@ return affected.open == 2 && internal_bleeding - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool]." , \ "You start patching the damaged vein in [target]'s [affected.name] with \the [tool].") target.custom_pain("The pain in [affected.name] is unbearable!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].", \ "\blue You have patched the damaged vein in [target]'s [affected.name] with \the [tool].") @@ -44,7 +44,7 @@ affected.update_damages() if (ishuman(user) && prob(40)) user:bloody_hands(target, 0) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") @@ -64,7 +64,7 @@ min_duration = 110 max_duration = 160 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if(!hasorgans(target)) return 0 @@ -75,20 +75,20 @@ return affected && affected.open == 2 && (affected.status & ORGAN_DEAD) - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]." , \ "You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].") target.custom_pain("The pain in [affected.name] is unbearable!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool].", \ "\blue You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool].") affected.open = 3 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") @@ -110,7 +110,7 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!istype(tool, /obj/item/weapon/reagent_containers)) return 0 @@ -127,14 +127,14 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected.open == 3 && (affected.status & ORGAN_DEAD) - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." , \ "You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].") target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) if (!istype(tool, /obj/item/weapon/reagent_containers)) @@ -152,7 +152,7 @@ user.visible_message("\blue [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", \ "\blue You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].") - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) if (!istype(tool, /obj/item/weapon/reagent_containers)) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index b1e2d8323be..c69b026da0a 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -3,10 +3,17 @@ // COMMON STEPS // ////////////////////////////////////////////////////////////////// +/datum/surgery/cybernetic_repair + name = "Cybernetic Repair" + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/fix_organ_robotic,/datum/surgery_step/robotics/external/close_hatch) + possible_locs = list("chest","head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") + requires_organic_bodypart = 0 + +//to do, moar surgerys or condense down ala mainpulate organs. /datum/surgery_step/robotics can_infect = 0 -/datum/surgery_step/robotics/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/robotics/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (isslime(target)) return 0 if (target_zone == "eyes") //there are specific steps for eye surgery @@ -22,7 +29,7 @@ /datum/surgery_step/robotics/external -/datum/surgery_step/robotics/external/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/robotics/external/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!..()) return 0 var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -40,24 +47,24 @@ min_duration = 90 max_duration = 110 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected && affected.open == 0 && target_zone != "mouth" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ "You start to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ "\blue You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].",) affected.open = 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].", \ "\red Your [tool] slips, failing to unscrew [target]'s [affected.name].") @@ -72,24 +79,24 @@ min_duration = 30 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected && affected.open == 1 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].", "You start to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ "\blue You open the maintenance hatch on [target]'s [affected.name] with \the [tool]." ) affected.open = 2 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].", "\red Your [tool] slips, failing to open the hatch on [target]'s [affected.name].") @@ -104,25 +111,25 @@ min_duration = 70 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected && affected.open && target_zone != "mouth" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool]." , \ "You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \ "\blue You close and secure the hatch on [target]'s [affected.name] with \the [tool].") affected.open = 0 affected.germ_level = 0 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].", "\red Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].") @@ -136,7 +143,7 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) if(istype(tool,/obj/item/weapon/weldingtool)) @@ -145,13 +152,13 @@ return 0 return affected && affected.open == 2 && affected.brute_dam > 0 && target_zone != "mouth" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] begins to patch damage to [target]'s [affected.name]'s support structure with \the [tool]." , \ "You begin to patch damage to [target]'s [affected.name]'s support structure with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] finishes patching damage to [target]'s [affected.name] with \the [tool].", \ "\blue You finish patching damage to [target]'s [affected.name] with \the [tool].") @@ -161,7 +168,7 @@ affected.update_icon() target.regenerate_icons() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].", "\red Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].") @@ -175,7 +182,7 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if(..()) var/obj/item/stack/cable_coil/C = tool var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -189,19 +196,19 @@ return 1 return 0 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] begins to splice new cabling into [target]'s [affected.name]." , \ "You begin to splice new cabling into [target]'s [affected.name].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] finishes splicing cable into [target]'s [affected.name].", \ "\blue You finishes splicing new cable into [target]'s [affected.name].") affected.heal_damage(0,rand(30,50),1,1) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user] causes a short circuit in [target]'s [affected.name]!", "\red You cause a short circuit in [target]'s [affected.name]!") @@ -217,7 +224,7 @@ min_duration = 70 max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -230,7 +237,7 @@ break return affected.open_enough_for_surgery() && is_organ_damaged - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -245,7 +252,7 @@ target.custom_pain("The pain in your [affected.name] is living hell!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -259,7 +266,7 @@ "\blue You repair [target]'s [I.name] with [tool]." ) I.damage = 0 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return @@ -284,7 +291,7 @@ min_duration = 90 max_duration = 110 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!(affected && (affected.status & ORGAN_ROBOT))) @@ -292,8 +299,8 @@ if(!affected.open_enough_for_surgery()) return 0 - target.op_stage.current_organ = null - target.op_stage.organ_ref = null + surgery.current_organ = null + surgery.organ_ref = null var/list/attached_organs = list() for(var/organ in affected.internal_organs) @@ -305,25 +312,25 @@ if(!organ_to_remove) return 0 - target.op_stage.current_organ = organ_to_remove - target.op_stage.organ_ref = attached_organs[organ_to_remove] + surgery.current_organ = organ_to_remove + surgery.organ_ref = attached_organs[organ_to_remove] return ..() && organ_to_remove - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts to decouple [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start to decouple [target]'s [target.op_stage.current_organ] with \the [tool]." ) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("[user] starts to decouple [target]'s [surgery.current_organ] with \the [tool].", \ + "You start to decouple [target]'s [surgery.current_organ] with \the [tool]." ) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].") + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\blue [user] has decoupled [target]'s [surgery.current_organ] with \the [tool]." , \ + "\blue You have decoupled [target]'s [surgery.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.get_int_organ(target.op_stage.current_organ) + var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ) if(I && istype(I)) I.status |= ORGAN_CUT_AWAY - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \ "\red Your hand slips, disconnecting \the [tool].") @@ -335,7 +342,7 @@ min_duration = 100 max_duration = 120 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!(affected && (affected.status & ORGAN_ROBOT))) @@ -343,8 +350,8 @@ if(!affected.open_enough_for_surgery()) return 0 - target.op_stage.current_organ = null - target.op_stage.organ_ref = null + surgery.current_organ = null + surgery.organ_ref = null var/list/removable_organs = list() for(var/organ in affected.internal_organs) @@ -356,24 +363,24 @@ if(!organ_to_replace) return 0 - target.op_stage.current_organ = organ_to_replace - target.op_stage.organ_ref = removable_organs[organ_to_replace] + surgery.current_organ = organ_to_replace + surgery.organ_ref = removable_organs[organ_to_replace] return ..() - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].") + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("[user] begins reattaching [target]'s [surgery.current_organ] with \the [tool].", \ + "You start reattaching [target]'s [surgery.current_organ] with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\blue [user] has reattached [target]'s [surgery.current_organ] with \the [tool]." , \ + "\blue You have reattached [target]'s [surgery.current_organ] with \the [tool].") - var/obj/item/organ/internal/I = target.get_int_organ(target.op_stage.current_organ) + var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ) if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \ "\red Your hand slips, disconnecting \the [tool].") @@ -385,7 +392,7 @@ min_duration = 60 max_duration = 80 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if(target_zone != "chest") return 0 @@ -420,13 +427,13 @@ return 1 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] starts installing \the [tool] into [target]'s [affected.name].", \ "You start installing \the [tool] into [target]'s [affected.name].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] has installed \the [tool] into [target]'s [affected.name].", \ "\blue You have installed \the [tool] into [target]'s [affected.name].") @@ -445,6 +452,6 @@ if(M.brainmob && M.brainmob.mind) M.brainmob.mind.transfer_to(target) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\red [user]'s hand slips.", \ "\red Your hand slips.") \ No newline at end of file diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index 02cf0219366..f4e0b999c44 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -1,6 +1,11 @@ ////////////////////////////////////////////////////////////////// // SLIME CORE EXTRACTION // ////////////////////////////////////////////////////////////////// +/datum/surgery/core_removal + name = "core removal" + steps = list(/datum/surgery_step/slime/cut_flesh, /datum/surgery_step/slime/cut_innards, /datum/surgery_step/slime/saw_core) + allowed_species = list( /mob/living/carbon/slime) + /datum/surgery_step/slime is_valid_target(mob/living/carbon/slime/target) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 9fd30f31992..f1cb16f138c 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -1,3 +1,50 @@ +///Datum Surgery Helpers// +/datum/surgery + var/name = "surgery" + var/status = 1 + var/list/steps = list() + var/eyes = 0 + var/face = 0 + var/appendix = 0 + var/ribcage = 0 + var/head_reattach = 0 //Steps in a surgery + + var/can_cancel = 1 + var/step_in_progress = 0 + var/list/in_progress = list() //Actively performing a Surgery + var/location = "chest" //Surgery location + var/requires_organic_bodypart = 1 //Prevents you from performing an operation on robotic limbs + var/list/possible_locs = list() //Multiple locations -- c0 + var/obj/item/organ/organ_ref //Operable body part + var/current_organ = "organ" + var/list/allowed_species = null + var/list/disallowed_species = null + +/datum/surgery/proc/can_start(mob/user, mob/living/carbon/target) + // if 0 surgery wont show up in list + // put special restrictions here + return 1 + + +/datum/surgery/proc/next_step(mob/user, mob/living/carbon/target) + if(step_in_progress) return + + var/datum/surgery_step/S = get_surgery_step() + if(S) + if(S.begin_step(user, target, user.zone_sel.selecting, user.get_active_hand(), src)) + return 1 + return 0 + +/datum/surgery/proc/get_surgery_step() + var/step_type = steps[status] + return new step_type + + +/datum/surgery/proc/complete(mob/living/carbon/human/target) + target.surgeries -= src + src = null + + /* SURGERY STEPS */ /datum/surgery_step var/priority = 0 //steps with higher priority would be attempted first @@ -5,18 +52,46 @@ // type path referencing tools that can be used for this step, and how well are they suited for it var/list/allowed_tools = null // type paths referencing mutantraces that this step applies to. - var/list/allowed_species = null - var/list/disallowed_species = null // duration of the step var/min_duration = 0 var/max_duration = 0 + var/name + // evil infection stuff that will make everyone hate me var/can_infect = 0 //How much blood this step can get on surgeon. 1 - hands, 2 - full body. var/blood_level = 0 + var/list/allowed_species = null + var/list/disallowed_species = null + +/datum/surgery_step/proc/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + surgery.step_in_progress = 1 + + if(do_after(user, max_duration, target = target)) + var/advance = 0 + var/prob_chance = 100 + + if(tool) //this means it isn't a require nd or any item step. + prob_chance = allowed_tools[tool] + prob_chance *= get_location_modifier(target) + + if(prob(prob_chance) || isrobot(user)) + if(end_step(user, target, target_zone, tool, surgery)) + advance = 1 + else + if(fail_step(user, target, target_zone, tool, surgery)) + advance = 1 + + if(advance) + surgery.status++ + if(surgery.status > surgery.steps.len) + surgery.complete(target) + + surgery.step_in_progress = 0 + //returns how well tool is suited for this step /datum/surgery_step/proc/tool_quality(obj/item/tool) for (var/T in allowed_tools) @@ -42,11 +117,11 @@ return 1 // checks whether this step can be applied with the given user and target -/datum/surgery_step/proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) return 0 // does stuff to begin the step, usually just printing messages. Moved germs transfering and bloodying here too -/datum/surgery_step/proc/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/proc/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) if (can_infect && affected) spread_germs_to_organ(affected, user) @@ -59,13 +134,14 @@ return // does stuff to end the step, which is normally print a message + do whatever this step changes -/datum/surgery_step/proc/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/proc/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) return // stuff that happens when the step fails -/datum/surgery_step/proc/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/proc/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) return null + /proc/spread_germs_to_organ(obj/item/organ/E, mob/living/carbon/human/user) if(!istype(user) || !istype(E)) return //world << "Germ spread: [E] : [E.owner]" @@ -75,13 +151,13 @@ if(!(E.status & ORGAN_ROBOT)) //Germs on robotic limbs bad E.germ_level = max(germ_level,E.germ_level) //as funny as scrubbing microbes out with clean gloves is - no. -/proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool) +/proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool,datum/surgery/surgery) if(!istype(M)) return 0 if (user.a_intent == I_HARM) //check for Hippocratic Oath return 0 var/zone = user.zone_sel.selecting - if(zone in M.op_stage.in_progress) //Can't operate on someone repeatedly. + if(zone in surgery.step_in_progress) //Can't operate on someone repeatedly. user << "\red You can't operate on this area while surgery is already in progress." return 1 for(var/datum/surgery_step/S in surgery_steps) @@ -91,7 +167,7 @@ if(step_is_valid && S.is_valid_target(M)) if(step_is_valid == 2) // This is a failure that already has a message for failing. return 1 - M.op_stage.in_progress += zone + surgery.step_in_progress += zone S.begin_step(user, M, zone, tool) //start on it //We had proper tools! (or RNG smiled.) and user did not move or change hands. if(prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration))) @@ -100,7 +176,7 @@ S.fail_step(user, M, zone, tool) //malpractice~ else // This failing silently was a pain. user << "You must remain close to your patient to conduct surgery." - M.op_stage.in_progress -= zone // Clear the in-progress flag. + surgery.step_in_progress -= zone // Clear the in-progress flag. return 1 //don't want to do weapony things after surgery if (user.a_intent == I_HELP) @@ -123,13 +199,3 @@ if(l.priority < r.priority) surgery_steps.Swap(i, gap + i) swapped = 1 - -/datum/surgery_status/ - var/eyes = 0 - var/face = 0 - var/appendix = 0 - var/ribcage = 0 - var/head_reattach = 0 - var/current_organ = "organ" - var/obj/item/organ/organ_ref = null - var/list/in_progress = list() \ No newline at end of file diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index edc8f6accb4..a53a4d9604e 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -133,6 +133,10 @@ attack_verb = list("attacked", "slashed", "sawed", "cut") +/obj/item/weapon/scalpel/attack(mob/living/M, mob/user) + if(!attempt_initiate_surgery(src, M, user)) + ..() + //misc, formerly from code/defines/weapons.dm /obj/item/weapon/bonegel name = "bone gel" diff --git a/paradise.dme b/paradise.dme index eca2806a045..d43b564f52f 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1828,6 +1828,7 @@ #include "code\modules\surgery\encased.dm" #include "code\modules\surgery\face.dm" #include "code\modules\surgery\generic.dm" +#include "code\modules\surgery\helpers.dm" #include "code\modules\surgery\implant.dm" #include "code\modules\surgery\limb_reattach.dm" #include "code\modules\surgery\organs_internal.dm" From a4c420ccdee064df23557c94ce3ffd1353c9a57e Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 1 Jan 2016 22:32:13 -0500 Subject: [PATCH 012/442] Conflict fixing time --- code/modules/client/preferences.dm | 2655 ++++++++--------- .../carbon/alien/special/alien_embryo.dm | 110 +- code/modules/surgery/eye.dm | 144 - 3 files changed, 1380 insertions(+), 1529 deletions(-) delete mode 100644 code/modules/surgery/eye.dm diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0724ba4b292..bc28c88ee2f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2,42 +2,29 @@ var/list/preferences_datums = list() -var/global/list/special_roles = list( //keep synced with the defines BE_* in setup.dm. THE ORDER MATTERS -//some autodetection here. - "traitor" = IS_MODE_COMPILED("traitor"), // 1 / 1 - "operative" = IS_MODE_COMPILED("nuclear"), // 2 / 2 - "changeling" = IS_MODE_COMPILED("changeling"), // 4 / 3 - "wizard" = IS_MODE_COMPILED("wizard"), // 8 / 4 - "malf AI" = IS_MODE_COMPILED("malfunction"), // 16 / 5 - "revolutionary" = IS_MODE_COMPILED("revolution"), // 32 / 6 - "alien" = 1, // 62 / 7 - "pAI" = 1, // 128 / 8 - "cultist" = IS_MODE_COMPILED("cult"), // 256 / 9 - "ninja" = 1, // 512 / 10 - "raider" = IS_MODE_COMPILED("heist"), // 1024 / 11 - "vampire" = IS_MODE_COMPILED("vampire"), // 2048 / 12 - "mutineer" = IS_MODE_COMPILED("mutiny"), // 4096 / 13 - "blob" = IS_MODE_COMPILED("blob"), // 8192 / 14 - "shadowling" = IS_MODE_COMPILED("shadowling"), //16384 / 15 - "revenant" = 1 //32768 / 16 -) var/global/list/special_role_times = list( //minimum age (in days) for accounts to play these roles - num2text(BE_PAI) = 0, - num2text(BE_TRAITOR) = 7, - num2text(BE_CHANGELING) = 14, - num2text(BE_SHADOWLING) = 14, - num2text(BE_WIZARD) = 14, - num2text(BE_REV) = 14, - num2text(BE_VAMPIRE) = 14, - num2text(BE_BLOB) = 14, - num2text(BE_REVENANT) = 14, - num2text(BE_OPERATIVE) = 21, - num2text(BE_CULTIST) = 21, - num2text(BE_RAIDER) = 21, - num2text(BE_ALIEN) = 21, - num2text(BE_NINJA) = 21, - num2text(BE_MUTINEER) = 21, - num2text(BE_MALF) = 30, + ROLE_PAI = 0, + ROLE_POSIBRAIN = 0, + ROLE_GUARDIAN = 0, + ROLE_TRAITOR = 7, + ROLE_CHANGELING = 14, + ROLE_SHADOWLING = 14, + ROLE_WIZARD = 14, + ROLE_REV = 14, + ROLE_VAMPIRE = 14, + ROLE_BLOB = 14, + ROLE_REVENANT = 14, + ROLE_OPERATIVE = 21, + ROLE_CULTIST = 21, + ROLE_RAIDER = 21, + ROLE_ALIEN = 21, + ROLE_DEMON = 21, + ROLE_SENTIENT = 21, +// ROLE_GANG = 21, + ROLE_BORER = 21, + ROLE_NINJA = 21, + ROLE_MUTINEER = 21, + ROLE_MALF = 30, ) /proc/player_old_enough_antag(client/C, role) @@ -75,7 +62,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts #define MAX_SAVE_SLOTS 10 // Save slots for regular players #define MAX_SAVE_SLOTS_MEMBER 10 // Save slots for BYOND members -datum/preferences +/datum/preferences //doohickeys for savefiles // var/path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used @@ -91,7 +78,7 @@ datum/preferences //game-preferences // var/lastchangelog = "" //Saved changlog filesize to detect if there was a change var/ooccolor = "#b82e00" - var/be_special = 0 //Special role selection + var/be_special = list() //Special role selection var/UI_style = "Midnight" var/toggles = TOGGLES_DEFAULT var/sound = SOUND_DEFAULT @@ -209,1010 +196,884 @@ datum/preferences save_preferences(C) save_character(C) //let's save this new random character so it doesn't keep generating new ones. -/datum/preferences - proc/ShowChoices(mob/user) - if(!user || !user.client) return - update_preview_icon() - user << browse_rsc(preview_icon_front, "previewicon.png") - user << browse_rsc(preview_icon_side, "previewicon2.png") - var/dat = "
" - dat += "Character Settings" - dat += "Game Preferences" - dat += "
" - dat += "
" +// Hello I am a proc full of snowflake species checks how are you +/datum/preferences/proc/ShowChoices(mob/user) + if(!user || !user.client) return + update_preview_icon() + user << browse_rsc(preview_icon_front, "previewicon.png") + user << browse_rsc(preview_icon_side, "previewicon2.png") + var/dat = "
" - switch(current_tab) - if (0) // Character Settings# - dat += "
" - dat += "Slot [slot_name] - " - dat += "Load slot - " - dat += "Save slot - " - dat += "Reload slot" - dat += "
" - dat += "

Occupation Choices

" - dat += "Set Occupation Preferences
" - dat += "

Identity

" - dat += "
" - if(appearance_isbanned(user)) - dat += "You are banned from using custom names and appearances. You can continue to adjust your characters, but you will be randomised once you join the game.
" - dat += "Name: " - dat += "[real_name]
" - dat += "(Random Name) " - dat += "(Always Random Name: [be_random_name ? "Yes" : "No"])" - dat += "
" - dat += "Gender: [gender == MALE ? "Male" : "Female"]
" - dat += "Age: [age]" - //dat += "Spawn Point: [spawnpoint]" - dat += "
Body " - dat += "(®)" - dat += "
" - dat += "Species: [species]
" - if(species == "Vox")//oldvox code, sucks I know - dat += "N2 Tank: [speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
" - dat += "Secondary Language:
[language]
" - dat += "Blood Type: [b_type]
" - if(species == "Human") - dat += "Skin Tone: [-s_tone + 35]/220
" + dat += "Character Settings" + dat += "Game Preferences" + dat += "" + dat += "
" - // dat += "Skin pattern: Adjust
" - dat += "
Handicaps
" - dat += "\t\[Set Disabilities\]
" - dat += "Limbs: Adjust
" - if(species != "Slime People" && species != "Machine") - dat += "Internal Organs: Adjust
" + switch(current_tab) + if (0) // Character Settings# + dat += "
" + dat += "Slot [slot_name] - " + dat += "Load slot - " + dat += "Save slot - " + dat += "Reload slot" + dat += "
" + dat += "

Occupation Choices

" + dat += "Set Occupation Preferences
" + dat += "

Identity

" + dat += "
" + if(appearance_isbanned(user)) + dat += "You are banned from using custom names and appearances. You can continue to adjust your characters, but you will be randomised once you join the game.
" + dat += "Name: " + dat += "[real_name]
" + dat += "(Random Name) " + dat += "(Always Random Name: [be_random_name ? "Yes" : "No"])" + dat += "
" + dat += "Gender: [gender == MALE ? "Male" : "Female"]
" + dat += "Age: [age]" + //dat += "Spawn Point: [spawnpoint]" + dat += "
Body " + dat += "(®)" + dat += "
" + dat += "Species: [species]
" + if(species == "Vox")//oldvox code, sucks I know + dat += "N2 Tank: [speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
" + dat += "Secondary Language:
[language]
" + dat += "Blood Type: [b_type]
" + if(species == "Human") + dat += "Skin Tone: [-s_tone + 35]/220
" - //display limbs below - var/ind = 0 - for(var/name in organ_data) - //world << "[ind] \ [organ_data.len]" - var/status = organ_data[name] - var/organ_name = null - switch(name) - if("l_arm") - organ_name = "left arm" - if("r_arm") - organ_name = "right arm" - if("l_leg") - organ_name = "left leg" - if("r_leg") - organ_name = "right leg" - if("l_foot") - organ_name = "left foot" - if("r_foot") - organ_name = "right foot" - if("l_hand") - organ_name = "left hand" - if("r_hand") - organ_name = "right hand" - if("heart") - organ_name = "heart" - if("eyes") - organ_name = "eyes" + // dat += "Skin pattern: Adjust
" + dat += "
Handicaps
" + dat += "\t\[Set Disabilities\]
" + dat += "Limbs: Adjust
" + if(species != "Slime People" && species != "Machine") + dat += "Internal Organs: Adjust
" - if(status == "cyborg") - ++ind - if(ind > 1) - dat += ", " - var/datum/robolimb/R - if(rlimb_data[name] && all_robolimbs[rlimb_data[name]]) - R = all_robolimbs[rlimb_data[name]] - else - R = basic_robolimb - dat += "\t[R.company] [organ_name] prothesis" + //display limbs below + var/ind = 0 + for(var/name in organ_data) + //world << "[ind] \ [organ_data.len]" + var/status = organ_data[name] + var/organ_name = null + switch(name) + if("l_arm") + organ_name = "left arm" + if("r_arm") + organ_name = "right arm" + if("l_leg") + organ_name = "left leg" + if("r_leg") + organ_name = "right leg" + if("l_foot") + organ_name = "left foot" + if("r_foot") + organ_name = "right foot" + if("l_hand") + organ_name = "left hand" + if("r_hand") + organ_name = "right hand" + if("heart") + organ_name = "heart" + if("eyes") + organ_name = "eyes" - - else if(status == "amputated") - ++ind - if(ind > 1) - dat += ", " - dat += "\tAmputated [organ_name]" - - else if(status == "mechanical") - ++ind - if(ind > 1) - dat += ", " - dat += "\tMechanical [organ_name]" - - else if(status == "assisted") - ++ind - if(ind > 1) - dat += ", " - switch(organ_name) - if("heart") - dat += "\tPacemaker-assisted [organ_name]" - if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements - dat += "\tSurgically altered [organ_name]" - if("eyes") - dat += "\tRetinal overlayed [organ_name]" - else - dat += "\tMechanically assisted [organ_name]" - if(!ind) - dat += "\[...\]

" - else - dat += "

" - dat += "Underwear:
[underwear]
" - dat += "Undershirt:
[undershirt]
" - dat += "Socks:
[socks]
" - dat += "Backpack Type:
[backbaglist[backbag]]
" - dat += "Nanotrasen Relation:
[nanotrasen_relation]
" - dat += "
Preview
" - dat += "
" - - if(jobban_isbanned(user, "Records")) - dat += "You are banned from using character records.
" - else - dat += "Character Records
" - dat += "Set Flavor Text
" - if(lentext(flavor_text) <= 40) - if(!lentext(flavor_text)) - dat += "\[...\]" + if(status == "cyborg") + ++ind + if(ind > 1) + dat += ", " + var/datum/robolimb/R + if(rlimb_data[name] && all_robolimbs[rlimb_data[name]]) + R = all_robolimbs[rlimb_data[name]] else - dat += "[flavor_text]" + R = basic_robolimb + dat += "\t[R.company] [organ_name] prothesis" + + + else if(status == "amputated") + ++ind + if(ind > 1) + dat += ", " + dat += "\tAmputated [organ_name]" + + else if(status == "mechanical") + ++ind + if(ind > 1) + dat += ", " + dat += "\tMechanical [organ_name]" + + else if(status == "assisted") + ++ind + if(ind > 1) + dat += ", " + switch(organ_name) + if("heart") + dat += "\tPacemaker-assisted [organ_name]" + if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements + dat += "\tSurgically altered [organ_name]" + if("eyes") + dat += "\tRetinal overlayed [organ_name]" + else + dat += "\tMechanically assisted [organ_name]" + if(!ind) + dat += "\[...\]

" + else + dat += "

" + dat += "Underwear:
[underwear]
" + dat += "Undershirt:
[undershirt]
" + dat += "Socks:
[socks]
" + dat += "Backpack Type:
[backbaglist[backbag]]
" + dat += "Nanotrasen Relation:
[nanotrasen_relation]
" + dat += "
Preview
" + dat += "
" + + if(jobban_isbanned(user, "Records")) + dat += "You are banned from using character records.
" + else + dat += "Character Records
" + dat += "Set Flavor Text
" + if(lentext(flavor_text) <= 40) + if(!lentext(flavor_text)) + dat += "\[...\]" else - dat += "[TextPreview(flavor_text)]...
" - dat += "
" + dat += "[flavor_text]" + else + dat += "[TextPreview(flavor_text)]...
" + dat += "
" - var/hairname = "Hair" - if(species == "Machine") - hairname = "Frame Color" - dat += "
[hairname]
" - dat += "Change Color
__
" - dat += "
Style: [h_style]
" + var/hairname = "Hair" + if(species == "Machine") + hairname = "Frame Color" + dat += "
[hairname]
" + dat += "Change Color
__
" + dat += "
Style: [h_style]
" - dat += "
Facial
" - dat += "Change Color
__
" - dat += "
Style: [f_style]
" + dat += "
Facial
" + dat += "Change Color
__
" + dat += "
Style: [f_style]
" - dat += "
Eyes
" - dat += "Change Color
__

" + dat += "
Eyes
" + dat += "Change Color
__

" - if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) //admins can always fuck with this, because they are admins - dat += "
Body Color
" - dat += "Change Color
__
" + if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) //admins can always fuck with this, because they are admins + dat += "
Body Color
" + dat += "Change Color
__
" - if(body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) - dat += "
Body Accessory
" - dat += "Accessory: [body_accessory ? "[body_accessory]" : "None"]
" + if(body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) + dat += "
Body Accessory
" + dat += "Accessory: [body_accessory ? "[body_accessory]" : "None"]
" - dat += "

" + dat += "

" - if (1) // General Preferences - dat += "
" - dat += "

General Settings

" - dat += "UI Style: [UI_style]
" - dat += "Custom UI settings:
" - dat += "Color: [UI_style_color]
__

" - dat += "Alpha (transparency): [UI_style_alpha]
" - dat += "Play admin midis: [(sound & SOUND_MIDI) ? "Yes" : "No"]
" - dat += "Play lobby music: [(sound & SOUND_LOBBY) ? "Yes" : "No"]
" - dat += "Randomized character slot: [randomslot ? "Yes" : "No"]
" - dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]
" - dat += "Ghost sight: [(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]
" - dat += "Ghost radio: [(toggles & CHAT_GHOSTRADIO) ? "Nearest Speakers" : "All Chatter"]
" - if(config.allow_Metadata) - dat += "OOC notes: Edit
" + if (1) // General Preferences + dat += "
" + dat += "

General Settings

" + dat += "UI Style: [UI_style]
" + dat += "Custom UI settings:
" + dat += "Color: [UI_style_color]
__

" + dat += "Alpha (transparency): [UI_style_alpha]
" + dat += "Play admin midis: [(sound & SOUND_MIDI) ? "Yes" : "No"]
" + dat += "Play lobby music: [(sound & SOUND_LOBBY) ? "Yes" : "No"]
" + dat += "Randomized character slot: [randomslot ? "Yes" : "No"]
" + dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]
" + dat += "Ghost sight: [(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]
" + dat += "Ghost radio: [(toggles & CHAT_GHOSTRADIO) ? "Nearest Speakers" : "All Chatter"]
" + if(config.allow_Metadata) + dat += "OOC notes: Edit
" - if(user.client) - if(user.client.holder) - dat += "Adminhelp sound: " - dat += "[(sound & SOUND_ADMINHELP)?"On":"Off"]
" + if(user.client) + if(user.client.holder) + dat += "Adminhelp sound: " + dat += "[(sound & SOUND_ADMINHELP)?"On":"Off"]
" - if(check_rights(R_ADMIN,0)) - dat += "OOC:     Change
" + if(check_rights(R_ADMIN,0)) + dat += "OOC:     Change
" - if(unlock_content) - dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]
" + if(unlock_content) + dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]
" - dat += "
" - dat += "

Special Role Settings

" + dat += "
" + dat += "

Special Role Settings

" // dat += "

" - if(jobban_isbanned(user, "Syndicate")) - dat += "You are banned from special roles." - src.be_special = 0 - else - var/n = 0 - for (var/i in special_roles) - if(special_roles[i]) //if mode is available on the server - var/special_role_flag = be_special_flags[i] - if(jobban_isbanned(user, i)) - dat += "Be [i]: \[BANNED]
" - else if(!player_old_enough_antag(user.client,special_role_flag)) - var/available_in_days_antag = available_in_days_antag(user.client,special_role_flag) - dat += "Be [i]: \[IN [(available_in_days_antag)] DAYS]
" - else - dat += "Be [i]: [src.be_special&(1<
" - n++ - dat += "

" + if(jobban_isbanned(user, "Syndicate")) + dat += "You are banned from special roles." + src.be_special = list() + else + for (var/i in special_roles) + if(jobban_isbanned(user, i)) + dat += "Be [capitalize(i)]: \[BANNED]
" + else if(!player_old_enough_antag(user.client,i)) + var/available_in_days_antag = available_in_days_antag(user.client,i) + dat += "Be [capitalize(i)]: \[IN [(available_in_days_antag)] DAYS]
" + else + dat += "Be [capitalize(i)]: [(i in src.be_special) ? "Yes" : "No"]
" + dat += "

" - if(!IsGuestKey(user.key)) - dat += "Undo - " - dat += "Save Setup - " + if(!IsGuestKey(user.key)) + dat += "Undo - " + dat += "Save Setup - " - dat += "Reset Setup" - dat += "
" + dat += "Reset Setup" + dat += "
" // user << browse(dat, "window=preferences;size=560x580") - var/datum/browser/popup = new(user, "preferences", "
Character Setup
", 640, 810) - popup.set_content(dat) - popup.open(0) + var/datum/browser/popup = new(user, "preferences", "
Character Setup
", 640, 810) + popup.set_content(dat) + popup.open(0) - proc/SetChoices(mob/user, limit = 12, list/splitJobs = list("Civilian","Research Director","AI","Bartender"), width = 760, height = 790) - if(!job_master) - return +/datum/preferences/proc/SetChoices(mob/user, limit = 12, list/splitJobs = list("Civilian","Research Director","AI","Bartender"), width = 760, height = 790) + if(!job_master) + return - //limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice. - //splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice. - //width - Screen' width. Defaults to 550 to make it look nice. - //height - Screen's height. Defaults to 500 to make it look nice. + //limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice. + //splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice. + //width - Screen' width. Defaults to 550 to make it look nice. + //height - Screen's height. Defaults to 500 to make it look nice. - var/HTML = "" - HTML += "
" - HTML += "Choose occupation chances
Unavailable occupations are crossed out.

" - HTML += "
\[Done\]

" // Easier to press up here. - HTML += "
Left-click to raise an occupation preference, right-click to lower it.
" - HTML += "" - HTML += "" - switch(alternate_option) - if(GET_RANDOM_JOB) - HTML += "

Get random job if preferences unavailable

" - if(BE_CIVILIAN) - HTML += "

Be a civilian if preferences unavailable

" - if(RETURN_TO_LOBBY) - HTML += "

Return to lobby if preferences unavailable

" + for(var/i = 1, i < (limit - index), i += 1) // Finish the column so it is even + HTML += "" - HTML += "
\[Reset\]
" - HTML += "" + HTML += "
" // Table within a table for alignment, also allows you to easily add more colomns. - HTML += "" - var/index = -1 + var/HTML = "" + HTML += "
" + HTML += "Choose occupation chances
Unavailable occupations are crossed out.

" + HTML += "
\[Done\]

" // Easier to press up here. + HTML += "
Left-click to raise an occupation preference, right-click to lower it.
" + HTML += "" + HTML += "
" // Table within a table for alignment, also allows you to easily add more colomns. + HTML += "" + var/index = -1 - //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. - var/datum/job/lastJob - if (!job_master) return - for(var/datum/job/job in job_master.occupations) + //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. + var/datum/job/lastJob + if (!job_master) return + for(var/datum/job/job in job_master.occupations) - index += 1 - if((index >= limit) || (job.title in splitJobs)) - if((index < limit) && (lastJob != null)) - //If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with - //the last job's selection color. Creating a rather nice effect. - for(var/i = 0, i < (limit - index), i += 1) - HTML += "" - HTML += "
  
" - index = 0 + index += 1 + if((index >= limit) || (job.title in splitJobs)) + if((index < limit) && (lastJob != null)) + //If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with + //the last job's selection color. Creating a rather nice effect. + for(var/i = 0, i < (limit - index), i += 1) + HTML += "" + HTML += "
  
" + index = 0 - HTML += "" - continue - if(jobban_isbanned(user, rank)) - HTML += "[rank]" - continue - if(!job.player_old_enough(user.client)) - var/available_in_days = job.available_in_days(user.client) - HTML += "[rank]" - continue - if((job_support_low & CIVILIAN) && (rank != "Civilian")) - HTML += "[rank]" - continue - if((rank in command_positions) || (rank == "AI"))//Bold head jobs - HTML += "[rank]" - else - HTML += "[rank]" + HTML += "" + continue + if(jobban_isbanned(user, rank)) + HTML += "[rank]" + continue + if(!job.player_old_enough(user.client)) + var/available_in_days = job.available_in_days(user.client) + HTML += "[rank]" + continue + if((job_support_low & CIVILIAN) && (rank != "Civilian")) + HTML += "[rank]" + continue + if((rank in command_positions) || (rank == "AI"))//Bold head jobs + HTML += "[rank]" + else + HTML += "[rank]" - HTML += "" - HTML += "" - continue -/* - if(GetJobDepartment(job, 1) & job.flag) - HTML += " \[High]" - else if(GetJobDepartment(job, 2) & job.flag) - HTML += " \[Medium]" - else if(GetJobDepartment(job, 3) & job.flag) - HTML += " \[Low]" + if(rank == "Civilian")//Civilian is special + if(job_support_low & CIVILIAN) + HTML += " \[Yes]" else - HTML += " \[NEVER]" - */ - HTML += "[prefLevelLabel]" - + HTML += " \[No]" if(job.alt_titles) HTML += "
\[[GetPlayerAltTitle(job)]\]" - - HTML += "" + continue +/* + if(GetJobDepartment(job, 1) & job.flag) + HTML += " \[High]" + else if(GetJobDepartment(job, 2) & job.flag) + HTML += " \[Medium]" + else if(GetJobDepartment(job, 3) & job.flag) + HTML += " \[Low]" + else + HTML += " \[NEVER]" + */ + HTML += "[prefLevelLabel]" - for(var/i = 1, i < (limit - index), i += 1) // Finish the column so it is even - HTML += "" + if(job.alt_titles) + HTML += "
\[[GetPlayerAltTitle(job)]\]" - HTML += "
" - var/rank = job.title - lastJob = job - if(!is_job_whitelisted(user, rank)) - HTML += "[rank] \[KARMA]
\[BANNED]
\[IN [(available_in_days)] DAYS]
" + var/rank = job.title + lastJob = job + if(!is_job_whitelisted(user, rank)) + HTML += "[rank] \[KARMA]
\[BANNED]
\[IN [(available_in_days)] DAYS]
" + HTML += "" - var/prefLevelLabel = "ERROR" - var/prefLevelColor = "pink" - var/prefUpperLevel = -1 // level to assign on left click - var/prefLowerLevel = -1 // level to assign on right click + var/prefLevelLabel = "ERROR" + var/prefLevelColor = "pink" + var/prefUpperLevel = -1 // level to assign on left click + var/prefLowerLevel = -1 // level to assign on right click - if(GetJobDepartment(job, 1) & job.flag) - prefLevelLabel = "High" - prefLevelColor = "slateblue" - prefUpperLevel = 4 - prefLowerLevel = 2 - else if(GetJobDepartment(job, 2) & job.flag) - prefLevelLabel = "Medium" - prefLevelColor = "green" - prefUpperLevel = 1 - prefLowerLevel = 3 - else if(GetJobDepartment(job, 3) & job.flag) - prefLevelLabel = "Low" - prefLevelColor = "orange" - prefUpperLevel = 2 - prefLowerLevel = 4 - else - prefLevelLabel = "NEVER" - prefLevelColor = "red" - prefUpperLevel = 3 - prefLowerLevel = 1 + if(GetJobDepartment(job, 1) & job.flag) + prefLevelLabel = "High" + prefLevelColor = "slateblue" + prefUpperLevel = 4 + prefLowerLevel = 2 + else if(GetJobDepartment(job, 2) & job.flag) + prefLevelLabel = "Medium" + prefLevelColor = "green" + prefUpperLevel = 1 + prefLowerLevel = 3 + else if(GetJobDepartment(job, 3) & job.flag) + prefLevelLabel = "Low" + prefLevelColor = "orange" + prefUpperLevel = 2 + prefLowerLevel = 4 + else + prefLevelLabel = "NEVER" + prefLevelColor = "red" + prefUpperLevel = 3 + prefLowerLevel = 1 - HTML += "" + HTML += "" // HTML += "" - if(rank == "Civilian")//Civilian is special - if(job_support_low & CIVILIAN) - HTML += " \[Yes]" - else - HTML += " \[No]" - if(job.alt_titles) - HTML += "
\[[GetPlayerAltTitle(job)]\]
  
" - HTML += "
" + HTML += "
  
" - user << browse(null, "window=preferences") + HTML += "
" + + switch(alternate_option) + if(GET_RANDOM_JOB) + HTML += "

Get random job if preferences unavailable

" + if(BE_CIVILIAN) + HTML += "

Be a civilian if preferences unavailable

" + if(RETURN_TO_LOBBY) + HTML += "

Return to lobby if preferences unavailable

" + + HTML += "
\[Reset\]
" + HTML += "
" + + user << browse(null, "window=preferences") // user << browse(HTML, "window=mob_occupation;size=[width]x[height]") - var/datum/browser/popup = new(user, "mob_occupation", "
Occupation Preferences
", width, height) - popup.set_window_options("can_close=0") - popup.set_content(HTML) - popup.open(0) + var/datum/browser/popup = new(user, "mob_occupation", "
Occupation Preferences
", width, height) + popup.set_window_options("can_close=0") + popup.set_content(HTML) + popup.open(0) + return + +/datum/preferences/proc/SetJobPreferenceLevel(var/datum/job/job, var/level) + if (!job) + return 0 + + if (level == 1) // to high + // remove any other job(s) set to high + job_support_med |= job_support_high + job_engsec_med |= job_engsec_high + job_medsci_med |= job_medsci_high + job_karma_med |= job_karma_high + job_support_high = 0 + job_engsec_high = 0 + job_medsci_high = 0 + job_karma_high = 0 + + if (job.department_flag == SUPPORT) + job_support_low &= ~job.flag + job_support_med &= ~job.flag + job_support_high &= ~job.flag + + switch(level) + if (1) + job_support_high |= job.flag + if (2) + job_support_med |= job.flag + if (3) + job_support_low |= job.flag + + return 1 + else if (job.department_flag == ENGSEC) + job_engsec_low &= ~job.flag + job_engsec_med &= ~job.flag + job_engsec_high &= ~job.flag + + switch(level) + if (1) + job_engsec_high |= job.flag + if (2) + job_engsec_med |= job.flag + if (3) + job_engsec_low |= job.flag + + return 1 + else if (job.department_flag == MEDSCI) + job_medsci_low &= ~job.flag + job_medsci_med &= ~job.flag + job_medsci_high &= ~job.flag + + switch(level) + if (1) + job_medsci_high |= job.flag + if (2) + job_medsci_med |= job.flag + if (3) + job_medsci_low |= job.flag + + return 1 + else if (job.department_flag == KARMA) + job_karma_low &= ~job.flag + job_karma_med &= ~job.flag + job_karma_high &= ~job.flag + + switch(level) + if (1) + job_karma_high |= job.flag + if (2) + job_karma_med |= job.flag + if (3) + job_karma_low |= job.flag + + return 1 + + return 0 + +/datum/preferences/proc/UpdateJobPreference(mob/user, role, desiredLvl) + var/datum/job/job = job_master.GetJob(role) + + if(!job) + user << browse(null, "window=mob_occupation") + ShowChoices(user) return - proc/SetJobPreferenceLevel(var/datum/job/job, var/level) - if (!job) - return 0 + if (!isnum(desiredLvl)) + user << "\red UpdateJobPreference - desired level was not a number. Please notify coders!" + ShowChoices(user) + return - if (level == 1) // to high - // remove any other job(s) set to high + if(role == "Civilian") + if(job_support_low & job.flag) + job_support_low &= ~job.flag + else + job_support_low |= job.flag + SetChoices(user) + return 1 + + SetJobPreferenceLevel(job, desiredLvl) + SetChoices(user) + + return 1 + +/datum/preferences/proc/ShowDisabilityState(mob/user,flag,label) + if(flag==DISABILITY_FLAG_FAT && species!=("Human" || "Tajaran" || "Grey")) + return "
  • [species] cannot be fat.
  • " + return "
  • [label]: [disabilities & flag ? "Yes" : "No"]
  • " + +/datum/preferences/proc/SetDisabilities(mob/user) + var/HTML = "" + + // AUTOFIXED BY fix_string_idiocy.py + // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:474: HTML += "
    " + HTML += {"
    + Choose disabilities
      "} + // END AUTOFIX + HTML += ShowDisabilityState(user,DISABILITY_FLAG_NEARSIGHTED,"Needs Glasses") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_FAT,"Obese") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_EPILEPTIC,"Seizures") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_DEAF,"Deaf") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_BLIND,"Blind") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_MUTE,"Mute") + + + // AUTOFIXED BY fix_string_idiocy.py + // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:481: HTML += "
    " + HTML += {" + \[Done\] + \[Reset\] +
    "} + // END AUTOFIX + user << browse(null, "window=preferences") + user << browse(HTML, "window=disabil;size=350x300") + return + +/datum/preferences/proc/SetRecords(mob/user) + var/HTML = "" + HTML += "
    " + HTML += "Set Character Records
    " + + HTML += "Medical Records
    " + + if(lentext(med_record) <= 40) + HTML += "[med_record]" + else + HTML += "[copytext(med_record, 1, 37)]..." + + HTML += "

    Employment Records
    " + + if(lentext(gen_record) <= 40) + HTML += "[gen_record]" + else + HTML += "[copytext(gen_record, 1, 37)]..." + + HTML += "

    Security Records
    " + + if(lentext(sec_record) <= 40) + HTML += "[sec_record]
    " + else + HTML += "[copytext(sec_record, 1, 37)]...
    " + + HTML += "
    " + HTML += "\[Done\]" + HTML += "
    " + + user << browse(null, "window=preferences") + user << browse(HTML, "window=records;size=350x300") + return + +/datum/preferences/proc/GetPlayerAltTitle(datum/job/job) + return player_alt_titles.Find(job.title) > 0 \ + ? player_alt_titles[job.title] \ + : job.title + +/datum/preferences/proc/SetPlayerAltTitle(datum/job/job, new_title) + // remove existing entry + if(player_alt_titles.Find(job.title)) + player_alt_titles -= job.title + // add one if it's not default + if(job.title != new_title) + player_alt_titles[job.title] = new_title + +/datum/preferences/proc/SetJob(mob/user, role) + var/datum/job/job = job_master.GetJob(role) + if(!job) + user << browse(null, "window=mob_occupation") + ShowChoices(user) + return + + if(role == "Civilian") + if(job_support_low & job.flag) + job_support_low &= ~job.flag + else + job_support_low |= job.flag + SetChoices(user) + return 1 + + if(GetJobDepartment(job, 1) & job.flag) + SetJobDepartment(job, 1) + else if(GetJobDepartment(job, 2) & job.flag) + SetJobDepartment(job, 2) + else if(GetJobDepartment(job, 3) & job.flag) + SetJobDepartment(job, 3) + else//job = Never + SetJobDepartment(job, 4) + + SetChoices(user) + return 1 + +/datum/preferences/proc/ResetJobs() + job_support_high = 0 + job_support_med = 0 + job_support_low = 0 + + job_medsci_high = 0 + job_medsci_med = 0 + job_medsci_low = 0 + + job_engsec_high = 0 + job_engsec_med = 0 + job_engsec_low = 0 + + job_karma_high = 0 + job_karma_med = 0 + job_karma_low = 0 + + +/datum/preferences/proc/GetJobDepartment(var/datum/job/job, var/level) + if(!job || !level) return 0 + switch(job.department_flag) + if(SUPPORT) + switch(level) + if(1) + return job_support_high + if(2) + return job_support_med + if(3) + return job_support_low + if(MEDSCI) + switch(level) + if(1) + return job_medsci_high + if(2) + return job_medsci_med + if(3) + return job_medsci_low + if(ENGSEC) + switch(level) + if(1) + return job_engsec_high + if(2) + return job_engsec_med + if(3) + return job_engsec_low + if(KARMA) + switch(level) + if(1) + return job_karma_high + if(2) + return job_karma_med + if(3) + return job_karma_low + return 0 + +/datum/preferences/proc/SetJobDepartment(var/datum/job/job, var/level) + if(!job || !level) return 0 + switch(level) + if(1)//Only one of these should ever be active at once so clear them all here + job_support_high = 0 + job_medsci_high = 0 + job_engsec_high = 0 + job_karma_high = 0 + return 1 + if(2)//Set current highs to med, then reset them job_support_med |= job_support_high - job_engsec_med |= job_engsec_high job_medsci_med |= job_medsci_high + job_engsec_med |= job_engsec_high job_karma_med |= job_karma_high job_support_high = 0 - job_engsec_high = 0 job_medsci_high = 0 + job_engsec_high = 0 job_karma_high = 0 - if (job.department_flag == SUPPORT) - job_support_low &= ~job.flag - job_support_med &= ~job.flag - job_support_high &= ~job.flag - + switch(job.department_flag) + if(SUPPORT) switch(level) - if (1) - job_support_high |= job.flag - if (2) + if(2) + job_support_high = job.flag + job_support_med &= ~job.flag + if(3) job_support_med |= job.flag - if (3) + job_support_low &= ~job.flag + else job_support_low |= job.flag - - return 1 - else if (job.department_flag == ENGSEC) - job_engsec_low &= ~job.flag - job_engsec_med &= ~job.flag - job_engsec_high &= ~job.flag - + if(MEDSCI) switch(level) - if (1) - job_engsec_high |= job.flag - if (2) - job_engsec_med |= job.flag - if (3) - job_engsec_low |= job.flag - - return 1 - else if (job.department_flag == MEDSCI) - job_medsci_low &= ~job.flag - job_medsci_med &= ~job.flag - job_medsci_high &= ~job.flag - - switch(level) - if (1) - job_medsci_high |= job.flag - if (2) + if(2) + job_medsci_high = job.flag + job_medsci_med &= ~job.flag + if(3) job_medsci_med |= job.flag - if (3) + job_medsci_low &= ~job.flag + else job_medsci_low |= job.flag - - return 1 - else if (job.department_flag == KARMA) - job_karma_low &= ~job.flag - job_karma_med &= ~job.flag - job_karma_high &= ~job.flag - + if(ENGSEC) switch(level) - if (1) - job_karma_high |= job.flag - if (2) + if(2) + job_engsec_high = job.flag + job_engsec_med &= ~job.flag + if(3) + job_engsec_med |= job.flag + job_engsec_low &= ~job.flag + else + job_engsec_low |= job.flag + if(KARMA) + switch(level) + if(2) + job_karma_high = job.flag + job_karma_med &= ~job.flag + if(3) job_karma_med |= job.flag - if (3) + job_karma_low &= ~job.flag + else job_karma_low |= job.flag + return 1 - return 1 +/datum/preferences/proc/process_link(mob/user, list/href_list) + if(!user) return - return 0 - - proc/UpdateJobPreference(mob/user, role, desiredLvl) - var/datum/job/job = job_master.GetJob(role) - - if(!job) - user << browse(null, "window=mob_occupation") - ShowChoices(user) - return - - if (!isnum(desiredLvl)) - user << "\red UpdateJobPreference - desired level was not a number. Please notify coders!" - ShowChoices(user) - return - - if(role == "Civilian") - if(job_support_low & job.flag) - job_support_low &= ~job.flag - else - job_support_low |= job.flag - SetChoices(user) - return 1 - - SetJobPreferenceLevel(job, desiredLvl) - SetChoices(user) - - return 1 - - proc/ShowDisabilityState(mob/user,flag,label) - if(flag==DISABILITY_FLAG_FAT && species!=("Human" || "Tajaran" || "Grey")) - return "
  • [species] cannot be fat.
  • " - return "
  • [label]: [disabilities & flag ? "Yes" : "No"]
  • " - - proc/SetDisabilities(mob/user) - var/HTML = "" - - // AUTOFIXED BY fix_string_idiocy.py - // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:474: HTML += "
    " - HTML += {"
    - Choose disabilities
      "} - // END AUTOFIX - HTML += ShowDisabilityState(user,DISABILITY_FLAG_NEARSIGHTED,"Needs Glasses") - HTML += ShowDisabilityState(user,DISABILITY_FLAG_FAT,"Obese") - HTML += ShowDisabilityState(user,DISABILITY_FLAG_EPILEPTIC,"Seizures") - HTML += ShowDisabilityState(user,DISABILITY_FLAG_DEAF,"Deaf") - HTML += ShowDisabilityState(user,DISABILITY_FLAG_BLIND,"Blind") - HTML += ShowDisabilityState(user,DISABILITY_FLAG_MUTE,"Mute") - - - // AUTOFIXED BY fix_string_idiocy.py - // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:481: HTML += "
    " - HTML += {" - \[Done\] - \[Reset\] -
    "} - // END AUTOFIX - user << browse(null, "window=preferences") - user << browse(HTML, "window=disabil;size=350x300") - return - - proc/SetRecords(mob/user) - var/HTML = "" - HTML += "
    " - HTML += "Set Character Records
    " - - HTML += "Medical Records
    " - - if(lentext(med_record) <= 40) - HTML += "[med_record]" - else - HTML += "[copytext(med_record, 1, 37)]..." - - HTML += "

    Employment Records
    " - - if(lentext(gen_record) <= 40) - HTML += "[gen_record]" - else - HTML += "[copytext(gen_record, 1, 37)]..." - - HTML += "

    Security Records
    " - - if(lentext(sec_record) <= 40) - HTML += "[sec_record]
    " - else - HTML += "[copytext(sec_record, 1, 37)]...
    " - - HTML += "
    " - HTML += "\[Done\]" - HTML += "
    " - - user << browse(null, "window=preferences") - user << browse(HTML, "window=records;size=350x300") - return - - proc/GetPlayerAltTitle(datum/job/job) - return player_alt_titles.Find(job.title) > 0 \ - ? player_alt_titles[job.title] \ - : job.title - - proc/SetPlayerAltTitle(datum/job/job, new_title) - // remove existing entry - if(player_alt_titles.Find(job.title)) - player_alt_titles -= job.title - // add one if it's not default - if(job.title != new_title) - player_alt_titles[job.title] = new_title - - proc/SetJob(mob/user, role) - var/datum/job/job = job_master.GetJob(role) - if(!job) - user << browse(null, "window=mob_occupation") - ShowChoices(user) - return - - if(role == "Civilian") - if(job_support_low & job.flag) - job_support_low &= ~job.flag - else - job_support_low |= job.flag - SetChoices(user) - return 1 - - if(GetJobDepartment(job, 1) & job.flag) - SetJobDepartment(job, 1) - else if(GetJobDepartment(job, 2) & job.flag) - SetJobDepartment(job, 2) - else if(GetJobDepartment(job, 3) & job.flag) - SetJobDepartment(job, 3) - else//job = Never - SetJobDepartment(job, 4) - - SetChoices(user) - return 1 - - proc/ResetJobs() - job_support_high = 0 - job_support_med = 0 - job_support_low = 0 - - job_medsci_high = 0 - job_medsci_med = 0 - job_medsci_low = 0 - - job_engsec_high = 0 - job_engsec_med = 0 - job_engsec_low = 0 - - job_karma_high = 0 - job_karma_med = 0 - job_karma_low = 0 - - - proc/GetJobDepartment(var/datum/job/job, var/level) - if(!job || !level) return 0 - switch(job.department_flag) - if(SUPPORT) - switch(level) - if(1) - return job_support_high - if(2) - return job_support_med - if(3) - return job_support_low - if(MEDSCI) - switch(level) - if(1) - return job_medsci_high - if(2) - return job_medsci_med - if(3) - return job_medsci_low - if(ENGSEC) - switch(level) - if(1) - return job_engsec_high - if(2) - return job_engsec_med - if(3) - return job_engsec_low - if(KARMA) - switch(level) - if(1) - return job_karma_high - if(2) - return job_karma_med - if(3) - return job_karma_low - return 0 - - proc/SetJobDepartment(var/datum/job/job, var/level) - if(!job || !level) return 0 - switch(level) - if(1)//Only one of these should ever be active at once so clear them all here - job_support_high = 0 - job_medsci_high = 0 - job_engsec_high = 0 - job_karma_high = 0 - return 1 - if(2)//Set current highs to med, then reset them - job_support_med |= job_support_high - job_medsci_med |= job_medsci_high - job_engsec_med |= job_engsec_high - job_karma_med |= job_karma_high - job_support_high = 0 - job_medsci_high = 0 - job_engsec_high = 0 - job_karma_high = 0 - - switch(job.department_flag) - if(SUPPORT) - switch(level) - if(2) - job_support_high = job.flag - job_support_med &= ~job.flag - if(3) - job_support_med |= job.flag - job_support_low &= ~job.flag - else - job_support_low |= job.flag - if(MEDSCI) - switch(level) - if(2) - job_medsci_high = job.flag - job_medsci_med &= ~job.flag - if(3) - job_medsci_med |= job.flag - job_medsci_low &= ~job.flag - else - job_medsci_low |= job.flag - if(ENGSEC) - switch(level) - if(2) - job_engsec_high = job.flag - job_engsec_med &= ~job.flag - if(3) - job_engsec_med |= job.flag - job_engsec_low &= ~job.flag - else - job_engsec_low |= job.flag - if(KARMA) - switch(level) - if(2) - job_karma_high = job.flag - job_karma_med &= ~job.flag - if(3) - job_karma_med |= job.flag - job_karma_low &= ~job.flag - else - job_karma_low |= job.flag - return 1 - - proc/process_link(mob/user, list/href_list) - if(!user) return - - if(href_list["preference"] == "job") - switch(href_list["task"]) - if("close") - user << browse(null, "window=mob_occupation") - ShowChoices(user) - if("reset") - ResetJobs() - SetChoices(user) - if("random") - if(alternate_option == GET_RANDOM_JOB || alternate_option == BE_CIVILIAN) - alternate_option += 1 - else if(alternate_option == RETURN_TO_LOBBY) - alternate_option = 0 - else - return 0 - SetChoices(user) - if ("alt_title") - var/datum/job/job = locate(href_list["job"]) - if (job) - var/choices = list(job.title) + job.alt_titles - var/choice = input("Pick a title for [job.title].", "Character Generation", GetPlayerAltTitle(job)) as anything in choices | null - if(choice) - SetPlayerAltTitle(job, choice) - SetChoices(user) - if("input") - SetJob(user, href_list["text"]) - if("setJobLevel") - UpdateJobPreference(user, href_list["text"], text2num(href_list["level"])) + if(href_list["preference"] == "job") + switch(href_list["task"]) + if("close") + user << browse(null, "window=mob_occupation") + ShowChoices(user) + if("reset") + ResetJobs() + SetChoices(user) + if("random") + if(alternate_option == GET_RANDOM_JOB || alternate_option == BE_CIVILIAN) + alternate_option += 1 + else if(alternate_option == RETURN_TO_LOBBY) + alternate_option = 0 else - SetChoices(user) - return 1 - else if(href_list["preference"] == "disabilities") - - switch(href_list["task"]) - if("close") - user << browse(null, "window=disabil") - ShowChoices(user) - if("reset") - disabilities=0 - SetDisabilities(user) - if("input") - var/dflag=text2num(href_list["disability"]) - if(dflag >= 0) - if(!(dflag==DISABILITY_FLAG_FAT && species!=("Human" || "Tajaran" || "Grey"))) - disabilities ^= text2num(href_list["disability"]) //MAGIC - SetDisabilities(user) - else - SetDisabilities(user) - return 1 - - else if(href_list["preference"] == "records") - if(text2num(href_list["record"]) >= 1) - SetRecords(user) - return + return 0 + SetChoices(user) + if ("alt_title") + var/datum/job/job = locate(href_list["job"]) + if (job) + var/choices = list(job.title) + job.alt_titles + var/choice = input("Pick a title for [job.title].", "Character Generation", GetPlayerAltTitle(job)) as anything in choices | null + if(choice) + SetPlayerAltTitle(job, choice) + SetChoices(user) + if("input") + SetJob(user, href_list["text"]) + if("setJobLevel") + UpdateJobPreference(user, href_list["text"], text2num(href_list["level"])) else - user << browse(null, "window=records") - if(href_list["task"] == "med_record") - var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(med_record)) as message - - if(medmsg != null) - medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN) - medmsg = html_encode(medmsg) - - med_record = medmsg - SetRecords(user) - - if(href_list["task"] == "sec_record") - var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(sec_record)) as message - - if(secmsg != null) - secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN) - secmsg = html_encode(secmsg) - - sec_record = secmsg - SetRecords(user) - if(href_list["task"] == "gen_record") - var/genmsg = input(usr,"Set your employment notes here.","Employment Records",html_decode(gen_record)) as message - - if(genmsg != null) - genmsg = copytext(genmsg, 1, MAX_PAPER_MESSAGE_LEN) - genmsg = html_encode(genmsg) - - gen_record = genmsg - SetRecords(user) + SetChoices(user) + return 1 + else if(href_list["preference"] == "disabilities") switch(href_list["task"]) - if("random") - switch(href_list["preference"]) - if("name") - real_name = random_name(gender,species) - if("age") - age = rand(AGE_MIN, AGE_MAX) - if("hair") - if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell" || species == "Machine" || species == "Wryn" || species == "Vulpkanin") - r_hair = rand(0,255) - g_hair = rand(0,255) - b_hair = rand(0,255) - if("h_style") - h_style = random_hair_style(gender, species) - if("facial") - r_facial = rand(0,255) - g_facial = rand(0,255) - b_facial = rand(0,255) - if("f_style") - f_style = random_facial_hair_style(gender, species) - if("underwear") - underwear = random_underwear(gender) - ShowChoices(user) - if("undershirt") - undershirt = random_undershirt(gender) - ShowChoices(user) - if("socks") - socks = random_socks(gender) - ShowChoices(user) - if("eyes") - r_eyes = rand(0,255) - g_eyes = rand(0,255) - b_eyes = rand(0,255) - if("s_tone") - if(species == "Human") - s_tone = random_skin_tone() - if("s_color") - if(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Wyrn", "Vulpkanin", "Machine")) - r_skin = rand(0,255) - g_skin = rand(0,255) - b_skin = rand(0,255) - if("bag") - backbag = rand(1,4) - /*if("skin_style") - h_style = random_skin_style(gender)*/ - if("all") - random_character() + if("close") + user << browse(null, "window=disabil") + ShowChoices(user) + if("reset") + disabilities=0 + SetDisabilities(user) if("input") - switch(href_list["preference"]) - if("name") - var/raw_name = input(user, "Choose your character's name:", "Character Preference") as text|null - if (!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.) - var/new_name = reject_bad_name(raw_name) - if(new_name) - real_name = new_name - else - user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ." + var/dflag=text2num(href_list["disability"]) + if(dflag >= 0) + if(!(dflag==DISABILITY_FLAG_FAT && species!=("Human" || "Tajaran" || "Grey"))) + disabilities ^= text2num(href_list["disability"]) //MAGIC + SetDisabilities(user) + else + SetDisabilities(user) + return 1 - if("age") - var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null - if(new_age) - age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) - if("species") + else if(href_list["preference"] == "records") + if(text2num(href_list["record"]) >= 1) + SetRecords(user) + return + else + user << browse(null, "window=records") + if(href_list["task"] == "med_record") + var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(med_record)) as message - var/list/new_species = list("Human","Tajaran","Skrell","Unathi","Diona", "Vulpkanin") - var/prev_species = species + if(medmsg != null) + medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN) + medmsg = html_encode(medmsg) + + med_record = medmsg + SetRecords(user) + + if(href_list["task"] == "sec_record") + var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(sec_record)) as message + + if(secmsg != null) + secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN) + secmsg = html_encode(secmsg) + + sec_record = secmsg + SetRecords(user) + if(href_list["task"] == "gen_record") + var/genmsg = input(usr,"Set your employment notes here.","Employment Records",html_decode(gen_record)) as message + + if(genmsg != null) + genmsg = copytext(genmsg, 1, MAX_PAPER_MESSAGE_LEN) + genmsg = html_encode(genmsg) + + gen_record = genmsg + SetRecords(user) + + switch(href_list["task"]) + if("random") + switch(href_list["preference"]) + if("name") + real_name = random_name(gender,species) + if("age") + age = rand(AGE_MIN, AGE_MAX) + if("hair") + if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell" || species == "Machine" || species == "Wryn" || species == "Vulpkanin") + r_hair = rand(0,255) + g_hair = rand(0,255) + b_hair = rand(0,255) + if("h_style") + h_style = random_hair_style(gender, species) + if("facial") + r_facial = rand(0,255) + g_facial = rand(0,255) + b_facial = rand(0,255) + if("f_style") + f_style = random_facial_hair_style(gender, species) + if("underwear") + underwear = random_underwear(gender) + ShowChoices(user) + if("undershirt") + undershirt = random_undershirt(gender) + ShowChoices(user) + if("socks") + socks = random_socks(gender) + ShowChoices(user) + if("eyes") + r_eyes = rand(0,255) + g_eyes = rand(0,255) + b_eyes = rand(0,255) + if("s_tone") + if(species == "Human") + s_tone = random_skin_tone() + if("s_color") + if(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Wyrn", "Vulpkanin", "Machine")) + r_skin = rand(0,255) + g_skin = rand(0,255) + b_skin = rand(0,255) + if("bag") + backbag = rand(1,4) + /*if("skin_style") + h_style = random_skin_style(gender)*/ + if("all") + random_character() + if("input") + switch(href_list["preference"]) + if("name") + var/raw_name = input(user, "Choose your character's name:", "Character Preference") as text|null + if (!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.) + var/new_name = reject_bad_name(raw_name) + if(new_name) + real_name = new_name + else + user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ." + + if("age") + var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null + if(new_age) + age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) + if("species") + + var/list/new_species = list("Human","Tajaran","Skrell","Unathi","Diona", "Vulpkanin") + var/prev_species = species // var/whitelisted = 0 - if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it! - for(var/S in whitelisted_species) - if(is_alien_whitelisted(user,S)) - new_species += S + if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it! + for(var/S in whitelisted_species) + if(is_alien_whitelisted(user,S)) + new_species += S // whitelisted = 1 // if(!whitelisted) // alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.") - else //Not using the whitelist? Aliens for everyone! - new_species += whitelisted_species + else //Not using the whitelist? Aliens for everyone! + new_species += whitelisted_species - species = input("Please select a species", "Character Generation", null) in new_species + species = input("Please select a species", "Character Generation", null) in new_species - if(prev_species != species) - //grab one of the valid hair styles for the newly chosen species - var/list/valid_hairstyles = list() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if( !(species in S.species_allowed)) - continue - valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] - - if(valid_hairstyles.len) - h_style = pick(valid_hairstyles) - else - //this shouldn't happen - h_style = hair_styles_list["Bald"] - - //grab one of the valid facial hair styles for the newly chosen species - var/list/valid_facialhairstyles = list() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if( !(species in S.species_allowed)) - continue - - valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] - - if(valid_facialhairstyles.len) - f_style = pick(valid_facialhairstyles) - else - //this shouldn't happen - f_style = facial_hair_styles_list["Shaved"] - - // Don't wear another species' underwear! - var/datum/sprite_accessory/S = underwear_list[underwear] - if(!(species in S.species_allowed)) - underwear = random_underwear(gender, species) - - S = undershirt_list[undershirt] - if(!(species in S.species_allowed)) - undershirt = random_undershirt(gender, species) - - S = socks_list[socks] - if(!(species in S.species_allowed)) - socks = random_socks(gender, species) - - //reset hair colour and skin colour - r_hair = 0//hex2num(copytext(new_hair, 2, 4)) - g_hair = 0//hex2num(copytext(new_hair, 4, 6)) - b_hair = 0//hex2num(copytext(new_hair, 6, 8)) - - s_tone = 0 - - body_accessory = null //no vulpatail on humans damnit - if("speciesprefs")//oldvox code - speciesprefs = !speciesprefs - - if("language") -// var/languages_available - var/list/new_languages = list("None") -/* - if(config.usealienwhitelist) - for(var/L in all_languages) - var/datum/language/lang = all_languages[L] - if((!(lang.flags & RESTRICTED)) && (is_alien_whitelisted(user, L)||(!( lang.flags & WHITELISTED )))) - new_languages += lang - languages_available = 1 - - if(!(languages_available)) - alert(user, "There are not currently any available secondary languages.") - else -*/ - for(var/L in all_languages) - var/datum/language/lang = all_languages[L] - if(!(lang.flags & RESTRICTED)) - new_languages += lang.name - - language = input("Please select a secondary language", "Character Generation", null) in new_languages - - if("metadata") - var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null - if(new_metadata) - metadata = sanitize(copytext(new_metadata,1,MAX_MESSAGE_LEN)) - - if("b_type") - var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) - if(new_b_type) - b_type = new_b_type - - if("hair") - if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell" || species == "Machine" || species == "Vulpkanin") - var/input = "Choose your character's hair colour:" - if(species == "Machine") - input = "Choose your character's frame colour:" - var/new_hair = input(user, input, "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null - if(new_hair) - r_hair = hex2num(copytext(new_hair, 2, 4)) - g_hair = hex2num(copytext(new_hair, 4, 6)) - b_hair = hex2num(copytext(new_hair, 6, 8)) - - if("h_style") + if(prev_species != species) + //grab one of the valid hair styles for the newly chosen species var/list/valid_hairstyles = list() for(var/hairstyle in hair_styles_list) var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue if( !(species in S.species_allowed)) continue - valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] - var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles - if(new_h_style) - h_style = new_h_style - - if("body_accessory") - var/list/possible_body_accessories = list() - if(check_rights(R_ADMIN, 1, user)) - possible_body_accessories = body_accessory_by_name.Copy() + if(valid_hairstyles.len) + h_style = pick(valid_hairstyles) else - for(var/B in body_accessory_by_name) - var/datum/body_accessory/accessory = body_accessory_by_name[B] - if(!istype(accessory)) - possible_body_accessories += "None" //the only null entry should be the "None" option - continue - if(species in accessory.allowed_species) - possible_body_accessories += B + //this shouldn't happen + h_style = hair_styles_list["Bald"] - var/new_body_accessory = input(user, "Choose your body accessory:", "Character Preference") as null|anything in possible_body_accessories - if(new_body_accessory) - body_accessory = (new_body_accessory == "None") ? null : new_body_accessory - - if("facial") - var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(r_facial, g_facial, b_facial)) as color|null - if(new_facial) - r_facial = hex2num(copytext(new_facial, 2, 4)) - g_facial = hex2num(copytext(new_facial, 4, 6)) - b_facial = hex2num(copytext(new_facial, 6, 8)) - - if("f_style") + //grab one of the valid facial hair styles for the newly chosen species var/list/valid_facialhairstyles = list() for(var/facialhairstyle in facial_hair_styles_list) var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] @@ -1225,431 +1086,561 @@ datum/preferences valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] - var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facialhairstyles - if(new_f_style) - f_style = new_f_style - - if("underwear") - var/list/underwear_options - if(gender == MALE) - underwear_options = underwear_m + if(valid_facialhairstyles.len) + f_style = pick(valid_facialhairstyles) else - underwear_options = underwear_f + //this shouldn't happen + f_style = facial_hair_styles_list["Shaved"] - var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in underwear_options - if(new_underwear) - underwear = new_underwear - ShowChoices(user) + // Don't wear another species' underwear! + var/datum/sprite_accessory/S = underwear_list[underwear] + if(!(species in S.species_allowed)) + underwear = random_underwear(gender, species) - if("undershirt") - var/new_undershirt - if(gender == MALE) - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_m - else - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_f - if(new_undershirt) - undershirt = new_undershirt - ShowChoices(user) + S = undershirt_list[undershirt] + if(!(species in S.species_allowed)) + undershirt = random_undershirt(gender, species) - if("socks") - var/list/valid_sockstyles = list() - for(var/sockstyle in socks_list) - var/datum/sprite_accessory/S = socks_list[sockstyle] - if(gender == MALE && S.gender == FEMALE) + S = socks_list[socks] + if(!(species in S.species_allowed)) + socks = random_socks(gender, species) + + //reset hair colour and skin colour + r_hair = 0//hex2num(copytext(new_hair, 2, 4)) + g_hair = 0//hex2num(copytext(new_hair, 4, 6)) + b_hair = 0//hex2num(copytext(new_hair, 6, 8)) + + s_tone = 0 + + body_accessory = null //no vulpatail on humans damnit + if("speciesprefs")//oldvox code + speciesprefs = !speciesprefs + + if("language") +// var/languages_available + var/list/new_languages = list("None") +/* + if(config.usealienwhitelist) + for(var/L in all_languages) + var/datum/language/lang = all_languages[L] + if((!(lang.flags & RESTRICTED)) && (is_alien_whitelisted(user, L)||(!( lang.flags & WHITELISTED )))) + new_languages += lang + languages_available = 1 + + if(!(languages_available)) + alert(user, "There are not currently any available secondary languages.") + else +*/ + for(var/L in all_languages) + var/datum/language/lang = all_languages[L] + if(!(lang.flags & RESTRICTED)) + new_languages += lang.name + + language = input("Please select a secondary language", "Character Generation", null) in new_languages + + if("metadata") + var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null + if(new_metadata) + metadata = sanitize(copytext(new_metadata,1,MAX_MESSAGE_LEN)) + + if("b_type") + var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) + if(new_b_type) + b_type = new_b_type + + if("hair") + if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell" || species == "Machine" || species == "Vulpkanin") + var/input = "Choose your character's hair colour:" + if(species == "Machine") + input = "Choose your character's frame colour:" + var/new_hair = input(user, input, "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null + if(new_hair) + r_hair = hex2num(copytext(new_hair, 2, 4)) + g_hair = hex2num(copytext(new_hair, 4, 6)) + b_hair = hex2num(copytext(new_hair, 6, 8)) + + if("h_style") + var/list/valid_hairstyles = list() + for(var/hairstyle in hair_styles_list) + var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + if( !(species in S.species_allowed)) + continue + + valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] + + var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles + if(new_h_style) + h_style = new_h_style + + if("body_accessory") + var/list/possible_body_accessories = list() + if(check_rights(R_ADMIN, 1, user)) + possible_body_accessories = body_accessory_by_name.Copy() + else + for(var/B in body_accessory_by_name) + var/datum/body_accessory/accessory = body_accessory_by_name[B] + if(!istype(accessory)) + possible_body_accessories += "None" //the only null entry should be the "None" option continue - if(gender == FEMALE && S.gender == MALE) - continue - if(!(species in S.species_allowed)) - continue - valid_sockstyles[sockstyle] = socks_list[sockstyle] - var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles - ShowChoices(user) - if(new_socks) - socks = new_socks + if(species in accessory.allowed_species) + possible_body_accessories += B - if("eyes") - var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(r_eyes, g_eyes, b_eyes)) as color|null - if(new_eyes) - r_eyes = hex2num(copytext(new_eyes, 2, 4)) - g_eyes = hex2num(copytext(new_eyes, 4, 6)) - b_eyes = hex2num(copytext(new_eyes, 6, 8)) + var/new_body_accessory = input(user, "Choose your body accessory:", "Character Preference") as null|anything in possible_body_accessories + if(new_body_accessory) + body_accessory = (new_body_accessory == "None") ? null : new_body_accessory - if("s_tone") - if(species != "Human") - return - var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null - if(new_s_tone) - s_tone = 35 - max(min( round(new_s_tone), 220),1) + if("facial") + var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(r_facial, g_facial, b_facial)) as color|null + if(new_facial) + r_facial = hex2num(copytext(new_facial, 2, 4)) + g_facial = hex2num(copytext(new_facial, 4, 6)) + b_facial = hex2num(copytext(new_facial, 6, 8)) - if("skin") - if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) - var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(r_skin, g_skin, b_skin)) as color|null - if(new_skin) - r_skin = hex2num(copytext(new_skin, 2, 4)) - g_skin = hex2num(copytext(new_skin, 4, 6)) - b_skin = hex2num(copytext(new_skin, 6, 8)) + if("f_style") + var/list/valid_facialhairstyles = list() + for(var/facialhairstyle in facial_hair_styles_list) + var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if( !(species in S.species_allowed)) + continue + + valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] + + var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facialhairstyles + if(new_f_style) + f_style = new_f_style + + if("underwear") + var/list/underwear_options + if(gender == MALE) + underwear_options = underwear_m + else + underwear_options = underwear_f + + var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in underwear_options + if(new_underwear) + underwear = new_underwear + ShowChoices(user) + + if("undershirt") + var/new_undershirt + if(gender == MALE) + new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_m + else + new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_f + if(new_undershirt) + undershirt = new_undershirt + ShowChoices(user) + + if("socks") + var/list/valid_sockstyles = list() + for(var/sockstyle in socks_list) + var/datum/sprite_accessory/S = socks_list[sockstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if(!(species in S.species_allowed)) + continue + valid_sockstyles[sockstyle] = socks_list[sockstyle] + var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles + ShowChoices(user) + if(new_socks) + socks = new_socks + + if("eyes") + var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(r_eyes, g_eyes, b_eyes)) as color|null + if(new_eyes) + r_eyes = hex2num(copytext(new_eyes, 2, 4)) + g_eyes = hex2num(copytext(new_eyes, 4, 6)) + b_eyes = hex2num(copytext(new_eyes, 6, 8)) + + if("s_tone") + if(species != "Human") + return + var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null + if(new_s_tone) + s_tone = 35 - max(min( round(new_s_tone), 220),1) + + if("skin") + if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) + var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(r_skin, g_skin, b_skin)) as color|null + if(new_skin) + r_skin = hex2num(copytext(new_skin, 2, 4)) + g_skin = hex2num(copytext(new_skin, 4, 6)) + b_skin = hex2num(copytext(new_skin, 6, 8)) - if("ooccolor") - var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference", ooccolor) as color|null - if(new_ooccolor) - ooccolor = new_ooccolor + if("ooccolor") + var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference", ooccolor) as color|null + if(new_ooccolor) + ooccolor = new_ooccolor - if("bag") - var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist - if(new_backbag) - backbag = backbaglist.Find(new_backbag) + if("bag") + var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist + if(new_backbag) + backbag = backbaglist.Find(new_backbag) - if("nt_relation") - var/new_relation = input(user, "Choose your relation to NT. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed") - if(new_relation) - nanotrasen_relation = new_relation + if("nt_relation") + var/new_relation = input(user, "Choose your relation to NT. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed") + if(new_relation) + nanotrasen_relation = new_relation - if("flavor_text") - var/msg = input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(flavor_text)) as message + if("flavor_text") + var/msg = input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(flavor_text)) as message - if(msg != null) - msg = copytext(msg, 1, MAX_MESSAGE_LEN) - msg = html_encode(msg) + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) - flavor_text = msg + flavor_text = msg - if("limbs") - var/limb_name = input(user, "Which limb do you want to change?") as null|anything in list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand") - if(!limb_name) return + if("limbs") + var/limb_name = input(user, "Which limb do you want to change?") as null|anything in list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand") + if(!limb_name) return - var/limb = null - var/second_limb = null // if you try to change the arm, the hand should also change - var/third_limb = null // if you try to unchange the hand, the arm should also change - var/valid_limb_states=list("Normal","Amputated","Prothesis") - switch(limb_name) - if("Left Leg") - limb = "l_leg" - second_limb = "l_foot" - if("Right Leg") - limb = "r_leg" - second_limb = "r_foot" - if("Left Arm") - limb = "l_arm" - second_limb = "l_hand" - if("Right Arm") - limb = "r_arm" - second_limb = "r_hand" - if("Left Foot") - limb = "l_foot" - third_limb = "l_leg" - if("Right Foot") - limb = "r_foot" - third_limb = "r_leg" - if("Left Hand") - limb = "l_hand" - third_limb = "l_arm" - if("Right Hand") - limb = "r_hand" - third_limb = "r_arm" + var/limb = null + var/second_limb = null // if you try to change the arm, the hand should also change + var/third_limb = null // if you try to unchange the hand, the arm should also change + var/valid_limb_states=list("Normal","Amputated","Prothesis") + switch(limb_name) + if("Left Leg") + limb = "l_leg" + second_limb = "l_foot" + if("Right Leg") + limb = "r_leg" + second_limb = "r_foot" + if("Left Arm") + limb = "l_arm" + second_limb = "l_hand" + if("Right Arm") + limb = "r_arm" + second_limb = "r_hand" + if("Left Foot") + limb = "l_foot" + third_limb = "l_leg" + if("Right Foot") + limb = "r_foot" + third_limb = "r_leg" + if("Left Hand") + limb = "l_hand" + third_limb = "l_arm" + if("Right Hand") + limb = "r_hand" + third_limb = "r_arm" - var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in valid_limb_states - if(!new_state) return + var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in valid_limb_states + if(!new_state) return - switch(new_state) - if("Normal") - organ_data[limb] = null - rlimb_data[limb] = null - if(third_limb) - organ_data[third_limb] = null - rlimb_data[third_limb] = null - if("Amputated") - organ_data[limb] = "amputated" - rlimb_data[limb] = null - if(second_limb) - organ_data[second_limb] = "amputated" - rlimb_data[second_limb] = null - if("Prothesis") - var/choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in chargen_robolimbs - if(!choice) - return - rlimb_data[limb] = choice - organ_data[limb] = "cyborg" - if(second_limb) - rlimb_data[second_limb] = choice - organ_data[second_limb] = "cyborg" + switch(new_state) + if("Normal") + organ_data[limb] = null + rlimb_data[limb] = null + if(third_limb) + organ_data[third_limb] = null + rlimb_data[third_limb] = null + if("Amputated") + organ_data[limb] = "amputated" + rlimb_data[limb] = null + if(second_limb) + organ_data[second_limb] = "amputated" + rlimb_data[second_limb] = null + if("Prothesis") + var/choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in chargen_robolimbs + if(!choice) + return + rlimb_data[limb] = choice + organ_data[limb] = "cyborg" + if(second_limb) + rlimb_data[second_limb] = choice + organ_data[second_limb] = "cyborg" - if("organs") - var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes") - if(!organ_name) return + if("organs") + var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes") + if(!organ_name) return - var/organ = null - switch(organ_name) - if("Heart") - organ = "heart" - if("Eyes") - organ = "eyes" + var/organ = null + switch(organ_name) + if("Heart") + organ = "heart" + if("Eyes") + organ = "eyes" - var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in list("Normal","Assisted","Mechanical") - if(!new_state) return + var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in list("Normal","Assisted","Mechanical") + if(!new_state) return - switch(new_state) - if("Normal") - organ_data[organ] = null - if("Assisted") - organ_data[organ] = "assisted" - if("Mechanical") - organ_data[organ] = "mechanical" + switch(new_state) + if("Normal") + organ_data[organ] = null + if("Assisted") + organ_data[organ] = "assisted" + if("Mechanical") + organ_data[organ] = "mechanical" /* - if("skin_style") - var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3") - if(!skin_style_name) return + if("skin_style") + var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3") + if(!skin_style_name) return */ /* if("spawnpoint") - var/list/spawnkeys = list() - for(var/S in spawntypes) - spawnkeys += S - var/choice = input(user, "Where would you like to spawn when latejoining?") as null|anything in spawnkeys - if(!choice || !spawntypes[choice]) - spawnpoint = "Arrivals Shuttle" - return - spawnpoint = choice */ + var/list/spawnkeys = list() + for(var/S in spawntypes) + spawnkeys += S + var/choice = input(user, "Where would you like to spawn when latejoining?") as null|anything in spawnkeys + if(!choice || !spawntypes[choice]) + spawnpoint = "Arrivals Shuttle" + return + spawnpoint = choice */ - else - switch(href_list["preference"]) - if("publicity") - if(unlock_content) - toggles ^= MEMBER_PUBLIC + else + switch(href_list["preference"]) + if("publicity") + if(unlock_content) + toggles ^= MEMBER_PUBLIC - if("gender") - if(gender == MALE) - gender = FEMALE - else - gender = MALE - underwear = random_underwear(gender) - - if("hear_adminhelps") - sound ^= SOUND_ADMINHELP - - if("ui") - switch(UI_style) - if("Midnight") - UI_style = "White" - else - UI_style = "Midnight" - - if("UIcolor") - var/UI_style_color_new = input(user, "Choose your UI color, dark colors are not recommended!", UI_style_color) as color|null - if(!UI_style_color_new) return - UI_style_color = UI_style_color_new - - if("UIalpha") - var/UI_style_alpha_new = input(user, "Select a new alpha(transparence) parametr for UI, between 50 and 255") as num - if(!UI_style_alpha_new | !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return - UI_style_alpha = UI_style_alpha_new - - if("be_special") - var/num = text2num(href_list["num"]) - be_special ^= (1<= 50)) return + UI_style_alpha = UI_style_alpha_new - if(backbag > 4 || backbag < 1) - backbag = 1 //Same as above - character.backbag = backbag + if("be_special") + var/r = href_list["role"] + if(!(r in special_roles)) + var/cleaned_r = sql_sanitize_text(r) + if(r != cleaned_r) // up to no good + message_admins("[user] attempted an href exploit! (This could have possibly lead to a \"Bobby Tables\" exploit, so they're probably up to no good). String: [r] ID: [last_id] IP: [last_ip]") + user << "Stop right there, criminal scum" + else + be_special ^= r - //Debugging report to track down a bug, which randomly assigned the plural gender to people. - if(character.gender in list(PLURAL, NEUTER)) - if(isliving(src)) //Ghosts get neuter by default - message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") - character.gender = MALE + if("name") + be_random_name = !be_random_name - proc/open_load_dialog(mob/user) + if("randomslot") + randomslot = !randomslot - var/DBQuery/query = dbcon.NewQuery("SELECT slot,real_name FROM [format_table_name("characters")] WHERE ckey='[user.ckey]' ORDER BY slot") + if("hear_midis") + sound ^= SOUND_MIDI - var/dat = "" - dat += "
    " - dat += "Select a character slot to load
    " - var/name + if("lobby_music") + sound ^= SOUND_LOBBY + if(sound & SOUND_LOBBY) + user << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) + else + user << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) - for(var/i=1, i<=max_save_slots, i++) - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n") - message_admins("SQL ERROR during character slot loading. Error : \[[err]\]\n") - return - while(query.NextRow()) - if(i==text2num(query.item[1])) - name = query.item[2] - if(!name) name = "Character[i]" - if(i==default_slot) - name = "[name]" - dat += "[name]
    " - name = null + if("ghost_ears") + toggles ^= CHAT_GHOSTEARS - dat += "
    " - dat += "Close
    " - dat += "
    " + if("ghost_sight") + toggles ^= CHAT_GHOSTSIGHT + + if("ghost_radio") + toggles ^= CHAT_GHOSTRADIO + + if("ghost_radio") + toggles ^= CHAT_GHOSTRADIO + + if("save") + save_preferences(user) + save_character(user) + + if("reload") + load_preferences(user) + load_character(user) + + if("open_load_dialog") + if(!IsGuestKey(user.key)) + open_load_dialog(user) + + if("close_load_dialog") + close_load_dialog(user) + + if("changeslot") + if(!load_character(user,text2num(href_list["num"]))) + random_character() + real_name = random_name(gender) + save_character(user) + close_load_dialog(user) + + if("tab") + if (href_list["tab"]) + current_tab = text2num(href_list["tab"]) + + ShowChoices(user) + return 1 + +/datum/preferences/proc/copy_to(mob/living/carbon/human/character) + if(be_random_name) + real_name = random_name(gender,species) + + if(config.humans_need_surnames) + var/firstspace = findtext(real_name, " ") + var/name_length = length(real_name) + if(!firstspace) //we need a surname + real_name += " [pick(last_names)]" + else if(firstspace == name_length) + real_name += "[pick(last_names)]" + + character.real_name = real_name + character.name = character.real_name + if(character.dna) + character.dna.real_name = character.real_name + + character.flavor_text = flavor_text + character.med_record = med_record + character.sec_record = sec_record + character.gen_record = gen_record + + character.gender = gender + character.age = age + character.b_type = b_type + + character.r_eyes = r_eyes + character.g_eyes = g_eyes + character.b_eyes = b_eyes + + character.r_hair = r_hair + character.g_hair = g_hair + character.b_hair = b_hair + + character.r_facial = r_facial + character.g_facial = g_facial + character.b_facial = b_facial + + character.r_skin = r_skin + character.g_skin = g_skin + character.b_skin = b_skin + + character.s_tone = s_tone + + character.h_style = h_style + character.f_style = f_style + + + // Destroy/cyborgize organs + + for(var/name in organ_data) + + var/status = organ_data[name] + var/obj/item/organ/external/O = character.organs_by_name[name] + if(O) + if(status == "amputated") + character.organs_by_name[O.limb_name] = null + character.organs -= O + if(O.children) // This might need to become recursive. + for(var/obj/item/organ/external/child in O.children) + character.organs_by_name[child.limb_name] = null + character.organs -= child + + else if(status == "cyborg") + if(rlimb_data[name]) + O.robotize(rlimb_data[name]) + else + O.robotize() + else + var/obj/item/organ/I = character.internal_organs_by_name[name] + if(I) + if(status == "assisted") + I.mechassist() + else if(status == "mechanical") + I.robotize() + + if(disabilities & DISABILITY_FLAG_FAT && character.species.flags & CAN_BE_FAT)//character.species.flags & CAN_BE_FAT) + character.mutations += FAT + character.mutations += OBESITY + if(disabilities & DISABILITY_FLAG_NEARSIGHTED) + character.disabilities|=NEARSIGHTED + if(disabilities & DISABILITY_FLAG_EPILEPTIC) + character.disabilities|=EPILEPSY + if(disabilities & DISABILITY_FLAG_DEAF) + character.sdisabilities|=DEAF + + // Wheelchair necessary? + var/obj/item/organ/external/l_foot = character.get_organ("l_foot") + var/obj/item/organ/external/r_foot = character.get_organ("r_foot") + if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) + var/obj/structure/stool/bed/chair/wheelchair/W = new /obj/structure/stool/bed/chair/wheelchair (character.loc) + character.buckled = W + character.update_canmove() + W.dir = character.dir + W.buckled_mob = character + W.add_fingerprint(character) + + character.underwear = underwear + character.undershirt = undershirt + character.socks = socks + + if(body_accessory) + character.body_accessory = body_accessory_by_name["[body_accessory]"] + + if(backbag > 4 || backbag < 1) + backbag = 1 //Same as above + character.backbag = backbag + + //Debugging report to track down a bug, which randomly assigned the plural gender to people. + if(character.gender in list(PLURAL, NEUTER)) + if(isliving(src)) //Ghosts get neuter by default + message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") + character.gender = MALE + +/datum/preferences/proc/open_load_dialog(mob/user) + + var/DBQuery/query = dbcon.NewQuery("SELECT slot,real_name FROM [format_table_name("characters")] WHERE ckey='[user.ckey]' ORDER BY slot") + + var/dat = "" + dat += "
    " + dat += "Select a character slot to load
    " + var/name + + for(var/i=1, i<=max_save_slots, i++) + if(!query.Execute()) + var/err = query.ErrorMsg() + log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n") + message_admins("SQL ERROR during character slot loading. Error : \[[err]\]\n") + return + while(query.NextRow()) + if(i==text2num(query.item[1])) + name = query.item[2] + if(!name) name = "Character[i]" + if(i==default_slot) + name = "[name]" + dat += "[name]
    " + name = null + + dat += "
    " + dat += "Close
    " + dat += "
    " // user << browse(dat, "window=saves;size=300x390") - var/datum/browser/popup = new(user, "saves", "
    Character Saves
    ", 300, 390) - popup.set_content(dat) - popup.open(0) - proc/close_load_dialog(mob/user) - user << browse(null, "window=saves") + var/datum/browser/popup = new(user, "saves", "
    Character Saves
    ", 300, 390) + popup.set_content(dat) + popup.open(0) + +/datum/preferences/proc/close_load_dialog(mob/user) + user << browse(null, "window=saves") diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index efbea778c1a..5ffe45a8123 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -2,7 +2,7 @@ // It functions almost identically (see code/datums/diseases/alien_embryo.dm) var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds -/obj/item/organ/internal/body_egg/alien_embryo +/obj/item/alien_embryo name = "alien embryo" desc = "All slimy and yuck." icon = 'icons/mob/alien.dmi' @@ -10,49 +10,30 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds var/mob/living/affected_mob var/stage = 0 -/obj/item/organ/internal/body_egg/alien_embryo/on_find(mob/living/finder) - ..() - if(stage < 4) - finder << "It's small and weak, barely the size of a foetus." +/obj/item/alien_embryo/New() + if(istype(loc, /mob/living)) + affected_mob = loc + affected_mob.status_flags |= XENO_HOST + if(istype(affected_mob,/mob/living/carbon)) + var/mob/living/carbon/H = affected_mob + H.med_hud_set_status() + processing_objects.Add(src) + spawn(0) + AddInfectionImages(affected_mob) else - finder << "It's grown quite large, and writhes slightly as you look at it." - if(prob(10)) - AttemptGrow(0) + qdel(src) -/obj/item/organ/internal/body_egg/alien_embryo/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent("sacid", 10) - return S +/obj/item/alien_embryo/Destroy() + if(affected_mob) + affected_mob.status_flags &= ~(XENO_HOST) + if(istype(affected_mob,/mob/living/carbon)) + var/mob/living/carbon/H = affected_mob + H.med_hud_set_status() + spawn(0) + RemoveInfectionImages(affected_mob) + return ..() -/obj/item/organ/internal/body_egg/alien_embryo/on_life() - switch(stage) - if(2, 3) - if(prob(2)) - owner.emote("sneeze") - if(prob(2)) - owner.emote("cough") - if(prob(2)) - owner << "Your throat feels sore." - if(prob(2)) - owner << "Mucous runs down the back of your throat." - if(4) - if(prob(2)) - owner.emote("sneeze") - if(prob(2)) - owner.emote("cough") - if(prob(4)) - owner << "Your muscles ache." - if(prob(20)) - owner.take_organ_damage(1) - if(prob(4)) - owner << "Your stomach hurts." - if(prob(20)) - owner.adjustToxLoss(1) - if(5) - owner << "You feel something tearing its way out of your stomach..." - owner.adjustToxLoss(10) - -/obj/item/organ/internal/body_egg/alien_embryo/egg_process() +/obj/item/alien_embryo/process() if(!affected_mob) return if(loc != affected_mob) affected_mob.status_flags &= ~(XENO_HOST) @@ -70,16 +51,39 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds spawn(0) RefreshInfectionImage() + switch(stage) + if(2, 3) + if(prob(1)) + affected_mob.emote("sneeze") + if(prob(1)) + affected_mob.emote("cough") + if(prob(1)) + affected_mob << "Your throat feels sore." + if(prob(1)) + affected_mob << "Mucous runs down the back of your throat." + if(4) + if(prob(1)) + affected_mob.emote("sneeze") + if(prob(1)) + affected_mob.emote("cough") + if(prob(2)) + affected_mob << "Your muscles ache." + if(prob(20)) + affected_mob.take_organ_damage(1) + if(prob(2)) + affected_mob << "Your stomach hurts." + if(prob(20)) + affected_mob.adjustToxLoss(1) + affected_mob.updatehealth() + if(5) + affected_mob << "You feel something tearing its way out of your stomach..." + affected_mob.adjustToxLoss(10) + affected_mob.updatehealth() + if(prob(50)) + AttemptGrow() - if(stage == 5 && prob(50)) - //for(var/datum/surgery/S in owner.surgeries) - // if(S.location == "chest" && istype(S.get_surgery_step(), /datum/surgery_step/manipulate_organs)) - // AttemptGrow(0) - // return - AttemptGrow() - -/obj/item/organ/internal/body_egg/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1) - var/list/candidates = get_candidates(BE_ALIEN,ALIEN_AFK_BRACKET,1) +/obj/item/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1) + var/list/candidates = get_candidates(ROLE_ALIEN,ALIEN_AFK_BRACKET,1) var/client/C = null // To stop clientless larva, we will check that our host has a client @@ -119,7 +123,7 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds Proc: RefreshInfectionImage() Des: Removes the current icons located in the infected mob adds the current stage ----------------------------------------*/ -/obj/item/organ/internal/body_egg/alien_embryo/RefreshInfectionImage() +/obj/item/alien_embryo/proc/RefreshInfectionImage() RemoveInfectionImages() AddInfectionImages() @@ -127,7 +131,7 @@ Des: Removes the current icons located in the infected mob adds the current stag Proc: AddInfectionImages(C) Des: Adds the infection image to all aliens for this embryo ----------------------------------------*/ -/obj/item/organ/internal/body_egg/alien_embryo/AddInfectionImages() +/obj/item/alien_embryo/proc/AddInfectionImages() for(var/mob/living/carbon/alien/alien in player_list) if(alien.client) var/I = image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "infected[stage]") @@ -137,7 +141,7 @@ Des: Adds the infection image to all aliens for this embryo Proc: RemoveInfectionImage(C) Des: Removes all images from the mob infected by this embryo ----------------------------------------*/ -/obj/item/organ/internal/body_egg/alien_embryo/RemoveInfectionImages() +/obj/item/alien_embryo/proc/RemoveInfectionImages() for(var/mob/living/carbon/alien/alien in player_list) if(alien.client) for(var/image/I in alien.client.images) diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm deleted file mode 100644 index f2cc4c59d72..00000000000 --- a/code/modules/surgery/eye.dm +++ /dev/null @@ -1,144 +0,0 @@ -//Procedures in this file: Eye mending surgery -////////////////////////////////////////////////////////////////// -// EYE SURGERY // -////////////////////////////////////////////////////////////////// - -/datum/surgery_step/eye - priority = 2 - can_infect = 1 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!hasorgans(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (!affected || (affected.status & ORGAN_ROBOT)) - return 0 - return target_zone == "eyes" - -/datum/surgery_step/eye/cut_open - allowed_tools = list( - /obj/item/weapon/scalpel = 100, \ - /obj/item/weapon/kitchenknife = 75, \ - /obj/item/weapon/shard = 50, \ - ) - - min_duration = 90 - max_duration = 110 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ..() - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts to separate the corneas on [target]'s eyes with \the [tool].", \ - "You start to separate the corneas on [target]'s eyes with \the [tool].") - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has separated the corneas on [target]'s eyes with \the [tool]." , \ - "\blue You have separated the corneas on [target]'s eyes with \the [tool].",) - target.op_stage.eyes = 1 - target.blinded += 1.5 - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/internal/eyes/eyes = target.get_int_organ(/obj/item/organ/internal/eyes) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing [target]'s eyes wth \the [tool]!" , \ - "\red Your hand slips, slicing [target]'s eyes wth \the [tool]!" ) - affected.createwound(CUT, 10) - eyes.take_damage(5, 1) - -/datum/surgery_step/eye/lift_eyes - allowed_tools = list( - /obj/item/weapon/retractor = 100, \ - /obj/item/weapon/kitchen/utensil/fork = 50 - ) - - min_duration = 30 - max_duration = 40 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ..() && target.op_stage.eyes == 1 - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts lifting corneas from [target]'s eyes with \the [tool].", \ - "You start lifting corneas from [target]'s eyes with \the [tool].") - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has lifted the corneas from [target]'s eyes from with \the [tool]." , \ - "\blue You has lifted the corneas from [target]'s eyes from with \the [tool]." ) - target.op_stage.eyes = 2 - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging [target]'s eyes with \the [tool]!", \ - "\red Your hand slips, damaging [target]'s eyes with \the [tool]!") - target.apply_damage(10, BRUTE, affected) - eyes.take_damage(5, 1) - -/datum/surgery_step/eye/mend_eyes - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/stack/cable_coil = 75, \ - /obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity. - ) - - min_duration = 80 - max_duration = 100 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ..() && target.op_stage.eyes == 2 - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts mending the nerves and lenses in [target]'s eyes with \the [tool].", \ - "You start mending the nerves and lenses in [target]'s eyes with the [tool].") - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] mends the nerves and lenses in [target]'s with \the [tool]." , \ - "\blue You mend the nerves and lenses in [target]'s with \the [tool].") - target.op_stage.eyes = 3 - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, stabbing \the [tool] into [target]'s eye!", \ - "\red Your hand slips, stabbing \the [tool] into [target]'s eye!") - target.apply_damage(10, BRUTE, affected, sharp=1) - eyes.take_damage(5, 0) - -/datum/surgery_step/eye/cauterize - allowed_tools = list( - /obj/item/weapon/cautery = 100, \ - /obj/item/clothing/mask/cigarette = 75, \ - /obj/item/weapon/lighter = 50, \ - /obj/item/weapon/weldingtool = 25 - ) - - min_duration = 70 - max_duration = 100 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ..() - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] is beginning to cauterize the incision around [target]'s eyes with \the [tool]." , \ - "You are beginning to cauterize the incision around [target]'s eyes with \the [tool].") - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"] - user.visible_message("\blue [user] cauterizes the incision around [target]'s eyes with \the [tool].", \ - "\blue You cauterize the incision around [target]'s eyes with \the [tool].") - if (target.op_stage.eyes == 3) - target.disabilities &= ~NEARSIGHTED - target.sdisabilities &= ~BLIND - eyes.damage = 0 - target.op_stage.eyes = 0 - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, searing [target]'s eyes with \the [tool]!", \ - "\red Your hand slips, searing [target]'s eyes with \the [tool]!") - target.apply_damage(5, BURN, affected) - eyes.take_damage(5, 1) From 948adea83b49e8e19c237fa49962cfee99c878c7 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Mon, 4 Jan 2016 08:25:39 -0500 Subject: [PATCH 013/442] Added Asses as an organ ...made you look... seriously though, refined some surgery datums/steps and commiting so i can go bugfix some stuff...and a sidequest...i need to adjust return values. --- code/_onclick/item_attack.dm | 6 +- code/game/objects/items/stacks/medical.dm | 30 +- code/game/objects/items/stacks/nanopaste.dm | 6 +- code/game/objects/items/weapons/kitchen.dm | 4 +- code/modules/client/preferences.dm | 2 +- code/modules/hydroponics/grown.dm | 2 +- .../carbon/alien/special/alien_embryo.dm | 108 +++---- .../mob/living/carbon/human/update_icons.dm | 6 +- code/modules/reagents/reagent_containers.dm | 8 +- code/modules/surgery/helpers.dm | 21 +- code/modules/surgery/organs_internal.dm | 25 +- code/modules/surgery/robotics.dm | 298 +++++++++++------- code/modules/surgery/surgery.dm | 43 ++- 13 files changed, 331 insertions(+), 228 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 9ab4aa159d0..22c85ec85b0 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -30,9 +30,9 @@ return 0 var/messagesource = M - if (can_operate(M)) //Checks if mob is lying down on table for surgery - if (do_surgery(M,user,src)) - return 0 + //if (can_operate(M)) //Checks if mob is lying down on table for surgery + // if (do_surgery(M,user,src)) + // return 0 if (istype(M,/mob/living/carbon/brain)) messagesource = M:container diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 83043ed7770..d6197c416a6 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -112,11 +112,11 @@ affecting.heal_damage(src.heal_brute, src.heal_burn, 0) use(1) else - if (can_operate(H)) //Checks if mob is lying down on table for surgery - if (do_surgery(H,user,src)) - return - else - user << "The [affecting.name] is cut open, you'll need more than some ointment!" + //if (can_operate(H)) //Checks if mob is lying down on table for surgery + // if (do_surgery(H,user,src)) + // return + //else + user << "The [affecting.name] is cut open, you'll need more than some ointment!" /obj/item/stack/medical/bruise_pack/comfrey name = "\improper Comfrey leaf" @@ -177,11 +177,11 @@ affecting.heal_damage(heal_brute,0) use(1) else - if (can_operate(H)) //Checks if mob is lying down on table for surgery - if (do_surgery(H,user,src)) - return - else - user << "The [affecting.name] is cut open, you'll need more than a bandage!" + //if (can_operate(H)) //Checks if mob is lying down on table for surgery + // if (do_surgery(H,user,src)) + // return + //else + user << "The [affecting.name] is cut open, you'll need more than a bandage!" /obj/item/stack/medical/advanced/ointment name = "advanced burn kit" @@ -210,11 +210,11 @@ affecting.heal_damage(0,heal_burn) use(1) else - if (can_operate(H)) //Checks if mob is lying down on table for surgery - if (do_surgery(H,user,src)) - return - else - user << "The [affecting.name] is cut open, you'll need more than a bandage!" + //if (can_operate(H)) //Checks if mob is lying down on table for surgery + // if (do_surgery(H,user,src)) + // return + //else + user << "The [affecting.name] is cut open, you'll need more than a bandage!" /obj/item/stack/medical/splint name = "medical splints" diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index fea0281c9b8..7da3d2935ba 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -27,9 +27,9 @@ var/mob/living/carbon/human/H = M var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting) - if(can_operate(H)) - if (do_surgery(H,user,src)) - return + //if(can_operate(H)) + // if (do_surgery(H,user,src)) + // return if (S && (S.status & ORGAN_ROBOT)) if(S.get_damage()) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 64a5ad53948..2fbd6589562 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -63,8 +63,8 @@ overlays.Cut() return - if (can_operate(M)) - do_surgery(M, user, src) + //if (can_operate(M)) + // do_surgery(M, user, src) /obj/item/weapon/kitchen/utensil/fork name = "fork" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index bc28c88ee2f..7a0f81b3bb4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1565,7 +1565,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts else O.robotize() else - var/obj/item/organ/I = character.internal_organs_by_name[name] + var/obj/item/organ/internal/I = character.get_int_organ(name) if(I) if(status == "assisted") I.mechassist() diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index b39ca263d02..2704ef7dded 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -298,7 +298,7 @@ // This is being copypasted here because reagent_containers (WHY DOES FOOD DESCEND FROM THAT) overrides it completely. // TODO: refactor all food paths to be less horrible and difficult to work with in this respect. ~Z - if(!istype(M) || (can_operate(M) && do_surgery(M,user,src))) return 0 + if(!istype(M)) return 0 if(!def_zone) def_zone = check_zone(user.zone_sel.selecting) diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 5ffe45a8123..d56593f2206 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -2,7 +2,7 @@ // It functions almost identically (see code/datums/diseases/alien_embryo.dm) var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds -/obj/item/alien_embryo +/obj/item/organ/internal/body_egg/alien_embryo name = "alien embryo" desc = "All slimy and yuck." icon = 'icons/mob/alien.dmi' @@ -10,30 +10,49 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds var/mob/living/affected_mob var/stage = 0 -/obj/item/alien_embryo/New() - if(istype(loc, /mob/living)) - affected_mob = loc - affected_mob.status_flags |= XENO_HOST - if(istype(affected_mob,/mob/living/carbon)) - var/mob/living/carbon/H = affected_mob - H.med_hud_set_status() - processing_objects.Add(src) - spawn(0) - AddInfectionImages(affected_mob) +/obj/item/organ/internal/body_egg/alien_embryo/on_find(mob/living/finder) + ..() + if(stage < 4) + finder << "It's small and weak, barely the size of a foetus." else - qdel(src) + finder << "It's grown quite large, and writhes slightly as you look at it." + if(prob(10)) + AttemptGrow(0) -/obj/item/alien_embryo/Destroy() - if(affected_mob) - affected_mob.status_flags &= ~(XENO_HOST) - if(istype(affected_mob,/mob/living/carbon)) - var/mob/living/carbon/H = affected_mob - H.med_hud_set_status() - spawn(0) - RemoveInfectionImages(affected_mob) - return ..() +/obj/item/organ/internal/body_egg/alien_embryo/prepare_eat() + var/obj/S = ..() + S.reagents.add_reagent("sacid", 10) + return S -/obj/item/alien_embryo/process() +/obj/item/organ/internal/body_egg/alien_embryo/on_life() + switch(stage) + if(2, 3) + if(prob(2)) + owner.emote("sneeze") + if(prob(2)) + owner.emote("cough") + if(prob(2)) + owner << "Your throat feels sore." + if(prob(2)) + owner << "Mucous runs down the back of your throat." + if(4) + if(prob(2)) + owner.emote("sneeze") + if(prob(2)) + owner.emote("cough") + if(prob(4)) + owner << "Your muscles ache." + if(prob(20)) + owner.take_organ_damage(1) + if(prob(4)) + owner << "Your stomach hurts." + if(prob(20)) + owner.adjustToxLoss(1) + if(5) + owner << "You feel something tearing its way out of your stomach..." + owner.adjustToxLoss(10) + +/obj/item/organ/internal/body_egg/alien_embryo/egg_process() if(!affected_mob) return if(loc != affected_mob) affected_mob.status_flags &= ~(XENO_HOST) @@ -51,38 +70,15 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds spawn(0) RefreshInfectionImage() - switch(stage) - if(2, 3) - if(prob(1)) - affected_mob.emote("sneeze") - if(prob(1)) - affected_mob.emote("cough") - if(prob(1)) - affected_mob << "Your throat feels sore." - if(prob(1)) - affected_mob << "Mucous runs down the back of your throat." - if(4) - if(prob(1)) - affected_mob.emote("sneeze") - if(prob(1)) - affected_mob.emote("cough") - if(prob(2)) - affected_mob << "Your muscles ache." - if(prob(20)) - affected_mob.take_organ_damage(1) - if(prob(2)) - affected_mob << "Your stomach hurts." - if(prob(20)) - affected_mob.adjustToxLoss(1) - affected_mob.updatehealth() - if(5) - affected_mob << "You feel something tearing its way out of your stomach..." - affected_mob.adjustToxLoss(10) - affected_mob.updatehealth() - if(prob(50)) - AttemptGrow() -/obj/item/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1) + if(stage == 5 && prob(50)) + //for(var/datum/surgery/S in owner.surgeries) + // if(S.location == "chest" && istype(S.get_surgery_step(), /datum/surgery_step/manipulate_organs)) + // AttemptGrow(0) + // return + AttemptGrow() + +/obj/item/organ/internal/body_egg/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1) var/list/candidates = get_candidates(ROLE_ALIEN,ALIEN_AFK_BRACKET,1) var/client/C = null @@ -123,7 +119,7 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds Proc: RefreshInfectionImage() Des: Removes the current icons located in the infected mob adds the current stage ----------------------------------------*/ -/obj/item/alien_embryo/proc/RefreshInfectionImage() +/obj/item/organ/internal/body_egg/alien_embryo/RefreshInfectionImage() RemoveInfectionImages() AddInfectionImages() @@ -131,7 +127,7 @@ Des: Removes the current icons located in the infected mob adds the current stag Proc: AddInfectionImages(C) Des: Adds the infection image to all aliens for this embryo ----------------------------------------*/ -/obj/item/alien_embryo/proc/AddInfectionImages() +/obj/item/organ/internal/body_egg/alien_embryo/AddInfectionImages() for(var/mob/living/carbon/alien/alien in player_list) if(alien.client) var/I = image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "infected[stage]") @@ -141,7 +137,7 @@ Des: Adds the infection image to all aliens for this embryo Proc: RemoveInfectionImage(C) Des: Removes all images from the mob infected by this embryo ----------------------------------------*/ -/obj/item/alien_embryo/proc/RemoveInfectionImages() +/obj/item/organ/internal/body_egg/alien_embryo/RemoveInfectionImages() for(var/mob/living/carbon/alien/alien in player_list) if(alien.client) for(var/image/I in alien.client.images) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index faa638f401e..b768039ac29 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -381,6 +381,9 @@ var/global/list/damage_icon_parts = list() else //warning("Invalid f_style for [species.name]: [f_style]") + if(!get_int_organ(/obj/item/organ/internal/brain)) + face_standing += icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s") + if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()))) var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] if(hair_style && hair_style.species_allowed) @@ -393,9 +396,6 @@ var/global/list/damage_icon_parts = list() else //warning("Invalid h_style for [species.name]: [h_style]") - if(!get_int_organ(/obj/item/organ/internal/brain)) - face_standing += icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s") - overlays_standing[HAIR_LAYER] = image(face_standing) if(update_icons) update_icons() diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 7f9c3ee3c98..3fa08e42a03 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -46,10 +46,10 @@ /obj/item/weapon/reagent_containers/attack_self(mob/user as mob) return -/obj/item/weapon/reagent_containers/attack(mob/M as mob, mob/user as mob, def_zone) - if (can_operate(M)) //Checks if mob is lying down on table for surgery - if (do_surgery(M,user,src)) - return +///obj/item/weapon/reagent_containers/attack(mob/M as mob, mob/user as mob, def_zone) +// if (can_operate(M)) //Checks if mob is lying down on table for surgery +// if (do_surgery(M,user,src)) +// return // this prevented pills, food, and other things from being picked up by bags. // possibly intentional, but removing it allows us to not duplicate functionality. diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 9340099a1bb..52d68c4fbd7 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -1,46 +1,61 @@ /proc/attempt_initiate_surgery(obj/item/I, mob/living/M, mob/user) + world << "[istype(M)]" if(istype(M)) var/mob/living/carbon/human/H var/obj/item/organ/external/affecting var/selected_zone = user.zone_sel.selecting - + world << "line 8" if(istype(M, /mob/living/carbon/human)) H = M + world <<"line 10" affecting = H.get_organ(check_zone(selected_zone)) - if(can_operate(M)) //if they're prone or a slime + if(can_operate(H)) //if they're prone or a slime var/datum/surgery/current_surgery + world << "line 15" for(var/datum/surgery/S in M.surgeries) if(S.location == selected_zone) current_surgery = S + world << "[S]" if(!current_surgery) var/list/all_surgeries = surgeries_list.Copy() var/list/available_surgeries = list() + world << "line 24" for(var/datum/surgery/S in all_surgeries) if(!S.possible_locs.Find(selected_zone)) + world << "line 29" + world << "[selected_zone]" continue if(affecting && S.requires_organic_bodypart && affecting.status == ORGAN_ROBOT) + world << "line 30" continue if(!S.can_start(user, M)) + world << "line 31" continue for(var/path in S.allowed_species) + world << "[path]" + world << "[M]" if(istype(M, path)) + world << "line 32" + world << "[path]" available_surgeries[S.name] = S break var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries if(P && user && user.Adjacent(M) && (I in user)) + world << "line 40" var/datum/surgery/S = available_surgeries[P] var/datum/surgery/procedure = new S.type if(procedure) procedure.location = selected_zone M.surgeries += procedure procedure.organ_ref = affecting - //just use the scalpel cut message + user.visible_message("[user] prepares to operate on [M]'s [parse_zone(selected_zone)].", \ + "You prepare to operate on [M]'s [parse_zone(selected_zone)].") else if(!current_surgery.step_in_progress) if(current_surgery.status == 1) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 0e18d6a357c..6e9d1228ecd 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -125,12 +125,8 @@ var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) if(A) user << "You found an unknown alien organism in [target]'s chest!" - if(A.stage < 4) - user << "It's small and weak, barely the size of a foetus." - else - user << "It's grown quite large, and writhes slightly as you look at it." - if(prob(10)) - A.AttemptGrow() + if(prob(10)) + A.AttemptGrow() A.remove(target) A.loc = get_turf(target) @@ -154,7 +150,7 @@ allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55) - var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack= 100,/obj/item/stack/medical/bruise_pack = 20 + var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack= 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20 ) var/current_type var/obj/item/organ/internal/I = null @@ -222,16 +218,21 @@ tool_name = "regenerative membrane" else if (istype(tool, /obj/item/stack/medical/bruise_pack)) tool_name = "the bandaid" + else if (istype(tool, /obj/item/stack/nanopaste)) + tool_name = "\the [tool]" //what else do you call nanopaste medically? if (!hasorgans(target)) return for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) - if(I.robotic < 2) + if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) if(!I.sterile) spread_germs_to_organ(I, user) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) + else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) + user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ + "You start treating damage to [target]'s [I.name] with [tool_name]." ) target.custom_pain("The pain in your [affected.name] is living hell!",1) else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) @@ -253,7 +254,11 @@ if(I) I.surgeryize() if(I && I.damage > 0) - if(I.robotic < 2) + if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) + user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ + "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) + I.damage = 0 + else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste)) user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 @@ -282,7 +287,7 @@ user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", "You can't extract anything from [target]'s [parse_zone(target_zone)]!") return 0 - ..() + ////////////////////////////////////////////////////////////////// // CHEST INTERNAL ORGAN SURGERY // diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 2a8fb4758e1..d0fe89dcd41 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -5,10 +5,17 @@ /datum/surgery/cybernetic_repair name = "Cybernetic Repair" - steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/fix_organ_robotic,/datum/surgery_step/robotics/external/close_hatch) + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/external/repair_brute,/datum/surgery_step/robotics/external/repair_burn,/datum/surgery_step/robotics/external/close_hatch) possible_locs = list("chest","head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") requires_organic_bodypart = 0 +/datum/surgery/cybernetic_repair + name = "Cybernetic Mainpulation" + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/manipulate_robotic_organs) + possible_locs = list("chest","head","groin") + requires_organic_bodypart = 0 + + //to do, moar surgerys or condense down ala mainpulate organs. /datum/surgery_step/robotics can_infect = 0 @@ -214,31 +221,122 @@ "\red You cause a short circuit in [target]'s [affected.name]!") target.apply_damage(rand(5,10), BURN, affected) -/datum/surgery_step/robotics/fix_organ_robotic //For artificial organs - allowed_tools = list( - /obj/item/stack/nanopaste = 100, \ - /obj/item/weapon/bonegel = 30, \ - /obj/item/weapon/screwdriver = 70, \ - ) +///////condenseing remove/extract/repair here. ///////////// +/datum/surgery_step/robotics/manipulate_robotic_organs + allowed_tools = list(/obj/item/device/mmi = 100) + var/implements_extract = list(/obj/item/device/multitool = 100) + var/implements_mend = list( /obj/item/stack/nanopaste = 100,/obj/item/weapon/bonegel = 30, /obj/item/weapon/screwdriver = 70) + var/implements_insert = list(/obj/item/weapon/screwdriver = 100) + var/current_type + var/obj/item/organ/internal/I = null + var/obj/item/organ/external/affected = null min_duration = 70 max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/robotics/manipulate_robotic_organs/New() + ..() + allowed_tools = allowed_tools + implements_extract + implements_mend + implements_insert - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) return - var/is_organ_damaged = 0 - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I.damage > 0 && I.robotic >= 2) - is_organ_damaged = 1 - break - return affected.open_enough_for_surgery() && is_organ_damaged - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + +/datum/surgery_step/robotics/manipulate_robotic_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + I = null + affected = target.get_organ(target_zone) + if(tool in implements_insert) + current_type = "insert" + //I = tool + var/off_tool = user.get_inactive_hand() + + if(!off_tool || !istype(off_tool,/obj/item/organ/internal)) + user << "You need a replacement internal part in your off hand." + return -1 + I = off_tool //and please god let it be an organ... + if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) + user << "There is no room for [I] in [target]'s [parse_zone(target_zone)]!" + return -1 + + if(I.damage > (I.max_damage * 0.75)) + user << " \The [I] is in no state to be transplanted." + return -1 + + if(target.get_int_organ(I)) + user << "\red \The [target] already has [I]." + return -1 + + user.visible_message("[user] begins reattaching [target]'s [tool] with \the [tool].", \ + "You start reattaching [target]'s [surgery.current_organ] with \the [tool].") + target.custom_pain("Someone's rooting around in your [affected.name]!",1) + else if(istype(tool,/obj/item/device/mmi/)) + current_type = "install" + + if(target_zone != "chest") + user << " You must target the chest cavity." + + return -1 + var/obj/item/device/mmi/M = tool + + + if(!(affected && affected.open_enough_for_surgery())) + return -1 + + if(!istype(M)) + return -1 + + if(!M.brainmob || !M.brainmob.client || !M.brainmob.ckey || M.brainmob.stat >= DEAD) + user << "That brain is not usable." + return -1 + + if(!(affected.status & ORGAN_ROBOT)) + user << "You cannot install a computer brain into a meat enclosure." + return -1 + + if(!target.species) + user << "You have no idea what species this person is. Report this on the bug tracker." + return -1 + + if(!target.species.has_organ["brain"]) + user << "You're pretty sure [target.species.name_plural] don't normally have a brain." + return -1 + + if(target.get_int_organ(/obj/item/organ/internal/brain/)) + user << "Your subject already has a brain." + return -1 + + user.visible_message("[user] starts installing \the [tool] into [target]'s [affected.name].", \ + "You start installing \the [tool] into [target]'s [affected.name].") + + else if(tool in implements_extract) + current_type = "extract" + var/list/organs = target.get_organs_zone(target_zone) + if(!(affected && (affected.status & ORGAN_ROBOT))) + return -1 + if(!affected.open_enough_for_surgery()) + return -1 + if(!organs.len) + user << "There is no removeable organs in [target]'s [parse_zone(target_zone)]!" + return -1 + else + for(var/obj/item/organ/internal/O in organs) + O.on_find(user) + organs -= O + organs[O.name] = O + + I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs + if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) + I = organs[I] + if(!I) return -1 + user.visible_message("[user] starts to decouple [target]'s [I] with \the [tool].", \ + "You start to decouple [target]'s [I] with \the [tool]." ) + + target.custom_pain("The pain in your [affected.name] is living hell!",1) + else + return -1 + + else if(tool in implements_mend) + current_type = "mend" if (!hasorgans(target)) return var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -250,24 +348,69 @@ "You start mending the damage to [target]'s [I.name]'s mechanisms." ) target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + ..() + +/datum/surgery_step/robotics/manipulate_robotic_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(current_type == "mend") if (!hasorgans(target)) return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0) if(I.robotic >= 2) user.visible_message("\blue [user] repairs [target]'s [I.name] with [tool].", \ "\blue You repair [target]'s [I.name] with [tool]." ) I.damage = 0 + return 1 + else if(current_type == "insert") + var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/off_tool = user.get_inactive_hand() + I = off_tool + user.drop_item() + I.insert(target) + user.visible_message("\blue [user] has reattached [target]'s [I] with \the [tool]." , \ + "\blue You have reattached [target]'s [I] with \the [tool].") + if(I && istype(I)) + I.status &= ~ORGAN_CUT_AWAY + else if (current_type == "install") + user.visible_message("\blue [user] has installed \the [tool] into [target]'s [affected.name].", \ + "\blue You have installed \the [tool] into [target]'s [affected.name].") + + var/obj/item/device/mmi/M = tool + var/obj/item/organ/internal/brain/mmi_holder/holder = new() + if (istype(M, /obj/item/device/mmi/posibrain)) + holder.robotize() + + holder.insert(target) + user.unEquip(tool) + tool.forceMove(holder) + holder.stored_mmi = tool + holder.update_from_mmi() + + if(M.brainmob && M.brainmob.mind) + M.brainmob.mind.transfer_to(target) + + else if(current_type == "extract") + if(I && I.owner == target) + user.visible_message("\blue [user] has decoupled [target]'s [surgery.current_organ] with \the [tool]." , \ + "\blue You have decoupled [target]'s [surgery.current_organ] with \the [tool].") + + add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") + spread_germs_to_organ(I, user) + I.status |= ORGAN_CUT_AWAY + I.remove(target) + I.loc = get_turf(target) + else + user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", + "You can't extract anything from [target]'s [parse_zone(target_zone)]!") + return 0 + +/datum/surgery_step/robotics/manipulate_robotic_organs/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + if(current_type == "mend") if (!hasorgans(target)) return var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -282,108 +425,21 @@ if(I) I.take_damage(rand(3,5),0) -/datum/surgery_step/robotics/detatch_organ_robotic - - allowed_tools = list( - /obj/item/device/multitool = 100 - ) - - min_duration = 90 - max_duration = 110 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!(affected && (affected.status & ORGAN_ROBOT))) - return 0 - if(!affected.open_enough_for_surgery()) - return 0 - - surgery.current_organ = null - surgery.organ_ref = null - - var/list/attached_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/internal/I = organ - if(I && istype(I) && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - attached_organs[I.organ_tag] = I - - var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs - if(!organ_to_remove) - return 0 - - surgery.current_organ = organ_to_remove - surgery.organ_ref = attached_organs[organ_to_remove] - - return ..() && organ_to_remove - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("[user] starts to decouple [target]'s [surgery.current_organ] with \the [tool].", \ - "You start to decouple [target]'s [surgery.current_organ] with \the [tool]." ) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\blue [user] has decoupled [target]'s [surgery.current_organ] with \the [tool]." , \ - "\blue You have decoupled [target]'s [surgery.current_organ] with \the [tool].") - - var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ) - if(I && istype(I)) - I.status |= ORGAN_CUT_AWAY - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + else if(current_type == "insert") user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \ "\red Your hand slips, disconnecting \the [tool].") -/datum/surgery_step/robotics/attach_organ_robotic - allowed_tools = list( - /obj/item/weapon/screwdriver = 100, - ) - - min_duration = 100 - max_duration = 120 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!(affected && (affected.status & ORGAN_ROBOT))) - return 0 - if(!affected.open_enough_for_surgery()) - return 0 - - surgery.current_organ = null - surgery.organ_ref = null - - var/list/removable_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/internal/I = organ - if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && (I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) - removable_organs[I.organ_tag] = I - - var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs - if(!organ_to_replace) - return 0 - - surgery.current_organ = organ_to_replace - surgery.organ_ref = removable_organs[organ_to_replace] - return ..() - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("[user] begins reattaching [target]'s [surgery.current_organ] with \the [tool].", \ - "You start reattaching [target]'s [surgery.current_organ] with \the [tool].") - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\blue [user] has reattached [target]'s [surgery.current_organ] with \the [tool]." , \ - "\blue You have reattached [target]'s [surgery.current_organ] with \the [tool].") - - var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ) - if(I && istype(I)) - I.status &= ~ORGAN_CUT_AWAY - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + else if(current_type == "extract") user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \ "\red Your hand slips, disconnecting \the [tool].") + else if (current_type == "install") + user.visible_message("\red [user]'s hand slips!.", \ + "\red Your hand slips!") + return -1 + + + /datum/surgery_step/robotics/install_mmi allowed_tools = list( /obj/item/device/mmi = 100 diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index f1cb16f138c..2c9570dab9b 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -3,11 +3,13 @@ var/name = "surgery" var/status = 1 var/list/steps = list() + /* var/eyes = 0 var/face = 0 var/appendix = 0 var/ribcage = 0 var/head_reattach = 0 //Steps in a surgery + */ var/can_cancel = 1 var/step_in_progress = 0 @@ -17,7 +19,7 @@ var/list/possible_locs = list() //Multiple locations -- c0 var/obj/item/organ/organ_ref //Operable body part var/current_organ = "organ" - var/list/allowed_species = null + var/list/allowed_species = list(/mob/living/carbon/human) var/list/disallowed_species = null /datum/surgery/proc/can_start(mob/user, mob/living/carbon/target) @@ -31,7 +33,7 @@ var/datum/surgery_step/S = get_surgery_step() if(S) - if(S.begin_step(user, target, user.zone_sel.selecting, user.get_active_hand(), src)) + if(S.try_op(user, target, user.zone_sel.selecting, user.get_active_hand(), src)) return 1 return 0 @@ -51,13 +53,15 @@ // type path referencing tools that can be used for this step, and how well are they suited for it var/list/allowed_tools = null - // type paths referencing mutantraces that this step applies to. + var/implement_type = null // duration of the step var/min_duration = 0 var/max_duration = 0 var/name + var/accept_hand = 0 //does the surgery step require an open hand? If true, ignores implements. Compatible with accept_any_item. + var/accept_any_item = 0 // evil infection stuff that will make everyone hate me var/can_infect = 0 @@ -67,15 +71,42 @@ var/list/allowed_species = null var/list/disallowed_species = null +/datum/surgery_step/proc/try_op(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/success = 0 + if(accept_hand) + if(!tool) + success = 1 + if(accept_any_item) + if(tool && tool_quality(tool)) + success = 1 + else + for(var/path in allowed_tools) + if(istype(tool, path)) + implement_type = path + if(tool_quality(tool)) + success = 1 + + if(success) + if(target_zone == surgery.location) + initiate(user, target, target_zone, tool, surgery) + return 1//returns 1 so we don't stab the guy in the dick or wherever. + if(isrobot(user) && user.a_intent != I_HARM) //to save asimov borgs a LOT of heartache + return 1 + return 0 + /datum/surgery_step/proc/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) surgery.step_in_progress = 1 + if(begin_step(user, target, target_zone, tool, surgery) == -1) + surgery.step_in_progress = 0 + return + if(do_after(user, max_duration, target = target)) var/advance = 0 var/prob_chance = 100 - if(tool) //this means it isn't a require nd or any item step. - prob_chance = allowed_tools[tool] + if(implement_type) //this means it isn't a require nd or any item step. + prob_chance = allowed_tools[implement_type] prob_chance *= get_location_modifier(target) if(prob(prob_chance) || isrobot(user)) @@ -176,7 +207,7 @@ S.fail_step(user, M, zone, tool) //malpractice~ else // This failing silently was a pain. user << "You must remain close to your patient to conduct surgery." - surgery.step_in_progress -= zone // Clear the in-progress flag. + surgery.step_in_progress = 0 // Clear the in-progress flag. return 1 //don't want to do weapony things after surgery if (user.a_intent == I_HELP) From 2623f75e0d36643e987f7e3ed7d4667d097eeb42 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 6 Jan 2016 23:43:12 -0500 Subject: [PATCH 014/442] progress --- code/modules/surgery/bones.dm | 166 ++++++++------- code/modules/surgery/encased.dm | 256 ++++++++++++------------ code/modules/surgery/face.dm | 63 +++--- code/modules/surgery/generic.dm | 70 ++++--- code/modules/surgery/helpers.dm | 15 +- code/modules/surgery/implant.dm | 14 ++ code/modules/surgery/limb_reattach.dm | 149 +++++++------- code/modules/surgery/organs_internal.dm | 77 +++---- code/modules/surgery/other.dm | 202 ++++++++++--------- code/modules/surgery/robotics.dm | 6 +- code/modules/surgery/slime.dm | 48 +++-- 11 files changed, 576 insertions(+), 490 deletions(-) diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 8eb9f9e0b72..63d956e99c5 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -2,19 +2,19 @@ ////////////////////////////////////////////////////////////////// // BONE SURGERY // ////////////////////////////////////////////////////////////////// - +///Surgery Datums /datum/surgery/bone_repair name = "bone repair" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("chest","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") /datum/surgery/bone_repair/skull name = "bone repair" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("head") - +//surgery steps /datum/surgery_step/glue_bone allowed_tools = list( /obj/item/weapon/bonegel = 100, \ @@ -26,28 +26,31 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected && !(affected.status & ORGAN_ROBOT) && affected.open == 2 && affected.stage == 0 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (affected.stage == 0) - user.visible_message("[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool]." , \ - "You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].") - target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) - ..() +/datum/surgery_step/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (affected.stage == 0) + user.visible_message("[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool]." , \ + "You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].") + target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/glue_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] applies some [tool] to [target]'s bone in [affected.name]", \ "\blue You apply some [tool] to [target]'s bone in [affected.name] with \the [tool].") affected.stage = 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return 1 + +/datum/surgery_step/glue_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") + return 0 /datum/surgery_step/set_bone allowed_tools = list( @@ -58,33 +61,36 @@ min_duration = 60 max_duration = 70 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.limb_name != "head" && affected.open == 2 && affected.stage == 1 +/datum/surgery_step/set_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && !(affected.status & ORGAN_ROBOT) && affected.limb_name != "head" && affected.open == 2 && affected.stage == 1 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool]." , \ - "You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool].") - target.custom_pain("The pain in your [affected.name] is going to make you pass out!",1) - ..() +/datum/surgery_step/set_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool]." , \ + "You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool].") + target.custom_pain("The pain in your [affected.name] is going to make you pass out!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (affected.status & ORGAN_BROKEN) - user.visible_message("\blue [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \ - "\blue You set the bone in [target]'s [affected.name] in place with \the [tool].") - affected.stage = 2 - else - user.visible_message("\blue [user] sets the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].", \ - "\blue You set the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].") - affected.fracture() +/datum/surgery_step/set_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (affected.status & ORGAN_BROKEN) + user.visible_message("\blue [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \ + "\blue You set the bone in [target]'s [affected.name] in place with \the [tool].") + affected.stage = 2 + return 1 + else + user.visible_message("\blue [user] sets the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].", \ + "\blue You set the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].") + affected.fracture() + return 0 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" , \ - "\red Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 5) +/datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" , \ + "\red Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 5) + return 0 /datum/surgery_step/mend_skull allowed_tools = list( @@ -95,28 +101,31 @@ min_duration = 60 max_duration = 70 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.limb_name == "head" && affected.open == 2 && affected.stage == 1 +/datum/surgery_step/mend_skull/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && !(affected.status & ORGAN_ROBOT) && affected.limb_name == "head" && affected.open == 2 && affected.stage == 1 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] is beginning piece together [target]'s skull with \the [tool]." , \ - "You are beginning piece together [target]'s skull with \the [tool].") - ..() +/datum/surgery_step/mend_skull/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] is beginning piece together [target]'s skull with \the [tool]." , \ + "You are beginning piece together [target]'s skull with \the [tool].") + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] sets [target]'s skull with \the [tool]." , \ - "\blue You set [target]'s skull with \the [tool].") - affected.stage = 2 +/datum/surgery_step/mend_skull/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] sets [target]'s skull with \the [tool]." , \ + "\blue You set [target]'s skull with \the [tool].") + affected.stage = 2 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging [target]'s face with \the [tool]!" , \ - "\red Your hand slips, damaging [target]'s face with \the [tool]!") - var/obj/item/organ/external/head/h = affected - h.createwound(BRUISE, 10) - h.disfigured = 1 + return 1 + +/datum/surgery_step/mend_skull/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, damaging [target]'s face with \the [tool]!" , \ + "\red Your hand slips, damaging [target]'s face with \the [tool]!") + var/obj/item/organ/external/head/h = affected + h.createwound(BRUISE, 10) + h.disfigured = 1 + return 0 /datum/surgery_step/finish_bone allowed_tools = list( @@ -129,26 +138,29 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.open == 2 && affected.stage == 2 +/datum/surgery_step/finish_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && !(affected.status & ORGAN_ROBOT) && affected.open == 2 && affected.stage == 2 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].", \ - "You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].") - ..() +/datum/surgery_step/finish_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].", \ + "You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].") + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has mended the damaged bones in [target]'s [affected.name] with \the [tool]." , \ - "\blue You have mended the damaged bones in [target]'s [affected.name] with \the [tool]." ) - affected.status &= ~ORGAN_BROKEN - affected.status &= ~ORGAN_SPLINTED - affected.stage = 0 - affected.perma_injury = 0 +/datum/surgery_step/finish_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has mended the damaged bones in [target]'s [affected.name] with \the [tool]." , \ + "\blue You have mended the damaged bones in [target]'s [affected.name] with \the [tool]." ) + affected.status &= ~ORGAN_BROKEN + affected.status &= ~ORGAN_SPLINTED + affected.stage = 0 + affected.perma_injury = 0 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") \ No newline at end of file + return 1 + +/datum/surgery_step/finish_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ + "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") + return 0 \ No newline at end of file diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 6bf7d56de19..d7caa513a5c 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -6,13 +6,14 @@ priority = 2 can_infect = 1 blood_level = 1 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return 0 +/datum/surgery_step/open_encased/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.encased && affected.open >= 2 + if (!hasorgans(target)) + return 0 + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && !(affected.status & ORGAN_ROBOT) && affected.encased && affected.open >= 2 /datum/surgery_step/open_encased/saw @@ -25,44 +26,47 @@ min_duration = 50 max_duration = 70 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && affected.open == 2 +/datum/surgery_step/open_encased/saw/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && affected.open == 2 - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/saw/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to cut through [target]'s [affected.encased] with \the [tool].", \ - "You begin to cut through [target]'s [affected.encased] with \the [tool].") - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - ..() + user.visible_message("[user] begins to cut through [target]'s [affected.encased] with \the [tool].", \ + "You begin to cut through [target]'s [affected.encased] with \the [tool].") + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/saw/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has cut [target]'s [affected.encased] open with \the [tool].", \ - "\blue You have cut [target]'s [affected.encased] open with \the [tool].") - affected.open = 2.5 + user.visible_message("\blue [user] has cut [target]'s [affected.encased] open with \the [tool].", \ + "\blue You have cut [target]'s [affected.encased] open with \the [tool].") + affected.open = 2.5 + return 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/saw/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!" , \ - "\red Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" ) + user.visible_message("\red [user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!" , \ + "\red Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" ) - affected.createwound(CUT, 20) - affected.fracture() + affected.createwound(CUT, 20) + affected.fracture() + + return 0 /datum/surgery_step/open_encased/retract @@ -74,52 +78,56 @@ min_duration = 30 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && affected.open == 2.5 +/datum/surgery_step/open_encased/retract/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && affected.open == 2.5 - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/retract/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "[user] starts to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." - var/self_msg = "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - ..() + var/msg = "[user] starts to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." + var/self_msg = "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/retract/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] forces open [target]'s [affected.encased] with \the [tool]." - var/self_msg = "\blue You force open [target]'s [affected.encased] with \the [tool]." - user.visible_message(msg, self_msg) + var/msg = "\blue [user] forces open [target]'s [affected.encased] with \the [tool]." + var/self_msg = "\blue You force open [target]'s [affected.encased] with \the [tool]." + user.visible_message(msg, self_msg) - affected.open = 3 + affected.open = 3 - // Whoops! - if(prob(10)) - affected.fracture() + // Whoops! + if(prob(10) && !isrobot(user)) + affected.fracture()//WTF WHY?! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) +/datum/surgery_step/open_encased/retract/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/msg = "\red [user]'s hand slips, cracking [target]'s [affected.encased]!" - var/self_msg = "\red Your hand slips, cracking [target]'s [affected.encased]!" - user.visible_message(msg, self_msg) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - affected.createwound(BRUISE, 20) - affected.fracture() + var/msg = "\red [user]'s hand slips, cracking [target]'s [affected.encased]!" + var/self_msg = "\red Your hand slips, cracking [target]'s [affected.encased]!" + user.visible_message(msg, self_msg) + + affected.createwound(BRUISE, 20) + affected.fracture() + + return 0 /datum/surgery_step/open_encased/close allowed_tools = list( @@ -130,53 +138,53 @@ min_duration = 20 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/close/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && affected.open == 3 + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && affected.open == 3 - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/close/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - ..() + var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/close/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) + var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) - affected.open = 2.5 + affected.open = 2.5 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) +/datum/surgery_step/open_encased/close/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/msg = "\red [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!" - var/self_msg = "\red Your hand slips, bending [target]'s [affected.encased] the wrong way!" - user.visible_message(msg, self_msg) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - affected.createwound(BRUISE, 20) - affected.fracture() + var/msg = "\red [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!" + var/self_msg = "\red Your hand slips, bending [target]'s [affected.encased] the wrong way!" + user.visible_message(msg, self_msg) - /*if (prob(40)) //TODO: ORGAN REMOVAL UPDATE. - user.visible_message("\red A rib pierces the lung!") - target.rupture_lung()*/ + affected.createwound(BRUISE, 20) + affected.fracture() + + return 0 /datum/surgery_step/open_encased/mend allowed_tools = list( @@ -187,33 +195,35 @@ min_duration = 20 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/mend/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && affected.open == 2.5 + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && affected.open == 2.5 - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/mend/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "[user] starts applying \the [tool] to [target]'s [affected.encased]." - var/self_msg = "You start applying \the [tool] to [target]'s [affected.encased]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - ..() + var/msg = "[user] starts applying \the [tool] to [target]'s [affected.encased]." + var/self_msg = "You start applying \the [tool] to [target]'s [affected.encased]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/mend/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] applied \the [tool] to [target]'s [affected.encased]." - var/self_msg = "\blue You applied \the [tool] to [target]'s [affected.encased]." - user.visible_message(msg, self_msg) + var/msg = "\blue [user] applied \the [tool] to [target]'s [affected.encased]." + var/self_msg = "\blue You applied \the [tool] to [target]'s [affected.encased]." + user.visible_message(msg, self_msg) - affected.open = 2 \ No newline at end of file + affected.open = 2 + + return 1 \ No newline at end of file diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index 57c4dc29011..4f39d969232 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -10,13 +10,14 @@ /datum/surgery_step/face priority = 2 can_infect = 0 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (!affected || (affected.status & ORGAN_ROBOT)) - return 0 - return target_zone == "mouth" + +/datum/surgery_step/face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!hasorgans(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!affected || (affected.status & ORGAN_ROBOT)) + return 0 + return target_zone == "mouth" /datum/surgery_step/generic/cut_face allowed_tools = list( @@ -28,26 +29,30 @@ min_duration = 90 max_duration = 110 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - return ..() //&& target_zone == "mouth" && target.op_stage.face == 0//I NEED TO REPLACE THE OPSTAGE SHIT! +/datum/surgery_step/generic/cut_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return ..() && target_zone == "mouth" //&& target.op_stage.face == 0//I NEED TO REPLACE THE OPSTAGE SHIT! - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/generic/cut_face/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts to cut open [target]'s face and neck with \the [tool].", \ "You start to cut open [target]'s face and neck with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/generic/cut_face/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\blue [user] has cut open [target]'s face and neck with \the [tool]." , \ "\blue You have cut open [target]'s face and neck with \the [tool].",) //target.op_stage.face = 1//DID I MENTION I NEED TO REPLACE THE OPSTAGE SHIT! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 + +/datum/surgery_step/generic/cut_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \ "\red Your hand slips, slicing [target]'s throat wth \the [tool]!" ) affected.createwound(CUT, 60) target.losebreath += 4 + return 0 + /datum/surgery_step/face/mend_vocal allowed_tools = list( /obj/item/weapon/hemostat = 100, \ @@ -58,23 +63,25 @@ min_duration = 70 max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/mend_vocal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) return ..()// && target.op_stage.face == 1 //NO REALLY NED TO REPLACE, MAYBE WITH FUCKING istype(S.get_surgery_step(), /datum/surgery_step/cut_face)) OR SOMETHING - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/mend_vocal/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts mending [target]'s vocal cords with \the [tool].", \ "You start mending [target]'s vocal cords with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/mend_vocal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\blue [user] mends [target]'s vocal cords with \the [tool].", \ "\blue You mend [target]'s vocal cords with \the [tool].") //target.op_stage.face = 2//I NEED TO REPLACE THE OPSTAGE SHIT! + return 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/mend_vocal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\red [user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!", \ "\red Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!") target.losebreath += 4 + return 0 /datum/surgery_step/face/fix_face allowed_tools = list( @@ -85,24 +92,26 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/fix_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) return ..() //&& target.op_stage.face == 2//I NEED TO REPLACE THE OPSTAGE SHIT! - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/fix_face/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts pulling skin on [target]'s face back in place with \the [tool].", \ "You start pulling skin on [target]'s face back in place with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/fix_face/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\blue [user] pulls skin on [target]'s face back in place with \the [tool].", \ "\blue You pull skin on [target]'s face back in place with \the [tool].") //target.op_stage.face = 3//I NEED TO REPLACE THE OPSTAGE SHIT! + return 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/fix_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \ "\red Your hand slips, tearing skin on [target]'s face with \the [tool]!") target.apply_damage(10, BRUTE, affected, sharp=1, sharp=1) + return 0 /datum/surgery_step/face/cauterize allowed_tools = list( @@ -115,15 +124,15 @@ min_duration = 70 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) return ..()// && target.op_stage.face > 0//I NEED TO REPLACE THE OPSTAGE SHIT! - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/cauterize/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] is beginning to cauterize the incision on [target]'s face and neck with \the [tool]." , \ "You are beginning to cauterize the incision on [target]'s face and neck with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/cauterize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] cauterizes the incision on [target]'s face and neck with \the [tool].", \ "\blue You cauterize the incision on [target]'s face and neck with \the [tool].") @@ -136,8 +145,12 @@ target.regenerate_icons() //target.op_stage.face = 0//I NEED TO REPLACE THE OPSTAGE SHIT! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 + +/datum/surgery_step/face/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, leaving a small burn on [target]'s face with \the [tool]!", \ "\red Your hand slips, leaving a small burn on [target]'s face with \the [tool]!") - target.apply_damage(4, BURN, affected) \ No newline at end of file + target.apply_damage(4, BURN, affected) + + return 0 \ No newline at end of file diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 6deab483af8..0c8e7f9f69a 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -56,6 +56,7 @@ affected.createwound(CUT, 1) affected.clamp() spread_germs_to_organ(affected, user) + return 1 /datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -63,6 +64,7 @@ "\red Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!") affected.createwound(CUT, 7.5) affected.createwound(BURN, 12.5) + return 0 /datum/surgery_step/generic/incision_manager allowed_tools = list( @@ -97,12 +99,16 @@ affected.clamp() affected.open = 2 + return 1 + /datum/surgery_step/generic/incision_manager/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!", \ + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!", \ "\red Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 20) - affected.createwound(BURN, 15) + affected.createwound(CUT, 20) + affected.createwound(BURN, 15) + + return 2 /datum/surgery_step/generic/cut_open allowed_tools = list( @@ -115,8 +121,6 @@ max_duration = 110 /datum/surgery_step/generic/cut_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!ishuman(target) || !isalien(target)) - return 0 var/obj/item/organ/external/affected = target.get_organ(target_zone) return ..() && affected.open == 0 && target_zone != "mouth" @@ -128,20 +132,22 @@ ..() /datum/surgery_step/generic/cut_open/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has made an incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You have made an incision on [target]'s [affected.name] with \the [tool].",) - affected.open = 1 - affected.status |= ORGAN_BLEEDING - affected.createwound(CUT, 1) - //if (target_zone == "head") - // target.brain_op_stage = 1 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has made an incision on [target]'s [affected.name] with \the [tool].", \ + "\blue You have made an incision on [target]'s [affected.name] with \the [tool].",) + affected.open = 1 + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) + //if (target_zone == "head") + // target.brain_op_stage = 1 + return 1 /datum/surgery_step/generic/cut_open/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!", \ - "\red Your hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!") - affected.createwound(CUT, 10) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!", \ + "\red Your hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!") + affected.createwound(CUT, 10) + return 0 /datum/surgery_step/generic/clamp_bleeders allowed_tools = list( @@ -167,17 +173,19 @@ ..() /datum/surgery_step/generic/clamp_bleeders/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] clamps bleeders in [target]'s [affected.name] with \the [tool].", \ - "\blue You clamp bleeders in [target]'s [affected.name] with \the [tool].") - affected.clamp() - spread_germs_to_organ(affected, user) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] clamps bleeders in [target]'s [affected.name] with \the [tool].", \ + "\blue You clamp bleeders in [target]'s [affected.name] with \the [tool].") + affected.clamp() + spread_germs_to_organ(affected, user) + return 1 /datum/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) - affected.createwound(CUT, 10) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) + affected.createwound(CUT, 10) + return 0 /datum/surgery_step/generic/retract_skin allowed_tools = list( @@ -219,6 +227,7 @@ self_msg = "\blue You keep the incision open on [target]'s lower abdomen with \the [tool]." user.visible_message(msg, self_msg) affected.open = 2 + return 1 /datum/surgery_step/generic/retract_skin/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -232,6 +241,7 @@ self_msg = "\red Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!" user.visible_message(msg, self_msg) target.apply_damage(12, BRUTE, affected, sharp=1) + return 0 /datum/surgery_step/generic/cauterize allowed_tools = list( @@ -262,12 +272,14 @@ affected.open = 0 affected.germ_level = 0 affected.status &= ~ORGAN_BLEEDING + return 1 /datum/surgery_step/generic/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!", \ "\red Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!") target.apply_damage(3, BURN, affected) + return 0 /datum/surgery_step/generic/amputate @@ -305,10 +317,12 @@ user.visible_message("\blue [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ "\blue You amputate [target]'s [affected.name] with \the [tool].") affected.droplimb(1,DROPLIMB_EDGE) + return 1 /datum/surgery_step/generic/amputate/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!", \ "\red Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!") affected.createwound(CUT, 30) - affected.fracture() \ No newline at end of file + affected.fracture() + return 0 \ No newline at end of file diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 52d68c4fbd7..aa06301bf17 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -4,10 +4,8 @@ var/mob/living/carbon/human/H var/obj/item/organ/external/affecting var/selected_zone = user.zone_sel.selecting - world << "line 8" if(istype(M, /mob/living/carbon/human)) H = M - world <<"line 10" affecting = H.get_organ(check_zone(selected_zone)) if(can_operate(H)) //if they're prone or a slime @@ -17,37 +15,26 @@ for(var/datum/surgery/S in M.surgeries) if(S.location == selected_zone) current_surgery = S - world << "[S]" if(!current_surgery) var/list/all_surgeries = surgeries_list.Copy() var/list/available_surgeries = list() - world << "line 24" for(var/datum/surgery/S in all_surgeries) if(!S.possible_locs.Find(selected_zone)) - world << "line 29" - world << "[selected_zone]" continue if(affecting && S.requires_organic_bodypart && affecting.status == ORGAN_ROBOT) - world << "line 30" continue if(!S.can_start(user, M)) - world << "line 31" continue for(var/path in S.allowed_species) - world << "[path]" - world << "[M]" if(istype(M, path)) - world << "line 32" - world << "[path]" available_surgeries[S.name] = S break var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries if(P && user && user.Adjacent(M) && (I in user)) - world << "line 40" var/datum/surgery/S = available_surgeries[P] var/datum/surgery/procedure = new S.type if(procedure) @@ -89,5 +76,7 @@ proc/get_location_modifier(mob/M) else return 0.5 + +//just until i update maps.... /obj/item/organ/brain/New() new /obj/item/organ/internal/brain(src.loc) \ No newline at end of file diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 0b188380754..b7f98c0cbb6 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -73,6 +73,8 @@ user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ "\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) + return 1 + /datum/surgery_step/cavity/close_space priority = 2 allowed_tools = list( @@ -102,6 +104,9 @@ user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ "\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) + return 1 + + /datum/surgery_step/cavity/place_item priority = 0 allowed_tools = list(/obj/item = 100) @@ -129,6 +134,7 @@ if(istype(tool, /obj/item/weapon/disk/nuclear)) user << "Central command would kill you if you implanted the disk into someone." + return 0//fail else user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) @@ -143,6 +149,8 @@ tool.loc = target affected.cavity = 0 + return 1 + ////////////////////////////////////////////////////////////////// // IMPLANT/ITEM REMOVAL SURGERY // ////////////////////////////////////////////////////////////////// @@ -208,9 +216,12 @@ var/obj/item/weapon/implant/imp = obj imp.imp_in = null imp.implanted = 0 + + return 1 else user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.name].", \ "\blue There's something inside [target]'s [affected.name], but you just missed it this time." ) + return -1 //or maybe 0.... else if (affected.hidden) user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) @@ -220,10 +231,12 @@ affected.hidden.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type affected.hidden.update_icon() affected.hidden = null + return 1 else user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ "\blue You could not find anything inside [target]'s [affected.name]." ) + return -1 /datum/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) ..() @@ -237,4 +250,5 @@ playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) spawn(25) imp.activate() + return 0 diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index e264753633f..0bea5b7c4ee 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -3,6 +3,7 @@ // LIMB SURGERY // ////////////////////////////////////////////////////////////////// + /datum/surgery_step/limb/ priority = 3 // Must be higher than /datum/surgery_step/internal can_infect = 0 @@ -21,27 +22,27 @@ min_duration = 50 max_duration = 70 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \ - "You start attaching [E.name] to [target]'s [E.amputation_point].") +/datum/surgery_step/limb/attach/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = tool + user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \ + "You start attaching [E.name] to [target]'s [E.amputation_point].") - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message("[user] has attached [target]'s [E.name] to the [E.amputation_point].", \ - "You have attached [target]'s [E.name] to the [E.amputation_point].") - user.unEquip(E) - E.replaced(target) - E.forceMove(target) - target.update_body() - target.updatehealth() - target.UpdateDamageIcon() +/datum/surgery_step/limb/attach/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = tool + user.visible_message("[user] has attached [target]'s [E.name] to the [E.amputation_point].", \ + "You have attached [target]'s [E.name] to the [E.amputation_point].") + user.unEquip(E) + E.replaced(target) + E.forceMove(target) + target.update_body() + target.updatehealth() + target.UpdateDamageIcon() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ - "Your hand slips, damaging [target]'s [E.amputation_point]!") - target.apply_damage(10, BRUTE, null, sharp=1) +/datum/surgery_step/limb/attach/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = tool + user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ + "Your hand slips, damaging [target]'s [E.amputation_point]!") + target.apply_damage(10, BRUTE, null, sharp=1) /datum/surgery_step/limb/connect allowed_tools = list( @@ -54,32 +55,32 @@ min_duration = 100 max_duration = 120 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = target.get_organ(target_zone) - return E && !E.is_stump() && (E.status & ORGAN_DESTROYED) +/datum/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = target.get_organ(target_zone) + return E && !E.is_stump() && (E.status & ORGAN_DESTROYED) - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = target.get_organ(target_zone) - user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ - "You start connecting tendons and muscle in [target]'s [E.amputation_point].") +/datum/surgery_step/limb/connect/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = target.get_organ(target_zone) + user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ + "You start connecting tendons and muscle in [target]'s [E.amputation_point].") - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = target.get_organ(target_zone) - user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ - "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].") - E.status &= ~ORGAN_DESTROYED - if(E.children) - for(var/obj/item/organ/external/C in E.children) - C.status &= ~ORGAN_DESTROYED - target.update_body() - target.updatehealth() - target.UpdateDamageIcon() +/datum/surgery_step/limb/connect/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = target.get_organ(target_zone) + user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ + "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].") + E.status &= ~ORGAN_DESTROYED + if(E.children) + for(var/obj/item/organ/external/C in E.children) + C.status &= ~ORGAN_DESTROYED + target.update_body() + target.updatehealth() + target.UpdateDamageIcon() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ - "Your hand slips, damaging [target]'s [E.amputation_point]!") - target.apply_damage(10, BRUTE, null, sharp=1) +/datum/surgery_step/limb/connect/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = tool + user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ + "Your hand slips, damaging [target]'s [E.amputation_point]!") + target.apply_damage(10, BRUTE, null, sharp=1) /datum/surgery_step/limb/mechanize allowed_tools = list(/obj/item/robot_parts = 100) @@ -87,43 +88,43 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(..()) - var/obj/item/robot_parts/p = tool - if (p.part) - if (!(target_zone in p.part)) - return 0 - return isnull(target.get_organ(target_zone)) +/datum/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if(..()) + var/obj/item/robot_parts/p = tool + if (p.part) + if (!(target_zone in p.part)) + return 0 + return isnull(target.get_organ(target_zone)) - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/limb/connect/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user] starts attaching \the [tool] to [target].", \ "You start attaching \the [tool] to [target].") - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/robot_parts/L = tool - user.visible_message("[user] has attached \the [tool] to [target].", \ - "You have attached \the [tool] to [target].") +/datum/surgery_step/limb/connect/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/robot_parts/L = tool + user.visible_message("[user] has attached \the [tool] to [target].", \ + "You have attached \the [tool] to [target].") - if(L.part) - for(var/part_name in L.part) - if(!isnull(target.get_organ(part_name))) - continue - var/list/organ_data = target.species.has_limbs["[part_name]"] - if(!organ_data) - continue - var/new_limb_type = organ_data["path"] - var/obj/item/organ/external/new_limb = new new_limb_type(target) - new_limb.robotize(L.model_info) - if(L.sabotaged) - new_limb.sabotaged = 1 + if(L.part) + for(var/part_name in L.part) + if(!isnull(target.get_organ(part_name))) + continue + var/list/organ_data = target.species.has_limbs["[part_name]"] + if(!organ_data) + continue + var/new_limb_type = organ_data["path"] + var/obj/item/organ/external/new_limb = new new_limb_type(target) + new_limb.robotize(L.model_info) + if(L.sabotaged) + new_limb.sabotaged = 1 - target.update_body() - target.updatehealth() - target.UpdateDamageIcon() + target.update_body() + target.updatehealth() + target.UpdateDamageIcon() - qdel(tool) + qdel(tool) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips, damaging [target]'s flesh!", \ - "Your hand slips, damaging [target]'s flesh!") - target.apply_damage(10, BRUTE, null, sharp=1) +/datum/surgery_step/limb/connect/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user]'s hand slips, damaging [target]'s flesh!", \ + "Your hand slips, damaging [target]'s flesh!") + target.apply_damage(10, BRUTE, null, sharp=1) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 6e9d1228ecd..a6a561468d0 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -70,6 +70,8 @@ ticker.mode.remove_thrall(target.mind,0) new /obj/item/organ/internal/shadowtumor(get_turf(target)) + return 1 + /datum/surgery_step/internal/dethrall/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/braincase = target.named_organ_parent("brain") if(prob(50)) @@ -77,8 +79,11 @@ "You fumble and tear out [target]'s tumor!") target.adjustBrainLoss(110) // This is so you can't just defib'n go ticker.mode.remove_thrall(target.mind,1) + + return 0 else user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") + return 0 ////////////////////////////////////////////////////////////////// // ALIEN EMBRYO SURGERY // @@ -88,7 +93,7 @@ possible_locs = list("chest") -/datum/surgery_step/internal/remove_embryo +/datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. allowed_tools = list( /obj/item/weapon/hemostat = 100, \ /obj/item/weapon/wirecutters = 75, \ @@ -99,51 +104,55 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/embryo = 0 - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - embryo = 1 - //break +/datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/embryo = 0 + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + embryo = 1 + //break - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/internal/remove_embryo/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." user.visible_message(msg, self_msg) target.custom_pain("Something hurts horribly in your chest!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") +/datum/surgery_step/internal/remove_embryo/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", + "You rip the larva out of [target]'s ribcage!") - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - user << "You found an unknown alien organism in [target]'s chest!" - if(prob(10)) - A.AttemptGrow() + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + user << "You found an unknown alien organism in [target]'s chest!" + if(prob(10)) + A.AttemptGrow() - A.remove(target) - A.loc = get_turf(target) + A.remove(target) + A.loc = get_turf(target) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 - if (!hasorgans(target)) - return +/datum/surgery_step/internal/remove_embryo/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - if(prob(50)) - A.AttemptGrow(0) - user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") - else - target.adjustOxyLoss(30) - user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + if (!hasorgans(target)) + return + + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + if(prob(50)) + A.AttemptGrow(0) + user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") + else + target.adjustOxyLoss(30) + user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + + return 0 /datum/surgery_step/internal/manipulate_organs @@ -192,7 +201,7 @@ current_type = "extract" var/list/organs = target.get_organs_zone(target_zone) if(!organs.len) - user << "There is no removeable organs in [target]'s [parse_zone(target_zone)]!" + user << "There are no removeable organs in [target]'s [parse_zone(target_zone)]!" return -1 else for(var/obj/item/organ/internal/O in organs) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 7c2d455f319..b0aaea718a1 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -16,39 +16,45 @@ min_duration = 70 max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) return 0 +/datum/surgery_step/fix_vein/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(!affected) return 0 - var/internal_bleeding = 0 - for(var/datum/wound/W in affected.wounds) if(W.internal) - internal_bleeding = 1 - break + var/internal_bleeding = 0 + for(var/datum/wound/W in affected.wounds) if(W.internal) + internal_bleeding = 1 + break - return affected.open == 2 && internal_bleeding + return affected.open == 2 && internal_bleeding - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool]." , \ - "You start patching the damaged vein in [target]'s [affected.name] with \the [tool].") - target.custom_pain("The pain in [affected.name] is unbearable!",1) - ..() +/datum/surgery_step/fix_vein/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool]." , \ + "You start patching the damaged vein in [target]'s [affected.name] with \the [tool].") + target.custom_pain("The pain in [affected.name] is unbearable!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].", \ - "\blue You have patched the damaged vein in [target]'s [affected.name] with \the [tool].") +/datum/surgery_step/fix_vein/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].", \ + "\blue You have patched the damaged vein in [target]'s [affected.name] with \the [tool].") - for(var/datum/wound/W in affected.wounds) if(W.internal) - affected.wounds -= W - affected.update_damages() - if (ishuman(user) && prob(40)) user:bloody_hands(target, 0) + for(var/datum/wound/W in affected.wounds) if(W.internal) + affected.wounds -= W + affected.update_damages() + if (ishuman(user) && prob(40)) + var/mob/living/carbon/human/U = user + U.bloody_hands(target, 0) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") - affected.take_damage(5, 0) + return 1 + +/datum/surgery_step/fix_vein/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ + "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") + affected.take_damage(5, 0) + + return 0 /datum/surgery_step/fix_dead_tissue //Debridement priority = 2 @@ -64,35 +70,39 @@ min_duration = 110 max_duration = 160 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(!hasorgans(target)) - return 0 +/datum/surgery_step/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(!hasorgans(target)) + return 0 - if (target_zone == "mouth" || target_zone == "eyes") - return 0 + if (target_zone == "mouth" || target_zone == "eyes") + return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open == 2 && (affected.status & ORGAN_DEAD) + return affected && affected.open == 2 && (affected.status & ORGAN_DEAD) - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]." , \ - "You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].") - target.custom_pain("The pain in [affected.name] is unbearable!",1) - ..() +/datum/surgery_step/fix_dead_tissue/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]." , \ + "You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].") + target.custom_pain("The pain in [affected.name] is unbearable!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool].", \ - "\blue You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool].") - affected.open = 3 +/datum/surgery_step/fix_dead_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool].", \ + "\blue You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool].") + affected.open = 3 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 20, 1) + return 1 + +/datum/surgery_step/fix_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") + affected.createwound(CUT, 20, 1) + + return 0 /datum/surgery_step/treat_necrosis priority = 2 @@ -110,60 +120,62 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!istype(tool, /obj/item/weapon/reagent_containers)) - return 0 +/datum/surgery_step/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!istype(tool, /obj/item/weapon/reagent_containers)) + return 0 - var/obj/item/weapon/reagent_containers/container = tool - if(!container.reagents.has_reagent("mitocholide")) - return 0 + var/obj/item/weapon/reagent_containers/container = tool + if(!container.reagents.has_reagent("mitocholide")) + return 0 - if(!hasorgans(target)) - return 0 + if(!hasorgans(target)) + return 0 - if (target_zone == "mouth" || target_zone == "eyes") - return 0 + if (target_zone == "mouth" || target_zone == "eyes") + return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected.open == 3 && (affected.status & ORGAN_DEAD) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected.open == 3 && (affected.status & ORGAN_DEAD) - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." , \ - "You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].") - target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) - ..() +/datum/surgery_step/fix_dead_tissue/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." , \ + "You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].") + target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) +/datum/surgery_step/fix_dead_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (!istype(tool, /obj/item/weapon/reagent_containers)) - return + if (!istype(tool, /obj/item/weapon/reagent_containers)) + return - var/obj/item/weapon/reagent_containers/container = tool + var/obj/item/weapon/reagent_containers/container = tool - var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) - if (trans > 0) - container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue - - if(container.reagents.has_reagent("mitocholide")) - affected.status &= ~ORGAN_DEAD - - user.visible_message("\blue [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", \ - "\blue You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].") - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if (!istype(tool, /obj/item/weapon/reagent_containers)) - return - - var/obj/item/weapon/reagent_containers/container = tool - - var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) + var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) + if (trans > 0) container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue - user.visible_message("\red [user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!" , \ - "\red Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!") + if(container.reagents.has_reagent("mitocholide")) + affected.status &= ~ORGAN_DEAD - //no damage or anything, just wastes medicine + user.visible_message("\blue [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", \ + "\blue You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].") + + return 1 + +/datum/surgery_step/fix_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if (!istype(tool, /obj/item/weapon/reagent_containers)) + return + + var/obj/item/weapon/reagent_containers/container = tool + + var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) + container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue + + user.visible_message("\red [user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!" , \ + "\red Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!") + + //no damage or anything, just wastes medicine diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index d0fe89dcd41..30fcaa7be5d 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -8,12 +8,16 @@ steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/external/repair_brute,/datum/surgery_step/robotics/external/repair_burn,/datum/surgery_step/robotics/external/close_hatch) possible_locs = list("chest","head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") requires_organic_bodypart = 0 + allowed_species = list(/mob/living/carbon/human/machine) + disallowed_species = list(/mob/living/carbon/human) /datum/surgery/cybernetic_repair - name = "Cybernetic Mainpulation" + name = "Internal Cybernetic Mainpulation" steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/manipulate_robotic_organs) possible_locs = list("chest","head","groin") requires_organic_bodypart = 0 + allowed_species = list(/mob/living/carbon/human/machine) + disallowed_species = list(/mob/living/carbon/human) //to do, moar surgerys or condense down ala mainpulate organs. diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index f4e0b999c44..9a478484864 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -24,21 +24,24 @@ min_duration = 30 max_duration = 50 - can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_flesh/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) return ..() && istype(target) && target.core_removal_stage == 0 - begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_flesh/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("[user] starts cutting through [target]'s flesh with \the [tool].", \ "You start cutting through [target]'s flesh with \the [tool].") - end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_flesh/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\blue [user] cuts through [target]'s flesh with \the [tool].", \ "\blue You cut through [target]'s flesh with \the [tool], revealing its silky innards.") target.core_removal_stage = 1 - fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) + return 1 + +/datum/surgery_step/slime/cut_flesh/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, tearing [target]'s flesh with \the [tool]!", \ "\red Your hand slips, tearing [target]'s flesh with \the [tool]!") + return 0 /datum/surgery_step/slime/cut_innards allowed_tools = list( @@ -50,21 +53,23 @@ min_duration = 30 max_duration = 50 - can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_innards/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) return ..() && istype(target) && target.core_removal_stage == 1 - begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_innards/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("[user] starts cutting [target]'s silky innards apart with \the [tool].", \ "You start cutting [target]'s silky innards apart with \the [tool].") - end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_innards/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\blue [user] cuts [target]'s innards apart with \the [tool], exposing the cores.", \ "\blue You cut [target]'s innards apart with \the [tool], exposing the cores.") target.core_removal_stage = 2 + return 1 - fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_innards/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, tearing [target]'s innards with \the [tool]!", \ "\red Your hand slips, tearing [target]'s innards with \the [tool]!") + return 0 /datum/surgery_step/slime/saw_core allowed_tools = list( @@ -75,23 +80,26 @@ min_duration = 50 max_duration = 70 - can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/saw_core/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) return ..() && (istype(target) && target.core_removal_stage == 2 && target.cores > 0) //This is being passed a human as target, unsure why. - begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/saw_core/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("[user] starts cutting out one of [target]'s cores with \the [tool].", \ "You start cutting out one of [target]'s cores with \the [tool].") - end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - target.cores-- - user.visible_message("\blue [user] cuts out one of [target]'s cores with \the [tool].",, \ - "\blue You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.") +/datum/surgery_step/slime/saw_core/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) + target.cores-- + user.visible_message("\blue [user] cuts out one of [target]'s cores with \the [tool].",, \ + "\blue You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.") - if(target.cores >= 0) - new target.coretype(target.loc) - if(target.cores <= 0) - target.icon_state = "[target.colour] baby slime dead-nocore" + if(target.cores >= 0) + new target.coretype(target.loc) + if(target.cores <= 0) + target.icon_state = "[target.colour] baby slime dead-nocore" - fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) + return 1 + +/datum/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, causing \him to miss the core!", \ - "\red Your hand slips, causing you to miss the core!") \ No newline at end of file + "\red Your hand slips, causing you to miss the core!") + return 0 \ No newline at end of file From 87d2023af33ce3b9fb3f535beff45906c563a5e0 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 7 Jan 2016 23:25:06 -0500 Subject: [PATCH 015/442] so you can almost perform surgery with a claymore things needed: Addeing the sharp object used as a low success allowed tool on the fly. Handleing advanced scalpals. --- code/_onclick/item_attack.dm | 11 +++-- code/modules/surgery/helpers.dm | 43 ++++++++++++----- code/modules/surgery/limb_reattach.dm | 48 +++++++++++++++++++ code/modules/surgery/organs/organ_internal.dm | 2 +- code/modules/surgery/organs_internal.dm | 5 +- code/modules/surgery/robotics.dm | 6 +-- code/modules/surgery/surgery.dm | 32 ------------- code/modules/surgery/tools.dm | 10 ++-- 8 files changed, 102 insertions(+), 55 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 22c85ec85b0..893d0ce8cce 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -30,9 +30,14 @@ return 0 var/messagesource = M - //if (can_operate(M)) //Checks if mob is lying down on table for surgery - // if (do_surgery(M,user,src)) - // return 0 + if (can_operate(M)) //Checks if mob is lying down on table for surgery + if(is_sharp(src)) + if(istype(src,/obj/item/weapon/circular_saw) || istype(src,/obj/item/weapon/melee/energy/sword/cyborg/saw) || istype(src,/obj/item/robot_parts))//popup ovveride for direct amputation + if(!attempt_initiate_surgery(src, M, user,1)) + return + else + if(!attempt_initiate_surgery(src, M, user)) + return if (istype(M,/mob/living/carbon/brain)) messagesource = M:container diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index aa06301bf17..72ad82ef2b1 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -1,4 +1,4 @@ -/proc/attempt_initiate_surgery(obj/item/I, mob/living/M, mob/user) +/proc/attempt_initiate_surgery(obj/item/I, mob/living/M, mob/user, var/override ) world << "[istype(M)]" if(istype(M)) var/mob/living/carbon/human/H @@ -33,16 +33,37 @@ available_surgeries[S.name] = S break - var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries - if(P && user && user.Adjacent(M) && (I in user)) - var/datum/surgery/S = available_surgeries[P] - var/datum/surgery/procedure = new S.type - if(procedure) - procedure.location = selected_zone - M.surgeries += procedure - procedure.organ_ref = affecting - user.visible_message("[user] prepares to operate on [M]'s [parse_zone(selected_zone)].", \ - "You prepare to operate on [M]'s [parse_zone(selected_zone)].") + if(override) + if(I == /obj/item/weapon/circular_saw) + var/datum/surgery/S = available_surgeries["amputation"] + if(S)//we might be targetting a zone without the named procedure. + var/datum/surgery/procedure = new S.type + if(procedure) + procedure.location = selected_zone + M.surgeries += procedure + procedure.organ_ref = affecting + procedure.next_step(user, M) + else if(I == /obj/item/robot_parts) + var/datum/surgery/S = available_surgeries["robotic limb attachment"] + if(S)//we might be targetting a zone without the named procedure. + var/datum/surgery/procedure = new S.type + if(procedure) + procedure.location = selected_zone + M.surgeries += procedure + procedure.organ_ref = affecting + procedure.next_step(user, M) + + else + var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries + if(P && user && user.Adjacent(M) && (I in user)) + var/datum/surgery/S = available_surgeries[P] + var/datum/surgery/procedure = new S.type + if(procedure) + procedure.location = selected_zone + M.surgeries += procedure + procedure.organ_ref = affecting + user.visible_message("[user] prepares to operate on [M]'s [parse_zone(selected_zone)].", \ + "You prepare to operate on [M]'s [parse_zone(selected_zone)].") else if(!current_surgery.step_in_progress) if(current_surgery.status == 1) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 0bea5b7c4ee..eb9be00752b 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -3,6 +3,54 @@ // LIMB SURGERY // ////////////////////////////////////////////////////////////////// +/datum/surgery/amputation + name = "amputation" + steps = list(/datum/surgery_step/generic/amputate) + possible_locs = list("head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") + + +/datum/surgery/amputation/can_start(mob/user, mob/living/carbon/target) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + if(affected.cannot_amputate) + return 0 + if(affected.status && ORGAN_DESTROYED) + return 0 + + return 1 + + +/datum/surgery/reattach + name = "limb attachment" + steps = list(/datum/surgery_step/limb/attach,/datum/surgery_step/limb/connect) + possible_locs = list("head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") + +/datum/surgery/reattach/can_start(mob/user, mob/living/carbon/target) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + + if(affected.status && ~ORGAN_DESTROYED) + return 0 + + return 1 + +cannot_amputate +/datum/surgery/robo_attach + name = "robotic limb attachment" + steps = list(/datum/surgery_step/limb/mechanize) + possible_locs = list("head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") + +/datum/surgery/robo_attach/can_start(mob/user, mob/living/carbon/target) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + + if(affected.status && ~ORGAN_DESTROYED) + return 0 + + return 1 /datum/surgery_step/limb/ priority = 3 // Must be higher than /datum/surgery_step/internal diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 6678c37033d..40d76176d4f 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -65,7 +65,7 @@ /obj/item/weapon/reagent_containers/food/snacks/organ/New() ..() - reagents.add_reagent("nutriment" = 5) + reagents.add_reagent("nutriment", 5) /obj/item/organ/internal/Destroy() diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index a6a561468d0..9b33c4f2f6e 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -179,6 +179,7 @@ I = null affected = target.get_organ(target_zone) if(isorgan(tool)) + world << "Insert" current_type = "insert" I = tool if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) @@ -197,7 +198,7 @@ "You start transplanting \the [tool] into [target]'s [affected.name].") target.custom_pain("Someone's rooting around in your [affected.name]!",1) - else if(tool in implements_extract) + else if(implement_type in implements_extract) current_type = "extract" var/list/organs = target.get_organs_zone(target_zone) if(!organs.len) @@ -219,7 +220,7 @@ else return -1 - else if(tool in implements_mend) + else if(implement_type in implements_mend) //todo Change message, make it heal the organs... current_type = "mend" var/tool_name = "\the [tool]" diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 30fcaa7be5d..f092a657d1c 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -249,7 +249,7 @@ I = null affected = target.get_organ(target_zone) - if(tool in implements_insert) + if(implement_type in implements_insert) current_type = "insert" //I = tool var/off_tool = user.get_inactive_hand() @@ -312,7 +312,7 @@ user.visible_message("[user] starts installing \the [tool] into [target]'s [affected.name].", \ "You start installing \the [tool] into [target]'s [affected.name].") - else if(tool in implements_extract) + else if(implement_type in implements_extract) current_type = "extract" var/list/organs = target.get_organs_zone(target_zone) if(!(affected && (affected.status & ORGAN_ROBOT))) @@ -339,7 +339,7 @@ else return -1 - else if(tool in implements_mend) + else if(implement_type in implements_mend) current_type = "mend" if (!hasorgans(target)) return diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 2c9570dab9b..af7be7b4661 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -182,38 +182,6 @@ if(!(E.status & ORGAN_ROBOT)) //Germs on robotic limbs bad E.germ_level = max(germ_level,E.germ_level) //as funny as scrubbing microbes out with clean gloves is - no. -/proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool,datum/surgery/surgery) - if(!istype(M)) - return 0 - if (user.a_intent == I_HARM) //check for Hippocratic Oath - return 0 - var/zone = user.zone_sel.selecting - if(zone in surgery.step_in_progress) //Can't operate on someone repeatedly. - user << "\red You can't operate on this area while surgery is already in progress." - return 1 - for(var/datum/surgery_step/S in surgery_steps) - //check if tool is right or close enough and if this step is possible - if(S.tool_quality(tool)) - var/step_is_valid = S.can_use(user, M, zone, tool) - if(step_is_valid && S.is_valid_target(M)) - if(step_is_valid == 2) // This is a failure that already has a message for failing. - return 1 - surgery.step_in_progress += zone - S.begin_step(user, M, zone, tool) //start on it - //We had proper tools! (or RNG smiled.) and user did not move or change hands. - if(prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration))) - S.end_step(user, M, zone, tool) //finish successfully - else if ((tool in user.contents) && user.Adjacent(M)) //or - S.fail_step(user, M, zone, tool) //malpractice~ - else // This failing silently was a pain. - user << "You must remain close to your patient to conduct surgery." - surgery.step_in_progress = 0 // Clear the in-progress flag. - return 1 //don't want to do weapony things after surgery - - if (user.a_intent == I_HELP) - user << "You can't see any useful way to use [tool] on [M]." - return 1 - return 0 /proc/sort_surgeries() var/gap = surgery_steps.len diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index a53a4d9604e..2ccfad81de2 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -132,10 +132,14 @@ origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "sawed", "cut") +///obj/item/weapon/circular_saw/attack(mob/living/M, mob/user) -/obj/item/weapon/scalpel/attack(mob/living/M, mob/user) - if(!attempt_initiate_surgery(src, M, user)) - ..() +// if(!attempt_initiate_surgery(src, M, user,1)) +// ..() + +///obj/item/weapon/scalpel/attack(mob/living/M, mob/user) +// if(!attempt_initiate_surgery(src, M, user)) + //..() //misc, formerly from code/defines/weapons.dm /obj/item/weapon/bonegel From 678a2e9f4eba85510ed672d701c8d7af8c161d12 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 9 Jan 2016 00:05:25 -0500 Subject: [PATCH 016/442] commit so i can go bugfix and do other things besides code in organs...tell me what i did wrong! --- code/_onclick/item_attack.dm | 15 ++++++++------ code/modules/surgery/generic.dm | 9 ++++++++- code/modules/surgery/helpers.dm | 14 ++++--------- code/modules/surgery/limb_reattach.dm | 14 ++++++------- code/modules/surgery/organs_internal.dm | 27 +++++++++++++++++-------- code/modules/surgery/robotics.dm | 2 +- code/modules/surgery/surgery.dm | 1 + 7 files changed, 49 insertions(+), 33 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 893d0ce8cce..ee2d7c56cf7 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -31,13 +31,16 @@ var/messagesource = M if (can_operate(M)) //Checks if mob is lying down on table for surgery + if(istype(src,/obj/item/robot_parts))//popup ovveride for direct attach + if(!attempt_initiate_surgery(src, M, user,1)) + return 0 + if(istype(src,/obj/item/weapon/screwdriver) && M.get_species() == "Machine") + if(!attempt_initiate_surgery(src, M, user)) + return 0 if(is_sharp(src)) - if(istype(src,/obj/item/weapon/circular_saw) || istype(src,/obj/item/weapon/melee/energy/sword/cyborg/saw) || istype(src,/obj/item/robot_parts))//popup ovveride for direct amputation - if(!attempt_initiate_surgery(src, M, user,1)) - return - else - if(!attempt_initiate_surgery(src, M, user)) - return + if(!attempt_initiate_surgery(src, M, user)) + return 0 + return if (istype(M,/mob/living/carbon/brain)) messagesource = M:container diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 0c8e7f9f69a..d29b0b0dc9c 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -25,7 +25,8 @@ /obj/item/weapon/scalpel/laser3 = 95, \ /obj/item/weapon/scalpel/laser2 = 85, \ /obj/item/weapon/scalpel/laser1 = 75, \ - /obj/item/weapon/melee/energy/sword/saber = 5 + /obj/item/weapon/melee/energy/ = 5, \ + /obj/item/weapon/pen/edagger = 5, \ ) min_duration = 90 @@ -115,6 +116,9 @@ /obj/item/weapon/scalpel = 100, \ /obj/item/weapon/kitchenknife = 75, \ /obj/item/weapon/shard = 50, \ + /obj/item/weapon/scissors = 10, \ + /obj/item/weapon/twohanded/chainsaw = 1, \ + /obj/item/weapon/claymore = 5, \ ) min_duration = 90 @@ -316,6 +320,9 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ "\blue You amputate [target]'s [affected.name] with \the [tool].") + + add_logs(target,user, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]") + affected.droplimb(1,DROPLIMB_EDGE) return 1 diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 72ad82ef2b1..53eab87bd96 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -34,16 +34,7 @@ break if(override) - if(I == /obj/item/weapon/circular_saw) - var/datum/surgery/S = available_surgeries["amputation"] - if(S)//we might be targetting a zone without the named procedure. - var/datum/surgery/procedure = new S.type - if(procedure) - procedure.location = selected_zone - M.surgeries += procedure - procedure.organ_ref = affecting - procedure.next_step(user, M) - else if(I == /obj/item/robot_parts) + if(I == /obj/item/robot_parts) var/datum/surgery/S = available_surgeries["robotic limb attachment"] if(S)//we might be targetting a zone without the named procedure. var/datum/surgery/procedure = new S.type @@ -76,6 +67,9 @@ M.surgeries -= current_surgery user.visible_message("[user] mends the incision on [M]'s [parse_zone(selected_zone)] with the [I] .", \ "You mend the incision on [M]'s [parse_zone(selected_zone)].") + affecting.open = 0 + affecting.germ_level = 0 + affecting.status &= ~ORGAN_BLEEDING qdel(current_surgery) else if(current_surgery.can_cancel) user << "You need to hold a cautery in inactive hand to stop [M]'s surgery!" diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index eb9be00752b..41098580c48 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -18,7 +18,7 @@ if(affected.status && ORGAN_DESTROYED) return 0 - return 1 + return 1 /datum/surgery/reattach @@ -31,10 +31,10 @@ var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.status && ~ORGAN_DESTROYED) - return 0 + if(affected.status && ORGAN_DESTROYED) + return 1 - return 1 + return 0 cannot_amputate /datum/surgery/robo_attach @@ -47,10 +47,10 @@ cannot_amputate var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.status && ~ORGAN_DESTROYED) - return 0 + if(affected.status && ORGAN_DESTROYED) + return 1 - return 1 + return 0 /datum/surgery_step/limb/ priority = 3 // Must be higher than /datum/surgery_step/internal diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 9b33c4f2f6e..8a4c79b5f40 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -1,10 +1,16 @@ /datum/surgery/organ_manipulation name = "organ manipulation" steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, - /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs) - possible_locs = list("chest", "head") + /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone) + possible_locs = list("chest") requires_organic_bodypart = 0 +/datum/surgery/organ_manipulation/head //for adding a mendskull step... + name = "organ manipulation" + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, + /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull ,/datum/surgery_step/finish_bone) + possible_locs = list("head") + /datum/surgery/organ_manipulation/soft possible_locs = list("groin", "eyes", "mouth") steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs) @@ -35,7 +41,7 @@ // Dethrall Shadowling // ////////////////////////////////////////////////////////////////// /datum/surgery/remove_thrall - name = "dethralling" + name = "clense contaminations" steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall) possible_locs = list("head") @@ -159,7 +165,7 @@ allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55) - var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack= 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20 + var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20 ) var/current_type var/obj/item/organ/internal/I = null @@ -178,8 +184,9 @@ I = null affected = target.get_organ(target_zone) - if(isorgan(tool)) - world << "Insert" + world << "[implement_type]" + world << "[is_int_organ(implement_type)]" + if(is_int_organ(tool)) current_type = "insert" I = tool if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) @@ -231,7 +238,8 @@ else if (istype(tool, /obj/item/stack/nanopaste)) tool_name = "\the [tool]" //what else do you call nanopaste medically? - if (!hasorgans(target)) + if(!hasorgans(target)) + user << "They do not have organs to mend!" return for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) @@ -243,6 +251,9 @@ else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) + + user << "No organs appear to be damaged." + return target.custom_pain("The pain in your [affected.name] is living hell!",1) else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) @@ -288,7 +299,7 @@ user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ "\blue You have separated and extracted [target]'s [I] with \the [tool].") - add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") + add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") spread_germs_to_organ(I, user) I.status |= ORGAN_CUT_AWAY I.remove(target) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index f092a657d1c..37de91743e2 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -11,7 +11,7 @@ allowed_species = list(/mob/living/carbon/human/machine) disallowed_species = list(/mob/living/carbon/human) -/datum/surgery/cybernetic_repair +/datum/surgery/cybernetic_repair/internal name = "Internal Cybernetic Mainpulation" steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/manipulate_robotic_organs) possible_locs = list("chest","head","groin") diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index af7be7b4661..3f7da2d800f 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -47,6 +47,7 @@ src = null + /* SURGERY STEPS */ /datum/surgery_step var/priority = 0 //steps with higher priority would be attempted first From ba87398eeac1bed6f7ed9fb4bcdd51210ce5f443 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 15 Jan 2016 07:11:28 -0500 Subject: [PATCH 017/442] conflict fixes --- .../mob/living/carbon/human/update_icons.dm | 1080 +---------------- icons/mob/human_face.dmi | Bin 78637 -> 79068 bytes 2 files changed, 35 insertions(+), 1045 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b768039ac29..e22ad5e66dc 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,1045 +1,35 @@ -/* - Global associative list for caching humanoid icons. - Index format m or f, followed by a string of 0 and 1 to represent bodyparts followed by husk fat hulk skeleton 1 or 0. - TODO: Proper documentation - icon_key is [species.race_key][g][husk][fat][hulk][skeleton][s_tone] -*/ -var/global/list/human_icon_cache = list() - - /////////////////////// - //UPDATE_ICONS SYSTEM// - /////////////////////// -/* -Calling this a system is perhaps a bit trumped up. It is essentially update_clothing dismantled into its -core parts. The key difference is that when we generate overlays we do not generate either lying or standing -versions. Instead, we generate both and store them in two fixed-length lists, both using the same list-index -(The indexes are in update_icons.dm): Each list for humans is (at the time of writing) of length 19. -This will hopefully be reduced as the system is refined. - - var/overlays_lying[19] //For the lying down stance - var/overlays_standing[19] //For the standing stance - -When we call update_icons, the 'lying' variable is checked and then the appropriate list is assigned to our overlays! -That in itself uses a tiny bit more memory (no more than all the ridiculous lists the game has already mind you). - -On the other-hand, it should be very CPU cheap in comparison to the old system. -In the old system, we updated all our overlays every life() call, even if we were standing still inside a crate! -or dead!. 25ish overlays, all generated from scratch every second for every xeno/human/monkey and then applied. -More often than not update_clothing was being called a few times in addition to that! CPU was not the only issue, -all those icons had to be sent to every client. So really the cost was extremely cumulative. To the point where -update_clothing would frequently appear in the top 10 most CPU intensive procs during profiling. - -Another feature of this new system is that our lists are indexed. This means we can update specific overlays! -So we only regenerate icons when we need them to be updated! This is the main saving for this system. - -In practice this means that: - everytime you fall over, we just switch between precompiled lists. Which is fast and cheap. - Everytime you do something minor like take a pen out of your pocket, we only update the in-hand overlay - etc... - - -There are several things that need to be remembered: - -> Whenever we do something that should cause an overlay to update (which doesn't use standard procs - ( i.e. you do something like l_hand = /obj/item/something new(src) ) - You will need to call the relevant update_inv_* proc: - update_inv_head() - update_inv_wear_suit() - update_inv_gloves() - update_inv_shoes() - update_inv_w_uniform() - update_inv_glasse() - update_inv_l_hand() - update_inv_r_hand() - update_inv_belt() - update_inv_wear_id() - update_inv_ears() - update_inv_s_store() - update_inv_pockets() - update_inv_back() - update_inv_handcuffed() - update_inv_wear_mask() - - All of these are named after the variable they update from. They are defined at the mob/ level like - update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a - slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such. - - -> There are also these special cases: - update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows - update_mutantrace() //handles updating your appearance after setting the mutantrace var - UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) - update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc - update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and - ...eyes were merged into update_body) - update_targeted() // Updates the target overlay when someone points a gun at you - -> All of these procs update our overlays_lying and overlays_standing, and then call update_icons() by default. - If you wish to update several overlays at once, you can set the argument to 0 to disable the update and call - it manually: - e.g. - update_inv_head(0) - update_inv_l_hand(0) - update_inv_r_hand() //<---calls update_icons() - - or equivillantly: - update_inv_head(0) - update_inv_l_hand(0) - update_inv_r_hand(0) - update_icons() - -> If you need to update all overlays you can use regenerate_icons(). it works exactly like update_clothing used to. - -> I reimplimented an old unused variable which was in the code called (coincidentally) var/update_icon - It can be used as another method of triggering regenerate_icons(). It's basically a flag that when set to non-zero - will call regenerate_icons() at the next life() call and then reset itself to 0. - The idea behind it is icons are regenerated only once, even if multiple events requested it. - -This system is confusing and is still a WIP. It's primary goal is speeding up the controls of the game whilst -reducing processing costs. So please bear with me while I iron out the kinks. It will be worth it, I promise. -If I can eventually free var/lying stuff from the life() process altogether, stuns/death/status stuff -will become less affected by lag-spikes and will be instantaneous! :3 - -If you have any questions/constructive-comments/bugs-to-report/or have a massivly devestated butt... -Please contact me on #coderbus IRC. ~Carn x -*/ - -//Human Overlays Indexes///////// -#define MUTANTRACE_LAYER 1 -#define MUTATIONS_LAYER 2 -#define DAMAGE_LAYER 3 -#define UNIFORM_LAYER 4 -#define ID_LAYER 5 -#define SHOES_LAYER 6 -#define GLOVES_LAYER 7 -#define EARS_LAYER 8 -#define SUIT_LAYER 9 -#define GLASSES_LAYER 10 -#define BELT_LAYER 11 //Possible make this an overlay of somethign required to wear a belt? -#define TAIL_LAYER 12 //bs12 specific. this hack is probably gonna come back to haunt me -#define SUIT_STORE_LAYER 13 -#define BACK_LAYER 14 -#define HAIR_LAYER 15 //TODO: make part of head layer? -#define FACEMASK_LAYER 16 -#define HEAD_LAYER 17 -#define COLLAR_LAYER 18 -#define HANDCUFF_LAYER 19 -#define LEGCUFF_LAYER 20 -#define L_HAND_LAYER 21 -#define R_HAND_LAYER 22 -#define TARGETED_LAYER 23 //BS12: Layer for the target overlay from weapon targeting system -#define FIRE_LAYER 24 //If you're on fire -#define TOTAL_LAYERS 24 - - - -/mob/living/carbon/human - var/list/overlays_standing[TOTAL_LAYERS] - var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed - var/icon/skeleton - - -/mob/living/carbon/human/proc/apply_overlay(cache_index) - var/image/I = overlays_standing[cache_index] - if(I) - overlays += I - -/mob/living/carbon/human/proc/remove_overlay(cache_index) - if(overlays_standing[cache_index]) - overlays -= overlays_standing[cache_index] - overlays_standing[cache_index] = null - -//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING -//this proc is messy as I was forced to include some old laggy cloaking code to it so that I don't break cloakers -//I'll work on removing that stuff by rewriting some of the cloaking stuff at a later date. -/mob/living/carbon/human/update_icons() - - update_hud() //TODO: remove the need for this - - var/stealth = 0 - for(var/obj/item/weapon/cloaking_device/S in list(l_hand,r_hand,belt,l_store,r_store)) - if(S.active) - stealth = 1 - break - - if(stealth) - icon = 'icons/mob/human.dmi' - icon_state = "body_cloaked" - var/image/I = overlays_standing[L_HAND_LAYER] - if(istype(I)) overlays += I - I = overlays_standing[R_HAND_LAYER] - if(istype(I)) overlays += I - else - icon = stand_icon - if(overlays.len != overlays_standing.len) - overlays.Cut() - - for(var/thing in overlays_standing) - if(thing) overlays += thing - - update_transform() - -var/global/list/damage_icon_parts = list() - -//DAMAGE OVERLAYS -//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists -/mob/living/carbon/human/UpdateDamageIcon(var/update_icons=1) - // first check whether something actually changed about damage appearance - var/damage_appearance = "" - - for(var/obj/item/organ/external/O in organs) - if(O.is_stump()) - continue - if(O.status & ORGAN_DESTROYED) damage_appearance += "d" - else - damage_appearance += O.damage_state - - if(damage_appearance == previous_damage_appearance) - // nothing to do here - return - - previous_damage_appearance = damage_appearance - - var/icon/standing = new /icon(species.damage_overlays, "00") - - var/image/standing_image = new /image("icon" = standing) - - // blend the individual damage states with our icons - for(var/obj/item/organ/external/O in organs) - if(O.is_stump()) - continue - if(!(O.status & ORGAN_DESTROYED)) - O.update_icon() - if(O.damage_state == "00") continue - var/icon/DI - var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]" - - if(damage_icon_parts[cache_index] == null) - DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human - DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels - DI.Blend(species.blood_color, ICON_MULTIPLY) - damage_icon_parts[cache_index] = DI - else - DI = damage_icon_parts[cache_index] - standing_image.overlays += DI - - overlays_standing[DAMAGE_LAYER] = standing_image - - if(update_icons) update_icons() - -//BASE MOB SPRITE -/mob/living/carbon/human/proc/update_body(var/update_icons=1) - - var/husk_color_mod = rgb(96,88,80) - var/hulk_color_mod = rgb(48,224,40) - - var/husk = (HUSK in src.mutations) - var/fat = (FAT in src.mutations) - var/hulk = (HULK in src.mutations) - var/skeleton = (SKELETON in src.mutations) - - //CACHING: Generate an index key from visible bodyparts. - //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. - //Create a new, blank icon for our mob to use. - if(stand_icon) - qdel(stand_icon) - stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") - var/icon_key = "" - var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) - - if(eyes) - icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" - else - icon_key += "#000000" - - for(var/organ_tag in species.has_limbs) - var/obj/item/organ/external/part = organs_by_name[organ_tag] - if(isnull(part) || part.is_stump() || (part.status & ORGAN_DESTROYED)) - icon_key += "0" - else if(part.status & ORGAN_ROBOT) - icon_key += "2[part.model ? "-[part.model]": ""]" - else if(part.status & ORGAN_DEAD) - icon_key += "3" - else - icon_key += "1" - - if(part) - icon_key += "[part.species.race_key]" - icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" - icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]" - if(part.s_col) - icon_key += "[rgb(part.s_col[1], part.s_col[2], part.s_col[3])]" - - icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" - - var/icon/base_icon - if(human_icon_cache[icon_key]) - base_icon = human_icon_cache[icon_key] - else - //BEGIN CACHED ICON GENERATION. - var/obj/item/organ/external/chest = get_organ("chest") - base_icon = chest.get_icon() - - for(var/obj/item/organ/external/part in organs) - var/icon/temp = part.get_icon(skeleton) - //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST - //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) - if(part.icon_position&(LEFT|RIGHT)) - var/icon/temp2 = new('icons/mob/human.dmi',"blank") - temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH) - temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH) - if(!(part.icon_position & LEFT)) - temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) - if(!(part.icon_position & RIGHT)) - temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) - base_icon.Blend(temp2, ICON_OVERLAY) - if(part.icon_position & LEFT) - temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) - if(part.icon_position & RIGHT) - temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) - base_icon.Blend(temp2, ICON_UNDERLAY) - else - base_icon.Blend(temp, ICON_OVERLAY) - - if(!skeleton) - if(husk) - base_icon.ColorTone(husk_color_mod) - else if(hulk) - var/list/tone = ReadRGB(hulk_color_mod) - base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) - - //Handle husk overlay. - if(husk && ("overlay_husk" in icon_states(species.icobase))) - var/icon/mask = new(base_icon) - var/icon/husk_over = new(species.icobase,"overlay_husk") - mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) - husk_over.Blend(mask, ICON_ADD) - base_icon.Blend(husk_over, ICON_OVERLAY) - - human_icon_cache[icon_key] = base_icon - - //END CACHED ICON GENERATION. - stand_icon.Blend(base_icon,ICON_OVERLAY) - - //Underwear - if(underwear && species.clothing_flags & HAS_UNDERWEAR) - var/datum/sprite_accessory/underwear/U = underwear_list[underwear] - if(U) - stand_icon.Blend(new /icon(U.icon, "uw_[U.icon_state]_s"), ICON_OVERLAY) - - if(undershirt && species.clothing_flags & HAS_UNDERSHIRT) - var/datum/sprite_accessory/undershirt/U2 = undershirt_list[undershirt] - if(U2) - stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY) - - - if(socks && species.clothing_flags & HAS_SOCKS) - var/datum/sprite_accessory/socks/U3 = socks_list[socks] - if(U3) - stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY) - - - if(update_icons) - update_icons() - - if(lip_style && species && species.flags & HAS_LIPS) - var/icon/lips = icon("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s") - lips.Blend(lip_color, ICON_ADD) - - stand_icon.Blend(lips, ICON_OVERLAY) - - //tail - update_tail_layer(0) - - -//HAIR OVERLAY -/mob/living/carbon/human/proc/update_hair(var/update_icons=1) - //Reset our hair - overlays_standing[HAIR_LAYER] = null - - var/obj/item/organ/external/head/head_organ = get_organ("head") - if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) - if(update_icons) update_icons() - return - - //masks and helmets can obscure our hair, unless we're a synthetic - if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) - if(update_icons) update_icons() - return - - //base icons - var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") - - if(f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style && facial_hair_style.species_allowed) - if(src.species.name in facial_hair_style.species_allowed) - var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(facial_hair_style.do_colouration) - facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) - face_standing.Blend(facial_s, ICON_OVERLAY) - else - //warning("Invalid f_style for [species.name]: [f_style]") - - if(!get_int_organ(/obj/item/organ/internal/brain)) - face_standing += icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s") - - if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()))) - var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] - if(hair_style && hair_style.species_allowed) - if(src.species.name in hair_style.species_allowed) - var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(hair_style.do_colouration) - hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - - face_standing.Blend(hair_s, ICON_OVERLAY) - else - //warning("Invalid h_style for [species.name]: [h_style]") - - overlays_standing[HAIR_LAYER] = image(face_standing) - - if(update_icons) update_icons() - -/mob/living/carbon/human/update_mutations(var/update_icons=1) - var/fat - if(FAT in mutations) - fat = "fat" - - var/image/standing = image("icon" = 'icons/effects/genetics.dmi') - var/add_image = 0 - var/g = "m" - if(gender == FEMALE) g = "f" - // DNA2 - Drawing underlays. - for(var/datum/dna/gene/gene in dna_genes) - if(!gene.block) - continue - if(gene.is_active(src)) - var/underlay=gene.OnDrawUnderlays(src,g,fat) - if(underlay) - standing.underlays += underlay - add_image = 1 - for(var/mut in mutations) - switch(mut) - /* - if(HULK) - if(fat) - standing.underlays += "hulk_[fat]_s" - else - standing.underlays += "hulk_[g]_s" - add_image = 1 - if(RESIST_COLD) - standing.underlays += "fire[fat]_s" - add_image = 1 - if(RESIST_HEAT) - standing.underlays += "cold[fat]_s" - add_image = 1 - if(TK) - standing.underlays += "telekinesishead[fat]_s" - add_image = 1 - */ - if(LASER) - standing.overlays += "lasereyes_s" - add_image = 1 - if((RESIST_COLD in mutations) && (RESIST_HEAT in mutations)) - standing.underlays -= "cold[fat]_s" - standing.underlays -= "fire[fat]_s" - standing.underlays += "coldfire[fat]_s" - if(add_image) - overlays_standing[MUTATIONS_LAYER] = standing - else - overlays_standing[MUTATIONS_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/proc/update_mutantrace(var/update_icons=1) -//BS12 EDIT - var/skel = (SKELETON in src.mutations) - if(skel) - skeleton = 'icons/mob/human_races/r_skeleton.dmi' - else - skeleton = null - - update_hair(0) - if(update_icons) update_icons() - -//Call when target overlay should be added/removed -/mob/living/carbon/human/update_targeted(var/update_icons=1) - if (targeted_by && target_locked) - overlays_standing[TARGETED_LAYER] = target_locked - else if (!targeted_by && target_locked) - qdel(target_locked) - if (!targeted_by) - overlays_standing[TARGETED_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_fire() - remove_overlay(FIRE_LAYER) - if(on_fire) - overlays_standing[FIRE_LAYER] = image("icon"=fire_dmi, "icon_state"=fire_sprite, "layer"=-FIRE_LAYER) - else - overlays_standing[FIRE_LAYER] = null - apply_overlay(FIRE_LAYER) - -/* --------------------------------------- */ -//For legacy support. -/mob/living/carbon/human/regenerate_icons() - ..() - if(notransform) return - update_mutations(0) - update_body(0) - update_hair(0) - update_mutantrace(0) - update_inv_w_uniform(0,0) - update_inv_wear_id(0) - update_inv_gloves(0,0) - update_inv_glasses(0) - update_inv_ears(0) - update_inv_shoes(0,0) - update_inv_s_store(0) - update_inv_wear_mask(0) - update_inv_head(0,0) - update_inv_belt(0) - update_inv_back(0) - update_inv_wear_suit(0) - update_inv_r_hand(0) - update_inv_l_hand(0) - update_inv_handcuffed(0) - update_inv_legcuffed(0) - update_inv_pockets(0) - update_inv_wear_pda(0) - UpdateDamageIcon() - update_icons() - //Hud Stuff - update_hud() - update_fire() -/* --------------------------------------- */ -//vvvvvv UPDATE_INV PROCS vvvvvv - -/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1) - if(w_uniform && istype(w_uniform, /obj/item/clothing/under) ) - w_uniform.screen_loc = ui_iclothing - var/t_color = w_uniform.item_color - if(!t_color) t_color = icon_state - var/image/standing = image("icon_state" = "[t_color]_s") - - if(FAT in mutations) - if(w_uniform.flags&ONESIZEFITSALL) - standing.icon = 'icons/mob/uniform_fat.dmi' - else - src << "\red You burst out of \the [w_uniform]!" - unEquip(w_uniform) - return - else - standing.icon = 'icons/mob/uniform.dmi' - - if(w_uniform.icon_override) - standing.icon = w_uniform.icon_override - else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.name]) - standing.icon = w_uniform.sprite_sheets[species.name] - - if(w_uniform.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "uniformblood") - bloodsies.color = w_uniform.blood_color - standing.overlays += bloodsies - - if(w_uniform:accessories.len) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. - for(var/obj/item/clothing/accessory/A in w_uniform:accessories) - var/tie_color = A.item_color - if(!tie_color) tie_color = A.icon_state - standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]") - - overlays_standing[UNIFORM_LAYER] = standing - else - overlays_standing[UNIFORM_LAYER] = null - // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY - for( var/obj/item/thing in list(r_store, l_store, wear_id, wear_pda, belt) ) // - if(thing) // - unEquip(thing) // - if (client) // - client.screen -= thing // - // - if (thing) // - thing.loc = loc // - thing.dropped(src) // - thing.layer = initial(thing.layer) - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1) - if(wear_id) - wear_id.screen_loc = ui_id //TODO - if(w_uniform && w_uniform:displays_id) - overlays_standing[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id") - else - overlays_standing[ID_LAYER] = null - else - overlays_standing[ID_LAYER] = null - - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_gloves(var/update_icons=1) - if(gloves) - var/t_state = gloves.item_state - if(!t_state) t_state = gloves.icon_state - - var/image/standing - if(gloves.icon_override) - standing = image("icon" = gloves.icon_override, "icon_state" = "[t_state]") - else if(gloves.sprite_sheets && gloves.sprite_sheets[species.name]) - standing = image("icon" = gloves.sprite_sheets[species.name], "icon_state" = "[t_state]") - else - standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]") - - if(gloves.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") - bloodsies.color = gloves.blood_color - standing.overlays += bloodsies - gloves.screen_loc = ui_gloves - overlays_standing[GLOVES_LAYER] = standing - else - if(blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") - bloodsies.color = hand_blood_color - overlays_standing[GLOVES_LAYER] = bloodsies - else - overlays_standing[GLOVES_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_glasses(var/update_icons=1) - if(glasses) - - if(glasses.icon_override) - overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") - else if(glasses.sprite_sheets && glasses.sprite_sheets[species.name]) - overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.name], "icon_state" = "[glasses.icon_state]") - else - overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") - - else - overlays_standing[GLASSES_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_ears(var/update_icons=1) - if(l_ear || r_ear) - if(l_ear) - - var/t_type = l_ear.icon_state - if(l_ear.icon_override) - t_type = "[t_type]_l" - overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]") - else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.name]) - t_type = "[t_type]_l" - overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") - else - overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") - - if(r_ear) - - var/t_type = r_ear.icon_state - if(r_ear.icon_override) - t_type = "[t_type]_r" - overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]") - else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.name]) - t_type = "[t_type]_r" - overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") - else - overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") - - else - overlays_standing[EARS_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_shoes(var/update_icons=1) - if(shoes) - - var/image/standing - if(shoes.icon_override) - standing = image("icon" = shoes.icon_override, "icon_state" = "[shoes.icon_state]") - else if(shoes.sprite_sheets && shoes.sprite_sheets[species.name]) - standing = image("icon" = shoes.sprite_sheets[species.name], "icon_state" = "[shoes.icon_state]") - else - standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]") - - - if(shoes.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") - bloodsies.color = shoes.blood_color - standing.overlays += bloodsies - overlays_standing[SHOES_LAYER] = standing - else - if(feet_blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") - bloodsies.color = feet_blood_color - overlays_standing[SHOES_LAYER] = bloodsies - else - overlays_standing[SHOES_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_s_store(var/update_icons=1) - if(s_store) - var/t_state = s_store.item_state - if(!t_state) - t_state = s_store.icon_state - var/dmi='icons/mob/belt_mirror.dmi' - overlays_standing[SUIT_STORE_LAYER] = image("icon" = dmi, "icon_state" = "[t_state]") - s_store.screen_loc = ui_sstore1 //TODO - else - overlays_standing[SUIT_STORE_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_head(var/update_icons=1) - if(head) - head.screen_loc = ui_head //TODO - var/image/standing - if(head.icon_override) - standing = image("icon" = head.icon_override, "icon_state" = "[head.icon_state]") - else if(head.sprite_sheets && head.sprite_sheets[species.name]) - standing = image("icon" = head.sprite_sheets[species.name], "icon_state" = "[head.icon_state]") - else - standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]") - - if(head.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood") - bloodsies.color = head.blood_color - standing.overlays += bloodsies - overlays_standing[HEAD_LAYER] = standing - - - else - overlays_standing[HEAD_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_belt(var/update_icons=1) - if(belt) - belt.screen_loc = ui_belt //TODO - var/t_state = belt.item_state - if(!t_state) t_state = belt.icon_state - - if(belt.icon_override) - t_state = "[t_state]_be" - overlays_standing[BELT_LAYER] = image("icon" = belt.icon_override, "icon_state" = "[t_state]") - else if(belt.sprite_sheets && belt.sprite_sheets[species.name]) - overlays_standing[BELT_LAYER] = image("icon" = belt.sprite_sheets[species.name], "icon_state" = "[t_state]") - else - overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]") - else - overlays_standing[BELT_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) - if( wear_suit && istype(wear_suit, /obj/item/clothing/suit) ) //TODO check this - wear_suit.screen_loc = ui_oclothing //TODO - - var/image/standing - if(wear_suit.icon_override) - standing = image("icon" = wear_suit.icon_override, "icon_state" = "[wear_suit.icon_state]") - else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name]) - standing = image("icon" = wear_suit.sprite_sheets[species.name], "icon_state" = "[wear_suit.icon_state]") - else if(FAT in mutations) - if(wear_suit.flags&ONESIZEFITSALL) - standing = image("icon" = 'icons/mob/suit_fat.dmi', "icon_state" = "[wear_suit.icon_state]") - else - src << "\red You burst out of \the [wear_suit]!" - unEquip(wear_suit) - return - else - standing = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]") - - - if( istype(wear_suit, /obj/item/clothing/suit/straight_jacket) ) - unEquip(handcuffed) - drop_l_hand() - drop_r_hand() - - - if(wear_suit.blood_DNA) - var/obj/item/clothing/suit/S = wear_suit - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood") - bloodsies.color = wear_suit.blood_color - standing.overlays += bloodsies - - - overlays_standing[SUIT_LAYER] = standing - - update_tail_layer(0) - - else - overlays_standing[SUIT_LAYER] = null - - update_tail_layer(0) - - update_collar(0) - - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_pockets(var/update_icons=1) - if(l_store) l_store.screen_loc = ui_storage1 //TODO - if(r_store) r_store.screen_loc = ui_storage2 //TODO - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_wear_pda(var/update_icons=1) - if(wear_pda) wear_pda.screen_loc = ui_pda - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1) - if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/accessory) ) ) - wear_mask.screen_loc = ui_mask //TODO - - var/image/standing - if(wear_mask.icon_override) - standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state]") - else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.name]) - standing = image("icon" = wear_mask.sprite_sheets[species.name], "icon_state" = "[wear_mask.icon_state]") - else - standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]") - - if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "maskblood") - bloodsies.color = wear_mask.blood_color - standing.overlays += bloodsies - overlays_standing[FACEMASK_LAYER] = standing - else - overlays_standing[FACEMASK_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_back(var/update_icons=1) - if(back) - back.screen_loc = ui_back //TODO - - //determine the icon to use - var/icon/overlay_icon - if(back.icon_override) - overlay_icon = back.icon_override - else if(istype(back, /obj/item/weapon/rig)) - //If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc. - var/obj/item/weapon/rig/rig = back - overlay_icon = rig.mob_icon - else if(back.sprite_sheets && back.sprite_sheets[species.name]) - overlay_icon = back.sprite_sheets[species.name] - else - overlay_icon = icon('icons/mob/back.dmi', "[back.icon_state]") - - //determine state to use - var/overlay_state - if(back.item_state) - overlay_state = back.item_state - else - overlay_state = back.icon_state - - //create the image - overlays_standing[BACK_LAYER] = image(icon = overlay_icon, icon_state = overlay_state) - else - overlays_standing[BACK_LAYER] = null - - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_hud() //TODO: do away with this if possible - if(client) - client.screen |= contents - if(hud_used) - hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar - - -/mob/living/carbon/human/update_inv_handcuffed(var/update_icons=1) - if(handcuffed) - drop_r_hand() - drop_l_hand() - stop_pulling() //TODO: should be handled elsewhere - if(hud_used) //hud handcuff icons - var/obj/screen/inventory/R = hud_used.adding[7] - var/obj/screen/inventory/L = hud_used.adding[8] - R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") - L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") - if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/pinkcuffs)) - overlays_standing[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "pinkcuff1") - else - overlays_standing[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "handcuff1") - else - overlays_standing[HANDCUFF_LAYER] = null - if(hud_used) - var/obj/screen/inventory/R = hud_used.adding[7] - var/obj/screen/inventory/L = hud_used.adding[8] - R.overlays = null - L.overlays = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_legcuffed(var/update_icons=1) - if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff1") - if(src.m_intent != "walk") - src.m_intent = "walk" - if(src.hud_used && src.hud_used.move_intent) - src.hud_used.move_intent.icon_state = "walking" - - else - overlays_standing[LEGCUFF_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_r_hand(var/update_icons=1) - if(r_hand) - r_hand.screen_loc = ui_rhand //TODO - var/t_state = r_hand.item_state - if(!t_state) t_state = r_hand.icon_state - - var/image/I = image("icon" = r_hand.righthand_file, "icon_state"="[t_state]") - I = center_image(I, r_hand.inhand_x_dimension, r_hand.inhand_y_dimension) - overlays_standing[R_HAND_LAYER] = I - - if (handcuffed) drop_r_hand() - else - overlays_standing[R_HAND_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_l_hand(var/update_icons=1) - if(l_hand) - l_hand.screen_loc = ui_lhand //TODO - var/t_state = l_hand.item_state - if(!t_state) t_state = l_hand.icon_state - - var/image/I = image("icon" = l_hand.lefthand_file, "icon_state"="[t_state]") - I = center_image(I, l_hand.inhand_x_dimension, l_hand.inhand_y_dimension) - overlays_standing[L_HAND_LAYER] = I - - if (handcuffed) drop_l_hand() - else - overlays_standing[L_HAND_LAYER] = null - if(update_icons) update_icons() - - - -/mob/living/carbon/human/proc/update_tail_layer(var/update_icons=1) - overlays_standing[TAIL_LAYER] = null - - if(body_accessory) - if(body_accessory.try_restrictions(src)) - var/icon/accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state) - accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode) - - overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) - - - else if(species.tail && species.bodyflags & HAS_TAIL) //no tailless tajaran - if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) - var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s") - tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) - - overlays_standing[TAIL_LAYER] = image(tail_s) - - if(update_icons) - update_icons() - - -/mob/living/carbon/human/proc/start_tail_wagging(var/update_icons=1) - overlays_standing[TAIL_LAYER] = null - - if(body_accessory) - var/icon/accessory_s = new/icon("icon" = body_accessory.get_animated_icon(), "icon_state" = body_accessory.get_animated_icon_state()) - accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode) - - overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) - - else if(species.tail && species.bodyflags & HAS_TAIL) - var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]w_s") - tailw_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) - - overlays_standing[TAIL_LAYER] = image(tailw_s) - - if(update_icons) - update_icons() - -/mob/living/carbon/human/proc/stop_tail_wagging(var/update_icons=1) - overlays_standing[TAIL_LAYER] = null - - update_tail_layer(update_icons) //just trigger a full update for normal stationary sprites - -/mob/living/carbon/human/handle_transform_change() - ..() - update_tail_layer() - -//Adds a collar overlay above the helmet layer if the suit has one -// Suit needs an identically named sprite in icons/mob/collar.dmi -/mob/living/carbon/human/proc/update_collar(var/update_icons=1) - var/icon/C = new('icons/mob/collar.dmi') - var/image/standing = null - - if(wear_suit) - if(wear_suit.icon_state in C.IconStates()) - standing = image("icon" = C, "icon_state" = "[wear_suit.icon_state]") - - overlays_standing[COLLAR_LAYER] = standing - - if(update_icons) update_icons() - - -// Used mostly for creating head items -/mob/living/carbon/human/proc/generate_head_icon() -//gender no longer matters for the mouth, although there should probably be seperate base head icons. -// var/g = "m" -// if (gender == FEMALE) g = "f" - - //base icons - var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l") - - if(f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style) - var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l") - facial_l.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) - face_lying.Blend(facial_l, ICON_OVERLAY) - - if(h_style) - var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] - if(hair_style) - var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l") - hair_l.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - face_lying.Blend(hair_l, ICON_OVERLAY) - - //Eyes - // Note: These used to be in update_face(), and the fact they're here will make it difficult to create a disembodied head - var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l") - eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - face_lying.Blend(eyes_l, ICON_OVERLAY) - - if(lip_style) - face_lying.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_l"), ICON_OVERLAY) - - var/image/face_lying_image = new /image(icon = face_lying) - return face_lying_image - -/mob/living/carbon/human/proc/force_update_limbs() - for(var/obj/item/organ/external/O in organs) - O.sync_colour_to_human(src) - update_body(0) - -//Human Overlays Indexes///////// -#undef MUTANTRACE_LAYER -#undef MUTATIONS_LAYER -#undef DAMAGE_LAYER -#undef UNIFORM_LAYER -#undef TAIL_LAYER -#undef ID_LAYER -#undef SHOES_LAYER -#undef GLOVES_LAYER -#undef EARS_LAYER -#undef SUIT_LAYER -#undef GLASSES_LAYER -#undef FACEMASK_LAYER -#undef BELT_LAYER -#undef SUIT_STORE_LAYER -#undef BACK_LAYER -#undef HAIR_LAYER -#undef HEAD_LAYER -#undef COLLAR_LAYER -#undef HANDCUFF_LAYER -#undef LEGCUFF_LAYER -#undef L_HAND_LAYER -#undef R_HAND_LAYER -#undef TARGETED_LAYER -#undef FIRE_LAYER -#undef TOTAL_LAYERS +//LOOK G-MA, I'VE JOINED CARBON PROCS THAT ARE IDENTICAL IN ALL CASES INTO ONE PROC, I'M BETTER THAN LIFE() +//I thought about mob/living but silicons and simple_animals don't want this just yet. +//Right now just handles lying down, but could handle other cases later. +//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. +/mob/living/carbon/update_transform() + var/matrix/ntransform = matrix(transform) //aka transform.Copy() + var/final_pixel_y = pixel_y + var/final_dir = dir + var/changed = 0 + if(lying != lying_prev) + changed++ + ntransform.TurnTo(lying_prev,lying) + if(lying == 0) //Lying to standing + final_pixel_y = get_standard_pixel_y_offset() + else //if(lying != 0) + if(lying_prev == 0) //Standing to lying + pixel_y = get_standard_pixel_y_offset() + final_pixel_y = get_standard_pixel_y_offset(lying) + if(dir & (EAST|WEST)) //Facing east or west + final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass + + lying_prev = lying //so we don't try to animate until there's been another change. + + if(resize != RESIZE_DEFAULT_SIZE) + changed++ + ntransform.Scale(resize) + resize = RESIZE_DEFAULT_SIZE + + if(changed) + animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) + handle_transform_change() + floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). + +/mob/living/carbon/proc/handle_transform_change() + return \ No newline at end of file diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 1fa0f5c3a222aaeb0fe4488105a2cd164a8597e1..ffecceda82e351b6fc7e920597c14640c1e9d9b3 100644 GIT binary patch delta 15315 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 delta 14967 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 From 124fc7c32988337149b853eaea494d5799511692 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 15 Jan 2016 07:28:15 -0500 Subject: [PATCH 018/442] urgh i update the wrong file...hush --- .../mob/living/carbon/human/update_icons.dm | 1170 ++++++++++++++++- 1 file changed, 1139 insertions(+), 31 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e22ad5e66dc..2e228f3d571 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,35 +1,1143 @@ -//LOOK G-MA, I'VE JOINED CARBON PROCS THAT ARE IDENTICAL IN ALL CASES INTO ONE PROC, I'M BETTER THAN LIFE() -//I thought about mob/living but silicons and simple_animals don't want this just yet. -//Right now just handles lying down, but could handle other cases later. -//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. -/mob/living/carbon/update_transform() - var/matrix/ntransform = matrix(transform) //aka transform.Copy() - var/final_pixel_y = pixel_y - var/final_dir = dir - var/changed = 0 - if(lying != lying_prev) - changed++ - ntransform.TurnTo(lying_prev,lying) - if(lying == 0) //Lying to standing - final_pixel_y = get_standard_pixel_y_offset() - else //if(lying != 0) - if(lying_prev == 0) //Standing to lying - pixel_y = get_standard_pixel_y_offset() - final_pixel_y = get_standard_pixel_y_offset(lying) - if(dir & (EAST|WEST)) //Facing east or west - final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass +/* + Global associative list for caching humanoid icons. + Index format m or f, followed by a string of 0 and 1 to represent bodyparts followed by husk fat hulk skeleton 1 or 0. + TODO: Proper documentation + icon_key is [species.race_key][g][husk][fat][hulk][skeleton][s_tone] +*/ +var/global/list/human_icon_cache = list() - lying_prev = lying //so we don't try to animate until there's been another change. + /////////////////////// + //UPDATE_ICONS SYSTEM// + /////////////////////// +/* +Calling this a system is perhaps a bit trumped up. It is essentially update_clothing dismantled into its +core parts. The key difference is that when we generate overlays we do not generate either lying or standing +versions. Instead, we generate both and store them in two fixed-length lists, both using the same list-index +(The indexes are in update_icons.dm): Each list for humans is (at the time of writing) of length 19. +This will hopefully be reduced as the system is refined. - if(resize != RESIZE_DEFAULT_SIZE) - changed++ - ntransform.Scale(resize) - resize = RESIZE_DEFAULT_SIZE + var/overlays_lying[19] //For the lying down stance + var/overlays_standing[19] //For the standing stance - if(changed) - animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) - handle_transform_change() - floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). +When we call update_icons, the 'lying' variable is checked and then the appropriate list is assigned to our overlays! +That in itself uses a tiny bit more memory (no more than all the ridiculous lists the game has already mind you). -/mob/living/carbon/proc/handle_transform_change() - return \ No newline at end of file +On the other-hand, it should be very CPU cheap in comparison to the old system. +In the old system, we updated all our overlays every life() call, even if we were standing still inside a crate! +or dead!. 25ish overlays, all generated from scratch every second for every xeno/human/monkey and then applied. +More often than not update_clothing was being called a few times in addition to that! CPU was not the only issue, +all those icons had to be sent to every client. So really the cost was extremely cumulative. To the point where +update_clothing would frequently appear in the top 10 most CPU intensive procs during profiling. + +Another feature of this new system is that our lists are indexed. This means we can update specific overlays! +So we only regenerate icons when we need them to be updated! This is the main saving for this system. + +In practice this means that: + everytime you fall over, we just switch between precompiled lists. Which is fast and cheap. + Everytime you do something minor like take a pen out of your pocket, we only update the in-hand overlay + etc... + + +There are several things that need to be remembered: + +> Whenever we do something that should cause an overlay to update (which doesn't use standard procs + ( i.e. you do something like l_hand = /obj/item/something new(src) ) + You will need to call the relevant update_inv_* proc: + update_inv_head() + update_inv_wear_suit() + update_inv_gloves() + update_inv_shoes() + update_inv_w_uniform() + update_inv_glasse() + update_inv_l_hand() + update_inv_r_hand() + update_inv_belt() + update_inv_wear_id() + update_inv_ears() + update_inv_s_store() + update_inv_pockets() + update_inv_back() + update_inv_handcuffed() + update_inv_wear_mask() + + All of these are named after the variable they update from. They are defined at the mob/ level like + update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a + slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such. + + +> There are also these special cases: + update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows + update_mutantrace() //handles updating your appearance after setting the mutantrace var + UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) + update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc + update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and + ...eyes were merged into update_body) + update_targeted() // Updates the target overlay when someone points a gun at you + +> All of these procs update our overlays_lying and overlays_standing, and then call update_icons() by default. + If you wish to update several overlays at once, you can set the argument to 0 to disable the update and call + it manually: + e.g. + update_inv_head(0) + update_inv_l_hand(0) + update_inv_r_hand() //<---calls update_icons() + + or equivillantly: + update_inv_head(0) + update_inv_l_hand(0) + update_inv_r_hand(0) + update_icons() + +> If you need to update all overlays you can use regenerate_icons(). it works exactly like update_clothing used to. + +> I reimplimented an old unused variable which was in the code called (coincidentally) var/update_icon + It can be used as another method of triggering regenerate_icons(). It's basically a flag that when set to non-zero + will call regenerate_icons() at the next life() call and then reset itself to 0. + The idea behind it is icons are regenerated only once, even if multiple events requested it. + +This system is confusing and is still a WIP. It's primary goal is speeding up the controls of the game whilst +reducing processing costs. So please bear with me while I iron out the kinks. It will be worth it, I promise. +If I can eventually free var/lying stuff from the life() process altogether, stuns/death/status stuff +will become less affected by lag-spikes and will be instantaneous! :3 + +If you have any questions/constructive-comments/bugs-to-report/or have a massivly devestated butt... +Please contact me on #coderbus IRC. ~Carn x +*/ + +//Human Overlays Indexes///////// +#define MUTANTRACE_LAYER 1 +#define MARKINGS_LAYER 2 +#define MUTATIONS_LAYER 3 +#define DAMAGE_LAYER 4 +#define UNIFORM_LAYER 5 +#define ID_LAYER 6 +#define SHOES_LAYER 7 +#define GLOVES_LAYER 8 +#define EARS_LAYER 9 +#define SUIT_LAYER 10 +#define GLASSES_LAYER 11 +#define BELT_LAYER 12 //Possible make this an overlay of somethign required to wear a belt? +#define TAIL_LAYER 13 //bs12 specific. this hack is probably gonna come back to haunt me +#define SUIT_STORE_LAYER 14 +#define BACK_LAYER 15 +#define HAIR_LAYER 16 //TODO: make part of head layer? +#define HEAD_ACCESSORY_LAYER 17 +#define FHAIR_LAYER 18 +#define FACEMASK_LAYER 19 +#define HEAD_LAYER 20 +#define COLLAR_LAYER 21 +#define HANDCUFF_LAYER 22 +#define LEGCUFF_LAYER 23 +#define L_HAND_LAYER 24 +#define R_HAND_LAYER 25 +#define TARGETED_LAYER 26 //BS12: Layer for the target overlay from weapon targeting system +#define FIRE_LAYER 27 //If you're on fire +#define TOTAL_LAYERS 27 + + + +/mob/living/carbon/human + var/list/overlays_standing[TOTAL_LAYERS] + var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed + var/icon/skeleton + + +/mob/living/carbon/human/proc/apply_overlay(cache_index) + var/image/I = overlays_standing[cache_index] + if(I) + overlays += I + +/mob/living/carbon/human/proc/remove_overlay(cache_index) + if(overlays_standing[cache_index]) + overlays -= overlays_standing[cache_index] + overlays_standing[cache_index] = null + +//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING +//this proc is messy as I was forced to include some old laggy cloaking code to it so that I don't break cloakers +//I'll work on removing that stuff by rewriting some of the cloaking stuff at a later date. +/mob/living/carbon/human/update_icons() + + update_hud() //TODO: remove the need for this + + var/stealth = 0 + for(var/obj/item/weapon/cloaking_device/S in list(l_hand,r_hand,belt,l_store,r_store)) + if(S.active) + stealth = 1 + break + + if(stealth) + icon = 'icons/mob/human.dmi' + icon_state = "body_cloaked" + var/image/I = overlays_standing[L_HAND_LAYER] + if(istype(I)) overlays += I + I = overlays_standing[R_HAND_LAYER] + if(istype(I)) overlays += I + else + icon = stand_icon + if(overlays.len != overlays_standing.len) + overlays.Cut() + + for(var/thing in overlays_standing) + if(thing) overlays += thing + + update_transform() + +var/global/list/damage_icon_parts = list() + +//DAMAGE OVERLAYS +//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists +/mob/living/carbon/human/UpdateDamageIcon(var/update_icons=1) + // first check whether something actually changed about damage appearance + var/damage_appearance = "" + + for(var/obj/item/organ/external/O in organs) + if(O.is_stump()) + continue + if(O.status & ORGAN_DESTROYED) damage_appearance += "d" + else + damage_appearance += O.damage_state + + if(damage_appearance == previous_damage_appearance) + // nothing to do here + return + + previous_damage_appearance = damage_appearance + + var/icon/standing = new /icon(species.damage_overlays, "00") + + var/image/standing_image = new /image("icon" = standing) + + // blend the individual damage states with our icons + for(var/obj/item/organ/external/O in organs) + if(O.is_stump()) + continue + if(!(O.status & ORGAN_DESTROYED)) + O.update_icon() + if(O.damage_state == "00") continue + var/icon/DI + var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]" + + if(damage_icon_parts[cache_index] == null) + DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human + DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels + DI.Blend(species.blood_color, ICON_MULTIPLY) + damage_icon_parts[cache_index] = DI + else + DI = damage_icon_parts[cache_index] + standing_image.overlays += DI + + overlays_standing[DAMAGE_LAYER] = standing_image + + if(update_icons) update_icons() + +//BASE MOB SPRITE +/mob/living/carbon/human/proc/update_body(var/update_icons=1) + + var/husk_color_mod = rgb(96,88,80) + var/hulk_color_mod = rgb(48,224,40) + + var/husk = (HUSK in src.mutations) + var/fat = (FAT in src.mutations) + var/hulk = (HULK in src.mutations) + var/skeleton = (SKELETON in src.mutations) + + //CACHING: Generate an index key from visible bodyparts. + //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. + //Create a new, blank icon for our mob to use. + if(stand_icon) + qdel(stand_icon) + stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") + var/icon_key = "" + var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] + + if(eyes) + icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" + else + icon_key += "#000000" + + for(var/organ_tag in species.has_limbs) + var/obj/item/organ/external/part = organs_by_name[organ_tag] + if(isnull(part) || part.is_stump() || (part.status & ORGAN_DESTROYED)) + icon_key += "0" + else if(part.status & ORGAN_ROBOT) + icon_key += "2[part.model ? "-[part.model]": ""]" + else if(part.status & ORGAN_DEAD) + icon_key += "3" + else + icon_key += "1" + + if(part) + icon_key += "[part.species.race_key]" + icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" + icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]" + if(part.s_col) + icon_key += "[rgb(part.s_col[1], part.s_col[2], part.s_col[3])]" + + icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" + + var/icon/base_icon + if(human_icon_cache[icon_key]) + base_icon = human_icon_cache[icon_key] + else + //BEGIN CACHED ICON GENERATION. + var/obj/item/organ/external/chest = get_organ("chest") + base_icon = chest.get_icon() + + for(var/obj/item/organ/external/part in organs) + var/icon/temp = part.get_icon(skeleton) + //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST + //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) + if(part.icon_position&(LEFT|RIGHT)) + var/icon/temp2 = new('icons/mob/human.dmi',"blank") + temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH) + temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH) + if(!(part.icon_position & LEFT)) + temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) + if(!(part.icon_position & RIGHT)) + temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) + base_icon.Blend(temp2, ICON_OVERLAY) + if(part.icon_position & LEFT) + temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) + if(part.icon_position & RIGHT) + temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) + base_icon.Blend(temp2, ICON_UNDERLAY) + else + base_icon.Blend(temp, ICON_OVERLAY) + + if(!skeleton) + if(husk) + base_icon.ColorTone(husk_color_mod) + else if(hulk) + var/list/tone = ReadRGB(hulk_color_mod) + base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) + + //Handle husk overlay. + if(husk && ("overlay_husk" in icon_states(species.icobase))) + var/icon/mask = new(base_icon) + var/icon/husk_over = new(species.icobase,"overlay_husk") + mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) + husk_over.Blend(mask, ICON_ADD) + base_icon.Blend(husk_over, ICON_OVERLAY) + + human_icon_cache[icon_key] = base_icon + + //END CACHED ICON GENERATION. + stand_icon.Blend(base_icon,ICON_OVERLAY) + + //Underwear + if(underwear && species.clothing_flags & HAS_UNDERWEAR) + var/datum/sprite_accessory/underwear/U = underwear_list[underwear] + if(U) + stand_icon.Blend(new /icon(U.icon, "uw_[U.icon_state]_s"), ICON_OVERLAY) + + if(undershirt && species.clothing_flags & HAS_UNDERSHIRT) + var/datum/sprite_accessory/undershirt/U2 = undershirt_list[undershirt] + if(U2) + stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY) + + + if(socks && species.clothing_flags & HAS_SOCKS) + var/datum/sprite_accessory/socks/U3 = socks_list[socks] + if(U3) + stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY) + + + if(update_icons) + update_icons() + + if(lip_style && species && species.flags & HAS_LIPS) + var/icon/lips = icon("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s") + lips.Blend(lip_color, ICON_ADD) + + stand_icon.Blend(lips, ICON_OVERLAY) + + //tail + update_tail_layer(0) + //head accessory + update_head_accessory(0) + //markings + update_markings(0) + //hair + update_hair(0) + update_fhair(0) + + +//MARKINGS OVERLAY +/mob/living/carbon/human/proc/update_markings(var/update_icons=1) + //Reset our markings + overlays_standing[MARKINGS_LAYER] = null + + var/obj/item/organ/external/chest/chest_organ = get_organ("chest") + if(!chest_organ || chest_organ.is_stump() || (chest_organ.status & ORGAN_DESTROYED) ) + if(update_icons) update_icons() + return + + //base icons + var/icon/markings_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s") + + if(m_style && (src.species.bodyflags & HAS_MARKINGS)) + var/datum/sprite_accessory/marking_style = marking_styles_list[m_style] + if(marking_style && marking_style.species_allowed) + if(src.species.name in marking_style.species_allowed) + var/icon/markings_s = new/icon("icon" = marking_style.icon, "icon_state" = "[marking_style.icon_state]_s") + if(marking_style.do_colouration) + markings_s.Blend(rgb(r_markings, g_markings, b_markings), ICON_ADD) + markings_standing.Blend(markings_s, ICON_OVERLAY) + else + //warning("Invalid m_style for [species.name]: [m_style]") + + overlays_standing[MARKINGS_LAYER] = image(markings_standing) + + if(update_icons) update_icons() + +//HEAD ACCESSORY OVERLAY +/mob/living/carbon/human/proc/update_head_accessory(var/update_icons=1) + //Reset our head accessory + overlays_standing[HEAD_ACCESSORY_LAYER] = null + + var/obj/item/organ/external/head/head_organ = get_organ("head") + if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) + if(update_icons) update_icons() + return + + //masks and helmets can obscure our head accessory + if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) + if(update_icons) update_icons() + return + + //base icons + var/icon/head_accessory_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s") + + if(ha_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()) && (src.species.bodyflags & HAS_HEAD_ACCESSORY))) + var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[ha_style] + if(head_accessory_style && head_accessory_style.species_allowed) + if(src.species.name in head_accessory_style.species_allowed) + var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") + if(head_accessory_style.do_colouration) + head_accessory_s.Blend(rgb(r_headacc, g_headacc, b_headacc), ICON_ADD) + head_accessory_standing.Blend(head_accessory_s, ICON_OVERLAY) + else + //warning("Invalid ha_style for [species.name]: [ha_style]") + + overlays_standing[HEAD_ACCESSORY_LAYER] = image(head_accessory_standing) + + if(update_icons) update_icons() + + +//HAIR OVERLAY +/mob/living/carbon/human/proc/update_hair(var/update_icons=1) + //Reset our hair + overlays_standing[HAIR_LAYER] = null + + var/obj/item/organ/external/head/head_organ = get_organ("head") + if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) + if(update_icons) update_icons() + return + + //masks and helmets can obscure our hair, unless we're a synthetic + if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) + if(update_icons) update_icons() + return + + //base icons + var/icon/hair_standing = new /icon('icons/mob/human_face.dmi',"bald_s") + + if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()))) + var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] + if(hair_style && hair_style.species_allowed) + if(src.species.name in hair_style.species_allowed) + var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") + if(hair_style.do_colouration) + hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) + + hair_standing.Blend(hair_s, ICON_OVERLAY) + else + //warning("Invalid h_style for [species.name]: [h_style]") + + overlays_standing[HAIR_LAYER] = image(hair_standing) + + if(update_icons) update_icons() + + +//FACIAL HAIR OVERLAY +/mob/living/carbon/human/proc/update_fhair(var/update_icons=1) + //Reset our facial hair + overlays_standing[FHAIR_LAYER] = null + + var/obj/item/organ/external/head/head_organ = get_organ("head") + if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) + if(update_icons) update_icons() + return + + //masks and helmets can obscure our facial hair, unless we're a synthetic + if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) + if(update_icons) update_icons() + return + + //base icons + var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") + + if(f_style) + var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] + if(facial_hair_style && facial_hair_style.species_allowed) + if(src.species.name in facial_hair_style.species_allowed) + var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") + if(facial_hair_style.do_colouration) + facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) + face_standing.Blend(facial_s, ICON_OVERLAY) + else + //warning("Invalid f_style for [species.name]: [f_style]") + + overlays_standing[FHAIR_LAYER] = image(face_standing) + + if(update_icons) update_icons() + +/mob/living/carbon/human/update_mutations(var/update_icons=1) + var/fat + if(FAT in mutations) + fat = "fat" + + var/image/standing = image("icon" = 'icons/effects/genetics.dmi') + var/add_image = 0 + var/g = "m" + if(gender == FEMALE) g = "f" + // DNA2 - Drawing underlays. + for(var/datum/dna/gene/gene in dna_genes) + if(!gene.block) + continue + if(gene.is_active(src)) + var/underlay=gene.OnDrawUnderlays(src,g,fat) + if(underlay) + standing.underlays += underlay + add_image = 1 + for(var/mut in mutations) + switch(mut) + /* + if(HULK) + if(fat) + standing.underlays += "hulk_[fat]_s" + else + standing.underlays += "hulk_[g]_s" + add_image = 1 + if(RESIST_COLD) + standing.underlays += "fire[fat]_s" + add_image = 1 + if(RESIST_HEAT) + standing.underlays += "cold[fat]_s" + add_image = 1 + if(TK) + standing.underlays += "telekinesishead[fat]_s" + add_image = 1 + */ + if(LASER) + standing.overlays += "lasereyes_s" + add_image = 1 + if((RESIST_COLD in mutations) && (RESIST_HEAT in mutations)) + standing.underlays -= "cold[fat]_s" + standing.underlays -= "fire[fat]_s" + standing.underlays += "coldfire[fat]_s" + if(add_image) + overlays_standing[MUTATIONS_LAYER] = standing + else + overlays_standing[MUTATIONS_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/proc/update_mutantrace(var/update_icons=1) +//BS12 EDIT + var/skel = (SKELETON in src.mutations) + if(skel) + skeleton = 'icons/mob/human_races/r_skeleton.dmi' + else + skeleton = null + + update_hair(0) + update_fhair(0) + if(update_icons) update_icons() + +//Call when target overlay should be added/removed +/mob/living/carbon/human/update_targeted(var/update_icons=1) + if (targeted_by && target_locked) + overlays_standing[TARGETED_LAYER] = target_locked + else if (!targeted_by && target_locked) + qdel(target_locked) + if (!targeted_by) + overlays_standing[TARGETED_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_fire() + remove_overlay(FIRE_LAYER) + if(on_fire) + overlays_standing[FIRE_LAYER] = image("icon"=fire_dmi, "icon_state"=fire_sprite, "layer"=-FIRE_LAYER) + else + overlays_standing[FIRE_LAYER] = null + apply_overlay(FIRE_LAYER) + +/* --------------------------------------- */ +//For legacy support. +/mob/living/carbon/human/regenerate_icons() + ..() + if(notransform) return + update_mutations(0) + update_body(0) + update_hair(0) + update_head_accessory(0) + update_fhair(0) + update_mutantrace(0) + update_inv_w_uniform(0,0) + update_inv_wear_id(0) + update_inv_gloves(0,0) + update_inv_glasses(0) + update_inv_ears(0) + update_inv_shoes(0,0) + update_inv_s_store(0) + update_inv_wear_mask(0) + update_inv_head(0,0) + update_inv_belt(0) + update_inv_back(0) + update_inv_wear_suit(0) + update_inv_r_hand(0) + update_inv_l_hand(0) + update_inv_handcuffed(0) + update_inv_legcuffed(0) + update_inv_pockets(0) + update_inv_wear_pda(0) + UpdateDamageIcon() + update_icons() + //Hud Stuff + update_hud() + update_fire() +/* --------------------------------------- */ +//vvvvvv UPDATE_INV PROCS vvvvvv + +/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1) + if(w_uniform && istype(w_uniform, /obj/item/clothing/under) ) + w_uniform.screen_loc = ui_iclothing + var/t_color = w_uniform.item_color + if(!t_color) t_color = icon_state + var/image/standing = image("icon_state" = "[t_color]_s") + + if(FAT in mutations) + if(w_uniform.flags&ONESIZEFITSALL) + standing.icon = 'icons/mob/uniform_fat.dmi' + else + src << "\red You burst out of \the [w_uniform]!" + unEquip(w_uniform) + return + else + standing.icon = 'icons/mob/uniform.dmi' + + if(w_uniform.icon_override) + standing.icon = w_uniform.icon_override + else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.name]) + standing.icon = w_uniform.sprite_sheets[species.name] + + if(w_uniform.blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "uniformblood") + bloodsies.color = w_uniform.blood_color + standing.overlays += bloodsies + + if(w_uniform:accessories.len) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. + for(var/obj/item/clothing/accessory/A in w_uniform:accessories) + var/tie_color = A.item_color + if(!tie_color) tie_color = A.icon_state + standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]") + + overlays_standing[UNIFORM_LAYER] = standing + else + overlays_standing[UNIFORM_LAYER] = null + // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY + for( var/obj/item/thing in list(r_store, l_store, wear_id, wear_pda, belt) ) // + if(thing) // + unEquip(thing) // + if (client) // + client.screen -= thing // + // + if (thing) // + thing.loc = loc // + thing.dropped(src) // + thing.layer = initial(thing.layer) + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1) + if(wear_id) + wear_id.screen_loc = ui_id //TODO + if(w_uniform && w_uniform:displays_id) + overlays_standing[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id") + else + overlays_standing[ID_LAYER] = null + else + overlays_standing[ID_LAYER] = null + + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_gloves(var/update_icons=1) + if(gloves) + var/t_state = gloves.item_state + if(!t_state) t_state = gloves.icon_state + + var/image/standing + if(gloves.icon_override) + standing = image("icon" = gloves.icon_override, "icon_state" = "[t_state]") + else if(gloves.sprite_sheets && gloves.sprite_sheets[species.name]) + standing = image("icon" = gloves.sprite_sheets[species.name], "icon_state" = "[t_state]") + else + standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]") + + if(gloves.blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") + bloodsies.color = gloves.blood_color + standing.overlays += bloodsies + gloves.screen_loc = ui_gloves + overlays_standing[GLOVES_LAYER] = standing + else + if(blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") + bloodsies.color = hand_blood_color + overlays_standing[GLOVES_LAYER] = bloodsies + else + overlays_standing[GLOVES_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_glasses(var/update_icons=1) + if(glasses) + + if(glasses.icon_override) + overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") + else if(glasses.sprite_sheets && glasses.sprite_sheets[species.name]) + overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.name], "icon_state" = "[glasses.icon_state]") + else + overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") + + else + overlays_standing[GLASSES_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_ears(var/update_icons=1) + if(l_ear || r_ear) + if(l_ear) + + var/t_type = l_ear.icon_state + if(l_ear.icon_override) + t_type = "[t_type]_l" + overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]") + else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.name]) + t_type = "[t_type]_l" + overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") + else + overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") + + if(r_ear) + + var/t_type = r_ear.icon_state + if(r_ear.icon_override) + t_type = "[t_type]_r" + overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]") + else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.name]) + t_type = "[t_type]_r" + overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") + else + overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") + + else + overlays_standing[EARS_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_shoes(var/update_icons=1) + if(shoes) + + var/image/standing + if(shoes.icon_override) + standing = image("icon" = shoes.icon_override, "icon_state" = "[shoes.icon_state]") + else if(shoes.sprite_sheets && shoes.sprite_sheets[species.name]) + standing = image("icon" = shoes.sprite_sheets[species.name], "icon_state" = "[shoes.icon_state]") + else + standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]") + + + if(shoes.blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") + bloodsies.color = shoes.blood_color + standing.overlays += bloodsies + overlays_standing[SHOES_LAYER] = standing + else + if(feet_blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") + bloodsies.color = feet_blood_color + overlays_standing[SHOES_LAYER] = bloodsies + else + overlays_standing[SHOES_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_s_store(var/update_icons=1) + if(s_store) + var/t_state = s_store.item_state + if(!t_state) + t_state = s_store.icon_state + var/dmi='icons/mob/belt_mirror.dmi' + overlays_standing[SUIT_STORE_LAYER] = image("icon" = dmi, "icon_state" = "[t_state]") + s_store.screen_loc = ui_sstore1 //TODO + else + overlays_standing[SUIT_STORE_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_head(var/update_icons=1) + if(head) + head.screen_loc = ui_head //TODO + var/image/standing + if(head.icon_override) + standing = image("icon" = head.icon_override, "icon_state" = "[head.icon_state]") + else if(head.sprite_sheets && head.sprite_sheets[species.name]) + standing = image("icon" = head.sprite_sheets[species.name], "icon_state" = "[head.icon_state]") + else + standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]") + + if(head.blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood") + bloodsies.color = head.blood_color + standing.overlays += bloodsies + overlays_standing[HEAD_LAYER] = standing + + + else + overlays_standing[HEAD_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_belt(var/update_icons=1) + if(belt) + belt.screen_loc = ui_belt //TODO + var/t_state = belt.item_state + if(!t_state) t_state = belt.icon_state + + if(belt.icon_override) + t_state = "[t_state]_be" + overlays_standing[BELT_LAYER] = image("icon" = belt.icon_override, "icon_state" = "[t_state]") + else if(belt.sprite_sheets && belt.sprite_sheets[species.name]) + overlays_standing[BELT_LAYER] = image("icon" = belt.sprite_sheets[species.name], "icon_state" = "[t_state]") + else + overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]") + else + overlays_standing[BELT_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) + if( wear_suit && istype(wear_suit, /obj/item/clothing/suit) ) //TODO check this + wear_suit.screen_loc = ui_oclothing //TODO + + var/image/standing + if(wear_suit.icon_override) + standing = image("icon" = wear_suit.icon_override, "icon_state" = "[wear_suit.icon_state]") + else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name]) + standing = image("icon" = wear_suit.sprite_sheets[species.name], "icon_state" = "[wear_suit.icon_state]") + else if(FAT in mutations) + if(wear_suit.flags&ONESIZEFITSALL) + standing = image("icon" = 'icons/mob/suit_fat.dmi', "icon_state" = "[wear_suit.icon_state]") + else + src << "\red You burst out of \the [wear_suit]!" + unEquip(wear_suit) + return + else + standing = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]") + + + if( istype(wear_suit, /obj/item/clothing/suit/straight_jacket) ) + unEquip(handcuffed) + drop_l_hand() + drop_r_hand() + + + if(wear_suit.blood_DNA) + var/obj/item/clothing/suit/S = wear_suit + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood") + bloodsies.color = wear_suit.blood_color + standing.overlays += bloodsies + + + overlays_standing[SUIT_LAYER] = standing + + update_tail_layer(0) + + else + overlays_standing[SUIT_LAYER] = null + + update_tail_layer(0) + + update_collar(0) + + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_pockets(var/update_icons=1) + if(l_store) l_store.screen_loc = ui_storage1 //TODO + if(r_store) r_store.screen_loc = ui_storage2 //TODO + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_wear_pda(var/update_icons=1) + if(wear_pda) wear_pda.screen_loc = ui_pda + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1) + if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/accessory) ) ) + wear_mask.screen_loc = ui_mask //TODO + + var/image/standing + if(wear_mask.icon_override) + standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state]") + else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.name]) + standing = image("icon" = wear_mask.sprite_sheets[species.name], "icon_state" = "[wear_mask.icon_state]") + else + standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]") + + if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "maskblood") + bloodsies.color = wear_mask.blood_color + standing.overlays += bloodsies + overlays_standing[FACEMASK_LAYER] = standing + else + overlays_standing[FACEMASK_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_back(var/update_icons=1) + if(back) + back.screen_loc = ui_back //TODO + + //determine the icon to use + var/icon/overlay_icon + if(back.icon_override) + overlay_icon = back.icon_override + else if(istype(back, /obj/item/weapon/rig)) + //If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc. + var/obj/item/weapon/rig/rig = back + overlay_icon = rig.mob_icon + else if(back.sprite_sheets && back.sprite_sheets[species.name]) + overlay_icon = back.sprite_sheets[species.name] + else + overlay_icon = icon('icons/mob/back.dmi', "[back.icon_state]") + + //determine state to use + var/overlay_state + if(back.item_state) + overlay_state = back.item_state + else + overlay_state = back.icon_state + + //create the image + overlays_standing[BACK_LAYER] = image(icon = overlay_icon, icon_state = overlay_state) + else + overlays_standing[BACK_LAYER] = null + + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_hud() //TODO: do away with this if possible + if(client) + client.screen |= contents + if(hud_used) + hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar + + +/mob/living/carbon/human/update_inv_handcuffed(var/update_icons=1) + if(handcuffed) + drop_r_hand() + drop_l_hand() + stop_pulling() //TODO: should be handled elsewhere + if(hud_used) //hud handcuff icons + var/obj/screen/inventory/R = hud_used.adding[7] + var/obj/screen/inventory/L = hud_used.adding[8] + R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") + L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") + if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/pinkcuffs)) + overlays_standing[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "pinkcuff1") + else + overlays_standing[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "handcuff1") + else + overlays_standing[HANDCUFF_LAYER] = null + if(hud_used) + var/obj/screen/inventory/R = hud_used.adding[7] + var/obj/screen/inventory/L = hud_used.adding[8] + R.overlays = null + L.overlays = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_legcuffed(var/update_icons=1) + if(legcuffed) + overlays_standing[LEGCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff1") + if(src.m_intent != "walk") + src.m_intent = "walk" + if(src.hud_used && src.hud_used.move_intent) + src.hud_used.move_intent.icon_state = "walking" + + else + overlays_standing[LEGCUFF_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_r_hand(var/update_icons=1) + if(r_hand) + r_hand.screen_loc = ui_rhand //TODO + var/t_state = r_hand.item_state + if(!t_state) t_state = r_hand.icon_state + + var/image/I = image("icon" = r_hand.righthand_file, "icon_state"="[t_state]") + I = center_image(I, r_hand.inhand_x_dimension, r_hand.inhand_y_dimension) + overlays_standing[R_HAND_LAYER] = I + + if (handcuffed) drop_r_hand() + else + overlays_standing[R_HAND_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_l_hand(var/update_icons=1) + if(l_hand) + l_hand.screen_loc = ui_lhand //TODO + var/t_state = l_hand.item_state + if(!t_state) t_state = l_hand.icon_state + + var/image/I = image("icon" = l_hand.lefthand_file, "icon_state"="[t_state]") + I = center_image(I, l_hand.inhand_x_dimension, l_hand.inhand_y_dimension) + overlays_standing[L_HAND_LAYER] = I + + if (handcuffed) drop_l_hand() + else + overlays_standing[L_HAND_LAYER] = null + if(update_icons) update_icons() + + + +/mob/living/carbon/human/proc/update_tail_layer(var/update_icons=1) + overlays_standing[TAIL_LAYER] = null + + if(body_accessory) + if(body_accessory.try_restrictions(src)) + var/icon/accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state) + accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode) + + overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) + + + else if(species.tail && species.bodyflags & HAS_TAIL) //no tailless tajaran + if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) + var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s") + tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + + overlays_standing[TAIL_LAYER] = image(tail_s) + + if(update_icons) + update_icons() + + +/mob/living/carbon/human/proc/start_tail_wagging(var/update_icons=1) + overlays_standing[TAIL_LAYER] = null + + if(body_accessory) + var/icon/accessory_s = new/icon("icon" = body_accessory.get_animated_icon(), "icon_state" = body_accessory.get_animated_icon_state()) + accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode) + + overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) + + else if(species.tail && species.bodyflags & HAS_TAIL) + var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]w_s") + tailw_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + + overlays_standing[TAIL_LAYER] = image(tailw_s) + + if(update_icons) + update_icons() + +/mob/living/carbon/human/proc/stop_tail_wagging(var/update_icons=1) + overlays_standing[TAIL_LAYER] = null + + update_tail_layer(update_icons) //just trigger a full update for normal stationary sprites + +/mob/living/carbon/human/handle_transform_change() + ..() + update_tail_layer() + +//Adds a collar overlay above the helmet layer if the suit has one +// Suit needs an identically named sprite in icons/mob/collar.dmi +/mob/living/carbon/human/proc/update_collar(var/update_icons=1) + var/icon/C = new('icons/mob/collar.dmi') + var/image/standing = null + + if(wear_suit) + if(wear_suit.icon_state in C.IconStates()) + standing = image("icon" = C, "icon_state" = "[wear_suit.icon_state]") + + overlays_standing[COLLAR_LAYER] = standing + + if(update_icons) update_icons() + + +// Used mostly for creating head items +/mob/living/carbon/human/proc/generate_head_icon() +//gender no longer matters for the mouth, although there should probably be seperate base head icons. +// var/g = "m" +// if (gender == FEMALE) g = "f" + + //base icons + var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l") + + if(f_style) + var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] + if(facial_hair_style) + var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l") + facial_l.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) + face_lying.Blend(facial_l, ICON_OVERLAY) + + if(h_style) + var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] + if(hair_style) + var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l") + hair_l.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) + face_lying.Blend(hair_l, ICON_OVERLAY) + + //Eyes + // Note: These used to be in update_face(), and the fact they're here will make it difficult to create a disembodied head + var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l") + eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) + face_lying.Blend(eyes_l, ICON_OVERLAY) + + if(lip_style) + face_lying.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_l"), ICON_OVERLAY) + + var/image/face_lying_image = new /image(icon = face_lying) + return face_lying_image + +/mob/living/carbon/human/proc/force_update_limbs() + for(var/obj/item/organ/external/O in organs) + O.sync_colour_to_human(src) + update_body(0) + +//Human Overlays Indexes///////// +#undef MUTANTRACE_LAYER +#undef MARKINGS_LAYER +#undef MUTATIONS_LAYER +#undef DAMAGE_LAYER +#undef UNIFORM_LAYER +#undef TAIL_LAYER +#undef ID_LAYER +#undef SHOES_LAYER +#undef GLOVES_LAYER +#undef EARS_LAYER +#undef SUIT_LAYER +#undef GLASSES_LAYER +#undef FACEMASK_LAYER +#undef BELT_LAYER +#undef SUIT_STORE_LAYER +#undef BACK_LAYER +#undef HAIR_LAYER +#undef HEAD_LAYER +#undef HEAD_ACCESSORY_LAYER +#undef FHAIR_LAYER +#undef COLLAR_LAYER +#undef HANDCUFF_LAYER +#undef LEGCUFF_LAYER +#undef L_HAND_LAYER +#undef R_HAND_LAYER +#undef TARGETED_LAYER +#undef FIRE_LAYER +#undef TOTAL_LAYERS From 56d9a12dba145169d60bec9c21bc9a2234a85048 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 15 Jan 2016 07:49:16 -0500 Subject: [PATCH 019/442] too early for this shit --- code/modules/mob/living/carbon/human/update_icons.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 2e228f3d571..86e3ed1103b 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1140,4 +1140,4 @@ var/global/list/damage_icon_parts = list() #undef R_HAND_LAYER #undef TARGETED_LAYER #undef FIRE_LAYER -#undef TOTAL_LAYERS +#undef TOTAL_LAYERS \ No newline at end of file From 5f7c634bc7d5752e258f84ae660f841ad89e1c62 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 15 Jan 2016 07:58:27 -0500 Subject: [PATCH 020/442] Revert "too early for this shit" This reverts commit 56d9a12dba145169d60bec9c21bc9a2234a85048. --- code/modules/mob/living/carbon/human/update_icons.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 86e3ed1103b..2e228f3d571 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1140,4 +1140,4 @@ var/global/list/damage_icon_parts = list() #undef R_HAND_LAYER #undef TARGETED_LAYER #undef FIRE_LAYER -#undef TOTAL_LAYERS \ No newline at end of file +#undef TOTAL_LAYERS From b691b71fefaea60999b92ca3cb7ab95543a42bca Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 15 Jan 2016 07:58:45 -0500 Subject: [PATCH 021/442] Revert "urgh i update the wrong file...hush" This reverts commit 124fc7c32988337149b853eaea494d5799511692. --- .../mob/living/carbon/human/update_icons.dm | 1178 +---------------- 1 file changed, 35 insertions(+), 1143 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 2e228f3d571..e22ad5e66dc 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,1143 +1,35 @@ -/* - Global associative list for caching humanoid icons. - Index format m or f, followed by a string of 0 and 1 to represent bodyparts followed by husk fat hulk skeleton 1 or 0. - TODO: Proper documentation - icon_key is [species.race_key][g][husk][fat][hulk][skeleton][s_tone] -*/ -var/global/list/human_icon_cache = list() - - /////////////////////// - //UPDATE_ICONS SYSTEM// - /////////////////////// -/* -Calling this a system is perhaps a bit trumped up. It is essentially update_clothing dismantled into its -core parts. The key difference is that when we generate overlays we do not generate either lying or standing -versions. Instead, we generate both and store them in two fixed-length lists, both using the same list-index -(The indexes are in update_icons.dm): Each list for humans is (at the time of writing) of length 19. -This will hopefully be reduced as the system is refined. - - var/overlays_lying[19] //For the lying down stance - var/overlays_standing[19] //For the standing stance - -When we call update_icons, the 'lying' variable is checked and then the appropriate list is assigned to our overlays! -That in itself uses a tiny bit more memory (no more than all the ridiculous lists the game has already mind you). - -On the other-hand, it should be very CPU cheap in comparison to the old system. -In the old system, we updated all our overlays every life() call, even if we were standing still inside a crate! -or dead!. 25ish overlays, all generated from scratch every second for every xeno/human/monkey and then applied. -More often than not update_clothing was being called a few times in addition to that! CPU was not the only issue, -all those icons had to be sent to every client. So really the cost was extremely cumulative. To the point where -update_clothing would frequently appear in the top 10 most CPU intensive procs during profiling. - -Another feature of this new system is that our lists are indexed. This means we can update specific overlays! -So we only regenerate icons when we need them to be updated! This is the main saving for this system. - -In practice this means that: - everytime you fall over, we just switch between precompiled lists. Which is fast and cheap. - Everytime you do something minor like take a pen out of your pocket, we only update the in-hand overlay - etc... - - -There are several things that need to be remembered: - -> Whenever we do something that should cause an overlay to update (which doesn't use standard procs - ( i.e. you do something like l_hand = /obj/item/something new(src) ) - You will need to call the relevant update_inv_* proc: - update_inv_head() - update_inv_wear_suit() - update_inv_gloves() - update_inv_shoes() - update_inv_w_uniform() - update_inv_glasse() - update_inv_l_hand() - update_inv_r_hand() - update_inv_belt() - update_inv_wear_id() - update_inv_ears() - update_inv_s_store() - update_inv_pockets() - update_inv_back() - update_inv_handcuffed() - update_inv_wear_mask() - - All of these are named after the variable they update from. They are defined at the mob/ level like - update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a - slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such. - - -> There are also these special cases: - update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows - update_mutantrace() //handles updating your appearance after setting the mutantrace var - UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) - update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc - update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and - ...eyes were merged into update_body) - update_targeted() // Updates the target overlay when someone points a gun at you - -> All of these procs update our overlays_lying and overlays_standing, and then call update_icons() by default. - If you wish to update several overlays at once, you can set the argument to 0 to disable the update and call - it manually: - e.g. - update_inv_head(0) - update_inv_l_hand(0) - update_inv_r_hand() //<---calls update_icons() - - or equivillantly: - update_inv_head(0) - update_inv_l_hand(0) - update_inv_r_hand(0) - update_icons() - -> If you need to update all overlays you can use regenerate_icons(). it works exactly like update_clothing used to. - -> I reimplimented an old unused variable which was in the code called (coincidentally) var/update_icon - It can be used as another method of triggering regenerate_icons(). It's basically a flag that when set to non-zero - will call regenerate_icons() at the next life() call and then reset itself to 0. - The idea behind it is icons are regenerated only once, even if multiple events requested it. - -This system is confusing and is still a WIP. It's primary goal is speeding up the controls of the game whilst -reducing processing costs. So please bear with me while I iron out the kinks. It will be worth it, I promise. -If I can eventually free var/lying stuff from the life() process altogether, stuns/death/status stuff -will become less affected by lag-spikes and will be instantaneous! :3 - -If you have any questions/constructive-comments/bugs-to-report/or have a massivly devestated butt... -Please contact me on #coderbus IRC. ~Carn x -*/ - -//Human Overlays Indexes///////// -#define MUTANTRACE_LAYER 1 -#define MARKINGS_LAYER 2 -#define MUTATIONS_LAYER 3 -#define DAMAGE_LAYER 4 -#define UNIFORM_LAYER 5 -#define ID_LAYER 6 -#define SHOES_LAYER 7 -#define GLOVES_LAYER 8 -#define EARS_LAYER 9 -#define SUIT_LAYER 10 -#define GLASSES_LAYER 11 -#define BELT_LAYER 12 //Possible make this an overlay of somethign required to wear a belt? -#define TAIL_LAYER 13 //bs12 specific. this hack is probably gonna come back to haunt me -#define SUIT_STORE_LAYER 14 -#define BACK_LAYER 15 -#define HAIR_LAYER 16 //TODO: make part of head layer? -#define HEAD_ACCESSORY_LAYER 17 -#define FHAIR_LAYER 18 -#define FACEMASK_LAYER 19 -#define HEAD_LAYER 20 -#define COLLAR_LAYER 21 -#define HANDCUFF_LAYER 22 -#define LEGCUFF_LAYER 23 -#define L_HAND_LAYER 24 -#define R_HAND_LAYER 25 -#define TARGETED_LAYER 26 //BS12: Layer for the target overlay from weapon targeting system -#define FIRE_LAYER 27 //If you're on fire -#define TOTAL_LAYERS 27 - - - -/mob/living/carbon/human - var/list/overlays_standing[TOTAL_LAYERS] - var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed - var/icon/skeleton - - -/mob/living/carbon/human/proc/apply_overlay(cache_index) - var/image/I = overlays_standing[cache_index] - if(I) - overlays += I - -/mob/living/carbon/human/proc/remove_overlay(cache_index) - if(overlays_standing[cache_index]) - overlays -= overlays_standing[cache_index] - overlays_standing[cache_index] = null - -//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING -//this proc is messy as I was forced to include some old laggy cloaking code to it so that I don't break cloakers -//I'll work on removing that stuff by rewriting some of the cloaking stuff at a later date. -/mob/living/carbon/human/update_icons() - - update_hud() //TODO: remove the need for this - - var/stealth = 0 - for(var/obj/item/weapon/cloaking_device/S in list(l_hand,r_hand,belt,l_store,r_store)) - if(S.active) - stealth = 1 - break - - if(stealth) - icon = 'icons/mob/human.dmi' - icon_state = "body_cloaked" - var/image/I = overlays_standing[L_HAND_LAYER] - if(istype(I)) overlays += I - I = overlays_standing[R_HAND_LAYER] - if(istype(I)) overlays += I - else - icon = stand_icon - if(overlays.len != overlays_standing.len) - overlays.Cut() - - for(var/thing in overlays_standing) - if(thing) overlays += thing - - update_transform() - -var/global/list/damage_icon_parts = list() - -//DAMAGE OVERLAYS -//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists -/mob/living/carbon/human/UpdateDamageIcon(var/update_icons=1) - // first check whether something actually changed about damage appearance - var/damage_appearance = "" - - for(var/obj/item/organ/external/O in organs) - if(O.is_stump()) - continue - if(O.status & ORGAN_DESTROYED) damage_appearance += "d" - else - damage_appearance += O.damage_state - - if(damage_appearance == previous_damage_appearance) - // nothing to do here - return - - previous_damage_appearance = damage_appearance - - var/icon/standing = new /icon(species.damage_overlays, "00") - - var/image/standing_image = new /image("icon" = standing) - - // blend the individual damage states with our icons - for(var/obj/item/organ/external/O in organs) - if(O.is_stump()) - continue - if(!(O.status & ORGAN_DESTROYED)) - O.update_icon() - if(O.damage_state == "00") continue - var/icon/DI - var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]" - - if(damage_icon_parts[cache_index] == null) - DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human - DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels - DI.Blend(species.blood_color, ICON_MULTIPLY) - damage_icon_parts[cache_index] = DI - else - DI = damage_icon_parts[cache_index] - standing_image.overlays += DI - - overlays_standing[DAMAGE_LAYER] = standing_image - - if(update_icons) update_icons() - -//BASE MOB SPRITE -/mob/living/carbon/human/proc/update_body(var/update_icons=1) - - var/husk_color_mod = rgb(96,88,80) - var/hulk_color_mod = rgb(48,224,40) - - var/husk = (HUSK in src.mutations) - var/fat = (FAT in src.mutations) - var/hulk = (HULK in src.mutations) - var/skeleton = (SKELETON in src.mutations) - - //CACHING: Generate an index key from visible bodyparts. - //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. - //Create a new, blank icon for our mob to use. - if(stand_icon) - qdel(stand_icon) - stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") - var/icon_key = "" - var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] - - if(eyes) - icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" - else - icon_key += "#000000" - - for(var/organ_tag in species.has_limbs) - var/obj/item/organ/external/part = organs_by_name[organ_tag] - if(isnull(part) || part.is_stump() || (part.status & ORGAN_DESTROYED)) - icon_key += "0" - else if(part.status & ORGAN_ROBOT) - icon_key += "2[part.model ? "-[part.model]": ""]" - else if(part.status & ORGAN_DEAD) - icon_key += "3" - else - icon_key += "1" - - if(part) - icon_key += "[part.species.race_key]" - icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" - icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]" - if(part.s_col) - icon_key += "[rgb(part.s_col[1], part.s_col[2], part.s_col[3])]" - - icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" - - var/icon/base_icon - if(human_icon_cache[icon_key]) - base_icon = human_icon_cache[icon_key] - else - //BEGIN CACHED ICON GENERATION. - var/obj/item/organ/external/chest = get_organ("chest") - base_icon = chest.get_icon() - - for(var/obj/item/organ/external/part in organs) - var/icon/temp = part.get_icon(skeleton) - //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST - //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) - if(part.icon_position&(LEFT|RIGHT)) - var/icon/temp2 = new('icons/mob/human.dmi',"blank") - temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH) - temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH) - if(!(part.icon_position & LEFT)) - temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) - if(!(part.icon_position & RIGHT)) - temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) - base_icon.Blend(temp2, ICON_OVERLAY) - if(part.icon_position & LEFT) - temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) - if(part.icon_position & RIGHT) - temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) - base_icon.Blend(temp2, ICON_UNDERLAY) - else - base_icon.Blend(temp, ICON_OVERLAY) - - if(!skeleton) - if(husk) - base_icon.ColorTone(husk_color_mod) - else if(hulk) - var/list/tone = ReadRGB(hulk_color_mod) - base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) - - //Handle husk overlay. - if(husk && ("overlay_husk" in icon_states(species.icobase))) - var/icon/mask = new(base_icon) - var/icon/husk_over = new(species.icobase,"overlay_husk") - mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) - husk_over.Blend(mask, ICON_ADD) - base_icon.Blend(husk_over, ICON_OVERLAY) - - human_icon_cache[icon_key] = base_icon - - //END CACHED ICON GENERATION. - stand_icon.Blend(base_icon,ICON_OVERLAY) - - //Underwear - if(underwear && species.clothing_flags & HAS_UNDERWEAR) - var/datum/sprite_accessory/underwear/U = underwear_list[underwear] - if(U) - stand_icon.Blend(new /icon(U.icon, "uw_[U.icon_state]_s"), ICON_OVERLAY) - - if(undershirt && species.clothing_flags & HAS_UNDERSHIRT) - var/datum/sprite_accessory/undershirt/U2 = undershirt_list[undershirt] - if(U2) - stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY) - - - if(socks && species.clothing_flags & HAS_SOCKS) - var/datum/sprite_accessory/socks/U3 = socks_list[socks] - if(U3) - stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY) - - - if(update_icons) - update_icons() - - if(lip_style && species && species.flags & HAS_LIPS) - var/icon/lips = icon("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s") - lips.Blend(lip_color, ICON_ADD) - - stand_icon.Blend(lips, ICON_OVERLAY) - - //tail - update_tail_layer(0) - //head accessory - update_head_accessory(0) - //markings - update_markings(0) - //hair - update_hair(0) - update_fhair(0) - - -//MARKINGS OVERLAY -/mob/living/carbon/human/proc/update_markings(var/update_icons=1) - //Reset our markings - overlays_standing[MARKINGS_LAYER] = null - - var/obj/item/organ/external/chest/chest_organ = get_organ("chest") - if(!chest_organ || chest_organ.is_stump() || (chest_organ.status & ORGAN_DESTROYED) ) - if(update_icons) update_icons() - return - - //base icons - var/icon/markings_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s") - - if(m_style && (src.species.bodyflags & HAS_MARKINGS)) - var/datum/sprite_accessory/marking_style = marking_styles_list[m_style] - if(marking_style && marking_style.species_allowed) - if(src.species.name in marking_style.species_allowed) - var/icon/markings_s = new/icon("icon" = marking_style.icon, "icon_state" = "[marking_style.icon_state]_s") - if(marking_style.do_colouration) - markings_s.Blend(rgb(r_markings, g_markings, b_markings), ICON_ADD) - markings_standing.Blend(markings_s, ICON_OVERLAY) - else - //warning("Invalid m_style for [species.name]: [m_style]") - - overlays_standing[MARKINGS_LAYER] = image(markings_standing) - - if(update_icons) update_icons() - -//HEAD ACCESSORY OVERLAY -/mob/living/carbon/human/proc/update_head_accessory(var/update_icons=1) - //Reset our head accessory - overlays_standing[HEAD_ACCESSORY_LAYER] = null - - var/obj/item/organ/external/head/head_organ = get_organ("head") - if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) - if(update_icons) update_icons() - return - - //masks and helmets can obscure our head accessory - if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) - if(update_icons) update_icons() - return - - //base icons - var/icon/head_accessory_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s") - - if(ha_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()) && (src.species.bodyflags & HAS_HEAD_ACCESSORY))) - var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[ha_style] - if(head_accessory_style && head_accessory_style.species_allowed) - if(src.species.name in head_accessory_style.species_allowed) - var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") - if(head_accessory_style.do_colouration) - head_accessory_s.Blend(rgb(r_headacc, g_headacc, b_headacc), ICON_ADD) - head_accessory_standing.Blend(head_accessory_s, ICON_OVERLAY) - else - //warning("Invalid ha_style for [species.name]: [ha_style]") - - overlays_standing[HEAD_ACCESSORY_LAYER] = image(head_accessory_standing) - - if(update_icons) update_icons() - - -//HAIR OVERLAY -/mob/living/carbon/human/proc/update_hair(var/update_icons=1) - //Reset our hair - overlays_standing[HAIR_LAYER] = null - - var/obj/item/organ/external/head/head_organ = get_organ("head") - if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) - if(update_icons) update_icons() - return - - //masks and helmets can obscure our hair, unless we're a synthetic - if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) - if(update_icons) update_icons() - return - - //base icons - var/icon/hair_standing = new /icon('icons/mob/human_face.dmi',"bald_s") - - if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()))) - var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] - if(hair_style && hair_style.species_allowed) - if(src.species.name in hair_style.species_allowed) - var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(hair_style.do_colouration) - hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - - hair_standing.Blend(hair_s, ICON_OVERLAY) - else - //warning("Invalid h_style for [species.name]: [h_style]") - - overlays_standing[HAIR_LAYER] = image(hair_standing) - - if(update_icons) update_icons() - - -//FACIAL HAIR OVERLAY -/mob/living/carbon/human/proc/update_fhair(var/update_icons=1) - //Reset our facial hair - overlays_standing[FHAIR_LAYER] = null - - var/obj/item/organ/external/head/head_organ = get_organ("head") - if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) - if(update_icons) update_icons() - return - - //masks and helmets can obscure our facial hair, unless we're a synthetic - if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) - if(update_icons) update_icons() - return - - //base icons - var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") - - if(f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style && facial_hair_style.species_allowed) - if(src.species.name in facial_hair_style.species_allowed) - var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(facial_hair_style.do_colouration) - facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) - face_standing.Blend(facial_s, ICON_OVERLAY) - else - //warning("Invalid f_style for [species.name]: [f_style]") - - overlays_standing[FHAIR_LAYER] = image(face_standing) - - if(update_icons) update_icons() - -/mob/living/carbon/human/update_mutations(var/update_icons=1) - var/fat - if(FAT in mutations) - fat = "fat" - - var/image/standing = image("icon" = 'icons/effects/genetics.dmi') - var/add_image = 0 - var/g = "m" - if(gender == FEMALE) g = "f" - // DNA2 - Drawing underlays. - for(var/datum/dna/gene/gene in dna_genes) - if(!gene.block) - continue - if(gene.is_active(src)) - var/underlay=gene.OnDrawUnderlays(src,g,fat) - if(underlay) - standing.underlays += underlay - add_image = 1 - for(var/mut in mutations) - switch(mut) - /* - if(HULK) - if(fat) - standing.underlays += "hulk_[fat]_s" - else - standing.underlays += "hulk_[g]_s" - add_image = 1 - if(RESIST_COLD) - standing.underlays += "fire[fat]_s" - add_image = 1 - if(RESIST_HEAT) - standing.underlays += "cold[fat]_s" - add_image = 1 - if(TK) - standing.underlays += "telekinesishead[fat]_s" - add_image = 1 - */ - if(LASER) - standing.overlays += "lasereyes_s" - add_image = 1 - if((RESIST_COLD in mutations) && (RESIST_HEAT in mutations)) - standing.underlays -= "cold[fat]_s" - standing.underlays -= "fire[fat]_s" - standing.underlays += "coldfire[fat]_s" - if(add_image) - overlays_standing[MUTATIONS_LAYER] = standing - else - overlays_standing[MUTATIONS_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/proc/update_mutantrace(var/update_icons=1) -//BS12 EDIT - var/skel = (SKELETON in src.mutations) - if(skel) - skeleton = 'icons/mob/human_races/r_skeleton.dmi' - else - skeleton = null - - update_hair(0) - update_fhair(0) - if(update_icons) update_icons() - -//Call when target overlay should be added/removed -/mob/living/carbon/human/update_targeted(var/update_icons=1) - if (targeted_by && target_locked) - overlays_standing[TARGETED_LAYER] = target_locked - else if (!targeted_by && target_locked) - qdel(target_locked) - if (!targeted_by) - overlays_standing[TARGETED_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_fire() - remove_overlay(FIRE_LAYER) - if(on_fire) - overlays_standing[FIRE_LAYER] = image("icon"=fire_dmi, "icon_state"=fire_sprite, "layer"=-FIRE_LAYER) - else - overlays_standing[FIRE_LAYER] = null - apply_overlay(FIRE_LAYER) - -/* --------------------------------------- */ -//For legacy support. -/mob/living/carbon/human/regenerate_icons() - ..() - if(notransform) return - update_mutations(0) - update_body(0) - update_hair(0) - update_head_accessory(0) - update_fhair(0) - update_mutantrace(0) - update_inv_w_uniform(0,0) - update_inv_wear_id(0) - update_inv_gloves(0,0) - update_inv_glasses(0) - update_inv_ears(0) - update_inv_shoes(0,0) - update_inv_s_store(0) - update_inv_wear_mask(0) - update_inv_head(0,0) - update_inv_belt(0) - update_inv_back(0) - update_inv_wear_suit(0) - update_inv_r_hand(0) - update_inv_l_hand(0) - update_inv_handcuffed(0) - update_inv_legcuffed(0) - update_inv_pockets(0) - update_inv_wear_pda(0) - UpdateDamageIcon() - update_icons() - //Hud Stuff - update_hud() - update_fire() -/* --------------------------------------- */ -//vvvvvv UPDATE_INV PROCS vvvvvv - -/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1) - if(w_uniform && istype(w_uniform, /obj/item/clothing/under) ) - w_uniform.screen_loc = ui_iclothing - var/t_color = w_uniform.item_color - if(!t_color) t_color = icon_state - var/image/standing = image("icon_state" = "[t_color]_s") - - if(FAT in mutations) - if(w_uniform.flags&ONESIZEFITSALL) - standing.icon = 'icons/mob/uniform_fat.dmi' - else - src << "\red You burst out of \the [w_uniform]!" - unEquip(w_uniform) - return - else - standing.icon = 'icons/mob/uniform.dmi' - - if(w_uniform.icon_override) - standing.icon = w_uniform.icon_override - else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.name]) - standing.icon = w_uniform.sprite_sheets[species.name] - - if(w_uniform.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "uniformblood") - bloodsies.color = w_uniform.blood_color - standing.overlays += bloodsies - - if(w_uniform:accessories.len) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. - for(var/obj/item/clothing/accessory/A in w_uniform:accessories) - var/tie_color = A.item_color - if(!tie_color) tie_color = A.icon_state - standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]") - - overlays_standing[UNIFORM_LAYER] = standing - else - overlays_standing[UNIFORM_LAYER] = null - // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY - for( var/obj/item/thing in list(r_store, l_store, wear_id, wear_pda, belt) ) // - if(thing) // - unEquip(thing) // - if (client) // - client.screen -= thing // - // - if (thing) // - thing.loc = loc // - thing.dropped(src) // - thing.layer = initial(thing.layer) - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1) - if(wear_id) - wear_id.screen_loc = ui_id //TODO - if(w_uniform && w_uniform:displays_id) - overlays_standing[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id") - else - overlays_standing[ID_LAYER] = null - else - overlays_standing[ID_LAYER] = null - - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_gloves(var/update_icons=1) - if(gloves) - var/t_state = gloves.item_state - if(!t_state) t_state = gloves.icon_state - - var/image/standing - if(gloves.icon_override) - standing = image("icon" = gloves.icon_override, "icon_state" = "[t_state]") - else if(gloves.sprite_sheets && gloves.sprite_sheets[species.name]) - standing = image("icon" = gloves.sprite_sheets[species.name], "icon_state" = "[t_state]") - else - standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]") - - if(gloves.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") - bloodsies.color = gloves.blood_color - standing.overlays += bloodsies - gloves.screen_loc = ui_gloves - overlays_standing[GLOVES_LAYER] = standing - else - if(blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") - bloodsies.color = hand_blood_color - overlays_standing[GLOVES_LAYER] = bloodsies - else - overlays_standing[GLOVES_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_glasses(var/update_icons=1) - if(glasses) - - if(glasses.icon_override) - overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") - else if(glasses.sprite_sheets && glasses.sprite_sheets[species.name]) - overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.name], "icon_state" = "[glasses.icon_state]") - else - overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") - - else - overlays_standing[GLASSES_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_ears(var/update_icons=1) - if(l_ear || r_ear) - if(l_ear) - - var/t_type = l_ear.icon_state - if(l_ear.icon_override) - t_type = "[t_type]_l" - overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]") - else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.name]) - t_type = "[t_type]_l" - overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") - else - overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") - - if(r_ear) - - var/t_type = r_ear.icon_state - if(r_ear.icon_override) - t_type = "[t_type]_r" - overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]") - else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.name]) - t_type = "[t_type]_r" - overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") - else - overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") - - else - overlays_standing[EARS_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_shoes(var/update_icons=1) - if(shoes) - - var/image/standing - if(shoes.icon_override) - standing = image("icon" = shoes.icon_override, "icon_state" = "[shoes.icon_state]") - else if(shoes.sprite_sheets && shoes.sprite_sheets[species.name]) - standing = image("icon" = shoes.sprite_sheets[species.name], "icon_state" = "[shoes.icon_state]") - else - standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]") - - - if(shoes.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") - bloodsies.color = shoes.blood_color - standing.overlays += bloodsies - overlays_standing[SHOES_LAYER] = standing - else - if(feet_blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") - bloodsies.color = feet_blood_color - overlays_standing[SHOES_LAYER] = bloodsies - else - overlays_standing[SHOES_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_s_store(var/update_icons=1) - if(s_store) - var/t_state = s_store.item_state - if(!t_state) - t_state = s_store.icon_state - var/dmi='icons/mob/belt_mirror.dmi' - overlays_standing[SUIT_STORE_LAYER] = image("icon" = dmi, "icon_state" = "[t_state]") - s_store.screen_loc = ui_sstore1 //TODO - else - overlays_standing[SUIT_STORE_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_head(var/update_icons=1) - if(head) - head.screen_loc = ui_head //TODO - var/image/standing - if(head.icon_override) - standing = image("icon" = head.icon_override, "icon_state" = "[head.icon_state]") - else if(head.sprite_sheets && head.sprite_sheets[species.name]) - standing = image("icon" = head.sprite_sheets[species.name], "icon_state" = "[head.icon_state]") - else - standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]") - - if(head.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood") - bloodsies.color = head.blood_color - standing.overlays += bloodsies - overlays_standing[HEAD_LAYER] = standing - - - else - overlays_standing[HEAD_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_belt(var/update_icons=1) - if(belt) - belt.screen_loc = ui_belt //TODO - var/t_state = belt.item_state - if(!t_state) t_state = belt.icon_state - - if(belt.icon_override) - t_state = "[t_state]_be" - overlays_standing[BELT_LAYER] = image("icon" = belt.icon_override, "icon_state" = "[t_state]") - else if(belt.sprite_sheets && belt.sprite_sheets[species.name]) - overlays_standing[BELT_LAYER] = image("icon" = belt.sprite_sheets[species.name], "icon_state" = "[t_state]") - else - overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]") - else - overlays_standing[BELT_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) - if( wear_suit && istype(wear_suit, /obj/item/clothing/suit) ) //TODO check this - wear_suit.screen_loc = ui_oclothing //TODO - - var/image/standing - if(wear_suit.icon_override) - standing = image("icon" = wear_suit.icon_override, "icon_state" = "[wear_suit.icon_state]") - else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name]) - standing = image("icon" = wear_suit.sprite_sheets[species.name], "icon_state" = "[wear_suit.icon_state]") - else if(FAT in mutations) - if(wear_suit.flags&ONESIZEFITSALL) - standing = image("icon" = 'icons/mob/suit_fat.dmi', "icon_state" = "[wear_suit.icon_state]") - else - src << "\red You burst out of \the [wear_suit]!" - unEquip(wear_suit) - return - else - standing = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]") - - - if( istype(wear_suit, /obj/item/clothing/suit/straight_jacket) ) - unEquip(handcuffed) - drop_l_hand() - drop_r_hand() - - - if(wear_suit.blood_DNA) - var/obj/item/clothing/suit/S = wear_suit - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood") - bloodsies.color = wear_suit.blood_color - standing.overlays += bloodsies - - - overlays_standing[SUIT_LAYER] = standing - - update_tail_layer(0) - - else - overlays_standing[SUIT_LAYER] = null - - update_tail_layer(0) - - update_collar(0) - - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_pockets(var/update_icons=1) - if(l_store) l_store.screen_loc = ui_storage1 //TODO - if(r_store) r_store.screen_loc = ui_storage2 //TODO - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_wear_pda(var/update_icons=1) - if(wear_pda) wear_pda.screen_loc = ui_pda - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1) - if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/accessory) ) ) - wear_mask.screen_loc = ui_mask //TODO - - var/image/standing - if(wear_mask.icon_override) - standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state]") - else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.name]) - standing = image("icon" = wear_mask.sprite_sheets[species.name], "icon_state" = "[wear_mask.icon_state]") - else - standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]") - - if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "maskblood") - bloodsies.color = wear_mask.blood_color - standing.overlays += bloodsies - overlays_standing[FACEMASK_LAYER] = standing - else - overlays_standing[FACEMASK_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_back(var/update_icons=1) - if(back) - back.screen_loc = ui_back //TODO - - //determine the icon to use - var/icon/overlay_icon - if(back.icon_override) - overlay_icon = back.icon_override - else if(istype(back, /obj/item/weapon/rig)) - //If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc. - var/obj/item/weapon/rig/rig = back - overlay_icon = rig.mob_icon - else if(back.sprite_sheets && back.sprite_sheets[species.name]) - overlay_icon = back.sprite_sheets[species.name] - else - overlay_icon = icon('icons/mob/back.dmi', "[back.icon_state]") - - //determine state to use - var/overlay_state - if(back.item_state) - overlay_state = back.item_state - else - overlay_state = back.icon_state - - //create the image - overlays_standing[BACK_LAYER] = image(icon = overlay_icon, icon_state = overlay_state) - else - overlays_standing[BACK_LAYER] = null - - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_hud() //TODO: do away with this if possible - if(client) - client.screen |= contents - if(hud_used) - hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar - - -/mob/living/carbon/human/update_inv_handcuffed(var/update_icons=1) - if(handcuffed) - drop_r_hand() - drop_l_hand() - stop_pulling() //TODO: should be handled elsewhere - if(hud_used) //hud handcuff icons - var/obj/screen/inventory/R = hud_used.adding[7] - var/obj/screen/inventory/L = hud_used.adding[8] - R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") - L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") - if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/pinkcuffs)) - overlays_standing[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "pinkcuff1") - else - overlays_standing[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "handcuff1") - else - overlays_standing[HANDCUFF_LAYER] = null - if(hud_used) - var/obj/screen/inventory/R = hud_used.adding[7] - var/obj/screen/inventory/L = hud_used.adding[8] - R.overlays = null - L.overlays = null - if(update_icons) update_icons() - -/mob/living/carbon/human/update_inv_legcuffed(var/update_icons=1) - if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff1") - if(src.m_intent != "walk") - src.m_intent = "walk" - if(src.hud_used && src.hud_used.move_intent) - src.hud_used.move_intent.icon_state = "walking" - - else - overlays_standing[LEGCUFF_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_r_hand(var/update_icons=1) - if(r_hand) - r_hand.screen_loc = ui_rhand //TODO - var/t_state = r_hand.item_state - if(!t_state) t_state = r_hand.icon_state - - var/image/I = image("icon" = r_hand.righthand_file, "icon_state"="[t_state]") - I = center_image(I, r_hand.inhand_x_dimension, r_hand.inhand_y_dimension) - overlays_standing[R_HAND_LAYER] = I - - if (handcuffed) drop_r_hand() - else - overlays_standing[R_HAND_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/human/update_inv_l_hand(var/update_icons=1) - if(l_hand) - l_hand.screen_loc = ui_lhand //TODO - var/t_state = l_hand.item_state - if(!t_state) t_state = l_hand.icon_state - - var/image/I = image("icon" = l_hand.lefthand_file, "icon_state"="[t_state]") - I = center_image(I, l_hand.inhand_x_dimension, l_hand.inhand_y_dimension) - overlays_standing[L_HAND_LAYER] = I - - if (handcuffed) drop_l_hand() - else - overlays_standing[L_HAND_LAYER] = null - if(update_icons) update_icons() - - - -/mob/living/carbon/human/proc/update_tail_layer(var/update_icons=1) - overlays_standing[TAIL_LAYER] = null - - if(body_accessory) - if(body_accessory.try_restrictions(src)) - var/icon/accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state) - accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode) - - overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) - - - else if(species.tail && species.bodyflags & HAS_TAIL) //no tailless tajaran - if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) - var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s") - tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) - - overlays_standing[TAIL_LAYER] = image(tail_s) - - if(update_icons) - update_icons() - - -/mob/living/carbon/human/proc/start_tail_wagging(var/update_icons=1) - overlays_standing[TAIL_LAYER] = null - - if(body_accessory) - var/icon/accessory_s = new/icon("icon" = body_accessory.get_animated_icon(), "icon_state" = body_accessory.get_animated_icon_state()) - accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode) - - overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) - - else if(species.tail && species.bodyflags & HAS_TAIL) - var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]w_s") - tailw_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) - - overlays_standing[TAIL_LAYER] = image(tailw_s) - - if(update_icons) - update_icons() - -/mob/living/carbon/human/proc/stop_tail_wagging(var/update_icons=1) - overlays_standing[TAIL_LAYER] = null - - update_tail_layer(update_icons) //just trigger a full update for normal stationary sprites - -/mob/living/carbon/human/handle_transform_change() - ..() - update_tail_layer() - -//Adds a collar overlay above the helmet layer if the suit has one -// Suit needs an identically named sprite in icons/mob/collar.dmi -/mob/living/carbon/human/proc/update_collar(var/update_icons=1) - var/icon/C = new('icons/mob/collar.dmi') - var/image/standing = null - - if(wear_suit) - if(wear_suit.icon_state in C.IconStates()) - standing = image("icon" = C, "icon_state" = "[wear_suit.icon_state]") - - overlays_standing[COLLAR_LAYER] = standing - - if(update_icons) update_icons() - - -// Used mostly for creating head items -/mob/living/carbon/human/proc/generate_head_icon() -//gender no longer matters for the mouth, although there should probably be seperate base head icons. -// var/g = "m" -// if (gender == FEMALE) g = "f" - - //base icons - var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l") - - if(f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style) - var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l") - facial_l.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) - face_lying.Blend(facial_l, ICON_OVERLAY) - - if(h_style) - var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] - if(hair_style) - var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l") - hair_l.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - face_lying.Blend(hair_l, ICON_OVERLAY) - - //Eyes - // Note: These used to be in update_face(), and the fact they're here will make it difficult to create a disembodied head - var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l") - eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - face_lying.Blend(eyes_l, ICON_OVERLAY) - - if(lip_style) - face_lying.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_l"), ICON_OVERLAY) - - var/image/face_lying_image = new /image(icon = face_lying) - return face_lying_image - -/mob/living/carbon/human/proc/force_update_limbs() - for(var/obj/item/organ/external/O in organs) - O.sync_colour_to_human(src) - update_body(0) - -//Human Overlays Indexes///////// -#undef MUTANTRACE_LAYER -#undef MARKINGS_LAYER -#undef MUTATIONS_LAYER -#undef DAMAGE_LAYER -#undef UNIFORM_LAYER -#undef TAIL_LAYER -#undef ID_LAYER -#undef SHOES_LAYER -#undef GLOVES_LAYER -#undef EARS_LAYER -#undef SUIT_LAYER -#undef GLASSES_LAYER -#undef FACEMASK_LAYER -#undef BELT_LAYER -#undef SUIT_STORE_LAYER -#undef BACK_LAYER -#undef HAIR_LAYER -#undef HEAD_LAYER -#undef HEAD_ACCESSORY_LAYER -#undef FHAIR_LAYER -#undef COLLAR_LAYER -#undef HANDCUFF_LAYER -#undef LEGCUFF_LAYER -#undef L_HAND_LAYER -#undef R_HAND_LAYER -#undef TARGETED_LAYER -#undef FIRE_LAYER -#undef TOTAL_LAYERS +//LOOK G-MA, I'VE JOINED CARBON PROCS THAT ARE IDENTICAL IN ALL CASES INTO ONE PROC, I'M BETTER THAN LIFE() +//I thought about mob/living but silicons and simple_animals don't want this just yet. +//Right now just handles lying down, but could handle other cases later. +//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. +/mob/living/carbon/update_transform() + var/matrix/ntransform = matrix(transform) //aka transform.Copy() + var/final_pixel_y = pixel_y + var/final_dir = dir + var/changed = 0 + if(lying != lying_prev) + changed++ + ntransform.TurnTo(lying_prev,lying) + if(lying == 0) //Lying to standing + final_pixel_y = get_standard_pixel_y_offset() + else //if(lying != 0) + if(lying_prev == 0) //Standing to lying + pixel_y = get_standard_pixel_y_offset() + final_pixel_y = get_standard_pixel_y_offset(lying) + if(dir & (EAST|WEST)) //Facing east or west + final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass + + lying_prev = lying //so we don't try to animate until there's been another change. + + if(resize != RESIZE_DEFAULT_SIZE) + changed++ + ntransform.Scale(resize) + resize = RESIZE_DEFAULT_SIZE + + if(changed) + animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) + handle_transform_change() + floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). + +/mob/living/carbon/proc/handle_transform_change() + return \ No newline at end of file From 0fa96f21aec9d0cbb5d0a69513f38714ef9a6c4e Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 15 Jan 2016 07:59:14 -0500 Subject: [PATCH 022/442] Revert "conflict fixes" This reverts commit ba87398eeac1bed6f7ed9fb4bcdd51210ce5f443. --- .../mob/living/carbon/human/update_icons.dm | 1080 ++++++++++++++++- icons/mob/human_face.dmi | Bin 79068 -> 78637 bytes 2 files changed, 1045 insertions(+), 35 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e22ad5e66dc..b768039ac29 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,35 +1,1045 @@ -//LOOK G-MA, I'VE JOINED CARBON PROCS THAT ARE IDENTICAL IN ALL CASES INTO ONE PROC, I'M BETTER THAN LIFE() -//I thought about mob/living but silicons and simple_animals don't want this just yet. -//Right now just handles lying down, but could handle other cases later. -//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. -/mob/living/carbon/update_transform() - var/matrix/ntransform = matrix(transform) //aka transform.Copy() - var/final_pixel_y = pixel_y - var/final_dir = dir - var/changed = 0 - if(lying != lying_prev) - changed++ - ntransform.TurnTo(lying_prev,lying) - if(lying == 0) //Lying to standing - final_pixel_y = get_standard_pixel_y_offset() - else //if(lying != 0) - if(lying_prev == 0) //Standing to lying - pixel_y = get_standard_pixel_y_offset() - final_pixel_y = get_standard_pixel_y_offset(lying) - if(dir & (EAST|WEST)) //Facing east or west - final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass - - lying_prev = lying //so we don't try to animate until there's been another change. - - if(resize != RESIZE_DEFAULT_SIZE) - changed++ - ntransform.Scale(resize) - resize = RESIZE_DEFAULT_SIZE - - if(changed) - animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) - handle_transform_change() - floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). - -/mob/living/carbon/proc/handle_transform_change() - return \ No newline at end of file +/* + Global associative list for caching humanoid icons. + Index format m or f, followed by a string of 0 and 1 to represent bodyparts followed by husk fat hulk skeleton 1 or 0. + TODO: Proper documentation + icon_key is [species.race_key][g][husk][fat][hulk][skeleton][s_tone] +*/ +var/global/list/human_icon_cache = list() + + /////////////////////// + //UPDATE_ICONS SYSTEM// + /////////////////////// +/* +Calling this a system is perhaps a bit trumped up. It is essentially update_clothing dismantled into its +core parts. The key difference is that when we generate overlays we do not generate either lying or standing +versions. Instead, we generate both and store them in two fixed-length lists, both using the same list-index +(The indexes are in update_icons.dm): Each list for humans is (at the time of writing) of length 19. +This will hopefully be reduced as the system is refined. + + var/overlays_lying[19] //For the lying down stance + var/overlays_standing[19] //For the standing stance + +When we call update_icons, the 'lying' variable is checked and then the appropriate list is assigned to our overlays! +That in itself uses a tiny bit more memory (no more than all the ridiculous lists the game has already mind you). + +On the other-hand, it should be very CPU cheap in comparison to the old system. +In the old system, we updated all our overlays every life() call, even if we were standing still inside a crate! +or dead!. 25ish overlays, all generated from scratch every second for every xeno/human/monkey and then applied. +More often than not update_clothing was being called a few times in addition to that! CPU was not the only issue, +all those icons had to be sent to every client. So really the cost was extremely cumulative. To the point where +update_clothing would frequently appear in the top 10 most CPU intensive procs during profiling. + +Another feature of this new system is that our lists are indexed. This means we can update specific overlays! +So we only regenerate icons when we need them to be updated! This is the main saving for this system. + +In practice this means that: + everytime you fall over, we just switch between precompiled lists. Which is fast and cheap. + Everytime you do something minor like take a pen out of your pocket, we only update the in-hand overlay + etc... + + +There are several things that need to be remembered: + +> Whenever we do something that should cause an overlay to update (which doesn't use standard procs + ( i.e. you do something like l_hand = /obj/item/something new(src) ) + You will need to call the relevant update_inv_* proc: + update_inv_head() + update_inv_wear_suit() + update_inv_gloves() + update_inv_shoes() + update_inv_w_uniform() + update_inv_glasse() + update_inv_l_hand() + update_inv_r_hand() + update_inv_belt() + update_inv_wear_id() + update_inv_ears() + update_inv_s_store() + update_inv_pockets() + update_inv_back() + update_inv_handcuffed() + update_inv_wear_mask() + + All of these are named after the variable they update from. They are defined at the mob/ level like + update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a + slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such. + + +> There are also these special cases: + update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows + update_mutantrace() //handles updating your appearance after setting the mutantrace var + UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) + update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc + update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and + ...eyes were merged into update_body) + update_targeted() // Updates the target overlay when someone points a gun at you + +> All of these procs update our overlays_lying and overlays_standing, and then call update_icons() by default. + If you wish to update several overlays at once, you can set the argument to 0 to disable the update and call + it manually: + e.g. + update_inv_head(0) + update_inv_l_hand(0) + update_inv_r_hand() //<---calls update_icons() + + or equivillantly: + update_inv_head(0) + update_inv_l_hand(0) + update_inv_r_hand(0) + update_icons() + +> If you need to update all overlays you can use regenerate_icons(). it works exactly like update_clothing used to. + +> I reimplimented an old unused variable which was in the code called (coincidentally) var/update_icon + It can be used as another method of triggering regenerate_icons(). It's basically a flag that when set to non-zero + will call regenerate_icons() at the next life() call and then reset itself to 0. + The idea behind it is icons are regenerated only once, even if multiple events requested it. + +This system is confusing and is still a WIP. It's primary goal is speeding up the controls of the game whilst +reducing processing costs. So please bear with me while I iron out the kinks. It will be worth it, I promise. +If I can eventually free var/lying stuff from the life() process altogether, stuns/death/status stuff +will become less affected by lag-spikes and will be instantaneous! :3 + +If you have any questions/constructive-comments/bugs-to-report/or have a massivly devestated butt... +Please contact me on #coderbus IRC. ~Carn x +*/ + +//Human Overlays Indexes///////// +#define MUTANTRACE_LAYER 1 +#define MUTATIONS_LAYER 2 +#define DAMAGE_LAYER 3 +#define UNIFORM_LAYER 4 +#define ID_LAYER 5 +#define SHOES_LAYER 6 +#define GLOVES_LAYER 7 +#define EARS_LAYER 8 +#define SUIT_LAYER 9 +#define GLASSES_LAYER 10 +#define BELT_LAYER 11 //Possible make this an overlay of somethign required to wear a belt? +#define TAIL_LAYER 12 //bs12 specific. this hack is probably gonna come back to haunt me +#define SUIT_STORE_LAYER 13 +#define BACK_LAYER 14 +#define HAIR_LAYER 15 //TODO: make part of head layer? +#define FACEMASK_LAYER 16 +#define HEAD_LAYER 17 +#define COLLAR_LAYER 18 +#define HANDCUFF_LAYER 19 +#define LEGCUFF_LAYER 20 +#define L_HAND_LAYER 21 +#define R_HAND_LAYER 22 +#define TARGETED_LAYER 23 //BS12: Layer for the target overlay from weapon targeting system +#define FIRE_LAYER 24 //If you're on fire +#define TOTAL_LAYERS 24 + + + +/mob/living/carbon/human + var/list/overlays_standing[TOTAL_LAYERS] + var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed + var/icon/skeleton + + +/mob/living/carbon/human/proc/apply_overlay(cache_index) + var/image/I = overlays_standing[cache_index] + if(I) + overlays += I + +/mob/living/carbon/human/proc/remove_overlay(cache_index) + if(overlays_standing[cache_index]) + overlays -= overlays_standing[cache_index] + overlays_standing[cache_index] = null + +//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING +//this proc is messy as I was forced to include some old laggy cloaking code to it so that I don't break cloakers +//I'll work on removing that stuff by rewriting some of the cloaking stuff at a later date. +/mob/living/carbon/human/update_icons() + + update_hud() //TODO: remove the need for this + + var/stealth = 0 + for(var/obj/item/weapon/cloaking_device/S in list(l_hand,r_hand,belt,l_store,r_store)) + if(S.active) + stealth = 1 + break + + if(stealth) + icon = 'icons/mob/human.dmi' + icon_state = "body_cloaked" + var/image/I = overlays_standing[L_HAND_LAYER] + if(istype(I)) overlays += I + I = overlays_standing[R_HAND_LAYER] + if(istype(I)) overlays += I + else + icon = stand_icon + if(overlays.len != overlays_standing.len) + overlays.Cut() + + for(var/thing in overlays_standing) + if(thing) overlays += thing + + update_transform() + +var/global/list/damage_icon_parts = list() + +//DAMAGE OVERLAYS +//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists +/mob/living/carbon/human/UpdateDamageIcon(var/update_icons=1) + // first check whether something actually changed about damage appearance + var/damage_appearance = "" + + for(var/obj/item/organ/external/O in organs) + if(O.is_stump()) + continue + if(O.status & ORGAN_DESTROYED) damage_appearance += "d" + else + damage_appearance += O.damage_state + + if(damage_appearance == previous_damage_appearance) + // nothing to do here + return + + previous_damage_appearance = damage_appearance + + var/icon/standing = new /icon(species.damage_overlays, "00") + + var/image/standing_image = new /image("icon" = standing) + + // blend the individual damage states with our icons + for(var/obj/item/organ/external/O in organs) + if(O.is_stump()) + continue + if(!(O.status & ORGAN_DESTROYED)) + O.update_icon() + if(O.damage_state == "00") continue + var/icon/DI + var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]" + + if(damage_icon_parts[cache_index] == null) + DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human + DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels + DI.Blend(species.blood_color, ICON_MULTIPLY) + damage_icon_parts[cache_index] = DI + else + DI = damage_icon_parts[cache_index] + standing_image.overlays += DI + + overlays_standing[DAMAGE_LAYER] = standing_image + + if(update_icons) update_icons() + +//BASE MOB SPRITE +/mob/living/carbon/human/proc/update_body(var/update_icons=1) + + var/husk_color_mod = rgb(96,88,80) + var/hulk_color_mod = rgb(48,224,40) + + var/husk = (HUSK in src.mutations) + var/fat = (FAT in src.mutations) + var/hulk = (HULK in src.mutations) + var/skeleton = (SKELETON in src.mutations) + + //CACHING: Generate an index key from visible bodyparts. + //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. + //Create a new, blank icon for our mob to use. + if(stand_icon) + qdel(stand_icon) + stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") + var/icon_key = "" + var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) + + if(eyes) + icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" + else + icon_key += "#000000" + + for(var/organ_tag in species.has_limbs) + var/obj/item/organ/external/part = organs_by_name[organ_tag] + if(isnull(part) || part.is_stump() || (part.status & ORGAN_DESTROYED)) + icon_key += "0" + else if(part.status & ORGAN_ROBOT) + icon_key += "2[part.model ? "-[part.model]": ""]" + else if(part.status & ORGAN_DEAD) + icon_key += "3" + else + icon_key += "1" + + if(part) + icon_key += "[part.species.race_key]" + icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" + icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]" + if(part.s_col) + icon_key += "[rgb(part.s_col[1], part.s_col[2], part.s_col[3])]" + + icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" + + var/icon/base_icon + if(human_icon_cache[icon_key]) + base_icon = human_icon_cache[icon_key] + else + //BEGIN CACHED ICON GENERATION. + var/obj/item/organ/external/chest = get_organ("chest") + base_icon = chest.get_icon() + + for(var/obj/item/organ/external/part in organs) + var/icon/temp = part.get_icon(skeleton) + //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST + //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) + if(part.icon_position&(LEFT|RIGHT)) + var/icon/temp2 = new('icons/mob/human.dmi',"blank") + temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH) + temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH) + if(!(part.icon_position & LEFT)) + temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) + if(!(part.icon_position & RIGHT)) + temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) + base_icon.Blend(temp2, ICON_OVERLAY) + if(part.icon_position & LEFT) + temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) + if(part.icon_position & RIGHT) + temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) + base_icon.Blend(temp2, ICON_UNDERLAY) + else + base_icon.Blend(temp, ICON_OVERLAY) + + if(!skeleton) + if(husk) + base_icon.ColorTone(husk_color_mod) + else if(hulk) + var/list/tone = ReadRGB(hulk_color_mod) + base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) + + //Handle husk overlay. + if(husk && ("overlay_husk" in icon_states(species.icobase))) + var/icon/mask = new(base_icon) + var/icon/husk_over = new(species.icobase,"overlay_husk") + mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) + husk_over.Blend(mask, ICON_ADD) + base_icon.Blend(husk_over, ICON_OVERLAY) + + human_icon_cache[icon_key] = base_icon + + //END CACHED ICON GENERATION. + stand_icon.Blend(base_icon,ICON_OVERLAY) + + //Underwear + if(underwear && species.clothing_flags & HAS_UNDERWEAR) + var/datum/sprite_accessory/underwear/U = underwear_list[underwear] + if(U) + stand_icon.Blend(new /icon(U.icon, "uw_[U.icon_state]_s"), ICON_OVERLAY) + + if(undershirt && species.clothing_flags & HAS_UNDERSHIRT) + var/datum/sprite_accessory/undershirt/U2 = undershirt_list[undershirt] + if(U2) + stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY) + + + if(socks && species.clothing_flags & HAS_SOCKS) + var/datum/sprite_accessory/socks/U3 = socks_list[socks] + if(U3) + stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY) + + + if(update_icons) + update_icons() + + if(lip_style && species && species.flags & HAS_LIPS) + var/icon/lips = icon("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s") + lips.Blend(lip_color, ICON_ADD) + + stand_icon.Blend(lips, ICON_OVERLAY) + + //tail + update_tail_layer(0) + + +//HAIR OVERLAY +/mob/living/carbon/human/proc/update_hair(var/update_icons=1) + //Reset our hair + overlays_standing[HAIR_LAYER] = null + + var/obj/item/organ/external/head/head_organ = get_organ("head") + if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) + if(update_icons) update_icons() + return + + //masks and helmets can obscure our hair, unless we're a synthetic + if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) + if(update_icons) update_icons() + return + + //base icons + var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") + + if(f_style) + var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] + if(facial_hair_style && facial_hair_style.species_allowed) + if(src.species.name in facial_hair_style.species_allowed) + var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") + if(facial_hair_style.do_colouration) + facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) + face_standing.Blend(facial_s, ICON_OVERLAY) + else + //warning("Invalid f_style for [species.name]: [f_style]") + + if(!get_int_organ(/obj/item/organ/internal/brain)) + face_standing += icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s") + + if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()))) + var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] + if(hair_style && hair_style.species_allowed) + if(src.species.name in hair_style.species_allowed) + var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") + if(hair_style.do_colouration) + hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) + + face_standing.Blend(hair_s, ICON_OVERLAY) + else + //warning("Invalid h_style for [species.name]: [h_style]") + + overlays_standing[HAIR_LAYER] = image(face_standing) + + if(update_icons) update_icons() + +/mob/living/carbon/human/update_mutations(var/update_icons=1) + var/fat + if(FAT in mutations) + fat = "fat" + + var/image/standing = image("icon" = 'icons/effects/genetics.dmi') + var/add_image = 0 + var/g = "m" + if(gender == FEMALE) g = "f" + // DNA2 - Drawing underlays. + for(var/datum/dna/gene/gene in dna_genes) + if(!gene.block) + continue + if(gene.is_active(src)) + var/underlay=gene.OnDrawUnderlays(src,g,fat) + if(underlay) + standing.underlays += underlay + add_image = 1 + for(var/mut in mutations) + switch(mut) + /* + if(HULK) + if(fat) + standing.underlays += "hulk_[fat]_s" + else + standing.underlays += "hulk_[g]_s" + add_image = 1 + if(RESIST_COLD) + standing.underlays += "fire[fat]_s" + add_image = 1 + if(RESIST_HEAT) + standing.underlays += "cold[fat]_s" + add_image = 1 + if(TK) + standing.underlays += "telekinesishead[fat]_s" + add_image = 1 + */ + if(LASER) + standing.overlays += "lasereyes_s" + add_image = 1 + if((RESIST_COLD in mutations) && (RESIST_HEAT in mutations)) + standing.underlays -= "cold[fat]_s" + standing.underlays -= "fire[fat]_s" + standing.underlays += "coldfire[fat]_s" + if(add_image) + overlays_standing[MUTATIONS_LAYER] = standing + else + overlays_standing[MUTATIONS_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/proc/update_mutantrace(var/update_icons=1) +//BS12 EDIT + var/skel = (SKELETON in src.mutations) + if(skel) + skeleton = 'icons/mob/human_races/r_skeleton.dmi' + else + skeleton = null + + update_hair(0) + if(update_icons) update_icons() + +//Call when target overlay should be added/removed +/mob/living/carbon/human/update_targeted(var/update_icons=1) + if (targeted_by && target_locked) + overlays_standing[TARGETED_LAYER] = target_locked + else if (!targeted_by && target_locked) + qdel(target_locked) + if (!targeted_by) + overlays_standing[TARGETED_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_fire() + remove_overlay(FIRE_LAYER) + if(on_fire) + overlays_standing[FIRE_LAYER] = image("icon"=fire_dmi, "icon_state"=fire_sprite, "layer"=-FIRE_LAYER) + else + overlays_standing[FIRE_LAYER] = null + apply_overlay(FIRE_LAYER) + +/* --------------------------------------- */ +//For legacy support. +/mob/living/carbon/human/regenerate_icons() + ..() + if(notransform) return + update_mutations(0) + update_body(0) + update_hair(0) + update_mutantrace(0) + update_inv_w_uniform(0,0) + update_inv_wear_id(0) + update_inv_gloves(0,0) + update_inv_glasses(0) + update_inv_ears(0) + update_inv_shoes(0,0) + update_inv_s_store(0) + update_inv_wear_mask(0) + update_inv_head(0,0) + update_inv_belt(0) + update_inv_back(0) + update_inv_wear_suit(0) + update_inv_r_hand(0) + update_inv_l_hand(0) + update_inv_handcuffed(0) + update_inv_legcuffed(0) + update_inv_pockets(0) + update_inv_wear_pda(0) + UpdateDamageIcon() + update_icons() + //Hud Stuff + update_hud() + update_fire() +/* --------------------------------------- */ +//vvvvvv UPDATE_INV PROCS vvvvvv + +/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1) + if(w_uniform && istype(w_uniform, /obj/item/clothing/under) ) + w_uniform.screen_loc = ui_iclothing + var/t_color = w_uniform.item_color + if(!t_color) t_color = icon_state + var/image/standing = image("icon_state" = "[t_color]_s") + + if(FAT in mutations) + if(w_uniform.flags&ONESIZEFITSALL) + standing.icon = 'icons/mob/uniform_fat.dmi' + else + src << "\red You burst out of \the [w_uniform]!" + unEquip(w_uniform) + return + else + standing.icon = 'icons/mob/uniform.dmi' + + if(w_uniform.icon_override) + standing.icon = w_uniform.icon_override + else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.name]) + standing.icon = w_uniform.sprite_sheets[species.name] + + if(w_uniform.blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "uniformblood") + bloodsies.color = w_uniform.blood_color + standing.overlays += bloodsies + + if(w_uniform:accessories.len) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. + for(var/obj/item/clothing/accessory/A in w_uniform:accessories) + var/tie_color = A.item_color + if(!tie_color) tie_color = A.icon_state + standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]") + + overlays_standing[UNIFORM_LAYER] = standing + else + overlays_standing[UNIFORM_LAYER] = null + // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY + for( var/obj/item/thing in list(r_store, l_store, wear_id, wear_pda, belt) ) // + if(thing) // + unEquip(thing) // + if (client) // + client.screen -= thing // + // + if (thing) // + thing.loc = loc // + thing.dropped(src) // + thing.layer = initial(thing.layer) + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1) + if(wear_id) + wear_id.screen_loc = ui_id //TODO + if(w_uniform && w_uniform:displays_id) + overlays_standing[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id") + else + overlays_standing[ID_LAYER] = null + else + overlays_standing[ID_LAYER] = null + + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_gloves(var/update_icons=1) + if(gloves) + var/t_state = gloves.item_state + if(!t_state) t_state = gloves.icon_state + + var/image/standing + if(gloves.icon_override) + standing = image("icon" = gloves.icon_override, "icon_state" = "[t_state]") + else if(gloves.sprite_sheets && gloves.sprite_sheets[species.name]) + standing = image("icon" = gloves.sprite_sheets[species.name], "icon_state" = "[t_state]") + else + standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]") + + if(gloves.blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") + bloodsies.color = gloves.blood_color + standing.overlays += bloodsies + gloves.screen_loc = ui_gloves + overlays_standing[GLOVES_LAYER] = standing + else + if(blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") + bloodsies.color = hand_blood_color + overlays_standing[GLOVES_LAYER] = bloodsies + else + overlays_standing[GLOVES_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_glasses(var/update_icons=1) + if(glasses) + + if(glasses.icon_override) + overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") + else if(glasses.sprite_sheets && glasses.sprite_sheets[species.name]) + overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.name], "icon_state" = "[glasses.icon_state]") + else + overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") + + else + overlays_standing[GLASSES_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_ears(var/update_icons=1) + if(l_ear || r_ear) + if(l_ear) + + var/t_type = l_ear.icon_state + if(l_ear.icon_override) + t_type = "[t_type]_l" + overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]") + else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.name]) + t_type = "[t_type]_l" + overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") + else + overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") + + if(r_ear) + + var/t_type = r_ear.icon_state + if(r_ear.icon_override) + t_type = "[t_type]_r" + overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]") + else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.name]) + t_type = "[t_type]_r" + overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") + else + overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") + + else + overlays_standing[EARS_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_shoes(var/update_icons=1) + if(shoes) + + var/image/standing + if(shoes.icon_override) + standing = image("icon" = shoes.icon_override, "icon_state" = "[shoes.icon_state]") + else if(shoes.sprite_sheets && shoes.sprite_sheets[species.name]) + standing = image("icon" = shoes.sprite_sheets[species.name], "icon_state" = "[shoes.icon_state]") + else + standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]") + + + if(shoes.blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") + bloodsies.color = shoes.blood_color + standing.overlays += bloodsies + overlays_standing[SHOES_LAYER] = standing + else + if(feet_blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") + bloodsies.color = feet_blood_color + overlays_standing[SHOES_LAYER] = bloodsies + else + overlays_standing[SHOES_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_s_store(var/update_icons=1) + if(s_store) + var/t_state = s_store.item_state + if(!t_state) + t_state = s_store.icon_state + var/dmi='icons/mob/belt_mirror.dmi' + overlays_standing[SUIT_STORE_LAYER] = image("icon" = dmi, "icon_state" = "[t_state]") + s_store.screen_loc = ui_sstore1 //TODO + else + overlays_standing[SUIT_STORE_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_head(var/update_icons=1) + if(head) + head.screen_loc = ui_head //TODO + var/image/standing + if(head.icon_override) + standing = image("icon" = head.icon_override, "icon_state" = "[head.icon_state]") + else if(head.sprite_sheets && head.sprite_sheets[species.name]) + standing = image("icon" = head.sprite_sheets[species.name], "icon_state" = "[head.icon_state]") + else + standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]") + + if(head.blood_DNA) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood") + bloodsies.color = head.blood_color + standing.overlays += bloodsies + overlays_standing[HEAD_LAYER] = standing + + + else + overlays_standing[HEAD_LAYER] = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_belt(var/update_icons=1) + if(belt) + belt.screen_loc = ui_belt //TODO + var/t_state = belt.item_state + if(!t_state) t_state = belt.icon_state + + if(belt.icon_override) + t_state = "[t_state]_be" + overlays_standing[BELT_LAYER] = image("icon" = belt.icon_override, "icon_state" = "[t_state]") + else if(belt.sprite_sheets && belt.sprite_sheets[species.name]) + overlays_standing[BELT_LAYER] = image("icon" = belt.sprite_sheets[species.name], "icon_state" = "[t_state]") + else + overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]") + else + overlays_standing[BELT_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) + if( wear_suit && istype(wear_suit, /obj/item/clothing/suit) ) //TODO check this + wear_suit.screen_loc = ui_oclothing //TODO + + var/image/standing + if(wear_suit.icon_override) + standing = image("icon" = wear_suit.icon_override, "icon_state" = "[wear_suit.icon_state]") + else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name]) + standing = image("icon" = wear_suit.sprite_sheets[species.name], "icon_state" = "[wear_suit.icon_state]") + else if(FAT in mutations) + if(wear_suit.flags&ONESIZEFITSALL) + standing = image("icon" = 'icons/mob/suit_fat.dmi', "icon_state" = "[wear_suit.icon_state]") + else + src << "\red You burst out of \the [wear_suit]!" + unEquip(wear_suit) + return + else + standing = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]") + + + if( istype(wear_suit, /obj/item/clothing/suit/straight_jacket) ) + unEquip(handcuffed) + drop_l_hand() + drop_r_hand() + + + if(wear_suit.blood_DNA) + var/obj/item/clothing/suit/S = wear_suit + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood") + bloodsies.color = wear_suit.blood_color + standing.overlays += bloodsies + + + overlays_standing[SUIT_LAYER] = standing + + update_tail_layer(0) + + else + overlays_standing[SUIT_LAYER] = null + + update_tail_layer(0) + + update_collar(0) + + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_pockets(var/update_icons=1) + if(l_store) l_store.screen_loc = ui_storage1 //TODO + if(r_store) r_store.screen_loc = ui_storage2 //TODO + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_wear_pda(var/update_icons=1) + if(wear_pda) wear_pda.screen_loc = ui_pda + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1) + if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/accessory) ) ) + wear_mask.screen_loc = ui_mask //TODO + + var/image/standing + if(wear_mask.icon_override) + standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state]") + else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.name]) + standing = image("icon" = wear_mask.sprite_sheets[species.name], "icon_state" = "[wear_mask.icon_state]") + else + standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]") + + if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) + var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "maskblood") + bloodsies.color = wear_mask.blood_color + standing.overlays += bloodsies + overlays_standing[FACEMASK_LAYER] = standing + else + overlays_standing[FACEMASK_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_back(var/update_icons=1) + if(back) + back.screen_loc = ui_back //TODO + + //determine the icon to use + var/icon/overlay_icon + if(back.icon_override) + overlay_icon = back.icon_override + else if(istype(back, /obj/item/weapon/rig)) + //If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc. + var/obj/item/weapon/rig/rig = back + overlay_icon = rig.mob_icon + else if(back.sprite_sheets && back.sprite_sheets[species.name]) + overlay_icon = back.sprite_sheets[species.name] + else + overlay_icon = icon('icons/mob/back.dmi', "[back.icon_state]") + + //determine state to use + var/overlay_state + if(back.item_state) + overlay_state = back.item_state + else + overlay_state = back.icon_state + + //create the image + overlays_standing[BACK_LAYER] = image(icon = overlay_icon, icon_state = overlay_state) + else + overlays_standing[BACK_LAYER] = null + + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_hud() //TODO: do away with this if possible + if(client) + client.screen |= contents + if(hud_used) + hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar + + +/mob/living/carbon/human/update_inv_handcuffed(var/update_icons=1) + if(handcuffed) + drop_r_hand() + drop_l_hand() + stop_pulling() //TODO: should be handled elsewhere + if(hud_used) //hud handcuff icons + var/obj/screen/inventory/R = hud_used.adding[7] + var/obj/screen/inventory/L = hud_used.adding[8] + R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") + L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") + if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/pinkcuffs)) + overlays_standing[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "pinkcuff1") + else + overlays_standing[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "handcuff1") + else + overlays_standing[HANDCUFF_LAYER] = null + if(hud_used) + var/obj/screen/inventory/R = hud_used.adding[7] + var/obj/screen/inventory/L = hud_used.adding[8] + R.overlays = null + L.overlays = null + if(update_icons) update_icons() + +/mob/living/carbon/human/update_inv_legcuffed(var/update_icons=1) + if(legcuffed) + overlays_standing[LEGCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff1") + if(src.m_intent != "walk") + src.m_intent = "walk" + if(src.hud_used && src.hud_used.move_intent) + src.hud_used.move_intent.icon_state = "walking" + + else + overlays_standing[LEGCUFF_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_r_hand(var/update_icons=1) + if(r_hand) + r_hand.screen_loc = ui_rhand //TODO + var/t_state = r_hand.item_state + if(!t_state) t_state = r_hand.icon_state + + var/image/I = image("icon" = r_hand.righthand_file, "icon_state"="[t_state]") + I = center_image(I, r_hand.inhand_x_dimension, r_hand.inhand_y_dimension) + overlays_standing[R_HAND_LAYER] = I + + if (handcuffed) drop_r_hand() + else + overlays_standing[R_HAND_LAYER] = null + if(update_icons) update_icons() + + +/mob/living/carbon/human/update_inv_l_hand(var/update_icons=1) + if(l_hand) + l_hand.screen_loc = ui_lhand //TODO + var/t_state = l_hand.item_state + if(!t_state) t_state = l_hand.icon_state + + var/image/I = image("icon" = l_hand.lefthand_file, "icon_state"="[t_state]") + I = center_image(I, l_hand.inhand_x_dimension, l_hand.inhand_y_dimension) + overlays_standing[L_HAND_LAYER] = I + + if (handcuffed) drop_l_hand() + else + overlays_standing[L_HAND_LAYER] = null + if(update_icons) update_icons() + + + +/mob/living/carbon/human/proc/update_tail_layer(var/update_icons=1) + overlays_standing[TAIL_LAYER] = null + + if(body_accessory) + if(body_accessory.try_restrictions(src)) + var/icon/accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state) + accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode) + + overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) + + + else if(species.tail && species.bodyflags & HAS_TAIL) //no tailless tajaran + if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) + var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s") + tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + + overlays_standing[TAIL_LAYER] = image(tail_s) + + if(update_icons) + update_icons() + + +/mob/living/carbon/human/proc/start_tail_wagging(var/update_icons=1) + overlays_standing[TAIL_LAYER] = null + + if(body_accessory) + var/icon/accessory_s = new/icon("icon" = body_accessory.get_animated_icon(), "icon_state" = body_accessory.get_animated_icon_state()) + accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode) + + overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) + + else if(species.tail && species.bodyflags & HAS_TAIL) + var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]w_s") + tailw_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + + overlays_standing[TAIL_LAYER] = image(tailw_s) + + if(update_icons) + update_icons() + +/mob/living/carbon/human/proc/stop_tail_wagging(var/update_icons=1) + overlays_standing[TAIL_LAYER] = null + + update_tail_layer(update_icons) //just trigger a full update for normal stationary sprites + +/mob/living/carbon/human/handle_transform_change() + ..() + update_tail_layer() + +//Adds a collar overlay above the helmet layer if the suit has one +// Suit needs an identically named sprite in icons/mob/collar.dmi +/mob/living/carbon/human/proc/update_collar(var/update_icons=1) + var/icon/C = new('icons/mob/collar.dmi') + var/image/standing = null + + if(wear_suit) + if(wear_suit.icon_state in C.IconStates()) + standing = image("icon" = C, "icon_state" = "[wear_suit.icon_state]") + + overlays_standing[COLLAR_LAYER] = standing + + if(update_icons) update_icons() + + +// Used mostly for creating head items +/mob/living/carbon/human/proc/generate_head_icon() +//gender no longer matters for the mouth, although there should probably be seperate base head icons. +// var/g = "m" +// if (gender == FEMALE) g = "f" + + //base icons + var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l") + + if(f_style) + var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] + if(facial_hair_style) + var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l") + facial_l.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) + face_lying.Blend(facial_l, ICON_OVERLAY) + + if(h_style) + var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] + if(hair_style) + var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l") + hair_l.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) + face_lying.Blend(hair_l, ICON_OVERLAY) + + //Eyes + // Note: These used to be in update_face(), and the fact they're here will make it difficult to create a disembodied head + var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l") + eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) + face_lying.Blend(eyes_l, ICON_OVERLAY) + + if(lip_style) + face_lying.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_l"), ICON_OVERLAY) + + var/image/face_lying_image = new /image(icon = face_lying) + return face_lying_image + +/mob/living/carbon/human/proc/force_update_limbs() + for(var/obj/item/organ/external/O in organs) + O.sync_colour_to_human(src) + update_body(0) + +//Human Overlays Indexes///////// +#undef MUTANTRACE_LAYER +#undef MUTATIONS_LAYER +#undef DAMAGE_LAYER +#undef UNIFORM_LAYER +#undef TAIL_LAYER +#undef ID_LAYER +#undef SHOES_LAYER +#undef GLOVES_LAYER +#undef EARS_LAYER +#undef SUIT_LAYER +#undef GLASSES_LAYER +#undef FACEMASK_LAYER +#undef BELT_LAYER +#undef SUIT_STORE_LAYER +#undef BACK_LAYER +#undef HAIR_LAYER +#undef HEAD_LAYER +#undef COLLAR_LAYER +#undef HANDCUFF_LAYER +#undef LEGCUFF_LAYER +#undef L_HAND_LAYER +#undef R_HAND_LAYER +#undef TARGETED_LAYER +#undef FIRE_LAYER +#undef TOTAL_LAYERS diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index ffecceda82e351b6fc7e920597c14640c1e9d9b3..1fa0f5c3a222aaeb0fe4488105a2cd164a8597e1 100644 GIT binary patch delta 14967 zcmaKS2UJr{yKWE>6$Md>f)E50r79}DC`Fopf&x+n6loz+L*Jku(z_HzK)NVJq}Pa2 zrGpd+5b3>ymIOj_Cw%`ocb&V=x_hl;&u&xR_B=E5jx8Q7oI4uB51sUWWaOsu+|}B} z?xmX@(g_Ch{E%wg9>pnrN*)CT#hOOmMc!=75qo{~^~E@gGe(cgnnV+`ZLeVtc3fYI zJ=eu}aS*I%*GtsHQjExTd;1tgEL7A$Ciu&{{yIxqa^Bf!?b;bMcr#@X{bj#)S*X>@ zOq$ddbh4P+FkQjSg6(wN=906!k6*dQE!^ZjXTUMF(EI-MvDNi75%DM*UZ^u^<3hzo z!prD$Bkd6%CTT<~+C$@x^*pGS`KwGXv4iq_y-`^4{oD!v2Rp>-yB-)J6v~9lbFmcx4^t9)X z-;6u{VYk&p@wZF$YpYFg=#8Kt@_x^aFS8{_Lx*NLBhufKd%FGZ(jBDMJQ&cu%k?75K&hPIo61t(|F;U+6Bw!n)=U$O>lnNCwoGQkFr=Cv@uKU?!^B*!Ut8RpKA=Y zJ2h`I?)9hDg`gKQ!F59V%IMR=H1ubYPpIYKlygo~45@B+>&+m7bmClcKSkW~q{0Sy zg(z324|h`V{+g#JRu+@PB`K+Okc5s>eWSu|wNcE(v}2^i0!c`TN%IY{^hEn7B`^9~ z*Qs=fI*N6cpwQY;=bVGWK0xRjxYIdr={F9Wm#^QIWUnc`}H|6wB$c9GRi3@1oRqfWG z-sbe;`o#eScBRoz#r1z;mV!R}hv~$X-bsk}%5IQ_c?=d1l`AZtGt8 zLG-R~iVS_MU7R6Bh$6wy##xK;bGq63^>XG-N*DHgpQT^^EGhbQl6VAq=f`4<5tfn; z3-%}%`>>)USjhBCH2am}wUcG7X+OKSLtQ5)4e40l|Lopikq-LZ(#SUII`S^|Ny@Y6 z&YaK~Gj&7+Z=p4U-B^ z{qu3pdqsZmqQ@~m*IR~>b2|s6{Wsq#F)-?n+6EaM(;5vqIA^Kx?y7Q&*wt9gbq?wL z@#MOM)BS^qAFAzHqCI_5b|+%QR^%tOz9iK%)%|j|8W%b->v)+@=uzn7`gXsQ-Ub`# zaMS%LqThz}9n@P)%Fb$g>dil;>q~38xx}nM^2_1J){oz84JS04;r#v34Hj6m*7+(e zescfHp4ZOm{P5r~99vAG8-}KeR(rcGOYhNHZ9|b?HKODKn-?$8KT#S|yIyVr+ zDWcajlwI=)b@t(r389d-M7X5=tKXN@9Yf!mAwKW7jyCPHtB6@Rzp=i8+(L^7cC0w``qb7|LnH33op`8 z-L6n~r&qcc7SEEAN@{^t7{~*PyL2*BcNt)jkmuMvobq%tuKawiG^@Zb;V^y;HKiuA zV|{ZA(aodNGUjD}GZ}bm*hKuB%6r~eIarR=?1jG>U zqSS8PGw{uu%>QAPELwbQEA>s@NxHALKA8~Weq2;tNbRX_t5K+u-KwY;Ew|J%tNyJs zCr9+S7R^x@>?yNNo_YA$zJ14*ipNIkVc`;cRi~WZ+c7uIF5{VRo}Rk5Uv-h@S?Tw< zqwEObp~l@o+-{c|uGO%y{n$w!7>sAo-(@d9Q(vAO%@56n>Y1|hW#T$xuNJ*C%d*Hs zZ1#TmJeQ^aVJ@mls7NM&L%?Z9|NT9fU5d)LK56r7zK+WUGf7{*!(aiwm+PF!H4Hgx z#m6Xk^qkUg5Iy_`O%x@_w{F*dVq!yJaXS6TaTxVzlgs^{)XPF+ne_4kjQ~{V;3s)_ zAJ!!6Lg?G5n7h5%-CMTMQ%`Sx(zJ!0xw_CRG9)C4z)|b|qUYPxF+V>)t-a{fVJ@Z} z{O*_95A_6FM>uYvmoXiKMfq+rfy#Kk?CH)Z$5wYYJn_BGz{AVy!&JwT3^~X)d}CGQ z&`Q5qbXqIYu#Y9Vdl`xf-dpckHc_R#!;9rGCsf>3Ia$)RZ@SqRwXlocdSf!%&FSP` zanO#Yc(}Q_HMLyzfD)%rZf^e+na}HG*ZTn_Ja=$#VCYI8WJABV4ZIu9(7Z6chu3I< zUf9+=@C>QwF!1GiY}G&}pCexPMk}x(ETn&N(`2Sjlzf4AKxki*PR4)$@8&>>KXEj& zQscl~@|SMwUZLN)BCgJ2U;o!*-{!QoruNSVJ#~6*p^X-!MRTz+%kt55dL}8pdt0eU zd_GySa3C=qPw5$*5~nP+3#6Yy)+}C;c3XIG>7JUJ8lg`O-oDkNi1g#kzTD967_QZ4 z75oJeu(UaXgR0{@*-@#&)yT)2l|q;OOU_qJ7nD`-)N;#CuqFDC{){mBwMK{YO;M7! z`l5XOi?WF1{q>HdhFd7^v4Qw8Npgq^2|&&X+ceKGch=r+xw~;7xwY} z(oauyq(jBwTK3*;R=DX=t0+wk!Gi*gsf{gvaT% zIyMmGK5+nW*6xYJGR=GGy~{(91X zM1p6{yC^!kIaL%N*fZUOBI&K-+SQnI^YR4R=C?A)Zmf79CZ=LE*_%053HMU~-ps@t z3qM#;3k)AAl=XQ9jG_0#(pfbKu2n;L;N%;b^32z@FdFlIxHILI^~4Kuy5=x%K0)yM zfFWekcc2ln93TY8lEXXwI*LdN;VLQ0Zbh34}VmNA74{ouDOYo2|Z8nKmg{IU@=Xt$XJxa{nm`f&C52ddp3-o8OLgIK^p79Ko<7Vx(Z<>GNXKZ0}1cnzo!d| z2D)zBTaIqocuaa=d^EJ;+M-n7)SEU_H4Dn3UwGu1Cr-Ylr;SgAw)9~%bOQUN)=z1N zvsrChoK;N>D}s*be}4TX>xg6MGAu8$F!n@FZe^LpIICL}7t?y(1|bAF^z5Z z^=D0Gv|bLowP#8-?R$9`{*0-PziE_ht4WmWUI$TE?ALHntw`)W)-0~Sfmp^4Lj?$Z zcjnxe$zLwSc#R8`gGZJJ!3C%Qzd4H>Y090rhJ#fk)IQI`LRHK(uTHgTSymkKf|+)p z^9AhN#HeVOhcSKDy~ETO!pqg5$_rmu3|FtBeg%KIcD-mi#kBCI9^)3F^3N4B$4A4Y zkS$=8S|%nYo}1aJ9ud*e9p%ulxye=kg`U`0W;;j6G7ielum#gv^?cgb5roB+D_5F? zJyehab|q6vrm;VQ7HZ%U{9c1epT4o(jT8;I#=BY0iHt8FHWkxH@4HR-NwEF+O_)=P zw;+;^j3{gQMd;NwUZ)_eKvL2lBE)<QnPn8%XfyfKjdFkw=H-oyj12nG+SV3AYK2I_BN4@X3U0r&wkyP# zVN2BZ0V(nU{l{{g{|^N9%!Uw zs$M|EM>1|$(J`hpGu>=i9mbk|gSn6g!b4jHC;)N-Ebv$eBH$qkJ`i}nAsMK?@R~%*}m%SzA^CeVz3pBC*epOWZq{4 zt*?mF!n!f(`g$od`e3Q(d)-QLdvj*i!*G#bg1jt>ptTrj$u$?Bv)(ClHDNSKeds$0sUY0JCEs&B7P|(=3zp z!#5IgrejJ;_3x@A7ge@GinGt**Yg^ZiNly~PQWinB<`E|ZR3aKKI`V=Ml~0CWM@z-hw3-tz5fqmova) z%Es&4bl4x5R^^mhz~NKa+i(B3sFaj(i-tex<1L!Y|NVCk>JSXrPHzi75ZIiI{Tcm6 z( z=VTi~+9qfrF*;t}%G<@x{fCVr9n5cvRfH$cHb`&=UBKcxLX&oqVN=vNve7vE#QEXT zMa5Vq?1lFpyA$w8v-Z`3W0%HxaDQ;J+;sdD?$8&pL zt19&B%EZdqn>aa`^HDh&e>oTUx>-2j57}nOH`2y2$(+(S(L1)jUH5ZP@-K(l^fJN_ z*M&4SgSOr$RuGmvKUd-JCgH+M%#Pxmog8Z9Zpapwy5s6`UX^0H!f55Ua|GUWF4xG@ z4$q&tX+qRtzvwZGi|xDirzR)=!AEtOA~vH6Cp+Ual_i#iBMM{_)b3FMi?MTQ@+b}C z_rp|~RQ=%c5M~`o1F>w`BBjtB_j)80GdQX$S371c=E^M;^G3u-{cSli54Kcaj8bo|~--Rud*XGfIo`sX#110Kd98mrvp^{}ILFvdYe6Ao{FADkg!& zeRJ2+w?gzjWXiExQ*?tyM{hu0RtCp{72YP!?TAZlXE=`cKk_sUKf6~|NJ_!6@7vv^ z$ZTc-UHtxCza2akk$~B4M?ZBH8@&GzIDRX zrSqFwfC_fZowhZS@U>hbq~+S~>44RxZCT|3RaC)Hs(fHEv_zmD$I@rgu|~dVfMW=3kMf?VV6k1XqJ2@- zf6`_vu8I1arnytJWc;gF2c(=a0{K#Xh!t;+h(8&%^CoJqs_+2|*gs+EP1wgu(P*kd zAbG6J+20eMsnnnEOD_Y3D!Ju4!X{%I`jv!<6JVjR+2 z0W>9}{_S+%e1s4HA5OP@Nr?gx7DZ#=8hc1k>kW8i0_5layul^~2gnuBN{^5~(APB< zMYj}wF3i{vUzWa}erfK8w}br<%gH-Mxs79fFX~MpU!>_;L#h9h9{t_pF;-I(u=uni z*5X1Ndv_gfPG~Y8*!(b{i$R=*cRtkV>$CO7*f@)N`-b`&`1WEGR;~Gpl$UsmE?7XQ z8-hGCHKN8bH`MY*JSjpi+|pO^SSy^HPx5N1{E;>gIb`D^Ui3$$spF899mEv=sc>I| z4H7g}^Eil^Nk*{wo^O13pJ>8$HJ%afAj^iHlyurYjKs9VT2_{>%2-qcK!U!F@MVK` z;6wAP$ePpJxY;%M+>6iEemnl`SupoDNW1I37q$pJRxafGjDl10DZBbmzw}BUGV^vr z)W&t$w7E*Gj1vDM;YukwhwcJbf~CVz=-wm4)~H_Ly|KEIqK)LpY3#+oJ`gHy&F3c7 zdIZ^UJ4V88gey8L`bEO3y{uCQF2HJfh#WM$;+1ewRJv|9?CgO-=U~jjLW(#WTS%Oz zPT2j8!m;VGq5ZpK?MSzo;ErpT=1zQyMh2LbUvg@z{<9dmoGd^zf8HXtQ`dJ5(x{NN zo-^iauFySOqKU9(Pj8&Pzg1=i8_ay|v0J`i$)@DUO?hGNEj&hE2ya|g9N`>Iv)2=K zweO}{t}Q2`Y16MLspUuro77=oete_T7wLSP*GSes+}*QA#^av~8OvswGzFQ!(La)T z*?=ruEj^yecW3J4IgM5mNcfEtJ10hIIz_d3VS$sm`F-`Uxr z3m-4?kf;dmK@_Bt^#sgic)zzie=yDF7sW{jS?z0Hw7GO|*n7j-cS(}ccjRu|jk2~( zRS(zk=mqSeF4yH470XXXq-K8V{HU~?JDluBjJLdi(EttYVgTux=K=uc?b#)VB2ZsIaFi?lYw_-n*B_b^ufbH8}W| z9=9U@-Z%3-hpj0UI1ezBMagNx=*7+w{2^c(N;h|bw01I$^2ZGKP+FnIT>g=kM49_rnrF%!dEb*wnO=L8>?(0! z9u}Oju^tcqq_>~AZ1u=gE(HT!TC4Wc)q1I2?4Q}p#C3XVT2uI?m`qpK;M+ZU<|7Vr= zj@wdkm(i@Ib;_^u6|kgL^|zLm!;JQlNRpDu&gPSVPZd+a;=>I$#6p*Spu2ii58G?* zs2h|7F~u95DH$U)vwh!wa_Va}IVk@_xs+pzX!)^-uHoWk^MzMcbG&87XTIdVdcgJo zMiU^eS{$H+qy3~{d@5(-Vd{CJY5n%n&A#*o44q^qAGg6&8+~U6>|k@w^m4B~c9^ zI0~1iQ)vVE=A)c)1T6l}eS8?FX)GbZ9W#CiwN%qxRY zVebU$MY@(5Dox%Gn}p~0j02i_YkEY1208xcoNWYHFWCV6qC~M=gbLKc&C%l4Q4u;C zAii!)`Ah@e5x;X}WJpAtii?X&Bh28Ti06UEvh=RagGE<7=n`NJ_xb6mWS>fb>-M|7 z+t()`w%m*}nX6Uc3VanySY89f4Z|(VA@_~q`O?d(V!?k1;)R>1B`2uu!kI?7WsRM? z`#BVgL@3+4$)@18A9jqNYV=?jG9v0IAj=-6?q6i(yw}txfIiKpPjH_zDdq&KXn*2D zqk>-D+$l_Ali#eZ3|fZl4K)Cn1U+G6Wc0Jmxj7121Es4}i2=^^t;i!`K{BQyOtde4 zFJ5fzL=T{}z!lp6xF%%-+LTy5+HES&0K_#SLMN2%uG_PFabTkG_^Lm+ z1}*H33?sAn*eVg>eXH>~gxrH*9eRM;E)YI-=i7QpN*$}xtu-pYs$DNgqS9q(!7Z~n z8npP%@V+AmOh6U})Cxy>sAfP_ub6J9CdOKg0m1;!Hd^y>Eg^Vc+y#QJ>A{4+hZ6x~ zv+OC6q(x|f>6E8WhoJN0qkU7Yt0G@cs-^>$d<-b$6hxJR1{!Py!uTE9>0%}%Mccs} z+4$2wsi{`mDtOZ00y#otb$4FHJSg%XMArFt6bm%eBTeI|^P<;STfvA|CC;1ml-|WV zc^+lAimB`;C&$Y#W592#rABEU<7=8{CtRsqVdTpkn<6G^tpGK2~b-cplw^DPc=8)X~7K7{Kbp;xIL3$ z(c6DtW0PeU{l0p2>7`p~09R$;nxsef-C8$M8w6&(LdMnh*W7%UJg(@Eij5jddm!5Y zW`vTi7k<85FCn&!|=%Bpzl<} znnR@EvVcGQS`{x}kSNip#DgGTnjauTCsdq%W)5-|Ye6J=UB^tx z;5l?Lf2}ECxP$qnr8gas$oV>Dl~D}lb&g~7Yod62j#!h@@ z)G&9F<8m=uIa&$uBGBUpf<p0TXvB%3v3E2QqH4qK{w`dGOZWwU#087W z$`-WT4WUse*S-A9%w|(TGLAl2!PJAKhxrTQjJUYW2AW)T9q*lRj(xb$B$i@aQ}LR%TC*s_mAPmSBtCX!g364d&__;1Jn{ zxni$VntDCqKbO0r&{2YimIF9Mvd39>FuKDz8DKRJ68ld?w+!>PQ5OkvZL}>zDv1LT zNHThsg{Dm3(2+BFz}dGK*`OMRq-2L#QQa;KbiTW)@L&*%K(bk8HnSVHb^sl1U-Y@z zn}1y4mPA1U)v9IW1((Z4m__8+Yq3;8ofVN1d%WD823$fA+XcG#$v8nL=)~UMULuS7 zu&S-2kt{MSK*)~6!?9Kbm|cbkiCuP448NXu&O!}J9?)~s?5r7mY{lnq%IS7APUnO= zMqatpSnbhW8aDURHl>*}AF;C7s-`-9Tgv%bcVA?k24 zVx2hLV5RoQKHMYIy~rzHr-89`Xji!M9Cswre5di5IV*2FL6hP1=&{tecs7~UR^Njs zTr|9A(Go$$6|lj3VrWs`Ag#uICw-207`tmD6+$L@4&N{LvB8|6#eKY9l;r^=QMC5% zA22%g7cX9TPX3_7YHOrwvMHHuvYf91gcoj)vn=V(HBaDKB;ss*&0aoIv4Sd@v5v1h z+>a$HiP5FZ0y3iL_HfN*z1Tp*Df*U^2|}L(lXy(P;zO+r)+Kz)TW5B^ZhE%JEF(m{ zBtKW?_T#4RPtXcAOy_GwF0)Shu0(qWm4T?r%4VgzNdQ}K_06lV_8-nYnqC+rOyyn? zDE#fC%`p+4iMd?Z6YBO67Uv=pmKn#mqes@Q?s?9}>n0Lmo2S@LfWh8&w1j$c=&U6a zp>vZi;ma9K-q-(U>hzp7WSg?&dU?D>({2LFQavW3Gcv){KS9$CKyYn;F89Y{VqBHd zhw8R{fam=O)2MnKe58Uwo;->?>dkV-w##Ul+U!$)W+8 zJ`sDButeAwJ+liO;CeV*=Ik@+P9ZE<>}cP27y~iv+Nm5nhj*W(7TF zRiDw)oq4N0Jarwpy#B-je+1V5&(4Xd#kP>_G%;<%59gkYT+-E|m)DM4AdPqy&DsMh z^8x-Lfr_z!4NZ=thIBiKjZf}j$c^CS1?H7^)HH+IX$xr#FO$HjbE}Go>5Mm0SjytcEZz!ep?uq<6`F>1PnMZx>5yBWPmeb>(o7 z3Sm|Zk{(Qj5b0fg7xu;~rUB!VSZ~;0%d9NrR^-@ki{+a%LyfbpfSRk8i)ss4tvb)E zMO{4M*Rb}Qp6Sh=?s~`k7Q>p*a}ByP7F-kE-Q6#Nf0jfeChFcrNx_~O`S{c(A&q~< z&Q;LBzV;(V%k26vPoj$_yq61KLIb(lQ`Xz<6ZJl?wNoTQqaX4ReHB*L*ON+0ZY+Y6 zuL8V+jHj?NGBSouSU53fPaUB;-@=y4`i~$6)^R475z#;?u<ozs-FlT!&*uw7}bUIga^?&VZr}#eUfl9jlLDR_cXuMaYhHIiqIj++ zXThQJ9s5?bpW{}umBE$*40b1R6*P2_iz}g_p@A+PS8XclXlonO*Z0s4oIq3g#l=Z4 z()~R8wgSN_+{;&ixBhZ|?{{*8|e*UlLMb zi!eYM@uo;_^*A#PgY9fBg`(zIfH>dMTs0g59_>K^*-fc`^Kz8uURR5B>OAOo&P+|W zbxeZXZp?tb1T;s_FI0ThuB_d;b2)k6i(_;;p16nLW|(u`ADNTsy1jM)l`NJ#ncJ%G zFpJ84&KZGiX@IMJthBYr49+8u+JuILfOWI<~M|H60~e(A+ye=gXkb6iEtE zNb8vw8kKx^u*V3|O`1w6Uy7TAD6edN|OItSC%*rpS zB~c-(q}njUQ$+f7N_r?ahy@gT?Apfk-^SM&(qNx)-lh5h`&}+LJZZW$I%!N%NH73^ z6G4UEHmW%Dk#U$MEMO_NV^+!aR>;KA5p_Sm`fWTu>EaDuC2CR#I0~-Y&}e7>p31XV zH9N+Bcar+nYwP}jfpf|D&=AmVEenhE0i6e;Nerqg#wI4JO@6^f z7U+gu;GILm!?F(H4gSo|4XdhSC;}6=-1%KR9<0$r-N?NKs7*I`O>o8nURp1bxo-wR zXp+~K$!4E6blGO#(dnEBpfM7^zy@GQm59>HM7``->5FLJNd}7;IC&#jTu#nW-oNax z)x^;L_PS$vv+r6Jfh7nGIKWNl2~65^~|ZSa<%ZQ8JFsfX!1hz%&!C?or-!k#j=Gn zh9p}ALWERSzS`xHym}*?$HvF8Y#PXHvK~KC`>r2A6utbMeB3SOlg*Ltj7s zu)|o=oTS0DL!+w7Oy|3s;&PCju(t`9y!RuO6?X2jHfDC{=bO{t{PuT$AUF|=D=Vfi zSHA4-dMp#yS5{8-e2~`nOyzZz{?p)B8&4R0v*7ph=TBbV{_$}{`RV=LRUml@$C0mp zZx~|GBi1wNq}mW&a=Ri?fD%UPxkM2Xql6dHSowEg`}=u$d9`VgEYQJzRg_o%CXu>L z*4z8{vcGA>e_|g?MQj@hk;Lz3zUo_9QK9MJ@Fjk@2xnq!Jjbf2GUn(LTRo*T*2VqEkg6F<+Eoh2F2zgNc2HPNXSJQw@(|%U4$f2 zvpB6JQPwax^rHI%Gjr_3gt@fq-2D~$I1x?>$C#Thy48`$;*d^1*vg+$wKu`R469`s z)TxA>U2H2HGUfLC8~9_tYdTs{R76B1++XU-1qh5^&%(mu>aG*EVf+aR$S??09-Ek$ z=tXg<{&4ElskY9}h;oU}&dz^mX=&p+X4#q)A=kNx6-=dAS@r2ok{X_76RAi6sR5>f zn_|2SyEL1MNtAWJb)TWpmwVfbk7m##AR^GuY%dNBjczp3!?SrQeLemP6vYk-J=`~j z*h2wb7bd8Y=Qk-y5HX3hJY$CU6Yvvp1qD%Hfk4DO?(Xg&Pis3b>YorHO^CnCG1#MF zd3iZCDqsO1LFcf!p`id!P21nUAE_JrBO}QPRdct_JO?u(Ra52bwC+%mX1ydwb0^ueo=B-@QmX0gUHq`SDVaKJgNmVUVZ3zJ5?^nfB;CPP+Wb z$;r%h5ipb>!733B$kWrv#>VEEqvL&Wnj1&T`imwBjWxK;{;Gq#(?x6|Y)zSCO+{b0 zbH+euVtQJdD2L%cq`XU%tgNh|sb$xA%2FpY1G! zMw8uDd!FEUKLJk+(y9DITw7m9>A@Zvlg$@RgE!`S;HG)I`g8Hkho8%uH{F zG9-Tc_VdEy{TPgp#leyxLuJbQ_a}qi0NDL;&?C1MG3a+mCZ{=K{P*u$>qvJu^?o*4 z8W&3&n|sHO9m~$iQ3ZonQ8`&@7UJ zr&Q7#%|I>v*By{*_T0(}QnGh&m>*wP8rrn@1_SmhHa$H}jp!ikyaZ`#joY*bcBOmv z;?smBn1kagECms^AD}62lV36N8+b9?Z@aH<-%b9^uzKj{zwo(m*l`dzw-;Y+?Np z+V}4pVHkmrsKPn9xy`q6*{0Pls-vT$Gc)b+LHnTa;UZ;xd_1t*izUq-20QIS-L`JL zU9E7U-*c`#I;5@Ib-tkc?iI?61;0O8nuuyek*8%iXRusYVze@O9G6P5#VP+o5_=4_ zU%M`t-V;1J3HV&P;ftTUSOR%FfnP+6u|NXHE$Yq(S zNM!Sx3Kd{mp>-H85)nRX-%(=SdW36kcNc@~upl*Cw4uq%=&&}^z|6`@N!&DLq{O=M z_wTo3E*&C4`=X{*JSh@R!V%v#AmH03vB%q2mCVjdnNeKE zJ=XKO>UF_%^)JZF(a_b^J>%DjqW?XUCC@Qn%5zH_({!x<)Ym64XXgv1%oMs}z0TWr z9a-;iaB|K^diP%AX%6F)7=5{1SV;wxI%wku!zM`UX*E!@v~5&XOTQ@VA-u4-cw*oY ztbKkfkS(LEPy!_1%>JO~_Pk^6xAR!66=XZ`y24*|b#;l~x-~<>NT!#ll8_J1i-d~qF!e1nn$j?RdO|Rlh)O#0cy4>H^8a@Cleu|h>w247PEoqMx zqYV^$9^>_tJL_s4rdo=)tN$agD7VzJW0G<6A?+LJIx}rS9Sh*$@#6%QqIxRPEq>W&?x(}S>-bchhP4u9`_DS^0ff| zY~x_QYR@i-+_;g7vl!ES0M=uF-lj;|T@}yHI6ZhJ5?*KLsBe(tY?4=^{Uo7929eq# z@%%AIr8@`a?PI&KA?nl1)rB|9j~yTTJe0{a=33p*?oyatLFJx<|NL(gWErToqMz~= ziERK$e*m`_xE+v4rn9yKnKH7nKdqvx!=Sm&3xG5EOe)l`@-|dl^2Tm#d<_Y4L!nF% zw7_I|4{b)3JRbvXB5zh4Ck{)ftn-2B_0J)LI+(S%J%+Nde#FzBQd?>XD4O9x}2~#HltWiRNNv`>_i$AB#F96vLt0ofJ!0qE>jQ) zL=d(eq9pwAt4O}#J8$7ytk@2@&w{W8=ml{?Oo{yE5`{ONRnh76Pvy!tlb4ud)7weR zmlBNnIe60j_v|Lq+vi#g0j<$9F{%A{TyLdG%I@aPo8s56KOmT?JbU`|<3=r_4`C|I zEQW21LYKkt=;xzFn2;a^vt4xI&iZ0vQpvbVhI%?<$}>XShh(812u znj&iL!=SW!%{0Jcbp&FyuGP&p1_6W|TTvk)?X~%AvH=tX=phJ&LVa}odS4Xfe>1I^ z)UhjFHv$ocTj$8$3wwDI?pWWLrAspZ%9I2v_zD^X<{_n_cpYwT^o8X zZ5r*p33WLX%X6V93;Ftuw|T`~*6UrggLisGCs})&^j}rC_n$2LkU;_VfPz*O!j+nf(Xs)uEi*pu^56z9O;mY}NhdllFJrl)w)IftujX3G1ut zvJJcxhFEAbeTNW65>p|!LqpR-o9Hvd9)EJYfisN?a8EHuC#S@Wj7wr-3IK1Jsis7L@+>vdAkzaYG#LU@FTs#`F+7)=0emu6O=* z8qn|BsQ-Z=lwTqs5y1MWItP{J%rhQGxBVv+|5rdgjIP$z25vM>d0ObUAZ_SZqhaCy z_7+5X@iQ*(`=i=i#Z?B;1FP6CH+TmAw--q-l&$E_cpO9ZR}~J7Nxm;cYh{EPPk|FbLI%5wg2O(DjMB}wWsjY!g+%QTF_AH%x9^r`^^ zgZ^#5kYh`ix)$*2h|gxCNn7Lpu6T$?GxHo) z%(Hbh;II(TX|lE5gVTpRCl@Dxz~wT*t!64eLsp4^9zV4R6&Fw1SQU=0rST9w@I{Jo6- rK5;nv?#OYlO9+k_n?!mVeYOMWbIZr2@S~7E^`?fZj!Kcz(^vlo?o@*( delta 15315 zcmY*=c_38Z-~UMHld@C@SxcL(ghC8ONT^h@OJ#}4zAu*~J0WDxmLw+G!;F2>C=y z-^bX^m@)G^^Lf6{?|Gj4hdKA&bI(2Zy}aJ9_c?Ec3rEM7kAA!WaeF;^?xOnI`K6PM zgNu#*TNunEHO-*?Ew3D#;+UDx1^pLO2*xUcl*Y9-AtFQ8?`qYA>f~3Ir5B*XbFUP{ zBSqjWF2w=+VNaV4M>6ywh_pz;3=9cikybhe@5~g7_$ifDsL?+U$5$L(A$Q;T=RZV) zA*alSg4TgN-64I>z?>Q{;|WtU#3^kb0_mi3V7BT-Dq~DlEnQ@sJDo7pow&hWz7g*b zeR{Y(VtkrTqP#scmJ#!?N`C4tlk6^bgK^pj5pd}gIcsIxIdF}i@#jJi^v`e2-`KlS4H*Mjp?qK3pZkOHO*bR=Gq%P zPF6C>c#J(Xmhq_8oDo0AczUrWxcoql=J3)H#jA+RV$KCPz4ew9+JsqiIxbo=A1&5p6pTy#VC*t@Fn1l8C#hNQ3bmacD zRqkB8t0i2_B3t@bFG{N6&!?|{o|n&%lFy{GoBeYcbr5sjZf!NL@yL0o5gR(yB>iE# zaJ^>jrJT%T7~asF<&PPRVR9h35CIVQxj9!ZNnDT(OR7@sOzR# zuer*(7KW=?<7QQjGldtSn_r(fdOtg9bm6!CpnLd+pRjGF%8Q&!cX+ni9>xg78+_bn zi~p>hcNF*d>h+XMJRiS*J5};1wCb1y$*DgrOHy_8igc^0cS$BcyHfiNq1i-a?Q$jC z!N#Jk{Xr=v=%eh4t-WlHSLXMOthhO`zgnrt+G1(#Psft3`QRcK4NpO0w|fK?Us<_L z`_!7wv^0JHI`r^d&3S6@`?+D}c1Au!Rpyf5koLHD9BMe{W*NA$T8xo)9_HR@Y&Vuk9>O5+V;&wCzxBW-n`88I zVktX`4W0Aglh7>JCyiY9$khI~4<`RGURlxVHkJufuc_7cwr}IwOW(Mel4!+B5NQl` zMPB$+5+6|`cz;cMUGHznJF1V>s@%eU{UR)Ksp979SX{j5NJ+-`b=_AVMzTHkey-#f zUu`7X_!eKCK;nn?S4nDm#|NLX4kd9_GTJ+zVU>yI(s2`tf7aWv5Y0iDS1HVCRxw(a zxBle2So2Kc@cWY-``75iJb^P+m;!q^x(G!f_#H}))r#1kDm0HTxyfL$0~OBxX1VQm zG31PTEO%IJQk#%T+t&$?ph~v!#}b2eO8+OeFI1N1jXj|3i6k#T+5RE|h!n(G|KwPKQU~g+j^(h3?#c-iX~Pw+YR<5SDO7x&*qm zxQv>v5xB58sgSyV2s=WY%$}@*oH3;9`<-bDB1?kkO@Zxt=%Cf-%MJcg*k8g}E8+}X z+Vq@R_>1Jc8Pz1Um+Z7^ZJ0%m8&sqZFz~s?EGWFK@Nxk=8illLj&A9N79(r}JMM(M&DPi~Pl;B; zo4u`Rw!>Obm2jJMVlHzVC7BqyN<6_*!IboG2@A)){W#bh#AQXOhmh{_Mk21gD&CFN_dEm2qf3BDkNBX~&seECP7a-n=yIr$K z$s#B*)>#UWR|a2mlkD!OuAO+-<)N=s`{>C|$fW%ZB_eu^Gm&`H)uj_UW{mPNSVu!B z0Y->%92WsU-06E^VqzjhiR8UGrw%`esi?2((}nZ>j>2F4S~bf)L6l007V-4b$R{`= zu7?Y2HtRbwu)c07E}P}>om}E7j%-ku_N($M^OcXn69!7Vo~ksc$1t%O+*)#%Vbiy~ zKCVu-HtLiO8BYuP>|(SdH(QQvUR18CuYke>s_=vk8|-}#%6%Q`hVo_M#}NK%63SCu zsYXg)dUdBZyy8_~%Yd-(v*SWNgabW%2_IH$M|A*O{iZ!b@u~Pb9=^5Ekj}#eogUrY z!ViNCd5jl?Mj6u%KQdYx+1WwHo7tr9NoDHtT41Evk2r)GIeCEaW~I9;D>Mr{CRnXjwAc?1zyex9dwFiLaBQ>JKy(>eGRFq*SBoh{|0 zbxH}RZjzcl>`P2uO&S6|0R`X)xl5~eNE6S_`TB(kY>2Fv+v_`rc_qdxcoUJ`{i0Y_2-(>ltiP~^fn8_H zNVG(@RgK|0Zmw4RS-}*>R$<3uGITTITh~1wCJ))2iJ6OTOWA~EWv)j1WNHpVZ`16^ z7HNsu)E+kz;?4(SQddNTuk0h2`>Ky|QnR0uryq4;#copi(^8yPyRDqo_eeq90`lkQ zioN+il@*}OUvp|eE@Qo^RGL!u-9~nB_K<>|o!uwin{PFMJwBpqauX6ZT-$g`c9{5D zDLJ*oewO`aUfrkUAPd_^gO$TqPv!|W;jAxJQPe*r*-rFSaNFlzE;D`b*zO1J$diuL z`7>#emg!&3of-Yx8uVCZQLM&=jnnc)+-8vbbx}e2Y6-~j<8`aNVFJ0p(k%mr!9L!c z(ZLie(qH!a9$kLE-Q%JnPED0&f5mDa-cT-v5`^9NcV!XA;y`+**spZnFJ{Mn+ObPi zGhw{xRSFeHOX?>_9VA*5M8+TIU3l>E$M3xqZmjmVHcMUwdHFkvhp(?ki{#eUDxQg9 zXpa8<8?*{)-Xovvnl*JtJs;mrQlGFhjadLzbzEH`s|4QL zV3+t7-Ia8CVYS|^Cca^fEA3=#zw@dNm+#38mxuZ*+t|G?eW|L+9}G9I>M#+b-fJeT4EV3-AQ3f5^(v9J9VWt?(+p-zH4VCImOvT zgb+c|#u8i!)h4TUJHdD**=UzUDK99ian%0-R?jhGUt;LqUp=W#JwcPS4{V5FPoA8@ zKJ(5#gyH^)qdgXh250*E*s}AEig2KlF?Bh!iCMUB{cz21{jCxxuJ1&h5+X&xVIy*? zQPer;PH<84CM}vy$IAgIYds)AttCjNJjg?^e^)*Ba;f-lSe7Ma)~yH9H8U=(V&kZg z_@Es>xc_s4U-3|F;`eq^C%F~Jus@Q_@Z|e&ObdDJa_0$FR;I?rMwNWww)u`kW+=|X zA^W88HUqGt-wnE4o9^r5+=D|yi8VMaUtiyzi0CC;&J$9z#WwS|-l|Di=4(BCSI1Tr zpPVl`Srqjyt0u=vNMsi>)@)ncR;d~*>%IpO)?V`M==1b1$KZ3AW)|ex{un#|A&*x) zJ@(L2=w38|X$1zHCPwx2b8)gxS8wXVK{-^t@Yr;&B-$yGl&%@(saB)h`aEV#+r z?EK!y9+s>O=$3{N3 z61S9@iK1Lmgsr1WZZ4%I3pm)vAvKZbSiAII*cDM9g+SXLgkeS2X8^dXi0N@kV!f)o1Zcr7R8;rN~MT$3nJynliZ?X zFSW+KF7-ep-;i|}N0buL_LP4_PraK=hG@A?fHbo5lp@EyCY%@>BAW8{Mgqp|GiKzs zm7sMz!9Yn~;oEqAv1Sv5468>OGox$6(vra|PCbz3_7d8YsE6n~z!a7|4*BaBqU4@W ziW{t6c{{CUcG|M2s}<4YH^;19oLY^Kg~0@2nyM;Kd~seqJ(bP6U9yqBvN7!p4-LGxR*P^Qf_rubx3)mitUP^1yv?va9C;iinZ6(i1b(sTO4c3cX@`dASiwr zm4WzUCHyWsBTm+mSBI@mn+^q3ZY@VPm=BFF{3xQgc$)K zUq5%>tQW72-Rvk^?n2cD$yT;$nqi8rNt73Q@ZrW1cgD32A)9c4{Z!d>$h*p}96{JU zoKEre7F~ZC0j7an8{@rrm^P>2mtXEuYR^jYa+CAKs@sf5?cp-Rag27)iy7F)U8kma z>p|RZQe&r)3j$#6PT*1i?zv+zm$QQH=F`>mfT^^S#JNM(qIMcN2`%i}vc#HNDb(5T z;Z9}@kBVhqg5(?a;guKhskIjXeE&f4chy}igM*ci)K-wg9?GWXrFmDUnk{W8g43Id7 zj%k{~&qGb#vp%BF*PNq)Y?v6a_b)J^X4S`fhe|}rE#-{M)>!_pnQU1&0_|jVB%a_# z>o}IKz;nCL^>(F{qW+evtXJ0g8Y#s~7#BX)(R791OR2dse#SkQqFKsD95+VJf_76FC;>l9U08dFd}dpF%TD#fai?T{=#!320tpi%G| z$Jqp^f1pr&e6aNwkJ;S1_c~2ga|20Pt?58JG^IrH4z}MgX+4c-1@_U{UT`Dm?AMl) zt8?{CgW(|)`)HN}AZ-JhT4+7NqYb!(F0=A^AA10!%Y^}AILyFt11$V=t23Wsa|8g#IqpJw`jWl0}Sb~f6K{Jc97gFj}LlpdFv zVHVqJ_{?beG!73$v(o9cTMiU%+7E_5yIngOp zD>*y^c5`<0^bn&jd}VQiBw$>!MMPo>GdvGG_1=);psX>IF53rKF4=<#eRAcVbrA{j zQBhq8KVLr6+%uyE6mzxaV(jF?^w55AkJ1ocDbmXCQu86sNh$Gu^AH{txmz&*XUDi5 zPnmCt_AUZ05+vNWu}W$LH`L&X0=5Q-UDr!a6@*Oe4gIf+$Hxj0T29q;DG9gfX>J4E z^4*S7rH-Vt*t0YYcyrmyDIA!t^s}1fy$2u=kkw~q*L5^>uezg;|DLYP`-2xq_4J#A z$b{d&%YGI6xlV`dv>Xgbkq;DMQ>4TcHKuEGpVgybHJN}==^OB?am$$bN@i8*Az$dnnT>XO|Owpc0&=eOU&)g1+2-tT>Y!3(7B()iP|}|XF<8jc0vFcUULcjY37Q# z(=+tU=jr#82iz{RErktuVc|G^tK)fj7gWNr2jiBTjdoftq_{9F@QN?k!g-1gIy;X4 z=s}dgP&%;7Eeg}nTyerccenr`B#AUz5%mk{gz{7;Djl`>eawA@OouY{>H}GSBvy_@ zJ5u4Hgx{D4!K<)hu> z`?1yc-Td}7t^v&fQ28m#Ahx~}PS1orHd*b_;l_gDp`kMET4 z_%q5bF}|uxc2>0H*h^0M%E};Tn84^I%~n~G7jQ?K=U;{1eP;NQ^Rkr)z{`^wXuB1O zI4RK}z5)Cz*RfIFb0wuqXBNb!%O~Eu?rG8lST|)9lp!2z{i5ymAG?+}-s{$&GoDir zafZLE-n9%5@qLo4P@JDhp@)n%Ma$~NeC&Rhi3_{K3*u7gwjK;^W?`tnH^Pq#$yS)v zLe6`Sr>E|Y&w8;5%PaKU^D*&OnO#AoY-R)3=RgJe7Sd&s=!$e0)&LwU5$X;Yut=H& znFOBO*9shXxdpkp+A`xwU_@r*E)Ze2?%kg9B~ss0yF;JN;tA#0gfhl9T0W5?Ta>Vz z;(k2vh2mjDi%um=gF0|1$Z+SH{UttR^4_<~h7fJbVl`#~fR-0-0WiJRE*xS&rnP>$ zVwBA}?_?p0Uw}{p)-@q~nz%h`vu+-gVJ^oW-Q{{6Dv=OlD^xCV)p}!EI z-?YYX{BqSDm4*dD2jK7D)Rns4bpi!83Ey#5*#Ru?JL{ua?ii;Y&!X4aKDGhuCN=%Y1*d)2r5PE4 zOUaOa=~?|EWSK@x6AztyVO2j%IWhUc)@~j>qfi{wJ4xmc-8LtNXh$MseOLg{8lus>kzgRG*DV z+3d>3EwDQ#Hv8M#*ER1?Jkus&zcY{ zM~nai{JrtbQ>T3OJWQTJ-^!mB(rxJ-oEh)s)8T>A=(%nvm$rR{6dElbH36Q;enp<6 zbzc4~Es5OT5s0Z)2$s+de4$=YbKz?X>9eUl3wgJ?B{hKSl03bxu8P4Q!P`7$;ezt? zkIc3gbZ?-D)C9ewe^pHKm9FWwZmLAT5C61I%~48ZWW*l7f0EEuUs*U*z>O7aPz{$X znv?|4_R4&tunt=2?6}W!^G94jeZ{*a!&e5m%~4AflYA1Qmp-6qCO(TvARyk_ApA=* zv;80dp0Dp)8e*K!1yNiq9 zxip5X=rR7!%LDqVIc!6_F%CG}3A*r<4d6o|F=+~n4cwz;@f%0F$sU)u0jotzv|oagyh~4iY$S5_C0pFUI(17 z`5w7a_OmU;y1stEU*n}sW?O2SjV-C~4${K{wMb)>6u@8-Erej^HVHEHO~%eyz^5KU z5dM44C`UnWJ|~J(nB$5PUkiiyt)))Z#Id5{owkJVtZ4rEE3KBBU^O+SG4%-k7eUBr z|5%Mqu$v>LKoiqEFf3sy_{95D`(V#y=S^K_73D)43Dq}xW6tW~gVTRKimYIv8jpC> zhgTNgTt~;&;u zNJ6R|qBWauA`i?>DZQ!eS$chOAp%4EwQH|dk=@Edpfor`y02d z<>iv8hD%1r1+~~fj+i4mB(Ry;AC*zS*RYg-t;h=cWC3hgPbN=zB*Nq^$qvo9^Z1k3 z6{WOwMA6BQ2`c}5?L8vpgY4MNam<8jWxXNObSASBqkar2(#-^t175PKNA@d zuvs%g^f`^)qk9$Fsi$+r-XxF9We^6%H``|-Y1^Ot$d*O}n9hCQ)7-;UqMPyCx#N!%X%HR^u)v1t1{ zwd61XVd2G=#Xpm#CoKK{z3t!mk})xWhmIo-O}d@PCP1eF<@{xqtYJfKG%#o4-9F8H z_qD+@{Wy0<`QQHey8}qS0r%4%*=ZM^)9vBLxV+~I`VS2T#>P^TaoT!DuvZw`0Dij# zX4<<`W@A>)ZXc8?aJRmlq&*^<+@bOfNoNm^%GVtU!>#3ZBMr*uU{XJ-s}(jTK0Jnc z$7Kasz~;yEfU_Hu0}~T`l}pi+laqfJqb7;li(Ia7nEAZXKMaieh_&@~7E^CrS^qv$ zZ{!h>M_zHKkUizx)}F8FV2fY29tjgHyBqF%MrCoJ;l$5M*_=#qn~%HXM4q+%y}b`M z-Y18}9@OlO+NzYc&HQHd+4Ib=wDE>c{y0OMXp*_JdfmRxz5E&VvS=&Krnt4j9Kgs7FoG z7O~mkWVilV)!h#!aO=qPq^^C4$Hm>9X<-p6gf7~s+_9<~>7;_stIdEIZOZcp(TSaS zpOohOO5v1MC8Ts?NrI*S#iwgIup=RX-$6czrqEIpoPRIvZDYSY+vcu;i@RC9}Sb9$zjt zC?EG>BKjz0e$CNUCqa7-0Bc{@UXJx(fvxWX)5An!LPOdtu#F%ezRMm1*rFETHu>IE z{8)wL_^;PmBd$VkB5~($l=+pOT%Pu}x~*-Dmh9V*Q>JizFT+p`C45@)$A-}ePyw|@CaSekE3cSlKH7Sg*(-q{^=;A^Z zRn_!m`E(B>h0%)Oc*a2ashvmHXi2S7ahbuSoVR9z{E~R{xf8Z01OjJnlJ-6%Lpa;6 z&;{(h^{2TO<~(6RJ${<2&PRYDhpW)JOge=>P7?R88L7DG^L5qZXR1mP#mu(|${DMC zPRqG3A-gq7+rBi1f&}c17i_!-rMO1!zPr^uqSagZBJF``nr05{D`vN8(2|x}Niy)4 zDCTZqrhL+qN-k{cQfcoIHL@InCDq8s{aG}Ovicpx1k&aNAV4llk)^49kQF=w3_RZI z2|?)qevR-9&>I)%Vw+PcZ$=!T>9p6>IPb;oBmT_>xWQf={SJtIM;I5~T>&GxkOm!a zfww#-N*Td4EjC`xRwWdGNa66-M+XJuMPq!};Xy&*@;R;;7`=27W`GvW(?l|ZvU2}& zi!V5T4NBi@sJorc85Y|H_oYFG$g8`Sx&iqNC|xOY-XeZNV-l zvJ21|gAK{+kUz(4Tg>@si*<}4`EfDUkA$$=1b=aV7x!q7X>rVLdtwnV|L?Vjdt=ja zx=P%iey8n%eJM{8uA-5dOQP*AtKx<7(NmGr&eZ{i+glxyTwzgIDrH}97v(%r9>~PX zIm4&qGwf+rT2a9@!^*<)^(q(4|IfcWp+BLsToT3~FJ<`rn#28QjV_;W2x6WNpl3QV zhVa;Gzr=jqg)sz)i{f=~b#Zxr^5jXieGzWkH*fAUGBUoiCinC_YG2&eVN$6wmN>(1 zgFtYw@6%gM_)WMO`I?2jMTgwNdxI;KL^D6Rb9{UpF~n4AG?hZ!u;R)Pn==zAnSi)@ zh9;JlzWLa0j|uNjAR0R)(dS0jPKzr^%gX+lo67-{4weXK!{Kn#lta?Is2MSge2Asi z#u0kng?k#|`_Lr=oZD5iGkRx^{EWRuf3z-a#+&g2*g`dCFP5D>U$_Z2A{sU~9c^rE z*bhC|QP@No>ekngkkZmpjk|ZDyTbH+wCSZLC&z+b?CeR0jaGBTx)klK&DPe|w3AJ) zY%4cV;V4NixK~Dpu!ck;GkPaivVC`TC~c<}5b7ld>?Num*eM?z9Bj}v^0hB-w2S6c zQL4gY!bV?a^D(jVpP(*91G;jk9?kD6wWQ>+VSWp&@{d*6CqfGgmc&2$C}9ELotOcF zp#wWRH#c`oXy`vZV=GHN*}@j+jW23Zl>}{V?O!ijqZ$yrh-Dm3+;io%yL-hhnTEvY z&z}#%ok_y9NAW47HVw(D;!{3|OvX=3OY70*-6m~p zcqbRvjHMsJyjz1f(tIhcVxC;(yroOs(Up>hq%V;6@n+XV>p!%&YZ{bTMyAR+-&0j( z;gf&j(P>H6N|b2N)k-|x932zG4rIf_6B`o~GfWpM4g?}4B_(|K?pAp5B1nfA-0#B1xGlU27QNMRD zCpR~D$xI?KuDJMmQd(Ns;D?cs5eGZF2ToPv?+8G`y(1&sqiggxs69h4Vnqg3-^^Er zgUA)bfDFjpqZJ!Ge;>^6^=%C?TFY! zEwh!9k%`yn%+J39Rk`7kBch`_KAhxz1s=-E^IFnP`-ffslSc9g3!jfI{5dPdXmo#+ z-^f?sbvk2Kr%GjERyenr75#EIvWot#f}b4C*#mu)1cp;RXNB*{VM&ww4GSc^AG9mV9+P#Xv9mLxX6uh=y(qHg zl(dYDfp`PW@qmnjJZ{{$5!70$J$jFqAwM)UG&VzAPfsr>d#c=;49pY=D;|6Y_!0k& zbt4-~=vVsEz60{g5Vwr5HfE18mar;gZ9`+p*x#-NuZ&~jlb}Huoxj?KB7JTGl$6K2 zq%4+!VFD21^2p!X+WPW|-(B_l02AVlg!Ik?YdFG(qipwTyS@HqMIhz}s~oP=XOEv? z5)Z5Vg1pHNU(NXJ*d?Q4+zG34A^r+EBkAKs*qEN0st2l^Cx^>)GMOu?M$9B5+`W5n9=Z(TPIMJ;0FkZ}?QN!LIIbb9C zZE}60x^be~-KZl7w}`x#KV(>lV(i+_SZKXxwga5jlH!SNEGvNYkQmJP<}&~yLeW$vCMJ6E%5U3?n2x)ww;z6fJv}Q`#{)TA zTWj!pP0`6g6rbthU;)49mX?-M?jmRT%$Eh9Q`%xtj|*DXRq^^sefOEA%+S} zWTaK!g2Ls>@%b^mz)&E@m$Vnu8pX$af8yRANV38Nn(IX`aj(3Q&gz!lfn;5RYa^@_T?+ep_ zyv$6MPSK+yVfLoJYG#XGe>8cv?8`+)2XkiQe|HuX-F)Hv_po12Hwb)YKv59j?JRO$ zJKuaj6^E3x^qHku%~piHJ!^$MR>Hn^_t~^l$pS8CHn$2fujA@WgedzQX3GP&vW!g_ znp}}h*1Rw)6WVtsV!t+Gs!z2%6E!y3K&#-U7a$UZ|6R& ze=b{*r_WeWTHDtmkSOn5+_f-+w80xWYqJ?Kd~9iH$ueN2ML<>orE{OIMh#mx4x#pB z09A+|GWFK>gBIQWT35tQh*vJH#nso>o12>pKG37f$<99iSNK!;faMr4flBZFw{o6a zIf?u4@dV-Rz@Dy@n;p&JTxkNn``kuN5S0`qd503WL>0+6(g!jg+HPItnZt%~(vb&m z@>DY}8Im=mTJFb}ANeRcP(!iP=(CZ`C4k~JJ!PoBkrgh6rtBiqn)|Zeb?x5c)Eb-l zefFh9-IAeF2CEN?pV~t7ZxWCHLBzjaE+G-f3~P(XLEf8Q{gq*3wN9?8Jfcx(^bhhb z7h=a?18l}GWhi<-yQi-H+QQ<_hYug#p((5Aa+E}Zfw{+gy#6}?9!9lm2oZTwW6c2+ zQ6Q`V-UEVBLbBQy-%UB#E_VtUbDrAKK?kBrU05OrAcnUXvd>`05T?mDSKrte_00fu zd#&rpeeT=|V-xn**4E#a!cIWD`q1m$S}yn9Kjto1!|9N)d)&P0e zr%tfaErx1GW3g>VO->BBE4(?m8ZcaPO2;?UFce|>V=)7oY|kpl&B<*0_(8TmS(>G$ zZ}{tv`!CJ%inRxxZ#^{!Joe3_LQdbQ^a9cG3ok^CPuc zAEgudzkmLLeEo{4nH3c`&jC`zr{H#Gy>Dz{VnQXWP_*yEk}m)&Vc}jZ*1qgyT3T9W zh=!hC-@8_0J7~PTI!c$)4kuoshS7vMhgDAPJ_>`eo}z6hTiUU2ArT>y>Xdf$F`_$r z204!UV-5}~1HzAw1L`n4JKOvBuONut5D3&FAlzl`kFC82S+oOCDX{6Bk`m|oSpbJy zX?P!X%A78x={~Pcnmh-k3rp5+ACA7g6+(-mtMoXCJqCn-PYQ7n6xKL7J?_qc<8!Ee z=~Ohi1O3UQ+RebG5unalCDK~SAufv>b0D^k%%UX5RpA(^ubEOG@RTB_rOrY zv$L7`Nh-FYL_9tb@+LbbdG0!eX(K3KXKqGOA=q zhl-Sk_@l^+=-muz4;R<%!O?$vNcM8yr=SldMGhtNN{@Qrk;qW7Md$68b9={Ypo z>_c$y>#k&(rxhDIC|XTt)c@6ov;m;lQWPiI!4sJOOa8RwLXC*W~8T^Zk#1%U>cFo zp{?yEm6i~^GG^b(*!>U5U{|8{eWZ?1_lwF12jg?_TA~240ZV&dDcvL!=f!d$Ax&8fpCNGwR_W5vZggZuY|I7rmw`NeV_+^<{S2yrFwA?Q^ z)`q5%TZO3Wgl_82PHF$p5Eo$a6GGHEv!>ZaYO)M7|M`D!@(5ACCU;O9cH*F5pGC7A zkGUpVicI{9E!9q>hi8P(mlqXLZJvIcElSWYq1o*`n1YUvTk${+zmi z?~^^pEj*k`%SXtQ5dJVdemGtS=@<|3k&{bchDJt(ttS5vGm?^uIY|p$DX#_G)1aX@ zid1K3=hp&@+gON#B~7%>yNfsb;oSweJS%pt$j*VQ^AoMjqs&tit!nSdd2-Z64Af(| zb{~V2qFT~5#K(W60{%ZzYNI!RsraV$P)+p@17>j>>NbTr#tX8$7r?5c3Vim_ctRLi zQkBvU4bF;gq1k}A4Wf~4)H^`vR*EQLDsv3fp&xL4-l@uAe|^GfYfdwd_w5Sc_&4n* z#keF*T}*v<|0iVp3lQMZII3Ydh#>!cDyhg64oX?(w~0n|i!I@u`rbaZFyEGEJA)7N(X(l80os%*NUv1i;>ZPtZPE z68^>quO;j#@^R@&JkXChs6DSv8d4MhSCa-l$JorF%VVgc_b9f!L?q(>pBO#cLeCuu z(Y0A4NS9wJ=p7!ivD15&Ta5f4s5OXhLFv3q`E@nYH?2kX^-~^_d?ez}cj-M>p0Q6) zHTPs}{Q(ez_0CSCm>bIfHep9N0~6VK=z_rV^li@n z(1?iQv#UP$o)iIA-?4$_iHOV4%}Q4Tk1Ykp& z8b_!yE^<(iV6{|=P54R{-7-rd4%LWmWgL%0`+dT+MBE?@ z-M?39?wv9=Hg;Fs$J#Ob%=YG+v63Y{b5+&1G$=j%PujF-v<$NbP-x9|hVSf{6a=RG z^5x535P(ZcN`!@j#w1ip!<|8*Hf;c8q#;$3!bz`QLl1n^@E&dp&J>}2GX9w^gtz9 z+43nRzN4%C4r4`TXq5TJ#Ngnk9kRe>C6Bo$lv)4c1{($`NCnF0QT|X-D+BEp!76p3nhG@oR0i$lb3?C4?DB&k5_h z&%vm2p9wC(XbuR93W%}9d#S0ZpR`kC4MMd6a>_|;pLsXx7stdX0( zEl~ai#F%aM#+)b$c`Lrsl$71CtVL~E5dMamNqOVQ7{Z;Gj4tWn#BOSrNz<$5{BBU+ zu?JaI!2wB4{M}Wj{j0D?MQ(l_IP&7Q=PF`@&y4to<||4wSFwk91=RNeGCcs3j^d>w zA^!`JcYbZBbj&wQR736^?QxgVSZ?>8GHbGD0Vy>t%IZ@9U-i#@-v8A60r;K(d>VF1 zZb<@QbKT;U`v32jF~bDLeikc&foTSUy4Qnq{&kWx?1h8N{>{&~PJEQ!kRw#>boAQN z)t&rbcX}AuGLq5htY_tq4oLj>^`Bc8p21#Ro6`BeAZoL=Dqa2$7%{{UM04;9jwgZt zi@);TFnvV#%FRu7XMl~M{vQk%0KE+KpTNNCmiAPE&_?us!UAn-zoP!v)2E<)PwYvs zpT#-vB!|@ox4&KKr15odB&maKEuqn|vBvq^sMy&GusU;qc@{D6)YAfT&t_T`WyyCy zlx4TB1LAbz5Wrjz5}4e3>x zWaXDa#_ES!?O5K;jJ~w}`AB?>9{!p|$#)0D>fBL1Ksr}f3%=Wv4h~)cC)^|~z~G~J zOM&4|O&Yl6>>na=B|X#?GI3i34@o{fNBi7s$e9yt+ZwjHbf1ZpT}j7!0zT?4OttQ< zg}))em)!_aG>DmclT!Wr_i_5Q$KS2904t3brI}3U-8QnDV-aKJB1+KNzgH+NJ2{qaVYd}FA7`gK4=9$l6CjZJoQc7;By4Aa0K)a#2^@cV>IVhn$=fL+LErOCWXPwA>6l>UVL zhSGhHY^~563&m8IyaYu;Uf$k~>+9INssKuLWj|@v}P$Z?t&^ zsSk_Be$j?vBFbNbdv3jYeD$C~#(8?k9qX&l50M?&HBr|x9XrozHoc(Lnfe<&FO~X2~lm?G@=31RMSx{x?}$C{{arOfN=l- From 9b80140e7dffde7bac58e8745fd924aa6f9e76bd Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 15 Jan 2016 08:06:01 -0500 Subject: [PATCH 023/442] way to early... --- .../mob/living/carbon/human/update_icons.dm | 180 ++++++++++++++---- icons/mob/human_face.dmi | Bin 78637 -> 79068 bytes 2 files changed, 139 insertions(+), 41 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b768039ac29..e1c05cc7210 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -106,30 +106,33 @@ Please contact me on #coderbus IRC. ~Carn x //Human Overlays Indexes///////// #define MUTANTRACE_LAYER 1 -#define MUTATIONS_LAYER 2 -#define DAMAGE_LAYER 3 -#define UNIFORM_LAYER 4 -#define ID_LAYER 5 -#define SHOES_LAYER 6 -#define GLOVES_LAYER 7 -#define EARS_LAYER 8 -#define SUIT_LAYER 9 -#define GLASSES_LAYER 10 -#define BELT_LAYER 11 //Possible make this an overlay of somethign required to wear a belt? -#define TAIL_LAYER 12 //bs12 specific. this hack is probably gonna come back to haunt me -#define SUIT_STORE_LAYER 13 -#define BACK_LAYER 14 -#define HAIR_LAYER 15 //TODO: make part of head layer? -#define FACEMASK_LAYER 16 -#define HEAD_LAYER 17 -#define COLLAR_LAYER 18 -#define HANDCUFF_LAYER 19 -#define LEGCUFF_LAYER 20 -#define L_HAND_LAYER 21 -#define R_HAND_LAYER 22 -#define TARGETED_LAYER 23 //BS12: Layer for the target overlay from weapon targeting system -#define FIRE_LAYER 24 //If you're on fire -#define TOTAL_LAYERS 24 +#define MARKINGS_LAYER 2 +#define MUTATIONS_LAYER 3 +#define DAMAGE_LAYER 4 +#define UNIFORM_LAYER 5 +#define ID_LAYER 6 +#define SHOES_LAYER 7 +#define GLOVES_LAYER 8 +#define EARS_LAYER 9 +#define SUIT_LAYER 10 +#define GLASSES_LAYER 11 +#define BELT_LAYER 12 //Possible make this an overlay of somethign required to wear a belt? +#define TAIL_LAYER 13 //bs12 specific. this hack is probably gonna come back to haunt me +#define SUIT_STORE_LAYER 14 +#define BACK_LAYER 15 +#define HAIR_LAYER 16 //TODO: make part of head layer? +#define HEAD_ACCESSORY_LAYER 17 +#define FHAIR_LAYER 18 +#define FACEMASK_LAYER 19 +#define HEAD_LAYER 20 +#define COLLAR_LAYER 21 +#define HANDCUFF_LAYER 22 +#define LEGCUFF_LAYER 23 +#define L_HAND_LAYER 24 +#define R_HAND_LAYER 25 +#define TARGETED_LAYER 26 //BS12: Layer for the target overlay from weapon targeting system +#define FIRE_LAYER 27 //If you're on fire +#define TOTAL_LAYERS 27 @@ -245,7 +248,7 @@ var/global/list/damage_icon_parts = list() qdel(stand_icon) stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") var/icon_key = "" - var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) + var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] if(eyes) icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" @@ -350,6 +353,75 @@ var/global/list/damage_icon_parts = list() //tail update_tail_layer(0) + //head accessory + update_head_accessory(0) + //markings + update_markings(0) + //hair + update_hair(0) + update_fhair(0) + + +//MARKINGS OVERLAY +/mob/living/carbon/human/proc/update_markings(var/update_icons=1) + //Reset our markings + overlays_standing[MARKINGS_LAYER] = null + + var/obj/item/organ/external/chest/chest_organ = get_organ("chest") + if(!chest_organ || chest_organ.is_stump() || (chest_organ.status & ORGAN_DESTROYED) ) + if(update_icons) update_icons() + return + + //base icons + var/icon/markings_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s") + + if(m_style && (src.species.bodyflags & HAS_MARKINGS)) + var/datum/sprite_accessory/marking_style = marking_styles_list[m_style] + if(marking_style && marking_style.species_allowed) + if(src.species.name in marking_style.species_allowed) + var/icon/markings_s = new/icon("icon" = marking_style.icon, "icon_state" = "[marking_style.icon_state]_s") + if(marking_style.do_colouration) + markings_s.Blend(rgb(r_markings, g_markings, b_markings), ICON_ADD) + markings_standing.Blend(markings_s, ICON_OVERLAY) + else + //warning("Invalid m_style for [species.name]: [m_style]") + + overlays_standing[MARKINGS_LAYER] = image(markings_standing) + + if(update_icons) update_icons() + +//HEAD ACCESSORY OVERLAY +/mob/living/carbon/human/proc/update_head_accessory(var/update_icons=1) + //Reset our head accessory + overlays_standing[HEAD_ACCESSORY_LAYER] = null + + var/obj/item/organ/external/head/head_organ = get_organ("head") + if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) + if(update_icons) update_icons() + return + + //masks and helmets can obscure our head accessory + if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) + if(update_icons) update_icons() + return + + //base icons + var/icon/head_accessory_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s") + + if(ha_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()) && (src.species.bodyflags & HAS_HEAD_ACCESSORY))) + var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[ha_style] + if(head_accessory_style && head_accessory_style.species_allowed) + if(src.species.name in head_accessory_style.species_allowed) + var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") + if(head_accessory_style.do_colouration) + head_accessory_s.Blend(rgb(r_headacc, g_headacc, b_headacc), ICON_ADD) + head_accessory_standing.Blend(head_accessory_s, ICON_OVERLAY) + else + //warning("Invalid ha_style for [species.name]: [ha_style]") + + overlays_standing[HEAD_ACCESSORY_LAYER] = image(head_accessory_standing) + + if(update_icons) update_icons() //HAIR OVERLAY @@ -367,6 +439,41 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() return + //base icons + var/icon/hair_standing = new /icon('icons/mob/human_face.dmi',"bald_s") + + if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()))) + var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] + if(hair_style && hair_style.species_allowed) + if(src.species.name in hair_style.species_allowed) + var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") + if(hair_style.do_colouration) + hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) + + hair_standing.Blend(hair_s, ICON_OVERLAY) + else + //warning("Invalid h_style for [species.name]: [h_style]") + + overlays_standing[HAIR_LAYER] = image(hair_standing) + + if(update_icons) update_icons() + + +//FACIAL HAIR OVERLAY +/mob/living/carbon/human/proc/update_fhair(var/update_icons=1) + //Reset our facial hair + overlays_standing[FHAIR_LAYER] = null + + var/obj/item/organ/external/head/head_organ = get_organ("head") + if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) + if(update_icons) update_icons() + return + + //masks and helmets can obscure our facial hair, unless we're a synthetic + if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) + if(update_icons) update_icons() + return + //base icons var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") @@ -381,22 +488,7 @@ var/global/list/damage_icon_parts = list() else //warning("Invalid f_style for [species.name]: [f_style]") - if(!get_int_organ(/obj/item/organ/internal/brain)) - face_standing += icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s") - - if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()))) - var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] - if(hair_style && hair_style.species_allowed) - if(src.species.name in hair_style.species_allowed) - var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(hair_style.do_colouration) - hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - - face_standing.Blend(hair_s, ICON_OVERLAY) - else - //warning("Invalid h_style for [species.name]: [h_style]") - - overlays_standing[HAIR_LAYER] = image(face_standing) + overlays_standing[FHAIR_LAYER] = image(face_standing) if(update_icons) update_icons() @@ -460,6 +552,7 @@ var/global/list/damage_icon_parts = list() skeleton = null update_hair(0) + update_fhair(0) if(update_icons) update_icons() //Call when target overlay should be added/removed @@ -488,6 +581,8 @@ var/global/list/damage_icon_parts = list() update_mutations(0) update_body(0) update_hair(0) + update_head_accessory(0) + update_fhair(0) update_mutantrace(0) update_inv_w_uniform(0,0) update_inv_wear_id(0) @@ -1019,6 +1114,7 @@ var/global/list/damage_icon_parts = list() //Human Overlays Indexes///////// #undef MUTANTRACE_LAYER +#undef MARKINGS_LAYER #undef MUTATIONS_LAYER #undef DAMAGE_LAYER #undef UNIFORM_LAYER @@ -1035,6 +1131,8 @@ var/global/list/damage_icon_parts = list() #undef BACK_LAYER #undef HAIR_LAYER #undef HEAD_LAYER +#undef HEAD_ACCESSORY_LAYER +#undef FHAIR_LAYER #undef COLLAR_LAYER #undef HANDCUFF_LAYER #undef LEGCUFF_LAYER diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 1fa0f5c3a222aaeb0fe4488105a2cd164a8597e1..ffecceda82e351b6fc7e920597c14640c1e9d9b3 100644 GIT binary patch delta 15315 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 delta 14967 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 From cc8f402a4d27a8985ce9e1b9776c0e2eebd76e7a Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 21 Jan 2016 20:42:32 -0500 Subject: [PATCH 024/442] progress xeno organ abiltys not working on insert (on non xeno mob) Limb attachment for robot parts being stupid --- .../changeling/powers/augmented_eyesight.dm | 3 +- .../mob/living/carbon/human/examine.dm | 4 +- .../living/carbon/human/species/species.dm | 3 - .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/surgery/generic.dm | 2 +- code/modules/surgery/helpers.dm | 3 +- code/modules/surgery/implant.dm | 11 +- code/modules/surgery/limb_reattach.dm | 29 ++- code/modules/surgery/organs/augments_eyes.dm | 8 +- code/modules/surgery/organs/organ_internal.dm | 38 ++- code/modules/surgery/organs/subtypes/xenos.dm | 8 +- code/modules/surgery/organs_internal.dm | 75 ++++-- code/modules/surgery/robotics.dm | 238 +++++++++--------- code/modules/surgery/slime.dm | 2 +- code/modules/surgery/surgery.dm | 17 +- 15 files changed, 266 insertions(+), 177 deletions(-) diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index af5c62e188f..35e50ff8b77 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -46,7 +46,8 @@ /obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life() ..() - if(owner.eye_blind || owner.eye_blurry || (owner.disabilities & BLIND) || (owner.disabilities & NEARSIGHTED)) + var/obj/item/organ/internal/eyes/E = owner.get_int_organ(/obj/item/organ/internal/eyes) + if(owner.eye_blind || owner.eye_blurry || (owner.disabilities & BLIND) || (owner.disabilities & NEARSIGHTED) || (E.damage > 0)) owner.reagents.add_reagent("oculine", 1) /obj/item/organ/internal/cyberimp/eyes/shield/ling/prepare_eat() diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 70960fda86d..86fc5a7efd3 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -259,8 +259,8 @@ else if(!client) msg += "[t_He] [t_has] suddenly fallen asleep.\n" - if(!src.get_int_organ(/obj/item/organ/internal/brain)) - msg += "It appears that their brain is missing...\n" + if(!src.get_int_organ(/obj/item/organ/internal/brain) && !species.name == "Diona") + msg += "It appears that [t_his] brain is missing...\n" var/list/wound_flavor_text = list() var/list/is_destroyed = list() diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index c79eb3309f5..79b5908ae8a 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -135,9 +135,6 @@ /datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. - if(!ticker) return //FUCKING MONKIES! - - for(var/obj/item/organ/organ in H.contents) if((organ in H.organs)) qdel(organ) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e1c05cc7210..8102635157e 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -248,7 +248,7 @@ var/global/list/damage_icon_parts = list() qdel(stand_icon) stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") var/icon_key = "" - var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) if(eyes) icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index d29b0b0dc9c..fb329a5deab 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -321,7 +321,7 @@ user.visible_message("\blue [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ "\blue You amputate [target]'s [affected.name] with \the [tool].") - add_logs(target,user, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]") + add_logs(user,target, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]") affected.droplimb(1,DROPLIMB_EDGE) return 1 diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 53eab87bd96..916bc985f06 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -1,5 +1,4 @@ /proc/attempt_initiate_surgery(obj/item/I, mob/living/M, mob/user, var/override ) - world << "[istype(M)]" if(istype(M)) var/mob/living/carbon/human/H var/obj/item/organ/external/affecting @@ -28,7 +27,7 @@ if(!S.can_start(user, M)) continue - for(var/path in S.allowed_species) + for(var/path in S.allowed_mob) if(istype(M, path)) available_surgeries[S.name] = S break diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index b7f98c0cbb6..754d4134ac4 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -7,9 +7,16 @@ /datum/surgery/cavity_implant name = "cavity implant" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open, /datum/surgery_step/cavity/make_space,/datum/surgery_step/cavity/place_item,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, + /datum/surgery_step/open_encased/retract, /datum/surgery_step/cavity/make_space,/datum/surgery_step/cavity/place_item,/datum/surgery_step/cavity/close_space,/datum/surgery_step/open_encased/close,/datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) - possible_locs = list("chest","head","groin") + possible_locs = list("chest","head") + +/datum/surgery/cavity_implant/soft + name = "cavity implant" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open, /datum/surgery_step/cavity/make_space,/datum/surgery_step/cavity/place_item,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize) + + possible_locs = list("groin") /datum/surgery_step/cavity priority = 1 diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 41098580c48..3ea7fc49acd 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -13,9 +13,9 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.cannot_amputate) + if(!affected) return 0 - if(affected.status && ORGAN_DESTROYED) + if(affected && (affected.status && ORGAN_DESTROYED)) return 0 return 1 @@ -31,12 +31,13 @@ var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.status && ORGAN_DESTROYED) + if(!affected) + return 1 + if(affected && (affected.status && ORGAN_DESTROYED)) return 1 return 0 -cannot_amputate /datum/surgery/robo_attach name = "robotic limb attachment" steps = list(/datum/surgery_step/limb/mechanize) @@ -47,7 +48,10 @@ cannot_amputate var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.status && ORGAN_DESTROYED) + + if(!affected) + return 1 + if(affected && (affected.status && ORGAN_DESTROYED)) return 1 return 0 @@ -85,12 +89,14 @@ cannot_amputate target.update_body() target.updatehealth() target.UpdateDamageIcon() + return 1 /datum/surgery_step/limb/attach/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/E = tool user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ "Your hand slips, damaging [target]'s [E.amputation_point]!") target.apply_damage(10, BRUTE, null, sharp=1) + return 0 /datum/surgery_step/limb/connect allowed_tools = list( @@ -123,12 +129,14 @@ cannot_amputate target.update_body() target.updatehealth() target.UpdateDamageIcon() + return 1 /datum/surgery_step/limb/connect/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/E = tool user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ "Your hand slips, damaging [target]'s [E.amputation_point]!") target.apply_damage(10, BRUTE, null, sharp=1) + return 0 /datum/surgery_step/limb/mechanize allowed_tools = list(/obj/item/robot_parts = 100) @@ -136,7 +144,7 @@ cannot_amputate min_duration = 80 max_duration = 100 -/datum/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/limb/mechanize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if(..()) var/obj/item/robot_parts/p = tool if (p.part) @@ -144,11 +152,11 @@ cannot_amputate return 0 return isnull(target.get_organ(target_zone)) -/datum/surgery_step/limb/connect/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/limb/mechanize/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user] starts attaching \the [tool] to [target].", \ "You start attaching \the [tool] to [target].") -/datum/surgery_step/limb/connect/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/limb/mechanize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/robot_parts/L = tool user.visible_message("[user] has attached \the [tool] to [target].", \ "You have attached \the [tool] to [target].") @@ -172,7 +180,10 @@ cannot_amputate qdel(tool) -/datum/surgery_step/limb/connect/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return 1 + +/datum/surgery_step/limb/mechanize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s hand slips, damaging [target]'s flesh!", \ "Your hand slips, damaging [target]'s flesh!") target.apply_damage(10, BRUTE, null, sharp=1) + return 0 diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index b358e1f8b25..8a32ed9baf5 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -74,7 +74,7 @@ /obj/item/organ/internal/cyberimp/eyes/xray name = "X-ray implant" desc = "These cybernetic eye implants will give you X-ray vision. Blinking is futile." - eye_colour = rgb(0, 0, 0) + eye_colour = list(0, 0, 0) implant_color = "#000000" origin_tech = "materials=6;programming=4;biotech=6;magnets=5" vision_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS @@ -82,7 +82,7 @@ /obj/item/organ/internal/cyberimp/eyes/thermals name = "Thermals implant" desc = "These cybernetic eye implants will give you Thermal vision. Vertical slit pupil included." - eye_colour = rgb(255, 204, 0) + eye_colour = list(255, 204, 0) implant_color = "#FFCC00" vision_flags = SEE_MOBS flash_protect = -1 @@ -113,7 +113,7 @@ /obj/item/organ/internal/cyberimp/eyes/hud/medical name = "Medical HUD implant" desc = "These cybernetic eye implants will display a medical HUD over everything you see." - eye_colour = rgb(15,15,0) + eye_colour = list(15,15,0) implant_color = "#00FFFF" origin_tech = "materials=4;programming=3;biotech=4" aug_message = "You suddenly see health bars floating above people's heads..." @@ -122,7 +122,7 @@ /obj/item/organ/internal/cyberimp/eyes/hud/security name = "Security HUD implant" desc = "These cybernetic eye implants will display a security HUD over everything you see." - eye_colour = rgb(208,0,0) + eye_colour = list(208,0,0) implant_color = "#CC0000" origin_tech = "materials=4;programming=4;biotech=3;combat=1" aug_message = "Job indicator icons pop up in your vision. That is not a certified surgeon..." diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 40d76176d4f..7f5c0e2b152 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -132,6 +132,8 @@ //Insert something neat here. ///obj/item/organ/internal/lungs/remove(mob/living/carbon/M, special = 0) +// owner.losebreath += 10 + //insert oxy damage extream here. // ..() @@ -140,7 +142,6 @@ if(!owner) return - if (germ_level > INFECTION_LEVEL_ONE) if(prob(5)) owner.emote("cough") //respitory tract infection @@ -320,8 +321,7 @@ /obj/item/organ/internal/shadowtumor/process() if(isturf(loc)) var/turf/T = loc - var/light_count = T.get_lumcount() - world << "[light_count]" + var/light_count = T.get_lumcount()*10 if(light_count > 4 && health > 0) //Die in the light health-- else if(light_count < 2 && health < 3) //Heal in the dark @@ -341,6 +341,7 @@ parent_organ = "head" slot = "brain_tumor" health = 3 + var/lasthonk = 0 /obj/item/organ/internal/honktumor/insert(mob/living/carbon/M, special = 0) @@ -351,4 +352,33 @@ /obj/item/organ/internal/honktumor/remove(mob/living/carbon/M, special = 0) M.mutations.Remove(CLUMSY) M.mutations.Remove(COMICBLOCK) - //genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED) \ No newline at end of file + //genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED) + +/obj/item/organ/internal/honktumor/process() + + if(!owner) + return + + if(lasthonk > world.time + 60|| lasthonk == 0) + lasthonk = world.time + owner << "HONK" + owner.sleeping = 0 + owner.stuttering = 20 + owner.ear_deaf = 30 + owner.Weaken(3) + owner << 'sound/items/AirHorn.ogg' + if(prob(30)) + owner.Stun(10) + owner.Paralyse(4) + else + owner.Jitter(500) + + if(istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner + if(isobj(H.shoes)) + var/thingy = H.shoes + H.unEquip(H.shoes) + walk_away(thingy,H,15,2) + spawn(20) + if(thingy) + walk(thingy,0) diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index 4cbad16a7f3..985d2b9d533 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -16,11 +16,11 @@ /obj/item/organ/internal/xenos/insert(mob/living/carbon/M, special = 0) ..() for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) - verbs += P + M.verbs += P //at least until xeno powers are vamped to TG /obj/item/organ/internal/xenos/remove(mob/living/carbon/M, special = 0) for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) - verbs -= P + M.verbs -= P ..() @@ -144,8 +144,8 @@ /obj/item/organ/internal/xenos/resinspinner name = "xeno resin organ"//...there tiger.... - parent_organ = "head" - icon_state = "stomach-x" + parent_organ = "mouth" + icon_state = "liver-x" slot = "resinspinner" origin_tech = "biotech=5;materials=4" alien_powers = list(/mob/living/carbon/alien/humanoid/proc/resin) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 8a4c79b5f40..939e10e7bf8 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -1,25 +1,27 @@ /datum/surgery/organ_manipulation name = "organ manipulation" steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, - /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone) - possible_locs = list("chest") + /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + possible_locs = list("chest","head") requires_organic_bodypart = 0 - -/datum/surgery/organ_manipulation/head //for adding a mendskull step... - name = "organ manipulation" - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, - /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull ,/datum/surgery_step/finish_bone) - possible_locs = list("head") + disallowed_mob = (/mob/living/carbon/human/machine) /datum/surgery/organ_manipulation/soft possible_locs = list("groin", "eyes", "mouth") - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs) + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + +/datum/surgery/organ_manipulation/boneless + possible_locs = list("chest","head","groin", "eyes", "mouth") + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + allowed_mob = list(/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) + disallowed_mob = list(/mob/living/carbon/human) /datum/surgery/organ_manipulation/alien name = "alien organ manipulation" possible_locs = list("chest", "head", "groin", "eyes", "mouth") - allowed_species = list(/mob/living/carbon/alien/humanoid) - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs) + allowed_mob = list(/mob/living/carbon/alien/humanoid) + disallowed_mob = list(/mob/living/carbon/human) + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) @@ -94,9 +96,10 @@ ////////////////////////////////////////////////////////////////// // ALIEN EMBRYO SURGERY // ////////////////////////////////////////////////////////////////// -/datum/surgery/remove_xeno_baby - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) - possible_locs = list("chest") +///datum/surgery/remove_xeno_baby +// steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) +// possible_locs = list("chest") +// disallowed_mob = (/mob/living/carbon/human/machine) /datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. @@ -165,8 +168,9 @@ allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55) - var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20 - ) + var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20) + //Finish is just so you can close up after you do other things. + var/implements_finsh = list(/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75) var/current_type var/obj/item/organ/internal/I = null var/obj/item/organ/external/affected = null @@ -175,7 +179,7 @@ /datum/surgery_step/internal/manipulate_organs/New() ..() - allowed_tools = allowed_tools + implements_extract + implements_mend + allowed_tools = allowed_tools + implements_extract + implements_mend + implements_finsh @@ -184,8 +188,6 @@ I = null affected = target.get_organ(target_zone) - world << "[implement_type]" - world << "[is_int_organ(implement_type)]" if(is_int_organ(tool)) current_type = "insert" I = tool @@ -205,6 +207,19 @@ "You start transplanting \the [tool] into [target]'s [affected.name].") target.custom_pain("Someone's rooting around in your [affected.name]!",1) + else if(implement_type in implements_finsh) + //same as surgery step /datum/surgery_step/open_encased/close/ + current_type = "finish" + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(affected == "head" || affected == "upper body") + var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + else + var/msg = "[user] starts pulling [target]'s skin back into place with \the [tool]." + var/self_msg = "You start pulling [target]'s skin back into place with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) else if(implement_type in implements_extract) current_type = "extract" var/list/organs = target.get_organs_zone(target_zone) @@ -253,7 +268,7 @@ "You start treating damage to [target]'s [I.name] with [tool_name]." ) user << "No organs appear to be damaged." - return + return -1 target.custom_pain("The pain in your [affected.name] is living hell!",1) else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) @@ -283,7 +298,7 @@ user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 - return 1 + //return 1 else if(current_type == "insert") I = tool user.drop_item() @@ -307,8 +322,26 @@ else user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", "You can't extract anything from [target]'s [parse_zone(target_zone)]!") + else if(current_type == "finish") + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(target_zone == "head" || target_zone == "upper body") + var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + affected.open = 2.5 + else + var/msg = "[user] pulls [target]'s skin back into place with \the [tool]." + var/self_msg = "You pull [target]'s skin back into place with \the [tool]." + user.visible_message(msg, self_msg) + + return 1 + + return 0 +//todo set up fail steps + ////////////////////////////////////////////////////////////////// // CHEST INTERNAL ORGAN SURGERY // diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 37de91743e2..6df377b56d1 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -8,16 +8,16 @@ steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/external/repair_brute,/datum/surgery_step/robotics/external/repair_burn,/datum/surgery_step/robotics/external/close_hatch) possible_locs = list("chest","head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") requires_organic_bodypart = 0 - allowed_species = list(/mob/living/carbon/human/machine) - disallowed_species = list(/mob/living/carbon/human) + allowed_mob = list(/mob/living/carbon/human/machine) + disallowed_mob = list(/mob/living/carbon/human) /datum/surgery/cybernetic_repair/internal name = "Internal Cybernetic Mainpulation" steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/manipulate_robotic_organs) possible_locs = list("chest","head","groin") requires_organic_bodypart = 0 - allowed_species = list(/mob/living/carbon/human/machine) - disallowed_species = list(/mob/living/carbon/human) + allowed_mob = list(/mob/living/carbon/human/machine) + disallowed_mob = list(/mob/living/carbon/human) //to do, moar surgerys or condense down ala mainpulate organs. @@ -58,27 +58,29 @@ min_duration = 90 max_duration = 110 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(..()) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open == 0 && target_zone != "mouth" - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/robotics/external/unscrew_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "You start to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].") - ..() + return affected && affected.open == 0 && target_zone != "mouth" - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "\blue You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].",) - affected.open = 1 +/datum/surgery_step/robotics/external/unscrew_hatch/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ + "You start to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].") + ..() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].", \ - "\red Your [tool] slips, failing to unscrew [target]'s [affected.name].") +/datum/surgery_step/robotics/external/unscrew_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ + "\blue You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].",) + affected.open = 1 + return 1 + +/datum/surgery_step/robotics/external/unscrew_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].", \ + "\red Your [tool] slips, failing to unscrew [target]'s [affected.name].") + return 0 /datum/surgery_step/robotics/external/open_hatch allowed_tools = list( @@ -90,27 +92,29 @@ min_duration = 30 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(..()) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open == 1 - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/robotics/external/open_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].", - "You start to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].") - ..() + return affected && affected.open == 1 - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "\blue You open the maintenance hatch on [target]'s [affected.name] with \the [tool]." ) - affected.open = 2 +/datum/surgery_step/robotics/external/open_hatch/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].", + "You start to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].") + ..() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].", - "\red Your [tool] slips, failing to open the hatch on [target]'s [affected.name].") +/datum/surgery_step/robotics/external/open_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ + "\blue You open the maintenance hatch on [target]'s [affected.name] with \the [tool]." ) + affected.open = 2 + return 1 + +/datum/surgery_step/robotics/external/open_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].", + "\red Your [tool] slips, failing to open the hatch on [target]'s [affected.name].") + return 0 /datum/surgery_step/robotics/external/close_hatch allowed_tools = list( @@ -122,28 +126,30 @@ min_duration = 70 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(..()) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open && target_zone != "mouth" - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/robotics/external/close_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool]." , \ - "You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].") - ..() + return affected && affected.open && target_zone != "mouth" - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \ - "\blue You close and secure the hatch on [target]'s [affected.name] with \the [tool].") - affected.open = 0 - affected.germ_level = 0 +/datum/surgery_step/robotics/external/close_hatch/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool]." , \ + "You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].") + ..() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].", - "\red Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].") +/datum/surgery_step/robotics/external/close_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \ + "\blue You close and secure the hatch on [target]'s [affected.name] with \the [tool].") + affected.open = 0 + affected.germ_level = 0 + return 1 + +/datum/surgery_step/robotics/external/close_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].", + "\red Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].") + return 0 /datum/surgery_step/robotics/external/repair_brute allowed_tools = list( @@ -154,36 +160,38 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(..()) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(istype(tool,/obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/welder = tool - if(!welder.isOn() || !welder.remove_fuel(1,user)) - return 0 - return affected && affected.open == 2 && (affected.brute_dam > 0 || affected.disfigured)&& target_zone != "mouth" - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/robotics/external/repair_brute/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to patch damage to [target]'s [affected.name]'s support structure with \the [tool]." , \ - "You begin to patch damage to [target]'s [affected.name]'s support structure with \the [tool].") - ..() + if(istype(tool,/obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/welder = tool + if(!welder.isOn() || !welder.remove_fuel(1,user)) + return 0 + return affected && affected.open == 2 && (affected.brute_dam > 0 || affected.disfigured)&& target_zone != "mouth" - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] finishes patching damage to [target]'s [affected.name] with \the [tool].", \ - "\blue You finish patching damage to [target]'s [affected.name] with \the [tool].") - affected.heal_damage(rand(30,50),0,1,1) - if(affected.disfigured) - affected.disfigured = 0 - affected.update_icon() - target.regenerate_icons() +/datum/surgery_step/robotics/external/repair_brute/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] begins to patch damage to [target]'s [affected.name]'s support structure with \the [tool]." , \ + "You begin to patch damage to [target]'s [affected.name]'s support structure with \the [tool].") + ..() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].", - "\red Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].") - target.apply_damage(rand(5,10), BURN, affected) +/datum/surgery_step/robotics/external/repair_brute/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] finishes patching damage to [target]'s [affected.name] with \the [tool].", \ + "\blue You finish patching damage to [target]'s [affected.name] with \the [tool].") + affected.heal_damage(rand(30,50),0,1,1) + if(affected.disfigured) + affected.disfigured = 0 + affected.update_icon() + target.regenerate_icons() + return 1 + +/datum/surgery_step/robotics/external/repair_brute/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].", + "\red Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].") + target.apply_damage(rand(5,10), BURN, affected) + return 0 /datum/surgery_step/robotics/external/repair_burn allowed_tools = list( @@ -193,37 +201,39 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(..()) - var/obj/item/stack/cable_coil/C = tool - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/limb_can_operate = (affected && affected.open == 2 && affected.burn_dam > 0 && target_zone != "mouth") - if(limb_can_operate) - if(istype(C)) - if(!C.get_amount() >= 3) - user << "You need three or more cable pieces to repair this damage." - return 2 - C.use(3) - return 1 - return 0 - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/robotics/external/repair_burn/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(..()) + var/obj/item/stack/cable_coil/C = tool var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to splice new cabling into [target]'s [affected.name]." , \ - "You begin to splice new cabling into [target]'s [affected.name].") - ..() + var/limb_can_operate = (affected && affected.open == 2 && affected.burn_dam > 0 && target_zone != "mouth") + if(limb_can_operate) + if(istype(C)) + if(!C.get_amount() >= 3) + user << "You need three or more cable pieces to repair this damage." + return 2 + C.use(3) + return 1 + return 0 - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] finishes splicing cable into [target]'s [affected.name].", \ - "\blue You finishes splicing new cable into [target]'s [affected.name].") - affected.heal_damage(0,rand(30,50),1,1) +/datum/surgery_step/robotics/external/repair_burn/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] begins to splice new cabling into [target]'s [affected.name]." , \ + "You begin to splice new cabling into [target]'s [affected.name].") + ..() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user] causes a short circuit in [target]'s [affected.name]!", - "\red You cause a short circuit in [target]'s [affected.name]!") - target.apply_damage(rand(5,10), BURN, affected) +/datum/surgery_step/robotics/external/repair_burn/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] finishes splicing cable into [target]'s [affected.name].", \ + "\blue You finishes splicing new cable into [target]'s [affected.name].") + affected.heal_damage(0,rand(30,50),1,1) + return 1 + +/datum/surgery_step/robotics/external/repair_burn/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user] causes a short circuit in [target]'s [affected.name]!", + "\red You cause a short circuit in [target]'s [affected.name]!") + target.apply_damage(rand(5,10), BURN, affected) + return 0 ///////condenseing remove/extract/repair here. ///////////// /datum/surgery_step/robotics/manipulate_robotic_organs diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index 9a478484864..a2b6dc521c6 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -4,7 +4,7 @@ /datum/surgery/core_removal name = "core removal" steps = list(/datum/surgery_step/slime/cut_flesh, /datum/surgery_step/slime/cut_innards, /datum/surgery_step/slime/saw_core) - allowed_species = list( /mob/living/carbon/slime) + allowed_mob = list( /mob/living/carbon/slime) /datum/surgery_step/slime diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 3f7da2d800f..4b10ee37fd2 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -19,8 +19,8 @@ var/list/possible_locs = list() //Multiple locations -- c0 var/obj/item/organ/organ_ref //Operable body part var/current_organ = "organ" - var/list/allowed_species = list(/mob/living/carbon/human) - var/list/disallowed_species = null + var/list/allowed_mob = list(/mob/living/carbon/human) + var/list/disallowed_mob = null /datum/surgery/proc/can_start(mob/user, mob/living/carbon/target) // if 0 surgery wont show up in list @@ -69,8 +69,9 @@ //How much blood this step can get on surgeon. 1 - hands, 2 - full body. var/blood_level = 0 - var/list/allowed_species = null - var/list/disallowed_species = null + var/list/allowed_mob = list() + var/list/disallowed_mob = list() + /datum/surgery_step/proc/try_op(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/success = 0 @@ -136,13 +137,13 @@ if(!hasorgans(target)) return 0 - if(allowed_species) - for(var/species in allowed_species) + if(allowed_mob)//can i just remove this and/or change it? + for(var/species in allowed_mob) if(target.species.name == species) return 1 - if(disallowed_species) - for(var/species in disallowed_species) + if(disallowed_mob) + for(var/species in disallowed_mob) if(target.species.name == species) return 0 From 363da58264ecc9e1cac99a8e45e11f0481dc80ab Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 21 Jan 2016 20:50:24 -0500 Subject: [PATCH 025/442] being conflict fix --- code/_globalvars/lists/objects.dm | 4 +- code/modules/surgery/implant.dm | 315 +++++++++++++----------------- 2 files changed, 142 insertions(+), 177 deletions(-) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 67e27c9697b..a20149b8c97 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -24,8 +24,6 @@ var/global/list/apcs = list() var/global/list/air_alarms = list() var/global/list/power_monitors = list() -var/global/list/tracking_implants = list() //list of all tracking implants to work out what treks everyone are on. Sadly not on lavaworld not implemented... var/global/list/beacons = list() var/global/list/shuttle_caller_list = list() //list of all communication consoles and AIs, for automatic shuttle calls when there are none. - -var/global/list/surgeries_list = list() //list of all surgeries by name, associated with their path. \ No newline at end of file +var/global/list/tracked_implants = list() //list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented... \ No newline at end of file diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 754d4134ac4..25ebaf28f6c 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -1,57 +1,42 @@ //Procedures in this file: Putting items in body cavity. Implant removal. Items removal. - ////////////////////////////////////////////////////////////////// // ITEM PLACEMENT SURGERY // ////////////////////////////////////////////////////////////////// -/datum/surgery/cavity_implant - name = "cavity implant" - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, - /datum/surgery_step/open_encased/retract, /datum/surgery_step/cavity/make_space,/datum/surgery_step/cavity/place_item,/datum/surgery_step/cavity/close_space,/datum/surgery_step/open_encased/close,/datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) - - possible_locs = list("chest","head") - -/datum/surgery/cavity_implant/soft - name = "cavity implant" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open, /datum/surgery_step/cavity/make_space,/datum/surgery_step/cavity/place_item,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize) - - possible_locs = list("groin") - /datum/surgery_step/cavity priority = 1 + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if(!hasorgans(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING) -/datum/surgery_step/cavity/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(!hasorgans(target)) + proc/get_max_wclass(obj/item/organ/external/affected) + switch (affected.limb_name) + if ("head") + return 1 + if ("chest") + return 3 + if ("groin") + return 2 return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING) -/datum/surgery_step/cavity/proc/get_max_wclass(obj/item/organ/external/affected) - switch (affected.limb_name) - if ("head") - return 1 - if ("chest") - return 3 - if ("groin") - return 2 - return 0 + proc/get_cavity(obj/item/organ/external/affected) + switch (affected.limb_name) + if ("head") + return "cranial" + if ("chest") + return "thoracic" + if ("groin") + return "abdominal" + return "" -/datum/surgery_step/cavity/proc/get_cavity(obj/item/organ/external/affected) - switch (affected.limb_name) - if ("head") - return "cranial" - if ("chest") - return "thoracic" - if ("groin") - return "abdominal" - return "" - -/datum/surgery_step/cavity/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 20) + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") + affected.createwound(CUT, 20) /datum/surgery_step/cavity/make_space allowed_tools = list( @@ -63,24 +48,22 @@ min_duration = 60 max_duration = 80 -/datum/surgery_step/cavity/make_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && !affected.cavity && !affected.hidden + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && !affected.cavity && !affected.hidden -/datum/surgery_step/cavity/make_space/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ - "You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) - target.custom_pain("The pain in your chest is living hell!",1) - affected.cavity = 1 - ..() + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ + "You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) + target.custom_pain("The pain in your chest is living hell!",1) + affected.cavity = 1 + ..() -/datum/surgery_step/cavity/make_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ - "\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) - - return 1 + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ + "\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) /datum/surgery_step/cavity/close_space priority = 2 @@ -94,25 +77,22 @@ min_duration = 60 max_duration = 80 -/datum/surgery_step/cavity/close_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected.cavity + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected.cavity -/datum/surgery_step/cavity/close_space/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", \ - "You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool]." ) - target.custom_pain("The pain in your chest is living hell!",1) - affected.cavity = 0 - ..() - -/datum/surgery_step/cavity/close_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ - "\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) - - return 1 + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", \ + "You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool]." ) + target.custom_pain("The pain in your chest is living hell!",1) + affected.cavity = 0 + ..() + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ + "\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) /datum/surgery_step/cavity/place_item priority = 0 @@ -121,53 +101,42 @@ min_duration = 80 max_duration = 100 + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!ishuman(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/can_fit = affected && !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected) + return ..() && can_fit -/datum/surgery_step/cavity/place_item/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!ishuman(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/can_fit = affected && !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected) - return ..() && can_fit + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ + "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) + target.custom_pain("The pain in your chest is living hell!",1) + ..() -/datum/surgery_step/cavity/place_item/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ - "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) - target.custom_pain("The pain in your chest is living hell!",1) - ..() + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) -/datum/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - - if(istype(tool, /obj/item/weapon/disk/nuclear)) - user << "Central command would kill you if you implanted the disk into someone." - return 0//fail - else - user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ - "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) - if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT)) - user << "\red You tear some vessels trying to fit such big object in this cavity." - var/datum/wound/internal_bleeding/I = new () - affected.wounds += I - affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) - user.drop_item() - affected.hidden = tool - target.internal_organs += tool - tool.loc = target - affected.cavity = 0 - - return 1 + if(istype(tool, /obj/item/weapon/disk/nuclear)) + user << "Central command would kill you if you implanted the disk into someone." + else + user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ + "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) + if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT)) + user << "\red You tear some vessels trying to fit such big object in this cavity." + var/datum/wound/internal_bleeding/I = new () + affected.wounds += I + affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) + user.drop_item() + affected.hidden = tool + tool.loc = target + affected.cavity = 0 ////////////////////////////////////////////////////////////////// // IMPLANT/ITEM REMOVAL SURGERY // ////////////////////////////////////////////////////////////////// -///Fethas note:I might could condense this down but it would need to take out the part with poking around with a hemostat -/datum/surgery/cavity_implant_rem - name = "implant removal" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) - possible_locs = list("chest","head","groin") - /datum/surgery_step/cavity/implant_removal allowed_tools = list( /obj/item/weapon/hemostat = 100, \ @@ -178,38 +147,25 @@ min_duration = 80 max_duration = 100 -/datum/surgery_step/cavity/implant_removal/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ - "You start poking around inside [target]'s [affected.name] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ + "You start poking around inside [target]'s [affected.name] with \the [tool]." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() -/datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/obj/item/weapon/implant/I = locate(/obj/item/weapon/implant) in target - var/find_prob = 0 + if (affected.implants.len) - if (affected.implants.len) + var/obj/item/obj = affected.implants[1] - var/obj/item/obj = affected.implants[1] - - if(istype(obj,/obj/item/weapon/implant)) - var/obj/item/weapon/implant/imp = obj - if (imp.islegal()) - find_prob +=60 - else - find_prob +=40 - else - find_prob +=50 - - if (prob(find_prob)) user.visible_message("\blue [user] takes something out of [target]'s [affected.name] with \the [tool].", \ "\blue You take [obj] out of [target]'s [affected.name]s with \the [tool]." ) affected.implants -= obj - target.sec_hud_set_implants() - //Handle possessive brain borers. if(istype(obj,/mob/living/simple_animal/borer)) var/mob/living/simple_animal/borer/worm = obj @@ -219,43 +175,54 @@ worm.leave_host() obj.loc = get_turf(target) - if(istype(obj,/obj/item/weapon/implant)) - var/obj/item/weapon/implant/imp = obj - imp.imp_in = null - imp.implanted = 0 - return 1 + else if(I && target_zone == "chest") //implant removal only works on the chest. + user.visible_message("[user] takes something out of [target]'s [affected.name] with \the [tool].", \ + "You take [I] out of [target]'s [affected.name]s with \the [tool]." ) + + I.removed(target) + + var/obj/item/weapon/implantcase/case + + if(istype(user.get_item_by_slot(slot_l_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_l_hand) + else if(istype(user.get_item_by_slot(slot_r_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_r_hand) + else + case = locate(/obj/item/weapon/implantcase) in get_turf(target) + + if(case && !case.imp) + case.imp = I + I.loc = case + case.update_icon() + user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") + else + qdel(I) + + else if (affected.hidden) + user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ + "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) + affected.hidden.loc = get_turf(target) + if(!affected.hidden.blood_DNA) + affected.hidden.blood_DNA = list() + affected.hidden.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type + affected.hidden.update_icon() + affected.hidden = null + else - user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.name].", \ - "\blue There's something inside [target]'s [affected.name], but you just missed it this time." ) - return -1 //or maybe 0.... - else if (affected.hidden) - user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) - affected.hidden.loc = get_turf(target) - if(!affected.hidden.blood_DNA) - affected.hidden.blood_DNA = list() - affected.hidden.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type - affected.hidden.update_icon() - affected.hidden = null - return 1 + user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ + "\blue You could not find anything inside [target]'s [affected.name]." ) - else - user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ - "\blue You could not find anything inside [target]'s [affected.name]." ) - return -1 - -/datum/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - ..() - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - if (affected.implants.len) - var/fail_prob = 10 - fail_prob += 100 - tool_quality(tool) - if (prob(fail_prob)) - var/obj/item/weapon/implant/imp = affected.implants[1] - user.visible_message("\red Something beeps inside [target]'s [affected.name]!") - playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) - spawn(25) - imp.activate() - return 0 + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + ..() + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + if (affected.implants.len) + var/fail_prob = 10 + fail_prob += 100 - tool_quality(tool) + if (prob(fail_prob)) + var/obj/item/weapon/implant/imp = affected.implants[1] + user.visible_message("\red Something beeps inside [target]'s [affected.name]!") + playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) + spawn(25) + imp.activate() From f352c290de1fcbf33eccd612986dc57b51ce3486 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 21 Jan 2016 21:34:16 -0500 Subject: [PATCH 026/442] end conflict fix --- .../MetaStation/MetaStation.v41A.II.dmm | 2 +- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- code/_globalvars/lists/objects.dm | 3 +- code/modules/surgery/implant.dm | 334 ++++++++++-------- 4 files changed, 187 insertions(+), 154 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 0eb24d18860..1e35892d8d7 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -383,7 +383,7 @@ "ahs" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aht" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahu" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahw" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport) "ahy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 91274e530ec..11508166db1 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -8473,7 +8473,7 @@ "dha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhe" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "dhg" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index a20149b8c97..4af9c321126 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -26,4 +26,5 @@ var/global/list/power_monitors = list() var/global/list/beacons = list() var/global/list/shuttle_caller_list = list() //list of all communication consoles and AIs, for automatic shuttle calls when there are none. -var/global/list/tracked_implants = list() //list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented... \ No newline at end of file +var/global/list/tracked_implants = list() //list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented... +var/global/list/surgeries_list = list() //list of all surgeries by name, associated with their path. \ No newline at end of file diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 25ebaf28f6c..87c20ada7ed 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -1,42 +1,57 @@ //Procedures in this file: Putting items in body cavity. Implant removal. Items removal. + ////////////////////////////////////////////////////////////////// // ITEM PLACEMENT SURGERY // ////////////////////////////////////////////////////////////////// +/datum/surgery/cavity_implant + name = "cavity implant" + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, + /datum/surgery_step/open_encased/retract, /datum/surgery_step/cavity/make_space,/datum/surgery_step/cavity/place_item,/datum/surgery_step/cavity/close_space,/datum/surgery_step/open_encased/close,/datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + + possible_locs = list("chest","head") + +/datum/surgery/cavity_implant/soft + name = "cavity implant" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open, /datum/surgery_step/cavity/make_space,/datum/surgery_step/cavity/place_item,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize) + + possible_locs = list("groin") + /datum/surgery_step/cavity priority = 1 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(!hasorgans(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING) - proc/get_max_wclass(obj/item/organ/external/affected) - switch (affected.limb_name) - if ("head") - return 1 - if ("chest") - return 3 - if ("groin") - return 2 +/datum/surgery_step/cavity/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(!hasorgans(target)) return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING) - proc/get_cavity(obj/item/organ/external/affected) - switch (affected.limb_name) - if ("head") - return "cranial" - if ("chest") - return "thoracic" - if ("groin") - return "abdominal" - return "" +/datum/surgery_step/cavity/proc/get_max_wclass(obj/item/organ/external/affected) + switch (affected.limb_name) + if ("head") + return 1 + if ("chest") + return 3 + if ("groin") + return 2 + return 0 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 20) +/datum/surgery_step/cavity/proc/get_cavity(obj/item/organ/external/affected) + switch (affected.limb_name) + if ("head") + return "cranial" + if ("chest") + return "thoracic" + if ("groin") + return "abdominal" + return "" + +/datum/surgery_step/cavity/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") + affected.createwound(CUT, 20) /datum/surgery_step/cavity/make_space allowed_tools = list( @@ -48,22 +63,24 @@ min_duration = 60 max_duration = 80 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && !affected.cavity && !affected.hidden +/datum/surgery_step/cavity/make_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && !affected.cavity && !affected.hidden - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ - "You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) - target.custom_pain("The pain in your chest is living hell!",1) - affected.cavity = 1 - ..() +/datum/surgery_step/cavity/make_space/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ + "You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) + target.custom_pain("The pain in your chest is living hell!",1) + affected.cavity = 1 + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ - "\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) +/datum/surgery_step/cavity/make_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ + "\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) + + return 1 /datum/surgery_step/cavity/close_space priority = 2 @@ -77,22 +94,25 @@ min_duration = 60 max_duration = 80 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected.cavity +/datum/surgery_step/cavity/close_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected.cavity - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", \ - "You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool]." ) - target.custom_pain("The pain in your chest is living hell!",1) - affected.cavity = 0 - ..() +/datum/surgery_step/cavity/close_space/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", \ + "You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool]." ) + target.custom_pain("The pain in your chest is living hell!",1) + affected.cavity = 0 + ..() + +/datum/surgery_step/cavity/close_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ + "\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) + + return 1 - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ - "\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) /datum/surgery_step/cavity/place_item priority = 0 @@ -101,42 +121,53 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!ishuman(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/can_fit = affected && !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected) - return ..() && can_fit - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ - "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) - target.custom_pain("The pain in your chest is living hell!",1) - ..() +/datum/surgery_step/cavity/place_item/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!ishuman(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/can_fit = affected && !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected) + return ..() && can_fit - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) +/datum/surgery_step/cavity/place_item/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ + "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) + target.custom_pain("The pain in your chest is living hell!",1) + ..() - if(istype(tool, /obj/item/weapon/disk/nuclear)) - user << "Central command would kill you if you implanted the disk into someone." - else - user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ - "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) - if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT)) - user << "\red You tear some vessels trying to fit such big object in this cavity." - var/datum/wound/internal_bleeding/I = new () - affected.wounds += I - affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) - user.drop_item() - affected.hidden = tool - tool.loc = target - affected.cavity = 0 +/datum/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + + if(istype(tool, /obj/item/weapon/disk/nuclear)) + user << "Central command would kill you if you implanted the disk into someone." + return 0//fail + else + user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ + "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) + if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT)) + user << "\red You tear some vessels trying to fit such big object in this cavity." + var/datum/wound/internal_bleeding/I = new () + affected.wounds += I + affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) + user.drop_item() + affected.hidden = tool + target.internal_organs += tool + tool.loc = target + affected.cavity = 0 + + return 1 ////////////////////////////////////////////////////////////////// // IMPLANT/ITEM REMOVAL SURGERY // ////////////////////////////////////////////////////////////////// +///Fethas note:I might could condense this down but it would need to take out the part with poking around with a hemostat +/datum/surgery/cavity_implant_rem + name = "implant removal" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) + possible_locs = list("chest","head") + /datum/surgery_step/cavity/implant_removal allowed_tools = list( /obj/item/weapon/hemostat = 100, \ @@ -147,82 +178,83 @@ min_duration = 80 max_duration = 100 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ - "You start poking around inside [target]'s [affected.name] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() +/datum/surgery_step/cavity/implant_removal/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ + "You start poking around inside [target]'s [affected.name] with \the [tool]." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/obj/item/weapon/implant/I = locate(/obj/item/weapon/implant) in target +/datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/obj/item/weapon/implant/I = locate(/obj/item/weapon/implant) in target + if (affected.implants.len) - if (affected.implants.len) + var/obj/item/obj = affected.implants[1] - var/obj/item/obj = affected.implants[1] + user.visible_message("\blue [user] takes something out of [target]'s [affected.name] with \the [tool].", \ + "\blue You take [obj] out of [target]'s [affected.name]s with \the [tool]." ) + affected.implants -= obj - user.visible_message("\blue [user] takes something out of [target]'s [affected.name] with \the [tool].", \ - "\blue You take [obj] out of [target]'s [affected.name]s with \the [tool]." ) - affected.implants -= obj + //Handle possessive brain borers. + if(istype(obj,/mob/living/simple_animal/borer)) + var/mob/living/simple_animal/borer/worm = obj + if(worm.controlling) + target.release_control() + worm.detatch() + worm.leave_host() - //Handle possessive brain borers. - if(istype(obj,/mob/living/simple_animal/borer)) - var/mob/living/simple_animal/borer/worm = obj - if(worm.controlling) - target.release_control() - worm.detatch() - worm.leave_host() + obj.loc = get_turf(target) + return 1 + else if(I && target_zone == "chest") //implant removal only works on the chest. + user.visible_message("[user] takes something out of [target]'s [affected.name] with \the [tool].", \ + "You take [I] out of [target]'s [affected.name]s with \the [tool]." ) - obj.loc = get_turf(target) + I.removed(target) - else if(I && target_zone == "chest") //implant removal only works on the chest. - user.visible_message("[user] takes something out of [target]'s [affected.name] with \the [tool].", \ - "You take [I] out of [target]'s [affected.name]s with \the [tool]." ) - - I.removed(target) - - var/obj/item/weapon/implantcase/case - - if(istype(user.get_item_by_slot(slot_l_hand), /obj/item/weapon/implantcase)) - case = user.get_item_by_slot(slot_l_hand) - else if(istype(user.get_item_by_slot(slot_r_hand), /obj/item/weapon/implantcase)) - case = user.get_item_by_slot(slot_r_hand) - else - case = locate(/obj/item/weapon/implantcase) in get_turf(target) - - if(case && !case.imp) - case.imp = I - I.loc = case - case.update_icon() - user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") - else - qdel(I) - - else if (affected.hidden) - user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) - affected.hidden.loc = get_turf(target) - if(!affected.hidden.blood_DNA) - affected.hidden.blood_DNA = list() - affected.hidden.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type - affected.hidden.update_icon() - affected.hidden = null + var/obj/item/weapon/implantcase/case + if(istype(user.get_item_by_slot(slot_l_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_l_hand) + else if(istype(user.get_item_by_slot(slot_r_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_r_hand) else - user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ - "\blue You could not find anything inside [target]'s [affected.name]." ) + case = locate(/obj/item/weapon/implantcase) in get_turf(target) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - ..() - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - if (affected.implants.len) - var/fail_prob = 10 - fail_prob += 100 - tool_quality(tool) - if (prob(fail_prob)) - var/obj/item/weapon/implant/imp = affected.implants[1] - user.visible_message("\red Something beeps inside [target]'s [affected.name]!") - playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) - spawn(25) - imp.activate() + if(case && !case.imp) + case.imp = I + I.loc = case + case.update_icon() + user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") + else + qdel(I) + target.sec_hud_set_implants() + return 1 + else if (affected.hidden) + user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ + "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) + affected.hidden.loc = get_turf(target) + if(!affected.hidden.blood_DNA) + affected.hidden.blood_DNA = list() + affected.hidden.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type + affected.hidden.update_icon() + affected.hidden = null + else + user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ + "You could not find anything inside [target]'s [affected.name]") + return 1 + +/datum/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + ..() + var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) + if (affected.implants.len) + var/fail_prob = 10 + fail_prob += 100 - tool_quality(tool) + if (prob(fail_prob)) + var/obj/item/weapon/implant/imp = affected.implants[1] + user.visible_message("\red Something beeps inside [target]'s [affected.name]!") + playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) + spawn(25) + imp.activate() + return 0 From 20b1506a1a75f79422c0b35454657c91a1823fa5 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 21 Jan 2016 21:45:57 -0500 Subject: [PATCH 027/442] the map errors don't have a heart... --- _maps/map_files/MetaStation/MetaStation.v41A.II.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 1e35892d8d7..89f3f519029 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -7701,7 +7701,7 @@ "cSe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSf" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSg" = (/obj/machinery/door/morgue{name = "Relic Closet"; req_access_txt = "22"},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) -"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) +"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/internal/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) "cSi" = (/obj/machinery/door/airlock/maintenance{name = "Chapel Maintenance Access "; req_access_txt = "0"; req_one_access_txt = "12;27"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cSj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Departure Lounge - Port Fore"; dir = 4; network = list("SS13")},/obj/structure/flora/kirbyplants{icon_state = "plant-24"; layer = 4.1; tag = "icon-plant-24"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) From 42d8ac68b559b5663c0062400c71e9591d937b33 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 22 Jan 2016 22:01:24 -0500 Subject: [PATCH 028/442] xeno organ fail still... --- code/game/machinery/computer/Operating.dm | 44 +++++--- code/modules/mob/living/carbon/alien/alien.dm | 18 ++- .../carbon/alien/humanoid/caste/drone.dm | 1 - .../carbon/alien/humanoid/caste/hunter.dm | 3 - .../carbon/alien/humanoid/caste/sentinel.dm | 3 - .../living/carbon/alien/humanoid/empress.dm | 5 +- .../mob/living/carbon/alien/humanoid/queen.dm | 1 - .../mob/living/carbon/alien/larva/larva.dm | 2 - code/modules/projectiles/guns/mounted.dm | 28 +++++ .../research/designs/medical_designs.dm | 105 ++++++++++++++++++ code/modules/surgery/helpers.dm | 9 +- code/modules/surgery/organs/augments_eyes.dm | 3 +- .../surgery/organs/augments_internal.dm | 79 +++++++++++++ code/modules/surgery/organs/organ_internal.dm | 4 +- code/modules/surgery/organs/subtypes/xenos.dm | 16 +-- code/modules/surgery/organs_internal.dm | 10 +- icons/mob/inhands/guns_lefthand.dmi | Bin 38467 -> 41214 bytes icons/mob/inhands/guns_righthand.dmi | Bin 39808 -> 41560 bytes icons/obj/gun.dmi | Bin 79633 -> 80196 bytes icons/obj/storage.dmi | Bin 78375 -> 78662 bytes icons/obj/surgery.dmi | Bin 30509 -> 30886 bytes paradise.dme | 1 + 22 files changed, 268 insertions(+), 64 deletions(-) create mode 100644 code/modules/projectiles/guns/mounted.dm diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index f3e6de46321..9d1e011f87f 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -52,27 +52,35 @@ if(src.table && (src.table.check_victim())) src.victim = src.table.victim dat += {" -Patient Information:
    -
    -Name: [src.victim.real_name]
    -Age: [src.victim.age]
    -Blood Type: [src.victim.b_type]
    -
    -Health: [src.victim.health]
    -Brute Damage: [src.victim.getBruteLoss()]
    -Toxins Damage: [src.victim.getToxLoss()]
    -Fire Damage: [src.victim.getFireLoss()]
    -Suffocation Damage: [src.victim.getOxyLoss()]
    -Patient Status: [src.victim.stat ? "Non-Responsive" : "Stable"]
    -Heartbeat rate: [victim.get_pulse(GETPULSE_TOOL)]
    -"} + Patient Information:
    +
    + Name: [src.victim.real_name]
    + Age: [src.victim.age]
    + Blood Type: [src.victim.b_type]
    +
    + Health: [src.victim.health]
    + Brute Damage: [src.victim.getBruteLoss()]
    + Toxins Damage: [src.victim.getToxLoss()]
    + Fire Damage: [src.victim.getFireLoss()]
    + Suffocation Damage: [src.victim.getOxyLoss()]
    + Patient Status: [src.victim.stat ? "Non-Responsive" : "Stable"]
    + Heartbeat rate: [victim.get_pulse(GETPULSE_TOOL)]
    + "} + + if(victim.surgeries.len) + dat += "

    Initiated Procedures
    " + for(var/datum/surgery/procedure in victim.surgeries) + dat += "[capitalize(procedure.name)]
    " + var/datum/surgery_step/surgery_step = procedure.get_surgery_step() + dat += "Next step: [capitalize(surgery_step.name)]
    " else src.victim = null dat += {" -Patient Information:
    -
    -No Patient Detected -"} + Patient Information:
    +
    + No Patient Detected + "} + user << browse(dat, "window=op") onclose(user, "op") diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index a07765d5e82..f083a419713 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -10,8 +10,6 @@ gender = NEUTER dna = null - var/storedPlasma = 250 - var/max_plasma = 500 alien_talk_understand = 1 @@ -24,7 +22,7 @@ status_flags = CANPARALYSE|CANPUSH var/heal_rate = 5 - var/plasma_rate = 5 + //var/plasma_rate = 5 var/large = 0 var/heat_protection = 0.5 @@ -60,8 +58,7 @@ /mob/living/carbon/alien/adjustToxLoss(amount) - storedPlasma = min(max(storedPlasma + amount,0),max_plasma) //upper limit of max_plasma, lower limit of 0 - updatePlasmaDisplay() + //moved to xeno organs return /mob/living/carbon/alien/adjustFireLoss(amount) // Weak to Fire @@ -71,8 +68,8 @@ ..(amount) return -/mob/living/carbon/alien/getPlasma() - return storedPlasma +///mob/living/carbon/alien/getPlasma() +// return storedPlasma /mob/living/carbon/alien/eyecheck() return 2 @@ -87,13 +84,14 @@ /mob/living/carbon/alien/handle_environment(var/datum/gas_mixture/environment) //If there are alien weeds on the ground then heal if needed or give some toxins - if(locate(/obj/structure/alien/weeds) in loc) + /*if(locate(/obj/structure/alien/weeds) in loc) if(health >= maxHealth - getCloneLoss()) adjustToxLoss(plasma_rate) else adjustBruteLoss(-heal_rate) adjustFireLoss(-heal_rate) adjustOxyLoss(-heal_rate) + *///moved to organs if(!environment) return @@ -181,8 +179,8 @@ ..() - if (client.statpanel == "Status") - stat(null, "Plasma Stored: [getPlasma()]/[max_plasma]") + //if (client.statpanel == "Status")//ORGANS + // stat(null, "Plasma Stored: [getPlasma()]/[max_plasma]") if(shuttle_master.emergency.mode >= SHUTTLE_RECALL) var/timeleft = shuttle_master.emergency.timeLeft() diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index 4a35eb8afa4..3e089bb33b8 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -4,7 +4,6 @@ maxHealth = 100 health = 100 icon_state = "aliend_s" - plasma_rate = 15 /mob/living/carbon/alien/humanoid/drone/New() var/datum/reagents/R = new/datum/reagents(100) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 567987ff50d..9a667ab79fc 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -3,10 +3,7 @@ caste = "h" maxHealth = 125 health = 125 - storedPlasma = 100 - max_plasma = 150 icon_state = "alienh_s" - plasma_rate = 5 /mob/living/carbon/alien/humanoid/hunter/New() var/datum/reagents/R = new/datum/reagents(100) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index defb8a1554d..8a2e835e23a 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -3,10 +3,7 @@ caste = "s" maxHealth = 150 health = 150 - storedPlasma = 100 - max_plasma = 250 icon_state = "aliens_s" - plasma_rate = 10 /mob/living/carbon/alien/humanoid/sentinel/large name = "alien praetorian" diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm index 3be1e389671..3c1cadaae7d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm @@ -5,10 +5,7 @@ health = 700 icon_state = "alienq_s" status_flags = CANPARALYSE - heal_rate = 5 - plasma_rate = 20 move_delay_add = 3 - max_plasma = 1000 large = 1 ventcrawler = 0 @@ -48,7 +45,7 @@ break real_name = src.name - internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen + //internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen internal_organs += new /obj/item/organ/internal/xenos/acidgland internal_organs += new /obj/item/organ/internal/xenos/eggsac internal_organs += new /obj/item/organ/internal/xenos/resinspinner diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index e79338f5e90..e84f74683b3 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -6,7 +6,6 @@ icon_state = "alienq_s" status_flags = CANPARALYSE heal_rate = 5 - plasma_rate = 20 large = 1 ventcrawler = 0 diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index df0c64f40d0..90b3aa3ebb8 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -6,8 +6,6 @@ maxHealth = 30 health = 30 - storedPlasma = 50 - max_plasma = 50 density = 0 var/amount_grown = 0 diff --git a/code/modules/projectiles/guns/mounted.dm b/code/modules/projectiles/guns/mounted.dm new file mode 100644 index 00000000000..4cb965f3727 --- /dev/null +++ b/code/modules/projectiles/guns/mounted.dm @@ -0,0 +1,28 @@ +/obj/item/weapon/gun/energy/gun/advtaser/mounted + name = "mounted taser" + desc = "An arm mounted dual-mode weapon that fires electrodes and disabler shots." + icon_state = "armcannon" + force = "5" + self_recharge = 1 + flags = NODROP + slot_flags = null + w_class = 5.0 + can_flashlight = 0 + +/obj/item/weapon/gun/energy/gun/advtaser/mounted/dropped()//if somebody manages to drop this somehow... + src.loc = null//send it to nullspace to get retrieved by the implant later on. gotta cover those edge cases. + +/obj/item/weapon/gun/energy/laser/mounted + name = "mounted laser" + desc = "An arm mounted cannon that fires lethal lasers. Doesn't come with a charge beam." + icon_state = "armcannon" + item_state = "armcannonlase" + force = "5" + self_recharge = 1 + flags = NODROP + slot_flags = null + w_class = 5.0 + materials = null + +/obj/item/weapon/gun/energy/laser/mounted/dropped() + src.loc = null \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index d0ed135176f..e5d0775457f 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -198,6 +198,111 @@ build_path = /obj/item/weapon/scalpel/manager category = list("Medical") + +///////////////////////////////////////// +//////////Cybernetic Implants//////////// +///////////////////////////////////////// + +/datum/design/cyberimp_welding + name = "Welding Shield implant" + desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision." + id = "ci-welding" + req_tech = list("materials" = 4, "biotech" = 2) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 400) + build_path = /obj/item/organ/internal/cyberimp/eyes/shield + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_medical_hud + name = "Medical HUD implant" + desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." + id = "ci-medhud" + req_tech = list("materials" = 6, "programming" = 4, "biotech" = 4) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 500, MAT_GOLD = 500) + build_path = /obj/item/organ/internal/cyberimp/eyes/hud/medical + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_security_hud + name = "Security HUD implant" + desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control." + id = "ci-sechud" + req_tech = list("materials" = 6, "programming" = 5, "biotech" = 4, "combat" = 2) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 750, MAT_GOLD = 750) + build_path = /obj/item/organ/internal/cyberimp/eyes/hud/security + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_xray + name = "X-Ray implant" + desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." + id = "ci-xray" + req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6, "magnets" = 5) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_URANIUM = 1000, MAT_DIAMOND = 2000) + build_path = /obj/item/organ/internal/cyberimp/eyes/xray + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_thermals + name = "Thermals implant" + desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." + id = "ci-thermals" + req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "syndicate" = 5) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + build_path = /obj/item/organ/internal/cyberimp/eyes/thermals + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_antidrop + name = "Anti-Drop implant" + desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." + id = "ci-antidrop" + req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 400, MAT_GOLD = 400) + build_path = /obj/item/organ/internal/cyberimp/brain/anti_drop + category = list("Medical Designs") + +/datum/design/cyberimp_antistun + name = "CNS Rebooter implant" + desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." + id = "ci-antistun" + req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 500, MAT_GOLD = 1000) + build_path = /obj/item/organ/internal/cyberimp/brain/anti_stun + category = list("Medical Designs") + +/datum/design/cyberimp_nutriment + name = "Nutriment pump implant" + desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." + id = "ci-nutriment" + req_tech = list("materials" = 6, "programming" = 4, "biotech" = 5) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 500, MAT_URANIUM = 500) + build_path = /obj/item/organ/internal/cyberimp/chest/nutriment + category = list("Medical Designs") + +/datum/design/cyberimp_nutriment_plus + name = "Nutriment pump implant PLUS" + desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." + id = "ci-nutrimentplus" + req_tech = list("materials" = 6, "programming" = 4, "biotech" = 6) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 500, MAT_URANIUM = 750) + build_path = /obj/item/organ/internal/cyberimp/chest/nutriment/plus + category = list("Medical Designs") + +/datum/design/cyberimp_reviver + name = "Reviver implant" + desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" + id = "ci-reviver" + req_tech = list("materials" = 6, "programming" = 4, "biotech" = 7, "syndicate" = 4) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 500, MAT_URANIUM = 1000, MAT_DIAMOND = 2000) + build_path = /obj/item/organ/internal/cyberimp/chest/reviver + category = list("Misc", "Medical Designs") + ///////////////////////////////////////// ////////////Regular Implants///////////// ///////////////////////////////////////// diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 916bc985f06..0871c8327ea 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -35,7 +35,8 @@ if(override) if(I == /obj/item/robot_parts) var/datum/surgery/S = available_surgeries["robotic limb attachment"] - if(S)//we might be targetting a zone without the named procedure. + world << "[S]" + if(S) var/datum/surgery/procedure = new S.type if(procedure) procedure.location = selected_zone @@ -56,11 +57,9 @@ "You prepare to operate on [M]'s [parse_zone(selected_zone)].") else if(!current_surgery.step_in_progress) - if(current_surgery.status == 1) + if(current_surgery.status == 0 || current_surgery.status == 1 ) M.surgeries -= current_surgery - //need a new message - //user.visible_message("[user] removes the drapes from [M]'s [parse_zone(selected_zone)].", \ - // "You remove the drapes from [M]'s [parse_zone(selected_zone)].") + user << "You stop the surgery." qdel(current_surgery) else if(istype(user.get_inactive_hand(), /obj/item/weapon/cautery) && current_surgery.can_cancel) M.surgeries -= current_surgery diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 8a32ed9baf5..2d787db5fe5 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -38,7 +38,6 @@ if(aug_message && !special) owner << "[aug_message]" M.sight |= vision_flags - world << "[M.sight]" /obj/item/organ/internal/cyberimp/eyes/remove(var/mob/living/carbon/M, var/special = 0) ..() @@ -113,7 +112,7 @@ /obj/item/organ/internal/cyberimp/eyes/hud/medical name = "Medical HUD implant" desc = "These cybernetic eye implants will display a medical HUD over everything you see." - eye_colour = list(15,15,0) + eye_colour = list(0,0,50) implant_color = "#00FFFF" origin_tech = "materials=4;programming=3;biotech=4" aug_message = "You suddenly see health bars floating above people's heads..." diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 7bbcd155cfb..719cff9dd0c 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -248,6 +248,85 @@ if(H.stat == CONSCIOUS) H << "You feel your heart beating again!" +//ARM...THAT GO IN THE CHEST +/obj/item/organ/internal/cyberimp/chest/arm_mod//dummy parent item for making arm-mod implants. works best with nodrop items that are sent to nullspace upon being dropped. + name = "Arm-mounted item implant" + desc = "You shouldn't see this! Adminhelp and report this as an issue on github!" + icon_state = "chest_implant" + implant_color = "#007ACC" + slot = "shoulders" + origin_tech = "materials=5;biotech=4;powerstorage=4" + organ_action_name = "Toggle Arm Mod" + var/obj/holder//is defined as the retractable item itself. ensure this is defined somewhere! + var/out = 0//determines if the item is in the owner's hand or not + var/overloaded = 0//is set to 1 when owner gets EMPed. if set to 1, implant doesn't work. + var/lasthand = null + +/obj/item/organ/internal/cyberimp/chest/arm_mod/ui_action_click() + if(overloaded)//ensure the implant isn't broken + owner.visible_message("The implant doesn't respond. It seems to be broken...") + return + if(out)//check if the owner has the item out already + owner.unEquip(holder, 1)//if he does, take it away. then, + holder.loc = null//stash it in nullspace + out = 0//and set this to clarify the item isn't out. + owner.visible_message("You retract [holder].") + playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) + else//if he doesn't have the item out + if(owner.put_in_hands(holder))//put it in his hands. + lasthand = owner.get_active_hand() + out = 1 + owner.visible_message("You extend [holder]!") + playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) + else//if this fails to put the item in his hands, + holder.loc = null//keep it in nullspace + owner.visible_message("You can't extend [holder] if you can't use your hands!") + +/obj/item/organ/internal/cyberimp/chest/arm_mod/emp_act(severity)//if the implant gets EMPed... + if(!owner || overloaded)//ensure that it's in an owner and that it's not already EMPed, then... + return + if(out)//check if he has the item out... + owner.unEquip(holder, 1)//if he does, take it away. + holder.loc = null + out = 0 + owner.visible_message("[holder] forcibly retracts into your arm.") + owner.visible_message("A loud bang comes from [owner]...") + playsound(get_turf(owner), 'sound/effects/bang.ogg', 100, 1) + owner << "You feel an explosion erupt inside you as your chest implant breaks. Is it hot in here?" + owner.adjust_fire_stacks(20) + owner.IgniteMob()//ignite the owner, as well as + owner.say("AUUUUUUUUUUUUUUUUUUGH!!") + if(prob(50)) + if(lasthand == "r_hand") + var/obj/item/organ/external/limb = owner.get_organ("r_arm") + limb.droplimb(0, DROPLIMB_EDGE) + else if(lasthand == "l_hand") + var/obj/item/organ/external/limb = owner.get_organ("l_arm") + limb.droplimb(0, DROPLIMB_EDGE) + owner.say("I HAVE BEEN DISARMED!!!") + owner.adjustFireLoss(25)//severely injure him! + overloaded = 1//then make sure this can't happen again by breaking the implant. + +/obj/item/organ/internal/cyberimp/chest/arm_mod/tase//mounted, self-charging taser! + name = "Arm-cannon taser implant" + desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arms and remains in the shoulders when not in use." + icon_state = "armcannon_tase_implant" + origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4" + organ_action_name = "Toggle Arm Cannon Taser" + +/obj/item/organ/internal/cyberimp/chest/arm_mod/tase/New()//when the implant is created... + holder = new /obj/item/weapon/gun/energy/gun/advtaser/mounted(src)//assign a brand new item to it. (in this case, a gun) + +/obj/item/organ/internal/cyberimp/chest/arm_mod/lase//mounted, self-charging laser! + name = "Arm-cannon laser implant" + desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arms and remains in the shoulders when not in use." + icon_state = "armcannon_lase_implant" + origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4;syndicate=5"//this is kinda nutty and i might lower it + organ_action_name = "Toggle Arm Cannon Laser" + +/obj/item/organ/internal/cyberimp/chest/arm_mod/lase/New() + holder = new /obj/item/weapon/gun/energy/laser/mounted(src) + //BOX O' IMPLANTS /obj/item/weapon/storage/box/cyber_implants name = "boxed cybernetic implants" diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 7f5c0e2b152..5d3717a3d75 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -354,12 +354,12 @@ M.mutations.Remove(COMICBLOCK) //genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED) -/obj/item/organ/internal/honktumor/process() +/obj/item/organ/internal/honktumor/on_life() if(!owner) return - if(lasthonk > world.time + 60|| lasthonk == 0) + if(lasthonk > world.time + 600|| lasthonk == 0) lasthonk = world.time owner << "HONK" owner.sleeping = 0 diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index 985d2b9d533..0a99983ca49 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -5,22 +5,22 @@ tough = 1 sterile = 1 -/obj/item/organ/internal/xenos/New() - for(var/A in alien_powers) - if(ispath(A)) - alien_powers -= A - alien_powers += new A(src) - ..() +///obj/item/organ/internal/xenos/New() +// for(var/A in alien_powers) +// if(ispath(A)) +// alien_powers -= A +// alien_powers += new A(src) +// ..() ///can be changed if xenos get an update.. /obj/item/organ/internal/xenos/insert(mob/living/carbon/M, special = 0) ..() for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) - M.verbs += P //at least until xeno powers are vamped to TG + verbs += P //at least until xeno powers are vamped to TG /obj/item/organ/internal/xenos/remove(mob/living/carbon/M, special = 0) for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) - M.verbs -= P + verbs -= P ..() diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 939e10e7bf8..48a83ec62f5 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -43,7 +43,7 @@ // Dethrall Shadowling // ////////////////////////////////////////////////////////////////// /datum/surgery/remove_thrall - name = "clense contaminations" + name = "clense contaminations"//RENAME MEH steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall) possible_locs = list("head") @@ -211,7 +211,7 @@ //same as surgery step /datum/surgery_step/open_encased/close/ current_type = "finish" var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected == "head" || affected == "upper body") + if(affected.encased) var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." user.visible_message(msg, self_msg) @@ -325,14 +325,14 @@ else if(current_type == "finish") var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(target_zone == "head" || target_zone == "upper body") + if(affected.encased) var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." user.visible_message(msg, self_msg) affected.open = 2.5 else - var/msg = "[user] pulls [target]'s skin back into place with \the [tool]." - var/self_msg = "You pull [target]'s skin back into place with \the [tool]." + var/msg = "[user] pulls [target]'s flesh back into place with \the [tool]." + var/self_msg = "You pull [target]'s flesh back into place with \the [tool]." user.visible_message(msg, self_msg) return 1 diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi index 1d0f86b58429a4aa40a3fead3dfb4bba36c6498f..f92115bf33b680c9c56990868885d852f2c77e57 100644 GIT binary patch literal 41214 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

    6Wusb?JYbpG7ZBZ}I-qyCzxkN)jvW}Uv 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 literal 38467 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≈b-rCxl?Llg0XO0m|KT5n`SHTllpVP;XD%3J(2RO#Q=e)xR%-e@`@D(a>G0&C6eFeDYr0(zsTkjUyDZPE1oe(zub zle}goS3_9J?U2$FxGlWM=TY)(5?CQTO&C)as|7_x@dql31h4(!f6+o%aG25i6*jS^ zMrwl4H9_ONAfi~PxmRlgnUuRFa~`k`@J>)Z>r_0}MXAvS{57i&4EF4e=FW$wWoI|f z6z~iM_73vn*hi^Y?1b#@r`v7Hy;Fr3%+%MwJ@EG2(UIk4A@}9kl#`xaI5Ot1fy2|z z3&yDqoS1*mz$$a?l_67Dj`JMO7k`3)8>~Cd80Ohktp|#(NKi~B;@WRu<8r=1^oK&`#gGcZz0D21jSh>sidYL8=@qQw&?Dd^#5_(y2SO9i%$X-;$k6q zFzw#D?VnDn4+q4JiQZO^+JXwD;TU4-hJAfSPCX+d8BtMcZG<&(%)zzqk2#@yx&vy0 zL&>#rs?O)yvY0QGqXDR6lDBW+Kl-p(q%ZT}%GD)=N+_i!`)d)-5E?V!SZ z!i>ECfLo?>Snhb^K;zPS*&d;@-r0SOpUYimz&K)FOOO~A2MX5P+)s3tFOZ{6&L;Gzw( z1%r{SVj4$y3cWmg)yODaj+{^R7$pUi@nN4bjJeX$M`2)?ND$xbXdK z*o-;8Q&x9zi=u7Ci7}1iwiWH6Klb3KI7sem%nSN}vLC4YbaqbusU{z7lah~2dTv?S z-5O?dj<{AC-Fy7U#c~&w@M}~E1{IwpKCgM>PZFcGClaI*0yA55=fOx}H!BnzWTQdH zDJm*9zPu^hd=rU8nvQz7yEk*RhYOM9gMiB~e|hqo|B}hVyNeN*9VS-Zh96`ONz_G^ z@q0HDp)&~>%*O^Elap(>aAqIUa$cm-@uX3#lET)k%1W8B-FqYTjQ#y1z&<-PugW%9 zY1SSPv}op&C3~X?51C`Zy02vF9Z#Buy?o4jm$>+tL=?lGzZi|}2EDB;|6rS_ zlFH_t2fJa=s=gh1u2d(wIC?IyGFNBMa`Gcn&`kO@iwh63We*k)3=9ZIf00w;OkMcF z!cN795u(HH2ScZRX;F$P6ZZOW7`Z%eZm^sV&M(Z8KR?{5bJMwaK0tEUDOY(V{$DAsUf3bjF5XQ{o|`8qbooyaaOd0 z&m)39Rf!U=ITqb$6r4r=*59$00-7d(k0vGjHNldo@(eM)BS?Jtef$n>g*SYxu8Fm1 zEpXt^SfYCedV4bf|JI;aGVC_YF{?nU$?V=zT3Y&EyNu#oynI=jXwV0aUiHyV3B}n4 z1OzyvNE%}*^cj!Kn$GP?sN($EhNVDR)`f(s0OybM0i0X9V~x?4US4_eMq(w~@QOex zi^;k+PO>Qs-WIJ{G?j}}#qfgoKn^;<_z9%gp(bAPDMUe_6H)8{0#j{mZGFwg#-qQO zEzTX=X*zuOu~q2UWqPhMxzqS9{8-#Mo7FW1g51)^-!!~@$wjfzbJF_T7Qkc%t>yrf zL<8yFGnb`-;#DIgdo^c8#gJQumr|cTIudh4xDN~ z3>qtJp>FfqR9f_!;?GeA3tNiOUH!fuoRQQFxFoz#CNSQCOToOD9#9@lP~T#zQ`0a| zObhd(*4o9%hKDrYbihZZ0sz;U@Mey`DD$C?utY0e?7|}H_^iMOVYP|5T6S5JpnP0X zO2wC2{+y45T-B-9wyU$0h=BoXx+!)oE{8VzNVq*n6_jy?8JJ8G$t3cChMAX_msP^| zs(C`ob4ji1SWb(B3TXW>2AW!&F2!PJFO$@i>4M*MD0F=ZLbH$4Snn9FoUgO&B<m zMsaiz2B^8jLaH=xbSL(Ov_rMQ>p-@uOY7?*ab=fWH6QOQ7{MhAoyESBG>w&H)@6PD z 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 Y3WF!?E;(N{F<0RO<%ddz_ssqO8_-ewpa1{> diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index f5d84cb5f0e51631e3975e7660d6b63ae8aa4a11..cc7c2527e5497a5c6984b7789b93357cf90a3497 100644 GIT binary patch literal 41560 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%0ArPd3l#@J3m}+EPQf~PC=u9-rNy0D03)+OQK`U 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⋙l79IJk_h1CKeb&85$WLUE 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 b-I<_B)7RX#=r>UU0e|YMI(Ledt)Kocs960v diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index d2eca5637a7a1cbf86a75db955fc413b84dc3148..04ae145306e0ace50781abff45699710ffa4abcf 100644 GIT binary patch delta 18750 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 S{4XJJT)v>EovURP`2PTP&B68n delta 18183 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 diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 111bc8d2061b0289f90afbda82e56b4d7212c603..4102fea9ca81ae033a69cfa517252f94e750b39c 100644 GIT binary patch delta 18122 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 diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 6677e3bcdf797205b4918b4695026e1210394278..42379ff68b6a29c3009c363031a82c5200ac5986 100644 GIT binary patch delta 12021 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 Date: Tue, 26 Jan 2016 20:53:13 -0500 Subject: [PATCH 029/442] home streach. --- code/datums/datumvars.dm | 5 +- .../carbon/alien/humanoid/alien_powers.dm | 2 +- code/modules/projectiles/guns/mounted.dm | 5 +- code/modules/surgery/bones.dm | 14 +- code/modules/surgery/encased.dm | 10 +- code/modules/surgery/face.dm | 17 +- code/modules/surgery/generic.dm | 126 ++---- code/modules/surgery/implant.dm | 62 ++- code/modules/surgery/limb_reattach.dm | 7 +- .../surgery/organs/augments_internal.dm | 2 +- code/modules/surgery/organs/organ.dm | 12 +- code/modules/surgery/organs/organ_internal.dm | 46 +- code/modules/surgery/organs/subtypes/xenos.dm | 10 +- code/modules/surgery/organs_internal.dm | 418 +----------------- code/modules/surgery/other.dm | 60 ++- code/modules/surgery/robotics.dm | 28 +- code/modules/surgery/slime.dm | 3 - code/modules/surgery/surgery.dm | 18 +- code/modules/surgery/tools.dm | 10 +- icons/mob/inhands/guns_lefthand.dmi | Bin 41214 -> 41215 bytes icons/mob/inhands/guns_righthand.dmi | Bin 41560 -> 41561 bytes icons/obj/gun.dmi | Bin 80196 -> 80216 bytes 22 files changed, 260 insertions(+), 595 deletions(-) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 1e217acf30a..bc2d1e737ba 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -1,4 +1,3 @@ - // reference: /client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0) client @@ -993,8 +992,8 @@ client if(locate(new_organ) in M.internal_organs) usr << "Mob already has that organ." return - - new new_organ(M) + var/obj/item/organ/internal/organ = new new_organ + organ.insert(M) message_admins("[key_name_admin(usr)] has given [key_name_admin(M)] the organ [new_organ]") log_admin("[key_name(usr)] has given [key_name(M)] the organ [new_organ]") diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index ce95c4dd791..17680b80f56 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -6,7 +6,7 @@ These are general powers. Specific powers are stored under the appropriate alien Doesn't work on other aliens/AI.*/ -/mob/living/carbon/alien/proc/powerc(X, Y)//Y is optional, checks for weed planting. X can be null. +/mob/living/carbon/proc/powerc(X, Y)//Y is optional, checks for weed planting. X can be null. if(stat) src << "You must be conscious to do this." return 0 diff --git a/code/modules/projectiles/guns/mounted.dm b/code/modules/projectiles/guns/mounted.dm index 4cb965f3727..551d56bc4f8 100644 --- a/code/modules/projectiles/guns/mounted.dm +++ b/code/modules/projectiles/guns/mounted.dm @@ -1,7 +1,9 @@ /obj/item/weapon/gun/energy/gun/advtaser/mounted name = "mounted taser" desc = "An arm mounted dual-mode weapon that fires electrodes and disabler shots." - icon_state = "armcannon" + icon_state = "armcannon_stun" + item_state = "armcannonstun" + modifystate = "armcannon_stun" force = "5" self_recharge = 1 flags = NODROP @@ -17,6 +19,7 @@ desc = "An arm mounted cannon that fires lethal lasers. Doesn't come with a charge beam." icon_state = "armcannon" item_state = "armcannonlase" + modifystate = "armcannon" force = "5" self_recharge = 1 flags = NODROP diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 63d956e99c5..c26689a9675 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -16,6 +16,8 @@ //surgery steps /datum/surgery_step/glue_bone + name = "mend bone" + allowed_tools = list( /obj/item/weapon/bonegel = 100, \ /obj/item/weapon/screwdriver = 75 @@ -23,7 +25,6 @@ can_infect = 1 blood_level = 1 - min_duration = 50 max_duration = 60 /datum/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -53,12 +54,13 @@ return 0 /datum/surgery_step/set_bone + name = "set bone" + allowed_tools = list( /obj/item/weapon/bonesetter = 100, \ /obj/item/weapon/wrench = 75 \ ) - min_duration = 60 max_duration = 70 /datum/surgery_step/set_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -82,7 +84,7 @@ else user.visible_message("\blue [user] sets the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].", \ "\blue You set the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].") - affected.fracture() + affected.fracture()//can i remove this please? return 0 /datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -93,12 +95,13 @@ return 0 /datum/surgery_step/mend_skull + name = "mend skull" + allowed_tools = list( /obj/item/weapon/bonesetter = 100, \ /obj/item/weapon/wrench = 75 \ ) - min_duration = 60 max_duration = 70 /datum/surgery_step/mend_skull/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -128,6 +131,8 @@ return 0 /datum/surgery_step/finish_bone + name = "medicate bones" + allowed_tools = list( /obj/item/weapon/bonegel = 100, \ /obj/item/weapon/screwdriver = 75 @@ -135,7 +140,6 @@ can_infect = 1 blood_level = 1 - min_duration = 50 max_duration = 60 /datum/surgery_step/finish_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index d7caa513a5c..46d65e8b149 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -17,13 +17,13 @@ /datum/surgery_step/open_encased/saw + name = "saw bone" allowed_tools = list( /obj/item/weapon/circular_saw = 100, \ /obj/item/weapon/melee/energy/sword/cyborg/saw = 100, \ /obj/item/weapon/hatchet = 75 ) - min_duration = 50 max_duration = 70 /datum/surgery_step/open_encased/saw/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -70,12 +70,13 @@ /datum/surgery_step/open_encased/retract + name = "retract bone" allowed_tools = list( + /obj/item/weapon/scalpel/manager = 120, \ /obj/item/weapon/retractor = 100, \ /obj/item/weapon/crowbar = 75 ) - min_duration = 30 max_duration = 40 /datum/surgery_step/open_encased/retract/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -130,12 +131,13 @@ return 0 /datum/surgery_step/open_encased/close + name = "unretract bone" //i suck at names okay? give me a new one allowed_tools = list( + /obj/item/weapon/scalpel/manager = 120, \ /obj/item/weapon/retractor = 100, \ /obj/item/weapon/crowbar = 75 ) - min_duration = 20 max_duration = 40 /datum/surgery_step/open_encased/close/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -187,12 +189,12 @@ return 0 /datum/surgery_step/open_encased/mend + name = "mend bone" allowed_tools = list( /obj/item/weapon/bonegel = 100, \ /obj/item/weapon/screwdriver = 75 ) - min_duration = 20 max_duration = 40 /datum/surgery_step/open_encased/mend/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index 4f39d969232..3ab54efc376 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -20,13 +20,17 @@ return target_zone == "mouth" /datum/surgery_step/generic/cut_face + name = "make incision" allowed_tools = list( + /obj/item/weapon/scalpel/laser3 = 115, \ + /obj/item/weapon/scalpel/laser2 = 110, \ + /obj/item/weapon/scalpel/laser1 = 105, \ + /obj/item/weapon/scalpel/manager = 120, \ /obj/item/weapon/scalpel = 100, \ /obj/item/weapon/kitchenknife = 75, \ /obj/item/weapon/shard = 50, \ ) - min_duration = 90 max_duration = 110 /datum/surgery_step/generic/cut_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -54,13 +58,14 @@ return 0 /datum/surgery_step/face/mend_vocal + name = "mend vocal cords" allowed_tools = list( + /obj/item/weapon/scalpel/manager = 120, \ /obj/item/weapon/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ /obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity. ) - min_duration = 70 max_duration = 90 /datum/surgery_step/face/mend_vocal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -84,12 +89,13 @@ return 0 /datum/surgery_step/face/fix_face + name = "reshape face" allowed_tools = list( + /obj/item/weapon/scalpel/manager = 120, \ /obj/item/weapon/retractor = 100, \ /obj/item/weapon/crowbar = 55, \ /obj/item/weapon/kitchen/utensil/fork = 75) - min_duration = 80 max_duration = 100 /datum/surgery_step/face/fix_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -114,14 +120,17 @@ return 0 /datum/surgery_step/face/cauterize + name = "close incision" allowed_tools = list( + /obj/item/weapon/scalpel/laser3 = 115, \ + /obj/item/weapon/scalpel/laser2 = 110, \ + /obj/item/weapon/scalpel/laser1 = 105, \ /obj/item/weapon/cautery = 100, \ /obj/item/clothing/mask/cigarette = 75, \ /obj/item/weapon/lighter = 50, \ /obj/item/weapon/weldingtool = 25 ) - min_duration = 70 max_duration = 100 /datum/surgery_step/face/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index fb329a5deab..f07cef38b97 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -20,109 +20,26 @@ return 0 return 1 -/datum/surgery_step/generic/cut_with_laser - allowed_tools = list( - /obj/item/weapon/scalpel/laser3 = 95, \ - /obj/item/weapon/scalpel/laser2 = 85, \ - /obj/item/weapon/scalpel/laser1 = 75, \ - /obj/item/weapon/melee/energy/ = 5, \ - /obj/item/weapon/pen/edagger = 5, \ - ) - - min_duration = 90 - max_duration = 110 - -/datum/surgery_step/generic/cut_with_laser/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(..()) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected.open == 0 && target_zone != "mouth" - -/datum/surgery_step/generic/cut_with_laser/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts the bloodless incision on [target]'s [affected.name] with \the [tool].", \ - "You start the bloodless incision on [target]'s [affected.name] with \the [tool].") - target.custom_pain("You feel a horrible, searing pain in your [affected.name]!",1) - ..() - -/datum/surgery_step/generic/cut_with_laser/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message(" [user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].", \ - " You have made a bloodless incision on [target]'s [affected.name] with \the [tool].",) - //Could be cleaner ... - affected.open = 1 - - if(istype(target) && !(target.species.flags & NO_BLOOD)) - affected.status |= ORGAN_BLEEDING - - affected.createwound(CUT, 1) - affected.clamp() - spread_germs_to_organ(affected, user) - return 1 - -/datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message(" [user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 7.5) - affected.createwound(BURN, 12.5) - return 0 - -/datum/surgery_step/generic/incision_manager - allowed_tools = list( - /obj/item/weapon/scalpel/manager = 100 - ) - - min_duration = 80 - max_duration = 120 - -/datum/surgery_step/generic/incision_manager/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(..()) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected.open == 0 && target_zone != "mouth" - -/datum/surgery_step/generic/incision_manager/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].", \ - "You start to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].") - target.custom_pain("You feel a horrible, searing pain in your [affected.name] as it is pushed apart!",1) - ..() - -/datum/surgery_step/generic/incision_manager/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].", \ - "\blue You have constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].",) - affected.open = 1 - - if(istype(target) && !(target.species.flags & NO_BLOOD)) - affected.status |= ORGAN_BLEEDING - - affected.createwound(CUT, 1) - affected.clamp() - affected.open = 2 - - return 1 - -/datum/surgery_step/generic/incision_manager/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 20) - affected.createwound(BURN, 15) - - return 2 /datum/surgery_step/generic/cut_open + name = "make incision" + allowed_tools = list( + /obj/item/weapon/scalpel/laser3 = 115, \ + /obj/item/weapon/scalpel/laser2 = 110, \ + /obj/item/weapon/scalpel/laser1 = 105, \ + /obj/item/weapon/scalpel/manager = 120, \ /obj/item/weapon/scalpel = 100, \ /obj/item/weapon/kitchenknife = 75, \ /obj/item/weapon/shard = 50, \ /obj/item/weapon/scissors = 10, \ /obj/item/weapon/twohanded/chainsaw = 1, \ /obj/item/weapon/claymore = 5, \ + /obj/item/weapon/melee/energy/ = 5, \ + /obj/item/weapon/pen/edagger = 5, \ ) - min_duration = 90 - max_duration = 110 + max_duration = 60 /datum/surgery_step/generic/cut_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -154,13 +71,18 @@ return 0 /datum/surgery_step/generic/clamp_bleeders + name = "clamp bleeders" + allowed_tools = list( + /obj/item/weapon/scalpel/laser3 = 115, \ + /obj/item/weapon/scalpel/laser2 = 110, \ + /obj/item/weapon/scalpel/laser1 = 105, \ + /obj/item/weapon/scalpel/manager = 120, \ /obj/item/weapon/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ /obj/item/device/assembly/mousetrap = 20 ) - min_duration = 40 max_duration = 60 @@ -192,13 +114,15 @@ return 0 /datum/surgery_step/generic/retract_skin + name = "retract skin" + allowed_tools = list( + /obj/item/weapon/scalpel/manager = 120, \ /obj/item/weapon/retractor = 100, \ /obj/item/weapon/crowbar = 75, \ /obj/item/weapon/kitchen/utensil/fork = 50 ) - min_duration = 30 max_duration = 40 /datum/surgery_step/generic/retract_skin/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -248,15 +172,20 @@ return 0 /datum/surgery_step/generic/cauterize + + name = "cauterize incision" + allowed_tools = list( + /obj/item/weapon/scalpel/laser3 = 115, \ + /obj/item/weapon/scalpel/laser2 = 110, \ + /obj/item/weapon/scalpel/laser1 = 105, \ /obj/item/weapon/cautery = 100, \ /obj/item/clothing/mask/cigarette = 75, \ /obj/item/weapon/lighter = 50, \ /obj/item/weapon/weldingtool = 25 ) - min_duration = 70 - max_duration = 100 + max_duration = 90 /datum/surgery_step/generic/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -287,6 +216,8 @@ /datum/surgery_step/generic/amputate + name = "amputate limb" + allowed_tools = list( /obj/item/weapon/circular_saw = 100, \ /obj/item/weapon/melee/energy/sword/cyborg/saw = 100, \ @@ -294,8 +225,7 @@ /obj/item/weapon/melee/arm_blade = 60 ) - min_duration = 110 - max_duration = 160 + max_duration = 110 /datum/surgery_step/generic/amputate/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (target_zone == "eyes") //there are specific steps for eye surgery diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 87c20ada7ed..4cd06a68402 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -54,13 +54,13 @@ affected.createwound(CUT, 20) /datum/surgery_step/cavity/make_space + name = "make cavity space" allowed_tools = list( /obj/item/weapon/surgicaldrill = 100, \ /obj/item/weapon/pen = 75, \ /obj/item/stack/rods = 50 ) - min_duration = 60 max_duration = 80 /datum/surgery_step/cavity/make_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -83,15 +83,18 @@ return 1 /datum/surgery_step/cavity/close_space - priority = 2 + name = "close cavity space" allowed_tools = list( + /obj/item/weapon/scalpel/laser3 = 115, \ + /obj/item/weapon/scalpel/laser2 = 110, \ + /obj/item/weapon/scalpel/laser1 = 105, \ + /obj/item/weapon/scalpel/manager = 120, \ /obj/item/weapon/cautery = 100, \ /obj/item/clothing/mask/cigarette = 75, \ /obj/item/weapon/lighter = 50, \ /obj/item/weapon/weldingtool = 25 ) - min_duration = 60 max_duration = 80 /datum/surgery_step/cavity/close_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -115,10 +118,12 @@ /datum/surgery_step/cavity/place_item - priority = 0 + name = "implant object" + accept_hand = 1 + accept_any_item = 1 + var/obj/item/IC = null allowed_tools = list(/obj/item = 100) - min_duration = 80 max_duration = 100 @@ -131,8 +136,15 @@ /datum/surgery_step/cavity/place_item/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ - "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) + for(var/obj/item/I in target.internal_organs) + if(!istype(I, /obj/item/organ)) + IC = I + break + if(tool) + user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ + "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) + else + user.visible_message("[user] checks for items in [target]'s [target_zone].", "You check for items in [target]'s [target_zone]...") target.custom_pain("The pain in your chest is living hell!",1) ..() @@ -142,11 +154,12 @@ if(istype(tool, /obj/item/weapon/disk/nuclear)) user << "Central command would kill you if you implanted the disk into someone." return 0//fail - else + + if(tool) user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) - if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT)) - user << "\red You tear some vessels trying to fit such big object in this cavity." + if (IC || (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT))) + user << "\red You tear some vessels trying to fit the object in the cavity." var/datum/wound/internal_bleeding/I = new () affected.wounds += I affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) @@ -155,39 +168,50 @@ target.internal_organs += tool tool.loc = target affected.cavity = 0 - return 1 + else + if(IC) + user.visible_message("[user] pulls [IC] out of [target]'s [target_zone]!", "You pull [IC] out of [target]'s [target_zone].") + user.put_in_hands(IC) + target.internal_organs -= IC + return 1 + else + user << "You don't find anything in [target]'s [target_zone]." + return 0 + ////////////////////////////////////////////////////////////////// // IMPLANT/ITEM REMOVAL SURGERY // ////////////////////////////////////////////////////////////////// -///Fethas note:I might could condense this down but it would need to take out the part with poking around with a hemostat /datum/surgery/cavity_implant_rem name = "implant removal" steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) - possible_locs = list("chest","head") + possible_locs = list("chest","head")//head is for borers..i can put it elsewhere /datum/surgery_step/cavity/implant_removal + name = "extract implant" allowed_tools = list( /obj/item/weapon/hemostat = 100, \ /obj/item/weapon/wirecutters = 75, \ /obj/item/weapon/kitchen/utensil/fork = 20 ) - - min_duration = 80 - max_duration = 100 + var/obj/item/weapon/implant/I = null + max_duration = 70 /datum/surgery_step/cavity/implant_removal/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ + I = locate(/obj/item/weapon/implant) in target + if(I) + user.visible_message("[user] begins to extract [I] from [target]'s [target_zone].", "You begin to extract [I] from [target]'s [target_zone]...") + else + user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ "You start poking around inside [target]'s [affected.name] with \the [tool]." ) target.custom_pain("The pain in your [affected.name] is living hell!",1) ..() /datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/obj/item/weapon/implant/I = locate(/obj/item/weapon/implant) in target if (affected.implants.len) var/obj/item/obj = affected.implants[1] @@ -228,7 +252,7 @@ user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") else qdel(I) - target.sec_hud_set_implants() + //target.sec_hud_set_implants() return 1 else if (affected.hidden) user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 3ea7fc49acd..bd11f11db1e 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -57,7 +57,6 @@ return 0 /datum/surgery_step/limb/ - priority = 3 // Must be higher than /datum/surgery_step/internal can_infect = 0 can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if (!hasorgans(target)) @@ -69,9 +68,9 @@ return !isnull(organ_data) /datum/surgery_step/limb/attach + name = "attach limb" allowed_tools = list(/obj/item/organ/external = 100) - min_duration = 50 max_duration = 70 /datum/surgery_step/limb/attach/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -99,6 +98,7 @@ return 0 /datum/surgery_step/limb/connect + name = "connect limb" allowed_tools = list( /obj/item/weapon/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -106,7 +106,6 @@ ) can_infect = 1 - min_duration = 100 max_duration = 120 /datum/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -139,9 +138,9 @@ return 0 /datum/surgery_step/limb/mechanize + name = "attach robotic limb" allowed_tools = list(/obj/item/robot_parts = 100) - min_duration = 80 max_duration = 100 /datum/surgery_step/limb/mechanize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 719cff9dd0c..35e5560e4d3 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -1,4 +1,4 @@ -//note i am putting External in robolimbs. +datumvars//note i am putting External in robolimbs. #define STUN_SET_AMOUNT 2 diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 9808f8d6233..0d6942d3b73 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -29,7 +29,11 @@ var/list/organ_cache = list() var/freezer_update_period = 100 var/is_in_freezer = 0 -/obj/item/organ/Destroy() + var/sterile = 0 //can the organ be infected by germs? + var/tough = 0 //can organ be easily damaged? + + +/*/obj/item/organ/Destroy() if(!owner) return ..() @@ -49,7 +53,7 @@ var/list/organ_cache = list() if(src in owner.contents) owner.contents -= src - return ..() + return ..()*/ @@ -113,7 +117,7 @@ var/list/organ_cache = list() return //Process infections - if ((status & ORGAN_ROBOT) || (owner && owner.species && (owner.species.flags & IS_PLANT))) + if ((status & ORGAN_ROBOT) || (sterile) ||(owner && owner.species && (owner.species.flags & IS_PLANT))) germ_level = 0 return @@ -244,6 +248,8 @@ var/list/organ_cache = list() //Note: external organs have their own version of this proc /obj/item/organ/proc/take_damage(amount, var/silent=0) + if(tough) + return if(src.status & ORGAN_ROBOT) src.damage = between(0, src.damage + (amount * 0.8), max_damage) else diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 5d3717a3d75..9a1476bdfbc 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -9,8 +9,6 @@ var/slot vital = 0 var/organ_action_name = null - var/sterile = 0 //can the organ be infected by germs? - var/tough = 0 //can organ be easily damaged? /obj/item/organ/internal/proc/insert(mob/living/carbon/M, special = 0) if(!iscarbon(M) || owner == M) @@ -33,7 +31,6 @@ owner = null if(M) M.internal_organs -= src - //M.internal_organs_by_name[src] -= src if(vital && !special) M.death() @@ -46,6 +43,11 @@ /obj/item/organ/internal/proc/on_life() return +/obj/item/organ/internal/Destroy() + if(owner) + remove(owner, 1) + return ..() + /obj/item/organ/internal/proc/prepare_eat() var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new S.name = name @@ -129,6 +131,7 @@ organ_tag = "lungs" parent_organ = "chest" slot = "lungs" + vital = 1 //Insert something neat here. ///obj/item/organ/internal/lungs/remove(mob/living/carbon/M, special = 0) @@ -358,7 +361,8 @@ if(!owner) return - + if(lasthonk == 0) + lasthonk = world.time if(lasthonk > world.time + 600|| lasthonk == 0) lasthonk = world.time owner << "HONK" @@ -382,3 +386,37 @@ spawn(20) if(thingy) walk(thingy,0) + + +/obj/item/organ/internal/beard + name = "beard organ" + desc = "" + icon_state = "liver" + origin_tech = "biotech=1" + w_class = 1 + parent_organ = "head" + slot = "hair_organ" + + +/obj/item/organ/internal/beard/on_life() + + if(!owner) + return + + if(istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner + if(!(H.h_style == "Very Long Hair" || H.h_style == "Mowhawk")) + if(prob(10)) + H.h_style = "Mohawk" + else + H.h_style = "Very Long Hair" + H.r_hair = 216 + H.g_hair = 192 + H.b_hair = 120 + H.update_hair() + if(!(H.f_style == "Very Long Beard")) + H.f_style = "Very Long Beard" + H.r_facial = 216 + H.g_facial = 192 + H.b_facial = 120 + H.update_fhair() \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index 0a99983ca49..b99dd1575ab 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -15,12 +15,14 @@ ///can be changed if xenos get an update.. /obj/item/organ/internal/xenos/insert(mob/living/carbon/M, special = 0) ..() - for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) - verbs += P //at least until xeno powers are vamped to TG + for(var/P in alien_powers) + M.verbs |= P + //M.verbs |= alien_powers.Copy() /obj/item/organ/internal/xenos/remove(mob/living/carbon/M, special = 0) - for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers) - verbs -= P + for(var/P in alien_powers) + M.verbs -= P + //M.verbs -= alien_powers.Copy() ..() diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 48a83ec62f5..2af5a44e88c 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -39,59 +39,6 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected && affected.open_enough_for_surgery() -////////////////////////////////////////////////////////////////// -// Dethrall Shadowling // -////////////////////////////////////////////////////////////////// -/datum/surgery/remove_thrall - name = "clense contaminations"//RENAME MEH - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall) - possible_locs = list("head") - -/datum/surgery_step/internal/dethrall - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - - min_duration = 120 - max_duration = 120 - -/datum/surgery_step/internal/dethrall/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain") - -/datum/surgery_step/internal/dethrall/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] begins looking around in [target]'s [braincase].", "You begin looking for foreign influences on [target]'s brain...") - target << "A small part of your [braincase] pulses with agony as the light impacts it." - user.visible_message("[user] begins removing something from [target]'s [braincase].", \ - "You begin carefully extracting the tumor...") - ..() - -/datum/surgery_step/internal/dethrall/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ - "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") - ticker.mode.remove_thrall(target.mind,0) - new /obj/item/organ/internal/shadowtumor(get_turf(target)) - - return 1 - -/datum/surgery_step/internal/dethrall/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/braincase = target.named_organ_parent("brain") - if(prob(50)) - user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ - "You fumble and tear out [target]'s tumor!") - target.adjustBrainLoss(110) // This is so you can't just defib'n go - ticker.mode.remove_thrall(target.mind,1) - - return 0 - else - user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") - return 0 ////////////////////////////////////////////////////////////////// // ALIEN EMBRYO SURGERY // @@ -100,7 +47,7 @@ // steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) // possible_locs = list("chest") // disallowed_mob = (/mob/living/carbon/human/machine) - +//this is all handled bia organ mainpulation as an On_find /datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. allowed_tools = list( @@ -110,7 +57,6 @@ ) blood_level = 2 - min_duration = 80 max_duration = 100 /datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -165,16 +111,15 @@ /datum/surgery_step/internal/manipulate_organs - + name = "manipulate organs" allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) - var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55) + var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/kitchen/utensil/fork = 55) var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20) //Finish is just so you can close up after you do other things. - var/implements_finsh = list(/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75) + var/implements_finsh = list(/obj/item/weapon/scalpel/manager = 120,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75) var/current_type var/obj/item/organ/internal/I = null var/obj/item/organ/external/affected = null - min_duration = 70 max_duration = 90 /datum/surgery_step/internal/manipulate_organs/New() @@ -342,361 +287,6 @@ //todo set up fail steps - -////////////////////////////////////////////////////////////////// -// CHEST INTERNAL ORGAN SURGERY // -////////////////////////////////////////////////////////////////// -/* -/datum/surgery_step/internal/fix_organ - allowed_tools = list( - /obj/item/stack/medical/advanced/bruise_pack= 100, \ - /obj/item/stack/medical/bruise_pack = 20 - ) - - min_duration = 70 - max_duration = 90 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) - return - var/is_organ_damaged = 0 - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I.damage > 0 && I.robotic < 2) - is_organ_damaged = 1 - break - return ..() && is_organ_damaged - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - else if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0) - if(I.robotic < 2) - if(!I.sterile) - spread_germs_to_organ(I, user) - user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ - "You start treating damage to [target]'s [I.name] with [tool_name]." ) - - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I) - I.surgeryize() - if(I && I.damage > 0) - if(I.robotic < 2) - user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ - "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) - I.damage = 0 - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") - var/dam_amt = 2 - - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - target.adjustToxLoss(5) - - else if (istype(tool, /obj/item/stack/medical/bruise_pack)) - dam_amt = 5 - target.adjustToxLoss(10) - affected.createwound(CUT, 5) - - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0) - I.take_damage(dam_amt,0) - -/datum/surgery_step/internal/detatch_organ - - allowed_tools = list( - /obj/item/weapon/scalpel = 100, \ - /obj/item/weapon/kitchenknife = 75, \ - /obj/item/weapon/shard = 50, \ - ) - - min_duration = 90 - max_duration = 110 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!..()) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!(affected && !(affected.status & ORGAN_ROBOT))) - return 0 - - surgery.current_organ = null - surgery.organ_ref = null - - var/list/attached_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/internal/I = organ - if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - attached_organs[I.organ_tag] = I - - var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs - if(!organ_to_remove) - return 0 - - surgery.current_organ = organ_to_remove - surgery.organ_ref = attached_organs[organ_to_remove] - - return ..() && organ_to_remove - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - user.visible_message("[user] starts to separate [target]'s [surgery.current_organ] with \the [tool].", \ - "You start to separate [target]'s [surgery.current_organ] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\blue [user] has separated [target]'s [surgery.current_organ] with \the [tool]." , \ - "\blue You have separated [target]'s [surgery.current_organ] with \the [tool].") - - var/obj/item/organ/internal/I = surgery.organ_ref - if(I && istype(I)) - spread_germs_to_organ(I, user) - I.status |= ORGAN_CUT_AWAY - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, rand(30,50), 1) - -/datum/surgery_step/internal/remove_organ - - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - - min_duration = 60 - max_duration = 80 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!..()) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!istype(affected)) - return 0 - - surgery.current_organ = null - surgery.organ_ref = null - - var/list/removable_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/internal/I = organ - if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - removable_organs[I.organ_tag] = I - - var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs - if(!organ_to_remove) - return 0 - - surgery.current_organ = organ_to_remove - surgery.organ_ref = removable_organs[organ_to_remove] - return ..() - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("[user] starts removing [target]'s [surgery.current_organ] with \the [tool].", \ - "You start removing [target]'s [surgery.current_organ] with \the [tool].") - target.custom_pain("Someone's ripping out your [surgery.current_organ]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\blue [user] has removed [target]'s [surgery.current_organ] with \the [tool].", \ - "\blue You have removed [target]'s [surgery.current_organ] with \the [tool].") - - // Extract the organ! - if(surgery.current_organ) - var/obj/item/organ/internal/O = surgery.organ_ref - if(O && istype(O)) - - spread_germs_to_organ(O, user) - O.remove(target) - O.loc = get_turf(target) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 20) - -/datum/surgery_step/internal/replace_organ - allowed_tools = list( - /obj/item/organ/internal = 100 - ) - - min_duration = 60 - max_duration = 80 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - var/obj/item/organ/internal/O = tool - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) return - var/organ_compatible - var/organ_missing - - if(!istype(O)) - return 0 - - if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT)) - user << "You cannot install a naked organ into a robotic body." - return 2 - - if(!target.species) - user << "\red You have no idea what species this person is. Report this on the bug tracker." - return 2 - - var/o_is = (O.gender == PLURAL) ? "are" : "is" - var/o_a = (O.gender == PLURAL) ? "" : "a " - var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't" - - if(O.organ_tag == "limb") - return 0 - else if(target.species.has_organ[O.organ_tag])//need to change this around for cybernetic implants - - if(O.damage > (O.max_damage * 0.75)) - user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." - return 2 - - if(!target.get_int_organ(O)) - organ_missing = 1 - else - user << "\red \The [target] already has [o_a][O.organ_tag]." - return 2 - - if(O && affected.limb_name == O.parent_organ) - organ_compatible = 1 - else - user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.name]." - return 2 - else - user << "\red You're pretty sure [target.species.name] don't normally have [o_a][O.organ_tag]." - return 2 - - return ..() && organ_missing && organ_compatible - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ - "You start transplanting \the [tool] into [target]'s [affected.name].") - target.custom_pain("Someone's rooting around in your [affected.name]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ - "\blue You have transplanted \the [tool] into [target]'s [affected.name].") - user.drop_item(tool) - var/obj/item/organ/internal/O = tool - if(istype(O)) - O.insert(target) - spread_germs_to_organ(O, user) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ - "\red Your hand slips, damaging \the [tool]!") - var/obj/item/organ/internal/I = tool - if(istype(I)) - I.take_damage(rand(3,5),0) - -/datum/surgery_step/internal/attach_organ - allowed_tools = list( - /obj/item/weapon/FixOVein = 100, \ - /obj/item/stack/cable_coil = 75 - ) - - min_duration = 100 - max_duration = 120 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!..()) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!istype(affected)) - return 0 - - surgery.current_organ = null - surgery.organ_ref = null - - var/list/removable_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/internal/I = organ - if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) - removable_organs[I.organ_tag] = I - - var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs - if(!organ_to_replace) - return 0 - - surgery.current_organ = organ_to_replace - surgery.organ_ref = removable_organs[organ_to_replace] - return ..() - - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("[user] begins reattaching [target]'s [surgery.current_organ] with \the [tool].", \ - "You start reattaching [target]'s [surgery.current_organ] with \the [tool].") - target.custom_pain("Someone's digging needles into your [surgery.current_organ]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\blue [user] has reattached [target]'s [surgery.current_organ] with \the [tool]." , \ - "\blue You have reattached [target]'s [surgery.current_organ] with \the [tool].") - - var/obj/item/organ/internal/I = surgery.organ_ref - if(I && istype(I)) - I.status &= ~ORGAN_CUT_AWAY - spread_germs_to_organ(I, user) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 20) - -*/ ////////////////////////////////////////////////////////////////// // HEART SURGERY // ////////////////////////////////////////////////////////////////// diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index b0aaea718a1..1121810b837 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -5,7 +5,7 @@ /datum/surgery_step/fix_vein - priority = 2 + name = "mend internal bleeding" allowed_tools = list( /obj/item/weapon/FixOVein = 100, \ /obj/item/stack/cable_coil = 75 @@ -13,7 +13,6 @@ can_infect = 1 blood_level = 1 - min_duration = 70 max_duration = 90 /datum/surgery_step/fix_vein/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -57,7 +56,7 @@ return 0 /datum/surgery_step/fix_dead_tissue //Debridement - priority = 2 + name = "remove dead tissue" allowed_tools = list( /obj/item/weapon/scalpel = 100, \ /obj/item/weapon/kitchenknife = 75, \ @@ -67,7 +66,6 @@ can_infect = 1 blood_level = 1 - min_duration = 110 max_duration = 160 /datum/surgery_step/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -105,7 +103,7 @@ return 0 /datum/surgery_step/treat_necrosis - priority = 2 + name = "treat necrosis" allowed_tools = list( /obj/item/weapon/reagent_containers/dropper = 100, /obj/item/weapon/reagent_containers/glass/bottle = 75, @@ -117,7 +115,6 @@ can_infect = 0 blood_level = 0 - min_duration = 50 max_duration = 60 /datum/surgery_step/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -179,3 +176,54 @@ "\red Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!") //no damage or anything, just wastes medicine + + +////////////////////////////////////////////////////////////////// +// Dethrall Shadowling // +////////////////////////////////////////////////////////////////// +/datum/surgery/remove_thrall + name = "clense contaminations"//RENAME MEH + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall) + possible_locs = list("head") + +/datum/surgery/remove_thrall/can_start(mob/user, mob/living/carbon/target) + return is_thrall(target)//would this be too meta? + +/datum/surgery_step/dethrall + name = "cleanse contamination" + allowed_tools = list(/obj/item/device/flash = 100, /obj/item/device/flashlight/pen = 80, /obj/item/device/flashlight = 40) + + max_duration = 120 + +/datum/surgery_step/internal/dethrall/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain") + +/datum/surgery_step/internal/dethrall/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/braincase = target.named_organ_parent("brain") + user.visible_message("[user] reaches into [target]'s head with [tool].", "You begin aligning [tool]'s light to the tumor on [target]'s brain...") + target << "A small part of your [braincase] pulses with agony as the light impacts it." + ..() + +/datum/surgery_step/internal/dethrall/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("[user] shines light onto the tumor in [target]'s head!", "You cleanse the contamination from [target]'s brain!") + ticker.mode.remove_thrall(target.mind,0) + target.visible_message("A strange black mass falls from [target]'s head!") + new /obj/item/organ/internal/shadowtumor(get_turf(target)) + + return 1 + +/datum/surgery_step/internal/dethrall/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/braincase = target.named_organ_parent("brain") + if(prob(50)) + user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ + "You fumble and tear out [target]'s tumor!") + target.adjustBrainLoss(110) // This is so you can't just defib'n go + ticker.mode.remove_thrall(target.mind,1) + + return 0 + else + user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") + return 0 diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 6df377b56d1..9a1460d98f2 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -55,7 +55,6 @@ /obj/item/weapon/kitchen/utensil/knife = 50 ) - min_duration = 90 max_duration = 110 /datum/surgery_step/robotics/external/unscrew_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -89,7 +88,6 @@ /obj/item/weapon/kitchen/utensil/ = 50 ) - min_duration = 30 max_duration = 40 /datum/surgery_step/robotics/external/open_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -123,7 +121,6 @@ /obj/item/weapon/kitchen/utensil = 50 ) - min_duration = 70 max_duration = 100 /datum/surgery_step/robotics/external/close_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -157,7 +154,6 @@ /obj/item/weapon/gun/energy/plasmacutter = 50 ) - min_duration = 50 max_duration = 60 /datum/surgery_step/robotics/external/repair_brute/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -198,7 +194,6 @@ /obj/item/stack/cable_coil = 100 ) - min_duration = 50 max_duration = 60 /datum/surgery_step/robotics/external/repair_burn/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -242,10 +237,10 @@ var/implements_extract = list(/obj/item/device/multitool = 100) var/implements_mend = list( /obj/item/stack/nanopaste = 100,/obj/item/weapon/bonegel = 30, /obj/item/weapon/screwdriver = 70) var/implements_insert = list(/obj/item/weapon/screwdriver = 100) + var/implements_finish =list(/obj/item/weapon/retractor = 100,/obj/item/weapon/crowbar = 100,/obj/item/weapon/kitchen/utensil = 50) var/current_type var/obj/item/organ/internal/I = null var/obj/item/organ/external/affected = null - min_duration = 70 max_duration = 90 /datum/surgery_step/robotics/manipulate_robotic_organs/New() @@ -363,6 +358,12 @@ target.custom_pain("The pain in your [affected.name] is living hell!",1) + else if(implement_type in implements_finish) + current_type = "finish" + user.visible_message("[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool]." , \ + "You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].") + + ..() /datum/surgery_step/robotics/manipulate_robotic_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -376,13 +377,12 @@ user.visible_message("\blue [user] repairs [target]'s [I.name] with [tool].", \ "\blue You repair [target]'s [I.name] with [tool]." ) I.damage = 0 - return 1 else if(current_type == "insert") var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ) var/off_tool = user.get_inactive_hand() I = off_tool - user.drop_item() + //user.drop_item() I.insert(target) user.visible_message("\blue [user] has reattached [target]'s [I] with \the [tool]." , \ "\blue You have reattached [target]'s [I] with \the [tool].") @@ -420,6 +420,13 @@ else user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", "You can't extract anything from [target]'s [parse_zone(target_zone)]!") + else if(current_type == "finish") + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \ + "\blue You close and secure the hatch on [target]'s [affected.name] with \the [tool].") + affected.open = 0 + affected.germ_level = 0 + return 1 return 0 /datum/surgery_step/robotics/manipulate_robotic_organs/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -450,6 +457,10 @@ else if (current_type == "install") user.visible_message("\red [user]'s hand slips!.", \ "\red Your hand slips!") + else if(current_type == "finish") + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].", + "\red Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].") return -1 @@ -459,7 +470,6 @@ /obj/item/device/mmi = 100 ) - min_duration = 60 max_duration = 80 can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index a2b6dc521c6..c822dc0d8b4 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -21,7 +21,6 @@ /obj/item/weapon/shard = 50, \ ) - min_duration = 30 max_duration = 50 /datum/surgery_step/slime/cut_flesh/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) @@ -50,7 +49,6 @@ /obj/item/weapon/shard = 50, \ ) - min_duration = 30 max_duration = 50 /datum/surgery_step/slime/cut_innards/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) @@ -77,7 +75,6 @@ /obj/item/weapon/hatchet = 75 ) - min_duration = 50 max_duration = 70 /datum/surgery_step/slime/saw_core/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 4b10ee37fd2..075c9199534 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -57,7 +57,6 @@ var/implement_type = null // duration of the step - var/min_duration = 0 var/max_duration = 0 var/name @@ -103,13 +102,18 @@ surgery.step_in_progress = 0 return - if(do_after(user, max_duration, target = target)) - var/advance = 0 - var/prob_chance = 100 + var/advance = 0 + var/prob_chance = 100 + + if(implement_type) //this means it isn't a require nd or any item step. + prob_chance = min(allowed_tools[implement_type], 100) + prob_chance *= get_location_modifier(target) + + if(prob_chance > 100)//if we are using a super tool + max_duration = max_duration - 50 //PLACEHOLDER VALUES + + if(do_after(user, max_duration, target = target)) - if(implement_type) //this means it isn't a require nd or any item step. - prob_chance = allowed_tools[implement_type] - prob_chance *= get_location_modifier(target) if(prob(prob_chance) || isrobot(user)) if(end_step(user, target, target_zone, tool, surgery)) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 2ccfad81de2..74d0cb05ffd 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -82,9 +82,9 @@ /* * Researchable Scalpels */ -/obj/item/weapon/scalpel/laser1 +/obj/item/weapon/scalpel/laser1 //lasers also count as catuarys name = "laser scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved." + desc = "A scalpel augmented with a directed laser. This one looks basic and could be improved." icon_state = "scalpel_laser1_on" item_state = "scalpel" damtype = "fire" @@ -92,7 +92,7 @@ /obj/item/weapon/scalpel/laser2 name = "laser scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced." + desc = "A scalpel augmented with a directed laser. This one looks somewhat advanced." icon_state = "scalpel_laser2_on" item_state = "scalpel" damtype = "fire" @@ -100,13 +100,13 @@ /obj/item/weapon/scalpel/laser3 name = "laser scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!" + desc = "A scalpel augmented with a directed laser.. This one looks to be the pinnacle of precision energy cutlery!" icon_state = "scalpel_laser3_on" item_state = "scalpel" damtype = "fire" hitsound = 'sound/weapons/sear.ogg' -/obj/item/weapon/scalpel/manager +/obj/item/weapon/scalpel/manager //super tool! Retractor/hemostat name = "incision management system" desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps." icon_state = "scalpel_manager_on" diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi index f92115bf33b680c9c56990868885d852f2c77e57..0d4e61b7cac98f93af6339109b14cea9060e4338 100644 GIT binary patch delta 709 zcmV;$0y_Qv!2mS~AJwIsM?jJ$mhiYnEKz@gHkfp0`| zb~z^YQv7`Q_4q7yPmjf`@~kb1t+@HNEEXqSg+^?}W?d{ArRyeiKRC#s#8zC$>NQAK z{-Rh^+Oyb-n__YBvQ;d$V)YTMG|RnF%g+VtVo@n0-^5m|t~QhE)p9~Vf4$)PHdk?* zy~aJh28T#9J>U>2#{dqIGEUDSQpV9aL_*H(>m;*}##A=VmFs1?-%9BW)R<-CE!jF! zn)H@=Z%_Xpyk={3mBcG0YopQzDN??EJ8EMx&~(WM7HPkM2AXexfz}&fpz%7G15n=q zMfZSS#es&s0I%Ty16~}AE^Jk3yge!ZlK%ET_$rNC*}|QV+_%Ouc7=QJJ%)4nv=e6n zq~vE3pzdc1p!jE#cmXPZQYrmjQ~FX3X!>2Vx%yOy*fY?8IRgw>Gr*WJULSz0>A`$c zygp!2)3cZ%ULT-v=~2Lpqb3z}iDY^PYVJy7Syin}zj%6LjP4pMk*Ts zY=5L{)LPAfVqL3{WXWn)r6jUx>nTDN>ag@SI}T~(jszOH1A#Vw?m(c4oql&G{ms8< z`cdSJ3_NjMGz_JUi-wV?anUf6GcFoNLdI(w zkf!7Y%3wXx%O6#LFV;({p^NZQ40Q42inFx9^_pC8mKM18lMBw$e&K+?49mA&j?bCK zjkU;lZOkL{wJ{G3*hV}w9_$4(C$eYq91AiAtY?xOBXVZNy~fDtf7DCy@Vpbdr^n(C rx{>1jQp6QY001BWNklmS~9$MG{;xhTpyiMUm`8*rC&-fp0`| zc6UVUQv81Wvw0Q|Pn+UR1=7xnwYd2)FJ^mP#YU{fYFW%0rRyekKPbwm#9Ca)>McrA z;i8yTI*?e4n_{*LvQ;G3V(}TQG|8<|^RETVVpb_54`MAASF1_&Vm_gte_n8To2$6Z zUgI8LgJQC0dO$JR90MpOn{j%I$z~j#VzS7&L(MYVWK89Fu3XOfek-LnP-B)&aMsny z@?>yCTetuJ;59j;D;BSmtc~IgQdWif@T!f;K>3mnEYf}h4K&{X1Fbi}K;v~VMWDU| zitYg&#es&s0LO5E0WWq&Ew(B)!R=Le;h%kkFL>O^7Vdmx-Wo^P2>0N74CnH^6DInQCjk0(QX0QqDHxZ?O^2ud5D3?WhDlOZH$d@_WDOwcYO zO-T*Nc_jk`9)h;DLeQvMUndLPt$UL1pq^a9|vlSU0yel$nFmn1mdMO^CAH>7cruYZt qQsDoW_8zSO03ZNKL_t(|ob26wcvSVB|NqxP5)i_TckQzv1K*vFS7G)5 diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index cc7c2527e5497a5c6984b7789b93357cf90a3497..94fe615fb56ecfe1f286c71335ada18d84823549 100644 GIT binary patch delta 709 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 From 5424446337f8fe6d4f7c235bf59b1e20c0f1cc4a Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 26 Jan 2016 21:06:14 -0500 Subject: [PATCH 030/442] Begin Conflict fixes(1/2) someone please remove the .gitconfig file with the outdated map merge shit in it from the root directory please.... --- .../MetaStation/MetaStation.v41A.II.dmm | 6 +- _maps/map_files/MetaStation/z2.dmm | 4 +- _maps/map_files/MetaStation/z5.dmm | 22 +- _maps/map_files/RandomZLevels/academy.dmm | 18 +- .../RandomZLevels/blackmarketpackers.dmm | 2 +- _maps/map_files/RandomZLevels/centcomAway.dmm | 2 +- _maps/map_files/RandomZLevels/challenge.dmm | 64 +-- .../map_files/RandomZLevels/listeningpost.dmm | 22 +- _maps/map_files/RandomZLevels/spacebattle.dmm | 12 +- .../RandomZLevels/stationCollision.dmm | 166 +++---- _maps/map_files/cyberiad/cyberiad.dmm | 92 ++-- _maps/map_files/cyberiad/z2.dmm | 14 +- _maps/map_files/cyberiad/z3.dmm | 8 +- _maps/map_files/cyberiad/z4.dmm | 54 +-- _maps/map_files/cyberiad/z5.dmm | 246 +++++----- _maps/map_files/cyberiad/z6.dmm | 442 +++++++++--------- 16 files changed, 586 insertions(+), 588 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 89f3f519029..c5efb941401 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -383,7 +383,7 @@ "ahs" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aht" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahu" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahw" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport) "ahy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) @@ -7701,7 +7701,7 @@ "cSe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSf" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSg" = (/obj/machinery/door/morgue{name = "Relic Closet"; req_access_txt = "22"},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) -"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/internal/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) +"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) "cSi" = (/obj/machinery/door/airlock/maintenance{name = "Chapel Maintenance Access "; req_access_txt = "0"; req_one_access_txt = "12;27"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cSj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Departure Lounge - Port Fore"; dir = 4; network = list("SS13")},/obj/structure/flora/kirbyplants{icon_state = "plant-24"; layer = 4.1; tag = "icon-plant-24"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) @@ -7838,7 +7838,7 @@ "cUL" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cUM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboardsolar) "cUN" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) -"cUO" = (/obj/structure/closet/wardrobe/chaplain_black,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"cUO" = (/obj/structure/closet/secure_closet/chaplain,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cUP" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cUQ" = (/obj/machinery/power/apc{dir = 2; lighting = 3; name = "Chapel Office APC"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cUR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm index 6796f8f79b7..ffc7fa087be 100644 --- a/_maps/map_files/MetaStation/z2.dmm +++ b/_maps/map_files/MetaStation/z2.dmm @@ -311,6 +311,7 @@ "fY" = (/obj/machinery/door/airlock/external{name = "Port Docking Bay 1"; id_tag = "emergency_away"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/evac) "fZ" = (/obj/docking_port/stationary{dir = 4; dwidth = 5; height = 14; id = "emergency_away"; name = "emergency centcom"; width = 22},/turf/space,/area/space) "ga" = (/obj/machinery/computer/shuttle,/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station) +"gb" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "gc" = (/obj/structure/closet,/turf/unsimulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/centcom/suppy) "gd" = (/obj/structure/closet/secure_closet/cargotech,/turf/unsimulated/floor{dir = 1; icon_state = "loadingarea"},/area/centcom/suppy) "ge" = (/obj/structure/closet/secure_closet/quartermaster,/turf/unsimulated/floor{dir = 1; icon_state = "loadingarea"},/area/centcom/suppy) @@ -667,7 +668,6 @@ "rn" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows2"},/area/wizard_station) "ro" = (/obj/structure/bookcase,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "rp" = (/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/wizard_station) -"rq" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "rr" = (/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/twohanded/staff/broom,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "rs" = (/obj/effect/decal/cleanable/blood/splatter,/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "rt" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plating/airless,/area/wizard_station) @@ -964,7 +964,7 @@ ababababababababababaaaaaaaaaaaaaaaaaaoQmHaaaamHpTpUnnpVnnoQmHmHaaaaaaaaaaaaaaaa ababababababababababaaaaaaaaaaaaaaonqiqjqkqlqmqlqlqiqnqkqlqlqmqlqlaamHaaaaaaaaaaababababababiSamazabababababababababababababababazamamamcncncobPiSqrqsqsqsqsqsiSabababababababababababababababababababababababababababababababqtqtqtqtqtqtqtqtqtquqvqvqvqvqvqvqvqvqvqvqvqvqvquqtqtqtqtqtqtqtqtqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaqwqxmKmKqxqwqyqzmKmKmKqAqBqwqCozoQqDmHmHaaaaaaababababababiSamabababababababababababababababababaCamamatamamaWqOqsqsqsqsqsqPiSabababababababababababababababababababababababababababababababqtqQqRqSqSqSqSqSqTqUqvqvqvqvqvqvqvqvqvqvqvqvqvqVqTqWqWqWqWqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaqYqZmKmKqZqYqDqDmKmKmKmKraqYrbrcpDpDrdaaaaaaaaababababababiSamabababababababababababababababababaCamamaucpaBaDiSrjrjrjrjrjrkiSabababababababababababababababababababababababababababababababqtqQqRqSrlqSrlqSqTqUqvqvqvqvqvqvqvqvqvqvqvqvqvqVqTqWrmqWrmqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaarnromKnYmKrppFnYmKrqmKmKrrrnrsrtrurvrwrxaaaaaaababababababiSamabababababababababababababababababaCamamaWiSiSiSiSiSiSiSiSiSiSiSabababababababababababababababababababababababababababababababqtqQqRqSqSrCqSqSqTqUqvqvqvqvqvrDrErDqvqvqvqvqvqVqTqWqWrFqWqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaarnromKnYmKrppFnYmKgbmKmKrrrnrsrtrurvrwrxaaaaaaababababababiSamabababababababababababababababababaCamamaWiSiSiSiSiSiSiSiSiSiSiSabababababababababababababababababababababababababababababababqtqQqRqSqSrCqSqSqTqUqvqvqvqvqvrDrErDqvqvqvqvqvqVqTqWqWrFqWqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaarGqZmKnnpFrHnnmKmKrImKmKmKrGrJrKrdrLoKaaaaaaaaababababababiSamabababababababababababababababababcqamamamiSabababababababababababababababababababababababababababababababababababababababababqtqQqRqSqSqSqSqSqTqUqvqvqvqvqvrDrVrDqvqvqvqvqvqVqTqWqWqWqWqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaamirWmKmKrWmirXmKnYnnmKmKrXmirYrZsasbaaaaaaaaaaababababababiSamabababababababababababababababababaCamamamiSabababababababababababababababababababababababababababababababababababababababababqtqQqRqSrlqSrlqSqTqUqvqvqvqvqvqvqvqvqvqvqvqvqvqVqTqWrmqWrmqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaamLqisfqkqlsgqlqiolsholqkqlsgqlqimHmHmHaaaaaaaaababababababiSamabababababamabababababamabababababaCamamamiSabababababababababababababababababababababababababababababababababababababababababqtqQqRqSqSqSqSqSqTqUqvqvqvqvqvqvqvqvqvqvqvqvqvqVqTqWqWqWqWqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab diff --git a/_maps/map_files/MetaStation/z5.dmm b/_maps/map_files/MetaStation/z5.dmm index 08634d56a95..35018a0de20 100644 --- a/_maps/map_files/MetaStation/z5.dmm +++ b/_maps/map_files/MetaStation/z5.dmm @@ -622,10 +622,10 @@ "lX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/door/airlock/glass_mining{name = "Equipment storage"; req_access_txt = "47"},/obj/machinery/door/firedoor{dir = 4; layer = 2.6; name = "Firelock"},/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "lY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "lZ" = (/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) -"ma" = (/obj/machinery/conveyor_switch{id = "anotempload"},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"mb" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"mc" = (/obj/machinery/conveyor_switch{id = "anosample"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"md" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"ma" = (/obj/machinery/conveyor_switch{id = "anotempload"},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"mb" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"mc" = (/obj/machinery/conveyor_switch{id = "anosample"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"md" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) "me" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plating,/area/research_outpost/maint) "mf" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plating,/area/research_outpost/maint) "mg" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/research_outpost/iso1) @@ -715,9 +715,9 @@ "nM" = (/obj/structure/lattice,/obj/structure/transit_tube,/turf/space,/area/mine/explored) "nN" = (/obj/structure/transit_tube,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/explored) "nO" = (/obj/structure/transit_tube/station{dir = 2; icon_state = "closed"; tag = "icon-closed (EAST)"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/explored) -"nP" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) +"nP" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) "nQ" = (/turf/simulated/floor/mech_bay_recharge_floor{icon_state = "recharge_floor_asteroid"},/area/research_outpost/gearstore) -"nR" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) +"nR" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) "nS" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "nT" = (/obj/machinery/door/window/westleft,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) "nU" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-opening (EAST)"},/obj/structure/transit_tube_pod,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/explored) @@ -748,8 +748,8 @@ "ot" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "ou" = (/obj/structure/alien/weeds,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "ov" = (/obj/effect/decal/remains/xeno,/obj/structure/alien/weeds,/turf/simulated/floor/plating/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"ow" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "65"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) -"ox" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/mine/explored) +"ow" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "65"},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) +"ox" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/airless,/area/mine/explored) "oy" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/research_outpost/gearstore) "oz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = -32},/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) "oA" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/explored) @@ -765,9 +765,9 @@ "oK" = (/obj/structure/table,/turf/simulated/floor/plating/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "oL" = (/obj/structure/alien/weeds,/turf/simulated/floor/plating/airless{icon_state = "damaged3"},/area/mine/abandoned) "oM" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored) -"oN" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (SOUTHWEST)"; icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) -"oO" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) -"oP" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (SOUTHEAST)"; icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) +"oN" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (SOUTHWEST)"; icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) +"oO" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"oP" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (SOUTHEAST)"; icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) "oQ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "oR" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = -32; pixel_y = -32},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "oS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index 269f496393b..069a3d612bd 100644 --- a/_maps/map_files/RandomZLevels/academy.dmm +++ b/_maps/map_files/RandomZLevels/academy.dmm @@ -459,8 +459,8 @@ "iQ" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft) "iR" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) "iS" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft) -"iT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) -"iU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/device/soulstone,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft) +"iT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) +"iU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/device/soulstone,/turf/simulated/floor/plasteel/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft) "iV" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l"; icon_state = "propulsion_l"},/turf/space,/area/awaymission/academy/academyaft) "iW" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/awaymission/academy/academyaft) "iX" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r"; icon_state = "propulsion_r"},/turf/space,/area/awaymission/academy/academyaft) @@ -468,28 +468,28 @@ "iZ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft) "ja" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft) "jb" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft) -"jc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) -"jd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft) +"jc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) +"jd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft) "je" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft) "jf" = (/obj/structure/table,/obj/item/clothing/glasses/meson/truesight,/turf/simulated/floor/plasteel,/area/awaymission/academy/academyaft) "jg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft) "jh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) "ji" = (/obj/structure/noticeboard,/turf/simulated/wall,/area/awaymission/academy/academyaft) "jj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) -"jk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) -"jl" = (/obj/structure/table,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft) +"jk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) +"jl" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft) "jm" = (/obj/effect/landmark{name = "awaystart"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft) "jn" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/awaymission/academy/academyaft) "jo" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/awaymission/academy/academyaft) -"jp" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) +"jp" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) "jq" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/awaymission/academy/academyaft) "jr" = (/obj/structure/window/reinforced,/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/golden_cup,/turf/simulated/floor/plasteel{icon_state = "red"},/area/awaymission/academy/academyaft) "js" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/awaymission/academy/academyaft) "jt" = (/obj/structure/cult/pylon,/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/awaymission/academy/academyaft) "ju" = (/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/awaymission/academy/academyaft) "jv" = (/obj/structure/cult/pylon,/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/awaymission/academy/academyaft) -"jw" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) -"jx" = (/obj/structure/table,/obj/structure/window/reinforced,/obj/item/device/batterer,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft) +"jw" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) +"jx" = (/obj/structure/table,/obj/structure/window/reinforced,/obj/item/device/batterer,/turf/simulated/floor/plasteel/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft) "jy" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space) "jz" = (/obj/machinery/igniter,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft) "jA" = (/obj/structure/window/reinforced,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) diff --git a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm index 1812595df0e..09d68ef2916 100644 --- a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm @@ -210,7 +210,7 @@ "eb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "ec" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) "ed" = (/obj/item/device/multitool,/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) -"ee" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (EAST)"; icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{tag = "icon-engine"; icon_state = "engine"},/area/awaymission/BMPship/Aft) +"ee" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (EAST)"; icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{tag = "icon-engine"; icon_state = "engine"},/area/awaymission/BMPship/Aft) "ef" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (WEST)"; icon_state = "propulsion"; dir = 8},/turf/space,/area/awaymission/BMPship/Aft) "eg" = (/turf/simulated/floor/plasteel{tag = "icon-carpet15-15 (EAST)"; icon_state = "carpet15-15"; dir = 4},/area/awaymission/BMPship/Fore) "eh" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/plasteel{tag = "icon-carpet5-0 (EAST)"; icon_state = "carpet5-0"; dir = 4},/area/awaymission/BMPship/Fore) diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm index 458fa985258..2b12a0cd920 100644 --- a/_maps/map_files/RandomZLevels/centcomAway.dmm +++ b/_maps/map_files/RandomZLevels/centcomAway.dmm @@ -95,7 +95,7 @@ "bQ" = (/obj/structure/disposalpipe/segment,/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/awaymission/centcomAway/cafe) "bR" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "green"},/area/awaymission/centcomAway/cafe) "bS" = (/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/awaymission/centcomAway/cafe) -"bT" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/awaymission/centcomAway/maint) +"bT" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/awaymission/centcomAway/maint) "bU" = (/turf/simulated/shuttle/plating,/area/awaymission/centcomAway/hangar) "bV" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/awaymission/centcomAway/hangar) "bW" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/awaymission/centcomAway/hangar) diff --git a/_maps/map_files/RandomZLevels/challenge.dmm b/_maps/map_files/RandomZLevels/challenge.dmm index 482da5187e8..397cbe43b65 100644 --- a/_maps/map_files/RandomZLevels/challenge.dmm +++ b/_maps/map_files/RandomZLevels/challenge.dmm @@ -2,41 +2,41 @@ "ab" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) "ac" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/start) "ad" = (/turf/simulated/floor/plating,/area/awaymission/challenge/start) -"ae" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/awaymission/challenge/start) -"af" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) -"ag" = (/obj/item/clothing/suit/space/syndicate/blue,/obj/item/clothing/head/helmet/space/syndicate/blue,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) -"ah" = (/turf/simulated/floor/airless,/area/awaymission/challenge/start) -"ai" = (/obj/item/device/flashlight{icon_state = "flashlight-on"; item_state = "flashlight"; on = 1},/turf/simulated/floor/airless,/area/awaymission/challenge/start) -"aj" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/challenge/start) -"ak" = (/obj/effect/decal/remains/human,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/awaymission/challenge/start) -"al" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/airless,/area/awaymission/challenge/start) -"am" = (/obj/item/clothing/suit/space/syndicate/green,/obj/item/clothing/head/helmet/space/syndicate/green,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) -"an" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/challenge/start) -"ao" = (/obj/item/clothing/suit/space/syndicate/orange,/obj/item/clothing/head/helmet/space/syndicate/orange,/turf/simulated/floor/airless,/area/awaymission/challenge/start) -"ap" = (/obj/item/weapon/gun/energy/laser/retro,/turf/simulated/floor/airless,/area/awaymission/challenge/start) +"ae" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/challenge/start) +"af" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) +"ag" = (/obj/item/clothing/suit/space/syndicate/blue,/obj/item/clothing/head/helmet/space/syndicate/blue,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) +"ah" = (/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/start) +"ai" = (/obj/item/device/flashlight{icon_state = "flashlight-on"; item_state = "flashlight"; on = 1},/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/start) +"aj" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/challenge/start) +"ak" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/awaymission/challenge/start) +"al" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/start) +"am" = (/obj/item/clothing/suit/space/syndicate/green,/obj/item/clothing/head/helmet/space/syndicate/green,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) +"an" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/challenge/start) +"ao" = (/obj/item/clothing/suit/space/syndicate/orange,/obj/item/clothing/head/helmet/space/syndicate/orange,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/start) +"ap" = (/obj/item/weapon/gun/energy/laser/retro,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/start) "aq" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"ar" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/airless,/area/awaymission/challenge/start) -"as" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) +"ar" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/start) +"as" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) "at" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/awaymission/challenge/start) "au" = (/turf/simulated/wall,/area/awaymission/challenge/start) -"av" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/awaymission/challenge/start) -"aw" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) +"av" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/awaymission/challenge/start) +"aw" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) "ax" = (/obj/effect/decal/cleanable/blood/oil,/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/plating,/area/awaymission/challenge/start) -"ay" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/airless,/area/awaymission/challenge/start) -"az" = (/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) +"ay" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/start) +"az" = (/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) "aA" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/main) "aB" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/awaymission/challenge/main) "aC" = (/turf/simulated/floor/plating,/area/awaymission/challenge/main) -"aD" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/challenge/main) +"aD" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/challenge/main) "aE" = (/turf/simulated/wall,/area/awaymission/challenge/main) "aF" = (/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"aG" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/challenge/main) -"aH" = (/turf/simulated/floor/airless,/area/awaymission/challenge/main) +"aG" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/challenge/main) +"aH" = (/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) "aI" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 2; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"aJ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/airless,/area/awaymission/challenge/main) -"aK" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/airless,/area/awaymission/challenge/main) -"aL" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/airless,/area/awaymission/challenge/main) -"aM" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/airless,/area/awaymission/challenge/main) +"aJ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) +"aK" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) +"aL" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) +"aM" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) "aN" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) "aO" = (/obj/structure/window/reinforced,/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 2; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) "aP" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) @@ -44,15 +44,15 @@ "aR" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/awaymission/challenge/main) "aS" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 4; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) "aT" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"aU" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless,/area/awaymission/challenge/main) +"aU" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) "aV" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) "aW" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 8; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) "aX" = (/obj/machinery/porta_turret{dir = 8; emagged = 1; installation = /obj/item/weapon/gun/energy/lasercannon},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) "aY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) "aZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) "ba" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/challenge/main) -"bb" = (/obj/item/device/multitool,/turf/simulated/floor/airless,/area/awaymission/challenge/main) -"bc" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/airless,/area/awaymission/challenge/main) +"bb" = (/obj/item/device/multitool,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) +"bc" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) "bd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/awaymission/challenge/main) "be" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/awaymission/challenge/main) "bf" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/awaymission/challenge/main) @@ -62,14 +62,14 @@ "bj" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/awaymission/challenge/main) "bk" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/machinery/light,/turf/simulated/floor/plating,/area/awaymission/challenge/main) "bl" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/awaymission/challenge/main) -"bm" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/airless,/area/awaymission/challenge/main) -"bn" = (/obj/machinery/door/window/southright,/turf/simulated/floor/airless,/area/awaymission/challenge/main) +"bm" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) +"bn" = (/obj/machinery/door/window/southright,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) "bo" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 2; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/awaymission/challenge/main) "bp" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/awaymission/challenge/main) "bq" = (/obj/machinery/porta_turret{dir = 8; emagged = 1; installation = /obj/item/weapon/gun/energy/lasercannon},/turf/simulated/floor/plating,/area/awaymission/challenge/main) "br" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/awaymission/challenge/main) "bs" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bt" = (/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/airless,/area/awaymission/challenge/main) +"bt" = (/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) "bu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/awaymission/challenge/main) "bv" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/challenge/main) "bw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/awaymission/challenge/main) @@ -80,7 +80,7 @@ "bB" = (/obj/item/clothing/gloves/color/yellow,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/challenge/main) "bC" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 8; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) "bD" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 4; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bE" = (/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/airless,/area/awaymission/challenge/main) +"bE" = (/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) "bF" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitecorner"},/area/awaymission/challenge/main) "bG" = (/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/awaymission/challenge/main) "bH" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/awaymission/challenge/main) diff --git a/_maps/map_files/RandomZLevels/listeningpost.dmm b/_maps/map_files/RandomZLevels/listeningpost.dmm index 9e65b63678b..ffb137ca414 100644 --- a/_maps/map_files/RandomZLevels/listeningpost.dmm +++ b/_maps/map_files/RandomZLevels/listeningpost.dmm @@ -35,17 +35,17 @@ "I" = (/obj/structure/toilet{tag = "icon-toilet00 (WEST)"; icon_state = "toilet00"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/listeningpost) "J" = (/turf/simulated/mineral/random/high_chance_clown,/area/mine/unexplored) "K" = (/turf/simulated/shuttle/wall{tag = "icon-wall3"; icon_state = "wall3"},/area/mine/explored) -"L" = (/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"M" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"N" = (/obj/machinery/gateway{tag = "icon-off (NORTHWEST)"; icon_state = "off"; dir = 9},/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"O" = (/obj/machinery/gateway{tag = "icon-off (NORTH)"; icon_state = "off"; dir = 1},/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"P" = (/obj/machinery/gateway{tag = "icon-off (NORTHEAST)"; icon_state = "off"; dir = 5},/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"Q" = (/obj/machinery/gateway{tag = "icon-off (WEST)"; icon_state = "off"; dir = 8},/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"R" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"S" = (/obj/machinery/gateway{tag = "icon-off (EAST)"; icon_state = "off"; dir = 4},/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"T" = (/obj/machinery/gateway{tag = "icon-off (SOUTHWEST)"; icon_state = "off"; dir = 10},/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"U" = (/obj/machinery/gateway,/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) -"V" = (/obj/machinery/gateway{tag = "icon-off (SOUTHEAST)"; icon_state = "off"; dir = 6},/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"L" = (/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"M" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"N" = (/obj/machinery/gateway{tag = "icon-off (NORTHWEST)"; icon_state = "off"; dir = 9},/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"O" = (/obj/machinery/gateway{tag = "icon-off (NORTH)"; icon_state = "off"; dir = 1},/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"P" = (/obj/machinery/gateway{tag = "icon-off (NORTHEAST)"; icon_state = "off"; dir = 5},/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"Q" = (/obj/machinery/gateway{tag = "icon-off (WEST)"; icon_state = "off"; dir = 8},/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"R" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"S" = (/obj/machinery/gateway{tag = "icon-off (EAST)"; icon_state = "off"; dir = 4},/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"T" = (/obj/machinery/gateway{tag = "icon-off (SOUTHWEST)"; icon_state = "off"; dir = 10},/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"U" = (/obj/machinery/gateway,/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) +"V" = (/obj/machinery/gateway{tag = "icon-off (SOUTHEAST)"; icon_state = "off"; dir = 6},/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/mine/explored) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm index 5191e97a96c..31460e82280 100644 --- a/_maps/map_files/RandomZLevels/spacebattle.dmm +++ b/_maps/map_files/RandomZLevels/spacebattle.dmm @@ -434,15 +434,15 @@ "ir" = (/obj/effect/landmark/corpse/syndicatesoldier,/turf/space,/area/space) "is" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/space) "it" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/space) -"iu" = (/obj/machinery/sleeper,/turf/simulated/floor/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) -"iv" = (/turf/simulated/floor/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) -"iw" = (/obj/effect/landmark/corpse/syndicatesoldier,/turf/simulated/floor/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) -"ix" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) -"iy" = (/obj/item/stack/rods,/turf/simulated/floor/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) +"iu" = (/obj/machinery/sleeper,/turf/simulated/floor/plasteel/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) +"iv" = (/turf/simulated/floor/plasteel/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) +"iw" = (/obj/effect/landmark/corpse/syndicatesoldier,/turf/simulated/floor/plasteel/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) +"ix" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plasteel/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) +"iy" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/airless{tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10},/area/space) "iz" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate5) "iA" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/spacebattle/syndicate5) "iB" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate5) -"iC" = (/obj/machinery/sleeper,/turf/simulated/floor/airless,/area/space) +"iC" = (/obj/machinery/sleeper,/turf/simulated/floor/plasteel/airless,/area/space) "iD" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate5) "iE" = (/obj/machinery/computer/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate5) "iF" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/space) diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index 68404366a79..6fe5c9d73b9 100644 --- a/_maps/map_files/RandomZLevels/stationCollision.dmm +++ b/_maps/map_files/RandomZLevels/stationCollision.dmm @@ -1,37 +1,37 @@ "aa" = (/turf/space,/area/space) "ab" = (/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/awaymission/northblock) "ac" = (/obj/machinery/power/tracker,/turf/simulated/floor/plating,/area/awaymission/northblock) -"ad" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/awaymission/northblock) +"ad" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/awaymission/northblock) "ae" = (/obj/structure/lattice,/turf/space,/area/awaymission/northblock) "af" = (/turf/space,/area/awaymission/northblock) "ag" = (/turf/simulated/floor/plating/airless,/area/awaymission/northblock) -"ah" = (/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/awaymission/northblock) +"ah" = (/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/awaymission/northblock) "ai" = (/obj/machinery/power/solar/fake,/turf/space,/area/awaymission/northblock) "aj" = (/turf/simulated/wall,/area/awaymission/northblock) "ak" = (/obj/structure/lattice,/turf/space,/area/space) -"al" = (/obj/machinery/door/window/westright,/turf/simulated/floor/airless,/area/awaymission/northblock) -"am" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) -"an" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/awaymission/northblock) -"ao" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "damaged4"},/area/awaymission/northblock) -"ap" = (/turf/simulated/floor/airless,/area/awaymission/northblock) -"aq" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/awaymission/northblock) -"ar" = (/obj/machinery/door/window/eastleft{name = "Windoor"},/turf/simulated/floor/airless,/area/awaymission/northblock) +"al" = (/obj/machinery/door/window/westright,/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) +"am" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) +"an" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/northblock) +"ao" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/awaymission/northblock) +"ap" = (/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) +"aq" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/awaymission/northblock) +"ar" = (/obj/machinery/door/window/eastleft{name = "Windoor"},/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) "as" = (/obj/machinery/power/solar_control{stat = 1},/turf/simulated/floor/plasteel,/area/awaymission/northblock) "at" = (/obj/machinery/power/solar_control,/turf/simulated/floor/plasteel,/area/awaymission/northblock) "au" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plasteel,/area/awaymission/northblock) -"av" = (/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass,/obj/item/stack/sheet/plasteel,/turf/simulated/floor/airless,/area/awaymission/northblock) -"aw" = (/obj/structure/window/reinforced/tinted,/turf/simulated/floor/airless,/area/awaymission/northblock) -"ax" = (/obj/structure/window/reinforced/tinted,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/airless,/area/awaymission/northblock) -"ay" = (/obj/structure/window/reinforced/tinted,/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/airless,/area/awaymission/northblock) -"az" = (/obj/structure/window/reinforced/tinted,/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/airless,/area/awaymission/northblock) -"aA" = (/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/airless,/area/awaymission/northblock) -"aB" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/awaymission/northblock) +"av" = (/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass,/obj/item/stack/sheet/plasteel,/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) +"aw" = (/obj/structure/window/reinforced/tinted,/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) +"ax" = (/obj/structure/window/reinforced/tinted,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) +"ay" = (/obj/structure/window/reinforced/tinted,/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) +"az" = (/obj/structure/window/reinforced/tinted,/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) +"aA" = (/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) +"aB" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/awaymission/northblock) "aC" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/syndishuttle) "aD" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/syndishuttle) "aE" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/plating/airless,/area/awaymission/northblock) -"aF" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/northblock) -"aG" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock) -"aH" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/awaymission/northblock) +"aF" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/northblock) +"aG" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/northblock) +"aH" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/northblock) "aI" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_l (EAST)"; icon_state = "burst_l"; dir = 4},/turf/space,/area/awaymission/syndishuttle) "aJ" = (/turf/simulated/floor/plating/airless,/area/awaymission/syndishuttle) "aK" = (/turf/space,/area/awaymission/syndishuttle) @@ -41,8 +41,8 @@ "aO" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (EAST)"; icon_state = "propulsion_r"; dir = 4},/turf/space,/area/awaymission/syndishuttle) "aP" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/syndishuttle) "aQ" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/syndishuttle) -"aR" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock) -"aS" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/airless,/area/awaymission/northblock) +"aR" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/northblock) +"aS" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) "aT" = (/obj/structure/closet/secure_closet/engineering_welding,/obj/machinery/light,/turf/simulated/floor/plasteel,/area/awaymission/northblock) "aU" = (/obj/machinery/mech_bay_recharge_port,/turf/simulated/floor/plasteel,/area/awaymission/northblock) "aV" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/northblock) @@ -51,8 +51,8 @@ "aY" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/syndishuttle) "aZ" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/space) "ba" = (/turf/simulated/wall,/area/space) -"bb" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/airless,/area/awaymission/northblock) -"bc" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/northblock) +"bb" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/plasteel/airless,/area/awaymission/northblock) +"bc" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/northblock) "bd" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_l (EAST)"; icon_state = "burst_l"; dir = 4},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/syndishuttle) "be" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/awaymission/syndishuttle) "bf" = (/turf/simulated/shuttle/plating,/area/awaymission/syndishuttle) @@ -71,8 +71,8 @@ "bs" = (/obj/structure/lattice,/turf/space,/area/awaymission/syndishuttle) "bt" = (/obj/machinery/door/airlock/centcom,/turf/simulated/shuttle/plating,/area/awaymission/syndishuttle) "bu" = (/obj/machinery/door/airlock/centcom,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) -"bv" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/awaymission/research) -"bw" = (/obj/structure/girder/reinforced,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/awaymission/research) +"bv" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/research) +"bw" = (/obj/structure/girder/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/awaymission/research) "bx" = (/turf/simulated/wall/r_wall,/area/awaymission/research) "by" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/shuttle/plating,/area/awaymission/syndishuttle) "bz" = (/obj/machinery/bot/medbot/mysterious{desc = "A dark little medical robot. She looks somewhat underwhelmed."; name = "Nightingale"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) @@ -81,7 +81,7 @@ "bC" = (/obj/structure/table,/obj/item/weapon/paper/sc_safehint_paper_shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) "bD" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) "bE" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/syndishuttle) -"bF" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/research) +"bF" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/research) "bG" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/awaymission/research) "bH" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/research) "bI" = (/obj/item/weapon/shard,/mob/living/carbon/alien/larva{bruteloss = 25; fireloss = 175; stat = 2},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/awaymission/research) @@ -100,7 +100,7 @@ "bV" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/syndishuttle) "bW" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/syndishuttle) "bX" = (/obj/machinery/sleeper{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle) -"bY" = (/obj/structure/girder/reinforced,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/research) +"bY" = (/obj/structure/girder/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/research) "bZ" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/research) "ca" = (/turf/simulated/floor/plasteel,/area/awaymission/research) "cb" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/research) @@ -110,7 +110,7 @@ "cf" = (/obj/machinery/dna_scannernew,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "cg" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grass,/area/awaymission/research) "ch" = (/obj/machinery/power/emitter{anchored = 1; state = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) -"ci" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/northblock) +"ci" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/northblock) "cj" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/awaymission/research) "ck" = (/obj/item/weapon/shard{icon_state = "small"},/mob/living/carbon/alien/larva{bruteloss = 50; fireloss = 150; stat = 2},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/awaymission/research) "cl" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/item/weapon/shard{icon_state = "small"},/obj/structure/alien/weeds/node,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/awaymission/research) @@ -132,7 +132,7 @@ "cB" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) "cC" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (EAST)"; icon_state = "propulsion_l"; dir = 4},/turf/space,/area/awaymission/syndishuttle) "cD" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/syndishuttle) -"cE" = (/obj/machinery/portable_atmospherics/canister/toxins{destroyed = 1},/turf/simulated/floor/airless{icon_state = "damaged4"},/area/awaymission/northblock) +"cE" = (/obj/machinery/portable_atmospherics/canister/toxins{destroyed = 1},/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/awaymission/northblock) "cF" = (/obj/machinery/door/window/eastleft,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "cG" = (/obj/machinery/power/emitter{anchored = 1; dir = 1; icon_state = "emitter"; state = 2},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "cH" = (/obj/item/clothing/mask/facehugger,/mob/living/carbon/alien/humanoid/queen{fireloss = 300; stat = 2},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) @@ -145,7 +145,7 @@ "cO" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) "cP" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) "cQ" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple,/turf/space,/area/awaymission/northblock) -"cR" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock) +"cR" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/northblock) "cS" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "cT" = (/obj/structure/alien/weeds/node,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "cU" = (/mob/living/carbon/alien/humanoid/hunter{fireloss = 200; stat = 2},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) @@ -168,9 +168,9 @@ "dl" = (/obj/machinery/door/poddoor{id_tag = "Narsiedoor"; name = "Blast Doors"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) "dm" = (/obj/singularity/narsie/sc_Narsie,/turf/space,/area/awaymission/research) "dn" = (/obj/machinery/power/emitter{anchored = 1; dir = 8; state = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) -"do" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock) +"do" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/northblock) "dp" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel,/area/awaymission/northblock) -"dq" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) +"dq" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) "dr" = (/obj/machinery/door/airlock/highsecurity{name = "Security Airlock"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/research) "ds" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/awaymission/research) "dt" = (/obj/machinery/door/window/westright{name = "Windoor"},/obj/machinery/door/window/eastright{name = "Windoor"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) @@ -180,7 +180,7 @@ "dx" = (/obj/machinery/message_server{stat = 1},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/awaymission/northblock) "dy" = (/obj/machinery/computer/message_monitor{stat = 1},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/awaymission/northblock) "dz" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/awaymission/northblock) -"dA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/awaymission/northblock) +"dA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/northblock) "dB" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_y = -10; tag = "icon-shower (EAST)"},/obj/structure/window/reinforced/tinted{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/research) "dC" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/awaymission/research) "dD" = (/obj/structure/window/reinforced,/obj/structure/cable,/obj/machinery/power/apc/noalarm{cell_type = 7500; dir = 8; name = "Research APC"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) @@ -193,14 +193,14 @@ "dK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) "dL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) "dM" = (/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/awaymission/northblock) -"dN" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/northblock) +"dN" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/northblock) "dO" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/northblock) "dP" = (/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/awaymission/northblock) "dQ" = (/obj/structure/showcase{icon_state = "showcase_2"},/turf/simulated/floor/plasteel,/area/awaymission/northblock) -"dR" = (/obj/structure/sign/goldenplaque{pixel_y = 31},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock) -"dS" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) -"dT" = (/obj/structure/sign/atmosplaque{pixel_y = 31},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock) -"dU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) +"dR" = (/obj/structure/sign/goldenplaque{pixel_y = 31},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/northblock) +"dS" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) +"dT" = (/obj/structure/sign/atmosplaque{pixel_y = 31},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/northblock) +"dU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) "dV" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "dW" = (/obj/structure/table,/obj/item/stack/cable_coil{amount = 5},/obj/item/weapon/screwdriver,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "dX" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) @@ -215,23 +215,23 @@ "eg" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/awaymission/northblock) "eh" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/awaymission/northblock) "ei" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/awaymission/northblock) -"ej" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/northblock) +"ej" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/northblock) "ek" = (/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/eastleft,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "el" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 80},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "em" = (/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "en" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) "eo" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/northblock) "ep" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 4},/area/awaymission/northblock) -"eq" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) +"eq" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) "er" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/northblock) "es" = (/obj/machinery/door/airlock/command,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/northblock) -"et" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/northblock) +"et" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/northblock) "eu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/northblock) -"ev" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) -"ew" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock) +"ev" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) +"ew" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/northblock) "ex" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 4},/area/awaymission/northblock) -"ey" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/awaymission/northblock) -"ez" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) +"ey" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/awaymission/northblock) +"ez" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) "eA" = (/obj/structure/AIcore,/turf/simulated/floor/greengrid,/area/awaymission/research) "eB" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/greengrid,/area/awaymission/research) "eC" = (/turf/simulated/floor/greengrid,/area/awaymission/research) @@ -244,7 +244,7 @@ "eJ" = (/obj/structure/table,/turf/simulated/floor/plasteel{dir = 4; icon_state = "bluecorner"},/area/awaymission/northblock) "eK" = (/obj/machinery/power/apc/noalarm{cell_type = 5000; dir = 4; name = "North Block APC"; pixel_x = 28},/obj/structure/cable,/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/awaymission/northblock) "eL" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/awaymission/northblock) -"eM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock) +"eM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/northblock) "eN" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/grown/potato,/obj/item/stack/cable_coil{amount = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "eO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "eP" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) @@ -256,10 +256,10 @@ "eV" = (/obj/machinery/power/emitter{anchored = 1; dir = 1; icon_state = "emitter"; state = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research) "eW" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "bluecorner"},/area/awaymission/northblock) "eX" = (/obj/structure/stool/bed/chair/office/light,/turf/simulated/floor/plasteel,/area/awaymission/northblock) -"eY" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) +"eY" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) "eZ" = (/turf/simulated/floor/plasteel,/area/awaymission/northblock) -"fa" = (/obj/machinery/light/small,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) -"fb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/awaymission/northblock) +"fa" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock) +"fb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/awaymission/northblock) "fc" = (/obj/structure/table,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor{pixel_x = -3},/obj/item/weapon/stock_parts/scanning_module{pixel_x = 3; pixel_y = 3},/obj/item/weapon/stock_parts/scanning_module{pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "fd" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "fe" = (/obj/structure/table,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stock_parts/micro_laser{pixel_x = -3; pixel_y = -3},/obj/item/weapon/stock_parts/micro_laser{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) @@ -274,10 +274,10 @@ "fn" = (/obj/structure/target_stake,/obj/item/target/syndicate,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "fo" = (/obj/structure/closet/secure_closet/captains,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) "fp" = (/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) -"fq" = (/turf/simulated/floor/airless,/area/awaymission/midblock) -"fr" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) -"fs" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/midblock) -"ft" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) +"fq" = (/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) +"fr" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) +"fs" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/midblock) +"ft" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) "fu" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/stock_parts/console_screen,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "fv" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 20; pixel_x = -3; pixel_y = -3},/obj/item/stack/sheet/glass{amount = 10; pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "fw" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) @@ -288,10 +288,10 @@ "fB" = (/obj/structure/target_stake,/obj/item/weapon/grown/sunflower,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "fC" = (/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45{pixel_x = 7},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) "fD" = (/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/under/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/clothing/shoes/syndigaloshes,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/pistol,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) -"fE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/airless,/area/awaymission/midblock) -"fF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) -"fG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/awaymission/midblock) -"fH" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/midblock) +"fE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) +"fF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) +"fG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/midblock) +"fH" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/midblock) "fI" = (/turf/simulated/wall/cult,/area/awaymission/midblock) "fJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock) "fK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock) @@ -303,7 +303,7 @@ "fQ" = (/turf/space,/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2; tag = "icon-swall_f10"},/area/awaymission/arrivalblock) "fR" = (/obj/item/weapon/paper{pixel_x = 3},/obj/item/weapon/pen{pixel_x = 10; pixel_y = 10},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) "fS" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) -"fT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/midblock) +"fT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) "fU" = (/turf/simulated/wall,/area/awaymission/midblock) "fV" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/midblock) "fW" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/midblock) @@ -316,7 +316,7 @@ "gd" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) "ge" = (/obj/item/weapon/storage/secure/safe/sc_ssafe{pixel_x = 4; pixel_y = -26},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) "gf" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/item/clothing/under/rank/captain,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/energy/laser/retro/sc_retro,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) -"gg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/awaymission/midblock) +"gg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/awaymission/midblock) "gh" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "gi" = (/turf/simulated/floor/plasteel,/area/awaymission/midblock) "gj" = (/obj/structure/closet/wardrobe/pjs,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/midblock) @@ -363,7 +363,7 @@ "gY" = (/obj/structure/closet/wardrobe/red,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock) "gZ" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock) "ha" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/awaymission/arrivalblock) -"hb" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/awaymission/midblock) +"hb" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/awaymission/midblock) "hc" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/structure/window/reinforced/tinted{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hd" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/midblock) "he" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/obj/structure/window/reinforced/tinted{dir = 1},/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel,/area/awaymission/midblock) @@ -386,8 +386,8 @@ "hv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/clothing/suit/space/syndicate,/obj/item/weapon/paper/sc_safehint_paper_prison,/obj/item/weapon/gun/projectile/shotgun/sc_pump,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "hw" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "hx" = (/obj/machinery/door/window/southleft{name = "Windoor"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/arrivalblock) -"hy" = (/obj/item/ammo_casing/c10mm{pixel_x = 2; pixel_y = 5},/obj/item/ammo_casing/c10mm{pixel_x = -4; pixel_y = -5},/obj/item/ammo_casing/c10mm,/turf/simulated/floor/airless,/area/awaymission/midblock) -"hz" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/midblock) +"hy" = (/obj/item/ammo_casing/c10mm{pixel_x = 2; pixel_y = 5},/obj/item/ammo_casing/c10mm{pixel_x = -4; pixel_y = -5},/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) +"hz" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) "hA" = (/obj/structure/sink/kitchen{pixel_y = 32},/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hB" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/item/weapon/reagent_containers/food/condiment/peppermill,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = 4; pixel_y = 4},/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hC" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel,/area/awaymission/midblock) @@ -416,8 +416,8 @@ "hZ" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "ia" = (/obj/effect/decal/remains/human,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/arrivalblock) "ib" = (/obj/machinery/door/airlock/glass_security{name = "Glass Airlock"; req_access_txt = "0"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) -"ic" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/awaymission/midblock) -"id" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) +"ic" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) +"id" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) "ie" = (/obj/machinery/microwave{pixel_x = -2; pixel_y = 7},/obj/structure/table,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "if" = (/obj/structure/stool,/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "ig" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) @@ -455,31 +455,31 @@ "iM" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "iN" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/awaymission/arrivalblock) "iO" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock) -"iP" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/arrivalblock) -"iQ" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/arrivalblock) -"iR" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/airless,/area/awaymission/southblock) -"iS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) -"iT" = (/turf/simulated/floor/airless,/area/awaymission/southblock) -"iU" = (/obj/item/ammo_casing/c10mm,/turf/simulated/floor/airless,/area/awaymission/southblock) -"iV" = (/obj/item/ammo_casing/c10mm{pixel_x = -4; pixel_y = 3},/turf/simulated/floor/airless,/area/awaymission/southblock) -"iW" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless,/area/awaymission/southblock) -"iX" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/airless,/area/awaymission/southblock) +"iP" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/arrivalblock) +"iQ" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/arrivalblock) +"iR" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"iS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"iT" = (/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"iU" = (/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"iV" = (/obj/item/ammo_casing/c10mm{pixel_x = -4; pixel_y = 3},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"iW" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"iX" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) "iY" = (/turf/simulated/wall,/area/awaymission/southblock) "iZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/arrivalblock) "ja" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/awaymission/arrivalblock) "jb" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "red"},/area/awaymission/arrivalblock) "jc" = (/obj/structure/stool,/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "red"},/area/awaymission/arrivalblock) -"jd" = (/obj/structure/table/reinforced,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/arrivalblock) +"jd" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/arrivalblock) "je" = (/turf/space,/area/awaymission/arrivalblock) -"jf" = (/obj/structure/girder,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/awaymission/arrivalblock) -"jg" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/awaymission/southblock) -"jh" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) -"ji" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) -"jj" = (/obj/item/ammo_casing/c10mm{pixel_y = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) -"jk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) -"jl" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) -"jm" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/southblock) -"jn" = (/obj/item/clothing/head/helmet/space/syndicate,/turf/simulated/floor/airless,/area/awaymission/southblock) +"jf" = (/obj/structure/girder,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/arrivalblock) +"jg" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/awaymission/southblock) +"jh" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"ji" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"jj" = (/obj/item/ammo_casing/c10mm{pixel_y = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"jk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"jl" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"jm" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) +"jn" = (/obj/item/clothing/head/helmet/space/syndicate,/turf/simulated/floor/plasteel/airless,/area/awaymission/southblock) "jo" = (/obj/structure/girder,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "jp" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "jq" = (/obj/machinery/door/airlock/maintenance{name = "Airlock"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/southblock) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 11508166db1..65c81b88470 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -86,8 +86,8 @@ "abH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) "abI" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) "abJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) -"abK" = (/obj/structure/lattice{layer = 2.4},/turf/simulated/floor/airless{icon_state = "circuit"},/area/space) -"abL" = (/obj/structure/grille,/turf/simulated/floor/airless{icon_state = "circuit"},/area/space) +"abK" = (/obj/structure/lattice{layer = 2.4},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) +"abL" = (/obj/structure/grille,/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) "abM" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent{filled = 0.2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/permabrig) "abN" = (/obj/machinery/atmospherics/unary/portables_connector,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/permabrig) "abO" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/security/permabrig) @@ -98,7 +98,7 @@ "abT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/security/permabrig) "abU" = (/obj/machinery/camera{c_tag = "Prison Solitary Confinement"; dir = 6; network = list("Prison","SS13")},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/permabrig) "abV" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/table,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/obj/item/weapon/pen,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/security/permabrig) -"abW" = (/obj/structure/grille,/obj/structure/sign/securearea,/turf/simulated/floor/airless{icon_state = "circuit"},/area/space) +"abW" = (/obj/structure/grille,/obj/structure/sign/securearea,/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) "abX" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/machinery/light/small{dir = 8},/obj/item/weapon/screwdriver,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plating,/area/security/permabrig) "abY" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/turf/simulated/floor/plating,/area/security/permabrig) "abZ" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plating,/area/security/permabrig) @@ -155,7 +155,7 @@ "acY" = (/obj/structure/stool/bed/chair/comfy/black,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "acZ" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "ada" = (/turf/simulated/wall/r_wall,/area/security/podbay) -"adb" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/airless{icon_state = "circuit"},/area/space) +"adb" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) "adc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "add" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) "ade" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury) @@ -476,9 +476,9 @@ "ajh" = (/obj/structure/table,/obj/item/weapon/folder/red,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/main) "aji" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Security Officer"},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/turf/simulated/floor/plasteel,/area/security/main) "ajj" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) -"ajk" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard) +"ajk" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxstarboard) "ajl" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxstarboard) -"ajm" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard) +"ajm" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxstarboard) "ajn" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk2"; icon_state = "catwalk2"},/area/solar/auxport) "ajo" = (/obj/structure/table/reinforced,/obj/machinery/magnetic_controller{autolink = 1; name = "Firing Range Control Console"; path = "w;e;e;w;s;n;n;s"; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/range) "ajp" = (/obj/effect/decal/warning_stripes/eastnorthwest,/turf/simulated/floor/plasteel,/area/security/range) @@ -585,7 +585,7 @@ "alm" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/security/main) "aln" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel,/area/security/main) "alo" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxstarboard) -"alp" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport) +"alp" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport) "alq" = (/turf/simulated/floor/plating/airless,/obj/structure/cable,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport) "alr" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/range) "als" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = -32; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/security/range) @@ -659,7 +659,7 @@ "amI" = (/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel,/area/security/main) "amJ" = (/obj/machinery/door/window/eastright{dir = 1; name = "Security Delivery"; req_access_txt = "1"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/security/main) "amK" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint) -"amL" = (/obj/structure/cable,/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport) +"amL" = (/obj/structure/cable,/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport) "amM" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport) "amN" = (/obj/machinery/computer/shuttle/labor,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/siberia) "amO" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/siberia) @@ -1599,16 +1599,16 @@ "aEM" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air{filled = 0.1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aEN" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aEO" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"aEP" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/space) -"aEQ" = (/turf/simulated/floor/airless{icon_state = "circuit"},/area/space) -"aER" = (/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/space) +"aEP" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/space) +"aEQ" = (/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) +"aER" = (/obj/item/weapon/paper/crumpled,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/space) "aES" = (/obj/machinery/atmospherics/binary/valve,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aET" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aEU" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aEV" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aEW" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aEX" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eva_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating/airless/catwalk,/area/maintenance/fpmaint) -"aEY" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eva_outer"; locked = 1; name = "EVA External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/maintenance/fpmaint) +"aEY" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eva_outer"; locked = 1; name = "EVA External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/maintenance/fpmaint) "aEZ" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eva_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "eva_pump"},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aFa" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "eva_airlock"; name = "EVA Airlock Console"; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "1;5;11;18;24"; tag_airpump = "eva_pump"; tag_chamber_sensor = "eva_sensor"; tag_exterior_door = "eva_outer"; tag_interior_door = "eva_inner"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aFb" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eva_inner"; locked = 1; name = "EVA Internal Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -1729,7 +1729,7 @@ "aHm" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/plating,/area/engine/engineering) "aHn" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aHo" = (/obj/machinery/optable,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"aHp" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/space) +"aHp" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/space) "aHq" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aHr" = (/obj/structure/stool,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aHs" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -2270,7 +2270,7 @@ "aRH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/chapel/office) "aRI" = (/turf/simulated/wall,/area/chapel/office) "aRJ" = (/obj/machinery/door/airlock/maintenance{name = "Crematorium Maintenance"; req_access_txt = "27"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aRK" = (/obj/structure/closet/wardrobe/chaplain_black,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"aRK" = (/obj/structure/closet/secure_closet/chaplain,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "aRL" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/light/small{dir = 1},/obj/machinery/requests_console{department = "Chapel"; name = "Chapel Requests Console"; departmentType = 2; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "aRM" = (/obj/machinery/camera{c_tag = "Chapel Chaplain's Office"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "aRN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) @@ -2850,7 +2850,7 @@ "bcP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bcQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bcR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bcS" = (/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bcS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/table,/obj/item/weapon/kitchen/knife,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bcT" = (/obj/machinery/slot_machine,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/crew_quarters/bar) "bcU" = (/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bcV" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "kitchenbar"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/light{dir = 1},/obj/machinery/door/window{dir = 4; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) @@ -3098,7 +3098,6 @@ "bhD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bhE" = (/obj/structure/table/woodentable,/obj/item/clothing/head/cakehat,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bhF" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bhG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/table,/obj/item/weapon/kitchen/utensil/knife{desc = "For making cutlets"; name = "Cutlet Knife"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bhH" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bhI" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/item/weapon/reagent_containers/food/drinks/bottle/cream,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bhJ" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) @@ -4081,7 +4080,7 @@ "bAy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bAz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/bridge/meeting_room) "bAA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel,/area/bridge/meeting_room) -"bAB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Gravity Generator Room South"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel,/area/bridge/meeting_room) +"bAB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Accounts uplink terminal"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel,/area/bridge/meeting_room) "bAC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/bridge/meeting_room) "bAD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/lattice,/turf/space,/area/space) "bAE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/space,/area/space) @@ -5301,8 +5300,8 @@ "bXW" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/machinery/air_sensor{frequency = 1222; id_tag = "burn_sensor"},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) "bXX" = (/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bXY" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/toxins/test_area) -"bXZ" = (/turf/simulated/floor/airless,/area/toxins/test_area) -"bYa" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/airless,/area/toxins/test_area) +"bXZ" = (/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) +"bYa" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "bYb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/shuttle/mining) "bYc" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/mining) "bYd" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/medical/research_shuttle_dock) @@ -5376,7 +5375,7 @@ "bZt" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "ToxinsIgnitor"; on = 0},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) "bZu" = (/obj/machinery/door/airlock/external{name = "Toxins Test Chamber"; req_access_txt = "0"},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bZv" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating/airless,/area/toxins/test_area) -"bZw" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber North"; network = list("Toxins","Research","SS13")},/obj/machinery/light{dir = 1},/turf/simulated/floor/airless,/area/toxins/test_area) +"bZw" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber North"; network = list("Toxins","Research","SS13")},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "bZx" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/mining) "bZy" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "bZz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/wall,/area/quartermaster/miningdock) @@ -5530,8 +5529,8 @@ "ccr" = (/obj/machinery/driver_button{dir = 2; id_tag = "toxinsdriver"; pixel_y = 24; range = 18},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/toxins/mixing) "ccs" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber."; layer = 4; name = "Test Chamber Telescreen"; network = list("Toxins"); pixel_x = 32; pixel_y = 0},/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel,/area/toxins/mixing) "cct" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing) -"ccu" = (/turf/simulated/floor/airless{dir = 9; icon_state = "warning"},/area/toxins/test_area) -"ccv" = (/turf/simulated/floor/airless{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/toxins/test_area) +"ccu" = (/turf/simulated/floor/plasteel/airless{dir = 9; icon_state = "warning"},/area/toxins/test_area) +"ccv" = (/turf/simulated/floor/plasteel/airless{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/toxins/test_area) "ccw" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "ccx" = (/obj/structure/table,/obj/item/weapon/storage/box/syndidonkpockets,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "ccy" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) @@ -5622,7 +5621,7 @@ "cef" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/toxins/mixing) "ceg" = (/obj/machinery/doppler_array{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/mixing) "ceh" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing) -"cei" = (/turf/simulated/floor/airless{dir = 8; icon_state = "warning"},/area/toxins/test_area) +"cei" = (/turf/simulated/floor/plasteel/airless{dir = 8; icon_state = "warning"},/area/toxins/test_area) "cej" = (/turf/simulated/wall/r_wall,/area/maintenance/apmaint) "cek" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/apmaint) "cel" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -5705,8 +5704,8 @@ "cfK" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/mixing) "cfL" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber."; layer = 4; name = "Test Chamber Telescreen"; network = list("Toxins"); pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/toxins/mixing) "cfM" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing) -"cfN" = (/turf/simulated/floor/airless{dir = 4; icon_state = "warning"},/area/toxins/test_area) -"cfO" = (/turf/simulated/floor/airless{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/toxins/test_area) +"cfN" = (/turf/simulated/floor/plasteel/airless{dir = 4; icon_state = "warning"},/area/toxins/test_area) +"cfO" = (/turf/simulated/floor/plasteel/airless{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/toxins/test_area) "cfP" = (/obj/machinery/light/small{dir = 1},/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/aft) "cfQ" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/aft) "cfR" = (/turf/simulated/floor/plating,/area/maintenance/aft) @@ -5781,9 +5780,9 @@ "chi" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing) "chj" = (/obj/machinery/door/window/southright{name = "Toxins Launcher"; req_access_txt = "7"; req_one_access_txt = "0"},/obj/machinery/door/window/southright{dir = 1; name = "Toxins Launcher"; req_access_txt = "7"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing) "chk" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing) -"chl" = (/turf/simulated/floor/airless{icon_state = "warning"},/area/toxins/test_area) -"chm" = (/turf/simulated/floor/airless{dir = 6; icon_state = "warning"},/area/toxins/test_area) -"chn" = (/turf/simulated/floor/airless{dir = 10; icon_state = "warning"},/area/toxins/test_area) +"chl" = (/turf/simulated/floor/plasteel/airless{icon_state = "warning"},/area/toxins/test_area) +"chm" = (/turf/simulated/floor/plasteel/airless{dir = 6; icon_state = "warning"},/area/toxins/test_area) +"chn" = (/turf/simulated/floor/plasteel/airless{dir = 10; icon_state = "warning"},/area/toxins/test_area) "cho" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft) "chp" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft) "chq" = (/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/aft) @@ -5849,9 +5848,9 @@ "ciy" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/toxins/mixing) "ciz" = (/obj/machinery/door/poddoor{id_tag = "toxinsdriver"; name = "Toxins Launcher Bay Door"; protected = 0},/turf/simulated/floor/plating,/area/toxins/mixing) "ciA" = (/obj/machinery/door/poddoor{id_tag = "toxinsdriver"; name = "Toxins Launcher Bay Door"; protected = 0},/turf/simulated/floor/plating/airless,/area/toxins/test_area) -"ciB" = (/obj/item/device/radio/beacon,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/airless,/area/toxins/test_area) +"ciB" = (/obj/item/device/radio/beacon,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "ciC" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/toxins/test_area) -"ciD" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber East"; dir = 8; network = list("Toxins","Research","SS13")},/obj/machinery/light{dir = 4},/turf/simulated/floor/airless,/area/toxins/test_area) +"ciD" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber East"; dir = 8; network = list("Toxins","Research","SS13")},/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "ciE" = (/turf/simulated/wall/r_wall,/area/storage/tech) "ciF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera{c_tag = "Atmospherics Control Room"; network = list("SS13")},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "Atmospherics Control APC"; pixel_y = 26; shock_proof = 1},/obj/structure/table,/obj/item/weapon/book/manual/atmospipes,/obj/item/device/multitool{pixel_x = 5},/turf/simulated/floor/plasteel,/area/atmos/control) "ciG" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plating,/area/storage/tech) @@ -5908,8 +5907,8 @@ "cjF" = (/obj/machinery/light,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreencorner"},/area/medical/research{name = "Research Division"}) "cjG" = (/obj/machinery/meter,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjH" = (/obj/machinery/atmospherics/unary/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cjI" = (/turf/simulated/floor/airless{dir = 5; icon_state = "warning"},/area/toxins/test_area) -"cjJ" = (/turf/simulated/floor/airless{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/toxins/test_area) +"cjI" = (/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "warning"},/area/toxins/test_area) +"cjJ" = (/turf/simulated/floor/plasteel/airless{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/toxins/test_area) "cjK" = (/turf/simulated/wall/r_wall,/area/maintenance/incinerator) "cjL" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/r_wall,/area/maintenance/incinerator) "cjM" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -6248,7 +6247,7 @@ "cqh" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "cqi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "cqj" = (/obj/machinery/power/apc{dir = 4; name = "Explosives Testing APC"; pixel_x = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/toxins/test_area) -"cqk" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber South"; dir = 1; network = list("Toxins","Research","SS13")},/obj/machinery/light,/turf/simulated/floor/airless,/area/toxins/test_area) +"cqk" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber South"; dir = 1; network = list("Toxins","Research","SS13")},/obj/machinery/light,/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "cql" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) "cqm" = (/obj/machinery/atmospherics/binary/pump{dir = 4; on = 1},/obj/structure/sign/fire{pixel_y = -32},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cqn" = (/obj/machinery/door_control{id = "disvent"; name = "Incinerator Vent Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "12"},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) @@ -6720,9 +6719,9 @@ "czl" = (/obj/item/device/radio/beacon,/turf/simulated/floor/engine,/area/toxins/test_chamber) "czm" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/engine,/area/toxins/test_chamber) "czn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/starboard) -"czo" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) +"czo" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port) "czp" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk2"; icon_state = "catwalk2"},/area/solar/port) -"czq" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) +"czq" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port) "czr" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space) "czs" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft) "czt" = (/turf/simulated/floor/plating,/area/assembly/assembly_line) @@ -7224,7 +7223,7 @@ "cIV" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cIW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cIX" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cIY" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) +"cIY" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) "cIZ" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/starboard) "cJa" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_northwest_lock"; locked = 1; req_access_txt = "152"; req_one_access = null; req_one_access_txt = "0"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "cJb" = (/turf/simulated/wall,/area/maintenance/engi_shuttle) @@ -7347,7 +7346,7 @@ "cLo" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) "cLp" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cLq" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cLr" = (/obj/structure/cable,/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) +"cLr" = (/obj/structure/cable,/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) "cLs" = (/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cLt" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cLu" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) @@ -8473,7 +8472,7 @@ "dha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhe" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "dhg" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) @@ -8829,14 +8828,14 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzaXhaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYkaYjaYmaYlaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYDaWNaYEaYFaYGaYHaWNaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbbikbikbikbikbqUbqTbqVbmKbmKbrUbthbmKbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZlaZmaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZNaZFaZGaZJaZIaZLaZKaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMebbsaZUaYnaYnaZVaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbbakbalbakaVbaVbaVbaVeaVbaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAbikbikbikbikaaabtibtjbtibtibtibtkbtibtlbtibtjbtiaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaLyaCuaInaGdaKzbaBbaCbaDbaEaKzaGdaInaInaCubaFaVEaInbaGbaHaZdaZdaZeaDEbaIaXnaJraZhaXpaXqbaJbaKbaLbaLbaMbaNbaObaLbaPbaLbaQbaLbaRbaSbaLbaLbaWbaLbaLbaUbaVbaLbaWbaXbaYbaZaXqaXqbbabbbbbcbbdbbebbfbbebbgbbhbbgbbgbbgbbgbbgbbgbbibbjbbkbbkbbkbbkbblbbkbbmbbnbbkbbkbbobbpbbqbbqbbqbbqbbqbbqbbqbbraYiaYiaMebcTbbtbbubbvbbvbbwbbxaZXaYqbbyaUTaUTaUTaUTaUTbbzaUTbbAbbBbbCbbDaWCbbEaVbbbFbbGbbHbbIbbJbbKbbLbbMaVbaVhaHYaRDbbNbbOaTvbbPbbQaTvbbRbbRaRDbbSbbTbbUaQbbbVbbWbbXaRSaRSbbYbbZaQbbcaaQbbcbbatbccbcdbcebatbatbcfbaAbikbikbikbikbqUbtmbwlbutbwmbtmbmKbutbwmbtmbwlbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaInaYYaKzaKBaJraJraKCaKzaYYaKzbcgbchbcibcjaInbckbckaXkbckaXlaDEbclaXnaJraDEbcmbcmbcnbcobcobcobcobcobcobcpbcqbcobcobcobcobcobcobcrbcsbctbctbcubctbcvbcwbcxbcvbcvbcybczbcAbcmbcBbcBbcCbcCbcCbcDbcDbcDbcDbcDbcDbcDbcDbcEbcFbcFbcGbcFbcHbcHbcHbcHbcIbcJbcHbcEbcKbcKbcKbcKbcKbcKbcKbcKbcLbcLbcLaMebcMbcNbcObcObcObcObcPbcQbcRbcSbcUaZTbcVbcWbcXbcYaUTaUTbcZbdabdbbdabdaaVbbdcbddbdebdebdebdebdfbdgaVbbdhbdiaRDbdjaTvbbPbbPbbQbbPaTvbdkaRDbdlbdmbdnaQbaRSbdobdpbdqbdqbdrbdsbdtbdubdvbdwbdxbdybdzbavbatbatbdAbaAbikbikbikbikbqUbwnbmKbutbBQbtmbmKbutbBQbtmbmKbFmbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDbikbikbikbikbikbikbikbcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEbikbikbikbikbikbikbikbcKbeGaYibeHaMebeIbcNbcSbcSbcSbcSbcSbeJbeKbcSbcSbcSbnMbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWbeXbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabbikbikaabbdBbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDbikbikbikbikbcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEbikbikbikbikbcKbeGaYibgabgbbgcbgdbgebgfbgcbggbghbgibgjbgkbglbcSbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvbeXbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAbqUbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbcSbhBbhCbcSbhDbhEbglbcSbnMbeMbeMbhFbhGbhHbhIbhJbhKbhLbeMbhMbgubhNbeXbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbKnbIzbPfbNjbiibPfddJbmKbmKbmKbmKbmKbmKbmKbmKbmKbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbltbltblubltbltbltblvbltbltbmPaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbcSbjgbcSbcSbcSbjhbjibcSbhDbjjbglbcSbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatddAbaAbaAbaAbaAbgKbqUddBbmKbutbwmbtmbmKbutbwmbtmbmKddCbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbohbptbojbpwbpwbqWbpwbpwbpwbqWblubjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkMbkLbkObkObkPaYibkQaMebcSbkRbkSbglbcSbkTbkUbcSbkVbkWbglbcSbnMbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatddDbgKblrblrblrbaAbwmbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbwmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbqYbqXbqXbqXbqXbqXbqXbqXbqXbqXbqXbqZbraaGdbraaJrbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbkNbmsbmtaYiaYibjfbcSbnCbcSbcSbcSaRebcSbcSbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatddEbaAbmLbmMbmNbaAbBQbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbBQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbcSbnGbcSbnFbcSbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaInaYYaKzaKBaJraJraKCaKzaYYaKzbcgbchbcibcjaInbckbckaXkbckaXlaDEbclaXnaJraDEbcmbcmbcnbcobcobcobcobcobcobcpbcqbcobcobcobcobcobcobcrbcsbctbctbcubctbcvbcwbcxbcvbcvbcybczbcAbcmbcBbcBbcCbcCbcCbcDbcDbcDbcDbcDbcDbcDbcDbcEbcFbcFbcGbcFbcHbcHbcHbcHbcIbcJbcHbcEbcKbcKbcKbcKbcKbcKbcKbcKbcLbcLbcLaMebcMbcNbcObcObcObcObcPbcQbcRbmwbcUaZTbcVbcWbcXbcYaUTaUTbcZbdabdbbdabdaaVbbdcbddbdebdebdebdebdfbdgaVbbdhbdiaRDbdjaTvbbPbbPbbQbbPaTvbdkaRDbdlbdmbdnaQbaRSbdobdpbdqbdqbdrbdsbdtbdubdvbdwbdxbdybdzbavbatbatbdAbaAbikbikbikbikbqUbwnbmKbutbBQbtmbmKbutbBQbtmbmKbFmbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDbikbikbikbikbikbikbikbcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEbikbikbikbikbikbikbikbcKbeGaYibeHaMebeIbcNbmwbmwbmwbmwbmwbeJbeKbmwbmwbmwbnMbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWbeXbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabbikbikaabbdBbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDbikbikbikbikbcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEbikbikbikbikbcKbeGaYibgabgbbgcbgdbgebgfbgcbggbghbgibgjbgkbglbmwbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvbeXbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAbqUbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbmwbhBbhCbmwbhDbhEbglbmwbnMbeMbeMbhFbcSbhHbhIbhJbhKbhLbeMbhMbgubhNbeXbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbKnbIzbPfbNjbiibPfddJbmKbmKbmKbmKbmKbmKbmKbmKbmKbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbltbltblubltbltbltblvbltbltbmPaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbmwbjgbmwbmwbmwbjhbjibmwbhDbjjbglbmwbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatddAbaAbaAbaAbaAbgKbqUddBbmKbutbwmbtmbmKbutbwmbtmbmKddCbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbohbptbojbpwbpwbqWbpwbpwbpwbqWblubjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkMbkLbkObkObkPaYibkQaMebmwbkRbkSbglbmwbkTbkUbmwbkVbkWbglbmwbnMbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatddDbgKblrblrblrbaAbwmbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbwmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbqYbqXbqXbqXbqXbqXbqXbqXbqXbqXbqXbqZbraaGdbraaJrbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbkNbmsbmtaYiaYibjfbmwbnCbmwbmwbmwaRebmwbmwbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatddEbaAbmLbmMbmNbaAbBQbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbBQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbmwbnGbmwbnFbmwbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbltbltblubltbltbltblvbltbltbtnaabaInboibdFbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEboFbnmbnmbnmbnmboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTbplbpkbpkbpkbpkbpmbpJaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatddAbaAbaAbaAbaAbgKbqUddFbmKbmKbmKbmKbmKbmKbmKbmKbmKddGbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCdlEbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbmubpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqrbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqybqzbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8969,4 +8968,3 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik "} - diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index d41366bfd14..3b40c6bf0a4 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -156,6 +156,10 @@ "cZ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/trackimp,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "da" = (/obj/structure/table/reinforced,/obj/item/weapon/scalpel,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "db" = (/turf/simulated/floor/holofloor{tag = "icon-carpet2-0 (EAST)"; icon_state = "carpet2-0"; dir = 4},/area/holodeck/source_theatre) +"dc" = (/obj/structure/rack,/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) +"dd" = (/obj/structure/rack,/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) +"de" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) +"df" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/shard,/obj/item/weapon/kitchen/knife,/obj/item/weapon/storage/firstaid/tactical,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) "do" = (/obj/effect/landmark{name = "prisonwarp"},/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) "dp" = (/turf/unsimulated/floor{icon_state = "floorgrime"},/area/prison/solitary) "dq" = (/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) @@ -465,9 +469,7 @@ "ma" = (/obj/effect/decal/cleanable/molten_item,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) "mb" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station) "mc" = (/obj/item/trash/chips,/obj/machinery/light/spot,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"md" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) "me" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) -"mf" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) "mg" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership) "mh" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate_elite/mothership) "mi" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock"; req_access_txt = "150"},/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "syndicate_elite"; name = "Front Hull Door"; opacity = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate_elite/mothership) @@ -552,7 +554,6 @@ "rK" = (/turf/unsimulated/wall/splashscreen,/area/start) "rP" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/clusterbuster,/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "rQ" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/chem_grenade/incendiary{name = "Incendiary Grenade"},/obj/machinery/light{dir = 1},/turf/simulated/floor/engine,/area/shuttle/gamma/space) -"rR" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchenknife/combat,/obj/item/weapon/kitchenknife/combat,/obj/item/weapon/kitchenknife/combat,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "rT" = (/obj/structure/closet/secure_closet/guncabinet,/obj/machinery/camera/motion{c_tag = "Gamma Armory Entrance"; network = list("SS13")},/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "rU" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "rV" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/turf/simulated/floor/engine,/area/shuttle/gamma/space) @@ -1001,7 +1002,6 @@ "Fd" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/a40mm,/obj/item/ammo_box/a40mm,/obj/item/ammo_box/a40mm,/obj/item/ammo_box/a40mm,/obj/item/weapon/gun/projectile/automatic/m90,/obj/item/weapon/gun/projectile/automatic/m90{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "Fe" = (/obj/structure/mirror{dir = 4; pixel_x = 0; pixel_y = -32},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "Ff" = (/obj/machinery/optable,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) -"Fg" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/shard,/obj/item/weapon/kitchenknife,/obj/item/weapon/storage/firstaid/tactical,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) "Fh" = (/obj/structure/table,/obj/item/weapon/gun/energy/pulse_rifle/pistol,/obj/machinery/door_control{desc = "A remote control switch to lock down the admin lab."; icon_state = "doorctrl0"; id = "ADMINCHEMLOCKDOWN"; name = "Lockdown"; pixel_y = 24; req_access_txt = "0"},/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/admin) "Fi" = (/turf/unsimulated/floor{dir = 1; icon_state = "carpetside"},/area/admin) "Fj" = (/obj/machinery/computer/secure_data,/obj/item/weapon/paper/sop,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/admin) @@ -1241,7 +1241,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckck aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihkWkXkYkZiklalblcldleihaNaNisiQjHjHjHlflglhknknkLknkjkokpkrkrksaNaNaNaNaNaNaNaNaNaNaNatbhauauauauaubjbibibibjauauauauauaKataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlolplqikikiklrlsltluihaNaNisiQlvjHjHlwlglhknknknknlxknkrkrkrksaNaNaNaNaNaNaNaNaNaNaNatbhauauauauauaubjbjbjauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZlBlBlBlBlBlClDjpjpjpjpjpjplEjpjpjpjpjpjplDlClBlBlBlBlBbZbZbZaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlGlplqikikiklHlIlHlIihaNaNisiQlJjHlKiQkKkjknknkLknkjkokpkrkrksaNaNaNaNaNaNaNaNaNaNaNatauauauauauauauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZlWlWlWlWlWbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZlXlXlXlXlXbZaNaNaNaNaN -aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlomambkJmclamdlumemfihaNaNismgmhmimhmjkikjknknkLknkjknkrkrkrksaNaNaNaNaNaNaNaNaNaNaNatauauaKaJaJaKauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaN +aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlomambkJmcladclumeddihaNaNismgmhmimhmjkikjknknkLknkjknkrkrkrksaNaNaNaNaNaNaNaNaNaNaNatauauaKaJaJaKauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihihihihihihihihihihihihaNaNisaNmgmsmjaNmtkjknknmuknkjkokpmvkrksaNaNaNaNaNaNaNaNaNaNaNatatbkatatatatatatatatatatatatatbkatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNititititititititititititititititititaNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckbmckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -1296,7 +1296,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaq aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNbZbZbZbZbZbZrPrQrRbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNbZbZbZbZbZbZrPrQdebZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNbZcYrTrUrVrWrXrXrXbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNbZrXrXrXrXrXrXrYrZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNbZsasbsbsbscsdsesbbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -1414,7 +1414,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwDwDwDwDMEHDMDwDwDwDwDwEIDKDKDAaNaNaNEJEKEwEwEwEwELEJaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEnaNEMDAENEOEPDKDKEQERESETEuDADKDKDAaNaNDtDAEUEwEVEWEwEXDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKDKDKDKDKDKDKEYDKDKDADwEZDwDwDwFaDwDwFaDwDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFbFcFdDKDKDKFeFeFeDKEHDKDKDAFfEwEwFgDADKDAFhFiFjDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFbFcFdDKDKDKFeFeFeDKEHDKDKDAFfEwEwdfDADKDAFhFiFjDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKDKFkDwDwDwDwDADKDKDAEwEwFlFmDADKDAFnFoFpDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFqFrFsDKFtDAFuFvFwFxDADKDKDAFyEwEwFzDADKDAFAFBFCDNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKFDDAFEFvFvFvFFDKDKDAFGEwEwFHDADKDKDKDKDKEfaNaNaNaNDtDwFIFJFKDwDuaNaNaNaNaNaNaN diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index d2224b5a5fa..04b1791e6c3 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -20,9 +20,9 @@ "by" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/space) "bz" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/space) "bW" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) -"bX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) +"bX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) "bY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) -"bZ" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) +"bZ" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) "ca" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space) "cb" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "cc" = (/obj/machinery/camera{c_tag = "Telecomms North Solars"; dir = 8; network = list("Telecomms")},/turf/space,/area/space) @@ -124,9 +124,9 @@ "dU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/turret_protected/tcomsat) "dV" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat) "dW" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber) -"dX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) +"dX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) "dY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/tcommsat/computer) -"dZ" = (/obj/machinery/power/solar,/obj/structure/cable,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) +"dZ" = (/obj/machinery/power/solar,/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) "ea" = (/obj/machinery/door/window/brigdoor{dir = 8; name = "Telecomms Server Access"; req_access = null; req_access_txt = "61"},/obj/machinery/door/window/brigdoor{dir = 4; name = "Telecomms Server Access"; req_access_txt = "61"},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/tcommsat/chamber) "eb" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/tcommsat/chamber) "ec" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/tcommsat/computer) diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm index fc70d84d174..e0701e70cb1 100644 --- a/_maps/map_files/cyberiad/z4.dmm +++ b/_maps/map_files/cyberiad/z4.dmm @@ -5,27 +5,27 @@ "ae" = (/turf/simulated/floor/plating/airless,/area/constructionsite/maintenance) "af" = (/turf/simulated/wall,/area/constructionsite/bridge) "ag" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/constructionsite/bridge) -"ah" = (/turf/simulated/floor/airless,/area/constructionsite/bridge) +"ah" = (/turf/simulated/floor/plasteel/airless,/area/constructionsite/bridge) "ai" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating/airless,/area/constructionsite/maintenance) "aj" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating/airless,/area/constructionsite/bridge) -"ak" = (/turf/simulated/floor/airless,/area/space) +"ak" = (/turf/simulated/floor/plasteel/airless,/area/space) "al" = (/turf/simulated/floor/plating/airless,/area/space) -"am" = (/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/airless,/area/constructionsite/bridge) +"am" = (/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel/airless,/area/constructionsite/bridge) "an" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/fore) -"ao" = (/turf/simulated/floor/airless,/area/constructionsite/hallway/fore) +"ao" = (/turf/simulated/floor/plasteel/airless,/area/constructionsite/hallway/fore) "ap" = (/turf/simulated/wall,/area/constructionsite/hallway/fore) "aq" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/fore) -"ar" = (/obj/machinery/door/airlock/glass{name = "Library"},/turf/simulated/floor/airless,/area/constructionsite/hallway/fore) -"as" = (/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/airless,/area/constructionsite/hallway/fore) +"ar" = (/obj/machinery/door/airlock/glass{name = "Library"},/turf/simulated/floor/plasteel/airless,/area/constructionsite/hallway/fore) +"as" = (/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel/airless,/area/constructionsite/hallway/fore) "at" = (/obj/machinery/door/airlock/glass{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/fore) "au" = (/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/fore) "av" = (/turf/simulated/wall,/area/space) "aw" = (/turf/simulated/wall,/area/constructionsite/storage) -"ax" = (/turf/simulated/floor/airless,/area/constructionsite/storage) -"ay" = (/obj/machinery/door/airlock/glass_science,/turf/simulated/floor/airless,/area/constructionsite/storage) -"az" = (/obj/machinery/door/airlock/glass_science,/turf/simulated/floor/airless,/area/constructionsite/hallway/fore) -"aA" = (/obj/machinery/door/airlock/research,/turf/simulated/floor/airless,/area/constructionsite/hallway/fore) -"aB" = (/obj/machinery/door/airlock/research,/turf/simulated/floor/airless,/area/constructionsite/storage) +"ax" = (/turf/simulated/floor/plasteel/airless,/area/constructionsite/storage) +"ay" = (/obj/machinery/door/airlock/glass_science,/turf/simulated/floor/plasteel/airless,/area/constructionsite/storage) +"az" = (/obj/machinery/door/airlock/glass_science,/turf/simulated/floor/plasteel/airless,/area/constructionsite/hallway/fore) +"aA" = (/obj/machinery/door/airlock/research,/turf/simulated/floor/plasteel/airless,/area/constructionsite/hallway/fore) +"aB" = (/obj/machinery/door/airlock/research,/turf/simulated/floor/plasteel/airless,/area/constructionsite/storage) "aC" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating/airless,/area/constructionsite/storage) "aD" = (/turf/simulated/wall,/area/solar/constructionsite) "aE" = (/turf/simulated/floor/plating/airless,/area/solar/constructionsite) @@ -39,11 +39,11 @@ "aM" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk10"; icon_state = "catwalk10"},/area/space) "aN" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/space) "aO" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) -"aP" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) +"aP" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/engiestation/solars) "aQ" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) -"aR" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) +"aR" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/engiestation/solars) "aS" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) -"aT" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) +"aT" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/engiestation/solars) "aU" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) "aV" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) "aW" = (/turf/simulated/wall/r_wall,/area/engiestation) @@ -54,7 +54,7 @@ "bb" = (/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engiestation) "bc" = (/turf/simulated/wall,/area/constructionsite/ai) "bd" = (/turf/simulated/floor/plating/airless,/area/constructionsite/ai) -"be" = (/turf/simulated/floor/airless{tag = "icon-bcircuit"; icon_state = "bcircuit"},/area/constructionsite/ai) +"be" = (/turf/simulated/floor/plasteel/airless{tag = "icon-bcircuit"; icon_state = "bcircuit"},/area/constructionsite/ai) "bf" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk6"; icon_state = "catwalk6"},/area/engiestation/solars) "bg" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk9"; icon_state = "catwalk9"},/area/engiestation/solars) "bh" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/engiestation/solars) @@ -71,7 +71,7 @@ "bs" = (/turf/simulated/wall,/area/engiestation) "bt" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engiestation) "bu" = (/turf/simulated/wall/r_wall,/area/space) -"bv" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) +"bv" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/engiestation/solars) "bw" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/telecomms/relay/preset/engioutpost,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engiestation) "bx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engiestation) "by" = (/obj/machinery/light{dir = 1},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/solar_control/autostart{name = "Engineering Outpost Solar Control"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/engiestation) @@ -100,8 +100,8 @@ "bV" = (/obj/machinery/mass_driver{dir = 4; id_tag = "constructiondriver0"; name = "construction driver #0"},/obj/machinery/door/window{dir = 8; name = "Construction Driver"; req_access_txt = "10"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) "bW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engiestation) "bX" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver0"; name = "Construction Driver Door"; protected = 0},/turf/simulated/floor/plating,/area/engiestation) -"bY" = (/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/constructionsite/ai) -"bZ" = (/obj/machinery/power/solar,/obj/structure/cable,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) +"bY" = (/turf/simulated/floor/plasteel/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/constructionsite/ai) +"bZ" = (/obj/machinery/power/solar,/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/engiestation/solars) "ca" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engiestation) "cb" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/engineering{input_attempt = 1; input_level = 50000; inputting = 1; output_level = 15000},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engiestation) "cc" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) @@ -162,7 +162,7 @@ "df" = (/obj/machinery/floodlight,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/engiestation) "dg" = (/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engiestation) "dh" = (/turf/simulated/wall,/area/constructionsite/hallway/aft) -"di" = (/turf/simulated/floor/airless,/area/constructionsite/hallway/aft) +"di" = (/turf/simulated/floor/plasteel/airless,/area/constructionsite/hallway/aft) "dj" = (/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/aft) "dk" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/engiestation) "dl" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/coffee,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 4},/area/engiestation) @@ -245,11 +245,11 @@ "eK" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/engiestation) "eL" = (/obj/docking_port/stationary{dir = 2; dwidth = 3; height = 5; id = "engineering_away"; name = "engineering outpost dock"; width = 7},/turf/space,/area/space) "eM" = (/obj/machinery/field/generator,/turf/simulated/floor/plating/airless,/area/space) -"fe" = (/turf/simulated/floor/airless{icon_state = "white"},/area/constructionsite/medical) +"fe" = (/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/constructionsite/medical) "ff" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/constructionsite/medical) -"fg" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/constructionsite/medical) +"fg" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/constructionsite/medical) "fh" = (/turf/simulated/floor/plating/airless,/area/constructionsite/atmospherics) -"fi" = (/turf/simulated/floor/airless,/area/constructionsite/atmospherics) +"fi" = (/turf/simulated/floor/plasteel/airless,/area/constructionsite/atmospherics) "fm" = (/turf/simulated/floor/plating/airless,/area/constructionsite/medical) "fp" = (/obj/machinery/door/airlock/glass_medical{id_tag = ""; name = "Medbay"; req_access_txt = "0"; req_one_access_txt = "65;5"},/turf/simulated/wall,/area/constructionsite/medical) "fq" = (/obj/structure/lattice,/turf/space,/area/constructionsite/medical) @@ -268,23 +268,23 @@ "fD" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1443; icon_state = "on"; id = "d_air_in"; on = 1},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/constructionsite/atmospherics) "fE" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/constructionsite/atmospherics) "fF" = (/obj/machinery/door/airlock/glass_medical{id_tag = ""; name = "Medbay"; req_access_txt = "0"; req_one_access_txt = "65;5"},/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/aft) -"fG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/airless,/area/constructionsite/atmospherics) -"fH" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "d_o2_in"; name = "Oxygen Supply Control"; output_tag = "d_o2_out"; sensors = list("d_o2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/airless,/area/constructionsite/atmospherics) +"fG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel/airless,/area/constructionsite/atmospherics) +"fH" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "d_o2_in"; name = "Oxygen Supply Control"; output_tag = "d_o2_out"; sensors = list("d_o2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel/airless,/area/constructionsite/atmospherics) "fI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "d_o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/constructionsite/atmospherics) "fJ" = (/obj/machinery/light/small{dir = 1},/obj/machinery/air_sensor{frequency = 1441; id_tag = "d_o2_sensor"},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/constructionsite/atmospherics) "fK" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1441; icon_state = "on"; id = "d_o2_in"; on = 1},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/constructionsite/atmospherics) "fL" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/constructionsite/atmospherics) "fM" = (/turf/simulated/wall,/area/constructionsite) "fN" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/constructionsite) -"fO" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "d_n2_in"; name = "Nitrogen Supply Control"; output_tag = "d_n2_out"; sensors = list("d_n2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/airless,/area/constructionsite/atmospherics) +"fO" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "d_n2_in"; name = "Nitrogen Supply Control"; output_tag = "d_n2_out"; sensors = list("d_n2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel/airless,/area/constructionsite/atmospherics) "fP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "d_n2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/constructionsite/atmospherics) "fQ" = (/obj/machinery/light/small{dir = 1},/obj/machinery/air_sensor{frequency = 1441; id_tag = "d_n2_sensor"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/constructionsite/atmospherics) "fR" = (/turf/simulated/floor/plating/airless,/area/constructionsite) "fS" = (/obj/structure/lattice,/turf/space,/area/constructionsite) -"fT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/airless,/area/constructionsite/atmospherics) +"fT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/plasteel/airless,/area/constructionsite/atmospherics) "fU" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1441; icon_state = "on"; id = "d_n2_in"; on = 1},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/constructionsite/atmospherics) "fV" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/constructionsite/atmospherics) -"fW" = (/turf/simulated/floor/airless,/area/constructionsite) +"fW" = (/turf/simulated/floor/plasteel/airless,/area/constructionsite) "fX" = (/turf/space,/area/constructionsite) "fY" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating/airless,/area/constructionsite) "fZ" = (/turf/simulated/wall,/area/constructionsite/engineering) diff --git a/_maps/map_files/cyberiad/z5.dmm b/_maps/map_files/cyberiad/z5.dmm index a1333f5b485..87a769d34d2 100644 --- a/_maps/map_files/cyberiad/z5.dmm +++ b/_maps/map_files/cyberiad/z5.dmm @@ -92,7 +92,7 @@ "bN" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/atmos) "bO" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/atmos) "bP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"bQ" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/mine/abandoned) +"bQ" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) "bR" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "S-NE"},/turf/space,/area/space) "bS" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/research_outpost/spectro) "bT" = (/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/spectro) @@ -119,7 +119,7 @@ "co" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/research_outpost/atmos) "cp" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/research_outpost/atmos) "cq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"cr" = (/turf/simulated/floor/airless,/area/mine/abandoned) +"cr" = (/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) "cs" = (/turf/simulated/mineral/random/high_chance,/area/mine/unexplored) "ct" = (/obj/machinery/radiocarbon_spectrometer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/research_outpost/spectro) "cu" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/spectro) @@ -145,7 +145,7 @@ "cO" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/plasteel,/area/research_outpost/atmos) "cP" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/research_outpost/atmos) "cQ" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"cR" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor/airless,/area/mine/abandoned) +"cR" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) "cS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cU" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/obj/machinery/camera{c_tag = "Research Outpost Mass Spectrometry"; dir = 8; network = list("Research Outpost")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreen"},/area/research_outpost/spectro) @@ -164,8 +164,8 @@ "dh" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/research_outpost/atmos) "di" = (/turf/simulated/shuttle/wall{tag = "icon-pwall (NORTH)"; icon_state = "pwall"; dir = 1},/area/space) "dj" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{tag = "icon-pwall (SOUTHWEST)"; icon_state = "pwall"; dir = 10},/area/space) -"dk" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"dl" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"dk" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"dl" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "dm" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"},/area/research_outpost/spectro) "dn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; layer = 2.4; on = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitegreen"},/area/research_outpost/spectro) "do" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric{name = "beaker 'sulphuric acid'"},/obj/item/weapon/reagent_containers/glass/beaker/fuel,/obj/item/weapon/reagent_containers/glass/bottle/toxin,/obj/item/weapon/reagent_containers/glass/beaker/water,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/research_outpost/sample) @@ -190,8 +190,8 @@ "dH" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/space) "dI" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/space) "dJ" = (/obj/machinery/door/airlock/hatch,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/space) -"dK" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"dL" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"dK" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"dL" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/mine/abandoned) "dM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "dN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/hallway) "dO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/door/firedoor{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/research{name = "Spectrometry Lab"; req_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/spectro) @@ -215,7 +215,7 @@ "eg" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-pwall (NORTHEAST)"; icon_state = "pwall"; dir = 5},/area/space) "eh" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-pwall (NORTHWEST)"; icon_state = "pwall"; dir = 9},/area/space) "ei" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{tag = "icon-pwall (SOUTHEAST)"; icon_state = "pwall"; dir = 6},/area/space) -"ej" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"ej" = (/obj/item/weapon/shard,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "ek" = (/turf/simulated/wall,/area/mine/abandoned) "el" = (/obj/docking_port/stationary{dwidth = 3; height = 5; id = "science_away"; name = "research outpost dock"; width = 7},/turf/space,/area/space) "em" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) @@ -246,8 +246,8 @@ "eM" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/mineral,/area/mine/explored) "eN" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/research_outpost/atmos) "eO" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"eP" = (/obj/item/stack/rods,/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"eQ" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"eP" = (/obj/item/stack/rods,/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"eQ" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) "eR" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "eS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "eU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) @@ -276,8 +276,8 @@ "fr" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "fs" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space) "ft" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"fu" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"fv" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"fu" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"fv" = (/obj/structure/alien/weeds,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/mine/abandoned) "fw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "fx" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/research_outpost/hallway) "fy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/wood,/area/research_outpost/hallway) @@ -307,8 +307,8 @@ "fW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "fX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "fY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"fZ" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"ga" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"fZ" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"ga" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) "gb" = (/obj/structure/table,/obj/item/weapon/folder,/turf/simulated/floor/wood,/area/research_outpost/hallway) "gc" = (/obj/structure/table,/obj/item/device/camera,/obj/item/weapon/stamp/granted,/turf/simulated/floor/wood,/area/research_outpost/hallway) "gd" = (/turf/simulated/floor/wood,/area/research_outpost/hallway) @@ -330,9 +330,9 @@ "gt" = (/obj/item/weapon/shard,/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "gu" = (/turf/simulated/floor/plating/airless,/area/mine/abandoned) "gv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"gw" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"gx" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"gy" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless,/area/mine/abandoned) +"gw" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"gx" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"gy" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) "gz" = (/obj/structure/alien/weeds,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "gA" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "gB" = (/obj/machinery/light_switch{pixel_y = -23},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/research_outpost/hallway) @@ -358,12 +358,12 @@ "gV" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/research_outpost/power) "gW" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "gX" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"gY" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) -"gZ" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"ha" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"hb" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"gY" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) +"gZ" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"ha" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"hb" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) "hc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"hd" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"hd" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) "he" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/wall,/area/research_outpost/entry) "hf" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) "hg" = (/obj/machinery/door/airlock/external{id_tag = "mining_away"; name = "Mining Dock Airlock"; req_access_txt = "48"},/turf/simulated/floor/plating,/area/mine/lobby) @@ -392,8 +392,8 @@ "hD" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/hallway) "hE" = (/obj/structure/transit_tube{icon_state = "D-SW"},/turf/space,/area/space) "hF" = (/obj/item/weapon/shard,/obj/structure/lattice,/turf/space,/area/space) -"hG" = (/obj/effect/gibspawner/robot,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"hH" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"hG" = (/obj/effect/gibspawner/robot,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"hH" = (/obj/effect/gibspawner/human,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) "hI" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/effect/decal/remains/xeno,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "hJ" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) "hK" = (/obj/machinery/computer/shuttle/science,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/research_outpost/entry) @@ -437,10 +437,10 @@ "iw" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "ix" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "small"},/turf/space,/area/mine/abandoned) "iy" = (/obj/structure/lattice,/turf/space,/area/mine/abandoned) -"iz" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"iA" = (/obj/machinery/door/airlock,/turf/simulated/floor/airless,/area/mine/abandoned) -"iB" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"iC" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"iz" = (/obj/structure/alien/weeds,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"iA" = (/obj/machinery/door/airlock,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) +"iB" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/mine/abandoned) +"iC" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/mine/abandoned) "iD" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "N-SE"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) "iE" = (/obj/structure/transit_tube{icon_state = "D-SW"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/research_outpost/entry) "iF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/research_outpost/entry) @@ -482,13 +482,13 @@ "jp" = (/obj/machinery/artifact_harvester,/turf/simulated/floor/bluegrid,/area/research_outpost/harvesting) "jq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "jr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"js" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/mine/abandoned) -"jt" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"ju" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless,/area/mine/abandoned) -"jv" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) -"jw" = (/obj/structure/table,/turf/simulated/floor/airless,/area/mine/abandoned) -"jx" = (/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) -"jy" = (/obj/structure/rack,/turf/simulated/floor/airless,/area/mine/abandoned) +"js" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/mine/abandoned) +"jt" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"ju" = (/obj/structure/alien/weeds,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) +"jv" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) +"jw" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) +"jx" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"jy" = (/obj/structure/rack,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) "jz" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "D-NE"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) "jA" = (/obj/structure/transit_tube{icon_state = "S-NW"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/research_outpost/entry) "jB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel,/area/research_outpost/entry) @@ -528,10 +528,10 @@ "kj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/research_outpost/harvesting) "kk" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/research_outpost/harvesting) "kl" = (/obj/structure/table,/obj/item/weapon/anodevice{pixel_x = 3; pixel_y = 3},/obj/item/weapon/anodevice,/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/research_outpost/harvesting) -"km" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"kn" = (/obj/effect/decal/remains/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"ko" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"kp" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"km" = (/obj/structure/alien/weeds,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"kn" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/mine/abandoned) +"ko" = (/obj/structure/alien/weeds,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"kp" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/mine/abandoned) "kq" = (/obj/structure/transit_tube/station{icon_state = "closed"; dir = 4},/obj/structure/transit_tube_pod,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/research_outpost/entry) "kr" = (/obj/machinery/hologram/holopad,/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/research_outpost/entry) "ks" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/plasteel{dir = 2; icon_state = "arrival"},/area/research_outpost/entry) @@ -566,9 +566,9 @@ "kV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/research_outpost/harvesting) "kW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/research_outpost/harvesting) "kX" = (/obj/structure/table,/obj/item/weapon/anobattery{pixel_x = -6; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = -2; pixel_y = -2},/obj/item/weapon/anobattery{pixel_x = 2; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = 6; pixel_y = 6},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/research_outpost/harvesting) -"kY" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"kZ" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/mine/abandoned) -"la" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"kY" = (/obj/item/weapon/shard,/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"kZ" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) +"la" = (/obj/structure/alien/weeds,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) "lb" = (/turf/simulated/wall,/area/mine/unexplored) "lc" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'INTERNALS REQUIRED'."; name = "INTERNALS REQUIRED"; pixel_x = -32; pixel_y = 0},/turf/space,/area/space) "ld" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall,/area/research_outpost/entry) @@ -600,13 +600,13 @@ "lD" = (/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/camera{c_tag = "Research Outpost Exotic Particles Lab"; dir = 4; network = list("Research Outpost")},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/research_outpost/harvesting) "lE" = (/obj/machinery/alarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/research_outpost/harvesting) "lF" = (/obj/machinery/artifact_scanpad,/obj/machinery/light/small,/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor/bluegrid,/area/research_outpost/harvesting) -"lG" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/airless{icon_state = "dark"},/area/mine/abandoned) +"lG" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/plasteel/airless{icon_state = "dark"},/area/mine/abandoned) "lH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "lI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "lJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "lK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"lL" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless,/area/mine/abandoned) -"lM" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"lL" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) +"lM" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) "lN" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "lO" = (/obj/structure/transit_tube{tag = "icon-E-SW"; icon_state = "E-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "lP" = (/turf/simulated/wall,/area/research_outpost/gearstore) @@ -645,8 +645,8 @@ "mw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/research_outpost/longtermstorage) "mx" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet,/turf/simulated/floor/plasteel,/area/research_outpost/longtermstorage) "my" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/harvesting) -"mz" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless,/area/mine/abandoned) -"mA" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"mz" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) +"mA" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) "mB" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "mC" = (/obj/structure/transit_tube{tag = "icon-NE-SW"; icon_state = "NE-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "mD" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/turf/simulated/mineral,/area/mine/unexplored) @@ -680,9 +680,9 @@ "nf" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "ng" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/lattice,/turf/space,/area/space) "nh" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/space,/area/space) -"ni" = (/turf/simulated/floor/airless{dir = 8; icon_state = "green"},/area/mine/abandoned) -"nj" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"nk" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"ni" = (/turf/simulated/floor/plasteel/airless{dir = 8; icon_state = "green"},/area/mine/abandoned) +"nj" = (/obj/effect/gibspawner/human,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/mine/abandoned) +"nk" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "nl" = (/turf/simulated/wall,/area/mine/explored) "nm" = (/obj/structure/ore_box,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "nn" = (/obj/structure/transit_tube{tag = "icon-S-NE"; icon_state = "S-NE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) @@ -694,10 +694,10 @@ "nt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "nu" = (/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "nv" = (/obj/machinery/mineral/unloading_machine{input_dir = 1; output_dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/research_outpost/tempstorage) -"nw" = (/obj/machinery/conveyor_switch{id = "anotempload"},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/research_outpost/maint) -"nx" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/research_outpost/maint) -"ny" = (/obj/machinery/conveyor_switch{id = "anosample"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/research_outpost/maint) -"nz" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/research_outpost/maint) +"nw" = (/obj/machinery/conveyor_switch{id = "anotempload"},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/research_outpost/maint) +"nx" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/research_outpost/maint) +"ny" = (/obj/machinery/conveyor_switch{id = "anosample"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/research_outpost/maint) +"nz" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/research_outpost/maint) "nA" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plating,/area/research_outpost/maint) "nB" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plating,/area/research_outpost/maint) "nC" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/research_outpost/iso1) @@ -715,8 +715,8 @@ "nO" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "vault"},/area/research_outpost/longtermstorage) "nP" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"},/area/research_outpost/longtermstorage) "nQ" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"nR" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/xenos,/obj/item/clothing/head/xenos,/turf/simulated/floor/airless{dir = 8; icon_state = "green"},/area/mine/abandoned) -"nS" = (/obj/structure/alien/resin/wall,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"nR" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/xenos,/obj/item/clothing/head/xenos,/turf/simulated/floor/plasteel/airless{dir = 8; icon_state = "green"},/area/mine/abandoned) +"nS" = (/obj/structure/alien/resin/wall,/turf/simulated/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) "nT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "nU" = (/obj/structure/ore_box,/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "nV" = (/obj/structure/sign/xeno_warning_mining,/turf/simulated/wall,/area/mine/explored) @@ -744,12 +744,12 @@ "or" = (/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2) "os" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/longtermstorage) "ot" = (/obj/structure/transit_tube{tag = "icon-N-SW"; icon_state = "N-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"ou" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"ou" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) "ov" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/abandoned) -"ow" = (/obj/machinery/door/airlock/glass{name = "Glass Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) +"ow" = (/obj/machinery/door/airlock/glass{name = "Glass Airlock"; req_access_txt = "0"},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) "ox" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "oy" = (/obj/machinery/door/window/westleft,/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"oz" = (/obj/structure/transit_tube{tag = "icon-N-S"; icon_state = "N-S"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) +"oz" = (/obj/structure/transit_tube{tag = "icon-N-S"; icon_state = "N-S"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel/airless,/area/mine/explored) "oA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/mine/explored) "oB" = (/obj/machinery/suspension_gen,/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "oC" = (/obj/machinery/floodlight,/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) @@ -774,37 +774,37 @@ "oV" = (/turf/simulated/mineral/random/low_chance,/area/mine/explored) "oW" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/mineral/random/low_chance,/area/mine/explored) "oX" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"oY" = (/obj/effect/decal/remains/human,/turf/simulated/floor/airless,/area/mine/abandoned) -"oZ" = (/obj/item/weapon/table_parts,/turf/simulated/floor/airless,/area/mine/abandoned) -"pa" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) -"pb" = (/obj/structure/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) +"oY" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) +"oZ" = (/obj/item/weapon/table_parts,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) +"pa" = (/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) +"pb" = (/obj/structure/rack,/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) "pc" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "pd" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"pe" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-closed (EAST)"},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/airless,/area/mine/explored) +"pe" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-closed (EAST)"},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/plasteel/airless,/area/mine/explored) "pf" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space) "pg" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/gearstore) "ph" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "research_inner"; locked = 1; name = "Research Outpost External Access"; req_access = null; req_access_txt = null},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "pi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/mine/explored) "pj" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2) "pk" = (/obj/structure/transit_tube{tag = "icon-W-NE"; icon_state = "W-NE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"pl" = (/obj/item/weapon/rack_parts,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) +"pl" = (/obj/item/weapon/rack_parts,/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) "pm" = (/obj/structure/girder/displaced,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/abandoned) "pn" = (/obj/machinery/door/window/westleft,/obj/machinery/light/small,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"po" = (/obj/structure/transit_tube{tag = "icon-N-SE"; icon_state = "N-SE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) +"po" = (/obj/structure/transit_tube{tag = "icon-N-SE"; icon_state = "N-SE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel/airless,/area/mine/explored) "pp" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/obj/structure/lattice,/turf/space,/area/mine/explored) "pq" = (/obj/structure/lattice,/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/space,/area/mine/explored) "pr" = (/obj/structure/lattice,/obj/structure/transit_tube{tag = "icon-E-SW"; icon_state = "E-SW"},/turf/space,/area/mine/explored) "ps" = (/obj/structure/lattice,/obj/structure/transit_tube,/turf/space,/area/mine/explored) -"pt" = (/obj/structure/transit_tube,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) -"pu" = (/obj/structure/transit_tube/station{dir = 2; icon_state = "closed"; tag = "icon-closed (EAST)"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/airless,/area/mine/explored) -"pv" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) +"pt" = (/obj/structure/transit_tube,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel/airless,/area/mine/explored) +"pu" = (/obj/structure/transit_tube/station{dir = 2; icon_state = "closed"; tag = "icon-closed (EAST)"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/plasteel/airless,/area/mine/explored) +"pv" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) "pw" = (/turf/simulated/floor/mech_bay_recharge_floor/airless,/area/research_outpost/gearstore) -"px" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) +"px" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) "py" = (/obj/machinery/light/small{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "research_pump"; tag_exterior_door = "research_outer"; frequency = 1379; id_tag = "research_airlock"; tag_interior_door = "research_inner"; pixel_x = -25; pixel_y = 0; req_access_txt = null; tag_chamber_sensor = "research_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "pz" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "pA" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "pB" = (/obj/machinery/door/window/westleft,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"pC" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-opening (EAST)"},/obj/structure/transit_tube_pod,/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/airless,/area/mine/explored) +"pC" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-opening (EAST)"},/obj/structure/transit_tube_pod,/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/plasteel/airless,/area/mine/explored) "pD" = (/turf/simulated/wall/r_wall,/area/mine/explored) "pE" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/mineral,/area/mine/explored) "pF" = (/obj/structure/transit_tube{tag = "icon-NE-SW"; icon_state = "NE-SW"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) @@ -826,42 +826,42 @@ "pV" = (/obj/structure/ore_box,/obj/machinery/camera{c_tag = "Research Outpost External Airlock"; dir = 8; network = list("Research Outpost")},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/research_outpost/gearstore) "pW" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/turf/simulated/wall/r_wall,/area/mine/explored) "pX" = (/obj/effect/glowshroom,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"pY" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) -"pZ" = (/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) -"qa" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "65"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) -"qb" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/mine/explored) +"pY" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"pZ" = (/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"qa" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "65"},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) +"qb" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/airless,/area/mine/explored) "qc" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "research_outer"; locked = 1; name = "Research Outpost External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/research_outpost/gearstore) "qd" = (/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/explored) "qe" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = -32},/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"qf" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) +"qf" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel/airless,/area/mine/explored) "qg" = (/obj/structure/transit_tube{tag = "icon-E-NW"; icon_state = "E-NW"},/turf/simulated/wall/r_wall,/area/mine/explored) "qh" = (/obj/structure/transit_tube,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "qi" = (/obj/structure/transit_tube,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"qj" = (/obj/structure/transit_tube/station,/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/airless,/area/mine/explored) -"qk" = (/obj/structure/transit_tube{tag = "icon-W-NE"; icon_state = "W-NE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) -"ql" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) +"qj" = (/obj/structure/transit_tube/station,/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/plasteel/airless,/area/mine/explored) +"qk" = (/obj/structure/transit_tube{tag = "icon-W-NE"; icon_state = "W-NE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel/airless,/area/mine/explored) +"ql" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "0"},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) "qm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "qn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/explored) "qo" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored) -"qp" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (SOUTHWEST)"; icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) -"qq" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "research_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = null},/turf/simulated/floor/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) -"qr" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (SOUTHEAST)"; icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) -"qs" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTHWEST)"; icon_state = "asteroidwarning"; dir = 9},/area/mine/explored) -"qt" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"qu" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTHEAST)"; icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) +"qp" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (SOUTHWEST)"; icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) +"qq" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "research_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = null},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"qr" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (SOUTHEAST)"; icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) +"qs" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTHWEST)"; icon_state = "asteroidwarning"; dir = 9},/area/mine/explored) +"qt" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"qu" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTHEAST)"; icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) "qv" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = -32; pixel_y = -32},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "qw" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) "qx" = (/obj/machinery/door/window/westleft{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"qy" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"qy" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) "qz" = (/obj/effect/glowshroom,/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"qA" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) -"qB" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) +"qA" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) +"qB" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) "qC" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) "qD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/stack/rods,/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/abandoned) "qE" = (/obj/machinery/light_construct/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"qF" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (SOUTHWEST)"; icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored) -"qG" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/unexplored) -"qH" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (SOUTHEAST)"; icon_state = "asteroidwarning"; dir = 6},/area/mine/unexplored) +"qF" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (SOUTHWEST)"; icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored) +"qG" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/unexplored) +"qH" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (SOUTHEAST)"; icon_state = "asteroidwarning"; dir = 6},/area/mine/unexplored) "qI" = (/turf/simulated/mineral/random/labormineral,/area/mine/unexplored) "qJ" = (/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/unexplored) "qK" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) @@ -925,7 +925,7 @@ "rQ" = (/obj/machinery/conveyor_switch/oneway{id = "gulag"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) "rR" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "asteroidwarning"; tag = "icon-asteroidwarning"},/area/mine/laborcamp) "rS" = (/turf/simulated/floor/plasteel{icon_state = "asteroidwarning"; tag = "icon-asteroidwarning"},/area/mine/laborcamp) -"rT" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTHWEST)"; icon_state = "asteroidwarning"; dir = 9},/area/mine/explored) +"rT" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTHWEST)"; icon_state = "asteroidwarning"; dir = 9},/area/mine/explored) "rU" = (/obj/machinery/light_switch{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) "rV" = (/obj/machinery/camera{c_tag = "Labor Camp Central"; network = list("Labor")},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) "rW" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) @@ -1029,8 +1029,8 @@ "tQ" = (/turf/simulated/mineral/random/low_chance,/area/mine/unexplored) "tR" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) "tS" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"tT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (WEST)"; icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) -"tU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (EAST)"; icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) +"tT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (WEST)"; icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) +"tU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (EAST)"; icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) "tV" = (/turf/space,/area/mine/unexplored) "tW" = (/turf/simulated/mineral/random,/area/mine/north_outpost) "tX" = (/turf/simulated/mineral/random/high_chance,/area/mine/north_outpost) @@ -1041,17 +1041,17 @@ "uc" = (/obj/structure/lattice,/turf/space,/area/mine/north_outpost) "ud" = (/turf/space,/area/mine/north_outpost) "ue" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"uf" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "54"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/west_outpost) +"uf" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "54"},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/west_outpost) "ug" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored) -"uh" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/mine/explored) +"uh" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless,/area/mine/explored) "ui" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 1},/turf/space,/area/mine/explored) "uj" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/mine/explored) "uk" = (/obj/structure/lattice,/obj/structure/window/reinforced,/turf/space,/area/mine/explored) "ul" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored) "um" = (/turf/simulated/wall/r_wall,/area/mine/maintenance) -"un" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/mine/explored) -"uo" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/mine/explored) -"up" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/mine/explored) +"un" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless,/area/mine/explored) +"uo" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/airless,/area/mine/explored) +"up" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel/airless,/area/mine/explored) "uq" = (/turf/simulated/floor/bluegrid,/area/mine/maintenance) "ur" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Mining Communications APC"; pixel_x = 1; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/mine/maintenance) "us" = (/obj/machinery/telecomms/relay/preset/mining,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/mine/maintenance) @@ -1069,7 +1069,7 @@ "uE" = (/turf/simulated/wall,/area/mine/living_quarters) "uF" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/maintenance{name = "Mining Station Communications"; req_access_txt = "48"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/mine/maintenance) "uG" = (/obj/item/clothing/under/rank/miner,/obj/effect/decal/remains/human,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"uH" = (/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) +"uH" = (/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) "uI" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/carpet,/area/mine/living_quarters) "uJ" = (/obj/machinery/light/small{dir = 4},/obj/machinery/door_control{id = "miningdorm1"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet,/area/mine/living_quarters) "uK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/living_quarters) @@ -1087,17 +1087,17 @@ "uW" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "uX" = (/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/west_outpost) "uY" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock"},/obj/machinery/door/airlock{id_tag = "miningdorm2"; name = "Room 2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/mine/living_quarters) -"uZ" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored) -"va" = (/obj/machinery/camera{c_tag = "Mining Outpost Construction Area"; network = list("Mining Outpost")},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"vb" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"vc" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) -"vd" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/west_outpost) +"uZ" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored) +"va" = (/obj/machinery/camera{c_tag = "Mining Outpost Construction Area"; network = list("Mining Outpost")},/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"vb" = (/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"vc" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) +"vd" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/west_outpost) "ve" = (/obj/machinery/camera{c_tag = "Mining Outpost West Outpost Mech Recharge Station"; dir = 1; network = list("Mining Outpost")},/turf/simulated/floor/mech_bay_recharge_floor/airless,/area/mine/west_outpost) -"vf" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/west_outpost) +"vf" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/west_outpost) "vg" = (/obj/structure/disposalpipe/segment,/obj/structure/sign/deathsposal,/turf/simulated/wall,/area/mine/living_quarters) -"vh" = (/obj/structure/table/reinforced,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) -"vi" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) -"vj" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) +"vh" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) +"vi" = (/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored) +"vj" = (/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) "vk" = (/turf/simulated/wall,/area/mine/west_outpost) "vl" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/mine/west_outpost) "vm" = (/obj/structure/sign/xeno_warning_mining,/turf/simulated/wall,/area/mine/west_outpost) @@ -1106,9 +1106,9 @@ "vp" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) "vq" = (/obj/machinery/light/small{dir = 4},/obj/machinery/door_control{id = "miningdorm3"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet,/area/mine/living_quarters) "vr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/mine/living_quarters) -"vs" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) -"vt" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) -"vu" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) +"vs" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) +"vt" = (/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"vu" = (/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) "vv" = (/obj/structure/table,/obj/item/weapon/pickaxe,/turf/simulated/floor/plasteel,/area/mine/west_outpost) "vw" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel,/area/mine/west_outpost) "vx" = (/obj/structure/table,/obj/machinery/microwave,/obj/machinery/light_switch{pixel_y = 23},/turf/simulated/floor/plasteel,/area/mine/west_outpost) @@ -1140,7 +1140,7 @@ "vX" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "outpost_west_inner"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = null},/turf/simulated/floor/plasteel,/area/mine/west_outpost) "vY" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/west_outpost) "vZ" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "outpost_west_outer"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/mine/west_outpost) -"wa" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "outpost_west_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = null},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (EAST)"; icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) +"wa" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "outpost_west_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = null},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (EAST)"; icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) "wb" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) "wc" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) "wd" = (/obj/structure/table,/obj/item/toy/cards/deck,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) @@ -1232,7 +1232,7 @@ "xL" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/plasteel,/area/mine/eva) "xM" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/eva) "xN" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_east_outer"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = null},/turf/simulated/floor/plating,/area/mine/eva) -"xO" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_east_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = null},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (EAST)"; icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) +"xO" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_east_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = null},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (EAST)"; icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) "xP" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/wall,/area/mine/west_outpost) "xQ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall,/area/mine/west_outpost) "xR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/firedoor{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/maintenance{name = "Mining Station Maintenance"; req_access_txt = "54"},/turf/simulated/floor/plating,/area/mine/west_outpost) @@ -1264,8 +1264,8 @@ "yr" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/mine/west_outpost) "ys" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/mine/west_outpost) "yt" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/item/weapon/storage/box/lights/bulbs,/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/light_switch{pixel_x = 6; pixel_y = 23},/turf/simulated/floor/plating,/area/mine/west_outpost) -"yu" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"yv" = (/obj/machinery/conveyor_switch{id = "mining_west"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"yu" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"yv" = (/obj/machinery/conveyor_switch{id = "mining_west"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) "yw" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/mine/living_quarters) "yx" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/mine/living_quarters) "yy" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor/plasteel,/area/mine/living_quarters) @@ -1305,7 +1305,7 @@ "zg" = (/obj/machinery/mech_bay_recharge_port,/turf/simulated/floor/plating,/area/mine/production) "zh" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/mine/production{name = "Mining Station Mech Bay"}) "zi" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/plasteel,/area/mine/production{name = "Mining Station Mech Bay"}) -"zj" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) +"zj" = (/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) "zk" = (/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) "zl" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) "zm" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) @@ -1327,7 +1327,7 @@ "zC" = (/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production{name = "Mining Station Mech Bay"}) "zD" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/mine/production{name = "Mining Station Mech Bay"}) "zE" = (/obj/structure/plasticflaps/mining,/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/mine/production{name = "Mining Station Mech Bay"}) -"zF" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) +"zF" = (/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) "zG" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/mine/living_quarters) "zH" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/mine/living_quarters) "zI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/camera{c_tag = "Mining Outpost Sleeper Room"; dir = 1; network = list("Mining Outpost")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) @@ -1359,8 +1359,8 @@ "Ai" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light,/turf/simulated/floor/plasteel,/area/mine/production{name = "Mining Station Mech Bay"}) "Aj" = (/obj/structure/ore_box,/obj/machinery/camera{c_tag = "Mining Outpost Mech Bay"; dir = 1; network = list("Mining Outpost")},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/mine/production{name = "Mining Station Mech Bay"}) "Ak" = (/obj/machinery/mech_bay_recharge_port,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/mine/production{name = "Mining Station Mech Bay"}) -"Al" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_west_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = null},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) -"Am" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (EAST)"; icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) +"Al" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_west_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = null},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) +"Am" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (EAST)"; icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) "An" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "Ao" = (/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/mine/lobby) "Ap" = (/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/mine/lobby) @@ -1370,9 +1370,9 @@ "At" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel,/area/mine/lobby) "Au" = (/turf/simulated/wall,/area/mine/living_quarters{name = "Mining Station Break Room"}) "Av" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/mine/living_quarters{name = "Mining Station Break Room"}) -"Aw" = (/obj/machinery/power/apc{dir = 1; name = "Mining Station External APC"; pixel_x = 1; pixel_y = 25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) -"Ax" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) -"Ay" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"Aw" = (/obj/machinery/power/apc{dir = 1; name = "Mining Station External APC"; pixel_x = 1; pixel_y = 25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"Ax" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"Ay" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) "AC" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/lobby) "AD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Mining Shuttle Airlock"; dir = 8; network = list("Mining Outpost")},/turf/simulated/floor/plasteel,/area/mine/lobby) "AE" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index 852505c45aa..cf437b3baff 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -1,6 +1,6 @@ "aa" = (/turf/space,/area/space) "ab" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/space) -"ac" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars) +"ac" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/djstation/solars) "ad" = (/turf/simulated/floor/plating/airless,/area/djstation/solars) "ae" = (/obj/structure/lattice,/turf/space,/area/space) "af" = (/turf/simulated/wall,/area/djstation) @@ -23,7 +23,7 @@ "aw" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/djstation) "ax" = (/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/djstation) "ay" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/media/jukebox/dj,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/djstation) -"az" = (/turf/simulated/floor/airless,/area/space) +"az" = (/turf/simulated/floor/plasteel/airless,/area/space) "aA" = (/turf/simulated/wall/r_wall,/area/space) "aB" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/djstation) "aC" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/djstation) @@ -80,9 +80,9 @@ "bB" = (/turf/simulated/wall,/area/space) "bC" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1479; master_tag = "dj_station_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "0"},/turf/space,/area/space) "bD" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/solar_control) -"bE" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/airless,/area/solar/derelict_starboard) +"bE" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plasteel/airless,/area/solar/derelict_starboard) "bF" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/solar/derelict_starboard) -"bG" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/airless,/area/solar/derelict_starboard) +"bG" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plasteel/airless,/area/solar/derelict_starboard) "bH" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc/noalarm{dir = 1; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Starboard Solar APC"; pixel_y = 24},/turf/simulated/floor/plasteel,/area/derelict/solar_control) "bI" = (/obj/machinery/power/smes,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel,/area/derelict/solar_control) "bJ" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/turf/simulated/floor/plasteel,/area/derelict/solar_control) @@ -134,7 +134,7 @@ "cF" = (/obj/machinery/door/airlock/command{name = "E.V.A."; req_access = null; req_access_txt = "18"},/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "cG" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "cH" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plating/airless,/area/space) -"cI" = (/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) +"cI" = (/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) "cJ" = (/obj/item/stack/cable_coil/cut,/turf/space,/area/space) "cK" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "cL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/derelict/bridge/access) @@ -148,7 +148,7 @@ "cT" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/derelict/singularity_engine) "cU" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/derelict/singularity_engine) "cV" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"cW" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"cW" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) "cX" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS"},/turf/simulated/wall/r_wall,/area/derelict/singularity_engine) "cY" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "cZ" = (/obj/structure/computerframe,/turf/simulated/floor/plasteel,/area/derelict/bridge) @@ -159,23 +159,23 @@ "de" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/derelict/bridge) "df" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor/plasteel,/area/derelict/bridge) "dg" = (/obj/item/weapon/grenade/empgrenade,/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/bridge) -"dh" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"di" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"dj" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"dk" = (/obj/item/stack/cable_coil/cut,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"dh" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"di" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"dj" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"dk" = (/obj/item/stack/cable_coil/cut,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) "dl" = (/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "dm" = (/turf/simulated/wall,/area/derelict/singularity_engine) "dn" = (/turf/simulated/floor/plasteel,/area/derelict/bridge) "do" = (/turf/simulated/floor/plating,/area/derelict/bridge) "dp" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/plasteel,/area/derelict/bridge) "dq" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/bridge) -"dr" = (/obj/structure/window/reinforced,/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"ds" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"dt" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"du" = (/obj/structure/window/reinforced,/obj/item/weapon/table_parts/reinforced,/obj/item/weapon/table_parts/reinforced,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"dv" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"dr" = (/obj/structure/window/reinforced,/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"ds" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"dt" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"du" = (/obj/structure/window/reinforced,/obj/item/weapon/table_parts/reinforced,/obj/item/weapon/table_parts/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"dv" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) "dw" = (/obj/item/weapon/disk/data/demo,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"dx" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"dx" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "dy" = (/obj/machinery/power/emitter{dir = 1; icon_state = "emitter"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "dz" = (/obj/machinery/field/generator,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "dA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/derelict/bridge/access) @@ -186,15 +186,15 @@ "dF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "dG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "dH" = (/obj/structure/noticeboard{pixel_y = 28},/turf/simulated/wall,/area/derelict/singularity_engine) -"dI" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"dI" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "dJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "dK" = (/obj/machinery/door/window/eastleft{name = "Heads of Staff"; req_access_txt = "19"},/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "dL" = (/obj/machinery/bot/secbot/buzzsky,/turf/simulated/floor/plasteel,/area/derelict/bridge) "dM" = (/obj/structure/table,/obj/item/device/paicard,/turf/simulated/floor/plasteel,/area/derelict/bridge) "dN" = (/obj/structure/stool,/turf/simulated/floor/plasteel,/area/derelict/bridge) "dO" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/bridge) -"dP" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"dQ" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"dP" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"dQ" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) "dR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "dS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "dT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/derelict/bridge/access) @@ -202,17 +202,17 @@ "dV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/bridge) "dW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/bridge) "dX" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/bridge) -"dY" = (/obj/item/weapon/paper/russiannuclearoperativeobj,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"dY" = (/obj/item/weapon/paper/russiannuclearoperativeobj,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "dZ" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/derelict/bridge/access) "ea" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/bridge) "eb" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/derelict/bridge) "ec" = (/obj/structure/table,/obj/item/weapon/screwdriver,/turf/simulated/floor/plasteel,/area/derelict/bridge) "ed" = (/obj/item/stack/rods,/turf/space,/area/space) "ee" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"ef" = (/obj/item/weapon/shard,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"ef" = (/obj/item/weapon/shard,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "eg" = (/obj/item/clothing/suit/space/syndicate/black/engie,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "eh" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"ei" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"ei" = (/obj/item/weapon/shard,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) "ej" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "ek" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "el" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) @@ -221,7 +221,7 @@ "eo" = (/obj/structure/window/basic,/turf/simulated/floor/plasteel,/area/derelict/bridge) "ep" = (/obj/structure/table,/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel,/area/derelict/bridge) "eq" = (/obj/structure/table,/obj/machinery/light/small,/turf/simulated/floor/plasteel,/area/derelict/bridge) -"er" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"er" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "es" = (/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "et" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "eu" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) @@ -230,77 +230,77 @@ "ex" = (/turf/simulated/wall/r_wall,/area/derelict/bridge) "ey" = (/obj/machinery/door/window{dir = 2; name = "Captain's Quarters"; req_access_txt = "20"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/derelict/bridge) "ez" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"eA" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"eA" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "eB" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "eC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"eD" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"eE" = (/turf/simulated/floor/airless,/area/derelict/bridge/access) -"eF" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/floor/airless,/area/derelict/bridge/access) -"eG" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/derelict/bridge/access) -"eH" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor/airless,/area/derelict/bridge/access) -"eI" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/airless,/area/derelict/bridge/access) -"eJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/derelict/bridge/access) +"eD" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"eE" = (/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"eF" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"eG" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"eH" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"eI" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"eJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) "eK" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/space) -"eL" = (/turf/simulated/floor/airless{icon_state = "circuit"},/area/derelict/singularity_engine) +"eL" = (/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/derelict/singularity_engine) "eM" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"eN" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless,/area/derelict/bridge/access) -"eO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/derelict/bridge/access) +"eN" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"eO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) "eP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/derelict/bridge/access) -"eQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/airless,/area/derelict/bridge/access) -"eR" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless,/area/derelict/bridge/access) -"eS" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"eT" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"eU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"eV" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"eW" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "circuit"},/area/derelict/singularity_engine) -"eX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless,/area/derelict/bridge/access) +"eQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"eR" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"eS" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"eT" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"eU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"eV" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"eW" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/derelict/singularity_engine) +"eX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) "eY" = (/turf/simulated/floor/plating/airless,/area/derelict/bridge/access) -"eZ" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"eZ" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "fa" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"fb" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"fc" = (/obj/structure/grille,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"fd" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"fe" = (/obj/machinery/door/airlock/maintenance{name = "Tech Storage"; req_access_txt = "23"},/turf/simulated/floor/airless,/area/derelict/bridge/access) +"fb" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"fc" = (/obj/structure/grille,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"fd" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"fe" = (/obj/machinery/door/airlock/maintenance{name = "Tech Storage"; req_access_txt = "23"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) "ff" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/derelict/bridge/access) -"fg" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/airless,/area/derelict/bridge/access) -"fh" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"fg" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"fh" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) "fi" = (/obj/item/weapon/screwdriver,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"fj" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"fj" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "fk" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"fl" = (/obj/structure/table,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"fl" = (/obj/structure/table,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "fm" = (/turf/simulated/wall,/area/derelict/hallway/primary) -"fn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) -"fo" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) -"fp" = (/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"fq" = (/obj/item/weapon/table_parts/reinforced,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"fn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) +"fo" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"fp" = (/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"fq" = (/obj/item/weapon/table_parts/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "fr" = (/obj/item/weapon/ore/slag,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "fs" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "ft" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "fu" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/primary) "fv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) -"fw" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) -"fx" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"fy" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"fw" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) +"fx" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"fy" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "fz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "fA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "fB" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) "fC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) -"fD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) -"fE" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/derelict/hallway/primary) -"fF" = (/obj/machinery/light/small,/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"fD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) +"fE" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/derelict/hallway/primary) +"fF" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "fG" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating/airless,/area/space) -"fH" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/space) -"fI" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/space) +"fH" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/space) +"fI" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/space) "fJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "fK" = (/obj/machinery/door/window{dir = 2},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) -"fL" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/space) -"fM" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"fL" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/space) +"fM" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "fN" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"fO" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"fO" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) "fP" = (/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) -"fQ" = (/obj/item/weapon/crowbar,/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"fR" = (/obj/structure/grille,/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"fS" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/space) +"fQ" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"fR" = (/obj/structure/grille,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"fS" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/space) "fT" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "fU" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "fV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) @@ -309,7 +309,7 @@ "fY" = (/turf/simulated/wall,/area/derelict/arrival) "fZ" = (/obj/item/weapon/circuitboard/white_ship,/turf/space,/area/space) "ga" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"gb" = (/obj/machinery/light/small,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"gb" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) "gc" = (/obj/structure/window/basic{dir = 5},/turf/space,/area/space) "gd" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/derelict/arrival) "ge" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/derelict/arrival) @@ -320,11 +320,11 @@ "gj" = (/turf/simulated/wall,/area/derelict/medical/chapel) "gk" = (/obj/item/weapon/shard,/turf/space,/area/space) "gl" = (/obj/structure/grille,/turf/space,/area/derelict/singularity_engine) -"gm" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"gm" = (/obj/item/weapon/shard,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "gn" = (/obj/structure/lattice,/obj/structure/window/basic,/turf/space,/area/space) -"go" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/derelict/arrival) +"go" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/derelict/arrival) "gp" = (/turf/simulated/floor/plating/airless,/area/derelict/arrival) -"gq" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/arrival) +"gq" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/arrival) "gr" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) "gs" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) "gt" = (/obj/structure/closet/coffin,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) @@ -335,53 +335,53 @@ "gy" = (/turf/simulated/floor/plating/airless,/area/derelict/medical) "gz" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/derelict/medical) "gA" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/turf/simulated/floor/plating/airless,/area/space) -"gB" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/hallway/primary) +"gB" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/hallway/primary) "gC" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/plasteel,/area/derelict/arrival) -"gD" = (/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"gE" = (/obj/item/weapon/firstaid_arm_assembly,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"gF" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/medical) -"gG" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/medical) +"gD" = (/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"gE" = (/obj/item/weapon/firstaid_arm_assembly,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"gF" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) +"gG" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) "gH" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/medical) -"gI" = (/obj/machinery/light/small,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"gI" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) "gJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) "gK" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) "gL" = (/obj/structure/lattice,/obj/structure/window/basic{dir = 1},/turf/space,/area/space) "gM" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window/basic{dir = 1},/turf/space,/area/space) "gN" = (/turf/simulated/floor/plating,/area/derelict/arrival) "gO" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"gP" = (/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"gQ" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/space) +"gP" = (/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"gQ" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/space) "gR" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/arrival) "gS" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/arrival) "gT" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) "gU" = (/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"gV" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/space) +"gV" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/space) "gW" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel,/area/derelict/arrival) "gX" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/arrival) "gY" = (/obj/machinery/door/morgue{name = "coffin storage"; req_access_txt = "22"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) "gZ" = (/obj/structure/morgue,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"ha" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) +"ha" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "hb" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/space) -"hc" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless{icon_state = "white"},/area/space) -"hd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"hc" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/space) +"hd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) "he" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/arrival) "hf" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) "hg" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) "hh" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) "hi" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"hj" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"hk" = (/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/medical) -"hl" = (/obj/item/stack/medical/ointment,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/medical) +"hj" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"hk" = (/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) +"hl" = (/obj/item/stack/medical/ointment,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) "hm" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/medical) "hn" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/space) "ho" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space) "hp" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel) "hq" = (/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) "hr" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel) -"hs" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"ht" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) +"hs" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"ht" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "hu" = (/obj/machinery/door/airlock/glass{name = "Med-Sci"; req_access_txt = "9"},/turf/simulated/floor/plating/airless,/area/derelict/medical) -"hv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"hv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "hw" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/derelict/arrival) "hx" = (/obj/structure/window/reinforced,/turf/space,/area/space) "hy" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/space) @@ -390,32 +390,32 @@ "hB" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) "hC" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/wall,/area/derelict/medical/chapel) "hD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/wall,/area/derelict/medical/chapel) -"hE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"hF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"hG" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"hH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"hI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/medical) -"hJ" = (/obj/structure/closet/wardrobe/genetics_white,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) +"hE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"hF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"hG" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"hH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"hI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) +"hJ" = (/obj/structure/closet/wardrobe/genetics_white,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "hK" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/space) "hL" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/space) "hM" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/space) -"hN" = (/turf/simulated/floor/airless{icon_state = "white"},/area/space) -"hO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"hP" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"hN" = (/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/space) +"hO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"hP" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "hQ" = (/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/derelict/arrival) "hR" = (/obj/machinery/door/poddoor{id_tag = "derelict_gun"; name = "Derelict Mass Driver"},/turf/simulated/floor/plating,/area/derelict/medical/chapel) "hS" = (/turf/simulated/floor/plating,/area/derelict/medical/chapel) "hT" = (/obj/machinery/mass_driver{dir = 8; icon_state = "mass_driver"; id_tag = "derelict_gun"},/obj/machinery/door/window{dir = 4; req_access_txt = "25"},/obj/structure/closet/coffin,/turf/simulated/floor/plating,/area/derelict/medical/chapel) -"hU" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/airless,/area/derelict/medical/chapel) -"hV" = (/turf/simulated/floor/airless,/area/derelict/medical/chapel) -"hW" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/derelict/medical/chapel) -"hX" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/medical/chapel) -"hY" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"hZ" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"ia" = (/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"ib" = (/obj/item/stack/medical/ointment,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"ic" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"id" = (/obj/structure/closet/l3closet/general,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) +"hU" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel) +"hV" = (/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel) +"hW" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel) +"hX" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel) +"hY" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"hZ" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"ia" = (/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"ib" = (/obj/item/stack/medical/ointment,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"ic" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"id" = (/obj/structure/closet/l3closet/general,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "ie" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space) "if" = (/obj/structure/window/basic,/turf/space,/area/space) "ig" = (/obj/structure/window/basic{dir = 8},/turf/space,/area/space) @@ -427,33 +427,33 @@ "im" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) "in" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) "io" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"ip" = (/obj/machinery/door/window{dir = 2},/turf/simulated/floor/airless,/area/derelict/medical/chapel) -"iq" = (/obj/machinery/door/window/southleft,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"ir" = (/obj/machinery/door/window/southright,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical) -"is" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"it" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"iu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) -"iv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"ip" = (/obj/machinery/door/window{dir = 2},/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel) +"iq" = (/obj/machinery/door/window/southleft,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"ir" = (/obj/machinery/door/window/southright,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"is" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"it" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"iu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"iv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "iw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "ix" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "iy" = (/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/space,/area/space) "iz" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/simulated/floor/plating,/area/derelict/arrival) -"iA" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"iB" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless,/area/space) -"iC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/airless,/area/space) -"iD" = (/obj/structure/window/basic{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/airless,/area/space) +"iA" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"iB" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/space) +"iC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/space) +"iD" = (/obj/structure/window/basic{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/space) "iE" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) -"iF" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/airless,/area/space) +"iF" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/space) "iG" = (/obj/structure/window/basic,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) -"iH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/airless,/area/derelict/arrival) +"iH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/plasteel/airless,/area/derelict/arrival) "iI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/arrival) "iJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plating,/area/derelict/arrival) "iK" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/arrival) "iL" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) -"iM" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"iN" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"iO" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"iP" = (/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"iM" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"iN" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"iO" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"iP" = (/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "iQ" = (/obj/structure/window/basic{dir = 1},/turf/space,/area/space) "iR" = (/obj/structure/window/basic{dir = 5},/turf/simulated/floor/plating/airless,/area/space) "iS" = (/obj/structure/grille,/obj/structure/window/basic{dir = 1},/turf/space,/area/space) @@ -461,51 +461,51 @@ "iU" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel,/area/derelict/arrival) "iV" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel,/area/derelict/arrival) "iW" = (/obj/structure/table,/obj/machinery/computer/pod/old{name = "ProComp IIe"; pixel_y = 7; id_tags = list("derelict_gun")},/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) -"iX" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"iY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"iZ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"ja" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"iX" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"iY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"iZ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"ja" = (/obj/structure/girder,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "jb" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel,/area/derelict/arrival) -"jc" = (/obj/machinery/door/window{dir = 2},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"jd" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"je" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"jf" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"jc" = (/obj/machinery/door/window{dir = 2},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"jd" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"je" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"jf" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "jg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/wall/r_wall,/area/derelict/hallway/primary) "jh" = (/obj/machinery/door/airlock/security{name = "Gas Storage"; req_access = null; req_access_txt = "3"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) "ji" = (/obj/structure/lattice,/obj/structure/window/basic{dir = 4},/turf/space,/area/space) "jj" = (/obj/structure/girder,/obj/structure/window/basic,/turf/simulated/floor/plating/airless,/area/derelict/arrival) -"jk" = (/obj/structure/stool/bed,/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"jk" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "jl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) "jm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) "jn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) -"jo" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"jo" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "jp" = (/obj/item/weapon/cigbutt,/turf/space,/area/space) "jq" = (/obj/structure/window/basic{dir = 1},/turf/simulated/floor/plating,/area/derelict/arrival) "jr" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/derelict/arrival) -"js" = (/obj/structure/table,/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"jt" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"ju" = (/obj/machinery/vending/sovietsoda,/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"jv" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/airless,/area/derelict/hallway/primary) -"jw" = (/obj/structure/table,/turf/simulated/floor/airless,/area/space) -"jx" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/space) -"jy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/space) +"js" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"jt" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"ju" = (/obj/machinery/vending/sovietsoda,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"jv" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) +"jw" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless,/area/space) +"jx" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless,/area/space) +"jy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/space) "jz" = (/obj/structure/lattice,/obj/item/stack/cable_coil/cut,/turf/space,/area/space) "jA" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/derelict/arrival) -"jB" = (/obj/structure/stool,/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"jB" = (/obj/structure/stool,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "jC" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) -"jD" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/airless,/area/space) +"jD" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/plasteel/airless,/area/space) "jE" = (/obj/structure/window/basic{dir = 4},/turf/space,/area/space) "jF" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/derelict/arrival) "jG" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor/plasteel,/area/derelict/arrival) -"jH" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) -"jI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/space) -"jJ" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/space) +"jH" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) +"jI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless,/area/space) +"jJ" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless,/area/space) "jK" = (/obj/structure/grille,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space) -"jL" = (/obj/structure/stool/bed,/turf/simulated/floor/airless,/area/space) +"jL" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/airless,/area/space) "jM" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/derelict/arrival) -"jN" = (/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/derelict/hallway/primary) -"jO" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/hallway/primary) -"jP" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/simulated/floor/airless,/area/derelict/hallway/primary) +"jN" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorgrime"},/area/derelict/hallway/primary) +"jO" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/hallway/primary) +"jP" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "jQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space) "jR" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/floor/plasteel,/area/derelict/arrival) "jS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space) @@ -523,78 +523,78 @@ "ke" = (/obj/structure/grille,/obj/item/weapon/shard,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/space) "kf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating/airless,/area/space) "kg" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) -"kh" = (/obj/item/stack/rods,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) +"kh" = (/obj/item/stack/rods,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) "ki" = (/obj/item/weapon/shard{icon_state = "small"},/turf/space,/area/space) -"kj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/wirecutters,/turf/simulated/floor/airless,/area/derelict/hallway/secondary) +"kj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/wirecutters,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) "kk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) -"kl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) +"kl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) "km" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary) -"kn" = (/turf/simulated/floor/airless,/area/derelict/hallway/secondary) -"ko" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) +"kn" = (/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) +"ko" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) "kp" = (/obj/machinery/door/airlock/maintenance{name = "Aux Storage"; req_access_txt = "23"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kq" = (/obj/structure/falsewall,/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) -"kr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) +"kr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) "ks" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kt" = (/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) -"ku" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) -"kv" = (/turf/simulated/floor/airless{icon_state = "derelict9"},/area/derelict/hallway/secondary) -"kw" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "derelict10"},/area/derelict/hallway/secondary) -"kx" = (/turf/simulated/floor/airless{icon_state = "derelict11"},/area/derelict/hallway/secondary) -"ky" = (/turf/simulated/floor/airless{icon_state = "derelict12"},/area/derelict/hallway/secondary) -"kz" = (/turf/simulated/floor/airless{icon_state = "derelict13"},/area/derelict/hallway/secondary) -"kA" = (/turf/simulated/floor/airless{icon_state = "derelict14"},/area/derelict/hallway/secondary) -"kB" = (/turf/simulated/floor/airless{icon_state = "derelict15"},/area/derelict/hallway/secondary) -"kC" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "derelict16"},/area/derelict/hallway/secondary) -"kD" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) -"kE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) -"kF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) -"kG" = (/turf/simulated/floor/airless{icon_state = "derelict1"},/area/derelict/hallway/secondary) -"kH" = (/turf/simulated/floor/airless{icon_state = "derelict2"},/area/derelict/hallway/secondary) -"kI" = (/turf/simulated/floor/airless{icon_state = "derelict3"},/area/derelict/hallway/secondary) -"kJ" = (/turf/simulated/floor/airless{icon_state = "derelict4"},/area/derelict/hallway/secondary) -"kK" = (/turf/simulated/floor/airless{icon_state = "derelict5"},/area/derelict/hallway/secondary) -"kL" = (/turf/simulated/floor/airless{icon_state = "derelict6"},/area/derelict/hallway/secondary) -"kM" = (/turf/simulated/floor/airless{icon_state = "derelict7"},/area/derelict/hallway/secondary) -"kN" = (/turf/simulated/floor/airless{icon_state = "derelict8"},/area/derelict/hallway/secondary) +"ku" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) +"kv" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict9"},/area/derelict/hallway/secondary) +"kw" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "derelict10"},/area/derelict/hallway/secondary) +"kx" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict11"},/area/derelict/hallway/secondary) +"ky" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict12"},/area/derelict/hallway/secondary) +"kz" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict13"},/area/derelict/hallway/secondary) +"kA" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict14"},/area/derelict/hallway/secondary) +"kB" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict15"},/area/derelict/hallway/secondary) +"kC" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "derelict16"},/area/derelict/hallway/secondary) +"kD" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) +"kE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) +"kF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) +"kG" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict1"},/area/derelict/hallway/secondary) +"kH" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict2"},/area/derelict/hallway/secondary) +"kI" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict3"},/area/derelict/hallway/secondary) +"kJ" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict4"},/area/derelict/hallway/secondary) +"kK" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict5"},/area/derelict/hallway/secondary) +"kL" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict6"},/area/derelict/hallway/secondary) +"kM" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict7"},/area/derelict/hallway/secondary) +"kN" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict8"},/area/derelict/hallway/secondary) "kO" = (/obj/structure/lattice,/turf/space,/area/derelict/hallway/secondary) "kP" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kS" = (/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload) -"kT" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) +"kT" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "kU" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kV" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kW" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kX" = (/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) -"kY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) -"kZ" = (/obj/structure/closet/emcloset,/turf/simulated/floor/airless,/area/derelict/hallway/secondary) +"kY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"kZ" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary) "la" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "lb" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload) "lc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload) -"ld" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) +"ld" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "le" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/bridge/ai_upload) "lf" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) -"lg" = (/obj/machinery/power/smes,/obj/structure/cable,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) -"lh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) -"li" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/bridge/ai_upload) -"lj" = (/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) -"lk" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) +"lg" = (/obj/machinery/power/smes,/obj/structure/cable,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"lh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"li" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/bridge/ai_upload) +"lj" = (/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"lk" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "ll" = (/turf/simulated/floor/plating/airless,/area/derelict/bridge/ai_upload) -"lm" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) -"ln" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) +"lm" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"ln" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "lo" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/derelict/bridge/ai_upload) -"lp" = (/obj/item/weapon/paper/russiantraitorobj,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) -"lq" = (/obj/machinery/light/small{dir = 4},/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) +"lp" = (/obj/item/weapon/paper/russiantraitorobj,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) +"lq" = (/obj/machinery/light/small{dir = 4},/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "lr" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) -"ls" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) -"lt" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) -"lu" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) -"lv" = (/obj/item/clothing/suit/space/syndicate/black/red,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) -"lw" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload) +"ls" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"lt" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"lu" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"lv" = (/obj/item/clothing/suit/space/syndicate/black/red,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"lw" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "lx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload) "ly" = (/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) "lz" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) -"lA" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/airless,/area/solar/derelict_aft) +"lA" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plasteel/airless,/area/solar/derelict_aft) "lB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) "lC" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) "lD" = (/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) @@ -602,21 +602,21 @@ "lF" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) "lG" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) "lH" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) -"lI" = (/obj/structure/cable,/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/airless,/area/solar/derelict_aft) +"lI" = (/obj/structure/cable,/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plasteel/airless,/area/solar/derelict_aft) "lJ" = (/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) "lK" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft) "lL" = (/turf/simulated/floor/plating/airless,/area/derelict/teleporter) "lM" = (/turf/simulated/wall/r_wall,/area/derelict/teleporter) -"lN" = (/turf/simulated/floor/airless,/area/derelict/teleporter) -"lO" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/teleporter) -"lP" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/teleporter) -"lQ" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/airless,/area/derelict/teleporter) -"lR" = (/obj/machinery/teleport/station,/turf/simulated/floor/airless,/area/derelict/teleporter) -"lS" = (/obj/machinery/teleport/hub,/turf/simulated/floor/airless,/area/derelict/teleporter) +"lN" = (/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter) +"lO" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/teleporter) +"lP" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/teleporter) +"lQ" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter) +"lR" = (/obj/machinery/teleport/station,/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter) +"lS" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter) "lT" = (/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/teleporter) -"lU" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/airless,/area/derelict/teleporter) -"lV" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/teleporter) -"lW" = (/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/airless,/area/derelict/teleporter) +"lU" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter) +"lV" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/teleporter) +"lW" = (/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter) "lX" = (/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot) "lY" = (/turf/simulated/mineral,/area/syndicate_depot) "lZ" = (/obj/structure/lattice,/obj/machinery/gun_turret/exterior,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot) @@ -657,28 +657,28 @@ "mI" = (/turf/simulated/floor/plating/airless/asteroid,/area/space) "mJ" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/space) "mK" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/space) -"mL" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/airless,/area/space) +"mL" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel/airless,/area/space) "mM" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/space) "mN" = (/turf/simulated/floor/plating/airless/asteroid,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/space) -"mO" = (/obj/effect/landmark/corpse/clown,/turf/simulated/floor/airless,/area/space) -"mP" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space) -"mQ" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/bananium,/obj/item/weapon/grenade/bananade,/turf/simulated/floor/airless,/area/space) +"mO" = (/obj/effect/landmark/corpse/clown,/turf/simulated/floor/plasteel/airless,/area/space) +"mP" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space) +"mQ" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/bananium,/obj/item/weapon/grenade/bananade,/turf/simulated/floor/plasteel/airless,/area/space) "mR" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (EAST)"; icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space) "mS" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_r (WEST)"; icon_state = "burst_r"; dir = 8},/turf/space,/area/space) "mT" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless/asteroid,/area/space) -"mU" = (/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space) +"mU" = (/obj/item/weapon/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space) "mV" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/turf/space,/area/space) -"mW" = (/obj/structure/computerframe/HONKputer,/turf/simulated/floor/airless,/area/space) +"mW" = (/obj/structure/computerframe/HONKputer,/turf/simulated/floor/plasteel/airless,/area/space) "mX" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/space) -"mY" = (/obj/effect/landmark/corpse/clown{name = "Clown Pilot"},/turf/simulated/floor/airless,/area/space) -"mZ" = (/obj/item/weapon/paper/clownship,/turf/simulated/floor/airless,/area/space) +"mY" = (/obj/effect/landmark/corpse/clown{name = "Clown Pilot"},/turf/simulated/floor/plasteel/airless,/area/space) +"mZ" = (/obj/item/weapon/paper/clownship,/turf/simulated/floor/plasteel/airless,/area/space) "na" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/space) -"nb" = (/obj/item/weapon/shard,/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/airless,/area/space) -"nc" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/space) +"nb" = (/obj/item/weapon/shard,/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel/airless,/area/space) +"nc" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/airless,/area/space) "nd" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/space) -"ne" = (/turf/simulated/floor/airless,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/space) -"nf" = (/obj/item/weapon/pickaxe,/turf/simulated/floor/airless,/area/space) -"ng" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space) +"ne" = (/turf/simulated/floor/plasteel/airless,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/space) +"nf" = (/obj/item/weapon/pickaxe,/turf/simulated/floor/plasteel/airless,/area/space) +"ng" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space) "nh" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/turf/space,/area/space) "ni" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/space) "nj" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/space) From 9b5f8445f84a248c32431ea06a9d04f35319d7c1 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 26 Jan 2016 21:12:03 -0500 Subject: [PATCH 031/442] begin conflict fix (2/2) --- code/game/machinery/rechargestation.dm | 6 +- code/game/objects/items.dm | 6 +- .../modules/surgery/organs/organs_internal.dm | 463 ++++++++++++++++++ 3 files changed, 470 insertions(+), 5 deletions(-) create mode 100644 code/modules/surgery/organs/organs_internal.dm diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 8eedb95a8de..d6daf0f4516 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -115,7 +115,7 @@ R.cell.charge = min(R.cell.charge + recharge_speed, R.cell.maxcharge) else if(istype(occupant, /mob/living/carbon/human)) var/mob/living/carbon/human/H = occupant - if(H.get_int_organ(/obj/item/organ/internal/cell) && H.nutrition < 450) + if(!isnull(H.internal_organs_by_name["cell"]) && H.nutrition < 450) H.nutrition = min(H.nutrition+recharge_speed_nutrition, 450) if(repairs) H.heal_overall_damage(repairs, repairs, 0, 1) @@ -145,7 +145,7 @@ // ^ makes sinle list of active (R.contents) and inactive modules (R.module.modules) for(var/obj/O in um) // Engineering - if(istype(O,/obj/item/stack/sheet/metal) || istype(O,/obj/item/stack/sheet/rglass) || istype(O,/obj/item/stack/cable_coil)) + if(istype(O,/obj/item/stack/sheet)) var/obj/item/stack/sheet/S = O if(S.amount < 50) S.amount += 1 * coeff @@ -242,7 +242,7 @@ if(occupant) H << "The cell is already occupied!" return - if(!H.get_int_organ(/obj/item/organ/internal/cell)) + if(isnull(H.internal_organs_by_name["cell"])) return can_accept_user = 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 8dd72489b76..bd0c2a4fc5a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -419,8 +419,10 @@ add_logs(M, user, "attacked", "[src.name]", "(INTENT: [uppertext(user.a_intent)])") if(istype(H)) - var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) - if(!eyes) + var/obj/item/organ/eyes/eyes = H.internal_organs_by_name["eyes"] + if(!eyes) // should still get stabbed in the head + var/obj/item/organ/external/head/head = H.organs_by_name["head"] + head.take_damage(rand(10,14), 1) return eyes.take_damage(rand(3,4), 1) if(eyes.damage >= eyes.min_bruised_damage) diff --git a/code/modules/surgery/organs/organs_internal.dm b/code/modules/surgery/organs/organs_internal.dm new file mode 100644 index 00000000000..ca8cf5eefe2 --- /dev/null +++ b/code/modules/surgery/organs/organs_internal.dm @@ -0,0 +1,463 @@ +// Internal surgeries. +/datum/surgery_step/internal + priority = 2 + can_infect = 1 + blood_level = 1 + +/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!hasorgans(target)) + return 0 + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && affected.open_enough_for_surgery() + +////////////////////////////////////////////////////////////////// +// Dethrall Shadowling // +////////////////////////////////////////////////////////////////// +/datum/surgery_step/internal/dethrall + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/wirecutters = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 20 + ) + + min_duration = 120 + max_duration = 120 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain") + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/braincase = target.named_organ_parent("brain") + user.visible_message("[user] begins looking around in [target]'s [braincase].", "You begin looking for foreign influences on [target]'s brain...") + user << "You locate a small, pulsing black tumor on the side of [target]'s brain and begin to remove it." + target << "A small part of your [braincase] pulses with agony as the light impacts it." + user.visible_message("[user] begins removing something from [target]'s [braincase].", \ + "You begin carefully extracting the tumor...") + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/braincase = target.named_organ_parent("brain") + user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ + "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") + ticker.mode.remove_thrall(target.mind,0) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/braincase = target.named_organ_parent("brain") + if(prob(50)) + user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ + "You fumble and tear out [target]'s tumor!") + target.adjustBrainLoss(110) // This is so you can't just defib'n go + ticker.mode.remove_thrall(target.mind,1) + else + user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") + +////////////////////////////////////////////////////////////////// +// ALIEN EMBRYO SURGERY // +////////////////////////////////////////////////////////////////// +/datum/surgery_step/internal/remove_embryo + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/wirecutters = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 20 + ) + blood_level = 2 + + min_duration = 80 + max_duration = 100 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/embryo = 0 + for(var/obj/item/alien_embryo/A in target) + embryo = 1 + break + + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." + var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your chest!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", + "You rip the larva out of [target]'s ribcage!") + + for(var/obj/item/alien_embryo/A in target) + A.loc = A.loc.loc + + +////////////////////////////////////////////////////////////////// +// CHEST INTERNAL ORGAN SURGERY // +////////////////////////////////////////////////////////////////// +/datum/surgery_step/internal/fix_organ + allowed_tools = list( + /obj/item/stack/medical/advanced/bruise_pack= 100, \ + /obj/item/stack/medical/bruise_pack = 20 + ) + + min_duration = 70 + max_duration = 90 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(!affected) + return + var/is_organ_damaged = 0 + for(var/obj/item/organ/I in affected.internal_organs) + if(I.damage > 0 && I.robotic < 2) + is_organ_damaged = 1 + break + return ..() && is_organ_damaged + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/tool_name = "\the [tool]" + if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) + tool_name = "regenerative membrane" + else if (istype(tool, /obj/item/stack/medical/bruise_pack)) + tool_name = "the bandaid" + + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + for(var/obj/item/organ/I in affected.internal_organs) + if(I && I.damage > 0) + if(I.robotic < 2) + spread_germs_to_organ(I, user) + user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ + "You start treating damage to [target]'s [I.name] with [tool_name]." ) + + target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/tool_name = "\the [tool]" + if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) + tool_name = "regenerative membrane" + if (istype(tool, /obj/item/stack/medical/bruise_pack)) + tool_name = "the bandaid" + + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + for(var/obj/item/organ/I in affected.internal_organs) + if(I) + I.surgeryize() + if(I && I.damage > 0) + if(I.robotic < 2) + user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ + "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) + I.damage = 0 + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") + var/dam_amt = 2 + + if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) + target.adjustToxLoss(5) + + else if (istype(tool, /obj/item/stack/medical/bruise_pack)) + dam_amt = 5 + target.adjustToxLoss(10) + affected.createwound(CUT, 5) + + for(var/obj/item/organ/I in affected.internal_organs) + if(I && I.damage > 0) + I.take_damage(dam_amt,0) + +/datum/surgery_step/internal/detatch_organ + + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchen/knife = 75, \ + /obj/item/weapon/shard = 50, \ + ) + + min_duration = 90 + max_duration = 110 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!..()) + return 0 + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if(!(affected && !(affected.status & ORGAN_ROBOT))) + return 0 + + target.op_stage.current_organ = null + target.op_stage.organ_ref = null + + var/list/attached_organs = list() + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) + attached_organs[I.organ_tag] = I + + var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs + if(!organ_to_remove) + return 0 + + target.op_stage.current_organ = organ_to_remove + target.op_stage.organ_ref = attached_organs[organ_to_remove] + + return ..() && organ_to_remove + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ + "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") + + var/obj/item/organ/I = target.op_stage.organ_ref + if(I && istype(I)) + spread_germs_to_organ(I, user) + I.status |= ORGAN_CUT_AWAY + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") + affected.createwound(CUT, rand(30,50), 1) + +/datum/surgery_step/internal/remove_organ + + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/wirecutters = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 20 + ) + + min_duration = 60 + max_duration = 80 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!..()) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if(!istype(affected)) + return 0 + + target.op_stage.current_organ = null + target.op_stage.organ_ref = null + + var/list/removable_organs = list() + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) + removable_organs[I.organ_tag] = I + + var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs + if(!organ_to_remove) + return 0 + + target.op_stage.current_organ = organ_to_remove + target.op_stage.organ_ref = removable_organs[organ_to_remove] + return ..() + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "You start removing [target]'s [target.op_stage.current_organ] with \the [tool].") + target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\blue [user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "\blue You have removed [target]'s [target.op_stage.current_organ] with \the [tool].") + + // Extract the organ! + if(target.op_stage.current_organ) + var/obj/item/organ/O = target.op_stage.organ_ref + if(O && istype(O)) + spread_germs_to_organ(O, user) + O.removed(user) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 20) + +/datum/surgery_step/internal/replace_organ + allowed_tools = list( + /obj/item/organ = 100 + ) + + min_duration = 60 + max_duration = 80 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + var/obj/item/organ/O = tool + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(!affected) return + var/organ_compatible + var/organ_missing + + if(!istype(O)) + return 0 + + if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT)) + user << "You cannot install a naked organ into a robotic body." + return 2 + + if(!target.species) + user << "\red You have no idea what species this person is. Report this on the bug tracker." + return 2 + + var/o_is = (O.gender == PLURAL) ? "are" : "is" + var/o_a = (O.gender == PLURAL) ? "" : "a " + var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't" + + if(O.organ_tag == "limb") + return 0 + else if(target.species.has_organ[O.organ_tag]) + + if(O.damage > (O.max_damage * 0.75)) + user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." + return 2 + + if(!target.internal_organs_by_name[O.organ_tag]) + organ_missing = 1 + else + user << "\red \The [target] already has [o_a][O.organ_tag]." + return 2 + + if(O && affected.limb_name == O.parent_organ) + organ_compatible = 1 + else + user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.name]." + return 2 + else + user << "\red You're pretty sure [target.species.name] don't normally have [o_a][O.organ_tag]." + return 2 + + return ..() && organ_missing && organ_compatible + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ + "You start transplanting \the [tool] into [target]'s [affected.name].") + target.custom_pain("Someone's rooting around in your [affected.name]!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ + "\blue You have transplanted \the [tool] into [target]'s [affected.name].") + user.drop_item(tool) + var/obj/item/organ/O = tool + if(istype(O)) + O.replaced(target,affected) + spread_germs_to_organ(O, user) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ + "\red Your hand slips, damaging \the [tool]!") + var/obj/item/organ/I = tool + if(istype(I)) + I.take_damage(rand(3,5),0) + +/datum/surgery_step/internal/attach_organ + allowed_tools = list( + /obj/item/weapon/FixOVein = 100, \ + /obj/item/stack/cable_coil = 75 + ) + + min_duration = 100 + max_duration = 120 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!..()) + return 0 + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if(!istype(affected)) + return 0 + + target.op_stage.current_organ = null + target.op_stage.organ_ref = null + + var/list/removable_organs = list() + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) + removable_organs[I.organ_tag] = I + + var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs + if(!organ_to_replace) + return 0 + + target.op_stage.current_organ = organ_to_replace + target.op_stage.organ_ref = removable_organs[organ_to_replace] + return ..() + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].") + target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ + "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") + + var/obj/item/organ/I = target.op_stage.organ_ref + if(I && istype(I)) + I.status &= ~ORGAN_CUT_AWAY + spread_germs_to_organ(I, user) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 20) + +////////////////////////////////////////////////////////////////// +// HEART SURGERY // +////////////////////////////////////////////////////////////////// +// To be finished after some tests. +// /datum/surgery_step/ribcage/heart/cut +// allowed_tools = list( +// /obj/item/weapon/scalpel = 100, \ +// /obj/item/weapon/kitchen/knife = 75, \ +// /obj/item/weapon/shard = 50, \ +// ) + +// min_duration = 30 +// max_duration = 40 + +// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +// return ..() && target.op_stage.ribcage == 2 \ No newline at end of file From e9c2d27d0995ea3464e15323be97b5d9f723d196 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 26 Jan 2016 21:16:31 -0500 Subject: [PATCH 032/442] being conflict fix(3/2) I SWEAR TO FUCK I NEED TO PAY ATTENTION --- .../modules/surgery/organs/organs_internal.dm | 463 -------------- code/modules/surgery/organs_internal.dm | 580 +++++++++++------- code/modules/surgery/organs_internal2.dm | 305 +++++++++ 3 files changed, 674 insertions(+), 674 deletions(-) delete mode 100644 code/modules/surgery/organs/organs_internal.dm create mode 100644 code/modules/surgery/organs_internal2.dm diff --git a/code/modules/surgery/organs/organs_internal.dm b/code/modules/surgery/organs/organs_internal.dm deleted file mode 100644 index ca8cf5eefe2..00000000000 --- a/code/modules/surgery/organs/organs_internal.dm +++ /dev/null @@ -1,463 +0,0 @@ -// Internal surgeries. -/datum/surgery_step/internal - priority = 2 - can_infect = 1 - blood_level = 1 - -/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!hasorgans(target)) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open_enough_for_surgery() - -////////////////////////////////////////////////////////////////// -// Dethrall Shadowling // -////////////////////////////////////////////////////////////////// -/datum/surgery_step/internal/dethrall - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - - min_duration = 120 - max_duration = 120 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain") - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] begins looking around in [target]'s [braincase].", "You begin looking for foreign influences on [target]'s brain...") - user << "You locate a small, pulsing black tumor on the side of [target]'s brain and begin to remove it." - target << "A small part of your [braincase] pulses with agony as the light impacts it." - user.visible_message("[user] begins removing something from [target]'s [braincase].", \ - "You begin carefully extracting the tumor...") - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ - "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") - ticker.mode.remove_thrall(target.mind,0) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - if(prob(50)) - user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ - "You fumble and tear out [target]'s tumor!") - target.adjustBrainLoss(110) // This is so you can't just defib'n go - ticker.mode.remove_thrall(target.mind,1) - else - user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") - -////////////////////////////////////////////////////////////////// -// ALIEN EMBRYO SURGERY // -////////////////////////////////////////////////////////////////// -/datum/surgery_step/internal/remove_embryo - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - blood_level = 2 - - min_duration = 80 - max_duration = 100 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/embryo = 0 - for(var/obj/item/alien_embryo/A in target) - embryo = 1 - break - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." - var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your chest!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") - - for(var/obj/item/alien_embryo/A in target) - A.loc = A.loc.loc - - -////////////////////////////////////////////////////////////////// -// CHEST INTERNAL ORGAN SURGERY // -////////////////////////////////////////////////////////////////// -/datum/surgery_step/internal/fix_organ - allowed_tools = list( - /obj/item/stack/medical/advanced/bruise_pack= 100, \ - /obj/item/stack/medical/bruise_pack = 20 - ) - - min_duration = 70 - max_duration = 90 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) - return - var/is_organ_damaged = 0 - for(var/obj/item/organ/I in affected.internal_organs) - if(I.damage > 0 && I.robotic < 2) - is_organ_damaged = 1 - break - return ..() && is_organ_damaged - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - else if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - for(var/obj/item/organ/I in affected.internal_organs) - if(I && I.damage > 0) - if(I.robotic < 2) - spread_germs_to_organ(I, user) - user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ - "You start treating damage to [target]'s [I.name] with [tool_name]." ) - - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - for(var/obj/item/organ/I in affected.internal_organs) - if(I) - I.surgeryize() - if(I && I.damage > 0) - if(I.robotic < 2) - user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ - "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) - I.damage = 0 - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") - var/dam_amt = 2 - - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - target.adjustToxLoss(5) - - else if (istype(tool, /obj/item/stack/medical/bruise_pack)) - dam_amt = 5 - target.adjustToxLoss(10) - affected.createwound(CUT, 5) - - for(var/obj/item/organ/I in affected.internal_organs) - if(I && I.damage > 0) - I.take_damage(dam_amt,0) - -/datum/surgery_step/internal/detatch_organ - - allowed_tools = list( - /obj/item/weapon/scalpel = 100, \ - /obj/item/weapon/kitchen/knife = 75, \ - /obj/item/weapon/shard = 50, \ - ) - - min_duration = 90 - max_duration = 110 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!..()) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!(affected && !(affected.status & ORGAN_ROBOT))) - return 0 - - target.op_stage.current_organ = null - target.op_stage.organ_ref = null - - var/list/attached_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ - if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - attached_organs[I.organ_tag] = I - - var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs - if(!organ_to_remove) - return 0 - - target.op_stage.current_organ = organ_to_remove - target.op_stage.organ_ref = attached_organs[organ_to_remove] - - return ..() && organ_to_remove - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") - - var/obj/item/organ/I = target.op_stage.organ_ref - if(I && istype(I)) - spread_germs_to_organ(I, user) - I.status |= ORGAN_CUT_AWAY - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, rand(30,50), 1) - -/datum/surgery_step/internal/remove_organ - - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - - min_duration = 60 - max_duration = 80 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!..()) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!istype(affected)) - return 0 - - target.op_stage.current_organ = null - target.op_stage.organ_ref = null - - var/list/removable_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ - if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - removable_organs[I.organ_tag] = I - - var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs - if(!organ_to_remove) - return 0 - - target.op_stage.current_organ = organ_to_remove - target.op_stage.organ_ref = removable_organs[organ_to_remove] - return ..() - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start removing [target]'s [target.op_stage.current_organ] with \the [tool].") - target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "\blue You have removed [target]'s [target.op_stage.current_organ] with \the [tool].") - - // Extract the organ! - if(target.op_stage.current_organ) - var/obj/item/organ/O = target.op_stage.organ_ref - if(O && istype(O)) - spread_germs_to_organ(O, user) - O.removed(user) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 20) - -/datum/surgery_step/internal/replace_organ - allowed_tools = list( - /obj/item/organ = 100 - ) - - min_duration = 60 - max_duration = 80 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - var/obj/item/organ/O = tool - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) return - var/organ_compatible - var/organ_missing - - if(!istype(O)) - return 0 - - if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT)) - user << "You cannot install a naked organ into a robotic body." - return 2 - - if(!target.species) - user << "\red You have no idea what species this person is. Report this on the bug tracker." - return 2 - - var/o_is = (O.gender == PLURAL) ? "are" : "is" - var/o_a = (O.gender == PLURAL) ? "" : "a " - var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't" - - if(O.organ_tag == "limb") - return 0 - else if(target.species.has_organ[O.organ_tag]) - - if(O.damage > (O.max_damage * 0.75)) - user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." - return 2 - - if(!target.internal_organs_by_name[O.organ_tag]) - organ_missing = 1 - else - user << "\red \The [target] already has [o_a][O.organ_tag]." - return 2 - - if(O && affected.limb_name == O.parent_organ) - organ_compatible = 1 - else - user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.name]." - return 2 - else - user << "\red You're pretty sure [target.species.name] don't normally have [o_a][O.organ_tag]." - return 2 - - return ..() && organ_missing && organ_compatible - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ - "You start transplanting \the [tool] into [target]'s [affected.name].") - target.custom_pain("Someone's rooting around in your [affected.name]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ - "\blue You have transplanted \the [tool] into [target]'s [affected.name].") - user.drop_item(tool) - var/obj/item/organ/O = tool - if(istype(O)) - O.replaced(target,affected) - spread_germs_to_organ(O, user) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ - "\red Your hand slips, damaging \the [tool]!") - var/obj/item/organ/I = tool - if(istype(I)) - I.take_damage(rand(3,5),0) - -/datum/surgery_step/internal/attach_organ - allowed_tools = list( - /obj/item/weapon/FixOVein = 100, \ - /obj/item/stack/cable_coil = 75 - ) - - min_duration = 100 - max_duration = 120 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!..()) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!istype(affected)) - return 0 - - target.op_stage.current_organ = null - target.op_stage.organ_ref = null - - var/list/removable_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ - if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) - removable_organs[I.organ_tag] = I - - var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs - if(!organ_to_replace) - return 0 - - target.op_stage.current_organ = organ_to_replace - target.op_stage.organ_ref = removable_organs[organ_to_replace] - return ..() - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].") - target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - - var/obj/item/organ/I = target.op_stage.organ_ref - if(I && istype(I)) - I.status &= ~ORGAN_CUT_AWAY - spread_germs_to_organ(I, user) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 20) - -////////////////////////////////////////////////////////////////// -// HEART SURGERY // -////////////////////////////////////////////////////////////////// -// To be finished after some tests. -// /datum/surgery_step/ribcage/heart/cut -// allowed_tools = list( -// /obj/item/weapon/scalpel = 100, \ -// /obj/item/weapon/kitchen/knife = 75, \ -// /obj/item/weapon/shard = 50, \ -// ) - -// min_duration = 30 -// max_duration = 40 - -// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) -// return ..() && target.op_stage.ribcage == 2 \ No newline at end of file diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 2af5a44e88c..ca8cf5eefe2 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -1,37 +1,10 @@ -/datum/surgery/organ_manipulation - name = "organ manipulation" - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, - /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) - possible_locs = list("chest","head") - requires_organic_bodypart = 0 - disallowed_mob = (/mob/living/carbon/human/machine) - -/datum/surgery/organ_manipulation/soft - possible_locs = list("groin", "eyes", "mouth") - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - -/datum/surgery/organ_manipulation/boneless - possible_locs = list("chest","head","groin", "eyes", "mouth") - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - allowed_mob = list(/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) - disallowed_mob = list(/mob/living/carbon/human) - -/datum/surgery/organ_manipulation/alien - name = "alien organ manipulation" - possible_locs = list("chest", "head", "groin", "eyes", "mouth") - allowed_mob = list(/mob/living/carbon/alien/humanoid) - disallowed_mob = list(/mob/living/carbon/human) - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - - - // Internal surgeries. /datum/surgery_step/internal priority = 2 can_infect = 1 blood_level = 1 -/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if (!hasorgans(target)) return 0 @@ -39,17 +12,54 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected && affected.open_enough_for_surgery() +////////////////////////////////////////////////////////////////// +// Dethrall Shadowling // +////////////////////////////////////////////////////////////////// +/datum/surgery_step/internal/dethrall + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/wirecutters = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 20 + ) + + min_duration = 120 + max_duration = 120 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain") + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/braincase = target.named_organ_parent("brain") + user.visible_message("[user] begins looking around in [target]'s [braincase].", "You begin looking for foreign influences on [target]'s brain...") + user << "You locate a small, pulsing black tumor on the side of [target]'s brain and begin to remove it." + target << "A small part of your [braincase] pulses with agony as the light impacts it." + user.visible_message("[user] begins removing something from [target]'s [braincase].", \ + "You begin carefully extracting the tumor...") + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/braincase = target.named_organ_parent("brain") + user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ + "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") + ticker.mode.remove_thrall(target.mind,0) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/braincase = target.named_organ_parent("brain") + if(prob(50)) + user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ + "You fumble and tear out [target]'s tumor!") + target.adjustBrainLoss(110) // This is so you can't just defib'n go + ticker.mode.remove_thrall(target.mind,1) + else + user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") ////////////////////////////////////////////////////////////////// // ALIEN EMBRYO SURGERY // ////////////////////////////////////////////////////////////////// -///datum/surgery/remove_xeno_baby -// steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) -// possible_locs = list("chest") -// disallowed_mob = (/mob/living/carbon/human/machine) -//this is all handled bia organ mainpulation as an On_find - -/datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. +/datum/surgery_step/internal/remove_embryo allowed_tools = list( /obj/item/weapon/hemostat = 100, \ /obj/item/weapon/wirecutters = 75, \ @@ -57,172 +67,83 @@ ) blood_level = 2 + min_duration = 80 max_duration = 100 -/datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/embryo = 0 - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - embryo = 1 - //break + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/embryo = 0 + for(var/obj/item/alien_embryo/A in target) + embryo = 1 + break - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" -/datum/surgery_step/internal/remove_embryo/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." user.visible_message(msg, self_msg) target.custom_pain("Something hurts horribly in your chest!",1) ..() -/datum/surgery_step/internal/remove_embryo/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", + "You rip the larva out of [target]'s ribcage!") - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - user << "You found an unknown alien organism in [target]'s chest!" - if(prob(10)) - A.AttemptGrow() - - A.remove(target) - A.loc = get_turf(target) - - return 1 - -/datum/surgery_step/internal/remove_embryo/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!hasorgans(target)) - return - - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - if(prob(50)) - A.AttemptGrow(0) - user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") - else - target.adjustOxyLoss(30) - user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") - - return 0 + for(var/obj/item/alien_embryo/A in target) + A.loc = A.loc.loc -/datum/surgery_step/internal/manipulate_organs - name = "manipulate organs" - allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) - var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/kitchen/utensil/fork = 55) - var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20) - //Finish is just so you can close up after you do other things. - var/implements_finsh = list(/obj/item/weapon/scalpel/manager = 120,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75) - var/current_type - var/obj/item/organ/internal/I = null - var/obj/item/organ/external/affected = null +////////////////////////////////////////////////////////////////// +// CHEST INTERNAL ORGAN SURGERY // +////////////////////////////////////////////////////////////////// +/datum/surgery_step/internal/fix_organ + allowed_tools = list( + /obj/item/stack/medical/advanced/bruise_pack= 100, \ + /obj/item/stack/medical/bruise_pack = 20 + ) + + min_duration = 70 max_duration = 90 -/datum/surgery_step/internal/manipulate_organs/New() - ..() - allowed_tools = allowed_tools + implements_extract + implements_mend + implements_finsh + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - - -/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - I = null - affected = target.get_organ(target_zone) - if(is_int_organ(tool)) - current_type = "insert" - I = tool - if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) - user << "There is no room for [I] in [target]'s [parse_zone(target_zone)]!" - return -1 - - if(I.damage > (I.max_damage * 0.75)) - user << " \The [I] is in no state to be transplanted." - return -1 - - if(target.get_int_organ(I)) - user << "\red \The [target] already has [I]." - return -1 - - user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ - "You start transplanting \the [tool] into [target]'s [affected.name].") - target.custom_pain("Someone's rooting around in your [affected.name]!",1) - - else if(implement_type in implements_finsh) - //same as surgery step /datum/surgery_step/open_encased/close/ - current_type = "finish" + if (!hasorgans(target)) + return var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected.encased) - var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) - else - var/msg = "[user] starts pulling [target]'s skin back into place with \the [tool]." - var/self_msg = "You start pulling [target]'s skin back into place with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - else if(implement_type in implements_extract) - current_type = "extract" - var/list/organs = target.get_organs_zone(target_zone) - if(!organs.len) - user << "There are no removeable organs in [target]'s [parse_zone(target_zone)]!" - return -1 - else - for(var/obj/item/organ/internal/O in organs) - O.on_find(user) - organs -= O - organs[O.name] = O + if(!affected) + return + var/is_organ_damaged = 0 + for(var/obj/item/organ/I in affected.internal_organs) + if(I.damage > 0 && I.robotic < 2) + is_organ_damaged = 1 + break + return ..() && is_organ_damaged - I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs - if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) - I = organs[I] - if(!I) return -1 - user.visible_message("[user] starts to separate [target]'s [I] with \the [tool].", \ - "You start to separate [target]'s [I] with \the [tool] for removal." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - else - return -1 - - else if(implement_type in implements_mend) - //todo Change message, make it heal the organs... - current_type = "mend" + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/tool_name = "\the [tool]" if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) tool_name = "regenerative membrane" else if (istype(tool, /obj/item/stack/medical/bruise_pack)) tool_name = "the bandaid" - else if (istype(tool, /obj/item/stack/nanopaste)) - tool_name = "\the [tool]" //what else do you call nanopaste medically? - if(!hasorgans(target)) - user << "They do not have organs to mend!" + if (!hasorgans(target)) return - for(var/obj/item/organ/internal/I in affected.internal_organs) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + for(var/obj/item/organ/I in affected.internal_organs) if(I && I.damage > 0) - if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) - if(!I.sterile) - spread_germs_to_organ(I, user) - user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ - "You start treating damage to [target]'s [I.name] with [tool_name]." ) - else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) + if(I.robotic < 2) + spread_germs_to_organ(I, user) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) - user << "No organs appear to be damaged." - return -1 target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() - else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) - user << "[tool] was biten by someone! It's too damaged to use!" - return -1 - ..() - -/datum/surgery_step/internal/manipulate_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(current_type == "mend") + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/tool_name = "\the [tool]" if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) tool_name = "regenerative membrane" @@ -231,61 +152,298 @@ if (!hasorgans(target)) return - for(var/obj/item/organ/internal/I in affected.internal_organs) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + for(var/obj/item/organ/I in affected.internal_organs) if(I) I.surgeryize() if(I && I.damage > 0) - if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) + if(I.robotic < 2) user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 - else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste)) - user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ - "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) - I.damage = 0 - //return 1 - else if(current_type == "insert") - I = tool - user.drop_item() - I.insert(target) - spread_germs_to_organ(I, user) - user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ - "\blue You have transplanted \the [tool] into [target]'s [affected.name].") - I.status &= ~ORGAN_CUT_AWAY + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - else if(current_type == "extract") - if(I && I.owner == target) - user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ - "\blue You have separated and extracted [target]'s [I] with \the [tool].") + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") - spread_germs_to_organ(I, user) - I.status |= ORGAN_CUT_AWAY - I.remove(target) - I.loc = get_turf(target) - else - user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", - "You can't extract anything from [target]'s [parse_zone(target_zone)]!") - else if(current_type == "finish") + user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") + var/dam_amt = 2 + + if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) + target.adjustToxLoss(5) + + else if (istype(tool, /obj/item/stack/medical/bruise_pack)) + dam_amt = 5 + target.adjustToxLoss(10) + affected.createwound(CUT, 5) + + for(var/obj/item/organ/I in affected.internal_organs) + if(I && I.damage > 0) + I.take_damage(dam_amt,0) + +/datum/surgery_step/internal/detatch_organ + + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchen/knife = 75, \ + /obj/item/weapon/shard = 50, \ + ) + + min_duration = 90 + max_duration = 110 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!..()) + return 0 var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected.encased) - var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) - affected.open = 2.5 + + if(!(affected && !(affected.status & ORGAN_ROBOT))) + return 0 + + target.op_stage.current_organ = null + target.op_stage.organ_ref = null + + var/list/attached_organs = list() + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) + attached_organs[I.organ_tag] = I + + var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs + if(!organ_to_remove) + return 0 + + target.op_stage.current_organ = organ_to_remove + target.op_stage.organ_ref = attached_organs[organ_to_remove] + + return ..() && organ_to_remove + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ + "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") + + var/obj/item/organ/I = target.op_stage.organ_ref + if(I && istype(I)) + spread_germs_to_organ(I, user) + I.status |= ORGAN_CUT_AWAY + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") + affected.createwound(CUT, rand(30,50), 1) + +/datum/surgery_step/internal/remove_organ + + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/wirecutters = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 20 + ) + + min_duration = 60 + max_duration = 80 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!..()) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if(!istype(affected)) + return 0 + + target.op_stage.current_organ = null + target.op_stage.organ_ref = null + + var/list/removable_organs = list() + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) + removable_organs[I.organ_tag] = I + + var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs + if(!organ_to_remove) + return 0 + + target.op_stage.current_organ = organ_to_remove + target.op_stage.organ_ref = removable_organs[organ_to_remove] + return ..() + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "You start removing [target]'s [target.op_stage.current_organ] with \the [tool].") + target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\blue [user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "\blue You have removed [target]'s [target.op_stage.current_organ] with \the [tool].") + + // Extract the organ! + if(target.op_stage.current_organ) + var/obj/item/organ/O = target.op_stage.organ_ref + if(O && istype(O)) + spread_germs_to_organ(O, user) + O.removed(user) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 20) + +/datum/surgery_step/internal/replace_organ + allowed_tools = list( + /obj/item/organ = 100 + ) + + min_duration = 60 + max_duration = 80 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + var/obj/item/organ/O = tool + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(!affected) return + var/organ_compatible + var/organ_missing + + if(!istype(O)) + return 0 + + if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT)) + user << "You cannot install a naked organ into a robotic body." + return 2 + + if(!target.species) + user << "\red You have no idea what species this person is. Report this on the bug tracker." + return 2 + + var/o_is = (O.gender == PLURAL) ? "are" : "is" + var/o_a = (O.gender == PLURAL) ? "" : "a " + var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't" + + if(O.organ_tag == "limb") + return 0 + else if(target.species.has_organ[O.organ_tag]) + + if(O.damage > (O.max_damage * 0.75)) + user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." + return 2 + + if(!target.internal_organs_by_name[O.organ_tag]) + organ_missing = 1 + else + user << "\red \The [target] already has [o_a][O.organ_tag]." + return 2 + + if(O && affected.limb_name == O.parent_organ) + organ_compatible = 1 + else + user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.name]." + return 2 else - var/msg = "[user] pulls [target]'s flesh back into place with \the [tool]." - var/self_msg = "You pull [target]'s flesh back into place with \the [tool]." - user.visible_message(msg, self_msg) + user << "\red You're pretty sure [target.species.name] don't normally have [o_a][O.organ_tag]." + return 2 - return 1 + return ..() && organ_missing && organ_compatible + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ + "You start transplanting \the [tool] into [target]'s [affected.name].") + target.custom_pain("Someone's rooting around in your [affected.name]!",1) + ..() - return 0 + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ + "\blue You have transplanted \the [tool] into [target]'s [affected.name].") + user.drop_item(tool) + var/obj/item/organ/O = tool + if(istype(O)) + O.replaced(target,affected) + spread_germs_to_organ(O, user) -//todo set up fail steps + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ + "\red Your hand slips, damaging \the [tool]!") + var/obj/item/organ/I = tool + if(istype(I)) + I.take_damage(rand(3,5),0) + +/datum/surgery_step/internal/attach_organ + allowed_tools = list( + /obj/item/weapon/FixOVein = 100, \ + /obj/item/stack/cable_coil = 75 + ) + + min_duration = 100 + max_duration = 120 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!..()) + return 0 + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if(!istype(affected)) + return 0 + + target.op_stage.current_organ = null + target.op_stage.organ_ref = null + + var/list/removable_organs = list() + for(var/organ in affected.internal_organs) + var/obj/item/organ/I = organ + if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) + removable_organs[I.organ_tag] = I + + var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs + if(!organ_to_replace) + return 0 + + target.op_stage.current_organ = organ_to_replace + target.op_stage.organ_ref = removable_organs[organ_to_replace] + return ..() + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].") + target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ + "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") + + var/obj/item/organ/I = target.op_stage.organ_ref + if(I && istype(I)) + I.status &= ~ORGAN_CUT_AWAY + spread_germs_to_organ(I, user) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 20) ////////////////////////////////////////////////////////////////// // HEART SURGERY // @@ -294,12 +452,12 @@ // /datum/surgery_step/ribcage/heart/cut // allowed_tools = list( // /obj/item/weapon/scalpel = 100, \ -// /obj/item/weapon/kitchenknife = 75, \ +// /obj/item/weapon/kitchen/knife = 75, \ // /obj/item/weapon/shard = 50, \ // ) // min_duration = 30 // max_duration = 40 -// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) // return ..() && target.op_stage.ribcage == 2 \ No newline at end of file diff --git a/code/modules/surgery/organs_internal2.dm b/code/modules/surgery/organs_internal2.dm new file mode 100644 index 00000000000..2af5a44e88c --- /dev/null +++ b/code/modules/surgery/organs_internal2.dm @@ -0,0 +1,305 @@ +/datum/surgery/organ_manipulation + name = "organ manipulation" + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, + /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + possible_locs = list("chest","head") + requires_organic_bodypart = 0 + disallowed_mob = (/mob/living/carbon/human/machine) + +/datum/surgery/organ_manipulation/soft + possible_locs = list("groin", "eyes", "mouth") + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + +/datum/surgery/organ_manipulation/boneless + possible_locs = list("chest","head","groin", "eyes", "mouth") + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + allowed_mob = list(/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) + disallowed_mob = list(/mob/living/carbon/human) + +/datum/surgery/organ_manipulation/alien + name = "alien organ manipulation" + possible_locs = list("chest", "head", "groin", "eyes", "mouth") + allowed_mob = list(/mob/living/carbon/alien/humanoid) + disallowed_mob = list(/mob/living/carbon/human) + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + + + +// Internal surgeries. +/datum/surgery_step/internal + priority = 2 + can_infect = 1 + blood_level = 1 + +/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + if (!hasorgans(target)) + return 0 + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && affected.open_enough_for_surgery() + + +////////////////////////////////////////////////////////////////// +// ALIEN EMBRYO SURGERY // +////////////////////////////////////////////////////////////////// +///datum/surgery/remove_xeno_baby +// steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) +// possible_locs = list("chest") +// disallowed_mob = (/mob/living/carbon/human/machine) +//this is all handled bia organ mainpulation as an On_find + +/datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/wirecutters = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 20 + ) + blood_level = 2 + + max_duration = 100 + +/datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/embryo = 0 + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + embryo = 1 + //break + + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" + +/datum/surgery_step/internal/remove_embryo/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." + var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your chest!",1) + ..() + +/datum/surgery_step/internal/remove_embryo/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", + "You rip the larva out of [target]'s ribcage!") + + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + user << "You found an unknown alien organism in [target]'s chest!" + if(prob(10)) + A.AttemptGrow() + + A.remove(target) + A.loc = get_turf(target) + + return 1 + +/datum/surgery_step/internal/remove_embryo/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + if (!hasorgans(target)) + return + + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + if(prob(50)) + A.AttemptGrow(0) + user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") + else + target.adjustOxyLoss(30) + user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + + return 0 + + +/datum/surgery_step/internal/manipulate_organs + name = "manipulate organs" + allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) + var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/kitchen/utensil/fork = 55) + var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20) + //Finish is just so you can close up after you do other things. + var/implements_finsh = list(/obj/item/weapon/scalpel/manager = 120,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75) + var/current_type + var/obj/item/organ/internal/I = null + var/obj/item/organ/external/affected = null + max_duration = 90 + +/datum/surgery_step/internal/manipulate_organs/New() + ..() + allowed_tools = allowed_tools + implements_extract + implements_mend + implements_finsh + + + + +/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + I = null + affected = target.get_organ(target_zone) + if(is_int_organ(tool)) + current_type = "insert" + I = tool + if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) + user << "There is no room for [I] in [target]'s [parse_zone(target_zone)]!" + return -1 + + if(I.damage > (I.max_damage * 0.75)) + user << " \The [I] is in no state to be transplanted." + return -1 + + if(target.get_int_organ(I)) + user << "\red \The [target] already has [I]." + return -1 + + user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ + "You start transplanting \the [tool] into [target]'s [affected.name].") + target.custom_pain("Someone's rooting around in your [affected.name]!",1) + + else if(implement_type in implements_finsh) + //same as surgery step /datum/surgery_step/open_encased/close/ + current_type = "finish" + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(affected.encased) + var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + else + var/msg = "[user] starts pulling [target]'s skin back into place with \the [tool]." + var/self_msg = "You start pulling [target]'s skin back into place with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + else if(implement_type in implements_extract) + current_type = "extract" + var/list/organs = target.get_organs_zone(target_zone) + if(!organs.len) + user << "There are no removeable organs in [target]'s [parse_zone(target_zone)]!" + return -1 + else + for(var/obj/item/organ/internal/O in organs) + O.on_find(user) + organs -= O + organs[O.name] = O + + I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs + if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) + I = organs[I] + if(!I) return -1 + user.visible_message("[user] starts to separate [target]'s [I] with \the [tool].", \ + "You start to separate [target]'s [I] with \the [tool] for removal." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + else + return -1 + + else if(implement_type in implements_mend) + //todo Change message, make it heal the organs... + current_type = "mend" + var/tool_name = "\the [tool]" + if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) + tool_name = "regenerative membrane" + else if (istype(tool, /obj/item/stack/medical/bruise_pack)) + tool_name = "the bandaid" + else if (istype(tool, /obj/item/stack/nanopaste)) + tool_name = "\the [tool]" //what else do you call nanopaste medically? + + if(!hasorgans(target)) + user << "They do not have organs to mend!" + return + for(var/obj/item/organ/internal/I in affected.internal_organs) + if(I && I.damage > 0) + if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) + if(!I.sterile) + spread_germs_to_organ(I, user) + user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ + "You start treating damage to [target]'s [I.name] with [tool_name]." ) + else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) + user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ + "You start treating damage to [target]'s [I.name] with [tool_name]." ) + + user << "No organs appear to be damaged." + return -1 + target.custom_pain("The pain in your [affected.name] is living hell!",1) + + else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) + user << "[tool] was biten by someone! It's too damaged to use!" + return -1 + ..() + +/datum/surgery_step/internal/manipulate_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(current_type == "mend") + var/tool_name = "\the [tool]" + if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) + tool_name = "regenerative membrane" + if (istype(tool, /obj/item/stack/medical/bruise_pack)) + tool_name = "the bandaid" + + if (!hasorgans(target)) + return + for(var/obj/item/organ/internal/I in affected.internal_organs) + if(I) + I.surgeryize() + if(I && I.damage > 0) + if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) + user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ + "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) + I.damage = 0 + else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste)) + user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ + "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) + I.damage = 0 + //return 1 + else if(current_type == "insert") + I = tool + user.drop_item() + I.insert(target) + spread_germs_to_organ(I, user) + user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ + "\blue You have transplanted \the [tool] into [target]'s [affected.name].") + + I.status &= ~ORGAN_CUT_AWAY + + else if(current_type == "extract") + if(I && I.owner == target) + user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ + "\blue You have separated and extracted [target]'s [I] with \the [tool].") + + add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") + spread_germs_to_organ(I, user) + I.status |= ORGAN_CUT_AWAY + I.remove(target) + I.loc = get_turf(target) + else + user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", + "You can't extract anything from [target]'s [parse_zone(target_zone)]!") + else if(current_type == "finish") + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(affected.encased) + var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + affected.open = 2.5 + else + var/msg = "[user] pulls [target]'s flesh back into place with \the [tool]." + var/self_msg = "You pull [target]'s flesh back into place with \the [tool]." + user.visible_message(msg, self_msg) + + return 1 + + + return 0 + +//todo set up fail steps + +////////////////////////////////////////////////////////////////// +// HEART SURGERY // +////////////////////////////////////////////////////////////////// +// To be finished after some tests. +// /datum/surgery_step/ribcage/heart/cut +// allowed_tools = list( +// /obj/item/weapon/scalpel = 100, \ +// /obj/item/weapon/kitchenknife = 75, \ +// /obj/item/weapon/shard = 50, \ +// ) + +// min_duration = 30 +// max_duration = 40 + +// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +// return ..() && target.op_stage.ribcage == 2 \ No newline at end of file From 3a39d9d99dbfb6f3dcc64140195b94e001c67a55 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 26 Jan 2016 22:46:03 -0500 Subject: [PATCH 033/442] end conflict fixes did i SERIOUSLY upload my comparison file last time? FUCK --- .../MetaStation/MetaStation.v41A.II.dmm | 4 +- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- code/game/machinery/rechargestation.dm | 4 +- code/game/objects/items.dm | 2 +- code/modules/surgery/organs_internal.dm | 582 +++++++----------- code/modules/surgery/organs_internal2.dm | 305 --------- 6 files changed, 218 insertions(+), 681 deletions(-) delete mode 100644 code/modules/surgery/organs_internal2.dm diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index c5efb941401..5485e09eace 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -383,7 +383,7 @@ "ahs" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aht" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahu" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahw" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport) "ahy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) @@ -7701,7 +7701,7 @@ "cSe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSf" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSg" = (/obj/machinery/door/morgue{name = "Relic Closet"; req_access_txt = "22"},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) -"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) +"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/internal/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) "cSi" = (/obj/machinery/door/airlock/maintenance{name = "Chapel Maintenance Access "; req_access_txt = "0"; req_one_access_txt = "12;27"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cSj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Departure Lounge - Port Fore"; dir = 4; network = list("SS13")},/obj/structure/flora/kirbyplants{icon_state = "plant-24"; layer = 4.1; tag = "icon-plant-24"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 65c81b88470..f9f9a55ce62 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -8472,7 +8472,7 @@ "dha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhe" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "dhg" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index d6daf0f4516..bac66c13cad 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -115,7 +115,7 @@ R.cell.charge = min(R.cell.charge + recharge_speed, R.cell.maxcharge) else if(istype(occupant, /mob/living/carbon/human)) var/mob/living/carbon/human/H = occupant - if(!isnull(H.internal_organs_by_name["cell"]) && H.nutrition < 450) + if(H.get_int_organ(/obj/item/organ/internal/cell) && H.nutrition < 450) H.nutrition = min(H.nutrition+recharge_speed_nutrition, 450) if(repairs) H.heal_overall_damage(repairs, repairs, 0, 1) @@ -242,7 +242,7 @@ if(occupant) H << "The cell is already occupied!" return - if(isnull(H.internal_organs_by_name["cell"])) + if(!H.get_int_organ(/obj/item/organ/internal/cell)) return can_accept_user = 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index bd0c2a4fc5a..15d322aeaba 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -419,7 +419,7 @@ add_logs(M, user, "attacked", "[src.name]", "(INTENT: [uppertext(user.a_intent)])") if(istype(H)) - var/obj/item/organ/eyes/eyes = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) if(!eyes) // should still get stabbed in the head var/obj/item/organ/external/head/head = H.organs_by_name["head"] head.take_damage(rand(10,14), 1) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index ca8cf5eefe2..8074bf047b9 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -1,10 +1,37 @@ +/datum/surgery/organ_manipulation + name = "organ manipulation" + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, + /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + possible_locs = list("chest","head") + requires_organic_bodypart = 0 + disallowed_mob = (/mob/living/carbon/human/machine) + +/datum/surgery/organ_manipulation/soft + possible_locs = list("groin", "eyes", "mouth") + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + +/datum/surgery/organ_manipulation/boneless + possible_locs = list("chest","head","groin", "eyes", "mouth") + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + allowed_mob = list(/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) + disallowed_mob = list(/mob/living/carbon/human) + +/datum/surgery/organ_manipulation/alien + name = "alien organ manipulation" + possible_locs = list("chest", "head", "groin", "eyes", "mouth") + allowed_mob = list(/mob/living/carbon/alien/humanoid) + disallowed_mob = list(/mob/living/carbon/human) + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + + + // Internal surgeries. /datum/surgery_step/internal priority = 2 can_infect = 1 blood_level = 1 -/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return 0 @@ -12,54 +39,17 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected && affected.open_enough_for_surgery() -////////////////////////////////////////////////////////////////// -// Dethrall Shadowling // -////////////////////////////////////////////////////////////////// -/datum/surgery_step/internal/dethrall - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - - min_duration = 120 - max_duration = 120 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain") - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] begins looking around in [target]'s [braincase].", "You begin looking for foreign influences on [target]'s brain...") - user << "You locate a small, pulsing black tumor on the side of [target]'s brain and begin to remove it." - target << "A small part of your [braincase] pulses with agony as the light impacts it." - user.visible_message("[user] begins removing something from [target]'s [braincase].", \ - "You begin carefully extracting the tumor...") - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ - "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") - ticker.mode.remove_thrall(target.mind,0) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - if(prob(50)) - user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ - "You fumble and tear out [target]'s tumor!") - target.adjustBrainLoss(110) // This is so you can't just defib'n go - ticker.mode.remove_thrall(target.mind,1) - else - user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") ////////////////////////////////////////////////////////////////// // ALIEN EMBRYO SURGERY // ////////////////////////////////////////////////////////////////// -/datum/surgery_step/internal/remove_embryo +///datum/surgery/remove_xeno_baby +// steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) +// possible_locs = list("chest") +// disallowed_mob = (/mob/living/carbon/human/machine) +//this is all handled bia organ mainpulation as an On_find + +/datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. allowed_tools = list( /obj/item/weapon/hemostat = 100, \ /obj/item/weapon/wirecutters = 75, \ @@ -67,83 +57,172 @@ ) blood_level = 2 - min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/embryo = 0 - for(var/obj/item/alien_embryo/A in target) - embryo = 1 - break +/datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/embryo = 0 + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + embryo = 1 + //break - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/internal/remove_embryo/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." user.visible_message(msg, self_msg) target.custom_pain("Something hurts horribly in your chest!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") +/datum/surgery_step/internal/remove_embryo/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", + "You rip the larva out of [target]'s ribcage!") - for(var/obj/item/alien_embryo/A in target) - A.loc = A.loc.loc + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + user << "You found an unknown alien organism in [target]'s chest!" + if(prob(10)) + A.AttemptGrow() + + A.remove(target) + A.loc = get_turf(target) + + return 1 + +/datum/surgery_step/internal/remove_embryo/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + if (!hasorgans(target)) + return + + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + if(prob(50)) + A.AttemptGrow(0) + user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") + else + target.adjustOxyLoss(30) + user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + + return 0 -////////////////////////////////////////////////////////////////// -// CHEST INTERNAL ORGAN SURGERY // -////////////////////////////////////////////////////////////////// -/datum/surgery_step/internal/fix_organ - allowed_tools = list( - /obj/item/stack/medical/advanced/bruise_pack= 100, \ - /obj/item/stack/medical/bruise_pack = 20 - ) - - min_duration = 70 +/datum/surgery_step/internal/manipulate_organs + name = "manipulate organs" + allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) + var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/kitchen/utensil/fork = 55) + var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20) + //Finish is just so you can close up after you do other things. + var/implements_finsh = list(/obj/item/weapon/scalpel/manager = 120,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75) + var/current_type + var/obj/item/organ/internal/I = null + var/obj/item/organ/external/affected = null max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/internal/manipulate_organs/New() + ..() + allowed_tools = allowed_tools + implements_extract + implements_mend + implements_finsh - if (!hasorgans(target)) - return + + + +/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + I = null + affected = target.get_organ(target_zone) + if(is_int_organ(tool)) + current_type = "insert" + I = tool + if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) + user << "There is no room for [I] in [target]'s [parse_zone(target_zone)]!" + return -1 + + if(I.damage > (I.max_damage * 0.75)) + user << " \The [I] is in no state to be transplanted." + return -1 + + if(target.get_int_organ(I)) + user << "\red \The [target] already has [I]." + return -1 + + user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ + "You start transplanting \the [tool] into [target]'s [affected.name].") + target.custom_pain("Someone's rooting around in your [affected.name]!",1) + + else if(implement_type in implements_finsh) + //same as surgery step /datum/surgery_step/open_encased/close/ + current_type = "finish" var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) - return - var/is_organ_damaged = 0 - for(var/obj/item/organ/I in affected.internal_organs) - if(I.damage > 0 && I.robotic < 2) - is_organ_damaged = 1 - break - return ..() && is_organ_damaged + if(affected.encased) + var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + else + var/msg = "[user] starts pulling [target]'s skin back into place with \the [tool]." + var/self_msg = "You start pulling [target]'s skin back into place with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + else if(implement_type in implements_extract) + current_type = "extract" + var/list/organs = target.get_organs_zone(target_zone) + if(!organs.len) + user << "There are no removeable organs in [target]'s [parse_zone(target_zone)]!" + return -1 + else + for(var/obj/item/organ/internal/O in organs) + O.on_find(user) + organs -= O + organs[O.name] = O - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs + if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) + I = organs[I] + if(!I) return -1 + user.visible_message("[user] starts to separate [target]'s [I] with \the [tool].", \ + "You start to separate [target]'s [I] with \the [tool] for removal." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + else + return -1 + + else if(implement_type in implements_mend) + //todo Change message, make it heal the organs... + current_type = "mend" var/tool_name = "\the [tool]" if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) tool_name = "regenerative membrane" else if (istype(tool, /obj/item/stack/medical/bruise_pack)) tool_name = "the bandaid" + else if (istype(tool, /obj/item/stack/nanopaste)) + tool_name = "\the [tool]" //what else do you call nanopaste medically? - if (!hasorgans(target)) + if(!hasorgans(target)) + user << "They do not have organs to mend!" return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) - if(I.robotic < 2) - spread_germs_to_organ(I, user) + if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) + if(!I.sterile) + spread_germs_to_organ(I, user) + user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ + "You start treating damage to [target]'s [I.name] with [tool_name]." ) + else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) + user << "No organs appear to be damaged." + return -1 target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) + user << "[tool] was biten by someone! It's too damaged to use!" + return -1 + ..() + +/datum/surgery_step/internal/manipulate_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(current_type == "mend") var/tool_name = "\the [tool]" if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) tool_name = "regenerative membrane" @@ -152,298 +231,61 @@ if (!hasorgans(target)) return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I) I.surgeryize() if(I && I.damage > 0) - if(I.robotic < 2) + if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") - var/dam_amt = 2 - - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - target.adjustToxLoss(5) - - else if (istype(tool, /obj/item/stack/medical/bruise_pack)) - dam_amt = 5 - target.adjustToxLoss(10) - affected.createwound(CUT, 5) - - for(var/obj/item/organ/I in affected.internal_organs) - if(I && I.damage > 0) - I.take_damage(dam_amt,0) - -/datum/surgery_step/internal/detatch_organ - - allowed_tools = list( - /obj/item/weapon/scalpel = 100, \ - /obj/item/weapon/kitchen/knife = 75, \ - /obj/item/weapon/shard = 50, \ - ) - - min_duration = 90 - max_duration = 110 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!..()) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!(affected && !(affected.status & ORGAN_ROBOT))) - return 0 - - target.op_stage.current_organ = null - target.op_stage.organ_ref = null - - var/list/attached_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ - if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - attached_organs[I.organ_tag] = I - - var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs - if(!organ_to_remove) - return 0 - - target.op_stage.current_organ = organ_to_remove - target.op_stage.organ_ref = attached_organs[organ_to_remove] - - return ..() && organ_to_remove - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") - - var/obj/item/organ/I = target.op_stage.organ_ref - if(I && istype(I)) - spread_germs_to_organ(I, user) - I.status |= ORGAN_CUT_AWAY - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, rand(30,50), 1) - -/datum/surgery_step/internal/remove_organ - - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - - min_duration = 60 - max_duration = 80 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!..()) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!istype(affected)) - return 0 - - target.op_stage.current_organ = null - target.op_stage.organ_ref = null - - var/list/removable_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ - if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - removable_organs[I.organ_tag] = I - - var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs - if(!organ_to_remove) - return 0 - - target.op_stage.current_organ = organ_to_remove - target.op_stage.organ_ref = removable_organs[organ_to_remove] - return ..() - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start removing [target]'s [target.op_stage.current_organ] with \the [tool].") - target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "\blue You have removed [target]'s [target.op_stage.current_organ] with \the [tool].") - - // Extract the organ! - if(target.op_stage.current_organ) - var/obj/item/organ/O = target.op_stage.organ_ref - if(O && istype(O)) - spread_germs_to_organ(O, user) - O.removed(user) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 20) - -/datum/surgery_step/internal/replace_organ - allowed_tools = list( - /obj/item/organ = 100 - ) - - min_duration = 60 - max_duration = 80 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - var/obj/item/organ/O = tool - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) return - var/organ_compatible - var/organ_missing - - if(!istype(O)) - return 0 - - if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT)) - user << "You cannot install a naked organ into a robotic body." - return 2 - - if(!target.species) - user << "\red You have no idea what species this person is. Report this on the bug tracker." - return 2 - - var/o_is = (O.gender == PLURAL) ? "are" : "is" - var/o_a = (O.gender == PLURAL) ? "" : "a " - var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't" - - if(O.organ_tag == "limb") - return 0 - else if(target.species.has_organ[O.organ_tag]) - - if(O.damage > (O.max_damage * 0.75)) - user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." - return 2 - - if(!target.internal_organs_by_name[O.organ_tag]) - organ_missing = 1 - else - user << "\red \The [target] already has [o_a][O.organ_tag]." - return 2 - - if(O && affected.limb_name == O.parent_organ) - organ_compatible = 1 - else - user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.name]." - return 2 - else - user << "\red You're pretty sure [target.species.name] don't normally have [o_a][O.organ_tag]." - return 2 - - return ..() && organ_missing && organ_compatible - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ - "You start transplanting \the [tool] into [target]'s [affected.name].") - target.custom_pain("Someone's rooting around in your [affected.name]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) + else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste)) + user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ + "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) + I.damage = 0 + //return 1 + else if(current_type == "insert") + I = tool + user.drop_item() + I.insert(target) + spread_germs_to_organ(I, user) user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ "\blue You have transplanted \the [tool] into [target]'s [affected.name].") - user.drop_item(tool) - var/obj/item/organ/O = tool - if(istype(O)) - O.replaced(target,affected) - spread_germs_to_organ(O, user) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ - "\red Your hand slips, damaging \the [tool]!") - var/obj/item/organ/I = tool - if(istype(I)) - I.take_damage(rand(3,5),0) + I.status &= ~ORGAN_CUT_AWAY -/datum/surgery_step/internal/attach_organ - allowed_tools = list( - /obj/item/weapon/FixOVein = 100, \ - /obj/item/stack/cable_coil = 75 - ) + else if(current_type == "extract") + if(I && I.owner == target) + user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ + "\blue You have separated and extracted [target]'s [I] with \the [tool].") - min_duration = 100 - max_duration = 120 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!..()) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!istype(affected)) - return 0 - - target.op_stage.current_organ = null - target.op_stage.organ_ref = null - - var/list/removable_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ - if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) - removable_organs[I.organ_tag] = I - - var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs - if(!organ_to_replace) - return 0 - - target.op_stage.current_organ = organ_to_replace - target.op_stage.organ_ref = removable_organs[organ_to_replace] - return ..() - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].") - target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - - var/obj/item/organ/I = target.op_stage.organ_ref - if(I && istype(I)) - I.status &= ~ORGAN_CUT_AWAY + add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") spread_germs_to_organ(I, user) + I.status |= ORGAN_CUT_AWAY + I.remove(target) + I.loc = get_turf(target) + else + user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", + "You can't extract anything from [target]'s [parse_zone(target_zone)]!") + else if(current_type == "finish") - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 20) + if(affected.encased) + var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + affected.open = 2.5 + else + var/msg = "[user] pulls [target]'s flesh back into place with \the [tool]." + var/self_msg = "You pull [target]'s flesh back into place with \the [tool]." + user.visible_message(msg, self_msg) + + return 1 + + + return 0 + +//todo set up fail steps ////////////////////////////////////////////////////////////////// // HEART SURGERY // @@ -459,5 +301,5 @@ // min_duration = 30 // max_duration = 40 -// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) // return ..() && target.op_stage.ribcage == 2 \ No newline at end of file diff --git a/code/modules/surgery/organs_internal2.dm b/code/modules/surgery/organs_internal2.dm deleted file mode 100644 index 2af5a44e88c..00000000000 --- a/code/modules/surgery/organs_internal2.dm +++ /dev/null @@ -1,305 +0,0 @@ -/datum/surgery/organ_manipulation - name = "organ manipulation" - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, - /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) - possible_locs = list("chest","head") - requires_organic_bodypart = 0 - disallowed_mob = (/mob/living/carbon/human/machine) - -/datum/surgery/organ_manipulation/soft - possible_locs = list("groin", "eyes", "mouth") - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - -/datum/surgery/organ_manipulation/boneless - possible_locs = list("chest","head","groin", "eyes", "mouth") - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - allowed_mob = list(/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) - disallowed_mob = list(/mob/living/carbon/human) - -/datum/surgery/organ_manipulation/alien - name = "alien organ manipulation" - possible_locs = list("chest", "head", "groin", "eyes", "mouth") - allowed_mob = list(/mob/living/carbon/alien/humanoid) - disallowed_mob = list(/mob/living/carbon/human) - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - - - -// Internal surgeries. -/datum/surgery_step/internal - priority = 2 - can_infect = 1 - blood_level = 1 - -/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!hasorgans(target)) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open_enough_for_surgery() - - -////////////////////////////////////////////////////////////////// -// ALIEN EMBRYO SURGERY // -////////////////////////////////////////////////////////////////// -///datum/surgery/remove_xeno_baby -// steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) -// possible_locs = list("chest") -// disallowed_mob = (/mob/living/carbon/human/machine) -//this is all handled bia organ mainpulation as an On_find - -/datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - blood_level = 2 - - max_duration = 100 - -/datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/embryo = 0 - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - embryo = 1 - //break - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" - -/datum/surgery_step/internal/remove_embryo/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." - var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your chest!",1) - ..() - -/datum/surgery_step/internal/remove_embryo/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") - - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - user << "You found an unknown alien organism in [target]'s chest!" - if(prob(10)) - A.AttemptGrow() - - A.remove(target) - A.loc = get_turf(target) - - return 1 - -/datum/surgery_step/internal/remove_embryo/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!hasorgans(target)) - return - - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - if(prob(50)) - A.AttemptGrow(0) - user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") - else - target.adjustOxyLoss(30) - user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") - - return 0 - - -/datum/surgery_step/internal/manipulate_organs - name = "manipulate organs" - allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) - var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/kitchen/utensil/fork = 55) - var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20) - //Finish is just so you can close up after you do other things. - var/implements_finsh = list(/obj/item/weapon/scalpel/manager = 120,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75) - var/current_type - var/obj/item/organ/internal/I = null - var/obj/item/organ/external/affected = null - max_duration = 90 - -/datum/surgery_step/internal/manipulate_organs/New() - ..() - allowed_tools = allowed_tools + implements_extract + implements_mend + implements_finsh - - - - -/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - I = null - affected = target.get_organ(target_zone) - if(is_int_organ(tool)) - current_type = "insert" - I = tool - if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) - user << "There is no room for [I] in [target]'s [parse_zone(target_zone)]!" - return -1 - - if(I.damage > (I.max_damage * 0.75)) - user << " \The [I] is in no state to be transplanted." - return -1 - - if(target.get_int_organ(I)) - user << "\red \The [target] already has [I]." - return -1 - - user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ - "You start transplanting \the [tool] into [target]'s [affected.name].") - target.custom_pain("Someone's rooting around in your [affected.name]!",1) - - else if(implement_type in implements_finsh) - //same as surgery step /datum/surgery_step/open_encased/close/ - current_type = "finish" - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected.encased) - var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) - else - var/msg = "[user] starts pulling [target]'s skin back into place with \the [tool]." - var/self_msg = "You start pulling [target]'s skin back into place with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - else if(implement_type in implements_extract) - current_type = "extract" - var/list/organs = target.get_organs_zone(target_zone) - if(!organs.len) - user << "There are no removeable organs in [target]'s [parse_zone(target_zone)]!" - return -1 - else - for(var/obj/item/organ/internal/O in organs) - O.on_find(user) - organs -= O - organs[O.name] = O - - I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs - if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) - I = organs[I] - if(!I) return -1 - user.visible_message("[user] starts to separate [target]'s [I] with \the [tool].", \ - "You start to separate [target]'s [I] with \the [tool] for removal." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - else - return -1 - - else if(implement_type in implements_mend) - //todo Change message, make it heal the organs... - current_type = "mend" - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - else if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - else if (istype(tool, /obj/item/stack/nanopaste)) - tool_name = "\the [tool]" //what else do you call nanopaste medically? - - if(!hasorgans(target)) - user << "They do not have organs to mend!" - return - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0) - if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) - if(!I.sterile) - spread_germs_to_organ(I, user) - user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ - "You start treating damage to [target]'s [I.name] with [tool_name]." ) - else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) - user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ - "You start treating damage to [target]'s [I.name] with [tool_name]." ) - - user << "No organs appear to be damaged." - return -1 - target.custom_pain("The pain in your [affected.name] is living hell!",1) - - else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) - user << "[tool] was biten by someone! It's too damaged to use!" - return -1 - ..() - -/datum/surgery_step/internal/manipulate_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(current_type == "mend") - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - - if (!hasorgans(target)) - return - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I) - I.surgeryize() - if(I && I.damage > 0) - if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) - user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ - "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) - I.damage = 0 - else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste)) - user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ - "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) - I.damage = 0 - //return 1 - else if(current_type == "insert") - I = tool - user.drop_item() - I.insert(target) - spread_germs_to_organ(I, user) - user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ - "\blue You have transplanted \the [tool] into [target]'s [affected.name].") - - I.status &= ~ORGAN_CUT_AWAY - - else if(current_type == "extract") - if(I && I.owner == target) - user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ - "\blue You have separated and extracted [target]'s [I] with \the [tool].") - - add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") - spread_germs_to_organ(I, user) - I.status |= ORGAN_CUT_AWAY - I.remove(target) - I.loc = get_turf(target) - else - user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", - "You can't extract anything from [target]'s [parse_zone(target_zone)]!") - else if(current_type == "finish") - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected.encased) - var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) - affected.open = 2.5 - else - var/msg = "[user] pulls [target]'s flesh back into place with \the [tool]." - var/self_msg = "You pull [target]'s flesh back into place with \the [tool]." - user.visible_message(msg, self_msg) - - return 1 - - - return 0 - -//todo set up fail steps - -////////////////////////////////////////////////////////////////// -// HEART SURGERY // -////////////////////////////////////////////////////////////////// -// To be finished after some tests. -// /datum/surgery_step/ribcage/heart/cut -// allowed_tools = list( -// /obj/item/weapon/scalpel = 100, \ -// /obj/item/weapon/kitchenknife = 75, \ -// /obj/item/weapon/shard = 50, \ -// ) - -// min_duration = 30 -// max_duration = 40 - -// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) -// return ..() && target.op_stage.ribcage == 2 \ No newline at end of file From 72eae0ce18c8f4c219b2dcb6782e7e85b99b8ac5 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Wed, 27 Jan 2016 00:55:10 -0800 Subject: [PATCH 034/442] Adds a brain scan mode to the cloning system --- code/game/machinery/computer/cloning.dm | 36 +++++++++++++++---- .../crazylemon-cloning_brain_scan.yml | 4 +++ nano/templates/cloning_console.tmpl | 10 ++++-- 3 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 html/changelogs/crazylemon-cloning_brain_scan.yml diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index a04ecb252b0..d9bb59541ad 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -135,6 +135,7 @@ data["loading"] = loading data["autoprocess"] = autoprocess + data["can_brainscan"] = (scanner && scanner.scan_level > 3) // You'll need tier 4s for this if(scanner && pods.len && ((scanner.scan_level > 2) || canpodautoprocess)) data["autoallowed"] = 1 @@ -184,13 +185,24 @@ if(loading) return - if ((href_list["scan"]) && (!isnull(src.scanner))) + if (href_list["scan"] && scanner && scanner.occupant) scantemp = "Scanner ready." loading = 1 spawn(20) - src.scan_mob(src.scanner.occupant) + scan_mob(scanner.occupant) + + loading = 0 + nanomanager.update_uis(src) + + if (href_list["scan_brain"] && scanner && scanner.occupant) + scantemp = "Scanner ready." + + loading = 1 + + spawn(20) + scan_mob(scanner.occupant, scan_brain = 1) loading = 0 nanomanager.update_uis(src) @@ -340,7 +352,7 @@ nanomanager.update_uis(src) return -/obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject as mob) +/obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject as mob, var/scan_brain = 0) if (stat & NOPOWER) return if (scanner.stat & (NOPOWER|BROKEN)) @@ -365,6 +377,10 @@ scantemp = "Error: Mental interface failure." nanomanager.update_uis(src) return + if (scan_brain && !("brain" in subject.internal_organs_by_name)) + scantemp = "Error: No brain found." + nanomanager.update_uis(src) + return if (!isnull(find_record(subject.ckey))) scantemp = "Subject already in database." nanomanager.update_uis(src) @@ -373,13 +389,19 @@ subject.dna.check_integrity() var/datum/dna2/record/R = new /datum/dna2/record() - R.dna=subject.dna R.ckey = subject.ckey - R.id= copytext(md5(subject.real_name), 2, 6) - R.name=R.dna.real_name + if(scan_brain) + var/obj/item/organ/B = subject.internal_organs_by_name["brain"] + R.dna=B.dna.Clone() + R.id= copytext(md5(B.dna.real_name), 2, 6) + R.name=B.dna.real_name + else + R.dna=subject.dna.Clone() + R.id= copytext(md5(subject.real_name), 2, 6) + R.name=R.dna.real_name + R.types=DNA2_BUF_UI|DNA2_BUF_UE|DNA2_BUF_SE R.languages=subject.languages - //Add an implant if needed var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) if (isnull(imp)) diff --git a/html/changelogs/crazylemon-cloning_brain_scan.yml b/html/changelogs/crazylemon-cloning_brain_scan.yml new file mode 100644 index 00000000000..8cf4ee4bca8 --- /dev/null +++ b/html/changelogs/crazylemon-cloning_brain_scan.yml @@ -0,0 +1,4 @@ +author: Crazylemon +delete-after: True +changes: + - rscadd: "A cloner with a tier-4 scanner will now be able to scan the brains of bodies within it, giving a chance for people who've otherwise lost their original corpse and identity." diff --git a/nano/templates/cloning_console.tmpl b/nano/templates/cloning_console.tmpl index ffb9502d181..26452b97f0b 100644 --- a/nano/templates/cloning_console.tmpl +++ b/nano/templates/cloning_console.tmpl @@ -56,11 +56,17 @@ Used In File(s): \code\game\machinery\computer\cloning.dm

    +
    + {{if data.can_brainscan}} +
    +
    Scan Brain
    +
    {{:helper.link('Scan', 'search', {'scan_brain' : 1}, !data.occupant ? 'disabled' : '')}}
    +
    + {{/if}}
    Scanner Lock
    {{if data.occupant}}{{:helper.link('Engaged', 'lock', {'lock' : 1}, data.locked ? 'selected' : '')}}{{else}} {{:helper.link('Engaged', 'lock', null, 'disabled')}}{{/if}}{{:helper.link('Disengaged', 'unlock', {'lock' : 1}, !data.locked ? 'selected' : '')}}
    -
    + {{/if}} {{if data.numberofpods}}

    Pods

    From cb8e34078db2e42b7c3e3f2173e4616249f8955a Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Wed, 27 Jan 2016 09:01:52 -0800 Subject: [PATCH 035/442] Brain-scan cloning no longer makes unclonable bodies --- code/game/machinery/computer/cloning.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index d9bb59541ad..a10b5fb04ed 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -196,7 +196,7 @@ loading = 0 nanomanager.update_uis(src) - if (href_list["scan_brain"] && scanner && scanner.occupant) + if (href_list["scan_brain"] && scanner && scanner.occupant && scanner.scan_level > 3) scantemp = "Scanner ready." loading = 1 @@ -390,9 +390,15 @@ var/datum/dna2/record/R = new /datum/dna2/record() R.ckey = subject.ckey + var/extra_info = "" if(scan_brain) var/obj/item/organ/B = subject.internal_organs_by_name["brain"] + B.dna.check_integrity() R.dna=B.dna.Clone() + var/datum/species/S = all_species[R.dna.species] + if(S.flags & NO_SCAN) + extra_info = "Proper genetic interface not found, defaulting to genetic data of the body." + R.dna.species = subject.species.name R.id= copytext(md5(B.dna.real_name), 2, 6) R.name=B.dna.real_name else @@ -416,7 +422,7 @@ R.mind = "\ref[subject.mind]" src.records += R - scantemp = "Subject successfully scanned." + scantemp = "Subject successfully scanned. " + extra_info nanomanager.update_uis(src) //Find a specific record by key. From 4d4600e00b210683391951dadf982b2775443acd Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 29 Jan 2016 04:38:22 -0800 Subject: [PATCH 036/442] hey i broke everything --- code/game/machinery/computer/cloning.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index a10b5fb04ed..7321843476c 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -361,6 +361,14 @@ scantemp = "Error: Unable to locate valid genetic data." nanomanager.update_uis(src) return + if("brain" in subject.internal_organs_by_name) + var/obj/item/organ/brain/Brn = subject.internal_organs_by_name["brain"] + if(istype(Brn)) + var/datum/species/S = all_species[Brn.dna.species] // stepladder code wooooo + if(S.flags & NO_SCAN) + scantemp = "Error: Subject's brain is incompatible." + nanomanager.update_uis(src) + return if (subject.brain_op_stage == 4.0) scantemp = "Error: No signs of intelligence detected." nanomanager.update_uis(src) From c4d151ce34f1d076004749111c442cfce909ccbc Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 30 Jan 2016 21:37:55 -0500 Subject: [PATCH 037/442] you buy organ, yaya? Is fresh. --- .../mob/living/carbon/human/species/apollo.dm | 1 + .../living/carbon/human/species/species.dm | 2 +- .../living/carbon/human/species/station.dm | 2 +- code/modules/surgery/bones.dm | 20 ++++-- code/modules/surgery/generic.dm | 2 +- code/modules/surgery/helpers.dm | 7 +- code/modules/surgery/implant.dm | 6 +- code/modules/surgery/limb_reattach.dm | 6 +- .../surgery/organs/augments_internal.dm | 2 + code/modules/surgery/organs/organ.dm | 2 +- .../surgery/organs/subtypes/machine.dm | 43 +++++++++++ code/modules/surgery/organs_internal.dm | 72 ++++++++++++++++++- code/modules/surgery/robotics.dm | 11 +++ code/modules/surgery/surgery.dm | 6 +- 14 files changed, 163 insertions(+), 19 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm index e3617463aa4..b36ba8d8ac5 100644 --- a/code/modules/mob/living/carbon/human/species/apollo.dm +++ b/code/modules/mob/living/carbon/human/species/apollo.dm @@ -103,6 +103,7 @@ "strange crystal" = /obj/item/organ/internal/nucleation/strange_crystal, "resonant crystal" = /obj/item/organ/internal/nucleation/resonant_crystal ) + vision_organ = /obj/item/organ/internal/eyes/luminescent_crystal /datum/species/nucleation/handle_post_spawn(var/mob/living/carbon/human/H) H.light_color = "#1C1C00" diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 39a93731acb..e532d0acc1d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -125,7 +125,7 @@ /datum/species/New() //If the species has eyes, they are the default vision organ if(!vision_organ && has_organ["eyes"]) - vision_organ = "eyes" + vision_organ = /obj/item/organ/internal/eyes unarmed = new unarmed_type() diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 453d0f0c4f3..631e78f3234 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -512,7 +512,7 @@ "optics" = /obj/item/organ/internal/optical_sensor ) - vision_organ = "optics" + vision_organ = /obj/item/organ/internal/optical_sensor has_limbs = list( "chest" = list("path" = /obj/item/organ/external/chest/ipc), "groin" = list("path" = /obj/item/organ/external/groin/ipc), diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index c26689a9675..fff50be4376 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -7,12 +7,25 @@ name = "bone repair" steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("chest","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") + disallowed_mob = list(/mob/living/carbon/human/machine,/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) /datum/surgery/bone_repair/skull name = "bone repair" steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("head") + disallowed_mob = list(/mob/living/carbon/human/machine,/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) + +/datum/surgery/bonerepair/can_start(mob/user, mob/living/carbon/target) + if(istype(target,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + if(affected.status & ORGAN_ROBOT) + return 0 + if(!(affected.encased)) + return 0 + return 1 + //surgery steps /datum/surgery_step/glue_bone @@ -82,10 +95,9 @@ affected.stage = 2 return 1 else - user.visible_message("\blue [user] sets the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].", \ - "\blue You set the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].") - affected.fracture()//can i remove this please? - return 0 + user.visible_message("\blue [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \ + "\blue You set the bone in [target]'s [affected.name] in place with \the [tool].") + return 1 /datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index fd49360815f..a8c24c4e843 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -251,7 +251,7 @@ user.visible_message("\blue [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ "\blue You amputate [target]'s [affected.name] with \the [tool].") - add_logs(user,target, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]") + add_logs(target,user ,"surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]") affected.droplimb(1,DROPLIMB_EDGE) return 1 diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 0871c8327ea..33bc4bda768 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -6,10 +6,12 @@ if(istype(M, /mob/living/carbon/human)) H = M affecting = H.get_organ(check_zone(selected_zone)) + else if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime)) + H = M + affecting = selected_zone if(can_operate(H)) //if they're prone or a slime var/datum/surgery/current_surgery - world << "line 15" for(var/datum/surgery/S in M.surgeries) if(S.location == selected_zone) @@ -33,9 +35,8 @@ break if(override) - if(I == /obj/item/robot_parts) + if(istype(I,/obj/item/robot_parts)) var/datum/surgery/S = available_surgeries["robotic limb attachment"] - world << "[S]" if(S) var/datum/surgery/procedure = new S.type if(procedure) diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 4cd06a68402..ec40af5b60a 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -143,7 +143,7 @@ if(tool) user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) - else + else if(IC) user.visible_message("[user] checks for items in [target]'s [target_zone].", "You check for items in [target]'s [target_zone]...") target.custom_pain("The pain in your chest is living hell!",1) ..() @@ -155,6 +155,10 @@ user << "Central command would kill you if you implanted the disk into someone." return 0//fail + if(istype(tool,/obj/item/organ)) + user << "This isn't the type of surgery for that!" + return 0//fail + if(tool) user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index bd11f11db1e..29cc6a28f2c 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -170,9 +170,13 @@ var/new_limb_type = organ_data["path"] var/obj/item/organ/external/new_limb = new new_limb_type(target) new_limb.robotize(L.model_info) + new_limb.replaced(target) + new_limb.status &= ~ORGAN_DESTROYED + if(new_limb.children) + for(var/obj/item/organ/external/C in new_limb.children) + C.status &= ~ORGAN_DESTROYED if(L.sabotaged) new_limb.sabotaged = 1 - target.update_body() target.updatehealth() target.UpdateDamageIcon() diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 35e5560e4d3..b6450f8257a 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -166,6 +166,8 @@ datumvars//note i am putting External in robolimbs. origin_tech = "materials=5;programming=3;biotech=4" /obj/item/organ/internal/cyberimp/chest/nutriment/on_life() + if(!owner) + return if(synthesizing) return if(owner.stat == DEAD) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 0d6942d3b73..f1a5497a93c 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -5,7 +5,7 @@ var/list/organ_cache = list() icon = 'icons/obj/surgery.dmi' var/dead_icon var/mob/living/carbon/human/owner = null - var/status = 0 + var/status = ORGAN_ORGANIC var/vital //Lose a vital limb, die immediately. var/damage = 0 // amount of damage to the organ diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index 59b1f98b74a..c2a750cb905 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -5,6 +5,7 @@ max_damage = 50 //made same as arm, since it is not vital min_broken_damage = 30 encased = null + status = ORGAN_ROBOT /obj/item/organ/external/head/ipc/New() robotize("Morpheus Cyberkinetics") @@ -12,43 +13,82 @@ /obj/item/organ/external/chest/ipc encased = null + status = ORGAN_ROBOT /obj/item/organ/external/chest/ipc/New() robotize("Morpheus Cyberkinetics") ..() +/obj/item/organ/external/groin/ipc + encased = null + status = ORGAN_ROBOT + /obj/item/organ/external/groin/ipc/New() robotize("Morpheus Cyberkinetics") ..() +/obj/item/organ/external/arm/ipc + encased = null + status = ORGAN_ROBOT + /obj/item/organ/external/arm/ipc/New() robotize("Morpheus Cyberkinetics") ..() +/obj/item/organ/external/arm/right/ipc + encased = null + status = ORGAN_ROBOT + /obj/item/organ/external/arm/right/ipc/New() robotize("Morpheus Cyberkinetics") ..() +/obj/item/organ/external/leg/ipc + encased = null + status = ORGAN_ROBOT /obj/item/organ/external/leg/ipc/New() robotize("Morpheus Cyberkinetics") ..() +/obj/item/organ/external/leg/right/ipc + encased = null + status = ORGAN_ROBOT + + /obj/item/organ/external/leg/right/ipc/New() robotize("Morpheus Cyberkinetics") ..() +/obj/item/organ/external/foot/ipc + encased = null + status = ORGAN_ROBOT + + /obj/item/organ/external/foot/ipc/New() robotize("Morpheus Cyberkinetics") ..() +/obj/item/organ/external/foot/right/ipc + encased = null + status = ORGAN_ROBOT + + /obj/item/organ/external/foot/right/ipc/New() robotize("Morpheus Cyberkinetics") ..() +/obj/item/organ/external/hand/ipc + encased = null + status = ORGAN_ROBOT + /obj/item/organ/external/hand/ipc/New() robotize("Morpheus Cyberkinetics") ..() +/obj/item/organ/external/hand/right/ipc + encased = null + status = ORGAN_ROBOT + /obj/item/organ/external/hand/right/ipc/New() robotize("Morpheus Cyberkinetics") ..() @@ -62,6 +102,7 @@ parent_organ = "chest" slot = "heart" vital = 1 + status = ORGAN_ROBOT /obj/item/organ/internal/cell/New() robotize() @@ -81,6 +122,7 @@ icon = 'icons/obj/robot_component.dmi' icon_state = "camera" slot = "eyes" + status = ORGAN_ROBOT // dead_icon = "camera_broken" /obj/item/organ/internal/optical_sensor/New() @@ -95,6 +137,7 @@ vital = 1 max_damage = 200 slot = "brain" + status = ORGAN_ROBOT var/obj/item/device/mmi/stored_mmi /obj/item/organ/internal/brain/mmi_holder/proc/update_from_mmi() diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 8074bf047b9..389f47dd65e 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -4,7 +4,7 @@ /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("chest","head") requires_organic_bodypart = 0 - disallowed_mob = (/mob/living/carbon/human/machine) + disallowed_mob = list(/mob/living/carbon/human/machine,/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) /datum/surgery/organ_manipulation/soft possible_locs = list("groin", "eyes", "mouth") @@ -24,6 +24,13 @@ steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) +/datum/surgery/organ_manipulation/can_start(mob/user, mob/living/carbon/target) + if(istype(target,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + if(affected.status & ORGAN_ROBOT) + return 0 + return 1 // Internal surgeries. /datum/surgery_step/internal @@ -204,7 +211,7 @@ for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) - if(!I.sterile) + if(!(I.sterile)) spread_germs_to_organ(I, user) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) @@ -228,6 +235,8 @@ tool_name = "regenerative membrane" if (istype(tool, /obj/item/stack/medical/bruise_pack)) tool_name = "the bandaid" + if (istype(tool, /obj/item/stack/nanopaste)) + tool_name = "\the [tool]" //what else do you call nanopaste medically? if (!hasorgans(target)) return @@ -285,7 +294,64 @@ return 0 -//todo set up fail steps +/datum/surgery_step/internal/manipulate_organs/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(current_type == "mend") + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") + var/dam_amt = 2 + + if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) + target.adjustToxLoss(5) + + else if (istype(tool, /obj/item/stack/medical/bruise_pack) || istype(tool, /obj/item/stack/nanopaste)) + dam_amt = 5 + target.adjustToxLoss(10) + affected.createwound(CUT, 5) + + for(var/obj/item/organ/internal/I in affected.internal_organs) + if(I && I.damage > 0 && !(I.tough)) + I.take_damage(dam_amt,0) + + return 0 + else if(current_type == "insert") + + user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ + "\red Your hand slips, damaging \the [tool]!") + var/obj/item/organ/internal/I = tool + if(istype(I) &&!(I.tough)) + I.take_damage(rand(3,5),0) + return 0 + + + else if(current_type == "extract") + if(I && I.owner == target) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 20) + else + user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", + "You can't extract anything from [target]'s [parse_zone(target_zone)]!") + return 0 + else if(current_type == "finish") + if(affected.encased) + var/msg = "\red [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!" + var/self_msg = "\red Your hand slips, bending [target]'s [affected.encased] the wrong way!" + user.visible_message(msg, self_msg) + affected.fracture() + else + var/msg = "\red [user]'s hand slips, tearing the skin!" + var/self_msg = "\red Your hand slips, tearing skin!" + user.visible_message(msg, self_msg) + affected.createwound(BRUISE, 20) + return 0 + + + return 0 ////////////////////////////////////////////////////////////////// // HEART SURGERY // diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index cc3a6abeafb..0d10998e706 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -19,6 +19,14 @@ allowed_mob = list(/mob/living/carbon/human/machine) disallowed_mob = list(/mob/living/carbon/human) +/datum/surgery/cybernetic_repair/can_start(mob/user, mob/living/carbon/target) + + if(istype(target,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + if(affected.status & ORGAN_ORGANIC) + return 0 + return 1 //to do, moar surgerys or condense down ala mainpulate organs. /datum/surgery_step/robotics @@ -49,6 +57,7 @@ return 1 /datum/surgery_step/robotics/external/unscrew_hatch + name = "unscrew hatch" allowed_tools = list( /obj/item/weapon/screwdriver = 100, /obj/item/weapon/coin = 50, @@ -82,6 +91,7 @@ return 0 /datum/surgery_step/robotics/external/open_hatch + name = "open hatch" allowed_tools = list( /obj/item/weapon/retractor = 100, /obj/item/weapon/crowbar = 100, @@ -115,6 +125,7 @@ return 0 /datum/surgery_step/robotics/external/close_hatch + name = "close hatch" allowed_tools = list( /obj/item/weapon/retractor = 100, /obj/item/weapon/crowbar = 100, diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 075c9199534..ba22b72ae18 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -1,6 +1,6 @@ ///Datum Surgery Helpers// /datum/surgery - var/name = "surgery" + var/name var/status = 1 var/list/steps = list() /* @@ -20,7 +20,7 @@ var/obj/item/organ/organ_ref //Operable body part var/current_organ = "organ" var/list/allowed_mob = list(/mob/living/carbon/human) - var/list/disallowed_mob = null + var/list/disallowed_mob = list(/mob/living/carbon/human/machine) /datum/surgery/proc/can_start(mob/user, mob/living/carbon/target) // if 0 surgery wont show up in list @@ -110,7 +110,7 @@ prob_chance *= get_location_modifier(target) if(prob_chance > 100)//if we are using a super tool - max_duration = max_duration - 50 //PLACEHOLDER VALUES + max_duration = max_duration/prob_chance //PLACEHOLDER VALUES if(do_after(user, max_duration, target = target)) From 7ef6c917a3f07abdbfb532d2f5f3f9ffb2ad322d Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Mon, 1 Feb 2016 11:11:36 +0000 Subject: [PATCH 038/442] Fixes issues caused when you don't need to breathe Allows oxyloss regen (at normal raste) and turns off oxygen and toxin hud warnings when you don't need to breathe --- code/modules/mob/living/carbon/human/life.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 8677aa80420..41da55170bc 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -295,14 +295,14 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(istype(O)) O.add_autopsy_data("Radiation Poisoning", damage) /mob/living/carbon/human/breathe() - if(reagents.has_reagent("lexorin")) + + if((NO_BREATH in mutations) || (species && (species.flags & NO_BREATHE)) || reagents.has_reagent("lexorin")) + adjustOxyLoss(-5) + oxygen_alert = 0 + toxins_alert = 0 return - if(NO_BREATH in mutations) - return // No breath mutation means no breathing. //DID YOU REALLY NEED TO FUCKING STATE THIS? if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return - if(species && (species.flags & NO_BREATHE)) - return var/datum/gas_mixture/environment if(loc) From ba8a2f3247432fe0730bb151e332a86f70e8527b Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 1 Feb 2016 22:05:08 -0500 Subject: [PATCH 039/442] Renames adminhelp categories --- code/modules/admin/verbs/adminhelp.dm | 9 ++- code/modules/admin/verbs/adminpm.dm | 79 +++++---------------------- 2 files changed, 18 insertions(+), 70 deletions(-) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 902257ae2db..fdb1c91153f 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -20,8 +20,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(selected_type) msg = input("Please enter your message.", "Admin Help", null, null) as text|null - //clean the input msg - if(!msg) + //clean the input msg + if(!msg) return if(src.handle_spam_prevention(msg,MUTE_ADMINHELP)) @@ -109,12 +109,12 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," continue switch(selected_type) - if("Question") + if("Mentorhelp") for(var/client/X in mentorholders + modholders + adminholders) if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' X << msg - if("Player Complaint") + if("Adminhelp") for(var/client/X in modholders + adminholders) if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' @@ -161,4 +161,3 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," else send2irc(source, "[msg] - All admins AFK ([admin_number_afk]/[admin_number_total]) or skipped ([admin_number_ignored]/[admin_number_total])") return admin_number_present - \ No newline at end of file diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 93cff752e0b..4bfa6a8fbe9 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -67,17 +67,17 @@ if(istext(whom)) if(cmptext(copytext(whom,1,2),"@")) whom = findStealthKey(whom) - C = directory[C] + C = directory[C] else if(istype(whom,/client)) C = whom - + if(!C) - if(holder) + if(holder) src << "Error: Private-Message: Client not found." - else + else adminhelp(msg) //admin we are replying to left. adminhelp instead return - + /*if(C && C.last_pm_recieved + config.simultaneous_pm_warning_timeout > world.time && holder) //send a warning to admins, but have a delay popup for mods if(holder.rights & R_ADMIN) @@ -90,12 +90,12 @@ if(!msg) msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as text|null - if(!msg) + if(!msg) return if(!C) - if(holder) + if(holder) src << "Error: Admin-PM: Client not found." - else + else adminhelp(msg) //admin we are replying to has vanished, adminhelp instead return @@ -105,7 +105,7 @@ //clean the message if it's not sent by a high-rank admin if(!check_rights(R_SERVER|R_DEBUG,0)) msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) - if(!msg) + if(!msg) return var/recieve_color = "purple" @@ -162,57 +162,6 @@ if(C.prefs.sound & SOUND_ADMINHELP) C << 'sound/effects/adminhelp.ogg' - /* - if(C.holder) - if(holder) //both are admins - if(holder.rank == "Moderator") //If moderator - C << "Mod PM from-[key_name(src, C, 1)]: [msg]" - src << "Mod PM to-[key_name(C, src, 1)]: [msg]" - else - C << "Admin PM from-[key_name(src, C, 1)]: [msg]" - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" - - else //recipient is an admin but sender is not - C << "Reply PM from-[key_name(src, C, 1)]: [msg]" - src << "PM to-Admins: [msg]" - - //play the recieving admin the adminhelp sound (if they have them enabled) - if(C.prefs.toggles & SOUND_ADMINHELP) - C << 'sound/effects/adminhelp.ogg' - - else - if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT - if(holder.rank == "Moderator") - C << "Mod PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the moderators's name to reply." - src << "Mod PM to-[key_name(C, src, 1)]: [msg]" - else - C << "-- Administrator private message --" - C << "Admin PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the administrator's name to reply." - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" - - //always play non-admin recipients the adminhelp sound - C << 'sound/effects/adminhelp.ogg' - - //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn - if(config.popup_admin_pm) - spawn() //so we don't hold the caller proc up - var/sender = src - var/sendername = key - var/reply = input(C, msg,"Admin PM from-[sendername]", "") as text|null //show message and await a reply - if(C && reply) - if(sender) - C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them - else - adminhelp(reply) //sender has left, adminhelp instead - return - - else //neither are admins - src << "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden." - return - */ - log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") //we don't use message_admins here because the sender/receiver might get it too for(var/client/X in admins) @@ -221,15 +170,15 @@ continue if(X.key != key && X.key != C.key) switch(type) - if("Question") + if("Mentorhelp") if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob)) - X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" - if("Player Complaint") + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [msg]" + if("Adminhelp") if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) - X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [msg]" else if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) - X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [msg]" /client/proc/cmd_admin_irc_pm() if(prefs.muted & MUTE_ADMINHELP) From 027e00f6908248e9214d59c8c44723c028380f0c Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 1 Feb 2016 21:13:31 -0800 Subject: [PATCH 040/442] changelog fix --- html/changelogs/crazylemon-cloning_brain_scan.yml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 html/changelogs/crazylemon-cloning_brain_scan.yml diff --git a/html/changelogs/crazylemon-cloning_brain_scan.yml b/html/changelogs/crazylemon-cloning_brain_scan.yml deleted file mode 100644 index 8cf4ee4bca8..00000000000 --- a/html/changelogs/crazylemon-cloning_brain_scan.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Crazylemon -delete-after: True -changes: - - rscadd: "A cloner with a tier-4 scanner will now be able to scan the brains of bodies within it, giving a chance for people who've otherwise lost their original corpse and identity." From e926935703fec0ec15fc54f921ff8c42161f68b5 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 2 Feb 2016 02:57:39 -0500 Subject: [PATCH 041/442] onward to merge conflicts! --- code/modules/surgery/bones.dm | 2 -- code/modules/surgery/helpers.dm | 6 ++---- code/modules/surgery/limb_reattach.dm | 6 ++++++ code/modules/surgery/organs_internal.dm | 1 - code/modules/surgery/surgery.dm | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index fff50be4376..b822552bd5c 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -7,14 +7,12 @@ name = "bone repair" steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("chest","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") - disallowed_mob = list(/mob/living/carbon/human/machine,/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) /datum/surgery/bone_repair/skull name = "bone repair" steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("head") - disallowed_mob = list(/mob/living/carbon/human/machine,/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) /datum/surgery/bonerepair/can_start(mob/user, mob/living/carbon/target) if(istype(target,/mob/living/carbon/human)) diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 33bc4bda768..b5aeb2a61e2 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -3,14 +3,12 @@ var/mob/living/carbon/human/H var/obj/item/organ/external/affecting var/selected_zone = user.zone_sel.selecting + if(istype(M, /mob/living/carbon/human)) H = M affecting = H.get_organ(check_zone(selected_zone)) - else if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime)) - H = M - affecting = selected_zone - if(can_operate(H)) //if they're prone or a slime + if(can_operate(H) || isslime(M) ||isalien(M)) //if they're prone or a slime var/datum/surgery/current_surgery for(var/datum/surgery/S in M.surgeries) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 29cc6a28f2c..797c4172fa6 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -17,6 +17,8 @@ return 0 if(affected && (affected.status && ORGAN_DESTROYED)) return 0 + if(affected.is_stump()) + return 0 return 1 @@ -35,6 +37,8 @@ return 1 if(affected && (affected.status && ORGAN_DESTROYED)) return 1 + if(affected.is_stump()) + return 1 return 0 @@ -53,6 +57,8 @@ return 1 if(affected && (affected.status && ORGAN_DESTROYED)) return 1 + if(affected.is_stump()) + return 1 return 0 diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 389f47dd65e..4786b62c377 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -4,7 +4,6 @@ /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("chest","head") requires_organic_bodypart = 0 - disallowed_mob = list(/mob/living/carbon/human/machine,/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) /datum/surgery/organ_manipulation/soft possible_locs = list("groin", "eyes", "mouth") diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index ba22b72ae18..7854f45daff 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -20,7 +20,7 @@ var/obj/item/organ/organ_ref //Operable body part var/current_organ = "organ" var/list/allowed_mob = list(/mob/living/carbon/human) - var/list/disallowed_mob = list(/mob/living/carbon/human/machine) + var/list/disallowed_mob = null /datum/surgery/proc/can_start(mob/user, mob/living/carbon/target) // if 0 surgery wont show up in list From 8daac699a8d4f2fbc44411ad12bcb06432b2ba56 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 2 Feb 2016 15:24:42 -0500 Subject: [PATCH 042/442] i hate this shit right here... --- .../MetaStation/MetaStation.v41A.II.dmm | 4 +- _maps/map_files/RandomZLevels/academy.dmm | 2 +- .../RandomZLevels/blackmarketpackers.dmm | 10 ++--- _maps/map_files/RandomZLevels/centcomAway.dmm | 2 +- _maps/map_files/RandomZLevels/clownplanet.dmm | 2 +- _maps/map_files/RandomZLevels/evil_santa.dmm | 2 +- .../map_files/RandomZLevels/moonoutpost19.dmm | 2 +- _maps/map_files/RandomZLevels/spacebattle.dmm | 12 +++--- _maps/map_files/RandomZLevels/spacehotel.dmm | 2 +- .../RandomZLevels/stationCollision.dmm | 2 +- _maps/map_files/RandomZLevels/wildwest.dmm | 2 +- _maps/map_files/cyberiad/cyberiad.dmm | 24 +++++------ _maps/map_files/cyberiad/z2.dmm | 42 +++++++++++++------ 13 files changed, 62 insertions(+), 46 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 5485e09eace..c5efb941401 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -383,7 +383,7 @@ "ahs" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aht" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahu" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahw" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport) "ahy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) @@ -7701,7 +7701,7 @@ "cSe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSf" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSg" = (/obj/machinery/door/morgue{name = "Relic Closet"; req_access_txt = "22"},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) -"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/internal/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) +"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) "cSi" = (/obj/machinery/door/airlock/maintenance{name = "Chapel Maintenance Access "; req_access_txt = "0"; req_one_access_txt = "12;27"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cSj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Departure Lounge - Port Fore"; dir = 4; network = list("SS13")},/obj/structure/flora/kirbyplants{icon_state = "plant-24"; layer = 4.1; tag = "icon-plant-24"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index 069a3d612bd..900d8bd1e5d 100644 --- a/_maps/map_files/RandomZLevels/academy.dmm +++ b/_maps/map_files/RandomZLevels/academy.dmm @@ -340,7 +340,7 @@ "gB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) "gC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) "gD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) -"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/shotgun/combat,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) +"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gF" = (/obj/structure/table,/obj/item/weapon/gun/projectile/revolver/russian,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gG" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gH" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms) diff --git a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm index 09d68ef2916..e68167fea13 100644 --- a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm @@ -142,12 +142,12 @@ "cL" = (/turf/simulated/floor/plasteel{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/BMPship/Midship) "cM" = (/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "cN" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"},/area/awaymission/BMPship/Midship) -"cO" = (/obj/structure/table,/obj/item/weapon/butch,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/plasteel{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship/Midship) +"cO" = (/obj/structure/table,/obj/item/weapon/kitchen/knife/butcher,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/plasteel{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship/Midship) "cP" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plasteel{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship/Midship) "cQ" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship/Midship) "cR" = (/obj/machinery/processor,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship/Midship) "cS" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) -"cT" = (/obj/structure/table,/obj/item/weapon/kitchenknife,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) +"cT" = (/obj/structure/table,/obj/item/weapon/kitchen/knife,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "cU" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "cV" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "cW" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"},/area/awaymission/BMPship/Aft) @@ -316,7 +316,7 @@ "gd" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "ge" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Aft) "gf" = (/obj/structure/mopbucket,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) -"gg" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/kitchenknife,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) +"gg" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/kitchen/knife,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "gh" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/awaymission/BMPship/Fore) "gi" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel{tag = "icon-carpetside"; icon_state = "carpetside"},/area/awaymission/BMPship/Fore) "gj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel{tag = "icon-carpetside"; icon_state = "carpetside"},/area/awaymission/BMPship/Fore) @@ -324,7 +324,7 @@ "gl" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/awaymission/BMPship/Midship) "gm" = (/obj/structure/kitchenspike,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "gn" = (/turf/simulated/floor/plasteel{tag = "icon-loadingareadirty1 (EAST)"; icon_state = "loadingareadirty1"; dir = 4},/area/awaymission/BMPship/Midship) -"go" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/obj/item/weapon/kitchenknife,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Midship) +"go" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/obj/item/weapon/kitchen/knife,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Midship) "gp" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/obj/structure/plasticflaps,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Midship) "gq" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Midship) "gr" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) @@ -342,7 +342,7 @@ "gD" = (/obj/item/weapon/shard{icon_state = "small"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Fore) "gE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/awaymission/BMPship/Fore) "gF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/awaymission/BMPship/Fore) -"gG" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/item/weapon/kitchenknife,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) +"gG" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/item/weapon/kitchen/knife,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "gH" = (/obj/machinery/conveyor_switch/oneway{id = "meatConvey2"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "gI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) "gJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm index 2b12a0cd920..fe4583e5be0 100644 --- a/_maps/map_files/RandomZLevels/centcomAway.dmm +++ b/_maps/map_files/RandomZLevels/centcomAway.dmm @@ -22,7 +22,7 @@ "av" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/cafe) "aw" = (/turf/simulated/floor/plasteel{tag = "icon-greenfull (NORTH)"; icon_state = "greenfull"; dir = 1},/area/awaymission/centcomAway/cafe) "ax" = (/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/awaymission/centcomAway/cafe) -"ay" = (/obj/structure/table,/obj/item/weapon/butch,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/awaymission/centcomAway/cafe) +"ay" = (/obj/structure/table,/obj/item/weapon/kitchen/knife/butcher,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/awaymission/centcomAway/cafe) "az" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/awaymission/centcomAway/cafe) "aA" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/simulated/floor/plasteel{tag = "icon-greenfull (NORTH)"; icon_state = "greenfull"; dir = 1},/area/awaymission/centcomAway/cafe) "aB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/centcomAway/cafe) diff --git a/_maps/map_files/RandomZLevels/clownplanet.dmm b/_maps/map_files/RandomZLevels/clownplanet.dmm index e70c59300d7..b771993de4e 100644 --- a/_maps/map_files/RandomZLevels/clownplanet.dmm +++ b/_maps/map_files/RandomZLevels/clownplanet.dmm @@ -106,7 +106,7 @@ "cb" = (/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/planet/clown) "cc" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/planet/clown) "cd" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/masks,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/planet/clown) -"ce" = (/obj/item/weapon/kitchenknife,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/planet/clown) +"ce" = (/obj/item/weapon/kitchen/knife,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/planet/clown) "cf" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/planet/clown) "cg" = (/obj/item/roller,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/planet/clown) "ch" = (/obj/item/weapon/wirecutters,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/planet/clown) diff --git a/_maps/map_files/RandomZLevels/evil_santa.dmm b/_maps/map_files/RandomZLevels/evil_santa.dmm index 6268bf698fa..f144c50064a 100644 --- a/_maps/map_files/RandomZLevels/evil_santa.dmm +++ b/_maps/map_files/RandomZLevels/evil_santa.dmm @@ -22,7 +22,7 @@ "av" = (/mob/living/simple_animal/hostile/winter/reindeer,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) "aw" = (/obj/machinery/gun_turret/grenade{desc = "Winterized 40mm grenade launcher defense turret. If you've had this much time to look at it, you're probably already dead."; faction = "winter"; name = "winterized mounted grenade launcher (40mm)"},/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) "ax" = (/obj/structure/stool,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) -"ay" = (/obj/structure/table/woodentable,/obj/structure/safe/floor,/obj/item/weapon/gun/projectile/shotgun/combat,/obj/item/weapon/gun/projectile/automatic/mini_uzi,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) +"ay" = (/obj/structure/table/woodentable,/obj/structure/safe/floor,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/weapon/gun/projectile/automatic/mini_uzi,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) "az" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) "aA" = (/obj/machinery/mech_bay_recharge_port,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) "aB" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/awaymission/challenge/main) diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm index a7528d6adb0..231fbd041e6 100644 --- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm +++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm @@ -534,7 +534,7 @@ "kn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Diner"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "ko" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/item/weapon/reagent_containers/glass/rag{pixel_y = 5},/obj/machinery/door/poddoor/shutters{dir = 8; id_tag = "awaykitchen"; name = "Serving Hatch"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "kp" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) -"kq" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/obj/item/weapon/kitchenknife,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) +"kq" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/obj/item/weapon/kitchen/knife,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "kr" = (/obj/structure/table,/obj/item/weapon/book/manual/chef_recipes{pixel_x = 2; pixel_y = 6},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "ks" = (/obj/effect/decal/cleanable/fruit_smudge,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "kt" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/processor,/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm index 31460e82280..9f278c80c36 100644 --- a/_maps/map_files/RandomZLevels/spacebattle.dmm +++ b/_maps/map_files/RandomZLevels/spacebattle.dmm @@ -129,7 +129,7 @@ "cy" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "cz" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/snacks/sausage,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/spacebattle/cruiser) "cA" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/spacebattle/cruiser) -"cB" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchenknife,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/spacebattle/cruiser) +"cB" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/spacebattle/cruiser) "cC" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/spacebattle/cruiser) "cD" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/spacebattle/cruiser) "cE" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/spacebattle/cruiser) @@ -174,7 +174,7 @@ "dr" = (/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/spacebattle/cruiser) "ds" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"},/area/awaymission/spacebattle/cruiser) "dt" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"},/area/awaymission/spacebattle/cruiser) -"du" = (/obj/effect/landmark/corpse/chef{mobname = "Nathaniel Waters"; name = "Nathaniel Waters"},/obj/item/weapon/butch,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/spacebattle/cruiser) +"du" = (/obj/effect/landmark/corpse/chef{mobname = "Nathaniel Waters"; name = "Nathaniel Waters"},/obj/item/weapon/kitchen/knife/butcher,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/spacebattle/cruiser) "dv" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/spacebattle/cruiser) "dw" = (/obj/structure/rack,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/awaymission/spacebattle/cruiser) "dx" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/awaymission/spacebattle/cruiser) @@ -228,7 +228,7 @@ "et" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "eu" = (/mob/living/simple_animal/hostile/syndicate/ranged/space,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/spacebattle/cruiser) "ev" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/awaymission/spacebattle/cruiser) -"ew" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Davis Hume"; name = "Davis Hume"},/obj/item/weapon/gun/projectile/shotgun/combat,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) +"ew" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Davis Hume"; name = "Davis Hume"},/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "ex" = (/obj/item/ammo_casing/shotgun,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "ey" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/spacebattle/cruiser) "ez" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/awaymission/spacebattle/cruiser) @@ -253,7 +253,7 @@ "eS" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/condiment/saltshaker,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/spacebattle/cruiser) "eT" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/spacebattle/cruiser) "eU" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) -"eV" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Kurt Kliest"; name = "Kurt Kliest"},/obj/item/weapon/gun/projectile/shotgun/combat,/obj/item/ammo_casing/shotgun,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) +"eV" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Kurt Kliest"; name = "Kurt Kliest"},/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/ammo_casing/shotgun,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "eW" = (/obj/item/ammo_casing/shotgun,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "eX" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel{tag = "icon-bluefull"; icon_state = "bluefull"},/area/awaymission/spacebattle/cruiser) "eY" = (/obj/effect/landmark/corpse/engineer/rig{corpseidjob = "Gunner"; mobname = "Eric Abnett"; name = "Eric Abnett"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) @@ -273,7 +273,7 @@ "fm" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) "fn" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) "fo" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) -"fp" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Walter Strider"; name = "Walter Strider"},/obj/item/weapon/gun/projectile/shotgun/combat,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) +"fp" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Walter Strider"; name = "Walter Strider"},/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/awaymission/spacebattle/cruiser) "fq" = (/obj/item/ammo_casing/shotgun,/turf/simulated/floor/plasteel{dir = 1; icon_state = "bluecorner"},/area/awaymission/spacebattle/cruiser) "fr" = (/obj/item/ammo_casing/a357,/obj/item/ammo_casing/a357,/obj/item/weapon/gun/projectile/revolver/mateba,/obj/effect/landmark/corpse/commander{mobname = "Aaron Bowden"; name = "Aaron Bowden"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "fs" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) @@ -334,7 +334,7 @@ "gv" = (/obj/structure/table/reinforced,/obj/item/weapon/scalpel,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/awaymission/spacebattle/cruiser) "gw" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/wood,/area/awaymission/spacebattle/cruiser) "gx" = (/turf/simulated/floor/wood,/area/awaymission/spacebattle/cruiser) -"gy" = (/obj/item/weapon/gun/projectile/shotgun/combat,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) +"gy" = (/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "gz" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate4) "gA" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate4) "gB" = (/obj/structure/closet/crate/secure/weapon,/obj/item/weapon/gun/energy/laser,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index 534bc5832aa..03264b715b6 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -232,7 +232,7 @@ "ex" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission) "ey" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; dir = 1; network = "Hotel"; use_power = 0},/turf/simulated/floor/carpet,/area/awaymission) "ez" = (/obj/item/weapon/melee/cultblade,/turf/simulated/floor/engine/cult,/area/awaymission) -"eA" = (/obj/item/weapon/butch{blood_DNA = 1e+009},/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/engine/cult,/area/awaymission) +"eA" = (/obj/item/weapon/kitchen/knife/butcher{blood_DNA = 1e+009},/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/engine/cult,/area/awaymission) "eB" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/awaymission) "eC" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) "eD" = (/obj/structure/table/woodentable,/obj/item/weapon/clipboard,/obj/item/weapon/paper,/turf/simulated/floor/carpet,/area/awaymission) diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index 6fe5c9d73b9..3f21d8dac6c 100644 --- a/_maps/map_files/RandomZLevels/stationCollision.dmm +++ b/_maps/map_files/RandomZLevels/stationCollision.dmm @@ -403,7 +403,7 @@ "hM" = (/obj/machinery/processor,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hN" = (/obj/structure/table,/obj/item/weapon/book/manual/chef_recipes,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) -"hP" = (/obj/effect/decal/remains/human,/obj/item/weapon/butch,/obj/item/weapon/kitchenknife,/obj/item/clothing/head/chefhat,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"hP" = (/obj/effect/decal/remains/human,/obj/item/weapon/kitchen/knife/butcher,/obj/item/weapon/kitchen/knife,/obj/item/clothing/head/chefhat,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hQ" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hR" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/weapon/paper/sc_safehint_paper_caf,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hS" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/midblock) diff --git a/_maps/map_files/RandomZLevels/wildwest.dmm b/_maps/map_files/RandomZLevels/wildwest.dmm index b0d461dc48e..86051a9a706 100644 --- a/_maps/map_files/RandomZLevels/wildwest.dmm +++ b/_maps/map_files/RandomZLevels/wildwest.dmm @@ -145,7 +145,7 @@ "cO" = (/obj/effect/decal/remains/human,/mob/living/simple_animal/hostile/syndicate/ranged/space{name = "Syndicate Commander"},/turf/simulated/floor/plating,/area/awaymission/wwrefine) "cP" = (/obj/item/weapon/paper{info = "We've discovered something floating in space. We can't really tell how old it is, but it is scraped and bent to hell. There object is the size of about a room with double doors that we have yet to break into. It is a lot sturdier than we could have imagined. We have decided to call it 'The Vault' "; name = "Planer Saul's Journal: Page 1"},/turf/simulated/floor/carpet,/area/awaymission/wwgov) "cQ" = (/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight,/turf/simulated/floor/plasteel{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) -"cR" = (/obj/item/weapon/butch,/turf/simulated/floor/plasteel{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) +"cR" = (/obj/item/weapon/kitchen/knife/butcher,/turf/simulated/floor/plasteel{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) "cS" = (/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/simulated/floor/plasteel{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov) "cT" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/awaymission/wwmines) "cU" = (/obj/structure/stool/bed/chair/comfy/teal{dir = 8},/turf/simulated/floor/wood,/area/awaymission/wwmines) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index f9f9a55ce62..c4bcd7b34d2 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -3098,6 +3098,7 @@ "bhD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bhE" = (/obj/structure/table/woodentable,/obj/item/clothing/head/cakehat,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bhF" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"bhG" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "Engineering Secure Storage North"; dir = 4; network = list("SS13")},/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/storage/secure) "bhH" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bhI" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/item/weapon/reagent_containers/food/drinks/bottle/cream,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bhJ" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) @@ -7448,8 +7449,8 @@ "cNm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cNn" = (/obj/machinery/light/small{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cNo" = (/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) -"cNp" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "Engineering Secure Storage North"; dir = 4; network = list("SS13")},/obj/machinery/shield_capacitor,/turf/simulated/floor/plating,/area/storage/secure) -"cNq" = (/obj/machinery/shield_capacitor,/turf/simulated/floor/plating,/area/storage/secure) +"cNp" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/storage/secure) +"cNq" = (/obj/machinery/floodlight,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/storage/secure) "cNr" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) "cNs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) "cNt" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) @@ -7493,8 +7494,8 @@ "cOf" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/obj/machinery/door_control{id = "QMLoaddoor2"; layer = 3; name = "Loading Doors"; pixel_x = 24; pixel_y = 8; req_access_txt = "0"},/obj/machinery/door_control{id = "QMLoaddoor"; layer = 3; name = "Loading Doors"; pixel_x = 24; pixel_y = -8; req_access_txt = "0"},/turf/simulated/shuttle/floor,/area/shuttle/supply) "cOg" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/constructionsite) "cOh" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/constructionsite) -"cOi" = (/obj/machinery/shield_gen,/turf/simulated/floor/plating,/area/storage/secure) -"cOj" = (/obj/machinery/shield_gen,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/storage/secure) +"cOi" = (/obj/machinery/light/small{dir = 4},/obj/structure/closet/firecloset,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/storage/secure) +"cOj" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/storage/secure) "cOk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/secure) "cOl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/secure) "cOm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/secure) @@ -7721,7 +7722,6 @@ "cSz" = (/obj/machinery/camera{c_tag = "Atmospherics South-East"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/binary/valve/digital/open{name = "Mixed Air Outlet Valve"},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 6},/area/atmos) "cSA" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) "cSB" = (/turf/simulated/floor/plating/airless,/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/solar/starboard) -"cSC" = (/obj/machinery/floodlight,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/storage/secure) "cSD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cSE" = (/turf/simulated/floor/plating/airless,/area/engine/engineering) "cSF" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 6},/turf/simulated/floor/plating,/area/atmos) @@ -7732,7 +7732,6 @@ "cSK" = (/obj/machinery/light/spot,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "cSL" = (/obj/machinery/light/small{dir = 8},/obj/machinery/power/emitter,/turf/simulated/floor/plating,/area/storage/secure) "cSM" = (/obj/machinery/power/emitter,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/storage/secure) -"cSN" = (/obj/machinery/floodlight,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/storage/secure) "cSO" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cSP" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cSQ" = (/obj/machinery/field/generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/space) @@ -8472,7 +8471,7 @@ "dha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhe" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "dhg" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) @@ -8893,8 +8892,8 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikaabaabbikbikaabaabaabcJbcKjcKjcKkcGIcKmcKmcKncKocKocKpcKqcKrcGOcHWcGOcKscGOcGOcGOcDtcKtcKucKvcKwcKxcKycKzcKAcKBcKCcKCcKCcKDcKEcKFcKGcKHcKIcHhcCAcKJcKKcKLcKMcKNcDFcJBcKOcKPcKQcKRcDQcKScIFcIFcCKcHBcoDcEhbVibVibVibYDclUcOtcCOczVcOBcyScPocPMcyTcPVcPQclUcuscGvbVibGycyHbGycoAbikbikckPcLicLjcLkcwAcLlcLmcLncwAcLocLpcLqckPaabaabbikbikbikbikbikbikbikbikbwocvzbxXbxXbwoaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqaabczocHOczqaabaabaabbikaabbikbikaabaabbikbikbikaabbikbikcJbcKjcKjcKkcLscLscLscLtcLucLvcECcLwcLxcLycLzcLAcLBcLCcLDcLDcLEcLFcLGcGOcGOcGOcLHcLIcLJcLKcLLcLMcLNcLOcLPcECcLQcLQcLRcHhcCAcLScLTcLUcLVcLWcDFcLXcLYcLZcMacMbcCKcCKcCKcCKcCKcHBcoDcEhcLbbGybGybYDclUcPYczVcDXcQgcDZcQMcRwcyTdbkcYuclUcuscGvczhbGychCcITcoAbikbikckPcMpcxOcxOcwAcMpcxOcxOcwAcMpcxOcxOckPbikaabaabbikbikbikbikbikbikbikbwocLccyJbxXbwobwobwocJNcJNaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagiaabczocMqczqbikczocMqczqbikczocMqczqaabafxaabaabaabaabaabaabbikbikbikbikbikbikaabcJbcMrcMscLscLscLscMtcMucMucMucMucMucMucMucMvcMwcMxcMycMzcMzcMzcMAcMBdcpdcodcvcMzcMBcMDcMEcMFcLMcMGcLOcLPcMHcMIcMJcMKcMLcMMcMNcMOcKNcMPcMQcMRcMScMTcMUcIDcMVcDQcMWcMXcMXcCKcHBcoAcEhbVicozcLdbYDclUdcwczVczVdcxcySdcydczcyTdcBdcAclUcuscGvbVibGybVibVicoAaabaabckPcNncBZcxOcwAcNncBZcxOcwAcNncBZcxOckPbikbikaabaabbikbikbikbikbikbikbwocvzcyJcLecyJcLfbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxbikaabbikbikbikaabaabaabbikbikaabaabbikafxaabaabaabaabaabbikbikbikbikbikbikbikaabcJbcNocLscLscLscLscLscMucNpcNqcHscNrcNtcMucNucNvcNwcJecGOcGOcNxdcCcNzcNAcNBdcDcNCdcEcECdcFcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUdcHdcGdcJdcIcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAbikbikckPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPbikbikbikaabaabbikbikbikbikbikbwocvzcyJbxXbxXbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGagiafxafxafxafxacGafxafxacGcOcaabbikbikbikbikbikbikbikbikbikbikbikbikcJbcOdcLucLscLscLscOecMucOicOjcOkcOlcOmcOncOocOpcOqcOrcGOcOsdcKcOucOvcOwcOxcOycOzcOAdcLcNwcJecOCcODcLKcOEcECcOFcLQcOGcOHcDFcMNcMOcKNcDFcOIcMRcJBcOJcOKcKQcOLcDQcOMcMXcMXcCKcHBcoDcEhcMgchCbJGbYDclUclUclUcMhclUdblcFacFcbVicMjcMibGycuscGvbVibGycMkcITcoAbikbikckPckPckPckPckPckPckPckPckPckPckPckPckPbikbikbikbikaabaabbikbikbwobwobwocvzcyJcMmcMlbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxbikaabbikbikbikaabaabaabbikbikaabaabbikafxaabaabaabaabaabbikbikbikbikbikbikbikaabcJbcNocLscLscLscLscLscMubhGcNpcHscNrcNtcMucNucNvcNwcJecGOcGOcNxdcCcNzcNAcNBdcDcNCdcEcECdcFcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUdcHdcGdcJdcIcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAbikbikckPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPbikbikbikaabaabbikbikbikbikbikbwocvzcyJbxXbxXbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGagiafxafxafxafxacGafxafxacGcOcaabbikbikbikbikbikbikbikbikbikbikbikbikcJbcOdcLucLscLscLscOecMucNpcNqcOkcOlcOmcOncOocOpcOqcOrcGOcOsdcKcOucOvcOwcOxcOycOzcOAdcLcNwcJecOCcODcLKcOEcECcOFcLQcOGcOHcDFcMNcMOcKNcDFcOIcMRcJBcOJcOKcKQcOLcDQcOMcMXcMXcCKcHBcoDcEhcMgchCbJGbYDclUclUclUcMhclUdblcFacFcbVicMjcMibGycuscGvbVibGycMkcITcoAbikbikckPckPckPckPckPckPckPckPckPckPckPckPckPbikbikbikbikaabaabbikbikbwobwobwocvzcyJcMmcMlbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcJbcJbcJbdeBcOXcOXcOXcMucOYcOZcPacPacPbcPccMzcPdcPecPfcPgcPhdcMcPicPjcPkcPlcPmcPncPidcNcPpcPqcPrcPscPtcPucPvcNHcLQcPwcPxcDFcMNcDFcPycDFcMQcMRcJBcJCcPzcJEcNMcCKcCKcCKcCKcCKcHBcoDcMncKXchCcITcMYcMocMocMocMZbVicFgcFecFhbVicNacKVcKVcNbcHrczhbGybGycoAcoAbikbikcONaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikaabaabbikbwocyKcNccNdcyJcNfcNebxXcxHbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabcPEcLscLscOXaabaabcMucPHcPIcPacPacPJcMucPKcPLdcOcPNcPOcPPdcPcECcPRcPScPTcGOcPUcECdcQcPWcPXcPNcPNdcRcPZcECcQacLQcQbcQccDFcMNcDFcLScLTcQdcQecMScQfdcScIDcQhcDQcQicQjcQjcCKcHBcoDcNhcNgbVibVicEhbVibVibGycNibVibVicGwbVibVicNkcNjcNmcNlcNQcoAcoAcoAcoAbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbikaabaabbwocNRcunbOMcyJcyJcyJbxXbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikaabaabcPEcLscLscOXaabbikcMucQscPIcPacPacQtcMucQucQvcECcQwcQxcQxdcTcECcQycQzcQAcQBdcUcECcQxcQxcQxcQwcECcQCcQucECcNHcLQcJlcQEcQFcQGcQHcQIcQJcQKcIAcQLcJCdcVcJEcNMcEVcQNcQOcQPcCKcHBcoAcoAcEhcdbcNScEhcNTbVibGycNVcNUcNXcNWcMocMocNYcGvbVicNZcoAcoAbikbikaabbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbwobwobwobwobwocOObOMcyJcOQcOPbxXbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8902,9 +8901,9 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjdbikbikbikbikbikbikbikbikbikbikbikbikbikbikcOgcOhcOhdeFcOhcOhcPFcMucRzcOZcPacPacRAcMucMHcRBcECcECcRecRecRecRecRCcRRcRDcPNcREcRecRecRecRecECcECcRFcRGcECcNHcLQcRHcRIcRocRJcRKcDFcDFcRLcJxcRJcJCcRMcJEcNMcCKcCKcCKcCKcCKcHBcoAcITbGycPCcPBbGycQkbVibVicQlbVicQmcdccyHcQnbVibVibVicEhbwobikbikbikaabbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbwobwobwocQpcQocyKcOObOMbxXbxXbxXcYgbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqcQTcQqcRycQUcMucRNcROcPacPacRPcMucECcRQcECcRTaaccShcRecRecRecRecSicRecRecRecRecShaaccRTcECcRUcECcECcNHcLQcRVcQFcRWcRXcRYcRZcSacRXcSacRXcSbcQJcSccNMcTbcTScTScTScTScUdcYhcYicYicYkcYjcYicYicYicYlcYncYmcQmcYobVicQmbVicYpbVicEhbwocxHcxHcxHbwocxHcxHcxHcxHbwocxHcxHcxHcxHbwobwobwobwobwobwobwobwobwobwoczMbwocyKbwocYqbxXcHycOObOMcyJcyJcLecyJbwoaabczrbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqcQTcQTdlcdlCcMucSdcSecPacPacSfcMucSgcSmcSlaaccTfcTIcTIcTIcTIcTIcTQcTIcTIcTIcTIcTIcTZaacddaddbcSncECcSocMJcFUcSqcSrcSscStcSucSvcSwcDFcSxcSycSzcSAcNMcUkbikaabaabbikcYscYrdbwcKlcYwcYvcYycYxcYicqTbGybGycYzcdccYAcGvbGybGycYBcMncYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYCcYDcYCcYCcYCcYCcmvcyJbFecnGbxXcYEczMbwobwobwocLebwocOObOMcyJcYFbxXbxXbwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqdldcQqdlfdlecMucRzcOZcPacPacSCcMucSDcSEcSEbikddcaacaacaacaacaacaacaacaacaacaacaacddcbikcSEcSEcSDcECcMHcLQcSAcSFcSGcSHcSIcSJcSAcSHcSAcJEcSAcJEcSAcNMcUkbikacGacGacGcYhcYGcYIcYHcYKcYJcYMcYLcYibGybGybVicQmcYNbVicGvcGqcFicYPcYOcYQcYQcYQcYQcYQcYQcYScYRcYQcYQcYQcYQcYQcYQcYUcYTcYWcYVcYYcYXcYZcYZcYZcYZcZbcZacZccYZcYZcYZcYZcZdbXScyJcOPbxXcZebwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdlgcOhcOhcOhcOhcOhdlhcMucSLcSMcPacPacSNcMucSOcSPdddaabddcaaccSQbikbikbikbikcSQbikbikcSQaacddcbikddecSRcSScECcMHcECaabcSTaabcSUcSVcSWcSXcSYcSXcSZcSXcSZcUmcUqcUkbikacGaabbikcYhcZfcYIcZgcZicZhcZkcZjcYicZlbGybGycGvcZmbVicGvcGvcZncoAcoAcxHcxHcxHcxHbwocxHcxHcxHcxHbwocxHcxHcxHcxHbwocZobxXcyJcJMbxXcyJcyJcxHcxHckVcyJcZpbxXcZpcyJdlGbOMcoVbwobwobwobwobwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcMucTccSMcPacPacSCcMucTdcSEcTebikddfddgbikbikbikbikbikdlmbikbikbikdlodlnbikcSEcSEcTdcECcMHcECcCKcTgcEVcTgcCKcTgcEVcTgcCKcThcEVcTicCKaabcUkbikacGaabaabcYhcZscZucZtcZvcZhcZxcZwcZycYPcZAcZzcGvcdcbGycZBcQmbVicoAbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbwocZCczfcyJcZDbxXcyJbikbikbikbikcyJbxXbxXcNRcqecqecqfcqgcqebikaabaabaabaabcZEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcPGcQrcQqdldcQqdlfdlecMucRzcOZcPacPacTkcMucSDcSEcSEbikddcaacaacaacaacaacaacaacaacaacaacaacddcbikcSEcSEcSDcECcMHcLQcSAcSFcSGcSHcSIcSJcSAcSHcSAcJEcSAcJEcSAcNMcUkbikacGacGacGcYhcYGcYIcYHcYKcYJcYMcYLcYibGybGybVicQmcYNbVicGvcGqcFicYPcYOcYQcYQcYQcYQcYQcYQcYScYRcYQcYQcYQcYQcYQcYQcYUcYTcYWcYVcYYcYXcYZcYZcYZcYZcZbcZacZccYZcYZcYZcYZcZdbXScyJcOPbxXcZebwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdlgcOhcOhcOhcOhcOhdlhcMucSLcSMcPacPacOicMucSOcSPdddaabddcaaccSQbikbikbikbikcSQbikbikcSQaacddcbikddecSRcSScECcMHcECaabcSTaabcSUcSVcSWcSXcSYcSXcSZcSXcSZcUmcUqcUkbikacGaabbikcYhcZfcYIcZgcZicZhcZkcZjcYicZlbGybGycGvcZmbVicGvcGvcZncoAcoAcxHcxHcxHcxHbwocxHcxHcxHcxHbwocxHcxHcxHcxHbwocZobxXcyJcJMbxXcyJcyJcxHcxHckVcyJcZpbxXcZpcyJdlGbOMcoVbwobwobwobwobwobikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcMucTccSMcPacPacOjcMucTdcSEcTebikddfddgbikbikbikbikbikdlmbikbikbikdlodlnbikcSEcSEcTdcECcMHcECcCKcTgcEVcTgcCKcTgcEVcTgcCKcThcEVcTicCKaabcUkbikacGaabaabcYhcZscZucZtcZvcZhcZxcZwcZycYPcZAcZzcGvcdcbGycZBcQmbVicoAbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbwocZCczfcyJcZDbxXcyJbikbikbikbikcyJbxXbxXcNRcqecqecqfcqgcqebikaabaabaabaabcZEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcMucTjcOZcPacPacTkcMucTlcTmcSEbikddcaacbikbikaabaabaabaabaabbikbikaacddcbikcSEcTncTocECcTpcECcCKcTqcTrcTscCKcTtcTucTvcCKcTwcTxcTycCKaabcUkbikacGbikaabcZGcZFcZucZHcZJcZIcZLcZKcYicZMcQmbVicQmcZNbVicZOcQmcozcoAcoDcoDcoDazybikaabbikbikbikbikbikbikbikbikbikbwocZPcyJcyJcHxbxXcyJcyJcxHcxHcyJcyJbxXcZQczfcqecQDcrfcrgcqebikbikaabaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaaccMucMucMucMucMucMucMucECcSDcSEbikddcaaccSQaabaabdlqdlpdlraabcTzbikaacddcbikcSEcSDcECcECcMHcECcCKcTAcTBcTAcCKcTCcTDcTCcCKcTEcTFcTEcCKaabcUkbikacGbikbikcYhcZRcZTcZScZucZUcZWcZVcYicZXcZZcZYdaacAhbGycGvcGvdabdaddacbGydaeazybikaabbikcxHcxHcxHbwobwobwobwobwobwodafcyKcyJdagbxXbxXcyJbxXbxXbxXbxXcYqbxXcPAcqecrZcsacsbcqeaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaacaacaabaabaabacGacGcECcECcTGcSEbikddfddgbikbikaabdlscTHdltaabbikbikdlodlnbikcSEcTJcECcECcMHcECcCKcTAcTKcTAcCKcTCcTLcTCcCKcTEcTMcTEcCKaabcUkbikacGbikbikcYhcYhcYhdahcYhdaidajdaicYicZXdakbGycGzdalcFicHrcGvdamcoAcoDcoDcoDdanaabaabbikcxHdaodapcyJbxXdaqdarcNRcyJdasbxXcyJdatbxXbxXdaubxXbwobwobwocxHcxHbwocqectrctscttcqeaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8968,3 +8967,4 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik "} + diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 3b40c6bf0a4..020f1c9bfbb 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -160,13 +160,30 @@ "dd" = (/obj/structure/rack,/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) "de" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "df" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/shard,/obj/item/weapon/kitchen/knife,/obj/item/weapon/storage/firstaid/tactical,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) +"dg" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/red,/obj/item/clothing/head/helmet/knight/red,/obj/item/weapon/holo/claymore/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_knightarena) +"dh" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_knightarena) +"di" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_knightarena) +"dj" = (/turf/simulated/floor/holofloor,/area/holodeck/source_knightarena) +"dk" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/source_knightarena) +"dl" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/source_knightarena) +"dm" = (/obj/structure/holowindow,/turf/simulated/floor/holofloor,/area/holodeck/source_knightarena) +"dn" = (/obj/structure/holowindow,/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/source_knightarena) "do" = (/obj/effect/landmark{name = "prisonwarp"},/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) "dp" = (/turf/unsimulated/floor{icon_state = "floorgrime"},/area/prison/solitary) "dq" = (/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) +"dr" = (/obj/structure/holowindow,/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/source_knightarena) "ds" = (/turf/simulated/floor/holofloor/grass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor{tag = "icon-wood_siding1"; icon_state = "wood_siding1"; dir = 2},/area/holodeck/source_picnicarea) "dt" = (/turf/simulated/floor/holofloor/grass,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor{tag = "icon-wood_siding1"; icon_state = "wood_siding1"; dir = 2},/area/holodeck/source_picnicarea) "du" = (/turf/simulated/floor/holofloor{tag = "icon-carpet3-0 (EAST)"; icon_state = "carpet3-0"; dir = 4},/area/holodeck/source_theatre) +"dv" = (/obj/structure/holowindow{dir = 1},/turf/simulated/floor/holofloor,/area/holodeck/source_knightarena) "dw" = (/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_away"; name = "supply centcom"; width = 12},/turf/space,/area/space) +"dx" = (/obj/structure/holowindow{dir = 1},/turf/simulated/floor/holofloor{dir = 8; icon_state = "blue"},/area/holodeck/source_knightarena) +"dy" = (/obj/structure/holowindow{dir = 1},/turf/simulated/floor/holofloor{dir = 4; icon_state = "blue"},/area/holodeck/source_knightarena) +"dz" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "blue"},/area/holodeck/source_knightarena) +"dA" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "blue"},/area/holodeck/source_knightarena) +"dB" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/blue,/obj/item/clothing/head/helmet/knight/blue,/obj/item/weapon/holo/claymore/blue,/turf/simulated/floor/holofloor{dir = 2; icon_state = "blue"},/area/holodeck/source_knightarena) +"dC" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 10; icon_state = "blue"},/area/holodeck/source_knightarena) +"dD" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 6; icon_state = "blue"},/area/holodeck/source_knightarena) "dG" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid1 (EAST)"; icon_state = "asteroid1"; dir = 4},/area/holodeck/source_desert) "dK" = (/obj/structure/stool/bed,/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) "dL" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) @@ -180,7 +197,6 @@ "dU" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_emptycourt) "ed" = (/turf/unsimulated/floor{icon_state = "platingdmg1"},/area/prison/solitary) "ee" = (/turf/unsimulated/floor{icon_state = "floorscorched2"},/area/prison/solitary) -"ei" = (/turf/unsimulated/wall{tag = "icon-iron3"; icon_state = "iron3"},/area/space) "ej" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall{tag = "icon-iron12"; icon_state = "iron12"},/area/space) "ek" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/wall{tag = "icon-iron12"; icon_state = "iron12"},/area/space) "el" = (/turf/unsimulated/wall{tag = "icon-iron11"; icon_state = "iron11"},/area/space) @@ -1200,18 +1216,18 @@ "Jb" = (/mob/living/simple_animal/pet/cat/Syndi,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) (1,1,1) = {" -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaR -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpbqbqbrbqbqbsbtbubtbubtbsbwbvbvbvbvbsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsbAbBbBbBbCbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpbqbEbqbqbFbsbGbHbGbHbGbsbIbIbIbIbIbsbxbJbxbJbxbsbybybybybybsbzbKbzbKbzbsbLbMbMbMbNbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpbqbObqbqbqbsbPbQbPbQbPbsbIbIbIbIbIbsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsbLbMbMbMbNbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpbqbqbRbSbqbsbTbTbTbTbTbsbUbUbUbUbVbsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsbLbMbMbMbNbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpcabqbqbqbqbscbcccdcccebscfcgchcicfbsbxbxbJbxbxbsbybybybybybsbzbzbzbzbzbsbLbMbMbMbNbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcocococococococococococococococoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpbqcabqbqctbscucccdcccvbscfcwcxcycfbsbxbxbJbxbxbsbybybybybybsbzbzbzbzbzbsczbMbMbMcAbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcRcScTcocScUcocScVcocWcXcocScUcoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpbqbEcabqbRbsbTbTbTbTbTbsdbcwcxcydbbsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsczbMbMbMcAbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcododpcodocXcododqcodocUcodocTcoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpbqbqbqcabqbsdsdtdsdtdsbsducwcxcydubsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsczbMbMbMcAbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapaparapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcocococococococococococococococoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpbqdGbqbqcabsbGbHbGbHbGbsducwcxcydubsbxbJbxbJbxbsbybybybybybsbzbKbzbKbzbsczbMbMbMcAbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcocSdpcodKcTcocScTcodLcUcocScXcoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpbRbqdNbqbEbsbtbubtbubtbsdOdPdQdRdObsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsdSdTdTdTdUbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcodocTcodocUcodocUcodoedcodoeecoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNeiejejejejejbZejejejejejbZejejejejejbZekekekekekbZekekekekekbZekekekekekbZekekekekekel +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaR +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdhdgdgdgdibsbqbqbrbqbqbsbtbubtbubtbsbwbvbvbvbvbsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsbAbBbBbBbCbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdkdjdjdjdlbsbqbEbqbqbFbsbGbHbGbHbGbsbIbIbIbIbIbsbxbJbxbJbxbsbybybybybybsbzbKbzbKbzbsbLbMbMbMbNbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdkdjdjdjdlbsbqbObqbqbqbsbPbQbPbQbPbsbIbIbIbIbIbsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsbLbMbMbMbNbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdkdjdjdjdlbsbqbqbRbSbqbsbTbTbTbTbTbsbUbUbUbUbVbsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsbLbMbMbMbNbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdndmdmdmdrbscabqbqbqbqbscbcccdcccebscfcgchcicfbsbxbxbJbxbxbsbybybybybybsbzbzbzbzbzbsbLbMbMbMbNbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcocococococococococococococococoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdxdvdvdvdybsbqcabqbqctbscucccdcccvbscfcwcxcycfbsbxbxbJbxbxbsbybybybybybsbzbzbzbzbzbsczbMbMbMcAbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcRcScTcocScUcocScVcocWcXcocScUcoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdzdjdjdjdAbsbqbEcabqbRbsbTbTbTbTbTbsdbcwcxcydbbsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsczbMbMbMcAbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcododpcodocXcododqcodocUcodocTcoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdzdjdjdjdAbsbqbqbqcabqbsdsdtdsdtdsbsducwcxcydubsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsczbMbMbMcAbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapaparapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcocococococococococococococococoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdzdjdjdjdAbsbqdGbqbqcabsbGbHbGbHbGbsducwcxcydubsbxbJbxbJbxbsbybybybybybsbzbKbzbKbzbsczbMbMbMcAbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcocSdpcodKcTcocScTcodLcUcocScXcoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpdCdBdBdBdDbsbRbqdNbqbEbsbtbubtbubtbsdOdPdQdRdObsbxbxbxbxbxbsbybybybybybsbzbzbzbzbzbsdSdTdTdTdUbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcodocTcodocUcodocUcodoedcodoeecoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhyhzhzhzhzhzbZejejejejejbZejejejejejbZejejejejejbZekekekekekbZekekekekekbZekekekekekbZekekekekekel ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcocococococococococococococococoaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeqbserererererbseseseteueubsevevevevevbsewexexexeybsezeAeAeAeBbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckbockckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeDeqeqeqbsereEeFeGerbseHeHeIeJeJbseveKeveLevbseMeNeNeNeObsePeQeQeQeRbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapavapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqeqeqeXeqbsereYeYeYerbseHeZeZeZeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD From 276e5a0c7433c8406ac66b6373404cce98a81de7 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 2 Feb 2016 15:34:59 -0500 Subject: [PATCH 043/442] Merge conflicts GO --- code/game/machinery/computer/Operating.dm | 208 ++++++++++++++----- code/modules/mob/living/carbon/human/life.dm | 147 ++++++------- 2 files changed, 235 insertions(+), 120 deletions(-) diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 9d1e011f87f..5251898e7c7 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -1,4 +1,5 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +#define OP_COMPUTER_COOLDOWN 60 /obj/machinery/computer/operating name = "operating computer" @@ -7,10 +8,18 @@ icon_keyboard = "med_key" icon_screen = "crew" circuit = /obj/item/weapon/circuitboard/operating - var/mob/living/carbon/human/victim = null var/obj/machinery/optable/table = null - + var/mob/living/carbon/human/victim = null light_color = LIGHT_COLOR_PURE_BLUE + var/verbose = 1 //general speaker toggle + var/patientName = null + var/oxyAlarm = 30 //oxy damage at which the computer will beep + var/choice = 0 //just for going into and out of the options menu + var/healthAnnounce = 1 //healther announcer toggle + var/crit = 1 //crit beeping toggle + var/nextTick = OP_COMPUTER_COOLDOWN + var/healthAlarm = 50 + var/oxy = 1 //oxygen beeping toggle /obj/machinery/computer/operating/New() ..() @@ -24,7 +33,7 @@ add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) return - interact(user) + ui_interact(user) /obj/machinery/computer/operating/attack_hand(mob/user) @@ -36,53 +45,119 @@ add_fingerprint(user) - interact(user) + ui_interact(user) -/obj/machinery/computer/operating/interact(mob/user) - if ( ((get_dist(src, user) > 1) && !isobserver(user)) || (stat & (BROKEN|NOPOWER)) ) - if (!istype(user, /mob/living/silicon)) - user.unset_machine() - user << browse(null, "window=op") - return +///obj/machinery/computer/operating/interact(mob/user) +// if ( ((get_dist(src, user) > 1) && !isobserver(user)) || (stat & (BROKEN|NOPOWER)) ) +// if (!istype(user, /mob/living/silicon)) +// user.unset_machine() +// user << browse(null, "window=op") +// return +// +// user.set_machine(src) +// var/dat = "Operating Computer\n" +// dat += "
    Close

    " //| Update" +// if(src.table && (src.table.check_victim())) +// src.victim = src.table.victim +// dat += {" +//Patient Information:
    +//
    +//Name: [src.victim.real_name]
    +//Age: [src.victim.age]
    +//Blood Type: [src.victim.b_type]
    +//
    +//Health: [src.victim.health]
    +//Brute Damage: [src.victim.getBruteLoss()]
    +//Toxins Damage: [src.victim.getToxLoss()]
    +//Fire Damage: [src.victim.getFireLoss()]
    +//Suffocation Damage: [src.victim.getOxyLoss()]
    +//Patient Status: [src.victim.stat ? "Non-Responsive" : "Awake"]
    +//Heartbeat rate: [victim.get_pulse(GETPULSE_TOOL)]
    +//"} +// else +// src.victim = null +// dat += {" +//Patient Information:
    +//
    +//No Patient Detected +//"} +// user << browse(dat, "window=op") +// onclose(user, "op") + +/obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)//ui is mostly copy pasta from the sleeper ui + var/data[0] + var/mob/living/carbon/human/occupant = src.table.victim + data["hasOccupant"] = occupant ? 1 : 0 + var/occupantData[0] + + if (occupant) + occupantData["name"] = occupant.name + occupantData["stat"] = occupant.stat + occupantData["health"] = occupant.health + occupantData["maxHealth"] = occupant.maxHealth + occupantData["minHealth"] = config.health_threshold_dead + occupantData["bruteLoss"] = occupant.getBruteLoss() + occupantData["oxyLoss"] = occupant.getOxyLoss() + occupantData["toxLoss"] = occupant.getToxLoss() + occupantData["fireLoss"] = occupant.getFireLoss() + occupantData["paralysis"] = occupant.paralysis + occupantData["hasBlood"] = 0 + occupantData["bodyTemperature"] = occupant.bodytemperature + occupantData["maxTemp"] = 1000 // If you get a burning vox armalis into the sleeper, congratulations + // Because we can put simple_animals in here, we need to do something tricky to get things working nice + occupantData["temperatureSuitability"] = 0 // 0 is the baseline + if (ishuman(occupant) && occupant.species) + var/datum/species/sp = occupant.species + if (occupant.bodytemperature < sp.cold_level_3) + occupantData["temperatureSuitability"] = -3 + else if (occupant.bodytemperature < sp.cold_level_2) + occupantData["temperatureSuitability"] = -2 + else if (occupant.bodytemperature < sp.cold_level_1) + occupantData["temperatureSuitability"] = -1 + else if (occupant.bodytemperature > sp.heat_level_3) + occupantData["temperatureSuitability"] = 3 + else if (occupant.bodytemperature > sp.heat_level_2) + occupantData["temperatureSuitability"] = 2 + else if (occupant.bodytemperature > sp.heat_level_1) + occupantData["temperatureSuitability"] = 1 + else if (istype(occupant, /mob/living/simple_animal)) + var/mob/living/simple_animal/silly = occupant + if (silly.bodytemperature < silly.minbodytemp) + occupantData["temperatureSuitability"] = -3 + else if (silly.bodytemperature > silly.maxbodytemp) + occupantData["temperatureSuitability"] = 3 + // Blast you, imperial measurement system + occupantData["btCelsius"] = occupant.bodytemperature - T0C + occupantData["btFaren"] = ((occupant.bodytemperature - T0C) * (9.0/5.0))+ 32 + + if (ishuman(occupant) && occupant.vessel && !(occupant.species && occupant.species.flags & NO_BLOOD)) + occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) + occupantData["hasBlood"] = 1 + occupantData["bloodLevel"] = round(occupant.vessel.get_reagent_amount("blood")) + occupantData["bloodMax"] = occupant.max_blood + occupantData["bloodPercent"] = round(100*(occupant.vessel.get_reagent_amount("blood")/occupant.max_blood), 0.01) //copy pasta ends here + + occupantData["bloodType"]=occupant.b_type + + data["occupant"] = occupantData + data["verbose"]=verbose + data["oxyAlarm"]=oxyAlarm + data["choice"]=choice + data["health"]=healthAnnounce + data["crit"]=crit + data["healthAlarm"]=healthAlarm + data["oxy"]=oxy + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "op_computer.tmpl", "Patient Monitor", 650, 455) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) - user.set_machine(src) - var/dat = "Operating Computer\n" - dat += "Close

    " //| Update" - if(src.table && (src.table.check_victim())) - src.victim = src.table.victim - dat += {" - Patient Information:
    -
    - Name: [src.victim.real_name]
    - Age: [src.victim.age]
    - Blood Type: [src.victim.b_type]
    -
    - Health: [src.victim.health]
    - Brute Damage: [src.victim.getBruteLoss()]
    - Toxins Damage: [src.victim.getToxLoss()]
    - Fire Damage: [src.victim.getFireLoss()]
    - Suffocation Damage: [src.victim.getOxyLoss()]
    - Patient Status: [src.victim.stat ? "Non-Responsive" : "Stable"]
    - Heartbeat rate: [victim.get_pulse(GETPULSE_TOOL)]
    - "} - if(victim.surgeries.len) - dat += "

    Initiated Procedures
    " - for(var/datum/surgery/procedure in victim.surgeries) - dat += "[capitalize(procedure.name)]
    " - var/datum/surgery_step/surgery_step = procedure.get_surgery_step() - dat += "Next step: [capitalize(surgery_step.name)]
    " - else - src.victim = null - dat += {" - Patient Information:
    -
    - No Patient Detected - "} - user << browse(dat, "window=op") - onclose(user, "op") /obj/machinery/computer/operating/Topic(href, href_list) @@ -90,9 +165,48 @@ return 1 if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) + + if(href_list["verboseOn"]) + verbose=1 + if(href_list["verboseOff"]) + verbose=0 + if(href_list["healthOn"]) + healthAnnounce=1 + if(href_list["healthOff"]) + healthAnnounce=0 + if(href_list["critOn"]) + crit=1 + if(href_list["critOff"]) + crit=0 + if(href_list["oxyOn"]) + oxy=1 + if(href_list["oxyOff"]) + oxy=0 + if(href_list["oxy_adj"]!=0) + oxyAlarm=oxyAlarm+text2num(href_list["oxy_adj"]) + if(href_list["choiceOn"]) + choice=1 + if(href_list["choiceOff"]) + choice=0 + if(href_list["health_adj"]!=0) + healthAlarm=healthAlarm+text2num(href_list["health_adj"]) return /obj/machinery/computer/operating/process() - if(..()) - src.updateDialog() + + if(table && table.check_victim()) + if(verbose) + if(patientName!=table.victim.name) + patientName=table.victim.name + atom_say("New patient detected, loading stats") + victim = table.victim + atom_say("[victim.real_name], [victim.b_type] blood, [victim.stat ? "Non-Responsive" : "Awake"]") + if(nextTick < world.time) + nextTick=world.time + OP_COMPUTER_COOLDOWN + if(crit && victim.health <= -50 ) + playsound(src.loc, 'sound/machines/defib_success.ogg', 50, 0) + if(oxy && victim.getOxyLoss()>oxyAlarm) + playsound(src.loc, 'sound/machines/defib_saftyOff.ogg', 50, 0) + if(healthAnnounce && victim.health <= healthAlarm) + atom_say("[round(victim.health)]") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 5d53136a230..8677aa80420 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -213,85 +213,86 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc speech_problem_flag = 1 gene.OnMobLife(src) - if (radiation) + if(!(species.flags & RADIMMUNE)) + if (radiation) - if(src.get_int_organ(/obj/item/organ/internal/nucleation/resonant_crystal)) - var/rads = radiation/25 - radiation -= rads - radiation -= 0.1 - reagents.add_reagent("radium", rads/10) - if( prob(10) ) - src << "You feel relaxed." - return - - if (radiation > 100) - radiation = 100 - if(!(species.flags & RAD_ABSORB)) - Weaken(10) - if(!lying) - src << "You feel weak." - emote("collapse") - - if (radiation < 0) - radiation = 0 - - else - if(species.flags & RAD_ABSORB) + if((locate(src.internal_organs_by_name["resonant crystal"]) in src.internal_organs)) var/rads = radiation/25 radiation -= rads - nutrition += rads - adjustBruteLoss(-(rads)) - adjustOxyLoss(-(rads)) - adjustToxLoss(-(rads)) - updatehealth() + radiation -= 0.1 + reagents.add_reagent("radium", rads/10) + if( prob(10) ) + src << "You feel relaxed." return - var/damage = 0 - switch(radiation) - if(0 to 49) - radiation-- - if(prob(25)) - adjustToxLoss(1) + if (radiation > 100) + radiation = 100 + if(!(species.flags & RAD_ABSORB)) + Weaken(10) + if(!lying) + src << "You feel weak." + emote("collapse") + + if (radiation < 0) + radiation = 0 + + else + if(species.flags & RAD_ABSORB) + var/rads = radiation/25 + radiation -= rads + nutrition += rads + adjustBruteLoss(-(rads)) + adjustOxyLoss(-(rads)) + adjustToxLoss(-(rads)) + updatehealth() + return + + var/damage = 0 + switch(radiation) + if(0 to 49) + radiation-- + if(prob(25)) + adjustToxLoss(1) + damage = 1 + updatehealth() + + if(50 to 74) + radiation -= 2 damage = 1 + adjustToxLoss(1) + if(prob(5)) + radiation -= 5 + Weaken(3) + if(!lying) + src << "You feel weak." + emote("collapse") updatehealth() - if(50 to 74) - radiation -= 2 - damage = 1 - adjustToxLoss(1) - if(prob(5)) + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + damage = 3 + if(prob(1)) + src << "You mutate!" + randmutb(src) + domutcheck(src,null) + emote("gasp") + updatehealth() + + else radiation -= 5 - Weaken(3) - if(!lying) - src << "You feel weak." - emote("collapse") - updatehealth() + adjustToxLoss(5) + damage = 5 + if(prob(1)) + src << "You mutate!" + randmutb(src) + domutcheck(src,null) + emote("gasp") + updatehealth() - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - damage = 3 - if(prob(1)) - src << "You mutate!" - randmutb(src) - domutcheck(src,null) - emote("gasp") - updatehealth() - - else - radiation -= 5 - adjustToxLoss(5) - damage = 5 - if(prob(1)) - src << "You mutate!" - randmutb(src) - domutcheck(src,null) - emote("gasp") - updatehealth() - - if(damage && organs.len) - var/obj/item/organ/external/O = pick(organs) - if(istype(O)) O.add_autopsy_data("Radiation Poisoning", damage) + if(damage && organs.len) + var/obj/item/organ/external/O = pick(organs) + if(istype(O)) O.add_autopsy_data("Radiation Poisoning", damage) /mob/living/carbon/human/breathe() if(reagents.has_reagent("lexorin")) @@ -844,7 +845,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc //the analgesic effect wears off slowly analgesic = max(0, analgesic - 1) - if(hallucination && !(species.flags & NO_DNA_RAD)) + if(hallucination) spawn() handle_hallucinations() @@ -883,9 +884,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc //Vision //god knows why this is here - var/obj/item/organ/internal/vision + var/obj/item/organ/vision if(species.vision_organ) - vision = get_int_organ(/obj/item/organ/internal/eyes)//wot? + vision = internal_organs_by_name[species.vision_organ] if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means. eye_blind = 0 @@ -1205,7 +1206,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc /mob/living/carbon/human/proc/handle_heartbeat() var/client/C = src.client if(C && C.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref - var/obj/item/organ/internal/heart/H = get_int_organ(/obj/item/organ/internal/heart) + var/obj/item/organ/heart/H = internal_organs_by_name["heart"] if(!H) //H.status will runtime if there is no H (obviously) return From 4b9c1a32193a9e22d9b045cd958aae4da32ba430 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 2 Feb 2016 18:34:23 -0500 Subject: [PATCH 044/442] Buckets and set transfer amount improvement --- code/modules/reagents/reagent_containers.dm | 6 +++++- .../modules/reagents/reagent_containers/glass_containers.dm | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 7f9c3ee3c98..e80b3574106 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -12,9 +12,13 @@ set name = "Set transfer amount" set category = "Object" set src in range(0) + if(usr.stat || !usr.canmove || usr.restrained()) return - var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts + var/default = null + if(amount_per_transfer_from_this in possible_transfer_amounts) + default = amount_per_transfer_from_this + var/N = input("Amount per transfer from this:", "[src]", default) as null|anything in possible_transfer_amounts if (N) amount_per_transfer_from_this = N diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index a10e265fecf..1740995b38f 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -336,7 +336,7 @@ materials = list(MAT_METAL=200) w_class = 3.0 amount_per_transfer_from_this = 20 - possible_transfer_amounts = list(5,10,15,25,30,50,80,100,120) + possible_transfer_amounts = list(5,10,15,20,25,30,50,80,100,120) volume = 120 flags = OPENCONTAINER From e43f912c99a1bccbc808a9c335f4779965e85b7f Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 2 Feb 2016 18:53:25 -0500 Subject: [PATCH 045/442] Shortened default pill name --- code/modules/reagents/Chemistry-Machinery.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index f9c8dead1b8..5fe33d73b03 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -578,7 +578,7 @@ if (count <= 0) return var/amount_per_pill = reagents.total_volume/count if (amount_per_pill > 50) amount_per_pill = 50 - var/name = input(usr,"Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill] units)") as text|null + var/name = input(usr,"Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill]u)") as text|null if(!name) return name = reject_bad_text(name) @@ -618,7 +618,7 @@ if (count > 20) count = 20 //Pevent people from creating huge stacks of patches easily. Maybe move the number to defines? var/amount_per_patch = reagents.total_volume/count if (amount_per_patch > 40) amount_per_patch = 40 - var/name = input(usr,"Name:","Name your patch!","[reagents.get_master_reagent_name()] ([amount_per_patch] units)") as text|null + var/name = input(usr,"Name:","Name your patch!","[reagents.get_master_reagent_name()] ([amount_per_patch]u)") as text|null if(!name) return name = reject_bad_text(name) From c3fbef1f64e9a5d5c14bc107bc1916be33425bbd Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 2 Feb 2016 19:15:26 -0500 Subject: [PATCH 046/442] Gave chaplain service radio headset --- code/game/jobs/job/support_chaplain.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/jobs/job/support_chaplain.dm b/code/game/jobs/job/support_chaplain.dm index 25ca290b0ab..d9de164d5de 100644 --- a/code/game/jobs/job/support_chaplain.dm +++ b/code/game/jobs/job/support_chaplain.dm @@ -19,6 +19,7 @@ if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear) H.equip_or_collect(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform) H.equip_or_collect(new /obj/item/device/pda/chaplain(H), slot_wear_pda) H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes) From 6001f3d80c07bb9be639925dd8f90d8f61a06eee Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 2 Feb 2016 20:46:38 -0500 Subject: [PATCH 047/442] ayyy merge conflicts fix --- code/game/machinery/computer/Operating.dm | 6 ++ code/modules/mob/living/carbon/human/life.dm | 6 +- code/modules/projectiles/guns/mounted.dm | 4 +- .../reagents/drink/reagents_alcohol.dm | 2 +- code/modules/surgery/implant.dm | 32 +++--- code/modules/surgery/organs/organ_internal.dm | 2 +- code/modules/surgery/organs_internal.dm | 50 ++++----- code/modules/surgery/other.dm | 24 ++--- code/modules/surgery/robotics.dm | 96 +++++++++--------- code/modules/surgery/slime.dm | 24 ++--- icons/obj/gun.dmi | Bin 80216 -> 80216 bytes nano/templates/op_computer.tmpl | 9 +- 12 files changed, 134 insertions(+), 121 deletions(-) diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 5251898e7c7..cd30465370d 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -139,6 +139,12 @@ occupantData["bloodPercent"] = round(100*(occupant.vessel.get_reagent_amount("blood")/occupant.max_blood), 0.01) //copy pasta ends here occupantData["bloodType"]=occupant.b_type + if(occupant.surgeries.len) + occupantData["inSurgery"] = 1 + for(var/datum/surgery/procedure in occupant.surgeries) + occupantData["surgeryName"] = "[capitalize(procedure.name)]" + var/datum/surgery_step/surgery_step = procedure.get_surgery_step() + occupantData["stepName"] = "[capitalize(surgery_step.name)]" data["occupant"] = occupantData data["verbose"]=verbose diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 8677aa80420..d52ad9665c0 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -216,7 +216,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(!(species.flags & RADIMMUNE)) if (radiation) - if((locate(src.internal_organs_by_name["resonant crystal"]) in src.internal_organs)) + if(src.get_int_organ(/obj/item/organ/internal/nucleation/resonant_crystal)) var/rads = radiation/25 radiation -= rads radiation -= 0.1 @@ -886,7 +886,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc //Vision //god knows why this is here var/obj/item/organ/vision if(species.vision_organ) - vision = internal_organs_by_name[species.vision_organ] + vision = src.get_int_organ(species.vision_organ) if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means. eye_blind = 0 @@ -1206,7 +1206,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc /mob/living/carbon/human/proc/handle_heartbeat() var/client/C = src.client if(C && C.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref - var/obj/item/organ/heart/H = internal_organs_by_name["heart"] + var/obj/item/organ/internal/heart/H = src.get_int_organ(/obj/item/organ/internal/heart) if(!H) //H.status will runtime if there is no H (obviously) return diff --git a/code/modules/projectiles/guns/mounted.dm b/code/modules/projectiles/guns/mounted.dm index 551d56bc4f8..d8060391cf5 100644 --- a/code/modules/projectiles/guns/mounted.dm +++ b/code/modules/projectiles/guns/mounted.dm @@ -1,9 +1,9 @@ /obj/item/weapon/gun/energy/gun/advtaser/mounted name = "mounted taser" desc = "An arm mounted dual-mode weapon that fires electrodes and disabler shots." - icon_state = "armcannon_stun" + icon_state = "armcannonstun" item_state = "armcannonstun" - modifystate = "armcannon_stun" + modifystate = "armcannonstun" force = "5" self_recharge = 1 flags = NODROP diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm index 726916c9d4c..66f436420a2 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -36,7 +36,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"] + var/obj/item/organ/internal/liver/L = H.get_int_organ(/obj/item/organ/internal/liver) if(!L || (istype(L) && L.dna.species in list("Skrell", "Neara"))) d*=5 diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index ec40af5b60a..8bf203a8414 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -49,8 +49,8 @@ /datum/surgery_step/cavity/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") + user.visible_message(" [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ + " Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") affected.createwound(CUT, 20) /datum/surgery_step/cavity/make_space @@ -77,8 +77,8 @@ /datum/surgery_step/cavity/make_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ - "\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) + user.visible_message(" [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ + " You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) return 1 @@ -111,8 +111,8 @@ /datum/surgery_step/cavity/close_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ - "\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) + user.visible_message(" [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ + " You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) return 1 @@ -160,10 +160,10 @@ return 0//fail if(tool) - user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ - "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) + user.visible_message(" [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ + " You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) if (IC || (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT))) - user << "\red You tear some vessels trying to fit the object in the cavity." + user << " You tear some vessels trying to fit the object in the cavity." var/datum/wound/internal_bleeding/I = new () affected.wounds += I affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) @@ -220,8 +220,8 @@ var/obj/item/obj = affected.implants[1] - user.visible_message("\blue [user] takes something out of [target]'s [affected.name] with \the [tool].", \ - "\blue You take [obj] out of [target]'s [affected.name]s with \the [tool]." ) + user.visible_message(" [user] takes something out of [target]'s [affected.name] with \the [tool].", \ + " You take [obj] out of [target]'s [affected.name]s with \the [tool]." ) affected.implants -= obj //Handle possessive brain borers. @@ -259,8 +259,8 @@ //target.sec_hud_set_implants() return 1 else if (affected.hidden) - user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) + user.visible_message(" [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ + " You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) affected.hidden.loc = get_turf(target) if(!affected.hidden.blood_DNA) affected.hidden.blood_DNA = list() @@ -268,8 +268,8 @@ affected.hidden.update_icon() affected.hidden = null else - user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ - "You could not find anything inside [target]'s [affected.name]") + user.visible_message(" [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ + "You could not find anything inside [target]'s [affected.name].") return 1 /datum/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -280,7 +280,7 @@ fail_prob += 100 - tool_quality(tool) if (prob(fail_prob)) var/obj/item/weapon/implant/imp = affected.implants[1] - user.visible_message("\red Something beeps inside [target]'s [affected.name]!") + user.visible_message(" Something beeps inside [target]'s [affected.name]!") playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) spawn(25) imp.activate() diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 9a1476bdfbc..9dbbbb6216f 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -236,7 +236,7 @@ if (germ_level > INFECTION_LEVEL_ONE) if(prob(1)) - owner << "\red Your skin itches." + owner << " Your skin itches." if (germ_level > INFECTION_LEVEL_TWO) if(prob(1)) spawn owner.vomit() diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 4786b62c377..0e53b278795 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -85,8 +85,8 @@ ..() /datum/surgery_step/internal/remove_embryo/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") + user.visible_message(" [user] rips the larva out of [target]'s ribcage!", + "You rip the larva out of [target]'s ribcage!") var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) if(A) @@ -151,7 +151,7 @@ return -1 if(target.get_int_organ(I)) - user << "\red \The [target] already has [I]." + user << " \The [target] already has [I]." return -1 user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ @@ -244,12 +244,12 @@ I.surgeryize() if(I && I.damage > 0) if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) - user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ - "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) + user.visible_message(" [user] treats damage to [target]'s [I.name] with [tool_name].", \ + " You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste)) - user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ - "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) + user.visible_message(" [user] treats damage to [target]'s [I.name] with [tool_name].", \ + " You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 //return 1 else if(current_type == "insert") @@ -257,15 +257,15 @@ user.drop_item() I.insert(target) spread_germs_to_organ(I, user) - user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ - "\blue You have transplanted \the [tool] into [target]'s [affected.name].") + user.visible_message(" [user] has transplanted \the [tool] into [target]'s [affected.name].", \ + " You have transplanted \the [tool] into [target]'s [affected.name].") I.status &= ~ORGAN_CUT_AWAY else if(current_type == "extract") if(I && I.owner == target) - user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ - "\blue You have separated and extracted [target]'s [I] with \the [tool].") + user.visible_message(" [user] has separated and extracts [target]'s [I] with \the [tool]." , \ + " You have separated and extracted [target]'s [I] with \the [tool].") add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") spread_germs_to_organ(I, user) @@ -279,13 +279,13 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) if(affected.encased) - var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." + var/msg = " [user] bends [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = " You bend [target]'s [affected.encased] back into place with \the [tool]." user.visible_message(msg, self_msg) affected.open = 2.5 else - var/msg = "[user] pulls [target]'s flesh back into place with \the [tool]." - var/self_msg = "You pull [target]'s flesh back into place with \the [tool]." + var/msg = "[user] pulls [target]'s flesh back into place with \the [tool]." + var/self_msg = "You pull [target]'s flesh back into place with \the [tool]." user.visible_message(msg, self_msg) return 1 @@ -299,8 +299,8 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") + user.visible_message(" [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ + " Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") var/dam_amt = 2 if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) @@ -318,8 +318,8 @@ return 0 else if(current_type == "insert") - user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ - "\red Your hand slips, damaging \the [tool]!") + user.visible_message(" [user]'s hand slips, damaging \the [tool]!", \ + " Your hand slips, damaging \the [tool]!") var/obj/item/organ/internal/I = tool if(istype(I) &&!(I.tough)) I.take_damage(rand(3,5),0) @@ -329,8 +329,8 @@ else if(current_type == "extract") if(I && I.owner == target) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") + user.visible_message(" [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ + " Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") affected.createwound(BRUISE, 20) else user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", @@ -338,13 +338,13 @@ return 0 else if(current_type == "finish") if(affected.encased) - var/msg = "\red [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!" - var/self_msg = "\red Your hand slips, bending [target]'s [affected.encased] the wrong way!" + var/msg = " [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!" + var/self_msg = " Your hand slips, bending [target]'s [affected.encased] the wrong way!" user.visible_message(msg, self_msg) affected.fracture() else - var/msg = "\red [user]'s hand slips, tearing the skin!" - var/self_msg = "\red Your hand slips, tearing skin!" + var/msg = " [user]'s hand slips, tearing the skin!" + var/self_msg = " Your hand slips, tearing skin!" user.visible_message(msg, self_msg) affected.createwound(BRUISE, 20) return 0 diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index da775298e29..920a5381f04 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -35,8 +35,8 @@ /datum/surgery_step/fix_vein/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].", \ - "\blue You have patched the damaged vein in [target]'s [affected.name] with \the [tool].") + user.visible_message(" [user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].", \ + " You have patched the damaged vein in [target]'s [affected.name] with \the [tool].") for(var/datum/wound/W in affected.wounds) if(W.internal) affected.wounds -= W @@ -49,8 +49,8 @@ /datum/surgery_step/fix_vein/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") + user.visible_message(" [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ + " Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") affected.take_damage(5, 0) return 0 @@ -88,16 +88,16 @@ /datum/surgery_step/fix_dead_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool].", \ - "\blue You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool].") + user.visible_message(" [user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool].", \ + " You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool].") affected.open = 3 return 1 /datum/surgery_step/fix_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") + user.visible_message(" [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ + " Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") affected.createwound(CUT, 20, 1) return 0 @@ -156,8 +156,8 @@ if(container.reagents.has_reagent("mitocholide")) affected.status &= ~ORGAN_DEAD - user.visible_message("\blue [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", \ - "\blue You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].") + user.visible_message(" [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", \ + " You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].") return 1 @@ -172,8 +172,8 @@ var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue - user.visible_message("\red [user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!" , \ - "\red Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!") + user.visible_message(" [user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!" , \ + " Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!") //no damage or anything, just wastes medicine diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 0d10998e706..a1a957af02c 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -79,15 +79,15 @@ /datum/surgery_step/robotics/external/unscrew_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "\blue You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].",) + user.visible_message(" [user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ + " You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].",) affected.open = 1 return 1 /datum/surgery_step/robotics/external/unscrew_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].", \ - "\red Your [tool] slips, failing to unscrew [target]'s [affected.name].") + user.visible_message(" [user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].", \ + " Your [tool] slips, failing to unscrew [target]'s [affected.name].") return 0 /datum/surgery_step/robotics/external/open_hatch @@ -113,15 +113,15 @@ /datum/surgery_step/robotics/external/open_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "\blue You open the maintenance hatch on [target]'s [affected.name] with \the [tool]." ) + user.visible_message(" [user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ + " You open the maintenance hatch on [target]'s [affected.name] with \the [tool]." ) affected.open = 2 return 1 /datum/surgery_step/robotics/external/open_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].", - "\red Your [tool] slips, failing to open the hatch on [target]'s [affected.name].") + user.visible_message(" [user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].", + " Your [tool] slips, failing to open the hatch on [target]'s [affected.name].") return 0 /datum/surgery_step/robotics/external/close_hatch @@ -147,16 +147,16 @@ /datum/surgery_step/robotics/external/close_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \ - "\blue You close and secure the hatch on [target]'s [affected.name] with \the [tool].") + user.visible_message(" [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \ + " You close and secure the hatch on [target]'s [affected.name] with \the [tool].") affected.open = 0 affected.germ_level = 0 return 1 /datum/surgery_step/robotics/external/close_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].", - "\red Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].") + user.visible_message(" [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].", + " Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].") return 0 /datum/surgery_step/robotics/external/repair_brute @@ -184,8 +184,8 @@ /datum/surgery_step/robotics/external/repair_brute/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] finishes patching damage to [target]'s [affected.name] with \the [tool].", \ - "\blue You finish patching damage to [target]'s [affected.name] with \the [tool].") + user.visible_message(" [user] finishes patching damage to [target]'s [affected.name] with \the [tool].", \ + " You finish patching damage to [target]'s [affected.name] with \the [tool].") affected.heal_damage(rand(30,50),0,1,1) if(affected.disfigured) affected.disfigured = 0 @@ -195,8 +195,8 @@ /datum/surgery_step/robotics/external/repair_brute/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].", - "\red Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].") + user.visible_message(" [user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].", + " Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].") target.apply_damage(rand(5,10), BURN, affected) return 0 @@ -229,15 +229,15 @@ /datum/surgery_step/robotics/external/repair_burn/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] finishes splicing cable into [target]'s [affected.name].", \ - "\blue You finishes splicing new cable into [target]'s [affected.name].") + user.visible_message(" [user] finishes splicing cable into [target]'s [affected.name].", \ + " You finishes splicing new cable into [target]'s [affected.name].") affected.heal_damage(0,rand(30,50),1,1) return 1 /datum/surgery_step/robotics/external/repair_burn/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user] causes a short circuit in [target]'s [affected.name]!", - "\red You cause a short circuit in [target]'s [affected.name]!") + user.visible_message(" [user] causes a short circuit in [target]'s [affected.name]!", + " You cause a short circuit in [target]'s [affected.name]!") target.apply_damage(rand(5,10), BURN, affected) return 0 @@ -283,11 +283,11 @@ return -1 if(target.get_int_organ(I)) - user << "\red \The [target] already has [I]." + user << " \The [target] already has [I]." return -1 - user.visible_message("[user] begins reattaching [target]'s [tool] with \the [tool].", \ - "You start reattaching [target]'s [surgery.current_organ] with \the [tool].") + user.visible_message("[user] begins reattaching [target]'s [off_tool] with \the [tool].", \ + "You start reattaching [target]'s [off_tool] with \the [tool].") target.custom_pain("Someone's rooting around in your [affected.name]!",1) else if(istype(tool,/obj/item/device/mmi/)) current_type = "install" @@ -385,8 +385,8 @@ for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic >= 2) - user.visible_message("\blue [user] repairs [target]'s [I.name] with [tool].", \ - "\blue You repair [target]'s [I.name] with [tool]." ) + user.visible_message(" [user] repairs [target]'s [I.name] with [tool].", \ + " You repair [target]'s [I.name] with [tool]." ) I.damage = 0 else if(current_type == "insert") var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ) @@ -395,14 +395,14 @@ I = off_tool //user.drop_item() I.insert(target) - user.visible_message("\blue [user] has reattached [target]'s [I] with \the [tool]." , \ - "\blue You have reattached [target]'s [I] with \the [tool].") + user.visible_message(" [user] has reattached [target]'s [I] with \the [tool]." , \ + " You have reattached [target]'s [I] with \the [tool].") if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY else if (current_type == "install") - user.visible_message("\blue [user] has installed \the [tool] into [target]'s [affected.name].", \ - "\blue You have installed \the [tool] into [target]'s [affected.name].") + user.visible_message(" [user] has installed \the [tool] into [target]'s [affected.name].", \ + " You have installed \the [tool] into [target]'s [affected.name].") var/obj/item/device/mmi/M = tool var/obj/item/organ/internal/brain/mmi_holder/holder = new() @@ -420,10 +420,10 @@ else if(current_type == "extract") if(I && I.owner == target) - user.visible_message("\blue [user] has decoupled [target]'s [surgery.current_organ] with \the [tool]." , \ - "\blue You have decoupled [target]'s [surgery.current_organ] with \the [tool].") + user.visible_message(" [user] has decoupled [target]'s [surgery.current_organ] with \the [tool]." , \ + " You have decoupled [target]'s [surgery.current_organ] with \the [tool].") - add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") + add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") spread_germs_to_organ(I, user) I.status |= ORGAN_CUT_AWAY I.remove(target) @@ -433,8 +433,8 @@ "You can't extract anything from [target]'s [parse_zone(target_zone)]!") else if(current_type == "finish") var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \ - "\blue You close and secure the hatch on [target]'s [affected.name] with \the [tool].") + user.visible_message(" [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \ + " You close and secure the hatch on [target]'s [affected.name] with \the [tool].") affected.open = 0 affected.germ_level = 0 return 1 @@ -447,8 +447,8 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!") + user.visible_message(" [user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!", \ + " Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!") target.adjustToxLoss(5) affected.createwound(CUT, 5) @@ -458,20 +458,20 @@ I.take_damage(rand(3,5),0) else if(current_type == "insert") - user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \ - "\red Your hand slips, disconnecting \the [tool].") + user.visible_message(" [user]'s hand slips, disconnecting \the [tool].", \ + " Your hand slips, disconnecting \the [tool].") else if(current_type == "extract") - user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \ - "\red Your hand slips, disconnecting \the [tool].") + user.visible_message(" [user]'s hand slips, disconnecting \the [tool].", \ + " Your hand slips, disconnecting \the [tool].") else if (current_type == "install") - user.visible_message("\red [user]'s hand slips!.", \ - "\red Your hand slips!") + user.visible_message(" [user]'s hand slips!.", \ + " Your hand slips!") else if(current_type == "finish") var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].", - "\red Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].") + user.visible_message(" [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].", + " Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].") return -1 @@ -526,8 +526,8 @@ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has installed \the [tool] into [target]'s [affected.name].", \ - "\blue You have installed \the [tool] into [target]'s [affected.name].") + user.visible_message(" [user] has installed \the [tool] into [target]'s [affected.name].", \ + " You have installed \the [tool] into [target]'s [affected.name].") var/obj/item/device/mmi/M = tool var/obj/item/organ/internal/brain/mmi_holder/holder = new() @@ -544,5 +544,5 @@ M.brainmob.mind.transfer_to(target) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\red [user]'s hand slips.", \ - "\red Your hand slips.") \ No newline at end of file + user.visible_message(" [user]'s hand slips.", \ + " Your hand slips.") \ No newline at end of file diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index 198fc54effc..39db3765469 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -31,15 +31,15 @@ "You start cutting through [target]'s flesh with \the [tool].") /datum/surgery_step/slime/cut_flesh/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] cuts through [target]'s flesh with \the [tool].", \ - "\blue You cut through [target]'s flesh with \the [tool], revealing its silky innards.") + user.visible_message(" [user] cuts through [target]'s flesh with \the [tool].", \ + " You cut through [target]'s flesh with \the [tool], revealing its silky innards.") target.core_removal_stage = 1 return 1 /datum/surgery_step/slime/cut_flesh/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("\red [user]'s hand slips, tearing [target]'s flesh with \the [tool]!", \ - "\red Your hand slips, tearing [target]'s flesh with \the [tool]!") + user.visible_message(" [user]'s hand slips, tearing [target]'s flesh with \the [tool]!", \ + " Your hand slips, tearing [target]'s flesh with \the [tool]!") return 0 /datum/surgery_step/slime/cut_innards @@ -59,14 +59,14 @@ "You start cutting [target]'s silky innards apart with \the [tool].") /datum/surgery_step/slime/cut_innards/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] cuts [target]'s innards apart with \the [tool], exposing the cores.", \ - "\blue You cut [target]'s innards apart with \the [tool], exposing the cores.") + user.visible_message(" [user] cuts [target]'s innards apart with \the [tool], exposing the cores.", \ + " You cut [target]'s innards apart with \the [tool], exposing the cores.") target.core_removal_stage = 2 return 1 /datum/surgery_step/slime/cut_innards/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("\red [user]'s hand slips, tearing [target]'s innards with \the [tool]!", \ - "\red Your hand slips, tearing [target]'s innards with \the [tool]!") + user.visible_message(" [user]'s hand slips, tearing [target]'s innards with \the [tool]!", \ + " Your hand slips, tearing [target]'s innards with \the [tool]!") return 0 /datum/surgery_step/slime/saw_core @@ -86,8 +86,8 @@ /datum/surgery_step/slime/saw_core/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) target.cores-- - user.visible_message("\blue [user] cuts out one of [target]'s cores with \the [tool].",, \ - "\blue You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.") + user.visible_message(" [user] cuts out one of [target]'s cores with \the [tool].", \ + " You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.") if(target.cores >= 0) new target.coretype(target.loc) @@ -97,6 +97,6 @@ return 1 /datum/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("\red [user]'s hand slips, causing \him to miss the core!", \ - "\red Your hand slips, causing you to miss the core!") + user.visible_message(" [user]'s hand slips, causing \him to miss the core!", \ + " Your hand slips, causing you to miss the core!") return 0 \ No newline at end of file diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 67dadcd2a909973b541501a2272a467534414244..dca7c439d3519ab4db16a8643ed9f896aa47316f 100644 GIT binary patch delta 82 zcmV-Y0ImPn@&wrO1h9w*KT&{vq0x_NjRgrfy)$$vNUGEQi$?#SokPulse:
    {{:data.occupant.pulse}} bpm
    {{/if}} - + {{if data.occupant.inSurgery}} +
    +
    Initiated Surgery Procedure:
    {{:data.occupant.surgeryName}}
    +
    +
    Next Step:
    {{:data.occupant.stepName}}
    + +
    + {{/if}}

    {{/if}} From 0fc841f0f99efb1aac18230d1e2aa25b7edcc4df Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 3 Feb 2016 00:40:10 -0500 Subject: [PATCH 048/442] can i sleep uyet --- code/_onclick/item_attack.dm | 2 ++ code/modules/projectiles/guns/mounted.dm | 4 ++-- code/modules/surgery/helpers.dm | 4 ++-- code/modules/surgery/limb_reattach.dm | 9 --------- code/modules/surgery/organs/organ_internal.dm | 5 +++-- code/modules/surgery/organs_internal.dm | 3 +-- 6 files changed, 10 insertions(+), 17 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index ee2d7c56cf7..b766acb1300 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -38,6 +38,8 @@ if(!attempt_initiate_surgery(src, M, user)) return 0 if(is_sharp(src)) + if( isslime(M) && !attempt_initiate_surgery(src, M, user)) + return 0 if(!attempt_initiate_surgery(src, M, user)) return 0 return diff --git a/code/modules/projectiles/guns/mounted.dm b/code/modules/projectiles/guns/mounted.dm index d8060391cf5..5183998cdc1 100644 --- a/code/modules/projectiles/guns/mounted.dm +++ b/code/modules/projectiles/guns/mounted.dm @@ -1,4 +1,4 @@ -/obj/item/weapon/gun/energy/gun/advtaser/mounted +/obj/item/weapon/gun/energy/advtaser/mounted name = "mounted taser" desc = "An arm mounted dual-mode weapon that fires electrodes and disabler shots." icon_state = "armcannonstun" @@ -11,7 +11,7 @@ w_class = 5.0 can_flashlight = 0 -/obj/item/weapon/gun/energy/gun/advtaser/mounted/dropped()//if somebody manages to drop this somehow... +/obj/item/weapon/gun/energy/advtaser/mounted/dropped()//if somebody manages to drop this somehow... src.loc = null//send it to nullspace to get retrieved by the implant later on. gotta cover those edge cases. /obj/item/weapon/gun/energy/laser/mounted diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index b5aeb2a61e2..f8fad583f34 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -8,7 +8,7 @@ H = M affecting = H.get_organ(check_zone(selected_zone)) - if(can_operate(H) || isslime(M) ||isalien(M)) //if they're prone or a slime + if(isslime(M) ||isalien(M) ||can_operate(H)) //if they're prone or a slime var/datum/surgery/current_surgery for(var/datum/surgery/S in M.surgeries) @@ -56,7 +56,7 @@ "You prepare to operate on [M]'s [parse_zone(selected_zone)].") else if(!current_surgery.step_in_progress) - if(current_surgery.status == 0 || current_surgery.status == 1 ) + if(current_surgery.status == 1 ) M.surgeries -= current_surgery user << "You stop the surgery." qdel(current_surgery) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 797c4172fa6..883d090b6b5 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -13,8 +13,6 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(!affected) - return 0 if(affected && (affected.status && ORGAN_DESTROYED)) return 0 if(affected.is_stump()) @@ -32,9 +30,6 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - - if(!affected) - return 1 if(affected && (affected.status && ORGAN_DESTROYED)) return 1 if(affected.is_stump()) @@ -51,10 +46,6 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - - - if(!affected) - return 1 if(affected && (affected.status && ORGAN_DESTROYED)) return 1 if(affected.is_stump()) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 9dbbbb6216f..66e4c56ec1d 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -350,17 +350,18 @@ M.mutations.Add(CLUMSY) M.dna.SetSEState(COMICBLOCK,1,1) - //genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED) + genemutcheck(M,COMICBLOCK,null,MUTCHK_FORCED) /obj/item/organ/internal/honktumor/remove(mob/living/carbon/M, special = 0) M.mutations.Remove(CLUMSY) M.mutations.Remove(COMICBLOCK) - //genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED) + genemutcheck(M,COMICBLOCK,null,MUTCHK_FORCED) /obj/item/organ/internal/honktumor/on_life() if(!owner) return + world << "[lasthonk]" if(lasthonk == 0) lasthonk = world.time if(lasthonk > world.time + 600|| lasthonk == 0) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 0e53b278795..9eee3833c8f 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -12,8 +12,7 @@ /datum/surgery/organ_manipulation/boneless possible_locs = list("chest","head","groin", "eyes", "mouth") steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - allowed_mob = list(/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) - disallowed_mob = list(/mob/living/carbon/human) + allowed_mob = list(/mob/living/carbon/human/diona) /datum/surgery/organ_manipulation/alien name = "alien organ manipulation" From 181eb47d8f51c946fb3c88b6a569b6887f6a0256 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Wed, 3 Feb 2016 00:28:53 -0800 Subject: [PATCH 049/442] goodbye, crusty code --- .../mob/living/simple_animal/constructs.dm | 58 +------------------ 1 file changed, 2 insertions(+), 56 deletions(-) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 21f88b5913b..da3283355f3 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -78,21 +78,6 @@ var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) adjustBruteLoss(damage) -/mob/living/simple_animal/construct/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(O.force) - var/damage = O.force - if (O.damtype == STAMINA) - damage = 0 - adjustBruteLoss(damage) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with [O] by [user]. ") - else - usr << "\red This weapon is ineffective, it does no damage." - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with [O]. ") - /mob/living/simple_animal/construct/narsie_act() return @@ -120,26 +105,7 @@ attack_sound = 'sound/weapons/punch3.ogg' status_flags = 0 construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall) - -/mob/living/simple_animal/construct/armoured/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(O.force) - if(O.force >= 11) - var/damage = O.force - if (O.damtype == STAMINA) - damage = 0 - adjustBruteLoss(damage) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with [O] by [user]. ") - else - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [O] bounces harmlessly off of [src]. ") - else - usr << "\red This weapon is ineffective, it does no damage." - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with [O]. ") + force_threshold = 11 /mob/living/simple_animal/construct/armoured/Life() @@ -245,30 +211,10 @@ speed = 5 environment_smash = 2 attack_sound = 'sound/weapons/punch4.ogg' + force_threshold = 11 var/energy = 0 var/max_energy = 1000 -/mob/living/simple_animal/construct/behemoth/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(O.force) - if(O.force >= 11) - var/damage = O.force - if (O.damtype == STAMINA) - damage = 0 - adjustBruteLoss(damage) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with [O] by [user]. ") - else - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [O] bounces harmlessly off of [src]. ") - else - usr << "\red This weapon is ineffective, it does no damage." - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with [O]. ") - - /////////////////////////////Harvester///////////////////////// From de45fc9abaefb02564cdc9ea123093966a40002b Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Wed, 3 Feb 2016 09:44:32 +0000 Subject: [PATCH 050/442] Cleans up slipping code Puts slipping into one proc rather than being dealt with individually by each item. The only changes to functionality here are where it would have been possible to slip on some items whilst flying. It will make any changes decided on in #3490 or any future changes far more easy to implement --- code/game/objects/effects/effect_system.dm | 12 +----- code/game/objects/items/devices/PDA/PDA.dm | 15 +------ .../game/objects/items/weapons/clown_items.dm | 28 ++----------- .../items/weapons/grenades/clowngrenade.dm | 14 ++----- code/game/turfs/simulated.dm | 41 +++---------------- code/modules/mob/living/carbon/carbon.dm | 22 +++++++++- 6 files changed, 38 insertions(+), 94 deletions(-) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 9548eea30ee..ee383613a68 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -985,16 +985,8 @@ steam.start() -- spawns the effect return if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP) || M.buckled) - return - if (istype (M, /mob/living/carbon/human) && M:species.bodyflags & FEET_NOSLIP) - return - M.stop_pulling() - M << "\blue You slipped on the foam!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(5) - M.Weaken(2) + var/mob/living/carbon/M = AM + M.slip("foam", 5, 2) /datum/effect/system/foam_spread diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index a9e94d6077b..697e2c9e867 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1214,19 +1214,8 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if ((istype(M, /mob/living/carbon/human) && (istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP)) || M.m_intent == "walk") - return - - if ((istype(M, /mob/living/carbon/human) && (M.real_name != src.owner) && (istype(src.cartridge, /obj/item/weapon/cartridge/clown)))) - if (src.cartridge.charges < 5) - src.cartridge.charges++ - - M.stop_pulling() - M << "\blue You slipped on the PDA!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(8) - M.Weaken(5) + var/mob/living/carbon/M = AM + M.slip("pda", 8, 5, 0, 1) /obj/item/device/pda/proc/available_pdas() var/list/names = list() diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index d58fe73b587..a655efa125c 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -22,36 +22,16 @@ /obj/item/weapon/bananapeel/Crossed(AM as mob|obj) if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled) - return - if(istype(M, /mob/living/carbon/human) && M:species.bodyflags & FEET_NOSLIP) - return - if(M.flying) - return - - M.stop_pulling() - M << "\blue You slipped on the [name]!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(4) - M.Weaken(2) + var/mob/living/carbon/M = AM + M.slip("banana peel", 4, 2) /* * Soap */ /obj/item/weapon/soap/Crossed(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled) - return - if(M.flying) - return - - M.stop_pulling() - M << "\blue You slipped on the [name]!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(4) - M.Weaken(2) + var/mob/living/carbon/M = AM + M.slip("soap", 4, 2) /obj/item/weapon/soap/afterattack(atom/target, mob/user as mob, proximity) if(!proximity) return diff --git a/code/game/objects/items/weapons/grenades/clowngrenade.dm b/code/game/objects/items/weapons/grenades/clowngrenade.dm index 3066c762cd3..8525a27378c 100644 --- a/code/game/objects/items/weapons/grenades/clowngrenade.dm +++ b/code/game/objects/items/weapons/grenades/clowngrenade.dm @@ -62,8 +62,8 @@ Crossed(AM as mob|obj) var/burned = rand(2,5) - if(istype(AM, /mob/living)) - var/mob/living/M = AM + if(istype(AM, /mob/living/carbon)) + var/mob/living/carbon/M = AM if(ishuman(M)) if(isobj(M:shoes)) if((M:shoes.flags&NOSLIP) || (M:species.bodyflags & FEET_NOSLIP)) @@ -73,16 +73,8 @@ M.take_overall_damage(0, max(0, (burned - 2))) if(!istype(M, /mob/living/carbon/slime) && !isrobot(M)) - M.stop_pulling() - step(M, M.dir) - spawn(1) step(M, M.dir) - spawn(2) step(M, M.dir) - spawn(3) step(M, M.dir) - spawn(4) step(M, M.dir) + M.slip("banana peel!", 0, 7, 4) M.take_organ_damage(2) // Was 5 -- TLE - M << "\blue You slipped on \the [name]!" - playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Weaken(7) M.take_overall_damage(0, burned) throw_impact(atom/hit_atom) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index f3fd7b38dd1..15751f0a9d8 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -95,50 +95,21 @@ bloodDNA = null - var/noslip = 0 - for (var/obj/structure/stool/bed/chair/C in contents) - if (C.buckled_mob == M) - noslip = 1 - if (noslip) - return // no slipping while sitting in a chair, plz switch (src.wet) if(TURF_WET_WATER) - if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M.shoes.flags&NOSLIP)) - M.stop_pulling() - step(M, M.dir) - M << "\blue You slipped on the wet floor!" - playsound(src, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(4) - M.Weaken(2) - else + if (!(M.slip("wet floor", 4, 2, 1))) M.inertia_dir = 0 return - - if(TURF_WET_LUBE) //lube //can cause infinite loops - needs work - if(!M.buckled) - M.stop_pulling() - step(M, M.dir) - spawn(1) step(M, M.dir) - spawn(2) step(M, M.dir) - spawn(3) step(M, M.dir) - spawn(4) step(M, M.dir) + if(TURF_WET_LUBE) //lube + if(M.slip("floor", 0, 7, 4, 0, 1)) M.take_organ_damage(2) // Was 5 -- TLE - M << "\blue You slipped on the floor!" - playsound(src, 'sound/misc/slip.ogg', 50, 1, -3) - M.Weaken(7) + if(TURF_WET_ICE) // Ice - if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP) && prob(30)) - M.stop_pulling() - step(M, M.dir) - M << "\blue You slipped on the icy floor!" - playsound(src, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(4) - M.Weaken(2) - else + if (!(prob(30) && M.slip("icy floor", 4, 2, 1, 1))) M.inertia_dir = 0 - return + //returns 1 if made bloody, returns 0 otherwise /turf/simulated/add_blood(mob/living/carbon/human/M as mob) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0701b394113..18b8fd5633e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -759,4 +759,24 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, W.loc = loc W.dropped(src) if (W) - W.layer = initial(W.layer) \ No newline at end of file + W.layer = initial(W.layer) + + +/mob/living/carbon/proc/slip(var/slippery, var/stun, var/weaken, var/tilesSlipped, var/walkSafely, var/slipAny) + if (flying || buckled || (walkSafely && m_intent == "walk")) + return + if (!(slipAny)) + if (istype(src, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = src + if ((isobj(H.shoes) && H.shoes.flags & NOSLIP) || H.species.bodyflags & FEET_NOSLIP) + return + if (tilesSlipped) + for(var/t = 0, t<=tilesSlipped, t++) + spawn (t) step(src, src.dir) + stop_pulling() + src << "You slipped on the [slippery]!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + if (stun) + Stun(stun) + Weaken(weaken) + return 1 \ No newline at end of file From 1c1bd52c5491a1dd36d85d71e71fadc1221e5e5f Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Wed, 3 Feb 2016 10:06:41 -0800 Subject: [PATCH 051/442] Makes brain scan a selected mode rather than a button, for working nice with autoprocess --- code/game/machinery/computer/cloning.dm | 39 +++++++++++++++---------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 7321843476c..4d4e601ce72 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -16,6 +16,9 @@ var/loading = 0 // Nice loading text var/autoprocess = 0 var/obj/machinery/clonepod/selected_pod + // 0: Standard body scan + // 1: The "Best" scan available + var/scan_mode = 1 light_color = LIGHT_COLOR_DARKBLUE @@ -31,7 +34,7 @@ if(!scanner || !pods.len || !autoprocess || stat & NOPOWER) return - if(scanner.occupant && (scanner.scan_level > 2)) + if(scanner.occupant && can_autoprocess()) scan_mob(scanner.occupant) for (var/obj/machinery/clonepod/pod in pods) @@ -135,7 +138,8 @@ data["loading"] = loading data["autoprocess"] = autoprocess - data["can_brainscan"] = (scanner && scanner.scan_level > 3) // You'll need tier 4s for this + data["can_brainscan"] = can_brainscan() // You'll need tier 4s for this + data["scan_mode"] = scan_mode if(scanner && pods.len && ((scanner.scan_level > 2) || canpodautoprocess)) data["autoallowed"] = 1 @@ -191,18 +195,10 @@ loading = 1 spawn(20) - scan_mob(scanner.occupant) - - loading = 0 - nanomanager.update_uis(src) - - if (href_list["scan_brain"] && scanner && scanner.occupant && scanner.scan_level > 3) - scantemp = "Scanner ready." - - loading = 1 - - spawn(20) - scan_mob(scanner.occupant, scan_brain = 1) + if(can_brainscan() && scan_mode) + scan_mob(scanner.occupant, scan_brain = 1) + else + scan_mob(scanner.occupant) loading = 0 nanomanager.update_uis(src) @@ -347,6 +343,11 @@ src.menu = text2num(href_list["menu"]) temp = "" scantemp = "Scanner ready." + else if (href_list["toggle_mode"]) + if(can_brainscan()) + scan_mode = !scan_mode + else + scan_mode = 0 src.add_fingerprint(usr) nanomanager.update_uis(src) @@ -357,6 +358,8 @@ return if (scanner.stat & (NOPOWER|BROKEN)) return + if (scan_brain && !can_brainscan()) + return if ((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna) || (subject.species.flags & NO_SCAN)) scantemp = "Error: Unable to locate valid genetic data." nanomanager.update_uis(src) @@ -440,4 +443,10 @@ if (R.ckey == find_key) selected_record = R break - return selected_record \ No newline at end of file + return selected_record + +/obj/machinery/computer/cloning/proc/can_autoprocess() + return (scanner && scanner.scan_level > 2) + +/obj/machinery/computer/cloning/proc/can_brainscan() + return (scanner && scanner.scan_level > 3) \ No newline at end of file From cbf0453c6b901137e2c4f126b6e013178f1f031d Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Wed, 3 Feb 2016 10:07:25 -0800 Subject: [PATCH 052/442] Oh this is important too --- nano/templates/cloning_console.tmpl | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/nano/templates/cloning_console.tmpl b/nano/templates/cloning_console.tmpl index 26452b97f0b..c541ca6d6b4 100644 --- a/nano/templates/cloning_console.tmpl +++ b/nano/templates/cloning_console.tmpl @@ -57,16 +57,18 @@ Used In File(s): \code\game\machinery\computer\cloning.dm
    Scan Occupant
    {{:helper.link('Scan', 'search', {'scan' : 1}, !data.occupant ? 'disabled' : '')}}
    - {{if data.can_brainscan}} -
    -
    Scan Brain
    -
    {{:helper.link('Scan', 'search', {'scan_brain' : 1}, !data.occupant ? 'disabled' : '')}}
    -
    - {{/if}}
    Scanner Lock
    {{if data.occupant}}{{:helper.link('Engaged', 'lock', {'lock' : 1}, data.locked ? 'selected' : '')}}{{else}} {{:helper.link('Engaged', 'lock', null, 'disabled')}}{{/if}}{{:helper.link('Disengaged', 'unlock', {'lock' : 1}, !data.locked ? 'selected' : '')}}
    + {{if data.can_brainscan}} +
    +
    Scan Mode
    +
    + {{:helper.link('Brain', null, {'toggle_mode' : 1}, !data.scan_mode ? '' : 'selected')}}{{:helper.link('Body', null, {'toggle_mode' : 1}, data.scan_mode ? '' : 'selected')}} +
    +
    + {{/if}} {{/if}} {{if data.numberofpods}}

    Pods

    From aa31de9ce88bb3959ea33846da33adfb68a69510 Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Wed, 3 Feb 2016 12:46:49 -0800 Subject: [PATCH 053/442] Trapped minds can now understand what the host mob can --- code/game/gamemodes/miniantags/borer/borer.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 6926c7f6067..b5fc14e4e5b 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -26,6 +26,13 @@ if(M.mind && (istype(M, /mob/dead/observer))) M << "Thought-speech, [src] -> [B.truename]: [message]" +/mob/living/captive_brain/say_understands(var/mob/other, var/datum/language/speaking = null) + var/mob/living/simple_animal/borer/B = src.loc + if(!istype(B)) + log_to_dd("Trapped mind found without a borer!") + return 0 + return B.host.say_understands(other, speaking) + /mob/living/captive_brain/emote(var/message) return From c41ed49c541c6594d3e62bf1657ed6ae430bc00a Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 3 Feb 2016 18:16:49 -0500 Subject: [PATCH 054/442] Automatic changelog generation for PR #3503 --- html/changelogs/AutoChangeLog-pr-3503.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3503.yml diff --git a/html/changelogs/AutoChangeLog-pr-3503.yml b/html/changelogs/AutoChangeLog-pr-3503.yml new file mode 100644 index 00000000000..c7c8dc88544 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3503.yml @@ -0,0 +1,4 @@ +author: Crazylemon64 +delete-after: True +changes: + - bugfix: "A mind trapped by a cortical borer can now understand things it could understand when normally in its body." From bfc318b384e1722365cc8cb1320084b02b1e4649 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Wed, 3 Feb 2016 18:25:03 -0500 Subject: [PATCH 055/442] Fixed a few tile areas in hallways --- _maps/map_files/cyberiad/cyberiad.dmm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index c4bcd7b34d2..36354360e56 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -1724,7 +1724,7 @@ "aHh" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24; shock_proof = 1},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/electrical) "aHi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/electrical) "aHj" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/multitool,/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/electrical) -"aHk" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/space) +"aHk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "aHl" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/hallway/secondary/entry) "aHm" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/plating,/area/engine/engineering) "aHn" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -3551,7 +3551,6 @@ "bqo" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway 1"; dir = 2; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqp" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqq" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) -"bqr" = (/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "bqs" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/engine/gravitygenerator) "bqu" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/hallway/primary/starboard/west) @@ -3559,7 +3558,6 @@ "bqw" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/hallway/primary/starboard/west) "bqx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "bqy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) -"bqz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "bqA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "bqB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "bqC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atm{pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) @@ -8813,7 +8811,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaDGcUCaEDaDEaEFddzaEGaEJaEKazHaELaEMaENaDKaEOazHaxVaxVaxVaxVaxVaxVaxVaCLaxVaEPaEQaERaxVaESaETaEUazHaEOaxVaENaEVaBEaBFaEWbikbikbikbikbikaEXaEYaEZaFaaFbaFcaFdaDMaabaCMaFeaFfaFgaCMaFhazOaFiaFjaFkaFlaABaFnaBPaFoaFpaFqaFraFsaFtaFuaFvaydaFwaFxaFyaFzaFAaCZaDaaDbaFBaEhaFCaFCaFCaEhaEhaFDaFEaFEaFFaEiaFGaFHaFIaFIaFJaFKaFLaFMaChaChaChaChaChaFNaFOaFPaFQbikbikazvayHayHaFRayHaEsaFSayHaFTaFUaFUaFUaFUaFVaFUaFWayHayHayHayHayHayHayHayHayJayIaDCaFXaFYaFYaDCaFZaGaaGbaDCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaGcaGdaGeaDEaGcaGdaGeaEJaBzazHaGfazHazHazHazHazHaxVaGgaGhaGiaGjaGkaxVaCLaxVaEQaGlaEPaGmaGnaGoaxVaGpaxVaxVaxVaxVaGpaCLaEWbikazyazyazyazyaGqaEYaGraGsaGtaGuaGvaGwaDMaCMaBHaGxaGxaGxaGyaGzaGAaGzaGzaGzaGBaGCaGDaGEaGFaGFaGFaGFaGGaGHaGIaxqaGJazIatsaGKaGLaCZaDaaDbaEgaFCaGMaGMaGNaFCaEhaGOaGPaGPaGQaGRaFGaGSaGTaGUaGVaEhaGWaFQaChaChaChaChaChaFQaGXaGYaFQaabaabayGayHayHayJayJaEsaGZaGZaAiaAiaAiaEsaEsaEsayGaHaaHbayGayJayJayGayJayJayGayGaHcaHdaHeaHfaHgaHhaHiaFXaHjaDCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaDEaEIaHlaCuaDEaEIaHlaCuaxVaCBaxVaxVaxVaxVaxVazHaxVazHaHnaHoazHazHaxVaCLaxVaHpaabaHpaxVaBvaGoaxVaHqaHraxVaENaBzaxVaAwaDMaDMaHsaHsaHsaHsaHsaHsaHsaHsaHsaGvaGvaGwaHtaHuaHvaHwaHxaHyaHzaHAaHBaHBaHBaHBaHCaHDaHEaHFaHGaHBaHBaHHaHHaHIaHJaHKaHLaHMaHNaGKaHOaHPaHPaDbaEgaFCaHQaHRaHSaFCaEhaGOaGPaGPaGQaHTaFGaGSaGUaGUaGVaEhaGWaFQaChaChaChaChaChaFQaHUaGYaFQbikbikayGaHVayHayHaHWayJaHXazwaHYaHZayKayGaFSayKayGaIaayHayGaIbayHayGaIcaIdaIeaFUaIfaFUaIgaIhaIiaIjaIkaIlaImaDCaDDaDDaacaacaDDaDDaDDaDDaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaIoaHkaIoaIqaIoaIoaIoaIsaItaIuaIuaIuaIuaIvaxVazHaxVaIwaIxaIyazHaIzaGpaCLaxVaxVaxVaxVaxVaxVaGpaxVazHaIyaCBazHazHaGvaIAaIBaICaIDaIDaIDaIDaIEaIDaIDaIFaIGaICaIHaIIaIIaIIaIIaIIaIIaIIaIJaIKaIKaIKaIKaILaIMaIKaINaIKaIOaILaIKaIKaIKaIKaIPaIQaIRaISaITaFzaIUaIVaHPaIWaEgaFCaIXaIYaGMaFCaEhaIZaJaaJaaJbaEiaFGaJcaJdaJdaJeaEhaJfaJgaChaChaChaChaChaJhaJiaJjaFQbikbikayGayHayHayHayHayHayHaIeaFUaFUaFUaFUaFUaFUaFUaCmayHayHayHayHaDzayHayHaDxayHaJkaJlaJmaJnaJoaFYaFYaFYaJpaDCaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaIoaIoaIoaIqaIoaIoaIoaIsaItaIuaIuaIuaIuaIvaxVazHaxVaIwaIxaIyazHaIzaGpaCLaxVaxVaxVaxVaxVaxVaGpaxVazHaIyaCBazHazHaGvaIAaIBaICaIDaIDaIDaIDaIEaIDaIDaIFaIGaICaIHaIIaIIaIIaIIaIIaIIaIIaIJaIKaIKaIKaIKaILaIMaIKaINaIKaIOaILaIKaIKaIKaIKaIPaIQaIRaISaITaFzaIUaIVaHPaIWaEgaFCaIXaIYaGMaFCaEhaIZaJaaJaaJbaEiaFGaJcaJdaJdaJeaEhaJfaJgaChaChaChaChaChaJhaJiaJjaFQbikbikayGayHayHayHayHayHayHaIeaFUaFUaFUaFUaFUaFUaFUaCmayHayHayHayHaDzayHayHaDxayHaJkaJlaJmaJnaJoaFYaFYaFYaJpaDCaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaJqaJraJsaJtaJuaJvaJwaJxaJvaJyaJzaJvaJvaJAaxVazHaxVaJBazHazHaJCaJDaxVaEVaBFazHazHazHazHazHazHaGpaJEazHaxVaEKaEKaDMaJFaDMaJGaJHaJIaJIaJIaJJaJIaJIaJIaJKaJGaJLaJMaJMaJMaJMaJMaJMaJMaGvaIKaJNaJOaJPaJQaJRawxaJTaJUaJVaJWaJXaJOaJYaIKaJZaxqaKaazIaKbaGKaKcaKdaKdaKeaKfaKgaKhaKiaKiaKjaKkaKlaKjaKkaKkaKmaKnaKoaEhaEhaKpaEhaKqaKraChaChaChaChaChaKraCfaCfaCfayGayGayGayKayJayJaAkayGayGaDxayJayGaKsayJayGaAkayGaDxaHVayJayGaAkayGayHaHVaDxayHaKtaDCaKuaIhaKvaKwaKxaIhaKyaDCaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaKzaKAaKzaKBaJraJraKCaKzaKAaKzaKDaKEaKFaKGaxVazHaGpaGpaxVaxVaxVaKHaKHaKHazNaKHaKHaKHaKHaKHaGvaDMaDMaDMaDMaDMaDMaDMaJFaKIaJGbikaabbikaabbikaabbikaabbikaJGaJLaJMaKJaKKaKLaKMaKNaJMaGvaIKaKOaKOaKPaKQaKRaKSaKTaKSaKUaKVaKWaKOaKOaIKaJZaxqaKXazIaKbaGKaGLaCZaDaaDbaEgaKYaKZaLaaLbaLcaLcaLdaLeaLcaLeaLfaLgaLhaLiaLjaLkaLlaCfaKraChaChaChaChaChaKrayGaCtayHaLmaLnayJayGayJaCtayHayGaCtaDxayGaLoayHayGaLpayHayJaLqaLrayGaLsayHayJaAkaAkaDxaAkaLtaDCaLuaIhaLvaLwaLvaIhaLxaDCaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaLyaCuaLzaGdaKzaLAaLBaLCaLDaKzaGdaLEaInaCuaLFaLGaxVazHazHazHazHazHazHaKHaLHaLIaLJaLKaLLaLMaLHaKHaLNaLOaIDaIDaIDaIDaIDaIDaLPaLQaJGaabaLRaLRaLRaLRaLRaLRaLRaabaJGaJLaJMaLSaLTaLUaLVaLSaJMaGvaIKaIKaIKaIKaLWaLXaJOaLYaJOaLXaLZaIKaIKaIKaIKaJZaxqaMaazIaKbaGKaFAaCZaDaaDbaFBaMbaMcaMcaMcaMcaMcaMcaMcaMdaMcaMeaMeaMeaMeaMeaMfayGaCfaKraChaChaChaChaChaKrayGayGayHaMgaLnayJaMhayGayHayHayGayHaDxayJayHayHayGayHayHayJaDxayIayGayHayHayJaMiayHaDxayHaMjaMkaMkaDCaDCaDCaDCaDCaDCaDCaDDaDDaDDaDDaDDaabbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8836,7 +8834,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbqYbqXbqXbqXbqXbqXbqXbqXbqXbqXbqXbqZbraaGdbraaJrbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbkNbmsbmtaYiaYibjfbmwbnCbmwbmwbmwaRebmwbmwbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatddEbaAbmLbmMbmNbaAbBQbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbBQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbmwbnGbmwbnFbmwbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbltbltblubltbltbltblvbltbltbtnaabaInboibdFbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEboFbnmbnmbnmbnmboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTbplbpkbpkbpkbpkbpmbpJaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatddAbaAbaAbaAbaAbgKbqUddFbmKbmKbmKbmKbmKbmKbmKbmKbmKddGbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCdlEbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbmubpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqrbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqybqzbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCdlEbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbmubpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqnbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqyaHkbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCbBHdjhbDDdjidjidjkdjjbtqbxZbjNaInaInaKBbrWbrXbrYbrXbrXbrXbrXbrZbsabsbbcsbcsbscbsdblCbmUbsebsfbpAblCbsgbshbsgbcobcobcobcobsibcobsjbskbngbslbsmbpFbsnbsobngboCbnmbspbpIbpIbpIbsqbnmbsrbpNboIbpObssbrwbrxbstbsubrAbpTbsvbmgbswbsxbnvbsybszbsAboSbsBbsCbsDbsEbsFbsGbsHbsIbsJbqbbsKbnAbsLbsMbqibqjbqkbqlbqnbsNbqnbqnbqnbqnbsObsPbsPbsPbsPbsQbqnbqnbqnbqnbsRbqnbsNbsSbqnbsTbsUbsVbqnbsWbsXbsXbsYbsZbtabtbbmFbmFbmFbmFbmFbmFbmFbtcbtdbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbtebtfbtfbtgddSddRddUddTddTddTddTddVddWbaAaabbikbikaabbqUddXddZddYdeabqUbikbqUdecdebdecdecbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjldjidjidjidjidjidjidjideHdjnaGddjnaJrbtrbrXbtsbttbtubtvbtwbrZbtxbtybtzbtzbtAbtBblCblCblCbosbtCborbcsbcsbcsbcsbtDbejbejbskbejbsjbskbngbtEbtFbtGbtHboAbngbtIbnmbtJbpIbpIbpIbtKbtLbtMbpNbtNbnqbtObtPbpRbpRbpRbpRbpTbtQbmgbtRbtSbmgbmgbmgbmgbmgbmgbmgbnzbnAbtTbtUbtVbtWbtXbtYbtZbnAbvubuabuabucbucbucbucbucbucbucbudbudbuebufbugbugbufbuebudbudbuhbuhbuhbuhbuhbuhbuibuibujbuibuibuibuibuibukafkbumbunbmFbmFbuobuobupbupbupbupbupbuqbtfbtfbtebtfbmFbtfbtfbtfbtfburbusbusbusbusdedbuubuubuubuubuubuubuubuubuubikbikbikbikbdBddYddYddYdeebqUbikbqUdefdebdebdegbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik From 3bb1567e1fdc6263aa8d06777a19fcc187eb3c6a Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 3 Feb 2016 22:23:12 -0500 Subject: [PATCH 056/442] Automatic changelog generation for PR #3423 --- html/changelogs/AutoChangeLog-pr-3423.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3423.yml diff --git a/html/changelogs/AutoChangeLog-pr-3423.yml b/html/changelogs/AutoChangeLog-pr-3423.yml new file mode 100644 index 00000000000..87e128d3ef1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3423.yml @@ -0,0 +1,5 @@ +author: Crazylemon64 +delete-after: True +changes: + - tweak: "The cloner now checks for NO_SCAN on the brain when scanning - unclonable species are now truly unclonable. You are still able to revive them with a brain transplant and a defib, however." + - rscadd: "A tier-4 DNA scanner linked to a cloning system will now be able to reproduce a body from a brain's DNA, in event of the original corpse being gibbed or similar." From 705db16ffb65fd74a66308b90fd7c65d8de14f7c Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 3 Feb 2016 22:24:45 -0500 Subject: [PATCH 057/442] Automatic changelog generation for PR #3495 --- html/changelogs/AutoChangeLog-pr-3495.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3495.yml diff --git a/html/changelogs/AutoChangeLog-pr-3495.yml b/html/changelogs/AutoChangeLog-pr-3495.yml new file mode 100644 index 00000000000..8d053d6e69e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3495.yml @@ -0,0 +1,4 @@ +author: Tastyfish +delete-after: True +changes: + - tweak: "Shortened the default pill & patch name when using the ChemMaster." From 8da50ee74bcdfb7cd1446f19ccbff56ae5989b0f Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 3 Feb 2016 22:24:55 -0500 Subject: [PATCH 058/442] Automatic changelog generation for PR #3496 --- html/changelogs/AutoChangeLog-pr-3496.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3496.yml diff --git a/html/changelogs/AutoChangeLog-pr-3496.yml b/html/changelogs/AutoChangeLog-pr-3496.yml new file mode 100644 index 00000000000..6b3f1b09818 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3496.yml @@ -0,0 +1,4 @@ +author: Tastyfish +delete-after: True +changes: + - rscadd: "The chaplain now has a service radio headset, as Space Jesus intended." From 9d5c754f11699fc26f359c1bfac1edcce39a5c0a Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Thu, 4 Feb 2016 07:33:35 +0000 Subject: [PATCH 059/442] rename argument for clarity --- code/modules/mob/living/carbon/carbon.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 18b8fd5633e..2466abd7160 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -762,7 +762,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, W.layer = initial(W.layer) -/mob/living/carbon/proc/slip(var/slippery, var/stun, var/weaken, var/tilesSlipped, var/walkSafely, var/slipAny) +/mob/living/carbon/proc/slip(var/description, var/stun, var/weaken, var/tilesSlipped, var/walkSafely, var/slipAny) if (flying || buckled || (walkSafely && m_intent == "walk")) return if (!(slipAny)) @@ -774,7 +774,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, for(var/t = 0, t<=tilesSlipped, t++) spawn (t) step(src, src.dir) stop_pulling() - src << "You slipped on the [slippery]!" + src << "You slipped on the [description]!" playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) if (stun) Stun(stun) From 18d7335f4e73d9ef85bebfb36ec918bd9a160e6a Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Thu, 4 Feb 2016 17:45:00 +0000 Subject: [PATCH 060/442] Fixes #3497 Deathsquad pulse rifle now fires correct round type --- code/modules/projectiles/guns/energy/pulse.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index e063a6b3bdf..ffb075c8c34 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -47,7 +47,7 @@ var/mob/living/silicon/robot/R = src.loc if(R && R.cell) R.cell.use(charge_cost) - in_chamber = new/obj/item/projectile/beam(src) + in_chamber = new projectile_type(src) return 1 return 0 From 05e785825742cbe6b403d9afb6dc5258665d4b05 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Thu, 4 Feb 2016 19:46:54 +0000 Subject: [PATCH 061/442] Fixes syndie suit name part of #3421 Fixes name and description of elite syndie suit after mode toggle Don't close #3421 yet, I'm looking into the other part but need more info --- code/modules/clothing/spacesuits/rig.dm | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index 1fde42aac94..d0e3e3060c9 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -348,7 +348,7 @@ on = !on if(on) user << "You switch your hardsuit to travel mode. It will allow you to stand in zero pressure environments, at the cost of speed and armor." - name = "blood-red hardsuit helmet" + name = "blood-red hardsuit" desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in travel mode. Property of Gorlex Marauders." slowdown = 1 flags = STOPSPRESSUREDMAGE | THICKMATERIAL @@ -356,7 +356,7 @@ cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS else user << "You switch your hardsuit to combat mode. You will take damage in zero pressure environments, but you are more suited for a fight." - name = "blood-red hardsuit helmet (combat)" + name = "blood-red hardsuit (combat)" desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in combat mode. Property of Gorlex Marauders." slowdown = 0 flags = THICKMATERIAL @@ -379,6 +379,15 @@ max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT sprite_sheets = null +/obj/item/clothing/head/helmet/space/rig/syndi/elite/attack_self(mob/user) + ..() + if(on) + name = "elite syndicate hardsuit helmet" + desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in travel mode. Property of Gorlex Marauders." + else + name = "elite syndicate hardsuit helmet (combat)" + desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in combat mode. Property of Gorlex Marauders." + /obj/item/clothing/suit/space/rig/syndi/elite name = "elite syndicate hardsuit" desc = "An elite version of the syndicate hardsuit, with improved armour and fire shielding. It is in travel mode." @@ -389,6 +398,15 @@ max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT sprite_sheets = null +/obj/item/clothing/suit/space/rig/syndi/elite/attack_self(mob/user) + ..() + if(on) + name = "elite syndicate hardsuit" + desc = "An elite version of the syndicate hardsuit, with improved armour and fire shielding. It is in travel mode. Property of Gorlex Marauders." + else + name = "elite syndicate hardsuit (combat)" + desc = "An elite version of the syndicate hardsuit, with improved armour and fire shielding. It is in combat mode. Property of Gorlex Marauders." + //Wizard Rig /obj/item/clothing/head/helmet/space/rig/wizard name = "gem-encrusted hardsuit helmet" From 11df4c50b6dc1a409e592ef621e5fd5a65211f28 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Thu, 4 Feb 2016 21:24:38 +0000 Subject: [PATCH 062/442] Fixes being able to take off helmet when toggling combat/travel modes --- code/modules/clothing/spacesuits/rig.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index d0e3e3060c9..c1d1a4fb4fc 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -311,7 +311,7 @@ user << "You switch your helmet to travel mode. It will allow you to stand in zero pressure environments, at the cost of speed and armor." name = "blood-red hardsuit helmet" desc = "A dual-mode advanced helmet designed for work in special operations. It is in travel mode. Property of Gorlex Marauders." - flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL + flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE cold_protection = HEAD set_light(brightness_on) @@ -319,7 +319,7 @@ user << "You switch your helmet to combat mode. You will take damage in zero pressure environments, but you are more suited for a fight." name = "blood-red hardsuit helmet (combat)" desc = "A dual-mode advanced helmet designed for work in special operations. It is in combat mode. Property of Gorlex Marauders." - flags = BLOCKHAIR | THICKMATERIAL + flags = BLOCKHAIR | THICKMATERIAL | NODROP flags_inv = HIDEEARS cold_protection = null set_light(0) From c23bf908b2adac095d37cdcaac37525e21cfe8e7 Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Fri, 5 Feb 2016 01:27:28 +0100 Subject: [PATCH 063/442] You can now hide papers and cards in vents --- .../components/unary_devices/vent_pump.dm | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index e6731d4ea17..61dc5a9fdb8 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -339,6 +339,39 @@ else user << "You need more welding fuel to complete this task." return 1 + if(istype(W, /obj/item/weapon/screwdriver)) + if(!welded) + if(open) + user << "\blue Now closing the vent." + if (do_after(user, 20, target = src)) + open = 0 + user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") + else + user << "\blue Now opening the vent." + if (do_after(user, 20, target = src)) + open = 1 + user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") + return + if(istype(W, /obj/item/weapon/paper/)) + if(!welded) + if(open) + user.drop_item(W) + W.loc = src + if(!open) + user << "You can't shove that down there when it is closed" + else + user << "The vent is welded." + return + if(istype(W, /obj/item/weapon/card)) + if(!welded) + if(open) + user.drop_item(W) + W.loc = src + if(!open) + user << "You can't shove that down there when it is closed" + else + user << "The vent is welded." + return if(istype(W, /obj/item/device/multitool)) update_multitool_menu(user) return 1 @@ -349,6 +382,12 @@ return ..() +/obj/machinery/atmospherics/unary/vent_pump/attack_hand() + if(!welded) + if(open) + for(var/obj/item/weapon/W in src) + W.loc = src.loc + /obj/machinery/atmospherics/unary/vent_pump/examine(mob/user) ..(user) From 20a679f61d31ca80a2cc0ffa7eec64c85ed6016c Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Fri, 5 Feb 2016 01:29:05 +0100 Subject: [PATCH 064/442] Forgot a var --- code/ATMOSPHERICS/components/unary_devices/vent_pump.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 61dc5a9fdb8..360bba856bd 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -12,6 +12,7 @@ use_power = 1 can_unwrench = 1 + var/open = 0 var/area/initial_loc var/area_uid From 3f0b117924d04de2c88f6897e6d88b0d1cf3dc4e Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Fri, 5 Feb 2016 03:09:40 +0100 Subject: [PATCH 065/442] Span classes --- code/ATMOSPHERICS/components/unary_devices/vent_pump.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 360bba856bd..414af471416 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -343,12 +343,12 @@ if(istype(W, /obj/item/weapon/screwdriver)) if(!welded) if(open) - user << "\blue Now closing the vent." + user << " Now closing the vent." if (do_after(user, 20, target = src)) open = 0 user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") else - user << "\blue Now opening the vent." + user << " Now opening the vent." if (do_after(user, 20, target = src)) open = 1 user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") From 8edfd0cf8e7b8b7d47a972dee6fd2e0d65de6483 Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Fri, 5 Feb 2016 04:07:36 +0100 Subject: [PATCH 066/442] Removes a forward slash --- code/ATMOSPHERICS/components/unary_devices/vent_pump.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 414af471416..6830ec8a418 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -353,7 +353,7 @@ open = 1 user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") return - if(istype(W, /obj/item/weapon/paper/)) + if(istype(W, /obj/item/weapon/paper)) if(!welded) if(open) user.drop_item(W) From 12b3ccb2e27df5dd9721155ddbfa4d2b2044eb98 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 4 Feb 2016 23:57:11 -0500 Subject: [PATCH 067/442] why --- code/_onclick/item_attack.dm | 2 +- code/modules/surgery/bones.dm | 36 +++--- code/modules/surgery/encased.dm | 28 ++-- code/modules/surgery/face.dm | 32 ++--- code/modules/surgery/generic.dm | 56 ++++---- code/modules/surgery/limb_reattach.dm | 7 +- .../surgery/organs/augments_internal.dm | 2 +- code/modules/surgery/organs_internal.dm | 120 +++++++++++++++++- code/modules/surgery/slime.dm | 2 +- icons/mob/inhands/guns_lefthand.dmi | Bin 41215 -> 41422 bytes icons/mob/inhands/guns_righthand.dmi | Bin 41561 -> 41673 bytes 11 files changed, 199 insertions(+), 86 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index b766acb1300..99427712b43 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -38,7 +38,7 @@ if(!attempt_initiate_surgery(src, M, user)) return 0 if(is_sharp(src)) - if( isslime(M) && !attempt_initiate_surgery(src, M, user)) + if(isslime(M) && !attempt_initiate_surgery(src, M, user)) return 0 if(!attempt_initiate_surgery(src, M, user)) return 0 diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index b822552bd5c..29f7c1574f5 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -52,16 +52,16 @@ /datum/surgery_step/glue_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] applies some [tool] to [target]'s bone in [affected.name]", \ - "\blue You apply some [tool] to [target]'s bone in [affected.name] with \the [tool].") + user.visible_message(" [user] applies some [tool] to [target]'s bone in [affected.name]", \ + " You apply some [tool] to [target]'s bone in [affected.name] with \the [tool].") affected.stage = 1 return 1 /datum/surgery_step/glue_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") + user.visible_message(" [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ + " Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") return 0 /datum/surgery_step/set_bone @@ -88,19 +88,19 @@ /datum/surgery_step/set_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) if (affected.status & ORGAN_BROKEN) - user.visible_message("\blue [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \ - "\blue You set the bone in [target]'s [affected.name] in place with \the [tool].") + user.visible_message(" [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \ + " You set the bone in [target]'s [affected.name] in place with \the [tool].") affected.stage = 2 return 1 else - user.visible_message("\blue [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \ - "\blue You set the bone in [target]'s [affected.name] in place with \the [tool].") + user.visible_message(" [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \ + " You set the bone in [target]'s [affected.name] in place with \the [tool].") return 1 /datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" , \ - "\red Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") + user.visible_message(" [user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" , \ + " Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") affected.createwound(BRUISE, 5) return 0 @@ -125,16 +125,16 @@ /datum/surgery_step/mend_skull/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] sets [target]'s skull with \the [tool]." , \ - "\blue You set [target]'s skull with \the [tool].") + user.visible_message(" [user] sets [target]'s skull with \the [tool]." , \ + " You set [target]'s skull with \the [tool].") affected.stage = 2 return 1 /datum/surgery_step/mend_skull/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging [target]'s face with \the [tool]!" , \ - "\red Your hand slips, damaging [target]'s face with \the [tool]!") + user.visible_message(" [user]'s hand slips, damaging [target]'s face with \the [tool]!" , \ + " Your hand slips, damaging [target]'s face with \the [tool]!") var/obj/item/organ/external/head/h = affected h.createwound(BRUISE, 10) h.disfigured = 1 @@ -164,8 +164,8 @@ /datum/surgery_step/finish_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has mended the damaged bones in [target]'s [affected.name] with \the [tool]." , \ - "\blue You have mended the damaged bones in [target]'s [affected.name] with \the [tool]." ) + user.visible_message(" [user] has mended the damaged bones in [target]'s [affected.name] with \the [tool]." , \ + " You have mended the damaged bones in [target]'s [affected.name] with \the [tool]." ) affected.status &= ~ORGAN_BROKEN affected.status &= ~ORGAN_SPLINTED affected.stage = 0 @@ -175,6 +175,6 @@ /datum/surgery_step/finish_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") + user.visible_message(" [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ + " Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") return 0 \ No newline at end of file diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 46d65e8b149..ebe1aa404ef 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -49,8 +49,8 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has cut [target]'s [affected.encased] open with \the [tool].", \ - "\blue You have cut [target]'s [affected.encased] open with \the [tool].") + user.visible_message(" [user] has cut [target]'s [affected.encased] open with \the [tool].", \ + " You have cut [target]'s [affected.encased] open with \the [tool].") affected.open = 2.5 return 1 @@ -60,8 +60,8 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!" , \ - "\red Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" ) + user.visible_message(" [user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!" , \ + " Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" ) affected.createwound(CUT, 20) affected.fracture() @@ -103,8 +103,8 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] forces open [target]'s [affected.encased] with \the [tool]." - var/self_msg = "\blue You force open [target]'s [affected.encased] with \the [tool]." + var/msg = " [user] forces open [target]'s [affected.encased] with \the [tool]." + var/self_msg = " You force open [target]'s [affected.encased] with \the [tool]." user.visible_message(msg, self_msg) affected.open = 3 @@ -121,8 +121,8 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\red [user]'s hand slips, cracking [target]'s [affected.encased]!" - var/self_msg = "\red Your hand slips, cracking [target]'s [affected.encased]!" + var/msg = " [user]'s hand slips, cracking [target]'s [affected.encased]!" + var/self_msg = " Your hand slips, cracking [target]'s [affected.encased]!" user.visible_message(msg, self_msg) affected.createwound(BRUISE, 20) @@ -165,8 +165,8 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." + var/msg = " [user] bends [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = " You bend [target]'s [affected.encased] back into place with \the [tool]." user.visible_message(msg, self_msg) affected.open = 2.5 @@ -179,8 +179,8 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\red [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!" - var/self_msg = "\red Your hand slips, bending [target]'s [affected.encased] the wrong way!" + var/msg = " [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!" + var/self_msg = " Your hand slips, bending [target]'s [affected.encased] the wrong way!" user.visible_message(msg, self_msg) affected.createwound(BRUISE, 20) @@ -222,8 +222,8 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] applied \the [tool] to [target]'s [affected.encased]." - var/self_msg = "\blue You applied \the [tool] to [target]'s [affected.encased]." + var/msg = " [user] applied \the [tool] to [target]'s [affected.encased]." + var/self_msg = " You applied \the [tool] to [target]'s [affected.encased]." user.visible_message(msg, self_msg) affected.open = 2 diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index 1b48f015dd5..6e53e4dbee5 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -42,16 +42,16 @@ ..() /datum/surgery_step/generic/cut_face/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\blue [user] has cut open [target]'s face and neck with \the [tool]." , \ - "\blue You have cut open [target]'s face and neck with \the [tool].",) + user.visible_message(" [user] has cut open [target]'s face and neck with \the [tool]." , \ + " You have cut open [target]'s face and neck with \the [tool].",) //target.op_stage.face = 1//DID I MENTION I NEED TO REPLACE THE OPSTAGE SHIT! return 1 /datum/surgery_step/generic/cut_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \ - "\red Your hand slips, slicing [target]'s throat wth \the [tool]!" ) + user.visible_message(" [user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \ + " Your hand slips, slicing [target]'s throat wth \the [tool]!" ) affected.createwound(CUT, 60) target.losebreath += 4 @@ -77,14 +77,14 @@ ..() /datum/surgery_step/face/mend_vocal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\blue [user] mends [target]'s vocal cords with \the [tool].", \ - "\blue You mend [target]'s vocal cords with \the [tool].") + user.visible_message(" [user] mends [target]'s vocal cords with \the [tool].", \ + " You mend [target]'s vocal cords with \the [tool].") //target.op_stage.face = 2//I NEED TO REPLACE THE OPSTAGE SHIT! return 1 /datum/surgery_step/face/mend_vocal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\red [user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!", \ - "\red Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!") + user.visible_message(" [user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!", \ + " Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!") target.losebreath += 4 return 0 @@ -107,15 +107,15 @@ ..() /datum/surgery_step/face/fix_face/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\blue [user] pulls skin on [target]'s face back in place with \the [tool].", \ - "\blue You pull skin on [target]'s face back in place with \the [tool].") + user.visible_message(" [user] pulls skin on [target]'s face back in place with \the [tool].", \ + " You pull skin on [target]'s face back in place with \the [tool].") //target.op_stage.face = 3//I NEED TO REPLACE THE OPSTAGE SHIT! return 1 /datum/surgery_step/face/fix_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \ - "\red Your hand slips, tearing skin on [target]'s face with \the [tool]!") + user.visible_message(" [user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \ + " Your hand slips, tearing skin on [target]'s face with \the [tool]!") target.apply_damage(10, BRUTE, affected, sharp=1, sharp=1) return 0 @@ -143,8 +143,8 @@ /datum/surgery_step/face/cauterize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] cauterizes the incision on [target]'s face and neck with \the [tool].", \ - "\blue You cauterize the incision on [target]'s face and neck with \the [tool].") + user.visible_message(" [user] cauterizes the incision on [target]'s face and neck with \the [tool].", \ + " You cauterize the incision on [target]'s face and neck with \the [tool].") affected.open = 0 affected.status &= ~ORGAN_BLEEDING //if (target.op_stage.face == 3)//I NEED TO REPLACE THE OPSTAGE SHIT! @@ -158,8 +158,8 @@ /datum/surgery_step/face/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, leaving a small burn on [target]'s face with \the [tool]!", \ - "\red Your hand slips, leaving a small burn on [target]'s face with \the [tool]!") + user.visible_message(" [user]'s hand slips, leaving a small burn on [target]'s face with \the [tool]!", \ + " Your hand slips, leaving a small burn on [target]'s face with \the [tool]!") target.apply_damage(4, BURN, affected) return 0 \ No newline at end of file diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index a8c24c4e843..167aa46f1a0 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -54,8 +54,8 @@ /datum/surgery_step/generic/cut_open/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has made an incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You have made an incision on [target]'s [affected.name] with \the [tool].",) + user.visible_message(" [user] has made an incision on [target]'s [affected.name] with \the [tool].", \ + " You have made an incision on [target]'s [affected.name] with \the [tool].",) affected.open = 1 affected.status |= ORGAN_BLEEDING affected.createwound(CUT, 1) @@ -65,8 +65,8 @@ /datum/surgery_step/generic/cut_open/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!", \ - "\red Your hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!") + user.visible_message(" [user]'s hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!", \ + " Your hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!") affected.createwound(CUT, 10) return 0 @@ -100,16 +100,16 @@ /datum/surgery_step/generic/clamp_bleeders/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] clamps bleeders in [target]'s [affected.name] with \the [tool].", \ - "\blue You clamp bleeders in [target]'s [affected.name] with \the [tool].") + user.visible_message(" [user] clamps bleeders in [target]'s [affected.name] with \the [tool].", \ + " You clamp bleeders in [target]'s [affected.name] with \the [tool].") affected.clamp() spread_germs_to_organ(affected, user) return 1 /datum/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) + user.visible_message(" [user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ + " Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) affected.createwound(CUT, 10) return 0 @@ -145,28 +145,28 @@ /datum/surgery_step/generic/retract_skin/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] keeps the incision open on [target]'s [affected.name] with \the [tool]." - var/self_msg = "\blue You keep the incision open on [target]'s [affected.name] with \the [tool]." + var/msg = " [user] keeps the incision open on [target]'s [affected.name] with \the [tool]." + var/self_msg = " You keep the incision open on [target]'s [affected.name] with \the [tool]." if (target_zone == "chest") - msg = "\blue [user] keeps the ribcage open on [target]'s torso with \the [tool]." - self_msg = "\blue You keep the ribcage open on [target]'s torso with \the [tool]." + msg = " [user] keeps the ribcage open on [target]'s torso with \the [tool]." + self_msg = " You keep the ribcage open on [target]'s torso with \the [tool]." if (target_zone == "groin") - msg = "\blue [user] keeps the incision open on [target]'s lower abdomen with \the [tool]." - self_msg = "\blue You keep the incision open on [target]'s lower abdomen with \the [tool]." + msg = " [user] keeps the incision open on [target]'s lower abdomen with \the [tool]." + self_msg = " You keep the incision open on [target]'s lower abdomen with \the [tool]." user.visible_message(msg, self_msg) affected.open = 2 return 1 /datum/surgery_step/generic/retract_skin/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\red [user]'s hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!" - var/self_msg = "\red Your hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!" + var/msg = " [user]'s hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!" + var/self_msg = " Your hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!" if (target_zone == "chest") - msg = "\red [user]'s hand slips, damaging several organs [target]'s torso with \the [tool]!" - self_msg = "\red Your hand slips, damaging several organs [target]'s torso with \the [tool]!" + msg = " [user]'s hand slips, damaging several organs [target]'s torso with \the [tool]!" + self_msg = " Your hand slips, damaging several organs [target]'s torso with \the [tool]!" if (target_zone == "groin") - msg = "\red [user]'s hand slips, damaging several organs [target]'s lower abdomen with \the [tool]" - self_msg = "\red Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!" + msg = " [user]'s hand slips, damaging several organs [target]'s lower abdomen with \the [tool]" + self_msg = " Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!" user.visible_message(msg, self_msg) target.apply_damage(12, BRUTE, affected, sharp=1) return 0 @@ -200,8 +200,8 @@ /datum/surgery_step/generic/cauterize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] cauterizes the incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You cauterize the incision on [target]'s [affected.name] with \the [tool].") + user.visible_message(" [user] cauterizes the incision on [target]'s [affected.name] with \the [tool].", \ + " You cauterize the incision on [target]'s [affected.name] with \the [tool].") affected.open = 0 affected.germ_level = 0 affected.status &= ~ORGAN_BLEEDING @@ -209,8 +209,8 @@ /datum/surgery_step/generic/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!") + user.visible_message(" [user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!", \ + " Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!") target.apply_damage(3, BURN, affected) return 0 @@ -248,8 +248,8 @@ /datum/surgery_step/generic/amputate/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ - "\blue You amputate [target]'s [affected.name] with \the [tool].") + user.visible_message(" [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ + " You amputate [target]'s [affected.name] with \the [tool].") add_logs(target,user ,"surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]") @@ -258,8 +258,8 @@ /datum/surgery_step/generic/amputate/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!") + user.visible_message(" [user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!", \ + " Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!") affected.createwound(CUT, 30) affected.fracture() return 0 \ No newline at end of file diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 883d090b6b5..acca5d25ef4 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -13,8 +13,7 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected && (affected.status && ORGAN_DESTROYED)) - return 0 + if(affected.is_stump()) return 0 @@ -32,8 +31,6 @@ var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) if(affected && (affected.status && ORGAN_DESTROYED)) return 1 - if(affected.is_stump()) - return 1 return 0 @@ -48,8 +45,6 @@ var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) if(affected && (affected.status && ORGAN_DESTROYED)) return 1 - if(affected.is_stump()) - return 1 return 0 diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index b6450f8257a..82ce2b8e5d9 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -317,7 +317,7 @@ datumvars//note i am putting External in robolimbs. organ_action_name = "Toggle Arm Cannon Taser" /obj/item/organ/internal/cyberimp/chest/arm_mod/tase/New()//when the implant is created... - holder = new /obj/item/weapon/gun/energy/gun/advtaser/mounted(src)//assign a brand new item to it. (in this case, a gun) + holder = new /obj/item/weapon/gun/energy/advtaser/mounted(src)//assign a brand new item to it. (in this case, a gun) /obj/item/organ/internal/cyberimp/chest/arm_mod/lase//mounted, self-charging laser! name = "Arm-cannon laser implant" diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 9eee3833c8f..5ef964b372b 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -19,7 +19,7 @@ possible_locs = list("chest", "head", "groin", "eyes", "mouth") allowed_mob = list(/mob/living/carbon/alien/humanoid) disallowed_mob = list(/mob/living/carbon/human) - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + steps = list(/datum/surgery_step/saw_carapace,/datum/surgery_step/cut_carapace, /datum/surgery_step/retract_carapace, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs) /datum/surgery/organ_manipulation/can_start(mob/user, mob/living/carbon/target) @@ -351,6 +351,124 @@ return 0 + +////////////////////////////////////////////////////////////////// +// SPESHUL AYLIUM STUPS // +////////////////////////////////////////////////////////////////// + +/datum/surgery_step/saw_carapace + name = "saw carapace" + allowed_tools = list( + /obj/item/weapon/circular_saw = 100, \ + /obj/item/weapon/melee/energy/sword/cyborg/saw = 100, \ + /obj/item/weapon/hatchet = 75 + ) + + max_duration = 70 + + +/datum/surgery_step/saw_carapace/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + user.visible_message("[user] begins to cut through [target]'s [target_zone] with \the [tool].", \ + "You begin to cut through [target]'s [target_zone] with \the [tool].") + ..() + +/datum/surgery_step/saw_carapace/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + user.visible_message(" [user] has cut [target]'s [target_zone] open with \the [tool].", \ + " You have cut [target]'s [target_zone] open with \the [tool].") + return 1 + +/datum/surgery_step/saw_carapace/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + user.visible_message(" [user]'s hand slips, cracking [target]'s [target_zone] with \the [tool]!" , \ + " Your hand slips, cracking [target]'s [target_zone] with \the [tool]!" ) + return 0 + +/datum/surgery_step/cut_carapace + name = "cut carapace" + allowed_tools = list( + /obj/item/weapon/scalpel/laser3 = 115, \ + /obj/item/weapon/scalpel/laser2 = 110, \ + /obj/item/weapon/scalpel/laser1 = 105, \ + /obj/item/weapon/scalpel/manager = 120, \ + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchen/knife = 75, \ + /obj/item/weapon/shard = 50, \ + /obj/item/weapon/scissors = 10, \ + /obj/item/weapon/twohanded/chainsaw = 1, \ + /obj/item/weapon/claymore = 5, \ + /obj/item/weapon/melee/energy/ = 5, \ + /obj/item/weapon/pen/edagger = 5, \ + ) + + max_duration = 60 + +/datum/surgery_step/cut_carapace/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + user.visible_message("[user] starts the incision on [target]'s [target_zone] with \the [tool].", \ + "You start the incision on [target]'s [target_zone] with \the [tool].") + ..() + +/datum/surgery_step/cut_carapace/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + user.visible_message(" [user] has made an incision on [target]'s [target_zone] with \the [tool].", \ + " You have made an incision on [target]'s [target_zone] with \the [tool].",) + return 1 + +/datum/surgery_step/cut_carapace/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + user.visible_message(" [user]'s hand slips, slicing open [target]'s [target_zone] in a wrong spot with \the [tool]!", \ + " Your hand slips, slicing open [target]'s [target_zone] in a wrong spot with \the [tool]!") + return 0 + +/datum/surgery_step/retract_carapace + name = "retract carapace" + + allowed_tools = list( + /obj/item/weapon/scalpel/manager = 120, \ + /obj/item/weapon/retractor = 100, \ + /obj/item/weapon/crowbar = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 50 + ) + + max_duration = 40 + +/datum/surgery_step/retract_carapace/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/msg = "[user] starts to pry open the incision on [target]'s [target_zone] with \the [tool]." + var/self_msg = "You start to pry open the incision on [target]'s [target_zone] with \the [tool]." + if (target_zone == "chest") + msg = "[user] starts to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]." + self_msg = "You start to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]." + if (target_zone == "groin") + msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." + self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." + user.visible_message(msg, self_msg) + ..() + +/datum/surgery_step/retract_carapace/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/msg = " [user] keeps the incision open on [target]'s [target_zone] with \the [tool]." + var/self_msg = " You keep the incision open on [target]'s [target_zone] with \the [tool]." + if (target_zone == "chest") + msg = " [user] keeps the ribcage open on [target]'s torso with \the [tool]." + self_msg = " You keep the ribcage open on [target]'s torso with \the [tool]." + if (target_zone == "groin") + msg = " [user] keeps the incision open on [target]'s lower abdomen with \the [tool]." + self_msg = " You keep the incision open on [target]'s lower abdomen with \the [tool]." + user.visible_message(msg, self_msg) + return 1 + +/datum/surgery_step/generic/retract_carapace/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/msg = " [user]'s hand slips, tearing the edges of incision on [target]'s [target_zone] with \the [tool]!" + var/self_msg = " Your hand slips, tearing the edges of incision on [target]'s [target_zone] with \the [tool]!" + if (target_zone == "chest") + msg = " [user]'s hand slips, damaging several organs [target]'s torso with \the [tool]!" + self_msg = " Your hand slips, damaging several organs [target]'s torso with \the [tool]!" + if (target_zone == "groin") + msg = " [user]'s hand slips, damaging several organs [target]'s lower abdomen with \the [tool]" + self_msg = " Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!" + user.visible_message(msg, self_msg) + return 0 ////////////////////////////////////////////////////////////////// // HEART SURGERY // ////////////////////////////////////////////////////////////////// diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index 39db3765469..41c2f43c76c 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -4,7 +4,7 @@ /datum/surgery/core_removal name = "core removal" steps = list(/datum/surgery_step/slime/cut_flesh, /datum/surgery_step/slime/cut_innards, /datum/surgery_step/slime/saw_core) - allowed_mob = list( /mob/living/carbon/slime) + allowed_mob = list(/mob/living/carbon/slime) /datum/surgery_step/slime diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi index 0d4e61b7cac98f93af6339109b14cea9060e4338..e7571df2d11c7f285689ae379c976b352642607a 100644 GIT binary patch delta 1518 zcmVoL!EIy%j&7e{EjH`ejqRDbL!HSc&DgX)!tKDl}px7V~1#C|x(9`@um5C061_ zR&PPF@;Ak#(w@aiEQ`tB%T}>iiP>kc(kypIO}`e*i%F%7Jc*T<-7PMve`nJR`pXN> zA958B*=s!EYjB8kr3V}$(U{7nxpF>D_gg8Qff}=H zyd_&lN|W9)@9gpagZFHWu9A4AWNlR1AVtd8r-L>o15KBFV3GD4XrTE97-+o#1{$w} zIRNz?P;?LIRUBy83-B5ae=y+1-pE#k#@nOv+w`|T;IlMtWeayca^D)u*cI-<_ZZIQ z(@vZTkdmKCfV!V4fa0GifDY&tP&SNVd^2c1jQI?Az>FB<8NNU{F^2J-pjk2IGkgK_ zVvGa6XiKH^J5A|JHK6Ht&EoD$A!5%!1Lh1cV9fwy#(2F4vZe>~e@*dvk3~(-VupCV zhr*>t0W%JoRL~`o=^3bbERAJVwKDzU=~=QEZJi>V1iuRXR~Z?pYyhzRk*-l|H3y1y ztwNF|t67zj$fm8Q2vw-V(%bAfq?J1oXygtA+PDLOCU*MWo%A>VqUlGGGm=|b#t?v# zJ5sTgL6`SI(jkpUf5Yhja?vpG#BtFulr}CJMxw?=!${7!Xc!3@uWdk@k{gh7N_q%9 zc}=xK(4bmZM*`l~J(=#Ho}9zv0w$L*nXXSyKEmV^Ony(2N9)_h8nt!a{#IqM9_i)J zs;%{sYUm<-76V;;amA~&!1cPg;8j}S-d|ksD(ycU5SU^4OSa4LYo>8yEizsk^T>Q{ z%tHgV5f6Qri{#l!f!T^lFT^wBuS?Xk==$d|rPI0k82OS;K3__u^ zpFlzI`Ux5+)IkUYbjsu;qJw0p9mI5LB9ts861WbRE4|i4$vuDGg4EpOr{|x=ZDBIu5TY&C9eUo0h zxh46}<%luHS!L7Fv8-?JiAc5xrlaG?GopV;^tX-vw$a}<`rB5vzqe}u(#crT$yn|m zJajTnIvG2f+3NY$ZWeAe$eRt@kDQD{|JhXcKcK&Fnt%JV|NE!8f93iIC*#n6Hu~FE zroXoXz=NY*XJb`sb!TI(qUrfSPLjGz&j+!m^4sWj%h_1;pHF4~Bl?G;u|NBNI2!x2 z|A(Wo{}1;6V9NCOasc@AWr#&zmU1=Ds(U>6Bpa=cY_vMDry?Ts4{dV#nf``N2K2W~ zR;JOL_X@+{4dLX|LN~rrICn;*8X;|{})wjbxFTJi#?5C*#C>@AI6PFB4-Qk z|K1J&`KEN(C_mPj!o`jG@=d9-lZf=YrN*NF@_)(yD9vu^Zw>puZNuTF$gm?Knd=Z!<&G)y`i+)!^egu?=NH^JEyXbeNTB}Qp$47?#w$a}<`rAf-+m^Mz zmji&SMakm+Kl#NUS}p>je^~UljsCXL-!}T&R;ItVR{&fsN^OgKme?P`b&}|Mzb*a4 zqIZ8>^e>`+SoDvJ{zdc;YtjB*F9LS8D77u_zlnJ|eb;`W@?=c^Fz6p2{jZ{b81#>i z{#VgIj57V#dcB^*sQ>@~0MLw!fB^si07Ezc00000hHwA?0000C;Q#;t000>B3s$SP U^YWAf)c^nh07*qoM6N<$f}aEpy8r+H delta 1317 zcmV+=1={+~!vg=o0+1vD*pVe8f0Li~;7j44$RT-!fR<>9HMJzTWQ@Fh4~i<)iNK-K zqk(Tka&|c;_EP+O`1SZKc2AGRtMaTZiLJQ#wk#GWU4=$$#b#YB8l~$dbU!%Apu|>O z$m%snR{o+`RNAxHiko6_@Um4bwqo@WtTfBLQOnN->tazUBj3bUtgbebf9ln8LO;FW z`ZiZ_o4v+8z6OU#Gd$kKDJ$GIoV~@I8ie z`Lq*f0;J?;5}@v93ZVFB3ZMge1(XeA7~c$<4`V*V9WW!tc!n=fPK;rECumlT`3zsc zycpwvFWOQm{a#c0QVnSOU9-9RREXF!(11Au3|KS3m@!@-fUN1ke|%HCK44MPvzQ@X zAE0pQQNWC&CKYsvWO@c_?n+}>Rjo|FczTvBMq8%{C&8~m|5ZjtDjNW7f23>FTFrrC zU8|5}$!b=mB(iDiDMA(Mu=F-N4r%3%1RA*mfi~_ypoyJ+cPIVLzi9eVz+(^P*1L5as!h$Fqy7TPu{`gJxqR2k|*oi#v1kFy#1}pU_H{y zA5|~bORAxZ@KFqO@#KoLw7~V6TyT~axc8F_&eDG2fWQpPLbqLx&zZ)Jwa9pF%p>!) zF%J#cMm#hg>;*F?vS;!f3o-_*XObKva%RQ7#>nY^)JyU3yc4^p$KnsVk>dSQ#1%`k z4g)fP0v)omLW2Su6GYcf0U{z}v)k>F9s&^&5rr9FlaOn1lOUT1lg6GFf1ikmhytP8 zD*!)OxlO2ljIf>m-`*XwHW7w#0Drsq2}+ha*>4cPK(>Mq7h81D(V=E5boK){37((8 zKtTtgaD!7ON6|qtlnz2%G(*W!0)caoD^yTR``*28lHU(P$nxCF{g>ytyZ6$TdxICP zuCqQbTRR7rey1k?cI28re*loLMh1ZU&)-+KZr=^{=ekWvtU9Y~F+I6x{igx`p!X}+0WsVD0SrjcRA({ z0OYH&0pQWwXVGePy8URiR?*^Y5>AVLSe#8#FXh7Y-5^>m`TtvvfB6Fd`D$bU`13J@ z>pqqctIn!>I{6&72ghN1aGZK6Aq4riZT|gBR`~+}d2947KaNR_CttxCm?sJ^55JoLinWl2LP_7u>qiNN{{w#Uh9YEX6e*T>E><`!nnLqE%^fg z#N&^^BH90Vr#c^(f1xZ6TYV3ESsZShkIT^M_Ct!}^PBtufMwCh01&Gw(cD~3z486^9KO(v@sfuQm+9>q}S`EUIGBnGMj(_0AP(6CjbBdV2v06003Z(7ytkO bV2%6&^b9hM?egPl00000NkvXXu0mjf2-<{7 diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index 94fe615fb56ecfe1f286c71335ada18d84823549..cdd8499b5909315de2f40676d0bb3c651828e983 100644 GIT binary patch delta 2280 zcmZ{keK^y5AIImRQVE^=XsBZyD^Fn*tuWIm$#VxwnukJEWTo{&|+_8{fsk={w9k$$PrH>@=(x16sHoEkD>D=V@?84xC8O(37 zh*XRdSzgvPg-aTF)b1VAYDw;J3wXNKp*9dsJ}PM3IH9ez*R=L;@VewJ4{}>gx8*Kb z#E0Q6?uER}?C`F1O3#ft+y(BD4nbdufa~rl%BdR+MH?AJe=W@9Lhz-HVtP zfa&a*yVVa8OCv7&kL`5nWfM?i`I@%DpVC~$2-LLq+fP#$*Xx~Y)_M;cN^l;)Py;Sg z&!F0(4*+c>xGNH`Ye4Yn6|;CsQq5pPt|e!sn;2~o9?-CX7k(hm$KkTEvwNzsiZGQ1 z%LHgJduo95sP)Z{Z>THQ@Aq+3_J!SvT2`HD*XvBU9@&xK_s?~&$u?Tc&n$BX5w@kM zVG@mJ_qYOe<2FWZOa8t#lAYQe{prQ6-35lP0d$85xy=qk)}LD3x+%|a-Rs1GlIvF4 zo@jb$ZDsih8pQ_Vv8}ku@9#O20Z*|zk;vRFu$S1uPWp)})RS!UU4eB4IJ1nHvE`q79(Cr`lufBl4-qHP} z=ZZyle$5lNxI5kYx>5sV8Ze}NB1#z(xlJ7__}ZYFN<&r#pWR(-<9DQ59;cWH?(qFf#KyX1-r9Xfr$QhO;rHO*P%` zwx;GToqY3QqbZ~3$Ai@QM+??XcbaN?ZW7}h3o2^QQsh#iq0S@g!juxqHB8M1&Q=&q zJq!kek(@Ol>fBa=sA>bjdFOhFfJQq+SehP$ojPg||FgQ=!HYnR9!Xe=?2uzQ^2E{} z=5eedoQ2)LhL}dH?aAk^Oq)5W=0wY2}oYR;xdA|XtY9UdUS5pBr z2`IOeGa?}`RyO+-SZO2*fp>nSkpy5VGJvbF)+L~TAIB?ui9RN`1hOgzvr;&yLCbj+ zaIjPgE98JiZ@ej`qk{Uzr5u;qS@R`D*N68U3Nd~W z0S<#Z6yrXiqZ1QkC}-z*snD_DvzA4m>M_Ygn_j_njc3PJWv;oE zyrVhdMbwdb5X%Fjj26KpQN=@FcM67cA<-nS3~-WxUSMoLxEOQ*R@mA+ko((rII+BQ z$$H|gA&ph+8pyu*IIlGp99yL;!Gsaetx$=G5rmq`K>ay+>-_Y~@(M7|wKX!Bei53j zUggDd1F%`r_eu&dpg)_@C6ychTy4)q(54k<8XIlS@s}w-$?;Wv9V~zw2#(8K{Uu;aV^+ppH;3B*M{vWXAYDc`no&jAvoB6~76-L<~(7n!Ju$ zL5Ufbr#hZnO1gZFsh+Exkr2>OmaT=#1sarP9w72t3$tWs)kID!ACvkt@oeokvN0JV ztPiwmsNt-Dw`DE7<}bD#WJ8jkdhONrKV;V6=hmpI!z6t|;RO~RW-ztsPd@+IevNhj zs`!8Q|D~E=L__!6i5yburxb_}#O6VM$a9LaR)Bb{bPly(s=jEcNAKYZ$Bt{^7Mf0q zA&;*h*fYfoHPM(SO0tMn0*tR+1L*79GHgEq+M)=6n(Yy%=4aBYS51!3w3IsmIlBeqmv4XoIL7TQP&ns$YFiBd3n~v8wOTBA0geW=-W69 zwkT&^gyPj!Q(u6}3lSMl_8G?Fm|64H6G0Ub69QJTB=N-~nopK_U@LIfm`6Y}Z+Nh< zl%B(i&0FOTAZQr|P$^bBV84fQ=X+; zmC>_5W7|YYYYL}67{qnSUtMj+dVaC=tHZ-U$N(r@IE3tCw+2Qj(2^|Eu@wX`S5t~o zJ5|Uxj2WuStGp+@C@`zhtNbGecDIQ+cw}uB4>CPZ*>NPU3Y=>H53YTQEiEJDSkL{Q^QJy7@a2g!&4W5 zwuCnb?12SiMsZAWS9&A`j%R!H|98dsU<%Clf-*w-Z#iW-FB*Yw%0Nd&(;?7NLV;Id z`$P9ke{2w7U@$v;aPYdFq^vc-uVNq4IQ0Gx)pT8xLWgBKxzX~F?r{}jpl;h!uU}8@JLgwCC@K$ zE5a4sNH;RGWRb3Sqx6~RsqPkS-$aM=%rm~a+wSwUA~5^gXf3$oZL`J)aguvSz1~(1 zB~wm@{rSXO_vuNYGJS75!=t@x4ez9fj>dQkj$USx4bBdP+hQ2+#U@9>D2!IiM%ilz zjV#|Q>9Bx}nTFUdv}bFNsl9FI98a^7-0Ef0@jLHy-MAB1p+D#Jgx;{3=N-YV=ukIU zz2VHch~Haw{d}&lS60Wf@v`~ZQ-<9UY`HDLP4TjKLP_y&w)@i-%yN+KG=7v*S#})1EO+68(9fV62Dfl%vY@HzKzxC9C@Q1~o z8-m2Xm9=88>qAD}BvYiqQKROZJ$Q8zo%n#YPMV2{9=rNS=NJtc3=R(&}1isqcxurVt=*aF;! zogt?r#iPWb1*K2V0{;kiCr~q`bqu8vgF3B^n6+)LoZ-?rvo# z!jakg4025v+I;^-HLa#%XTh}bz&f2?w)km<17m+ESYmjTELe0LND*e8<@^-43F&K5 z`%zc#B0~$6cYn=1Gi&S5if@xtgr&c^+Zqd&0%)LQe||e#<y%75D6|M2Z6oqCX79iJ9|)fYh&?Hb4Ayu>eD^?lGp5jY|s`;3ao5oY;D@Z(2* z=WzsWmMRsm;3rwJ6i!fQa1+7hqsL#(#fcTI$|O@opqW5D?l{!$3P*4-E6*;?g452V zGq(q0j+Bpr3T##l`0(_tsgY4ehk+GitL=)IOslWSeN*7<2=@u}F;HIt94x*~m2kV^ zDzhbZu|o5F`?Z4KB9vkr<)S;XlLMx8rzH)Bx2(fO$Pimp+=k|6{YV(D-9u2Rt`S~=ZNFQ{LHSQIZ#(X1zD$eUO37P$ZTnotj88Z*Rw7y++_hkTd6e_-%vD#Z zwZJBbiO0PmXe)yKQ|OFJ4kqVo!Y*)lA4XNIh^vv<@c}PkN=M9m>6wc1ly;up1A+Rt zauHbjS0HjFhv9-QAOUp$f{HzMtOJUiI#xirI7WFUfdu8U(#$~&RAM6~X1x3Yu?jl&ppT+H%dMnEzkyzhMvlZ63b)f4Bc}925bs(Qb2~ zvi%%mQlmV+H)CLgz0g{WTD9tGFKz8R-c<~9Cz6!hK!A2v3eH#L71)m6yJaf#>g#Kw zUyA39)2*g^pDx%}1Y&d4Kb zv!JaDgdoL;%dV05O~1Cqr1z(}b_Rrx%u6DN&UPk9FD;gSA!9J@p5rqE2m#2N6A=4F zi%E|fM$o)k?QNw7Jwb_%@6S#^W&cRfwMc@_;BvfMCkB?(fm9ikwX{DQrTs~69IB<$ zXRvA#`l=mGthmKlT4+ofLp+#eV&4!#jZ=uearjW1hp>NzK>B|$#|S`g0xJmL_`$60 zTGd_blud2FNf{L?Hib_x+W%igYK6P+?^se~AZ_N2RF) NhYn!v%WVCx{0sjeIyL|R From eba74c1392a9e8187e27ca243413df3eff41b9ea Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 5 Feb 2016 03:20:57 -0800 Subject: [PATCH 068/442] Gives chemistry breathing room - moves welding tank to a wall-mount version --- _maps/map_files/cyberiad/cyberiad.dmm | 9 +- code/game/machinery/kitchen/smartfridge.dm | 19 +++++ code/modules/reagents/reagent_dispenser.dm | 9 +- code/modules/surgery/helpers.dm | 94 +++++++++++++++++++++ icons/obj/objects.dmi | Bin 128775 -> 143638 bytes 5 files changed, 126 insertions(+), 5 deletions(-) create mode 100644 code/modules/surgery/helpers.dm diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index c4bcd7b34d2..7210b930f9b 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -4004,9 +4004,9 @@ "byZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bza" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bzb" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central/se) -"bzc" = (/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) +"bzc" = (/obj/machinery/chem_heater,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bzd" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) -"bze" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) +"bze" = (/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/structure/table/glass,/obj/structure/reagent_dispensers/fueltank/chem{pixel_x = -32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bzf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bzg" = (/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bzh" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) @@ -7722,6 +7722,7 @@ "cSz" = (/obj/machinery/camera{c_tag = "Atmospherics South-East"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/binary/valve/digital/open{name = "Mixed Air Outlet Valve"},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 6},/area/atmos) "cSA" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) "cSB" = (/turf/simulated/floor/plating/airless,/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/solar/starboard) +"cSC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "cSD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cSE" = (/turf/simulated/floor/plating/airless,/area/engine/engineering) "cSF" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 6},/turf/simulated/floor/plating,/area/atmos) @@ -8840,9 +8841,9 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCbBHdjhbDDdjidjidjkdjjbtqbxZbjNaInaInaKBbrWbrXbrYbrXbrXbrXbrXbrZbsabsbbcsbcsbscbsdblCbmUbsebsfbpAblCbsgbshbsgbcobcobcobcobsibcobsjbskbngbslbsmbpFbsnbsobngboCbnmbspbpIbpIbpIbsqbnmbsrbpNboIbpObssbrwbrxbstbsubrAbpTbsvbmgbswbsxbnvbsybszbsAboSbsBbsCbsDbsEbsFbsGbsHbsIbsJbqbbsKbnAbsLbsMbqibqjbqkbqlbqnbsNbqnbqnbqnbqnbsObsPbsPbsPbsPbsQbqnbqnbqnbqnbsRbqnbsNbsSbqnbsTbsUbsVbqnbsWbsXbsXbsYbsZbtabtbbmFbmFbmFbmFbmFbmFbmFbtcbtdbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbtebtfbtfbtgddSddRddUddTddTddTddTddVddWbaAaabbikbikaabbqUddXddZddYdeabqUbikbqUdecdebdecdecbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjldjidjidjidjidjidjidjideHdjnaGddjnaJrbtrbrXbtsbttbtubtvbtwbrZbtxbtybtzbtzbtAbtBblCblCblCbosbtCborbcsbcsbcsbcsbtDbejbejbskbejbsjbskbngbtEbtFbtGbtHboAbngbtIbnmbtJbpIbpIbpIbtKbtLbtMbpNbtNbnqbtObtPbpRbpRbpRbpRbpTbtQbmgbtRbtSbmgbmgbmgbmgbmgbmgbmgbnzbnAbtTbtUbtVbtWbtXbtYbtZbnAbvubuabuabucbucbucbucbucbucbucbudbudbuebufbugbugbufbuebudbudbuhbuhbuhbuhbuhbuhbuibuibujbuibuibuibuibuibukafkbumbunbmFbmFbuobuobupbupbupbupbupbuqbtfbtfbtebtfbmFbtfbtfbtfbtfburbusbusbusbusdedbuubuubuubuubuubuubuubuubuubikbikbikbikbdBddYddYddYdeebqUbikbqUdefdebdebdegbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjodjpdjpdjidjpdjpdjpbtqdjqaInaInaInaKBbuvbrXbuwbuxbuxbuxbuybrZbejbuzbuAbuBbuCbuDblCbmUbuEbosbuFborbuGbuHbuIbuJbuKbuLbuLbuMbuLbuNbuObngbuPbuQbuRbuSbuTbuUbuVbnmbuWbpIbpIbuXbuYbuZbtMbpNbvabnqbvbbvcbvdbvebvfbvgbvhbnqbnqbvibvjbvkbvlbvmbvlbvnbvjbikbvobnAbvpbvqbvrbvsbtXbqbbvtbnAbxebvwbxfbucbvxbvybvzbvAbvBbvCbvDbvEbvFbvGbvHbvHbvGbvIbvJbvKbuhbvLbvMbvNbvObuhbvPbvQbvRbvSbvTbvUbvUbvVbukafNbvXbvYbvZbvYbwabwabupbwbbwcbwdbupbwebwfbwebupbwgbtfburbusbwhbwibwhbusbwjbwkbusdeicngbxXbwobikbikbikbikbikbikbikbikbikbikbqUddXddZddYdejbqUbikbqUdekdekdekdekbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjodjpdjpdjidjpdjpdjpbtqdjqaInaInaInaKBbuvbrXbuwbuxbuxbuxbuybrZbejbuzbuAbuBbuCbuDblCbmUbuEbosbuFborbuGbuHbuIbuJbuKbuLbuLbuMbuLbuNbuObngbuPbuQbuRbuSbuTbuUbuVbnmbuWbpIbpIbuXbuYbuZbtMbpNbvabnqbvbbvcbvdbvebvfbvgbvhbnqbnqbvibvjbvkbvlbvmbvlbvnbvjbikbvobnAbvpbvqbvrbvsbtXbqbbvtbnAbxebvwbxfbucbzcbvybvzbvAbvBbvCbvDbvEbvFbvGbvHbvHbvGbvIbvJbvKbuhbvLbvMbvNbvObuhbvPbvQbvRbvSbvTbvUbvUbvVbukafNbvXbvYbvZbvYbwabwabupbwbbwcbwdbupbwebwfbwebupbwgbtfburbusbwhbwibwhbusbwjbwkbusdeicngbxXbwobikbikbikbikbikbikbikbikbikbikbqUddXddZddYdejbqUbikbqUdekdekdekdekbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjrbtqbtqbtqbtqbtqbtqbtqbtqdjqbikbikaInbwqbdFbwrbrXbwsbrXbwtbuxbwubwvbrZbwwbwxbwybwzbuDblCblCblCblCblCblCbwAbwBbwCbwDbwEbngbngbngbngbngbngbngbwFbngbngbngbwGbngbwHbwIbwJbpIbpIbpIbwKbtLbwLbpNbwMbnqbwNbvcbnrbnrbnrbnqbwObnqbwPbwQbwRbwSbwTbwUbwVbwWbwXbwYbwZbnAbxabqbbxbbxcbtXbxdbqbbnAbzbbxgbANbucbxhbxibxjbxkbxlbxmbxnbvHbvHbvHbvHbvHbvHbvHbvHbxobxpbxqbxrbxsbxtbuhbxubxvbxwbxxbxybxzbxvbxAbukbDdbvXbxCbxDbxEbxFbxFbxGbxHbxIbxJbxKbxLbxMbxNbupbxObxPbxQbusbxRbxSbxTbxUbxUbxVbusbxWbxXbxYbwobikbikbikbikbikbikbikbikbikbikbDybtldemdemdemdenbikdeodepdepdepbtlbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaInaInaInaInaInaInaInaKBaJrbyabrXbybbycbydbyebyebyfbygbyhbyibyibyjbykbtzbtzbtzbtzbtzbtzbylbymbymbynbyobngbypbyqbyrbysbytbyubyvbywbngbyxbyybyzbuVbtLbwJbpIbpIbyAbnmbnmbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObwXbyPbyQbyPbyQbyRbwXbwYbySbyTbyUbyVbyWbyXbyYbyZbzabyTbAObvwbvwbucbzcbzdbzebzfbzgbucbxnbvHbvHbvHbvHbvHbvHbvHbzhbzibzjbzkbzlbxqbzmbuhbznbzobzpbxxbxAbxzbzqbzrbukbIbbztbzubzvbzvbzwbzxbzybzzbzAbzAbzAbzBbzAbzCbzDbzEbzFbzGbzHbzIbzJbzKbzKbzKbzLbusbzMbxXbzNbwobikbikbikbikbikbikbikbikbikbikbikbDyderderderbDzbikbDyderderderbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaInaInaInaInaInaInaInaKBaJrbyabrXbybbycbydbyebyebyfbygbyhbyibyibyjbykbtzbtzbtzbtzbtzbtzbylbymbymbynbyobngbypbyqbyrbysbytbyubyvbywbngbyxbyybyzbuVbtLbwJbpIbpIbyAbnmbnmbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObwXbyPbyQbyPbyQbyRbwXbwYbySbyTbyUbyVbyWbyXbyYbyZbzabyTbAObvwbvwbucbzebzdcSCbzfbzgbucbxnbvHbvHbvHbvHbvHbvHbvHbzhbzibzjbzkbzlbxqbzmbuhbznbzobzpbxxbxAbxzbzqbzrbukbIbbztbzubzvbzvbzwbzxbzybzzbzAbzAbzAbzBbzAbzCbzDbzEbzFbzGbzHbzIbzJbzKbzKbzKbzLbusbzMbxXbzNbwobikbikbikbikbikbikbikbikbikbikbikbDyderderderbDzbikbDyderderderbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjtdjsdjuaIoaIoaIobdFaJraJrbrXbzVbrXbzWbzXbzYbzZbrXbcsbAabAabAbbAcbAbbAbbAbbAcbAbbcsbcsbngbngbngbAdbngbAebAebAebAebAebAebyvbAfbAgbAhbAibAjbAkbAlbAmbAnbAobApbAqbArbAsbAtbAubAvbAwbAwbAxbAybAzbAAbABbACbADbAEbvjbAFbwVbAGbwTbAHbvjbikbAIbAJbAKbALbAJbAJbAJbAJbAMbnAbCBbvwbCCbAPbAQbARbASbATbAUbucbAVbAWbAXbAYbAZbBabBbbBcbvHbBdbuhbBebzlbBfbBgbuhbBhbBibxwbxxbxAbxzbxvbxAbukbDdbvXbBjbBkbBlbBmbBnbBobBpbBqbBrbBsbBtbBubBvbupbBwbBxbBybusbBzbBAbBBbxUbBCbBDbusbzMbxXbBEbwobikbikbikbikaabaabaabaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjwdjvdjuaJqaJqbBIbBJaJqbBKbrXbBLbycbBMbBNbBObBPbrXbikaabaabdetdesdesdesdesdesdeubikbikbBRbBSbBTbBUbBVbAebAebAebAebAebAebBWbBXbBYbBZbCabCbbCcbCdbnmbnmbCebCfbnmbnmbCgbChbCibCjbCkbClbClbCmbClbCnbCobCpbCqbAEbvjbCrbvlbvlbvlbCsbvjbikbAIbAJbCtbCubCvbCwbCxbCybCzbCAbEsbvwbEtbucbvxbCDbCEbCFbCGbCHbCIbCJbCKbCLbCMbCNbCObCPbCQbCRbCSbCTbzlbCUbCVbuhbCWbCXbCYbCZbDabDbbDcbvVbukbIcbDebDfbDgbDgbDhbDibDjbDkbDlbDmbDnbDobDpbDqbupbDrbBxbDsbusbDtbDubDvbxUbxUbDwbusbxWbxXbDxbwobikbikbikbikaabbDAbFfbDBbFfbDBbFfbFgaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjudjubDEaInaInaLyaCubDFbDGbrXbDHbycbycbycbrXbrXbrXbikbikbikdewdevdevdexdevdevdewbikbikbBRbDIbAebDJbDKbDKbDKbDKbDKbDLbDMbDKbDNbDObDPbDQbDRbDSbDTbnmbDUbpIbDVbDWbtLbDXbDYbDZbCjbCjbCpbEabEbbEcbEdbEebCpbvibAEbvjbEfbEgbEhbqtbEjbvjbikbEkbAJbElbEmbEnbEobEpbEobEqbErbFWbvwbHBbucbEubEubEvbEwbExbEybEzbEAbEBbECbEDbEDbEEbEFbEGbEHbuhbCTbEIaJSbuhbuhbuibEKbELbEMbuibukbukbukbENbIdbvXbEPbBkbBlbEQbDgbDjbERbESbESbETbxJbEUbEVbEWbEXbxPbEYbusbEZbFabxUbFbbFcbFdbusbzMbFebwobwobikbikbikbikaabbFhbFjbFibGSbFkbGTbFhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 517b96be864..d99c04ecca1 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -22,6 +22,7 @@ var/scan_id = 1 var/is_secure = 0 var/datum/wires/smartfridge/wires = null + var/list/initial_contents = list() /obj/machinery/smartfridge/New() ..() @@ -29,6 +30,13 @@ component_parts += new /obj/item/weapon/circuitboard/smartfridge(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) RefreshParts() + for(var/obj/item/I in initial_contents) + var/obj/item/thing = new I(src) + thing.forceMove(src) + if(item_quants[thing.name]) + item_quants[thing.name]++ + else + item_quants[thing.name] = 1 /obj/machinery/smartfridge/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) @@ -135,6 +143,17 @@ return 1 return 0 +/obj/machinery/smartfridge/secure/chemistry/chemcache + name = "\improper Smart Chemistry Chem Cache" + desc = "A refrigerated storage unit for holding chemical mixtures for later use." + initial_contents = list( + /obj/item/weapon/reagent_containers/glass/bottle/reagent/phenol, + /obj/item/weapon/reagent_containers/glass/bottle/reagent/ammonia, + /obj/item/weapon/reagent_containers/glass/bottle/reagent/oil, + /obj/item/weapon/reagent_containers/glass/bottle/reagent/acetone, + /obj/item/weapon/reagent_containers/glass/bottle/reagent/acid, + /obj/item/weapon/reagent_containers/glass/bottle/reagent/diethylamine) + /obj/machinery/smartfridge/secure/chemistry/virology name = "\improper Smart Virus Storage" desc = "A refrigerated storage unit for volatile sample storage." diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 802c2a5f25d..ed2809896c7 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -92,6 +92,7 @@ icon_state = "weldtank" amount_per_transfer_from_this = 10 var/obj/item/device/assembly_holder/rig = null + var/accepts_rig = 1 /obj/structure/reagent_dispensers/fueltank/New() ..() @@ -126,7 +127,7 @@ overlays = new/list() /obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W,/obj/item/device/assembly_holder)) + if (istype(W,/obj/item/device/assembly_holder) && accepts_rig) if (rig) user << "\red There is another device in the way." return ..() @@ -254,3 +255,9 @@ /obj/structure/reagent_dispensers/spacecleanertank/New() ..() reagents.add_reagent("cleaner",5000) + +/obj/structure/reagent_dispensers/fueltank/chem + icon_state = "weldingtank_chem" + anchored = 1 + density = 0 + accepts_rig = 0 \ No newline at end of file diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm new file mode 100644 index 00000000000..f8fad583f34 --- /dev/null +++ b/code/modules/surgery/helpers.dm @@ -0,0 +1,94 @@ +/proc/attempt_initiate_surgery(obj/item/I, mob/living/M, mob/user, var/override ) + if(istype(M)) + var/mob/living/carbon/human/H + var/obj/item/organ/external/affecting + var/selected_zone = user.zone_sel.selecting + + if(istype(M, /mob/living/carbon/human)) + H = M + affecting = H.get_organ(check_zone(selected_zone)) + + if(isslime(M) ||isalien(M) ||can_operate(H)) //if they're prone or a slime + var/datum/surgery/current_surgery + + for(var/datum/surgery/S in M.surgeries) + if(S.location == selected_zone) + current_surgery = S + + if(!current_surgery) + var/list/all_surgeries = surgeries_list.Copy() + var/list/available_surgeries = list() + + for(var/datum/surgery/S in all_surgeries) + if(!S.possible_locs.Find(selected_zone)) + continue + if(affecting && S.requires_organic_bodypart && affecting.status == ORGAN_ROBOT) + continue + if(!S.can_start(user, M)) + continue + + for(var/path in S.allowed_mob) + if(istype(M, path)) + available_surgeries[S.name] = S + break + + if(override) + if(istype(I,/obj/item/robot_parts)) + var/datum/surgery/S = available_surgeries["robotic limb attachment"] + if(S) + var/datum/surgery/procedure = new S.type + if(procedure) + procedure.location = selected_zone + M.surgeries += procedure + procedure.organ_ref = affecting + procedure.next_step(user, M) + + else + var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries + if(P && user && user.Adjacent(M) && (I in user)) + var/datum/surgery/S = available_surgeries[P] + var/datum/surgery/procedure = new S.type + if(procedure) + procedure.location = selected_zone + M.surgeries += procedure + procedure.organ_ref = affecting + user.visible_message("[user] prepares to operate on [M]'s [parse_zone(selected_zone)].", \ + "You prepare to operate on [M]'s [parse_zone(selected_zone)].") + + else if(!current_surgery.step_in_progress) + if(current_surgery.status == 1 ) + M.surgeries -= current_surgery + user << "You stop the surgery." + qdel(current_surgery) + else if(istype(user.get_inactive_hand(), /obj/item/weapon/cautery) && current_surgery.can_cancel) + M.surgeries -= current_surgery + user.visible_message("[user] mends the incision on [M]'s [parse_zone(selected_zone)] with the [I] .", \ + "You mend the incision on [M]'s [parse_zone(selected_zone)].") + affecting.open = 0 + affecting.germ_level = 0 + affecting.status &= ~ORGAN_BLEEDING + qdel(current_surgery) + else if(current_surgery.can_cancel) + user << "You need to hold a cautery in inactive hand to stop [M]'s surgery!" + + + return 1 + return 0 + + + +proc/get_location_modifier(mob/M) + var/turf/T = get_turf(M) + if(locate(/obj/machinery/optable, T)) + return 1 + else if(locate(/obj/structure/table, T)) + return 0.8 + else if(locate(/obj/structure/stool/bed, T)) + return 0.7 + else + return 0.5 + + +//just until i update maps.... +/obj/item/organ/brain/New() + new /obj/item/organ/internal/brain(src.loc) \ No newline at end of file diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index af2b1274097ddd071d25a93aceec3b42ab84617e..3ec5db973f520828b0c324d330719ba548a2f1f5 100644 GIT binary patch literal 143638 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�y-r@35bz)2R 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 UmxbQwLBN;1w2D-Pgh}xK0?_5$oB#j- literal 128775 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 From a7cc11b07a8dd3b64c749c192c8302f105e52f63 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 5 Feb 2016 08:47:44 -0500 Subject: [PATCH 069/442] Fixes Roundstart runtime with Spellbooks --- code/game/gamemodes/wizard/spellbook.dm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 83c23311297..f168ca5f35a 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -413,6 +413,8 @@ log_name = "SG" /datum/spellbook_entry/summon/guns/IsAvailible() + if(!ticker.mode) // In case spellbook is placed on map + return 0 if(ticker.mode.name == "ragin' mages") return 0 else @@ -434,6 +436,8 @@ log_name = "SU" /datum/spellbook_entry/summon/magic/IsAvailible() + if(!ticker.mode) // In case spellbook is placed on map + return 0 if(ticker.mode.name == "ragin' mages") return 0 else @@ -463,8 +467,7 @@ var/list/datum/spellbook_entry/entries = list() var/list/categories = list() -/obj/item/weapon/spellbook/New() - ..() +/obj/item/weapon/spellbook/proc/Initialize() var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon for(var/T in entry_types) var/datum/spellbook_entry/E = new T @@ -475,6 +478,10 @@ qdel(E) tab = categories[1] +/obj/item/weapon/spellbook/New() + ..() + Initialize() + /obj/item/weapon/spellbook/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/weapon/contract)) var/obj/item/weapon/contract/contract = O @@ -640,6 +647,9 @@ ..() name += spellname +/obj/item/weapon/spellbook/oneuse/Initialize() //No need to init + return + /obj/item/weapon/spellbook/oneuse/attack_self(mob/user as mob) var/obj/effect/proc_holder/spell/S = new spell for(var/obj/effect/proc_holder/spell/knownspell in user.spell_list) From db5e0d56c379b57d0f9a1501748ec50c68cfa49b Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Fri, 5 Feb 2016 10:06:55 -0800 Subject: [PATCH 070/442] Removes vestigial code from the PR A chem cache, which was intended as a replacement for the reagents storage locker, and fethas' surgery helper file that I accidentally carried over because automatically removing files on checkout is not git's specialty --- code/game/machinery/kitchen/smartfridge.dm | 19 ----- code/modules/surgery/helpers.dm | 94 ---------------------- 2 files changed, 113 deletions(-) delete mode 100644 code/modules/surgery/helpers.dm diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index d99c04ecca1..517b96be864 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -22,7 +22,6 @@ var/scan_id = 1 var/is_secure = 0 var/datum/wires/smartfridge/wires = null - var/list/initial_contents = list() /obj/machinery/smartfridge/New() ..() @@ -30,13 +29,6 @@ component_parts += new /obj/item/weapon/circuitboard/smartfridge(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) RefreshParts() - for(var/obj/item/I in initial_contents) - var/obj/item/thing = new I(src) - thing.forceMove(src) - if(item_quants[thing.name]) - item_quants[thing.name]++ - else - item_quants[thing.name] = 1 /obj/machinery/smartfridge/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) @@ -143,17 +135,6 @@ return 1 return 0 -/obj/machinery/smartfridge/secure/chemistry/chemcache - name = "\improper Smart Chemistry Chem Cache" - desc = "A refrigerated storage unit for holding chemical mixtures for later use." - initial_contents = list( - /obj/item/weapon/reagent_containers/glass/bottle/reagent/phenol, - /obj/item/weapon/reagent_containers/glass/bottle/reagent/ammonia, - /obj/item/weapon/reagent_containers/glass/bottle/reagent/oil, - /obj/item/weapon/reagent_containers/glass/bottle/reagent/acetone, - /obj/item/weapon/reagent_containers/glass/bottle/reagent/acid, - /obj/item/weapon/reagent_containers/glass/bottle/reagent/diethylamine) - /obj/machinery/smartfridge/secure/chemistry/virology name = "\improper Smart Virus Storage" desc = "A refrigerated storage unit for volatile sample storage." diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm deleted file mode 100644 index f8fad583f34..00000000000 --- a/code/modules/surgery/helpers.dm +++ /dev/null @@ -1,94 +0,0 @@ -/proc/attempt_initiate_surgery(obj/item/I, mob/living/M, mob/user, var/override ) - if(istype(M)) - var/mob/living/carbon/human/H - var/obj/item/organ/external/affecting - var/selected_zone = user.zone_sel.selecting - - if(istype(M, /mob/living/carbon/human)) - H = M - affecting = H.get_organ(check_zone(selected_zone)) - - if(isslime(M) ||isalien(M) ||can_operate(H)) //if they're prone or a slime - var/datum/surgery/current_surgery - - for(var/datum/surgery/S in M.surgeries) - if(S.location == selected_zone) - current_surgery = S - - if(!current_surgery) - var/list/all_surgeries = surgeries_list.Copy() - var/list/available_surgeries = list() - - for(var/datum/surgery/S in all_surgeries) - if(!S.possible_locs.Find(selected_zone)) - continue - if(affecting && S.requires_organic_bodypart && affecting.status == ORGAN_ROBOT) - continue - if(!S.can_start(user, M)) - continue - - for(var/path in S.allowed_mob) - if(istype(M, path)) - available_surgeries[S.name] = S - break - - if(override) - if(istype(I,/obj/item/robot_parts)) - var/datum/surgery/S = available_surgeries["robotic limb attachment"] - if(S) - var/datum/surgery/procedure = new S.type - if(procedure) - procedure.location = selected_zone - M.surgeries += procedure - procedure.organ_ref = affecting - procedure.next_step(user, M) - - else - var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries - if(P && user && user.Adjacent(M) && (I in user)) - var/datum/surgery/S = available_surgeries[P] - var/datum/surgery/procedure = new S.type - if(procedure) - procedure.location = selected_zone - M.surgeries += procedure - procedure.organ_ref = affecting - user.visible_message("[user] prepares to operate on [M]'s [parse_zone(selected_zone)].", \ - "You prepare to operate on [M]'s [parse_zone(selected_zone)].") - - else if(!current_surgery.step_in_progress) - if(current_surgery.status == 1 ) - M.surgeries -= current_surgery - user << "You stop the surgery." - qdel(current_surgery) - else if(istype(user.get_inactive_hand(), /obj/item/weapon/cautery) && current_surgery.can_cancel) - M.surgeries -= current_surgery - user.visible_message("[user] mends the incision on [M]'s [parse_zone(selected_zone)] with the [I] .", \ - "You mend the incision on [M]'s [parse_zone(selected_zone)].") - affecting.open = 0 - affecting.germ_level = 0 - affecting.status &= ~ORGAN_BLEEDING - qdel(current_surgery) - else if(current_surgery.can_cancel) - user << "You need to hold a cautery in inactive hand to stop [M]'s surgery!" - - - return 1 - return 0 - - - -proc/get_location_modifier(mob/M) - var/turf/T = get_turf(M) - if(locate(/obj/machinery/optable, T)) - return 1 - else if(locate(/obj/structure/table, T)) - return 0.8 - else if(locate(/obj/structure/stool/bed, T)) - return 0.7 - else - return 0.5 - - -//just until i update maps.... -/obj/item/organ/brain/New() - new /obj/item/organ/internal/brain(src.loc) \ No newline at end of file From e0fbb21851ee16f55030b26d9da776bf028bb980 Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Fri, 5 Feb 2016 23:21:21 +0100 Subject: [PATCH 071/442] Adds reconnect button --- interface/skin.dmf | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/interface/skin.dmf b/interface/skin.dmf index b227491cf6a..b0650ff6a45 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1374,6 +1374,15 @@ menu "menu" group = "" is-disabled = false saved-params = "is-checked" + elem + name = "Reconnect" + command = ".reconnect" + category = "&File" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" elem name = "" command = "" From a64e95104e2ddbc86332daadb0a19b7128d86588 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 5 Feb 2016 22:30:43 -0500 Subject: [PATCH 072/442] Removes Mindswap Suiciding --- code/datums/spells/mind_transfer.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm index 90b6f25ab4d..6d7b0539fb1 100644 --- a/code/datums/spells/mind_transfer.dm +++ b/code/datums/spells/mind_transfer.dm @@ -42,6 +42,10 @@ Also, you never added distance checking after target is selected. I've went ahea user << "They appear to be catatonic. Not even magic can affect their vacant mind." return + if(user.suiciding) + user << "You're killing yourself! You can't concentrate enough to do this!" + return + if(target.mind.special_role in protected_roles) user << "Their mind is resisting your spell." return From 78af714755479f08279a358b7e8514943587c2f4 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 5 Feb 2016 23:29:20 -0500 Subject: [PATCH 073/442] Fixes Bear Trap IEDs and Duplicate Bear Traps --- _maps/map_files/cyberiad/z2.dmm | 12 +-- code/game/objects/items/weapons/handcuffs.dm | 47 ++++++++++ code/game/objects/items/weapons/legcuffs.dm | 95 -------------------- 3 files changed, 53 insertions(+), 101 deletions(-) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 020f1c9bfbb..562e99420c0 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -184,7 +184,11 @@ "dB" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/blue,/obj/item/clothing/head/helmet/knight/blue,/obj/item/weapon/holo/claymore/blue,/turf/simulated/floor/holofloor{dir = 2; icon_state = "blue"},/area/holodeck/source_knightarena) "dC" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 10; icon_state = "blue"},/area/holodeck/source_knightarena) "dD" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 6; icon_state = "blue"},/area/holodeck/source_knightarena) +"dE" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) +"dF" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) "dG" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid1 (EAST)"; icon_state = "asteroid1"; dir = 4},/area/holodeck/source_desert) +"dH" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) +"dI" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "dK" = (/obj/structure/stool/bed,/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) "dL" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) "dN" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid3 (EAST)"; icon_state = "asteroid3"; dir = 4},/area/holodeck/source_desert) @@ -391,8 +395,6 @@ "iC" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (NORTH)"; icon_state = "propulsion"; dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership) "iD" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (NORTH)"; icon_state = "propulsion_l"; dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership) "iE" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership) -"iJ" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) -"iK" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) "iL" = (/obj/structure/bookcase{name = "bookcase (Tactics)"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "iM" = (/obj/item/device/radio/intercom/syndicate{pixel_x = 28},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "iN" = (/obj/structure/table/woodentable,/obj/item/trash/tray,/obj/item/weapon/paper/spells,/turf/unsimulated/floor{dir = 10; icon_state = "carpetside"},/area/wizard_station) @@ -1167,11 +1169,9 @@ "HZ" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Ia" = (/obj/item/device/camera,/turf/unsimulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "Ib" = (/obj/structure/toilet{dir = 8},/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) -"Ic" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "Id" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (WEST)"; icon_state = "fakewindows"; dir = 8},/area/tdome) "Ie" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (WEST)"; icon_state = "fakewindows2"; dir = 8},/area/tdome) "If" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (EAST)"; icon_state = "fakewindows"; dir = 4},/area/tdome) -"Ig" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "Ih" = (/obj/machinery/door/poddoor{id_tag = "thunderdomeaxe"; name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "Ii" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/energy/sword/saber/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "Ij" = (/obj/machinery/door/poddoor{id_tag = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) @@ -1248,7 +1248,7 @@ ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckck ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZhzhzhzhzhzbZhzhzhzhzhzbZhzhzhzhzhzbZ ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihihihihihihihihihihihihaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihiiijikiliminihioipiqihaNaNirisisisisisitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaN -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikikikikixiyizihaNaNisiAiBiCiDiEitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauayauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZiJiJiJiJiJbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZiKiKiKiKiKbZaNaNaNaNaN +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikikikikixiyizihaNaNisiAiBiCiDiEitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauayauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZdEdEdEdEdEbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZdFdFdFdFdFbZaNaNaNaNaN ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihiLiLikikikiMihiNiOiPihaNaNisiQiRiRiRiQititititaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZiZiZiZiZiZjajbjcjcjcjcjcjcjcjcjcjcjcjcjcjbjaiZiZiZiZiZbZbZbZaNaNaN ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikjdjdihihjeihihaNaNisiQjfjfjfiQitjgjhitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatataFaGaGaGaGaGaGaGaHatataIatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihjAjAikjBjCjDihjEjejFihaNaNisiQjGjHjIiQititititititititititititaNaNaNaNaNaNaNaNaNaNaNataJaJaJaKauauauauauauauauaKaKaKauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN @@ -1455,7 +1455,7 @@ aNaNaNaNaNHjHxHyHyHyHyHzHjHEHFHGHFHHHIHJHJHJHIHHHJHHHJHKHjaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHjHRHyHyHyHyHSHjHJHTHTHTHTHTHJHJHJHTHTHTHTHTHUHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDwDwDwGZHVHWDADwDwDwDwEnaNDIDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHjHRHXHYHYHyHyHZHJHJHJIaHJHJHJHJHJHJHJIaHJHJHJHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMaNaNEMDAGXIbDAEnaNaNaNaNaNEfDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHjHjHjHjHjHjHjHjHJHTHTHTHTHTHJHJHJHTHTHTHTHTHJHjHjHjHjHjHjHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDwEnaNDtDxDyDyDzGaDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNHjIcIcIcIcIcHjIdIeIeIeIeIeIeIeIeIeIeIeIeIeIfHjIgIgIgIgIgHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIDKDKDKDKDKDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNHjdHdHdHdHdHHjIdIeIeIeIeIeIeIeIeIeIeIeIeIeIfHjdIdIdIdIdIHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIDKDKDKDKDKDKDKDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNHjHjHjIhIhIhIhIhjajbjcjcjcjcjcjcjcjcjcjcjcjcjcjbjaIhIhIhIhIhHjHjHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfDKDKDKDKDKDKFkDAEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNHjIiIjIkIkIkIkIkIlImjcjcjcjcjcjcjcjcjcjcjcjcjcInIlIoIoIoIoIoIjIpHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDwDMIqDMDwDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNHjIiIjIkIrIkIrIkIlImjcjcjcjcjcjcjcjcjcjcjcjcjcInIlIoIsIoIsIoIjIpHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAItDKDKDKIuDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 6c057f3cda8..5f93c6a095c 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -155,6 +155,13 @@ icon_state = "beartrap0" desc = "A trap used to catch bears and other legged creatures." var/armed = 0 + var/obj/item/weapon/grenade/iedcasing/IED = null + +/obj/item/weapon/restraints/legcuffs/beartrap/Destroy() + if(IED) + qdel(IED) + IED = null + return ..() /obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user) user.visible_message("[user] is sticking \his head in the [src.name]! It looks like \he's trying to commit suicide.") @@ -168,6 +175,36 @@ icon_state = "beartrap[armed]" user << "[src] is now [armed ? "armed" : "disarmed"]" +/obj/item/weapon/restraints/legcuffs/beartrap/attackby(var/obj/item/I, mob/user as mob) //Let's get explosive. + if(istype(I, /obj/item/weapon/grenade/iedcasing)) + if(IED) + user << "This beartrap already has an IED hooked up to it!" + return + IED = I + switch(IED.assembled) + if(0,1) //if it's not fueled/hooked up + user << "You haven't prepared this IED yet!" + IED = null + return + if(2,3) + user.drop_item(src) + I.forceMove(src) + message_admins("[key_name_admin(user)] has rigged a beartrap with an IED.") + log_game("[key_name(user)] has rigged a beartrap with an IED.") + user << "You sneak the [IED] underneath the pressure plate and connect the trigger wire." + desc = "A trap used to catch bears and other legged creatures. There is an IED hooked up to it." + else + user << "You shouldn't be reading this message! Contact a coder or someone, something broke!" + IED = null + return + if(istype(I, /obj/item/weapon/screwdriver)) + if(IED) + IED.forceMove(get_turf(src)) + IED = null + user << "You remove the IED from the [src]." + return + ..() + /obj/item/weapon/restraints/legcuffs/beartrap/Crossed(AM as mob|obj) if(armed && isturf(src.loc)) if( (iscarbon(AM) || isanimal(AM)) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator)) @@ -178,6 +215,16 @@ L.visible_message("[L] triggers \the [src].", \ "You trigger \the [src]!") + if(IED && isturf(src.loc)) + IED.active = 1 + IED.overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled") + IED.icon_state = initial(icon_state) + "_active" + IED.assembled = 3 + message_admins("[key_name_admin(usr)] has triggered an IED-rigged [name].") + log_game("[key_name(usr)] has triggered an IED-rigged [name].") + spawn(IED.det_time) + IED.prime() + if(ishuman(AM)) var/mob/living/carbon/H = AM if(H.lying) diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm index 240decbfdcb..5fdbf7af06e 100644 --- a/code/game/objects/items/weapons/legcuffs.dm +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -10,101 +10,6 @@ origin_tech = "materials=1" var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute -/obj/item/weapon/legcuffs/beartrap - name = "bear trap" - throw_speed = 1 - throw_range = 1 - icon_state = "beartrap0" - desc = "A trap used to catch bears and other legged creatures." - var/armed = 0 - var/obj/item/weapon/grenade/iedcasing/IED = null - - suicide_act(mob/user) - viewers(user) << "[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide." - return (BRUTELOSS) - -/obj/item/weapon/legcuffs/beartrap/attack_self(mob/user as mob) - ..() - if(ishuman(user) && !user.stat && !user.restrained()) - armed = !armed - icon_state = "beartrap[armed]" - user << "[src] is now [armed ? "armed" : "disarmed"]" - -/obj/item/weapon/legcuffs/beartrap/attackby(var/obj/item/I, mob/user as mob) //Let's get explosive. - if(istype(I, /obj/item/weapon/grenade/iedcasing)) - if(IED) - user << "This beartrap already has an IED hooked up to it!" - return - IED = I - switch(IED.assembled) - if(0,1) //if it's not fueled/hooked up - user << "You haven't prepared this IED yet!" - IED = null - return - if(2,3) - user.drop_item(src) - I.loc = src - message_admins("[key_name_admin(user)] has rigged a beartrap with an IED.") - log_game("[key_name(user)] has rigged a beartrap with an IED.") - user << "You sneak the [IED] underneath the pressure plate and connect the trigger wire." - desc = "A trap used to catch bears and other legged creatures. There is an IED hooked up to it." - else - user << "You shouldn't be reading this message! Contact a coder or someone, something broke!" - IED = null - return - if(istype(I, /obj/item/weapon/screwdriver)) - if(IED) - IED.loc = get_turf(src.loc) - IED = null - user << "You remove the IED from the [src]." - return - ..() - -/obj/item/weapon/legcuffs/beartrap/Crossed(AM as mob|obj) - if(armed) - if(IED && isturf(src.loc)) - IED.active = 1 - IED.overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled") - IED.icon_state = initial(icon_state) + "_active" - IED.assembled = 3 - message_admins("[key_name_admin(usr)] has triggered an IED-rigged [name].") - log_game("[key_name(usr)] has triggered an IED-rigged [name].") - spawn(IED.det_time) - IED.prime() - if(ishuman(AM)) - if(isturf(src.loc)) - var/mob/living/carbon/H = AM - if(H.m_intent == "run") - if(H.lying) - H.apply_damage(20,BRUTE,"chest") - else - H.apply_damage(20,BRUTE,(pick("l_leg", "r_leg"))) - armed = 0 - icon_state = "beartrap0" - playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) - H.visible_message("[H] triggers \the [src].", \ - "You trigger \the [src]!") - H.legcuffed = src - src.loc = H - H.update_inv_legcuffed() - H << "You step on \the [src]!" - if(IED && IED.active) - H << "\The [src]'s IED has been activated!" - feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart. - for(var/mob/O in viewers(H, null)) - if(O == H) - continue - O.show_message("\red [H] steps on \the [src].", 1) - if(isanimal(AM) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator)) - armed = 0 - icon_state = "beartrap0" - var/mob/living/simple_animal/SA = AM - playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) - SA.visible_message("[SA] triggers \the [src].", \ - "You trigger \the [src]!") - SA.health -= 20 - ..() - /obj/item/weapon/legcuffs/bolas name = "bolas" desc = "An entangling bolas. Throw at your foes to trip them and prevent them from running." From 3eaa440695866e36e94afca994ed60892d590c9f Mon Sep 17 00:00:00 2001 From: TheDZD Date: Fri, 5 Feb 2016 23:36:31 -0500 Subject: [PATCH 074/442] Automatic changelog generation for PR #3521 --- html/changelogs/AutoChangeLog-pr-3521.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3521.yml diff --git a/html/changelogs/AutoChangeLog-pr-3521.yml b/html/changelogs/AutoChangeLog-pr-3521.yml new file mode 100644 index 00000000000..dea29bd6c64 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3521.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - bugfix: "Fixes not being able to attach IEDs to beartraps" From 2e244feb0c4ea16e29b221207ede6b405d96b8cc Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 6 Feb 2016 01:25:52 -0500 Subject: [PATCH 075/442] Sink and Toilet Fixes --- code/game/objects/structures/watercloset.dm | 216 +++++++++++------- .../reagent_containers/glass_containers.dm | 1 + 2 files changed, 129 insertions(+), 88 deletions(-) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 3262ac5ece2..5ae9c8d1419 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -12,14 +12,18 @@ var/w_items = 0 //the combined w_class of all the items in the cistern var/mob/living/swirlie = null //the mob being given a swirlie + /obj/structure/toilet/New() open = round(rand(0, 1)) update_icon() -/obj/structure/toilet/attack_hand(mob/living/user as mob) + +/obj/structure/toilet/attack_hand(mob/living/user) if(swirlie) - usr.visible_message("[user] slams the toilet seat onto [swirlie.name]'s head!", "You slam the toilet seat onto [swirlie.name]'s head!", "You hear reverberating porcelain.") - swirlie.adjustBruteLoss(8) + user.changeNext_move(CLICK_CD_MELEE) + playsound(src.loc, "swing_hit", 25, 1) + swirlie.visible_message("[user] slams the toilet seat onto [swirlie]'s head!", "[user] slams the toilet seat onto [swirlie]'s head!", "You hear reverberating porcelain.") + swirlie.adjustBruteLoss(5) return if(cistern && !open) @@ -32,61 +36,81 @@ user.put_in_hands(I) else I.loc = get_turf(src) - user << "You find \an [I] in the cistern." + user << "You find [I] in the cistern." w_items -= I.w_class return open = !open update_icon() + /obj/structure/toilet/update_icon() icon_state = "toilet[open][cistern]" -/obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob, params) + +/obj/structure/toilet/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/weapon/crowbar)) - user << "You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]." + user << "You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]..." playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1) if(do_after(user, 30, target = src)) - user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "You hear grinding porcelain.") + user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "You hear grinding porcelain.") cistern = !cistern update_icon() return - if(istype(I, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = I + if(istype(I, /obj/item/weapon/reagent_containers)) + if(!open) + return + var/obj/item/weapon/reagent_containers/RG = I + if(RG.is_open_container()) + RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) + user << "You fill [RG] from [src]. Gross." + return + if(istype(I, /obj/item/weapon/grab)) + user.changeNext_move(CLICK_CD_MELEE) + var/obj/item/weapon/grab/G = I + if(!G.confirm()) + return if(isliving(G.affecting)) var/mob/living/GM = G.affecting - - if(G.state>1) - if(!GM.loc == get_turf(src)) - user << "[GM.name] needs to be on the toilet." + if(G.state >= GRAB_AGGRESSIVE) + if(GM.loc != get_turf(src)) + user << "[GM] needs to be on [src]!" return - if(open && !swirlie) - user.visible_message("[user] starts to give [GM.name] a swirlie!", "You start to give [GM.name] a swirlie!") - swirlie = GM - if(do_after(user, 30, 5, 0, target = src)) - user.visible_message("[user] gives [GM.name] a swirlie!", "You give [GM.name] a swirlie!", "You hear a toilet flushing.") - if(!GM.internal) - GM.adjustOxyLoss(5) - swirlie = null - else - user.visible_message("[user] slams [GM.name] into the [src]!", "You slam [GM.name] into the [src]!") - GM.adjustBruteLoss(8) + if(!swirlie) + if(open) + GM.visible_message("[user] starts to give [GM] a swirlie!", "[user] starts to give [GM] a swirlie...") + swirlie = GM + if(do_after(user, 30, 5, 0, target = src)) + GM.visible_message("[user] gives [GM] a swirlie!", "[user] gives [GM] a swirlie!", "You hear a toilet flushing.") + if(iscarbon(GM)) + var/mob/living/carbon/C = GM + if(!C.internal) + C.adjustOxyLoss(5) + else + GM.adjustOxyLoss(5) + swirlie = null + else + playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) + GM.visible_message("[user] slams [GM.name] into [src]!", "[user] slams [GM.name] into [src]!") + GM.adjustBruteLoss(5) else - user << "You need a tighter grip." + user << "You need a tighter grip!" if(cistern) if(I.w_class > 3) - user << "\The [I] does not fit." + user << "[I] does not fit!" return if(w_items + I.w_class > 5) - user << "The cistern is full." + user << "The cistern is full!" + return + if(!user.drop_item()) + user << "\The [I] is stuck to your hand, you cannot put it in the cistern!" return - user.drop_item() I.loc = src w_items += I.w_class - user << "You carefully place \the [I] into the cistern." + user << "You carefully place [I] into the cistern." return @@ -99,20 +123,24 @@ density = 0 anchored = 1 -/obj/structure/urinal/attackby(obj/item/I as obj, mob/user as mob, params) + +/obj/structure/urinal/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = I + if(!G.confirm()) + return if(isliving(G.affecting)) var/mob/living/GM = G.affecting - if(G.state>1) - if(!GM.loc == get_turf(src)) - user << "[GM.name] needs to be on the urinal." + if(G.state >= GRAB_AGGRESSIVE) + if(GM.loc != get_turf(src)) + user << "[GM.name] needs to be on [src]." return - user.visible_message("[user] slams [GM.name] into the [src]!", "You slam [GM.name] into the [src]!") + user.changeNext_move(CLICK_CD_MELEE) + playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) + user.visible_message("[user] slams [GM] into [src]!", "You slam [GM] into [src]!") GM.adjustBruteLoss(8) else - user << "You need a tighter grip." - + user << "You need a tighter grip!" /obj/machinery/shower @@ -344,6 +372,13 @@ var/busy = 0 //Something's being washed at the moment /obj/structure/sink/attack_hand(mob/user as mob) + if(!user || !istype(user)) + return + if(!iscarbon(user)) + return + if(!Adjacent(user)) + return + if (ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] @@ -353,81 +388,86 @@ user << "You try to move your [temp.name], but cannot!" return - if(isrobot(user) || isAI(user)) - return - - if(!Adjacent(user)) - return - if(busy) - user << "\red Someone's already washing here." + user << "Someone's already washing here." + return + var/selected_area = parse_zone(user.zone_sel.selecting) + var/washing_face = 0 + if(selected_area in list("head", "mouth", "eyes")) + washing_face = 1 + user.visible_message("[user] start washing their [washing_face ? "face" : "hands"]...", \ + "You start washing your [washing_face ? "face" : "hands"]...") + busy = 1 + + if(!do_after(user, 40, target = src)) + busy = 0 return - usr << "\blue You start washing your hands." - - busy = 1 - sleep(40) busy = 0 - if(!Adjacent(user)) return //Person has moved away from the sink - - user.clean_blood() - if(ishuman(user)) - user:update_inv_gloves() - for(var/mob/V in viewers(src, null)) - V.show_message("\blue [user] washes their hands using \the [src].") + user.visible_message("[user] washes their [washing_face ? "face" : "hands"] using [src].", \ + "You wash your [washing_face ? "face" : "hands"] using [src].") + if(washing_face) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.lip_style = null //Washes off lipstick + H.lip_color = initial(H.lip_color) + H.regenerate_icons() + user.drowsyness -= rand(2,3) //Washing your face wakes you up if you're falling asleep + user.drowsyness = Clamp(user.drowsyness, 0, INFINITY) + else + user.clean_blood() -/obj/structure/sink/attackby(obj/item/O as obj, mob/user as mob, params) +/obj/structure/sink/attackby(obj/item/O, mob/user, params) if(busy) - user << "\red Someone's already washing here." + user << "Someone's already washing here!" return - if (istype(O, /obj/item/weapon/reagent_containers)) + if(istype(O, /obj/item/weapon/reagent_containers)) var/obj/item/weapon/reagent_containers/RG = O - RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - user.visible_message("\blue [user] fills the [RG] using \the [src].","\blue You fill the [RG] using \the [src].") - return + if(RG.is_open_container()) + RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) + user << "You fill [RG] from [src]." + return O.water_act(20,310.15,src) - if (istype(O, /obj/item/weapon/melee/baton)) + if(istype(O, /obj/item/weapon/melee/baton)) var/obj/item/weapon/melee/baton/B = O - if (B.bcell.charge > 0 && B.status == 1) - flick("baton_active", src) - user.Stun(10) - user.stuttering = 10 - user.Weaken(10) - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - R.cell.charge -= 20 - else + if(B.bcell) + if(B.bcell.charge > 0 && B.status == 1) + flick("baton_active", src) + var/stunforce = B.stunforce + user.Stun(stunforce) + user.Weaken(stunforce) + user.stuttering = stunforce B.deductcharge(B.hitcost) - user.visible_message( \ - "[user] was stunned by his wet [O].", \ - "\red You have wet \the [O], it shocks you!") - return + user.visible_message("[user] shocks themself while attempting to wash the active [B.name]!", \ + "You unwisely attempt to wash [B] while it's still on.") + playsound(src, "sparks", 50, 1) + return - var/turf/location = user.loc - if(!isturf(location)) return + if(istype(O, /obj/item/weapon/mop)) + O.reagents.add_reagent("water", 5) + user << "You wet [O] in [src]." + playsound(loc, 'sound/effects/slosh.ogg', 25, 1) var/obj/item/I = O - if(!I || !istype(I,/obj/item)) return - - usr << "\blue You start washing \the [I]." + if(!I || !istype(I)) + return + if(I.flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. + return + user << "You start washing [I]..." busy = 1 - sleep(40) + if(!do_after(user, 40, target = src)) + busy = 0 + return busy = 0 - - if(user.loc != location) return //User has moved - if(!I) return //Item's been destroyed while washing - if(user.get_active_hand() != I) return //Person has switched hands or the item in their hands - O.clean_blood() - user.visible_message( \ - "\blue [user] washes \a [I] using \the [src].", \ - "\blue You wash \a [I] using \the [src].") + user.visible_message("[user] washes [I] using [src].", \ + "You wash [I] using [src].") /obj/structure/sink/kitchen diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 1740995b38f..b7c891370b0 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -23,6 +23,7 @@ /obj/structure/table, /obj/structure/closet, /obj/structure/sink, + /obj/structure/toilet, /obj/item/weapon/storage, /obj/machinery/atmospherics/unary/cryo_cell, /obj/machinery/dna_scannernew, From fec86a78e4fe85b4c283c0d4e352bdb7450a10c8 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 6 Feb 2016 03:01:45 -0500 Subject: [PATCH 076/442] as requested --- code/game/objects/structures/watercloset.dm | 2 +- .../reagents/oldchem/reagents/reagents_water.dm | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 5ae9c8d1419..ef25216b560 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -63,7 +63,7 @@ return var/obj/item/weapon/reagent_containers/RG = I if(RG.is_open_container()) - RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) + RG.reagents.add_reagent("toiletwater", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) user << "You fill [RG] from [src]. Gross." return diff --git a/code/modules/reagents/oldchem/reagents/reagents_water.dm b/code/modules/reagents/oldchem/reagents/reagents_water.dm index eea7dfad6c4..b7c296443b5 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_water.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_water.dm @@ -223,9 +223,18 @@ M.fakevomit(1) else M.fakevomit(0) - ..() + ..() return +/datum/reagent/fishwater/toiletwater + name = "Toilet Water" + id = "toiletwater" + description = "Filthy water scoured from a nasty toilet bowl. Absolutely disgusting." + reagent_state = LIQUID + color = "#757547" + +/datum/reagent/fishwater/toiletwater/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //For shennanigans + return /datum/reagent/holywater name = "Water" From 6c8baf05a7ae17a4aa4b20290b20b76de9a26750 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Sat, 6 Feb 2016 07:46:33 -0500 Subject: [PATCH 077/442] Automatic changelog generation for PR #3516 --- html/changelogs/AutoChangeLog-pr-3516.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3516.yml diff --git a/html/changelogs/AutoChangeLog-pr-3516.yml b/html/changelogs/AutoChangeLog-pr-3516.yml new file mode 100644 index 00000000000..a49800ec2a9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3516.yml @@ -0,0 +1,4 @@ +author: Crazylemon64 +delete-after: True +changes: + - rscadd: "Changes chemistry's welding tank to a wall-mounted version, to increase the room available." From 1464bb38628520722b16e3262550a3f5e37dd86a Mon Sep 17 00:00:00 2001 From: Regen Date: Sat, 6 Feb 2016 18:20:34 +0100 Subject: [PATCH 078/442] Updates powersink to be similar to TG --- code/game/objects/items/devices/powersink.dm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index c08c79da86f..c9b6a6d7563 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -12,13 +12,14 @@ throw_range = 2 materials = list(MAT_METAL=750) origin_tech = "powerstorage=3;syndicate=5" - var/drain_rate = 1500000 // amount of power to drain per tick + var/drain_rate = 1600000 // amount of power to drain per tick var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts. var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts. var/power_drained = 0 // Amount of power drained. - var/max_power = 5e9 // Detonation point. + var/max_power = 1e10 // Detonation point. var/mode = 0 // 0 = off, 1=clamped (off), 2=operating var/drained_this_tick = 0 // This is unfortunately necessary to ensure we process powersinks BEFORE other machinery such as APCs. + var/admins_warned = 0 // stop spam, only warn the admins once that we are about to go boom var/datum/powernet/PN // Our powernet var/obj/structure/cable/attached // the attached cable @@ -120,10 +121,13 @@ /obj/item/device/powersink/process() drained_this_tick = 0 power_drained -= min(dissipation_rate, power_drained) - if(power_drained > max_power * 0.95) + if(power_drained > max_power * 0.98) + if(!admins_warned) + admins_warned = 1 + message_admins("Power sink at ([x],[y],[z] - JMP) is 95% full. Explosion imminent.") playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) if(power_drained >= max_power) - explosion(src.loc, 3,6,9,12) + explosion(src.loc, 4,8,16,32) qdel(src) return if(attached && attached.powernet) From e1899e4af9938dc19b14b465b7355fe76609b082 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 6 Feb 2016 18:42:26 -0500 Subject: [PATCH 079/442] almost --- code/_onclick/item_attack.dm | 2 - .../mob/living/carbon/brain/brain_item.dm | 2 +- code/modules/mob/living/carbon/slime/slime.dm | 11 +++++ code/modules/surgery/helpers.dm | 9 ++-- code/modules/surgery/limb_reattach.dm | 6 +-- code/modules/surgery/organs_internal.dm | 42 +++++++++++-------- code/modules/surgery/slime.dm | 2 +- code/modules/surgery/surgery.dm | 9 ++-- 8 files changed, 51 insertions(+), 32 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 99427712b43..ee2d7c56cf7 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -38,8 +38,6 @@ if(!attempt_initiate_surgery(src, M, user)) return 0 if(is_sharp(src)) - if(isslime(M) && !attempt_initiate_surgery(src, M, user)) - return 0 if(!attempt_initiate_surgery(src, M, user)) return 0 return diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index e253f469da4..6ef6ef0707c 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -57,7 +57,7 @@ else user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.." -/obj/item/organ/internal/brain/remove(var/mob/living/user) +/obj/item/organ/internal/brain/remove(var/mob/living/user,var/special) if(!owner) return ..() // Probably a redundant removal; just bail diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 952a7095564..2db822d3a67 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -349,6 +349,12 @@ step_away(src,M) return + else + if(stat == DEAD && surgeries.len) + if(M.a_intent == I_HELP) + for(var/datum/surgery/S in surgeries) + if(S.next_step(M, src)) + return 1 /* if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves)) @@ -482,6 +488,11 @@ return /mob/living/carbon/slime/attackby(obj/item/W, mob/user, params) + if(stat == DEAD && surgeries.len) + if(user.a_intent == I_HELP) + for(var/datum/surgery/S in surgeries) + if(S.next_step(user, src)) + return 1 if(istype(W,/obj/item/stack/sheet/mineral/plasma)) //Lets you feed slimes plasma. if (user in Friends) ++Friends[user] diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index f8fad583f34..2c422812033 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -8,7 +8,7 @@ H = M affecting = H.get_organ(check_zone(selected_zone)) - if(isslime(M) ||isalien(M) ||can_operate(H)) //if they're prone or a slime + if(can_operate(M)) //if they're prone or a slime var/datum/surgery/current_surgery for(var/datum/surgery/S in M.surgeries) @@ -64,9 +64,10 @@ M.surgeries -= current_surgery user.visible_message("[user] mends the incision on [M]'s [parse_zone(selected_zone)] with the [I] .", \ "You mend the incision on [M]'s [parse_zone(selected_zone)].") - affecting.open = 0 - affecting.germ_level = 0 - affecting.status &= ~ORGAN_BLEEDING + if(affecting) + affecting.open = 0 + affecting.germ_level = 0 + affecting.status &= ~ORGAN_BLEEDING qdel(current_surgery) else if(current_surgery.can_cancel) user << "You need to hold a cautery in inactive hand to stop [M]'s surgery!" diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index acca5d25ef4..58399e84f84 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -14,7 +14,7 @@ var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.is_stump()) + if(affected) return 0 return 1 @@ -29,7 +29,7 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected && (affected.status && ORGAN_DESTROYED)) + if(!affected) return 1 return 0 @@ -43,7 +43,7 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected && (affected.status && ORGAN_DESTROYED)) + if(!affected) return 1 return 0 diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 5ef964b372b..8f6625be9a0 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -19,7 +19,7 @@ possible_locs = list("chest", "head", "groin", "eyes", "mouth") allowed_mob = list(/mob/living/carbon/alien/humanoid) disallowed_mob = list(/mob/living/carbon/human) - steps = list(/datum/surgery_step/saw_carapace,/datum/surgery_step/cut_carapace, /datum/surgery_step/retract_carapace, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs) + steps = list(/datum/surgery_step/saw_carapace,/datum/surgery_step/cut_carapace, /datum/surgery_step/retract_carapace,/datum/surgery_step/internal/manipulate_organs) /datum/surgery/organ_manipulation/can_start(mob/user, mob/living/carbon/target) @@ -134,10 +134,13 @@ -/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) I = null - affected = target.get_organ(target_zone) + var/mob/living/carbon/human/H + if(istype(target,/mob/living/carbon/human)) + H = target + affected = H.get_organ(target_zone) if(is_int_organ(tool)) current_type = "insert" I = tool @@ -152,15 +155,18 @@ if(target.get_int_organ(I)) user << " \The [target] already has [I]." return -1 - - user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ - "You start transplanting \the [tool] into [target]'s [affected.name].") - target.custom_pain("Someone's rooting around in your [affected.name]!",1) + if(affected) + user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ + "You start transplanting \the [tool] into [target]'s [affected.name].") + H.custom_pain("Someone's rooting around in your [affected.name]!",1) + else + user.visible_message("[user] starts transplanting \the [tool] into [target]'s [parse_zone(target_zone)].", \ + "You start transplanting \the [tool] into [target]'s [parse_zone(target_zone)].") else if(implement_type in implements_finsh) //same as surgery step /datum/surgery_step/open_encased/close/ current_type = "finish" - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(affected.encased) var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." @@ -169,7 +175,8 @@ var/msg = "[user] starts pulling [target]'s skin back into place with \the [tool]." var/self_msg = "You start pulling [target]'s skin back into place with \the [tool]." user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) + if(affected) + H.custom_pain("Something hurts horribly in your [affected.name]!",1) else if(implement_type in implements_extract) current_type = "extract" var/list/organs = target.get_organs_zone(target_zone) @@ -188,7 +195,8 @@ if(!I) return -1 user.visible_message("[user] starts to separate [target]'s [I] with \the [tool].", \ "You start to separate [target]'s [I] with \the [tool] for removal." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) + if(affected) + H.custom_pain("The pain in your [affected.name] is living hell!",1) else return -1 @@ -219,7 +227,7 @@ user << "No organs appear to be damaged." return -1 - target.custom_pain("The pain in your [affected.name] is living hell!",1) + H.custom_pain("The pain in your [affected.name] is living hell!",1) else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) user << "[tool] was biten by someone! It's too damaged to use!" @@ -256,9 +264,12 @@ user.drop_item() I.insert(target) spread_germs_to_organ(I, user) - user.visible_message(" [user] has transplanted \the [tool] into [target]'s [affected.name].", \ - " You have transplanted \the [tool] into [target]'s [affected.name].") - + if(affected) + user.visible_message(" [user] has transplanted \the [tool] into [target]'s [affected.name].", \ + " You have transplanted \the [tool] into [target]'s [affected.name].") + else + user.visible_message(" [user] has transplanted \the [tool] into [target]'s [affected.name].", \ + " You have transplanted \the [tool] into [target]'s [parse_zone(target_zone)].") I.status &= ~ORGAN_CUT_AWAY else if(current_type == "extract") @@ -276,7 +287,6 @@ "You can't extract anything from [target]'s [parse_zone(target_zone)]!") else if(current_type == "finish") - var/obj/item/organ/external/affected = target.get_organ(target_zone) if(affected.encased) var/msg = " [user] bends [target]'s [affected.encased] back into place with \the [tool]." var/self_msg = " You bend [target]'s [affected.encased] back into place with \the [tool]." @@ -296,7 +306,6 @@ if(current_type == "mend") if (!hasorgans(target)) return - var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message(" [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ " Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") @@ -327,7 +336,6 @@ else if(current_type == "extract") if(I && I.owner == target) - var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message(" [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ " Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") affected.createwound(BRUISE, 20) diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index 41c2f43c76c..e1a72ff3065 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -12,7 +12,7 @@ return istype(target, /mob/living/carbon/slime/) can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - return target.stat == 2 + return target.stat == DEAD /datum/surgery_step/slime/cut_flesh allowed_tools = list( diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 7854f45daff..9530ed4ee72 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -159,10 +159,11 @@ // does stuff to begin the step, usually just printing messages. Moved germs transfering and bloodying here too /datum/surgery_step/proc/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (can_infect && affected) - spread_germs_to_organ(affected, user) - if (ishuman(user) && prob(60)) + if(ishuman(target)) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (can_infect && affected) + spread_germs_to_organ(affected, user) + if (ishuman(user) && !(istype(target,/mob/living/carbon/alien)) && prob(60)) var/mob/living/carbon/human/H = user if (blood_level) H.bloody_hands(target,0) From 1f569053cc7e2fd7ff9a09c38387c578d022f880 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 6 Feb 2016 23:25:01 -0500 Subject: [PATCH 080/442] Tweaks Syndicate Donk Pockets --- code/modules/reagents/newchem/drugs.dm | 4 ++++ code/modules/reagents/reagent_containers/food/snacks.dm | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/newchem/drugs.dm b/code/modules/reagents/newchem/drugs.dm index 69679560ef8..aac5157403e 100644 --- a/code/modules/reagents/newchem/drugs.dm +++ b/code/modules/reagents/newchem/drugs.dm @@ -165,6 +165,10 @@ addiction_threshold = 10 metabolization_rate = 0.6 +/datum/reagent/methamphetamine/meth2 //for donk pockets + id = "methamphetamine2" + addiction_threshold = 20 + /datum/reagent/methamphetamine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.") diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index f9d0f1136a8..21636735093 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -834,7 +834,7 @@ reagents.add_reagent("synaptizine", 15) reagents.add_reagent("salglu_solution", 15) reagents.add_reagent("salbutamol", 15) - reagents.add_reagent("methamphetamine", 15) + reagents.add_reagent("methamphetamine2", 15) /obj/item/weapon/reagent_containers/food/snacks/brainburger name = "brainburger" From e5f5b68c92189ac7836f733129e83ae6ba6b4a3e Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 7 Feb 2016 00:54:46 -0500 Subject: [PATCH 081/442] fixed slime surgery --- code/modules/surgery/helpers.dm | 3 +-- code/modules/surgery/slime.dm | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 2c422812033..67ed3b08c17 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -8,9 +8,8 @@ H = M affecting = H.get_organ(check_zone(selected_zone)) - if(can_operate(M)) //if they're prone or a slime + if(can_operate(M) || isslime(M)) //if they're prone or a slime var/datum/surgery/current_surgery - for(var/datum/surgery/S in M.surgeries) if(S.location == selected_zone) current_surgery = S diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index e1a72ff3065..62a7d890701 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -5,6 +5,7 @@ name = "core removal" steps = list(/datum/surgery_step/slime/cut_flesh, /datum/surgery_step/slime/cut_innards, /datum/surgery_step/slime/saw_core) allowed_mob = list(/mob/living/carbon/slime) + possible_locs = list("chest")//urgghhhhhhhhhhhh /datum/surgery_step/slime From 65e3b13d2eba284672d04ff839292d1b62e5e3b1 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 7 Feb 2016 02:07:46 -0500 Subject: [PATCH 082/442] Readds Bald Tajaran Hairstyle, Fixes non-Human Masks --- .../mob/new_player/sprite_accessories.dm | 5 +++++ icons/mob/species/tajaran/mask.dmi | Bin 25069 -> 26356 bytes icons/mob/species/unathi/mask.dmi | Bin 24795 -> 25741 bytes icons/mob/species/vox/mask.dmi | Bin 28552 -> 29709 bytes icons/mob/species/vulpkanin/mask.dmi | Bin 26243 -> 27609 bytes 5 files changed, 5 insertions(+) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index ec388c0faff..72d35aef201 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -631,6 +631,11 @@ species_allowed = list("Skrell") gender = FEMALE + taj_ears + name = "Tajaran Ears" + icon_state = "ears_plain" + species_allowed = list("Tajaran") + taj_ears_clean name = "Tajara Clean" icon_state = "hair_clean" diff --git a/icons/mob/species/tajaran/mask.dmi b/icons/mob/species/tajaran/mask.dmi index 0b046910f486f62dac65c2a1f32bb8d60d9a1e99..a54464d1f2dabe31bb8183a982946017bd87c3e0 100644 GIT binary patch literal 26356 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 nhnASfv*$CEKLfJx?cG^b^s_u literal 25069 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 E7wZf;ApigX literal 24795 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 diff --git a/icons/mob/species/vox/mask.dmi b/icons/mob/species/vox/mask.dmi index 632ffe24c6f25e192c250b937cb5308bfa4f9fc2..fd7fb65662062cdc27c14e44e4caaf10888a261a 100644 GIT binary patch literal 29709 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

    4-(iz!#a+iNyF%7uWHWZHEcZ!0FS! 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 OWxAS@<{GLANmg^s zTj~~jDDR@53b5i_+8u6S_tuY}QvY+#KLkhGv-gn9bp=eu&0Dv+piW0?7W(n_86dAm z4EuFxLtH_#RN3h7=LGd|>DEArn-GF#B1SuC?|t`Kz!eA8vvavOtaYZG_CVRr(C5mt zKYFv@icXP;MuSF=CrrCTRazd)dB!WU2-LYP2eKvOzpNbdn_w;(1(Qm;JJg0Z6)l6U zPeppbzkKLg3oMm10qaAD3~A_V0s`UEdK|C9f@}a?6hS->b3^}_M{Jhp2!(Q_g8WIj zbwl_x8y@#M8tpPH-CyhESD1wv?)zGF=3)ZV*5QQhublP28*wUHr!D$*T9#2Bx!34=ROTTFl20$>Mq@;E;w4d=WvCx_hm5nXk(_){K@MKTv zFQ>O(f9r%>*5u!TY+&-|&sUjO`g7Z%&Ee~`@!;r&{_DdT|O)Tw{vk z)^%4@klJl=s%MQDef1wU8XCt!7ZI;=1_cC=fA7k9Z)SE--oJmJ4|acaUxiB6k%(v+ zr-UxKPaE^y%+SlZ8V<+aq&d6Fmg~p`+M$8o(Vz4&rgsM%=8twEXmsKHb%o1T4p1n! z3nQv4(Qk&mV5aqbvG-oP(XSzsjNIFa?#1kV?|br=(wY>&C(!L#wk0Sm*V7DvXckbz zd}SceZikoyCTKh~s5V=hY`i(ZveK{J31SbNJ8zNm_NRI6HABHQ5;?VDNq0z7_0?f1 z3h%XrTC!C@!{G4N^$5&1qm1KS(JjIB0raEDgoJEiRE4pQj!sfp*>Rd3@LPTrS`SDd z&~ZJ!3HB4e?WK)U8Y78hl=3jcGNx=T2=<(}F67wrm%LsL5(|;A$ULOAbm%K^;6^;* zSO7t<-L?na9FCYm9l@Zmr)7Rw75}l$48_>BHZ>i(-}dq8qUcyEbIUvQ+o<|ztd~tA zE-ttgwap>!u{>n3I9$pBb5SkuIrbARyRe`8q09?a*}K@U2H3$dSVRsYkzqqa#`5I# zPH4mXz282tOz~wkKiDiIqA9K9sVLOGr0j!|f@oXZI(_E4CGlFQJ)CBKFIReJmNfm@Zmhu5U0-b}&LK zKd7%zQ8uW^d9wNiV8g45VO!^G7o25To%Nc?Rby$}CENOP=f$H?Sn-=aD5m4*^kqaT z>+6$pSI-MRdg95q_Ul1|QU<@Z<%DRX?D~ zezv<0kpv>ibTuD*?W>`IEKJd2pfrUP^_+(b#;A}5)a8;FVE;r|3+nP&FX>K{%YR)y z+jo5s6Y#yi=IvYOb=ICT-eUqMq(*!f{e+XwBi*hA0-ebmRTxjDe;`>3+Nz}zNJ{sA z8_W}!ivQ#LX@K@>oAn!UUkd#Hu(y^2@!8%-+vNnO(g)og9Ur=PVg6u5*x<{&2J!mI zlP5WO{ryUkS}It1E}hKD%{`#BmWr39pN^s!HSZ^C?^FwzxsChX^{5d_ejk_}U*%kq zwtPF~loY*^&M}YOAu=Ssz^`-v$%dy4m`#+_K z{9jd9uF({~=&&)123`;7+W8x8RUq^}NL+$?sRd^kjXj=@zYo!P2#=imE7~7;8kC^R z6r2D#2WCc>ZKQ;$BNxC2>Q?DH9hzvZ3a@4}*n%VJOetB`?Fa83v*J*i0PN7ALt^m6 z!-+S*nl?2}$ejMr*xalF%|bpDK#`yYcPSd{wub!*qH^?G)sS;%&V1=tH1rzMk2!X1 zV}SbjhsFg$(X9mE7zJt|emvvy^F8K&Mt{=miKRW3jkCrkXc{~u5aAtU;_z87?MlIlT%aB%JcS3BN`dn$qx<;u`nIs?X|`;-s1`7qi$w#~Vd8@v<9`;0f zdir5n}*!Mygz)k-+YclSRsVOfsN0`#))@#KjNc@up|3unlNBSpL{^Y@Xd39YT9K4GT)xGTZhrY=W1zhJjaduAW;B*fx?iL z1EZwZi;Ih@4yWM`NKl|wAQ%%2;inX$0cKe;c5pwULCJ)0k0KxUYHr_2rRlc=gs5PL zs^R*FW+X|LrGY(d;+7Pr)(o($e^T62|75N^LqC^_tzdf)Kr`l$^it99jXhCwHh~+L z@S+WlAoMWXyb+I_Mtu>OLh0xPBqyIhR6%bkrK7c%bc45zPkJ_#B92s6uZ^v#MfsID*Lky?f!JmsSI zDMy>Iwe+_*ey3z)Dn>BRwzHo-r`zEUg^c&jLPA0j>vQKIcG-EnYSUh5G`xc4#YT)|-CWEC=zTvJoS>8EH5-FxC9GhE53$_~qn z%L3+tlZn|26Wi+CN;W;D&}fcfZB2z!T+1(Hg0#LQ!#LD*<8VlJT9ncEfjC5^u8I^o z6Gl3G_;5Z93dq}zL#C<;LvRo#H}o>PBxn^tKeBHrhiH<=ZS1*`x_P18X=-JN_cek) z;=`Uj=UTC(^%&LWmRPiBp<~D31sBS5R&;Rxr|_G2l#W+kyF~6Zb}^IG=BG>C@!_Ze zbA4jgiA^hj!6Ws^8@lZEXEK?Zn&n`w*Rnc_6*twM*v({9h7 zfKj3aSay5Tma0i6OUF2<`6xa;C-2H%T3eM z%Iaj3qA$*OQV6_q7+HC*8W_a93l(Emi_p;$*OQz^`DAzaPO7_6M&9_xL<9+#*|efy z)x3muQmbsaS<5D-ODw$i|1kHSVNG@27H9wwY&7W|Q9+R|y($O_3L*&7d+)syREkIw zklsZ=YUmw;bSWae_YTqtfrKP?@qX_)_uTUH+~>JJAUiud$=WNc%rWPfV+JyLpD}-Z zCNcDJ^`bKp5?r$3^p;1RC z)P9RT1w*D50}G$L@h*H(bgw-r<>BY;E&d=?5Q~UZHH@SeQUc~G10>7hfG=|?HLr<9Tcbam&arFJ`YaDwW-&m2nY$`G*Oh-0rEu1$%7aAJ zO+^JjTEStW0nj>%N{4T_Q=vi+fbj(Mdv49$-aD6)k)5-T1%md(S$n6yPzp(Q%kiq; zYYRSqF84UOFb!F_+x+TnDZO>v{CyD9Lcz_~_m72)n8HT3f@*dD5L}Xl$A^(Y1+h^2 zJzZGe$#~O^+U(jpZ;$cMaGRkj`?vrt9-FJA?O^x&%5u&xn4>~vhFv$)z-D;<6xdGr z62f2z26#J|cQGj`g(dopnj<08HeO>_v1c9CBc99*gkFAJ>MHEqRD%eYB8zTa~8lf7Qx7VEW)x5gxg@M3fK}9 zbJ=jOjolePi-=waE5^7z`kb?*_$t|>=H1{8I9Ywc!rNhZ#CeH#YG>$1w7?E7a_f3T zqGUo+sk>rK1-umP-_+klg(~}jZR!D<&m^E`gCRsVhZnm0qyI!o15)O)ro;~_YTmO4 zHIc;MU|#{fTsP-B zb7w;OK2G>#LVEp=BpT&Xo-%T71|DAZq$OS&SHL$D26ittKE5(J2fygcNdSjJb4D63 z$`9vKq>=jzyt|Z=m+4rJw+3zTA&bDfO#u*KLQUxjGQ&|HNa2Gu{uP?;OLFpqi}J*b z^HhRkt?+Z-4M3L?$4{s@e8v4ATlOV<$vC$h^_2IKPfcZu-#y=AAeuFNvj21&Y_E;j zRGZ(IJ1H>sK7;mzfn4+y59ZU|8KUGBL0zmXwoKV=SI@IoZh|L~0CERav|pREzMz8= z!pmUb1nr>)2F&cU=w~=GBxsiZO`v;~Cv)qUq3>4mWt2xK33|*U3>^T1sm$~-h~3F@ zxgD&<3;+g6{H_H2nnn~6jNiuw;{in{3#tp!IzEM}l z#Fn%eFTsEzzp!G4#jfo;3qWy4NYR-T8DLb0A2*!_Gb}KX9*d9~B7GR!{?#z~ zK6M;Kwchb?<*w_0M5E2{UsP^{ffcbj{LagD+xjZYpn{FN)~Axr)`P@QQn?4I1JuVJ z9wAc00?bdnrm@m2EfEe zcYe>yQ?k{%|8IKf!!Ay=zZqo<4#-9%+G5+eI@F^d*;LGd?9d^o@}SxjR56E!XKGN& z^q1IJIBX>U;f2&!kEP(y04@tD6!Jcf8e8M``D~>^D;`sF;r~nWFkelC_3w_rm0-6g zW670&t}DMb(EWJXxHNICFmwX!>pZjrX-VcK4k=3Pr@BX#U(RV8X}v(I4Q(-WyG8O; zMvEpWKGXW}Tq!CLXbS@r5eUrm=S4a>IXQr=z)>V-4zxANn3%Y$2fz!&7)6_Q>S6NZ zOn%c45P}SxbEwtW^TPox9^Q$IP_0j?T`Ep%eojuIwcW1LqID~I<+mA29>n@>E)318 zlJ43SeXgqMJzq4^{!K*G2c$gO%xbxHb#!!+qzw$G#rzBL^Htxr7Am%#w8eBLGHMsV zsX~v1%my$y6Y$_-F~Lrx;$t(6_vcu6{Me0H`K|dJVpJ2cKU6(9tCVdMoeENf78W#? zX7htZYio&j{=PUu!%7uSnBIya-;zI0syW4nq!ko*)x$oM`72Vr)}LEG&ZRLzg*qA= zvt1=&8wFI@>1%EG<%5QLG@bckl6>g5JUHaw87S<>#mznNb&5b19D<;` z>(Ygnd6jki9Xn7}cJFXYu?1_nW%xa^UfqaWk0Tl{@WBGEu$z*W_>m#*b3)URqXE~K z)wi})-3I+bA3kVAeJh<5KZ<6(dExH}k)3UJhbu0qY1wIvX(;Vi;`SS}4+dEEg!8U) zsAR^^x4Z-oo#v)Cug@&VP`DP|@WDi#KyGc!=gW*pu--TyEIxq%Wznx+Ntg6N{rDLI z8z4qV2kZuK@5yT0#8KfKARIzVdzs)4s8l1(7FiA-`GKk@hy!`xcq%bbUvUw1g7QF{ z6tW0Pz+MXef+AN!l@_oS^d&FudOK|c2(^|o6k~!h|+=N?rZ3+Ze?ZGoyWa+hvguUhD9=lN()oP zCW!cNXXj5v7f2A2L!vI&iKU=ef`{-OB1n%eOHd2E;OSCoZ>a_N|Kw9k&UG1wo$tk@ z$pN$D*M>YbKo2Dp8CzG@m?5~9p(1Ag81>)=fKflo(k8I!E3>k^yq#|7m}h%evYWH- z652ra+IB#Yod5!o3#>j*+|=W20f4*Ac7n$fD}Xu4m+1tGP~tDKz>mHsrq}3Ek`Nci zeu6*ya%$)7pHYHEWo}=W0o6Sj>7BCwfD*BS&-OCFOn96+a38`tv{bk0aq{7rO#EQ+ zK6H@Xu-t!zd|HZ@ii3*`JV3SYLSp3QiQn7wG-yL5tbncwQIzexC^Lg)lXZH;1eusp`_Zebj&FY2+d92bn^Riq56DJOTs zugN|973O)re$cPcgPxe=c^n9XQGv|HRuDXdKz_5=(>}H$d)i233OE}9ESYePw4<#f znUV0u+UpCe7lBztC+tR+YG2in@7${|W|TG+TU&Y(=BoryytL2Rn&n)C zc{p9nm72;I#d=Y}Y3|=c8K4bH;+^~irQZx;9z%qafCTfbT`ChOaSrn~jhpZF95(m? zHO#!3k>SyIGlfeb5gSUhfeTt4fN%zMtr|>o=#I4pZW5k>HwH_YXKW5VAj^IK1Pqif z2(07hsiO@PTzc$Wy?cEh2{-V&MJLeFYkYw+)D_@k8LnpAe1d-qeN}=S9;X%0kU+@TgxS zP!X`S&-BcjmzCGhxSor*0;%fTo0+(W%>z*xP(?#r?dj=Wp@W<%)-nW%o2_>x4D{)o z03lR9t3RwwK(Ma&Gut3m{2K>N)!ylm>hH|rzxzuSGlkA$Uv<(X)k3neSQ*dOeJ@s6 zQom$oM)zcDHtq*;>Mq_&ykpjS?SwHe&wt8?q)4GB@HTPN(lB+VuNq-e%OMkBnSlZ` zNWux=1{eeD!fVa@IL3F5zElG)hwgHP$iQu`WpZ|f)-5;smOH0SV^y^mpc*MB0{eWXp#lB-T+=lu+*Bj7jb1I>(B+!Y5Bwe+_+seP^j} z#9P@XDOlOKfZVC(ot!exu-xe5IbKTk*4&d$-B%VOsMCSrYShH1YJc5`Zh3=ouW*c` zVfG(udwim^vUl6*T~61|f}|heW8zZErmxox@os&Hx5`t%r@!L5wGkmSoR^)M+~!H| zGc?#8y&@wM5Izg9Tw2ItbK#vPW%zwmxMGdR`t85C0O7-_!99(4a0^t-N2O*tCl+i? z+h^1I6WPzT5z&r7SNu|FA}J|J>Dh)exp1ITCPB_yDE6GgM*K#G#=0OoewR9h7e#yG znZ%d4xQ}_ePrpPmU z9*tu+WXFz#>*Qt9-Iv-3A+lS)nXJAxl0S3geVU#9!8Uc?yw)ksmBFRa`bVH=GG-93 zlHoFHn^cYSdx%MXRC>hnIyX5pwiVb;jF%>MfXwde-GjBQ`Ok5} z*Sast{q8SuHn`tF1nEE^P?(NnN}19@EUvQiD{JmTY)0}l?wqn3l-IiC_V|uaf$9W; z)mQ>?lMZ5I5H-3iVs_in#Q_YafpiHikn=_UwM965+fjQAl97;b-xdSD`PNt_uWBh& zE?fS1LbBT1A}C|ybU@lqOxBjAEe-IZoX|xETQx;3*tpo(AQ8*v&J$FM=NgcgAhsea z4m&Wnf9S*Q94tL9Ki*wEbial9I?r7FY$sgzK`HYRO|L_I!Z)nCdEIGF#m_iA-&e06D!^uhH~@0L5N+3Fck= zy&sr+a8Ktfy7O~Hh#F@1wqcR%fZSzUj$wgKJZQ%1 z6O1jmzRW-itGi5lKbS~7+#Ce$nZ*wT1Jbtm^m&{V;CSHKXV5uQK@=qC@@kq9*J7UL zkBklPAmS~)y%Smz5_U#h{W&)OO#h8(=G_|MOrT8XnYFrcmbpHcf{=da|MI=R z5$WKBO!RK=uVm@#KFtORT^!MW%GYMjSRkBZQG#FhbjMCdXGI1FS=yviD&u@-l&V*L zY&v5m^Y;Tvt>A?+11`u7*CjIa-v zdwFev0*kx`6bXZxSWq6zltdC>3Ok(S?F;1!7N9~4D|XH`h7}Qk54;!QeyIk3+N`3d zAMLtUpGL-JZ{~FBHd$>R-@Wgu3_YNEgiFlof_^T*_NwP#{nz(TCXrBOcGVX{TOX$LG1l*6v!9nB zMGb5&KD;pIQXqm4N_A7xGX4pT9i=zm(LGx@vMZWNwM#H40M~&LzwoitBa>wpXjsRO^Q0Kl+RsP z4RoIM@!fwZwrO4o6L@p%#>dSR#N|z90^`0%8uA0Hkf8xR#29kLz2+2p@TsK-W!fFh z)hKiFY<$MoviAwEu77-73XXXA4X88|;3OVsZA__P%l7h`&Aw|4b!jI!ul|{y-SBNL z=)y9Cbh3nmgf0LO-)Ve{0wVGJj6??L1uIZP$9YG2RFg>p^YcMbbUyD`mn{V(c0^%u z6rEp3q|U7uo|F60Dc9?$N9(Ny)cx+W{2NN4Br#`L*bIFq__#@D2q|St7Xl*#hM|W| zEJ9o4guUAJm8Q!y@dXNHy_aL8LmNEthS)Vh9q;9hCFRvHwwLxg#D;fNZyM`-Y0+pV z6E^Rq%u71}NkwAKXJ({Z?5*(J?Xb@9R^G`FU|0 z?D{pV(S;*e#_E%_;!+Y?Mnw^gZ+^0Kb4Qw6SkU8WJ@5gXCvw9FK=yNg|H~=d4UmF9 z*zoai|aFdIYbf_g*0ezO=sTImPItJPfcBa zj@YX(MrpkyDc_pB9U1T*y#<{9xok8MrpN6kuFB0~w!XNG90uK?mwzU^8m6w$7hLq9psG5MZZr2@#=n42L z_5H)Oc;ErbCdmL@C9U_UOC6=^`+(8c zBz|7ZsIpj#Q68G?j&_6cWX8bm1MZwpk9M2r(cC^anF(bX@@2K}oECL2s(A^W>UK`= zV!QOupK#U^Dd)K-sy5z0=F_yWByRfd78B1BqLX zC%q#eK+(y?GTM)ZzNuP!-4R~>hXaY0fjrh78hst3o3}Lqeda)yQetKEx?(OO++3)z z_B*6ziG@IK`&Eb*bjM4}@D%05#31pmTWR)$)~}<d1%@7f*QKu*(G6Bx|<8}w1|8APc}j6!qLib8rO@@ zDl}i|35So+@PtyLxD^ZwUr59a_JE&1pLDNoQi~7~F|`Mi!$(CawPT&jBiy~MovYWb zv1dL@Or(~W%ahAzwQ)aD?r4NENEi4Onzp@W;%XqIq|_y`++#iHy|yY8)*2CSPtJs{ z&f8%D|M^VKb-_v5#rWG5j&NgV_9UXlWR_e(XR#$-P`K!_km=>50=$GKz|aBZJ%Z{U zf%B&eg8<+fPgR)D)(k$`z2uLB<1_CG79k(4BP7x?&M=~TEe;KOfbb4SK*81qi`b#^ zQvcd@J?VN<@M0(&4ljm&YCPRke=y0UJr-V~7ZXzC9sD^+{g6`m!OpKKheRHIr?Ug& zmq1u{1d+*S{NeJM+tzS!-zgxTMS+M*>gg^hN%8K*i);A!_;po^4|9;v7iPXV8vWj1 z?Zs3QUtCY?@-m^nr&ij)Gp7d}(S4_;A;_-xh83@1I0Cp?r8bubtA&?ie(hFX`TNYg zCx|a;e?swEF|W4UXOshL69ZRpT(28#A**l&UO>3~6drE+USFZ7`b8;zV+4f6@sjoM z*OB_%9hSYsqDao*`_`5|b%A_1M5oyA zfC71&w1?8-X)GTEXKMTYNSM2A3S2?lneUDtnR^X0kkYQHzg&Rq&YUh*(X`)EZkhY4 zI(Gf_+%}yp_ShtQ$CBs>JDy%9D8!cbFttEddSZ)$Zq8%+dwbi^`|v>sD zH&*kG*Ffo!LEvp#5!ly?`i6wgtoq?-{7>g~MZJ&i0@v=^6szJ5j$3j7Mhuw_(DTed z3r%$+RB3;yWJrb`uFRPJnl2HV&gc%PsITn3b#v|N%Fe<}-&sSG!5b1@Lc?$4rLHU9 z7~LlZJg`@NpFL$TEG&V;Xz`Vee&5$VhL&eC(t)`7$k4rk&++Of6CS^KU1?(nr{bjK%p2o%@r`UmTciT@4SQWLM z(0J|~B+x4PJ$uzu;mA4n34N=HQYI1>=?I_%V`gE|Ms<3F?YB-fhGXABRdLou*o^bR ziV2;>*>2eM?NFIsbIq&D6Fy^RZ~z24@P<}U_AZV4S^dOM@=_jHjVS9Q4Bk|oY zZ8U5h+LW!t|6&q0w_E?hlOWC@{Qs{HMK=N0+W7YcBOxCEM3-D?I)OCi{1+&yOX$T{_AhL zXRNlH8&qBqNdy@Pg_J{0G8eo#rnVr6-x9z6E`_omjIN}=^_~CK7po0?L5FYpl|M!8 zMQ^NxTKnJ{?>vD`6wMJ$T^a_uWfz7YiX1XW`|Z-Bqy(%fKv_?7*wE$5FRO5sdJ~}m z6$I$l0x0gkHp{%bEudZ5D0qMh{V1gMk<^WY7Si-1dU0B$JiYrhQ3;|%sG3FkPr8w0 zCfuPYijDHmP8E`VG<}pG@~3uV23(~g-8wuzJx$sWC*E~@o{4SbAPB7S+?^ObzWQ}1 zbux;=UTphhK`NQiU&$b$Kf|X<5Ew|IT~8wMAX=`lJA8c4)dweLj}O}?&uH#z>>L-U z=O4_K=OhW6r>wSw56V0g=&gzrVkzxXd>{cr1q=S3LC>BkWX~FrL5#+?>HbEKz`5p0 zhidF+CILC4xW<0}Fy%8?93ihYG_J_V$c(rgqk)DQNwwh$dD&E)q49D_-b`UZC@4wS zgyIJV66jp!<#Ow(A8G{LW6&-d!$lb`O{Xaj&{@pu73Syt<6D#^KQFuQv{XN-WQ70T zbO7-^uRRmdeT%d<2`@ZP{NJWOKC-B_HHsDamz~lg{r@m;j()Yhp|Zl%6exk0A4lrc z6ya$*jyBrmpI<8S+@Eg}He@$h0309v2dsy7q5lDV{9^4|8fKLE1RsN3K0e_Tp}kTP z3PVrNN59In?*iRoG{5nqhf@;aWhp8^;h`G$`qR%1kl!?UGG#G4aT@SUF)KFlUL{}v zCIgq-qqMSjb+BEGl6!V6;E0!l+{qce4M1ZEbC2)YMlY#H6H(y;~#1 zq$14GpQ6LqUKP?4@;S>tZz}L6Yq9NnC@kvnt<^Tj=I0Ug+DB84>y0(VZ=|f=ee2px z%iD&Hlmj`0&ojhh_{|2i#S=FgDM>)K$@o^%aE>b;9i5li@ZCp$c7h3gnp-7;3g{&N zE=i#XX0M5Yp%qMnApcOpw;DBillk<38H2ZXB`voE@u8*Jpo}VHc4)rY_w5blH-M>~ zxbs6}rt$O!AdUxnxr(eW^f-k_4B5*;EYZ^Lc1h zDXIr{dPf;w{Mi(TV)FBu_wDF^3D!EbnY`V;6J^)g-K{$ty6j@WZUn~1Q%y~3NbBGr zDR4FgliV7rvQ{72)B=*hF6>4LBxhsd#5C=R6!z9)K@VQ2BPO;cjhYP>oxysqLt?B{ z;nu*hPv&vBr@-txP?%e`X3bVS2rz36R@@&k5zi4^24)0J2jrWO3EV4$_gI~Az)|N` z&Tp4B;M9}i4|-uNjWTbU9Y6K{A&$zW0;%cpetweS(b1M5;oEo_2~KEy$ADzDpy1%8 zqqRO-;VL2?!pkqHx;i`NsX7SQYqd~=+%-k zRQ_p{v$f`S3zPWEb(&B+msc zw_w2g?)t~|zfuObbsG1sec7Mpu;gTF`(Cy25_&n*l5t*gaYUGe=eG>Mff1W@9xd`W z>O*pLK*6u!%|zYAqaoJI0-Q#jo zm_z6f)9Pl=JjRoXv56Fl9T>PK*mCm6YAhl&ibcx{s#h^TFQHE2GqqjRsP^#UF3+?L zf}cAws03pvVNnDdpB=gTRnGB@tbKwdAL{94);oXfmP;-xlpG!SV9o;&G56{>m`AvQ z{c?*z*v&?lgotk-0*JG;$m?7;RvLPVd3*DpX6ITNQ}JuHn-&nbx?NI#-{vf@&AL~`mkaGB zBGybrKh;{Zm*zXw&C}m{jz31*xAXii~dkRC8~m(i$i3@+BV$dnf~1I zOt=1O`MkP|b|Oc$AYM`lM#j(Vaf9SJnUCr(cPnTU<#Fu&kBa-o{z>PnG$v;a2k2*^ zuwM^FXoC_>3@Yk>kIfdToQ_s%FyXCS8W_Q$q3kj;Ea2AVWo02edUb(;fsn^`lVs=T z=U~y$@}MB8wqo-OljIL7c=a!ozmc%5TSVP{bq}cH@V?ug4eb-qm<9+y3fwf z{ZSc3P@ju7iV2N}>)HHSEe!4|xD4|QP$AV~EeqUJo9RkC)YyO)Atzg5)(_q27op?M7CcOG2 zzEKLE+D-G{X;-%dG6?|UuOl0)$i)-kwYH$_N)tVoN9Cr@E7mx|7RN$zH%fDDE4(hz zwrEdSr{3>siMx7P6OLLN?R>ocO8DfJ=~+dse=h7<T9By7EVs7+ZEy6jAE`E6 zt94-8ENwgh05noFtX~TCvYt@Xr#300*vpS^tsx8+>74PjhN;70pu*(ki>wZe>vvfK`VcVU@$2&Ti@CXoI`$-41vlU|#be;LHXXxlgH&txcTk^S#wr*f`y}!38^z zR=2q(x zyS{MDhfeh})Bh^nS*>Xi*58m6JhjkKG#5$lD;+@VD_TMD*^!bue_rEQ>E$yx z$eH{JHclEIJz21cf@J~%%&t(y7I~7)4_=FjcH=8cWY3`F7z{=mWD^4Dmvc_j3hsIe zsF*mdbluWMi-WP?fkC;0`=h@s1O>UQasLPuXirW~CMG6s{Xlr*F&vs!ZuAr1V{cY0 zANnhvl7XR5r^YU9s?xG=dIHq0tYi>zX!V-`jA|px!HiB2D_Y#&-=~0)Y9)dNSsdh; z*q;Njc?R9_O>Q9jJ@jy3Yo0g2FXIF3X*#u z)2;I>c`TMvYpL-dEze8YeIxHfEiOVcX7fdkzQtpuS!5!{R@=h|EG0CKQKlBL6&0QCjGqNJH%JDRFY0;c0EdBX z5Qv&|u}4dO0Ph>Asw@F={H%}{@=r9r{!pr*u8?H&BY#Rf)KXDFp?8M4Lw}V}{KWOv zM|@|{yPRB=QV2M;b@oE1$mf{M)O;Hjz2Lr=a;g!J27ES4Cjw%&AH6zwIuQUqfh|6a z<=fv);-nlIxle)sc>V{metN2BLhtim=#}VyAnE_r!&v-Dj!eHcFHd=g(n-sIzuGsB zvK5%1{f#UYuAS1i|8sUW^*baXGjs6&dXhn(K;d7Ee?5k>6=cwRA>};&$4BLm^AQDy zgy^Krwokiw+AfS-6Ho8N6#Ew7jV%x`o}Io3M^F9dh3Yfws7{QXeSKr~{?>nq0(5*TkF36EjEi+(TV2E>QU_tg{&W_d0vCMnA7x+cf8IzeC z7Jfa|q-bh*E99MBey6Hy(wl$ZW{YlVepkuS^a_bXWivt(0t$LuNqhHtuQsPf+;U|R zszy#XWlnOeH7Uo7WqIKR!m^jKcM^X&9}b&VZD zRmG(RyL+_^u%E{3oJ~jkbDu_OB(!C3f}f!fsp?=ddHwoz0q)!T$2Vn74k{H24(?S5 zE$7J7z75~Yz4~Zh{>BxBi?F8K+)jw?w_j^)2p1|X>&IDD^Gze|B}+BVD7q%TaaU z+OK6td1EL?hM`1X+PBK`&B>3pCSN^9?f$+eJi$yXH@t!X@7VqAm3~jkU~qdyDVSFc zT%@^^>Gth zz}mzLEOLOL9B#LDkZBkg7+5DL^3xt(XI}1!jb-=$Ex?lQR!e5F^|(7{Mp+H+YI&9+ z6>g|oy-Xq55tG~XTG~piS2y2u8UAUOJ18v2Fp%FZtUvLP7`%TtsYaEPxr(t`3wKu+ zI$h@ou1F5eDr9$B7GVA<$Ef|r<@=!adQRLPbz4VFDf!H)(S8*h=ULH}TPb5t_E*!% z_%BA zU;1NmzGZK_NCk4_y%5;^FNs%u5lAFNv@>_$@>kCCj3bw}Vi<4voqKI6h;;huBBeB) z$gO(O?;f6J93impvW{7gZWEsf&qJG-H8EZJ1Gc0=*+Y)n&##|!g{AsUe^GvuC8GIr z(o&1nnj$J9;wIz=bqfSkSAGHrH&iLY_PtVmc(TAS`vX7+pz>e8cJ12O^ldcf=@b(X zZ7rG>aCH2oJ^i3YMP`&Qr(i6g~Zl{ZWCx&9myADoql$()Af1Ol^7w`RWrxU0( z$x=i>pe=(-!#Emm6t&hgJ@=)<0-_9>2$txF`da47zzKm&e)qj*2n@YiaSRy*Xq~VD zU5t`>dSN?a$gE8kVuTcLVl$`mNTuq>>08G0HzrqJ?&P!Jmkudf%IDK2HLJnE9Ap*m zY~4k`{=Hbxqo2v)nEp{Ktt2@5U4qq-!H_vcN{g?oB^wH6272V7mp;}cJKO<>Uf$~y zdfSeSm^Y{5yq3lO%^5~5sj(1J%JZnt0gW#5uUv!*CxHbw`vF2I#( zb@k7a)MXa1pXu4Gue{ve@>7Zoe4!oP{@_z=K>4k!0YtKahbMB13AfGHrji)H<=I6B zs$tG!>FvC(W*xbpMcP6~joJkv@icnnzU+R_ZwWWylc^ z&5m@L5fG!at-%YfL&+E24sGN8LGtLkk%1W04$K3HotWU0w2J;??WXQLc9^AwV^Kx3 zuatcpz?A>|UAl{w$<3B*Fc}HjP2M6MnRwce(2${Q%p+QL-!(IIV1}ol^v#6pJ;Hly zJVFhc22O;8_m0M)Bi}6Vj=kOX`OT;CHES+#fKP+gQiifUG5cGG+saf;(c;hqmN($x zKkp4$(samW&^b?OQ5E+Xsf&oa*wNaBeJ7Vh6=pu#ty9_dxzmXE2)K8w=9}sV$jd;s zexCf9zT=e{b_S&$JW_Hep&kD{d>`7I1kU2t9MLc zq~JlbPzHGW2l@WCr{}SHY%k=D?%q_3pat`DeI4nP`-0=Sc`SZX50wSw>ZIbUmu(=s z_&t~pN=R;h)zP1>6eL+bkp=6$v}MZ;-y4+lqw5lomN(-yv9R3#+V|DIe`?9UYs7{oP%C z>uqO4Lqp&|YBS<%?d!|dd!;9vq0*hgBtrt~-c+n~FPSdcR<3j(YUQg$Y`9y=GZhy@ zu3pnlji-VTFV3@kD~=T)=yjNamlk}FP?7UgG#9B+WL=H|Ab8;_Mu#9TF z>-Yl2JT&Nj>lZ~dw7(2Dww^62dyc*6Hcf4+SIXRaK1X$18HQtjCd3o~*T;dO;=l-M=8mDf%IXTQPq&AGntJ)p8dxh%=n0(bOmgN z#Q+b*0@d7F9+1p$F7=LPhL?-09hhz}iKflX&Ep-Krjc&m;!L)8o#zz3$P}+_xfTB! z$~o8?y%sFoGQK}c_bQ5c%mS@ z6o=t=R3E31GatjzI`xYk5^vWVZ*CLyHQ>~56IEVQ9aDTER_U91py59?gLG@}E-{x_ z@P9Vk0R9t#XYuYhQkL3;b3&Qx7Io&xb()JGe|HHWg0r!{akD*h6Oml#%0!O6xT?Lr z+eqV;UTno4?(&>7L6cK+;8b%Y!{R+(G{i|vk%55hP0yUx93zv2`2LUY?$N&`uFo-U zbsJK)>II3;)tze`e_+)>W#nah8YXNz{=V>h4}KH2AS)WeGJ23Pq*2W6+~9ny&PLaG zyQ;aVsqW>Ay`7!D4-dx? z>#z5MzA#&1W+?O!VHDmg&#s8N;$wr+dd1vf;5(|i>md5KS`kxbbHrM@kK5CHT*-Fy#2t)xGw9l;--!?gUqK8>Ai z9d8||Kk*zte7s+z#}@G-ZCZcZM+Ny&J3w4=+mYF*SKrFU_qe5(stw2v-IIbA?9}5Q zLq>Fw&3%%*|D2aB$FAeuFGBkydK;|!$8!Z)ukFKQ`w99(v`h5Xy_1n|OUc&55F(^} zwR@OR^Nd7q!?o+iP1~xO1oxj{Pza{!f~Zp7w?N$cwVImoA*-IA#V$nuAruN7x!T*? zyZAZB5QtT?uCA|Z`lyIF%sSNxM+KB7&}X*a)4~*8rPgA^PzYUhqKeOq69hu(({m)4 zemDnVT|Y}vA&Og6zX0p33NO^uvay>rm5V{``fk={wVtF&XU>f;O?Pn5t^FAkZD>i* zxb?`4(E2@QcK&BDeuf_Qk#39PP>IdK^f^Pf+@Ifq`#)n&k=vP74KTg``5kkb zm|aXU<+AX7skQxs!P2w6tBlqQwwA?X{^qn5o%ePOM>Z(G&czE^X%Ybpv*m=*Jv%ia zgvPUqtbQ3mtJuNOe?1woQ;yUZ1W{FvMJ17r(wnge7R)$oY%AzB-9YrEm%u^uOc5-^d!SM*K79 z$evO@#rt18Ty}ztl#FX%xOv<5g*6H6sZ`cwmT-I4o=WMz_R#tV{?>0%jOzqobhTAh ztJxc(|3SgC7B5w+CZnp?zr<4+M^7aCvUEG!y>p8A5PQ2mBoMY@w6| zxL;xtMZw(qZ8{zjfju3xT@ErtH^!R19OpRb3M@6XMpp&Doq8p0^2$Rf@$xs%-t82i$n>CRJ z{lIEKRg0mi{QL~-8>^Abw6p@#!z(&JaILLhhK^m26pn8iXXrp%r3`T&3}Bu=ob}72 z(jSri3FuDu0DbbO1@B`^X~qoi6VTD)0Yn5dTcpMdkv7rCb~6;pY!Ol$q{cnB(irc{ z7JzbYVa7YZw0u(k11a|^Co1DpFN&p0H6T<|*Zp8{y&y;G2`t3oDGay2FY?Ym&2lDT^12_mWUU5A=6zL(iR?k-w&Q9T z!cp+PMf*_jv7&AfbVJ)!I72)0ls?*H1N4eVE^6=^$!Z1fr~(YiUT=US0TJHsMg9aK zafJ9D=@zuJr@t|$60|3`S4p2P|Dc)Kiat3R6vA{-Q;kJmlZ(KM>27%)=S?iYa!Aom z3tJrWKlQl^;SxE20Ptcw7%9G(wL1`}MzZ@+ZvIdpaXNP-_tWs6)t_RL(=nb8w7n;` zw^yN<1!jZ^9a?W0vGBw6F2o3VWSz2Cl+%H8lWsH?YVonh|90UQW1wNvfK%QPe%EAH z@OM!A0=BWNyz!pY!^StWMKoxD7@$eL)8LdJSc*F9e+E1sAD>xOGiv{LUxJX=r(OI~ zEoeP5czP4T`~D*g8mjulZXs~VPgcLmvGvP|*BZL%Q@)4}{rNC`d9+emY(a=J;R8rS zwsKQ4uhutvZdZ_C0isHv*=<<#({GID`EDn zWv;mmdsOeh?97+Gllau~RfL+2=f_n4>Tte1b%GHLqC32+!COZuJ3-4vEUN;|!73s<+t>c|eSpvvJq;av> z=l4Thh?BTA8HCEDr`+LAQ(88xh$hH?PlWw@SvhIn&R#UoJE^5?IBH<&;AOxKOj=2A zz>#%_&Fec0D_zJoJRHYdDVBhPqtacsg>TLf+Jv$iZQz#33TNu_N(;H{^^+6LO9Xgw zqC#U4pxzoNZR7b&^KxxCE9Zve^~_#i?kK})Hb4hA{OhZcuTF?2 zqu&C$W4p)@OQ3Pk^qkWT{rSCMoUO-mKq)(&AYI!$s`1VE!08fve0WU;>M)bQ5Z$6ARTAC31^tH8hxrw`H-DcNVAgYfdZQlw2vJ3nAqb;N zq|C1SPJDTfEij+V#IpJu_4c|B06FHOWYDL>N(d47U^vGFt{+u3!B`*zOGftZVE)c1 zi_BvK*vH@kKA65i{hj@T2cOy$yJBD#s$MI8;SEt(QDv|R8^d&Gk1n$+9XrN( z+iEYd-@g|nX8yD%Th`UGhsDp^O&KlFg}^; z3r2smw1@`OK6?UgA2qtLm6Hb#;3P7-Y0^$wnL1{a%ZFYjE^hwdWlMEdJQrcJLgLf!vd!1Dt; z{S*eBVJv_~V(sTH22Iq-Ob5{uX6hYL(N`~6x0aO(cEoJjEnzDYnb^m3yckOXR!Nf! zpBb18ChS&bGmq~KS0gkM=BpRy-`M0gw?eP!fzuhcw{fN*L2ZP)RJoB0M+Q!Ht;j6u z6v|+TW`*l_V8Jg$3$w`i7{HRr>sbmvfoR@jMgA^1hkoYrry8H-lkT#8+M%a1v-V!j zFm=q}?v78C%}(Xjbh!*7NSbs2V~cwJx5wV1e)%e$TPxjo5b%PcZl+L0?OgHc9mzKn z?)R&_zVH1Xti5$Wl<)U8IG~7vl%(WGQ0bPCR8de7kZy+>5RmR1P>>EKB}70#x*KMY zlopZh?i^}}nZ1Y4_xs!3cX$8Vcm80WV4mmhbFOpFeXi@aF0U2e=t_r;cxf8ayjH{z z{~YgUVLcP|03L)1^=LQ=0ea-O)t=)yy9^CD+)X>tsnBZxQPgBW2DaEtNKq|9ow~7p zVIte0do20M6dq$lzBfuSUTA+;yXdX)x^R$mo&qDtZ$JYpIoXIgIIZsebUKJE36V?c zOY_ehW5KhIx-wOV2X=G9ZyYBz-`-! zq8yf6TcFFmQzQuX)(3q>cPL?0)YQ5A{zzOU2hqZ>#E78luk$fa8Oksx&-PAbKbN(w z3n@nJz0=N*UC*aKj2f$$!d>VLT!*IW;ZA)rvtSxjUre;6|Xp-G^k~x%)Vl zLw(}&*8R1{yIX3Ry=&(Y&TTT1M$U2M?JlgO+LH+YTj#DG+NBkY_^mCk($(SB+<2hE zFW(;d1bkJwvrO3*^Nabi2;P(Za<=YNz*0Z`W}N@z@MvPrsUWT3Y-UAAmWINz;rbsv z@>>ZCPnF{veN=K3b-Ir*DA|EwQ=)5JW_Ik5aP@Gf@6c_Pz9e7z;Brjeeom-jdy( zu)9C>`o%`4zoBJ{l0h8 z^tAFu*y&{&x}Z3W^YHxS^BA$Xdcoc^AvRlLJ3DLDU04W>IZE?xOMGt=C?M$V zgDq~1&b&B0QxJl<@5fDFN75~*9ro8qM)+X)7x*739S8Cm7q(sTus*D=@>Lq&5!Lj( zE^*Rt9G&U2r_p|NL$ajKuugFZ-ki(f>bNBUiH1SnhPa2m82J&IE!z;5z_WD9Xn|AO zC!)h}CTrk~1{Q2J4e3;SBcoq$zd2sGt-!RC5*Kh%VeuUtcTsyR2PfpGJjNK7CJFT} zm&UbxIlNb8^jAx)Mxv%{NA6vrg9rwMEYee4DPZyI?v?Vxic!Eq-MDtnrV&&00{c*2%3k zSBj&M#cr|opR*p?}GWbgz3JUPnCXht^AV2;cy4+E-d?dBG@_QqV{7Jvxw%nymHBrLCUAF&9#7+eP68})A_;kKknAwzhD24Z#K6P zJ7haED826Vd)~LIYH|vg=-zCw@oZaIcTW}i)IMZv+U^gf#65oFIO@R^?%>#>?S_Glm@XrGAOIePLz3Wy6VK6S327aQZXD~i0Qlsu>J4mYTB^Sb&I;n-K{o9IZ{qF z_(g2$Q1kHYn)MgoE&wpez9Qmvi9Jg#K2YP(A#gSFS&hJ7SiPt$iIe(4tN&TAxp8ap zabsfTw-qsuA0~&@mk(b8rl=>tql-E`6q$M=CpU(3{N}=KZEY(*Y=P>bhccs%am3z~VT#1r9cI%4|dbVp~5gfl_6DjV2KKZ!CZe z;aCV;cWpJV3{)|S^ERZg5|$5l6byfO$GtGhXzhd3E3x83iXMUG0Mt1HKeDZH!qgx8>_zmPI82T zK=z8(v$M?D(ej_~R9Xnr^+j7NUdh7PPnWTwyoHW6(kq}p3+yn(S}ZGLRrjj!XTE+U zdy@O;`vYXBobHqurv0EsA{(Ztruh2&$dE%1BRFzOi}Xntx`dsDP1?s1$f+vK{7=`{ zucIx$xTjfM2R236vW-@j283cvVz$4x_nD<7=MYpLC`#llT2B|v28H%y`pH*;R1vl- z=gPwW@k?tKP^&-eV#ZGLZt#CBERs$Wx%Bt?gO*72NY;EfQKd*AfFd^o>9P^w3cKVA zaqdA<4-=!V)#+acK15t?TDBz9!Q^`Y%s__9%t3TruDmazFCKDcz1e+ZccsP}H9Gd0qO_K6yi(qVsOF_~bj(%GWoSX#Mw-odk?YQ?`umDdj;_G7eG zx5(aicXxkEOS9ACW2Qq%>{2OEyR$5I|MY(FYl^fv7jsnWbkQppjSfygUwTC~=b82w zjb!LoZSV9*UHuZ}{)InmoSNs%iAJH(JwVFtp;-1^{Y=$XpOCry?#_jF0(OTpOfh8H z(NZ0BjdSRLCnSRx{3Hw@8*GtDRPg7kj~@*U zZ~$3RDnkEkGOcicLwmjq@0Dc{)k$4cWWcSF*4!*mu9F$-sO0UL`Z@8LBLF3=Wp`Q{ z8I~Pv6!>s08XBy9wsa@X4i9D>WN}$swJacN?Q&%YJ{k0rsV0Umc z@57h0A5)YvRzrD#&yfl{JRDaW8qpZea+lLD!&eCi9*0L?UjbH6WUm<>n8c^+D}`wB zPyFzoY_R_8wzPMwE)L|HL{3-3fl*2KLVM@xH!m?p;i;#G(9|GssrIkzW~y{3bY&?V z%!7aux1%3ZBxAhvf5YyHASo++*L6CaDes9CM?FiqpZ+{*R}<$#q~gWu;EwAVq)I-L zFaSc7hVi#SH3h&=4{6%EfNtcZ;o;nzAS14j{v5HuweMhS8i>bZLOej)u`8!=j83Q& z{dh2SB%~wKaORQ37no{eP%R$Bj%Ynoblq2B zzNwzsQeD=cz()2CSV~+sxLg{O#3vEzm9T8}TOJk1?FrXeT(7RJr8!y4DeGca!@|u2 zf3-artEzqbnqO4CS>ze;0BV70{Si7Sv0G%rc!T%_=TkKAx7D(}ae-!%D@N5t*FN}z zOk57RaM`q)E;eZOJ;HNhi2e6f_69<M@v7El2a2t>9sYZvwqlB0arD_QoZ|vIO($<@k4Z@My z_Ss^Vt^sfc3?5Gxc!@;UAG)ofSoyPW-KesCeeY!X*4T%qeUFoZ9Q>0c+e zR9W64op*FzIe_@FG`nQ)czEsSN9`HYK1<3gWk;UUo#`E`*E0nCTA#URJ!iW67$l6D zwyYSdIAZ7Tl(bUnAGwujnlz;Oy6$6=ZVQ7&tQutNNGc98$ zcoSQs{Fe^V)ez#boP6`KLg4aT-2YpB7Hid&*~|DlhWGT?x85bL?v2vyt`8>?F z9i%yl&y7&E)CEycpAMfwCsD%+alC`O8@3HxvVQ)DqLD$vNQRgaeDjssOsqv z0f#p~zeH)vltv-4y4o!(itXEJeRXmcgu9l{Qo8z_oRrM1B|2yy|E%Lk?4}3NfxHYK zWz+TCE-814e$$)K*1=%HiKf&m4iB*tDismyD%TwdK{f%9`K_nFKk6fcG!@W4R4=5H z^$x{kNBQ{qi=7`SpMd?a1){khvQAY}CE~gl$<%X{vtEebRkON9>WKxmA8b-)DK1n{ z^!CmDwDGl@Q0T%9dEiRThMAlQLFE?@`{5Y%;lt~9S_fay0ip&iq_5A|5pvWQghypX!#M5t-p&kKremy!pJT~oYA22lUWoJgPA3q!&fKw_ zl2EbhXzM>Kt3TWNWP^pCH}G$uPE3tp1g;}nN53;qo-7|pPqkwRM}OI4~>7uqg)n7 z$`t2KkpzXX`Abdg2Ar}VcznDkx+K{vO%|fGaVNcB*j63x5bAO1=|vp?u~hR)Zs*d| z``&DZ4-ll{JiS?`BjiIfztp3!eVeP@bq!+q25U5=@z$wlv#S1~U2hS?aU;Vqh?aHe071t*=ewh>U|cDk#N ze>m@wOgK;$-#81nOmEQr~@zjBov z#5l)2zzcd_bc5p-CFO0113qa&9u~w&jiOO2cz!PmQ+Xp9v4+ku$8Zz`rPy>gAs5S! z7ZVWV7~a8W;d%hG`8ag${7OX%Gc$_yTl4t))#bC|#XSN6h2k8?rH$geNP1~ezNdvn ze@9Ihp6o8vkHvkB5jO4_xZ+-0j8sz_QqA=A>G&}eN1s39cGGrS7rOTFp*jQj_2;uw z?t7X{BAzH_cx9cMsonHKR5jn^kAswy8>W$OR9ZGp^YtpN(g7VG2%O#y|ES~HLxI6y zvPoj&;(k&q$UX&~^{cnH@F2x@vS!ZShEdutVZjf|JCC3jZa+cnJl`EmTJB9=00FCD zf|~&N-l4u%=lni?8UM4m`QEYcXB7P`?Qv zY!k|J<6lAeYoQDWbB(^_+y2f@@Ebh6P(R%en$2&+T>!XbjJRd^-=hy@^<~$3*T11GlJlfN z{tf7ItEzyL!WlCBJ@REVgX6Dlr(6H4zjd{cxSeb(ejK5L&CFca@al<^NA`qd8ZArM z@qIGDa%+bpWtEb2!1}HU_mbrftcjSNH5wG+=jR`Mn}9yn+yT~$rcXz06l{wBaU4_P zM)?N+W##_oM{}tx_9qtAEEgn^6)c}bI@b{r6jjZa?&FG#9oK7+n4_C+HJE>W*~Kyf zGjnM^JJk>Ezh5xKFaxLbx%PQiAx8AS>5>A-(Z6|u|FbJNgZ%&E5dQyvsD0CDSf+G* zon5!v^2HOCuq_>ZJ}>9}2?a$xGkeIkSBZALIp9b~WkZdA6Rme^CnD(cnCO z|3dIT82RP3NB@un z6%8ZfyE+dquk!tUNATdULKWjbU5`WRbv?UYZ`%Zcrm-eGP4*?#D!>enugf@8yYuu# z)DJ;_ZyYLLe5)kC1_?TX2mUbp8M;ZH6*6bKoj`ySs9fu3g8eH!=SMpHLMv7IrPL>( zr@l8isDk6}e=KB&uGw6M8{^mazv%Jk#onv$@tEOQl3-Y&OkcT;;yVJw-iF10eAC>R&JLyS)-x%& zSvR>;VU%dT8kb)v_?Ot7sJYzKv|89jxdN%lR{V-wL6$0$MTS>oTnR-K6|y_?RST|C8)L(XwkzFq_XL;XIGi3kohVoS5dzjXTcTmo;p zc6Wj(;C&Z{=+t(q?0sAM5newyy1`G2=Qj}u{My!_u@Yz#}(ey?q{`qmA2f&CR6QWXhdV`A`q7cjzH{}JdT z0PKF*R%nBV+i8)+Vt24x6bbv3+|hsvYt4tAn!2rl?LHnP!6*Gb^PyXtb(6+YwFL)$ zySKKbZd2k8&qtx!SD;K>8{Sam1CC2i5nhb^ADAkNLwlELmjLf{~0f` z(^!+?pI?ix6C1|t6^ts}Q|{Dg`N+axeCpI*oOV84_Q&Uq^3E#=1W=ynu^p*yme+r( z#~9%2jC}3iA1yEkBZo?_Pr|y+5FCsgfz_jR*sj>#Mow8D+4%n64e6onYhs#mA8)0b z{_DQJH2sEsO%8J_=6^6nBQ2I-?IoDW`pFl?U1al%^I};$_%?N}tJq{HH-R(=e$E`{ z?QbFburVKE*oNx`l})a8aGEi-FJ)^Jn!{Wd>e7S!!#bIH_*Ft5{8RJ*JFMpoPvRjdi6UkJ2VZf3(Y)Qa97cf)Xe!??xhRGiYXqj~w}Qp1t;*oa!i&T; z47S{DXHQ9E4cjEkMnF97NQg%qYR&zR+f(CoCIXlPb?HAeS9A5om-6s^Rio9o%fjB* zO`fZL;tg#o`@yk&irV0P_Sc1gg1n?KBQR@{-zJ@kBV~rg_{n&-&7TzEFE3HS^gsv;#~ANlzl3(g0NQF$SAJ2Tm1#^3w2S*GDCaU(`} zea#CkXFIA#SUX(swO6YSWxlha!OY!TERj+6)Q0t6->q`B%P_L|ZzMnEN+#LkR}wiW z`^lNwIPCN7@?(Qx{ikJ#t z;h=A{EJJp_P5ogsJlA+@H=ei09!2fYaA{{G-O zh6rrcg2m_7k-i(Bj~b|TvUoR9rPO%@t9Otm&7Lxi(y?A-gIwvB&W;wmv+zY|#5)eo zGtt$7Es(Mqfhw^7U-q$`k9C{;O?;5-@Tn1B2;XwSzvn)vatuOrip!@D|+IDFx z)lshxgXvx@{paW0p$=M9rkKPpiP3vE`$A1XGh9P;^f(u)8=ILx85>KWomHCRp2o-n z>!xjw9l7HD^)1xqVryVnjl0^Eh@ z8E9#W{Oa=V+!T+U2!)NgS91eg@Vxy)#i=-ugr2%o?+zBq4zVDLdV_hmezlK^xvg2& z&F$hK4s>Ki=tkPfHPDhZj-!%A6Nf6^AE3}J>eb)R(*wBa)B8U*bEOSh$lbYB1UmJP zX=PDN(AB}`(!kF13ial)IiA+dR3?;vBzGp|=c=eB2oeTp} zDahYCB9_Y+ZKW{2^1(;4O^;Ij4V=0BTF+HT5B)Axb^}IgIqJ*p*&o5rMKWi{&vw*a zovrQ*nLZ>arYPQS%VP(r4H%?&V>%NF1i85t!JwF^bA~ia$oluwOtP%L{=S~%K&2m( zT(iv(&+FQEVi@zJN3@t;>q|hUNb=lXNZ_K<2VL6g#De@@&`TzRCFO^gy&5}$d7)!qC$p%X z@3u};v$CGJ;h}J368Azp{1ad1D%YgGn)$J{kmZXVC`NiGjpu0T#6jibDWiuza&tT0T7hZS{yRt~IW81><3 znkGZF30p%iQqR8^Hz$mu)*8M3DmB5a;KbA(*JGVH9uKrpCVE@kdV^WKSApQY*<=sN zFFl^g!d>&D6c4(!W$gMrvnD9VV))RXd;H^enpZL#in=awyyKd0@JkbUc8za0gOPk{62*QbXKAU1aJ zMi-oqi7ki+Y***MG2jXB&sZ9dkxjC^I8}(K?!*uOMc9}`cB~U{XeA>B8F>AVco?so z$+u>Zk@@z>j4w;*XE;V?%Urwk@YqtUKE9rRBXL*rkqO&jl|{v~9J7_h_Y=bW{qED8 z1G;`N^Qve4eTbzQ(VTxg)eH=Jq8Q|KzU|NCqj!nKgjldxIR+HVIDQ!eAK%oR{I6?eeS?j$6+223S{du&VX4y;L^lApcmh-GIsTYJoR}ITiHF7XofX_NWA znq^&Ut6%aOJy7wd)AwlF$h1x{ZBFQS$mj>D6aj=IXYS63b9 zGkm78u#R!NKVBwgCZXE>OkWZ+-m!lCDJ=7Itoce&T6?cgEz#CTKKWPY`1dBX?%emq z8z(X3vGLOCguiOm7T0%gIvlJaiNbar4r*6%G;vh$O59FAKqG96K?iV6YE-E_ed>RR z8L7mBaE2Ib%4E+Tbo0Yh1og4ashUMOvuZNPu_)y{$40SOYNO++*Z|lEjLI6je~xmh zTCInofc(s+{L%AoIR;+!uRbD0dJ|5i>|owf%_67f?5SrmA>mO9yVw~O&MVoWr+P7u zg67Ik^(b@M{QWUlGAh%9UfUkJ8xMp>@@2{7V)!acPEi8I%-ts8h_Q&gPfd@|?|xp; zzpjee0xmHgv9Ah0+te|p@lfWt0!s|wjIOlUv?l;G=Q#RUZAmb?Hk%s#*7i=$s>b+_ zbzs!Sy-6Y{D{Q0B8zl{GgIo?o_?EBRHtED7w%*C@ZF_07Wg7tkh2MdV zu%q1jwYRGnxyOeDYq{%8N5z-aU?Y$V;z|vd-}S zY0@#k-+~*T%fc(&n=yHliJhx&kCP9+3Rt&xE3;X#ViBZszb~X~ZZ)(E-{`4C6>6Q^k)bvj51{}O|+QA1%}GBUDQhLs!!uNbT{jQMZd7%0KT+* z!DjOX4nMYBOf|gHYiz)U6`20vY3pxe6QOwBEa3Psrbn*DqBMp9hMZu;R+m~;> zQOp9j>OPm1`34U>Kl3yQe*fhUet7WZhi`!=_>!;b>HYsO}ZitK}s%lXGY6ox0WO2jZauU(Wu_b6K;*aLPFk%yZ2)ttHvDsCNvlr%JHN7>+oA zERU;ofH$$Oez@Ao<%+W*EvB7?a?r5LRYUMdQqn67I$;m*Ifu5NchA^emV9Zn@w#wm z@%j8C1rxHmqAf`V`W)C z3NnwYcapyx1?lSQ0J=II2f&+fMYsyKWqj0Nnz7?kq@J9Y`zg=1`6^pTH({(A`aUZCfnPkrk>0SlQr;~cne++ zNHI2tLdfpjv7Xk`VR7oM<@UwMN_C7~4??xG^m+x-XXcegJUs5Q z0c_X)jwYVD_qt)-mZljDrn^p70(N$aQ-J1xG+7XDS34IVg2A}Gh3js43$IuG3*xSu zbo64jo1Tnf+bkSDbDFtjkZ!iy$EmBc3t>nTb88Na^j5n zlQWAKDUTSz4qhL`Kzc6V5s(M?zWx)YBAZEYGeU7Xf<$Z{!5J2ro;SepImcVUccDE3 zVicm%jEfamA1RJ{{~jOG}-G}!NKB?d-udkDzBa%0tnoRVFc3S`c)m)`!J{$T^5+olb&$<`c= zTlc>0%Cs(S9In_cLnktCj2t{yZ?D=bui+Z8Jq~4OV@AX7VQ^4~GIOOn$ zZwO030r#Ra??kN=JH(|e!K-wI@8QFTMsUin<3&)U3}{<^*jb#5N#SQK*i&kXT2?Wv z?w5t;e@EH8dj49&Iip!3e`zLdu)oU`lbVPvGh0p@{Oy&Vw>Hx){C~GAtQfT9p+Cci zN(HdXsHzfGT?jSxHn2>r*T9L0{`n^@fFXwoDExrG9G3xScRAUPYvX2ZHEmwOXLu&6 z(QW6A^X4eU6++V1CjTpj<<+@wM|`xzxnqXVM*(OH3~VKhAW`Yi*D7p7K0OG{E|j)+ z|E9R?4FV%Q_MVF*vL+9rNC%?V{}iE#4sO2n55Dso?Y84h#wZ>QevBu8HU9*L1#w9+ zbp6dm49^qS0$mE-g@#nst#X26>pb)6GYLF#b@zk)epPn+>|G8TOl|!}4p({#yy@)r zp+;Xr$GMlnvw}<(^zTdbDmhkPOcg}7OdxTym`NrvsPXJ&oXw0oWh9`o0u11sX#w@L zP#YrG*fsYrLuf1YS@eUa+?MJkavmxEU2t@tn2{}}GXza$BZLA=M3vW+yR#Cy=Kcg( za1keqq{UBSHACUZc#o6^Z)|K6;nv2Oe40&kPLop_f#RXa9r-;?_8E{nd)2-cm6g%h zRRb?h)MOI3QBE;mL6-GZhaUa#1Tr!v4qj~Wc(TsfuXutqu~3ol>Jrae@LUsXN6L3f zwrb|+vbHNF@Ae=tCWqx2`b7B7RclPAUQf;a*2WVn2WosRZ@i}3_+cdJra^aPcAKRZ zW(-|*AI!1NU$P2K4MxC?KB*vE$A_4$D|V#1`xix~V{wag8R^NjkDMKW&smbH&6%*u{{fc6TL)h`F+eFy~P*st&) z+i0G%KWW@zlEn8KH%99e@R19~_aj^8{E9Z7jJR+zIe^zj;9k2Z`^v-lZtqce)oN@* zhleZ*Z)9IN1mr0)yF|QDg1e$>QE2wE`^SKe)M!1KbSu{BYC$_wb|5jW6>eEjr{y!t z>7JiNrA0?W3`YWygT@SK=&y5qW&nt-l5mahytAtda4%--%sl(6?O#q0GJvpMrjdWw zTz9I?{AlJV&X`0U`K7=V7U&~5 zdJpR#iD!hl(#9p|$q+O$;x`t-WLgv{h_8mA1naf1@C29TNMy&KNI~r&^zm0F)BCKf z8NX)_MT`XZh&4J`l>iE~9Pw+VZsWa?yw^JVDTMQlG~CRDsM%afP^;}Jqu>qb+`Bov z5tRi|DGc|B3iXqRSU)Ed66k)h6)WlTjAR)~mfOYe`O7yeLryWDM~t=BA-U+ZIEhEE z;HNKBxM+r^vt@m<4vs>CgP-#it33YRbheaGmXipRmB{Tnq%ugv@sYBgnc|sW!A-%J zQ1?TTZ|~S8&CyG$H%vX&h>H>N)SpE97Rg_f0y9%F-q6a7J9DQC$S+LKUtZp+GR+BI z0Q=UmJ9dy$+`7oVv-tcU3JTrN+U5WF0<_iZp{HpvwD)|ko8RlZ%hPh!vUUK%Fb+*~ zL>tU&t~E~>aI3HMpDkarJBsos*gQ_iLLQBVv$x|nk%(3Bs=MFrS05-U2Vsy<^E>P3 z`un_CE;{&NJ7?rJT3gpWa32UNK)U_LX6Fy;ea6DhnG8 zj*e4#M=41`5qM3h-7PM$vMDqD?_t z3S!$l-^jwduv81R2T|5k+Gy3x@R6cxkQ6SDel56#JYKw1)n@SBFhN${;f}Lb+r<3pBq&!R%Q|z=ul^^6T!u|5ote7&_`PTLEKt6J$ed z<}dKnWAg;DN57CvCU-Y3af6xan080Vj_W&x(Fiv}396_9=Cmo@ixWL*8PJOtcFDCM1)EB!9QJ1t4wln0ic7RWGnC$@IUXhH zX3|+Xat%Cja$&+_#^Op8+wL3ACUqpWoyt zzGwppEF72oemJ)UBZCuNCj~id$M?!Xx#oq`vOfXw9*qv!;h`xj?zTOFD=#Ew#c&(6- z5YJh)_U%mfSc>`{o7xyPzuR^abwvvRGW>QiY;ARRE3_M0zXrh4xsQ5i$QmC^GLP;o z6+n$*n;KcyogN(zB>#mO<_ml|4T!3H>${k(zv~z5Y6MLDS0jzU`9SSoudn-R@T+Q0U$L8isYxKV$rv@~=-BSt*k_(&r zcR?|>YfR~mcCcAJWq^b<6Aa||O>Y70z5q5o0-e(pPA9`S(Gf)pNY$$}FeG06Qvu16 zDeA)yMdkfVeCji33L?4frs@S-q1{B%!}8tR9PvA-)RdkA8__)*Km;*z8Z z)8C$fhhA8Ba7-k7smD=W5Un1?=StidUJu-lU@%P*LDYKtt4kbiTP1(70zpFpG@XLIL%Bj zg=z4hmUP`xf!KQwAL@34f&pH(_=n5a%HjC8vl`* z85>-b;ZOKrRCu2vTDhk^f}zyBmtN5u%7{PbLe44v? z0$5m}9;UE~LkgdXko?3NaV||G!q;>kAOzRVQUCuh{X0foUA?Um@7%HZUtOI7K*0)8 zoAGbJF(Gb0`>09M_vk4r!zLz1 z3ldTikFGrjYh4wX<}*IGL0firA=$N<@bJEQ-@2yq#O7)Mc$p3gYxbVcw(ep-fEje` z@##T3*mFVDT25C*{+TRf2iq2uv%Q_MId!Tb- z;8%-8Z%@_J0=++Ak8=@FZ^SYM?~f?x#C3_y1O!~|y@;_}h_M$2^@a~6;`qv!WpRp| z*VV<8d22tZ8p8bu{73M8a6}>f5Vy1ycAXRiM&(R`}P11+WPOPMF5AV(np# zi^nQ7ek?AAJh{*r^psgnnIDbzi?D%jW!Jf}OZ{5B2&=9Q{DLyEnMVzKA0;v=hXIUR zTv|$3PL=2abw#>dE^uUqpv^4}SJ)G!X^gWtfAuz>Luo=m^i+IH`WHby%l79wC18a~ zh_T=89r2u$)UU0r70CXfH9&*1lLjg^Sf~1H92R&E8x^+kMTp;U7-KrSq^P0W&th06 zc*`SsCWVG$ao$C{u?s8UOi1fo;biC*Y+kZ#-7KZ=5?~TLxxU`{hb+S-oA^Z zXfSMW@++0}3%Z&NsQ-f4r%$QgmJ!oro(P?d^Q&Y+mn>ih31G1|vk3#b!;|p6)Tcis zc*Qk=NHM~R$#C^M#l9Pcxq;vMp{=igrPA!jwqyuL4R{g)wN5X9(+OEKUYF(Vuo#SF zcDAaM1N{+vUNuwvdyh4y1j2UtUqUyC|My)AIl$)utK?mFcH*&#dza5IlZ^EH#QQy` zx6D~J?W?HbtJL%FuPJi6Y`U|#zFH9Dd5f~oLHJzhxU?BHyWzcp+W8a8N z+0?_ufnGOK59f%91rgkL`MhXc^&L61DcgrL*|egKYA;V*)t&6vL9L%Fc@_19z28&e z2-}<2m$|lZzc8I%h>hk_(dlk)I@b=D(>#l-Y{3aQS=0_<8Zg?U8D7iFe|)a2>`G7y zxC;EVRzarYm-&k-)4J2w9wkc#Nu8on<(QcW|2g`z&&)L;GXA;|j&Wa|9^K%JxP{?y zs@FPSY%$y#Hy#|XwiXkc`)O>_J2PS>v>@`vn^HlR$G3YTY(Gt4t;VNuZt*eOrjK`R=#sOGmIW^#Tzp z8-uqVYt6rFA>@Ged9U0;kqM7k)~hNwJUq7cg}RQ`@e`u# zUi{gIX5#b2hVg@4Kyi?jwIGHmg`XN#xnOXPaSkU5e4K(`@RCtbXfMp}-3(Jcr@8P@Re}+g&pNsmJQJ8f!{^3Jn342 z|1}M=PJyQp3(!EjDc3>lIf&4$SC#{$We>qwe#I^>Azq%6Vh-1E-W&TKcR_)1v23P@ z;2Qds{)7x;)Y#iUHKiTI<`=LY-^CaIK)v(B9=FBT#`j_&%gBc4E-YIQ+~ZChb}Y9C z{xCfb%Z&Sq#jco(6*ypg_?ilUvl&xV0N$GEu+R=>-BUn^rdn-lNJT@F0j|6ZyDRBU z81PuLV5o8ShwtP4ii-<{TMo}0DDUwjKHiUD$R91((huG|g&!{g>^_hY6xT}rfkMLD}2410<3Dr=2zKH#^ zN~=jlk9La$m(!!+rU%_DkG1{2{InTviGY|qBsS4?4IQFw&jI|&;l8<;uc03N$c(YI z2LTxw>i(pULx|8UP3K;>gwXH+^zmJ@eYoX87*J)L_jedCOfcOSs8OZwzWMu~xQT>L<6b-UJ(8%v%=|`k8cb@-GjbeH?Boa98Hdx+_d@{_LRK zr~ZZ7U$C$HWGOyre&$V9RQcU_)F#|JiZb~~(N2!KzU_?- z9;i+o|Del->q0i)gPlZ*Ft3&TGS?mnn(ZxjiK+J0fX?QBg(g(yj3q*_mJgh^MOP^04XjyKC^8#LYh2`Fs!e= zK}JexjX`L|+~x;;c?C#Tl9%o0^&FkDvzwDutMpO0VxyRC_2*8MeVn4+4u~-0D)9#H z8hn6E*x!;(OX1lM-5@C-X3cYU>#P8Y_+NRna8@z9SOpUX<1q~wC78PP3 zkZvtF2d^m5RZ(_tCo*J?V7!#74ljyqcDnWMk5~QRug@hKE;8f>+fQ(e@(up|tULE1 zvUtBd=s;FeoqE?oI?;EDGiQuUOcCHFKHP^6Bu8wqNb~vlxiyf(#}@KunfEWm;^*L2 zdwh+{stySRVR)P*u${j=JzTxqF5-x?APnvuifyqBm{0scV$r(4#MnKyYjeoBJ?xQ0fn?b142 z0K=dhAe8-c6fsW>X_rAYxNiI|9Y++v@F9~s`4#-uU-D0cwi(*A(R7;8saPxG5}=NR zfu)_^Mk@OK`IF7JrdU3un*y{DRyH<4-=lZAXT9h8w@}cC*T3Ki!WJc#yGDY!70%n= z|EMj`C}E2XMXycK_>cZK7C_>fCg^HG=fV1u`wO>kP95-p)3{1lg|Tz% zogh|IJr%ppCT$*Ze)S2AAnj)(9VayL$E>2)P}>`IAr#aG&-GG=sRKI94Tv~nB!7WD z)BCY-Q_O~)M=;PjqFklIcX#c4VG^z495x$Wdjg{+xb2x}ILMOe~sYn^60=SC{ zKB#v@X1W5?8_Oc;J0Ds@N#BoP;29aFx!=v|ZK{*mdn;g%SLb?ulduZG-PoH-fgBk= z3{g16q;VB62%n|;eSI&wGgp z^9hx0NN9e~iuIyJuc`e5B7ENzw66qya=dDs? zp`l}YBm>_aOrvOf&ce{h|D(3IfQqVX|Aq$;P*6fZIs}zYMH)l|q;I6VOFE?oL8L)I zN=iXMx;qAe0Vxp>hED13oSApeec#Ws*1P`S`quZZ^}VxT&75=gK4+gD*Zy5SP<2sm zl6}F;I&oy;fB6IikdGpySyWUUl3-c0{E*<(N%nxhwxErOev|IE zy}OJbS5!vmmPVbK-XE@-#xDVBCj#8p9EJ~eoA8CYzDdCqlWEOgv$!H8bkDUKeiONV zJ|Y%A8~lML#NTyYG0_UV7f8VaUeU7ox?m5j;EQ_OCx*19#3{m1St5GTKV$BrfRJ>u zO78f=Tw&#k7pH)*9CP#lrC@>pSXaBzZt znO)?{;TcXf(Pd@ttjmfuFsV3LRokPZ1VOd{P@s?#VPY1}2NJ>Ew3L;Zq zw=5ZViT}DIRo*}ehr`1oBcFSC)XY0x*RkV+V<1KgvTyFT5W^%h+b8#Pb>$D7{xiRE z!Ewk~gF6BE-TS&WGLKcu`Q>2Waz6Y(=MD1~v87_BrbpUvxzbZ7e>9R8hdLz*s2@!L zx%ZM$cI>LrkBxxw4x8(9_uS#HP4ap_J)UjTtnq7VJezWz?<1cWnh|~6aQ^U0yl!{B z!2C$jVRo1pW|`g7BPGG0$=D83b16?(nBg>eY+ysmf^&c*cLE$1T4=h}CPPCD%Pk?tE<4Ubc&zm)50QPa#;iRHV-~A<6|)$e;Wut7H4Bb42Zv~=3A7&v0@5Z!Zngz{ zWdAP;-n~E{cHsIi(;*|R4p#IkR;a{23i|=o7sW9l2G+rV2@?WVCGw1&|6S)5?r4lMWp_Zn!6gnED9J&NlRE1aT zzeHwQoXPq2nIlknJoM$3=mA?93b7tl3~Ju|ZF|FEr|7|OkrnstC>T+x{y2w*!;dO2 zt%P4!?=5t%J;4{J9j5$l%<)Hf&Tta9i~InNt%p^V0Q~*H(ya`n)5NFjp z=}zBKzWF{w0@3KyyZ@QuTZ`fm&wQ0~y^Aar6MnGY)t zOTQF^XGYBSi6^f_ej__KI=k1vy!md+TD%TWlgL>UU`tcz1}ipjmN&WHal(RttY;K^ z{?j)x-@y7Pd3xygZ_Pyp78en(F>91v&AH{A$BLuT{8719o%*aVbVpLOy%yQb%1G8d zIO;n&Gwtp?$}tem>y%`?;#F+GTa5(u&1ME{rJN#pw95?HG5<^X-)4tC@v*ekoVaQ^ z)i<38OrL#(Chcq$FB$genB;j$*>^;r&yCb;HO_91_dCpMptS0wWQV-y=h=PhYP|e8 z+W&=!5Qrc8oU1L8F{Tyje-A?sIKoqWyj0? z3xkPfW9@>WSjSrlYUewH2;hH9X#0HcZiu z3f=-gmB`KI=q#EZH7>~<=A}MVG+<<)w;dCTXNIP##zi`?X zgJi%z_@QEg*@RB%AMU6PSIY|UtikL@-lXQ(D6x0>e|pEl%33gjfw#qOt+&BIxp+Ro z3>6;as%nlz-8Igxo`}Af`b?|4f_LkVD*(Npu8;=(aN)ftACVSy4*Ikg@;_Pn9Q6Q9 zvz@G|D|%!E6c{T~Ab*M90h|)P@I3^6d9ua1y$o`7u{}|ddHy^&0lAkcq5Q--@D7dO z>pxuYs={u4ZtYny=_xr8d+#JtEqk;&Xfz#gw5xG0>FXN0lb@d-d3<~vlyRt|H$CfS z9TkQiBLqsrE}#q@=C-Ljm%P+7$WERp>+PA^oxxh_rezJUAdBMIRsw^?475!Lm$N@0vB*84#r!ST!kg1<8I_m3_U~k( zrgNeiw3>dU#zoR zBX-=TS&S~?8k*vYZzfVqv&q}+;7b^^l_u;+bK6}lu-tgh4Lel zXj8hq5v6||AOP#1$YbI++@^&h%h8{2%$K_Kqkr^ot%;exp0SRxk$%$O7I0N$m<|1t zQA`DZY$WfF7NwsGHEz(=@?oy|_uvcIc6L;o%y5CkeruSgJzloV3$){pDb8Ajly91M z@L?iBN7-~QcEoVYHau~6x917e3!6E)&{y+F=e_PUF_-=HD7MQQYUWF5sQTl*=Ls3o zmMh&>f<1n`XvRp%o#=2BzKcq^%&S<1Z~a~^(bn9+5%~JpKEnP&1re637nS~D$D5k! zL3wL4s|n9(;AQQNG&TC+pl++I#PoF93ZdacN3p0_@pNt}bhdU1_h9l~^5{=(&oCM`~ zWg#ePagJvN^a~ADRf&$BC@lDhGCrU^k~fLiF&W9(fjo^!?nvj5M_yn%xYAl7gk@XP5&0 z(_)8stEa%Wg5EulaG5T?U_i{CzLwl&n3vI;CYCrR5hZqd+pJyR6MSdL+@z`9fD_u$ z=J6JnHVbZ4JiUA>FShU{j3HrU4xIcMVqp5K=+z9$7XSJU8bvUq0F>YeW53dmr>~c$ z?8`$7Mw!sfP$?&94Gvx@hwR#S?h0NBZxpw4%Yj^Wa=+JkyINU1+p@KIGPhiIbc_i) z2=o7*|Ba3=G++p(?Wdow2&gPWd9yv0dp+kaRe&4Qa}8#&Z^*-d8JOL3lYvxz93ho; z45H&E0qF^ATltL=gKpa#tSHQo8)>rP4gPLD)VR}Q*h227GgLXP?&0wydX(v^Z4Cdh z^}w_F`b&sQ7K%*_tw7mh+J6t!i{PiBWbjmjkvHKgV%Jp+O^*A-P^h*bx`im=D}2c01mu;0H-J+CR|@cf5S z%lh<3Yj5+{7nxW2x$_zd1+c0Wuf(h>VcVm3m;p54n$s3(W0_xe8D~D0}=0_!G%`q=$B?yFThTdc$DFY-DuZ86n+hSuyy!?8QCptoWu-rr2wDIS2q z3JfnPJhv_?C;aB+pikAi0lG8?z%W&!9CDJP#-(9k-008D=W3p|)@(vX&X#4~Fe0;! zi;J5oyehgTdC5m{Qf|DhP5fg8$7#cx0iQW58Egtj4HF5jy z2rOvQ(^ku)OXIcvf?z-gRCMfr|5^L+O za~e(&N~GYw-^ zj!?8-@b8xNPaLLOdwjZBn?OA>Et0K%3eB?zWq4=zyHwAb(wZ?9W_zOS04GYsWE%uj14BNms{zy z>>_+ksC#xRof%IWB>zfu_9hDd+3(UK7|(gj-D^(31ENj4TMl_F@VG zE*Nu|ucm`G5)$x^q=&Sj&O{8L)b1D8w78)q*9CypS-IzgN0MUp}x7Qjr75*H7tD;V;?!6o%^cVQ7`c!epAz$=* zY5hfNzw}Fb>C3cJw@m$P^tVTMj>td&j-m0Wk_j$s=Oe;$-IH|Hk z*>UB!ol8z_v5(Z3D*8#_YMA&lra@_F*Z=xcw3{cpc%oZwa=*So1EV?0Y1%5)G>$tt z8gq*hOWGzc<}GTT>zm)IEMiXf)T}ZBPAlivO7=PrBU)N1f8~2}Q%PA--pdl5c3&N+ zlsy0pQ)_%yl`frFGh;t3aC1^ThG2Wt@$xoL#~o8XY>ho`0_3Y&lgKK8MZFT z{whx1^YLb3R)U065|8FR1HAGhtcmb*f^E0b1X+GjB%<-G!j<>u2xR6Vyoq@y?U4bR>vo^E2Wkw^eS>l1pN zH%u`bZ~g}?(h(=n5NG_VPV^kz4|gb}_LoD#@siAsk$haz)2p1)|Jh#;c>v{+PJE(ZjJzt$Gt^CgSXp+DU1 z1TeeyXGkVlMh)^Ccaw(*yG3>W`bZw(ZuShs?{pjM9?lk`zfpUbt?9OPwl9^Jd3@c~ zI>Z%BMSz%{yUNi%hL5eW2S8X>v2PL&_mZSJYgqa9{Y8tHUhr~6^5&}C#zvh>UELth zHfQONXSv!RqU;nj4gI}iJ^049EDf!XqZdG@Kl8|ls(`Ub@*xHcPd6x1R;E!P3OPPR z6FF=Tq%DEi%sLOe-k229JBL`jJ8Eu^-dJDjv9!~uT7Ktx`DIh%a0JiB&TfKD;IRc~ ziG~&vb&u=nfbQGxr{{zX6%Vx)PylZ}u~>y=-IR}Jk?S9?4h7ZvmIz%`y$_O!;v)ut zJdfgK%8`@?B-6^d&6>p&(l@YPuvsID(Tx49^y>_elbXymv99}DJ^%-~rQskOvEXvS zY+ZS9QK}7Kw!@J|oRDX1Mpv>xTj=oGFo={CD}|7#*~tWV3{Gi^x``3V^n#G0;Xm*I z8FY&&syYYC!YbbXIwT(0(fIzYKx8fw`R~d9EAp8C-3c=J$(ye{tFgajKQA+Z=O;wq zQt4%tO_!57^`w^Op9ddVBbb$~u|z;A>pS%**Hpm_*~g@$>Ylnm@p&6fJRO~#j#|Ga z_^mm8ooZ!pw)Nf((ialu20Z{bbL+td>4t&Bk19h?j?*dR1w)Ddl`*mhhf1DF-ZHk zRlR8&i=6M8%$xO&FFJFDg-)#lr@%ZY zv7vs-U(A6#)9Ta*h!K;2$nyEwz_Ix)k012Yt=%Gf)PTaf$F2XhFmk9h6R$RExK@c0 z5~LLi7vsEl6EbnxNi6KsmSukd4E4Ttrz9jWC-WG+jtIaD0@)08jOPM?nUR+N?v9}= zoWgddfgjS&(ZdW<9zxnHEqYuImSho!U=!4N?cX^X7CBb9#Z@^3;q&MtENdxAmy#(~ z@W+U1qmusm^T9;2@+%!@a8_w2mN;&L`F=ET3*{HT20TCp2?Da74smy^5Gg8 z9Tf~n;+bnWxr1oxX$!a=OG?BoD5&MoVv&1%3JR~!(RA=PJw8V(7gXlYbRjj!Gqjj*b8=D!S4aNdn+33}6hXX= z(SoR~K}G)a2uep+Wd!U}YDp@r^DAT28*MHU1L!$cwTT|X{xY9g#|=_i+AZG}*JZg9 z-AZf_zw(uZyK@1sOCXlIuD~BZiAZeh>g zii?Y*L>RiqY#o4I=Af4~`{fYy!Ydh&Rjib#tY?&FE6Y@1rz&O>@!tRZo7utp@-Np% zXs&Ve-us|6==w*>7annvWj!M4LW|4Mu=5NkOjSA~$0q6`mdX)KPg)VTuXW~d0!-`B z(zg;^8-)|Uv%U5RThsUuy;3CinXXADDmK=O!UymbWwiRDgz@X^wpMUNGS1Hqd%(q0 zfg7w+E&ifoq5Gr`!3}Oxq?DuEy_k1{V1zoZ_XfZOp2huz(=J0S@%8H+paca5(e_`A z{jq+kGZx1*)Nlv(Q^che(Boa|>VAPd8Ex@7dI7q8xo+3!*YzKsF2f%(M~Th9M3#gZ zHpd|V!WQufJnApa%+Yetz9k0dP;zkK0-=&)1ah^isNs|@jSKt)pP%h(-e~HfQY>p+ zrHKYr25gfYAXvi=8*T!k2WS+TI{-C6qPxqJF!V~9p3#_))U_$lKN_ydQ@C9XDcez|4re5(~)?GY$1JaE{3 z+sh`}ztpICd<0Q|%gIS@28IiQPb+b^0)|x`C(9())9l9Xl7^_(8|o zCp}rkwQBtd%?rcOrxRh4v!WakU!=RVs)P!oGtEm2*KOC>=7H6@5nN7M`fbe)ZKx6u zkU|VE_Ysexbz>&9VhQj%TF6-UHPuNWYj$38m9D!pB6f~cq5WNCtPsepr+qNeV$$Y5 z_3zK@Mwav;KQ)MBo^P+mcS<_!hWA)A7oizk$mf1Fpc-kd!|iYm_Pu z#L4Fm?)BH%1sYs?5?6{2+7~Y!&w#wK!f{Pjb{iCZT-HlKOx)9($ZEvct3R{BU9wQ^~dkP9O#}_y5J#`2NunNZ|_7w#=`O9qY zrNSKMn#SYNM9;19G)V&O*;?;0_;%d0xL|5TpzKqJ=#eGnce0|aFD9$)X%z|M%x15t zSB-G)6}8cwSfx>>nQ}k*#vJRfr^FP=S4?4o_n08}nbDEw_4&cGCk9`T8t{j<-~}+l z1YGKXmac@wQD9M^?R+UidW8}Kq1jP*A+1SRY1MxZ;zAMNW!lwb)t~&Ct7B%Y+{DE9 z3qK&FX5?;wLh?PTtspyVpak0)?r34Sgx_gbi`NbW0=&k))AU|osHNQf`llTiZ(|Qe ziTZl3cboTKfA{8KhCH#G8W5z>CIfCWNrN5@fB0?iWj8(5FMe))5ubE}l#SwO@mn*L zZ2ZfONtkGuh3esPMtu+0JN0xOQ@_a6qr0ej^f;=bk;OAUVViEJ?$v?ps_pp1MZ{Te z&S=BVW=KPsr4Z&N6J-nXC>84G1Dm(@`c(@~8hbX|hy`$SZo0!x?SacPSPP&xfT;JQ z(1<9L=57Xp~=-Q)lW@M3@M0={2CXC)n1{L`?9l$N=3k(d>}oI ztu_w@vYo@g^7~{N>|@CBmQP3afR4=LsuCUmw8UemvkDa2mH^U)E`- zx_|p=dfPnKZ^!Vxs83A1=y3Z#oY#G#!oNRDNFuN8ua8D~zt+>PkMi1gl%&QmmjEGw zqI?kO?8w+yxuGlxtad?~MZ z(R<4vNbkMz7xI`$S&$4wV6D?EjU(**`4lQi%4+ZJY;$oYuw=y57);+YQ~J@%{#fSg z6?;+@wXE)JvW~fTQxo$Ha;p3hcNttzNLWo;P_FZ}z$Gq3QPp^8qghpCQxqegEeiu+sPQbN)l={?a9oIufVbW8kJ9pw z6ngRcsV{>xyIjctU57^V-XQWgkR8X2wBuZh4>Ql{Q^STY#8viV*ffTh%&S1qc`7>q z+21*(yWJ)OPhPq50`@DO+~NXP{oyh8>A;jAX;9Uc+$>Yn^SOe;Ezlu`)dbqz(WBVK z_MPGUKpYAd@ko@0+5k#m34{g4a*2Ik_$l)jTL)^mjGo7^A?RHO9ik*SiGP`}2vfyX z#iQm(SOFzqt)^Y@=?Xp*e}}etmr-Kh1Xh>#N9&cD}!;t@?7YnrGzC zy*O-3?rtSKRC*^>aGQq3gsaUzcdO~zJFF zYXV+jd4adtUi=a_^@5)wzW2J-7!$GOEzhIvZYuuYg7)NQD2EU@rB?SqaK96Lc7fIS zHy-{sM=f~7cG`8xR6dM=fWUA*EZM&Dc}q3d+cqBY&klwrI&75a=ne zS>If6yZkpVCQXdeG?H~3q(dEWJ5pMqfwIKc5PZh9Q${qiQ2CBgH)DD2*cdoGGW0-pVN)jXp zuqsbvT`w#FV#b2l91byW7fl=XBL=hY3$|f!yo{V$RhJ}A`@36YhCX^Vw(-E*G)kQ) z?D%|U+HQY2F1*phMAks?Ai0bX@&nK1a5deiAM8sH1lus|0idP2=Gj;aJ;*gfAE14u z|C@(u;diD1_VI*}ioQyW5zP@AJwPq~)U(X~Vz6}cWsGxt;9trvh8BSP!cIgB5(m7u z|3v{YO|qzbDa8g^V5(zY+zBjOsX8jR+3Fy*h(U-m@m*x^cN(?tWt^3|aUDCXZAk^< z-SfPVLby#{#PyHMCd-~u-&98V?KKe^8Hnu}tmt+b^`XaG+YvisE9g^18-+=9>)73^ z+mK6+*(A!In_>CT62czHg@~&&tGWCm)mq6LnC3PhYn^c+hOPA?k)n^9lEvhHNZjMN zL<8pT+u<#lf)=J6zhhU4tj8c?$s07k`kW6#`@9-{=;;kgJ`Ts_xK-`4*J=j2wC<$Y zyZHw#$^BMcUMVHX54p2=CO$oF{Hryp@u)}2aVB^yw7E%_w|ch7(mnqmdQx=B_*1pu zQu*BtId}$vQM}f~$oEZmsCXbFLq5)9zIn#S`+*O;g1y=pS98;Rj(oEA-W1{L0nh*vorg5#nc`F*-OnQDqT#0P{{tN>Wu%bAosHVvbtG8N3RVHJFPBE^@9MyR%HdKjbK29Yv8}|IRjjnD+Bhp+v z35XoC&05f2KfH?Se&Rrc>jf&0G82VsS3e%3t`Jy36qIwdkk1X5k)w}GJH2m4?e=~b zDfdB^&w9(fzNvA5g6gI)MegGs<1>&3DTh;FBL!n00jXc9wF193FBwQyJXNIJa zaNfAIr&9_vzNE|YSxv)|D*dR^a*mCBD}RHD%sliNG{z!g7Zugcg8kuE<#VR1@&YvT zzV|3A4!Cw|qK0m5x2Ql@K3~w?fv(U-{o*V2Z?92&O4txRHng;NRZ_TaOG zkfksfUoPF=_3#W_JA)#5@k{2mNLlW0v!eBvj*a8GGTLW1Hi41-PY9Lwg=Lj?OUsMy5lUit;qyw@OmPM=XToVU`<8-plois#k;l-c; z&PJW%bV(RvAQh01^G%_T5SJMW8Vqpfz&B>?2*>=D1wpwlelAS{paW&c{JI*WP>D`X5Cj#R)RJG8Zp=N~8TN8}w zextX(s{V5bTF_!=8GS3d2*t>I+dxeX$1S!B9dzZN(f0b$y9hhWl3N+zlED>Dv5h`{ zWN|sw4vfBvUK#)O*6dk>w($+{_p?;_VyoSVb=(3|&c0)e9n&m-_@{P}dV$t8Icp{@ zFs#2IkAjuDStcPt=|U*A@lSmb`m#F$GP*?*I>toptplp>VgOW8^7AJ(1pS52=Y3O2 zHb+~%xv%i^EgQmO^%|FZkTU_o1M{N-DfzFZ_l+AKsrZmXejV!-*Ys$s{N{MAbD?2I z7R)=bjV75u|EWY5Mj;ueZ1jw_zLXxUcSN9wAvUKQ!h7~7mh2k+=AAgg`)L0pQo3IU%RUt_+CJC2``_l*bBAjY-mRgh`q}NDAQc()Cq6oh78adb8 zu@WWOec%bD1BfC4Az|xhb-_1f#~V619;)A$RA3(bq#f4?6pT_dl2Njm3Ouypq94wt zFRXN_CWU2sbS6c=Z_g!KU>dRgBJJg1uK;NW-WF8)r?3@L?N8g?OpS`g?HBAX8s6ar5<3mkJ24*{J#hcpqJ7bOu7l` zYfeVI8oxp}U@1FTV}0#u)kM)CYl|10gUgs!v%Rz!#J~AVpj%BgTzHdUa${$u7c!~f z3fgXMl6MNyAT2ZYu4toL+j%OP2r&{xvvtqE?79sXdUKSb%lyP-g*GOCNWV4vL4gLE z(5;(&4<_|)gTQAJIjWRQJ~XQz4xF%U>r8rq)TL(&#_(V~x6~Bi$~-GViyIldeXf zzjK{CR4p@sN>8|G=w(#>`*Ze6m+ECv$VHgj+Z~Ma4MYF)yoML+MN)2k$ib%l;H+4%C{tThuA)<;wSo`rT$0{ERn2=8D-A>3}!^7e+s(aABUa{5O_o( z9-A@azY)ftem8(gU;(cZye?bw^lsDF@kkbl83#hLROg0(Eox&<+XtGXJzeyreC=RJMV7mi7e)}W7 z?soJLQG*zY{iZ2OFw-CnG-nZ}uyY1IMK|oBIh5{w?~8gV6|Glyp2AdD$HXecs5X!l zrhpq)aBLO+(AmKg(_mKXAsJOCNuJs|+j8j@D_?qg`t|koeMyAto{qdcepOXf1$0() zo0C^b94ja7SJ)aN2|2JlXKpzQz>fL~vVI%XffT3bo$i1@V9=^OaI zWL*UWM?0B-moPwiYqnDT3~*>U z0aSF>SiIOq{<*V?%2w|_*c4ihTr?f}>4>kK?_HIfs+>xhZNv2PuV70Z&5GlMDet+P z=k7?EZ~2UMeL`;airFY9we9*nI}1^ILgCmi_3_~raewm-^?kM0S4g)uk0Q^n*I!=B zxBqH278ofUk3U3{zv>~3-aSc(SFMdDzmjUe6q!JO&(kPnfuo3dGGEiPqsbNjQ$w5S zI|Kxq!F+lX-H86NB_@UU{Co22Eu4SNiyz(oH<;!pKA`TxeC#^@XCdl*LMCRKVu$Ic zM%b7l-M9Xas{g+~Bd=s>lQVXMCP9#<4IjfEC9txjp)Xzxy6p|FB%FkmVvs2XZ+U$J zul>GftRYYP=+PPuM6*QjF8ehK^1O=1w<4r1$2nEG%;KiX_pZ7~`tLqa!Rx;h|xPUUfHC(9fT$Gcf4< zm9K?`h2n2{(CvkAg0N1OOGdTdTyLJXN_@Za?@yOFZ;pYE=1{>cj?7~S(rn?>n-so*GRl$<*oL2#Tq1Y7awa- zQIMyLo8%vn2%^0$PM#KfEaX4vczGcM(So|lrq#nLsjemiF(>%u(58Ir%9)~LS1qlr z^zv~GNvJ(3-%O)sFTMZZc-?xZOa%J$^t9prK%HaW2^eAZ&3La{OZoMz3u!YjdcM*G zm3O?KrS`)imd{H_*2`T>>{7LNRp1GpwpX_?m}_4R_Tn7-5+_b5K!8d6<}qRdshL)@ zpR}2;ni;88tbHd{yZ2EC7Z8E_m;x_BACdQmV^4sE_|u}1cu~gy#;||#LnrT5 zJAsYufq0Jzty`l}eEvRd)7w+~Y~RWj6Ojp!>$p#-t4iAsn7;b4f2yYHV`S?!iA`bOu~&S(CG3 z0s#_oj-M>u(%mR7hq&-olbJ2=o&;qS{bDp^==W5*4MMoS^m7<{QJUkGq#>;V2oIJE zj@%ic6(p$5$;Y`J{$R)L#0t{>6NfcVqV6>YX_ge47I`-p6I$8KIv2LK&JxlF1O$wX zlYGxBDkcOOKE}1};z~b#)B63B1hcRMJBdt}vPuSe?;CD4#UY?g_kzUoF5%GKIb3!aEJZL-zbfB)2P+A_PAC>?R)U|&qv#O_&p%;yrUD(BUO(#^m>yc!5GLq@13(< z60!lwCqBFa^X-=;ZqysztZzE+G%-sV_H_@7_H12ZLwXskXZahApuv`^L<#}^^w*xe zde8})m=tF0_VaB>^7YwWL!MTy9sZpUJK;=1umhr!mYaQwqc+&u+P-%|n~!MsAdrqc zGo@AX0gsy?Hp8U%RWB>s$Cgm zXhDtE8vkk-_cXaY=2Qn5>>%HyDfOlq$`AHhC`(!vj?HU3Fe9mPc}xiT6e8k^j{eC$ z;o_B}{Pi>*;4}cZYU}GQK=7WMH?YqO#@zT1!udG9Iq}Hr$(ufTqNqJD@;*k~_P;Ha@rGk%p zH;(|!Tp6?br-NBBx&3m3Byr%u4;0Vo_%P5({(0r(yU70lCp($OTwehS=R5ol$;&(& z@vDn6h%W!eJa^9mv34)CA-|B%sd-Y2wFQue9m(j`?5DRIV_T;|y6X6Qm|Dj*jj(U2 zLM%aYqHwL#*qS(;dGY=RjLXK5xJMqHQx3Zbe5h@Xu2gJhBY9zZG1)EO;(7i3(LMSU+-?Jz-@2EZoaf*q~L^a>7^AHs-QKE0L_3ytObm~=CpuY#WIY%HADeuZ~O;RbX-GniIf9!N&4J}-aY_UZQ!duY)@p! zTRYpz&_286wEwD-8!BGJg;t{M_tV6Cm4zh%ks8>p!;zWB9Teg%kPCHr|H zfj@jqCqri1Mz?7^@u7ApYR~G)ei$=7mdu%NFO^ei3qFuw+HO;W+~UkRfA}%zAx1)h z@$aBEfIvl<{Trrc*OqRy9Oc>hX2Rj4pw_rT}L|16Y<#>YF@)bGzlkV3#mL00ue J*>lt2{{`$KnK(n@dT=;)%CKQkY@B8x+NG#p_HT_@3c3A``jhVI4ef63UA&#a&9BoPaG)?KH*7;y79Jzqw+wL zI(PovX7DJr#21lDqj1Pt&zzrOa_D>~^9_rfWsY)&r(_43UE%$0g&N%Qh(4{mc&G_F z&tqJfbs>X#$msj}Kc6Xc*!{ng&R_QJc|6p$x@Y7&b`#?KDlI8mrz`Cs-R;JxuCr0WQrlNVZ>`6$C!Jbv^eRug2p-n$85}Q9)nrasr)3OLBuWU}35p%^Y&S=l6G9Oj& zEImPVAz&W8Eh^}H{3Itgp50<{8fc^$V7gLm6lSwU&%-02fnag+=URHaR2X+&`rnY4g zB@sHi_=W|N8?zbDw6H!9YK$hT60a5-?%|0n9uuNILF6&+UCOg)?fH?Va<>thPn&nb zx&Pc#gzGxImI%B3w$Wuq@r&n2`j)_~t@j?fo_FplYu*gMp&&D>+=a6d+&N^U3#z9e zy^ILFx?m%Vf7|r|!E1fp30Vuy-$?!;{Zan3#48T2$om49Ba`d=zbLf1 z*yk=C1lWkh>|aUU(uwcJX2ec#3QFZatuNWqkq&+`Rpa;0r_zD&IZj2o5kKMv)rV$7 zv(BAw)XpcKzO{RwwHYkz#_aK1o+(NcM`fHxk?`DjhaV!2cXccvFy)b*q|sHi7LMM= zXOdxsAe=)efzh8E@hj^mrF){__+1})f+&@WYXWNG;Mr#fdn2`CNl6VN< z*;4o9Pgs^Hd{lo==4`!iRJE8`qi5Bwt618rr68Z)@i>p<$@{fmejnEu3j#9nwkTLn z7>uSKRW`NU(KNvj@!Q?m>-5YC`1qxwmm#v%I8GqR>%m;mt9`T>W~I0PsY2^Rt^J`( zGQQ0CUt?mT*@h?&@BF4Zy!D$J95g?oAB=^+x#ZUvagzj3jk5TS>gR5a`$peyDiFq} zNZ%LwFmvMNU56jk(;Fdp)gJ$wc5E-B^DWq?E`r!|5oP~U$G0Vp!!kuXg?X=jFwNr# zt<8q6K06jtOeUmbOPq*eD!~LYB%n|-O;hx{YaU=4I~SUNjc@nYhl6!o}<^J*^F=)~O7zQ@g_SIeNw(aBlo&XHSQ zy07i7sE}v5ebt&b{bNqheQUFY{SyqYcRPM>ao^-s=s<@d^I|X4z?oM+qyK=1l6t&+ zw5+V@`>&Zu6>4Z-DJfC6_>&x*5)|f-d!a1er^n`=;){Lw!@u{(vgpCA-uPG1=oxET zLPEmmQ<dWVk%`GA$fmOxWG;levB{r=ksntR1J_PVON010Z~aMw z!o8zU=??t4o14qZ!I3v&Tv}TCB|ctjf$SrVp3+OIicg=WBUby9IBK1c z{xuG(wTq+IuQ%uYRFRfil#2ZD`WM%z4$W7W#1N{A2fk<1u2c>}wULwZ!hs4G=H?824v|87R zi1@fFtsq3#ukW57zUvifxa4(qbOmDdr<^cB@PqVlmJ$UMQ@*)Q-OQt_q)dTxbNbU> z=ow+R{X0jSlfI#$#64In0Re>+_#RES56T?akY_ZKo)tqOJ+%6jd7re{X2mmiWNq z3#_F8;$tz0e&7FHB8SF{8>0S}-?TgVM&DO8yD7l|+m1pYq`SjSw0x&KmB+FR`)r+e7Jn2!Z2I!juTjhZ?VM8S@lv3Dbn~8>7FFz+{&~U7v{v_8hf-{rf&V@x)BiG{OBg})->f9mbsm}!3}y_?VSJnHM$^bs6}R_7It`$Ctp z4-xqX`R&`{tdJHau`_FBy2c?#tsvg` zs?+FCRZ5_)`1;eEiM511Jw1FzP#{SnKE}r5W7oS}TqK6=p%3imiP-%3!+`_7{7U?s z=f;g2yW4d;>0{p?nEfe#(1<;?w3@0UdHPdk#7hL9r_l` zpEs(bHb(QFWxSBZ7CirUkJ??&ax{JCvsLR-!NoMm$VTEr@ls`hNQ#JeGJpK|abNy} z)ZCx(2M-=}bF_Fwbtp_eDfRE==p?OJZpmnVD5@YSXsU9?xYt%3zrL4$#PVpWj-kH~4Oa)yqtv z5p|}`kk}J~4vB-i4v)1mRpPTf4%3TBs-;VJF2Jq$EH+;ymXU}YL z`IeFDpkZ1`*L zhb7Xgv<{FDYx&~Bsa_Sk@A(k+W;PMC9}?@^dY3<6wZ)6?p_-kVFiYoK(#MEfc3q+0 ze|{e_Im*|9Js;5Q0_y$%Vq0;Wr~dC-_!1V_+s0W+$hT1Zl8v!($ZE3mil(M!t&jm& zveRu4joXR?iwbegARXNbhr(V1^v-S3vaBAqQJbJu#({rRqi5#*9~O^v;Wq!L*!`Vw_fa zE{wL`u!at_=`PHm*~baa_I=fg+}2%BFv0C#Yr3Zu7h^~!7;h)pokxUhPu2bU1MA*- z5Douw(nv8hx%rM?b?lZx&(kj|_z&6Es=2Pu)d~lbHy8Uqxpw19`=l zFRAS8?7;F&WNvOw#{)3dICb^H!h)Y(U+nODE0(QLW`n`=^udK==QV7f(|PmNBM!JB zzt5iy`r-xRd)rNojcXD_n+|rqOtV0}P}E?Z@(R~v-e_T7_U3L36&?TcHak7Ph-~oN zB;Tdbfn(JNjd2RMfR)|P^A4Bp8QTIcjrIijHWGYrX;-!UOv!LOAuS$d)LvX7W67{v zY}YE%5(;A!YVTr^Y~Khg=+UW^CW)<5{DNQD17$doho@p}tvvZD7+I9~Iiukd$7ZZF zjz`X!Sjy%@4zB@H#42s>?j7xp@JjGRz2STgux z!fycHa$sm^s}COjt%TzId`@CI9!O+lWG(UG;^JZySkBHXO$lhYwEVylX8>G^ob^pH zXW0}C61*i6YmwJ z?Yp+W`mF!BwWEUrNZ@!QuPC^_u;Rimi->3jMMR)ozlBZMz%f^A5@~qLN=u8~4or&R zxHfcv$^wuTh?+c6qw36zeG71$)@H=|aCQvRCeK~u#D>cRj}B3F+?G;g_I7S(YG-Hf zW2y23o&{+$;BH^6MYe089H>k%Jpu>R?mtQ%l|hHzoISpHYDqIKcg$TuLA5*V>>P?) zJ>3;jKh^o4>znoF7=@R1*N)Vx#Jm?mhD7uQYg1774RR0QC4e~V zYeGVZF9F#C8UgD7e$J62RCElyM=r$2fg~|?CUIBtnwpy0Z4mjhR)CS+&sz~W4tDuW zIN+Oal%DX2Hmc;;V$^crMcuW>zLB))w>}&j<6o_2$cSW9cqq?LFW7nwbo9^9@z{9drLb8DQnaS|nTro&FAvsLW<7#U^3~j zWZyMp5Diz$5U^pD-kiLmeeWF!bs>SC@9=AM^8kflCJ#T_e|^7@sn26 zt#uqU@&GU;$Vr%qRBl!r!_v@S_cO2?1lHgQt0_OTu0#EN!6R}wwX3YJO64y`}szZ%%8vd4rSpRnVy!4D{NxCMgzhc8H_>m1kLPY{zw zs_w3)i2oNJ)BF2dz=UsEUCbN&5jS5A{d@AiY?^)_FvA9bHHVg!;%2c&>qy6T#kpkM z=|qEc-qt893x__2!}@r4KKcT3yw~<8V|jEq!T$H@*C0H5D&tQahBC%jY@_9@TVz?P zGTjBPR9M`P6)cS~Mt7A*ddU_rT>q*5)>DfN2^~Vc!_Bt@gk&its0H17iTp6=p7M`; zAWy;|sU{>>$eR-PuwvIz_^^6-^M9fl8p9ng+nzjrEmN|+os)J=r;)g+gGv)dR+w?B zh@JK8T0!p4x0qxvP%{=^4@^LRUWU<`tk#WvuwR8UTZoG$fNF~b)Z zW>@!eCn*$qWqr^~cGeBFfjduBJQJwR7%q)mBhP^zl*-dv6nXdceXf~R>;`JKpsxN5ZTRqEr)tz)^DPzS25R*_8=3&UC6`L*diHH3Fd{cAF_ z=Kjs5Z^~HpdeoS9ZR`H%H)Y8O%?v{F)Ag1qAMYr`I=|MOenO!`QRB==Sl_*E0A}L zyZL7#HPDAY{TCR_l4~?bMyYP4YTe#6+@>ZB!CK~iP-7IZ_^wg!3Scgb#iJ-k6~lTd zilLg*M^xa^ZJe|~$`~9i{r2+JtLgr>&DK>RU@cVKA_BPOQY-b6n$71#qR)~AAt>&3 z_n+|iT0-qw$K1?H%@0eRk?*^{-o2ixd@!1$!UlPwr4Gco3Z$9eg0UydPOv!3HhX1rT$h&V~Dt zUVR{Nn~3as4cu4W!t7Jp6qFVaqcKv-e(9M@AuYF_U-nAR_=?@okLQ;l*0t;Rl#n|@ zeERl0{FT~dRF25toUA?wL`6k~4tv;gZMObOf{@Jndb3DBtgCP`%TLRLD^wq9>$k|*s3JaaI3EQ} zb4QssFZrnUdtS&Fge0*7*UBcXn&)l52Z{k$tx}*RFp{H!&((@IQoYQqGl_#vZ3KzFMDv@8b`D%2|>84uY+3H}@7hh~o0NHE`*LRi{1va{Zohx-c90aHa>PYNl+Z z%0xQ#t`s1mX$`+A_PfMTK?%uit_y<;6TBq#hv+N2(k0uB5wqNsybL*B+r2H0$frN@ z3vknEEM<0`!^^aJ2iaimX%mAR&znF*0!UA4wPu!?MEw%*>JPMOz%4mM4&?Z3u1*$1 zbUkn+OIB{(vdbYF>ScF1W4PENU*n>lo6sD_$@~6t7vEh`uITJ<*AVb z{6r8#u9>+Nt@su-OK*`PhZ3S|O0kc|EioYjOmQkOn|n&}OV*7mMy3GPFhEkZ4>Aeh zW=%`_*C2mx_O*oskfxaro7h4CM5Wggcf7V0zH-SY3qRZ@NuB5Tdo<69v^BI$feQWX4Sohysw!%~=!XUH)8K*S00cj88I-PT{g(FF!xE0BrO23gNYncsJy+`{vO$br*@e}r*oNK#3mw`DN)TT&R= zDarwE^6ns04ueU@!+-t$7O%}da$DQH=fvV9CWQ_6y~LM@YbixEY#Hip?aUBwfZ@n` zI4+fCz(yQR>_6mi-oyM* z)yWoUBL>d2U~u!M9}@Eh z8mAG;k?5)}Va&jtbBY-zMcke_kV84El+yqy@nwkP#)QfNoz^#z?!;xmchsfW(jzxm zLhotbJJczDQ@M~D>yFL0Jq1UHM6BtJtcH>|F~a$<=OzO_GmeW&5Fd$#4w{;n0n4SQ zsD^f=px?t)f{+>Y_|vzxkSxy|k_OF}2LXPBj7zS=m!q|Rr^yh2EXA52o%L`QiC=MR zq{Hd}bbEB4(=ycUONEp=I`zYIq zE>w0In3X6VS$>G@;f7NoM2o7qoA!k@e|a zBD^LXdgIM91h0kd>q=*O~U8* z!XjRCU~X+l3Q&jXr9`YB;8r9Fp5@_n;FF1`jtn3^)ppoZ;4ln{GbQ*HzMnjG3$`r? zuFP+S-wecglU%qq%sH3p0xNMF60wFl$vGQ&H}XO%2ZnLk*@K_%%)Y&gB!fVy&oDR( zEMmH7T?JPcFL$hq*|DHeG2SQ=^!B6;WkD=!4GTO)CHhPQu6=q$S*wryR1jY{ zbxoVr%4rpbJk=J^tzz<DW#vpe<57$!AEOtLcw$KdCM z0jFX~uRH~CHrol`P%gt|*nUIP`u^&R=)#U!EW^Bhp)ut6mD}n~b-p_Zk0xCk4*JJl zz*eK!;nOEXmGASQATK#~MZ1Jrd#@)6Zq{gx%FIDYvdc;wU-h9@7h(q~PZenFQ*L|A zq}wQ$$Z@olU_xhq-Zr)>xkLko%>9Xq=~LI!V+ND?y|-a-gtgCX89J5&**Zn+0UnqI zK&Mw(ECFL9SFMU?4DllU?W{la;Z!|?%NBjj0tcNa-h@+I8ep?wrPA! zIVzREEqWRJ^f)cSEDQNW${UP~96px5HtPvCjUW3=C}$t36n;IZT-1ut>2vXR^4d?zp?Zzq^^7++;mCiq$! zqTedtUcwR#f(f&+Fs5nto}cR4)!NbB*l8rPBx4@2YH-)~*u8aenavn*8}2<`it}Z; z{{~0E!l?!RjZ|T)$`9bDh@rw4WAI@NS$eTD%a5A_zQgOXfA++wj@Er&fn~cdjR~HI zi_pbfVu#?P~?-!T-dwarP=zW&f$uuQbgUwv{X&1v;xV3PL9jF2v zvgizofx;SIj6uE0Cg4(k0)bM5!(inlooFBP=VQ42LS1ilTu+^|YS-yERL%e)o)1XJ zEVC%rKBC^vlkhmY^;nY4{C>phq)Xk(y9~(&!h+6v(qn6t|n9ZAitTTnpmx8X{D3d7RY?> z{A3!#owlD+oYz@BJm@cQKBs2n0bU0D`The&Sy>-n`yVw0 zLWT6};8j7$yVyU!_i4Hds)R^I^4`5_tqK14U0BrcWAY7ZzDL^Dm21wpFdFlI}tX`N<5B&uE9l|CYL10 zdr(lQN&vjt#1aN7LsYn`#ITE`1S{*l`~iLO1tJHBrStYMsFYAUwY+5pA>a)y0oje? zixc}9d(1v!U!Y*oqr0X1aKgD3`;tY+sqjZ`Tjfg@D@ts!^7&n5FdCovA0P8cS8Day z6`7)YnXZefiM15NY?6bh_ow;^YeUr*{03Uqir@4tcfPIren@{_JgG@eL7|yqJb?G@ zp?hG8&Z|6mASc;z4wy}|(Sg%(;$$4?5E-RWi}!XwRMqI}%e=|^Ws8)$MWiVXGv^hA zh6iBrlbtnlrXa1GDLlEAdz}B)!r~_#2nfgHaz;i*SVfNAAHCVbu>kJ_nY*aefTF~i z2+ELakv2lR&iO-YdwXzu7$e*5+rQqdYEEuB+kwQVOE}~Us63g613*WaB<6Bd+h3}O z9zPDRuv9#^o^(f7zQdrpRc8G9w5?}2g2S0a-f(J`%HkcGH(pPWXCr!||5S9-xvqF& z2R_Ri&7I7BH6q?BcT0_r6~3AkPLU+)d>Nu){FP`T`rljtC?`}L3TZmJDYpA&h;_z3 zp2y&mMzQ|KyOooaZ2OFljRMUkif==j9-h5#_9MImxu}&H_e8Hp5AXWjexIugN1b&C zo-@0@_qk@FMG4W5^5PXY2!!|?1aQxVRKbV1vT+ku3%mhN9gwK5fmM1Q0PmMr5TO2W zQY%^nYP|s{tGAESo z$5u_JF+G5UQ<DNUXRQ9ush?@dD(0duOySX4;?aO5u4$;As9TJ|wttC;oX-K(CVW zfYMFFQ$dgSvU;T_U&CUoJbUjr(1}}=4&@pu%%EGo+?IKXFi{Te1Q4rq?`v2@oDnGz z4d-isC34QZUDtx}vTVxO<(KXza8J5+wRgOH9FTcr{NnX+eCW49LhOAPzlM$aT z<@d_~kea^$rsb)bscyf*@#s$E8@^5c}pp^sJVk8?`))-4J5ixzOhi~;?5vTP3&6&JEuV6AD1OibNf z9}8S;+Q#atZctNazN_pS{A9SLMFGw`J&nAjFvo1OUTEEV9uMctaS59mnaHqMt42U> zc+qR0pd<)|ko#KsIqd|rtorn9oz+x5?TM>1AI^HPf!5(m;8EVenVT7?iDsz`yjZ^} zBM4P9YaZ!~sTWEoEMq|Bf1l+wIxzlx@8yhVmj_!sPu~BbTm0$=!NJK1{DU0jkfi|1JCOnOq=?20q@7K4u-*`cKfcPZ4OwaE*b^NK2X8vmCZ$d$#N5=PEr02u# zXt6=dcL1ej<>fC-I!nml+dZWl>+9>=9a~dXF1V?jl^y_|uTdgx+Rxylbi8L*ARCk1 z9N(1oQO$vq+>qA;-kNb%UyEqvd%f{|+>d&?jlOv{>>3{t?Uvv%N_l$*u>`uKHlAW~ zZB<#x1VGp-0#=XdDxl*TdJXQ(+^zE=-@j8WgLl8}06%}e*dAuLJNLAYyVan4ZOtq) zIax35!!u=N^>T~mZlKP_f3N}^mBZ_PaRF@ID;%Pte=yU3A@8_nZi0k>^3E@L-bD=J zXPLf}-ddcvh+^o4-iYXL|@MNmOi4Vt& z#x5MCm@bS9u_zn|_zGxeyVDT+JmC8)en>Ds6i8p;>}czD(We{&r+Osdg-)~vQML^$ zOL5(Mm3aT+c%_#g*5^TLxX>C@yTod^USciLh56A@+h^5$m4x9=ZyXqWWCu4eX~hbcA=o?}PI-vI?l|C^94>!p&?PL&=U6gN1HNzD zgs9s2itOa~bvwG$^lImw8i!2i@SngfZX3?Hyk6a&>e>DZG1uMHm9twC61wY0E$<9G zPH@H6Got4Rm%5&MP*ftVjKPu3c*knZ$CWM2BJ7zm>I7TQw8K3-XRfdMy7i>xPje^= z8USxgeE$SR=^oh^bH}s^Z;@2&U0HMHT3`3C(0f)uIO!m<0Pzw0@Tb~lzho?I=t73G z?no}jo!Ob2h+%vA{!dW?XLlVoXB)&W+TUf~v-+L-blX8vV#adjzSnSF6`1xx+-#XT4NJVjVR@vu z;+pSF1#(F0=qDAk z3U?|k5rx}LBG)zhRpL8J8_r?dXYB?C@kLPXu$JcFr9y$pf5Y&{Mi;(XF8KxbkSqNt zINA54OOKLGej&uE>_lmDXr>Rt}5^(DtJG%$drmKgZB0vJ|pv3g01}5c4ez9Emk#|nRSpXGo=$whCsX`Z&e>3}i z+5rEGtrD8_t*QtgqQj?uQ5GL*oibiQonJDkU?7RdgFI&Els8Ff>kQQj#-j!xr_i$o6GT6)I;#I4k>6Qeph);p(#Pcuv#meA>% zai?cfp`ZZ&>ZTZjJM%k`&rm5dQL5kX=BRBqpQ)`lQ)3Vz%BtE=JX4)btNlip{ra^Ps8>T_6`*R~g`>NN-Sqa|B)CP>(5DrtF5$pwP_=O@0LJtt0uFy< z=d$(ZE+iH3TQUWyHpZu_Y>Lbuf%q-f?N?YZ&tvryjJ{9ap5@Swpe)3d9P7sT%Pr+A ziUVj>t`o)NC;__#S&ADsK9!jc)TVrkKzJS~^;KzlX@oE%$9<(%bo6|$lH6F_KPV~o z_Ch=C@0q4}Wt~+1BoiAk#JKNvB=%SW7nGja+2WlUc_wml{7r<9AEAaa2yoAbl3`;V z+;R~(8JF$WF4CKx?l^SbRZal`)$fAU50Or+Ki!Qeqoblei|y1?dZ4%4E-)#mKoLP= zB|r!?OBu}KY^HXQ+26Ji76xB>4glD_KC-8W&NW6{-$!*yPFQQP00ZOekc>}93Z}IM zD6X%sFgt6A)8-unFaZqMt2VQFIWW*u^}Hp9UXiJLaw~Ys_`vpf&K^>Ve?L=t7vbF?2$$W)@e%V%xeAGwer5 z+4|`U5obwXGF>DBg!Qt3Y>Wp{o1~?@_mUh`r;hD7wJTp%B}Q{DD|fsdBK1Sx_<(yp2jP^ap{0^aRDD!_C`xacq_seiP-GRr7?E%S%``1k$`A#{L@hk%aA2EEP3NbY~b59)eua)j5f4|z$63ps_Z zPi+QKxOJ^43hI^a@qX(y*v;vBksW^12|-p#b$~b!=Vj%d^z3TynK_PqwlY^ekd~T> zJu~S1a{Ipxe1(YSJ_)1X$Oowl6q>KsP&;C*R-_kpS223+h7?eGu#7Rz)VTzJi2{Cc zU{KJn34jX#hf@x{JyYU=wg#m*3kIo2k6ulCpKU>W0KX1IHkWKkTqQ`{!?OBik`P-} zh;Wd%>f0}Sflg-L2lHV3Q979#guA{tKwrKKS+P7vx_|;4}~W$NS&D{=Q(}J^^gtM|}FYGX##D zfgu?1QsORs-2==)6i64+1xC^Yc?(^y3dRjyj#%a^`hET)QCzAoF1k z3{3M3VLFgp;fcY7DX;oS07IbX$tFCD=)3n=f79U0zoLAOqWbhiDcJ1ydz*2l$rP&t zDMF431(Hodr(c?Y?sH7JZ1Q9hYB#zzPBa<@q)l0U#>4t(!rj6?0Avw<#&rECVc2g{ zZSwLFV_l#7K*Kt%a_y(=20nO-N{OV zK!kxa=3sxHoQmq*LUc?_wju_ORWCe40RH$v$Z1c<#&pGR8^^C-9Txt~`wum{y_M@H z97j^?n$|G#pf+Qox-^TCpDD_qkkn*M>ElUIPz#O4T!Q?)b+6_j0}oQj?wt-%#fQ6k15J=ZXCV zCv|7mjsT*+5Y1KFs_l%!(Cq^v1r#tBfkH~hR4)TxI=?r~(x8!s1=zfKTer^cXj3y$ z!h`0m^G^Hs$D~RlJt#F;(?Obll*Bpt@41J8-0?g__e|l3^>hA0YDri4@1dENjB+1obo2HS*o)V+_0?knIQCHCC|2*NB^N^qGMEX;d} zuawdN7U-Ax{2td8|9&-1y5!(>+S*ViQG0)4KvKYUr!KknLBkpMAwClI!90=wSo>}yVb;l;i@GK5E?d>+Pml(Z; z@n$LVm`uMRFtjH9rS4!oavm|?f}bMWlXY9GNX>;S!GCW4qcWiAg6BN-y&7cWj;6VY z4Zu=#!OC#G&xQ{!hwjqSUjUQm+w5H9aWOFjpp*(ZUe8XMvlZS20X`li@s(-hf$<^O zaIiyncI*#0Ko zAn^V_fdsa~i36a6N+3o$M>q+DXU&^&<#MlVbG;GTuz)cf$h0ldCvM`%>*rZX_HyXI zP(tF^?Lc>jdLe!2AR~E7L9^etE>a;7pKOl;#>@-x%T!s}b?jDpvzh+tj>miz8Ou{A z18pD2l;~`?5?Mqj7q*&--L>Lt8PMXVrss$7B#4iaon39KTSf@_ASd5e@(aC4tR@cl zDkD>4w)^+5X@(z|4Of!1@7UyP*AIDT6zIXY5Mi~mE2p-L322E3^zwmy&Hh7&t5yJ7 zbar+&6^VM*rpG`*{*a!YKK8M3aG~9ZQtV)v0o&Chxok3&6xLa9k?i+sqj3@ZZIC*#5!_j=bRi*e|eqW<;YgLDPtHyBo9mc;A=_IX9G% zo82A9cTZmZ8=W+U?gZ|k(akCN*gVU`aV$Rn8s-7eT!nFAt#~`dn-`aQXAzD6`Xxd$ zj+7fSFsW!R?JUbgEaq$xgg_T0-9o!^$BmH(V0~c5oT0}(XR?)3oLQW&Hc4EQ@;WVF zDG7c%P#mh665bx;%VXkI+c93TyT@)RpqoNpK6{l9$<19lm}yDt=jWG-Y~dmYLG%&2 zj)6zQWX{?g7P5lm500)0K*wfwhS*R^O~01Z6SnzzZHHHJY6s8q|AaR{oF+5idpdVu zv)3Pxvd+BPZ(T4`HPore(-5^fU9`WFe`V6oX=7sW_dzOlC(4Y|qmcR!R43gsQK3D| z3Go7`!J%5R1H3z-jK+x4Ke|1c0QF>nbo!tfx7!ls;S@$WSn2-{%Bi#WoV5Q3y?|V+ z*_zvH0#c?6iUN;OCpnOFQTcy@Ar4AyiR0*{ThoDC&@vMe$lQ2#0GrqukGGe*YvgLh z;dUL%gDY1?O91n?Z@i!itlep;siGj4$<}9L-dl*vRE!aywHV3y$RKbCD`MMObyq!N z;%Nh9quM55sKS$J_>j3iAq2lycZv9tL13Dg%fel$YI{SuP4Rd4EeOVc)qLXHUR_!w z?YkrZz{PFPe}fAQaCByBQjmcCqH2I%aN;M7eO0Pn*HZqCUK9mUv?TGD=UO8zQ85t; z&d}To@G?LAZ}0;03Ga2hC27WrcD!FnVmHeM{tLahuZSCWQ(f$60*N@lSZ3qpr2tfJ z;IZ1_SQPgRTKWC^blbMNC2z3(NYuK1Prf%%WSDznaiF(QN|np_-vHtVNeZ`&@;}@9 zmRtV6F-8CXWS#y`#^NsnX}Nha4cHQ?@N9sKsU_^{hbCa3M~0oQU~-%D zpH^p2oJEsT!-VdY>pUb*#9%IM_ZO!zh^ON2xO#X9kwLI9W z;HzE@zH1IUr^E(Rg`+sIi;r3hOTjE;o!I#dk96}&bLEKwMy$$iA*=EU(r(dD4gX5s zsMO(mMJoCF&rON!6l%(d(*cGv5;g7tX$=Wn4s5M0dW}!`#$r1vuN1X2UBh=lo@5fX zg%}u|j2@eguK|ocD(nOU&nJrP#?=G-GX3+&k?aAv?BG=;Iugz1Fg-Tl~A_StS?okhqXg zE5=o~l4VpXz4ELk#^jK)QP5z&&m}PiYH>pNQqyLr5vZx0tu4>>>(^}^{;)lXN1kA= zTmkkkZ*BdEltnUMvmPjDP;oI26DgTOQv^&J&*#&pPpm24ZSC#X%VzyTIxeJo@r5Q@ z*d@qiu)T9SpeCNUIbRKz@aK{S{`AP0Dy1guMBy1xDb|P5cXsPqY7_T{)Y?q=gro}r zFpK)JymZi8vW0CAC7(Jl_pBHC(*^Uf;q&lEY1}ae5wgDKYphy}o<3340#Ts2<`Ld?v6?LhME<@jllv*;e9&&Qi$m#$#5XjWgN;<-9 zKqM}$yjmGPem!Zb)|(ufREf9aCH!t$eA?mQH3deV{Q=Rc67|KgAu|&ydcI?1pc`6) zqk+^>%$)kO7KMRx&Qtd)lahUS-2LPP#!pI&IstZ>rsv@a9x*!o!6@bP9})}#^}iY- zk`wBPp`5YzH_#qsLnzH^+qB2l)53P3h-5HbZN~}-TOga<21@9lG7)~ZT}PIuRxtFz z0=paoRlDHJ_a{q)eECBDBRiYcjZf0!h!c_uYG?87T=(xk0oba=z7|qM)$`-Cbvh9pJ!#auDkW-9|!zo?;`5( z@z61W!bp(UUj(~g=gV29g-{1tUBWEkXd1-FZHefp+QcY8D4X%%Yymd&q}}bqZ0Iua zFu>X?dfW+ZOWz8sGYmQ>)DJDNVxKCio;>hqYm%Z zLi0Uw$%mJBxEk>j%9K;JkyovcebE2r0!$>@UFx7!nBP;8TIdWdi*MBgL);$6xYGA% zHDDpdA}tj~<)`#K-%iPWSzzabm@LMuVK;pV_ru?wN%DKE(+#{C*nLV{Sj*{III4;U z@YytA2vyW+OdX!~i92lYo;V#Jl%pwc*g4A8YsE6=qJaa7#w2E2JE79 zC@l{iwSH+jC(nd(^QS}DL`)oc+a3h49#xG-F4xWB-%(L|0=+Uge zhCMO?=dWD0p`6z`6#4o=-{IBj(qC~>u*QorN-X$%Emg$sCS5N62#Q(Je%)TuAC)GV ztT*d%!N34sV;wuA4fa7^lyHq7(Em0jZ9}=BkdEXOJ!?MNkPdhFdsj^dr$uK}weVM7F73_GS!tD+nE*ucO* zqrxI83jw1Ba|fl<7&p%v3ii26g@#Q%?in#P-HS~XM$4xz8zaw$9VnLA3(n9xrkJAl z7zsn5IAc($e0azhihG=R;!jH-&q7MUbcBtCT2-qO!`^_JhDWugo0|4RH|k$NQ1gv9 z(xp^ZxvJ!dX0Kx01=$cLLameovkTr#V6nL&v>s$?^Q&r-#4G&4c#U}rIXa3Q6DEpY zP!G$`KRi6V!R`!-X|D&*$Q!`Ua*q8z0b$|lPRsogwV3HBnnyZ0R8&;o-K=WT@B7!E zya3)TIQ{=3?#<(&eBbu*K`N;vA$$8~Pbfl#w4suH8A~DCSh8drl_G1aH6(kMLH2D# z$S&E%i0sQ?Fve`ZbKdXw=kt4>@9%m3`@O!OUN5g1H=6st?(4p;<2=vfIL>#%TK+dO z*FDD#%4tCyA}^wFmkEGIMd#{`t1K9&4^o*kPKL0cA+xtc_XeeyT#lCTx(vxLevV(l zFC2Z`ev~^llO^fVurpP3jbCADko?BU?=`f>7rDv+l2;Ol%~u>ZUdH~hcy6_XWsL~u z%OB~h_*PxDyIOBOns*!#z_>wEqdF8z5n7c)lx@%QizDTzj`P2XDlBg@9=ca!W0fJH zyz}r4-xW&}lMhm>?WH*bV75^=qq6g=6}7s_n!5gV%Xr5;UP*2q6ZzSQ?kaB{FmEFD zcv2NbG!kMiUHQV>5U!agba-}4Sc?9zw&#l(R;WC1c)Jpww>u~;XXhi4*Sw%<~kpB#vJVjO3BC1LpURj$9BPTuPz$y)dG9~Fq7yTGg<0(qc}964`eLD5dJ$cLTVippN%)sJkXPX;=H=VzJsv^yM-^UyjFi zFPE?}{p@{7P$FxC43ne_Zbz-3NEt0xV|P$}@-N~OVfzym>A$7}NcD$IFkef#O9mGN z4bX0ehZ&b31B3xB&MTL8CeQDVaj07&BlcZ!=4t!1pNs2xRcyjd^@kqZYSZJ}m=JeT z7AmM$-tnk*#zsD%3!XN6oG)8a?B7vj_`cB9Swd@{_Y%1HsxSUIZh+93j4Rcp<1y z#Eup?%Ej-ya_Pb>ue;x((zW}p6(o5Q4|-mm0pd#EvT$JM=i#9Zfnw1w8HGa}Mg zTHJpnaew9_o8rk}m3(-#C=6!8WG9o%|+r#Z?x(Rx1K>C4NNi6_6fWLKJ+ zFZJva|CZ~L&Hb3XQ7L2lV|909q@>U7)CXD*7RitI27S`kf~~M~3yEDPHqHQeJfQvr z*4;+W^MW^kt#E*^Y2oTEA!I_dFhdiLuOaURM~^3bL0dp@9(y6+bP0Sh6qLHQm7+Y` zudXi+^Wyx;xn#ZDw?7)*g8C5{ON4>wz6XO80Xqo|xTm0IJ2y$_ROvtVqI1u{^WM`- zmIr?z0_hK;?#krz+kp{Rb0@O6jg|Mls(C7VwvO6uXCXu$)$);V>@$k|JW5Pv4wd#b z`r=-9yBV?nu#lSB;HuVo~kGJztj> zna9T_u1j`=O^L2&RsM<&*7lo|sGn%{n!DQeePAxeTi&d}aj>u<^R_S;1F(Bk3RyKp zxU0xpw;f!A3xiZ!ufui+5G=x@#tiWa=+rN1X=%My6<}BkKuxZ;-%u)vUuu2KxRYrt z57_pFuajA9&RqWLzVCp^4i=}yWc>lxx6e>VIqDTjr0j9uC-cs)x}L~rqG}9)kWRCH z^X%A#<*kYPhY*{TtRlf4ZV}(d3TrJhd{0&z+3cN}2FdLg)LKsEU_IfUq134Db~W2e z%9$U#ggtT08|#luuN06@iTx4yz8JS&VQ>vBMBYS2S+|H8T$|Vl%huSpdJf?IGQnMx zu+xlv3Y?Mgc?`A@^j1&&R({g1Vn>*1#X+C*Z#WI;-2l(9 zqwDf1q*ZJ4c+vDm`9e0)PXB(gPitEYE7$ZY69RQrlEwKk zn^2Zh=9%Wvd*JE$DXaIeCUGWxQ1*|nwHlZ8bE;FLSd2mk*fj-6N3K9TP90(VngMTT^q;ce1ocj^}i3L*z}(FShG1lQ4bub!`!^{fzKpCST0| zCyx|q=^w$uLeFO8agQWzN{3%ZMZExz9C#x7r>oA&$b_DA2cw|1vJW3vTU)b#u?BqB zzi+XQ=${c?Dn=GuA#Hx$@!WfP#Nv;^>$REsGS9JF4PkuyP+wGpu10WIJ_an1|c9o?aU2odx?mh{tZ>{x$+d$ufx?CJ@knr3@{^Oms< zxwUTV3(eb>@cklUN)G8L92?ZB5*JY_kNnCt!Yq{^p3Nq((J3318JS3KTu7Jy+l;GR zgaaHwz$hg+G!#lhe0*80o`Dwqk}u`onIqm8??1^Rju!a_uLRwe2`%QWQmr4m)ldfk=Vt ziq`6+v^y~O1QB!jnX0M>f4O1vHyDq5Z0t+i z#zO5U_0W9VA4eF>i0`?uip~7Y;D``%6FUArHg?wS=)wQP;N%V;cN~+9{g~+oLGwO- zMSg@c-j8@XfJOpFXYlGb#`95xEU4@8OVik!Lti&VXAitLoN;kJu0neM3=^{V($odP zkc*s18WK%jGhQW9Zq{!_x8n$sdqBmmv?}kjeLKRRYOC-^cb|T^vyyy%J9nzGdvtz_ zSj=FFFxw`5VZ_Jep8H?Efc2tm+u}l!xeZR=^C-rjNtv~t*E72@*t-=~;&f%)5&Nc3 z>zmUFO55(Y5~6eR*~dL)hfDBAaS#f71D8s2%AC672o z_XRNwSPmb)d`{1xS12;-wu788d*zHuyz7QlY-~r8 z^Skg|I6sbyhbSXE#HHzt%`G@;s0v4w73b9pyRRo4%X*vhg61^)r=I%FPe!Ze{(2Hg z20eueYx*T4ep$QB(T2n-X9i6oYD2NnRc<0>#O&nZ^#yJF2FkG9l=jtBVgGCQtz1-GA+rGaOHD_S;o|625Pkm4S{zgqrLAs+q znCmZQSFx+uKeio@>X`qw?YMUG|IVTBQs8%Vl<{R`PY!9f{%MDEylP|=C;Aa?YD1FW zVX8E}B%D<0*oJkqqB#l>`mc`E*#MQQBEnH;Q6wUi%dgatkfq(dODen92y^3>rsjJ& zb67Ya^UnjGVE*Le`boC^CT>up1L8IUkqszzAm4(eW@}C~E0R1;V`U_vSrBF0827!CGJKV`)X)iJo_Ao)v{Q*aKYa-KCzz|DvvK?tHCX$3 za%a#Xqg=h;GSZ5P^bo6fH2bs?Un8(Lhy`MQ4IuWsQmPSO6d~Bq5b)K;n2ND6 z^y6*V#Yqg0{NAAYep6CUjZvVIEGm(py(~8wJ-&Z;&0?Ro=!5njqy2j;^vm_Kb?@ox zPizdMK;2dwMW+ha(}&O8_dW6oT#i!H(q00k73?ZCp-%iA2y)Jo@AVl2D33$#MR-wo z%)$9!pv=W8m)vYwY}5e!p4Ul9k&rwF*TD|i(WTZ=+BZrpb_)eV6{`X#=_*CP8G{~f zL5h3zBtcwZSzr(dH}^QPVljLBw{PZ1CyB&3d2KaQK%$dN4cA)tQ6!YjC`yWzgMM$l zIU|4u$1oxy!3nznQ|^~9TKipe^iArq`=B*1^yobTDWrU(TrbK>lj(5!t=Ok`Qm$IS zNp>qU#eydg1ZI~2U$nHe+=hSi(Ms@t#e&D;ns%)3*T2uO4d>a0lbOPQqfnobKXTFg?_9&BhN$^&<L+(ClhNKAM40gQB@^~sovmkj1UTizwT#? zSpqWF`>)S-%x|6ENr=4MF?Q+CpFd~m+l#g+ZmzE@&jgX=KlV;{PNP$dd}!s_uA3B; znti8=O|SW%-FxrT_H-$rl|rS6y64w%fY39{1Vavs>W!seF11)%NaYdo-&yn#Ved3n zuC4sCtgLKG?&l%2@2>IDj(4YZJ}&I96{y_D%Nz6;V+=+S6qWNM*fcOpGtr)FgcCt5 zFTFg>LP%o1Rms{S@s(2D#ZS=pVB1M~P4Y?Bold8}^`vx;iUZvPOMt{Ip!djhI6gjvBX1)b`X0O!zmvvCk`S zbT8M61$_$}L&o=33Z9TKe%TiH*&iKWY>rM97<}{BeIBE4<}%W0SIkgcKpyEJxY~45 z6}*OZ-o!g^XjQL?19A$$1= zk&GWUHcI_9%2rmJG~7<{RpPy|%?W3pJ2CHh)9F$<|3mI4vy=u3%}4R6|};g}Dmej@u9* zq_JBS;sj5_%~@N%aYP_(LL|m@MJMv76Y;vH=3gAl2dzA(9U(3T40BjkmizGG!@^1C zOB0-Ye5cb!(xn(n<6qBv8-4#2nvFmdf~lH}AL=I01us$gWURw7Gc#+eTz7P~TrEkTmk%8?5*wZXcT0V)pRYym9;0Kh5L0rK77ABCyri-!1b zf1W0moiMe*=B#}9Vz|c5^2npN>2J3eJEAZ8Pa!L{5d?i{^o1C7{o+~rO~=2shFG-m zcdRt+RNXJl#EXWHmVWV}s#acXuriFj;Gb;d3EV%v#cJyXh`$A{-E8dtXnPa#|MQ0s zgQruTW66g?!&kdhMP+V%ob=w- z?(XAjw*=tDWnF0El~B?gKF_N?o4L(FlDTkezJ>#Rk(NHBBFLL@Gbx6#0kt6`OYWP~ zR>`p3V}%`?52awQqdgG_rzaOUG{U|Ze49u357h|QkLyVPep#-(D5*Rgl2n3e+Cp`< z%zoV7hxXx7aYROLI%H!j$7M0Q@`1=4V|k%70psU^W+qRp$oJBYXngP@r5l)z9)yqV zuh=sfgS`m5v;D{mhc;wlNfdpeL}!52W@UXExBWM|yYJ&vwD=2&I^oBEIQ8jv{)0!( z`t$BaT&uJaL>wx_X(}(GrwDk9wuw$l`x0)K?Izre^XzjFrBy%L)mO9e>4YN?1?0EN z;wwhpZj6q?#<;>5UFY+H`GXEGe6JXZ@qnRn*vdrH&EbqKHIMUx-5Y~%Hsl=!KEhUW z)r41Q55nMGVjd;0ObzgX9^;@b^++@05$+cu5QPc-dtvAtkJE3&YrcffE{j*RTuGwy zZm8mZuWsJ^_4HmrdqAYAcn#wc3KXb!Yzo#d?Qf*Mide@bHi$4$Xty%o`E!J7!}}`# zf}I4SS7yT)ycbRiiItY##EAO88P)ReD1i)O_-K<;=}|>RW1tcFD4j6N4ahb8a`i74 zWAiVA2SOW;h;9G;w3n7Cxtk$viIcVWokNcBo?CYz7iuGi^!Eh6WI|j7#1mXmB3aWq z68bvo@TRG6m9-x%0St%~K>GU^rRiI6d!iHQa`Bq6r0%Qg)gM*U+S3=9cb9HW)U2*w zbGSgm(U$^X_HLr-l`JyIp-hJ_gYR%R#oqK#9V<7Rk|sE93U(HY*d>8?_k{jU)J^fv zu!3GxHgorJ3z4jCWp?-;!VUbn0}@z@E286M@~GssJ$I74=HB9=`q2b{O6q>Yt|X#k zAg{&xJ{F?to;?2j^WKM-dcPP$-fWITx`oBjxrR&U<5ZI9 zT7O;56rK-Oz^!&7)^+f0tctur_M{r$g` z$Tws&i_w^-aVIYd?pVZ}OwKqd;+z#}msI?5+RB4|K#N*B;VFMh zzmm<1M9e%k-G^|S#B3O{U;R$+300Mb!8Ki-CSc``{^^{Cv-6%rlWfq4zs}75>nRdp z9jAh!(IeM+SZze zAE(EM^G~=`(2>uA{2SW~q#3hFVhB}1(dJ!@9!kGMklb?1nS#?o{et@gFj9#gi*{^7 zDo^2KN7W75C5_eYW8=+L)`X6bNAAs2&Y_oy-21}2cOboV1Hy3$EFV|2FRgj+m)rQm z;_tzI=3iWZBJ#WRbx zL=;)NF!cPZ6E9Wj^Vjn7vIo&}{TfBXi;yo}JHG+RgBvfQ;)a=DMDA%wYzwEr=yhGd-T6Z{fvpr!dP3ROUvpY+v{#w*`?RSJ&$ed zx#cIzE)$*=yEPO8&}t{*dvp6bxm?Q*Nip3f*C0l{_t-SxFU;|}qzAv%?W5Z}y%G{ZM%6WejdHzZjKz6`_>F@pvsa*fTL(;lT zCCU?KzwyfF8g~1g6O{?e<=e8=vp#4nv-TsWO{&CtCdDw;!lAuOjy6i z9GyhsO#>WF*99W?oGTj9pYz8jRvU;Zt{hx~R{+ZOtQN&a&wWIgNLFtW5=LfdaTTW9 z(UbHsNN~CjtFFK+zZ{yV%-n{w_JQTMbe$q!t&;JBD(hZ(3q1JugSg%D$0zl;lGu0e zj+NwXY33I65?s9Pf0Eto)?Ma5-zjz{i-RK8-^&rd3GNTB;S@4I*J#^UVrp49(#9ytkm zDI*{8-^zRpwk@a1EWn6QXy=R+<&8Yx_sLRf^~v$O zO~+23z8+Rh(%9{@KtDiqgpBx=J9jwGo;_9#Z76j6_#q``yJ^x{qnVh!S1)@D&ktO}x+Y^2|{$n;#c<&n~ko zD|#NEbBey>+~bJw8g{J0F)-+$eJVFnQqaTUgpnT17Z3Oh@^aAhO#r*Zsf($Ny%tg+`sy!ORO zFdHDRef!?Mz?PO9r@5RNiKu6PL_Ut)G8c5JCg?3tyiY3VIt!m zMci1NDatX*C>wdT6~|+v<52G)yTlmGJb{3>?&Q6QMZeigYWUGwZC>9&b;8hDHgPgP zH+S#Y#^=vx+K1MUeey(sh89^`(sl&i-b++SYp#jKu1KRDht9H#6VSA**Wn9C6 zRb=mGChhLjP86Nf+U55H*3x_T?tQGN;MZ7nbAg+!>?e#v)0IL(Lb_52w9up*NaTD? z4ZpPIwxx=Ry@=WuXlm<(Uk&LD?@^KE@+|9{H>)%#t`tGDmOOOu9XQ8>ZgeUXnoCj9 zLlOi`I0-qFr%!9r+A*#+eTm{bWpjXL5bTtJzC`TMeHDX71nd=F`=y*Nz)j&bveQ zKmgbone>$B08ib9g-Cy=%<*tG1bF$&mnoe+d)G+O9gI8Jz~pp00(_AfEfAn1%0`)K z=*BM&#k+hL(4K{j+stW8G3dp`HYCy;z|EQMmn0I=cBzcX&yZTwK4HnLcisB17(BSb z^ZVi5fxAm@Kf*;eQHeIE7z@kT%w07}!JsNulsP`Ae_~eU!72JyKQ@r;=T{8g-@bGz z5u)l#=H}+r!;HtaOe7*TVz7(Z=4qTRvIZyABw@! zNJ!dv*#;R;TlQU`_RbK3p3H2N)_-rVVe<5ss_+~56+(EkieYljbE5Sh`P@j=+TM;$ zccM*5EeU>z%o4`1=SO4D)D0P)?8?B)pLgAqIw2um_gvC(b0JT3-Z6TGtXEoXgFUt4 zg#{WZY4Kne!-*wPYp3Mt(_ev~uAWrm=kjNn?V%O(CZ1~&BH8 z$%X;+B+YyHLDd*M%!57mB8f6~v`)j^?j{&ecWL^~;q?v`F|oD@k132M4dxgVB2k$M z31ljR0+*xPpEpy5oRhX?y={g*EcYgHtiw_Q0k((-dq(^9q0tKBgO!oK&h$6i>q@CT zRKb0^*RQjIRQ^P@<`hzZfK|g#nk+u-T-X;((7-fs%&LqzxNJL+wi6MULlGYqtK+dz zWa;U^E*9V3 zEQIJp)m~j6JIRGWFg>4qMG_dtXxB0wS|?3&^7GGa8J;Q~YY}E$FR|}UjICOo%SHr1 z`Ynt6fHu{|v&ylT?efEirwPPM*_4E&r~M^%y=Mxb3Cb@w?x5cR=wv@h z64jml+*Q+Ww&p`o7BpO8+J$AmIV9zmE=aq2Adp3W^N z%=**{Cq7D$q*og{)y$@Q4^#YDb6#wXWnpqTA$0V%pf&!~o_N|RMDWzAxtQQw1E*UB z+~bgp=2#4D8Sh|~xu>gpSgx_0eo|}tFiJ;q;Kksp(k$M@^9ex$dJgxXd&eC^!_(_^ zEOtzzV42`uN+R#F-LrmqF?)f7BL=`L?)o&vo>sYl@TXw&2HuyktI&}86wg7XcY@dU zzDmG8h*ytMqBlZd*2KIpjISX~Vg*XXk+E5r8gp9We}8${tG~W4wW6oqg1=%!Ka^Ke zkI}N`zyY3da+AhO#`)yU<3wPyD$7Hof8|@IFrSxHe)alw@^?xP`pVb-;P96&exDq+ zzkmN8-hK^yib-3FCdI4TcVK;bKE-vTrnha(3O=d(aAgf%7~dL|7;YnY+G)|uM4o!t zR5JUrew;sT^Zhk<`OL2@uDtB;4YaPC!zc&+u0k{UA7;~938@SE90`i99@hH zsDiD2s+KZY+C)jf$)vP=|GtkQZ~_e{w|1%h;p4~E4OdFBFN=Axbj^{PaTJ=1_4#vQ zNv@@A#waXro?6*#xL(5tY?xDa$w%CDwUOHVhWvd>Qp3yZJP23!3GQchClk=r?4l>GD170@qAZ&MJG3PD zv_*NW*{DX9IJB;a?n#39Ec7v9>Y;+NwhAHayy2ZEA6q3c(bx)8589l6dkmHb_TcbH zQY$Kwq?l`R@opw^vm7+I$DxFrsef6f?(l_FaYm($-j`;`dJu8!#ED(9UfSr^rH_5& z{-=E81^DSXnTRxryCp4gjF*5Kj=_>-D-kRb)nCu8 zeQ~h%Cg{c%bdFlmG-a%ksv9Wr){V+Op(OeCFuxN=j!=s-|H4Ob$*VDqELx%7EBDf91KcgqD5+8Vb7l%Y?OF{B$GxHC4J3`Yi)e+ym zsU;0RluS`&R1l#B!tIf~>Q4_iJ<=D-3}{4$(+#|}s`~`)hkiL-a^6_c_(LwW0sDTP zkI3)O=i%2_U8jSij$ry~#Yp5zj@&>^tLwwP}e6 z)k@YsRTv`qF_v{8oj84t|B6m&YY`O8p^wrrXby6$x;>Qj=AnRyd6WrKTv$_ueq&Qq zcD^KN{Ob;p1K!G7C`WH}gxB)d9Ss$W$zI1P@A+43w@3_txxI_?(#NnPVv35DKbl5* z7SB2`q6NouMW%W_?CHvAE(hCK29SNTOi}Jrpl0WOKNgm)nV9^#K{RGirTw?gGPZ!IH_wx~lRo3X&4nWdp z5vF~(vYINWJuv|J?c4j{;p-AT#i3L$F;ZHv(p3*1V+uu(n@>Ky{jrmSL!&7|=+51{ zPv_?B!T^15t33_7fcwqi=8g^?$j?KaYmf3M5E=k8zXacNcvKUh+gM!=`V2h0M_>iX zsstd!Ox~>qn`>VA6hA-?^{2R!>24lv7afd~*VKLqwG72W%D^uscBEoM`lH66VrYLE*$x;6e)x#j? z@dmgerr~eI^Zr18FUS!PH;>(dtAk=lc+DlU<=37a>O^57XGeVA!AFi#W`;idp7?G5 zH22-CXGFrP?)T_uWN$yjhyNw?3H>MZ0ZyZd&!9iWz~H4-!*psG8zU_ag++X-JI%8b ztr^^C0cY?iZZB4_wNV8lDIB1QcUE#CZr?VTnInSr9Mc$}?`9jQ(zOps zv@V*`=C+7SB0^<^CmQfO!HObYseK+qa~A6A0@9~)ZrttvAcq8nJ<-yu|5pFTjqi%Y z?&|6{gwDrRozOXu;<0-ZUJhtW)&jtrF`)6TRa8kTB)(BR!FWv24=YDWJ2v=&F*x*F zQvVNr0-BV4Bqzb0*>B7L+0h^ltMTq5CY#+aI+rR6M>lw?7Uc&=zaZavRVCda(5Kgm zXMUDSMhGe&cD#kKnnc@F5`;@-(DXl;AO!1-fd4l6FlA;$%vt{PONfA)xFS#8^=IRs z6a8HB<}NBc%%@w6MD?9KlRjFao2~Z}dUA~?4!69jq8y#YzOv&?{j8w>++&1z)LZM^ zQ;hf}P0c-Z+pF&_&DMxp3|e2{7;7t2no!Ww)B99dxPNh|_!*zXv=i*njJHF07oSG= zZO&8UR;#gCWhT;8k4)x)j+cR3rMI23*4@%h)yroj{>V|1`C$nY2F2re7|l( z5L}}RFBA)%nw}-yLO9Qoke-!#i?Pk{U9FH|sa0M4NL-DZ%)!(2)}c~jnQ8V$TdM37 z2f`*hK=rtv^B;;#88wmpyeo}QP~zn!pYWR7H%%?rcXnCN;c~e1U*tK1xcTpBfhXFg z^ZWPPw6zQsHUt1`rhw0EO{*)ITAO(nxc2coD)i$mP*`mZ2BQPcLzclZ(XUhJVqNfd=i&89oo`m zJQZTUT`9<2L^*UNCFz+`hKNL9bG1UU-Kb9I8Ijzi(`U3z13LAimOmQ0r+DwQG@bkH zyk}%7yCIZUlo6cl+QrW4uez0Wc6cpcv~&H^584rv$9X$i9Ddd#J}^!QEGI%R4bd$S zqMkV58$J+o5Rw2b18EXxL`69TxSp}GBKt-8jo+fMkSXcMwPYD)tj{f@5|`0u|fD z8BKD}cvPBNyA_{O0{c70-X+2=>hj5ogAv!9RM^NYHmy!t*ii879^Yy12nU;cQHXBX zmf~3m(KulO5k>PX5k(*#DZLNP%W!ouRhLlkoC};k<7)4yk3U(d^aTn>0s%#gXy~IZ z4Z+`zG&*W_iu!nu9(9rbosc1mxVBP_=lJtbb+hmjWK`%r}U9lZgDLO`dnKYOALw;6+_Y{X#SVhQxm!!ieb$1&@x`lYQM z$Po-5q2KaW40ffsk1~=V87CUjs&J&po=suhPxXrjhp(L3FU1w+8qzUli+=2p>I7?E z^CeJ~sMBdwM(fcK>a>H!dy+1c!k*+z}u znc84V@)CP!pX51f-^2f(;Aew}fQtKfR8=l+`R@wCqJ+qmzvGAE{~+DrWf8LjX?5~S zU(LnAwa((WCETqd;rS?Y+SWsRlCc<1z0zoUOhG4{XetK?k4RN-p~GsZp*Dq+5f{~X zX4NoaB%?)RIi)S{!RG|aS$hl^VEotzVW^}9&DBth=U>Tox%l>dk)@}t7i1u-IID4k zY5Vz;7CQdCkr2^bOLC5R$h_Bf7$@_fsi6gHBVfInYe|ciLYKGQ>-xTsT@hlv)|8XR z@Tr3~L_d}MW2uP>?smDo_fjH)c&PVjZMe+HQfWw>`}{;b1c%8JC(a~X!QAe6Clu{J zqv>9`(E`z1{M4(&5U!JBr^I%?uV#FddPbM%ffUUeCI$v*eE=115G#KI*6|DFBJI#C zE?}tr!oSTZPQm^2L1kaBYI%>8pPz6bU2cNzVhIJks-g{V$$rZhM8%24!>NRlXnw8gdb?~o^}A;#`Gq_PLeMS~74 z;Bd};G;e#gRY7oF-Idvf=yq!zW$M~bIm5s#lqC=#Atf)>9={CUkLr=aO5m7u$Zgem zbJ+qS3q(M#o$P`E!$S`G`>s4zVQku+!1h>?l}FFA8U(qq1Ku~?I_3aZrm2<3wSWIN z@C<(-XB-KrHRded!@vi11@Gh`7VE=nXBHpsh#&R#og9B%cgNt6w~1eP&-L*qosFSm zqq8&4PRVT}cAv!m(0ks;FMp#9|EP=?8ebpua_KN_qaVp#l`oV>tRqIs8GTngqRcdJm>xB|AOb)n|= zIxfyGX2k%yi=DOa6H7XIljW!Els$G2$`LMv4;ShK4OGzuwfbglTg&-d% zr7)rjmWP8fr{P=lMe<7CJ}>VdCp7(~!3U{nZB{+LXrTI08&YBlb<1w0*kjRXz(MXo z^b65@rHFy_-i|%#1#hF_EOZc3ZSl@PrG*~B&$gzFp#v2Zab{1pKp)lKvz{4Q3>R;Z z^^4Q!ZCEIde`5p;K1tXU(*f;Ce4)lDER&J%Rzgw|F6V!N!)@7cJ6du}aZsqSlC`_6 zJSE9NkWa5@(Ek8uV=B&5kh>?>|M7ki5eyLTjzGUqjY#3=oO?A$KoMzxK41(c?(84Y zQ>VU9cx3mU0rY-f?sx-O*{9+Gel}64P(g2`RCglZGB23)vYPY~&YI{_KdxO~CGNTw zz`V9c<>~1Zx2}_7B05*6Kid0LS}&Ty&&xhfKRB=Ne))^seJd!JqbIVAeVGEHSi8lI z76(#S34~jvJCFrlNYke#G0jBOnqqrI`;lF^vYzk zaHu45wLcZ1bHJQ3GrgSTIh;)2S5DTtd6VmJTIn?{Exmu|lV{Ifu*1!(KNxUyQ+F}c z2=oxYobg@$oIOzmUsAvMvh#Pmc9>^z{0k|@d_)&)o|PcVTa0yIU@F7~+O)?V*Q+Hp z+kkbY$HKtxirl4m49|<*d{3b#wcTLgIk(DfUhy$+1G@4sL znI4`|tW3w3PYeI@-6~q6aK~>)3Vs&$?unCB%{}=gJY#Un{*kqScFLN(jEv6a-SY*T zc6>mFTN9LAzp1e3q4;92(5_e%3{xJQz!R`wf#RgqY_a-|h**ORu#b8ty(0+4>lsxszkw znp;M8eL05A2p%zm09Z_A&}mNZ%er5NboRwWd}zo{^sv)?WvCH@AV_y2P;m*7X; zqw$KG2@1Mp^bhafr`i4#!rA`l1dO*UMR~OG`+__{erm#TH$mP>1xnDFjs$O32WW2# zNUSW%@3kf1gYK;h?sNB~eK(iAxfB`DtPOV&LIE;E(C--C&pH53Kfj&NBM^|Y&gbd| zrGXVV$SC7A623vlBj^-bf9~xv15^q_Lyq6hm!^(=Aj!~6-eFIICq=mOQo2+0p#NjT z*xPj5ks2Rk_u+H9WY%7{EdsgRCIzdbIU@0e8Wy%Ynf9ZCDnII_nu!Jvh*R)oTQ(gv zBuT7kaRNGLC zErq^7^4ZVBb7GaS%3rPRZq0u`QU+N+d#o>dS=55p2f;iZf>FQ%o*E$k6d;w z6xgd{+igAh@$i*wztU8Zt26AkD^-j(X5nfxzT1zJlE7%zkn_)| z|JAE63`(7ZdQ|K<)78lgYPT18u{4=Rg0|HNlQUlTOM3S&Q8(ecu~Ge4b%X!HZnf77 zOv^}n8Ihn+?qB0WvmYN0zEcLTc^e8IbE(%kr$+nU9KX5E`~wk9^k-Nkd-3z~6}2FN z9;7+i?8mH6tl9-gfYCnFJ+A?L*}j1!-Pm_;aE9CU9t3oMXF#sZCiWh)g41GRY9NWp z9rn8*@&az_i;bWB1k^RSoxvdyS3wR{P5sPz_nK{{wN*0D0jtJ{h8M(9H%Cvpp$B=+ z%0p6lWcZY%D3_7)RQi@)spK5CS9yN0wB@p@TK`DW!=XfBN3T|#-%3wSl%Ek8O`Qiz zCNPiGL(v%=R3)DchSl{s0S;KG0MZA6M5VXV5$MSV(ESrS$Q5n$j^AAG(b4|hXN*$! z@+!*?f6mUkOI*awYOcie?%gAxuy_fb-piL{pu5Sfcsb1*^nVz03`k2oe(YE<7!HCb zu)P8gq&UW@DNi!X=d5=NTYi=G^Bzx7CoEs;Jag>$@#`q^5(&droco-mvu7Bqf};!A z`FtJK8qe-@*ttnE_Fb*x>fTCMr`?kGkz;pQS0UTO8w;ekMPm<| znb6aN2M+vksr-xa(#Spui+VSa@4unaUWykI#Q=nsP!NK>v+vPrJH%Bd9Z#c=^2vCJ zZQp$`z{mBZ6^L37%6R0QSiJaHf*VF6Q+J_Uhy5J-Wk`h6vXpAEf&Z$>X9>R_+57IW z@6H{TE=+GUY87m0ZH+HBWiPE-q8Q(KXQX03*awmfBYX)=i4gEovhVlex*93GM?2{9 zXTM%clU0I}_L9I*Uhy-Hh^;i!S~{K%L3Kq^TiYyVuv|AK4l83K{$q6SL%p(A8#lk;ZJgBRju?d#*IJ_>?5lA6W25wH8! z%vjIfk8|JG75emmpE>>6m;0`vZ)2jMN9zSdmrS8$g|y74VZ3v-M37Ek&cSB{o#qt4S1}u zyV>?6j^z?`d;*u&@rwH;Vsq+ydaj>$e%Q7CA+R$}_U13w6&zTWLqKrwg6lCkhk*dd zMyMwQwt~_RZQKc9^no+3#!napRw7AjZuxU}JDZ^SsmR9Sa8RV>s4LZ2Y5ID)zJh^( zZ&iSF2b+Bk2V(^n70QV#$~JTFOk#av6jzQ8lq7!?9 z;K0|nQMQ^*>O2^UI?e+J0-@TNOFq&-VP(%}zci%EaoA`)@Ef%%4(gZ3L3{wA7$D}O zQd0W{2M6PjF&2PfEVn#yzo+7z>Ksc)rs8~2Lq*UX2Q_-}HSF8pmA8eH1WwX{Ir!^C zY%@gwa)?)N8yS68Q`hjR67*Nqw^>t%W%f-{v`tHMwI1)@JE1~o%(u)Q|Ct{cx6<9* zLLOkF{9JP8O*GP<@6zIXA@}%+f=);stWtYqkHu1wcOp_`&2e3f^!*?O2#Qe=tECBoC&+TrFgW|~*8 z>PoRy(_S$669ucXU1MTA_sxPqCN&*Nfv{KizW1pbkdg99V#6dQw5}C(-F}_YRDK)K zz^9_3du(hl#WLW{k8z*!9x9n&DbNnP>Ec{zj^B$>>7L^82j8x!F6zt(sml87Q80MW zVq_8r871$kZAu76XM+nq8#(EVCt*>NvFX@0CRWj-f{=2Xx|OA0HxKP=7)2q5Dd8pP z-NpBMsGsp3iepznFq^hentbyW%O%i#clQw0UY9?7jnx-52d~r1FyZ2>-OvN9=KKNe z3Povoftf1V)7zTO*zV{nC!%SOp`*J6tXg@)40PO^t#7Yz7|<^LnpPv2Jmf!a-rqjl ztw^8!nIS_z;Y%Y;Lx$t&3G!aHJ-R)j^sMNF9TGzRnd^riYjQuPRUNu&--pjj9{%*lPE$ix)(#9FxI~eARnK?O({rPo#d?*+%Y-43jw(rlY z5PSofHc+$NMdd&6r}K_g)qaKE9!IS^KD-1gk}zwdO}DcBuVX;F0HJ-F{~e5XaV4}Jhc0Hjpr8oJn9~k&0+8pC zi0r&Y@|@|q43Z5?u*GRZ?w6Uwg82>8d3NdQ)r>w(@!FP>R!O`2?A2D8GktrzJ|XNq zhj0H7AL~9}hABzNWRh5rqHXSr9T_1YxnvJ>?i;~8aa}mM?VZT$t>^W7iXZr_dFx!n zif0pH%elPm9j~pNM4^}a&T&}cEWQka`EJu%7uUK}D~hwsVk{tahxnjx z+4}a;k{WovB6{L{!PCj8v{@d+9bir!0j@PulCNV|fd|M9?X=VEX+0ID+_n*JBKM5e ziJx0PWShH0?Fh^_P`j0}&x9+}%Y^Uf5l03LxN+$*(+Bkz9u4{L{7qvL1f?`0){l%!uzfxEYEmqR7!d+PNJ1 zwI8-dCQVj$*=Kxot2F;mGgj4YJInecDSO?RX@XTHI8%1{GlC@mW+Xd;5jyRm)|E2i zmReMhi0Ox%8>nGuw+zWvvLo!Yo)CDF6w#0Z`jqbV52v5=HLA@y%NLHpQN1Vs$O~U< z8T>2G3H-l%h%XEf1Z_$6=JzE}Z|{oR^zXkgw~W?alN6yiF>F70_{b5va&Wo=wSA>0 z#(o&YX74J9#$T+%y*7Ub0bjITM-k!^E`$_VF7=l{gN%oxyeS6Ie<)YpB=!O%s(zlK zgDO23CP=+qaR?~Fe}-kiXTrT;xT^m@ti5+sQ{C4!8c-BLMU*C0KtMVuO{!9rA|O%( z0TBVIk=_Xk(jp+e69MTZAiV~WB3)|eNC)XPl#tw==lQ+wckegu7~gxxxPM4;PL9dh zr|h%lT64{5Q0tT(>xTgfK&C#sBtQ~}%iKNrq08zG+&T)U)p#sOz;qEb z_rBylcZBe#KsUmK_Vt>zb*6dlvl4`<1`DgKiLiP@vTTbe9g~#n;M<%3K@WefPLMvX z!I*bObF>WA{QB}wFMxLzrfhOES)*lr8RgOfZ9}m%sqm%k81?SEL%UZ`yaCSm9FI>w zp&8)Hb1Tcx#Sumi(_CN+5a%T`MEd8QQIM1GOI$%mds7bn_N@?jBwYzQ3&H@uuqR!{ zC18Pejl-DpoH9L0&5UQW~12Ra?AU8%jNAu){y<^ z7-|S;U%Qczc20Zgu*N@$y$<4wBgZ$s3(VW{An^3Qp@_hNkODC1h=1Ol{5RU!^6^|4x;2{);O>2cqqLnynMG4^G(OdeILSB&kZS z)OIUO^SGGwcmyfh30n)CC95oEiEpw9!y;2eUpAN+24&y!1}7Aqi8(KXZPogF~|$f9Z|w6wHYH8pgQQl}+VrE`b? z2wmPC(r?2FhZbMY$%L5|q9e2~fV8{qO@V;AQ-WJ+Pl|Z|;c>W&N4htQuSFFWk-C?+ z%E0(B;QHl#s4}is_A(!6?eG*mHzkG;^GId21N}wJ2qRHkTIE#Zi@v7x!MC#@BXi9G zSx_+eO~V~z-?|3-<=mEMi=B%%4Xf5?;s;1v*009KTYrbLFQNedcYy2H$^IB6O1|A2 zk@ZJJt6E}D_lNbJ%m-gYj`TgC`zz6ylC&Q(i{bDn&NLp^o47$W!BAju#gGa68)yJc z*GmItA0d%IxupvS=0QUpTzH!JJ}}E5_Rrv)BiCzSzodRU@C-`#86<+KXlcby=?pV5 zh^@;s_`=b}$#;axD~NaCGqAeZ-19_!*m_Y?rcwQogvWA`_fAai>Qu~K!KWp08xEVY2V6Q$z^aN3_*HWSN zeqy}6SAQ7Qn|HDZX>e&^7T+@{m6yc4;HOWKZ}k04zWra9I) zE=@#!HTb3AizJ@DrU-H&7*ZYRI`=}U%j6~;>_}Q!u#NZIune;$l?dLn!WUVl@!rR* zf2OPyt*jWX3ESYBBH%r6iFX+pSMcEIWIs!+c9`ZN9A#iEsy`uHd9+o({RVgs%3A!w zrcK!3!aE7j$;T9`j*vATHa-CuHOg;}ME7*mE^_kxdo^i*Yq6lw8>5=y16+S~Khp^lgM5M_;I0H<_AQmuODl(N!!xLehwLIvq z1kikLNc4cGSHC&JcjpF~gK1=~DAL@acU|J>hXVh&M)_nxH!0Vw=ii@G$!P8OXI>f| zZHNfzGa*%k9|J5@^QY(PguD9Mw9e+*4~Q^YSo z1g3wUuxeiW}s7x^YWWC??q>%Ql7S~*JHpTQodSGD!{WcoO0v>fMb$?ob z!Au+|VG&eOphH6i(Uc~5nSnPXMa3)I)+9Z7C$>$*mmrk0pMS!MV6EVv-I_r1bo|Q( zx*Ziop9g)j)4yMg?Z@n_Y`n!jlzIu;edhbeJ4wC$qEYo3`M9*@1^pi}j^-=E$h>qh?sN;vQ{86g`~!4-X4B>%%w)-)iC|8kOi{S8U1MxE(n;{ z`|ff`<+MNwCP^wl>OjZcz-)UGrzSi_ZPl$qnh)FRZOZP%cv$5g_}VDJo2m}6><;w` zr?Qn!zNu~NXQzIY*9XI=9fEWJA7J3NDE{Nndt)!-911HFASQ9!T2#OvuP^t)=1fy! z&(Z8pF`e+6z-3-JxKKCFL2Sm$|B1MY9Ts$C9m@Hls=xJ zES&Jn_p$~HBf-YWlO2}EK_=(-N4uq`;{Oe`7fze*L<@qT52(QXuZn`(`BXJ@_7d01 z_u=#VChk3^-pZZ$45lD@B&C76tZKg=gfpzXgAQX+)yf>; z!gRWF*0{n(qm%Jq=BBaGT`5~mAZC=zf@q2Kn%b|^6w`mP>lGxqS13twN9(jH{0lz# z0UC}JV7B;*V;Z)E?ZI zmc{4QZ&dF13CKl$EGHu@Sw;>u7J~<}?J+jt*>Ul4EmnGiblBw;_GzOu_78J{K&9UT z`JSKxY=K;?t+7~Uzw%+KW{%80zx;BI9hi0)rQFoPokbj;6Ff$Dh(w*)qjQ9zk0??jW9t@*jh}-MS_CIy6nlN)IxFqw1a#po@i>) z;taAuH_Y#7EXdf79eAe1O}9DLQQh|X59_LY6lc`gI458nc2#C_FD~iyFPy=&lskjG zg1Z4b9*=yB(M|IKD2@_jShXf57L7#h#)K@kXBr8?rrE4N(aH$K!qn&IlM^o4qff^O zF0xjpp8drPJoST_Rq&T%rs)=?N^%~S3mASgyfz4FHmFJO7K_#l$`&08!{fz z=uH7HFvLS})Ba!Yk=@L^8|_N<;&+dOUe`N)(QBe{(swOqn(Je8Zf7LXbBQ7svj^E8 zlz)Hbxsel~=k{=U_Yv7CZ)C0lh6@f!NR>jGNFH0l4_Guzy5dSjm#T7&Hrpk%Bslv!k_ZrExsfQ z1>{d(Ht}ePZwI=huN+707LPigNXU7hsOslFi?RzXsYI$AKzX72VVS;sPur`YcS8-g4}~4(-A& zEX{gq;ZB77@~0-EFT)ZpIE2_x&=9elhi!IvSZM3hmAq?UUjG%Yrk%Y9du z-+nK!eNP&z^Or|k*GU`zoQZub{^f{O0guGLFI@|LxniS76r$ z-fj^Ay8WkYu-I~l+j}?kGOQHH!qJ^^Mfx-z%=1p2Zmj7Bs3r7YfS?yl2iFe|#UdEQ zBS0uqf7f6)DCG|}WM1rHA&*?9kUujlrL;R91p%Dn&q_@2=93+m$y=SP#* z52aXHf7A>GeEj%%vQk9mXGJ8a=7eu0lrO_@%l4noqn@4wo1cht-~~X5?*h;QmIrx~ zieo7uaN|Kx^*kdN!7un6zKF+9*3| zNFRuFL1i1LoB%tgIPor6^s+;T+!9L6y<4t!u9qan z74j9m&H?%DL`i7BSaXrQ1Szw;q`$#I%eVJJwwM{8)246mj;rF`T6lCf$Gd?+24q7Q zexee<612_Gz{0E@k>%zP8-Kb#M}O*%Q4`+B^7YquFqoCSP<>-jE2s6w6Pw=DhtA(X zibBt4zD8kF!U(qlooTNNufL#BcSIA9PeCvcH{fb@7V*m~LGPhbz)d9@UJA0MHp}5P z4!ayYcu4BJj8)(3X}!C@cl+0l-K(%eXQ&UqFfjhahGUJ!;uS2mS0L>; z{arojLjKmTsQ3sxIOb&_^_4-uhwphX7eQNV5DkB$u>01lkuxib`h<+g@bEa$On!rg z#!{N-*0`{@29tQa5^fv+-*wXe$03y!^Z4?QhSbM^Kq47Qxjtq+e8 zk`8=@OK|-ctiy=WX(hwO5t)fQrZC#ARJTgx^9WB ze%?kKxq#B1y^!Ei`+)|X|6gdUD_n30%Uk&-i)LRiSuX;=nDoGaS5xrS zfsK3z>WWDRio>w`pFNYrw>IYcV!PWw3wx~NBxqK+{^-@Nh2ch$)4_3dJp?4CnTH0i z00r?IWIR0K?52ApKS4rAekQOt+}}Dbgi;73l2(5cEpQ<+_qWv%JYgG!SSbkIObAil zp41(ro28*o(z5ArXkz`~{I02%_RGTKo1WN}KEsakhZ%jc)gQc5w$fqlFnqPUr@MCd z?^}n~bH@p^KZW?42&WSuqq%AKS?VLR5Nql54T0uGa;M7o#GD8pSD>W;GP)ur@6SL{ zNeyIm@9{XT^4{pVFHW2j2ZyfT6eeEYIuXa@XX*hlm|I#W?q8v^O$4*Qd1z~nnnp@D z%*{;A6{y;#n=Jv!9jI46o!~;D z@Fe?6kM`M>z-;W1|+xa>%4K} zRWN6$4i(3#jTdD}w9d`N?LVdQupx%XM5Ju>ix@7$(VeaGdKNs}jE+(U2G%79JrdaL z^SSG?}>iWGTBUnr`Oyn&%2|qSlgKACzoyT*C9dNSJ*n+60lP5aahla zb^6b5sIGL^a)Za43)c455@HWId?x2;s>+Oa+SN5)`p`Too}r`$g>*%FCHW!g1j7vj z6>=6+wVV+?mEcyKNkKm8+c~FKJ&M{x%BW%nreZHrE(+d`L!Nc@^#y58a<+GPB2TTZ zgBeN^R~ft~czp@+g&|e~SNR+e^K$jCVZ@ktnjyPfuYs>n&mfnnDvT?*+=n>lZWpR5 zZ$M=T?C;&XcL}^V^WBjud!vKxS=7wFBCT00{&e*iP1A*v*h+<283eL}r=Ow%w66SY>MPze{*W)x`lKjnH2LRWQMYx3nvxszzZWd)*( zWU1A+;6*)Lvl%=izv|(Ler`Xqvnz`I@}+r^q5nt&js#__mw=2H6Wb&P--9wU;U^xQ z&~~To&#LmEv7(xk6m5T%s-U3Z6lZvLa~ZS=;Me62RXa+&v0%TR2sR#*4Xrb6t6Exe zg0niHxNBj}?WOXbyV;+C>ox5BFk!cMa6sJb1YdaGnJ{(P>g1yOjHzlS);7TKB%#uN zk_Pf6KE9npWpCTxde`E##+s7z`<*PTkxBUS!iO z8UgtjEIV@;Kg56RGF$SPm#j7|=D#9J`4G>k+&ee_6PgM~{?DV-5P8ti{GT}XlNOQk zf8toO{|;9FC*kiFiNTwetMMSJ-E~O#H^!AuO{48^zj@2DlyFP!%#)<|+JrsJwZ*sm zBC6H!NuD=UdKgC5cL9>_6U*3G@=ts+4nj6EHB02h8lVxxHGbXlV z9gW9RHGjAZ*=3ocJOcbGlfea17^PcNG~2oFHbCi-^qh%mTGmm$XYq&pK6{<- z8)KK~2qox{_5I5Ov+D*f5ywqRFr>L^n@!&8_Q>YY$CnF%?X=*3TwR*2T&q$l|7Jgs z-1E4rR8ht@{fEnuXHK01;|i$@Py4sW)^g|6|*&eSDei$n-qi=-XG&BsC2avWO~ts6+n+l6Z*ZQ5RB zQQYrBt*_u!X`8p{L{4ys@4U&PIi$Cot{HTWuu=BfD0h^hzm%T~Ld2Du-|FgO-Sef1 zm(^n#iFEc_VM}g}-#!g6S0+ua*laRzz%wbL-BmUDy#_ZyEI2lCxGcvJ#cn1jc>2q_ zTz zBL#8ny*A0PCsM~vLM&0n_#lC~>P+vqRwCgnydpV^OCO%2Xuy=D_ZLkZoiIkhH_Ugj zLN8F`c1BNAX=Q(0PjK=OQRRz3?w2>l!#L_#D4JMaT!0w943sZ>v+yOZLsr*==(9rn zLZhrVGI*rP>D#i45Pw=Aucy2nZ+tY@axCnEJ3wnVL~K?#ThD;f<5bHhP^D@-NGb7;!FA_3%#wTsMVrny0EpJ43#e4qv_%NaDJmEcE{q_r9R~SaPTLy=QUV3>+ z!k-P69UQm>DKrP-!&N}Bx3ozSI#g!9%~W~p(e7l=7z6o|%nZ-kW~Metw3#zxBn+S} zO{M8?Cbp2BgHu7$NeQRGj*|gEQ1m5`$?a3B~-pQe@#0^?aT4 zmXzS4-`kp!HNZTFKvFx;Ss-8kToyFrWsS#u3I40|xaJt@$jiUyvO8;%CrceT$g&q$ zf&4VDwj809I8mYH(>YZ}I`r}L(qC#b0Ix22jht{lafygvO7Wz+Ou<}%Q_NQR!6yO3 z`SgOESfKfX2(s>QnrBTGHi$qL1DQvMsl4HPng>}Uye*df>DSVrn~3l>--|sc3x;D5 zYu3N)F|wV#f3S~+gCz0MWQM{qMsPN3M_v|dSS3GqTe$5K#6#rpaofmEsI-(C6K z=2D9K^R!!M&d;ThNcK) zoiW;_fb%gb-bevFCIk76stoMq%xg_rOr^7o;>%tMf>|#iGv@C$27JL$pVap2!NsSm zDKnQtLqo4`$KWTc!Z#;=(8Q=2sSx4>yV#0zf|o|SgfhA!Kl;x6aRKSBl;w5uHW4W|URu8!ThS%8!S=V@JaTlU@ae^0gLGzntmYrFIM-W%qia(Ok>E6ZzW` zcg}wB9K2tplu;d%Hk+0?Oo>R6PE4BI61dM?V{+AQNZ6T#2nrGoZGgr4+g?{6+%K1> z^;`*yLT(!dth?74CHz4b$JmHp`@4OmsC)4_vLLNQ101h_e%IxiR!=dUxAc7W zcgiQHHQL`bejBdT0t1FX%s;TsuGj;b!XRj2V>p0SxX6rwcV&L(Ucsl%uMZ(dqobF1 z4m*r)3_P1e+*hjDZ$+~}e;66D+<1QDlcUH-Croi$GTD zS3mmb>Q|8Ja@n3?0=oFr&P{_2IMqo&Uhl}ZZIW+!7!#X#^{HH)BQK>GRX+xn`!aAL z?&2BEoPo&G9yZ2obV)|-+v5v=Rx&nNh&z8;556GZ_Oo?8P~)tFrO4*Xj5v0YGVwNE zdL{6{G`04lzq5+gaMk7I;=dmgkD;PzcH6b3Kb@4Ws7Wne2c` z9+ZGYUWcVjT1a`4_ZQzPdfyzp+7J@ee*k+rZdK?g=1c)TB$bnsD_LPXXTJTSuvDtl z3u1JrEJ+roO2z$bi97yCI?`$iG?lyo7&cMNJ~?M!4mfgIgC*cyhWv6QXj~TvU;`ay z6J(wYJUt&`&(A-#vR8(B;8*-6;(@^oXbqVG&-N`9jrZu`<$E(Qn&J{P((j!2{T_qn z)ZJB?9YZA&!zt5HIEx4Ie3QfH6gbL*4V$m}>P+*~gt6npP2v=G*RDI4Ak~%jM1mAo zOqg$8Ki~d7VSJ$(Pu~c1U;x|p1Ia=7(#SV0B46_l=LFNC_Vc$HHRDPZr~7y27bw0< zwP-G=Kl46*HTx_UKyj|5ly$-H5>C-A7du9c4_DW~OJPyW^GtOawZUs+K~SgOnraKbiV&DZ2zy+F{E04R*Z9)&0tN>n>L` zkFWP9l^)pY!t_08P5sT@cD@X|I&j|8+uK&Z-P8@aBO*ctO3C;5`Kjs4S#zGHb%Bnu zb&+lTYi(!evk!yyUL2t?GTMIG7a{MnbLdr2miNr(bBsqlJm*{ef}B1Gd+=C^N|Yfo z+SMj?lvA~JuPNw;&mCj-gc$b|x(fef{4q+;UY}Al!MoMwX}uVF6}pu>E2H^!est!T zKUapwVe=ZwJN*WIe`;c9K=1PSpqu_Ja6m>H^QXD=hZ{VdtxtJhdrTB(4cgnoO{9xB} z3<^&@>ISN^fUEimREHst-oE`-Y7lRb{ATTMTf*m+GdT>UP@_q$^&0|SIbMqB6^4cs z7SZ$nxuT~NkX*ns{6e1|i7%)zVI(=-MMN5LKW(R*vnQ^p?jI_)C;s9*v9o*!GpT*c z1m9zQ-DY6u#!Bv{p0BBaS9qq0xAr76=`ZZ1W+BR6XWg`uYhe>dHwOO+WZTr4d)ki# zepWvYrJL}PsbaLtId*q`8J7ELo0Pr8!UOAKJ;Kme+1y$nJ}8{J@6vfi4HbWLnVu}Q zJSm7mj8;zn<3_pZn_0AY`p*YB*?uC+!YUP^UYVV{7mQ9`X_fekX={qy8Yn>`1%ctR zO=|RQAOd0PcS52{D-%CotFYUa@(sN{vK3(LBAJ$Jf<(Gzul=>YHFhAHa@VMTfeLkA zx|QbSYb2tSK(6s;Z6REaS2fCg`D(JKM`oR~?eVF|k7Ewo8vIQ^8SziXd`*Em8mc!| z(dtjGnuzry+R2cytQ&^p6%I?0Dkf?JcBWSx#e`!nms_%mH_c@5AwQC_$dfu=a9-{) zgM1#kp1W(~2}a~9X?&)i?#G6)QR2Y40hWgkXrZO;M__c{{BDE`u`Wq{{L38`k#LB`|p5x zysW-SNH~0JT0y|lW$@U2K3AoJFDTSM1u!mU<4BZ1Vd!bCN3}16yBBBFRL4?Hcu< z8;E~sR$XH8l7Pbf6EtB0@WlHx;iumDxw*#jADL;&qx7wiou*DlCzprGlN6bzD2J4Y zwSx)iORhWG$3IXedC{r-&P4pZlE;Jm#S z#;p)aE{J!En9%k>tMoQG+%Cly%!>YnfA&V0CAaYH!8if`S>YMuG86?33%pZnk)ljA z^I3G-+@evqtU#jZf50mMoS&9aE1T8ucgYOy{rCn!R4Z!ML*dCJ4lrK0zghUj3futo zoUT1N938ofWRBv-q;^C{pJLecp?jL^-lX_RO!^k7x8bZp9fQU$d6!af`51t(rTsRMxUhW|}ip2L|{sKL*X&Fh9!3Bfo<{Cd_7r)oB)x8h;g& zmQky?@Y(v79vCE~G&xCtbSL#R7d;Wthv&K);V*P`*hwy4Bs-bjv-uUXL~P~h5fr$? zK#~*^@h}BI&9XM$S(+-r#VVx^Yd+CaUGbdcv*m^2!ttHswZR<^;mvNOS_C_%>O!qA z&Q)^xp))7VdRywnUz>hKLuGRx-$=aq@T^0z(M=6o{{8(*PZBU6jf!0jc;yiYC;J1b zmAH9Z!9ng7i@+ydDjl_9K54rsID3@v;!#2{gC7s2j+)!{OgI?N8_brz=0eoC!x z$!L@I_j~lra>l0~>o#4e_&r$Ty=ZcxsG#-3!445>N^mMbHlHYnO?UChSW=2n{if*9 zvT}O*DCSFS;!z%T0FCcr6=>K$e9n@cKv+X!>~N}jpXyHi$d;;%6H1ZBbnjP81IuCx zO)i_HeCIs*pHfm4RrR26i-)g|sC-pvKH2#E-P%%0j8`Tap^I|Du&L{u=$k2aO~Zve zzo~_OM8Cje0t|ljvZfpIN)9uIdVx#e`JR`McbKg9$r|48hPU;&%6~o^R9WNTKwbt{ z0EZEJF0|p9CY;^0Lm*F_E!Tz8QnR7`fXh{hCk2F?VKk8YJO_Hj8C_S1CEj#Tm(%lrd`|wm#ES~@UQ+4#& zVTf-WlYFu{*-@pg_|>kW!;$DCdxeV!?PB$0rLo2X8>{Nwg$}DKwkwjQ!v_Xf*@eU% zZ6SUiGGsQJI=9WXa}rHS+aTC2s@_G@3+Ol2`J_5wgXpBB{fegGZ!QC@YMPo>0EhB{ z=>b68@$3iZtl|BN{{Y*DT&b2BsfmvHh3><-f)&Mh0Bqf1+X3!p=PF~k-{3H|!6Vie zvFlZ91^^l>Fbm;+d1RcR*IYMNd$MR)(2;uh#8@z>2r?EDox(p7ZgbjV@7*$X<15}W zM916RG7PzvYW(YTCO3_wxo8uwon`(T(=;jk-pwrFs3WmPI4shS$c^gt(}x3g=dI=v z9y`EhiAnMs?*0x06ev!T5is19buPwRVm!J38|>9dp#i8!ipI>a^c72qA*C2-E}x3n zGn7;699Sy-mPIj%Jws8>Cw!<5#$xcbMJj>I%5sK{Y<5Q*Z!!?u1Pe+^-6(3Wcu3loB!gIgF>RvKxQ1zwN9b zda#WeL}zlWIT=h3h-<^}{88}h93?;Q_u@|rtQ_Cn{B3*T%j#h~=N@usJ<%k0>dYTJ zTfm@nB=I?LosclrltWMH?g8YZ6gSF{RS)xI`=d^$RJoM!_tSPojNjvI^SWTb}PcBZbI%WpgKsLrd0BYGNwQ|AC|gXE`wjwb0HlE|XLZG(9cD9iVsU z4Y0(Mc>f1dZNN11PG85^AipyP+AMTa&)6XJI<(@J)1JlC(InLoxkD{^m)vKf0AZnB zaP=6!s{^1Znftao0Pqe`ut@A)vUOBcGG7x!L0f|V{!QkSCHXLrQhb*7m*%8;(b|{d zsRlsgdYV2euEKL>eGX@09|8!GqC7(?(6V52zw4A%t>!pe(`DeQte`9Z~DfX zMC)G|w!bAue0K$9_b=kMD6F&L#CxTgfGz13UM8OAy~SzhUwHB6;%dexY`e?w)d2`8bi}rz z*nxBH6P%#ZDE{U=u<1>n-g5Zoc~D1V1I`QNwe*kJ?fub26yC6o`7?SJ=DnJA5d9o2 zZ~c(4M!gf;{VDNgSvnY6S+mf2H7R+Mn&MW{t9k@7PM6KOfAP%^_fQ-6pPYp{H!Su@ z(xro|m7Z#9Vu;^g1M(Qhnn-E{rxZ4H2OYeB8zMdUz+fL~`ogrl@5OiAxflES&*}E6 zB?HH-OK-ND0zw+bjgE0Ar|)HTBq@Lo3!khkGiX#A@xc*djVg!fFkbzV_nYgWp?3_h zIBo!!0Z`R^3MmEg9H4SU0)O1&vorJE`L^U)x$rWN-8XLYtyk=(yWG8kNdeca2*7yI z*GPnJdX^>`XI$$rXV{z+t`BP zD+BkSX}l}2->FWQAQVj^EE(d#^wlfroo((&J|c)u(nPFxgr%>;@uNu0fwFeR;B4+q zmG2az+ocni1-H0_R;}0fj4{ri4yT{v2L)Oh% zm=q9 ze7TbzP<4e<6Hu_x?z6?&ckcKzBu6Z4{nbOfX^vRjrCx5U+B32!xO{meJfzT#bx6x_ zbz3KteZ1J%q5NgwxUPR~edoU3YYa|(M=pB_3SQOIt3P_zM~Qo@d1IK~GEG(keN;}! zod*wY)nlx9#7;@*l#lqRU+#r4Le&yR5nlNgY6${u^KI}?6`R}J1m5DpRIM|?4jl*j zE6GC5!?W4c6n9A=;L1qm7P1Fi@L&Xj1>=S;G3EvG1##1!D`^A+3NX~r#{rifGZX1L z9dtjBS_1I0C+S(p6<90`V{z|$)hO(B$eu52yl<&rFqNG1=U%qYWI|FK=eQ>^IEp`p zi@h^8?rk|Sx&3C_7?otjh&s6UBw-vcbNkC&C;LVw`(zTSuMu3W#a?B~~%IYhyqwgKlMmc)cYqn%$D>MY6u z<$$!aR&mM^KSxJl$RCjQR0Lb@HbsNuvZdt%sCWZSU0qJ8xP_~RB$o_)B8<@le%@=p z5e5CmBlxhD!w1^BBRIe)`J4HzQCEdNha`EY{;%?BNbfe$f0ajDF8?1GfB#eX^bd^t z->HOfP1%#chvt)+66T021iE2}2S8E+ed#jmvG(wJAU_S(k+RNf6Dil+6A*Cgs#0=n z|4(^zHxE)i2b{O90M4?Oy!|g(vDIvfyp#ZI2p@oac*9T7gdc|Z^XEzlED|9sG(VQ^eHE)idKYyEDcNq=?*;m*&8A%aSb>)GxJkrMP$ z{j*de=YtUxZ~8VKMmO4Lmprk+%nmUO_-2ON7x}`j$r_-3Zix}P&o1!QX^Irs*xZG9 zIQB{(t(3`8Z3o+dG8CVf*ytNOqev+pklG?5=nVPz`i4(xZ0BZYJ4On2#F3DYn1TNL zg2m=&K$Fx1=AyPKA-+U(&)mq#$-^-hE?kHL!Vw^awYzKPy3l!^pO<%I;xY>h%cW+! zRN$AIGb~$5)oqCPh<1@&_T9O|QlU&Q3=vkukk%v88KcnK|n z$ji4;!bFm(@P4`RMYXb`!^m7D3Kd!0kL~o36aH%=z1JKW)^L<4LZK&~K7}y8A}W7& zBWC#rBr&|)2*$#Yr(?-t5N1&flLp5%Dckofc-OB*p?Yr7xC<*YRerEt_;GKcnE|=-&^6O$3Vc=}pf!UZ4Dz=S*z_JLinr>(Z0;!17-@mmWL2E&v zzeW6}+$rh0%I9W56!s%%1&0LXyGxTt0%{oz71i4YHRM2xHoY%M&K?EPg6t|K8ZH98;J+pdVkb?%*n~KH12i_AkZm1tJWX%w593v^ zV$8QpKNlzoRNZ8*>#fmf68sK{CYMu-1)q;9V`J|rkKDHy(XEm>a=hyOV5DXbS=rd8se#X{{CPDouo3)Zmieq^x-IV~Nuu>`3SK%j^-3DM^V6Wxi`P;;vO|2<=Ypry_B=1h zlolIS$^!#kGBPsI+#UuP;i@_P+J(RJ8Kh)o(@#!M+3wvV1ye7WWtN*Xhwsup*45Rm z)borbXV?A|EdBl4;uBNzq=;vAhLn~L$qPRycz**knPWz|h*>Fjn&%$B*wr3uHT|}^ zCzuw|$wFCcNXZFcPf(_sWu1oN9BU*W;b_f&(o@(Ro$U}~ez3uy&)cF7|60fXeou_@ zfBOZ_NS8JTJaPSsbZ9p$F3Tb~hc2=1mXr4AmjOgjD~bPtH!Ums0wQ@PcVHmkvw$ewO4Gi`WomEBPyL}A_bMT5pV&l59h~}jggU) z{{-4OpC>g_C0M2XK!Y{#sc<~nc=?%em-PKnQQ7g$&R5{E38IZBPoBI6x)AMvjTT7r z)j#9+=5YS42o|{rf(KuuJ!m!vi;T1a6A5^X(u`lzeHtBDm!%DkAJ1XXy*8J{!ckH> zK=f&Mx%jz;#WqX3)wQz?-8`JuZXa}J3X$NsyUZ1{@_H;KKZLQ0Y2A|a$`6gj(oIOj zJh()(LVU##v#UxH8~jagbwx!7v7p*ktn?6&Kj|kqN*340DssTMAXnLqomcwe7C$P? z2p9rWGACzekTJGs=u}F&2a@CvE#xt=KWM&v0=UM{fpbV8A)}6}wnbkDD+Yl_@87nV zvwN6vYELgO;On=v^xNv8*vk~ZJkh>kbP(yPaqEtFEISX1s|YF1=8WqDK3 zIQ^mO=Q>*9b=yEDydlDmR6>P?!Mvk8tH>mPgpMqdNigzeJnX;z$8HZ6np6$bUpW6| zHW@BXcq{z?Z^U{c{@IV)J5Arb2uy?br@5-e_?j<8Ft(~Em?prHL$FlqosV>c^8*0C z9zsXU;Ps*78!h*X>J@~k3CQb%+?P<6|K`sGW;7VS}GK-haTZZrlajDiBY*$}!T8ZkEV zuLa#Jb~FDhWRl%s3+g4d!$b&X8`Vz*5gw=?*e~CPBa5L8lX<9`Dl)!e_4A>>_oe_5 znrN7XD5e@d49sNA%Sf6%uEoBJ4NbhnjTnoIk2mz40h>@W5S3RVmzwJ4pK_ZA8S_1T zUX12~a+P#XktTlL(WwxLcITWwDup(>Quv}QyM(gj@T^AEn zR`EMUl+KCw*1>3btq)CCgsAC9aVjx0IXyz0ZaAEj|nj1xXV(}|8Ot)8~hK!Qdn zmgWm{>R!G0WmxuMxn*JJ_m^`sv{Y+zR6t@vb;2~cgM@q`yQZO8{x7Y} zF)}>d+}%wsDk^&DU}0gAm!Gd)4_Cb7%>LS`ue+=3#X2pBFVe%NA3 zbo65W$!NKzd#o|Hjt{rTb0Yxk7`;-13A1=pQxoBW0(Xkz>4Ej}=_%Rmlju%#-OIWr z^>F!)=RE}0wJ9Rk1re)dYNV^4-mQ!R67T zVl1HFIa09C&RX-eM)-;8P4`J~7m_5d*#t+ZOTFkKJh6|H%wHfFEb87}(X1*dyV*$9 z*pO)oeAr%KEKh4zj}19XBa;mRvw(9LVER;UrJRXt2mex%@IQT+lghggDlYKPNl;1c zuHRQ4Bb*QLcGju^s&BICo1UfIgeo7^{5h;Rs6~S$dcfaAUpJ9q_zdrOsTZ4^KM~w1 zsPU%SjdEY+1~BK=+kd_8C{JIQlXD3)K((Kln3zk+778MnV2(+^zzNDBiC?E3-u8BxhA~Q3IXTD-@ z3EQZ)!a6vhL9(+&ZsMe@^p;1Tw*n5O?ppCRkvb{?#i^o~56(*L?M91k15y4Ozx$jW zNT7of$E*LDYl3h#9Wp@_&z2TZS+!qV`~&v3=t-`*Jq2^1J1`|F+bdVvo_XiJ^VNpk zxy0tl-`ht&6rq!v7k9wR7P;fqr!qh1B`FkNlGx3F*VZq?4`N{vgV90dT&5E?Xh68O z<^@a6(|GHrKgTQ1jJ`I6jW=l2qew8vTMomEu68Ra3maZrec~NvVCfYGpVzsb2u-PP zwka8JIH{_Id;36Mi=sWmxz!a;3veob18?-kBru2@+n7XuGsNdutQsfOVpHy)8{Z+I zEmwfH=D&e)Qo%U{#T`y9x<5}Jf9(cy&9CT1Sy@>=q2CYns9im!!M=yU`R{YKWruAN6LfBuDG8R z5LUiV5Y+3Z=R7!{9dWXckUm|u+hDr#4X}B+w6wL&&^H1a`)&E!6UPUxpR}f~JPENT zib+UV5mDgF@mjs4D- za!7g}O-DZ4uTwwkDkOF8z^2d$)lxXPB%>`R^i7l!^>8@e&I_L^@~qqK~Swz0AO(cM=wmTMQMO+fCT{SpwIpZlC;`W?8jQPI$h zdTHpFyt01pKwozpL=Sh}>4HsvY`d+3dixkcrgbJN$|;WMudRKIUnx(*J#+s49Q~)Q z!)8ft?t|6H->{#Yvogfiv#3u$;DQXMLvpk(;G4i>c=`>2qeXm|xUTi}21B1&|HfOd?pJ%kywXHxdJ1Hw zO?D$F2QX0YzMuWy&vAXBXm zx?{7DPh}me!FK%kf4|>yW*hwnf7VW+|NF}^v(y6rR$($%wWI}($yWoQGlTBy8jj!R zO|SLAR1icPd!|eGuFjxWeYrYd?|-ac!=YyR{jOgNh4POsC)7Q(z;&SZyc@CTX~F;Q zObn4%~R) zS%ifhVk)sJ>Ypd?O3H52T@z>yQZ9*>El&LzanVk6hVX{4!o#g68V(~b*0%${-!6dT zf8nw5+4yH-wmed0|0JxD=pV@3Ky_(5M)LIPYk(WVt0QDD7?|zID(xX2J}=O>1AA$( z{A73T!v2{soaA+q6Uoo;T$AVY#-8!1v}9nJ0Bhed-w1c-g^6?e&m9le!y* z-4(Mmzm^u)71XCnJrNmI-xRy2LSgQ4`gDOGb|56?giZ(p0vylW8e=v+ons98Q|;!; z+*_}{iGK!xli^1b&6wxKfrl2=#uH>mle2Q^>CD|DHeg0&;Mv( zU3Z_UyMd3@rXxH793A-=YL|Q;G?t8T zB#E8lo~wM3NbOi1bn4N+KzZi}3B!1SyAQu?$qOQ$a=o2ij~uF5{`A%8lYVQ;-mSBr z7qsE&A`ac^GodWd!p9y@gMKgIJ0@-T{%eoUa69kE7f^YBG>>`%ttA+l&89{la4}Fo z4FmkY8hvV9W)cny`SHNu7VlOnZBh(V5GKsC?zM$rC!S<+lp?x87uHO9YT-_S6s~w~}s+Xbl6d2hYS! zWby_6eKk?D20!1KrAm7lcTJ&DNAw(iZoR}f>V?4*`G4`v;Pm{)Tfm{PY;lE!#hh+t zsr@{U>FTL9mYmgd7`}O+pxiDe+Nhb8b@{>CQ-u%r-k9cfR*>Fj+Kq+_Yk%qpAQ!t2 zF*uC)2OwKar}kM&>ySbIFV@~WDvBj~7ac%EK|v%b2q-8yM@51Xl^_BN5{Dcl2}llu zN|GobQ8JRlkTWynoFolFvgDi@!pti?=ltG%Yu)?DUF)%Qdb)eMySln+_ugOa`aUiV zpH4Ll*n8c@6yL zBiP`@PNv|AX_J8T+3EfCvL+Yo2bU|+h>C*};nw-I&dO}1-&W%rxiu0o_Z`MBU2goMI_t<&<nv{8Y1HejBUtthGJpGW69zQ~{g!)_`6uVoo-OTSvP3u<%qD#p(2UU^VUqN4YzL?DXQ{HH)}+>j-lP4Qo=mFEQ156|?1cjYhWoc--T^ z8ydo++szr>wv}SlA$%U5}^yD{)-~G96^;U2K@Qv|p z-t^!%pw{Q({L1XQrc$_>^}cDaPA!&-?o;@CXK6?m()v3LA-yzXL0Hs36J)@xwDrDD zBD2Knm*B-Vsmo&T9icy~y1ykb$~G#&j2gn`Uhn2QMjol!2ff^QTmG~u&L$(&fbSN5 zbAZNJ24Bh}Zv{U?jvFQoF3tM~r6k>-QL2+wC%}Fuq<#y`TcWVS#auxy$onv+#qUt<7zP1abmMhkWc;ZB?rI==Cs@ zM?KOYyY|=F>AtjLeV6VDgQV?d4*J}GdP41Tt=aEmd2JKL;*5AJa8t2~Hfd_+N+cb$C&)aeRFUA}c_Q68{`?rsa>^Fl-|pLb#fL2Cz<$cc*}1JbDBfw8B@JPE*;0O6DHLHlA?q)I+0V1`bV$U$#^f6)g20o zMsFs124i2L(YXdc?zhGe`jq$n2tZ6cEl_SbkVt1}R$XVoeT5dzI~;N$OI6gLWFT)G zFbhRo0NVY!iL<&k7Ph*;G|A=w=NLWbGzGZc%HVpRTi92gRh^Wg3RkjU8tz$#Ut=-M zXEPZS!u<-1hZSFEJ7hgN|H}mkCei})I_rmOqzmiR)%5~P_Edck=efHxj@v=EPfPX{ z*QkDJa4ur!Ou8)>XATf7TM5`pYfBvgBUNa`E8oZNlq~*$W8F*nmuFVhpMU3Mv+&ja zQv0AD?fLG_AYrHT_q?e`X^>UC<_-;i_xcaHM*LCkQs12%^9>$KM%;m{p7zsB%3O<& z`_ybXdCfAp5-jeUoBB;m-7@SFBv~k!Kw1Ez(E1Ou83^3nz7&D|N#>btu%%i#!3E|;kN(B|#WF+2*QFghZ zmjI?PmlwVa*)`n~xAV-Di2(>%7kFXK@w%+leKaZH&UF<0XDi_%)Il+bYsgUXS~wa^ zQl6}syI#xHR0`bwx0NRhT?3rO4y43SliQ`nI{Azqv?cASvE^%@&VEha=*k1pL$*?K zf5SF1Nnjd&BFA=r%HqUz3aqwd_M3eOt6yuh-Q8rQs;*@3stnU<$t6H8PGnM2&83h) zzo%!&+%dn>BSOk}U#m+Z#9OodDOL+a@Wj+OYFaN@rFJuLd$RdFYM!3-n6V({+pBzbm7|g$U?V(3qe3x?82=L5h79EVrD&9uoHT!(&m& zcascY|4Iboefv;<@GuX|Waq#!KPC7HrKVq`pa1x9c)sBF%kg672Tri_==sw{xqvVI z9+^&5*B-E$SDMoiFTo)BPp=$oliU;W!75d^zDpoI<~?0FoxzvYnL&~*6ihQ0a$dx# zsBe>@oWy1p;8^XI1F2v4sBzdi9m@?U2XDP!M9$(s^Nzpr4R^t|XR`)ueu*xG1adnL zoFU!2FZPS((MX32^`OZfF($r3b=DCL!9DupK7Y!}IQL+xE|@0>m$ni~gnvvf1*4tg zSp$3^4LMJL%wBsDAzqL5!1tx+8V>ZrC_$!A=?VI*L$SSienp+iF0+Fsru#zZ>m*ydII|nB%bF%Z&QM1%efGoL^V%eL z@Ckf6u9j4VQQiZB4;0tBS)@ioZ~K^hkE;*E%+k^Gv^Y^GoUL8#>pQV_AtXM;q>1|+ z_kXG0f^8=gl+tQygLV6-F2c;JxLZlP~5?@c(9)3H{W-t zZCAWfvU_x>CWQmJNZX#J15S}ov8UM%*ix;B_p|&Q9(vci%2_-=3OmA!2YHRbL7>B8 z?^IftKifI+`vU_D7d;}oj$Nhwuyy>Hms=r3b_YR-FP0w9tT2gt)I9S^gmi~80~#3t zBAxlu%pL{xe+bT|y=+Bc49h2(+nE)z=`QWeKIUIM7>u`kI^teMyj~ zz2J1)KEM4JDb+fYwITk_pZBW7`}Js$)YkVr9hg8xHnqWJYZWmgX`t?8l*Ut?gsC~+ zcM;1VZ$B&ZyoKa0m?w`wLgD-8NgT2Ax`yn4vcYD4X#| zf@tUsyc=+Xt^}CKZ|CxT`e+ru9^}IX^O%A&(O62JQ}@GHk+2KEb9@|`x?N*TJH%~Y zw+-U#;=GXcelq)WB-wX=GeXIH@xDl%hB~m)!Eg5}5({NNQ_vL7;&0fYW)iRIeY6J` z7{WDGLfyy$%v*(b2g}lb`7OY@L^7emt*HoZPwVP&EWMj$zuTmg?ItUyXF(R@oK;&) zR_tLAqS>X%BqywHz8^$IbazjjRUTAL#O%_bE}o;EXU@$4`&|)vto|0SC3@L$Uk?oXEJ-?(Vr2)OJ9|t=6^(kde&?#tti;AuYVD81 zG=epBs5n9%$TuRMjl%jwIbJ3;HY|8hy<0TS3sem{q#yzH;^fFipkgKa>HCN6j+wYO zAb)T{SZRsH-C=1n4y47R;5enIX;`qdQBY`2y6oOc3_pcF3 zCf;!7Y3WHY-1HKGu)J)u)jRWVKWGNAGWd<)DsstkB$jEP;aRO?C!}noxIR-$a*1w) z(1Wn9d}Dw-%fVw!Y{{xMMv<#Yv77|nu!!tZxl`A_WEpYX*%=5Ee2k^_yvpOgFcwIE zq}PnpMGp`4Zg?eD7_Q2RXzV^3+RT=~FHSvcowycQ4pN|k8JW-RX);@5>i;w~PoLN~ z8itmFK~(^+=mftLv8arOX=71z_B0`JxGYq3M{O}-*me>W(rwkF}h7zX$wEAb_`v1>xhL0rp8KQUHtRsJZTt_e zAt5=`vt{;A(gRV?w%I?x#ZLA5KOjej6GqMdCJ#;fpi`5^WrDuGFZKAFW}19>Ob`3K1`dj;m2lF^K{_Ypsr0%r)I6Uftq7xgA$G%RX?d-a3B1fEW^~OCy4{kdQ6L7vw$Ky`CO~L(o)J0Cv(%mtDnqUP*ZNXbe;zEpb=_2)bCb z!nOV)8O2es3_`<<&eqW{3ukvKJC9{3KV9}wMWfM-f4~dRN;KrJo!X~|)!jTxdn>%6 zE^6^RGr68Dj0ziCkl0V;-g}u$vCxXt_Rul5a>%FffR?RY%^+mRK=)BM#@BzqaUhGQ zuB?w%4=phfPW`wjC%F%;*kB3@3ktRlE&mK3C!*33!tQlC>FcN1{qTSqlg=(IH2+fu zhEk^{C{Q{J3?%H5koyj^{uWd~=V^Kul$A#9ick%tbY+!!yzUzhKm%mZTyHM{giD~r zmPt{n3{Ju)&mMeC;xDJaYS~?V31{dj?7za<-W)#Su6T)&*&q^(qkNvpsFyh@O-{F$ z9kId?Mlkg285pVm6JFRJ1Z&4+>s6g=JkfG84@AWI-={L6M+*4@R6#C^>%5HM?p^Hg zfp|zLU5`!8F)!p+3HR{Bu#ZukwbvWh6@tAa<%08Co_`19HD-FG{BFiod10L)+(ch?fK7oJkwZ>UM3)tl{3be_V8uIYiEJLy=^^3xrTd<^$@%pjDq`3 zjNWM;q`i4-pxFk?jE(2MFWcXfHlCol#B&;qwHTE5hMRRB6znrE!+uWC+CAudvm^Ex zLGrzd=@q9ZKgk@7Y>RgqX)^SncsKfHL+i}ZY_t-QZ`<5rld}83X(-Ogn}t?MBT)JV zUF1~N(mLv?*0qqB?*rse3b#4bQy;&%CGcQGsmI9oB~)se4PD&a(!#cNg@wLD^zK^znw%;~=EBp^6;6Key$;fWNWb;xt0DN7D9`?P&2rjn*hpuSkmIDWQOXNOAeTE9=1__wd$LX9d5T`m6@RgazPfy|3$3ZPL>Jnj*u(=XS#4 z1%~*)7oNZ9TA53C5|-A#Oq&6j9QD75UA6Pn3n0(N&XA*7$vBr82QTF14Z*bKhSz|I z=j#(}t)7R4*UT$GAz4zMoS-7p7P9IeeXzn$L~-{E&39Na{p1G$aMPvB@eE*SIsm{R z32=d<_HQ}FBSQ5gS z{KAW74YLTs6!*`V*s&QD$mUHb9HgK)``{M_L*RWqB2gAHzAK-pR!NmVjVu+ zG@!?Ww9VUXSqByUY?V#H=Q(bE=}82l>++5c7s1X|0sPp}s(BWY2Q3wu)3>+84{R4Mpl(yF z0($=fAUrK&(#V| z?MRsmd!RCD!0KIkG6O6T_V!@mi@Gzb?d<4|U+}^AeuM8#&zS!@lg z_nETcPK$4cS7PFs5~)MckH`RMIJFd`*z!}Y*;P0%=bXPSdqwqIeY#efEK-`357!A` z5eEs#mPZ=TuXqCpLcfE?qTDNR7+A0Nm>xN^RFxCnrQ};wKcA)&K+ef?_%YgLX9)DQ z?c=u(zc+84EirCfr@tK9om(s2bKEK1l{GPWq-R^-T6Iw!WCRkXKP`K-&Es-qqny~pSJfLP0?S?B?yequ~v{-I23VO!ZsL=aCnvAWx{0i9YcjkEy*F$!Yfx0l%k+oy~k;AOvaaPTHo&gYidq5z}5mX^;K z*@k>FUfhbKQWdK;GWv-gfL1W}Ju*GbvqG&={cZBQ_Sj?h?}Uq^OA@;*+I!;~Li_Kx z_wU)+t2#)7M=VQ{ye{!0=!XAKpUfA8q|~2le_jCwB@c0pK%b={H!sgFw{Gw=P-B;$>GmZdNib-F>u1yrh&tcpeT~f_kI&6e&+Tj#9c8A?=3OKs90p2=!<_4^| z_Liw-uid<0KG$Ey|9t7*XUv4IgTm`3dK8yM`IY(On9Y{{Z0&J#-}v~X^tGz@V)B#K z6`bp(+c@144!0pZZs^H(=$(s(xX8=Jo%&gmb_bb?*55utF_RUzV%WI@G5w5~D}nt{ zSIh4C(%Y>vw4iY-Eef^*no^%$O>5n#{2d)xfclN7a;rKRVH>fuf#z%9S!4P0#65?+ zHA6#h61)2Drt>xj!UGxkLHkvO+N05@#g&FV7$9y{llU6pZjtKn_|%X*-R*Dk2 zG1lBSD)t7XzTeC+>1k=d5ux5_65HiK9F>nEDT|-cw~0ePzr#stjqaKc3h3!9-%0B* z%J{_lg6_hYrplgyYk$a#Pk1TWSVh&_QF~8hR6q@DV&zY4MJ5Y-Qe1l6-Cg#pd!{Y^ zROx%!q;==|GiS@+V>WLvAk9_=SXqvtDMfo;YH#PqRuUAZevV9c9zMOmtu z0lP2L@wA*gfYt||ooE!F%f`8{r+?xje*%WZLnZ5=uOI&-ry zY#+TigBmyubIhouU%jgQf(je+L^wq`PC_R>RD!AR);d*&{3P}Z^Ut6>0w&1>3GJ_+`w5xOcZTD!N+U1b1AyF;-~Bruc)A(=#+|4!aRM#{EhZI}Q7}iM9B$MLF~X zMZDsU$P}!l9=bZkS?&pW>{v{W>e5M-%;M_ej0TD3?9>A0w_al`NAoWkAOnCESD3`Q zol$Y=d|)rBqtIcS2>WQ-fd$;w_0Rz zR9NS`WOz5a?qA+a)wU;fyEGoX=_0o~_9l2E z_+Z3reCFj0eF%*(vAJhV3{g<=tS(Wk9y68pQbaUZOo|tZzk-BX$6|JBqeAPesvf5} z>gaKC>}_i`7$4S-@}c|JoC~an+o1Rmix?wWLku|FGN!Ox5d+t)89lNbtjGOe)jSV_ z-4jAnNj8|4RwsJkX}s#ub(dl5KD;8t&D{^q(cN7NxFi(8g{}!WBYNTmiMZ=-jiG^} zV6iorO)a?uxm9Y~OK1)uPRz$)$yBsUFw>*+ZdOG@f$mX9Z!bQC)O_pw`qKG!k#8tg zo{%T5HRkSWt1l_^bYnb|q9asr>?|kW0~=)q|FsEI=g-X~wZS@&d0d30+f2R*H{=*2 za~VH|-t8u+bNIATZMYUuic*)3752ygcK2h&UVj3Ocv)t`x|xEccM>1(duq@D#6a=--v zi|0q1&tjiq?3(D=P7(5oAMYK1VLk831iFRbZdyTpE0EG=@(x^-7(1&rp2lXx_u5qY zi(F-ZACNginKuEYFd0JpF6*}K7YnR2-a5fWr33;-*jR=^wjT~&sbsyq`4ML88t1CMc441! z{JHvcJH4OLjB!6CtT|ODydNzsL$Ikdrn=EPO z9Ct@e6D{SQ1*UoLW7pxK*knuiAqKn6ja|I3zJK5-VDo$INr8M6Ti-MnYDO%X{;AWA z#xnTv9ap1_X>L$brlpw&s{2Ui!)G`U;gB7@*XVATD~#rvC+)E_R(Am8+rwbe_cu!+ zjDIDF_^uJm-T(I+5zpT*3}1@=XXpR*CL-0So>zLvsY%qq2g~GHO9`41EPuqAt93i- zW5l}u5_|oY8FZ+*;Nk^pb|q2oxD>uxl0p1#rJNQz^s?~P{<7OtKO)m#`z)Mm7>?yo z+Mfu8uRgq_b46WjSh~4>W^2gxbPUTr8WGc@sVSJq^1Hx0dEX87DEZE0Q~9=Y<6((E zt%G>3vD590uanknlOvuLyXkzb>Y!Njr6KgJw%Rj#w)?>x5YO^OZt<^HK;wrjQN+<+ zJYLX}334X_Yj%oaRkJdAcudxR08g*m4F2QQq>-wzesOlA8wsyCZ)NW8^_QFUGDoNy z+uU39I3MuHs6y|UOYLD>E$P3rR$T7!*qtEgnjEb}O^PxSJ%d`KgOsDml*CJQq4mgs zpxSnH6~YZ>m)2!va)ia?Ju)V(1e&={==M)~3!pHz3#M%aQ!ClpP2l3@Rt4SId{>(z0a$`1`Vft$8=m{Ot z`PEQz9tW-jz4(i&iq+0++&9bcS?#@6jg#i5+rB24uuy8Y38V{Q&=#@;O*UO&aQySs zJmRo$5QR-U!;cO$&$rPl@9~JTc3&vCMq_uv5MhNMyHnB22giC7^3-eOsKH@B`Tcz8-YA1hK};~ZpZk*CaLYWs=9wVXD4Xx*vPz-wU-Dlabc{Zko3jF`hq6* zLbFcgRA{|kUQ^qv^=Nac4+gS*Te6c-xZV+-r1FI_-z>vo^n!EPL{CK%Ss}CA-IjOt z%<(UKR4W+?74EY!3IjJ~l)~43gHx>7m-8<&*+aQklP(rGR%A3!3CJ>ROQ-X`du}lr zoBcQw6Xe>WBXurcxOm-)xc2D(P{`Qnp>lUs&obC9`RE4eozbnXeVJpT;F8J9bFG)Z zk=C9+Og3hRKpve*R%E{>ct)`R7Y=OFC^+7hs&DDH6WJ%}vpBphL7@INamdXBg=q1VkUm>9%KTmB(R80Q`E$g$BNdUhLn;bPx%DLMdZPUu3ZHG74S!izl`gLZ4Q4py`?k6d2Z2;!Xw_egBH`b#~zVFHR~lj^DZ5?4fO zl2n=-C4ecw>~=zTT$a>i1*mp$Ij!DMK1<84`c05SYHncE@?l5w_)Tj-GgV?(zIzvO z;B))KxGJHPx~nw_p~v2&ny*1i1ylW&g?eXLe4{S=q=@6150DRG*F;(g_l<>p|1=s< zE-8LxU}oWoOmI7Y^5^vcpQL^h?P^1QJ^6dDF`t=A>|0G0e&b2LAyr>nd@zH%hI4j! zr%6!hFOdYw2q>o-11i$yVR zC$e$0<}|4eE1chx;9d!xA8AeqGwqF^dy`soufV-7q{Oj1lVLP$CX9py{)tP&g1!kB zcIPFLI`-nS)>SJWRj)M0 zE8b=Y97g&cU%fnRsF)zQL$VOIhwK2_iZmfbnx&>EuFsEe$;#xmYE)kp6aHh=Er#GO zSg(FSPmrg>SidO;uOSAT@x(IVT3?fB_Uz_!*ClEFR2{WOJ^=0WIqt<~RpSHrXLV=k z2i0B{ajV9hJ$J%etByP<;B=I0A3C0aqX`6cqjMee_ZtyWh6Mqv@Se7OuOSGe^i-+& zyN0R%V+IDk&w9qR=OtHI>7yCI87nVOqvbtKeQxqh7=>SRPcumK>YVv-HmObWS^8wU zO1doDkCsxYvl!&J&W_M=MK~6ety}a(0rP3r-&@VgHWLyLqoVtdkG`;K7Tt3^i0>wuY1pUs8q`v3F z*hKL?N%Ex^x|)-vysvzMJfV(1<3TmmdT!?E)2i;!>bE0iICad{)%xXmN4IN)(O0oz zr_uc;HNtnlT1$B1&)VczSLU8_)Qp^8nKTHQtFIjiZb!XEehw7%>B1*ZO*tTEnh~Vj zmvEy4Z~-pQ?FQ|~Cnnb~w>7ZpJPSXlAUH(aMAqh#G1YNsz_EIGXD%4lIE>1T{V zKHe;BSUMy_<0-e!q8>-%2?Fvu@DcsGC$r%1Oks_&ino9CI8-X=jg5fNi!tfckKh9> zA4gk0zAL|8vpf#u)RoL`x}SFI?hML}K2TMYqk%28sOa@DnC(<&`}lrxEVhF(_q=qB zj{t#Tq}it*myE(vXctOK_A7`dNAgC)Q13)N){EsAlR>8>jaull_@p~Qwqj3Vft-Mz zhkexCC-l%zNEMD=S1vc|BG~4o{fTaFTt=Mu12h9OJ?@56+ zu9nk|cBTG!3igHPA@|>nnZ;GH++ChG5El6dM~u3cui%;<5Ub~OZwwO51MALwT2}Ch z%r|3E9DGSNzWt7!!k%( z!oddr__ubsW#o+RF|+<7X1pcNUs1~v!}+yDXH)1DR(X|B;t13xj6GWOC@Bo)-7da3N6HF z7@q6AJXr+735(<_31aRQO+)#L+n%M=jBdEioT%xQdRukIT4o;LtS^S_{p6y`?g>dx z02>E$P!EBB+=_xddUW`MZEb=Yn7ovca>4HtWOvq3u3&ESf0JDXQ!p&R@PK+MsLcKGg zFlcRU#j%E^bZdUH#2MQBdidXVQkPYxAo%_X z_2>AYr9@O$AWZ&Ke(WIIKMmzyCbh2B0CW(^X)dMMn;Wy_R=A4K7f{OCC`+Q57k z^t&R5q59=U48`!wm0Ay;XyLBr=Jp@1iCkaI8V47`aa2cX2!Ye=&8>IVVEuzF;ztI} zm#63(POkjB9Pi?FM%ciGv?BAg=2kMkT*l|WgWnx*r(l@I7JFMt^ zd;F(DiK4TYrB*B(dEE*9Y&C}Z>S-N=C=n(5k=LqMwkCyeGIFItDc4?2MW}X)7_#zl zPcg1dYrG9_a)_qm)nC)q+>ovtN)Nfbi>n>=DcyF}Q5GxYV4^ z8Heq%8Ct2OBZCy}rE7fd`!^7_&ULzRYD=Q?`>X!Me{s9$SQhM`xIIcl-yrTBiSG38 zka*_=0tNKft z)2edoD-hlY2)NON8~pc6$NkHGd-?Z&-qi6h^G4n|RY$yUuyq`tBANOav-(#xe5D~D zC-l?GgBjhdPOZu~d>ZC|B6_k|@EctkUpZ1H2km%0>n%?{lUSyBJ>68;V^VyiJq=4L_ z)s=WN7pFHMrtisAc&PR1H2#%6P-StwL;||o&i&O{_USclRklDe3xxC0*)~u|nkWNl z504AE3hfEyy_#fCC6dY`Mj5@-1%r_!9!e-hWHRjb*^#v)CHGX#VJl!qu>*R6=J9@j z>~!dyd!-cx+Grgm)Twp~#JScpUT1azjDqkKqN0sQ$5F1OoBVbK9eVc3b=e-~qxo?= zhqB1?+BUxnqto|!{VnBbz}t~uU}0q~2BrK8>QFno;o4TYcnn$7TfgRUtWklifjp; z;--$k9*j#wu~yhvNWA>nkLg4uzexXI;(DlzX2v!5l~n(PU0~O^1l9w7*U;iXfVxNK zBvpyw>Ct3ZqHmBHX>@e7DVR*nuT1hTEgi)U0K$S3+;{s0u03dO~kF!?$-%@^BAH8wA(AteJ7czoo zKN&Q``aEc!&U+*3);MzTezxPutgoQcB#;;fO`vWS1J?c`44W-I4rS`Ij*(_P8$suXhX@#6YP(e;&`!I z(M;d2o9&i6<<9~v3|l9kt!5m|^2q^!#o6R~x5l9dTj$H&hp^iP=+;U1nh>1rRogP%w1U;UP&C)$>9zy}}_jZI_ex8n*2#lI-sa z>p$@w`2yel^3DNqfmWr>P5wlmT1sf;?0qiBm9RV~&j1D5Q%0ZQ(^v#q0%uk zGc)jYqK~`fS*kzX?T|j&{11(*1J#(P)@0x$*Rj*8m@D68Kxko@>wc1u z<0Xd_<7d`}&xk9#QE>S4E_zytnTu7~%H`Y*SLVBrI0N_*DCKKkI`3(<#`V38in>C(8BRPnD2fc3Z2Srg5^QI zvXkrFlUjaoVo$dVTQw3z)~1P?lm_s}j4G3*+psvSu#e|Sdvf;|u=kL8X;3#qibs=F zDWDam5=&iQLVENdb$XDlJlI8|<#YeQC_*uc;PGKnyssDxsHy;reRKR}mDk=>v60+z8Q^@td9C45P3c|;C_to+B<2b> zfv!|jxkeG62L-QbCk$jO>}*!jKc!Fhs?mD6n?dqI_4S9`9?{Z8iP&zEPlR5i`{{6s z`Jm-m5&AGhTe0k0qJx&UfVq@7m=T%=GZjhN+{lk@TUeJU!Pgqg=I|!mBZ)q{@2KPc z9OCnnSsJ;~Q+~2GkctO%zP*K~U8Kf4i!9y4yEp*O2L}{jX@HD`3#_Zc@I*D$6j4>pN#$q0AgVb3qaQLDS>fEXXo>wOeKTi6_>)}b4aK{(Z|%P zW%gmlSziXf*UK~DdNW9*1KmE9_xYiB{pkzNgnn%Aw(?tq3&Ijj6z3E84v$tvVX;FS z+Jd*d53AkVZ&Z7njHRIzLye%-G$%>H9E6pP-NrxAkq-ABnEuJB#(z6d56x=4VrHo2;YUB@K;?!hig*e4!j*xjS;&^U7>DDk8#=ALzax-rbIQ z5dU(W|7leF-Q06`c0_Ow>~ZeEqkweEdk1Ga6~G#%D-6nJSa%FRvM_oV_Ic#dzHsHT zQRK*yA6l4dX+~lR%C(f-k!Ts_zvlk=U_MVP2`GaP&vkWH1|E6XUFh+airDwXJ`U+a z!siua+`}Jc<5~@W{?g%ALQ#_Rk=|4-IWzZ`rLYHY1?Og#@f4et_5?SFT;o~8DfQX>q=P$Rjq&rP+j{3e?8_)0Y;R0%HI5y%ax8t6Gc{-kR@ z`m5-1NS8zqx8vt690$%4j|(mu2^_(GrIW&BFK11UPIPUTaw8+iou&5qg65`&V!_C5 zLlZt8ZkJ_Bw~EVvaubf6@-@iMjEw6SSr~VjDm|w=Yx6;M`!U!q!`%$M*Z5-@^By{E zeeD-_B_6|$Jqjgj=YpaNw0#v?(FW-2*+~o9l(ZkZvCT%<*7I6@%%b7nQY$`Q!uG_e zCUBE4iuWb3-gL|+Z9h!94|$=WP}=MM0!aDR53WyF^OwcYy0sZPr3U=s$2!&0#%Eqv z0#nQkIS|9w-;=jgs@b&ty)LTy)%qQ5b<0kNqLXn&Bj;Cwdq{Xy|C5Vo9~cfqJ>UGx zd?vV(8;u`u{`0!@!W_~(BeiL&~5G7~Hr9D&BEel|tVp@*BR0Rj#4cpU) zbxBy69wZ-Vq*KYeUrKidgSb%h3Rqoyl(0uBKilZyjG)kgeWdnn5`8&Sn)dA&R}ES5je+(Bqz<|U~35;DK3Nm9?|h4|adlfk&fKkk61staKx&r~~Q!{00(Sq|?h z;uOjIBN4m!g{|R$p}X|jegfAI3c2qkhCPeFByf&JuMa6Bz=lqbv&1u0n7{x5sb6A8vuNofE){JqUg9iYY_K*scg|98GQ_J;Hy%|eBMhx4sv|H zjvpU5uYkNU#CBE&JVAy8A{7MY0>ts)Zs+3;LQF=Tfu{)^-UYrPPflpu5%fg6z&j>+ z4@>wU-Lu}i)1z9bkFua#ddsog@;CeK_9uaJXl^g#oUyMRcPQ8zKB~K^JwyYvDJG+j9TW|>b<*+79uWbaxU&G%Wu4P^f5=nXJ6>4Nmh$v8U&Q&Q%KP34l9N2pg z-F!^yAT(JflRmysDpI-)Ep1;`c%6R#HtFS`N^9{yLxOO5d+~-s#%0B)x#^_4n|ZWm z6Pp?#XpKl1rT(S7@0&Kngx&m)#HY6$7rbBl&qw{gXZ!b3Z0Qe|@jObs9?72$6FIWz z-K9t#cmMRp00S>$e2V=i(8&%aR)SYt6j@S5mzk5Uy{@wlu|>@`$`d|hKQ4Jgxew>U zs;HtU4M7iw6isdlT{tIB*}#Xdu@*`vfPm5)Axvy+q3URQAYuvx8wJB6I?4Q44Ib>$)K<4d z9Be5WZH9@1eHF=v+S0%+7@o4eTyrxyGeB_}vv>6_>QUM`_!Ga&Ps1TI!i+4=6hMXq zln%DUaQ#WJe}oD=&yLK0R~568i2t=?5C|BoZU&J|D!s=co(gc62NVy zP65^S)G4z9FsA&yN&%;h$797tdL)SdPi$09yd+WbZ<=QA1;O!U~1vNmQtR7`2c8hmT|bn#KeA{H6Qls52QTr=w{C!K8=N8K?s+O7AE*x zkj15$n4jHvJP&^y@Re!XRO7o#sJY`J0EucPHXZP)20kPsQG7tQ4`;&K;KwenJU@M| zC~>m1wA5rpV9@_%+j{Dh;dGCK0+pwnBsy-L2;ww`Hv|T@)<8u!t10TqKCt-7XlKv9 zbN@U0{pbAHS5cj?`!>~!lu>!`BK46YL%A=+@{>CpqF`Ls%9QiPWl#AQj^z{6FC^f! z6`r!0D7y|(w7ZoAoZNl=bb1e*OV3r3GIHd<=XKdeI+MYWhQG)a_+_i`-o-PHEx)hg zi+0u+KPNbs=>dGN6~JFk2ZfTqtLT={Cej`TzGAg^#?-0Ez0|@r2dQfFc#r zIGA%(FLH+4@W}C2cV}m#FA7oZ4b;x_!y}-X7WKYHCMo?R9``aO!?$01B^gfL=N8WM%6#MiaNbbyH zSnqg$^SHg_wj<`Ub03I324F7E(qULk->)BU%GO2LzQ^T=p73FNB=&7>z(@aicl-I% z*lL15pXc4Z>kLR@UElFyL9Evh^@V5l3!X(`zrkAzoc5pcOG`KA4cxysU8P4xM^8_pG$d`}FQr>% z9&X*_bKMYlG@>i<_rNf~f5#*TusjCHBHh}Zzc|-tAyz#yD(a8Ve%>TfCRXp2_@6wK z7u5v+fMNk%?f)0>SU|x47DO8)D)KB}@Y!(u=QZbxcLYWsF8}U6lway{qJ6^bP2!!Y z(XGSzcdN>~ZxeWKgY<|yts2&v4(K9$?8h3j5 zJxNGGF;Vnoc7WPqjfomX`gmm`+F2i1M)m>?%B7jc_vjcs?-1%Iw`;GG2zjRAnzS`)|&0hih*d_()amt(HgEJie^V(X1F1g`!;=i-EFX?bw=lu8%DW3o8wBU_T@rf$) zg9p#g9hx(t9=)}eV~o{oLFDx}FPu>XkZda`6b|1M#uF17KYIpq(B9vw&2$&b$m+d4 z>Adl=EemhpF((fnuZQu?UO7AEydQtpWFCG-6 z67n%n{x$nkM*5iUw$xlt=qB(a`jNv1E1OQWoKK#N3otL0JOXwJln6ZfwADbKbT@=f z< z;}$*V>X;q5xOG9GH(i*k9wKisQ>ZI@e!Q<9o)vzu5&5Q!D_NAa5qWP`scmY z1#y_CfgkRGx!ZQ1oTXk6*1XqJfeRb#oS4;gxi0Lmo1tB7=&LkCKPNv_wgmajB{*Jh zMxrHPTllj+CzAO(#AMo|x5K7#lKA}G0pvXdqK~Um&ujk61qk_z0fDeqIByZ^hC_K> zQrD%5@K6kzIzbiw&SRAeN?f&8Xb=|cjMmlM&8W<=zu*HY5QOjZX3Ra%ZL>EZ*=kwD z5z9T{r&@|h{BmIWh};s}O#@%jTDDJUZi0RA&sM$%_9Q<78^GFd*)xs3o|oMXEP71^ z<+8g|!_82Af}2ne-Tk2BRn=KerD*bl4aFS^hKa9TlmsQiI%Ph7v_5yU=XgJy{Rs$_ zC3KH-mlrrZIrE$zrtRuhhO~R}G<#l?Wsk%P^}rsoMq>5;S;)~FV>r9Y@W+0-C~@f4 z45P0tP4ivYitC8K^r-TP2pAG5HtxeV!)7k>N^eD~1pAg;<5$?t;C~M-I&tGffbo0t z!Jl9E`C5RKUkX^0Ckg}KvbD-T<{BOz`x&+T_%w|W=dc0A)2Vy+`BZ5s#o)_TJ=@qq z4$lL2TS@eiw%!dkKSd#H%o#5>iGdAE!vA;Spc)4wQSU?!KYwgoGmwG@9HluS&_Xq< zrj7nJpAg7z`);l> z5s3j@`7;~+zgtn4taz~)E!E$o1=+TO!B%O;1d{C6Hl-v9lEu?2r2OX7x=Ah|KG4ag z!sSWL69dKSDLnZ_9$b8YzBsw|ys@@~v0Pvj69T@x)-K#I*82`fLt*nBeuw_2iY`jg zdfr~y!$RxJ#vPx2_gHE5IaPG?8L>Gkl7PE^H<2n8?#{9R_7*i8L$64rd zujtjQ%IpiuQQ~+^4*|w3hKHx%aW`ysmH1g8SWKTL-hsm2CUC*$;Cpr*b^|rZ%{PK*c|I zK!@ec@IXor!aYjL++BPd6(+^PxSOpK3?Q+y1bEItI;KHOBByR!YBy&F3g3&JSiARV zSs;=;{XI;mrjEm|%aqu-+TkzrINpD27i|HGL3Ej@m1ChSV9 zBZx=K{M(QsZFig+Jax~Q;Ez5LcV@H)*0(0cnmo@H?>)R=4mUC&oRIIRU#n|edVB-u zI|>IiX#9H-1Mo#yQ>ZU%K6-TV=*zomRM2#l+S@VDBH}O4T@6kDTrqBD5MSYFqHKYHF%82p{kXiGLi0gwllnNkH70dpDVZ0&Lgzj1LJl2Rba0eKVkoQ>W z@W1A8r~m659><}C_wFJ9ujAh>@z50j`b`35+y`X7d4$ad7gcA|o7s;ut$HY#%W1wG z(LF0Aj0ky!M@OU>hvQ0sLEV&jOf;lB1_vLd_aF4cT@rwNwjhOjxWKp|+x5^`@9Po5 zVxNc}d=RS{Q_RDdw|M#yg3%h2s@6mrrAOnW6)sc3ajYpo&CsaypUM70i~TduvQ!~N z*-2}GF2Zp)*+5FC!D6_u&@5nN$@zOgQ_*yLd4^qmwdlZ+OLGx3QBjMSC}~OvG1Fhd zp8rO)1XZn|6MVDxrOnTejTDefek7LXxh;*Ic4Y0TyYLpb{-49`%4b)UTh=S@&pWVH1?22!rQ;0NAy-AQmKRpQAL?TYNQQZjD3_%aFQO6= z8Fl?S2lGSC6gXROqxby94R-xLk=~AN5zJz1s?dNU1 zro#4^ssiY%%L5uQf+yP+O%q-MzG|fJdkQt*w+EFVE3NPG^hJ;fdjF%*vazvh&m9}; zjgj>TFdg_eTh~IqofVXx>T;`_ zIXJFcZQY)e1zas=uu;@&u~waKTMwfx0@mwu@RweTe&c3-r z3bjS<5k?fmM^oVjcw=(m5P!t-ZdQoD`(1Kfu)bxo89FouoJ5Vj??%&Q%9Jd{)fv0< z9{R0U0!>Ve(ZjjHv0@qMmH4KfmBfNKGeMs+26o4$wXKlDiie)Z zte5VD@IXA)4g&~v!8A2no3Gj{?64^2Szj+i>b#OSHp#NuUqcV4D}ZYncse+xz3wjEm_%!Y7-Bp&g$F68Gn!Lc&bD2waG+ zF+fBE&6fIxGJp4v+Ihr)l&eW=h?l^U_y><6lCU;?S#Ngp!n$H;|K)cr%{p&U$~ zLR@DH1#hMh3MXjbaUTcMNjX})(NjRUU^wE=>Fe@X(qP7s{}%5?YXOL#QH>BrI81mS zw%QUE)E*JhQ(aGP0Z@E}6o{Fwgyhp?m*AWyj`q`AdE{jd4!CBY+UtM!7-}s=X~An3 zZuDT5sGzz;>I_EL-ro)I_JjnyUybBbJK-0y(PP#WB3$0|DIt}Tkb{uKtC#3IOYshv zWcWfR{2&C+c0fL`Tu38HB*X5`94}kStYk(0rY@o?`TXl9_^`lHCKVkW4Jjn;P4u_B zqHdACQ~z&(CXk3g7*nQ0%}=>Vxd@27wcA-XuUiIpsQ?^|P_`Drm-NT#yjJ;-Gq0@- z!4s&e8La=~w_)uk^jzSXLxVcG*npYROur7YR3Mk|-yR@s)oa>1|E3cen1x4Vg9r+E zFj{Y;<;$LR9DC5=T@Dg=+FB_ z*?DvZC6{2A$3L*fI2TE)VN#AgwD$Aex*`UpW~WJ%fjx6?4)#f(|1KtHJfVTjm!|Wf zRaG^#sYGsN$6XP40M%mb3UJVEHg;XTeNtbN$@8yIZsRlcGy%5FWK!GEFRKL?EiUMZ zl+rJMvH9}8w#m)M7kSlRZw!5!*jud#42*SDVG-_e^Tmj6LL(j%MkkL)&xYfQ~ zn>X1rLS*G1rHPtmb+`6lo>!}ay~e%i1-B79r+@~<2B~Ha5$$O|#l2N0J^sk#taPUa z?T?lrZu$4q?jupxSyK^3m@>-4dX|%3bfK4 z=Ly>B0)#G6l|n3BFH7BVuhFFLtM=8oM2}*mmvK>*d^pO-HCjkSTbB38t8x`(xtUn~ z{4b$akenq*_{aqhp@4L}p=Wb$X*f&X|II-f20q~h&Z{2RegCp22E-mZ&U-Jrn!}G# zCpEhBg#KBqsnY5Z)g#3#dv9v-74EYen}ZrCHQON5iWYHi89ZoSZspseG7qhGGGTjDkz6n7EdWb(oTzduD?UF9 zh(2mS!;S({f0EUmv|#%VNpgbR1!u~^%q&Rlh^!HbW@4p)0KGd(h=AtPu=f)h2~zF} zu5)^ou23auy`cT!f#Cx)xY1DMPtdx8-3pS(Bv9bn?>${ad95qbP!nn2NBXX$@OI=) z-1qNFU;E%YSN|NB9VVy=$a>K_jX-a^6SFKGg=M`4oi{<;HHB0Gyz19M!u}J{59#T} zRp%N>#N)0MG26})9104#43rZ5(?u(rSq{|e$XAA>QL$i+cD6=552Un-V!#E#XSTF9 zmPmuVKvi+c;>yMS}H6#fLG!mJOLJ zVFUB_tw4mHeKar^)5RhwuDl?W4x0x~O5JVuCovS43X4jK#v9*U))n1l7cHIUk>FdxGd*qS&Q=iyI+IK^a5)e$y?j zRRJ+BBW!nPXe4s5B*Hx?9&S(-3)_1^UC8a9?iYtQy7C?i^0>Pn zBT>W~5wsk9AktxE&qX?@ZKX~hiU84~>qwL>>fBgfUv=F|n)9Xb(H6#2ju@XKHnC!1 z?v8KAtC7HEBQt&69a?!VJM&RkLRowZ-XHwbi%I@7A>A$>_83MI8C$3CT0z!-vOLDs_CN74vNhj00!tgO=U z8A;@&`!0dVT#6>*5&9G)(C}sDxeqL+v+rEelUVpcCy1)LGGjOOl}&MerSCa>d8X#x zKs2+72#(+^$E`N=qsCS2PVa&6?Q?HJPW?g$$jExHy+h#xdZ2+P=80Cb!q9_g8zQ1t zF628JQ*?R)uzdo6Wk?EH=ek5Nl}2C<>FPt_t$S}L56r3`Ra+l7Ts<7={rOamk zI$I69Vo@;Qu{8MUN6Vjc^IR<9)mWvT!_6B{rkuleX0*zDiL3tZ`WI^ua<8}?{?Pi| zx3UCiY8>wAF5+jXP#U?Wx#S-B9IcL4=Xc^^qE-6jWP{ z&8#PKJ}XA&Nd~`HMJoD_l(TXQwKMvgeSiyRei`;2G# z5pq0n6sf&0uR1glc|^DB0ekRh<~o%U*E{-Lq*oUqndJeV_uU+w-_2g^9ZcMr0QPsA z%`zVrUQ+SgEx4lPi8I|Q_vo0A`6#-*(%%erW#Fjp_}f7pHsON*ua{JLRel2IpC{hs zvwt*rCC9rSO5#>Dvri=l^*}sNaLYgykX?RliT8r@vE=K@#@E+w=Luf;@@8aUx0}nI z_IZO#Pu!-@f$BQ_Nxh5M>@%06MHu-x8PB0(Pu#C1HO~!*8}#?}?F6FCPf{p`>ujs~ zvd?Knf&Bc7wTMfts6Bt^V2T)}w8A_MWE*L8_tB%+$pap=IBT!>Ma%h4t+B9;oC!o} z3r$InCbVb13$|%ES>tNDmaKdbSjlfcnDWxX{owSkIzl-gp1y%(SXZbJd5#7{ zC!OO=)mP@uUTU~!2;ag{qfqA77p+eWqm5|bx%)z^!TSeq`AJf0n>-ONn(s2Y-z6#_ zAErx*{UQvo$0^QXvofn>T(Fii3u~@YT&0bF?!@vcSv-68EYcJ=!pOnFVFQFp7aP!} zuZQy8fS^ED{3M5jPOY1HY_S-d0ki2Tsn5@C9+D40Xtir;soRO;z98 z@u1lyxeB)6tWTo+5b?Ka;$VgJsokX3?t#Svt1!g8+X4MccUd5 zl_V1q$05%eERGz6RLj#QB)V>vYB2F+MNxIWyjRFxGdZ5SWlP* zqcWRSOEm4(XnJiWMW6V|eKH2?obwYN&X9f0DSV@D2pe>v4#mtWG;g!bdYmfZz~F`Y zmMGdj_>p7??bI|!ZIqPT0OaMdGRUD19}4CTRHT~2P@iXU7xRxf8BCR67u##lWV5#K zhcA5Q&ntxj^tZCw%1&ono8oKu~$fyp)p-X9k(=Am0r$^;j%q;nV(=uCs5ONDH4kGWJmfu#Q%6c=Er^uF7vZFhPMZa zD{7?z!mkbf^^Rvn?Rnba66wEeR<1Oe-Bt;dW0Ux4DQtenPqgw;;aQXb^z6t}h1xGU zOcC@<$-G(=J=@p>{h;-5wSkp5o~{pUarFvD2L5}{`EUx#ev4P^{qs<`7%lrP$VrS} zpSz22=xfCl?k0K5Y@-^H;z@$lI_{!E#cy2%Rz>nq{j%7a*gz9>*y5ZjW=9bkNUt+5 z5S3V6(l4BthS3TKDO?g6ud4r$a`_QDoQ$&CdzAxJ%zl(vQ>w?Z>wbmzk`06b)P_vt zRFMG<$T`&&LB};(<)jB(6f_eB#iUYZj;5{)5WFe8dM{ZFwqgktc(x4hEVQeEws_OJ zFvQ_Wivu)CL~;8Oz}N~eAry#e)hz#(3p8jKBgx`Xh8qJZOVb7_C#KD8#_&LbR41a? zaLge2;Z2{pO>##qF>how7-KSLmAYq8)me;a+1TWmNdB-@4c3E}7@c7$zd_4;ji+wO zUf!c;$Z@7D#G-v$d2!UefL5fXzj5T@ez28Z=Fkgbh*ov?Fd65T9Aaf2ogf3Nrr+lw zOcM`GnDU9P3WkILvqF`G;wF`t_TzGkuY9$2dVPR!mfNJPC?tL^5@f3|5=ha}40MVX z7?z9K7<#Tk5^OBn_O008tQ;{}{QVa&m;TG>IDe!)6CR$3%TBbVR}CDu@yt2A#i{Rp z;l#o2JdJxv6TLx~VhF*%9Q>BD(1PwEb|8G;`BJ^^FoDhh!&Fu+8;5N0>5xW+(2T76 z!j_ddc*LJY%IupPtOlY{fsFGJDCw&P<&7aTyZOBI9c!mb@>+0L)+j$&8pm0$t-_jr zZ!Z~3Fyv|_Dbk+g;kqMFOp|hSbCbyP=yf8ADbxKL(9a92QTUMeCw@0V(n#SN3;+`w z+}=I#NDTmC)3$uy^e?Cnl3pv1DDDC>;uww@GMK4gYBFeIm{AtLt1t))zzPeynrGBi zNlrNs5gQGHYu4MZi9EL|3n%tX%%&?vLS`y>yEKM1f$H4j&yS~_bc<$m5c_dITV9tD&d9CA@#X7!>l;XIj|+ zs0acM)f6_nKutMBF$Y!h`T{rS(#CA{Shfn)UQnUp-n#E`YhGuW+s`|u1y|xI9?u5- zIQvO1E2-Q>#rw}32kvp{8%nARkeHV~=-+e2g>2?`a-j;bclO`Aj<}z6zLlPj}b%yVQ4F+3Rr8b3)vLri3LimWF6{s;>2^b zk+Q*{1W8`KlUOPXx%~dm2_N5+?-gXPM#9EouVz>BW1pQf>>zledhzk!0gwbsYLFZQ zW?&q|$Y^lkKR$`4&)Eb2$!a1@Ub#wsJY)EWt4I!_{EtpWo%ezK{Yv%m+ai-!bWYp; z&toqMZ(_&NdfC54>GUY8sxG_%HAvu1vv2<3A>8dE6`p*FzL?cooTe9)N&zyD$JSH# zS%*}g(UFOeL4ag9S*Y9bK=bd9z*$1xB^M^+%WukS?Mgg~hMAE+wpzf$Pd$4m1m4wX_jt{ms(H{r#RxFmSu zma}mhyXhTPNLfk0_zysP`2E-?sNy^)3*di{2&+n08V@S~nG-Bovj|HK;4M5DH1$O) zNw7syF=gG}QoNOOc;v8hYSpvn=5f1Z{(Ui!ZL-!iH!N z);EE<@$6mxM`H(3JBT>X;q;s>X6O%F7uj;>?fkRrTiW1)DrBo?&9x;?kn?otJ2o4= zs^C+QhS-ztR1z|2%l8kn@s^{n)@4LS`0gZ&a+*1Fc~&5K7++ZD|Sxpiv4ae zC%0KSf7c@HoOlrMp4*Ts(9S)X?xZ-MfD@?KpAS0S_IW8(JZ;4!0)LvcyJ++FWK7vj zE#_Rlx^uA0I}avUt=0E~>fIVS4#FL1D-})Irn-JK1z=A@V%Zf(WxuU?Qvj)R{>Pc} zU-KB!6@we6xuMucLGz$#-7(F z-Xgxi$}OP#b{=wAejqI1NagZVsP=9KXpB#~r`^xQS$zI_^S)uJnP81bBi$$6u&|-p zI|YcfeeMIF?QUZa?dX_zo1bSdC2T| z)?e6T@08Z^15$sYa94%UK&XA&iembw30UwrO|RF*Ds zaWNesRj>|>R(~ZP(PLgI0}hM<#1!fdvh_US=%NjOQ!Ewk9-Y@|r0f5{eCG?BekUsB=*1V zOYDbL3kK<3WKI0l6>htYmZTSsad2A66}Tz%9l{TUJ^f zzvTUL2{+fYRLJHf3HiMGjk|og@zXf65qLcE5PFir-H#G_FqbdcKI8@P-zcy}9{g_Z z6@R%_8tPbGYW8Yv-Oqu$9E}SPe+_K6JEC5vx1S+?0{_+7%*|@9(52m;loa-_TRvb& z5T|e$N#<|XxTSw5w>N+~haYr>-Y{FPb~R*;YqsUt8T60^`GtYaGXr8*=*O{2HQpsl zlHT>J10UwEvWpLq-_B{1B-&%Kq2OCQ0c$Zt*zd5M4_sjEXWv_-2_0W7mRHBb=v)lS z#F-iR)<;*NYW?Ut&H8=P=NpW#IzXQ~U%EG9Dkl_`ZL#-Ph0)j8M4K3>ig-ZH(sI^~NqkjqE+JlByB4(2EaY3%tJMTMm&f78CCoMj7m~1&` zFk)K>)89M5#(nBsf8_-UMe=0EG}mywOZU4Jn!8=73pIJ(NESu4!+foLv3ZeWGNby# zlg#k0S3}8A?cB&;#!p?`8dLG{48xgF3tz|c*>$H!K+g8z$Y6$|0Y$(r=7_c*sDjs& zog3nmi!KKW@Dz|DBRwxp+>Aq3)HhRZwy7*pnKx;gCJEY59cYi}pC;_%i6-?(GyE3C z1V%7$uUMmLn126UB++KnHYvbz5?A;V5p4DXCmEfQOjT6jI^&v{#(OguB@$58i6-d8 zhps`-D%gL;buG*Od9!PeX8b&-%Ovb%oM;Eil?Wq98qLGf9nA(U1zNYt{Z~E6mKHJ-FI&7i2y>+<A? zl?5zAF8J|tTD^kD)$6Xt;XK7WatX$Gkv990Ojj_T-U-}_k`&@`0=urg^$9W9fy-Cu zJxd%nhYxfznnkz_aE!&{S%eMmyFVO(f3pz&f-tQ%X*LwyQAmh3gvS*SvnJ2ahB}A4DPe1o1w(>2xMfcG07-a~(rT7~fNp z=%vP25piSmP+ZVog%)%g=<1%HtdN&*I3ab+ajOjiqT--|sV)%ua@v`*_@3U#=6;hhlMuM3fUFB!ki)xYh$ z!q=7K!K}+v|9O{X`~}76edYVvkCHFFlwhC>uRfP|*(Sh&w0wNwmh+HdYw!rBs}iZ7 zcF-{^5+J*ra!-i9iRj@IWN`g7ai6G%ESUD(!#gs47d}nGbEe~xWizu}+Q;A2eyu8x zFT!kh-MYydQ)lw6A8iEfIKg&!G}f}U6YUwX(@<2=CdAncH5ZOg=j5-&9Ic45ySK3u z{1_!5NK?eLU2@WQ6s)C++wJ-n{i7BH_Jh_Lm+3EUD%6%FlTP{DdKR68g5?*+X?>BB zuZ^%JY*b1eggu*!en;y|jk_m35-}+p@>$dnp&ybm%Na`y?VTyNSvoErH`nGf)eLZe z+t6wcwf(hPIeSZ~ITG6fKP~?Xa#lx~i{kF#?BikC{FHtdkm-wQ%FvOi1(L4;p|ldu ze~Jcd#b52f20DmfjNbDE-PM2t-~m!ef-5 Date: Wed, 10 Feb 2016 11:23:53 -0800 Subject: [PATCH 135/442] Might make the defib more reliable, and adds a message for the ghost not being present. --- code/game/objects/items/weapons/defib.dm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 0cef06f2fa2..c61eee98528 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -342,6 +342,11 @@ user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) var/mob/dead/observer/ghost = H.get_ghost() + if(!ghost.client) + // In case the ghost's not getting deleted for some reason + log_to_dd("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost.") + qdel(ghost) + ghost = null var/tplus = world.time - H.timeofdeath var/tlimit = 6000 //past this much time the patient is unrecoverable (in deciseconds) var/tloss = 3000 //brain damage starts setting in on the patient after some time left rotting @@ -387,11 +392,12 @@ user.visible_message("[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.") else if(total_burn >= 180 || total_brute >= 180) user.visible_message("[defib] buzzes: Resuscitation failed - Severe tissue damage detected.") + else if(ghost) + user.visible_message("[defib] buzzes: Resuscitation failed: Patient's brain is unresponsive") + ghost << "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)" + ghost << sound('sound/effects/genetics.ogg') else user.visible_message("[defib] buzzes: Resuscitation failed.") - if(ghost) - ghost << "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)" - ghost << sound('sound/effects/genetics.ogg') playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) defib.deductcharge(revivecost) update_icon() From 2c29df8a58b9c52e1dc773e704cd3998b3936c9c Mon Sep 17 00:00:00 2001 From: SamCroswell Date: Wed, 10 Feb 2016 14:50:52 -0500 Subject: [PATCH 136/442] Corrects a spelling error --- icons/mob/back.dmi | Bin 90014 -> 90014 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 281133febcf48f4e4afa0297d504665bd0d39255..043c0f35be08e787994dad0c2370c1730afc55f0 100644 GIT binary patch delta 991 zcmV<510ejKzXhJZ1&}&_OOM+&5XaB9jqVQ?Zt-_8x#vP>7nS^psA5KYd%zR z0_hx5deJ|EK|&r zF&xQ5LbYn>2CYWW(|lHvRo7xytQVv2ZmlQ=^_UoZ_sYB64I!x_{QLrRBm zhQVbS)!FCqWP;Q!0Jc`3ot9Mbq4g|z64gzXw8YRTeSCNeyvoDAW`fN6PX7Mea~_Ve z*TFgEOTeuu%AS0G&7LT-uOa?bd6t05c2u%f7Ge|WHnLo^aK(|-h4S|SgEd!jP&EwZ zZ?^~6d9YL(ueORf`gA-S<31f!2EFx1CM6KkK_X@$c1+J;SOTd!E!Zst=EUi}hkPpG7*eFQ-M}N7v); zw(`B}PJv5!kEg&TqG`L>-WDH~D6g_QtV$HM@_tJGf3ta~AHhiEjc_3NMl=wABN_<7 zz8pY-)w4;7Hk7X*jvZD_!{u62{z5uzU%_BLhc{Lwry$Z(>lD)JekYfreBSt`wJBc! zn%1VN>_3WsiOpj3!y3dJo7N_z2sEutNCjwGn~?M$Ipq7o$U)H7Fb1dmJ{cyP&o`(W z_uNve24@X97$zWr4{T*s{>TOx395m01fST_hlpF3C?7HdE8zmOC(Z}$z?v&yoW60h}Z4C>e9MF+rD43TJyZ`K76 zZ0*G9Z^t=vz1WPqmSl*ej)X*yArcdS#L$5W1JO5H2eSk3BShtEkZs!701uO7h~zKu zilbtWOf5PX2w6iU5lLKzNYd4p3|e&Nzu)OMSF#o|lN|#kf9U(z(GXxY0gI}tP-z2& zjF6?sLGn`wA=lKc-{-eGkhskJXk#EZFu8@v{KXFBPcZoelRxLlP?mNomhO7!^}}t| zSqVjWdVNPLaX`YqTk@)aF~XT_NfFx*i#AzbKLl*Bq769+tjS|9KM5CzJ8?I|1qQPe z>+2pI2OL5YU{zK5SUj})IO#j%A$D6;z>}iGmg(wCMjG#)N1L=kJUYGY`8VuD!i9a_ zw|n};G2gHaHX3rAB*MEk*AkbGJhg_6K>g_WCY77+OFtH0zC9PuUti|`06<9w!@R^2 NNP{5+w;==peOr-W=_vpJ delta 991 zcmV<510ejKzXhJZ1&}&_$&TAb5QfjvQxNu5GDgc}a?!!T7{LIsa|m)4TFoN6M!hiI zMJ;*y97tM}6Q=(e@I>INs$OdA`dIw(<=2;Q#q-yf`H5oU;EP?c{q!)Oow*cK?265L zJ~PC%k?tpn5-N7Z2jwY=Az}StJ}WtiQmq=gL8}q;G@q4Z)wS3a>&581lNH6F9TS5O|G(GG&EjgYT8yP_ID>X#Na+yH zFt{wEI{Q4HOpv+-z}5=1(vm7Zw4NnTqPEGBmKYkPj}LEwS9#diOwhKzlfVD=oQI?A zb#PAk5^!sZvL|1EvnPt|YlweUo+V(q9hIz=h1f*8jV#wJTyZ3Iq5OToV9k{rR1Jgq z+wH-19&A}u{xD6jCHs2XU!H!5^x?ay;NT-yma?`6Fn=5axq86a^&^Zv;#!{ot$oZV zi+K7gVL7MgmIwQ0dKo72&-$)T{9D?wXV{cu&y$u$_2F@Uv0kj^vq)$5<+LjN=z9F! zyL_+QDR2p|@f5g3ENvItoA6PI@+xb?szgyM@2B+tH=B3*5sXCM2nT|1L<8|RqJa?X z%K;QvJ)4whL-`8g*kRQ)T&^|cFQmiv6%6Kccw<#^3L-tVP9d%CcXBDp=QrQ9HsuRI z)7mtZ{YNo>u~}?>kU_k$X>CG^K-1cURDhlTaMqB6VFD8Pz*bh}k8FUEpc+_5@QE#bi1_Xj|mw z25abvq0E*H5pZ9INdEleGX@@Po6i>=83XX>ONK~j`d2OpgZ4Ff(E)H3LnPYbi**46 zTRU<3+i}iZFE-<@B^e^ABO%dah{OaSF?3+UK=h5)!R)~M2vPYOWScfNz{4aNBKZrv z;;7goQ;QA;Le>yTL=u-Fl63VYgF8C&-|zIBD_IL|lN|#kf9d)oSoScHTN`@CQG z^oe7>SsS)z$Z?XGpEvgc=33&~k!RMh5U3ZuyG7-uo6?WPmv7I-^VgU8KQVI!P Date: Wed, 10 Feb 2016 17:21:52 -0500 Subject: [PATCH 137/442] Automatic changelog generation for PR #3552 --- html/changelogs/AutoChangeLog-pr-3552.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3552.yml diff --git a/html/changelogs/AutoChangeLog-pr-3552.yml b/html/changelogs/AutoChangeLog-pr-3552.yml new file mode 100644 index 00000000000..8b24fd2ce9b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3552.yml @@ -0,0 +1,4 @@ +author: Crazylemon64 +delete-after: True +changes: + - bugfix: "Fixes the dialog that occurs when the AI shuts off to actually do what it says it does" From cb618a533afd00d043b864c380d184fabf717a26 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 10 Feb 2016 17:22:40 -0500 Subject: [PATCH 138/442] Automatic changelog generation for PR #3555 --- html/changelogs/AutoChangeLog-pr-3555.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3555.yml diff --git a/html/changelogs/AutoChangeLog-pr-3555.yml b/html/changelogs/AutoChangeLog-pr-3555.yml new file mode 100644 index 00000000000..323551afa5c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3555.yml @@ -0,0 +1,6 @@ +author: TheDZD +delete-after: True +changes: + - rscadd: "Adds admin attack log to players being converted to cult." + - rscadd: "Adds shadowling thrall jobbans." + - rscadd: "Jobbanned players who are converted to shadowling thrall, revolutionary, or cultist will have the control of their body offered up to eligible ghosts." From 46a3f25e737464ac5e3e9573f257f44f57439e9a Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 10 Feb 2016 18:36:24 -0500 Subject: [PATCH 139/442] Automatic changelog generation for PR #3551 --- html/changelogs/AutoChangeLog-pr-3551.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3551.yml diff --git a/html/changelogs/AutoChangeLog-pr-3551.yml b/html/changelogs/AutoChangeLog-pr-3551.yml new file mode 100644 index 00000000000..7ad2d1aaaa7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3551.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - tweak: "Kinetic Accelerators and E-bows automatically reload" From 9f41759f95d0140633526cb1b7cf3884cdab2fdc Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 10 Feb 2016 18:39:24 -0500 Subject: [PATCH 140/442] Actually, it's just a changelog --- html/changelog.html | 89 +++++++++++++++++++++ html/changelogs/.all_changelog.yml | 94 +++++++++++++++++++++++ html/changelogs/AutoChangeLog-pr-3423.yml | 5 -- html/changelogs/AutoChangeLog-pr-3438.yml | 7 -- html/changelogs/AutoChangeLog-pr-3441.yml | 4 - html/changelogs/AutoChangeLog-pr-3455.yml | 6 -- html/changelogs/AutoChangeLog-pr-3461.yml | 5 -- html/changelogs/AutoChangeLog-pr-3462.yml | 9 --- html/changelogs/AutoChangeLog-pr-3480.yml | 4 - html/changelogs/AutoChangeLog-pr-3485.yml | 6 -- html/changelogs/AutoChangeLog-pr-3486.yml | 7 -- html/changelogs/AutoChangeLog-pr-3495.yml | 4 - html/changelogs/AutoChangeLog-pr-3496.yml | 4 - html/changelogs/AutoChangeLog-pr-3503.yml | 4 - html/changelogs/AutoChangeLog-pr-3516.yml | 4 - html/changelogs/AutoChangeLog-pr-3518.yml | 4 - html/changelogs/AutoChangeLog-pr-3521.yml | 4 - html/changelogs/AutoChangeLog-pr-3522.yml | 10 --- html/changelogs/AutoChangeLog-pr-3525.yml | 7 -- html/changelogs/AutoChangeLog-pr-3527.yml | 4 - html/changelogs/AutoChangeLog-pr-3528.yml | 7 -- html/changelogs/AutoChangeLog-pr-3532.yml | 4 - html/changelogs/AutoChangeLog-pr-3533.yml | 4 - html/changelogs/AutoChangeLog-pr-3540.yml | 4 - html/changelogs/AutoChangeLog-pr-3543.yml | 4 - html/changelogs/AutoChangeLog-pr-3548.yml | 5 -- html/changelogs/AutoChangeLog-pr-3549.yml | 4 - html/changelogs/AutoChangeLog-pr-3551.yml | 4 - html/changelogs/AutoChangeLog-pr-3552.yml | 4 - html/changelogs/AutoChangeLog-pr-3555.yml | 6 -- 30 files changed, 183 insertions(+), 144 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3423.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3438.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3441.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3455.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3461.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3462.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3480.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3485.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3486.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3495.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3496.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3503.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3516.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3518.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3521.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3522.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3525.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3527.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3528.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3532.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3533.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3540.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3543.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3548.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3549.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3551.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3552.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3555.yml diff --git a/html/changelog.html b/html/changelog.html index 56172c88974..1ee52cfb38c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,95 @@ -->

    +

    10 February 2016

    +

    Crazylemon64 updated:

    +
      +
    • The cloner now checks for NO_SCAN on the brain when scanning - unclonable species are now truly unclonable. You are still able to revive them with a brain transplant and a defib, however.
    • +
    • A tier-4 DNA scanner linked to a cloning system will now be able to reproduce a body from a brain's DNA, in event of the original corpse being gibbed or similar.
    • +
    • Species with organic limbs and NO_BLOOD will no longer bleed (though still on hit - write that off as "bone powder")
    • +
    • Skeletons now lack internal organs, except for the runic mind which exists in their head - an analogue for the brain
    • +
    • Skeletons that drink milk will be regenerated at a moderate pace, have a small chance of mending bones, and will praise the great name of mr skeltal
    • +
    • Adds a reagent system for species reacting to specific reagents
    • +
    • Slime People can now select from all human hairstyles, and their "hair" will be tinted a shade of their body.
    • +
    • Increases the frequency of the cortical borer event.
    • +
    • People with borers cannot commit suicide - this applies to a controlling borer, too.
    • +
    • Borers can no longer overdose their hosts.
    • +
    • Borers can now inject Saline-Glucose, Spaceacillin, Hydrocodone, Mitocholide, Salbutamol, Capulettium+, and Charcoal. Styptic was removed, as it's pathetic at healing when directly injected. Salicyclic acid was removed too, as its functionality is duplicated by both hydrocodone and saline-glucose.
    • +
    • A mind trapped by a cortical borer can now understand things it could understand when normally in its body.
    • +
    • Changes chemistry's welding tank to a wall-mounted version, to increase the room available.
    • +
    • You can now gib butterflies and lizards with a knife
    • +
    • Ghosts can now follow mecha
    • +
    • You can now access an R&D console by emagging it - it did nothing before.
    • +
    • Walls will now properly smooth and show damage.
    • +
    • Fixes the dialog that occurs when the AI shuts off to actually do what it says it does
    • +
    +

    Fox McCloud updated:

    +
      +
    • Fixes not being able to attach IEDs to beartraps
    • +
    • Can no longer spamclick someone to death using headslamming on a toilet/urimal
    • +
    • Toilet/urinal headslamming now plays a sound
    • +
    • Toilet headslamming damage reduced slightly
    • +
    • Can now fill open reagent containers in a toilet to receive "toilet water".
    • +
    • No more message spam when someone fills a container using a sink
    • +
    • Can now wash your face using a sink, which washes away lipstick and wakes you up slightly
    • +
    • Washing things will now use progress bars
    • +
    • Ensures consuming a single syndicate donk pocket won't get you addicted to meth
    • +
    • Kinetic Accelerators and E-bows automatically reload
    • +
    +

    Glorken updated:

    +
      +
    • Added a Knight Arena for Holodeck.
    • +
    • Added red and blue claymore sprites.
    • +
    • Changed overrided to overrode when emagging Holodeck computer.
    • +
    +

    KasparoVy updated:

    +
      +
    • Vox versions of the Officer SWAT sechailer + HOS SWAT sechailer + Warden SWAT sechailer.
    • +
    • Resprited versions of most Human masks to fit Unathi, Tajara and Vulpkanin.
    • +
    • Warden now gets their own version of the SWAT sechailer in their locker.
    • +
    • HOS now gets the appropriate version of the SWAT sechailer in their locker.
    • +
    • Repositioned smokeables now available for Vox, Unathi, Tajara and Vulpkanin.
    • +
    • Properly shades Vox bandana down-state sprites.
    • +
    • Readds Tajaran bald hairstyle.
    • +
    • Alternate style of non-Human breath mask (incl. surgical/sterile mask) down-state positioning.
    • +
    • Corrects all non-Human species' breath mask (incl. surgical/sterile mask) down-state icons to use the right position style.
    • +
    • Minor adjustments to Tajaran breath mask up-state sprites.
    • +
    +

    PPI updated:

    +
      +
    • Adds a reconnect button to the File menu in the client.
    • +
    • Adds head patting
    • +
    +

    Regen updated:

    +
      +
    • Powersink can now drain a lot more power before going boom
    • +
    • Buffed the powersinks drain rate
    • +
    • Buffed explosion from an overloaded powersink, try to find it instead of overloading the grid.
    • +
    • Admin log warning before the powersink explodes
    • +
    +

    Spacemanspark updated:

    +
      +
    • Miners can now utilize the power of mob capsules to take along their lazarus injected mining creatures!
    • +
    • Store your Pokemo- er, sorry, I mean mining mobs that you've captured in the lazarus capsule belt.
    • +
    +

    Tastyfish updated:

    +
      +
    • Species that don't breathe can kill themselves now!
    • +
    • Suicide messages are now catered to your species.
    • +
    • Shortened the default pill & patch name when using the ChemMaster.
    • +
    • The chaplain now has a service radio headset, as Space Jesus intended.
    • +
    +

    TheDZD updated:

    +
      +
    • When Ahelping, "Question" is now "Mentorhelp" and "Player Complaint" is now "Adminhelp."
    • +
    • Mentorhelps and PM replies from mentors appear in a bold aqua blue color.
    • +
    • Adminhelps and PM replies from admins appear in a bold bright red color.
    • +
    • PM replies from players appear in a dull/dark purple color.
    • +
    • Adds admin attack log to players being converted to cult.
    • +
    • Adds shadowling thrall jobbans.
    • +
    • Jobbanned players who are converted to shadowling thrall, revolutionary, or cultist will have the control of their body offered up to eligible ghosts.
    • +
    +

    31 January 2016

    Crazylemon64 updated:

    8+_I&#yIjsV>h0d0twa>JWGm1e8&?1<^ORFm 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 IC*7j|7fU%nj{pDw diff --git a/icons/mob/species/vulpkanin/mask.dmi b/icons/mob/species/vulpkanin/mask.dmi index 86c84471a08bc4bf2ed4535d2cb457a3f9c683f1..fb17cd483a40554e5d05360c726c001471c6b7f6 100644 GIT binary patch literal 27609 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 F{|2y=JZ%5~ literal 26243 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 From e3c0ec96dd53cde13d5355d63204aee68f185f66 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Sun, 7 Feb 2016 02:41:00 -0500 Subject: [PATCH 083/442] Automatic changelog generation for PR #3528 --- html/changelogs/AutoChangeLog-pr-3528.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3528.yml diff --git a/html/changelogs/AutoChangeLog-pr-3528.yml b/html/changelogs/AutoChangeLog-pr-3528.yml new file mode 100644 index 00000000000..2ceffd2bf41 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3528.yml @@ -0,0 +1,7 @@ +author: KasparoVy +delete-after: True +changes: + - rscadd: "Readds Tajaran bald hairstyle." + - rscadd: "Alternate style of non-Human breath mask (incl. surgical/sterile mask) down-state positioning." + - tweak: "Corrects all non-Human species' breath mask (incl. surgical/sterile mask) down-state icons to use the right position style." + - tweak: "Minor adjustments to Tajaran breath mask up-state sprites." From 8accdb52db101aa23b5ede76119ee5a060ae80ee Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Sun, 7 Feb 2016 19:27:22 +0100 Subject: [PATCH 084/442] add tesla to supplypacks --- code/datums/supplypacks.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 3523a69bf9c..6cd6c33d5f0 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -524,6 +524,12 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine cost = 10 containername = "singularity generator crate" +/datum/supply_packs/engineering/engine/tesla + name = "Energy Ball Generator" + contains = list(1 /obj/machinery/the_singularitygen/tesla) + cost = 10 + containername = "energy ball generator" + /datum/supply_packs/engineering/engine/collector name = "Collector Crate" contains = list(/obj/machinery/power/rad_collector, From dba3a8d9374d71e92fe8a9362f6fd477706675f3 Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Sun, 7 Feb 2016 19:40:19 +0100 Subject: [PATCH 085/442] Fixes issue --- code/datums/supplypacks.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 6cd6c33d5f0..542081f8a92 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -526,7 +526,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/engineering/engine/tesla name = "Energy Ball Generator" - contains = list(1 /obj/machinery/the_singularitygen/tesla) + contains = list(/obj/machinery/the_singularitygen/tesla) cost = 10 containername = "energy ball generator" From 683c8d16a2f0ceb3ea8d43cdf6523a31f51f6e15 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Sun, 7 Feb 2016 15:03:25 -0500 Subject: [PATCH 086/442] Automatic changelog generation for PR #3522 --- html/changelogs/AutoChangeLog-pr-3522.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3522.yml diff --git a/html/changelogs/AutoChangeLog-pr-3522.yml b/html/changelogs/AutoChangeLog-pr-3522.yml new file mode 100644 index 00000000000..0f566d7dc57 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3522.yml @@ -0,0 +1,10 @@ +author: Fox McCloud +delete-after: True +changes: + - bugfix: "Can no longer spamclick someone to death using headslamming on a toilet/urimal" + - tweak: "Toilet/urinal headslamming now plays a sound" + - tweak: "Toilet headslamming damage reduced slightly" + - rscadd: "Can now fill open reagent containers in a toilet to receive \"toilet water\"." + - tweak: "No more message spam when someone fills a container using a sink" + - rscadd: "Can now wash your face using a sink, which washes away lipstick and wakes you up slightly" + - tweak: "Washing things will now use progress bars" From e1c974fbe868c25edd4ea3d0fb19469db2a187dc Mon Sep 17 00:00:00 2001 From: TheDZD Date: Sun, 7 Feb 2016 15:11:54 -0500 Subject: [PATCH 087/442] Automatic changelog generation for PR #3525 --- html/changelogs/AutoChangeLog-pr-3525.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3525.yml diff --git a/html/changelogs/AutoChangeLog-pr-3525.yml b/html/changelogs/AutoChangeLog-pr-3525.yml new file mode 100644 index 00000000000..ae02862c55a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3525.yml @@ -0,0 +1,7 @@ +author: Regen +delete-after: True +changes: + - tweak: "Powersink can now drain a lot more power before going boom" + - tweak: "Buffed the powersinks drain rate" + - tweak: "Buffed explosion from an overloaded powersink, try to find it instead of overloading the grid." + - rscadd: "Admin log warning before the powersink explodes" From 45cf159ecfd7546837d56f0bb704dc6ea1e5b392 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Sun, 7 Feb 2016 13:34:17 -0800 Subject: [PATCH 088/442] Lets you gib butterflies and lizards for keks Butterflies don't actually give you meat --- code/modules/mob/living/simple_animal/friendly/butterfly.dm | 2 ++ code/modules/mob/living/simple_animal/friendly/lizard.dm | 2 ++ 2 files changed, 4 insertions(+) diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index 88c8980a75e..a6c5effdde3 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -17,6 +17,8 @@ density = 0 pass_flags = PASSTABLE | PASSGRILLE | PASSMOB ventcrawler = 2 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + meat_amount = 0 /mob/living/simple_animal/butterfly/New() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index a805d06a1e4..c2118b19bc1 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -20,3 +20,5 @@ density = 0 pass_flags = PASSTABLE | PASSMOB can_hide = 1 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + meat_amount = 1 From 88d90b16401f5f0a22447b571f2ded47a9463213 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Sun, 7 Feb 2016 13:42:42 -0800 Subject: [PATCH 089/442] Ghosts can follow mechs --- code/_onclick/observer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 47ed53749bc..4e38804fa2f 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -8,7 +8,7 @@ return // seems legit. // Things you might plausibly want to follow - if((ismob(A) && A != src) || istype(A,/obj/machinery/bot) || istype(A,/obj/singularity)) + if((ismob(A) && A != src) || istype(A,/obj/machinery/bot) || istype(A,/obj/singularity) || istype(A,/obj/mecha)) ManualFollow(A) // Otherwise jump From a743335161a871e308f97a70a4131a1f4797ee03 Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Sun, 7 Feb 2016 23:06:49 +0100 Subject: [PATCH 090/442] add grounding, and coil, minor fixes. --- code/datums/supplypacks.dm | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 542081f8a92..f6488802ce4 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -525,10 +525,26 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine containername = "singularity generator crate" /datum/supply_packs/engineering/engine/tesla - name = "Energy Ball Generator" + name = "Energy Ball Generator Crate" contains = list(/obj/machinery/the_singularitygen/tesla) cost = 10 - containername = "energy ball generator" + containername = "energy ball generator crate" + +/datum/supply_packs/engineering/engine/coil + name = "Tesla Coil Crate" + contains = list(/obj/machinery/power/tesla_coil, + /obj/machinery/power/tesla_coil, + /obj/machinery/power/tesla_coil) + cost = 10 + containername = "tesla coil crate" + +/datum/supply_packs/engineering/engine/grounding + name = "Grounding Rod Crate" + contains = list(/obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod) + cost = 10 + containername = "grounding rod crate" /datum/supply_packs/engineering/engine/collector name = "Collector Crate" From 15e37b498cba41ac64bd19961a5f05e9d82948ac Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Sun, 7 Feb 2016 23:07:59 +0100 Subject: [PATCH 091/442] Removes a grounding rod --- code/datums/supplypacks.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index f6488802ce4..b9311f76992 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -541,7 +541,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/engineering/engine/grounding name = "Grounding Rod Crate" contains = list(/obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod, /obj/machinery/power/grounding_rod) cost = 10 containername = "grounding rod crate" From 8a85fb4aa6c1b11b778694cdc689b65ab88d1533 Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Sun, 7 Feb 2016 23:11:44 +0100 Subject: [PATCH 092/442] Adds a and to follow the standard. --- interface/skin.dmf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/skin.dmf b/interface/skin.dmf index b0650ff6a45..c3d9f693726 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1375,7 +1375,7 @@ menu "menu" is-disabled = false saved-params = "is-checked" elem - name = "Reconnect" + name = "&Reconnect" command = ".reconnect" category = "&File" is-checked = false From d262014ee48fbb9c8babce02d550ac1419d6238f Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Sun, 7 Feb 2016 23:13:51 +0100 Subject: [PATCH 093/442] update to forcemove --- code/ATMOSPHERICS/components/unary_devices/vent_pump.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 6830ec8a418..d278d77c818 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -367,7 +367,7 @@ if(!welded) if(open) user.drop_item(W) - W.loc = src + W.forceMove(src) if(!open) user << "You can't shove that down there when it is closed" else From 512e524780f96217e8c0f54c97a507fc82c19e48 Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Mon, 8 Feb 2016 00:35:07 +0100 Subject: [PATCH 094/442] forceMove --- code/ATMOSPHERICS/components/unary_devices/vent_pump.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index d278d77c818..9bc8adac013 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -387,7 +387,7 @@ if(!welded) if(open) for(var/obj/item/weapon/W in src) - W.loc = src.loc + W.forceMove(get_turf(src)) /obj/machinery/atmospherics/unary/vent_pump/examine(mob/user) From 3dc79d31f7575d2d907123aec2a4d35b9cd91e39 Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Mon, 8 Feb 2016 00:35:46 +0100 Subject: [PATCH 095/442] Forgot a forceMove somehow???? --- code/ATMOSPHERICS/components/unary_devices/vent_pump.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 9bc8adac013..a7240c8d64e 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -357,7 +357,7 @@ if(!welded) if(open) user.drop_item(W) - W.loc = src + W.forceMove(src) if(!open) user << "You can't shove that down there when it is closed" else From 3b90cb703a47af2af8ae4caee888946ae584fede Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Mon, 8 Feb 2016 01:16:13 -0500 Subject: [PATCH 096/442] almost ready for review --- .../carbon/alien/humanoid/caste/sentinel.dm | 2 +- .../living/carbon/alien/humanoid/empress.dm | 6 +++--- .../mob/living/carbon/alien/humanoid/queen.dm | 4 ++-- .../living/carbon/human/human_attackhand.dm | 10 +++++++--- code/modules/surgery/bones.dm | 4 +++- code/modules/surgery/limb_reattach.dm | 2 +- code/modules/surgery/organs_internal.dm | 20 +++++++++---------- code/modules/surgery/other.dm | 18 +++++++++++++++++ code/modules/surgery/robotics.dm | 5 +++-- 9 files changed, 48 insertions(+), 23 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 8a2e835e23a..342c8a530d3 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -45,7 +45,7 @@ internal_organs += new /obj/item/organ/internal/xenos/plasmavessel internal_organs += new /obj/item/organ/internal/xenos/acidgland internal_organs += new /obj/item/organ/internal/xenos/neurotoxin - //..() + ..() /mob/living/carbon/alien/humanoid/sentinel/handle_regular_hud_updates() ..() //-Yvarov diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm index 3c1cadaae7d..ddd1350bdfd 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm @@ -50,7 +50,7 @@ internal_organs += new /obj/item/organ/internal/xenos/eggsac internal_organs += new /obj/item/organ/internal/xenos/resinspinner internal_organs += new /obj/item/organ/internal/xenos/neurotoxin -// ..() + ..() /mob/living/carbon/alien/humanoid/empress @@ -85,8 +85,8 @@ src << "There's already an egg here." return - if(powerc(75,1))//Can't plant eggs on spess tiles. That's silly. - adjustToxLoss(-75) + if(powerc(250,1))//Can't plant eggs on spess tiles. That's silly. + adjustPlasma(-250) for(var/mob/O in viewers(src, null)) O.show_message(text("\green [src] has laid an egg!"), 1) new /obj/structure/alien/egg(loc) diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index e84f74683b3..188d485d83f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -28,7 +28,7 @@ internal_organs += new /obj/item/organ/internal/xenos/eggsac internal_organs += new /obj/item/organ/internal/xenos/resinspinner internal_organs += new /obj/item/organ/internal/xenos/neurotoxin -// ..() + ..() /mob/living/carbon/alien/humanoid/queen @@ -67,7 +67,7 @@ return if(powerc(75,1))//Can't plant eggs on spess tiles. That's silly. - adjustToxLoss(-75) + adjustPlasma(-75) for(var/mob/O in viewers(src, null)) O.show_message(text("[src] has laid an egg!"), 1) new /obj/structure/alien/egg(loc) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 155e50eef28..fd0a685038e 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -60,9 +60,13 @@ switch(M.a_intent) if(I_HELP) if(health >= config.health_threshold_crit) - help_shake_act(M) - add_logs(src, M, "shaked") - return 1 + for(var/datum/surgery/S in M.surgeries) + if(istype(S.get_surgery_step(), /datum/surgery_step/cavity/place_item)) + return 1 + else + help_shake_act(M) + add_logs(src, M, "shaked") + return 1 if(!H.check_has_mouth()) H << "You don't have a mouth, you cannot perform CPR!" return diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 29f7c1574f5..a6b47e90a1a 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -18,7 +18,9 @@ if(istype(target,/mob/living/carbon/human)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.status & ORGAN_ROBOT) + if((affected.status & ORGAN_ROBOT)) + return 0 + if(target.get_species() == "Machine") return 0 if(!(affected.encased)) return 0 diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 58399e84f84..f774953bc58 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -14,7 +14,7 @@ var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected) + if(!affected) return 0 return 1 diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 8f6625be9a0..c0d1da13daf 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -167,7 +167,7 @@ //same as surgery step /datum/surgery_step/open_encased/close/ current_type = "finish" - if(affected.encased) + if(affected && affected.encased) var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." user.visible_message(msg, self_msg) @@ -375,19 +375,19 @@ max_duration = 70 -/datum/surgery_step/saw_carapace/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/saw_carapace/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] begins to cut through [target]'s [target_zone] with \the [tool].", \ "You begin to cut through [target]'s [target_zone] with \the [tool].") ..() -/datum/surgery_step/saw_carapace/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/saw_carapace/end_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message(" [user] has cut [target]'s [target_zone] open with \the [tool].", \ " You have cut [target]'s [target_zone] open with \the [tool].") return 1 -/datum/surgery_step/saw_carapace/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/saw_carapace/fail_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message(" [user]'s hand slips, cracking [target]'s [target_zone] with \the [tool]!" , \ " Your hand slips, cracking [target]'s [target_zone] with \the [tool]!" ) @@ -412,19 +412,19 @@ max_duration = 60 -/datum/surgery_step/cut_carapace/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/cut_carapace/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts the incision on [target]'s [target_zone] with \the [tool].", \ "You start the incision on [target]'s [target_zone] with \the [tool].") ..() -/datum/surgery_step/cut_carapace/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/cut_carapace/end_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message(" [user] has made an incision on [target]'s [target_zone] with \the [tool].", \ " You have made an incision on [target]'s [target_zone] with \the [tool].",) return 1 -/datum/surgery_step/cut_carapace/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/cut_carapace/fail_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message(" [user]'s hand slips, slicing open [target]'s [target_zone] in a wrong spot with \the [tool]!", \ " Your hand slips, slicing open [target]'s [target_zone] in a wrong spot with \the [tool]!") @@ -442,7 +442,7 @@ max_duration = 40 -/datum/surgery_step/retract_carapace/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/retract_carapace/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) var/msg = "[user] starts to pry open the incision on [target]'s [target_zone] with \the [tool]." var/self_msg = "You start to pry open the incision on [target]'s [target_zone] with \the [tool]." if (target_zone == "chest") @@ -454,7 +454,7 @@ user.visible_message(msg, self_msg) ..() -/datum/surgery_step/retract_carapace/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/retract_carapace/end_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) var/msg = " [user] keeps the incision open on [target]'s [target_zone] with \the [tool]." var/self_msg = " You keep the incision open on [target]'s [target_zone] with \the [tool]." if (target_zone == "chest") @@ -466,7 +466,7 @@ user.visible_message(msg, self_msg) return 1 -/datum/surgery_step/generic/retract_carapace/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/generic/retract_carapace/fail_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery) var/msg = " [user]'s hand slips, tearing the edges of incision on [target]'s [target_zone] with \the [tool]!" var/self_msg = " Your hand slips, tearing the edges of incision on [target]'s [target_zone] with \the [tool]!" if (target_zone == "chest") diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 920a5381f04..a821c8987e7 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -2,7 +2,25 @@ ////////////////////////////////////////////////////////////////// // INTERNAL WOUND PATCHING // ////////////////////////////////////////////////////////////////// +/datum/surgery/bleeding + name = "internal bleeding" + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, + /datum/surgery_step/open_encased/retract,/datum/surgery_step/fix_vein,/datum/surgery_step/open_encased/close, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + possible_locs = list("chest","head","groin") +/datum/surgery/bleeding/can_start(mob/user, mob/living/carbon/target) + if(ishuman(target) + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + if(!affected) return 0 + + var/internal_bleeding = 0 + for(var/datum/wound/W in affected.wounds) if(W.internal) + internal_bleeding = 1 + break + if(internal_bleeding) + return 1 + return 0 /datum/surgery_step/fix_vein name = "mend internal bleeding" diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index a1a957af02c..489309de35b 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -24,7 +24,7 @@ if(istype(target,/mob/living/carbon/human)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.status & ORGAN_ORGANIC) + if(affected) return 0 return 1 @@ -289,7 +289,7 @@ user.visible_message("[user] begins reattaching [target]'s [off_tool] with \the [tool].", \ "You start reattaching [target]'s [off_tool] with \the [tool].") target.custom_pain("Someone's rooting around in your [affected.name]!",1) - else if(istype(tool,/obj/item/device/mmi/)) + else if(istype(tool,/obj/item/device/mmi)) current_type = "install" if(target_zone != "chest") @@ -400,6 +400,7 @@ if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY + qdel(off_tool) else if (current_type == "install") user.visible_message(" [user] has installed \the [tool] into [target]'s [affected.name].", \ " You have installed \the [tool] into [target]'s [affected.name].") From 4f404726040a9053ea2d60f6b6e7f1e318603684 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Mon, 8 Feb 2016 03:54:58 -0500 Subject: [PATCH 097/442] Fixed succumb for weird living mobs and maxHealth --- code/modules/mob/living/carbon/human/human.dm | 3 +-- .../mob/living/carbon/human/human_damage.dm | 10 +++++----- .../mob/living/carbon/human/human_movement.dm | 2 +- code/modules/mob/living/living.dm | 14 ++++++++++---- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a05a90ef6a2..281486a5650 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -441,8 +441,7 @@ /mob/living/carbon/human/attack_slime(mob/living/carbon/slime/M as mob) if(M.Victim) return // can't attack while eating! - if (health > -100) - + if(stat != DEAD) M.do_attack_animation(src) visible_message("The [M.name] glomps [src]!", \ "The [M.name] glomps [src]!") diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index cbf77866005..4f8289b9e3d 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -1,7 +1,7 @@ //Updates the mob's health from organs and mob damage variables /mob/living/carbon/human/updatehealth() if(status_flags & GODMODE) - health = 100 + health = maxHealth stat = CONSCIOUS return @@ -12,15 +12,15 @@ total_brute += O.brute_dam //calculates health based on organ brute and burn total_burn += O.burn_dam - health = 100 - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute + health = maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute //TODO: fix husking - if(((100 - total_burn) < config.health_threshold_dead) && stat == DEAD) //100 is the magic human max health number - ChangeToHusk() //BECAUSE NO ONE THOUGHT TO USE LIVING/VAR/MAXHEALTH I GUESS + if(((maxHealth - total_burn) < config.health_threshold_dead) && stat == DEAD) + ChangeToHusk() if(species.can_revive_by_healing) var/obj/item/organ/brain/B = internal_organs_by_name["brain"] if(B) - if((health >= (config.health_threshold_dead / 100 * 75)) && stat == DEAD) + if((health >= (config.health_threshold_dead + config.health_threshold_crit) / 2) && stat == DEAD) update_revive() if(stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix update_revive() diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 4442d59fe85..5278f0cc723 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -13,7 +13,7 @@ handle_embedded_objects() //Moving with objects stuck in you can cause bad times. - var/health_deficiency = (100 - health + staminaloss) + var/health_deficiency = (maxHealth - health + staminaloss) if(reagents) for(var/datum/reagent/R in reagents.reagent_list) if(R.shock_reduction) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 8f078f18f90..76d4ce0a711 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2,7 +2,7 @@ /mob/living/Destroy() ..() return QDEL_HINT_HARDDEL_NOW - + /mob/living/Stat() . = ..() if(. && get_rig_stats) @@ -34,11 +34,17 @@ /mob/living/verb/succumb() set hidden = 1 if (InCritical()) - src.attack_log += "[src] has ["succumbed to death"] with [round(health, 0.1)] points of health!" - src.adjustOxyLoss(src.health - config.health_threshold_dead) + attack_log += "[src] has ["succumbed to death"] with [round(health, 0.1)] points of health!" + adjustOxyLoss(health - config.health_threshold_dead) updatehealth() + // super check for weird mobs, including ones that adjust hp + // we don't want to go overboard and gib them, though + for(var/i = 1 to 5) + if(health < config.health_threshold_dead) + break + take_overall_damage(max(5, health - config.health_threshold_dead), 0) + updatehealth() src << "You have given up life and succumbed to death." - death() /mob/living/proc/InCritical() return (src.health < 0 && src.health > -95.0 && stat == UNCONSCIOUS) From bb0da27fac52e75e2d0ddb91b85373456415b4d0 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Mon, 8 Feb 2016 05:02:41 -0500 Subject: [PATCH 098/442] Optimized div2 --- code/modules/mob/living/carbon/human/human_damage.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 4f8289b9e3d..c0d566d63e7 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -20,7 +20,7 @@ if(species.can_revive_by_healing) var/obj/item/organ/brain/B = internal_organs_by_name["brain"] if(B) - if((health >= (config.health_threshold_dead + config.health_threshold_crit) / 2) && stat == DEAD) + if((health >= (config.health_threshold_dead + config.health_threshold_crit) * 0.5) && stat == DEAD) update_revive() if(stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix update_revive() From 8e627b384cf880236de63aeace7be5671085f7d7 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Mon, 8 Feb 2016 10:10:37 +0000 Subject: [PATCH 099/442] Bolas now affect walking people As per #3509 bolas no longer require a running stance to trip people --- code/game/objects/items/weapons/legcuffs.dm | 27 ++++++++------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm index 5fdbf7af06e..16fc9f046bd 100644 --- a/code/game/objects/items/weapons/legcuffs.dm +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -72,26 +72,19 @@ var/mob/living/M = hit_atom if(ishuman(M)) //if they're a human species var/mob/living/carbon/human/H = M - if(H.m_intent == "run") //if they're set to run (though not necessarily running at that moment) - if(prob(trip_prob)) //this probability is up for change and mostly a placeholder - Comic - step(H, H.dir) - H.visible_message("[H] was tripped by the bolas!","Your legs have been tangled!"); - H.Stun(2) //used instead of setting damage in vars to avoid non-human targets being affected - H.Weaken(4) - H.legcuffed = src //applies legcuff properties inherited through legcuffs - src.loc = H - H.update_inv_legcuffed() - if(!H.legcuffed) //in case it didn't happen, we need a safety net - throw_failed() - else if(H.legcuffed) //if the target is already legcuffed (has to be walking) + if(H.legcuffed) //if the target is already legcuffed (has to be walking) throw_failed() return - else //walking, but uncuffed, or the running prob() failed - H << "You stumble over the thrown bolas" + if(prob(trip_prob)) //this probability is up for change and mostly a placeholder - Comic step(H, H.dir) - H.Stun(1) - throw_failed() - return + H.visible_message("[H] was tripped by the bolas!","Your legs have been tangled!"); + H.Stun(2) //used instead of setting damage in vars to avoid non-human targets being affected + H.Weaken(4) + H.legcuffed = src //applies legcuff properties inherited through legcuffs + src.loc = H + H.update_inv_legcuffed() + if(!H.legcuffed) //in case it didn't happen, we need a safety net + throw_failed() else M.Stun(2) //minor stun damage to anything not human throw_failed() From df963a6aa5841a4ed53ffc7d065748de07cd0603 Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Mon, 8 Feb 2016 13:35:26 +0100 Subject: [PATCH 100/442] Adds head patting --- code/modules/mob/living/carbon/carbon.dm | 26 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 2466abd7160..4611f87f453 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -264,19 +264,27 @@ mob/living playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) if(!player_logged) M.visible_message( \ - "\blue [M] shakes [src] trying to wake [t_him] up!", \ - "\blue You shake [src] trying to wake [t_him] up!", \ + "[M] shakes [src] trying to wake [t_him] up!",\ + "You shake [src] trying to wake [t_him] up!",\ ) // BEGIN HUGCODE - N3X else - if (istype(src,/mob/living/carbon/human) && src:w_uniform) - var/mob/living/carbon/human/H = src - H.w_uniform.add_fingerprint(M) playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - M.visible_message( \ - "\blue [M] gives [src] a [pick("hug","warm embrace")].", \ - "\blue You hug [src].", \ + if(M.zone_sel.selecting == "head") + M.visible_message(\ + "[M] pats [src] on the head.",\ + "You pat [src] on the head.",\ ) + else + + M.visible_message(\ + "[M] gives [src] a [pick("hug","warm embrace")].",\ + "You hug [src].",\ + ) + if(istype(src,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = src + if(H.w_uniform) + H.w_uniform.add_fingerprint(M) /mob/living/carbon/proc/eyecheck() @@ -779,4 +787,4 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, if (stun) Stun(stun) Weaken(weaken) - return 1 \ No newline at end of file + return 1 From e526753c758318bc8c57cf02d2ef1d17d2f7dd1b Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Mon, 8 Feb 2016 20:44:04 +0000 Subject: [PATCH 101/442] Fixes Vamp Passives (#2812) Fixes Vampire thermal vision Improved regen was working, but the message was commented out due to spam, it now shows without spamming --- code/game/gamemodes/vampire/vampire.dm | 6 ++++-- code/modules/mob/living/carbon/human/species/species.dm | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 40da7a5bca3..0292bef5719 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -203,6 +203,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha var/list/powers = list() // list of available powers and passives, see defines in setup.dm var/mob/living/carbon/human/draining // who the vampire is draining of blood var/nullified = 0 //Nullrod makes them useless for a short while. + var/upgradedRegen = 0 /datum/vampire/New(gend = FEMALE) gender = gend @@ -324,8 +325,9 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha vamp.powers.Add(VAMP_BATS) if(!(VAMP_SCREAM in vamp.powers)) vamp.powers.Add(VAMP_SCREAM) - // Commented out until we can figured out a way to stop this from spamming. - //src << "\blue Your rejuvination abilities have improved and will now heal you over time when used." + if(!(vamp.upgradedRegen)) // to prevent spamming + src << "Your rejuvination abilities have improved and will now heal you over time when used." + vamp.upgradedRegen = 1 // TIER 3.5 (/vg/) if(vamp.bloodtotal >= 250) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e84e7f209e8..e112542f660 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -387,7 +387,7 @@ H.see_invisible = SEE_INVISIBLE_LIVING if(H.mind && H.mind.vampire) - if(VAMP_VISION in H.mind.vampire.powers && !(VAMP_FULL in H.mind.vampire.powers)) + if((VAMP_VISION in H.mind.vampire.powers) && (!(VAMP_FULL in H.mind.vampire.powers))) H.sight |= SEE_MOBS else if(VAMP_FULL in H.mind.vampire.powers) From c6cb61a747abb84c386618d30c70ae1e6bd8a177 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 8 Feb 2016 17:19:21 -0500 Subject: [PATCH 102/442] Automatic changelog generation for PR #3533 --- html/changelogs/AutoChangeLog-pr-3533.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3533.yml diff --git a/html/changelogs/AutoChangeLog-pr-3533.yml b/html/changelogs/AutoChangeLog-pr-3533.yml new file mode 100644 index 00000000000..2435e2f6db8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3533.yml @@ -0,0 +1,4 @@ +author: Crazylemon64 +delete-after: True +changes: + - rscadd: "Ghosts can now follow mecha" From 0ba4a13d48b5786ad8104238f872de0b5fff52a2 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 8 Feb 2016 18:05:21 -0500 Subject: [PATCH 103/442] Automatic changelog generation for PR #3540 --- html/changelogs/AutoChangeLog-pr-3540.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3540.yml diff --git a/html/changelogs/AutoChangeLog-pr-3540.yml b/html/changelogs/AutoChangeLog-pr-3540.yml new file mode 100644 index 00000000000..c3d02ab2409 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3540.yml @@ -0,0 +1,4 @@ +author: PPI +delete-after: True +changes: + - rscadd: "Adds head patting" From d51edc23d6606a1f781f4b14a33f568c69a8db5e Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 8 Feb 2016 18:22:38 -0500 Subject: [PATCH 104/442] Automatic changelog generation for PR #3518 --- html/changelogs/AutoChangeLog-pr-3518.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3518.yml diff --git a/html/changelogs/AutoChangeLog-pr-3518.yml b/html/changelogs/AutoChangeLog-pr-3518.yml new file mode 100644 index 00000000000..ac4d9989b65 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3518.yml @@ -0,0 +1,4 @@ +author: PPI +delete-after: True +changes: + - rscadd: "Adds a reconnect button to the File menu in the client." From f307e9c7003b082fa340db529b1341035dce9d94 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Tue, 9 Feb 2016 00:45:42 +0000 Subject: [PATCH 105/442] Fixes span closure in vamp regen Fixes my cockup in #3541 --- code/game/gamemodes/vampire/vampire.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 0292bef5719..7d304204613 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -326,7 +326,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha if(!(VAMP_SCREAM in vamp.powers)) vamp.powers.Add(VAMP_SCREAM) if(!(vamp.upgradedRegen)) // to prevent spamming - src << "Your rejuvination abilities have improved and will now heal you over time when used." + src << "Your rejuvination abilities have improved and will now heal you over time when used." vamp.upgradedRegen = 1 // TIER 3.5 (/vg/) From bd2a7800617d4aa0acb6b7151b97989ea281a922 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 8 Feb 2016 20:01:41 -0500 Subject: [PATCH 106/442] Automatic changelog generation for PR #3532 --- html/changelogs/AutoChangeLog-pr-3532.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3532.yml diff --git a/html/changelogs/AutoChangeLog-pr-3532.yml b/html/changelogs/AutoChangeLog-pr-3532.yml new file mode 100644 index 00000000000..13c42582a83 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3532.yml @@ -0,0 +1,4 @@ +author: Crazylemon64 +delete-after: True +changes: + - rscadd: "You can now gib butterflies and lizards with a knife" From 951f25a14d341782504a1bb5a137bb2c1765adb1 Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Mon, 8 Feb 2016 17:06:59 -0800 Subject: [PATCH 107/442] Fixes emagging an R&D console --- code/modules/research/rdconsole.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 6112d6f5a9b..017bf478bd4 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -177,6 +177,7 @@ proc/CallMaterialName(ID) /obj/machinery/computer/rdconsole/emag_act(user as mob) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) + req_access = list() emagged = 1 user << "You disable the security protocols" From f759003b556590f4ae0f8acbdacc642a9d87dddd Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 8 Feb 2016 20:20:08 -0500 Subject: [PATCH 108/442] Automatic changelog generation for PR #3543 --- html/changelogs/AutoChangeLog-pr-3543.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3543.yml diff --git a/html/changelogs/AutoChangeLog-pr-3543.yml b/html/changelogs/AutoChangeLog-pr-3543.yml new file mode 100644 index 00000000000..8a03105186a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3543.yml @@ -0,0 +1,4 @@ +author: Crazylemon64 +delete-after: True +changes: + - bugfix: "You can now access an R&D console by emagging it - it did nothing before." From e9d9e3b3e68016c161c2874f99effcdd4baa8c21 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 8 Feb 2016 21:25:14 -0500 Subject: [PATCH 109/442] Colors! --- code/modules/admin/verbs/adminhelp.dm | 7 ++++--- code/modules/admin/verbs/adminpm.dm | 16 ++++++++-------- interface/stylesheet.dm | 2 ++ 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index fdb1c91153f..d5dede780a7 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -15,7 +15,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," adminhelped = 1 //Determines if they get the message to reply by clicking the name. var/msg - var/list/type = list("Question","Player Complaint") + var/list/type = list("Mentorhelp","Adminhelp") var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type if(selected_type) msg = input("Please enter your message.", "Admin Help", null, null) as text|null @@ -88,7 +88,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," var/ref_mob = "\ref[mob]" var/ref_client = "\ref[src]" - msg = "\blue [selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob, "holder")]) (CA) (REJT) [ai_found ? " (CL)" : ""]: [msg]" //send this msg to all admins var/admin_number_afk = 0 @@ -110,18 +109,20 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," switch(selected_type) if("Mentorhelp") + msg = "[selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob, "holder")]) (CA) (REJT) [ai_found ? " (CL)" : ""]: [msg]" for(var/client/X in mentorholders + modholders + adminholders) if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' X << msg if("Adminhelp") + msg = "[selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob, "holder")]) (CA) (REJT) [ai_found ? " (CL)" : ""]: [msg]" for(var/client/X in modholders + adminholders) if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' X << msg //show it to the person adminhelping too - src << "[selected_type]: [original_msg]" + src << "[selected_type]: [original_msg]" var/admin_number_present = adminholders.len - admin_number_afk log_admin("[selected_type]: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.") diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 4bfa6a8fbe9..62932eb4625 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -108,7 +108,7 @@ if(!msg) return - var/recieve_color = "purple" + var/recieve_span = "playerreply" var/send_pm_type = " " var/recieve_pm_type = "Player" @@ -118,9 +118,9 @@ //PMs sent from admins and mods display their rank if(holder) if(check_rights(R_MOD|R_MENTOR,0) && !check_rights(R_ADMIN,0)) - recieve_color = "maroon" + recieve_span = "adminobserverooc" else - recieve_color = "red" + recieve_span = "danger" send_pm_type = holder.rank + " " recieve_pm_type = holder.rank @@ -131,7 +131,7 @@ var/recieve_message = "" if(holder && !C.holder) - recieve_message = "-- Click the [recieve_pm_type]'s name to reply --\n" + recieve_message = "-- Click the [recieve_pm_type]'s name to reply --\n" if(C.adminhelped) C << recieve_message C.adminhelped = 0 @@ -149,7 +149,7 @@ adminhelp(reply) //sender has left, adminhelp instead return - recieve_message = "[type] from-[recieve_pm_type][key_name(src, C, C.holder ? 1 : 0, type)]: [msg]" + recieve_message = "[type] from-[recieve_pm_type][key_name(src, C, C.holder ? 1 : 0, type)]: [msg]" C << recieve_message src << "[send_pm_type][type] to-[key_name(C, src, holder ? 1 : 0, type)]: [msg]" @@ -172,13 +172,13 @@ switch(type) if("Mentorhelp") if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob)) - X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [msg]" + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [msg]" if("Adminhelp") if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) - X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [msg]" + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [msg]" else if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) - X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [msg]" + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [msg]" /client/proc/cmd_admin_irc_pm() if(prefs.muted & MUTE_ADMINHELP) diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index caa1f6950af..3c8a80bab91 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -23,6 +23,8 @@ em {font-style: normal; font-weight: bold;} .adminobserver {color: #996600; font-weight: bold;} .admin {color: #386aff; font-weight: bold;} +.playerreply {color: #8800bb; font-weight: bold;} + .name { font-weight: bold;} .say {} From c7af5ab6aeb50a8f8661f10d0fa4adbd0babf41a Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 8 Feb 2016 21:34:16 -0500 Subject: [PATCH 110/442] Automatic changelog generation for PR #3527 --- html/changelogs/AutoChangeLog-pr-3527.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3527.yml diff --git a/html/changelogs/AutoChangeLog-pr-3527.yml b/html/changelogs/AutoChangeLog-pr-3527.yml new file mode 100644 index 00000000000..f4c507192d7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3527.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - tweak: "Ensures consuming a single syndicate donk pocket won't get you addicted to meth" From 5abc032317909136f0bb7a9a8c12ec6d9902f18d Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 8 Feb 2016 21:37:04 -0500 Subject: [PATCH 111/442] Automatic changelog generation for PR #3486 --- html/changelogs/AutoChangeLog-pr-3486.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3486.yml diff --git a/html/changelogs/AutoChangeLog-pr-3486.yml b/html/changelogs/AutoChangeLog-pr-3486.yml new file mode 100644 index 00000000000..bf66eb1ecbf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3486.yml @@ -0,0 +1,7 @@ +author: TheDZD +delete-after: True +changes: + - tweak: "When Ahelping, \"Question\" is now \"Mentorhelp\" and \"Player Complaint\" is now \"Adminhelp.\"" + - tweak: "Mentorhelps and PM replies from mentors appear in a bold aqua blue color." + - tweak: "Adminhelps and PM replies from admins appear in a bold bright red color." + - tweak: "PM replies from players appear in a dull/dark purple color." From 5f16ed4a780abfef4703740561493ef72a00c342 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Tue, 9 Feb 2016 02:42:03 +0000 Subject: [PATCH 112/442] walking prevents sliplock Removes slipping whilst walking from banana peels and soap to give a way out of slip lock (#3490) --- code/game/objects/items/weapons/clown_items.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index a655efa125c..21de1025e8e 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -23,7 +23,7 @@ /obj/item/weapon/bananapeel/Crossed(AM as mob|obj) if (istype(AM, /mob/living/carbon)) var/mob/living/carbon/M = AM - M.slip("banana peel", 4, 2) + M.slip("banana peel", 4, 2, 0, 1) /* * Soap @@ -31,7 +31,7 @@ /obj/item/weapon/soap/Crossed(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist if (istype(AM, /mob/living/carbon)) var/mob/living/carbon/M = AM - M.slip("soap", 4, 2) + M.slip("soap", 4, 2, 0, 1) /obj/item/weapon/soap/afterattack(atom/target, mob/user as mob, proximity) if(!proximity) return From 24afe14a1250619e460cdbc86e4cd7f5710fa683 Mon Sep 17 00:00:00 2001 From: Spacemanspark Date: Mon, 8 Feb 2016 23:40:53 -0600 Subject: [PATCH 113/442] Adds in mob capsules --- .../objects/items/weapons/storage/belt.dm | 31 ++++++++++ code/modules/mining/equipment_locker.dm | 2 + code/modules/mining/mine_items.dm | 53 ++++++++++++++++++ .../mob/living/simple_animal/simple_animal.dm | 2 +- icons/mob/belt.dmi | Bin 11334 -> 11505 bytes icons/obj/clothing/belts.dmi | Bin 4188 -> 9898 bytes icons/obj/mobcap.dmi | Bin 0 -> 472 bytes 7 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 icons/obj/mobcap.dmi diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index f727326b3f1..0855fd73491 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -248,6 +248,37 @@ new /obj/item/weapon/grenade/chem_grenade/cleaner(src) new /obj/item/weapon/grenade/chem_grenade/cleaner(src) +/obj/item/weapon/storage/belt/lazarus + name = "trainer's belt" + desc = "For the pokemo- mining master, holds your lazarus capsules." + icon_state = "lazarusbelt" + item_state = "lazbelt" + w_class = 4 + max_w_class = 4 + max_combined_w_class = 28 + storage_slots = 6 + can_hold = list("/obj/item/device/mobcapsule") + +/obj/item/weapon/storage/belt/lazarus/New() + ..() + update_icon() + + +/obj/item/weapon/storage/belt/lazarus/update_icon() + ..() + icon_state = "[initial(icon_state)]_[contents.len]" + +/obj/item/weapon/storage/belt/lazarus/attackby(obj/item/W, mob/user) + var/amount = contents.len + . = ..() + if(amount != contents.len) + update_icon() + +/obj/item/weapon/storage/belt/lazarus/remove_from_storage(obj/item/W as obj, atom/new_location) + ..() + update_icon() + + /obj/item/weapon/storage/belt/bandolier name = "bandolier" desc = "A bandolier for holding shotgun ammunition." diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 1de1b266a47..d721310c140 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -332,6 +332,8 @@ new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 800), new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000), new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1000), + new /datum/data/mining_equipment("Lazarus Capsule", /obj/item/device/mobcapsule, 800), + new /datum/data/mining_equipment("Lazarus Capsule belt",/obj/item/weapon/storage/belt/lazarus, 200), new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack/carbondioxide/mining, 2000), new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000), new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000), diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 9c52dc7751f..d44b7d5a0da 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -192,3 +192,56 @@ icon_opened = "miningcaropen" icon_closed = "miningcar" +/*********************Mob Capsule*************************/ + +/obj/item/device/mobcapsule + name = "lazarus capsule" + desc = "It allows you to store and deploy lazarus-injected creatures easier." + icon = 'icons/obj/mobcap.dmi' + icon_state = "mobcap0" + w_class = 1.0 + throw_range = 20 + var/mob/living/captured = null + var/colorindex = 0 + +/obj/item/device/mobcapsule/attack(var/atom/A, mob/user, prox_flag) + if(!istype(A, /mob/living/simple_animal)) + return ..() + capture(A, user) + return 1 + +/obj/item/device/mobcapsule/proc/capture(var/mob/target, var/mob/U as mob) + var/mob/living/simple_animal/T = target + if(captured) + U << "Capture failed!: The capsule already has a mob registered to it!" + return + else + if(istype(T) && "neutral" in T.faction) + T.forceMove(src) + T.name = "[U.name]'s [initial(T.name)]" + T.cancel_camera() + name = "Lazarus Capsule: [initial(T.name)]" + U << "You placed a [T.name] inside the Lazarus Capsule!" + captured = T + else + U << "You can't capture that mob!" + +/obj/item/device/mobcapsule/throw_impact(atom/A, mob/user) + ..() + if(captured) + dump_contents(user) + +/obj/item/device/mobcapsule/proc/dump_contents(mob/user) + if(captured) + captured.loc = src.loc + if(captured.client) + captured.client.eye = captured.client.mob + captured.client.perspective = MOB_PERSPECTIVE + captured = null + +/obj/item/device/mobcapsule/attack_self(mob/user) + colorindex += 1 + if(colorindex >= 6) + colorindex = 0 + icon_state = "mobcap[colorindex]" + update_icon() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 61a94e883c3..0738bb17e6a 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -414,7 +414,7 @@ else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead. if(istype(O, /obj/item/weapon/kitchen/knife)) harvest() - else + else if(istype(O) && istype(user) && !O.attack(src, user)) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) var/damage = 0 diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index 38b7f17c67925a6cbbf0741c014a89a8114bfd14..70aa813cbb81c71feb57028c38cf9bf8d9ca9de0 100644 GIT binary patch literal 11505 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 literal 11334 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 D`oj^g diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 85d9cffdbfca4c52906394c9c5c0b6eed828a4a7..7427f32fd3eb9b224fe15e4765fb76b065d9fa36 100644 GIT binary patch literal 9898 zcmb_?byU>fyY6S`?v!qjRJw)+k#3X@0qG8@p^+9;lyESRl9p~{2&KDc7(_}^Vt@h8 z_&xXj?mFw7b=PmLd;gfv?B4Hs_q+GA-{;-W4fVB1iS7^q06?n!K;0Pg-~IPTfQR`S zFMHwx07&wgsb!%0lK?0Gr@nzteY^o6wBXfrt#_{&1s*~+jEH!)JXX2wNtrS&b~{#U zpH_tL{EJADhtN)JY#WNsk=LE_OI@C0BXeirA!7O0RX06v_(P}iPOm;xc{{`2&VI>j z^?wkTbHzHc|>!6?%U)U9jBMt(Ua}LuE$Dexw=X^UqiD!)s@C z_R7f`^aHs1#uO+<1zO4W55=s_!&EuSLgD0uSIpW(euD+vp+Zx#>0846C)q9>A}jI4 zoX_;8c9?E!7F*oyFyAJBbrbP<(6cGVvMG1B}}IP~9<$2#WR34B*;t?5T3QyThErBJ2#0i%fVz}tt# z{6*G_lT2PYjoSIn9nrt53JWJY+RpV=Uv+@Ta`>Ls&E81vowr4KRQ^UwS(uvQ;HgzJ zJiDZ~7kftK0wh*B;Ms58`7eokiI)&@mtl6`Z~`ef7!e@08oEv@GJTIB&5&}EM9it5 z1bO;w&A&w~V2s6Au5fU4l=ppFk9~Z079%93tD}Pj*7Y=gYCC?$9kxW=MPf#P$MrMb znTVS%T15pUEiRugQ)spY?^3ElH}gB26w#CM|KRP)&tiK0bgs4J*WHvZWW%BEmCHyT z5994x5?lYx^%V$^57{TtiMaZ?l6^!!>OJt9g%?nsxXMi8xrucu;a+zwxW>Zw=^zGb zPFE>Y)&qLp5luWoKZnk1|H_X80c=9oQf}DE8g|lR#zxRSV(&G-8W)Pxs5vQ7g(r9g zE%Ry7FR_TDm~agi8njO~nXWnFB;zbk{QUgH7)W~4?>{?nlaP>L2ZLE*FqoUCCyg!f zEQ#a9Ia9dZ02g*QW49mry*PdpcOU#}FVtH0nEZY8-|<&B-D4)`h<#(C{~XyBQXr!v zrVJT`CVD+q-g59`2hu44&aSRG<#(e_#zsi>BSe`8c^xNG6NI%k!H@N7_RCu0Q&7SwNhUr(q3Tg#9AC+jkEKeTa2NV+@QyU)nTt`=;P=bPh{mi;P zNrx;iJ9Z#!_<|CEK$rLXmWS@;>56&G3T3}}L(sHDS~5kbeBq{FpE%>L;q1)4v$JEG z-wh6vj^UuZ?*Bx<)oRQ!^<~26cVx5wSLVZ+GAR(P($UvA6pFhj&|R$_&lSn)7KcR>fsnEwcANWP2415!=lx%M2bpkLBGI} zwTO8EPPztbHb40QXy>7X)L_5i6QJcqS9v*+c?GR`g`~vCXna_QB7=0gT|~#>JG98S zaCFCaI5z5cWl~IbcF{Wd?Ngd4;~jOIVl9fOwF&yQr)UZQ(Hf!bCLaL4y|g(ZeV}{4 z*MyGR)H8pC&K|2`CM5(ONl#2Cl=ZvbZGsaSD5nDRsb7c}c=`A;vxBP}2jOV=?6(~EP37>=R9cKG#HX~^gz4_R+h4fz!G3~=eNn48D!S2$tIXI2jD{B5J#`m; zp__lWg+d(!6w=vx!w~Bk=6DQAe~3qImfAxFqXAYH?HWHTuC#BF{8v_jTQ9XqG3Uq6 zEq-r_JNMki*@5m48mU;p5V@Q;Z<71^)KL*&j2W1ko4Y^8q3^hr(bDpZYoW)}y^#g% zCvRnX7T5ku0I+XCN>ptkP~9%9390-M4G@ zHOf#yWl!PQ)zy_+?wB5Y;Wcjc&OcB#Q&d0&8Gehf+kLZRYEHeTd4+o=+x<3m#0IQ% zOrQC82U+Kmcl%G_gnlQfS(Z>SvXeBVwr&rl1ZskIXCY%)a&Q2Fgr%yaLRIw)PX(Yy zWS$Hu$y?xTX`uA-WW5Mx@SfM#!VC*oeb`1y*(fu_1Tb zwy)D(ZQY?3a^!F=>>?U<&TbEy(IV6EfXul{IR+h#SlTRWS^hpdfU~uIj%JiPGT9;k z2k9WNn*R*mVAT!X=-oiaMz(0PO*l&-S|e}Oyfe#j!~g?l8!TW#4iF1g z$Hp<6x1V(_tM%X=U|9^{D=2D&ueY$KACy&-ZXeM^QfSTrfw`N{2<%em$(*SL98wMP z2{td3O~kWXBPtR0Pv%Flv3`!>QcY2BVm;q}9uU(PzhPa(DDIM#NoTixZ!H?SwI2ZV zlP47!Bsz&j4c1hv-wz}e2h`@ou*Lpg6Y1sOeSb7Qm>XbYR0Khr4$UT|L`cRguw4!6 zbo!wM4HO5PJ|N&Xie15ONeIr%a{K8Chh_^3CGh7P_3d&yb@ovv7$w;s5y%7}Ue9S^ zAY1TEbqLi#FZDiHM+iVjYrJ)MZs(SJb0sZoojfm$hAY)SxPW&pRja3H7_{S1x?q!N zVv|r77=Dh77gZ}Avqhrhn+c-P_9N_c9WO97lw#`YkW{hmaihj?^j9H{8+eFkOtXmj zUkvVq;ad(v76##IEC;tajR~sgHDN0X;qMhac`8EBM2~tMljEO@bHs{wkH6?v8b(NL{20;wZ7sszd8ZXQQ& zQa!)5gB_(Vap8-cHdN{bpbsB}*=^Y(Y(*CpY)5$c;VyhH?m+}%>BHl63(frSk~8rY zz(p&>&G`-a2#jv~=qRymcbKc574NR6iYr$qTcVT^apYt^^)A%yj-uQXMyx7ZBf^tr zRWL?&-n=d_76*=Sr6y+NuS-LQ6||a%j4RX;T6oSlZY^OZRgb zxVR8re_|+B;~ysI*5eKMC5tg3{KC!h?a#R7pG$&-S^pPuJN$&Wag9$`fvI2m)Kgn= z8yoXuZ_>=TLn%@HD~?px4HqPH%j*fN$RbYD@A&GHen z;T+FnNo{o`7p>7j6#vxL7t>N!b-E>}H4qZ*1v_Hfr$1MDB5vnkusxmVlK$xpgG_$@ zTGqB;8(z)4uJ3HCX=-kx9Y)=?m|Sazd+XKnuf0?Iroy(1Q5bnuKGC|(nX@e1A(yEt zr5E+G>m1Sl(sAMB#v#&MuHF9ix+RQ{KrxYy(HY40>uY1SQgd9jZi7{y~RV-t0*E#0_GUg9}j&wT$%vzl7_GgwCY0EaU5 zaaCrsO?DaiosLC#SDP%}(Y=vSnC*koQt72s=XKG$b*X(m5KK9w(SzotEOYaKi`x4Y z{nFA@XS!a%{($?Y&bume+zXE)zng(EM%tVPxxJUEa~8Hga?!Vb7Mr3pPXaVi8yQXX zzH~c(VXVs(o#~uw2X^Gs+fz0*l@PsQ7l+K_G(JFdy6PCUh?~_JXml3JEJv`p#wn%# z)z=;SST{AA{Z)BF3)bsgXK49F@h8|E(cK&Sza5Qg9G+~C9Ui}7$&Qp-N_`;6T!hRd zxsRQ!XODeYKWSXRByV14@M1-u87M_1h2(%*ZE&o@t?b48#5Bs=h7H=5i0$MjBoaOh zzjNlpNGYblFfKj19EndklkVkqemTClNHxtVQ^sb04>a*z#DI4kiD$j1T%0IClaPVr z9gTO3)3Awv67PLtd9^30A{@K!L?Y%(DdxX(bIXcM$PAqr|4r;p8Id`X_#i`#q-39B zB)(hkL6Zr;#!}HVjyr)lnx>X;n&Jyez>&I?!}7?akJnJG23eA)LWr`mvE@@ofKQ%-HVq@<>Y-^Rr+6MQdXeMuuELVY%iVBmhtIY z8@j(W?a_k(`%`m)s!m}=T>l2_%?soN$CYy0=oNlm&cs0>+qa|87Uv~8C^7xwT_AoR z`(A5Bj=iMA(8R)E$AR!rBP&v)BggJMVdrm6K(wcjx2!+TtMz{EMlT*5Xt1@u*%0!P zpV#;kt6$mkpZL}J1`RYG?<|d*F5Edbh}-_q*j8p37|5ZnA-8w6?f`+bGB?WC_o+3^|Dn*E-lpGel5tarqH_RE7cQ|}pD6B!}z zJ>GyA{=XzlBLzCk%CwK=-zFp^3=R+D0Db-ai5v3oGfXDogezAtRRw=~JC=DVP6hZ- z!@lWRq3PzA!@h&3v(DZoCpU96qvSuX#wwp0(kQhVL~M0Z3(<8f?P+4Xn_(AmU0!NV zPELCk@hCwb z3{2+B`fkOTUFKWTZVO$!NE8~U|MalaMKaH689_CT*ALh}G4_2pn6c{QCfRVW?DE$P zamgA1Owlg&j4t(EtOizAOpA-?4ek5l;@J0TnCzdM3YqV*6e@H0VZ-ENRg^f5429{t9r#wHFS#+3Kx($%)FF* zyOeBsV!>5Gd%C-^&xG-{cn2$=vj5|+GTBY@HGO_P_*VHowuGc4CC1&$8RAac!oWuQ zdT`ss>MB{qOt~D!ZERZtJtopD!vKRA1LOhq_>MW05a%dWqnZO7eKgFDo*O?<%_B4) ztIcufh%p$&wmLr?un}9)XJzPRVs{NctSv>sKF||eWsFAN(N5pdRfdVub-X4~&g6K4 zwSd{>2<7Ryxe7W_FZlGddUkfUp`Bgz=QiaC=A`fLA24Tn$NI~{z5zeCN^^;zmx)An zUU>W<2KmukLc5A87R-#PNxk%#M&}c4`NK=Q`?7M~~86%cn zR$7{6X5#N($9@wZk7M2J3o@^eqLh%J;y&Fl6v*oz6poKkKH@vw7#}aSK|g)Ul6OGS zIcZc-#WYC=%8wScduT{#iVk$PQyjRJZk`U_yZZRZ;gnf^p=DVAYaXI;@E!mOV8Jq% zOPLD#Mzi!sMlw*r(7)^TApoH-F`&iy66lw2WuhZ@{_4XLiSJr3E(wbq4J|Eg-*zCU zq$DkCrdHjUg&)U=y27Wp4x>lYr52Nmf2OUhNT~?|E6Ur%^C3 zr$c%?(mwr%mJMg+5j-upi5FKdE&J_{StSl#(* zZ>WkvxLT89L7s$@bi%4bzeX&t%i%aZH34r6O#@py)e_X6Q7)S;+1DvQjHTW4T^k;U z5@`aEZ=)7QOpow^tv&rd`i@nY=+u|y&DXXvQTumq4DYiVtoejiE+%n2#tKpO!~ra? zwkaJRPFIBZs0$UuT#TXVo~Py(i5xs>e{&xY{2_{)3vzUFYDq~U$}T8K%e(XBk5UTE zaY8661&-5RG=n(GD(X8ZFzb8tYTBQ8jXO&-x`{c#xYR&z>?zZ_SFXgfoDMiwE+zUU zd9Z*Kr`d05>-`yNHN>Fwyk#vXE|=>QM})RM|J64n(PRN$*&p z^{}yP@h1#M1Ra;2M*&!xe(v$vR6xFb-|7r!7!I75;mCwew<#w{7mp;s@K`h8(I@fy(yNBRwXyPJ>~QFD*sKT@E$70Pp^mYI{Gi;bkIXRRxG?;^ zpoqKW8Sil)fauWD&YkRfuN1k(^3v5Ucxna)e*IZl0q)_X^LPA)E%tVu$H(S$B1OD7 zIbUwJ+TA^#YGPXJXtq?-zmeW=NGht4OK+W`Nqx1@3R?!-Dxu zOI!$jFjra3&_>+QhDp2pr`Ny1N6Xm*QNn2567jKp0fKo-<5u};+VX1hqTstU?&Ti4 zRUQg*u?89li4T7U!L-4~?Ec@TYk4>ruR*rmq6R(RuOGRB35Ce2S_U1G0rK@IC<%z0nR}hW^=JsiDQgEI3-Xqj-yWCd*F}A||BJ(x|BW~P?@aQ)Q(|;ljG8&q z)qoF;2;3$4(e$DZF8hkh8m_fBbcym=oS8WbtK&a`Ye$7$cxrTg%O;iYJwCTiYo2O0qVIi9DR!Blzo-rB+N08QI#3D3HyPDB7?=iEiIjAqP+7SNzz% zP-4)N_M>Ne`{M6vCfY9;Fl7_7hkO9%ir7%GhPdKA!v50eN>#fB>wWz(fUT1Ejkqfr zWvZ=^r>xxhgnO*v^uV0)or2@fEBbxCN>w#*v5EDmaqrmN+%XJyD_HqwL9m~1XMMsm z)~v#u@_!E_Oa0)EeS>0-^S2o57h4U^5CLDe`#lA+0fWtc>xS0WLJB23*q=Uqa=Wi$ zFgHM-3MGOPwMFjXy)hTb{jH;Q>+k_OlLtw$6M9x#v$3_Tl}b2UZD)X7U&mIj=D{Xm z5Ccd_NkjKrHmB{_5K9^1cOx1Y?b$pTzLaXsjdNO?{v}Am!elQ`wm&x8xjt(JgS%7h zgq#6L8VYn9xGmHAPELS_rzgc}g!DhLO>G&>!@)X`$0Pykx;|S<(6Iw4tHsr=8-B#_ z;E1y&pMi;wT0Bd^@@3SnpyH1*HqyG=FIB#>k7E79fIiUHCLCmUC)9|H2)R;}NqU|a zo#b#xtW=fX*fHm=y!U-WwVyx}4fxI}gORnV?T0Tjkbx_Q`A2FsyI+_fQrH+e4#Nm( zQq)ZIuf9FqoudXA#9c@{rNXX*JRlo!cn;q};2^_JVjNTnxCcWrC;P4U|0{pkaK)e2 z2zPkMbW6Tf1@0U&p7$e1PoLm^U&i;FK#=W(FbF-1cwBCTpU(1@!*b1}vw1vuU7ssT z{GF)p>WYY=2Ggq?%3Z$YwDrv@WNLsuw~obBE^N)WsHg~d^ym?Q?!6f!2P=EKyDKmK zo-{@ue9{IWm!d`e1eCMEi>(m6aJJuK&NEY!zA0vfs2DIvc8X})-H=} z;(24b*aD8y`3bEp>q)0Ps+5_bNGLuES&JETYMy5`4Mjf)RBB!aH?6mXBcQ*QNfG%O zb8%hVNzfk_cMxZN?A2c$iD3clVaJ?#1?UC_$4c9RRwAKLUolOxAmkr$bA=Fu)lcW; zctzL3JSUSQQPieR4RlA4f#ZCVr`_gpN)r90?^ys@iH?lI>%0`ZWbacwDMzy#4vBNN}Cs;5Uft6#uByn>&aQG7Py1Me*S zh(*uDaqk|bq@*MUwpAWJBr-NOjt>nA3YwP-m%@Yyur8l2;665yfqpb$qZX2ZFQ)`I zBfPut_k1}pcqP^N%hAb0WU|r#8_>T}2yI%8p8{u&SFgM(3!~qXL4TlwV@F|Jw`#cX zv(Df>yyezl>g`jMRJiDX=;zc%NcNp6tQ$|y*G*84r7?mM|calR$q0NAw%Cm1nXMzU1Rhe%2z1ISmegNCE^0P9AWWiJrzO)bp1{>H2vL z>^coBkCfemys;oF#J5-fGyxGEHFNq^DgB4BDA@(*RJfo`TFZ-i+@#!LdlSol(Ef)E zSS9#){O851R|)m5V_4phPkxAps3zz7g)B@F-|LO_pF=!@V`KD}lTJYizx%!QjX0#Y z8HAKD=kS(}=hW$gWQ*rtXl%BlAM!s1?)?%L+A z5!>zH#Moe^hcrS4%@!C*U^{&B&fhu^x}+iBdRk_N){**+$R4>VWLqUbU(dLZw-+$k zj#h?-JRk)_$uXPEvdNnTqRhoC7f5i`#L%72+3ko3Bur9EA|vDid$oD5$T>fGGUNil z8dSEiP;DxN3@0|%l3d{y#6Jz+QK`^(WA>qjib~J_DGCYJecdZkBI$9ziL#XdujuJc zz|SpLb)ngM!Cb+`uIMRmKJw>LHxyAvsdm&#)pV^um7935Y-Jb*d60HEYJaA+boKSg z-qYKSjbTDlk5{-EDQ2VSzkZH{>wg2e9i!XKG@anfrQkw-P9($xFmi6!?mJsHtwc9FRMDUNFqDCu1Bq< zi+VtIji5Fe+nI{m`?@SK%_tm97kmOMvPFD=j1Bx{0jI*ek`t-aiXs>M8xn;prLx_i zvhkX2PZx^c+|1{2D=M-ik+adg`^Z=%KFw~!n82!5NqBsGJUEoYH_;Uxy(TNnW$5I@ zrJ2SM152f^N5Q|L>i%(e=gdyetGLUgxR^menr+(&SD$nsk`RfdUIe*ueqzv8u%PA;;AOUoD8N9Z|U1G>IC zwqWaznG2j;Y^95v6{QiA0OsIO8L6WE|Gjkvld`W=07YKDGq5^CpWD&Wxml~GH zA5moNRb%g<(9Gx5e2&Pz=Yx8Bu%+T+x0Z7|e#u)VpWN4+(voJOiWn^Gx*3CW2?`P; zk&W(@2WJIJR*CW^TI?9LZ*Omdc4JOX0)g&N&$mOHeqr(I=?--17!ZzmI9y+zmPW7P zlH9-ZLM-gQ)Xk2?;NW0)z?fnZM#UI;Q-_R<-Z0Z9ly-z;+b*Fh>^K~boiVMAZhMI> zyP_0Rt2u70=Q3-aPCb*69vKiHL(2*s@rZXXHh5@zc?s*kQ+RIlQIqg=Av#!!Fl5;e zKV_tPJ%0qRQ{mLnev~EPXd~ASS((0Ba{#S)0fma5?5(s(n^#$vJ>#>#bTXi_l1Soc zA{)4_o)EizP*0X z1eTXdq@t}tur7n-j0muSB=@;P05lH;9f#B2);*yCiiFNo2ayJE>tZo-+k%+^#o6Xroc$(fyzGc55kI zeZvIA7LL=$8~N4`eij=Gxj&XQQspD%U^jK2iaqh-fk}TPUkyENZhb#4)-I z^bO31$QrQw@L3o$)HgP)c!S+~dOEs?2``?EE&2E($$LvF4#%I1_g zAxs_M2!jDvysbyvC73&Q*r)RHy9n9J(}h3B$H{qlk|v+Ou)lq)=F0^W6;fb3%abKJ zeQ>9!Warz|vnfXvA z8X8cac>(wFf?<}4uv(F;9O+@xN{SIk!iMW1`O#a@Gr9#Ec8s`5(xmat(AltRR-`!g ziBKIB=U}NRqh4eM&tsLb6C6IJyq3a}EBrBDFwnX&jp`lSssx2-#|iOxRFBZ*2`iK` zs`Z-N(j)TB@Ou3eleIOaALy9a`F0){A%(m1$TDb)HIcE%)xkCH--}F++~OA*7rSeQ TY3yR&paI$%`s!7x_Obr~gQ&zz literal 4188 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 O0000qsCeQ literal 0 HcmV?d00001 From ca5d48487f230f5dc1eb42e9944d66f26dad92dc Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 9 Feb 2016 01:09:32 -0500 Subject: [PATCH 114/442] Fixed tables... again --- .../{structure/structure.dm => objects/structures/statue.dm} | 0 code/game/objects/structures/tables_racks.dm | 1 - paradise.dme | 2 +- 3 files changed, 1 insertion(+), 2 deletions(-) rename code/game/{structure/structure.dm => objects/structures/statue.dm} (100%) diff --git a/code/game/structure/structure.dm b/code/game/objects/structures/statue.dm similarity index 100% rename from code/game/structure/structure.dm rename to code/game/objects/structures/statue.dm diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index fabaf4c63f0..397ad1c3914 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -42,7 +42,6 @@ /obj/structure/table/update_icon() if(smooth && !flipped) - icon_state = initial(icon_state) smooth_icon(src) smooth_icon_neighbors(src) diff --git a/paradise.dme b/paradise.dme index e31271b9e11..d65e0ad4547 100644 --- a/paradise.dme +++ b/paradise.dme @@ -840,6 +840,7 @@ #include "code\game\objects\structures\safe.dm" #include "code\game\objects\structures\signs.dm" #include "code\game\objects\structures\spirit_board.dm" +#include "code\game\objects\structures\statue.dm" #include "code\game\objects\structures\tables_racks.dm" #include "code\game\objects\structures\tank_dispenser.dm" #include "code\game\objects\structures\target_stake.dm" @@ -884,7 +885,6 @@ #include "code\game\objects\structures\transit_tubes\station.dm" #include "code\game\objects\structures\transit_tubes\transit_tube.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_pod.dm" -#include "code\game\structure\structure.dm" #include "code\game\turfs\simulated.dm" #include "code\game\turfs\turf.dm" #include "code\game\turfs\unsimulated.dm" From 13cf94c2f3a8a13380873df517e1681b19c109a6 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 9 Feb 2016 01:58:17 -0500 Subject: [PATCH 115/442] herp --- code/game/objects/structures/tables_racks.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 397ad1c3914..6a921a014a3 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -42,6 +42,7 @@ /obj/structure/table/update_icon() if(smooth && !flipped) + icon_state = "" smooth_icon(src) smooth_icon_neighbors(src) From b6b3204bf78866a41e7740a4b34356c1e7c1e2c2 Mon Sep 17 00:00:00 2001 From: Spacemanspark Date: Tue, 9 Feb 2016 01:02:25 -0600 Subject: [PATCH 116/442] Makes Mob Capsule code better. --- code/game/objects/items/weapons/storage/belt.dm | 6 +++--- code/modules/mining/mine_items.dm | 11 ++++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 0855fd73491..44b1a21f73d 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -250,12 +250,12 @@ /obj/item/weapon/storage/belt/lazarus name = "trainer's belt" - desc = "For the pokemo- mining master, holds your lazarus capsules." + desc = "For the mining master, holds your lazarus capsules." icon_state = "lazarusbelt" item_state = "lazbelt" w_class = 4 - max_w_class = 4 - max_combined_w_class = 28 + max_w_class = 1 + max_combined_w_class = 6 storage_slots = 6 can_hold = list("/obj/item/device/mobcapsule") diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index d44b7d5a0da..5a0c256f318 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -201,9 +201,15 @@ icon_state = "mobcap0" w_class = 1.0 throw_range = 20 - var/mob/living/captured = null + var/mob/living/simple_animal/captured = null var/colorindex = 0 +/obj/item/device/mobcapsule/Destroy() + if(captured) + qdel(captured) + captured = null + return ..() + /obj/item/device/mobcapsule/attack(var/atom/A, mob/user, prox_flag) if(!istype(A, /mob/living/simple_animal)) return ..() @@ -214,7 +220,6 @@ var/mob/living/simple_animal/T = target if(captured) U << "Capture failed!: The capsule already has a mob registered to it!" - return else if(istype(T) && "neutral" in T.faction) T.forceMove(src) @@ -233,7 +238,7 @@ /obj/item/device/mobcapsule/proc/dump_contents(mob/user) if(captured) - captured.loc = src.loc + captured.forceMove(get_turf(src)) if(captured.client) captured.client.eye = captured.client.mob captured.client.perspective = MOB_PERSPECTIVE From bcdaedb01e42e1256a29a7de8b8e64957522ed69 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 8 Feb 2016 22:16:13 -0800 Subject: [PATCH 117/442] Walls will now smooth and explode properly --- code/game/turfs/simulated/walls.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index d311d94d7e6..c6534203db3 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -64,8 +64,10 @@ if(!damage_overlays[1]) //list hasn't been populated generate_overlays() + smooth_icon(src) if(!damage) - overlays.Cut() + overlays -= damage_overlays[damage_overlay] + damage_overlay = 0 return var/overlay = round(damage / damage_cap * damage_overlays.len) + 1 @@ -74,8 +76,7 @@ if(damage_overlay && overlay == damage_overlay) //No need to update. return - - overlays.Cut() + overlays -= damage_overlays[damage_overlay] overlays += damage_overlays[overlay] damage_overlay = overlay From 0561987ed8eb1b079de2917b4d880fe791193e10 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 9 Feb 2016 02:21:19 -0500 Subject: [PATCH 118/442] Kinetic Accelerators Auto-Reload --- .../projectiles/guns/energy/special.dm | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index d88e540adf3..9bb7d479de5 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -203,16 +203,13 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. charge_cost = 5000 cell_type = "/obj/item/weapon/stock_parts/cell/emproof" fire_delay = 16 //Because guncode is bad and you can bug the reload for rapid fire otherwise. - var/overheat = 0 - var/overheat_time = 16 - var/recent_reload = 1 + var/recently_fired = 0 /obj/item/weapon/gun/energy/kinetic_accelerator/super name = "super-kinetic accelerator" desc = "An upgraded, superior version of the proto-kinetic accelerator." icon_state = "kineticgun_u" projectile_type = "/obj/item/projectile/kinetic/super" - overheat_time = 15 fire_delay = 15 origin_tech = "combat=3;powerstorage=2" @@ -221,7 +218,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. desc = "An upgraded, even more superior version of the proto-kinetic accelerator." icon_state = "kineticgun_h" projectile_type = "/obj/item/projectile/kinetic/hyper" - overheat_time = 13 fire_delay = 13 origin_tech = "combat=4;powerstorage=3" @@ -229,26 +225,23 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. flags = NODROP /obj/item/weapon/gun/energy/kinetic_accelerator/Fire() - overheat = 1 - spawn(overheat_time) - overheat = 0 - recent_reload = 0 + if(!recently_fired) + recently_fired = 1 + spawn(fire_delay) + reload(usr) ..() /obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity) return -/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(var/mob/living/user/L) - if(overheat || recent_reload) - return +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/reload(mob/living/user) power_supply.give(5000) if(!silenced) playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) - else + else if(user) usr << "You silently charge [src]." - recent_reload = 1 + recently_fired = 0 update_icon() - return /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow name = "mini energy crossbow" @@ -261,7 +254,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. silenced = 1 projectile_type = "/obj/item/projectile/energy/bolt" fire_sound = 'sound/weapons/Genhit.ogg' - overheat_time = 20 fire_delay = 20 /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large From 5aa671b63074f1792073f5d44b31a3fe9b702ece Mon Sep 17 00:00:00 2001 From: Spacemanspark Date: Tue, 9 Feb 2016 01:41:22 -0600 Subject: [PATCH 119/442] Fixes indents. --- code/modules/mining/mine_items.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 5a0c256f318..3e5cdd0bb51 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -205,10 +205,10 @@ var/colorindex = 0 /obj/item/device/mobcapsule/Destroy() - if(captured) - qdel(captured) - captured = null - return ..() + if(captured) + qdel(captured) + captured = null + return ..() /obj/item/device/mobcapsule/attack(var/atom/A, mob/user, prox_flag) if(!istype(A, /mob/living/simple_animal)) From 1ba299b289fe7320299baeea4b9dedc300234dd6 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Tue, 9 Feb 2016 00:59:49 -0800 Subject: [PATCH 120/442] Revamps that weird dialog about hacking the nearest APC to actually work --- code/modules/mob/living/silicon/ai/ai.dm | 1 - code/modules/mob/living/silicon/ai/life.dm | 4 +--- code/modules/nano/interaction/default.dm | 3 +++ 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index c870c742573..a9e4703a8ad 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -71,7 +71,6 @@ var/list/ai_verbs_default = list( var/mob/living/silicon/ai/parent = null - var/apc_override = 0 //hack for letting the AI use its APC even when visionless var/camera_light_on = 0 //Defines if the AI toggled the light on the camera it's looking through. var/datum/trackable/track = null var/last_paper_seen = null diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 934cdb393c1..93ee8a54a2b 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -135,10 +135,8 @@ src << "Receiving control information from APC." sleep(2) //bring up APC dialog - apc_override = 1 - theAPC.attack_ai(src) - apc_override = 0 aiRestorePowerRoutine = 3 + theAPC.attack_ai(src) src << "Here are your current laws:" src.show_laws() //WHY THE FUCK IS THIS HERE sleep(50) diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm index bd5ba3ee0c8..e0e7c3a98f6 100644 --- a/code/modules/nano/interaction/default.dm +++ b/code/modules/nano/interaction/default.dm @@ -32,6 +32,9 @@ /mob/living/silicon/ai/default_can_use_topic(var/src_object) . = shared_nano_interaction() + // Fix the weird hacking blurb to actually let them restore power + if(aiRestorePowerRoutine == 3 && istype(src_object, /obj/machinery/power/apc)) + return STATUS_INTERACTIVE if(. != STATUS_INTERACTIVE) return From 80ae2796b7c8cc4793f038d95f1d35cd6e4309dc Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 9 Feb 2016 08:45:56 -0500 Subject: [PATCH 121/442] Ports TG's Timer Controller --- code/controllers/Processes/timer.dm | 77 +++++++++++++++++++++++++++++ paradise.dme | 1 + 2 files changed, 78 insertions(+) create mode 100644 code/controllers/Processes/timer.dm diff --git a/code/controllers/Processes/timer.dm b/code/controllers/Processes/timer.dm new file mode 100644 index 00000000000..0ee54b954ed --- /dev/null +++ b/code/controllers/Processes/timer.dm @@ -0,0 +1,77 @@ +var/global/datum/controller/process/timer/PStimer + +/datum/controller/process/timer + var/list/processing_timers = list() + var/list/hashes = list() + +/datum/controller/process/timer/setup() + name = "timer" + schedule_interval = 5 //every 0.5 seconds + PStimer = src + +/datum/controller/process/timer/statProcess() + ..() + stat(null, "[processing_timers.len] timers") + +/datum/controller/process/timer/doWork() + if(!processing_timers.len) + disabled = 1 //nothing to do, lets stop firing. + return + for(var/datum/timedevent/event in processing_timers) + if(!event.thingToCall || qdeleted(event.thingToCall)) + qdel(event) + if(event.timeToRun <= world.time) + spawn(-1) + call(event.thingToCall, event.procToCall)(arglist(event.argList)) + qdel(event) + SCHECK + +/datum/timedevent + var/thingToCall + var/procToCall + var/timeToRun + var/argList + var/id + var/hash + var/static/nextid = 1 + +/datum/timedevent/New() + id = nextid + nextid++ + +/datum/timedevent/Destroy() + PStimer.processing_timers -= src + PStimer.hashes -= hash + return QDEL_HINT_IWILLGC + +/proc/addtimer(thingToCall, procToCall, wait, unique = FALSE, ...) + if(!PStimer) //can't run timers before the mc has been created + return + if(!thingToCall || !procToCall || wait <= 0) + return + if(PStimer.disabled) + PStimer.disabled = 0 + + var/datum/timedevent/event = new() + event.thingToCall = thingToCall + event.procToCall = procToCall + event.timeToRun = world.time + wait + event.hash = list2text(args) + if(args.len > 4) + event.argList = args.Copy(5) + + // Check for dupes if unique = 1. + if(unique) + if(event.hash in PStimer.hashes) + return + // If we are unique (or we're not checking that), add the timer and return the id. + PStimer.processing_timers += event + PStimer.hashes += event.hash + return event.id + +/proc/deltimer(id) + for(var/datum/timedevent/event in PStimer.processing_timers) + if(event.id == id) + qdel(event) + return 1 + return 0 \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index e31271b9e11..8ffb6a10df8 100644 --- a/paradise.dme +++ b/paradise.dme @@ -167,6 +167,7 @@ #include "code\controllers\Processes\shuttles.dm" #include "code\controllers\Processes\sun.dm" #include "code\controllers\Processes\ticker.dm" +#include "code\controllers\Processes\timer.dm" #include "code\controllers\Processes\vote.dm" #include "code\controllers\Processes\shuttles\emergency.dm" #include "code\controllers\Processes\shuttles\supply.dm" From 5a8ffbd19833d13a37bfdd4ac8f9dfcf1b693538 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Tue, 9 Feb 2016 16:26:46 -0500 Subject: [PATCH 122/442] Jobban Tweaks --- code/game/gamemodes/cult/cult.dm | 4 ++++ code/game/gamemodes/game_mode.dm | 12 +++++++++++- code/game/gamemodes/revolution/revolution.dm | 2 ++ code/game/gamemodes/shadowling/shadowling.dm | 2 ++ code/modules/admin/topic.dm | 6 ++++++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index a1a5d646544..2b44d364c00 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -186,6 +186,10 @@ cult += cult_mind add_cult_viewpoint(cult_mind.current) update_cult_icons_added(cult_mind) + cult_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the cult!" + if(jobban_isbanned(cult_mind.current, ROLE_CULTIST)) + replace_jobbaned_player(cult_mind.current, ROLE_CULTIST, ROLE_CULTIST) + return 1 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index b9c678c74f7..ffc89827958 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -445,4 +445,14 @@ proc/get_nt_opposed() for(var/obj/machinery/nuclearbomb/bomb in world) if(bomb && bomb.r_code && bomb.z == ZLEVEL_STATION) nukecode = bomb.r_code - return nukecode \ No newline at end of file + return nukecode + +/datum/game_mode/proc/replace_jobbaned_player(mob/living/M, role_type, pref) + var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as a [role_type]?", "[role_type]", null, pref, 100) + var/mob/dead/observer/theghost = null + if(candidates.len) + theghost = pick(candidates) + M << "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!" + message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(M)]) to replace a jobbanned player.") + M.ghostize() + M.key = theghost.key \ No newline at end of file diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 74e81484c97..7d3176a7348 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -225,6 +225,8 @@ rev_mind.current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" rev_mind.special_role = "Revolutionary" update_rev_icons_added(rev_mind) + if(jobban_isbanned(rev_mind.current, ROLE_REV)) + replace_jobbaned_player(rev_mind.current, ROLE_REV, ROLE_REV) return 1 ////////////////////////////////////////////////////////////////////////////// //Deals with players being converted from the revolution (Not a rev anymore)// // Modified to handle borged MMIs. Accepts another var if the target is being borged at the time -- Polymorph. diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 551fb869839..a11fd4a5fa6 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -155,6 +155,8 @@ Made by Xhuis new_thrall_mind.current << "Your body has been irreversibly altered. The attentive can see this - you may conceal it by wearing a mask." new_thrall_mind.current << "Though not nearly as powerful as your masters, you possess some weak powers. These can be found in the Thrall Abilities tab." new_thrall_mind.current << "You may communicate with your allies by speaking in the Shadowling Hivemind (:8)." + if(jobban_isbanned(new_thrall_mind.current, ROLE_SHADOWLING)) + replace_jobbaned_player(new_thrall_mind.current, ROLE_SHADOWLING, ROLE_SHADOWLING) return 1 diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index f263515d986..26813c0ba91 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -680,6 +680,12 @@ else jobs += "[replacetext("Cultist", " ", " ")]" + //Shadowling + if(jobban_isbanned(M, "shadowling") || isbanned_dept) + jobs += "[replacetext("Shadowling", " ", " ")]" + else + jobs += "[replacetext("Shadowling", " ", " ")]" + //Wizard if(jobban_isbanned(M, "wizard") || isbanned_dept) jobs += "[replacetext("Wizard", " ", " ")]" From 235174e96c584b1d92c6a88b6b66a93ad386661c Mon Sep 17 00:00:00 2001 From: TheDZD Date: Tue, 9 Feb 2016 17:57:22 -0500 Subject: [PATCH 123/442] Automatic changelog generation for PR #3549 --- html/changelogs/AutoChangeLog-pr-3549.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3549.yml diff --git a/html/changelogs/AutoChangeLog-pr-3549.yml b/html/changelogs/AutoChangeLog-pr-3549.yml new file mode 100644 index 00000000000..eb7105f8150 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3549.yml @@ -0,0 +1,4 @@ +author: Crazylemon64 +delete-after: True +changes: + - bugfix: "Walls will now properly smooth and show damage." From 4d0e8bb5e2942799f3375d70f7dcbfdeb2c9e2ed Mon Sep 17 00:00:00 2001 From: TheDZD Date: Tue, 9 Feb 2016 18:12:47 -0500 Subject: [PATCH 124/442] GET MAD --- code/game/gamemodes/game_mode.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index ffc89827958..7f538f83e8d 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -452,7 +452,7 @@ proc/get_nt_opposed() var/mob/dead/observer/theghost = null if(candidates.len) theghost = pick(candidates) - M << "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!" + M << "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!" message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(M)]) to replace a jobbanned player.") M.ghostize() M.key = theghost.key \ No newline at end of file From eca3edfec3a8cd2eb7169f77620f1bc7bcba4426 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 9 Feb 2016 18:32:40 -0500 Subject: [PATCH 125/442] LIMBSTUMPS --- .../living/carbon/human/human_attackhand.dm | 19 +++++++++----- code/modules/surgery/implant.dm | 18 ++++++++++++- code/modules/surgery/limb_reattach.dm | 26 +++++++++++++++++++ .../surgery/organs/augments_internal.dm | 10 +++---- code/modules/surgery/organs/organ_external.dm | 4 +-- code/modules/surgery/organs_internal.dm | 5 ++-- code/modules/surgery/other.dm | 18 ++++++++++--- 7 files changed, 78 insertions(+), 22 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index fd0a685038e..d594d365d5c 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -59,14 +59,19 @@ switch(M.a_intent) if(I_HELP) + if(can_operate(M)) + if(health >= config.health_threshold_crit) + for(var/datum/surgery/S in M.surgeries) + if(istype(S.get_surgery_step(), /datum/surgery_step/cavity/place_item)) + return 1 + else + help_shake_act(M) + add_logs(src, M, "shaked") + return 1 if(health >= config.health_threshold_crit) - for(var/datum/surgery/S in M.surgeries) - if(istype(S.get_surgery_step(), /datum/surgery_step/cavity/place_item)) - return 1 - else - help_shake_act(M) - add_logs(src, M, "shaked") - return 1 + help_shake_act(M) + add_logs(src, M, "shaked") + return 1 if(!H.check_has_mouth()) H << "You don't have a mouth, you cannot perform CPR!" return diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 8bf203a8414..fe2acd815c3 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -18,6 +18,14 @@ possible_locs = list("groin") +/datum/surgery/cavity_implant/synth + name = "cavity implant" + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/cavity/place_item,/datum/surgery_step/robotics/external/close_hatch) + possible_locs = list("chest","head","groin") + +/datum/surgery/cavity_implant/synth/can_start(mob/user, mob/living/carbon/target) + return target.get_species() == "Machine" + /datum/surgery_step/cavity priority = 1 @@ -145,7 +153,7 @@ "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) else if(IC) user.visible_message("[user] checks for items in [target]'s [target_zone].", "You check for items in [target]'s [target_zone]...") - target.custom_pain("The pain in your chest is living hell!",1) + target.custom_pain("The pain in your [target_zone] is living hell!",1) ..() /datum/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) @@ -193,6 +201,14 @@ steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) possible_locs = list("chest","head")//head is for borers..i can put it elsewhere +/datum/surgery/cavity_implant_rem/synth + name = "implant removal" + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/robotics/external/close_hatch) + possible_locs = list("chest","head")//head is for borers..i can put it elsewhere + +/datum/surgery/cavity_implant_rem/synth/can_start(mob/user, mob/living/carbon/target) + return target.get_species() == "Machine" + /datum/surgery_step/cavity/implant_removal name = "extract implant" allowed_tools = list( diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index f774953bc58..88585afeaa2 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -34,6 +34,21 @@ return 0 +/datum/surgery/reattach/synth + name = "limb attachment" + steps = list(/datum/surgery_step/limb/attach) + possible_locs = list("head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") + +/datum/surgery/reattach/synth/can_start(mob/user, mob/living/carbon/target) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + if(!affected && (target.get_species() == "Machine")) + return 1 + + return 0 + + /datum/surgery/robo_attach name = "robotic limb attachment" steps = list(/datum/surgery_step/limb/mechanize) @@ -77,6 +92,11 @@ user.unEquip(E) E.replaced(target) E.forceMove(target) + if(target.get_species() == "Machine")//as this is the only step needed for ipc put togethers + E.status &= ~ORGAN_DESTROYED + if(E.children) + for(var/obj/item/organ/external/C in E.children) + C.status &= ~ORGAN_DESTROYED target.update_body() target.updatehealth() target.UpdateDamageIcon() @@ -114,6 +134,9 @@ user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].") E.status &= ~ORGAN_DESTROYED + var/obj/item/organ/external/stump = target.get_organ(target_zone) + if(stump.is_stump()) + stump.removed(target) if(E.children) for(var/obj/item/organ/external/C in E.children) C.status &= ~ORGAN_DESTROYED @@ -159,6 +182,9 @@ var/list/organ_data = target.species.has_limbs["[part_name]"] if(!organ_data) continue + var/obj/item/organ/external/stump = target.get_organ(target_zone) + if(stump.is_stump()) + stump.removed(target) var/new_limb_type = organ_data["path"] var/obj/item/organ/external/new_limb = new new_limb_type(target) new_limb.robotize(L.model_info) diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 82ce2b8e5d9..c8df4adf7cc 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -266,23 +266,23 @@ datumvars//note i am putting External in robolimbs. /obj/item/organ/internal/cyberimp/chest/arm_mod/ui_action_click() if(overloaded)//ensure the implant isn't broken - owner.visible_message("The implant doesn't respond. It seems to be broken...") + owner << "The implant doesn't respond. It seems to be broken..." return if(out)//check if the owner has the item out already owner.unEquip(holder, 1)//if he does, take it away. then, holder.loc = null//stash it in nullspace out = 0//and set this to clarify the item isn't out. - owner.visible_message("You retract [holder].") + owner.visible_message("[owner] retracts [holder].","You retract [holder].") playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) else//if he doesn't have the item out if(owner.put_in_hands(holder))//put it in his hands. lasthand = owner.get_active_hand() out = 1 - owner.visible_message("You extend [holder]!") + owner.visible_message("[owner] extends [holder]!","You extend [holder]!") playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) else//if this fails to put the item in his hands, holder.loc = null//keep it in nullspace - owner.visible_message("You can't extend [holder] if you can't use your hands!") + owner << "You can't extend [holder] if you can't use your hands!" /obj/item/organ/internal/cyberimp/chest/arm_mod/emp_act(severity)//if the implant gets EMPed... if(!owner || overloaded)//ensure that it's in an owner and that it's not already EMPed, then... @@ -291,7 +291,7 @@ datumvars//note i am putting External in robolimbs. owner.unEquip(holder, 1)//if he does, take it away. holder.loc = null out = 0 - owner.visible_message("[holder] forcibly retracts into your arm.") + owner.visible_message("[holder] forcibly retracts into [owner]'s arm.") owner.visible_message("A loud bang comes from [owner]...") playsound(get_turf(owner), 'sound/effects/bang.ogg', 100, 1) owner << "You feel an explosion erupt inside you as your chest implant breaks. Is it hot in here?" diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index d435ed6b87e..531e49526b1 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -76,7 +76,7 @@ //qdel(O) return ..() -/* + /obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob) switch(stage) if(0) @@ -110,7 +110,7 @@ user.visible_message("[user] fishes around fruitlessly in [src] with [W].") return ..() - */ + /obj/item/organ/external/update_health() damage = min(max_damage, (brute_dam + burn_dam)) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index c0d1da13daf..4a6f84e9b2f 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -3,7 +3,7 @@ steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("chest","head") - requires_organic_bodypart = 0 + requires_organic_bodypart = 1 /datum/surgery/organ_manipulation/soft possible_locs = list("groin", "eyes", "mouth") @@ -26,7 +26,7 @@ if(istype(target,/mob/living/carbon/human)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.status & ORGAN_ROBOT) + if(affected && (affected.status & ORGAN_ROBOT)) return 0 return 1 @@ -226,7 +226,6 @@ "You start treating damage to [target]'s [I.name] with [tool_name]." ) user << "No organs appear to be damaged." - return -1 H.custom_pain("The pain in your [affected.name] is living hell!",1) else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index a821c8987e7..c79eb220c38 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -4,12 +4,11 @@ ////////////////////////////////////////////////////////////////// /datum/surgery/bleeding name = "internal bleeding" - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, - /datum/surgery_step/open_encased/retract,/datum/surgery_step/fix_vein,/datum/surgery_step/open_encased/close, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin,/datum/surgery_step/fix_vein,/datum/surgery_step/generic/cauterize) possible_locs = list("chest","head","groin") /datum/surgery/bleeding/can_start(mob/user, mob/living/carbon/target) - if(ishuman(target) + if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) if(!affected) return 0 @@ -201,12 +200,23 @@ ////////////////////////////////////////////////////////////////// /datum/surgery/remove_thrall name = "clense contaminations"//RENAME MEH - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall) + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall,/datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("head") +/datum/surgery/remove_thrall/synth + name = "clense contaminations"//RENAME MEH + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/internal/dethrall,/datum/surgery_step/robotics/external/close_hatch) + possible_locs = list("chest") + + + /datum/surgery/remove_thrall/can_start(mob/user, mob/living/carbon/target) return is_thrall(target)//would this be too meta? +/datum/surgery/remove_thrall/synth/can_start(mob/user, mob/living/carbon/target) + return is_thrall(target) && target.get_species() == "Machine" + + /datum/surgery_step/dethrall name = "cleanse contamination" allowed_tools = list(/obj/item/device/flash = 100, /obj/item/device/flashlight/pen = 80, /obj/item/device/flashlight = 40) From b3c795f8fc84e2f18133be150706f075a4f69a25 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Tue, 9 Feb 2016 18:33:13 -0800 Subject: [PATCH 126/442] Lets you follow any movable atom --- code/_onclick/observer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 4e38804fa2f..09e205a3316 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -7,8 +7,8 @@ reenter_corpse() // (cloning scanner, body bag, closet, mech, etc) return // seems legit. - // Things you might plausibly want to follow - if((ismob(A) && A != src) || istype(A,/obj/machinery/bot) || istype(A,/obj/singularity) || istype(A,/obj/mecha)) + // Follow !!ALL OF THE THINGS!! + if(istype(A, /atom/movable) && A != src) ManualFollow(A) // Otherwise jump From a346ece1c47376b46363d27e7c2d826f2f656600 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Tue, 9 Feb 2016 22:14:33 -0500 Subject: [PATCH 127/442] You'd have to be blind to miss this. --- code/game/gamemodes/cult/cult.dm | 3 --- code/game/gamemodes/game_mode.dm | 5 ++++- interface/stylesheet.dm | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 2b44d364c00..d96e3376b53 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -16,8 +16,6 @@ return 0 if(iscultist(mind.current)) return 1 //If they're already in the cult, assume they are convertable - if(jobban_isbanned(mind.current, "cultist") || jobban_isbanned(mind.current, "Syndicate")) - return 0 if(ishuman(mind.current) && (mind.assigned_role in list("Captain", "Chaplain"))) return 0 if(ishuman(mind.current)) @@ -189,7 +187,6 @@ cult_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the cult!" if(jobban_isbanned(cult_mind.current, ROLE_CULTIST)) replace_jobbaned_player(cult_mind.current, ROLE_CULTIST, ROLE_CULTIST) - return 1 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 7f538f83e8d..08e8f74b312 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -455,4 +455,7 @@ proc/get_nt_opposed() M << "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!" message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(M)]) to replace a jobbanned player.") M.ghostize() - M.key = theghost.key \ No newline at end of file + M.key = theghost.key + else + message_admins("[M] ([M.key] has been converted into [role_type] with an active antagonist jobban for said role since no ghost has volunteered to take their place.") + M << "You have been converted into [role_type] with an active jobban. Any further violations of the rules on your part are likely to result in a permanent ban." \ No newline at end of file diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 3c8a80bab91..1950aa40fcb 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -56,6 +56,7 @@ h1.alert, h2.alert {color: #000000;} .disarm {color: #990000;} .passive {color: #660000;} +.biggerdanger {color: #ff0000; font-weight: bold; font-size: 5;} .userdanger {color: #ff0000; font-weight: bold; font-size: 3;} .danger {color: #ff0000; font-weight: bold;} .warning {color: #ff0000; font-style: italic;} From ba5433476ebfef811496bbdb848320f16a05439b Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 9 Feb 2016 22:40:33 -0500 Subject: [PATCH 128/442] faster loop --- code/controllers/Processes/timer.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/controllers/Processes/timer.dm b/code/controllers/Processes/timer.dm index 0ee54b954ed..426770a2ad9 100644 --- a/code/controllers/Processes/timer.dm +++ b/code/controllers/Processes/timer.dm @@ -17,7 +17,8 @@ var/global/datum/controller/process/timer/PStimer if(!processing_timers.len) disabled = 1 //nothing to do, lets stop firing. return - for(var/datum/timedevent/event in processing_timers) + for(last_object in processing_timers) + var/datum/timedevent/event = last_object if(!event.thingToCall || qdeleted(event.thingToCall)) qdel(event) if(event.timeToRun <= world.time) From 5f2b5f1fdeb0cc48cc833fb56d566affd38e6152 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 10 Feb 2016 00:01:37 -0500 Subject: [PATCH 129/442] Updates Fake Disintegrate and Spell Icons --- code/datums/spells/fake_gib.dm | 20 +++++++------------- code/datums/spells/horsemask.dm | 2 +- code/datums/spells/wizard.dm | 4 +--- code/game/gamemodes/wizard/godhand.dm | 17 +++++++++++++++++ code/game/gamemodes/wizard/spellbook.dm | 2 +- icons/mob/actions.dmi | Bin 52285 -> 47539 bytes 6 files changed, 27 insertions(+), 18 deletions(-) diff --git a/code/datums/spells/fake_gib.dm b/code/datums/spells/fake_gib.dm index 5b8dc339c8e..23d2343e10e 100644 --- a/code/datums/spells/fake_gib.dm +++ b/code/datums/spells/fake_gib.dm @@ -1,17 +1,11 @@ -/obj/effect/proc_holder/spell/targeted/fake_gib +/obj/effect/proc_holder/spell/targeted/touch/fake_disintegrate name = "Disintegrate" - desc = "This spell instantly kills somebody adjacent to you with the vilest of magick." + desc = "This spell charges your hand with vile energy that can be used to violently explode victims." + hand_path = "/obj/item/weapon/melee/touch_attack/fake_disintegrate" - school = "conjuration" - charge_max = 20 + school = "evocation" + charge_max = 600 clothes_req = 0 - invocation = "EI NATH" - invocation_type = "shout" - range = -1 - include_user = 1 - cooldown_min = 5 //25 deciseconds reduction per rank + cooldown_min = 200 //100 deciseconds reduction per rank - sparks_spread = 3 - sparks_amt = 1 - - action_icon_state = "spell_disintegrate" \ No newline at end of file + action_icon_state = "gib" \ No newline at end of file diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm index 99e7b0c8a0d..2c31c943284 100644 --- a/code/datums/spells/horsemask.dm +++ b/code/datums/spells/horsemask.dm @@ -14,7 +14,7 @@ selection_type = "range" var/list/compatible_mobs = list(/mob/living/carbon/human) - action_icon_state = "spell_horse" + action_icon_state = "barn" /obj/effect/proc_holder/spell/targeted/horsemask/cast(list/targets, mob/user = usr) if(!targets.len) diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm index 904b7d54e63..98423b3e5fc 100644 --- a/code/datums/spells/wizard.dm +++ b/code/datums/spells/wizard.dm @@ -85,8 +85,6 @@ emp_heavy = 6 emp_light = 10 - action_icon_state = "tech" - /obj/effect/proc_holder/spell/targeted/turf_teleport/blink name = "Blink" desc = "This spell randomly teleports you a short distance." @@ -144,7 +142,7 @@ summon_type = list("/obj/effect/forcefield") summon_lifespan = 300 - action_icon_state = "spell_forcewall" + action_icon_state = "shield" /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop name = "Stop Time" diff --git a/code/game/gamemodes/wizard/godhand.dm b/code/game/gamemodes/wizard/godhand.dm index e8bdb02c764..b3c7834ae8d 100644 --- a/code/game/gamemodes/wizard/godhand.dm +++ b/code/game/gamemodes/wizard/godhand.dm @@ -73,4 +73,21 @@ var/mob/M = target M.Stun(2) new /obj/structure/closet/statue(M.loc, M) + ..() + +/obj/item/weapon/melee/touch_attack/fake_disintegrate + name = "toy plastic hand" + desc = "This hand of mine glows with an awesome power! Ok, maybe just batteries." + catchphrase = "EI NATH!!" + on_use_sound = "sound/magic/Disintegrate.ogg" + icon_state = "disintegrate" + item_state = "disintegrate" + +/obj/item/weapon/melee/touch_attack/fake_disintegrate/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //exploding after touching yourself would be bad + return + var/datum/effect/system/spark_spread/sparks = new + sparks.set_up(4, 0, target.loc) //no idea what the 0 is + sparks.start() + playsound(target.loc, 'sound/effects/gib.ogg', 100, 1, 10) ..() \ No newline at end of file diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index f168ca5f35a..7422d610fb9 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -839,7 +839,7 @@ /obj/item/weapon/spellbook/oneuse/fake_gib - spell = /obj/effect/proc_holder/spell/targeted/fake_gib + spell = /obj/effect/proc_holder/spell/targeted/touch/fake_disintegrate spellname = "disintegrate" icon_state ="bookfireball" desc = "This book feels like it will rip stuff apart." \ No newline at end of file diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 57d17caaa46525a84032885795bad3d53b0e946b..7eefff0c558ad844c9116a8310b360f1630c2215 100644 GIT binary patch delta 27738 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 UT=OfyCx}5*6g1_3$y$c~A04(ywg3PC delta 32521 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 From 21a37cafd8011e099919ace983e4d339c2ab0199 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 10 Feb 2016 00:51:13 -0500 Subject: [PATCH 130/442] Automatic changelog generation for PR #3548 --- html/changelogs/AutoChangeLog-pr-3548.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3548.yml diff --git a/html/changelogs/AutoChangeLog-pr-3548.yml b/html/changelogs/AutoChangeLog-pr-3548.yml new file mode 100644 index 00000000000..049a0ae08f6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3548.yml @@ -0,0 +1,5 @@ +author: Spacemanspark +delete-after: True +changes: + - rscadd: "Miners can now utilize the power of mob capsules to take along their lazarus injected mining creatures!" + - rscadd: "Store your Pokemo- er, sorry, I mean mining mobs that you've captured in the lazarus capsule belt." From eabd94e844fe63e651f0d0d16411b63c8cac8e07 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Wed, 10 Feb 2016 08:36:19 +0000 Subject: [PATCH 131/442] Changes Reverts banana peel and soap to slip whilst walking No longer slip whilst lying down No longer slip whilst getting in and out of a closet containing a slippery item --- code/game/objects/items/weapons/clown_items.dm | 4 ++-- code/modules/mob/living/carbon/carbon.dm | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 21de1025e8e..a655efa125c 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -23,7 +23,7 @@ /obj/item/weapon/bananapeel/Crossed(AM as mob|obj) if (istype(AM, /mob/living/carbon)) var/mob/living/carbon/M = AM - M.slip("banana peel", 4, 2, 0, 1) + M.slip("banana peel", 4, 2) /* * Soap @@ -31,7 +31,7 @@ /obj/item/weapon/soap/Crossed(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist if (istype(AM, /mob/living/carbon)) var/mob/living/carbon/M = AM - M.slip("soap", 4, 2, 0, 1) + M.slip("soap", 4, 2) /obj/item/weapon/soap/afterattack(atom/target, mob/user as mob, proximity) if(!proximity) return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 4611f87f453..0a112b92cf7 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -771,7 +771,11 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, /mob/living/carbon/proc/slip(var/description, var/stun, var/weaken, var/tilesSlipped, var/walkSafely, var/slipAny) - if (flying || buckled || (walkSafely && m_intent == "walk")) + if (flying || buckled || lying || (walkSafely && m_intent == "walk")) + return + if (istype(loc, /obj/structure/closet)) // for getting in a locker + return + for (var/obj/structure/closet/closet in loc.contents) // for getting out of a locker return if (!(slipAny)) if (istype(src, /mob/living/carbon/human)) From 3689eb88ea26563c5ab42921cd17d3f49cb6dbb6 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Wed, 10 Feb 2016 00:39:20 -0800 Subject: [PATCH 132/442] Makes mages more ragin Also lets admins change the max_mages more flexibly - either through players_per_mage, which it sticks to by default, or max_mages if set --- code/game/gamemodes/wizard/raginmages.dm | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm index 77703c53715..e2812db9a17 100644 --- a/code/game/gamemodes/wizard/raginmages.dm +++ b/code/game/gamemodes/wizard/raginmages.dm @@ -8,7 +8,7 @@ var/making_mage = 0 var/mages_made = 1 var/time_checked = 0 - var/players_per_mage = 8 // If the admin wants to tweak things or something + var/players_per_mage = 6 // If the admin wants to tweak things or something but_wait_theres_more = 1 var/delay_per_mage = 4200 // Every 7 minutes by default var/time_till_chaos = 18000 // Half-hour in @@ -17,11 +17,6 @@ world << "The current game mode is - Ragin' Mages!" world << "The \red Space Wizard Federation\black is pissed, help defeat all the space wizards!" -/datum/game_mode/wizard/raginmages/pre_setup() - . = ..() - if(!max_mages) - max_mages = round(num_players() / players_per_mage) - /datum/game_mode/wizard/raginmages/greet_wizard(var/datum/mind/wizard, var/you_are=1) if (you_are) @@ -37,6 +32,8 @@ /datum/game_mode/wizard/raginmages/check_finished() var/wizards_alive = 0 + // Accidental pun! + var/wizard_cap = (max_mages || (num_players() / players_per_mage)) for(var/datum/mind/wizard in wizards) if(isnull(wizard.current)) continue @@ -78,11 +75,11 @@ if (wizards_alive) if(!time_checked) time_checked = world.time - if(world.time > time_till_chaos && world.time > time_checked + delay_per_mage && (mages_made < max_mages)) + if(world.time > time_till_chaos && world.time > time_checked + delay_per_mage && (mages_made < wizard_cap)) time_checked = world.time make_more_mages() else - if(wizards.len >= max_mages) + if(wizards.len >= wizard_cap) finished = 1 return 1 else From a12024863d465e3d64eed20b8e89004c3b7da996 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 10 Feb 2016 05:18:21 -0500 Subject: [PATCH 133/442] time icon --- icons/mob/actions.dmi | Bin 47539 -> 49569 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 7eefff0c558ad844c9116a8310b360f1630c2215..7f5f8925b1780ef345a75dee43e334379665b552 100644 GIT binary patch delta 9449 zcmVem=jBk1x-|hSI3y z@i>0}@^v`u6f};<@!{KWh)7G+%R^I89FOA-OvI#TH-pExE;qw}A&|83INlG3Ss>x% z_a{D4!d4M|G>5cG0cFRjAHjs#fu~?ZCy?2Q;$lehLT-gObU{kS{|jM|4U8d?f>k}^ zDn-jL%Eo}okk!ZvHnXk@*g?oD8B&mfA4oQorX^~>dI4u*!(0Q;YxYW|f7i7WGO7Wb z3abN~sQzR7+>TGLkK^OZ^Y9ysO&Fyu)#+mZ03ZOfoC52df0>6zRi6F-b7oI6lSwAa zkc6PbyYO0Dy|A^swpy#8SG85C*0xrW3KXO) zqU?r5LP*#H1TvXSw#iH;v!CA|CucH~Oh^L3P&}XO(wRAP&OB!VeDi&t`+n{lXn_q0 z2??}{BKVxNf1)FS0EnO$gK_Vvt7)s*tR*L_eJSRV`O+HXGn?-MASWw}3%1^6kaXz) zPv~aFh+p)hb?_G=&*j$zH!o-F_LUSEdfvdeD=y{$)6!G;!4H1GiWMuk|Ni^A)4ZFo zyB6(;`RspqGXV3~basIHK*A+Ez-a#X$}5~(umE}Qf6U91+fp7@tcZxf(4j*CC@d_b zFGQ&0_>cYK7oFeehw=aC;K7*VmpgucIzSn3iLJQ#_0+UF5e`QphkcS|Im6^S}nbE`tQr zKr8nTe?G#iXD8CirQ4LU@^VsBQ)z5$g!!G1b>$8LPR5A{cj*96v`CNkv!5`=^Iq&H zRlG-9)XVa-MBHJCcX+o>@KPP%uwerUhr>Mc%rgKi&N;!|&sFpG_a|a74Ztwz8vtzP z^)@#cP0!qEJcbS(${lyy!Aq-GlWMW>*yPEbf6hs@SUMf+EAi<#ezfrP$M`ZYNBtaD zw?*YIXZ-$jfH}>lL`!;hB=tphfr%y)*@H*oEd4}u=T7QYP+}v#oyD&=TujLN!u>^~ zQmF*JUXLD8@JY2P<8rHK;yarXKfNpFm~+y)P3Gc7M!hDj=Q%`gORw)UH8quG%cK;?AFiGOfV_8l{rdG6y*6GtOqULD1ht$ff)RyFsSgat zUM)F0+5JVkKx_7J2sDy?-5i=7{LwQJX6x7lcHe`tstix#5j<1&5ez@o>0IgSATa^uF&Z2ai& zE#FIDeE?FR4GueM zR1oT+0017cNklo#77Vk)4>ow4JID5 zHtZByX73h1x_$<$SFdK-vSln=wv2PM%MoVQpHnic3aco zKx0JkBF6yxnO!tH8@P9F3va&pe?BKXaPPhMa&m9yjqbg5fWw9jj6{C-?%j(@rQ-hk z@8`bJF7|ck?&x*ZU@#59H0c{%IKfL}*REZF6!rY&iWM0NQ7T*s23)=% z2?7KGf6v>}L~yxWj2=0Xf7Pp3#~jbe%Hrtp-tR5$Itr{C#fhRdoi0c=cb;kiQR4R| z^XE&G^EcmolY8ℑ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 delta 7406 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 Date: Wed, 10 Feb 2016 09:16:34 -0500 Subject: [PATCH 134/442] Duffelbag Icons --- icons/mob/back.dmi | Bin 85521 -> 90014 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 6f24676144a7b94a051a8c073c2a3a2004f8610f..281133febcf48f4e4afa0297d504665bd0d39255 100644 GIT binary patch literal 90014 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