From f205911b5a769b5e06344f3b5e3df086a3a9aa65 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sun, 15 Oct 2017 20:33:35 -0400 Subject: [PATCH 01/48] Adds defines for organ slots --- code/__DEFINES/DNA.dm | 28 ++++ code/_onclick/hud/screen_objects.dm | 2 +- .../diseases/advance/symptoms/deafness.dm | 2 +- .../diseases/advance/symptoms/vision.dm | 4 +- .../gamemodes/changeling/evolution_menu.dm | 2 +- .../changeling/powers/augmented_eyesight.dm | 6 +- .../gamemodes/changeling/powers/regenerate.dm | 2 +- code/game/machinery/cloning.dm | 2 +- code/game/objects/items.dm | 2 +- code/game/objects/items/airlock_painter.dm | 129 ++++++++++++++++++ code/game/objects/items/devices/flashlight.dm | 2 +- code/game/objects/items/devices/scanners.dm | 4 +- code/game/objects/items/tanks/tanks.dm | 2 +- code/modules/clothing/neck/neck.dm | 4 +- code/modules/mob/living/brain/brain_item.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 6 +- .../mob/living/carbon/carbon_defense.dm | 10 +- .../mob/living/carbon/carbon_movement.dm | 2 +- code/modules/mob/living/carbon/human/death.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 26 ++-- .../mob/living/carbon/human/human_defense.dm | 2 +- .../mob/living/carbon/human/inventory.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 6 +- code/modules/mob/living/carbon/human/say.dm | 2 +- .../mob/living/carbon/human/species.dm | 22 +-- .../carbon/human/species_types/zombies.dm | 2 +- code/modules/mob/living/carbon/life.dm | 14 +- .../mob/living/carbon/monkey/monkey.dm | 2 +- code/modules/mob/living/carbon/say.dm | 6 +- .../modules/mob/living/carbon/status_procs.dm | 6 +- code/modules/mob/living/say.dm | 2 +- code/modules/mob/living/taste.dm | 2 +- code/modules/projectiles/guns/ballistic.dm | 2 +- .../chemistry/reagents/alcohol_reagents.dm | 2 +- .../chemistry/reagents/food_reagents.dm | 2 +- .../chemistry/reagents/medicine_reagents.dm | 4 + .../chemistry/reagents/other_reagents.dm | 2 +- code/modules/station_goals/dna_vault.dm | 2 +- code/modules/surgery/eye_surgery.dm | 40 ++++++ code/modules/surgery/organs/appendix.dm | 2 +- code/modules/surgery/organs/augments_arms.dm | 14 +- code/modules/surgery/organs/augments_chest.dm | 6 +- code/modules/surgery/organs/augments_eyes.dm | 4 +- .../surgery/organs/augments_internal.dm | 6 +- code/modules/surgery/organs/ears.dm | 2 +- code/modules/surgery/organs/eyes.dm | 2 +- code/modules/surgery/organs/heart.dm | 2 +- code/modules/surgery/organs/liver.dm | 2 +- code/modules/surgery/organs/lungs.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 14 +- code/modules/surgery/organs/stomach.dm | 2 +- code/modules/surgery/organs/tails.dm | 2 +- code/modules/surgery/organs/tongue.dm | 4 +- code/modules/surgery/organs/vocal_cords.dm | 10 +- code/modules/zombie/items.dm | 2 +- code/modules/zombie/organs.dm | 2 +- 56 files changed, 323 insertions(+), 118 deletions(-) diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index dd5a25d8ff..8c1ce43717 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -127,6 +127,7 @@ #define TOXINLOVER 24 #define DIGITIGRADE 25 //Uses weird leg sprites. Optional for Lizards, required for ashwalkers. Don't give it to other races unless you make sprites for this (see human_parts_greyscale.dmi) #define NO_UNDERWEAR 26 +<<<<<<< HEAD #define MUTCOLORS2 27 #define MUTCOLORS3 28 #define NOLIVER 29 @@ -135,3 +136,30 @@ #define NOAROUSAL 29 //Stops all arousal effects #define NOGENITALS 30 //Cannot create, use, or otherwise have genitals #define NO_DNA_COPY 31 +======= +#define NOLIVER 27 +#define NOSTOMACH 28 +#define NO_DNA_COPY 29 + +#define ORGAN_SLOT_BRAIN "brain" +#define ORGAN_SLOT_APPENDIX "appendix" +#define ORGAN_SLOT_RIGHT_ARM_AUG "r_arm_device" +#define ORGAN_SLOT_LEFT_ARM_AUG "l_arm_device" +#define ORGAN_SLOT_STOMACH "stomach" +#define ORGAN_SLOT_BREATHING_TUBE "breathing_tube" +#define ORGAN_SLOT_EARS "ears" +#define ORGAN_SLOT_EYES "eye_sight" +#define ORGAN_SLOT_LUNGS "lungs" +#define ORGAN_SLOT_HEART "heart" +#define ORGAN_SLOT_ZOMBIE "zombie_infection" +#define ORGAN_SLOT_THRUSTERS "thrusters" +#define ORGAN_SLOT_HUD "eye_hud" +#define ORGAN_SLOT_LIVER "liver" +#define ORGAN_SLOT_TONGUE "tongue" +#define ORGAN_SLOT_VOICE "vocal_cords" +#define ORGAN_SLOT_ADAMANTINE_RESONATOR "adamantine_resonator" +#define ORGAN_SLOT_HEART_AID "heartdrive" +#define ORGAN_SLOT_BRAIN_ANTIDROP "brain_antidrop" +#define ORGAN_SLOT_BRAIN_ANTISTUN "brain_antistun" +#define ORGAN_SLOT_TAIL "tail" +>>>>>>> 04c05d8... Adds defines for organ slots (#31737) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 9730aaf552..6ca365d62e 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -251,7 +251,7 @@ to_chat(C, "You are no longer running on internals.") icon_state = "internal0" else - if(!C.getorganslot("breathing_tube")) + if(!C.getorganslot(ORGAN_SLOT_BREATHING_TUBE)) if(!istype(C.wear_mask, /obj/item/clothing/mask)) to_chat(C, "You are not wearing an internals mask!") return 1 diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm index c2afb34a9e..cc388f0b59 100644 --- a/code/datums/diseases/advance/symptoms/deafness.dm +++ b/code/datums/diseases/advance/symptoms/deafness.dm @@ -49,7 +49,7 @@ Bonus to_chat(M, "[pick("You hear a ringing in your ear.", "Your ears pop.")]") if(5) if(power > 2) - var/obj/item/organ/ears/ears = M.getorganslot("ears") + var/obj/item/organ/ears/ears = M.getorganslot(ORGAN_SLOT_EARS) if(istype(ears) && ears.ear_damage < UNHEALING_EAR_DAMAGE) to_chat(M, "Your ears pop painfully and start bleeding!") ears.ear_damage = max(ears.ear_damage, UNHEALING_EAR_DAMAGE) diff --git a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/advance/symptoms/vision.dm index 84f9ef49cc..728dfa01d0 100644 --- a/code/datums/diseases/advance/symptoms/vision.dm +++ b/code/datums/diseases/advance/symptoms/vision.dm @@ -44,7 +44,7 @@ Bonus if(!..()) return var/mob/living/carbon/M = A.affected_mob - var/obj/item/organ/eyes/eyes = M.getorganslot("eye_sight") + var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) if(istype(eyes)) switch(A.stage) if(1, 2) @@ -106,7 +106,7 @@ Bonus if(!..()) return var/mob/living/M = A.affected_mob - var/obj/item/organ/eyes/eyes = M.getorganslot("eye_sight") + var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) if (!eyes) return switch(A.stage) diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm index 59ed4ab2e8..76a37f9bb1 100644 --- a/code/game/gamemodes/changeling/evolution_menu.dm +++ b/code/game/gamemodes/changeling/evolution_menu.dm @@ -75,7 +75,7 @@ var/datum/changelingprofile/prof = mind.changeling.add_new_profile(C, src) mind.changeling.first_prof = prof - var/obj/item/organ/brain/B = C.getorganslot("brain") + var/obj/item/organ/brain/B = C.getorganslot(ORGAN_SLOT_BRAIN) if(B) B.vital = FALSE B.decoy_override = TRUE diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index b2ddd022a4..f48464700f 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -10,7 +10,7 @@ active = FALSE /obj/effect/proc_holder/changeling/augmented_eyesight/on_purchase(mob/user) //The ability starts inactive, so we should be protected from flashes. - var/obj/item/organ/eyes/E = user.getorganslot("eye_sight") + var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES) if (E) E.flash_protect = 2 //Adjust the user's eyes' flash protection to_chat(user, "We adjust our eyes to protect them from bright lights.") @@ -20,7 +20,7 @@ /obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user) if(!istype(user)) return - var/obj/item/organ/eyes/E = user.getorganslot("eye_sight") + var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES) if(E) if(!active) E.sight_flags |= SEE_MOBS | SEE_OBJS | SEE_TURFS //Add sight flags to the user's eyes @@ -42,7 +42,7 @@ /obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) //Get rid of x-ray vision and flash protection when the user refunds this ability - var/obj/item/organ/eyes/E = user.getorganslot("eye_sight") + var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES) if(E) if (active) E.sight_flags ^= SEE_MOBS | SEE_OBJS | SEE_TURFS diff --git a/code/game/gamemodes/changeling/powers/regenerate.dm b/code/game/gamemodes/changeling/powers/regenerate.dm index a74b966bd8..f2b13a5d09 100644 --- a/code/game/gamemodes/changeling/powers/regenerate.dm +++ b/code/game/gamemodes/changeling/powers/regenerate.dm @@ -27,7 +27,7 @@ C.emote("scream") C.regenerate_limbs(1) C.regenerate_organs() - if(!user.getorganslot("brain")) + if(!user.getorganslot(ORGAN_SLOT_BRAIN)) var/obj/item/organ/brain/changeling_brain/B = new() B.Insert(C) if(ishuman(user)) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 86e69b8973..cb5ea9df76 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -163,7 +163,7 @@ var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) if(clonemind.changeling) - var/obj/item/organ/brain/B = H.getorganslot("brain") + var/obj/item/organ/brain/B = H.getorganslot(ORGAN_SLOT_BRAIN) B.vital = FALSE B.decoy_override = TRUE diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index e158c1f90a..cbd183aca0 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -519,7 +519,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) M.adjust_blurriness(3) M.adjust_eye_damage(rand(2,4)) - var/obj/item/organ/eyes/eyes = M.getorganslot("eye_sight") + var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) if (!eyes) return if(eyes.eye_damage >= 10) diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index 378d6ebabd..2cb611e9b6 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/item/airlock_painter name = "airlock painter" desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob." @@ -124,3 +125,131 @@ user.put_in_hands(ink) to_chat(user, "You remove [ink] from [src].") ink = null +======= +/obj/item/airlock_painter + name = "airlock painter" + desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob." + icon = 'icons/obj/objects.dmi' + icon_state = "paint sprayer" + item_state = "paint sprayer" + + w_class = WEIGHT_CLASS_SMALL + + materials = list(MAT_METAL=50, MAT_GLASS=50) + origin_tech = "engineering=2" + + flags_1 = CONDUCT_1 | NOBLUDGEON_1 + slot_flags = SLOT_BELT + + var/obj/item/device/toner/ink = null + +/obj/item/airlock_painter/New() + ..() + ink = new /obj/item/device/toner(src) + +//This proc doesn't just check if the painter can be used, but also uses it. +//Only call this if you are certain that the painter will be used right after this check! +/obj/item/airlock_painter/proc/use(mob/user) + if(can_use(user)) + ink.charges-- + playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1) + return 1 + else + return 0 + +//This proc only checks if the painter can be used. +//Call this if you don't want the painter to be used right after this check, for example +//because you're expecting user input. +/obj/item/airlock_painter/proc/can_use(mob/user) + if(!ink) + to_chat(user, "There is no toner cartridge installed in [src]!") + return 0 + else if(ink.charges < 1) + to_chat(user, "[src] is out of ink!") + return 0 + else + return 1 + +/obj/item/airlock_painter/suicide_act(mob/user) + var/obj/item/organ/lungs/L = user.getorganslot(ORGAN_SLOT_LUNGS) + + if(can_use(user) && L) + user.visible_message("[user] is inhaling toner from [src]! It looks like [user.p_theyre()] trying to commit suicide!") + use(user) + + // Once you've inhaled the toner, you throw up your lungs + // and then die. + + // Find out if there is an open turf in front of us, + // and if not, pick the turf we are standing on. + var/turf/T = get_step(get_turf(src), user.dir) + if(!isopenturf(T)) + T = get_turf(src) + + // they managed to lose their lungs between then and + // now. Good job. + if(!L) + return OXYLOSS + + L.Remove(user) + + // make some colorful reagent, and apply it to the lungs + L.create_reagents(10) + L.reagents.add_reagent("colorful_reagent", 10) + L.reagents.reaction(L, TOUCH, 1) + + // TODO maybe add some colorful vomit? + + user.visible_message("[user] vomits out their [L]!") + playsound(user.loc, 'sound/effects/splat.ogg', 50, 1) + + L.forceMove(T) + + return (TOXLOSS|OXYLOSS) + else if(can_use(user) && !L) + user.visible_message("[user] is spraying toner on [user.p_them()]self from [src]! It looks like [user.p_theyre()] trying to commit suicide.") + user.reagents.add_reagent("colorful_reagent", 1) + user.reagents.reaction(user, TOUCH, 1) + return TOXLOSS + + else + user.visible_message("[user] is trying to inhale toner from [src]! It might be a suicide attempt if [src] had any toner.") + return SHAME + + +/obj/item/airlock_painter/examine(mob/user) + ..() + if(!ink) + to_chat(user, "It doesn't have a toner cartridge installed.") + return + var/ink_level = "high" + if(ink.charges < 1) + ink_level = "empty" + else if((ink.charges/ink.max_charges) <= 0.25) //25% + ink_level = "low" + else if((ink.charges/ink.max_charges) > 1) //Over 100% (admin var edit) + ink_level = "dangerously high" + to_chat(user, "Its ink levels look [ink_level].") + + +/obj/item/airlock_painter/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/device/toner)) + if(ink) + to_chat(user, "[src] already contains \a [ink].") + return + if(!user.transferItemToLoc(W, src)) + return + to_chat(user, "You install [W] into [src].") + ink = W + playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + else + return ..() + +/obj/item/airlock_painter/attack_self(mob/user) + if(ink) + playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + ink.loc = user.loc + user.put_in_hands(ink) + to_chat(user, "You remove [ink] from [src].") + ink = null +>>>>>>> 04c05d8... Adds defines for organ slots (#31737) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index eab0f030cc..5f4d02fd8e 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -69,7 +69,7 @@ to_chat(user, "You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSEYES) ? "helmet" : (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) ? "mask": "glasses"] first.") return - var/obj/item/organ/eyes/E = M.getorganslot("eye_sight") + var/obj/item/organ/eyes/E = M.getorganslot(ORGAN_SLOT_EYES) if(!E) to_chat(user, "[M] doesn't have any eyes!") return diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index bb2adda377..caf42fc68b 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -171,7 +171,7 @@ MASS SPECTROMETER if(advanced) if(iscarbon(M)) var/mob/living/carbon/C = M - var/obj/item/organ/ears/ears = C.getorganslot("ears") + var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) to_chat(user, "\t==EAR STATUS==") if(istype(ears)) var/healthy = TRUE @@ -189,7 +189,7 @@ MASS SPECTROMETER to_chat(user, "\tHealthy.") else to_chat(user, "\tSubject does not have ears.") - var/obj/item/organ/eyes/eyes = C.getorganslot("eye_sight") + var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES) to_chat(user, "\t==EYE STATUS==") if(istype(eyes)) var/healthy = TRUE diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 7628617923..f633781647 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -31,7 +31,7 @@ H.internal = null H.update_internals_hud_icon(0) else - if(!H.getorganslot("breathing_tube")) + if(!H.getorganslot(ORGAN_SLOT_BREATHING_TUBE)) if(!H.wear_mask) to_chat(H, "You need a mask!") return diff --git a/code/modules/clothing/neck/neck.dm b/code/modules/clothing/neck/neck.dm index af3049aefd..2867aa405e 100644 --- a/code/modules/clothing/neck/neck.dm +++ b/code/modules/clothing/neck/neck.dm @@ -42,8 +42,8 @@ var/heart_strength = "no" var/lung_strength = "no" - var/obj/item/organ/heart/heart = M.getorganslot("heart") - var/obj/item/organ/lungs/lungs = M.getorganslot("lungs") + var/obj/item/organ/heart/heart = M.getorganslot(ORGAN_SLOT_HEART) + var/obj/item/organ/lungs/lungs = M.getorganslot(ORGAN_SLOT_LUNGS) if(!(M.stat == DEAD || (M.status_flags&FAKEDEATH))) if(heart && istype(heart)) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 6ac5ab1bad..a3642684db 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -6,7 +6,7 @@ throw_range = 5 layer = ABOVE_MOB_LAYER zone = "head" - slot = "brain" + slot = ORGAN_SLOT_BRAIN vital = TRUE origin_tech = "biotech=5" attack_verb = list("attacked", "slapped", "whacked") @@ -70,7 +70,7 @@ C.dna.copy_dna(brainmob.stored_dna) if(L.disabilities & NOCLONE) brainmob.disabilities |= NOCLONE //This is so you can't just decapitate a husked guy and clone them without needing to get a new body - var/obj/item/organ/zombie_infection/ZI = L.getorganslot("zombie_infection") + var/obj/item/organ/zombie_infection/ZI = L.getorganslot(ORGAN_SLOT_ZOMBIE) if(ZI) brainmob.set_species(ZI.old_species) //For if the brain is cloned if(L.mind && L.mind.current) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 75b53d11cb..ec79da543a 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -228,7 +228,7 @@ internal = null update_internals_hud_icon(0) else if(ITEM && istype(ITEM, /obj/item/tank)) - if((wear_mask && (wear_mask.flags_1 & MASKINTERNALS_1)) || getorganslot("breathing_tube")) + if((wear_mask && (wear_mask.flags_1 & MASKINTERNALS_1)) || getorganslot(ORGAN_SLOT_BREATHING_TUBE)) internal = ITEM update_internals_hud_icon(1) @@ -527,7 +527,7 @@ sight = initial(sight) lighting_alpha = initial(lighting_alpha) - var/obj/item/organ/eyes/E = getorganslot("eye_sight") + var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES) if(!E) update_tint() else @@ -584,7 +584,7 @@ if(wear_mask) . += wear_mask.tint - var/obj/item/organ/eyes/E = getorganslot("eye_sight") + var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES) if(E) . += E.tint diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 66f4fc8fb2..1d6f7f6484 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -14,7 +14,7 @@ var/obj/item/clothing/mask/MFP = src.wear_mask number += MFP.flash_protect - var/obj/item/organ/eyes/E = getorganslot("eye_sight") + var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES) if(!E) number = INFINITY //Can't get flashed without eyes else @@ -28,7 +28,7 @@ number += 1 if(head && (head.flags_2 & BANG_PROTECT_2)) number += 1 - var/obj/item/organ/ears/E = getorganslot("ears") + var/obj/item/organ/ears/E = getorganslot(ORGAN_SLOT_EARS) if(!E) number = INFINITY else @@ -279,7 +279,7 @@ var/damage = intensity - get_eye_protection() if(.) // we've been flashed - var/obj/item/organ/eyes/eyes = getorganslot("eye_sight") + var/obj/item/organ/eyes/eyes = getorganslot(ORGAN_SLOT_EYES) if (!eyes) return if(visual) @@ -323,7 +323,7 @@ /mob/living/carbon/soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 5, deafen_pwr = 15) var/ear_safety = get_ear_protection() - var/obj/item/organ/ears/ears = getorganslot("ears") + var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS) var/effect_amount = intensity - ear_safety if(effect_amount > 0) if(stun_pwr) @@ -363,6 +363,6 @@ /mob/living/carbon/can_hear() . = FALSE - var/obj/item/organ/ears/ears = getorganslot("ears") + var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS) if(istype(ears) && !ears.deaf) . = TRUE diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm index aa37315b13..ed731408d8 100644 --- a/code/modules/mob/living/carbon/carbon_movement.dm +++ b/code/modules/mob/living/carbon/carbon_movement.dm @@ -39,7 +39,7 @@ return 1 // Do we have a jetpack implant (and is it on)? - var/obj/item/organ/cyberimp/chest/thrusters/T = getorganslot("thrusters") + var/obj/item/organ/cyberimp/chest/thrusters/T = getorganslot(ORGAN_SLOT_THRUSTERS) if(istype(T) && movement_dir && T.allow_thrust(0.01)) return 1 diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index c3ae5c39c3..4b1afe0780 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -20,7 +20,7 @@ if(stat == DEAD) return stop_sound_channel(CHANNEL_HEARTBEAT) - var/obj/item/organ/heart/H = getorganslot("heart") + var/obj/item/organ/heart/H = getorganslot(ORGAN_SLOT_HEART) if(H) H.beat = BEAT_NONE diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d1e363bb90..8f4eac4703 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -270,13 +270,13 @@ if(ishuman(usr)) var/mob/living/carbon/human/H = usr var/perpname = get_face_name(get_id_name("")) - if(istype(H.glasses, /obj/item/clothing/glasses/hud) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud)) + if(istype(H.glasses, /obj/item/clothing/glasses/hud) || istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud)) var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.general) if(href_list["photo_front"] || href_list["photo_side"]) if(R) if(!H.canUseHUD()) return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud) && !istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/medical)) return var/obj/item/photo/P = null if(href_list["photo_front"]) @@ -287,13 +287,13 @@ P.show(H) if(href_list["hud"] == "m") - if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) + if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/medical)) if(href_list["p_stat"]) var/health_status = input(usr, "Specify a new physical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("Active", "Physically Unfit", "*Unconscious*", "*Deceased*", "Cancel") if(R) if(!H.canUseHUD()) return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health) && !istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/medical)) return if(health_status && health_status != "Cancel") R.fields["p_stat"] = health_status @@ -303,7 +303,7 @@ if(R) if(!H.canUseHUD()) return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health) && !istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/medical)) return if(health_status && health_status != "Cancel") R.fields["m_stat"] = health_status @@ -352,7 +352,7 @@ to_chat(usr, "Gathered data is inconsistent with the analysis, possible cause: poisoning.") if(href_list["hud"] == "s") - if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/security)) if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at. return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access @@ -379,7 +379,7 @@ if(setcriminal != "Cancel") if(R) if(H.canUseHUD()) - if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/security)) investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", INVESTIGATE_RECORDS) R.fields["criminal"] = setcriminal sec_hud_set_security_status() @@ -389,7 +389,7 @@ if(R) if(!H.canUseHUD()) return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/security)) return to_chat(usr, "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]") to_chat(usr, "Minor Crimes:") @@ -418,7 +418,7 @@ return else if(!H.canUseHUD()) return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/security)) return var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) GLOB.data_core.addMinorCrime(R.fields["id"], crime) @@ -433,7 +433,7 @@ return else if (!H.canUseHUD()) return - else if (!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + else if (!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/security)) return var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) GLOB.data_core.addMajorCrime(R.fields["id"], crime) @@ -444,7 +444,7 @@ if(R) if(!H.canUseHUD()) return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/security)) return to_chat(usr, "Comments/Log:") var/counter = 1 @@ -462,7 +462,7 @@ return else if(!H.canUseHUD()) return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot(ORGAN_SLOT_HUD), /obj/item/organ/cyberimp/eyes/hud/security)) return var/counter = 1 while(R.fields[text("com_[]", counter)]) @@ -637,7 +637,7 @@ return 0 var/they_breathe = (!(NOBREATH in C.dna.species.species_traits)) - var/they_lung = C.getorganslot("lungs") + var/they_lung = C.getorganslot(ORGAN_SLOT_LUNGS) if(C.health > HEALTH_THRESHOLD_CRIT) return diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7be010b3ba..2018b01c70 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -452,7 +452,7 @@ siemens_coeff = gloves_siemens_coeff if(undergoing_cardiac_arrest() && !illusion) if(shock_damage * siemens_coeff >= 1 && prob(25)) - var/obj/item/organ/heart/heart = getorganslot("heart") + var/obj/item/organ/heart/heart = getorganslot(ORGAN_SLOT_HEART) heart.beating = TRUE if(stat == CONSCIOUS) to_chat(src, "You feel your heart beating again!") diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 1679ff5d42..71c5dedc26 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -225,7 +225,7 @@ /mob/living/carbon/human/wear_mask_update(obj/item/clothing/C, toggle_off = 1) if((C.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(C.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR))) update_hair() - if(toggle_off && internal && !getorganslot("breathing_tube")) + if(toggle_off && internal && !getorganslot(ORGAN_SLOT_BREATHING_TUBE)) update_internals_hud_icon(0) internal = null if(C.flags_inv & HIDEEYES) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index e2a257e0ce..0afe5ae0d0 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -91,7 +91,7 @@ #define HUMAN_CRIT_MAX_OXYLOSS (SSmobs.wait/30) /mob/living/carbon/human/check_breath(datum/gas_mixture/breath) - var/L = getorganslot("lungs") + var/L = getorganslot(ORGAN_SLOT_LUNGS) if(!L) if(health >= HEALTH_THRESHOLD_CRIT) @@ -328,7 +328,7 @@ /mob/living/carbon/human/proc/undergoing_cardiac_arrest() if(!can_heartattack()) return FALSE - var/obj/item/organ/heart/heart = getorganslot("heart") + var/obj/item/organ/heart/heart = getorganslot(ORGAN_SLOT_HEART) if(istype(heart) && heart.beating) return FALSE return TRUE @@ -337,7 +337,7 @@ if(!can_heartattack()) return FALSE - var/obj/item/organ/heart/heart = getorganslot("heart") + var/obj/item/organ/heart/heart = getorganslot(ORGAN_SLOT_HEART) if(!istype(heart)) return diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index b02ef243c8..4332f02b6a 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -48,7 +48,7 @@ CHECK_DNA_AND_SPECIES(src) // how do species that don't breathe talk? magic, that's what. - if(!(NOBREATH in dna.species.species_traits) && !getorganslot("lungs")) + if(!(NOBREATH in dna.species.species_traits) && !getorganslot(ORGAN_SLOT_LUNGS)) return 0 if(mind) return !mind.miming diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index dce7c62879..d30e51ada9 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -124,15 +124,15 @@ //Will regenerate missing organs /datum/species/proc/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE) - var/obj/item/organ/brain/brain = C.getorganslot("brain") - var/obj/item/organ/heart/heart = C.getorganslot("heart") - var/obj/item/organ/lungs/lungs = C.getorganslot("lungs") - var/obj/item/organ/appendix/appendix = C.getorganslot("appendix") - var/obj/item/organ/eyes/eyes = C.getorganslot("eye_sight") - var/obj/item/organ/ears/ears = C.getorganslot("ears") - var/obj/item/organ/tongue/tongue = C.getorganslot("tongue") - var/obj/item/organ/liver/liver = C.getorganslot("liver") - var/obj/item/organ/stomach/stomach = C.getorganslot("stomach") + var/obj/item/organ/brain/brain = C.getorganslot(ORGAN_SLOT_BRAIN) + var/obj/item/organ/heart/heart = C.getorganslot(ORGAN_SLOT_HEART) + var/obj/item/organ/lungs/lungs = C.getorganslot(ORGAN_SLOT_LUNGS) + var/obj/item/organ/appendix/appendix = C.getorganslot(ORGAN_SLOT_APPENDIX) + var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES) + var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) + var/obj/item/organ/tongue/tongue = C.getorganslot(ORGAN_SLOT_TONGUE) + var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER) + var/obj/item/organ/stomach/stomach = C.getorganslot(ORGAN_SLOT_STOMACH) var/should_have_brain = TRUE var/should_have_heart = !(NOBLOOD in species_traits) @@ -1198,7 +1198,7 @@ if(!gravity) var/obj/item/tank/jetpack/J = H.back var/obj/item/clothing/suit/space/hardsuit/C = H.wear_suit - var/obj/item/organ/cyberimp/chest/thrusters/T = H.getorganslot("thrusters") + var/obj/item/organ/cyberimp/chest/thrusters/T = H.getorganslot(ORGAN_SLOT_THRUSTERS) if(!istype(J) && istype(C)) J = C.jetpack if(istype(J) && J.full_speed && J.allow_thrust(0.01, H)) //Prevents stacking @@ -1254,7 +1254,7 @@ return 1 else var/we_breathe = (!(NOBREATH in user.dna.species.species_traits)) - var/we_lung = user.getorganslot("lungs") + var/we_lung = user.getorganslot(ORGAN_SLOT_LUNGS) if(we_breathe && we_lung) user.do_cpr(target) diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 016a3635ef..53a8a5b8bb 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -52,7 +52,7 @@ // Infection organ needs to be handled separately from mutant_organs // because it persists through species transitions var/obj/item/organ/zombie_infection/infection - infection = C.getorganslot("zombie_infection") + infection = C.getorganslot(ORGAN_SLOT_ZOMBIE) if(!infection) infection = new() infection.Insert(C) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 31f8eb3f73..475b69e8e3 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -58,7 +58,7 @@ var/datum/gas_mixture/breath - if(!getorganslot("breathing_tube")) + if(!getorganslot(ORGAN_SLOT_BREATHING_TUBE)) if(health <= HEALTH_THRESHOLD_FULLCRIT || (pulledby && pulledby.grab_state >= GRAB_KILL)) losebreath++ //You can't breath at all when in critical or when being choked, so you're going to miss a breath @@ -110,7 +110,7 @@ if((status_flags & GODMODE)) return - var/lungs = getorganslot("lungs") + var/lungs = getorganslot(ORGAN_SLOT_LUNGS) if(!lungs) adjustOxyLoss(2) @@ -220,7 +220,7 @@ if(internal.loc != src) internal = null update_internals_hud_icon(0) - else if ((!wear_mask || !(wear_mask.flags_1 & MASKINTERNALS_1)) && !getorganslot("breathing_tube")) + else if ((!wear_mask || !(wear_mask.flags_1 & MASKINTERNALS_1)) && !getorganslot(ORGAN_SLOT_BREATHING_TUBE)) internal = null update_internals_hud_icon(0) else @@ -391,7 +391,7 @@ ///////// /mob/living/carbon/proc/handle_liver() - var/obj/item/organ/liver/liver = getorganslot("liver") + var/obj/item/organ/liver/liver = getorganslot(ORGAN_SLOT_LIVER) if((!dna && !liver) || (NOLIVER in dna.species.species_traits)) return if(liver) @@ -404,17 +404,17 @@ liver_failure() /mob/living/carbon/proc/undergoing_liver_failure() - var/obj/item/organ/liver/liver = getorganslot("liver") + var/obj/item/organ/liver/liver = getorganslot(ORGAN_SLOT_LIVER) if(liver && liver.failing) return TRUE /mob/living/carbon/proc/return_liver_damage() - var/obj/item/organ/liver/liver = getorganslot("liver") + var/obj/item/organ/liver/liver = getorganslot(ORGAN_SLOT_LIVER) if(liver) return liver.damage /mob/living/carbon/proc/applyLiverDamage(var/d) - var/obj/item/organ/liver/L = getorganslot("liver") + var/obj/item/organ/liver/L = getorganslot(ORGAN_SLOT_LIVER) if(L) L.damage += d diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 2fcfe97d65..779e7f2f90 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -140,7 +140,7 @@ return protection /mob/living/carbon/monkey/IsVocal() - if(!getorganslot("lungs")) + if(!getorganslot(ORGAN_SLOT_LUNGS)) return 0 return 1 diff --git a/code/modules/mob/living/carbon/say.dm b/code/modules/mob/living/carbon/say.dm index d6ee2ebbfc..526a2ea09b 100644 --- a/code/modules/mob/living/carbon/say.dm +++ b/code/modules/mob/living/carbon/say.dm @@ -1,6 +1,6 @@ /mob/living/carbon/treat_message(message) message = ..(message) - var/obj/item/organ/tongue/T = getorganslot("tongue") + var/obj/item/organ/tongue/T = getorganslot(ORGAN_SLOT_TONGUE) if(!T) //hoooooouaah! var/regex/tongueless_lower = new("\[gdntke]+", "g") var/regex/tongueless_upper = new("\[GDNTKE]+", "g") @@ -21,7 +21,7 @@ /mob/living/carbon/get_spans() . = ..() - var/obj/item/organ/tongue/T = getorganslot("tongue") + var/obj/item/organ/tongue/T = getorganslot(ORGAN_SLOT_TONGUE) if(T) . |= T.get_spans() @@ -30,7 +30,7 @@ . |= I.get_held_item_speechspans(src) /mob/living/carbon/could_speak_in_language(datum/language/dt) - var/obj/item/organ/tongue/T = getorganslot("tongue") + var/obj/item/organ/tongue/T = getorganslot(ORGAN_SLOT_TONGUE) if(T) . = T.could_speak_in_language(dt) else diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index ce14664a0e..7b0329d84a 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -3,7 +3,7 @@ // eye damage, eye_blind, eye_blurry, druggy, BLIND disability, NEARSIGHT disability, and HUSK disability. /mob/living/carbon/damage_eyes(amount) - var/obj/item/organ/eyes/eyes = getorganslot("eye_sight") + var/obj/item/organ/eyes/eyes = getorganslot(ORGAN_SLOT_EYES) if (!eyes) return if(amount>0) @@ -15,7 +15,7 @@ overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1) /mob/living/carbon/set_eye_damage(amount) - var/obj/item/organ/eyes/eyes = getorganslot("eye_sight") + var/obj/item/organ/eyes/eyes = getorganslot(ORGAN_SLOT_EYES) if (!eyes) return eyes.eye_damage = max(amount,0) @@ -28,7 +28,7 @@ clear_fullscreen("eye_damage") /mob/living/carbon/adjust_eye_damage(amount) - var/obj/item/organ/eyes/eyes = getorganslot("eye_sight") + var/obj/item/organ/eyes/eyes = getorganslot(ORGAN_SLOT_EYES) if (!eyes) return eyes.eye_damage = max(eyes.eye_damage+amount, 0) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 9c34ca4dbd..7e3d1cd320 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -362,7 +362,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(message_mode == MODE_VOCALCORDS) if(iscarbon(src)) var/mob/living/carbon/C = src - var/obj/item/organ/vocal_cords/V = C.getorganslot("vocal_cords") + var/obj/item/organ/vocal_cords/V = C.getorganslot(ORGAN_SLOT_VOICE) if(V && V.can_speak_with()) V.handle_speech(message) //message V.speak_with(message) //action diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm index 45fdf55fb4..c66168cee4 100644 --- a/code/modules/mob/living/taste.dm +++ b/code/modules/mob/living/taste.dm @@ -8,7 +8,7 @@ return DEFAULT_TASTE_SENSITIVITY /mob/living/carbon/get_taste_sensitivity() - var/obj/item/organ/tongue/tongue = getorganslot("tongue") + var/obj/item/organ/tongue/tongue = getorganslot(ORGAN_SLOT_TONGUE) if(istype(tongue)) . = tongue.taste_sensitivity else diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 0b6a9f1de7..307e8b83e7 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -139,7 +139,7 @@ #define BRAINS_BLOWN_THROW_RANGE 3 #define BRAINS_BLOWN_THROW_SPEED 1 /obj/item/gun/ballistic/suicide_act(mob/user) - var/obj/item/organ/brain/B = user.getorganslot("brain") + var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN) if (B && chambered && chambered.BB && can_trigger_gun(user) && !chambered.BB.nodamage) user.visible_message("[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!") sleep(25) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index c114f7017b..cc91819611 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -38,7 +38,7 @@ All effects don't start immediately, but rather get worse over time; the rate is var/mob/living/carbon/human/H = M if(H.drunkenness < volume * boozepwr * ALCOHOL_THRESHOLD_MODIFIER) H.drunkenness = max((H.drunkenness + (sqrt(volume) * boozepwr * ALCOHOL_RATE)), 0) //Volume, power, and server alcohol rate effect how quickly one gets drunk - var/obj/item/organ/liver/L = H.getorganslot("liver") + var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER) H.applyLiverDamage((max(sqrt(volume) * boozepwr * L.alcohol_tolerance, 0))/10) return ..() || . diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index f1b076ca68..d25df998e3 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -550,7 +550,7 @@ if(!M.is_mouth_covered() && !M.is_eyes_covered()) unprotected = TRUE if(unprotected) - if(!M.getorganslot("eye_sight")) //can't blind somebody with no eyes + if(!M.getorganslot(ORGAN_SLOT_EYES)) //can't blind somebody with no eyes to_chat(M, "Your eye sockets feel wet.") else if(!M.eye_blurry) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index dcf725819d..c5a23e5a23 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -671,7 +671,11 @@ taste_description = "dull toxin" /datum/reagent/medicine/oculine/on_mob_life(mob/living/M) +<<<<<<< HEAD var/obj/item/organ/eyes/eyes = M.getorganslot("eyes_sight") +======= + var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) +>>>>>>> 04c05d8... Adds defines for organ slots (#31737) if (!eyes) return if(M.disabilities & BLIND) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index b4ff0e870b..cbf7c5fcf5 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1568,7 +1568,7 @@ /datum/reagent/romerol/on_mob_life(mob/living/carbon/human/H) // Silently add the zombie infection organ to be activated upon death - if(!H.getorganslot("zombie_infection")) + if(!H.getorganslot(ORGAN_SLOT_ZOMBIE)) var/obj/item/organ/zombie_infection/ZI = new() ZI.Insert(H) ..() diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index cfa95f2d1a..a90b3598ce 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -253,7 +253,7 @@ if(VAULT_TOXIN) to_chat(H, "You feel resistant to airborne toxins.") if(locate(/obj/item/organ/lungs) in H.internal_organs) - var/obj/item/organ/lungs/L = H.internal_organs_slot["lungs"] + var/obj/item/organ/lungs/L = H.internal_organs_slot[ORGAN_SLOT_LUNGS] L.tox_breath_dam_min = 0 L.tox_breath_dam_max = 0 S.species_traits |= VIRUSIMMUNE diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index 2aeadffc65..978a17a2f3 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /datum/surgery/eye_surgery name = "eye surgery" steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/fix_eyes, /datum/surgery_step/close) @@ -35,4 +36,43 @@ target.adjustBrainLoss(100) else user.visible_message("[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain.", "You accidentally stab [target] right in the brain! Or would have, if [target] had a brain.") +======= +/datum/surgery/eye_surgery + name = "eye surgery" + steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/fix_eyes, /datum/surgery_step/close) + species = list(/mob/living/carbon/human, /mob/living/carbon/monkey) + possible_locs = list("eyes") + requires_bodypart_type = 0 + +//fix eyes +/datum/surgery_step/fix_eyes + name = "fix eyes" + implements = list(/obj/item/hemostat = 100, /obj/item/screwdriver = 45, /obj/item/pen = 25) + time = 64 + +/datum/surgery/eye_surgery/can_start(mob/user, mob/living/carbon/target) + var/obj/item/organ/eyes/E = target.getorganslot(ORGAN_SLOT_EYES) + if(!E) + to_chat(user, "It's hard to do surgery on someones eyes when they don't have any.") + return FALSE + +/datum/surgery_step/fix_eyes/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + user.visible_message("[user] begins to fix [target]'s eyes.", "You begin to fix [target]'s eyes...") + +/datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + user.visible_message("[user] successfully fixes [target]'s eyes!", "You succeed in fixing [target]'s eyes.") + target.cure_blind() + target.set_blindness(0) + target.cure_nearsighted() + target.blur_eyes(35) //this will fix itself slowly. + target.set_eye_damage(0) + return TRUE + +/datum/surgery_step/fix_eyes/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(target.getorgan(/obj/item/organ/brain)) + user.visible_message("[user] accidentally stabs [target] right in the brain!", "You accidentally stab [target] right in the brain!") + target.adjustBrainLoss(100) + else + user.visible_message("[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain.", "You accidentally stab [target] right in the brain! Or would have, if [target] had a brain.") +>>>>>>> 04c05d8... Adds defines for organ slots (#31737) return FALSE \ No newline at end of file diff --git a/code/modules/surgery/organs/appendix.dm b/code/modules/surgery/organs/appendix.dm index ad51c48d85..35a2d851e3 100644 --- a/code/modules/surgery/organs/appendix.dm +++ b/code/modules/surgery/organs/appendix.dm @@ -2,7 +2,7 @@ name = "appendix" icon_state = "appendix" zone = "groin" - slot = "appendix" + slot = ORGAN_SLOT_APPENDIX var/inflamed = 0 /obj/item/organ/appendix/update_icon() diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 3ebe5dd061..21666253f5 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -2,7 +2,6 @@ name = "arm-mounted implant" desc = "You shouldn't see this! Adminhelp and report this as an issue on github!" zone = "r_arm" - slot = "r_arm_device" icon_state = "implant-toolkit" w_class = WEIGHT_CLASS_NORMAL actions_types = list(/datum/action/item_action/organ_action/toggle) @@ -20,9 +19,18 @@ holder = new holder(src) update_icon() - slot = zone + "_device" + SetSlotFromZone() items_list = contents.Copy() +/obj/item/organ/cyberimp/arm/proc/SetSlotFromZone() + switch(zone) + if("l_arm") + slot = ORGAN_SLOT_LEFT_ARM_AUG + if("r_arm") + slot = ORGAN_SLOT_RIGHT_ARM_AUG + else + CRASH("Invalid zone for [type]") + /obj/item/organ/cyberimp/arm/update_icon() if(zone == "r_arm") transform = null @@ -40,7 +48,7 @@ zone = "l_arm" else zone = "r_arm" - slot = zone + "_device" + SetSlotFromZone() to_chat(user, "You modify [src] to be installed on the [zone == "r_arm" ? "right" : "left"] arm.") update_icon() else if(istype(W, /obj/item/card/emag)) diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 6ebc278e53..5843863c02 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -13,7 +13,7 @@ var/hunger_threshold = NUTRITION_LEVEL_STARVING var/synthesizing = 0 var/poison_amount = 5 - slot = "stomach" + slot = ORGAN_SLOT_STOMACH origin_tech = "materials=2;powerstorage=2;biotech=2" /obj/item/organ/cyberimp/chest/nutriment/on_life() @@ -51,7 +51,7 @@ icon_state = "chest_implant" implant_color = "#AD0000" origin_tech = "materials=5;programming=4;biotech=4" - slot = "heartdrive" + slot = ORGAN_SLOT_HEART_AID var/revive_cost = 0 var/reviving = 0 var/cooldown = 0 @@ -120,7 +120,7 @@ name = "implantable thrusters set" desc = "An implantable set of thruster ports. They use the gas from environment or subject's internals for propulsion in zero-gravity areas. \ Unlike regular jetpack, this device has no stabilization system." - slot = "thrusters" + slot = ORGAN_SLOT_THRUSTERS icon_state = "imp_jetpack" origin_tech = "materials=4;magnets=4;biotech=4;engineering=5" implant_overlay = null diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 62b427f883..f928db5dd6 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -3,7 +3,7 @@ desc = "artificial photoreceptors with specialized functionality" icon_state = "eye_implant" implant_overlay = "eye_implant_overlay" - slot = "eye_sight" + slot = ORGAN_SLOT_EYES zone = "eyes" w_class = WEIGHT_CLASS_TINY @@ -11,7 +11,7 @@ /obj/item/organ/cyberimp/eyes/hud name = "HUD implant" desc = "These cybernetic eyes will display a HUD over everything you see. Maybe." - slot = "eye_hud" + slot = ORGAN_SLOT_HUD var/HUD_type = 0 /obj/item/organ/cyberimp/eyes/hud/Insert(var/mob/living/carbon/M, var/special = 0, drop_if_replaced = FALSE) diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 1eec609fc0..4232a37f78 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -44,7 +44,7 @@ var/active = 0 var/list/stored_items = list() implant_color = "#DE7E00" - slot = "brain_antidrop" + slot = ORGAN_SLOT_BRAIN_ANTIDROP origin_tech = "materials=4;programming=5;biotech=4" actions_types = list(/datum/action/item_action/organ_action/toggle) @@ -101,7 +101,7 @@ 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" + slot = ORGAN_SLOT_BRAIN_ANTISTUN origin_tech = "materials=5;programming=4;biotech=5" /obj/item/organ/cyberimp/brain/anti_stun/on_life() @@ -133,7 +133,7 @@ name = "breathing tube implant" desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked." icon_state = "implant_mask" - slot = "breathing_tube" + slot = ORGAN_SLOT_BREATHING_TUBE w_class = WEIGHT_CLASS_TINY origin_tech = "materials=2;biotech=3" diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index f8a310c8f7..e3aaec0266 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -3,7 +3,7 @@ icon_state = "ears" desc = "There are three parts to the ear. Inner, middle and outer. Only one of these parts should be normally visible." zone = "head" - slot = "ears" + slot = ORGAN_SLOT_EARS gender = PLURAL // `deaf` measures "ticks" of deafness. While > 0, the person is unable diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 8a3b3a92ab..1b7037486a 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -3,7 +3,7 @@ icon_state = "eyeballs" desc = "I see you!" zone = "eyes" - slot = "eye_sight" + slot = ORGAN_SLOT_EYES gender = PLURAL var/sight_flags = 0 diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 9308154c48..9ff8b1b48b 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -3,7 +3,7 @@ desc = "I feel bad for the heartless bastard who lost this." icon_state = "heart-on" zone = "chest" - slot = "heart" + slot = ORGAN_SLOT_HEART origin_tech = "biotech=5" // Heart attack code is in code/modules/mob/living/carbon/human/life.dm var/beating = 1 diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm index eae5e8aee8..352958d9b8 100755 --- a/code/modules/surgery/organs/liver.dm +++ b/code/modules/surgery/organs/liver.dm @@ -8,7 +8,7 @@ origin_tech = "biotech=3" w_class = WEIGHT_CLASS_NORMAL zone = "chest" - slot = "liver" + slot = ORGAN_SLOT_LIVER desc = "Pairing suggestion: chianti and fava beans." var/damage = 0 //liver damage, 0 is no damage, damage=maxHealth causes liver failure var/alcohol_tolerance = ALCOHOL_RATE//affects how much damage the liver takes from alcohol diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 12ab61aaec..9f6f340a2b 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -12,7 +12,7 @@ name = "lungs" icon_state = "lungs" zone = "chest" - slot = "lungs" + slot = ORGAN_SLOT_LUNGS gender = PLURAL w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 681dcb21cf..1780e65087 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -118,7 +118,7 @@ var/has_liver = (!(NOLIVER in dna.species.species_traits)) var/has_stomach = (!(NOSTOMACH in dna.species.species_traits)) - if(has_liver && !getorganslot("liver")) + if(has_liver && !getorganslot(ORGAN_SLOT_LIVER)) var/obj/item/organ/liver/LI if(dna.species.mutantliver) @@ -127,7 +127,7 @@ LI = new() LI.Insert(src) - if(has_stomach && !getorganslot("stomach")) + if(has_stomach && !getorganslot(ORGAN_SLOT_STOMACH)) var/obj/item/organ/stomach/S if(dna.species.mutantstomach) @@ -136,15 +136,15 @@ S = new() S.Insert(src) - if(breathes && !getorganslot("lungs")) + if(breathes && !getorganslot(ORGAN_SLOT_LUNGS)) var/obj/item/organ/lungs/L = new() L.Insert(src) - if(blooded && !getorganslot("heart")) + if(blooded && !getorganslot(ORGAN_SLOT_HEART)) var/obj/item/organ/heart/H = new() H.Insert(src) - if(!getorganslot("tongue")) + if(!getorganslot(ORGAN_SLOT_TONGUE)) var/obj/item/organ/tongue/T if(dna && dna.species && dna.species.mutanttongue) @@ -155,7 +155,7 @@ // if they have no mutant tongues, give them a regular one T.Insert(src) - if(!getorganslot("eye_sight")) + if(!getorganslot(ORGAN_SLOT_EYES)) var/obj/item/organ/eyes/E if(dna && dna.species && dna.species.mutanteyes) @@ -165,7 +165,7 @@ E = new() E.Insert(src) - if(!getorganslot("ears")) + if(!getorganslot(ORGAN_SLOT_EARS)) var/obj/item/organ/ears/ears if(dna && dna.species && dna.species.mutantears) ears = new dna.species.mutantears diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index 36cd28ac98..2bf34334f4 100755 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -4,7 +4,7 @@ origin_tech = "biotech=4" w_class = WEIGHT_CLASS_NORMAL zone = "chest" - slot = "stomach" + slot = ORGAN_SLOT_STOMACH attack_verb = list("gored", "squished", "slapped", "digested") desc = "Onaka ga suite imasu." var/disgust_metabolism = 1 diff --git a/code/modules/surgery/organs/tails.dm b/code/modules/surgery/organs/tails.dm index 99d1ed2442..a909463585 100644 --- a/code/modules/surgery/organs/tails.dm +++ b/code/modules/surgery/organs/tails.dm @@ -2,7 +2,7 @@ name = "tail" desc = "What did you cut this off of?" zone = "groin" - slot = "tail" + slot = ORGAN_SLOT_TAIL /obj/item/organ/tail/cat name = "cat tail" diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 5e67e73a8a..5d9c96336a 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -3,7 +3,7 @@ desc = "A fleshy muscle mostly used for lying." icon_state = "tonguenormal" zone = "mouth" - slot = "tongue" + slot = ORGAN_SLOT_TONGUE attack_verb = list("licked", "slobbered", "slapped", "frenched", "tongued") var/list/languages_possible var/say_mod = null @@ -82,7 +82,7 @@ var/mob/living/carbon/human/user = usr var/rendered = "[user.name]: [message]" for(var/mob/living/carbon/human/H in GLOB.living_mob_list) - var/obj/item/organ/tongue/T = H.getorganslot("tongue") + var/obj/item/organ/tongue/T = H.getorganslot(ORGAN_SLOT_TONGUE) if(!T || T.type != type) continue if(H.dna && H.dna.species.id == "abductor" && user.dna && user.dna.species.id == "abductor") diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index aa77370ea2..ec1fd7d37a 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -7,7 +7,7 @@ name = "vocal cords" icon_state = "appendix" zone = "mouth" - slot = "vocal_cords" + slot = ORGAN_SLOT_VOICE gender = PLURAL var/list/spans = null @@ -24,15 +24,13 @@ name = "adamantine resonator" desc = "Fragments of adamantine exists in all golems, stemming from their origins as purely magical constructs. These are used to \"hear\" messages from their leaders." zone = "head" - slot = "adamantine_resonator" + slot = ORGAN_SLOT_ADAMANTINE_RESONATOR icon_state = "adamantine_resonator" /obj/item/organ/vocal_cords/adamantine name = "adamantine vocal cords" desc = "When adamantine resonates, it causes all nearby pieces of adamantine to resonate as well. Adamantine golems use this to broadcast messages to nearby golems." actions_types = list(/datum/action/item_action/organ_action/use/adamantine_vocal_cords) - zone = "mouth" - slot = "vocal_cords" icon_state = "adamantine_cords" /datum/action/item_action/organ_action/use/adamantine_vocal_cords/Trigger() @@ -48,7 +46,7 @@ for(var/m in GLOB.player_list) if(iscarbon(m)) var/mob/living/carbon/C = m - if(C.getorganslot("adamantine_resonator")) + if(C.getorganslot(ORGAN_SLOT_ADAMANTINE_RESONATOR)) to_chat(C, msg) if(isobserver(m)) var/link = FOLLOW_LINK(m, owner) @@ -59,8 +57,6 @@ name = "divine vocal cords" desc = "They carry the voice of an ancient god." icon_state = "voice_of_god" - zone = "mouth" - slot = "vocal_cords" actions_types = list(/datum/action/item_action/organ_action/colossus) var/next_command = 0 var/cooldown_mod = 1 diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index 8db4e492e4..f203af610a 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -44,7 +44,7 @@ return var/obj/item/organ/zombie_infection/infection - infection = target.getorganslot("zombie_infection") + infection = target.getorganslot(ORGAN_SLOT_ZOMBIE) if(!infection) infection = new() infection.Insert(target) diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index d089204fc8..3b5a06a421 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -2,7 +2,7 @@ name = "festering ooze" desc = "A black web of pus and viscera." zone = "head" - slot = "zombie_infection" + slot = ORGAN_SLOT_ZOMBIE icon_state = "blacktumor" origin_tech = "biotech=5" var/datum/species/old_species = /datum/species/human From 1160fdfdf6ea9299eb6dfe24be97d999efdc015a Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 16 Oct 2017 06:12:29 -0500 Subject: [PATCH 02/48] Update DNA.dm --- code/__DEFINES/DNA.dm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 8c1ce43717..d8f0d5c5f1 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -127,7 +127,6 @@ #define TOXINLOVER 24 #define DIGITIGRADE 25 //Uses weird leg sprites. Optional for Lizards, required for ashwalkers. Don't give it to other races unless you make sprites for this (see human_parts_greyscale.dmi) #define NO_UNDERWEAR 26 -<<<<<<< HEAD #define MUTCOLORS2 27 #define MUTCOLORS3 28 #define NOLIVER 29 @@ -136,10 +135,6 @@ #define NOAROUSAL 29 //Stops all arousal effects #define NOGENITALS 30 //Cannot create, use, or otherwise have genitals #define NO_DNA_COPY 31 -======= -#define NOLIVER 27 -#define NOSTOMACH 28 -#define NO_DNA_COPY 29 #define ORGAN_SLOT_BRAIN "brain" #define ORGAN_SLOT_APPENDIX "appendix" @@ -162,4 +157,3 @@ #define ORGAN_SLOT_BRAIN_ANTIDROP "brain_antidrop" #define ORGAN_SLOT_BRAIN_ANTISTUN "brain_antistun" #define ORGAN_SLOT_TAIL "tail" ->>>>>>> 04c05d8... Adds defines for organ slots (#31737) From 6038486bd6a0a6c27b6a0fc0a804164de1b9e06c Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 16 Oct 2017 06:12:45 -0500 Subject: [PATCH 03/48] Update airlock_painter.dm --- code/game/objects/items/airlock_painter.dm | 129 --------------------- 1 file changed, 129 deletions(-) diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index 2cb611e9b6..c961d77bf1 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -1,131 +1,3 @@ -<<<<<<< HEAD -/obj/item/airlock_painter - name = "airlock painter" - desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob." - icon = 'icons/obj/objects.dmi' - icon_state = "paint sprayer" - item_state = "paint sprayer" - - w_class = WEIGHT_CLASS_SMALL - - materials = list(MAT_METAL=50, MAT_GLASS=50) - origin_tech = "engineering=2" - - flags_1 = CONDUCT_1 | NOBLUDGEON_1 - slot_flags = SLOT_BELT - - var/obj/item/device/toner/ink = null - -/obj/item/airlock_painter/New() - ..() - ink = new /obj/item/device/toner(src) - -//This proc doesn't just check if the painter can be used, but also uses it. -//Only call this if you are certain that the painter will be used right after this check! -/obj/item/airlock_painter/proc/use(mob/user) - if(can_use(user)) - ink.charges-- - playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1) - return 1 - else - return 0 - -//This proc only checks if the painter can be used. -//Call this if you don't want the painter to be used right after this check, for example -//because you're expecting user input. -/obj/item/airlock_painter/proc/can_use(mob/user) - if(!ink) - to_chat(user, "There is no toner cartridge installed in [src]!") - return 0 - else if(ink.charges < 1) - to_chat(user, "[src] is out of ink!") - return 0 - else - return 1 - -/obj/item/airlock_painter/suicide_act(mob/user) - var/obj/item/organ/lungs/L = user.getorganslot("lungs") - - if(can_use(user) && L) - user.visible_message("[user] is inhaling toner from [src]! It looks like [user.p_theyre()] trying to commit suicide!") - use(user) - - // Once you've inhaled the toner, you throw up your lungs - // and then die. - - // Find out if there is an open turf in front of us, - // and if not, pick the turf we are standing on. - var/turf/T = get_step(get_turf(src), user.dir) - if(!isopenturf(T)) - T = get_turf(src) - - // they managed to lose their lungs between then and - // now. Good job. - if(!L) - return OXYLOSS - - L.Remove(user) - - // make some colorful reagent, and apply it to the lungs - L.create_reagents(10) - L.reagents.add_reagent("colorful_reagent", 10) - L.reagents.reaction(L, TOUCH, 1) - - // TODO maybe add some colorful vomit? - - user.visible_message("[user] vomits out their [L]!") - playsound(user.loc, 'sound/effects/splat.ogg', 50, 1) - - L.forceMove(T) - - return (TOXLOSS|OXYLOSS) - else if(can_use(user) && !L) - user.visible_message("[user] is spraying toner on [user.p_them()]self from [src]! It looks like [user.p_theyre()] trying to commit suicide.") - user.reagents.add_reagent("colorful_reagent", 1) - user.reagents.reaction(user, TOUCH, 1) - return TOXLOSS - - else - user.visible_message("[user] is trying to inhale toner from [src]! It might be a suicide attempt if [src] had any toner.") - return SHAME - - -/obj/item/airlock_painter/examine(mob/user) - ..() - if(!ink) - to_chat(user, "It doesn't have a toner cartridge installed.") - return - var/ink_level = "high" - if(ink.charges < 1) - ink_level = "empty" - else if((ink.charges/ink.max_charges) <= 0.25) //25% - ink_level = "low" - else if((ink.charges/ink.max_charges) > 1) //Over 100% (admin var edit) - ink_level = "dangerously high" - to_chat(user, "Its ink levels look [ink_level].") - - -/obj/item/airlock_painter/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/device/toner)) - if(ink) - to_chat(user, "[src] already contains \a [ink].") - return - if(!user.transferItemToLoc(W, src)) - return - to_chat(user, "You install [W] into [src].") - ink = W - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - else - return ..() - -/obj/item/airlock_painter/attack_self(mob/user) - if(ink) - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - ink.loc = user.loc - user.put_in_hands(ink) - to_chat(user, "You remove [ink] from [src].") - ink = null -======= /obj/item/airlock_painter name = "airlock painter" desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob." @@ -252,4 +124,3 @@ user.put_in_hands(ink) to_chat(user, "You remove [ink] from [src].") ink = null ->>>>>>> 04c05d8... Adds defines for organ slots (#31737) From 1bf50d3b89cb9c2ce4c93d8a6f38f18fb8739a8a Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 16 Oct 2017 06:12:54 -0500 Subject: [PATCH 04/48] Update eye_surgery.dm --- code/modules/surgery/eye_surgery.dm | 42 +---------------------------- 1 file changed, 1 insertion(+), 41 deletions(-) diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index 978a17a2f3..3e84d48e66 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -1,42 +1,3 @@ -<<<<<<< HEAD -/datum/surgery/eye_surgery - name = "eye surgery" - steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/fix_eyes, /datum/surgery_step/close) - species = list(/mob/living/carbon/human, /mob/living/carbon/monkey) - possible_locs = list("eyes") - requires_organic_bodypart = 0 - -//fix eyes -/datum/surgery_step/fix_eyes - name = "fix eyes" - implements = list(/obj/item/hemostat = 100, /obj/item/screwdriver = 45, /obj/item/pen = 25) - time = 64 - -/datum/surgery/eye_surgery/can_start(mob/user, mob/living/carbon/target) - var/obj/item/organ/eyes/E = target.getorganslot("eye_sight") - if(!E) - to_chat(user, "It's hard to do surgery on someones eyes when they don't have any.") - return FALSE - -/datum/surgery_step/fix_eyes/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to fix [target]'s eyes.", "You begin to fix [target]'s eyes...") - -/datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] successfully fixes [target]'s eyes!", "You succeed in fixing [target]'s eyes.") - target.cure_blind() - target.set_blindness(0) - target.cure_nearsighted() - target.blur_eyes(35) //this will fix itself slowly. - target.set_eye_damage(0) - return TRUE - -/datum/surgery_step/fix_eyes/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - if(target.getorgan(/obj/item/organ/brain)) - user.visible_message("[user] accidentally stabs [target] right in the brain!", "You accidentally stab [target] right in the brain!") - target.adjustBrainLoss(100) - else - user.visible_message("[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain.", "You accidentally stab [target] right in the brain! Or would have, if [target] had a brain.") -======= /datum/surgery/eye_surgery name = "eye surgery" steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/fix_eyes, /datum/surgery_step/close) @@ -74,5 +35,4 @@ target.adjustBrainLoss(100) else user.visible_message("[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain.", "You accidentally stab [target] right in the brain! Or would have, if [target] had a brain.") ->>>>>>> 04c05d8... Adds defines for organ slots (#31737) - return FALSE \ No newline at end of file + return FALSE From 448e2d9448e4f20fca01c1c0397c82ae85bde713 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 16 Oct 2017 07:53:50 -0500 Subject: [PATCH 05/48] Update medicine_reagents.dm --- code/modules/reagents/chemistry/reagents/medicine_reagents.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index c5a23e5a23..a184434039 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -671,11 +671,7 @@ taste_description = "dull toxin" /datum/reagent/medicine/oculine/on_mob_life(mob/living/M) -<<<<<<< HEAD - var/obj/item/organ/eyes/eyes = M.getorganslot("eyes_sight") -======= var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) ->>>>>>> 04c05d8... Adds defines for organ slots (#31737) if (!eyes) return if(M.disabilities & BLIND) From e4f76a79a51bf19b70888ef21770c8bb079f7d55 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Fri, 20 Oct 2017 10:10:54 -0500 Subject: [PATCH 06/48] Allows species to be blocked from ever being roundstart, can now choose your Halloween species --- code/__DEFINES/subsystems.dm | 4 ++-- .../configuration/entries/game_options.dm | 24 ++----------------- code/controllers/subsystem/job.dm | 1 + code/controllers/subsystem/ticker.dm | 5 ++-- code/datums/dna.dm | 2 +- code/game/machinery/computer/cloning.dm | 2 +- code/game/machinery/computer/security.dm | 4 ++-- code/game/objects/structures/mirror.dm | 3 +-- code/modules/client/preferences.dm | 4 ++-- code/modules/client/preferences_savefile.dm | 7 +++--- code/modules/events/holiday/halloween.dm | 5 ---- .../mob/dead/new_player/preferences_setup.dm | 2 +- code/modules/mob/living/brain/brain.dm | 2 +- .../mob/living/carbon/human/species.dm | 19 +++++++++++++-- .../human/species_types/shadowpeople.dm | 7 +++++- .../carbon/human/species_types/skeletons.dm | 9 +++++++ .../carbon/human/species_types/synths.dm | 2 +- .../carbon/human/species_types/zombies.dm | 9 +++++++ 18 files changed, 62 insertions(+), 49 deletions(-) diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 9ec26b7506..247e1109f8 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -46,8 +46,8 @@ #define INIT_ORDER_DBCORE 18 #define INIT_ORDER_BLACKBOX 17 #define INIT_ORDER_SERVER_MAINT 16 -#define INIT_ORDER_JOBS 15 -#define INIT_ORDER_EVENTS 14 +#define INIT_ORDER_EVENTS 15 +#define INIT_ORDER_JOBS 14 #define INIT_ORDER_TICKER 13 #define INIT_ORDER_MAPPING 12 #define INIT_ORDER_ATOMS 11 diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index f2c9cd3315..a49742e6b0 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -112,27 +112,7 @@ CONFIG_DEF(flag/show_game_type_odds) //if set this allows players to see the odd CONFIG_DEF(flag/join_with_mutant_race) //players can choose their mutant race before joining the game -CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go. If left undefined the game's roundstart var for species is used - var/first_edit = TRUE - -/datum/config_entry/keyed_flag_list/roundstart_races/New() - for(var/I in subtypesof(/datum/species)) - var/datum/species/S = I - if(initial(S.roundstart)) - value[initial(S.id)] = TRUE - ..() - -/datum/config_entry/keyed_flag_list/roundstart_races/ValidateAndSet(str_val) - var/list/old_val - if(first_edit) - old_val = value - old_val = old_val.Copy() - . = ..() - if(first_edit) - if(!.) - value = old_val - else - first_edit = FALSE +CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go. CONFIG_DEF(flag/join_with_mutant_humans) //players can pick mutant bodyparts for humans before joining the game @@ -188,7 +168,7 @@ CONFIG_DEF(number/run_delay) //Used for modifying movement speed for mobs. CONFIG_DEF(number/walk_delay) - + CONFIG_DEF(number/human_delay) //Mob specific modifiers. NOTE: These will affect different mob types in different ways CONFIG_DEF(number/robot_delay) CONFIG_DEF(number/monkey_delay) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index fa6ca7e26b..5645f0527f 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -18,6 +18,7 @@ SUBSYSTEM_DEF(job) SetupOccupations() if(CONFIG_GET(flag/load_jobs_from_txt)) LoadJobs() + generate_selectable_species() ..() diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 4b198d1e80..e1828b737a 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -12,7 +12,7 @@ SUBSYSTEM_DEF(ticker) var/force_ending = 0 //Round was ended by admin intervention // If true, there is no lobby phase, the game starts immediately. var/start_immediately = FALSE - var/setup_done = FALSE //All game setup done including mode post setup and + var/setup_done = FALSE //All game setup done including mode post setup and var/hide_mode = 0 var/datum/game_mode/mode = null @@ -127,7 +127,7 @@ SUBSYSTEM_DEF(ticker) login_music = pick(music) else login_music = "config/title_music/sounds/[pick(music)]" - + crewobjlist = typesof(/datum/objective/crew) miscreantobjlist = (typesof(/datum/objective/miscreant) - /datum/objective/miscreant) @@ -141,6 +141,7 @@ SUBSYSTEM_DEF(ticker) GLOB.syndicate_code_phrase = generate_code_phrase() if(!GLOB.syndicate_code_response) GLOB.syndicate_code_response = generate_code_phrase() + ..() start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 12555ee038..3987b49750 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -263,7 +263,7 @@ /mob/living/carbon/proc/create_dna() dna = new /datum/dna(src) if(!dna.species) - var/rando_race = pick(CONFIG_GET(keyed_flag_list/roundstart_races)) + var/rando_race = pick(GLOB.roundstart_races) dna.species = new rando_race() //proc used to update the mob's appearance after its dna UI has been changed diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 31126a6c08..ee316b3eed 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -470,7 +470,7 @@ // species datums R.fields["mrace"] = dna.species else - var/datum/species/rando_race = pick(CONFIG_GET(keyed_flag_list/roundstart_races)) + var/datum/species/rando_race = pick(GLOB.roundstart_races) R.fields["mrace"] = rando_race.type R.fields["ckey"] = mob_occupant.ckey diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 8859522ed2..fba60f34ab 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -598,7 +598,7 @@ What a mess.*/ active1.fields["age"] = t1 if("species") if(istype(active1, /datum/data/record)) - var/t1 = input("Select a species", "Species Selection") as null|anything in CONFIG_GET(keyed_flag_list/roundstart_races) + var/t1 = input("Select a species", "Species Selection") as null|anything in GLOB.roundstart_races if(!canUseSecurityRecordsConsole(usr, t1, a1)) return active1.fields["species"] = t1 @@ -766,7 +766,7 @@ What a mess.*/ if(6) R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") if(7) - R.fields["species"] = pick(CONFIG_GET(keyed_flag_list/roundstart_races)) + R.fields["species"] = pick(GLOB.roundstart_races) if(8) var/datum/data/record/G = pick(GLOB.data_core.general) R.fields["photo_front"] = G.fields["photo_front"] diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 296e4ba757..711f9baf0b 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -101,8 +101,7 @@ ..() /obj/structure/mirror/magic/lesser/New() - var/list/L = CONFIG_GET(keyed_flag_list/roundstart_races) - choosable_races = L.Copy() + choosable_races = GLOB.roundstart_races.Copy() ..() /obj/structure/mirror/magic/badmin/New() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index bcbeb55dd2..deaf283418 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -45,7 +45,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/allow_midround_antag = 1 var/preferred_map = null var/pda_style = MONO - + var/uses_glasses_colour = 0 var/screenshake = 100 @@ -1187,7 +1187,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("species") - var/result = input(user, "Select a species", "Species Selection") as null|anything in CONFIG_GET(keyed_flag_list/roundstart_races) + var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_races if(result) var/newtype = GLOB.species_list[result] diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index dddac1e506..404e64e517 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -294,12 +294,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Species var/species_id S["species"] >> species_id - var/list/roundstart_races = CONFIG_GET(keyed_flag_list/roundstart_races) - if(species_id && (species_id in roundstart_races) && CONFIG_GET(flag/join_with_mutant_race)) + if(species_id && (species_id in GLOB.roundstart_races) && CONFIG_GET(flag/join_with_mutant_race)) var/newtype = GLOB.species_list[species_id] pref_species = new newtype() - else if (roundstart_races.len) - var/rando_race = pick(roundstart_races) + else if (GLOB.roundstart_races.len) + var/rando_race = pick(GLOB.roundstart_races) if (rando_race) pref_species = new rando_race() diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index 5415eab386..db41a84d4f 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -11,11 +11,6 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) var/obj/item/storage/backpack/b = locate() in H.contents new /obj/item/storage/spooky(b) - if(ishuman(H) || islizard(H)) - if(prob(50)) - H.set_species(/datum/species/skeleton) - else - H.set_species(/datum/species/zombie) for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_list) Ian.place_on_head(new /obj/item/bedsheet(Ian)) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 831fde141e..42265b0b6a 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -14,7 +14,7 @@ facial_hair_color = hair_color eye_color = random_eye_color() if(!pref_species) - var/rando_race = pick(CONFIG_GET(keyed_flag_list/roundstart_races)) + var/rando_race = pick(GLOB.roundstart_races) pref_species = new rando_race() features = random_features() age = rand(AGE_MIN,AGE_MAX) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 94ed0129c7..c175acf9d6 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -19,7 +19,7 @@ /mob/living/brain/proc/create_dna() stored_dna = new /datum/dna/stored(src) if(!stored_dna.species) - var/rando_race = pick(CONFIG_GET(keyed_flag_list/roundstart_races)) + var/rando_race = pick(GLOB.roundstart_races) stored_dna.species = new rando_race() /mob/living/brain/Destroy() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 7a212d371b..e7f193ec80 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1,5 +1,7 @@ // This code handles different species in the game. +GLOBAL_LIST_EMPTY(roundstart_races) + #define HEAT_DAMAGE_LEVEL_1 2 #define HEAT_DAMAGE_LEVEL_2 3 #define HEAT_DAMAGE_LEVEL_3 8 @@ -12,7 +14,6 @@ var/id // if the game needs to manually check your race to do something not included in a proc here, it will use this var/limbs_id //this is used if you want to use a different species limb sprites. Mainly used for angels as they look like humans. var/name // this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever - var/roundstart = 0 // can this mob be chosen at roundstart? (assuming the config option is checked?) var/default_color = "#FFF" // if alien colors are disabled, this is the color that will be used by that race var/sexes = 1 // whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows @@ -92,6 +93,20 @@ ..() +/proc/generate_selectable_species() + for(var/I in subtypesof(/datum/species)) + var/datum/species/S = new I + if(S.check_roundstart_eligible()) + GLOB.roundstart_races += S.id + qdel(S) + if(!GLOB.roundstart_races.len) + GLOB.roundstart_races += "human" + +/datum/species/proc/check_roundstart_eligible() + if(id in (CONFIG_GET(keyed_flag_list/roundstart_races))) + return TRUE + return FALSE + /datum/species/proc/random_name(gender,unique,lastname) if(unique) return random_unique_name(gender) @@ -1152,7 +1167,7 @@ if(radiation > RAD_MOB_VOMIT && prob(RAD_MOB_VOMIT_PROB)) H.vomit(10, TRUE) - + if(radiation > RAD_MOB_MUTATE) if(prob(1)) to_chat(H, "You mutate!") diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 4347a8331c..fd030fad45 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -24,6 +24,10 @@ else if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //heal in the dark H.heal_overall_damage(1,1) +/datum/species/shadow/check_roundstart_eligible() + if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) + return TRUE + return ..() /datum/species/shadow/nightmare name = "Nightmare" @@ -60,7 +64,8 @@ return -1 return 0 - +/datum/species/shadow/nightmare/check_roundstart_eligible() + return FALSE //Organs diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index be03e591aa..e1b17ab5eb 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -10,4 +10,13 @@ mutanttongue = /obj/item/organ/tongue/bone damage_overlay_type = ""//let's not show bloody wounds or burns over bones. disliked_food = NONE +<<<<<<< HEAD liked_food = NONE +======= + liked_food = GROSS | MEAT | RAW + +/datum/species/skeleton/check_roundstart_eligible() + if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) + return TRUE + return ..() +>>>>>>> dcddc79... Allows species to be blocked from ever being roundstart, can now choose your Halloween species (#31877) diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm index 45b4a28bb5..8b21c2a237 100644 --- a/code/modules/mob/living/carbon/human/species_types/synths.dm +++ b/code/modules/mob/living/carbon/human/species_types/synths.dm @@ -118,4 +118,4 @@ else return ..() else - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 016a3635ef..bcf49cd556 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -14,6 +14,11 @@ disliked_food = NONE liked_food = NONE +/datum/species/zombie/check_roundstart_eligible() + if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) + return TRUE + return ..() + /datum/species/zombie/infectious name = "Infectious Zombie" id = "memezombies" @@ -24,6 +29,10 @@ mutanteyes = /obj/item/organ/eyes/night_vision/zombie var/regen_cooldown = 0 +/datum/species/zombie/infectious/check_roundstart_eligible() + return FALSE + + /datum/species/zombie/infectious/spec_stun(mob/living/carbon/human/H,amount) . = min(2, amount) From 1bcb5f2c863debf5c948c8ed67e2d216b60c5518 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 22 Oct 2017 10:48:29 -0500 Subject: [PATCH 07/48] Update skeletons.dm --- .../mob/living/carbon/human/species_types/skeletons.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index e1b17ab5eb..acaa182ad0 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -10,13 +10,9 @@ mutanttongue = /obj/item/organ/tongue/bone damage_overlay_type = ""//let's not show bloody wounds or burns over bones. disliked_food = NONE -<<<<<<< HEAD liked_food = NONE -======= - liked_food = GROSS | MEAT | RAW /datum/species/skeleton/check_roundstart_eligible() if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) return TRUE return ..() ->>>>>>> dcddc79... Allows species to be blocked from ever being roundstart, can now choose your Halloween species (#31877) From 878a52ab3f2f4668e3c9b3ca73e3cb39b3270059 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 22 Oct 2017 23:43:10 -0500 Subject: [PATCH 08/48] Update furrypeople.dm --- .../living/carbon/human/species_types/furrypeople.dm | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index d15280790e..8a37276cf3 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -8,7 +8,6 @@ attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 liked_food = MEAT | FRIED disliked_food = TOXIC @@ -31,7 +30,6 @@ attack_verb = "peck" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 liked_food = MEAT | FRUIT disliked_food = TOXIC @@ -53,7 +51,6 @@ attack_verb = "bite" attack_sound = 'sound/weapons/bite.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 liked_food = MEAT disliked_food = TOXIC @@ -75,7 +72,6 @@ attack_verb = "flutter" //wat? attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 liked_food = MEAT | FRUIT disliked_food = TOXIC @@ -105,7 +101,6 @@ skinned_type = /obj/item/stack/sheet/animalhide/xeno exotic_bloodtype = "L" damage_overlay_type = "xeno" - roundstart = 1 liked_food = MEAT //Praise the Omnissiah, A challange worthy of my skills - HS @@ -138,7 +133,6 @@ meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno skinned_type = /obj/item/stack/sheet/animalhide/xeno // safe_toxins_max = 32 //Too much of anything is bad. - roundstart = 0 // whitelisted = 1 // whitelist = list("talkingcactus") //testing whitelisting @@ -182,7 +176,6 @@ punchdamagehigh = 14 punchstunthreshold = 13 blacklisted = 1 - roundstart = 0 whitelist = 1 whitelist = list("talkingcactus") @@ -233,7 +226,6 @@ attack_verb = "bite" attack_sound = 'sound/weapons/bite.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' -// roundstart = 1 whitelisted = 1 whitelist = list("rubyflamewing") blacklisted = 0 @@ -248,4 +240,4 @@ attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 + From 23af6f7f52052f86c194343237919db6880971b4 Mon Sep 17 00:00:00 2001 From: oranges Date: Thu, 26 Oct 2017 23:08:36 +1300 Subject: [PATCH 09/48] Use phpenv for the php build in travis instead of a PPA --- .travis.yml | 3 --- tools/travis/build_tools.sh | 6 ++++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b353761b2d..3095262290 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,15 +21,12 @@ cache: addons: apt: - sources: - - sourceline: 'ppa:ondrej/php' packages: - libc6-i386 - libgcc1:i386 - libstdc++6:i386 - python - python-pip - - php5.6 install: - tools/travis/install_build_tools.sh diff --git a/tools/travis/build_tools.sh b/tools/travis/build_tools.sh index 2e9810b470..b3409209af 100755 --- a/tools/travis/build_tools.sh +++ b/tools/travis/build_tools.sh @@ -7,6 +7,12 @@ if [ "$BUILD_TOOLS" = true ]; then md5sum -c - <<< "49bc6b1b9ed56c83cceb6674bd97cb34 *html/changelogs/example.yml"; cd tgui && source ~/.nvm/nvm.sh && gulp && cd ..; +<<<<<<< HEAD php5.6 -l tools/WebhookProcessor/github_webhook_processor.php; +======= + phpenv global 5.6 + php -l tools/WebhookProcessor/github_webhook_processor.php; + php -l tools/TGUICompiler.php; +>>>>>>> 9b71dcb... Merge pull request #32050 from optimumtact/ripandtearthehugeguts python tools/ss13_genchangelog.py html/changelog.html html/changelogs; fi; From 00163837ded314d902ffcbeee5e43008c2fb4709 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 26 Oct 2017 05:19:55 -0500 Subject: [PATCH 10/48] Halloween Tweaks --- code/modules/events/holiday/halloween.dm | 77 ++---------------------- code/modules/events/meteor_wave.dm | 75 +++++++++++++++++++++++ code/modules/holiday/holidays.dm | 2 +- 3 files changed, 81 insertions(+), 73 deletions(-) diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index 5415eab386..2b8bac0c39 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -10,12 +10,17 @@ ..() for(var/mob/living/carbon/human/H in GLOB.mob_list) var/obj/item/storage/backpack/b = locate() in H.contents +<<<<<<< HEAD new /obj/item/storage/spooky(b) if(ishuman(H) || islizard(H)) if(prob(50)) H.set_species(/datum/species/skeleton) else H.set_species(/datum/species/zombie) +======= + if(b) + new /obj/item/storage/spooky(b) +>>>>>>> 00396d0... Halloween Tweaks (#32087) for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_list) Ian.place_on_head(new /obj/item/bedsheet(Ian)) @@ -26,77 +31,6 @@ /datum/round_event/spooky/announce() priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE") -//Eyeball migration -/datum/round_event_control/carp_migration/eyeballs - name = "Eyeball Migration" - typepath = /datum/round_event/carp_migration/eyeballs - holidayID = HALLOWEEN - weight = 25 - earliest_start = 0 - -/datum/round_event/carp_migration/eyeballs/start() - for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list) - new /mob/living/simple_animal/hostile/carp/eyeball(C.loc) - -//Pumpking meteors waves -/datum/round_event_control/meteor_wave/spooky - name = "Pumpkin Wave" - typepath = /datum/round_event/meteor_wave/spooky - holidayID = HALLOWEEN - weight = 20 - max_occurrences = 2 - -/datum/round_event/meteor_wave/spooky - endWhen = 40 - -/datum/round_event/meteor_wave/spooky/tick() - if(IsMultiple(activeFor, 4)) - spawn_meteors(3, GLOB.meteorsSPOOKY) //meteor list types defined in gamemode/meteor/meteors.dm - -//Creepy clown invasion -/datum/round_event_control/creepy_clowns - name = "Clowns" - typepath = /datum/round_event/creepy_clowns - holidayID = HALLOWEEN - weight = 20 - earliest_start = 0 - -/datum/round_event/creepy_clowns - endWhen = 40 - -/datum/round_event/creepy_clowns/start() - for(var/mob/living/carbon/human/H in GLOB.living_mob_list) - if(!H.client || !istype(H)) - return - to_chat(H, "Honk...") - SEND_SOUND(H, sound('sound/spookoween/scary_clown_appear.ogg')) - var/turf/T = get_turf(H) - if(T) - new /obj/effect/hallucination/simple/clown(T, H, 50) - -/datum/round_event/creepy_clowns/tick() - if(IsMultiple(activeFor, 4)) - for(var/mob/living/carbon/human/H in GLOB.living_mob_list) - if (prob(66)) - playsound(H.loc, pick('sound/spookoween/scary_horn.ogg','sound/spookoween/scary_horn2.ogg', 'sound/spookoween/scary_horn3.ogg'), 100, 1) - if (prob(33)) - var/turf/T = get_turf(H) - if(T) - new /obj/effect/hallucination/simple/clown(T, H, 25) - else if (prob(25)) - var/turf/T = get_turf(H) - if(T) - new /obj/effect/hallucination/simple/clown/scary(T, H, 25) - else if (prob(5)) - var/turf/T = get_turf(H) - if(T) - spawn_atom_to_turf(/obj/effect/mob_spawn/human/clown/corpse, H, 1) - else if (prob(1)) - spawn_atom_to_turf(/mob/living/simple_animal/hostile/retaliate/clown, H, 1) - -/datum/round_event/creepy_clowns/announce() - priority_announce("Honk... Honk... honk... HONK! HONK! HONKHONKHONKHONKHONK", "HONK!", 'sound/spookoween/scary_horn.ogg') - //spooky foods (you can't actually make these when it's not halloween) /obj/item/reagent_containers/food/snacks/sugarcookie/spookyskull name = "skull cookie" @@ -110,7 +44,6 @@ icon = 'icons/obj/halloween_items.dmi' icon_state = "coffincookie" - //spooky items /obj/item/storage/spooky diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm index d46525a0eb..bdbfd2e6b6 100644 --- a/code/modules/events/meteor_wave.dm +++ b/code/modules/events/meteor_wave.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD // Normal strength /datum/round_event_control/meteor_wave @@ -66,3 +67,77 @@ /datum/round_event/meteor_wave/catastrophic wave_name = "catastrophic" +======= +// Normal strength + +/datum/round_event_control/meteor_wave + name = "Meteor Wave: Normal" + typepath = /datum/round_event/meteor_wave + weight = 4 + min_players = 5 + max_occurrences = 3 + +/datum/round_event/meteor_wave + startWhen = 6 + endWhen = 66 + announceWhen = 1 + var/list/wave_type + var/wave_name = "normal" + +/datum/round_event/meteor_wave/New() + ..() + if(!wave_type) + determine_wave_type() + +/datum/round_event/meteor_wave/proc/determine_wave_type() + if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) + wave_name = "halloween" + if(!wave_name) + wave_name = pickweight(list( + "normal" = 50, + "threatening" = 40, + "catastrophic" = 10)) + switch(wave_name) + if("normal") + wave_type = GLOB.meteors_normal + if("threatening") + wave_type = GLOB.meteors_threatening + if("catastrophic") + wave_type = GLOB.meteors_catastrophic + if("meaty") + wave_type = GLOB.meteorsB + if("space dust") + wave_type = GLOB.meteorsC + if("halloween") + wave_type = GLOB.meteorsSPOOKY + else + WARNING("Wave name of [wave_name] not recognised.") + kill() + +/datum/round_event/meteor_wave/announce() + priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/ai/meteors.ogg') + +/datum/round_event/meteor_wave/tick() + if(IsMultiple(activeFor, 3)) + spawn_meteors(5, wave_type) //meteor list types defined in gamemode/meteor/meteors.dm + +/datum/round_event_control/meteor_wave/threatening + name = "Meteor Wave: Threatening" + typepath = /datum/round_event/meteor_wave/threatening + weight = 2 + min_players = 5 + max_occurrences = 3 + +/datum/round_event/meteor_wave/threatening + wave_name = "threatening" + +/datum/round_event_control/meteor_wave/catastrophic + name = "Meteor Wave: Catastrophic" + typepath = /datum/round_event/meteor_wave/catastrophic + weight = 1 + min_players = 5 + max_occurrences = 3 + +/datum/round_event/meteor_wave/catastrophic + wave_name = "catastrophic" +>>>>>>> 00396d0... Halloween Tweaks (#32087) diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index c8e9235646..751bc53eac 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -272,7 +272,7 @@ /datum/holiday/halloween name = HALLOWEEN - begin_day = 30 + begin_day = 28 begin_month = OCTOBER end_day = 2 end_month = NOVEMBER From 55cad46845217b4ab6b17756d0b2fe8b0831445f Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 26 Oct 2017 12:21:28 -0400 Subject: [PATCH 11/48] Adds a button to let people ahelping know their issue is being handled --- code/modules/admin/verbs/adminhelp.dm | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 3889872275..0135bfbfa0 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -237,6 +237,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) . += " (IC)" . += " (CLOSE)" . += " (RSLVE)" + . += " (HANDLE)" //private /datum/admin_help/proc/LinkedReplyName(ref_src) @@ -382,6 +383,22 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) AddInteraction("Marked as IC issue by [key_name]") Resolve(silent = TRUE) +//Let the initiator know their ahelp is being handled +/datum/admin_help/proc/HandleIssue(key_name = key_name_admin(usr)) + if(state != AHELP_ACTIVE) + return + + var/msg = "Your ticket is now being handled by an admin. Please be patient." + + if(initiator) + to_chat(initiator, msg) + + SSblackbox.inc("ahelp_handleissue") + msg = "Ticket [TicketHref("#[id]")] is being handled by [key_name]" + message_admins(msg) + log_admin_private(msg) + AddInteraction("Being handled by [key_name]") + //Show the ticket panel /datum/admin_help/proc/TicketPanel() var/list/dat = list("Ticket #[id]") @@ -442,6 +459,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) Close() if("resolve") Resolve() + if("handleissue") + HandleIssue() if("reopen") Reopen() @@ -489,9 +508,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) return if(handle_spam_prevention(msg,MUTE_ADMINHELP)) return - + msg = trim(msg) - + if(!msg) return From 9f7a7bcc222d30a3e5110d2f00fc95f6125ae7e8 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 26 Oct 2017 11:54:54 -0500 Subject: [PATCH 12/48] Vampire species for halloween --- code/__DEFINES/DNA.dm | 29 ++++ code/modules/mob/living/blood.dm | 36 +++-- .../mob/living/carbon/human/species.dm | 3 +- .../carbon/human/species_types/vampire.dm | 130 ++++++++++++++++++ .../chemistry/reagents/other_reagents.dm | 4 +- .../reagents/reagent_containers/blood_pack.dm | 3 + tgstation.dme | 1 + 7 files changed, 184 insertions(+), 22 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/species_types/vampire.dm diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index dd5a25d8ff..2a35230794 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -127,6 +127,7 @@ #define TOXINLOVER 24 #define DIGITIGRADE 25 //Uses weird leg sprites. Optional for Lizards, required for ashwalkers. Don't give it to other races unless you make sprites for this (see human_parts_greyscale.dmi) #define NO_UNDERWEAR 26 +<<<<<<< HEAD #define MUTCOLORS2 27 #define MUTCOLORS3 28 #define NOLIVER 29 @@ -135,3 +136,31 @@ #define NOAROUSAL 29 //Stops all arousal effects #define NOGENITALS 30 //Cannot create, use, or otherwise have genitals #define NO_DNA_COPY 31 +======= +#define NOLIVER 27 +#define NOSTOMACH 28 +#define NO_DNA_COPY 29 +#define DRINKSBLOOD 30 + +#define ORGAN_SLOT_BRAIN "brain" +#define ORGAN_SLOT_APPENDIX "appendix" +#define ORGAN_SLOT_RIGHT_ARM_AUG "r_arm_device" +#define ORGAN_SLOT_LEFT_ARM_AUG "l_arm_device" +#define ORGAN_SLOT_STOMACH "stomach" +#define ORGAN_SLOT_BREATHING_TUBE "breathing_tube" +#define ORGAN_SLOT_EARS "ears" +#define ORGAN_SLOT_EYES "eye_sight" +#define ORGAN_SLOT_LUNGS "lungs" +#define ORGAN_SLOT_HEART "heart" +#define ORGAN_SLOT_ZOMBIE "zombie_infection" +#define ORGAN_SLOT_THRUSTERS "thrusters" +#define ORGAN_SLOT_HUD "eye_hud" +#define ORGAN_SLOT_LIVER "liver" +#define ORGAN_SLOT_TONGUE "tongue" +#define ORGAN_SLOT_VOICE "vocal_cords" +#define ORGAN_SLOT_ADAMANTINE_RESONATOR "adamantine_resonator" +#define ORGAN_SLOT_HEART_AID "heartdrive" +#define ORGAN_SLOT_BRAIN_ANTIDROP "brain_antidrop" +#define ORGAN_SLOT_BRAIN_ANTISTUN "brain_antistun" +#define ORGAN_SLOT_TAIL "tail" +>>>>>>> ad30af5... Vampire species for halloween (#32096) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 30d5652ab4..45f26d55c3 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -216,25 +216,23 @@ . = list() if(!bloodtype) return - switch(bloodtype) - if("A-") - return list("A-", "O-") - if("A+") - return list("A-", "A+", "O-", "O+") - if("B-") - return list("B-", "O-") - if("B+") - return list("B-", "B+", "O-", "O+") - if("AB-") - return list("A-", "B-", "O-", "AB-") - if("AB+") - return list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+") - if("O-") - return list("O-") - if("O+") - return list("O-", "O+") - if("L") - return list("L") + + var/static/list/bloodtypes_safe = list( + "A-" = list("A-", "O-"), + "A+" = list("A-", "A+", "O-", "O+"), + "B-" = list("B-", "O-"), + "B+" = list("B-", "B+", "O-", "O+"), + "AB-" = list("A-", "B-", "O-", "AB-"), + "AB+" = list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+"), + "O-" = list("O-"), + "O+" = list("O-", "O+"), + "L" = list("L"), + "U" = list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+", "L", "U") + ) + + var/safe = bloodtypes_safe[bloodtype] + if(safe) + . = safe //to add a splatter of blood or other mob liquid. /mob/living/proc/add_splatter_floor(turf/T, small_drip) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 7a212d371b..8704abee83 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -65,6 +65,7 @@ var/breathid = "o2" var/obj/item/organ/brain/mutant_brain = /obj/item/organ/brain + var/obj/item/organ/heart/mutant_heart = /obj/item/organ/heart var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes var/obj/item/organ/ears/mutantears = /obj/item/organ/ears var/obj/item/mutanthands @@ -154,7 +155,7 @@ heart.Remove(C,1) QDEL_NULL(heart) if(should_have_heart && !heart) - heart = new() + heart = new mutant_heart() heart.Insert(C) if(lungs && (replace_current || !should_have_lungs)) diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm new file mode 100644 index 0000000000..de0b5efdff --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -0,0 +1,130 @@ +/datum/species/vampire + name = "vampire" + id = "vampire" + default_color = "FFFFFF" + species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,NOHUNGER,NOBREATH,DRINKSBLOOD) + mutant_bodyparts = list("tail_human", "ears", "wings") + default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None") + exotic_bloodtype = "U" + use_skintones = TRUE + mutant_heart = /obj/item/organ/heart/vampire + mutanttongue = /obj/item/organ/tongue/vampire + blacklisted = TRUE + limbs_id = "human" + skinned_type = /obj/item/stack/sheet/animalhide/human + var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability." + +/datum/species/vampire/check_roundstart_eligible() + if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) + return TRUE + return FALSE + +/datum/species/vampire/on_species_gain(mob/living/carbon/human/C, datum/species/old_species) + . = ..() + to_chat(C, "[info_text]") + C.skin_tone = "albino" + C.update_body(0) + if(C.mind) + var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/B = new + C.mind.AddSpell(B) + +/datum/species/vampire/on_species_loss(mob/living/carbon/C) + . = ..() + if(C.mind) + for(var/S in C.mind.spell_list) + var/obj/effect/proc_holder/spell/S2 = S + if(S2.type == /obj/effect/proc_holder/spell/targeted/shapeshift/bat) + C.mind.spell_list.Remove(S2) + qdel(S2) + +/datum/species/vampire/spec_life(mob/living/carbon/human/C) + . = ..() + if(istype(C.loc, /obj/structure/closet/coffin)) + C.heal_overall_damage(4,4) + C.adjustToxLoss(-4) + C.adjustOxyLoss(-4) + C.adjustCloneLoss(-4) + return + C.blood_volume -= 1.5 + if(C.blood_volume <= BLOOD_VOLUME_SURVIVE) + to_chat(C, "You ran out of blood!") + C.dust() + var/area/A = get_area(C) + if(istype(A, /area/chapel)) + to_chat(C, "You don't belong here!") + C.adjustFireLoss(20) + C.adjust_fire_stacks(6) + C.IgniteMob() + +/obj/item/organ/tongue/vampire + name = "vampire tongue" + actions_types = list(/datum/action/item_action/organ_action/vampire) + color = "#1C1C1C" + var/drain_cooldown = 0 + +#define VAMP_DRAIN_AMOUNT 50 + +/datum/action/item_action/organ_action/vampire + name = "Drain Victim" + desc = "Leech blood from any carbon victim you are passively grabbing." + +/datum/action/item_action/organ_action/vampire/Trigger() + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/H = owner + var/obj/item/organ/tongue/vampire/V = target + if(V.drain_cooldown >= world.time) + to_chat(H, "You just drained blood, wait a few seconds.") + return + if(H.pulling && iscarbon(H.pulling)) + var/mob/living/carbon/victim = H.pulling + if(H.blood_volume >= BLOOD_VOLUME_MAXIMUM) + to_chat(H, "You're already full!") + return + if(victim.stat == DEAD) + to_chat(H, "You need a living victim!") + return + if(!victim.blood_volume || (victim.dna && ((NOBLOOD in victim.dna.species.species_traits) || victim.dna.species.exotic_blood))) + to_chat(H, "[victim] doesn't have blood!") + return + V.drain_cooldown = world.time + 30 + if(!do_after(H, 30, target = victim)) + return + var/blood_volume_difference = BLOOD_VOLUME_MAXIMUM - H.blood_volume //How much capacity we have left to absorb blood + var/drained_blood = min(victim.blood_volume, VAMP_DRAIN_AMOUNT, blood_volume_difference) + to_chat(victim, "[H] is draining your blood!") + to_chat(H, "You drain some blood!") + playsound(H, 'sound/items/drink.ogg', 30, 1, -2) + victim.blood_volume = Clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + H.blood_volume = Clamp(H.blood_volume + drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + if(!victim.blood_volume) + to_chat(H, "You finish off [victim]'s blood supply!") + +#undef VAMP_DRAIN_AMOUNT + +/obj/item/organ/heart/vampire + name = "vampire heart" + actions_types = list(/datum/action/item_action/organ_action/vampire_heart) + color = "#1C1C1C" + +/datum/action/item_action/organ_action/vampire_heart + name = "Check Blood Level" + desc = "Check how much blood you have remaining." + +/datum/action/item_action/organ_action/vampire_heart/Trigger() + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/H = owner + to_chat(H, "Current blood level: [H.blood_volume]/[BLOOD_VOLUME_MAXIMUM].") + +/obj/effect/proc_holder/spell/targeted/shapeshift/bat + name = "Bat Form" + desc = "Take on the shape a space bat." + invocation = "Squeak!" + charge_max = 50 + cooldown_min = 50 + + shapeshift_type = /mob/living/simple_animal/hostile/retaliate/bat + current_shapes = list(/mob/living/simple_animal/hostile/retaliate/bat) + current_casters = list() + possible_shapes = list(/mob/living/simple_animal/hostile/retaliate/bat) \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 0a437f120e..634e98fb2d 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -24,9 +24,9 @@ else //ingest, patch or inject M.ForceContractDisease(D) - if(method == INJECT && iscarbon(M)) + if(iscarbon(M)) var/mob/living/carbon/C = M - if(C.get_blood_id() == "blood") + if(C.get_blood_id() == "blood" && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type))) C.reagents.add_reagent("toxin", reac_volume * 0.5) else diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 2f2ef108ea..d4b8e165ee 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -65,6 +65,9 @@ /obj/item/reagent_containers/blood/lizard blood_type = "L" +/obj/item/reagent_containers/blood/universal + blood_type = "U" + /obj/item/reagent_containers/blood/empty name = "blood pack" icon_state = "empty" diff --git a/tgstation.dme b/tgstation.dme index 912f3cc89e..a07447e250 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1731,6 +1731,7 @@ #include "code\modules\mob\living\carbon\human\species_types\shadowpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\skeletons.dm" #include "code\modules\mob\living\carbon\human\species_types\synths.dm" +#include "code\modules\mob\living\carbon\human\species_types\vampire.dm" #include "code\modules\mob\living\carbon\human\species_types\zombies.dm" #include "code\modules\mob\living\carbon\monkey\combat.dm" #include "code\modules\mob\living\carbon\monkey\death.dm" From ef9c27ef0a6dbb46773cfbe89e398a9bc3209997 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 26 Oct 2017 11:59:57 -0500 Subject: [PATCH 13/48] Roundstart species pref fixes/removes redundant species config --- .../configuration/entries/game_options.dm | 4 + code/datums/datacore.dm | 3 +- .../abduction/machinery/experiment.dm | 2 +- code/game/machinery/computer/medical.dm | 6 +- code/game/machinery/computer/security.dm | 9 +- code/game/objects/items/crayons.dm | 6 +- code/modules/client/preferences.dm | 91 +++++++++---------- code/modules/client/preferences_savefile.dm | 6 ++ 8 files changed, 63 insertions(+), 64 deletions(-) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index f2c9cd3315..436c77131d 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -110,6 +110,7 @@ CONFIG_DEF(number/shuttle_refuel_delay) CONFIG_DEF(flag/show_game_type_odds) //if set this allows players to see the odds of each roundtype on the get revision screen +<<<<<<< HEAD CONFIG_DEF(flag/join_with_mutant_race) //players can choose their mutant race before joining the game CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go. If left undefined the game's roundstart var for species is used @@ -133,6 +134,9 @@ CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the ge value = old_val else first_edit = FALSE +======= +CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go. +>>>>>>> 360fbff... Fixes losing species preferences (#32093) CONFIG_DEF(flag/join_with_mutant_humans) //players can pick mutant bodyparts for humans before joining the game diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 5ed8dcf733..5f9cf3ad9a 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -224,8 +224,7 @@ G.fields["name"] = H.real_name G.fields["rank"] = assignment G.fields["age"] = H.age - if(CONFIG_GET(flag/join_with_mutant_race)) - G.fields["species"] = H.dna.species.name + G.fields["species"] = H.dna.species.name G.fields["fingerprint"] = md5(H.dna.uni_identity) G.fields["p_stat"] = "Active" G.fields["m_stat"] = "Stable" diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 99059e7a25..73a696fb3a 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -62,7 +62,7 @@ /obj/machinery/abductor/experiment/proc/dissection_icon(mob/living/carbon/human/H) var/icon/photo = null var/g = (H.gender == FEMALE) ? "f" : "m" - if(!CONFIG_GET(flag/join_with_mutant_race) || H.dna.species.use_skintones) + if(H.dna.species.use_skintones) photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]") else photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]") diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index f13cfe8c00..41b41e536e 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -123,8 +123,7 @@ dat += "ID:[active1.fields["id"]]" dat += "Sex: [active1.fields["sex"]] " dat += "Age: [active1.fields["age"]] " - if(CONFIG_GET(flag/join_with_mutant_race)) - dat += "Species: [active1.fields["species"]] " + dat += "Species: [active1.fields["species"]] " dat += "Fingerprint: [active1.fields["fingerprint"]] " dat += "Physical Status: [active1.fields["p_stat"]] " dat += "Mental Status: [active1.fields["m_stat"]] " @@ -538,8 +537,7 @@ P.info = "
Medical Record - (MR-[GLOB.data_core.medicalPrintCount])

" if(active1 in GLOB.data_core.general) P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"]) - if(CONFIG_GET(flag/join_with_mutant_race)) - P.info += "\nSpecies: [active1.fields["species"]]
" + P.info += "\nSpecies: [active1.fields["species"]]
" P.info += text("\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) else P.info += "General Record Lost!
" diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 8859522ed2..5bb5517dff 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -192,8 +192,7 @@ ID: [active1.fields["id"]]  Sex: [active1.fields["sex"]]  Age: [active1.fields["age"]] "} - if(CONFIG_GET(flag/join_with_mutant_race)) - dat += "Species: [active1.fields["species"]] " + dat += "Species: [active1.fields["species"]] " dat += {"Rank: [active1.fields["rank"]]  Fingerprint: [active1.fields["fingerprint"]]  Physical Status: [active1.fields["p_stat"]]  @@ -367,8 +366,7 @@ What a mess.*/ P.info = "
Security Record - (SR-[GLOB.data_core.securityPrintCount])

" if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1))) P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"]) - if(CONFIG_GET(flag/join_with_mutant_race)) - P.info += "\nSpecies: [active1.fields["species"]]
" + P.info += "\nSpecies: [active1.fields["species"]]
" P.info += text("\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"]) else P.info += "General Record Lost!
" @@ -513,8 +511,7 @@ What a mess.*/ G.fields["rank"] = "Unassigned" G.fields["sex"] = "Male" G.fields["age"] = "Unknown" - if(CONFIG_GET(flag/join_with_mutant_race)) - G.fields["species"] = "Human" + G.fields["species"] = "Human" G.fields["photo_front"] = new /icon() G.fields["photo_side"] = new /icon() G.fields["fingerprint"] = "?????" diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 1765ecf902..68e1826719 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -31,7 +31,7 @@ var/drawtype var/text_buffer = "" - var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","poseur tag") + var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","poseur tag","prolizard","antilizard") var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") var/list/numerals = list("0","1","2","3","4","5","6","7","8","9") var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer @@ -78,10 +78,6 @@ if(name == "crayon") name = "[item_color] crayon" - if(CONFIG_GET(flag/join_with_mutant_race)) - graffiti |= "antilizard" - graffiti |= "prolizard" - all_drawables = graffiti + letters + numerals + oriented + runes + graffiti_large_h drawtype = pick(all_drawables) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f72b1c7f3c..62243067f7 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -285,10 +285,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" - if(CONFIG_GET(flag/join_with_mutant_race)) //We don't allow mutant bodyparts for humans either unless this is true. - if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) + if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) - dat += "" + dat += "" - if("tail_lizard" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - if("snout" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - if("horns" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - if("frills" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - if("spines" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - if("body_markings" in pref_species.mutant_bodyparts) - dat += "" - if("legs" in pref_species.mutant_bodyparts) - dat += "" + if("legs" in pref_species.mutant_bodyparts) + dat += "" - dat += "" if(CONFIG_GET(flag/join_with_mutant_humans)) if("tail_human" in pref_species.mutant_bodyparts) @@ -1826,10 +1823,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.dna.features = features.Copy() //Flavor text is now a DNA feature character.dna.real_name = character.real_name var/datum/species/chosen_species - if(pref_species != /datum/species/human && CONFIG_GET(flag/join_with_mutant_race)) + if(pref_species.id in GLOB.roundstart_races) chosen_species = pref_species.type else chosen_species = /datum/species/human + pref_species = new /datum/species/human + save_character() character.set_species(chosen_species, icon_update=0) //citadel code diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index dddac1e506..2cb59f2c8e 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -294,6 +294,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Species var/species_id S["species"] >> species_id +<<<<<<< HEAD var/list/roundstart_races = CONFIG_GET(keyed_flag_list/roundstart_races) if(species_id && (species_id in roundstart_races) && CONFIG_GET(flag/join_with_mutant_race)) var/newtype = GLOB.species_list[species_id] @@ -302,6 +303,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/rando_race = pick(roundstart_races) if (rando_race) pref_species = new rando_race() +======= + if(species_id) + var/newtype = GLOB.species_list[species_id] + pref_species = new newtype() +>>>>>>> 360fbff... Fixes losing species preferences (#32093) if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000") WRITE_FILE(S["features["mcolor"]"] , "#FFF") From ea36d5944e3f201811b4f22562146ba816248ac6 Mon Sep 17 00:00:00 2001 From: Emmett Gaines Date: Fri, 27 Oct 2017 04:06:59 -0400 Subject: [PATCH 15/48] More radiation balance changes and fixes (#32051) * more balance changes and fixes * cleanup --- code/__DEFINES/radiation.dm | 39 +++++++-------- code/__HELPERS/radiation.dm | 36 +++++++------- code/controllers/subsystem/radiation.dm | 39 ++++++++++++++- code/datums/components/radioactive.dm | 8 ++-- code/datums/looping_sounds/item_sounds.dm | 37 ++++++++++++++ code/datums/looping_sounds/looping_sound.dm | 31 ++++++++---- code/datums/radiation_wave.dm | 14 ++++-- code/game/machinery/suit_storage_unit.dm | 5 +- .../objects/items/devices/geiger_counter.dm | 48 +++++-------------- code/modules/clothing/spacesuits/hardsuit.dm | 37 ++++++++++++-- code/modules/clothing/suits/utility.dm | 5 +- code/modules/mob/living/living.dm | 15 +++--- .../chemistry/reagents/medicine_reagents.dm | 4 +- tgstation.dme | 1 + 14 files changed, 213 insertions(+), 106 deletions(-) create mode 100644 code/datums/looping_sounds/item_sounds.dm diff --git a/code/__DEFINES/radiation.dm b/code/__DEFINES/radiation.dm index 196f3cc079..3e9731417a 100644 --- a/code/__DEFINES/radiation.dm +++ b/code/__DEFINES/radiation.dm @@ -6,29 +6,30 @@ Ask ninjanomnom if they're around #define RAD_BACKGROUND_RADIATION 9 // How much radiation is harmless to a mob, this is also when radiation waves stop spreading // WARNING: Lowering this value significantly increases SSradiation load -#define RAD_AMOUNT_LOW 50 -#define RAD_AMOUNT_MEDIUM 200 -#define RAD_AMOUNT_HIGH 500 -#define RAD_AMOUNT_EXTREME 1000 -// apply_effect(amount * RAD_MOB_COEFFICIENT, IRRADIATE, blocked) -#define RAD_MOB_COEFFICIENT 0.25 // Radiation applied is multiplied by this +// apply_effect((amount*RAD_MOB_COEFFICIENT)/max(1, (radiation**2)*RAD_OVERDOSE_REDUCTION), IRRADIATE, blocked) +#define RAD_MOB_COEFFICIENT 0.20 // Radiation applied is multiplied by this +#define RAD_MOB_SKIN_PROTECTION ((1/RAD_MOB_COEFFICIENT)+RAD_BACKGROUND_RADIATION) -#define RAD_LOSS_PER_TICK 1 +#define RAD_LOSS_PER_TICK 0.5 #define RAD_TOX_COEFFICIENT 0.05 // Toxin damage per tick coefficient +#define RAD_OVERDOSE_REDUCTION 0.000001 // Coefficient to the reduction in applied rads once the thing, usualy mob, has too much radiation + // WARNING: This number is highly sensitive to change, graph is first for best results +#define RAD_BURN_THRESHOLD 1000 // Applied radiation must be over this to burn -#define RAD_MOB_SAFE 300 // How much stored radiation in a mob with no ill effects +#define RAD_MOB_SAFE 500 // How much stored radiation in a mob with no ill effects + +#define RAD_MOB_HAIRLOSS 800 // How much stored radiation to check for hair loss + +#define RAD_MOB_MUTATE 1250 // How much stored radiation to check for mutation + +#define RAD_MOB_VOMIT 2000 // The amount of radiation to check for vomitting +#define RAD_MOB_VOMIT_PROB 1 // Chance per tick of vomitting #define RAD_MOB_KNOCKDOWN 2000 // How much stored radiation to check for stunning #define RAD_MOB_KNOCKDOWN_PROB 1 // Chance of knockdown per tick when over threshold #define RAD_MOB_KNOCKDOWN_AMOUNT 3 // Amount of knockdown when it occurs -#define RAD_MOB_VOMIT 1500 // The amount of radiation to check for vomitting -#define RAD_MOB_VOMIT_PROB 1 // Chance per tick of vomitting - -#define RAD_MOB_MUTATE 1000 // How much stored radiation to check for mutation -#define RAD_MOB_HAIRLOSS 500 // How much stored radiation to check for hair loss - #define RAD_NO_INSULATION 1.0 // For things that shouldn't become irradiated for whatever reason #define RAD_VERY_LIGHT_INSULATION 0.9 // What girders have #define RAD_LIGHT_INSULATION 0.8 @@ -39,10 +40,10 @@ Ask ninjanomnom if they're around // WARNING: The deines below could have disastrous consequences if tweaked incorrectly. See: The great SM purge of Oct.6.2017 // contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1/(steps*RAD_DISTANCE_COEFFICIENT), 1)) -// contamination_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT * min(1/(steps*RAD_DISTANCE_COEFFICIENT), 1) -#define RAD_MINIMUM_CONTAMINATION 300 // How strong does a radiation wave have to be to contaminate objects -#define RAD_CONTAMINATION_CHANCE_COEFFICIENT 0.0075 // Higher means higher strength scaling contamination chance -#define RAD_CONTAMINATION_STR_COEFFICIENT 0.5 // Higher means higher strength scaling contamination strength +// contamination_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT +#define RAD_MINIMUM_CONTAMINATION 350 // How strong does a radiation wave have to be to contaminate objects +#define RAD_CONTAMINATION_CHANCE_COEFFICIENT 0.005 // Higher means higher strength scaling contamination chance +#define RAD_CONTAMINATION_STR_COEFFICIENT 0.3 // Higher means higher strength scaling contamination strength #define RAD_DISTANCE_COEFFICIENT 1 // Lower means further rad spread -#define RAD_HALF_LIFE 150 // The half-life of contaminated objects \ No newline at end of file +#define RAD_HALF_LIFE 90 // The half-life of contaminated objects \ No newline at end of file diff --git a/code/__HELPERS/radiation.dm b/code/__HELPERS/radiation.dm index 7cd3a1bbeb..8418cc8505 100644 --- a/code/__HELPERS/radiation.dm +++ b/code/__HELPERS/radiation.dm @@ -1,28 +1,28 @@ -/proc/get_rad_contents(atom/location, list/output=list()) // A special GetAllContents that doesn't search past things with rad insulation - . = output - - if(!location) - return - - output += location - - var/datum/component/rad_insulation/insulation = location.GetComponent(/datum/component/rad_insulation) - if(insulation && insulation.protects) - return - - for(var/i in 1 to location.contents.len) - var/static/list/ignored_things = typecacheof(list( // These types will never have radiation applied to them or be looked inside of +// A special GetAllContents that doesn't search past things with rad insulation +// The protection var only protects the things inside from being affected. +// The protecting object itself will get returned still. +// The ignore list makes those objects never return at all +/proc/get_rad_contents(atom/location) + var/list/processing_list = list(location) + . = list() + while(processing_list.len) + var/static/list/ignored_things = typecacheof(list( /mob/dead, /mob/camera, /obj/effect, /obj/docking_port, - /atom/movable/lighting_object + /atom/movable/lighting_object, + /obj/item/projectile )) - - var/atom/thing = location.contents[i] + var/atom/thing = processing_list[1] + processing_list -= thing if(ignored_things[thing.type]) continue - get_rad_contents(thing, output) + . += thing + var/datum/component/rad_insulation/insulation = thing.GetComponent(/datum/component/rad_insulation) + if(insulation && insulation.protects) + continue + processing_list += thing.contents /proc/radiation_pulse(atom/source, intensity, range_modifier, log=FALSE, can_contaminate=TRUE) if(!SSradiation.can_fire) diff --git a/code/controllers/subsystem/radiation.dm b/code/controllers/subsystem/radiation.dm index 327d20732d..1dbe564169 100644 --- a/code/controllers/subsystem/radiation.dm +++ b/code/controllers/subsystem/radiation.dm @@ -1,4 +1,41 @@ PROCESSING_SUBSYSTEM_DEF(radiation) name = "Radiation" flags = SS_NO_INIT | SS_BACKGROUND - priority = 25 \ No newline at end of file + priority = 25 + + var/list/warned_atoms = list() + var/list/next_warn = list() + var/last_warn = 0 + +/datum/controller/subsystem/processing/radiation/proc/warn(datum/component/radioactive) + if(!radioactive || QDELETED(radioactive)) + return + if(warned_atoms["\ref[radioactive.parent]"]) + return + var/atom/master = radioactive.parent + SSblackbox.add_details("contaminated", "[master.type]") + next_warn["\ref[master]"] = "\ref[radioactive]" + var/wait_time = max(0, 500-(world.time-last_warn))+20 // wait at least 20 ticks, longer if we just messaged + addtimer(CALLBACK(src, .proc/send_warn), wait_time, TIMER_UNIQUE | TIMER_OVERRIDE) + +/datum/controller/subsystem/processing/radiation/proc/send_warn() + var/msg = "Atom(s) have become contaminated by radiation and are strong enough they could pass it on:" + var/still_alive = FALSE + var/list/next_warn = src.next_warn // It's free performance! + for(var/i in next_warn) + var/atom/parent = locate(i) + var/datum/component/radioactive/radioactive = locate(next_warn[i]) + if(!parent || !istype(parent) || !radioactive || !istype(radioactive)) + continue + if(!still_alive) + msg += "\n" + still_alive = TRUE + else + msg += ", " + msg += "[parent][ADMIN_VV(parent)]source:[radioactive.source]" + if(!still_alive) + return + warned_atoms += next_warn + src.next_warn = list() + last_warn = world.time + message_admins(msg) \ No newline at end of file diff --git a/code/datums/components/radioactive.dm b/code/datums/components/radioactive.dm index 1661056e8c..b0bf28f163 100644 --- a/code/datums/components/radioactive.dm +++ b/code/datums/components/radioactive.dm @@ -27,6 +27,9 @@ CRASH("Something that wasn't an atom was given /datum/component/radioactive") return + if(strength > RAD_MINIMUM_CONTAMINATION) + SSradiation.warn(src) + START_PROCESSING(SSradiation, src) /datum/component/radioactive/Destroy() @@ -34,9 +37,8 @@ return ..() /datum/component/radioactive/process() - radiation_pulse(parent,strength,1,FALSE,can_contaminate) - if(hl3_release_date && prob(50)) + radiation_pulse(parent, strength, RAD_DISTANCE_COEFFICIENT*2, FALSE, can_contaminate) strength -= strength / hl3_release_date if(strength <= RAD_BACKGROUND_RADIATION) qdel(src) @@ -48,7 +50,6 @@ return var/datum/component/radioactive/other = C strength = max(strength, other.strength) - return /datum/component/radioactive/proc/rad_examine(mob/user, atom/thing) var/atom/master = parent @@ -69,6 +70,7 @@ /datum/component/radioactive/proc/rad_attack(atom/movable/target, mob/living/user) radiation_pulse(parent, strength/20) target.rad_act(strength/2) + strength -= strength / hl3_release_date #undef RAD_AMOUNT_LOW #undef RAD_AMOUNT_MEDIUM diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm new file mode 100644 index 0000000000..2eb897bc13 --- /dev/null +++ b/code/datums/looping_sounds/item_sounds.dm @@ -0,0 +1,37 @@ +#define RAD_GEIGER_LOW 100 // Geiger counter sound thresholds +#define RAD_GEIGER_MEDIUM 500 +#define RAD_GEIGER_HIGH 1000 + +/datum/looping_sound/geiger + mid_sounds = list( + list('sound/items/geiger/low1.ogg'=1, 'sound/items/geiger/low2.ogg'=1, 'sound/items/geiger/low3.ogg'=1, 'sound/items/geiger/low4.ogg'=1), + list('sound/items/geiger/med1.ogg'=1, 'sound/items/geiger/med2.ogg'=1, 'sound/items/geiger/med3.ogg'=1, 'sound/items/geiger/med4.ogg'=1), + list('sound/items/geiger/high1.ogg'=1, 'sound/items/geiger/high2.ogg'=1, 'sound/items/geiger/high3.ogg'=1, 'sound/items/geiger/high4.ogg'=1), + list('sound/items/geiger/ext1.ogg'=1, 'sound/items/geiger/ext2.ogg'=1, 'sound/items/geiger/ext3.ogg'=1, 'sound/items/geiger/ext4.ogg'=1) + ) + mid_length = 2 + volume = 25 + var/last_radiation + +/datum/looping_sound/geiger/get_sound(looped) + var/danger + switch(last_radiation) + if(RAD_BACKGROUND_RADIATION to RAD_GEIGER_LOW) + danger = 1 + if(RAD_GEIGER_LOW to RAD_GEIGER_MEDIUM) + danger = 2 + if(RAD_GEIGER_MEDIUM to RAD_GEIGER_HIGH) + danger = 3 + if(RAD_GEIGER_HIGH to INFINITY) + danger = 4 + else + return null + return ..(looped, mid_sounds[danger]) + +/datum/looping_sound/geiger/stop() + . = ..() + last_radiation = 0 + +#undef RAD_GEIGER_LOW +#undef RAD_GEIGER_MEDIUM +#undef RAD_GEIGER_HIGH \ No newline at end of file diff --git a/code/datums/looping_sounds/looping_sound.dm b/code/datums/looping_sounds/looping_sound.dm index 2374da67b4..aed7c3ace8 100644 --- a/code/datums/looping_sounds/looping_sound.dm +++ b/code/datums/looping_sounds/looping_sound.dm @@ -1,5 +1,5 @@ /* - list/atom/output_atoms + output_atoms (list of atoms) The destination(s) for the sounds mid_sounds (list or soundfile) Since this can be either a list or a single soundfile you can have random sounds. May contain further lists but must contain a soundfile at the end. mid_length (num) The length to wait between playing mid_sounds @@ -13,6 +13,7 @@ volume (num) Sound output volume muted (bool) Private. Used to stop the sound loop. max_loops (num) The max amount of loops to run for. + direct (bool) If true plays directly to provided atoms instead of from them */ /datum/looping_sound var/list/atom/output_atoms @@ -22,19 +23,18 @@ var/start_length var/end_sound var/chance - var/volume + var/volume = 100 var/muted = TRUE var/max_loops + var/direct -/datum/looping_sound/New(list/_output_atoms, start_immediately=FALSE) +/datum/looping_sound/New(list/_output_atoms=list(), start_immediately=FALSE, _direct=FALSE) if(!mid_sounds) WARNING("A looping sound datum was created without sounds to play.") return - if(_output_atoms) - output_atoms = _output_atoms - else - output_atoms = list() + output_atoms = _output_atoms + direct = _direct if(start_immediately) start() @@ -44,13 +44,17 @@ output_atoms = null return ..() -/datum/looping_sound/proc/start() +/datum/looping_sound/proc/start(atom/add_thing) + if(add_thing) + output_atoms |= add_thing if(!muted) return muted = FALSE on_start() -/datum/looping_sound/proc/stop() +/datum/looping_sound/proc/stop(atom/remove_thing) + if(remove_thing) + output_atoms -= remove_thing if(muted) return muted = TRUE @@ -65,9 +69,16 @@ /datum/looping_sound/proc/play(soundfile) var/list/atoms_cache = output_atoms + var/sound/S = sound(soundfile) + if(direct) + S.channel = open_sound_channel() + S.volume = volume for(var/i in 1 to atoms_cache.len) var/atom/thing = atoms_cache[i] - playsound(thing, soundfile, volume) + if(direct) + SEND_SOUND(thing, S) + else + playsound(thing, S, volume) /datum/looping_sound/proc/get_sound(looped, _mid_sounds) if(!_mid_sounds) diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm index 5a02997b00..ffc6b75fcb 100644 --- a/code/datums/radiation_wave.dm +++ b/code/datums/radiation_wave.dm @@ -89,18 +89,24 @@ continue thing.rad_act(strength) - var/static/list/blacklisted = typecacheof(list( //These types will never be contaminated + // This list should only be for types which don't get contaminated but you want to look in their contents + // If you don't want to look in their contents and you don't want to rad_act them: + // modify the ignored_things list in __HELPERS/radiation.dm instead + var/static/list/blacklisted = typecacheof(list( /turf, /mob, /obj/structure/cable, - /obj/machinery/atmospherics + /obj/machinery/atmospherics, + /obj/item/ammo_casing, + /obj/item/implant )) if(!can_contaminate || blacklisted[thing.type]) continue - if(prob((strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1/(steps*range_modifier), 1))) // Only stronk rads get to have little baby rads + var/contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1, 1/(steps*range_modifier)) + if(prob(contamination_chance)) // Only stronk rads get to have little baby rads var/datum/component/rad_insulation/insulation = thing.GetComponent(/datum/component/rad_insulation) if(insulation && insulation.contamination_proof) continue else - var/rad_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT * min(1/(steps*range_modifier), 1) + var/rad_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT thing.AddComponent(/datum/component/radioactive, rad_strength, source) \ No newline at end of file diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 0854e63e5b..d3825b9afe 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -210,7 +210,7 @@ mob_occupant.adjustFireLoss(rand(20, 36)) else mob_occupant.adjustFireLoss(rand(10, 16)) - mob_occupant.emote("scream") + mob_occupant.emote("scream") addtimer(CALLBACK(src, .proc/cook), 50) else uv_cycles = initial(uv_cycles) @@ -238,6 +238,9 @@ for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected I.clean_blood() I.fingerprints = list() + var/datum/component/radioactive/contamination = I.GetComponent(/datum/component/radioactive) + if(contamination) + qdel(contamination) open_machine(FALSE) if(occupant) dump_contents() diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 92b76e0f6e..03e4ff123a 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -19,15 +19,8 @@ slot_flags = SLOT_BELT materials = list(MAT_METAL = 150, MAT_GLASS = 150) - var/muted = TRUE - var/danger = 0 var/grace = RAD_GRACE_PERIOD - var/static/list/sounds = list( //hah, static. get it? - list('sound/items/geiger/low1.ogg'=1, 'sound/items/geiger/low2.ogg'=1, 'sound/items/geiger/low3.ogg'=1, 'sound/items/geiger/low4.ogg'=1), - list('sound/items/geiger/med1.ogg'=1, 'sound/items/geiger/med2.ogg'=1, 'sound/items/geiger/med3.ogg'=1, 'sound/items/geiger/med4.ogg'=1), - list('sound/items/geiger/high1.ogg'=1, 'sound/items/geiger/high2.ogg'=1, 'sound/items/geiger/high3.ogg'=1, 'sound/items/geiger/high4.ogg'=1), - list('sound/items/geiger/ext1.ogg'=1, 'sound/items/geiger/ext2.ogg'=1, 'sound/items/geiger/ext3.ogg'=1, 'sound/items/geiger/ext4.ogg'=1) - ) + var/datum/looping_sound/geiger/soundloop var/scanning = FALSE var/radiation_count = 0 @@ -40,7 +33,7 @@ . = ..() START_PROCESSING(SSobj, src) - soundLoop() + soundloop = new(list(src), FALSE) /obj/item/device/geiger_counter/Destroy() STOP_PROCESSING(SSobj, src) @@ -48,6 +41,7 @@ /obj/item/device/geiger_counter/process() update_icon() + update_sound() if(!scanning) current_tick_amount = 0 @@ -64,8 +58,6 @@ grace-- if(grace <= 0) radiation_count = 0 - - update_sound() current_tick_amount = 0 @@ -116,28 +108,15 @@ ..() /obj/item/device/geiger_counter/proc/update_sound() - switch(radiation_count) - if(RAD_BACKGROUND_RADIATION to RAD_LEVEL_MODERATE) - danger = 1 - if(RAD_LEVEL_MODERATE to RAD_LEVEL_VERY_HIGH) - danger = 2 - if(RAD_LEVEL_VERY_HIGH to RAD_LEVEL_CRITICAL) - danger = 3 - if(RAD_LEVEL_CRITICAL to INFINITY) - danger = 4 - else - danger = 0 - if(!danger) - muted = TRUE - else if(muted) - muted = FALSE - soundLoop() - -/obj/item/device/geiger_counter/proc/soundLoop() - if(muted || !danger) + var/datum/looping_sound/geiger/loop = soundloop + if(!scanning) + loop.stop() return - playsound(src, pickweight(sounds[danger]), 25) - addtimer(CALLBACK(src, .proc/soundLoop), 2) + if(!radiation_count) + loop.stop() + return + loop.last_radiation = radiation_count + loop.start() /obj/item/device/geiger_counter/rad_act(amount) if(amount <= RAD_BACKGROUND_RADIATION || !scanning) @@ -147,11 +126,6 @@ /obj/item/device/geiger_counter/attack_self(mob/user) scanning = !scanning - if(!scanning) - muted = TRUE - else - muted = FALSE - soundLoop() update_icon() to_chat(user, "[icon2html(src, user)] You switch [scanning ? "on" : "off"] [src].") diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index a604eae015..75a63352e2 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -13,6 +13,20 @@ item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite) actions_types = list(/datum/action/item_action/toggle_helmet_light) + var/rad_count = 0 + var/rad_record = 0 + var/grace_count = 0 + var/datum/looping_sound/geiger/soundloop + +/obj/item/clothing/head/helmet/space/hardsuit/Initialize() + . = ..() + soundloop = new(list(), FALSE, TRUE) + soundloop.volume = 5 + START_PROCESSING(SSobj, src) + +/obj/item/clothing/head/helmet/space/hardsuit/Destroy() + . = ..() + STOP_PROCESSING(SSobj, src) /obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user) on = !on @@ -31,6 +45,7 @@ ..() if(suit) suit.RemoveHelmet() + soundloop.stop(user) /obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot) if(slot == slot_head) @@ -41,8 +56,11 @@ if(slot != slot_head) if(suit) suit.RemoveHelmet() + soundloop.stop(user) else qdel(src) + else + soundloop.start(user) /obj/item/clothing/head/helmet/space/hardsuit/proc/display_visor_message(var/msg) var/mob/wearer = loc @@ -50,9 +68,22 @@ wearer.show_message("[icon2html(src, wearer)][msg]", 1) /obj/item/clothing/head/helmet/space/hardsuit/rad_act(severity) - ..() - if(severity > RAD_AMOUNT_EXTREME) - display_visor_message("Radiation pulse detected! Magnitude: [severity] RADs.") + . = ..() + rad_count += severity + +/obj/item/clothing/head/helmet/space/hardsuit/process() + if(!rad_count) + grace_count++ + if(grace_count == 2) + soundloop.last_radiation = 0 + return + + grace_count = 0 + rad_record -= rad_record/5 + rad_record += rad_count/5 + rad_count = 0 + + soundloop.last_radiation = rad_record /obj/item/clothing/head/helmet/space/hardsuit/emp_act(severity) ..() diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 38fbe299f5..c70c4f341c 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -112,8 +112,9 @@ item_state = "bombsuit_white" /* - * Radiation protection - */ +* Radiation protection +*/ + /obj/item/clothing/head/radiation name = "radiation hood" icon_state = "rad" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 87092e580c..0cdcd90e61 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -898,14 +898,17 @@ to_chat(G, "Your summoner has changed form!") /mob/living/rad_act(amount) - amount = max(amount-RAD_BACKGROUND_RADIATION, 0) + if(!amount || amount < RAD_MOB_SKIN_PROTECTION) + return - if(amount) - var/blocked = getarmor(null, "rad") + amount -= RAD_BACKGROUND_RADIATION // This will always be at least 1 because of how skin protection is calculated - apply_effect(amount * RAD_MOB_COEFFICIENT, IRRADIATE, blocked) - if(amount > RAD_AMOUNT_EXTREME) - apply_damage((amount-RAD_AMOUNT_EXTREME)/RAD_AMOUNT_EXTREME, BURN, null, blocked) + var/blocked = getarmor(null, "rad") + + if(amount > RAD_BURN_THRESHOLD) + apply_damage((amount-RAD_BURN_THRESHOLD)/RAD_BURN_THRESHOLD, BURN, null, blocked) + + apply_effect((amount*RAD_MOB_COEFFICIENT)/max(1, (radiation**2)*RAD_OVERDOSE_REDUCTION), IRRADIATE, blocked) /mob/living/proc/fakefireextinguish() return diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index b83e651eda..716f8a70aa 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -454,7 +454,7 @@ /datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/M) if(M.radiation > 0) - M.radiation -= min(M.radiation, 4) + M.radiation -= min(M.radiation, 8) ..() /datum/reagent/medicine/pen_acid @@ -466,7 +466,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM /datum/reagent/medicine/pen_acid/on_mob_life(mob/living/M) - M.radiation -= max(M.radiation-RAD_MOB_SAFE, 0)/100 + M.radiation -= max(M.radiation-RAD_MOB_SAFE, 0)/50 M.adjustToxLoss(-2*REM, 0) for(var/datum/reagent/R in M.reagents.reagent_list) if(R != src) diff --git a/tgstation.dme b/tgstation.dme index 912f3cc89e..e803290298 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -377,6 +377,7 @@ #include "code\datums\helper_datums\icon_snapshot.dm" #include "code\datums\helper_datums\teleport.dm" #include "code\datums\helper_datums\topic_input.dm" +#include "code\datums\looping_sounds\item_sounds.dm" #include "code\datums\looping_sounds\looping_sound.dm" #include "code\datums\looping_sounds\machinery_sounds.dm" #include "code\datums\martial\boxing.dm" From 1110cca5422f7755470578337f7fd13755db784e Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Fri, 27 Oct 2017 02:46:39 -0700 Subject: [PATCH 17/48] Fixes motion runtimes from deleted targets (#32121) --- code/game/machinery/camera/motion.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index f26b60202e..6ac7e1249d 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -17,7 +17,7 @@ else if (detectTime == -1) for (var/targetref in getTargetList()) var/mob/target = locate(targetref) in GLOB.mob_list - if (target.stat == DEAD || QDELETED(target) || (!area_motion && !in_range(src, target))) + if (QDELETED(target) || target.stat == DEAD || (!area_motion && !in_range(src, target))) //If not part of a monitored area and the camera is not in range or the target is dead lostTarget(target) From 7811507f1aa9ef9b287c47c220f795dd91d1ca71 Mon Sep 17 00:00:00 2001 From: JamieH Date: Fri, 27 Oct 2017 10:51:18 +0100 Subject: [PATCH 19/48] Add a safety check to buildmode, also fix a bug with corner selection (#32009) * Update buildmode.dm * Add files via upload * Update buildmode.dm * Update buildmode.dm --- code/modules/admin/verbs/buildmode.dm | 35 ++++++++++++++++++++------ icons/turf/overlays.dmi | Bin 5978 -> 6131 bytes 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 2a95fd7803..7789fe4a47 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -82,6 +82,7 @@ var/valueholder = "derp" var/objholder = /obj/structure/closet var/atom/movable/stored = null + var/list/preview = list() /datum/buildmode/New(client/c) create_buttons() @@ -94,6 +95,8 @@ holder.screen -= buttons holder.click_intercept = null holder.show_popup_menus = 1 + usr.client.images -= preview + preview.Cut() qdel(src) return @@ -150,6 +153,7 @@ if(AREA_BUILDMODE) dat += "***********************************************************" dat += "Left Mouse Button on turf/obj/mob = Select corner" + dat += "Right Mouse Button on turf/obj/mob = Reset corner selection" dat += "Right Mouse Button on buildmode button = Select generator" dat += "***********************************************************" if(COPY_BUILDMODE) @@ -338,13 +342,20 @@ throw_atom.throw_at(object, 10, 1,user) log_admin("Build Mode: [key_name(user)] threw [throw_atom] at [object] ([object.x],[object.y],[object.z])") if(AREA_BUILDMODE) - if(!cornerA) - cornerA = get_turf(object) - return - if(cornerA && !cornerB) - cornerB = get_turf(object) - if(left_click) //rectangular + if(!cornerA) + cornerA = get_turf(object) + preview += image('icons/turf/overlays.dmi',cornerA,"greenOverlay") + usr.client.images -= preview + usr.client.images += preview + return + if(cornerA && !cornerB) + cornerB = get_turf(object) + preview += image('icons/turf/overlays.dmi',cornerB,"blueOverlay") + usr.client.images -= preview + usr.client.images += preview + to_chat(user, "Region selected, if you're happy with your selection left click again, otherwise right click.") + return if(cornerA && cornerB) if(!generator_path) to_chat(user, "Select generator type first.") @@ -354,10 +365,18 @@ if(GLOB.reloading_map) to_chat(user, "You are already reloading an area! Please wait for it to fully finish loading before trying to load another!") return - G.defineRegion(cornerA,cornerB,1) - G.generate() + G.defineRegion(cornerA, cornerB, 1) + for(var/t in G.map) + preview += image('icons/turf/overlays.dmi', t ,"redOverlay") + usr.client.images -= preview + usr.client.images += preview + var/confirm = alert("Are you sure you want run the map generator?", "Run generator", "Yes", "No") + if(confirm == "Yes") + G.generate() cornerA = null cornerB = null + usr.client.images -= preview + preview.Cut() return //Something wrong - Reset cornerA = null diff --git a/icons/turf/overlays.dmi b/icons/turf/overlays.dmi index 34819bdca92e3a73ec0acbf07181e50c3a29b910..c1867fb12f0e51342290655213d81eb5635f6b4a 100644 GIT binary patch literal 6131 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

JzcWP^!)P6FTVvywYRqqmP(~3 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 Date: Fri, 27 Oct 2017 02:56:34 -0700 Subject: [PATCH 21/48] Find references fix. (#32022) * Find references fix. Made it go from taking years to hours Removed Datum based recursion, this was unneeded. Fixed it calling a proc for what ended up being a costly noop millions of times (this was a moderate speed up as it would call DoSearchVar on every fucking number or string or null in a things vars list.) Fixed it calling itself on the vars list. luckily it only checked keys, so this didn't stack overflow. I'm intentionally leaving the debugging stuff in right now so that its on the record somewhere. I'll remove that when I pr line by line profiling as its own separate thing * Remove debugging stuff * i forgot --- code/__HELPERS/cmp.dm | 1 + code/_compile_options.dm | 11 ++++- code/controllers/subsystem/garbage.dm | 63 +++++++++++++++++---------- 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 1c9c33f21a..f7b0f726d3 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -58,3 +58,4 @@ GLOBAL_VAR_INIT(cmp_field, "name") . = B.failures - A.failures if (!.) . = B.qdels - A.qdels + diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 1c1ad2e692..1f20614c17 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -5,8 +5,10 @@ #ifdef TESTING //#define GC_FAILURE_HARD_LOOKUP //makes paths that fail to GC call find_references before del'ing. - //Also allows for recursive reference searching of datums. - //Sets world.loop_checks to false and prevents find references from sleeping + //implies FIND_REF_NO_CHECK_TICK + +//#define FIND_REF_NO_CHECK_TICK //Sets world.loop_checks to false and prevents find references from sleeping + //#define VISUALIZE_ACTIVE_TURFS //Highlights atmos active turfs in green #endif @@ -58,6 +60,11 @@ #warn compiling in TESTING mode. testing() debug messages will be visible. #endif + +#ifdef GC_FAILURE_HARD_LOOKUP +#define FIND_REF_NO_CHECK_TICK +#endif + #ifdef TRAVISTESTING #define TESTING #endif diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 689ff83935..ccfc041b21 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -362,9 +362,17 @@ SUBSYSTEM_DEF(garbage) testing("Beginning search for references to a [type].") last_find_references = world.time - DoSearchVar(GLOB) - for(var/datum/thing in world) - DoSearchVar(thing, "WorldRef: [thing]") + + DoSearchVar(GLOB) //globals + for(var/datum/thing in world) //atoms (don't beleive it's lies) + DoSearchVar(thing, "World -> [thing]") + + for (var/datum/thing) //datums + DoSearchVar(thing, "World -> [thing]") + + for (var/client/thing) //clients + DoSearchVar(thing, "World -> [thing]") + testing("Completed search for references to a [type].") if(usr && usr.client) usr.client.running_find_references = null @@ -384,35 +392,44 @@ SUBSYSTEM_DEF(garbage) if(!running_find_references) find_references(TRUE) -/datum/proc/DoSearchVar(X, Xname) +/datum/proc/DoSearchVar(X, Xname, recursive_limit = 64) if(usr && usr.client && !usr.client.running_find_references) return + if (!recursive_limit) + return + if(istype(X, /datum)) var/datum/D = X if(D.last_find_references == last_find_references) return + D.last_find_references = last_find_references - for(var/V in D.vars) - for(var/varname in D.vars) - var/variable = D.vars[varname] - if(variable == src) - testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. [Xname]") - else if(islist(variable)) - if(src in variable) - testing("Found [src.type] \ref[src] in [D.type]'s [varname] list var. Global: [Xname]") -#ifdef GC_FAILURE_HARD_LOOKUP - for(var/I in variable) - DoSearchVar(I, TRUE) - else - DoSearchVar(variable, "[Xname]: [varname]") -#endif + var/list/L = D.vars + + for(var/varname in L) + if (varname == "vars") + continue + var/variable = L[varname] + + if(variable == src) + testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. [Xname]") + + else if(islist(variable)) + DoSearchVar(variable, "[Xname] -> list", recursive_limit-1) + else if(islist(X)) - if(src in X) - testing("Found [src.type] \ref[src] in list [Xname].") -#ifdef GC_FAILURE_HARD_LOOKUP + var/normal = IS_NORMAL_LIST(X) for(var/I in X) - DoSearchVar(I, Xname + ": list") -#else + if (I == src) + testing("Found [src.type] \ref[src] in list [Xname].") + + else if (I && !isnum(I) && normal && X[I] == src) + testing("Found [src.type] \ref[src] in list [Xname]\[[I]\]") + + else if (islist(I)) + DoSearchVar(I, "[Xname] -> list", recursive_limit-1) + +#ifndef FIND_REF_NO_CHECK_TICK CHECK_TICK #endif From df370b069293ab3f974f4b23e52984386f881450 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 27 Oct 2017 15:32:00 -0500 Subject: [PATCH 23/48] Update build_tools.sh --- tools/travis/build_tools.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tools/travis/build_tools.sh b/tools/travis/build_tools.sh index b3409209af..193ad261a6 100755 --- a/tools/travis/build_tools.sh +++ b/tools/travis/build_tools.sh @@ -7,12 +7,8 @@ if [ "$BUILD_TOOLS" = true ]; then md5sum -c - <<< "49bc6b1b9ed56c83cceb6674bd97cb34 *html/changelogs/example.yml"; cd tgui && source ~/.nvm/nvm.sh && gulp && cd ..; -<<<<<<< HEAD - php5.6 -l tools/WebhookProcessor/github_webhook_processor.php; -======= phpenv global 5.6 php -l tools/WebhookProcessor/github_webhook_processor.php; php -l tools/TGUICompiler.php; ->>>>>>> 9b71dcb... Merge pull request #32050 from optimumtact/ripandtearthehugeguts python tools/ss13_genchangelog.py html/changelog.html html/changelogs; fi; From 12d336cbf0f970ce602f25a430236b6c3a0ae916 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 27 Oct 2017 15:32:15 -0500 Subject: [PATCH 24/48] Update halloween.dm --- code/modules/events/holiday/halloween.dm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index 2b8bac0c39..f83024bd3d 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -10,17 +10,8 @@ ..() for(var/mob/living/carbon/human/H in GLOB.mob_list) var/obj/item/storage/backpack/b = locate() in H.contents -<<<<<<< HEAD - new /obj/item/storage/spooky(b) - if(ishuman(H) || islizard(H)) - if(prob(50)) - H.set_species(/datum/species/skeleton) - else - H.set_species(/datum/species/zombie) -======= if(b) new /obj/item/storage/spooky(b) ->>>>>>> 00396d0... Halloween Tweaks (#32087) for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_list) Ian.place_on_head(new /obj/item/bedsheet(Ian)) From 39f683ab8d98786054137b591a890dcb31a50558 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 27 Oct 2017 15:32:38 -0500 Subject: [PATCH 25/48] Update meteor_wave.dm --- code/modules/events/meteor_wave.dm | 71 ------------------------------ 1 file changed, 71 deletions(-) diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm index bdbfd2e6b6..7940eaeec8 100644 --- a/code/modules/events/meteor_wave.dm +++ b/code/modules/events/meteor_wave.dm @@ -1,73 +1,3 @@ -<<<<<<< HEAD -// Normal strength - -/datum/round_event_control/meteor_wave - name = "Meteor Wave: Normal" - typepath = /datum/round_event/meteor_wave - weight = 4 - min_players = 5 - max_occurrences = 3 - -/datum/round_event/meteor_wave - startWhen = 6 - endWhen = 66 - announceWhen = 1 - var/list/wave_type - var/wave_name = "normal" - -/datum/round_event/meteor_wave/New() - ..() - if(!wave_type) - determine_wave_type() - -/datum/round_event/meteor_wave/proc/determine_wave_type() - if(!wave_name) - wave_name = pickweight(list( - "normal" = 50, - "threatening" = 40, - "catastrophic" = 10)) - switch(wave_name) - if("normal") - wave_type = GLOB.meteors_normal - if("threatening") - wave_type = GLOB.meteors_threatening - if("catastrophic") - wave_type = GLOB.meteors_catastrophic - if("meaty") - wave_type = GLOB.meteorsB - if("space dust") - wave_type = GLOB.meteorsC - else - WARNING("Wave name of [wave_name] not recognised.") - kill() - -/datum/round_event/meteor_wave/announce() - priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/ai/meteors.ogg') - -/datum/round_event/meteor_wave/tick() - if(IsMultiple(activeFor, 3)) - spawn_meteors(5, wave_type) //meteor list types defined in gamemode/meteor/meteors.dm - -/datum/round_event_control/meteor_wave/threatening - name = "Meteor Wave: Threatening" - typepath = /datum/round_event/meteor_wave/threatening - weight = 2 - min_players = 5 - max_occurrences = 3 - -/datum/round_event/meteor_wave/threatening - wave_name = "threatening" - -/datum/round_event_control/meteor_wave/catastrophic - name = "Meteor Wave: Catastrophic" - typepath = /datum/round_event/meteor_wave/catastrophic - weight = 1 - min_players = 5 - max_occurrences = 3 - -/datum/round_event/meteor_wave/catastrophic - wave_name = "catastrophic" -======= // Normal strength /datum/round_event_control/meteor_wave @@ -140,4 +70,3 @@ /datum/round_event/meteor_wave/catastrophic wave_name = "catastrophic" ->>>>>>> 00396d0... Halloween Tweaks (#32087) From 0a32eb31628776e09102fed62e463bcd3a20f4cb Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 27 Oct 2017 15:33:23 -0500 Subject: [PATCH 26/48] Automatic changelog generation for PR #3630 [ci skip] --- html/changelogs/AutoChangeLog-pr-3630.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3630.yml diff --git a/html/changelogs/AutoChangeLog-pr-3630.yml b/html/changelogs/AutoChangeLog-pr-3630.yml new file mode 100644 index 0000000000..0c69e04f40 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3630.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Admins are now able to mark open tickets as being handled. This makes it easier for staff members to provide feedback to players reporting issues via the admin help button." From 36f1aebdb5ed22e6bedc0431cdc2b0d0e4f73781 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 27 Oct 2017 17:23:44 -0400 Subject: [PATCH 27/48] hard sync of sprites files missing in #3606 --- icons/obj/items_and_weapons.dmi | Bin 151700 -> 114381 bytes icons/obj/power.dmi | Bin 36770 -> 35925 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi index b5ac65c2a84127f26b4c1fc44c975b382957bb37..636d895450b560fe6999d32d157b764ac11adf72 100644 GIT binary patch literal 114381 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

|S5$9)^ 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 literal 151700 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

AIEmWS3RP+;yl|eI`|F#9O9}#!gwN*foKJ*N zGHt|juLnPCzDMu`L2(XI)(jof!Hd} zf2Fo^O&U+r7U7qBveH3!GNx@Cz^a-WMTyW|Z;uF+kwQLIROkb$s;l>*^Z8Z@-0S~1 zlk&siwefs0y1*u_4pHJcn%>i}bC{1*Se+*B@VCMK;yo(~LwfM?w@B)za?idP^YR(< z;xfm?#i5g8nqs1%Glwz(w7O7gD@1&L5)G1zXD@T#_sNC--Zr;J+vS4tT?FU443s0+ zq6Q11e}CUrut>>4m#@bXoZ=Q81361y@HoX8cNtklU9g@E$_Uo=>T#RJ0_~=k)igu- z3i$`wf%Vc89OT85=^m}W!sV6Kk+KZ@Uq9SQ2VL<@R^-(t~daj zx3{>Sp=BbPx;n`#(mH;Afc#aKCq6>kl{EDA&Q6YuDy4NVKUC7W=wSeQ?KasU@${8` zDzJ7oPUh~K*%U7+F>xS++t7uLt!>_MQz;w9LBBlBDg-4KEl_#jH(~Y~iJ;EQ32)9+ z^%~;UEmf|(MU|o#{qq?A5jW{&qr_^tc1&c*tps7BCaOsHP9Hu5-5_>)XjK{UDffFc|fpbd3(M1ZOyvL}G!HL*Ve z_$y}kFyvvuUlK{Bga+UwZegqJ*N1 zZDfOP(tYxS(3dl>~%yLpdZTKkOTFtSvCmTIB-bmySAbyh4GbWfC*uW zh9U@m*+baKP0w02k^j+N>{(TvC+5QfN=xG4M`>mKzLX4#0!bfybW$b_fwq-g4|R$S z?{+42GL*ZF1$Wle;FEJ`0RTtKt;F2i+@tm#1vWh`1 zW-3ab53^pPN;&oQ_0it1ho0ijo}#sywQG3lj`T;% z_hbTn#&4V{sd(_u!}uNJKy<19)k>^(e?6M$pWS4P(Uua#mb}v}uf!720AH3oN#wsY2?{JN01xL`6t(zg z^L)D~-te4fqP!l(qBJL+nziZa)Bvg`a&vR*HT#g8%ajdPa&}%SEtUUSUqIlo;6~wh zdko1v@CZp2FvD@LUq25RyvyccgWGIbn)>$f)Oa=x!O^!K7zgf( zD?va1%jr;pqB=y&5E+EEjk_^!sRAryg%5ju`YhNh4_8Kf#gadhS^8Gfk(uJIWVPV` z_TCjW=@A8A4m5d5HJOhD@XpnwkV?6-VyK@@->xY)|GZpGm&$gpp@W{CP7z~n9cTYi zZ=8$UJ35=^kSu9<*#>z?4L=hc)FlsZu#TGM>apMQ3Q=VNpi*%{Bh zGJYp=Ktw;xr0yx4<%Z*y3FspZjFENu)w*L~A38=b%dSf}zDkf)s)HKDKYR7%bJ9jt zl`yT0A1&ZV@2#$$Bp1t~1Gek=qjGO^bMvpt^j^Wxqh9XNzM92D{m#G$VDWHHmVAs_ z?TRyN4<{A#yAi|Ss8Nol47@zv@TO%@AIK(`#|t-b@KP;N#QICDeY~)yINN zVC$@Kj05q^$eU?a$S`}6W~9Q?{Y<=U{?G@$|% z1H4|h@Cg?=)iNb*bnkJnPcCYj_mQOY%jxGSMY}Al;+PD3Vj_y+S8+=$VDl)d5}3h6bVES!Kq-au@^W9FW^BA+cLFljCZAyc#E?N$<5rYE$Jy zLyAr|aL^W<+kYk^+13+IO0Tr8>m6OH?!}l|R?#oQhkuq7QS+fVJTf+P!1CMN@?d9W z0ta~?Yb3xrQ4m}T2??qC@dKc4nOj=qROF1l2K=t@fd2DN*1i$wp4u+gMPLKsnn#yG zDumUOVSt-q^2Kr1!KUgoF{Cw+VQm%HE4O?F-VMp!urg~G^{SQh;I+)eS%DU74vW02#IiH+BhK_Hhj~u-@p8g@#N0sO?nA&#pLzu7l+^xe1VDt&>%Yb?wT4F;sp& z4O~6&=^ydT*oDVN$|nxswAh3&;*qRLHk;I71$Uc00W{)%_4X?h6DB$dSB|s&g{aldI#h8&@J)ucwE|qqa};mxP)` zn$3SrlC!X*7LRrwxI4k@I#@gnBahg?$;ujETC%JUodQ%9Jdt5Rp_#~j zbMDk&EV~0%e(SuXF+McSWzQz6|>O7qj;wCrp* z-k-0dmt6ExmhN$Pb;ZE=byiX?O`x$sJv{D89}~0TSW=F!p`r2pyQ(jr#n{70yIwic z95yVY*ZdD4e)ak@2uC2}agiur=whV2b(*o0fn}4C08Zt4vzYPK zO46wZJ+JSe55*+#GIHdKj0_i|vI1=K9MuuCBM{0p{rV%2iJ5-1t`PSqLE>KxA( z*fldTFw`N^bQq3H&4Iiw-z&_fF$Q616p~3x={H`j_b;-5IPB}*b~1U!_s`1e=a|c` zT;u{2{}`t1-*%~5o;2GcW@MvdA+Lsp+gbZs)~*)~O5_(@N>?^(a2@A{_J{u>GAx>0 zl5Yqwq*g>(*-SO(n;j;6&ULF(P9yS31w8RdGA39!{Y#F#S@NmJTUn%}dC9{Hm8z=$ zazBSZU6s|qPjM1shK%n-)P`h0s~C(Q#Tvc)xE%AfXsO5RIB`w}wWZ~|kChnhS?V1~ z%S#HN)Yk6!qwnO}u7PjrsxbDccv&L8)Ke^wDwV4dUbIJ$mD|sWSY)ugVth>UXPVWh z_Qc{6$ojuC1^`XIQ;zK8gPnN80sS4u3J;K?kaC+kJ5DqPrFoLv3nanY$NZt_@K~1f z8To^7#%}a{*VeKrisyKsVv)PFmfQn&s^`zfZ5m=CWyk74| zjJd(s0u?;`Vz8aGWsDcNXHpUjt_CogF!Kf2rsSBrY8{hmP!7+#5dX8%N~d zsSCA4`Mk#>6S&6r-hK!mc|Y&AwLKxBAP*#52#O>*$WN9%d#y^C0)Dy*a~s*Yn8}6Z zf}VMQ;jmzrlnHTE!aO)6-_`A@p??nd&*?i@nv6Lqo|*a@qn2zo7KnT;<|4Qc zKP2s~@r_{OPVUih7O9(eOBV|<%fv50xJE||yShOIzT_9jv zC@k1^-Jq$7k5t{?@1huue>F|=ntVpP$3yS%_LNyy?=7ZFsa$977CrIn(?eX0fRpHl z>z<4HPGD^Ho)UwaL93aF&jz5cV2s~IzZKuUeKI;a#u)Jk$dbas=#`fO)XzN(L$Pgn zl^kr9N8<|Iwl+4#l`~S?mAme^vVlTLR;>;c;LCM7xJqh($Ml{d>$DzQwjAeui@EtY zzB-wQZ>nVz8}^u%m7p!j9x?#2BZ=zB1)m0BY)EvWPaq5lwl+tcuOp)yz`5FU(Ds{C z1`{6#-m@3=tqRc7)V(~RTfv*%sJN}$4s;Of9IQRH+^ihG`MW)c+3SGBXL0to8bb1Y z^jEm?T#F>ss1yrHEcXLo_~3jha2SJfEo1mETaqar$Pc-I-&JSMnLZjk=>81IL^j{2 z)E!+%@y1*#J+{DN;&(}b{M8dZEZBRzs~awWt#X`>n<-fLE~=(f#`8`(l&QibRy0F* zOj@UMr|_7VyAWIA0Ku!ARB2xc0EjBGitQ5VyXu~6si`RdK)OpcH5kxSL@dOrFD>4Z zgve2Q_VFPvKHxk&FwATPy;2nm-`~RGA%7r)ABt3$`uRA4L*AM1;o29Ul~?<6t-R-9 zN+U1)eN`^L0aTCueIz-)@l5h;X zFO7I{eXRc5k7ugB>~j)4ul#-&7r%pX)mK*%y9+Sl)y~)lbuSv%Q#^b`BbEFB^G15( z9(pB;uj(AXu&KcV$p+{K)r8=dAY2;076%`T6{U%rl}8v++d+bJL$})JVPW6#r zPexwD0aA;wqLQ+Lt9Xl4uVrNmYyFa|n4A)6j%wNH=&0ktlHB??L5%msBI=o6!zPb^ zWF?w)#jbO~8dnP)_1s8QIrl0?e|H5s%j~%uobSykV;FCb{~3Rc|8AL^4D692`YMsR z*YaDwvUz!yCcyC&qa^}<*BbJQWyv*C1+&4g2t0{_W!;_eOsk-AlW?h|2fp-ofnsSe z4s9Rqa~)M$<8%J_a-9%3$Wm^?DuR8!|G_!U}44<8JED1Y-jL3M~9Nx``;_eXJ*S|OmHDxMP+HgyjzO!C9t@)Y7QMoDCYe$I<# zx@SqvN4CLxEI2;Y5uJE5HUg3MLc^EBk<^6oLSdP7Ix zM}pQ-JnQS1c=YhPfsD|m+)-9Sa%_|L+4uStmP;{KNJ3v1H5YvLqH+o?llb*VUVAuB zs$)paO(84o0q^MIFY4XFMtHnD_cBIn^1(UWUxtPKz!|iF$Np#Rn>J6y>baX4GjM_{ z>07@_`o*Hu^H~N~U=YLye=)4OZLpi=?{BXk0f7S^#QV`ZdjYQ{X;S)kSr3(8f5^hY z;7~1X8JyHMRB{3|?g=6T+zBL;In7w4knSNHXDvp3J7Z|_RSvpIpOVl$xt}q>RvONU zM{=W52Dsf99J&@!*X2N3Q`vRP_#d4urCenN671>u^64eb>e*i`kzX;wc_|cA9?%it zvS=$_X1|zjnCiO!g7%Van4Pd)8|r`Zt&oF}_{(@NpCsE0?hH%xiiky|JpG{+>`-bk z-8bga&(svpu0T$t`ArO|4xxKk{GW1q-drP%N@7|4SJ9H(@Er(6UqA!?*5yf+S94H@ z0ZyZyaAuEaLsn{cxj=w2Kn;RxeCAv1)mGGg`07hTgH4(U*$~uM``x;$6`XUe1(MV7 zZeh#$K6No1xlV(zZBtO*cwjI-(QU!-;qrdKcp?+W1;QWm{BelX3bFsy2g6GQbuR*6 zRA7YcR5!@)>{R7FTc(Gk>zAs(e>p3cob6u)Zw?ZqG%3~ob@jKP)MPmlaUcZZ*na+^ zTc}Nr7EJAw+%iuLM!YY~=pvkt2`nlJc@I~loY%r(qWOM&fQ7u|r2SE3;WUi8-*b3W z$!|tLR$57k6Mmu9^!V_CjqP@Gt70z-FkM-AFh3?&BA=f8-55jiqXS4yfhnvqo_rQf zDNXCK=qrjDU=b&+IswZ#@p~_>8qAu?aJyCm=@w;7@rWK8=vaK=?Krijb2011DvjC* z3q=ihcKs9A5gUupDLFE1KwFHlKWaF3VzgzqGU;&KgUr3oxKh!_RgnIap-94o70*QeewhA5le6AzG z#xwY4BQ*MykPKVbX?ikv``yE{zf?>^9eB9rF41fsXC(6Igkv%s`S^cR_>K-!C;N6A z?R9(kYijVzKU|a1N~gY>($i5l(DsP$;RZPjzFHbR5CEQ@G(=vv!CxS^(aWW_%t2wSY|L|{`>QHonguOv}WLq zDe?hI7*}c?)zxfzZ?#LDl4zY9#C3_dT`mN=cz6yM457R_-xxvHLi{tYL1n4;93F|p z!KJgRtAOI0Z0#?X<6*wmv7Gz@TN|G7;8UfqK>4b>>O~?$FH$Z(T0Rjp{VD`BNqvd9 zS_b-oD)>Lb-%YlED4v+F-;=#!wUBhz^~1URv6e%Thcu=N3bv0|aH@aM{1>zyw3FCD}%zScRbkPs4xNP zH}-FrfhtazLoy5ZGo@jXD^pRms-7%naMv*nqm3Qk>%E%m5JzdhYgY-0r{qo|00L0a z_-a+L>xlXE%`=RE`Q@Pa7mCS;k)1^A&>Rk~8Vxzot%w@|rqFxMU;~N%TPkMgn)k7} z@t^~0^}6vwhk(Qkok@Sx#svKwqJK_qbY%A4hv8^I$#3GwUKg#`mivE$|003z_i9#X zPVvE=ozgQ-Lw%G8Ut73FtWLwn(GJ(~cKuV7m zjOYeqj7V_i_y&mY+hT_f7TM->GLcxO=Ay=y8&J08BO)zs?QyW2;Y~yPlr4cU!;uSd z0GGlx>@9^qLC~V5Z+D#bp>NOm7sAls^X4!gpaMc~_!ap7rL8_Xxy-l4$+UoZ$wNR- zMqmM@>K-79gDx;cGoL6?*cXG;Rxi!5~{7EGT!RKw$#!>eCUe|-E7 z^OFs!fS7;;v%O$Fj_=Vf1c?447q7I0T&PXbscVMw*6uBU^hl2y5FVd#2}pCZ{cBT? z_C}KFS>d72oY$58qTjFeL4067SdE>)2;_C3-pM{R&~C%<4Tw0Nkcvb77TeX?9QYgH zse!O^>{8~={bIjcl)qSJ`1uD3{(5#@Y>B&*sPNvCOC+&eKV*Zmit<2~U z)y!$KXWUGGZu=ETGCZgS{7}@x)T=70yo}%2)W0|M^*y<~*)A+C14h6o|0rEHKq7;X zQ*wb9p<(sk26iX(3*RPzC!@$ z>(}TeR0x0HxMJ*XX4lMS)Ew2=Q(9hc-kFA^K);8C_)=YJkdd}_3!&(IGmxPp=CN-GIcL+% z>~8crp02QX03foqTZfLN)TglLGN=c#E9i?R|78&R6vPyz;@G`mp*L3EeoXz{)wC|P ziVLFhn3+k242!Pn6mQ>$cV2l_kAa3geK>WCJTtsLl}ZNl1-(pHk?RA)^riRM!mj&& zcIe${aCc$UG-?CXJ9UPVm??D(0K*fCqtIj87vn5&i4q+Xo zW3yCs% z8Crz7GYYJ+iqe_iC8Q8CsI~6w%iQOMmiO~m)?(LVVAry>uCxlqUK-TOyU6)mr%ulX z*3?pJ1gUsX=&&b|?42E-Bl*Z-{yeD7D`S*sc2ExJ)Yqvg{HtVYM|i-b61$&V#-3AqL-^A5R4HS8yUY;YziAJE0foKC zzUc)jl2T#v@$gtIHhQ_bx^j>?V1?qNCQAJ}EdB2fPx-(OJ8ATj)*rBc6wM%@y+@$R zCOAiYUnpM)mzcLSLkr?T;?GV?e32FplI>YDmF2I?BPiYzOP7o`5+v4}VmetlcKW-k z5N`Up^^#UhN7c^+W3#s&jq_5XSLSwA#?qIS@ky`GxpkBvyw`{OxVXQD6$XnYyfE&h z$rNf9jP~Go+`4f*!?P-ewH|=9-HdstNr!w&5-A96k0QCJF?Qg^MES^5ioe`k5Thf6 z{=H`hAB~fnqv!g_UG+Ce&S0cQ2|IGG(8j?`B;sssG0wVp{~iF zOPo{^&}W;QI(GUFKkIYORtfC$Y*U~3uyCRjp9|G0e16f{h<#3`$6IT#Y_F6aVZplg zAROUJh_maWgI5LtgYF>bOBFMSMr z&5V2FYHNq+Iop3PTvs)$WRe}$nip{NL#G@MBEDySH;=t?4B^DZmxnKUN~y>W8_ODQ zht=X_#*w}uZa4cLurX=$<$Hz>w$Xy5tgkIY;FvD4t?s_xZg z!qcGYWi_VYA<>hK(AIhX?^J!-ub3D!*qQ-)#! zDYGQ($Qy^&{^>AfQ(dv1Smz3p9(BUy6-Ll8S#~eR0jN4 z{=gvbHQOB9^Xn4Tnsmm{9uUDa!(=QKqpg<%6@iz4>c!2t1uc8JL{}<>m?fL6r1+in zGmHi==m`Q;#4`Dp`)D$z-Iwo`TfuLosXb7)n`O@#ym%{rdvNt{aex~SL$mI>i}btd z^^tUd%9UIKdU5}Z9d+Kt@f`j&6cbeM`UfbF^rO5yUd`_oHsj*y(drt6!kI3*>znD2 zjK9(czZ#QPog|v7J|FgTIPWT9+Im2ShG-rH%OT0{m-yz>B*Q{&o(F|7h#_W2{~IS3 zKOsbt5aQ5BIhFV)|8j)@Jk>h)5~mK)5OPp@M+Tl|@yh@q_{CfE3~(-CMKvt& zl;;9P_^Fu>cH?}PTJrE1w`>CfyC+8Gruh>+xV(_gR@eU{OWQ#R>lCi3k?-7$8!6p4 z$$(!~U9CDn@$yACvLo9TZq**UE~}1ZIgr|Q_$`d1ur%LtuWfgx2IO9OWzv-tVD96= z>&-5MBuyhj^y$u$%vY!m!W&4vG!@E-w}9e~dvxDOEjI0@X_4E@hhByT z*7&pci+00r&C$2!V1IY?EspR~OiT>^s#Tt!;b8-sMABp5buA!66@Apl=b;V~5xhbw z5?vT0^s4#39J4xPO~F!I>>#+0yt#8Q>tQCr>gH$-LD5AdS~( z0wSrNd}9Bp2-Vq`TXjQ#qY-TP*5n85}2iPBY`VC%4LDCVFW&UK^JnlXsKSU5fiHTmN#y1&%Uw_|z* zg5E$sUQQ-A{JBb!b?A*R?72Bb99L)G<%5hE!26Wr~;gWXa8zR$?OQ?`2YP>Fa3L{&)s`T$%sezIWA|$`Kke z^H2dy94qgmQ>XP?Uf zT8oU=8i-^ym3#Yko~+rYzNgc65)AmfE3vZrgx1&_V}ZzGcTFr`3Wd z82xE!VpVt+_p(fiqWyupeGxam=gN4BZ!PLGANpD}D|5a=NX`UE+Cc9Y3Cc_@>9e0c z0eT((;yHJ6xRRdk*!X;Z;*s;Vmaw1|LKrcSr2sU-tW%k*5?3yG+e3PrkiZ-6?vin-Qi*Ot=__fz)`WJuzM$7oquoqz4?8LycL=o+XI1Q7`aT;9fA%z@l% zc{;CBa!T){YrD0(tC>pHb^+WIhQcLManScKQdRC|^_A=boq1BRoR{Y1g%1wyGo@sR zdT2rf0ufco-+qEKFh$dlCTXSDQOEb2Me9Gm?D+YZood+U0cLt-+f0{_+OQrVZ2`67 zO|!iBR(nLXm6aKTgI9`Gd=yX1Jp54PCX~$I0-c{}v}yWEcEU5INww-QaJ%}{ozdy( z83XpziC!)n!+_*|w4LIUWfoqQnAAKY>_=Ry`D^;uL6V4tn^lnEmG|fiIKL#lY}H-f&}23~%twe6>Rz@Tl;Kj0L=>d3?ytQ1V86OvJD1i1dbb*! ztS4v>s|To^a#P6u5d7h%>AWI~!G9_YG$$ds7dJjv4BoiN(BT7?M_XpvSZJ0)7LOZE zwe^F7f_C8lQ~++DvYV#$NiI%5|0FZeCkGBm&4(=T7acmifxp4Zj=8)AS#+!Syyn4RD4_HrkJCdB@@`Huw4`Ppr zXOG#3s?Y0~M!Mn8qt`!;*4W;B)8W<3w%;g84~hMibF&s0_7_-JOA<%as}ixln&$t| z(Kyk0@$6L5vY+ro1X$TZF(aRgt)2>s(}qgbJQ=7+1WtD#UoT#01Lxn5V@^{8NyXKO zkDe<`e~U$G=Mj2Ou@*`AVe7Br~ov zhB|5#K5N?NHMs9R!qCarTtC?wLoGri+_*HUT>qU<6U1nN_&sC8SEPHtMy}+3TBm zYriL(y_{sXKpB*XIgi21|K=tiF24;&C8hfq6B85F)m}xZNM*&{5|o}l zETpn4{i^YN9CjPDHx~jZOjXcU-zWpGC8OON!be?2F*0#$DOcL=^a zjV8CNPLfDJf~#59Y;XMi`(lU_L1YqOwXGdj6mGp=@gjUJQEsUIAxVpcApR>PB9LhI zGq#5`#r{|i$k#6Olf2n414rg<(_fPAWE+PnyC~I~=AZbnO0o(Y+4cL;??#nnuCxhF zU*61EK`bT;-s=UP5 zG4#F0PmsU8KZx7P+sk68rD&i=9i?7wa}(B=TS`0O0R3G3-g}486g6@XVEH+qer3Ma z=Dzv+x9f}b3+eGhg1#fpjL9y0;}PK#S5#Dvg#)6peq#MSYgh2}&g=Zz85&;8YR9qY z6!C?RK4xhK{f_vqn0SsF!5twMw8u4$A&7gW6af*%be>UBBf{aX9s+J}@JAeE{L#0j zhu2eraU~vZZcclDr$#3xI)EIC49|tZ$BE^ZP!I}5-j54Q=o!P@lyd2fEY-WR-u6F= zJiZvX(iuHLA7W7)^s%pRp~u`PoRAFbTmBnQQ=GcM>svG&zE-DWO39Zc`sIp6m#5?d zo_0z$9kOo~Y~DR1?GdGUr^#nEP+IfJt^J{JsZ?fhqbq9Jxa)#AY%40ck}aDCdNxVZ z&h1TfcC9YiB&4Fr$(R49PTa|5<4Xb8wuoJy$~7RH*;xZHiKVaEv&?2ylnITaWWT7a z7^l0`6EW<^iR$Ln3%Rz&oMMxqdDB;&2782y3JQ&>PkPe*{U^Q$Kx=A48*D4Wdb zOG*?rJ2qBrX2M81PJ)lc9e*X>v|t2Ox-E4{?86E}WHQZAdN zeBAgg-Atk97x3rjeOH{edB-2eR~YciZi^~h`DfYO%CO^p&bx-l)oVa9AI*Vnm{i#m zQQ?Z{N;6G`|3X;yS1R9&-Vy8V$s5ws)bck?jQ=iUSVWJuOB1j*glu>#tOiaGhUzgBA%O9S=E_}a6;c3zJvf@u{Il4Kp{bWIQ1*R>|^7eBVuqpR6 zFlWjI+OpR|Zyn1&-v}*_$Hq`{a$qU>>kNFiF5$^0ygS5f!A)`)Sle?EZ?CL@i-hb%>}noM0ewk48HRIEc~qda|X62blEx!d%l_0BGA*gQr-{}6 z`8A~(!r;zsMfFe}XMM5b*6!xT;xLfWA;jY53S4uhYBe{13n_o&-+e!eAC3VOZCJUj z7WtKK)ZpAHg(0oGJ-|r@HE#JLO*4LrI{RzSe+;-TfP+_nt=r<*p0QAv{sc$_`7mrO z_Vd1r20Y@Bp}_omzgtG+h;eh6x|~;|_lywa*=%qYLNd*|xrpjm%L@ql68B(K%e6*v{O=I$ILlGEVt^r zK(3j@KcD#LuoO^P&+2p10oyS6&PdAUpb{%t{cZO1w)0VmtF-G-ELC*|lFw(o&_@oB ze0)mh9Z0K7&48mYZv7!@sY_-#8*4dS4ye z>wci>xe9vOoWlE&>z5W}aIwj|&Z_GnH8nMT&j%-roRR4w@k*al;Lx@d^l^TnZ{W4zlYYX%2bLq6m0mHxy~kp zavLFTCcde2XxhDAWDfo$^x`h`F!x_vX8N)f+BNNgfz*5uO9WvGPAI9+kZ~#zVhB8QR`79v z=CO;lT;=88V>b1|(=1y5+$I4ts;F_Ax*biUCQ5>~8|urG&R44QBy$d}#gj;@=B!ws zIK_TZlff*>sZnI|i`$Aj++_Of+XIB8C8c-nkE|?T2WDE=x`c$BU;!t=)2CD}blZ7T z&PJfl3-+3+Ki`s;O-nfUPbLTpPp_#C07>5CIDU>-s8^~fl`Z2B{R!vszOmT(r^m{_ zE=Bk=WEuCi+F~-Tnw?w{qwTQLVxZB7DKCt+j7vDoG7Tw{3|^-D$zYX4PYwH=RYE3i z_u#i0lySv34l}EK26u3@QxMG1?N^Pkh3-^LnY+5)&KC7)LyF{xy$o}^uphV z44D9Q;Rm4J9pd}hIDZJx+qUDFEw3a$Zvg(*ZpBD%;l+xOxke~bwHupT##=tVijl)B?E}eZFRhW9BOx;Q` z{x;@XHP8MTB8Fc%ZTb1bqPe8&^KUPJCX{RowE)Jl!0Z)#tXc^yVy7#t$;Bc*ul(&Wj^+@VIZ}42wq25{^rl`8%t5@2l zsuK!fJ7JmoLSE^wbMcyV{?mHc40gWctJY7W0NON5xe+R3bEx+(r#(!IB8_YMM#FaV zCONz&f)1Q10?A5B$^o*%|EwD8p}`(?I0GJjuczp?Jbrt};bEh{kQ0)|i2ayOF`j$C zOmd-BrIPwd>=?Oa)$GFR+syADTF$}AscQQ&f6ZFn#8XJFXCG$gi>1E`e(oNfFR)PR z<#UJJZn1DHP}`(GWN4i&yx(y=o*WgTntb zr!-h-mEt}hTzwY2&6dWQ&y+S!|DdC~HkyjrORJ&bQ9txAa<)qs6mCk3G(QJbL#e2M zj{bwXGf7f48J|%NtsOc^+~YBjq1&bP50Pg|DYf5?@dJYc3?uxsGC;j^$j<)Fh)d+C z(=ONT#kNLujs4B26&W=jog_~4XA-pYF6F&o#Bd|G<_WBAOvWomnEJjRVvDkkNgWS7 zt)@%N{N*zC)7b>Fh315GLLodrbQSq3`d!6k#{Z$|5x&TE>|?}WOR7DdN}hb)9qfH? z*i@z^?9Or5X+J^DIM@VbR%uaRABlKkoPE}gxR57%WZD} z^>JKO9Q!ks1qMLzsdrCp3a|YKt$8gXQbk~on@Nwe`c;Rq!(kYxSSG?A7%7OS=}JVNFxG*T>KJikmh`7d`{`d)odde-fpp+q z>T&bb6rtoSK-+%pON(FdpSfc6xG8RydUwiBO~!t&O+13~VH-Bm(~RPpnAUOr2Ec;^ z4PAf=5gTG~DD1Q=i6P+d?f0<%n^^68Rlt6oXVh)^BK-MDI`VYd`^}0cI%E^Q!RSyE z#=(nyZy;B)fN<%|)BCh3ZRflp);JXg=tOD64l{_`jjHb<#Pii(6Rq>KEoYpHYd!?1_9Wgo}3Zu8Y;BE-De^B&NZ?*Ht%Kl1yS)R97B z@pl}(sNz%dm(7F;xo-ix$whBKURle<@2I(L7T6DtbY3w|bjo8!`+#X!8{3$ibouQ+ z;u2a1d;}|NGiTDGEYz1foe?offN$dO$u*#b?`%dLFidxNZ)_`e0@8bF--EF}K`K zQBjqTy7>vn{R&^Ud+(_#cHHm*!N$`iCNRBrtLMq?30c0NQ!YzDd(6j|UP5MH;xbCJ zdG5@g{o=X3&Gj=0Q{1z=m*{=hH^0w{f?gQ(rwYd|S8KbYEp~_}dD%PR1P_lXY*)20 z$~PmYS+#Q?MU8Foo8dpdB~SuMI}dyb-s0jqI7Ewx!$AGXe<#8dW*j?p`?rY;Nv-Nl zobKC!H^IGyPQOGhE)L5{ZWusKuL{=j4PQ7YuLzanm7{)KnI97xm-v|~vp(iT zG5jWooZEZP6^Zv{pL8>w@fj1Y;f35e{)w#n6-p%hM{lTwX;~4M(&RY?oPoO^vU>|S z^&d8L$z-?_jf+V3E%ivvlqvY<#lYm_ZCPmc#mD+EQUwLv*R8H437_@`=L^EWMO{fV zgac}oXHDHL@dK1qv)?}@4LN9q3x4f3F@;h4y+Z7eN^&OvxK?vT@lLO{6aQ_2tvE2z z{<%*tR-+u;;j)D0j?qv~_3w~Y?wW@me8G#7QP?;Zrk7NjII5)DI#)wbZDU*l9-Y6- zil)WSiao#!4))(wir!i({v+JbtW_|tzEweX!aGS^NrBg)d@sf?xF5H%CoPNgyQjcB zLWx$LJQyog)_}?^9YAHmH_-DzNo1K>7ZKt2f&x{b&<$I*RbMs9Gfly{tyFOM1b%)? z4V&S?J}>nHgwB26_au9~*jdZ0~_)7mQ4IuJr#AnsS!A4KASCwuO4odI=Pfo4#Lt9&5+~^scNcubS&6PV z-J=9-z$`g1$`Qxj>dyJRZpT-;D=ucNyQoi7U24Z6Ph3cMySW3;uL+u(hTXhSm1NretJ6&vnvDxiPC7G1|8ZwlY z;4~6zv1%JLmxvu{8H)J&akH3Kf(92rt zS%hWZ3nBpzo8Tz4#-XMfxFlHLAMjd;)gSil0>@-Sr~mf?sylD^S_UC^eo7@`$^h`j z;UwtM55DtzKVI}cVbcYWOsp2KS(qPhEE*8Q&oqr`x2ccp(x>w-MJ99@wtqr)N-5ma z$}mqoI!+5&w}#MV0PL zXL~uJ%Vw=b;J{as6dBgN$&~U+z$arH9vyAXe&KDmfNURAZeNL z^(IX#d|iQt?PM;_H^TqA|7nDwHFuBFG2!4Th)qITkwv|mkT>p_Lf`F(beV*SxK>c6 zW^g`$UC3;-R(j|>v=gg5qqIMzn&};b#2o$yV2$MaJbRFTr=7PCMf*WIE<%VIGR#gl z+I92M4etEDV$LS#YEfdQ-^UdcbcXa1XGw5Vl>`nl&&l1)O zP_wMsPD|>y^p2@V+Fs<}4kzDS^n~*XVgF9c)@{`GhpLY|?+rfoK`y>oTvZT?HUl^C zy6?}w($}ZjnJTqf?@db8xQM0_N)@rE2ACl0k=!LDBx(xf4=V8)xKN4!`cGtKuG}%v{|<;KifN2h7UC8wUNa>D1-I^5<^li zvVkIKK&7EhI*)mQqH-#A`0(?uzhG)5P)5ryS(6~!B7aj$pJJt}&`XhM4{bSk-Fqc;0aJ7}OETVrD*Eet*cq-Mp3f2je!-R3$QNHVueABkg?-Yh?%5$dv&4piKF zQF$qR1W|6d#M!upJouzd;jp05Ui_mji@4c_lw$vPSh%vnvAI#Gz*8)Tc}LO2Lsi~l zE5(lkKTj)`r~g<2&heo$+t8Rhsfd=@+{C!Er4-Q=#9lb6v3!t&&=6@@Q)niIS1HI) zbio=5A3VKB@LJdK*{v(;)DZX6d75}wArB(f zGiwtpUPJR{!#e}QcZf;xv?%rqs5c?en&J;-48p)2t;5JpEcJ+K<(@ERdTBrJil+gWy|Beg9l;>}RK<$34jCdh~3?`;+7y9YcGZFzTq74mh)4`KN)WaGwR_t%N zOR~(pP1|h@`^PhlqmSHo=R^1>K$F5TTVweKZ}3^`9xksjdtNmK%7E7*gHHc&q*N%X zXMiN~E^kiWYDIGMoyMph^Hid-7&`*avEk%DO7bIcJe-f#w0Vuz?5u|Z&|aiAD3~Hv zgP2!YyxKcqi##~eIL+{Ro0L=NZhcqJv?f;&?L;6B~A(fp*HE&8S$~b z!jC&DKoojf;I^XBm;+V*6Fi8CYZv869BR_6!BS$L!2HSbS5A&R;0B*Ig@V!AJP=f? z1i4;2J^S&J$7FdE=Iz1U2l^Y$-L-x$GU;K$us>yHvtBcIGRKvR#6%t;AIA^!)aH~r zpR76YI!y<7xZ9D(C(EoxHg=8#)WagfA&YYdA!Q<`lp z9W!iEL<3Ysn_HDFko!A6REU=BlP(68rVJrjqo}a-P9b5%X;{?6DiF<8N>KNl#hK?y z7^pGHBRnqtXcRMD_rQG*sAAvl(iRN&l!McV)QFlpw1$~U?-{eCfy2B&H?UP4sqx!b zywGgw|=fWy_FyB0V`k_|~aYyUXbQtGk%>jRSdA0JR6ZNycY@j74!m?dRNdf2r0 zSC&0T3X2Oth!8|K+AmvoUGD>O>_6@F){J4jOZ3taY_S9`e9bx8T>H`ZgrN`(etBc zqch`0srCkRmjCpZL^H;pZI>{{O76x9717xqG2j?&44h>voo~4l3OmDpI2b)o4w8Oi z6>7*kbyC?9c?clYqdL?t8|mv|UV3j_9+U5@+DJFsNo@lfG^|?W>@#hy>oR~5=$A6W zekFq=&M!C{AI#B8T=MI@eapJw)3@tSE#?4C;REqvNLOFY{nE3l@VQjSEOT0YY0%X( z4BHx$iG>M1N$ovaH_w9)1!U}CWLS0eu?8h&a?_R08b{zK-WlLq#v2y~f!Y&ohUi8h zW}v-b#u4qxm}?VlV!knuCA66*+Ubk~pqVrwm)Wm<>*;>g=90I73zB}0X6fw0tj$NE z^v@uuCTjM>@8Xy}TN~R#lPTWG;<*lY9q73k@;i^8b4o4h*YpOtUbC5XGB@bn$_qbL z8nwKaeims+R`F3Z=2sCcL=JZ;w(+8uOPaVX8+$BdX*j+OLy=iq#G$H&rF`NFAIpJO z*sPO_{EwisXjXJKVTj3XbVkF&Z;wQSsWKkk%>jfLh+|Hqs_mo=z#Wg`2(hfQ<%H?_ zA@GX5iDgk~<^M{3@OWDClT?)&3q3o`L*R>B!xc};wq;+by<*U`M+ZIez$23T$1+?m zHuOUeL+7{rd5^AaOSO%R1`!$=SB-wRjb0Hw1uql)Ab7QP4#I2uEu)5Gv%Q>&wPE!6 zBC*f9e!17qhX4U<>8{V{F_SUGz-+}&wU9bR_IAtgg(|Pgy;Y09ez3=h@s0t)T7?d& z4|1JVs=ERI1Io3`<))Y|<4`!mcr)fKzcSOyNAQJsd@=a`Qmz*U#Vh z3%7t&tz*bv&Y5D+XsS@>J_xHe2&mIbb(Re&E4a2FO)9Cx>)tP|uzA z7|#BC7Hg0DVxR5_O7~5<`+t!l@tdc=_h0qvo6~;1M=+tyA*va{nCm@l&1~sHp4uB1L}ba_nO&2k2;O5$ybS zPVSJY_Qeu(;jsN-iZ$%ohd*d16czxJSj3#H> zZ77WSV<-}4p8Qr@J8ANyvZ7+_7tG|f1sTP3kqCS7+gQ<;b&e9FC~mY&qTH~2xz`_r zo=TwgGm;0*X6J`tXySrRQL9eT(ifGJ!NE2O7q@^T!S4Zk$(T5(1Df}yORjtDFu{tF z*Z8?(<93QF71dBE7x_1BZEe=sGCg!@Gc&WrVZ=iKXuSZJ$h}^Sz3|^J3azD&tMyR5 zNoY9Tc~fSu?R$&q$P&cqtJrO@cK@EQd|s_UMd4)flu~&j6;Mfsu)`;$@p%do-u|Rx zf%32JZceN_gE71Ht%g&$g=*y)EgqCR6eD}$J)fwi@oib_>+93oM9Jn>eTgOTrj{~p zPp}aP-t$BsORwTv@fK^9%NNb7fi1HV?s=^{c#y^6$wlN(x%{{H{7$j_<*tZXn7OcR z+-od{DenV-bzoe#{up1mXWE2@|AF>X;mdz411WZKS6pD$r=)hLl#wc62lC{3!M=N- z)-&U*YoAh*D6SUgcguD5)W{oN|-%NEJ7d zubH4{Q{egmq*7!|~qE*7YALGu39THWOQykbS#M9_#j|8dR#umJUE zSqx7Mjd1ta=U9IoZfZu>7uI(8GJ3CpUC-ET$_ld}TR%&C?kZbT-f9pb*xAX+sqz)_ z{U!6k>BC{|HAzL`Sn)G+7pV@Pw0{5U@^Rb251gxW((wBhTb{AB%Ss(f!!)|v0`}P5 zC3)0S=fFMg;D4A+N#NM21Zf6H@oxa}Ennw{Mj` zKaz_cZvS8mZuCV$G+#Q>GwIjGnsSB;OEF21?sKiVk{s{nHkZb@SXz#xNo1gIBBb1r zmPA8v7wls<1#_xX)7pXizO_^~7cYtQSg zx#xPaXYjMw41p*`t;?lt*U6RHzQ!8sr##QMtPf|`&*%MYZ?{t|{O>!kt?-t?0t7VtKss^{8;c`GW{DaHspcH8xM;*TQx@>Y2J^47k_ELXAOSqpdy$ieT0 zhkI@K*I%mH`1y$e1CVUa$ZI7K23vJJu{<+uB(1VnMnzQ$2@1YyD&Ll7`v6)L{Cc|a zqM?Yi&8B#fSRC1JGH1u5)7HQFG{eNh1=zlx&dI3?g-JzMb%pMp0=9&x5T9L&F5a8=w4{DG`$vHQ#xD<12$o{INk|id@vX%6wO)bh*_}j{RaG>Dua0_lc zs$04}f-?H;gNr_s(1T?#*>fs9d9`H5NNIVT|B$cxjf8E z*`QS{v--{R$myI^oXeUo|0mrc$7Fk8nfYx)jQhozO}|m$)~B59cMGqMfKR>n8oxiO zRD9#~Z21eZq~`c+D~tUCW(Z`J*snCrkOKIH3XFnoOe#auk~*^%R9p2IpBgKY{o|sX zg3x}ilkkT1s-;Mxez@g1!o8#%OS)`{LJZ#O{m7Z~_A0v_apRk?6td%*YrEwqkyVXP zY54u*0uD5uoFc)()d!PjRIR>!y3TVz9QV`y-u?wlX^Ib4hF(6KH-u5R*{`kpPA)(R zciovfR{ytI-c^>f7G=U29IVeS6)&CKgp?NqLcYf^Ha8Yl$>2Qld-mqy9Oc0aH!)-lZP}J z5Fi$60Q_51w}xI`^_J@oPVTM`OSY>9P3=dmC z7DNO_!-kK#4zIKf#R*e~!^U+2!|_v>)MR8xw2MbKZW55oUpPg!#*~PqQ(+5AoKr7g zm;NRn=`aDtRvfj>k%bx@BZVG|GRbVBz`A&1SsNQ388-UId4~-S>QZ_JF+YSPjBCb_ zu#SV7(%v@zyLo_3bBK#jJ^geXvO%^HCkzwFI+k$XiX6u^s`5l7HG-Muq7Gx3z#`wl z#M9Y-;txM+s7i@$^_S0OuSOrfRm^Jp&m8b3!0;%%?V%kp4y`eyFDJU_iYfPJfrTU5 zJg>Ybmx=8ZH19;7J&CuF%D=JVq$sw_P=L-v;*sYmeUayhBZQqvC_EuNkQvST!=$6?N z#R=-)lu3}s4HqZhx^dh!&Q35TZaL=M3+7y#`rYGcDrjd%V&XgRzB$Kjyrc$qs9$*k zfZ9YqBZQ2p>Q_87oLLyQ^SJ2{RTbL$FQV$l+zl@yoYOXC`8=YJ_-pi=P=hUa%5RBj zcl%aKUKyc@7BNlWs=2N^zK#z_RkvxvztL0rubmQsnad*V*p8*?$2yjcvTB?^a}9l1 zvak|66CZ?}z*b*=a((Xh6`RRBFfTY*veE+^tp$EQ{6+tx)IU)iE>bV7YDk+6$5ICN zY6`=GyJYp%v!7Jv05U+h^EIWKj~IlVxAu7vPE)yL+Jl+1QVn8Ug=M(e#!If;+${An zw42x~wV%Leb;5YZ72YMh*FX4cWA?$49TO8XnLOdOTl1uVv#p~zBd@WOq%00gB46%X zB25Wd4QA<_;uwZXhng+Ph zo`~9BiLf^$a#|tHxZ9|X$SmnN?IF{cn4cHf6S7Zp=2+ynmSt4o_(~ex6!qJkpO<#q zTVTin^#H3|`8!H{m#sQ5A9zU468u=!*!dOZz3?FwE1H?Cq_fgM=fqPP_cu7(ga0?U znMepp&I5=0e7t=}y;Qm&OyxuzBkX(jo3^jaY`l?DwPt&m+ zjvT&=1SE%?9B-cRG(H+F%(cx~XW^{`sku$gtjJj3HO}{Zlop^hL#@{1V)@w%!U(f5 zl)8U>s-C@E-XBZ}4OA5HY@gKG9ozy{Z#OSDtML_&8eMI zcShKlsp{*#s6Ui`ySn;Y-zs=I|4Qm8jMk}Mem+-0#Ik1f?Opb}GHf%Rs9Va&;V&tJ z-bZf$i@5nLG*>~ErfooELUhGjc7oMRitHQ4q6}45&i|R>7czEUn^DpUaWbHq1@-vQ zeq};md80v@H^+(DsR{uy;1zD}Eedkyy4;|yFQocQOJ}~~-*GWc6;%(8jU21*5;5I{Qk+_{8qq^7h$da zX(BSMIHTevc~eEMf<@xVu39B@qeWSy@{4mlT_wk(bjoI#xjxti>lu#sk$xx7(mV4O z5&tH*iUFO$iX%y!JT|>b{Sr5FYe)zY5gP56DD!by^Q(Tg%{OD-Q zNBlcJU}@9J7!?n2=dyhn{quq2=OgNZ<@J@byWYhW!A;T=8tmSa*;o|=E_y;g2}a>W zMGO;TM&vO_wga(iB5iCe*_p-cE1>MBKo=L+|H`i@u^tA=tY3wMC~}6*WoY;y+G6*4~+OPgjPq8%WcDp;W|_9>YYOGULoI2Qxr-E{kv7Yc7_I)@EleysOYw zKsdXwlnZDZ*azX0Ois0a-hg{~NgNgaY8sM0U9A4=sM5gOZTAoZEub%s%c8GrAz9 zUv#{iPdNkVpfPr{x!>aI$=<(pjj9{tM0%bs7@+w~JS4n2FYo=XXwG!;LHwZyPN&Fh zv0D&#BdZxiAV)}W-!69B_$O1h|i6=G$_EuPI#fV>>EyL*o#WY)6Ecis0 zYW@1!GdlYGRlq$pfacz7TKk%6EHl?FknKZQ*&kAYe|`>8<;?0Cq2YG{3_z-c&56$T zD~RPN#}cwXwN3P@aX0G%%@F!1kew5V8=0VXar;XY+cp z>w=KSj!RR4ebr||He@;Ij1r#k+J@`t&wzrn9iVlj+C?!+}=<=-MHkE)Pxpg7GimN)V$gb1GYXt`C4LfAhAvZayx6==S9;erhSoV*WUgPPFLmcFyDlz*FEK21jAQVE-LcODbukS0M32hL>*PB!&2OhQ?BogIyumV9L*NAY z{6%0-#(<8Ai^~G|*HW7lAvP;KN)6-v$1^XYS`-cEt{B1tfUsR+MiXao<{5M!d8`H_ znv{u+876br>we+&1>QOoMv5~`{#;M_9KziSEVrOlp!IkbU&9865inEq)&U0)fkJl6 zt6Y($Hnveg*R$rO)M~D!FIN3d^bj5?FDPR@pT%;*kL!deQ@(0yzU?TH4rED)cx_}9 zbqiBhXbv%`=~q&OBC8bYue$gV=v_{v58i776JB0%D46)Q?UxPmsyb<`c)Z>K)V};yP1m2zuPOiwE#2 z2q?5R-^=_I@{d9vX8d*E%n!(#Iy#?3-EwHN(XZ-pOw3?u>DN^H_qE2M#5lM*;YZ9X zbkFi9e|Q2Rv($ItAtFz0@%(z3c6 zau#D8jw?KJBLPE@@EkF$W%gJT@FTmMpt1(tIV7hV0q02-{Y+3p)J!E*2l;TK_UIp= z^k3HUP;!Y)dU*flV`@B-J={wO(oML||1O?MT`;!(tL+njnk&k^)V*q*jgy@KYW(Dx zB%>Hu5_vLg&Wl{%>AAy(IyZ`-n#J693c7j7j?d&sy56vn_ij!`${U@{nV;b26cV7L zfcVJa0Ze;aI#-5m)rW2dbc zqK{P(`jQNWJX96ldNQd`f0pA@<*d6Z+(kAlJKhI@j2IXel)13hCl%$oyP|dXkD*hY zb@Zoibc}I3S}t~8y3MNoa~|iiMt~#b^6Zyw{Qqd|b3GVNGR17=;d%rIRbY&y3v!ij z-<)`vE92c!bCNDiO?^qj^XJPK{{D0#ZjgHe6(N2~km6d{ex^cvdOT(_wcF)hOZ->4 zU2-`Sb-VfMwf_^HDb?>k?)>{r#;^7dx$%jKPDHI$P@_-iwdnTW6~f9YAZQaatLg!q zat*(eZ3JjD(zA?7y3uGo+R=}W+~E*-bJJ}h`%~AXb)W&g=k%v@CVp{11Y5{y@z3tn z#qMZ+W8 zLCk}(%{=YgXSy)N+rKg%;_k0h$$02EG=g0TxWAu z5f-+m^r}C7_|1>v2vaX%S)9HECRo|wZTE-zH)cdMC(!T?;NJel3Wig7C@jx{53v9k zh5cg7!Zkw%kahI(s-Fe8H`JN2wv^#x z$T1gEDFjOEva{4tl9XfEWBAGW^Nl?_ke-e{0nDVs!>rU%m%?l5@_fY16Dvp8KCRYa z#P#3|E&ptmn*kdXKhFM6p!IV&QTE;UhV}45proE&G(rnJGwDg)qY zfm`lLK~~)(LxI^M0l|7-zfQS20jTWM5-CcW!zb@@KPy#G?}tnAk|EnOH%*v}m5H8_ zv*M=y#rkiKD)lSstB$XT4}ime69?W2uv~cWeg5hIvhtC|t63_h$)NVMBAuM-#^!zg)INp94e1;8ac=x=4&#b`&x+{{wh{(*R3(Pgq zmBbAkhurH2oYpe^jC=dvWZHb2bjmM3%F%Kx!lE&$qG9jUN!v@lvyI3brnE)3{U^r{ zIPl||;$^*gXV^vr((0J!`R>0>G^OTUc?Ls_Wbu@g|M@(?T0B>FUj_PMfSMzLr6xww z0&vn79}-(pN#!RPhtIM}HA#BQ8_y1nK;8mQ8~$G6QJsah4QHo?7EHe&&r`}9c#cfB ziwFz~%VX--?wr7>y^I`4^cj#zXu`m!CF%LBU~{2%)Mm=e^3}9LkS<;{*`orfsS-Ve znWjf4COH)qTI6I4+0dK5A-J{g=bD2xP6HDm3t;Zh+{~t3xRYAARj;Zzf2t{XC@Y5{ z_b#U~a4X6%45aqjEof&}w_iK&dR~E>DW>EMcfK!yH@~*F90mBkN<#R_T^A!!IZDTKCuQxICmjfriFDhH* z=^^WHmar`N{F`f!dgc)$5>7%93H00NH%55*?i|T6|H5CF%sMsa-5bDn$~vh~T_DEV zX5Z(Fvdr(360E*~R$pbB8f|Nv%WS{dGn3Kt0B31YC0=u`o;k8Gh#s3$B@!}d{EAUb zjjtc+{Z_v6{6|Zqg17uU2`C&lwA#_K%tZafC z<5s>Ar@>`q^=$F*l^s9khp^#P=k4AacqcyZBD<3q!0RX=D9qt0+Zg><@w3sbX9AQb z*5C>Ds~SX_->UuQwiy$>n+#LmHN1Q8ZiP_6WCw20tGI#!Sah2{iXzb%B%Y^LHGFpV zBiG65I~;FOYTD;ac&G2w9v@t#7K?a!VQ1wh}fZAN{MSwz-BWW*Q1JJCO z9O|?7FV=PjYB~)ochV3Hs;J9Bi^Y9~0KgD?G6GM~Geowj*nV={>F_(*-YQgINMvrl zJOW@RjVGGly9YNMm_O!CP{T_)(i_^=bR-`#jhViRiEfVE-hNA+Fz-zwO z4%JGwu+P~@3D&S|IY}2_w;J(lx@$qv5rcq2PY`ER!0fBpq0V2+fpj}JRfG2xt`ql! zMNV?7;C>ZmeYKU__D`iLyrT=^-5x|pIf35d$W#*CY6DosnXtktkjC72@1I)z38AIw zcb6Gov8hVr+UFX6Hjmg@qKQj*{_sl@`Cqv1^>sEks|QM0>oS66=`4X1%nacfijQ;p zf)Cu>$2MM-vvjkz6N#li<7rT@zDMzbLg#V@bW7OqF^+7A)-u3=7VoH%qW&g(=zdJ_ zn+baJ$cgDKek$)eKU4cGp`PvEmIw8$l`2h7{#(r&b0u?3)u+6>r-}LT^16Uw#YpWQ9sq5@>(nVAgTymzwxAU-2wrKe@K$Hpua~_+VZzZr-D7A zP>Riy>2q@wNAq1lzTAVT@7vQ`ey8)U{G|os`WSB1mH7BvYsUrD`&(+3@7H$8+n0B= ztLsh*H^l5+tY61<&zESPqaCw3eVfvFG}~{YV%cUrl9srKTH>*Le!{L}^lSwBEg->C zEFx&+B!A~O8Qm};(EG{shS!DTF^P-_A#MCTTHVdJuLj+9@y)5K2n8+*KNhpds2?l| zB6n0$<+s#!n*L>0sxDN;dDwoM3%1e!6$$_qpWBvB|F1;>?bnK{$cS#6c~l(v!#iC; zY)6(3jM0;cTS^F87-_jroOljQ2xBU{h^L?*n^Vtyi^HXJkA^Fr82k4F0^VJ&b zj`4rodW#Y_%d9{(GOP~n`ehbIpkQuKT3iNo%=KM!)2o&fVs15SaKm-qA*jb$&3hKh zunwWdbuJlPni)&}#Y+-P{RnP(XrT7fb6DW9ov9+3xwYJo?f)cSie_O6^)|Nd0jAh} za5gtdA{sg-hpnpc;%9!2Ee?Y-NlZApuP*V`A^b@b4b&1`UWrXAAHWwrbT+p2VDIyz z0ZtQmbB{FoHMYNe?COsS?&|s!xYX37CEqp|0=L(r0kp~=N~)UUEv1x`g>LKNp&W;` zmaFMv4Wh-Y?mNO4H(fr4RcmOv&R|gISRe@nmGt7|X&I?`_{(G;EbQnOC*Liv zbZs(Z?2}IbSe1G^Y04}ob6jy|+;TRkE=D(d+Q_P5^A)k3bm^TFypJp8w0j8Lmo?hJw09uIylo2{QD z#NBF_R(Abn`=R+a{c+b#NgRzAUsQCz$VBH}uEsn{x6zF5Lx$70+wRWz zGYxDvHs=T8#-b0YEc^;+86Td5O^3oAL?{qRK_cD%v+$~8UKcP5uq;&dV<&Bf# zpM`t*O+}S^D*KHu4!!#uqptVJvv#|oY;wOr(NsCW@<&4e*x%Dnr+$TjQLK6qpFh^xNKvH=D6?3ELmu zAOwMQRu30{trn@N%ZQl|bbU|}fpT5aVg8jWZjvCSopWqxFhk+MBQo<#*nTo-;g+wi zpJ@vK5Vjd@R$fD0uiR|!jT$Bd2qbcd(&9G=8#vRpS*K`*!PwFfEv`iAIY9~Pjx`lXAT0=5YTca}MeWWWJAG)s~}n)=Cod4VMmJw>>= zyy)$4Jpbl>PTc;mhK=Y_;RQR-6+8{ja%=*8R)AN-SHnyHNU8Uqeg$9@9lwY0?u}MP zTAdj|!v1^t^ir!*(;Ht(c^F=Dh?kQm|FdNpRHD;F^R-knHTS(2m8y}_J7QE*>XL{k z4G}G#;g;8mwQd9C7i^?h+8fr09jWHe|AAydi{5cO&`iFnDkfj>oxaHcQl;%5KK3ob zIX2z@35wwV1Vu`NOZpAjHJ|M2Fx0?;~nMBA|3_U|XrJ^NRZU_@Zzb}*!Is^#&fZ*KkB3_;qL`=GXmug1_qM4-Tu zi9bp^1*TJnD(c}?R9=q5QM>3yt{@t0PkD(2*{Sd90wOXtIG8^v6Q}V62eL7x>D#~o zhGiq`U}zrW(YCzJCAp|wEROQk8$UhaiX;BD;sbyU6(Q3+{K~(tQc=~uY>#`bSUu~! zfKIlip{Sssql1tuA@%3as+W(!Am@;Fsiuuh5>5SRjz)YAriA$LPE%>1?)xeMUe|a) z5G6ZDd=uAiD&wLh0*9T&6VKNfdTkoXS#r{EbM!jGF3_dj{F7Ew{pF*39>Wf)%?-X3Iyvhy z`H;l-@4aKqs%A{3bsV@?X(j1pjEn{%V|!%OXUhQw=b_+WP)M#YQ1sCvN^eJ(EVN%m1G9> zrJCPi-dHzt+9ONQt)s_8=wpkCY6FwPXyY2$EG4Dy1!(X2c?jEaa666Oyb&px%yF6L z6F1b0$`pue{;gleAVHfgVa``f{REhZ2Fesw|6-+LBcY>?7Sdm*r?Je;a-Gl9&om!y6n3RHX;XQ~-%C==@eA z#I1zOU&)q}c$#{mTYb_1y%GlW0NF&D{-u?S?^B;dx6c(YOB}g&j*qUVo-re>}O-$RqVWrug zqcMpO=rdB1kpZ)}2nq=NYbeSC=AYM!yDY)FwCyx^pE0q*Urhle+c@0svo3gzi%S*5 zdvm>8*{4AxIMlNI6EcwcKNavGI5&J}VzSvx`=TDjx~*L@Rjp-nnf%~NevGD?6eMFE zM^fa8RrGL@$kK*7WV_*Z)~=Q0s%c%iFefhlj1J=jBOK z)J^H!R!m|XV3MR4aCCMj>%?)brK_t5G;vMeU!uCE6-qYX=ST2Oa8tcLU~vfjhaUg2 z-0G4YxewXT%*42s`nk_%H2aE-Sr{R?Mjvpgl7KeXALH3U(8Jzng zg8MYOkymC+)3?9Q39)zxdfX1SN{s8d1O<2c!$OX6P>X)YB}v6=%2))na`ptym{sQw zGQj9&e1Vprps*RSV@3T43wVi_U##@rIJ5lS|0r3N1VuWU3W7$+FPV#%d`{CxJ~bvpA1>A;CA@X$%Jvx_SUtGiX;GmHAMN^0!=68B1fkH2|+UM$to z^t<|Lz)@K|PR7+`jQgq5Sg;-UO1MpH3HCup*Y&36P}ypbHM#0`(6&vF*9P_bY%rv#g{qY)+Klr66mnoV02G6BqxCb#ZvU-J#HEufbl< zuaG2DP@Yd7jl0le;C2TF)8fEaziB#45TnB-1KCT!^d5vwc&f!7gPq`?24&;=TE?&U zuC_uJ^~D((;!f;7jnuB7E%coa>}7V%4Wl0`GUjxNU)@(un2r!&umyHXse)4g+>}5Xg)DyAv+je1LtJRKKX7@z4*=NJepL z&__F;y0QDP;UAlr9AHqPWvcUW7p9W$ zSKrXEnkoFbWLYJw+vEg_ktKJUc7*@XeKe`<-L0dtdOGu^KR@3EYMRsdr>CjzuC_@( z!w3)AY1$CO`|9jN+e%z%HR1ezIG?1)BV20wC~cEn3wvkwm+~N{)Pm^dWWqcFld|Ox zhOtf{)wx3wM}Z9y>AvPOZCV)V)-f|Fpa*~!eGI73N^HXCD?unbKnv?LYH*~s071aK zk$F0V6X72u^?!;ErUz(zBQ>Z$>W~ZK#Jb~huZVbe!1|ZH%ayz-Q^qR<_jeH3A*YiX z?EeF+&kD;OJLp#!*dvTCU^VQV%$mfaM@3zw3*?dcb0*P&vD+k#2fTaSwb~(eSPLN+ zE>9Ngy6S_W9bYp}_YcnrbZh(chk2#^KRtT`l6FL-WbnR+$KZ?avnHbuBP(PJ)4L_V zVw)Zu6uf_ZCuMR~zW6#OZ2~Rie_Pi+bplnsxHFfetxIJi(!jF#YdiBKG%(G6T*Ef7 zCRJmzWXQztH@D#t({eWnFSh##9T)I)8(pR_zTb+rr`{vY;<3Ei)m3<4%I7mbG&hZt zk)O5GE8VefZ@Cye?n*VEF%c}O*qEcK+3*?O1PkPH?@T)9n`ljl&CcZ}s=j@? zsrUo$!Cw4lB^Co0HBU(aLjrzhB3a1}oOHf@p+8v3_#wUW|4#UKW?7VyqQEe3HvG?v z(8}hvRRnOM|6Or_=4u!1-<35twTyrBXLWx1CZ+P1JA!mL@81=&daR_@{(Crq>CD3H1 zA$@mtk~xBq$nX3->O5w0j!h1BdWBR(b+Sv{PsRi=D}He)1!q1)>i!p_#w~? zyWF$Kb$5rLIlRhfk&F>UC^K1FHZJ5`xG>eqG@O_?S}UQyjoicfhvxKn(zO*I7zFF2 z{Va{=5ccGK7q*S7tE-}#T3qk%m1eJI|L5LZZRWqlV-T3q(I0#|l%B>?87c@KcU@w4 z?g9qe7cB4`Av(73qgcw*K{Adn7jf?!T-#_t%=I9A1UaVi*V8tNNrMjSv2RKhGlu9O zdNEJcYX*r4#3!r|Q>%}jw1o)rd62$u!}bP#cHoyq|65&Mn-~5-wd@`;T$q6o8Yt}` z9OGiVF^hGZ7ri37^;NL1m!!YaP=8?|Ng#!j>Du5;kjs;gnaZFy@3li4t_ziw+ltRK zQyW4iLc>$0@-odL>gF_kFE;hn*#*flx!vLZy+-KfOn!8ln2@eeTnr%d=^+&qxVOjI zWfQm}whX<{0UmVKxY@1_{_?NOKV6l0%$9l6|3+>i_ab0gqwrD4gzhVni z3kw@)%KXpW3kzj-1aa^uhDEVixl;rl1oV%qEX!zx$Ae#hL!aabfXcjBAKPEFVdeZL zKd%b$=D!8l0->k}q4plg^@8=oc>}3-htfNHa#HgR=V9(7VhWNl1INa2pl|?)`K98I zy!-hVA?&+Ev;qS=oeJR7`it+`8R>EcPG2kOVb*Dsx4u|Ft0Le2tRmZ@V1$zviW=zO5?Jq1UEr39{!tMN=nLWQDY!$lsxsIj#uU+2tmFg%yyqK@|>Qog4DPqAzVX@og~0c7HsL zYIyOJP1zYA(C1Jon+fKr`Q*RX7aQ1LNnfxzPvpoHFuM!5`!aA!NeGBuPdt8-{xD4Z z)|XpRf$GM#8#yaTQv7BU>eEdPN8HKKk%Hpdc|n2udsgjn(~ks@zG>-?m>;1_;}dW$ z`(OUBx#!liAfcuPImqF-%OFAEy*l;4JZV*d-!g4{#tvw&soze>q7ww%Y|B)_ZJhuR zubF=H^u8~asML_vp_gfTMQW8_Mn?6qJEx))16+SfxHD)>hsD(>(v~~dNhj6R$s@{u zolmRRNQNi;Vb<0ToKjuT+eBe}5TjMT?MEgx`t$kF(&+}kZ};iuMdO?0rfrlG-n^VT zNW+TdFqsfLf$^)mPr(`)pJ^<{x-fRfyz1*sm0#Ijk3a;owN6tp?Nf+{q_Jz;YUUS{Y z)@DQ(HZ=}gFkVw(#&y1cnhfB8Fp`VvMSQ!*pFZ`leL$rIpo_iPWPOH0uu>UrIHhF~ zqG9QmXV2L?;9&lYyHnn@_St*ufFUY{$2Q^G)R%y^h?Axs9532;Xu0O5J)8Macd;C* zL7nMhEFxjITtxyp9kkB20~439x#wI+D1G|$>?seAr=$hbNEe*MySWKN+wvoxilE^E zYFYj7C~qyupnsMMT#{-AWQl(~SnvMv^Cz0e@prcJ)fR7!bb*q&Lncx8$kPiY?sXTJ zP{_lTZLFF~4Pu+s-;h@Jp)kp*1o3Fjt)MSEc=kt-MjE9%2T(3fA~p_?3tHkn45L6S zRjQy9Q-(AiG-C6B3TiUm_;3oq639SlVqO(CkDM?KIotO^pV9v=qK%*h zrY%!wfI5P7Oae?;aF2VjO^?x}Keg3DmeM(dy)fCsfimQDZ@zg^V@kiq;RLOaW2R@U zDr-_x7_m2nHg{)FX$AW~X6>MErdXGPoIghby&TKn5PeGJ??y^jRGdFNu|dImG-{d` zH!=U9mW5I6sy@e0nKz36ibCRei~FCN5s_=UDRFF~r7g)??rI zH8nU_dyEEa=J1|dA2wrZ=+-@U-AZwORbz^TxTYnYxZw>5OJ$}ym$+^8P|%CK4L#!0 zLE~*@^BHbmhO|*E>1uTU8IwNL2y(Q}A+mfUZrVV!INT&dM@^k!>;8@oaKu!5S5VtJ zI`#ofq=QR`b4w7&`WNbHpZ-L{C%SE*rf;;G=-_G>F$$ z1`&+(m^&MG_&c*-OiTPM}8@04U6qx+U0r-wc5qEZYhEp4jYk4~OF~a?|6+6!GgWIA+TYiw1@smh6XZ1L?>RR|d*%yJ=)W;JWs^fN5txPpVeyd8 z#BE|GaPQOy9HPKXZ4)9eajPvcPVvI+q*{hR9KluEu$EhH9Xwl zf@u@Zgac1-yC({Tl*^MMpU2l~=fAi(F{i!|kW8)=xL1t#h@+bc1VwIy-lsboL(4fK zZDAQy4i2UorS)S8!AhqhB;q{RI#qDEw`!&+1rX8xQCX=lOjQF0J-&g2MMmQMD=P_< z#e3sXD`4cHcX3m(fDKA(vX5rDPmsFB0i8~;CJc0WrL=LvAh(}ZYP8sy@2@{IJa?rW z$>z0Ph~jI37^Hp$ssyC-wz$`N7{<0-PN^h+=SC@?((o}qn(&XqvS6El)5_G7OsrrO zQC_Y#k2fApkqy%RLrUhAxHJP4O~aD+e1Thx$Kuwv$q6Q+#L!DjBiv_PGVFH z^!1&Assc*eZaEhWg}lS{Vu?SGeVJn?o_ZA|pS+GBOzi5CjiKups=FdE?KMzGU~SnU zbiQbi(W+8`SKiE%Ch?&44O|Tsg41}qu0NAXcXG($%aYYeLOx@G)0v-AD*f8p-qu{I zbKpENUcjk`jV!<1>09uL;A(^4u)s9v3&ou!Gmu*k~JPo?K)LqhX|?75s36>$Krl}JFQCL6EeB8j*k zt)BHIAU_G^Sy&JE)lK2IBM!EbRnL7^6kyllveBTB(Jz5l&2*{lKt-q#aJC3@CP2q#)Ny$(Avg@*m zYV~t!X-sN`YEU8EVvp%j=wRS^LMe|olvU%CjRa8b+WDQ`mQ>(4EHS}!#(-2fI{1$^ zxsXk*cWDd8)$+Lg94B7>kP4`ra*p$71k8*)tb}NXr{lLKdc2T%4VGav7bq6FKL5)i zq7ln?gOa-n6QmCi3

G#2c2bnB@g?0wM{H{Y5W z3NFb3JJ+0zPiTrysHS{1c@@Kgm7ou20_!?hjhlT;aUOI!Dhx|oYU$HRGkv_$pTN+4 zJubDoo5&r{GvY3IjbZo_;rZgr`CSbJoo_h%3f9)gakPOJB_Y)8#F4p%L|VKuvb zG@Z`-6BxlQo_`{LMEPDQrrpEr6ygBu3%z$Hu#_~wzo>nvUW`P$i{YyQ=L{P6+?(9l zhi`sE@AV}!*}1vnNIjKw0ncksvUA~_$x}&80w6eY%f~IyMh>_?(-x`W@`p0E3l-Q; z8FKJfeZk)FUd? z(E`4|_!*Z|n#64Xo$#ty6=(|oT$tTG=f&Q)pP@IXOAbWc%=tk)D4KoU{|rs_(2}&7 zV%1md;sz08xU#_LI?N=M+>%d9-f`BOVy+CA{^|sp(Eh8-_@8y(#EL1JgK5JDM`@;? zLBGC%S7c1>&7_UiCEeIR5x-OZ&G3eE9k8f2PnyZ?z&hK_*#q_bXDLk*%M_B6iuJfg z>-?fo*sQL7bAH!k-#r$h#uB<}^UFpeTwIMlPlV#W4;cXhqVmEPvNOyzz{=#0Tq`12 z?U#O64AF@`1%=eIdAc*3VhR6e1W<_{tbSeAGi5}RQX00XAGrOuZeoFoz-t@gF5(_u{dA-4-4><^>4~Vmg)aP)mwly8MOh!qe~Ao0jP4o;Y%sR};eG%2`~LsBwrhLNIrn|;)91M} zTAX@RDHUj(fedgh$%yslc-$FRPGk>qi6<_4%bc9^@%iZV=RJHu2Z-RG14e(;UT}PC ztDKOi=;*-~8IeVbTgCo&;Pg8Ci2No@|8%EzQXZy(kLMeX*vJP(ce`DjVKiN=%KXu= zf4Z_M|C~X1GY8hsgGjxCyX4$@eo}*OE%%C$EZ}@Wkr_Wo@D^wfU4mtfCA@)G(eD+_ ze{BPhajB<%lm_Uw3B)?fwjf}_^l&fsZi`TPJz?Wri?(LMs=C`9Z+_{DgN)%J$0shr z^Env&c)-JDItE$3jOk9PsEv?Ke6RPd79%uF5~4OxY`|_Ks==1?W%Hx%sn=7|h-~(B zLE%pTN7fFxL2}i7m7G{58OHGozw9ObTKMy@{E}Mc#l`Fqd%!2kY&6$Un;SL0Flc2= zwiTnHk697PE$X%;_eC!*uBPTS4j%3QD5^d1CXom*3CZnLq3UWt8K7 zI1vbrxe&%=l~HVM?RCrUwj$UK$SVdKvate)4wHtSfD`6vUV4%4P7g*WK6Y_Um3^}6 z?uRDbQ=<5>Rtu8?g3za583v@sJduU&Y_DL2WTGpN#j6NT-F=kl29&r>$c+Dc`(|pgj@xk*{ueDnM`OYgUNZB%FT*^Zxl< zl&PNcUxh3G3L~l7AU9+vTRGu-yjx+n-d(4r)aqO}UUTdfKEjAiFn69mbuA$JMSIFp zd(_EQwcnoXoRNP4yKGl9!#;l~vDk%Lxw2lVl#c%PA$=t;!cd`rrkLojp~Ahq2Z+}v z`xHvZXksC6Z|W6XL$HOwiWkd!0R*O19#^^}3T)LIB~3p3Ik6*-!LdoMRG(-@?5|lf z3;ddA2M+tY<0`sdRl%3I&VHS04pvS;Bu-SCR>J-?-V3tlH~US_0ewqO5}MzxnRjgX z?dMO8+N4=am{qarn zs5X{mkvvbV;!uI2f|uAKEopYOhpvkg59(3P%@3x_J7=Qv$j#>~)4UA|-sY*vC)_|i zj~OQI7M=PHnQlu`=Zvg)5Irwb2GD_}J)_k857S>drXaw+>CMbi^^b}2|K<$;H|K{w zw+1OSh=X3KZ24S)6i-#-54hs`&DTO6C1ao1EK@Tpy#RpcAX4Ix zu2b(c`sFx0>QUr{P*O(Ah1bggX3DT zjrE0Sp=A(&<8b6*_sE#TW3dcv0rrtE%tq5{OR(bn2Sk@> zE(s_S-gfd+9g|k0T_sA2LUs-?8@Xd1fbL%5POR*Ij7734X0AnZ4csZhFC%d85K$I5u;ep}4Bp!4LphNEo_U?b^2z-ph@%F+$tT9G*K_3m$ zx2UwU-ynfM!P0~7wm46getA0vQ2jC%uEzuWwgqRFn6a~nKjMFF!C-zO%mVZ!5jyqF zm2A9Q_XYg&4t4vF_g{IOOdj(Y5VB9P=m$6TJnitoY}PlVzRF-2Zaxq}U4FJjehUYI z7Q=f+qB9LQ&cc6DV2B2VbXZ)DYt}Yj`U|g!9M=HFPh5`GdWV0Wm~~h#Q<)k$mel^H ziUR=Z!erM7+S4_p=$wLItE3BT#Zm0#)|O4YbhW$Y{vU#3kARQJMBXce#nB44i$tnCK2Fn6zhgUq~W7hy{6&VdYeut&VthdG@* z63}RX)1gzdjvg=rhdk$5q%u|dyiQ~H4C!J@sUJsHTYa&s`tl@3&J&BhwgsWEy#xY+ zvf)suCpEtw~F)_d6&WUoo+u6Y@284bM>ft+u=%V({!P-G;5)PxIo9qrP}G~5c=vO%^BH`qVom- z4O-XZsyavMk1ys|a?25H=OJkrK_Aow8Om*L<>)4%DD7qe{HLviAygN}G0byoB@j=k zpJ}QoZeM}F&sMLGv|)vtEs1!d%b<3#TlFu;e?-K#BScy9W_HGQ*X)s}U5MsNY)k8R zax}^LTGLkAN^b%G*k9-N4gKD?epj5%;fkG6xTt$riY3j)d)OEw40vG$H)u}Q&>2^| z8duv1-!2bZST!%+9-|pxz`eGKoB`g}u1P4i(B>CYFJ-H zsD8Dwp%c7X9(F$n8x6dZ{Xtvt{6nK4B9Z(BH2FxQUteV)^UvT>5k#vVXPIz> zxmBVh1S@SiBy8P$NXl73Np%ZEbLX>OoNt=TkFuZL;L+(-vlg=FNo12}kvkjxG@H@C zxy;S5LXf3}BiAlQSs%`TV-Aqg_4zM!&I31}mXJugOphg~XC5JNb1fwj&XiccI{yIjrI;?F|BTzkbJsg*Uwn$f(|o z)9iQmyJdPRucPuQAM58kC&sb|HpyX4=o)35oA4N>fdkXT+AltW{Mk5Ar=uh)b1;d! zh#Xa%ee8A;4?hAxXjy8e z%%*D}AW~Y553UVhliY&p{z(QM^6_pO=TK;Z+pT8$l+LlDdU67K61uGVL5jXa3yFH$QF6T@7Li*ND zHJF(uL6!7y^y&VjBx){6!x=`0EsJQ1VQc8JWTp|1qSo$vy5B2_D&S9=J=H}y(s;7y zEf7g>h0}aYf6&D+w;Zm=S4F9d(g!m3Lc{O#0cJ~;)2B}ni~ zW8*<=)3=k94FXUVy=d`?4&DK+uo^tcEl;hzfV)#Z04ue%%L##^a6o7fy*(=_f3NKcpIs0A+6CD(-_W9SB??X z65r47u;7PuhOP3yB>H+TXZn9#NAo=rhc2?sGCPGrjfk-@fU-3Jg`xBD#X!69Kg`AB zdNWu#?&)gkF~De{Wun2u@+B)jx#<^*Zvzca(VG_XMa3$!ZK8%R(LRrE6G1xf`BGQ8 z(pC_B%_9AKp)Rp2w5CjXTJ{QO5@67?aZ*zRrZ=K5`zhQ!?Fk15wb z8OjO^ks=VslP7m>*>$0ib}Q!QdsCXMT6)aCky=(|!n%ebis@_M>t_d_c!*GVtneTs z7t`dw5KyB<@H8Q4%D954dGJEAcOnVD>CCOAxZdj*{(|D?HL$5gU~nToW}Fp=(W>i~ z68ulYco>8c%%Pp|_ss%-*jrJb*b-@mWST{71I3mJ(;JL6Jw`ESG_I;0RLL7aZUN05moI;#JGoLs1iND z=>D^{5GC$;XtC;YPb>`u0E!+0fJ4$=Va?yg-{@V$4FVe?Hy(7XgSV;fDj35+^&gyG zF*%3qzDu`p3S=l4McR7(0RUC@A1FtP+(Y&m>u^O)d<6!Pe%>1()$rIC0wfXvLngM- zl^18-DTCimuYpX78!8{j-c;romvzW)Y;S*U$ZLW-1_*IFzeWjf{$7FIS`|leaPN0a~pS$45gWiI}|-0So_nR){~UO;1;?FkNZtQk1Y{uXg76~{v^e31HCnUI_mrJr5JZ=Z*w{SNf9ZSRVM5)lA3rNPSAw3b);M2|97-URIMF_R zY2P*$9QJzvB?r9p$|qidxfis@l)itJ{g7D5hGv6RS#;4#>C`-AfBNgb#77no*XOWN zdsz)`e|{6Rf(c%GbcWA2d$r$tu2QRAVJmJr_8pAFaC_>n4;`rw2Lu^lhw7jdV})D6 z9Gg|sdQwE}S>aPsTs{T9p&r!ovgCZdV6kj6#CAyBeRg8|Zn^0IYs2H;&ap?Ypvx+w zu^;=9HARnB(5FXCUD{tCM^tyR-#Ine`=s-mM9mXYc}c(@;6tw+tN2=m&T1!&o#E8P zX{~5EbcGe1tnA;s5CaMs|GE~*t&qF8&|p}#&=5GxdjsHlodjUr(4AJ~0;swKuyHq? zU6d%g-?U^MWmx=ZB`}K>YG=#lBs@Vv*i&J>`!K#OrA6UIV zi?cDP_l?q9v`<%B$^Q42mP}k4VszaX9!Rf{=qW}AZh^f%SxdY(5PT=$oN5v5Ty!6Ub_dT}|~F%>Oh zRTe@;7h-A*VUz&7bbh9)d;vam`i_BIN9I<-{g?W}_n@i{C-|US=;IOr_Etq|3#-wb2r@@Uk^TlT z*oO}hnz}toLK-x#xab->(ASLxHt;}(ThcfoNFWgOeLt8wkpS}J`hJgnY%gjEsjkbW zo0t?XD@PnK6>`eUU&A2WF`LEurFDyqu)Etv-N>jC{;axM>|`l$_yUb9-(ty33N?*p zh^$+xH|i@TXme0@27$D{K4dcc&A=J9EDHXkyj5Cw*mfc1_iu&B4~4`LgH#kOpmxKX zc?}@H#miT<9Mdxd*d&R}PzHBMB~Pn^a@hz0RtNLEf%2TJV0tp& zaM7Z$z(#EGJ4q5=yyNDx764$0AlM2h@RJpBpG?$@dT$F4_d8=)Ir<5JpyH-?0W-7b zy15FA+$$gF-THVCpg>M*50C0kn8M;3%l<*mm5SrSWcOl7B=27u@H?_xzeu?on`lwqNz=b6=U7(r1x3Zs`IKDcJL~o@Bs^{wfox^X z+hM1!Y&f{+7keOQ=u>K$*LRtTs~YHt_>Zex?>~I>F#c=82OA9ypHcbK%$i?k3&*FU z0&@Nna+Bqc>{pKu7dPRKJ39<<6i1_GwWKkOqVrjC&~o5Rs&eWi_TBqU270F~)EC(8 zJV$2jdVMaVN@438UM?fQHhgxp(h^GY;?*l6(AeJNS%sDZChqbecjH-hK1T`XDc#G) z@y4r)2QP!=UO)2~nd%1EMyl9Bn^IjkaFn!UPG7(CoqZJTa-6F<(sY?aiV5s6%EqSM z3l894^X;4o&B1gLE6P6Uy)r_5BdX#CGGPwkijAMby7#GqzK;<@9RQ?*ODA}Fo0|8k zy5SbVsR1?{varW?yS1BpK|$RzSOWk^q`n3#Ue5FQaA6E_XVwH~)BnU+G_oDa;XJkD z;)7aiaX{2U!-Y}p#85K;VcUPG%mkewd zDxy}kXKvWGoz7;0j(+O#%=LbQ?45rj7B4epKQ$a^(R9%!v$ZT_@(*wxGzen%0$nv|~3b?kHx*?DcQ znbaJe^j4}|t7_F4fT82VXFo@Qjt8_xeH^(=^Xx4lFC%zSTon|V! zn^tXGv6p69vc_L#X6CV1y^2_x$AL|EBNBcW4ho|J4Su41c04Fz!34l3l?6r!dg!%1 zW>sO$xjb##3arrm`Cq?RVPezYTtufU*OZ4S6rRxdRnA^zxb1!MuiR8}e?cuF9d+-8 zxI(OpEpDY!f#u)t=E{dNscgA*D`Si^UK*$T_vTt@K}PU_*cKY823zyR3BpRVm7Z2( z&-vRp!JuD<4x9566c?>^IHfwhftI9LXKXnzI; zMJYrtb>yUX`ZhDmQCoYde12!V)7XV?X5+Z*t%{!zoIuuvM2JkLb$vMH=M1Qa;ZBj3y=afLyk@h>!iQi zDzx0dy$*+~u$Nsac)Bp|*QSc^4gg%9WvIX#f~UyKfn8j8A5gVuTEE&U&gBES zZ(kj~FZmUZKRfMWPWwQ0uR&PhL?Dw^1o)?;05bp2A9g z{$y|?vv-_pt?{S0(>UZQB_SGSb&kuBs7zSIVVMCBB>Ux`S|k?W#^Q`aW2Wj1)@90yRf_)MRuj6GfVPrdo2G)Ss7uO%3nZJ`4hjMS*;mKcQLMi79V#z<2i;+@Wcl;i4O}kMYd=X)98=Y9DH;b#=Wv2`~i9dmWR8IUY3Tor_ymP7rIc@!0~NVL-lbBAF@ zroB`-3-@|B%);#O2C<_NM*epaX6Slf9@V2*5mx*-4cIK~k-TF6HYVhkG^KmNw%y#r1sou0D+aw7%mGJ5(z$)U4?SvJGroH;sE{jORlclk_$a;TZM#%N z_Q;sJy7kpsWm(xeON^jy7oJHSms{i7?T)mR&(i)A^E@AOe%fNa04P16wI0LxWl6oWpsoHu=wS-{qqe2K1SQH$vwl{l03KIi}Y z@}wil@%~6=c!t8M*^mH8&uwqWlAet%%0AZ?`l$ko07Eiscax13Bhy@B2bz;F{b6^Y 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%0ANs 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

RrFMnYD(6BK{2~w^2RduQReb~V5zb4mx(R=1|)e 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 diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index e1604715ac5f9cbbe4a7f99346ce50df630942af..5482873c8a1aa454970817b9b02b07ad5741a0a1 100644 GIT binary patch literal 35925 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 z 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 Date: Fri, 27 Oct 2017 23:04:07 -0500 Subject: [PATCH 28/48] Automatic changelog generation for PR #3649 [ci skip] --- html/changelogs/AutoChangeLog-pr-3649.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3649.yml diff --git a/html/changelogs/AutoChangeLog-pr-3649.yml b/html/changelogs/AutoChangeLog-pr-3649.yml new file mode 100644 index 0000000000..04a9765da6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3649.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Cable coils will no longer appear as weirdly colored APCs" From 9daacd69c5410ff414ecc00b788ef8ab97d03445 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 27 Oct 2017 23:54:35 -0500 Subject: [PATCH 29/48] Update game_options.dm --- .../configuration/entries/game_options.dm | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 436c77131d..44d7308fa3 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -110,33 +110,7 @@ CONFIG_DEF(number/shuttle_refuel_delay) CONFIG_DEF(flag/show_game_type_odds) //if set this allows players to see the odds of each roundtype on the get revision screen -<<<<<<< HEAD -CONFIG_DEF(flag/join_with_mutant_race) //players can choose their mutant race before joining the game - -CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go. If left undefined the game's roundstart var for species is used - var/first_edit = TRUE - -/datum/config_entry/keyed_flag_list/roundstart_races/New() - for(var/I in subtypesof(/datum/species)) - var/datum/species/S = I - if(initial(S.roundstart)) - value[initial(S.id)] = TRUE - ..() - -/datum/config_entry/keyed_flag_list/roundstart_races/ValidateAndSet(str_val) - var/list/old_val - if(first_edit) - old_val = value - old_val = old_val.Copy() - . = ..() - if(first_edit) - if(!.) - value = old_val - else - first_edit = FALSE -======= CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go. ->>>>>>> 360fbff... Fixes losing species preferences (#32093) CONFIG_DEF(flag/join_with_mutant_humans) //players can pick mutant bodyparts for humans before joining the game From 12fa1e3eceb4a95332d71dba465d20470577fd7a Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 27 Oct 2017 23:54:51 -0500 Subject: [PATCH 30/48] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 2cb59f2c8e..48dab29cf6 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -294,20 +294,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Species var/species_id S["species"] >> species_id -<<<<<<< HEAD - var/list/roundstart_races = CONFIG_GET(keyed_flag_list/roundstart_races) - if(species_id && (species_id in roundstart_races) && CONFIG_GET(flag/join_with_mutant_race)) - var/newtype = GLOB.species_list[species_id] - pref_species = new newtype() - else if (roundstart_races.len) - var/rando_race = pick(roundstart_races) - if (rando_race) - pref_species = new rando_race() -======= if(species_id) var/newtype = GLOB.species_list[species_id] pref_species = new newtype() ->>>>>>> 360fbff... Fixes losing species preferences (#32093) if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000") WRITE_FILE(S["features["mcolor"]"] , "#FFF") From 2d8468aed06066790aa2d192005eef0ca4ac9a04 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 28 Oct 2017 00:23:25 -0500 Subject: [PATCH 31/48] Update _cit_helpers.dm --- code/citadel/_cit_helpers.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/_cit_helpers.dm b/code/citadel/_cit_helpers.dm index 9ac58122fe..f3db31c228 100644 --- a/code/citadel/_cit_helpers.dm +++ b/code/citadel/_cit_helpers.dm @@ -26,7 +26,7 @@ proc/get_racelist(var/mob/user)//This proc returns a list of species that 'user' var/list/wlist = S.whitelist if(S.whitelisted && (wlist.Find(user.ckey) || wlist.Find(user.key) || user.client.holder)) //If your ckey is on the species whitelist or you're an admin: GLOB.whitelisted_species_list[S.id] = S.type //Add the species to their available species list. - else if(!S.whitelisted && S.roundstart) //Normal roundstart species will be handled here. + else if(!S.whitelisted) //Normal roundstart species will be handled here. GLOB.whitelisted_species_list[S.id] = S.type return GLOB.whitelisted_species_list From 5dbcbf5689bbeabf720ad033a8f374922e2ddd37 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 28 Oct 2017 00:23:30 -0500 Subject: [PATCH 32/48] Update podpeople.dm --- code/modules/mob/living/carbon/human/species_types/podpeople.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 84bf5bdf80..3881eae6f5 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -13,7 +13,6 @@ disliked_food = NONE liked_food = NONE toxic_food = NONE - roundstart = TRUE /datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species) From 79d6f42dfdb083db0998122f356726b6ce67b8a9 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 28 Oct 2017 01:16:26 -0500 Subject: [PATCH 33/48] conflicts --- .../clothing/neck/{neck.dm => _neck.dm} | 19 ++++++++++++++++++- code/modules/surgery/eye_surgery.dm | 2 +- tgstation.dme | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) rename code/modules/clothing/neck/{neck.dm => _neck.dm} (91%) diff --git a/code/modules/clothing/neck/neck.dm b/code/modules/clothing/neck/_neck.dm similarity index 91% rename from code/modules/clothing/neck/neck.dm rename to code/modules/clothing/neck/_neck.dm index 2867aa405e..2b66a85fe6 100644 --- a/code/modules/clothing/neck/neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -1,3 +1,20 @@ +/obj/item/clothing/neck + name = "necklace" + icon = 'icons/obj/clothing/neck.dmi' + body_parts_covered = NECK + slot_flags = SLOT_NECK + strip_delay = 40 + equip_delay_other = 40 + +/obj/item/clothing/neck/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(body_parts_covered & HEAD) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "maskblood") + /obj/item/clothing/neck/tie name = "tie" desc = "A neosilk clip-on tie." @@ -162,4 +179,4 @@ desc = "Damn, it feels good to be a gangster." icon = 'icons/obj/clothing/neck.dmi' icon_state = "bling" - item_color = "bling" + item_color = "bling" \ No newline at end of file diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index 3e84d48e66..9099489420 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -35,4 +35,4 @@ target.adjustBrainLoss(100) else user.visible_message("[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain.", "You accidentally stab [target] right in the brain! Or would have, if [target] had a brain.") - return FALSE + return FALSE \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 6c81456840..61117150ba 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1287,7 +1287,7 @@ #include "code\modules\clothing\masks\hailer.dm" #include "code\modules\clothing\masks\miscellaneous.dm" #include "code\modules\clothing\masks\vg_masks.dm" -#include "code\modules\clothing\neck\neck.dm" +#include "code\modules\clothing\neck\_neck.dm" #include "code\modules\clothing\outfits\ert.dm" #include "code\modules\clothing\outfits\event.dm" #include "code\modules\clothing\outfits\standard.dm" From a221d3505f1c784171ef97031f640583e8ed7ae8 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 28 Oct 2017 02:19:08 -0500 Subject: [PATCH 34/48] Update DNA.dm --- code/__DEFINES/DNA.dm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 2a35230794..a2aa7b1414 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -127,7 +127,6 @@ #define TOXINLOVER 24 #define DIGITIGRADE 25 //Uses weird leg sprites. Optional for Lizards, required for ashwalkers. Don't give it to other races unless you make sprites for this (see human_parts_greyscale.dmi) #define NO_UNDERWEAR 26 -<<<<<<< HEAD #define MUTCOLORS2 27 #define MUTCOLORS3 28 #define NOLIVER 29 @@ -136,11 +135,7 @@ #define NOAROUSAL 29 //Stops all arousal effects #define NOGENITALS 30 //Cannot create, use, or otherwise have genitals #define NO_DNA_COPY 31 -======= -#define NOLIVER 27 -#define NOSTOMACH 28 -#define NO_DNA_COPY 29 -#define DRINKSBLOOD 30 +#define DRINKSBLOOD 32 #define ORGAN_SLOT_BRAIN "brain" #define ORGAN_SLOT_APPENDIX "appendix" @@ -163,4 +158,3 @@ #define ORGAN_SLOT_BRAIN_ANTIDROP "brain_antidrop" #define ORGAN_SLOT_BRAIN_ANTISTUN "brain_antistun" #define ORGAN_SLOT_TAIL "tail" ->>>>>>> ad30af5... Vampire species for halloween (#32096) From 6e17d42c33a6b0614264bc0948c6034a2a659a97 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 28 Oct 2017 02:24:26 -0500 Subject: [PATCH 35/48] updating the roundstart config for ref on master --- config/game_options.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/config/game_options.txt b/config/game_options.txt index e835a4b1a6..d3fa274ed8 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -395,6 +395,13 @@ JOIN_WITH_MUTANT_RACE ## You probably want humans on your space station, but technically speaking you can turn them off without any ill effect ROUNDSTART_RACES human +ROUNDSTART_RACES mammal +ROUNDSTART_RACES avian +ROUNDSTART_RACES aquatic +ROUNDSTART_RACES insect +ROUNDSTART_RACES xeno +ROUNDSTART_RACES datashark +ROUNDSTART_RACES guilmon ## Races that are strictly worse than humans that could probably be turned on without balance concerns ROUNDSTART_RACES lizard From 4e4634649e2e43bf472558bf5035ce360c127d7b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 28 Oct 2017 03:19:38 -0500 Subject: [PATCH 36/48] [MIRROR] [Review Again] Updates the cloning manual (#3663) * [Review Again] Updates the cloning manual * Update manuals.dm --- code/game/objects/items/manuals.dm | 1914 ++++++++++++++-------------- 1 file changed, 955 insertions(+), 959 deletions(-) diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm index c0298d8122..edaa4ce648 100644 --- a/code/game/objects/items/manuals.dm +++ b/code/game/objects/items/manuals.dm @@ -1,959 +1,955 @@ -/*********************MANUALS (BOOKS)***********************/ - -//Oh god what the fuck I am not good at computer -/obj/item/book/manual - icon = 'icons/obj/library.dmi' - due_date = 0 // Game time in 1/10th seconds - unique = 1 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified - -/obj/item/book/manual/engineering_particle_accelerator - name = "Particle Accelerator User's Guide" - icon_state ="bookParticleAccelerator" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Particle Accelerator User's Guide" - dat = {" - - - - - -

Experienced user's guide

- -

Setting up

- -
    -
  1. Wrench all pieces to the floor
  2. -
  3. Add wires to all the pieces
  4. -
  5. Close all the panels with your screwdriver
  6. -
- -

Use

- -
    -
  1. Open the control panel
  2. -
  3. Set the speed to 2
  4. -
  5. Start firing at the singularity generator
  6. -
  7. When the singularity reaches a large enough size so it starts moving on its own set the speed down to 0, but don't shut it off
  8. -
  9. Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?
  10. -
- - - "} - - -/obj/item/book/manual/engineering_singularity_safety - name = "Singularity Safety in Special Circumstances" - icon_state ="bookEngineeringSingularitySafety" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Singularity Safety in Special Circumstances" -//big pile of shit below. - - dat = {" - - - - -

Singularity Safety in Special Circumstances

- -

Power outage

- - A power problem has made the entire station lose power? Could be station-wide wiring problems or syndicate power sinks. In any case follow these steps: -

- Step one: PANIC!
- Step two: Get your ass over to engineering! QUICKLY!!!
- Step three: Make sure the SMES is still powering the emitters, if not, setup the generator in secure storage and disconnect the emitters from the SMES.
- Step four: Next, head over to the APC and swipe it with your ID card - if it doesn't unlock, continue with step 15.
- Step five: Open the console and disengage the cover lock.
- Step six: Pry open the APC with a Crowbar.
- Step seven: Take out the empty power cell.
- Step eight: Put in the new, full power cell - if you don't have one, continue with step 15.
- Step nine: Quickly put on a Radiation suit.
- Step ten: Check if the singularity field generators withstood the down-time - if they didn't, continue with step 15.
- Step eleven: Since disaster was averted you now have to ensure it doesn't repeat. If it was a powersink which caused it and if the engineering apc is wired to the same powernet, which the powersink is on, you have to remove the piece of wire which links the apc to the powernet. If it wasn't a powersink which caused it, then skip to step 14.
- Step twelve: Grab your crowbar and pry away the tile closest to the APC.
- Step thirteen: Use the wirecutters to cut the wire which is conecting the grid to the terminal.
- Step fourteen: Go to the bar and tell the guys how you saved them all. Stop reading this guide here.
- Step fifteen: GET THE FUCK OUT OF THERE!!!
-

- -

Shields get damaged

- - Step one: GET THE FUCK OUT OF THERE!!! FORGET THE WOMEN AND CHILDREN, SAVE YOURSELF!!!
- - - "} - -/obj/item/book/manual/hydroponics_pod_people - name = "The Human Harvest - From seed to market" - icon_state ="bookHydroponicsPodPeople" - author = "Farmer John" - title = "The Human Harvest - From seed to market" - dat = {" - - - - -

Growing Humans

- - Why would you want to grow humans? Well I'm expecting most readers to be in the slave trade, but a few might actually - want to revive fallen comrades. Growing pod people is easy, but prone to disaster. -

-

    -
  1. Find a dead person who is in need of cloning.
  2. -
  3. Take a blood sample with a syringe.
  4. -
  5. Inject a seed pack with the blood sample.
  6. -
  7. Plant the seeds.
  8. -
  9. Tend to the plants water and nutrition levels until it is time to harvest the cloned human.
  10. -
-

- It really is that easy! Good luck! - - - - "} - -/obj/item/book/manual/medical_cloning - name = "Cloning techniques of the 26th century" - icon_state ="bookCloning" - author = "Medical Journal, volume 3" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Cloning techniques of the 26th century" -//big pile of shit below. - - dat = {" - - - - - -

How to Clone People

- So there’s 50 dead people lying on the floor, chairs are spinning like no tomorrow and you haven’t the foggiest idea of what to do? Not to worry! This guide is intended to teach you how to clone people and how to do it right, in a simple step-by-step process! If at any point of the guide you have a mental meltdown, genetics probably isn’t for you and you should get a job-change as soon as possible before you’re sued for malpractice. - -
- -

Step 1: Acquire body

- This is pretty much vital for the process because without a body, you cannot clone it. Usually, bodies will be brought to you, so you do not need to worry so much about this step. If you already have a body, great! Move on to the next step. - -

Step 2: Strip body

- The cloning machine does not like abiotic items. What this means is you can’t clone anyone if they’re wearing clothes, so take all of it off. If it’s just one person, it’s courteous to put their possessions in the closet. If you have about seven people awaiting cloning, just leave the piles where they are, but don’t mix them around and for God’s sake don’t let the Clown in to steal them. - -

Step 3: Put body in cloning machine

- Grab the body and then put it inside the DNA modifier. If you cannot do this, then you messed up at Step 2. Go back and check you took EVERYTHING off - a commonly missed item is their headset. - -

Step 4: Scan body

- Go onto the computer and scan the body by pressing ‘Scan - ’. If you’re successful, they will be added to the records (note that this can be done at any time, even with living people, so that they can be cloned without a body in the event that they are lying dead on port solars and didn‘t turn on their suit sensors)! If not, and it says “Error: Mental interface failure.”, then they have left their bodily confines and are one with the spirits. If this happens, just shout at them to get back in their body, click ‘Refresh‘ and try scanning them again. If there’s no success, threaten them with gibbing. Still no success? Skip over to Step 7 and don‘t continue after it, as you have an unresponsive body and it cannot be cloned. If you got “Error: Unable to locate valid genetic data.“, you are trying to clone a monkey - start over. - -

Step 5: Clone body

- Now that the body has a record, click ’View Records’, click the subject’s name, and then click ‘Clone’ to start the cloning process. Congratulations! You’re halfway there. Remember not to ‘Eject’ the cloning pod as this will kill the developing clone and you’ll have to start the process again. - -

Step 6: Get clean SEs for body

- Cloning is a finicky and unreliable process. Whilst it will most certainly bring someone back from the dead, they can have any number of nasty disabilities given to them during the cloning process! For this reason, you need to prepare a clean, defect-free Structural Enzyme (SE) injection for when they’re done. If you’re a competent Geneticist, you will already have one ready on your working computer. If, for any reason, you do not, then eject the body from the DNA modifier (NOT THE CLONING POD) and take it next door to the Genetics research room. Put the body in one of those DNA modifiers and then go onto the console. Go into View/Edit/Transfer Buffer, find an open slot and click “SE“ to save it. Then click ‘Injector’ to get the SEs in syringe form. Put this in your pocket or something for when the body is done. - -

Step 7: Put body in morgue

- Now that the cloning process has been initiated and you have some clean Structural Enzymes, you no longer need the body! Drag it to the morgue and tell the Chef over the radio that they have some fresh meat waiting for them in there. To put a body in a morgue bed, simply open the tray, grab the body, put it on the open tray, then close the tray again. Use one of the nearby pens to label the bed “CHEF MEAT” in order to avoid confusion. - -

Step 8: Await cloned body

- Now go back to the lab and wait for your patient to be cloned. It won’t be long now, I promise. - -

Step 9: Use the clean SE injector on person

- Has your body been cloned yet? Great! As soon as the guy pops out, grab your injector and jab it in them. Once you’ve injected them, they now have clean Structural Enzymes and their defects, if any, will disappear in a short while. - -

Step 10: Give person clothes back

- Obviously the person will be naked after they have been cloned. Provided you weren’t an irresponsible little shit, you should have protected their possessions from thieves and should be able to give them back to the patient. No matter how cruel you are, it’s simply against protocol to force your patients to walk outside naked. - -

Step 11: Send person on their way

- Give the patient one last check-over - make sure they don’t still have any defects and that they have all their possessions. Ask them how they died, if they know, so that you can report any foul play over the radio. Once you’re done, your patient is ready to go back to work! Chances are they do not have Medbay access, so you should let them out of Genetics and the Medbay main entrance. - -

If you’ve gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target. - - - - - - "} - - -/obj/item/book/manual/ripley_build_and_repair - name = "APLU \"Ripley\" Construction and Operation Manual" - icon_state ="book" - author = "Weyland-Yutani Corp" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "APLU \"Ripley\" Construction and Operation Manual" -//big pile of shit below. - - dat = {" - - - - -

- Weyland-Yutani - Building Better Worlds -

Autonomous Power Loader Unit \"Ripley\"

-
-

Specifications:

-
    -
  • Class: Autonomous Power Loader
  • -
  • Scope: Logistics and Construction
  • -
  • Weight: 820kg (without operator and with empty cargo compartment)
  • -
  • Height: 2.5m
  • -
  • Width: 1.8m
  • -
  • Top speed: 5km/hour
  • -
  • Operation in vacuum/hostile environment: Possible -
  • Airtank Volume: 500liters
  • -
  • Devices: -
      -
    • Hydraulic Clamp
    • -
    • High-speed Drill
    • -
    -
  • -
  • Propulsion Device: Powercell-powered electro-hydraulic system.
  • -
  • Powercell capacity: Varies.
  • -
- -

Construction:

-
    -
  1. Connect all exosuit parts to the chassis frame
  2. -
  3. Connect all hydraulic fittings and tighten them up with a wrench
  4. -
  5. Adjust the servohydraulics with a screwdriver
  6. -
  7. Wire the chassis. (Cable is not included.)
  8. -
  9. Use the wirecutters to remove the excess cable if needed.
  10. -
  11. Install the central control module (Not included. Use supplied datadisk to create one).
  12. -
  13. Secure the mainboard with a screwdriver.
  14. -
  15. Install the peripherals control module (Not included. Use supplied datadisk to create one).
  16. -
  17. Secure the peripherals control module with a screwdriver
  18. -
  19. Install the internal armor plating (Not included due to Nanotrasen regulations. Can be made using 5 metal sheets.)
  20. -
  21. Secure the internal armor plating with a wrench
  22. -
  23. Weld the internal armor plating to the chassis
  24. -
  25. Install the external reinforced armor plating (Not included due to Nanotrasen regulations. Can be made using 5 reinforced metal sheets.)
  26. -
  27. Secure the external reinforced armor plating with a wrench
  28. -
  29. Weld the external reinforced armor plating to the chassis
  30. -
  31. -
  32. Additional Information:
  33. -
  34. The firefighting variation is made in a similar fashion.
  35. -
  36. A firesuit must be connected to the Firefighter chassis for heat shielding.
  37. -
  38. Internal armor is plasteel for additional strength.
  39. -
  40. External armor must be installed in 2 parts, totaling 10 sheets.
  41. -
  42. Completed mech is more resiliant against fire, and is a bit more durable overall
  43. -
  44. Nanotrasen is determined to the safety of its investments employees.
  45. -
- - - -

Operation

- Coming soon... - "} - -/obj/item/book/manual/experimentor - name = "Mentoring your Experiments" - icon_state = "rdbook" - author = "Dr. H.P. Kritz" - title = "Mentoring your Experiments" - dat = {" - - - - -

THE E.X.P.E.R.I-MENTOR

- The Enhanced Xenobiological Period Extraction (and) Restoration Instructor is a machine designed to discover the secrets behind every item in existence. - With advanced technology, it can process 99.95% of items, and discover their uses and secrets. - The E.X.P.E.R.I-MENTOR is a Research apparatus that takes items, and through a process of elimination, it allows you to deduce new technological designs from them. - Due to the volatile nature of the E.X.P.E.R.I-MENTOR, there is a slight chance for malfunction, potentially causing irreparable damage to you or your environment. - However, upgrading the apparatus has proven to decrease the chances of undesirable, potentially life-threatening outcomes. - Please note that the E.X.P.E.R.I-MENTOR uses a state-of-the-art random generator, which has a larger entropy than the observable universe, - therefore it can generate wildly different results each day, therefore it is highly suggested to re-scan objects of interests frequently (e.g. each shift). - -

BASIC PROCESS

- The usage of the E.X.P.E.R.I-MENTOR is quite simple: -
    -
  1. Find an item with a technological background
  2. -
  3. Insert the item into the E.X.P.E.R.I-MENTOR
  4. -
  5. Cycle through each processing method of the device.
  6. -
  7. Stand back, even in case of a successful experiment, as the machine might produce undesired behaviour.
  8. -
- -

ADVANCED USAGE

- The E.X.P.E.R.I-MENTOR has a variety of uses, beyond menial research work. The different results can be used to combat localised events, or even to get special items. - - The E.X.P.E.R.I-MENTOR's OBLITERATE function has the added use of transferring the destroyed item's material into a linked lathe. - - The IRRADIATE function can be used to transform items into other items, resulting in potential upgrades (or downgrades). - - Users should remember to always wear appropriate protection when using the machine, because malfunction can occur at any moment! - -

EVENTS

-

GLOBAL (happens at any time):

-
    -
  1. DETECTION MALFUNCTION - The machine's onboard sensors have malfunctioned, causing it to redefine the item's experiment type. - Produces the message: The E.X.P.E.R.I-MENTOR's onboard detection system has malfunctioned!
  2. - -
  3. IANIZATION - The machine's onboard corgi-filter has malfunctioned, causing it to produce a corgi from.. somewhere. - Produces the message: The E.X.P.E.R.I-MENTOR melts the banana, ian-izing the air around it!
  4. - -
  5. RUNTIME ERROR - The machine's onboard C4T-P processor has encountered a critical error, causing it to produce a cat from.. somewhere. - Produces the message: The E.X.P.E.R.I-MENTOR encounters a run-time error!
  6. - -
  7. B100DG0D.EXE - The machine has encountered an unknown subroutine, which has been injected into its runtime. It upgrades the held item! - Produces the message: The E.X.P.E.R.I-MENTOR improves the banana, drawing the life essence of those nearby!
  8. - -
  9. POWERSINK - The machine's PSU has tripped the charging mechanism! It consumes massive amounts of power! - Produces the message: The E.X.P.E.R.I-MENTOR begins to smoke and hiss, shaking violently!
  10. -
-

FAIL:

- This event is produced when the item mismatches the selected experiment. - Produces a random message similar to: "the Banana rumbles, and shakes, the experiment was a failure!" - -

POKE:

-
    -
  1. WILD ARMS - The machine's gryoscopic processors malfunction, causing it to lash out at nearby people with its arms. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions and destroys the banana, lashing its arms out at nearby people!
  2. - -
  3. MISTYPE - The machine's interface has been garbled, and it switches to OBLITERATE. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions!
  4. - -
  5. THROW - The machine's spatial recognition device has shifted several meters across the room, causing it to try and repostion the item there. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, throwing the banana!
  6. -
-

IRRADIATE:

-
    -
  1. RADIATION LEAK - The machine's shield has failed, resulting in a toxic radiation leak. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and leaking radiation!
  2. - -
  3. RADIATION DUMP - The machine's recycling and containment functions have failed, resulting in a dump of toxic waste around it - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, spewing toxic waste!
  4. - -
  5. MUTATION - The machine's radio-isotope level meter has malfunctioned, causing it over-irradiate the item, making it transform. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, transforming the banana!
  6. -
-

GAS:

-
    -
  1. TOXIN LEAK - The machine's filtering and vent systems have failed, resulting in a cloud of toxic gas being expelled. - Produces the message: The E.X.P.E.R.I-MENTOR destroys the banana, leaking dangerous gas!
  2. - -
  3. GAS LEAK - The machine's vent systems have failed, resulting in a cloud of harmless, but obscuring gas. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, spewing harmless gas!
  4. - -
  5. ELECTROMAGNETIC IONS - The machine's electrolytic scanners have failed, causing a dangerous Electromagnetic reaction. - Produces the message: The E.X.P.E.R.I-MENTOR melts the banana, ionizing the air around it!
  6. -
-

HEAT:

-
    -
  1. TOASTER - The machine's heating coils have come into contact with the machine's gas storage, causing a large, sudden blast of flame. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and releasing a burst of flame!
  2. - -
  3. SAUNA - The machine's vent loop has sprung a leak, resulting in a large amount of superheated air being dumped around it. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and leaking hot air!
  4. - -
  5. EMERGENCY VENT - The machine's temperature gauge has malfunctioned, resulting in it attempting to cool the area around it, but instead, dumping a cloud of steam. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, activating its emergency coolant systems!
  6. -
-

COLD:

-
    -
  1. FREEZER - The machine's cooling loop has sprung a leak, resulting in a cloud of super-cooled liquid being blasted into the air. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, shattering the banana and releasing a dangerous cloud of coolant!
  2. - -
  3. FRIDGE - The machine's cooling loop has been exposed to the outside air, resulting in a large decrease in temperature. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, shattering the banana and leaking cold air!
  4. - -
  5. SNOWSTORM - The machine's cooling loop has come into contact with the heating coils, resulting in a sudden blast of cool air. - Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, releasing a flurry of chilly air as the banana pops out!
  6. -
-

OBLITERATE:

-
    -
  1. IMPLOSION - The machine's pressure leveller has malfunctioned, causing it to pierce the space-time momentarily, making everything in the area fly towards it. - Produces the message: The E.X.P.E.R.I-MENTOR's crusher goes way too many levels too high, crushing right through space-time!
  2. - -
  3. DISTORTION - The machine's pressure leveller has completely disabled, resulting in a momentary space-time distortion, causing everything to fly around. - Produces the message: The E.X.P.E.R.I-MENTOR's crusher goes one level too high, crushing right into space-time!
  4. -
- - - "} - -/obj/item/book/manual/research_and_development - name = "Research and Development 101" - icon_state = "rdbook" - author = "Dr. L. Ight" - title = "Research and Development 101" - dat = {" - - - - - -

Science For Dummies

- So you want to further SCIENCE? Good man/woman/thing! However, SCIENCE is a complicated process even though it's quite easy. For the most part, it's a three step process: -
    -
  1. 1) Deconstruct items in the Destructive Analyzer to advance technology or improve the design.
  2. -
  3. 2) Build unlocked designs in the Protolathe and Circuit Imprinter
  4. -
  5. 3) Repeat!
  6. -
- - Those are the basic steps to furthing science. What do you do science with, however? Well, you have four major tools: R&D Console, the Destructive Analyzer, the Protolathe, and the Circuit Imprinter. - -

The R&D Console

- The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controled. More on those systems in their own sections. On its own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, because if it gets damaged, you'll lose your data! In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database. - NOTE: The technology list screen, circuit imprinter, and protolathe menus are accessible by non-scientists. This is intended to allow 'public' systems for the plebians to utilize some new devices. - -

Destructive Analyzer

- This is the source of all technology. Whenever you put a handheld object in it, it analyzes it and determines what sort of technological advancements you can discover from it. If the technology of the object is equal or higher then your current knowledge, you can destroy the object to further those sciences. Some devices (notably, some devices made from the protolathe and circuit imprinter) aren't 100% reliable when you first discover them. If these devices break down, you can put them into the Destructive Analyzer and improve their reliability rather then futher science. If their reliability is high enough ,it'll also advance their related technologies. - -

Circuit Imprinter

- This machine, along with the Protolathe, is used to actually produce new devices. The Circuit Imprinter takes glass and various chemicals (depends on the design) to produce new circuit boards to build new machines or computers. It can even be used to print AI modules. - -

Protolathe

- This machine is an advanced form of the Autolathe that produce non-circuit designs. Unlike the Autolathe, it can use processed metal, glass, solid plasma, silver, gold, and diamonds along with a variety of chemicals to produce devices. The downside is that, again, not all devices you make are 100% reliable when you first discover them. - -

Reliability and You

- As it has been stated, many devices when they're first discovered do not have a 100% reliablity when you first discover them. Instead, the reliablity of the device is dependent upon a base reliability value, whatever improvements to the design you've discovered through the Destructive Analyzer, and any advancements you've made with the device's source technologies. To be able to improve the reliability of a device, you have to use the device until it breaks beyond repair. Once that happens, you can analyze it in a Destructive Analyzer. Once the device reachs a certain minimum reliability, you'll gain tech advancements from it. - -

Building a Better Machine

- Many machines produces from circuit boards and inserted into a machine frame require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. If you use these parts when constructing something, its attributes may be improved. For example, if you use an advanced matter bin when constructing an autolathe (rather then a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine. - - - "} - - -/obj/item/book/manual/robotics_cyborgs - name = "Cyborgs for Dummies" - icon_state = "borgbook" - author = "XISC" - title = "Cyborgs for Dummies" - dat = {" - - - - - -

Cyborgs for Dummies

- -

Chapters

- -
    -
  1. Cyborg Related Equipment
  2. -
  3. Cyborg Modules
  4. -
  5. Cyborg Construction
  6. -
  7. Cyborg Deconstruction
  8. -
  9. Cyborg Maintenance
  10. -
  11. Cyborg Repairs
  12. -
  13. In Case of Emergency
  14. -
- - -

Cyborg Related Equipment

- -

Exosuit Fabricator

- The Exosuit Fabricator is the most important piece of equipment related to cyborgs. It allows the construction of the core cyborg parts. Without these machines, cyborgs can not be built. It seems that they may also benefit from advanced research techniques. - -

Cyborg Recharging Station

- This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge. - -

Robotics Control Console

- This useful piece of equipment can be used to immobolize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or Nanotrasen may see to it that it never happens again. - - -

Cyborg Modules

- When a cyborg is created it picks out of an array of modules to designate its purpose. There are 6 different cyborg modules. - -

Standard Cyborg

- The standard cyborg module is a multi-purpose cyborg. It is equipped with various modules, allowing it to do basic tasks.
- -

Engineering Cyborg

- The Engineering cyborg module comes equipped with various engineering-related tools to help with engineering-related tasks.
- -

Mining Cyborg

- The Mining Cyborg module comes equipped with the latest in mining equipment. They are efficient at mining due to no need for oxygen, but their power cells limit their time in the mines. - -

Security Cyborg

- The Security Cyborg module is equipped with effective security measures used to apprehend and arrest criminals without harming them a bit. - -

Janitor Cyborg

- The Janitor Cyborg module is equipped with various cleaning-facilitating devices. - -

Service Cyborg

- The service cyborg module comes ready to serve your human needs. It includes various entertainment and refreshment devices. Occasionally some service cyborgs may have been referred to as "Bros" - -

Cyborg Construction

- Cyborg construction is a rather easy process, requiring a decent amount of metal and a few other supplies.
The required materials to make a cyborg are: -
    -
  • Metal
  • -
  • Two Flashes
  • -
  • One Power Cell (Preferrably rated to 15000w)
  • -
  • Some electrical wires
  • -
  • One Human Brain
  • -
  • One Man-Machine Interface
  • -
- Once you have acquired the materials, you can start on construction of your cyborg.
To construct a cyborg, follow the steps below: -
    -
  1. Start the Exosuit Fabricators constructing all of the cyborg parts
  2. -
  3. While the parts are being constructed, take your human brain, and place it inside the Man-Machine Interface
  4. -
  5. Once you have a Robot Head, place your two flashes inside the eye sockets
  6. -
  7. Once you have your Robot Chest, wire the Robot chest, then insert the power cell
  8. -
  9. Attach all of the Robot parts to the Robot frame
  10. -
  11. Insert the Man-Machine Interface (With the Brain inside) Into the Robot Body
  12. -
  13. Congratulations! You have a new cyborg!
  14. -
- -

Cyborg Deconstruction

- If you want to deconstruct a cyborg, say to remove its MMI without blowing the Cyborg to pieces, they come apart very quickly, and very safely, in a few simple steps. -
    -
  • Crowbar
  • -
  • Wrench
  • - Optional: -
  • Screwdriver
  • -
  • Wirecutters
  • -
-
    -
  1. Begin by unlocking the Cyborg's access panel using your ID
  2. -
  3. Use your crowbar to open the Cyborg's access panel
  4. -
  5. Using your bare hands, remove the power cell from the Cyborg
  6. -
  7. Lockdown the Cyborg to disengage safety protocols
  8. -
      - Option 1: Robotics console -
    1. Use the Robotics console in the RD's office
    2. -
    3. Find the entry for your Cyborg
    4. -
    5. Press the Lockdown button on the Robotics console
    6. -
    -
      - Option 2: Lockdown wire -
    1. Use your screwdriver to expose the Cyborg's wiring
    2. -
    3. Use your wirecutters to start cutting all of the wires until the lockdown light turns off, cutting all of the wires irregardless of the lockdown light works as well
    4. -
    -
  9. Use your wrench to unfasten the Cyborg's bolts, the Cyborg will then fall apart onto the floor, the MMI will be there as well
  10. -
- -

Cyborg Maintenance

- Occasionally Cyborgs may require maintenance of a couple types, this could include replacing a power cell with a charged one, or possibly maintaining the cyborg's internal wiring. - -

Replacing a Power Cell

- Replacing a Power cell is a common type of maintenance for cyborgs. It usually involves replacing the cell with a fully charged one, or upgrading the cell with a larger capacity cell.
The steps to replace a cell are follows: -
    -
  1. Unlock the Cyborg's Interface by swiping your ID on it
  2. -
  3. Open the Cyborg's outer panel using a crowbar
  4. -
  5. Remove the old power cell
  6. -
  7. Insert the new power cell
  8. -
  9. Close the Cyborg's outer panel using a crowbar
  10. -
  11. Lock the Cyborg's Interface by swiping your ID on it, this will prevent non-qualified personnel from attempting to remove the power cell
  12. -
- -

Exposing the Internal Wiring

- Exposing the internal wiring of a cyborg is fairly easy to do, and is mainly used for cyborg repairs.
You can easily expose the internal wiring by following the steps below: -
    -
  1. Follow Steps 1 - 3 of "Replacing a Cyborg's Power Cell"
  2. -
  3. Open the cyborg's internal wiring panel by using a screwdriver to unsecure the panel
  4. -
- To re-seal the cyborg's internal wiring: -
    -
  1. Use a screwdriver to secure the cyborg's internal panel
  2. -
  3. Follow steps 4 - 6 of "Replacing a Cyborg's Power Cell" to close up the cyborg
  4. -
- -

Cyborg Repairs

- Occasionally a Cyborg may become damaged. This could be in the form of impact damage from a heavy or fast-travelling object, or it could be heat damage from high temperatures, or even lasers or Electromagnetic Pulses (EMPs). - -

Dents

- If a cyborg becomes damaged due to impact from heavy or fast-moving objects, it will become dented. Sure, a dent may not seem like much, but it can compromise the structural integrity of the cyborg, possibly causing a critical failure. - Dents in a cyborg's frame are rather easy to repair, all you need is to apply a welding tool to the dented area, and the high-tech cyborg frame will repair the dent under the heat of the welder. - -

Excessive Heat Damage

- If a cyborg becomes damaged due to excessive heat, it is likely that the internal wires will have been damaged. You must replace those wires to ensure that the cyborg remains functioning properly.
To replace the internal wiring follow the steps below: -
    -
  1. Unlock the Cyborg's Interface by swiping your ID
  2. -
  3. Open the Cyborg's External Panel using a crowbar
  4. -
  5. Remove the Cyborg's Power Cell
  6. -
  7. Using a screwdriver, expose the internal wiring or the Cyborg
  8. -
  9. Replace the damaged wires inside the cyborg
  10. -
  11. Secure the internal wiring cover using a screwdriver
  12. -
  13. Insert the Cyborg's Power Cell
  14. -
  15. Close the Cyborg's External Panel using a crowbar
  16. -
  17. Lock the Cyborg's Interface by swiping your ID
  18. -
- These repair tasks may seem difficult, but are essential to keep your cyborgs running at peak efficiency. - -

In Case of Emergency

- In case of emergency, there are a few steps you can take. - -

"Rogue" Cyborgs

- If the cyborgs seem to become "rogue", they may have non-standard laws. In this case, use extreme caution. - To repair the situation, follow these steps: -
    -
  1. Locate the nearest robotics console
  2. -
  3. Determine which cyborgs are "Rogue"
  4. -
  5. Press the lockdown button to immobolize the cyborg
  6. -
  7. Locate the cyborg
  8. -
  9. Expose the cyborg's internal wiring
  10. -
  11. Check to make sure the LawSync and AI Sync lights are lit
  12. -
  13. If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's Law Sync
  14. -
  15. Proceed to a cyborg upload console. Nanotrasen usually places these in the same location as AI uplaod consoles.
  16. -
  17. Use a "Reset" upload moduleto reset the cyborg's laws
  18. -
  19. Proceed to a Robotics Control console
  20. -
  21. Remove the lockdown on the cyborg
  22. -
- -

As a last resort

- If all else fails in a case of cyborg-related emergency. There may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg. -

WARNING:

Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of Nanotrasen equipment, and you may be punished for detonating them without reason. - - - - "} - - - -/obj/item/book/manual/chef_recipes - name = "Chef Recipes" - icon_state = "cooked_book" - author = "Lord Frenrir Cageth" - title = "Chef Recipes" - dat = {" - - - - - -

Food for Dummies

- Here is a guide on basic food recipes and also how to not poison your customers accidentally. - - -

Basic ingredients preparation:

- - Dough: 10u water + 15u flour for simple dough.
- 15u egg yolk + 15u flour + 5u sugar for cake batter.
- Doughs can be transformed by using a knife and rolling pin.
- All doughs can be microwaved.
- Bowl: Add water to it for soup preparation.
- Meat: Microwave it, process it, slice it into microwavable cutlets with your knife, or use it raw.
- Cheese: Add 5u universal enzyme (catalyst) to milk and soy milk to prepare cheese (sliceable) and tofu.
- Rice: Mix 10u rice with 10u water in a bowl then microwave it. - -

Custom food:

- Add ingredients to a base item to prepare a custom meal.
- The bases are:
- - bun (burger)
- - breadslices(sandwich)
- - plain bread
- - plain pie
- - vanilla cake
- - empty bowl (salad)
- - bowl with 10u water (soup)
- - boiled spaghetti
- - pizza bread
- - metal rod (kebab) - -

Table Craft:

- Put ingredients on table, then click and drag the table onto yourself to see what recipes you can prepare. - -

Microwave:

- Use it to cook or boil food ingredients (meats, doughs, egg, spaghetti, donkpocket, etc...). - It can cook multiple items at once. - -

Processor:

- Use it to process certain ingredients (meat into faggot, doughslice into spaghetti, potato into fries,etc...) - -

Gibber:

- Stuff an animal in it to grind it into meat. - -

Meat spike:

- Stick an animal on it then begin collecting its meat. - - -

Example recipes:

- Vanilla Cake: Microwave cake batter.
- Burger: 1 bun + 1 meat steak
- Bread: Microwave dough.
- Waffles: 2 pastry base
- Popcorn: Microwave corn.
- Meat Steak: Microwave meat.
- Meat Pie: 1 plain pie + 1u black pepper + 1u salt + 2 meat cutlets
- Boiled Spagetti: Microwave spaghetti.
- Donuts: 1u sugar + 1 pastry base
- Fries: Process potato. - -

Sharing your food:

- You can put your meals on your kitchen counter or load them in the snack vending machines. - - - "} - - -/obj/item/book/manual/barman_recipes - name = "Barman Recipes" - icon_state = "barbook" - author = "Sir John Rose" - title = "Barman Recipes" - dat = {" - - - - - -

Drinks for dummies

- Heres a guide for some basic drinks. - -

Manly Dorf:

- Mix ale and beer into a glass. - -

Grog:

- Mix rum and water into a glass. - -

Black Russian:

- Mix vodka and kahlua into a glass. - -

Irish Cream:

- Mix cream and whiskey into a glass. - -

Screwdriver:

- Mix vodka and orange juice into a glass. - -

Cafe Latte:

- Mix milk and coffee into a glass. - -

Mead:

- Mix Enzyme, water and sugar into a glass. - -

Gin Tonic:

- Mix gin and tonic into a glass. - -

Classic Martini:

- Mix vermouth and gin into a glass. - - - - - "} - - -/obj/item/book/manual/detective - name = "The Film Noir: Proper Procedures for Investigations" - icon_state ="bookDetective" - author = "Nanotrasen" - title = "The Film Noir: Proper Procedures for Investigations" - dat = {" - - - - -

Detective Work

- - Between your bouts of self-narration, and drinking whiskey on the rocks, you might get a case or two to solve.
- To have the best chance to solve your case, follow these directions: -

-

    -
  1. Go to the crime scene.
  2. -
  3. Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog.)
  4. -
  5. Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too.
  6. -
  7. Return to your office.
  8. -
  9. Using your forensic scanning computer, scan your Scanner to upload all of your evidence into the database.
  10. -
  11. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
  12. -
  13. If you have 80% or more of the print (The print is displayed) go to step 10, otherwise continue to step 8.
  14. -
  15. Look for clues from the suit fibres you found on your perp, and go about looking for more evidence with this new information, scanning as you go.
  16. -
  17. Try to get a fingerprint card of your perp, as if used in the computer, the prints will be completed on their dossier.
  18. -
  19. Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it.
  20. -
  21. Since you now have both your dossier and the name of the person, print both out as evidence, and get security to nab your baddie.
  22. -
  23. Give yourself a pat on the back and a bottle of the ships finest vodka, you did it!
  24. -
-

- It really is that easy! Good luck! - - - "} - -/obj/item/book/manual/nuclear - name = "Fission Mailed: Nuclear Sabotage 101" - icon_state ="bookNuclear" - author = "Syndicate" - title = "Fission Mailed: Nuclear Sabotage 101" - dat = {" - Nuclear Explosives 101:
- Hello and thank you for choosing the Syndicate for your nuclear information needs.
- Today's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.
- First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.
- Pressing any button on the compacted bomb will cause it to extend and bolt itself into place.
- If this is done to unbolt it one must completely log in which at this time may not be possible.
- To make the nuclear device functional:
-

  • Place the nuclear device in the designated detonation zone.
  • -
  • Extend and anchor the nuclear device from its interface.
  • -
  • Insert the nuclear authorisation disk into slot.
  • -
  • Type numeric authorisation code into the keypad. This should have been provided. Note: If you make a mistake press R to reset the device. -
  • Press the E button to log onto the device.
  • - You now have activated the device. To deactivate the buttons at anytime for example when you've already prepped the bomb for detonation remove the auth disk OR press the R on the keypad.
    - Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option.
    - Note: Nanotrasen is a pain in the neck.
    - Toggle off the SAFETY.
    - Note: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step.
    - So use the - - and + + to set a det time between 5 seconds and 10 minutes.
    - Then press the timer toggle button to start the countdown.
    - Now remove the auth. disk so that the buttons deactivate.
    - Note: THE BOMB IS STILL SET AND WILL DETONATE
    - Now before you remove the disk if you need to move the bomb you can:
    - Toggle off the anchor, move it, and re-anchor.

    - Good luck. Remember the order:
    - Disk, Code, Safety, Timer, Disk, RUN!
    - Intelligence Analysts believe that normal Nanotrasen procedure is for the Captain to secure the nuclear authorisation disk.
    - Good luck! - "} - -// Wiki books that are linked to the configured wiki link. - -// A book that links to the wiki -/obj/item/book/manual/wiki - var/page_link = "" - window_size = "970x710" - -/obj/item/book/manual/wiki/attack_self() - if(!dat) - initialize_wikibook() - ..() - -/obj/item/book/manual/wiki/proc/initialize_wikibook() - var/wikiurl = CONFIG_GET(string/wikiurl) - if(wikiurl) - dat = {" - - - - - - -

    You start skimming through the manual...

    - - - - - - "} - -/obj/item/book/manual/wiki/chemistry - name = "Chemistry Textbook" - icon_state ="chemistrybook" - author = "Nanotrasen" - title = "Chemistry Textbook" - page_link = "Guide_to_chemistry" - -/obj/item/book/manual/wiki/engineering_construction - name = "Station Repairs and Construction" - icon_state ="bookEngineering" - author = "Engineering Encyclopedia" - title = "Station Repairs and Construction" - page_link = "Guide_to_construction" - -/obj/item/book/manual/wiki/engineering_guide - name = "Engineering Textbook" - icon_state ="bookEngineering2" - author = "Engineering Encyclopedia" - title = "Engineering Textbook" - page_link = "Guide_to_engineering" - -/obj/item/book/manual/wiki/security_space_law - name = "Space Law" - desc = "A set of Nanotrasen guidelines for keeping law and order on their space stations." - icon_state = "bookSpaceLaw" - author = "Nanotrasen" - title = "Space Law" - page_link = "Space_Law" - -/obj/item/book/manual/wiki/infections - name = "Infections - Making your own pandemic!" - icon_state = "bookInfections" - author = "Infections Encyclopedia" - title = "Infections - Making your own pandemic!" - page_link = "Infections" - -/obj/item/book/manual/wiki/telescience - name = "Teleportation Science - Bluespace for dummies!" - icon_state = "book7" - author = "University of Bluespace" - title = "Teleportation Science - Bluespace for dummies!" - page_link = "Guide_to_telescience" - -/obj/item/book/manual/wiki/engineering_hacking - name = "Hacking" - icon_state ="bookHacking" - author = "Engineering Encyclopedia" - title = "Hacking" - page_link = "Hacking" +/*********************MANUALS (BOOKS)***********************/ + +//Oh god what the fuck I am not good at computer +/obj/item/book/manual + icon = 'icons/obj/library.dmi' + due_date = 0 // Game time in 1/10th seconds + unique = 1 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified + +/obj/item/book/manual/engineering_particle_accelerator + name = "Particle Accelerator User's Guide" + icon_state ="bookParticleAccelerator" + author = "Engineering Encyclopedia" // Whoever wrote the paper or book, can be changed by pen or PC. It is not automatically assigned. + title = "Particle Accelerator User's Guide" +//book contents below + + dat = {" + + + + + +

    Experienced user's guide

    + +

    Setting up

    + +
      +
    1. Wrench all pieces to the floor
    2. +
    3. Add wires to all the pieces
    4. +
    5. Close all the panels with your screwdriver
    6. +
    + +

    Use

    + +
      +
    1. Open the control panel
    2. +
    3. Set the speed to 2
    4. +
    5. Start firing at the singularity generator
    6. +
    7. When the singularity reaches a large enough size so it starts moving on its own set the speed down to 0, but don't shut it off
    8. +
    9. Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?
    10. +
    + + + "} + + +/obj/item/book/manual/engineering_singularity_safety + name = "Singularity Safety in Special Circumstances" + icon_state ="bookEngineeringSingularitySafety" + author = "Engineering Encyclopedia" + title = "Singularity Safety in Special Circumstances" + dat = {" + + + + +

    Singularity Safety in Special Circumstances

    + +

    Power outage

    + + A power problem has made the entire station lose power? Could be station-wide wiring problems or syndicate power sinks. In any case follow these steps: +

    + Step one: PANIC!
    + Step two: Get your ass over to engineering! QUICKLY!!!
    + Step three: Make sure the SMES is still powering the emitters, if not, setup the generator in secure storage and disconnect the emitters from the SMES.
    + Step four: Next, head over to the APC and swipe it with your ID card - if it doesn't unlock, continue with step 15.
    + Step five: Open the console and disengage the cover lock.
    + Step six: Pry open the APC with a Crowbar.
    + Step seven: Take out the empty power cell.
    + Step eight: Put in the new, full power cell - if you don't have one, continue with step 15.
    + Step nine: Quickly put on a Radiation suit.
    + Step ten: Check if the singularity field generators withstood the down-time - if they didn't, continue with step 15.
    + Step eleven: Since disaster was averted you now have to ensure it doesn't repeat. If it was a powersink which caused it and if the engineering apc is wired to the same powernet, which the powersink is on, you have to remove the piece of wire which links the apc to the powernet. If it wasn't a powersink which caused it, then skip to step 14.
    + Step twelve: Grab your crowbar and pry away the tile closest to the APC.
    + Step thirteen: Use the wirecutters to cut the wire which is conecting the grid to the terminal.
    + Step fourteen: Go to the bar and tell the guys how you saved them all. Stop reading this guide here.
    + Step fifteen: GET THE FUCK OUT OF THERE!!!
    +

    + +

    Shields get damaged

    + + Step one: GET THE FUCK OUT OF THERE!!! FORGET THE WOMEN AND CHILDREN, SAVE YOURSELF!!!
    + + + "} + +/obj/item/book/manual/hydroponics_pod_people + name = "The Human Harvest - From seed to market" + icon_state ="bookHydroponicsPodPeople" + author = "Farmer John" + title = "The Human Harvest - From seed to market" + dat = {" + + + + +

    Growing Humans

    + + Why would you want to grow humans? Well I'm expecting most readers to be in the slave trade, but a few might actually + want to revive fallen comrades. Growing pod people is easy, but prone to disaster. +

    +

      +
    1. Find a dead person who is in need of cloning.
    2. +
    3. Take a blood sample with a syringe.
    4. +
    5. Inject a seed pack with the blood sample.
    6. +
    7. Plant the seeds.
    8. +
    9. Tend to the plants water and nutrition levels until it is time to harvest the cloned human.
    10. +
    +

    + It really is that easy! Good luck! + + + + "} + +/obj/item/book/manual/medical_cloning + name = "Cloning techniques of the 26th century" + icon_state ="bookCloning" + author = "Medical Journal, volume 3" + title = "Cloning techniques of the 26th century" + dat = {" + + + + + +

    How to Clone People

    + So there's fifty dead people lying on the floor, chairs are spinning like no tomorrow and you haven't the foggiest idea of what to do? Not to worry! This guide is intended to teach you how to clone people and how to do it right, in a simple step-by-step process! If at any point of the guide you have a mental meltdown, genetics probably isn't for you and you should get a job-change as soon as possible before you're sued for malpractice. + +
      +
    1. Acquire body/head/brain
    2. +
    3. Put body/head/brain in cloning machine
    4. +
    5. Scan body/head/brain
    6. +
    7. Clone body/head/brain
    8. +
    9. Get Mannitol, Mutadone, or a clean SE for the clone
    10. +
    11. Put remains in morgue
    12. +
    13. Await cloned body
    14. +
    15. Give the clone Mannitol and Mutadone, or a clean SE
    16. +
    17. Give person clothes back
    18. +
    19. Place clone in cryo
    20. +
    21. Send person on their way
    22. +
    + +

    Step 1: Acquire a body, head, or brain

    + This is pretty much vital for the process because without a body, you cannot clone it. Usually, bodies will be brought to you, so you do not need to worry so much about this step. If you already have a body, head, or even a brain, great! Move on to the next step. + +

    Step 2: Put the body/head/brain in cloning machine

    + Grab the body, head, or brain and then put it inside the DNA modifier. + +

    Step 3: Scan the body/head/brain

    + Go onto the computer and scan the body by pressing 'Scan - '. If you're successful, they will be added to the records (note that this can be done at any time, even with living people, so that they can be cloned without a body in the event that they are lying dead on port solars and didn't turn on their suit sensors As an added bonus, they have a health monitoring implant, which'll allow you to check their vitals from their record in the cloning console)! If not, and it says 'Error: Mental interface failure.', then they have left their bodily confines and are one with the spirits. If this happens, just shout at them to get back in their body, click 'Refresh' and try scanning them again. If there's no success, threaten them with gibbing. Still no success? Skip over to Step 7 and don't continue after it, as you have an unresponsive body and it cannot be cloned. If you got 'Error: Unable to locate valid genetic data', you are trying to clone a monkey - start over. + +

    Step 4: Clone the body/head/brain

    + Now that the body has a record, click 'View Records', click the subject's name, and then click 'Clone' to start the cloning process. Congratulations! You're halfway there. Remember not to 'Eject' the cloning pod as this will kill the developing clone and you'll have to start the process again. + +

    Step 5: Get Mannitol, Mutadone, or a clean SE for the clone

    + Cloning is a finicky and unreliable process. Whilst it will most certainly bring someone back from the dead, they can have any number of nasty disabilities given to them during the cloning process! For this reason, you need Mutadone, or a clean, defect-free Structural Enzyme (SE) injection for when they're done. If you're a competent Geneticist, you will already have one ready on your working computer. If, for any reason, you do not, then eject the body from the DNA modifier (NOT THE CLONING POD) and take it next door to the Genetics research room. Put the body in one of those DNA modifiers and then go onto the console. Go into View/Edit/Transfer Buffer, find an open slot and click 'SE' to save it. Then click 'Injector' to get the SEs in syringe form. Put this in your pocket or something for when the body is done. Do note, most Genetic labs have Mannitol and Mutadone pills readily available, provided no-one has stolen them or ate them all. Don't forget most clones will also have severe brain damage as well, to fix this, give them a Mannitol pill or injection. + +

    Step 6: Put remains in morgue

    + Now that the cloning process has been initiated and you hopefully have some Mannitol, Mutadone, and a clean Structural Enzymes, you no longer need the body! Drag it to the morgue and tell the Chef over the radio that they have some fresh meat waiting for them in there, or call the Chaplain so they can prepare an impromptu funeral. To put a body in a morgue bed, simply open the tray, grab the body, put it on the open tray, then close the tray again. Use a pen to label the morgue tray 'CHEF MEAT' or 'CLONED' in order to avoid confusion. + +

    Step 7: Await cloned body

    + Now go back to the lab and wait for your patient to be cloned. This can take atleast three minutes at the least. + +

    Step 8: Give the clone Mannitol and Mutadone, or a clean SE

    + Has your patient been cloned yet? Great! As soon as the clone pops out, administer Mannitol and Mutadone. Then move onto the next step. In the event you have no Mutadone, a clean SE will suffice, but keep in mind this may irradiate the patient, causing more problems! + +

    Step 9: Give person their clothes back

    + Obviously the person will be naked after they have been cloned. Provided you weren't an irresponsible little shit, you should have protected their possessions from thieves and should be able to give them back to the patient. No matter how cruel you are, it's simply against protocol to force your patients to walk outside naked. + +

    Step 10: Place clone in cryo

    + An unfortunate problem with speedcloning technology is that the clone will suffer from severe genetic degradation upon exiting the pod. To rectify this, ensure the nearby cryogenic cells are 1.) at freezing temperatures (normally around 73.15 K), and 2.) filled with cryoxadone, or clonexadone. Once you've assured both conditions are met, place the clone in the cryogenic tube, and turn it on. Remember to set the door to 'Auto' ejection, else the clone will be stuck in cryo until someone releases them. You can also kill two birds with one stone and add Mannitol and Mutadone to the beaker, which'll heal the brain damage, along with removing any genetic defects. + +

    Step 11: Send person on their way

    + Give the patient one last check-over - make sure they don't still have any defects and that they have all their possessions. Ask them how they died, if they know, so that you can report any foul play over the radio. Once you're done, your patient is ready to go back to work! Chances are they do not have Medbay access, so you should let them out of Genetics and the Medbay main entrance. + +

    If you've gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target. + + + + + + "} + + +/obj/item/book/manual/ripley_build_and_repair + name = "APLU \"Ripley\" Construction and Operation Manual" + icon_state ="book" + author = "Weyland-Yutani Corp" + title = "APLU \"Ripley\" Construction and Operation Manual" + dat = {" + + + + +

    + Weyland-Yutani - Building Better Worlds +

    Autonomous Power Loader Unit \"Ripley\"

    +
    +

    Specifications:

    +
      +
    • Class: Autonomous Power Loader
    • +
    • Scope: Logistics and Construction
    • +
    • Weight: 820kg (without operator and with empty cargo compartment)
    • +
    • Height: 2.5m
    • +
    • Width: 1.8m
    • +
    • Top speed: 5km/hour
    • +
    • Operation in vacuum/hostile environment: Possible +
    • Airtank Volume: 500liters
    • +
    • Devices: +
        +
      • Hydraulic Clamp
      • +
      • High-speed Drill
      • +
      +
    • +
    • Propulsion Device: Powercell-powered electro-hydraulic system.
    • +
    • Powercell capacity: Varies.
    • +
    + +

    Construction:

    +
      +
    1. Connect all exosuit parts to the chassis frame
    2. +
    3. Connect all hydraulic fittings and tighten them up with a wrench
    4. +
    5. Adjust the servohydraulics with a screwdriver
    6. +
    7. Wire the chassis. (Cable is not included.)
    8. +
    9. Use the wirecutters to remove the excess cable if needed.
    10. +
    11. Install the central control module (Not included. Use supplied datadisk to create one).
    12. +
    13. Secure the mainboard with a screwdriver.
    14. +
    15. Install the peripherals control module (Not included. Use supplied datadisk to create one).
    16. +
    17. Secure the peripherals control module with a screwdriver
    18. +
    19. Install the internal armor plating (Not included due to Nanotrasen regulations. Can be made using 5 metal sheets.)
    20. +
    21. Secure the internal armor plating with a wrench
    22. +
    23. Weld the internal armor plating to the chassis
    24. +
    25. Install the external reinforced armor plating (Not included due to Nanotrasen regulations. Can be made using 5 reinforced metal sheets.)
    26. +
    27. Secure the external reinforced armor plating with a wrench
    28. +
    29. Weld the external reinforced armor plating to the chassis
    30. +
    31. +
    32. Additional Information:
    33. +
    34. The firefighting variation is made in a similar fashion.
    35. +
    36. A firesuit must be connected to the Firefighter chassis for heat shielding.
    37. +
    38. Internal armor is plasteel for additional strength.
    39. +
    40. External armor must be installed in 2 parts, totaling 10 sheets.
    41. +
    42. Completed mech is more resiliant against fire, and is a bit more durable overall
    43. +
    44. Nanotrasen is determined to the safety of its investments employees.
    45. +
    + + + +

    Operation

    + Coming soon... + "} + +/obj/item/book/manual/experimentor + name = "Mentoring your Experiments" + icon_state = "rdbook" + author = "Dr. H.P. Kritz" + title = "Mentoring your Experiments" + dat = {" + + + + +

    THE E.X.P.E.R.I-MENTOR

    + The Enhanced Xenobiological Period Extraction (and) Restoration Instructor is a machine designed to discover the secrets behind every item in existence. + With advanced technology, it can process 99.95% of items, and discover their uses and secrets. + The E.X.P.E.R.I-MENTOR is a Research apparatus that takes items, and through a process of elimination, it allows you to deduce new technological designs from them. + Due to the volatile nature of the E.X.P.E.R.I-MENTOR, there is a slight chance for malfunction, potentially causing irreparable damage to you or your environment. + However, upgrading the apparatus has proven to decrease the chances of undesirable, potentially life-threatening outcomes. + Please note that the E.X.P.E.R.I-MENTOR uses a state-of-the-art random generator, which has a larger entropy than the observable universe, + therefore it can generate wildly different results each day, therefore it is highly suggested to re-scan objects of interests frequently (e.g. each shift). + +

    BASIC PROCESS

    + The usage of the E.X.P.E.R.I-MENTOR is quite simple: +
      +
    1. Find an item with a technological background
    2. +
    3. Insert the item into the E.X.P.E.R.I-MENTOR
    4. +
    5. Cycle through each processing method of the device.
    6. +
    7. Stand back, even in case of a successful experiment, as the machine might produce undesired behaviour.
    8. +
    + +

    ADVANCED USAGE

    + The E.X.P.E.R.I-MENTOR has a variety of uses, beyond menial research work. The different results can be used to combat localised events, or even to get special items. + + The E.X.P.E.R.I-MENTOR's OBLITERATE function has the added use of transferring the destroyed item's material into a linked lathe. + + The IRRADIATE function can be used to transform items into other items, resulting in potential upgrades (or downgrades). + + Users should remember to always wear appropriate protection when using the machine, because malfunction can occur at any moment! + +

    EVENTS

    +

    GLOBAL (happens at any time):

    +
      +
    1. DETECTION MALFUNCTION - The machine's onboard sensors have malfunctioned, causing it to redefine the item's experiment type. + Produces the message: The E.X.P.E.R.I-MENTOR's onboard detection system has malfunctioned!
    2. + +
    3. IANIZATION - The machine's onboard corgi-filter has malfunctioned, causing it to produce a corgi from.. somewhere. + Produces the message: The E.X.P.E.R.I-MENTOR melts the banana, ian-izing the air around it!
    4. + +
    5. RUNTIME ERROR - The machine's onboard C4T-P processor has encountered a critical error, causing it to produce a cat from.. somewhere. + Produces the message: The E.X.P.E.R.I-MENTOR encounters a run-time error!
    6. + +
    7. B100DG0D.EXE - The machine has encountered an unknown subroutine, which has been injected into its runtime. It upgrades the held item! + Produces the message: The E.X.P.E.R.I-MENTOR improves the banana, drawing the life essence of those nearby!
    8. + +
    9. POWERSINK - The machine's PSU has tripped the charging mechanism! It consumes massive amounts of power! + Produces the message: The E.X.P.E.R.I-MENTOR begins to smoke and hiss, shaking violently!
    10. +
    +

    FAIL:

    + This event is produced when the item mismatches the selected experiment. + Produces a random message similar to: "the Banana rumbles, and shakes, the experiment was a failure!" + +

    POKE:

    +
      +
    1. WILD ARMS - The machine's gryoscopic processors malfunction, causing it to lash out at nearby people with its arms. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions and destroys the banana, lashing its arms out at nearby people!
    2. + +
    3. MISTYPE - The machine's interface has been garbled, and it switches to OBLITERATE. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions!
    4. + +
    5. THROW - The machine's spatial recognition device has shifted several meters across the room, causing it to try and repostion the item there. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, throwing the banana!
    6. +
    +

    IRRADIATE:

    +
      +
    1. RADIATION LEAK - The machine's shield has failed, resulting in a toxic radiation leak. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and leaking radiation!
    2. + +
    3. RADIATION DUMP - The machine's recycling and containment functions have failed, resulting in a dump of toxic waste around it + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, spewing toxic waste!
    4. + +
    5. MUTATION - The machine's radio-isotope level meter has malfunctioned, causing it over-irradiate the item, making it transform. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, transforming the banana!
    6. +
    +

    GAS:

    +
      +
    1. TOXIN LEAK - The machine's filtering and vent systems have failed, resulting in a cloud of toxic gas being expelled. + Produces the message: The E.X.P.E.R.I-MENTOR destroys the banana, leaking dangerous gas!
    2. + +
    3. GAS LEAK - The machine's vent systems have failed, resulting in a cloud of harmless, but obscuring gas. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, spewing harmless gas!
    4. + +
    5. ELECTROMAGNETIC IONS - The machine's electrolytic scanners have failed, causing a dangerous Electromagnetic reaction. + Produces the message: The E.X.P.E.R.I-MENTOR melts the banana, ionizing the air around it!
    6. +
    +

    HEAT:

    +
      +
    1. TOASTER - The machine's heating coils have come into contact with the machine's gas storage, causing a large, sudden blast of flame. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and releasing a burst of flame!
    2. + +
    3. SAUNA - The machine's vent loop has sprung a leak, resulting in a large amount of superheated air being dumped around it. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and leaking hot air!
    4. + +
    5. EMERGENCY VENT - The machine's temperature gauge has malfunctioned, resulting in it attempting to cool the area around it, but instead, dumping a cloud of steam. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, activating its emergency coolant systems!
    6. +
    +

    COLD:

    +
      +
    1. FREEZER - The machine's cooling loop has sprung a leak, resulting in a cloud of super-cooled liquid being blasted into the air. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, shattering the banana and releasing a dangerous cloud of coolant!
    2. + +
    3. FRIDGE - The machine's cooling loop has been exposed to the outside air, resulting in a large decrease in temperature. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, shattering the banana and leaking cold air!
    4. + +
    5. SNOWSTORM - The machine's cooling loop has come into contact with the heating coils, resulting in a sudden blast of cool air. + Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, releasing a flurry of chilly air as the banana pops out!
    6. +
    +

    OBLITERATE:

    +
      +
    1. IMPLOSION - The machine's pressure leveller has malfunctioned, causing it to pierce the space-time momentarily, making everything in the area fly towards it. + Produces the message: The E.X.P.E.R.I-MENTOR's crusher goes way too many levels too high, crushing right through space-time!
    2. + +
    3. DISTORTION - The machine's pressure leveller has completely disabled, resulting in a momentary space-time distortion, causing everything to fly around. + Produces the message: The E.X.P.E.R.I-MENTOR's crusher goes one level too high, crushing right into space-time!
    4. +
    + + + "} + +/obj/item/book/manual/research_and_development + name = "Research and Development 101" + icon_state = "rdbook" + author = "Dr. L. Ight" + title = "Research and Development 101" + dat = {" + + + + + +

    Science For Dummies

    + So you want to further SCIENCE? Good man/woman/thing! However, SCIENCE is a complicated process even though it's quite easy. For the most part, it's a three step process: +
      +
    1. 1) Deconstruct items in the Destructive Analyzer to advance technology or improve the design.
    2. +
    3. 2) Build unlocked designs in the Protolathe and Circuit Imprinter
    4. +
    5. 3) Repeat!
    6. +
    + + Those are the basic steps to furthing science. What do you do science with, however? Well, you have four major tools: R&D Console, the Destructive Analyzer, the Protolathe, and the Circuit Imprinter. + +

    The R&D Console

    + The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controled. More on those systems in their own sections. On its own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, because if it gets damaged, you'll lose your data! In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database. + NOTE: The technology list screen, circuit imprinter, and protolathe menus are accessible by non-scientists. This is intended to allow 'public' systems for the plebians to utilize some new devices. + +

    Destructive Analyzer

    + This is the source of all technology. Whenever you put a handheld object in it, it analyzes it and determines what sort of technological advancements you can discover from it. If the technology of the object is equal or higher then your current knowledge, you can destroy the object to further those sciences. Some devices (notably, some devices made from the protolathe and circuit imprinter) aren't 100% reliable when you first discover them. If these devices break down, you can put them into the Destructive Analyzer and improve their reliability rather then futher science. If their reliability is high enough ,it'll also advance their related technologies. + +

    Circuit Imprinter

    + This machine, along with the Protolathe, is used to actually produce new devices. The Circuit Imprinter takes glass and various chemicals (depends on the design) to produce new circuit boards to build new machines or computers. It can even be used to print AI modules. + +

    Protolathe

    + This machine is an advanced form of the Autolathe that produce non-circuit designs. Unlike the Autolathe, it can use processed metal, glass, solid plasma, silver, gold, and diamonds along with a variety of chemicals to produce devices. The downside is that, again, not all devices you make are 100% reliable when you first discover them. + +

    Reliability and You

    + As it has been stated, many devices when they're first discovered do not have a 100% reliablity when you first discover them. Instead, the reliablity of the device is dependent upon a base reliability value, whatever improvements to the design you've discovered through the Destructive Analyzer, and any advancements you've made with the device's source technologies. To be able to improve the reliability of a device, you have to use the device until it breaks beyond repair. Once that happens, you can analyze it in a Destructive Analyzer. Once the device reachs a certain minimum reliability, you'll gain tech advancements from it. + +

    Building a Better Machine

    + Many machines produces from circuit boards and inserted into a machine frame require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. If you use these parts when constructing something, its attributes may be improved. For example, if you use an advanced matter bin when constructing an autolathe (rather then a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine. + + + "} + + +/obj/item/book/manual/robotics_cyborgs + name = "Cyborgs for Dummies" + icon_state = "borgbook" + author = "XISC" + title = "Cyborgs for Dummies" + dat = {" + + + + + +

    Cyborgs for Dummies

    + +

    Chapters

    + +
      +
    1. Cyborg Related Equipment
    2. +
    3. Cyborg Modules
    4. +
    5. Cyborg Construction
    6. +
    7. Cyborg Deconstruction
    8. +
    9. Cyborg Maintenance
    10. +
    11. Cyborg Repairs
    12. +
    13. In Case of Emergency
    14. +
    + + +

    Cyborg Related Equipment

    + +

    Exosuit Fabricator

    + The Exosuit Fabricator is the most important piece of equipment related to cyborgs. It allows the construction of the core cyborg parts. Without these machines, cyborgs can not be built. It seems that they may also benefit from advanced research techniques. + +

    Cyborg Recharging Station

    + This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge. + +

    Robotics Control Console

    + This useful piece of equipment can be used to immobolize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or Nanotrasen may see to it that it never happens again. + + +

    Cyborg Modules

    + When a cyborg is created it picks out of an array of modules to designate its purpose. There are 6 different cyborg modules. + +

    Standard Cyborg

    + The standard cyborg module is a multi-purpose cyborg. It is equipped with various modules, allowing it to do basic tasks.
    + +

    Engineering Cyborg

    + The Engineering cyborg module comes equipped with various engineering-related tools to help with engineering-related tasks.
    + +

    Mining Cyborg

    + The Mining Cyborg module comes equipped with the latest in mining equipment. They are efficient at mining due to no need for oxygen, but their power cells limit their time in the mines. + +

    Security Cyborg

    + The Security Cyborg module is equipped with effective security measures used to apprehend and arrest criminals without harming them a bit. + +

    Janitor Cyborg

    + The Janitor Cyborg module is equipped with various cleaning-facilitating devices. + +

    Service Cyborg

    + The service cyborg module comes ready to serve your human needs. It includes various entertainment and refreshment devices. Occasionally some service cyborgs may have been referred to as "Bros" + +

    Cyborg Construction

    + Cyborg construction is a rather easy process, requiring a decent amount of metal and a few other supplies.
    The required materials to make a cyborg are: +
      +
    • Metal
    • +
    • Two Flashes
    • +
    • One Power Cell (Preferrably rated to 15000w)
    • +
    • Some electrical wires
    • +
    • One Human Brain
    • +
    • One Man-Machine Interface
    • +
    + Once you have acquired the materials, you can start on construction of your cyborg.
    To construct a cyborg, follow the steps below: +
      +
    1. Start the Exosuit Fabricators constructing all of the cyborg parts
    2. +
    3. While the parts are being constructed, take your human brain, and place it inside the Man-Machine Interface
    4. +
    5. Once you have a Robot Head, place your two flashes inside the eye sockets
    6. +
    7. Once you have your Robot Chest, wire the Robot chest, then insert the power cell
    8. +
    9. Attach all of the Robot parts to the Robot frame
    10. +
    11. Insert the Man-Machine Interface (With the Brain inside) Into the Robot Body
    12. +
    13. Congratulations! You have a new cyborg!
    14. +
    + +

    Cyborg Deconstruction

    + If you want to deconstruct a cyborg, say to remove its MMI without blowing the Cyborg to pieces, they come apart very quickly, and very safely, in a few simple steps. +
      +
    • Crowbar
    • +
    • Wrench
    • + Optional: +
    • Screwdriver
    • +
    • Wirecutters
    • +
    +
      +
    1. Begin by unlocking the Cyborg's access panel using your ID
    2. +
    3. Use your crowbar to open the Cyborg's access panel
    4. +
    5. Using your bare hands, remove the power cell from the Cyborg
    6. +
    7. Lockdown the Cyborg to disengage safety protocols
    8. +
        + Option 1: Robotics console +
      1. Use the Robotics console in the RD's office
      2. +
      3. Find the entry for your Cyborg
      4. +
      5. Press the Lockdown button on the Robotics console
      6. +
      +
        + Option 2: Lockdown wire +
      1. Use your screwdriver to expose the Cyborg's wiring
      2. +
      3. Use your wirecutters to start cutting all of the wires until the lockdown light turns off, cutting all of the wires irregardless of the lockdown light works as well
      4. +
      +
    9. Use your wrench to unfasten the Cyborg's bolts, the Cyborg will then fall apart onto the floor, the MMI will be there as well
    10. +
    + +

    Cyborg Maintenance

    + Occasionally Cyborgs may require maintenance of a couple types, this could include replacing a power cell with a charged one, or possibly maintaining the cyborg's internal wiring. + +

    Replacing a Power Cell

    + Replacing a Power cell is a common type of maintenance for cyborgs. It usually involves replacing the cell with a fully charged one, or upgrading the cell with a larger capacity cell.
    The steps to replace a cell are follows: +
      +
    1. Unlock the Cyborg's Interface by swiping your ID on it
    2. +
    3. Open the Cyborg's outer panel using a crowbar
    4. +
    5. Remove the old power cell
    6. +
    7. Insert the new power cell
    8. +
    9. Close the Cyborg's outer panel using a crowbar
    10. +
    11. Lock the Cyborg's Interface by swiping your ID on it, this will prevent non-qualified personnel from attempting to remove the power cell
    12. +
    + +

    Exposing the Internal Wiring

    + Exposing the internal wiring of a cyborg is fairly easy to do, and is mainly used for cyborg repairs.
    You can easily expose the internal wiring by following the steps below: +
      +
    1. Follow Steps 1 - 3 of "Replacing a Cyborg's Power Cell"
    2. +
    3. Open the cyborg's internal wiring panel by using a screwdriver to unsecure the panel
    4. +
    + To re-seal the cyborg's internal wiring: +
      +
    1. Use a screwdriver to secure the cyborg's internal panel
    2. +
    3. Follow steps 4 - 6 of "Replacing a Cyborg's Power Cell" to close up the cyborg
    4. +
    + +

    Cyborg Repairs

    + Occasionally a Cyborg may become damaged. This could be in the form of impact damage from a heavy or fast-travelling object, or it could be heat damage from high temperatures, or even lasers or Electromagnetic Pulses (EMPs). + +

    Dents

    + If a cyborg becomes damaged due to impact from heavy or fast-moving objects, it will become dented. Sure, a dent may not seem like much, but it can compromise the structural integrity of the cyborg, possibly causing a critical failure. + Dents in a cyborg's frame are rather easy to repair, all you need is to apply a welding tool to the dented area, and the high-tech cyborg frame will repair the dent under the heat of the welder. + +

    Excessive Heat Damage

    + If a cyborg becomes damaged due to excessive heat, it is likely that the internal wires will have been damaged. You must replace those wires to ensure that the cyborg remains functioning properly.
    To replace the internal wiring follow the steps below: +
      +
    1. Unlock the Cyborg's Interface by swiping your ID
    2. +
    3. Open the Cyborg's External Panel using a crowbar
    4. +
    5. Remove the Cyborg's Power Cell
    6. +
    7. Using a screwdriver, expose the internal wiring or the Cyborg
    8. +
    9. Replace the damaged wires inside the cyborg
    10. +
    11. Secure the internal wiring cover using a screwdriver
    12. +
    13. Insert the Cyborg's Power Cell
    14. +
    15. Close the Cyborg's External Panel using a crowbar
    16. +
    17. Lock the Cyborg's Interface by swiping your ID
    18. +
    + These repair tasks may seem difficult, but are essential to keep your cyborgs running at peak efficiency. + +

    In Case of Emergency

    + In case of emergency, there are a few steps you can take. + +

    "Rogue" Cyborgs

    + If the cyborgs seem to become "rogue", they may have non-standard laws. In this case, use extreme caution. + To repair the situation, follow these steps: +
      +
    1. Locate the nearest robotics console
    2. +
    3. Determine which cyborgs are "Rogue"
    4. +
    5. Press the lockdown button to immobolize the cyborg
    6. +
    7. Locate the cyborg
    8. +
    9. Expose the cyborg's internal wiring
    10. +
    11. Check to make sure the LawSync and AI Sync lights are lit
    12. +
    13. If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's Law Sync
    14. +
    15. Proceed to a cyborg upload console. Nanotrasen usually places these in the same location as AI uplaod consoles.
    16. +
    17. Use a "Reset" upload moduleto reset the cyborg's laws
    18. +
    19. Proceed to a Robotics Control console
    20. +
    21. Remove the lockdown on the cyborg
    22. +
    + +

    As a last resort

    + If all else fails in a case of cyborg-related emergency. There may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg. +

    WARNING:

    Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of Nanotrasen equipment, and you may be punished for detonating them without reason. + + + + "} + + + +/obj/item/book/manual/chef_recipes + name = "Chef Recipes" + icon_state = "cooked_book" + author = "Lord Frenrir Cageth" + title = "Chef Recipes" + dat = {" + + + + + +

    Food for Dummies

    + Here is a guide on basic food recipes and also how to not poison your customers accidentally. + + +

    Basic ingredients preparation:

    + + Dough: 10u water + 15u flour for simple dough.
    + 15u egg yolk + 15u flour + 5u sugar for cake batter.
    + Doughs can be transformed by using a knife and rolling pin.
    + All doughs can be microwaved.
    + Bowl: Add water to it for soup preparation.
    + Meat: Microwave it, process it, slice it into microwavable cutlets with your knife, or use it raw.
    + Cheese: Add 5u universal enzyme (catalyst) to milk and soy milk to prepare cheese (sliceable) and tofu.
    + Rice: Mix 10u rice with 10u water in a bowl then microwave it. + +

    Custom food:

    + Add ingredients to a base item to prepare a custom meal.
    + The bases are:
    + - bun (burger)
    + - breadslices(sandwich)
    + - plain bread
    + - plain pie
    + - vanilla cake
    + - empty bowl (salad)
    + - bowl with 10u water (soup)
    + - boiled spaghetti
    + - pizza bread
    + - metal rod (kebab) + +

    Table Craft:

    + Put ingredients on table, then click and drag the table onto yourself to see what recipes you can prepare. + +

    Microwave:

    + Use it to cook or boil food ingredients (meats, doughs, egg, spaghetti, donkpocket, etc...). + It can cook multiple items at once. + +

    Processor:

    + Use it to process certain ingredients (meat into faggot, doughslice into spaghetti, potato into fries,etc...) + +

    Gibber:

    + Stuff an animal in it to grind it into meat. + +

    Meat spike:

    + Stick an animal on it then begin collecting its meat. + + +

    Example recipes:

    + Vanilla Cake: Microwave cake batter.
    + Burger: 1 bun + 1 meat steak
    + Bread: Microwave dough.
    + Waffles: 2 pastry base
    + Popcorn: Microwave corn.
    + Meat Steak: Microwave meat.
    + Meat Pie: 1 plain pie + 1u black pepper + 1u salt + 2 meat cutlets
    + Boiled Spagetti: Microwave spaghetti.
    + Donuts: 1u sugar + 1 pastry base
    + Fries: Process potato. + +

    Sharing your food:

    + You can put your meals on your kitchen counter or load them in the snack vending machines. + + + "} + + +/obj/item/book/manual/barman_recipes + name = "Barman Recipes" + icon_state = "barbook" + author = "Sir John Rose" + title = "Barman Recipes" + dat = {" + + + + + +

    Drinks for dummies

    + Heres a guide for some basic drinks. + +

    Manly Dorf:

    + Mix ale and beer into a glass. + +

    Grog:

    + Mix rum and water into a glass. + +

    Black Russian:

    + Mix vodka and kahlua into a glass. + +

    Irish Cream:

    + Mix cream and whiskey into a glass. + +

    Screwdriver:

    + Mix vodka and orange juice into a glass. + +

    Cafe Latte:

    + Mix milk and coffee into a glass. + +

    Mead:

    + Mix Enzyme, water and sugar into a glass. + +

    Gin Tonic:

    + Mix gin and tonic into a glass. + +

    Classic Martini:

    + Mix vermouth and gin into a glass. + + + + + "} + + +/obj/item/book/manual/detective + name = "The Film Noir: Proper Procedures for Investigations" + icon_state ="bookDetective" + author = "Nanotrasen" + title = "The Film Noir: Proper Procedures for Investigations" + dat = {" + + + + +

    Detective Work

    + + Between your bouts of self-narration, and drinking whiskey on the rocks, you might get a case or two to solve.
    + To have the best chance to solve your case, follow these directions: +

    +

      +
    1. Go to the crime scene.
    2. +
    3. Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog.)
    4. +
    5. Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too.
    6. +
    7. Return to your office.
    8. +
    9. Using your forensic scanning computer, scan your Scanner to upload all of your evidence into the database.
    10. +
    11. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
    12. +
    13. If you have 80% or more of the print (The print is displayed) go to step 10, otherwise continue to step 8.
    14. +
    15. Look for clues from the suit fibres you found on your perp, and go about looking for more evidence with this new information, scanning as you go.
    16. +
    17. Try to get a fingerprint card of your perp, as if used in the computer, the prints will be completed on their dossier.
    18. +
    19. Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it.
    20. +
    21. Since you now have both your dossier and the name of the person, print both out as evidence, and get security to nab your baddie.
    22. +
    23. Give yourself a pat on the back and a bottle of the ships finest vodka, you did it!
    24. +
    +

    + It really is that easy! Good luck! + + + "} + +/obj/item/book/manual/nuclear + name = "Fission Mailed: Nuclear Sabotage 101" + icon_state ="bookNuclear" + author = "Syndicate" + title = "Fission Mailed: Nuclear Sabotage 101" + dat = {" + Nuclear Explosives 101:
    + Hello and thank you for choosing the Syndicate for your nuclear information needs.
    + Today's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.
    + First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.
    + Pressing any button on the compacted bomb will cause it to extend and bolt itself into place.
    + If this is done to unbolt it one must completely log in which at this time may not be possible.
    + To make the nuclear device functional:
    +

  • Place the nuclear device in the designated detonation zone.
  • +
  • Extend and anchor the nuclear device from its interface.
  • +
  • Insert the nuclear authorisation disk into slot.
  • +
  • Type numeric authorisation code into the keypad. This should have been provided. Note: If you make a mistake press R to reset the device. +
  • Press the E button to log onto the device.
  • + You now have activated the device. To deactivate the buttons at anytime for example when you've already prepped the bomb for detonation remove the auth disk OR press the R on the keypad.
    + Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option.
    + Note: Nanotrasen is a pain in the neck.
    + Toggle off the SAFETY.
    + Note: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step.
    + So use the - - and + + to set a det time between 5 seconds and 10 minutes.
    + Then press the timer toggle button to start the countdown.
    + Now remove the auth. disk so that the buttons deactivate.
    + Note: THE BOMB IS STILL SET AND WILL DETONATE
    + Now before you remove the disk if you need to move the bomb you can:
    + Toggle off the anchor, move it, and re-anchor.

    + Good luck. Remember the order:
    + Disk, Code, Safety, Timer, Disk, RUN!
    + Intelligence Analysts believe that normal Nanotrasen procedure is for the Captain to secure the nuclear authorisation disk.
    + Good luck! + "} + +// Wiki books that are linked to the configured wiki link. + +// A book that links to the wiki +/obj/item/book/manual/wiki + var/page_link = "" + window_size = "970x710" + +/obj/item/book/manual/wiki/attack_self() + if(!dat) + initialize_wikibook() + ..() + +/obj/item/book/manual/wiki/proc/initialize_wikibook() + var/wikiurl = CONFIG_GET(string/wikiurl) + if(wikiurl) + dat = {" + + + + + + +

    You start skimming through the manual...

    + + + + + + "} + +/obj/item/book/manual/wiki/chemistry + name = "Chemistry Textbook" + icon_state ="chemistrybook" + author = "Nanotrasen" + title = "Chemistry Textbook" + page_link = "Guide_to_chemistry" + +/obj/item/book/manual/wiki/engineering_construction + name = "Station Repairs and Construction" + icon_state ="bookEngineering" + author = "Engineering Encyclopedia" + title = "Station Repairs and Construction" + page_link = "Guide_to_construction" + +/obj/item/book/manual/wiki/engineering_guide + name = "Engineering Textbook" + icon_state ="bookEngineering2" + author = "Engineering Encyclopedia" + title = "Engineering Textbook" + page_link = "Guide_to_engineering" + +/obj/item/book/manual/wiki/security_space_law + name = "Space Law" + desc = "A set of Nanotrasen guidelines for keeping law and order on their space stations." + icon_state = "bookSpaceLaw" + author = "Nanotrasen" + title = "Space Law" + page_link = "Space_Law" + +/obj/item/book/manual/wiki/infections + name = "Infections - Making your own pandemic!" + icon_state = "bookInfections" + author = "Infections Encyclopedia" + title = "Infections - Making your own pandemic!" + page_link = "Infections" + +/obj/item/book/manual/wiki/telescience + name = "Teleportation Science - Bluespace for dummies!" + icon_state = "book7" + author = "University of Bluespace" + title = "Teleportation Science - Bluespace for dummies!" + page_link = "Guide_to_telescience" + +/obj/item/book/manual/wiki/engineering_hacking + name = "Hacking" + icon_state ="bookHacking" + author = "Engineering Encyclopedia" + title = "Hacking" + page_link = "Hacking" From 99e4db7bf47f560d20d3ac1c202515453aeaecd4 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 28 Oct 2017 03:19:40 -0500 Subject: [PATCH 37/48] Automatic changelog generation for PR #3663 [ci skip] --- html/changelogs/AutoChangeLog-pr-3663.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3663.yml diff --git a/html/changelogs/AutoChangeLog-pr-3663.yml b/html/changelogs/AutoChangeLog-pr-3663.yml new file mode 100644 index 0000000000..7fe666a739 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3663.yml @@ -0,0 +1,4 @@ +author: "Mark9013100" +delete-after: True +changes: + - tweak: "The Medical Cloning manual has been updated." From 1265e804c5c880b80ec92e65a708a90d761f8003 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 28 Oct 2017 03:19:48 -0500 Subject: [PATCH 38/48] [MIRROR] Adds a method to transfer all components from one datum to another (#3661) * Merge pull request #31941 from tgstation/Cyberboss-patch-2 Adds a method to transfer all components from one datum to another * Adds a method to transfer all components from one datum to another --- code/datums/components/_component.dm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index 2f70713c32..9978b01955 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -220,3 +220,14 @@ C.OnTransfer(src) C.parent = src SendSignal(COMSIG_COMPONENT_ADDED, C) + +/datum/proc/TransferComponents(datum/target) + var/list/dc = datum_components + if(!dc) + return + var/comps = dc[/datum/component] + if(islist(comps)) + for(var/I in comps) + target.TakeComponent(I) + else + target.TakeComponent(comps) From 6a5b3b278e5f9eaa17a1c22ba48886c9758a0a1d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 28 Oct 2017 23:42:38 -0500 Subject: [PATCH 39/48] Automatic changelog generation for PR #3524 [ci skip] --- html/changelogs/AutoChangeLog-pr-3524.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3524.yml diff --git a/html/changelogs/AutoChangeLog-pr-3524.yml b/html/changelogs/AutoChangeLog-pr-3524.yml new file mode 100644 index 0000000000..8966133a1d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3524.yml @@ -0,0 +1,4 @@ +author: "Kor" +delete-after: True +changes: + - rscadd: "You can now select your Halloween race, rather than having it assigned randomly via event." From 78da30ec8d98ae63f2233d5e2b21d7368b11008b Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 29 Oct 2017 00:25:17 -0500 Subject: [PATCH 40/48] Update species.dm --- .../mob/living/carbon/human/species.dm | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index c39879c952..aebd1af9ba 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1,5 +1,7 @@ // This code handles different species in the game. +GLOBAL_LIST_EMPTY(roundstart_races) + #define HEAT_DAMAGE_LEVEL_1 2 #define HEAT_DAMAGE_LEVEL_2 3 #define HEAT_DAMAGE_LEVEL_3 8 @@ -12,7 +14,6 @@ var/id // if the game needs to manually check your race to do something not included in a proc here, it will use this var/limbs_id //this is used if you want to use a different species limb sprites. Mainly used for angels as they look like humans. var/name // this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever - var/roundstart = 0 // can this mob be chosen at roundstart? (assuming the config option is checked?) var/default_color = "#FFF" // if alien colors are disabled, this is the color that will be used by that race var/sexes = 1 // whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows @@ -65,7 +66,6 @@ var/breathid = "o2" var/obj/item/organ/brain/mutant_brain = /obj/item/organ/brain - var/obj/item/organ/heart/mutant_heart = /obj/item/organ/heart var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes var/obj/item/organ/ears/mutantears = /obj/item/organ/ears var/obj/item/mutanthands @@ -93,6 +93,20 @@ ..() +/proc/generate_selectable_species() + for(var/I in subtypesof(/datum/species)) + var/datum/species/S = new I + if(S.check_roundstart_eligible()) + GLOB.roundstart_races += S.id + qdel(S) + if(!GLOB.roundstart_races.len) + GLOB.roundstart_races += "human" + +/datum/species/proc/check_roundstart_eligible() + if(id in (CONFIG_GET(keyed_flag_list/roundstart_races))) + return TRUE + return FALSE + /datum/species/proc/random_name(gender,unique,lastname) if(unique) return random_unique_name(gender) @@ -155,7 +169,7 @@ heart.Remove(C,1) QDEL_NULL(heart) if(should_have_heart && !heart) - heart = new mutant_heart() + heart = new() heart.Insert(C) if(lungs && (replace_current || !should_have_lungs)) @@ -1153,7 +1167,7 @@ if(radiation > RAD_MOB_VOMIT && prob(RAD_MOB_VOMIT_PROB)) H.vomit(10, TRUE) - + if(radiation > RAD_MOB_MUTATE) if(prob(1)) to_chat(H, "You mutate!") From 180e730be96f9fdd8113bfa7b380f21227ac3634 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 29 Oct 2017 00:46:15 -0500 Subject: [PATCH 41/48] Update species.dm --- code/modules/mob/living/carbon/human/species.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index aebd1af9ba..f5b339405d 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -66,6 +66,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/breathid = "o2" var/obj/item/organ/brain/mutant_brain = /obj/item/organ/brain + var/obj/item/organ/heart/mutant_heart = /obj/item/organ/heart var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes var/obj/item/organ/ears/mutantears = /obj/item/organ/ears var/obj/item/mutanthands @@ -169,7 +170,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) heart.Remove(C,1) QDEL_NULL(heart) if(should_have_heart && !heart) - heart = new() + heart = new mutant_heart() heart.Insert(C) if(lungs && (replace_current || !should_have_lungs)) From d4e794eef7526a2d3c944cde85c0060cc8a9616d Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 29 Oct 2017 00:47:25 -0500 Subject: [PATCH 42/48] Update furrypeople.dm --- .../mob/living/carbon/human/species_types/furrypeople.dm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index d15280790e..bff4d8554a 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -8,7 +8,6 @@ attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 liked_food = MEAT | FRIED disliked_food = TOXIC @@ -31,7 +30,6 @@ attack_verb = "peck" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 liked_food = MEAT | FRUIT disliked_food = TOXIC @@ -53,7 +51,6 @@ attack_verb = "bite" attack_sound = 'sound/weapons/bite.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 liked_food = MEAT disliked_food = TOXIC @@ -75,7 +72,6 @@ attack_verb = "flutter" //wat? attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 liked_food = MEAT | FRUIT disliked_food = TOXIC @@ -105,7 +101,6 @@ skinned_type = /obj/item/stack/sheet/animalhide/xeno exotic_bloodtype = "L" damage_overlay_type = "xeno" - roundstart = 1 liked_food = MEAT //Praise the Omnissiah, A challange worthy of my skills - HS @@ -138,7 +133,6 @@ meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno skinned_type = /obj/item/stack/sheet/animalhide/xeno // safe_toxins_max = 32 //Too much of anything is bad. - roundstart = 0 // whitelisted = 1 // whitelist = list("talkingcactus") //testing whitelisting @@ -182,7 +176,6 @@ punchdamagehigh = 14 punchstunthreshold = 13 blacklisted = 1 - roundstart = 0 whitelist = 1 whitelist = list("talkingcactus") @@ -233,7 +226,6 @@ attack_verb = "bite" attack_sound = 'sound/weapons/bite.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' -// roundstart = 1 whitelisted = 1 whitelist = list("rubyflamewing") blacklisted = 0 @@ -248,4 +240,3 @@ attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - roundstart = 1 From debaad29484b2caef0907aa63c5354cae12ea2e0 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 29 Oct 2017 00:47:47 -0500 Subject: [PATCH 43/48] Update podpeople.dm --- code/modules/mob/living/carbon/human/species_types/podpeople.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 84bf5bdf80..3881eae6f5 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -13,7 +13,6 @@ disliked_food = NONE liked_food = NONE toxic_food = NONE - roundstart = TRUE /datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species) From 71dd5e8e2e4f4714ebf9d21aa2e2aed8f4d71d0c Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 29 Oct 2017 00:48:50 -0500 Subject: [PATCH 44/48] Update game_options.dm --- .../configuration/entries/game_options.dm | 555 +++++++++++------- 1 file changed, 327 insertions(+), 228 deletions(-) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index f2c9cd3315..f1ee6a557c 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -1,275 +1,374 @@ -#define CURRENT_RESIDENT_FILE "game_options.txt" +#define CURRENT_RESIDENT_FILE "config.txt" -CONFIG_DEF(number_list/repeated_mode_adjust) +CONFIG_DEF(flag/autoadmin) // if autoadmin is enabled + protection = CONFIG_ENTRY_LOCKED -CONFIG_DEF(keyed_number_list/probability) +CONFIG_DEF(string/autoadmin_rank) // the rank for autoadmins + value = "Game Master" + protection = CONFIG_ENTRY_LOCKED -/datum/config_entry/keyed_number_list/probability/ValidateKeyName(key_name) - return key_name in config.modes +CONFIG_DEF(string/servername) // server name (the name of the game window) -CONFIG_DEF(keyed_number_list/max_pop) +CONFIG_DEF(string/serversqlname) // short form server name used for the DB -/datum/config_entry/keyed_number_list/max_pop/ValidateKeyName(key_name) - return key_name in config.modes +CONFIG_DEF(string/stationname) // station name (the name of the station in-game) -CONFIG_DEF(keyed_number_list/min_pop) +CONFIG_DEF(number/lobby_countdown) // In between round countdown. + value = 120 + min_val = 0 -/datum/config_entry/keyed_number_list/min_pop/ValidateKeyName(key_name) - return key_name in config.modes +CONFIG_DEF(number/round_end_countdown) // Post round murder death kill countdown + value = 25 + min_val = 0 -CONFIG_DEF(keyed_flag_list/continuous) // which roundtypes continue if all antagonists die +CONFIG_DEF(flag/hub) // if the game appears on the hub or not -/datum/config_entry/keyed_flag_list/continuous/ValidateKeyName(key_name) - return key_name in config.modes +CONFIG_DEF(flag/log_ooc) // log OOC channel -CONFIG_DEF(keyed_flag_list/midround_antag) // which roundtypes use the midround antagonist system +CONFIG_DEF(flag/log_access) // log login/logout -/datum/config_entry/keyed_flag_list/midround_antag/ValidateKeyName(key_name) - return key_name in config.modes +CONFIG_DEF(flag/log_say) // log client say -CONFIG_DEF(keyed_string_list/policy) +CONFIG_DEF(flag/log_admin) // log admin actions + protection = CONFIG_ENTRY_LOCKED -CONFIG_DEF(number/damage_multiplier) - value = 1 +CONFIG_DEF(flag/log_prayer) // log prayers + +CONFIG_DEF(flag/log_law) // log lawchanges + +CONFIG_DEF(flag/log_game) // log game events + +CONFIG_DEF(flag/log_vote) // log voting + +CONFIG_DEF(flag/log_whisper) // log client whisper + +CONFIG_DEF(flag/log_attack) // log attack messages + +CONFIG_DEF(flag/log_emote) // log emotes + +CONFIG_DEF(flag/log_adminchat) // log admin chat messages + protection = CONFIG_ENTRY_LOCKED + +CONFIG_DEF(flag/log_pda) // log pda messages + +CONFIG_DEF(flag/log_twitter) // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases. + +CONFIG_DEF(flag/log_world_topic) // log all world.Topic() calls + +CONFIG_DEF(flag/log_manifest) // log crew manifest to seperate file + +CONFIG_DEF(flag/allow_admin_ooccolor) // Allows admins with relevant permissions to have their own ooc colour + +CONFIG_DEF(flag/allow_vote_restart) // allow votes to restart + +CONFIG_DEF(flag/allow_vote_mode) // allow votes to change mode + +CONFIG_DEF(number/vote_delay) // minimum time between voting sessions (deciseconds, 10 minute default) + value = 6000 + min_val = 0 + +CONFIG_DEF(number/vote_period) // length of voting period (deciseconds, default 1 minute) + value = 600 + min_val = 0 + +CONFIG_DEF(flag/default_no_vote) // vote does not default to nochange/norestart + +CONFIG_DEF(flag/no_dead_vote) // dead people can't vote + +CONFIG_DEF(flag/allow_metadata) // Metadata is supported. + +CONFIG_DEF(flag/popup_admin_pm) // adminPMs to non-admins show in a pop-up 'reply' window when set + +CONFIG_DEF(number/fps) + value = 20 + min_val = 1 + max_val = 100 //byond will start crapping out at 50, so this is just ridic + var/sync_validate = FALSE + +/datum/config_entry/number/fps/ValidateAndSet(str_val) + . = ..() + if(.) + sync_validate = TRUE + var/datum/config_entry/number/ticklag/TL = config.entries_by_type[/datum/config_entry/number/ticklag] + if(!TL.sync_validate) + TL.ValidateAndSet(10 / value) + sync_validate = FALSE + +CONFIG_DEF(number/ticklag) + integer = FALSE + var/sync_validate = FALSE + +/datum/config_entry/number/ticklag/New() //ticklag weirdly just mirrors fps + var/datum/config_entry/CE = /datum/config_entry/number/fps + value = 10 / initial(CE.value) + ..() + +/datum/config_entry/number/ticklag/ValidateAndSet(str_val) + . = text2num(str_val) > 0 && ..() + if(.) + sync_validate = TRUE + var/datum/config_entry/number/fps/FPS = config.entries_by_type[/datum/config_entry/number/fps] + if(!FPS.sync_validate) + FPS.ValidateAndSet(10 / value) + sync_validate = FALSE + +CONFIG_DEF(flag/allow_holidays) + +CONFIG_DEF(number/tick_limit_mc_init) //SSinitialization throttling + value = TICK_LIMIT_MC_INIT_DEFAULT + min_val = 0 //oranges warned us integer = FALSE -CONFIG_DEF(number/minimal_access_threshold) //If the number of players is larger than this threshold, minimal access will be turned on. +CONFIG_DEF(flag/admin_legacy_system) //Defines whether the server uses the legacy admin system with admins.txt or the SQL system + protection = CONFIG_ENTRY_LOCKED + +CONFIG_DEF(string/hostedby) + +CONFIG_DEF(flag/norespawn) + +CONFIG_DEF(flag/guest_jobban) + +CONFIG_DEF(flag/usewhitelist) + +CONFIG_DEF(flag/ban_legacy_system) //Defines whether the server uses the legacy banning system with the files in /data or the SQL system. + protection = CONFIG_ENTRY_LOCKED + +CONFIG_DEF(flag/use_age_restriction_for_jobs) //Do jobs use account age restrictions? --requires database + +CONFIG_DEF(flag/use_account_age_for_jobs) //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected. + +CONFIG_DEF(flag/use_exp_tracking) + +CONFIG_DEF(flag/use_exp_restrictions_heads) + +CONFIG_DEF(number/use_exp_restrictions_heads_hours) + value = 0 min_val = 0 -CONFIG_DEF(flag/jobs_have_minimal_access) //determines whether jobs use minimal access or expanded access. +CONFIG_DEF(flag/use_exp_restrictions_heads_department) -CONFIG_DEF(flag/assistants_have_maint_access) +CONFIG_DEF(flag/use_exp_restrictions_other) -CONFIG_DEF(flag/security_has_maint_access) +CONFIG_DEF(flag/use_exp_restrictions_admin_bypass) -CONFIG_DEF(flag/everyone_has_maint_access) +CONFIG_DEF(string/server) -CONFIG_DEF(flag/sec_start_brig) //makes sec start in brig instead of dept sec posts +CONFIG_DEF(string/banappeals) -CONFIG_DEF(flag/force_random_names) +CONFIG_DEF(string/wikiurl) + value = "http://www.tgstation13.org/wiki" -CONFIG_DEF(flag/humans_need_surnames) +CONFIG_DEF(string/forumurl) + value = "http://tgstation13.org/phpBB/index.php" -CONFIG_DEF(flag/allow_ai) // allow ai job +CONFIG_DEF(string/rulesurl) + value = "http://www.tgstation13.org/wiki/Rules" -CONFIG_DEF(flag/disable_secborg) // disallow secborg module to be chosen. +CONFIG_DEF(string/githuburl) + value = "https://www.github.com/tgstation/-tg-station" -CONFIG_DEF(flag/disable_peaceborg) - -CONFIG_DEF(number/traitor_scaling_coeff) //how much does the amount of players get divided by to determine traitors - value = 6 - min_val = 1 - -CONFIG_DEF(number/brother_scaling_coeff) //how many players per brother team - value = 25 - min_val = 1 - -CONFIG_DEF(number/changeling_scaling_coeff) //how much does the amount of players get divided by to determine changelings - value = 6 - min_val = 1 - -CONFIG_DEF(number/security_scaling_coeff) //how much does the amount of players get divided by to determine open security officer positions - value = 8 - min_val = 1 - -CONFIG_DEF(number/abductor_scaling_coeff) //how many players per abductor team - value = 15 - min_val = 1 - -CONFIG_DEF(number/traitor_objectives_amount) - value = 2 +CONFIG_DEF(number/githubrepoid) + value = null min_val = 0 -CONFIG_DEF(number/brother_objectives_amount) - value = 2 +CONFIG_DEF(flag/guest_ban) + +CONFIG_DEF(number/id_console_jobslot_delay) + value = 30 min_val = 0 -CONFIG_DEF(flag/reactionary_explosions) //If we use reactionary explosions, explosions that react to walls and doors - -CONFIG_DEF(flag/protect_roles_from_antagonist) //If security and such can be traitor/cult/other - -CONFIG_DEF(flag/protect_assistant_from_antagonist) //If assistants can be traitor/cult/other - -CONFIG_DEF(flag/enforce_human_authority) //If non-human species are barred from joining as a head of staff - -CONFIG_DEF(flag/allow_latejoin_antagonists) // If late-joining players can be traitor/changeling - -CONFIG_DEF(number/midround_antag_time_check) // How late (in minutes) you want the midround antag system to stay on, setting this to 0 will disable the system - value = 60 +CONFIG_DEF(number/inactivity_period) //time in ds until a player is considered inactive) + value = 3000 min_val = 0 -CONFIG_DEF(number/midround_antag_life_check) // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist - value = 0.7 +/datum/config_entry/number/inactivity_period/ValidateAndSet(str_val) + . = ..() + if(.) + value *= 10 //documented as seconds in config.txt + +CONFIG_DEF(number/afk_period) //time in ds until a player is considered inactive) + value = 3000 + min_val = 0 + +/datum/config_entry/number/afk_period/ValidateAndSet(str_val) + . = ..() + if(.) + value *= 10 //documented as seconds in config.txt + +CONFIG_DEF(flag/kick_inactive) //force disconnect for inactive players + +CONFIG_DEF(flag/load_jobs_from_txt) + +CONFIG_DEF(flag/forbid_singulo_possession) + +CONFIG_DEF(flag/automute_on) //enables automuting/spam prevention + +CONFIG_DEF(string/panic_server_name) + +/datum/config_entry/string/panic_server_name/ValidateAndSet(str_val) + return str_val != "\[Put the name here\]" && ..() + +CONFIG_DEF(string/panic_address) //Reconnect a player this linked server if this server isn't accepting new players + +/datum/config_entry/string/panic_address/ValidateAndSet(str_val) + return str_val != "byond://address:port" && ..() + +CONFIG_DEF(string/invoke_youtubedl) + protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN + +CONFIG_DEF(flag/show_irc_name) + +CONFIG_DEF(flag/see_own_notes) //Can players see their own admin notes (read-only)? + +CONFIG_DEF(number/note_fresh_days) + value = null + min_val = 0 + integer = FALSE + +CONFIG_DEF(number/note_stale_days) + value = null + min_val = 0 + integer = FALSE + +CONFIG_DEF(flag/maprotation) + +CONFIG_DEF(number/maprotatechancedelta) + value = 0.75 + min_val = 0 + max_val = 1 + integer = FALSE + +CONFIG_DEF(number/soft_popcap) + value = null + min_val = 0 + +CONFIG_DEF(number/hard_popcap) + value = null + min_val = 0 + +CONFIG_DEF(number/extreme_popcap) + value = null + min_val = 0 + +CONFIG_DEF(string/soft_popcap_message) + value = "Be warned that the server is currently serving a high number of users, consider using alternative game servers." + +CONFIG_DEF(string/hard_popcap_message) + value = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers." + +CONFIG_DEF(string/extreme_popcap_message) + value = "The server is currently serving a high number of users, find alternative servers." + +CONFIG_DEF(flag/panic_bunker) // prevents people the server hasn't seen before from connecting + +CONFIG_DEF(number/notify_new_player_age) // how long do we notify admins of a new player + min_val = -1 + +CONFIG_DEF(number/notify_new_player_account_age) // how long do we notify admins of a new byond account + min_val = 0 + +CONFIG_DEF(flag/irc_first_connection_alert) // do we notify the irc channel when somebody is connecting for the first time? + +CONFIG_DEF(flag/check_randomizer) + +CONFIG_DEF(string/ipintel_email) + +/datum/config_entry/string/ipintel_email/ValidateAndSet(str_val) + return str_val != "ch@nge.me" && ..() + +CONFIG_DEF(number/ipintel_rating_bad) + value = 1 integer = FALSE min_val = 0 max_val = 1 -CONFIG_DEF(number/shuttle_refuel_delay) - value = 12000 - min_val = 0 - -CONFIG_DEF(flag/show_game_type_odds) //if set this allows players to see the odds of each roundtype on the get revision screen - -CONFIG_DEF(flag/join_with_mutant_race) //players can choose their mutant race before joining the game - -CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go. If left undefined the game's roundstart var for species is used - var/first_edit = TRUE - -/datum/config_entry/keyed_flag_list/roundstart_races/New() - for(var/I in subtypesof(/datum/species)) - var/datum/species/S = I - if(initial(S.roundstart)) - value[initial(S.id)] = TRUE - ..() - -/datum/config_entry/keyed_flag_list/roundstart_races/ValidateAndSet(str_val) - var/list/old_val - if(first_edit) - old_val = value - old_val = old_val.Copy() - . = ..() - if(first_edit) - if(!.) - value = old_val - else - first_edit = FALSE - -CONFIG_DEF(flag/join_with_mutant_humans) //players can pick mutant bodyparts for humans before joining the game - -CONFIG_DEF(flag/no_summon_guns) //No - -CONFIG_DEF(flag/no_summon_magic) //Fun - -CONFIG_DEF(flag/no_summon_events) //Allowed - -CONFIG_DEF(flag/no_intercept_report) //Whether or not to send a communications intercept report roundstart. This may be overriden by gamemodes. - -CONFIG_DEF(number/arrivals_shuttle_dock_window) //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station - value = 55 - min_val = 30 - -CONFIG_DEF(flag/arrivals_shuttle_require_undocked) //Require the arrivals shuttle to be undocked before latejoiners can join - -CONFIG_DEF(flag/arrivals_shuttle_require_safe_latejoin) //Require the arrivals shuttle to be operational in order for latejoiners to join - -CONFIG_DEF(string/alert_green) - value = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." - -CONFIG_DEF(string/alert_blue_upto) - value = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." - -CONFIG_DEF(string/alert_blue_downto) - value = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed." - -CONFIG_DEF(string/alert_red_upto) - value = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised." - -CONFIG_DEF(string/alert_red_downto) - value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised." - -CONFIG_DEF(string/alert_delta) - value = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill." - -CONFIG_DEF(flag/revival_pod_plants) - -CONFIG_DEF(flag/revival_cloning) - -CONFIG_DEF(number/revival_brain_life) - value = -1 - min_val = -1 - -CONFIG_DEF(flag/rename_cyborg) - -CONFIG_DEF(flag/ooc_during_round) - -CONFIG_DEF(flag/emojis) - -CONFIG_DEF(number/run_delay) //Used for modifying movement speed for mobs. - -CONFIG_DEF(number/walk_delay) - - -CONFIG_DEF(number/human_delay) //Mob specific modifiers. NOTE: These will affect different mob types in different ways -CONFIG_DEF(number/robot_delay) -CONFIG_DEF(number/monkey_delay) -CONFIG_DEF(number/alien_delay) -CONFIG_DEF(number/slime_delay) -CONFIG_DEF(number/animal_delay) - -CONFIG_DEF(number/gateway_delay) //How long the gateway takes before it activates. Default is half an hour. - value = 18000 - min_val = 0 - -CONFIG_DEF(flag/ghost_interaction) - -CONFIG_DEF(flag/silent_ai) -CONFIG_DEF(flag/silent_borg) - -CONFIG_DEF(flag/sandbox_autoclose) // close the sandbox panel after spawning an item, potentially reducing griff - -CONFIG_DEF(number/default_laws) //Controls what laws the AI spawns with. - value = 0 - min_val = 0 - max_val = 3 - -CONFIG_DEF(number/silicon_max_law_amount) +CONFIG_DEF(number/ipintel_save_good) value = 12 min_val = 0 -CONFIG_DEF(keyed_flag_list/random_laws) +CONFIG_DEF(number/ipintel_save_bad) + value = 1 + min_val = 0 -CONFIG_DEF(keyed_number_list/law_weight) - splitter = "," +CONFIG_DEF(string/ipintel_domain) + value = "check.getipintel.net" -CONFIG_DEF(number/assistant_cap) - value = -1 - min_val = -1 +CONFIG_DEF(flag/aggressive_changelog) -CONFIG_DEF(flag/starlight) -CONFIG_DEF(flag/grey_assistants) +CONFIG_DEF(flag/autoconvert_notes) //if all connecting player's notes should attempt to be converted to the database + protection = CONFIG_ENTRY_LOCKED -CONFIG_DEF(number/lavaland_budget) +CONFIG_DEF(flag/allow_webclient) + +CONFIG_DEF(flag/webclient_only_byond_members) + +CONFIG_DEF(flag/announce_admin_logout) + +CONFIG_DEF(flag/announce_admin_login) + +CONFIG_DEF(flag/allow_map_voting) + +CONFIG_DEF(flag/generate_minimaps) + +CONFIG_DEF(number/client_warn_version) + value = null + min_val = 500 + max_val = DM_VERSION - 1 + +CONFIG_DEF(string/client_warn_message) + value = "Your version of byond may have issues or be blocked from accessing this server in the future." + +CONFIG_DEF(number/client_error_version) + value = null + min_val = 500 + max_val = DM_VERSION - 1 + +CONFIG_DEF(string/client_error_message) + value = "Your version of byond is too old, may have issues, and is blocked from accessing this server." + +CONFIG_DEF(number/minute_topic_limit) + value = null + min_val = 0 + +CONFIG_DEF(number/second_topic_limit) + value = null + min_val = 0 + +CONFIG_DEF(number/error_cooldown) // The "cooldown" time for each occurrence of a unique error) + value = 600 + min_val = 0 + +CONFIG_DEF(number/error_limit) // How many occurrences before the next will silence them + value = 50 + +CONFIG_DEF(number/error_silence_time) // How long a unique error will be silenced for + value = 6000 + +CONFIG_DEF(number/error_msg_delay) // How long to wait between messaging admins about occurrences of a unique error + value = 50 + +CONFIG_DEF(flag/irc_announce_new_game) + +CONFIG_DEF(flag/debug_admin_hrefs) + +CONFIG_DEF(number/mc_tick_rate/base_mc_tick_rate) + integer = FALSE + value = 1 + +CONFIG_DEF(number/mc_tick_rate/high_pop_mc_tick_rate) + integer = FALSE + value = 1.1 + +CONFIG_DEF(number/mc_tick_rate/high_pop_mc_mode_amount) + value = 65 + +CONFIG_DEF(number/mc_tick_rate/disable_high_pop_mc_mode_amount) value = 60 - min_val = 0 -CONFIG_DEF(number/space_budget) - value = 16 - min_val = 0 +CONFIG_TWEAK(number/mc_tick_rate) + abstract_type = /datum/config_entry/number/mc_tick_rate -CONFIG_DEF(flag/allow_random_events) // Enables random events mid-round when set - -CONFIG_DEF(number/events_min_time_mul) // Multipliers for random events minimal starting time and minimal players amounts - value = 1 - min_val = 0 - integer = FALSE - -CONFIG_DEF(number/events_min_players_mul) - value = 1 - min_val = 0 - integer = FALSE - -CONFIG_DEF(number/mice_roundstart) - value = 10 - min_val = 0 - -CONFIG_DEF(number/bombcap) - value = 14 - min_val = 4 - -CONFIG_DEF(flag/allow_crew_objectives) -CONFIG_DEF(flag/allow_miscreants) -CONFIG_DEF(flag/allow_extended_miscreants) - -/datum/config_entry/number/bombcap/ValidateAndSet(str_val) +CONFIG_TWEAK(number/mc_tick_rate/ValidateAndSet(str_val)) . = ..() - if(.) - GLOB.MAX_EX_DEVESTATION_RANGE = round(value / 4) - GLOB.MAX_EX_HEAVY_RANGE = round(value / 2) - GLOB.MAX_EX_LIGHT_RANGE = value - GLOB.MAX_EX_FLASH_RANGE = value - GLOB.MAX_EX_FLAME_RANGE = value - -CONFIG_DEF(number/emergency_shuttle_autocall_threshold) - min_val = 0 - max_val = 1 - integer = FALSE + if (.) + Master.UpdateTickRate() From d24e4f2d849de7c3dd8866f4ab66458a06f88748 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 29 Oct 2017 00:59:20 -0500 Subject: [PATCH 45/48] Update game_options.dm --- .../configuration/entries/game_options.dm | 571 +++++++----------- 1 file changed, 226 insertions(+), 345 deletions(-) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index aaa3b2a029..a49742e6b0 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -1,374 +1,255 @@ -#define CURRENT_RESIDENT_FILE "config.txt" +#define CURRENT_RESIDENT_FILE "game_options.txt" -CONFIG_DEF(flag/autoadmin) // if autoadmin is enabled - protection = CONFIG_ENTRY_LOCKED +CONFIG_DEF(number_list/repeated_mode_adjust) -CONFIG_DEF(string/autoadmin_rank) // the rank for autoadmins - value = "Game Master" - protection = CONFIG_ENTRY_LOCKED +CONFIG_DEF(keyed_number_list/probability) -CONFIG_DEF(string/servername) // server name (the name of the game window) +/datum/config_entry/keyed_number_list/probability/ValidateKeyName(key_name) + return key_name in config.modes -CONFIG_DEF(string/serversqlname) // short form server name used for the DB +CONFIG_DEF(keyed_number_list/max_pop) -CONFIG_DEF(string/stationname) // station name (the name of the station in-game) +/datum/config_entry/keyed_number_list/max_pop/ValidateKeyName(key_name) + return key_name in config.modes -CONFIG_DEF(number/lobby_countdown) // In between round countdown. - value = 120 - min_val = 0 +CONFIG_DEF(keyed_number_list/min_pop) -CONFIG_DEF(number/round_end_countdown) // Post round murder death kill countdown - value = 25 - min_val = 0 +/datum/config_entry/keyed_number_list/min_pop/ValidateKeyName(key_name) + return key_name in config.modes -CONFIG_DEF(flag/hub) // if the game appears on the hub or not +CONFIG_DEF(keyed_flag_list/continuous) // which roundtypes continue if all antagonists die -CONFIG_DEF(flag/log_ooc) // log OOC channel +/datum/config_entry/keyed_flag_list/continuous/ValidateKeyName(key_name) + return key_name in config.modes -CONFIG_DEF(flag/log_access) // log login/logout +CONFIG_DEF(keyed_flag_list/midround_antag) // which roundtypes use the midround antagonist system -CONFIG_DEF(flag/log_say) // log client say +/datum/config_entry/keyed_flag_list/midround_antag/ValidateKeyName(key_name) + return key_name in config.modes -CONFIG_DEF(flag/log_admin) // log admin actions - protection = CONFIG_ENTRY_LOCKED +CONFIG_DEF(keyed_string_list/policy) -CONFIG_DEF(flag/log_prayer) // log prayers - -CONFIG_DEF(flag/log_law) // log lawchanges - -CONFIG_DEF(flag/log_game) // log game events - -CONFIG_DEF(flag/log_vote) // log voting - -CONFIG_DEF(flag/log_whisper) // log client whisper - -CONFIG_DEF(flag/log_attack) // log attack messages - -CONFIG_DEF(flag/log_emote) // log emotes - -CONFIG_DEF(flag/log_adminchat) // log admin chat messages - protection = CONFIG_ENTRY_LOCKED - -CONFIG_DEF(flag/log_pda) // log pda messages - -CONFIG_DEF(flag/log_twitter) // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases. - -CONFIG_DEF(flag/log_world_topic) // log all world.Topic() calls - -CONFIG_DEF(flag/log_manifest) // log crew manifest to seperate file - -CONFIG_DEF(flag/allow_admin_ooccolor) // Allows admins with relevant permissions to have their own ooc colour - -CONFIG_DEF(flag/allow_vote_restart) // allow votes to restart - -CONFIG_DEF(flag/allow_vote_mode) // allow votes to change mode - -CONFIG_DEF(number/vote_delay) // minimum time between voting sessions (deciseconds, 10 minute default) - value = 6000 - min_val = 0 - -CONFIG_DEF(number/vote_period) // length of voting period (deciseconds, default 1 minute) - value = 600 - min_val = 0 - -CONFIG_DEF(flag/default_no_vote) // vote does not default to nochange/norestart - -CONFIG_DEF(flag/no_dead_vote) // dead people can't vote - -CONFIG_DEF(flag/allow_metadata) // Metadata is supported. - -CONFIG_DEF(flag/popup_admin_pm) // adminPMs to non-admins show in a pop-up 'reply' window when set - -CONFIG_DEF(number/fps) - value = 20 - min_val = 1 - max_val = 100 //byond will start crapping out at 50, so this is just ridic - var/sync_validate = FALSE - -/datum/config_entry/number/fps/ValidateAndSet(str_val) - . = ..() - if(.) - sync_validate = TRUE - var/datum/config_entry/number/ticklag/TL = config.entries_by_type[/datum/config_entry/number/ticklag] - if(!TL.sync_validate) - TL.ValidateAndSet(10 / value) - sync_validate = FALSE - -CONFIG_DEF(number/ticklag) - integer = FALSE - var/sync_validate = FALSE - -/datum/config_entry/number/ticklag/New() //ticklag weirdly just mirrors fps - var/datum/config_entry/CE = /datum/config_entry/number/fps - value = 10 / initial(CE.value) - ..() - -/datum/config_entry/number/ticklag/ValidateAndSet(str_val) - . = text2num(str_val) > 0 && ..() - if(.) - sync_validate = TRUE - var/datum/config_entry/number/fps/FPS = config.entries_by_type[/datum/config_entry/number/fps] - if(!FPS.sync_validate) - FPS.ValidateAndSet(10 / value) - sync_validate = FALSE - -CONFIG_DEF(flag/allow_holidays) - -CONFIG_DEF(number/tick_limit_mc_init) //SSinitialization throttling - value = TICK_LIMIT_MC_INIT_DEFAULT - min_val = 0 //oranges warned us - integer = FALSE - -CONFIG_DEF(flag/admin_legacy_system) //Defines whether the server uses the legacy admin system with admins.txt or the SQL system - protection = CONFIG_ENTRY_LOCKED - -CONFIG_DEF(string/hostedby) - -CONFIG_DEF(flag/norespawn) - -CONFIG_DEF(flag/guest_jobban) - -CONFIG_DEF(flag/usewhitelist) - -CONFIG_DEF(flag/ban_legacy_system) //Defines whether the server uses the legacy banning system with the files in /data or the SQL system. - protection = CONFIG_ENTRY_LOCKED - -CONFIG_DEF(flag/use_age_restriction_for_jobs) //Do jobs use account age restrictions? --requires database - -CONFIG_DEF(flag/use_account_age_for_jobs) //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected. - -CONFIG_DEF(flag/use_exp_tracking) - -CONFIG_DEF(flag/use_exp_restrictions_heads) - -CONFIG_DEF(number/use_exp_restrictions_heads_hours) - value = 0 - min_val = 0 - -CONFIG_DEF(flag/use_exp_restrictions_heads_department) - -CONFIG_DEF(flag/use_exp_restrictions_other) - -CONFIG_DEF(flag/use_exp_restrictions_admin_bypass) - -CONFIG_DEF(string/server) - -CONFIG_DEF(string/banappeals) - -CONFIG_DEF(string/wikiurl) - value = "http://www.tgstation13.org/wiki" - -CONFIG_DEF(string/forumurl) - value = "http://tgstation13.org/phpBB/index.php" - -CONFIG_DEF(string/rulesurl) - value = "http://www.tgstation13.org/wiki/Rules" - -CONFIG_DEF(string/githuburl) - value = "https://www.github.com/tgstation/-tg-station" - -CONFIG_DEF(number/githubrepoid) - value = null - min_val = 0 - -CONFIG_DEF(flag/guest_ban) - -CONFIG_DEF(number/id_console_jobslot_delay) - value = 30 - min_val = 0 - -CONFIG_DEF(number/inactivity_period) //time in ds until a player is considered inactive) - value = 3000 - min_val = 0 - -/datum/config_entry/number/inactivity_period/ValidateAndSet(str_val) - . = ..() - if(.) - value *= 10 //documented as seconds in config.txt - -CONFIG_DEF(number/afk_period) //time in ds until a player is considered inactive) - value = 3000 - min_val = 0 - -/datum/config_entry/number/afk_period/ValidateAndSet(str_val) - . = ..() - if(.) - value *= 10 //documented as seconds in config.txt - -CONFIG_DEF(flag/kick_inactive) //force disconnect for inactive players - -CONFIG_DEF(flag/load_jobs_from_txt) - -CONFIG_DEF(flag/forbid_singulo_possession) - -CONFIG_DEF(flag/automute_on) //enables automuting/spam prevention - -CONFIG_DEF(string/panic_server_name) - -/datum/config_entry/string/panic_server_name/ValidateAndSet(str_val) - return str_val != "\[Put the name here\]" && ..() - -CONFIG_DEF(string/panic_address) //Reconnect a player this linked server if this server isn't accepting new players - -/datum/config_entry/string/panic_address/ValidateAndSet(str_val) - return str_val != "byond://address:port" && ..() - -CONFIG_DEF(string/invoke_youtubedl) - protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN - -CONFIG_DEF(flag/show_irc_name) - -CONFIG_DEF(flag/see_own_notes) //Can players see their own admin notes (read-only)? - -CONFIG_DEF(number/note_fresh_days) - value = null - min_val = 0 - integer = FALSE - -CONFIG_DEF(number/note_stale_days) - value = null - min_val = 0 - integer = FALSE - -CONFIG_DEF(flag/maprotation) - -CONFIG_DEF(number/maprotatechancedelta) - value = 0.75 - min_val = 0 - max_val = 1 - integer = FALSE - -CONFIG_DEF(number/soft_popcap) - value = null - min_val = 0 - -CONFIG_DEF(number/hard_popcap) - value = null - min_val = 0 - -CONFIG_DEF(number/extreme_popcap) - value = null - min_val = 0 - -CONFIG_DEF(string/soft_popcap_message) - value = "Be warned that the server is currently serving a high number of users, consider using alternative game servers." - -CONFIG_DEF(string/hard_popcap_message) - value = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers." - -CONFIG_DEF(string/extreme_popcap_message) - value = "The server is currently serving a high number of users, find alternative servers." - -CONFIG_DEF(flag/panic_bunker) // prevents people the server hasn't seen before from connecting - -CONFIG_DEF(number/notify_new_player_age) // how long do we notify admins of a new player - min_val = -1 - -CONFIG_DEF(number/notify_new_player_account_age) // how long do we notify admins of a new byond account - min_val = 0 - -CONFIG_DEF(flag/irc_first_connection_alert) // do we notify the irc channel when somebody is connecting for the first time? - -CONFIG_DEF(flag/check_randomizer) - -CONFIG_DEF(string/ipintel_email) - -/datum/config_entry/string/ipintel_email/ValidateAndSet(str_val) - return str_val != "ch@nge.me" && ..() - -CONFIG_DEF(number/ipintel_rating_bad) +CONFIG_DEF(number/damage_multiplier) value = 1 integer = FALSE + +CONFIG_DEF(number/minimal_access_threshold) //If the number of players is larger than this threshold, minimal access will be turned on. + min_val = 0 + +CONFIG_DEF(flag/jobs_have_minimal_access) //determines whether jobs use minimal access or expanded access. + +CONFIG_DEF(flag/assistants_have_maint_access) + +CONFIG_DEF(flag/security_has_maint_access) + +CONFIG_DEF(flag/everyone_has_maint_access) + +CONFIG_DEF(flag/sec_start_brig) //makes sec start in brig instead of dept sec posts + +CONFIG_DEF(flag/force_random_names) + +CONFIG_DEF(flag/humans_need_surnames) + +CONFIG_DEF(flag/allow_ai) // allow ai job + +CONFIG_DEF(flag/disable_secborg) // disallow secborg module to be chosen. + +CONFIG_DEF(flag/disable_peaceborg) + +CONFIG_DEF(number/traitor_scaling_coeff) //how much does the amount of players get divided by to determine traitors + value = 6 + min_val = 1 + +CONFIG_DEF(number/brother_scaling_coeff) //how many players per brother team + value = 25 + min_val = 1 + +CONFIG_DEF(number/changeling_scaling_coeff) //how much does the amount of players get divided by to determine changelings + value = 6 + min_val = 1 + +CONFIG_DEF(number/security_scaling_coeff) //how much does the amount of players get divided by to determine open security officer positions + value = 8 + min_val = 1 + +CONFIG_DEF(number/abductor_scaling_coeff) //how many players per abductor team + value = 15 + min_val = 1 + +CONFIG_DEF(number/traitor_objectives_amount) + value = 2 + min_val = 0 + +CONFIG_DEF(number/brother_objectives_amount) + value = 2 + min_val = 0 + +CONFIG_DEF(flag/reactionary_explosions) //If we use reactionary explosions, explosions that react to walls and doors + +CONFIG_DEF(flag/protect_roles_from_antagonist) //If security and such can be traitor/cult/other + +CONFIG_DEF(flag/protect_assistant_from_antagonist) //If assistants can be traitor/cult/other + +CONFIG_DEF(flag/enforce_human_authority) //If non-human species are barred from joining as a head of staff + +CONFIG_DEF(flag/allow_latejoin_antagonists) // If late-joining players can be traitor/changeling + +CONFIG_DEF(number/midround_antag_time_check) // How late (in minutes) you want the midround antag system to stay on, setting this to 0 will disable the system + value = 60 + min_val = 0 + +CONFIG_DEF(number/midround_antag_life_check) // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist + value = 0.7 + integer = FALSE min_val = 0 max_val = 1 -CONFIG_DEF(number/ipintel_save_good) +CONFIG_DEF(number/shuttle_refuel_delay) + value = 12000 + min_val = 0 + +CONFIG_DEF(flag/show_game_type_odds) //if set this allows players to see the odds of each roundtype on the get revision screen + +CONFIG_DEF(flag/join_with_mutant_race) //players can choose their mutant race before joining the game + +CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go. + +CONFIG_DEF(flag/join_with_mutant_humans) //players can pick mutant bodyparts for humans before joining the game + +CONFIG_DEF(flag/no_summon_guns) //No + +CONFIG_DEF(flag/no_summon_magic) //Fun + +CONFIG_DEF(flag/no_summon_events) //Allowed + +CONFIG_DEF(flag/no_intercept_report) //Whether or not to send a communications intercept report roundstart. This may be overriden by gamemodes. + +CONFIG_DEF(number/arrivals_shuttle_dock_window) //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station + value = 55 + min_val = 30 + +CONFIG_DEF(flag/arrivals_shuttle_require_undocked) //Require the arrivals shuttle to be undocked before latejoiners can join + +CONFIG_DEF(flag/arrivals_shuttle_require_safe_latejoin) //Require the arrivals shuttle to be operational in order for latejoiners to join + +CONFIG_DEF(string/alert_green) + value = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." + +CONFIG_DEF(string/alert_blue_upto) + value = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." + +CONFIG_DEF(string/alert_blue_downto) + value = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed." + +CONFIG_DEF(string/alert_red_upto) + value = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised." + +CONFIG_DEF(string/alert_red_downto) + value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised." + +CONFIG_DEF(string/alert_delta) + value = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill." + +CONFIG_DEF(flag/revival_pod_plants) + +CONFIG_DEF(flag/revival_cloning) + +CONFIG_DEF(number/revival_brain_life) + value = -1 + min_val = -1 + +CONFIG_DEF(flag/rename_cyborg) + +CONFIG_DEF(flag/ooc_during_round) + +CONFIG_DEF(flag/emojis) + +CONFIG_DEF(number/run_delay) //Used for modifying movement speed for mobs. + +CONFIG_DEF(number/walk_delay) + + +CONFIG_DEF(number/human_delay) //Mob specific modifiers. NOTE: These will affect different mob types in different ways +CONFIG_DEF(number/robot_delay) +CONFIG_DEF(number/monkey_delay) +CONFIG_DEF(number/alien_delay) +CONFIG_DEF(number/slime_delay) +CONFIG_DEF(number/animal_delay) + +CONFIG_DEF(number/gateway_delay) //How long the gateway takes before it activates. Default is half an hour. + value = 18000 + min_val = 0 + +CONFIG_DEF(flag/ghost_interaction) + +CONFIG_DEF(flag/silent_ai) +CONFIG_DEF(flag/silent_borg) + +CONFIG_DEF(flag/sandbox_autoclose) // close the sandbox panel after spawning an item, potentially reducing griff + +CONFIG_DEF(number/default_laws) //Controls what laws the AI spawns with. + value = 0 + min_val = 0 + max_val = 3 + +CONFIG_DEF(number/silicon_max_law_amount) value = 12 min_val = 0 -CONFIG_DEF(number/ipintel_save_bad) - value = 1 - min_val = 0 +CONFIG_DEF(keyed_flag_list/random_laws) -CONFIG_DEF(string/ipintel_domain) - value = "check.getipintel.net" +CONFIG_DEF(keyed_number_list/law_weight) + splitter = "," -CONFIG_DEF(flag/aggressive_changelog) +CONFIG_DEF(number/assistant_cap) + value = -1 + min_val = -1 -CONFIG_DEF(flag/autoconvert_notes) //if all connecting player's notes should attempt to be converted to the database - protection = CONFIG_ENTRY_LOCKED +CONFIG_DEF(flag/starlight) +CONFIG_DEF(flag/grey_assistants) -CONFIG_DEF(flag/allow_webclient) - -CONFIG_DEF(flag/webclient_only_byond_members) - -CONFIG_DEF(flag/announce_admin_logout) - -CONFIG_DEF(flag/announce_admin_login) - -CONFIG_DEF(flag/allow_map_voting) - -CONFIG_DEF(flag/generate_minimaps) - -CONFIG_DEF(number/client_warn_version) - value = null - min_val = 500 - max_val = DM_VERSION - 1 - -CONFIG_DEF(string/client_warn_message) - value = "Your version of byond may have issues or be blocked from accessing this server in the future." - -CONFIG_DEF(number/client_error_version) - value = null - min_val = 500 - max_val = DM_VERSION - 1 - -CONFIG_DEF(string/client_error_message) - value = "Your version of byond is too old, may have issues, and is blocked from accessing this server." - -CONFIG_DEF(number/minute_topic_limit) - value = null - min_val = 0 - -CONFIG_DEF(number/second_topic_limit) - value = null - min_val = 0 - -CONFIG_DEF(number/error_cooldown) // The "cooldown" time for each occurrence of a unique error) - value = 600 - min_val = 0 - -CONFIG_DEF(number/error_limit) // How many occurrences before the next will silence them - value = 50 - -CONFIG_DEF(number/error_silence_time) // How long a unique error will be silenced for - value = 6000 - -CONFIG_DEF(number/error_msg_delay) // How long to wait between messaging admins about occurrences of a unique error - value = 50 - -CONFIG_DEF(flag/irc_announce_new_game) - -CONFIG_DEF(flag/debug_admin_hrefs) - -CONFIG_DEF(number/mc_tick_rate/base_mc_tick_rate) - integer = FALSE - value = 1 - -CONFIG_DEF(number/mc_tick_rate/high_pop_mc_tick_rate) - integer = FALSE - value = 1.1 - -CONFIG_DEF(number/mc_tick_rate/high_pop_mc_mode_amount) - value = 65 - -CONFIG_DEF(number/mc_tick_rate/disable_high_pop_mc_mode_amount) +CONFIG_DEF(number/lavaland_budget) value = 60 + min_val = 0 -CONFIG_TWEAK(number/mc_tick_rate) - abstract_type = /datum/config_entry/number/mc_tick_rate +CONFIG_DEF(number/space_budget) + value = 16 + min_val = 0 -CONFIG_TWEAK(number/mc_tick_rate/ValidateAndSet(str_val)) +CONFIG_DEF(flag/allow_random_events) // Enables random events mid-round when set + +CONFIG_DEF(number/events_min_time_mul) // Multipliers for random events minimal starting time and minimal players amounts + value = 1 + min_val = 0 + integer = FALSE + +CONFIG_DEF(number/events_min_players_mul) + value = 1 + min_val = 0 + integer = FALSE + +CONFIG_DEF(number/mice_roundstart) + value = 10 + min_val = 0 + +CONFIG_DEF(number/bombcap) + value = 14 + min_val = 4 + +CONFIG_DEF(flag/allow_crew_objectives) +CONFIG_DEF(flag/allow_miscreants) +CONFIG_DEF(flag/allow_extended_miscreants) + +/datum/config_entry/number/bombcap/ValidateAndSet(str_val) . = ..() - if (.) - Master.UpdateTickRate() \ No newline at end of file + if(.) + GLOB.MAX_EX_DEVESTATION_RANGE = round(value / 4) + GLOB.MAX_EX_HEAVY_RANGE = round(value / 2) + GLOB.MAX_EX_LIGHT_RANGE = value + GLOB.MAX_EX_FLASH_RANGE = value + GLOB.MAX_EX_FLAME_RANGE = value + +CONFIG_DEF(number/emergency_shuttle_autocall_threshold) + min_val = 0 + max_val = 1 + integer = FALSE From f77b66ebb908c442a5d86b8eb53451cd26968dbc Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 29 Oct 2017 01:40:28 -0500 Subject: [PATCH 46/48] Update preferences.dm --- code/modules/client/preferences.dm | 109 ++++++++++++++--------------- 1 file changed, 54 insertions(+), 55 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index c493008256..87c62a2069 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -571,63 +571,62 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[features["flavor_text"]]" else dat += "[TextPreview(features["flavor_text"])]...
    " - if(CONFIG_GET(flag/join_with_mutant_race))//really don't need this check, but fuck un-tabbing all those lines - dat += "

    Body

    " - dat += "Gender:
    [gender == MALE ? "Male" : "Female"]
    " - dat += "Species:[pref_species.id]
    " - dat += "Random Body
    " - dat += "Always Random Body: [be_random_body ? "Yes" : "No"]
    " - if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) - dat += "Primary Color:     Change
    " - dat += "Secondary Color:     Change
    " - dat += "Tertiary Color:     Change
    " - if(pref_species.use_skintones) - dat += "Skin Tone: [skin_tone]
    " - dat += "Genitals Use Skintone:[features["genitals_use_skintone"] == TRUE ? "Enabled" : "Disabled"]
    " + dat += "

    Body

    " + dat += "Gender: [gender == MALE ? "Male" : "Female"]
    " + dat += "Species:[pref_species.id]
    " + dat += "Random Body
    " + dat += "Always Random Body: [be_random_body ? "Yes" : "No"]
    " + if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) + dat += "Primary Color:     Change
    " + dat += "Secondary Color:     Change
    " + dat += "Tertiary Color:     Change
    " + if(pref_species.use_skintones) + dat += "Skin Tone: [skin_tone]
    " + dat += "Genitals Use Skintone:[features["genitals_use_skintone"] == TRUE ? "Enabled" : "Disabled"]
    " - if(HAIR in pref_species.species_traits) - dat += "Hair Style: [hair_style]
    " - dat += "Hair Color:     Change
    " - dat += "Facial Hair Style: [facial_hair_style]
    " - dat += "Facial Hair Color:     Change
    " - if(EYECOLOR in pref_species.species_traits) - dat += "Eye Color:     Change
    " - if("tail_lizard" in pref_species.mutant_bodyparts) - dat += "Tail: [features["tail_lizard"]]
    " - else if("mam_tail" in pref_species.mutant_bodyparts) - dat += "Tail: [features["mam_tail"]]
    " - else if("tail_human" in pref_species.mutant_bodyparts) - dat += "Tail: [features["tail_human"]]
    " - if("snout" in pref_species.mutant_bodyparts) - dat += "Snout: [features["snout"]]
    " - if("horns" in pref_species.mutant_bodyparts) - dat += "Snout: [features["horns"]]
    " - if("frills" in pref_species.mutant_bodyparts) - dat += "Frills: [features["frills"]]
    " - if("spines" in pref_species.mutant_bodyparts) - dat += "Spines: [features["spines"]]
    " - if("body_markings" in pref_species.mutant_bodyparts) - dat += "Body Markings: [features["body_markings"]]
    " - else if("mam_body_markings" in pref_species.mutant_bodyparts) - dat += "Body Markings: [features["mam_body_markings"]]
    " - if("mam_ears" in pref_species.mutant_bodyparts) - dat += "Ears: [features["mam_ears"]]
    " - else if("ears" in pref_species.mutant_bodyparts) - dat += "Ears: [features["ears"]]
    " - if("legs" in pref_species.mutant_bodyparts) - dat += "Legs: [features["legs"]]
    " - if("taur" in pref_species.mutant_bodyparts) - dat += "Taur: [features["taur"]]
    " - if("wings" in pref_species.mutant_bodyparts && GLOB.r_wings_list.len >1) - dat += "Wings: [features["wings"]]
    " - if("xenohead" in pref_species.mutant_bodyparts) - dat += "Caste: [features["xenohead"]]
    " - if("xenotail" in pref_species.mutant_bodyparts) - dat += "Tail: [features["xenotail"]]
    " - if("xenodorsal" in pref_species.mutant_bodyparts) - dat += "Dorsal Tubes: [features["xenodorsal"]]
    " + if(HAIR in pref_species.species_traits) + dat += "Hair Style: [hair_style]
    " + dat += "Hair Color:     Change
    " + dat += "Facial Hair Style: [facial_hair_style]
    " + dat += "Facial Hair Color:     Change
    " + if(EYECOLOR in pref_species.species_traits) + dat += "Eye Color:     Change
    " + if("tail_lizard" in pref_species.mutant_bodyparts) + dat += "Tail: [features["tail_lizard"]]
    " + else if("mam_tail" in pref_species.mutant_bodyparts) + dat += "Tail: [features["mam_tail"]]
    " + else if("tail_human" in pref_species.mutant_bodyparts) + dat += "Tail: [features["tail_human"]]
    " + if("snout" in pref_species.mutant_bodyparts) + dat += "Snout: [features["snout"]]
    " + if("horns" in pref_species.mutant_bodyparts) + dat += "Snout: [features["horns"]]
    " + if("frills" in pref_species.mutant_bodyparts) + dat += "Frills: [features["frills"]]
    " + if("spines" in pref_species.mutant_bodyparts) + dat += "Spines: [features["spines"]]
    " + if("body_markings" in pref_species.mutant_bodyparts) + dat += "Body Markings: [features["body_markings"]]
    " + else if("mam_body_markings" in pref_species.mutant_bodyparts) + dat += "Body Markings: [features["mam_body_markings"]]
    " + if("mam_ears" in pref_species.mutant_bodyparts) + dat += "Ears: [features["mam_ears"]]
    " + else if("ears" in pref_species.mutant_bodyparts) + dat += "Ears: [features["ears"]]
    " + if("legs" in pref_species.mutant_bodyparts) + dat += "Legs: [features["legs"]]
    " + if("taur" in pref_species.mutant_bodyparts) + dat += "Taur: [features["taur"]]
    " + if("wings" in pref_species.mutant_bodyparts && GLOB.r_wings_list.len >1) + dat += "Wings: [features["wings"]]
    " + if("xenohead" in pref_species.mutant_bodyparts) + dat += "Caste: [features["xenohead"]]
    " + if("xenotail" in pref_species.mutant_bodyparts) + dat += "Tail: [features["xenotail"]]
    " + if("xenodorsal" in pref_species.mutant_bodyparts) + dat += "Dorsal Tubes: [features["xenodorsal"]]
    " - dat += "
      -
    1. Acquire body
    2. -
    3. Strip body
    4. -
    5. Put body in cloning machine
    6. -
    7. Scan body
    8. -
    9. Clone body
    10. -
    11. Get clean Structurel Enzymes for the body
    12. -
    13. Put body in morgue
    14. -
    15. Await cloned body
    16. -
    17. Use the clean SW injector
    18. -
    19. Give person clothes back
    20. -
    21. Send person on their way
    22. -
    " - if(CONFIG_GET(flag/join_with_mutant_race)) - dat += "Species:
    [pref_species.name]
    " - else - dat += "Species: Human
    " + dat += "Species:
    [pref_species.name]
    " dat += "Underwear:
    [underwear]
    " dat += "Undershirt:
    [undershirt]
    " @@ -337,79 +334,79 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
    " + dat += "" - dat += "

    Mutant Color

    " + dat += "

    Mutant Color

    " - dat += "    Change
    " + dat += "    Change
    " - dat += "
    " + if("tail_lizard" in pref_species.mutant_bodyparts) + dat += "" - dat += "

    Tail

    " + dat += "

    Tail

    " - dat += "[features["tail_lizard"]]
    " + dat += "[features["tail_lizard"]]
    " - dat += "
    " + if("snout" in pref_species.mutant_bodyparts) + dat += "" - dat += "

    Snout

    " + dat += "

    Snout

    " - dat += "[features["snout"]]
    " + dat += "[features["snout"]]
    " - dat += "
    " + if("horns" in pref_species.mutant_bodyparts) + dat += "" - dat += "

    Horns

    " + dat += "

    Horns

    " - dat += "[features["horns"]]
    " + dat += "[features["horns"]]
    " - dat += "
    " + if("frills" in pref_species.mutant_bodyparts) + dat += "" - dat += "

    Frills

    " + dat += "

    Frills

    " - dat += "[features["frills"]]
    " + dat += "[features["frills"]]
    " - dat += "
    " + if("spines" in pref_species.mutant_bodyparts) + dat += "" - dat += "

    Spines

    " + dat += "

    Spines

    " - dat += "[features["spines"]]
    " + dat += "[features["spines"]]
    " - dat += "
    " + if("body_markings" in pref_species.mutant_bodyparts) + dat += "" - dat += "

    Body Markings

    " + dat += "

    Body Markings

    " - dat += "[features["body_markings"]]
    " + dat += "[features["body_markings"]]
    " - dat += "
    " + dat += "" - dat += "

    Legs

    " + dat += "

    Legs

    " - dat += "[features["legs"]]
    " + dat += "[features["legs"]]
    " + + dat += "
    " + dat += "" dat += "

    Clothing & Equipment

    " From 95023664dd344a8af62cb837c6e113747cfb054f Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 29 Oct 2017 01:53:35 -0500 Subject: [PATCH 47/48] Update preferences.dm --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 87c62a2069..81de594742 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -626,7 +626,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("xenodorsal" in pref_species.mutant_bodyparts) dat += "Dorsal Tubes: [features["xenodorsal"]]
    " - dat += "
    " + dat += "" dat += "

    Clothing & Equipment

    " From a595bee5af56273f9f7e272e5b3deaa1d7d9b988 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 29 Oct 2017 01:58:33 -0500 Subject: [PATCH 48/48] Update preferences.dm --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 81de594742..aa4a1b19ca 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -626,7 +626,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("xenodorsal" in pref_species.mutant_bodyparts) dat += "Dorsal Tubes: [features["xenodorsal"]]
    " - dat += "
    " + dat += "" dat += "

    Clothing & Equipment

    "