From 251ac24e02de6d13973ecef5ac7818ecc69f8217 Mon Sep 17 00:00:00 2001 From: Fermi Date: Sun, 11 Aug 2019 00:35:36 +0100 Subject: [PATCH 01/79] [NEED TO TEST] {Preview} Fixes Neurotoxin and adjusts it's reaction. --- .../food_and_drinks/recipes/drinks_recipes.dm | 25 ++++++++++++++++++- .../chemistry/reagents/alcohol_reagents.dm | 18 +++++++++++++ .../reagents/chemistry/recipes/fermi.dm | 6 ++--- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 7c44857b1d..b97b919e1e 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -381,6 +381,29 @@ id = "neurotoxin" results = list("neurotoxin" = 2) required_reagents = list("gargleblaster" = 1, "morphine" = 1) + //FermiChem vars: Easy to make, but hard to make potent + OptimalTempMin = 200 // Lower area of bell curve for determining heat based rate reactions + OptimalTempMax = 950 // Upper end for above + ExplodeTemp = 999 //Temperature at which reaction explodes + OptimalpHMin = 2 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase) + OptimalpHMax = 2.8 // Higest value for above + ReactpHLim = 5 // How far out pH wil react, giving impurity place (Exponential phase) + CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst) + CurveSharpT = 2 // How sharp the temperature exponential curve is (to the power of value) + CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value) + ThermicConstant = 10 //Temperature change per 1u produced + HIonRelease = 0.02 //pH change per 1u reaction + RateUpLim = 5 //Optimal/max rate possible if all conditions are perfect + FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics + FermiExplode = FALSE //If the chemical explodes in a special way + PurityMin = 0 //The minimum purity something has to be above, otherwise it explodes. + +/datum/chemical_reaction/neurotoxin/FermiFinish(datum/reagents/holder, var/atom/my_atom) + var/datum/reagent/consumable/ethanol/neurotoxin/Nt = locate(/datum/reagent/consumable/ethanol/neurotoxin) in my_atom.reagents.reagent_list + var/cached_volume = Nt.volume + if(Nt.purity < 0.5) + holder.remove_reagent(src.id, cached_volume) + holder.add_reagent("neuroweak", cached_volume) /datum/chemical_reaction/snowwhite name = "Snow White" @@ -794,4 +817,4 @@ name = "Red Queen" id = "red_queen" results = list("red_queen" = 10) - required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1) \ No newline at end of file + required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 79b6f96781..0817d04cb8 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1373,6 +1373,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/neurotoxin name = "Neurotoxin" + id = "neurotoxin" description = "A strong neurotoxin that puts the subject into a death-like state." color = "#2E2E61" // rgb: 46, 46, 97 boozepwr = 50 @@ -1382,6 +1383,9 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "neurotoxinglass" glass_name = "Neurotoxin" glass_desc = "A drink that is guaranteed to knock you silly." + ImpureChem = "neuroweak" + InverseChemVal = 0 //Clear conversion + InverseChem = "neuroweak" /datum/reagent/consumable/ethanol/neurotoxin/proc/pickt() return (pick(TRAIT_PARALYSIS_L_ARM,TRAIT_PARALYSIS_R_ARM,TRAIT_PARALYSIS_R_LEG,TRAIT_PARALYSIS_L_LEG)) @@ -1417,6 +1421,20 @@ All effects don't start immediately, but rather get worse over time; the rate is M.adjustStaminaLoss(10) ..() +/datum/reagent/consumable/ethanol/neuroweak + name = "Neuroalcohol" + id = "neuroweak" + description = "A mostly safe alcoholic drink for the true daredevils. Do not mix with Neurotoxin." + boozepwr = 60 + +/datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M) + if(holder.has_reagent("neurotoxin")) + M.adjustBrainLoss(0.5*REM, 150) + else + M.adjustBrainLoss(-0.5*REM, 150) + M.dizziness +=2 + ..() + /datum/reagent/consumable/ethanol/hippies_delight name = "Hippie's Delight" id = "hippiesdelight" diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 078e1c8a71..bd327809eb 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -2,15 +2,15 @@ mix_sound = 'sound/effects/bubbles.ogg' //Called for every reaction step -/datum/chemical_reaction/fermi/proc/FermiCreate(holder) +/datum/chemical_reaction/proc/FermiCreate(holder) return //Called when reaction STOP_PROCESSING -/datum/chemical_reaction/fermi/proc/FermiFinish(datum/reagents/holder) +/datum/chemical_reaction/proc/FermiFinish(datum/reagents/holder) return //Called when temperature is above a certain threshold, or if purity is too low. -/datum/chemical_reaction/fermi/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE) +/datum/chemical_reaction/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE) if (Exploding == TRUE) return From 0f4469e59fde4832090e784bfbf81c7c1dd15f63 Mon Sep 17 00:00:00 2001 From: Fermi Date: Mon, 12 Aug 2019 01:03:35 +0100 Subject: [PATCH 02/79] Re-enables fermiexplosions in grenades. --- code/modules/reagents/chemistry/holder.dm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 300e73a6fd..e9eb00a180 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -495,7 +495,12 @@ //Standard reaction mechanics: else if (C.FermiChem == TRUE)//Just to make sure - return 0 + if (chem_temp > C.ExplodeTemp) //To allow fermigrenades + var/datum/chemical_reaction/fermi/Ferm = selected_reaction + fermiIsReacting = FALSE + SSblackbox.record_feedback("tally", "fermi_chem", 1, ("[Ferm] explosion")) + Ferm.FermiExplode(src, my_atom, volume = total_volume, temp = chem_temp, pH = pH) + return 0 for(var/B in cached_required_reagents) // multiplier = min(multiplier, round((get_reagent_amount(B) / cached_required_reagents[B]), 0.01)) @@ -693,7 +698,7 @@ //Make sure things are limited. pH = CLAMP(pH, 0, 14) - + //return said amount to compare for next step. return (reactedVol) From 10ca106f065d77e2552bfa10c810db5c34ad654a Mon Sep 17 00:00:00 2001 From: Fermi Date: Mon, 12 Aug 2019 01:36:21 +0100 Subject: [PATCH 03/79] [TO TEST] Adds nuance to hatmium and SDGF explosions. --- .../reagents/chemistry/recipes/fermi.dm | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 078e1c8a71..c6e3c801ea 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -137,12 +137,14 @@ /datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma! var/turf/T = get_turf(my_atom) - var/mob/living/simple_animal/slime/S = new(T,"green") - S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) - S.name = "Living teratoma" - S.real_name = "Living teratoma" - S.rabid = 1//Make them an angery boi - S.color = "#810010" + var/amount_to_spawn = round((volume/30), 1) + for(var/i in 1 to amount_to_spawn) + var/mob/living/simple_animal/slime/S = new(T,"green") + S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + S.name = "Living teratoma" + S.real_name = "Living teratoma" + S.rabid = 1//Make them an angery boi + S.color = "#810010" my_atom.reagents.clear_reagents() var/list/seen = viewers(8, get_turf(my_atom)) for(var/mob/M in seen) @@ -353,11 +355,13 @@ PurityMin = 0.5 /datum/chemical_reaction/fermi/hatmium/FermiExplode(src, var/atom/my_atom, volume, temp, pH) - var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom)) - hat.animate_atom_living() + var/amount_to_spawn = round((volume/30), 1) + for(var/i in 1 to amount_to_spawn) + var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom)) + hat.animate_atom_living() var/list/seen = viewers(8, get_turf(my_atom)) for(var/mob/M in seen) - to_chat(M, "The makes an off sounding pop, as a hat suddenly climbs out of the beaker!") + to_chat(M, "The [src] makes an off sounding pop, as a hat suddenly climbs out of it!") my_atom.reagents.clear_reagents() /datum/chemical_reaction/fermi/furranium From 75440a48c50f9eb4a3e9b9cefa243d9c1ceab377 Mon Sep 17 00:00:00 2001 From: Fermi Date: Mon, 12 Aug 2019 01:36:46 +0100 Subject: [PATCH 04/79] 30 might be too much --- .../code/modules/reagents/chemistry/recipes/fermi.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index c6e3c801ea..6625207a71 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -137,7 +137,7 @@ /datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma! var/turf/T = get_turf(my_atom) - var/amount_to_spawn = round((volume/30), 1) + var/amount_to_spawn = round((volume/50), 1) for(var/i in 1 to amount_to_spawn) var/mob/living/simple_animal/slime/S = new(T,"green") S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) @@ -355,7 +355,7 @@ PurityMin = 0.5 /datum/chemical_reaction/fermi/hatmium/FermiExplode(src, var/atom/my_atom, volume, temp, pH) - var/amount_to_spawn = round((volume/30), 1) + var/amount_to_spawn = round((volume/50), 1) for(var/i in 1 to amount_to_spawn) var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom)) hat.animate_atom_living() From 08bba425e41a2d8a09981fd0ee3693615f3c0ad5 Mon Sep 17 00:00:00 2001 From: Sishen Date: Mon, 12 Aug 2019 19:42:58 -0400 Subject: [PATCH 05/79] run in a straight line to win gamemode lol --- code/game/mecha/combat/gygax.dm | 3 +++ code/modules/mob/living/carbon/human/human_defense.dm | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 95137938d0..98330fae88 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -6,6 +6,7 @@ dir_in = 1 //Facing North. max_integrity = 250 deflect_chance = 5 + force = 20 armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_temperature = 25000 infra_luminosity = 6 @@ -13,6 +14,7 @@ internal_damage_threshold = 35 max_equip = 3 step_energy_drain = 3 + leg_overload_coeff = 300 /obj/mecha/combat/gygax/dark desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications." @@ -20,6 +22,7 @@ icon_state = "darkgygax" max_integrity = 300 deflect_chance = 15 + force = 25 armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_temperature = 35000 leg_overload_coeff = 100 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index ff4878aa13..5af295a5dd 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -348,10 +348,15 @@ if(temp) var/update = 0 var/dmg = rand(M.force/2, M.force) + var/atom/throw_target = get_edge_target_turf(src, M.dir) switch(M.damtype) if("brute") - if(M.force > 20) - Unconscious(20) + if(M.force > 35) // durand and other heavy mechas + Knockdown(50) + src.throw_at(throw_target, rand(1,5), 7) + else if(M.force >= 20 && !IsKnockdown()) // lightweight mechas like gygax + Knockdown(30) + src.throw_at(throw_target, rand(1,3), 7) update |= temp.receive_damage(dmg, 0) playsound(src, 'sound/weapons/punch4.ogg', 50, 1) if("fire") From 419ea7f58c04dceb8e75dcc19e294a009f563232 Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Tue, 27 Aug 2019 12:41:47 -0400 Subject: [PATCH 06/79] Fancy_part1 --- code/game/objects/items/tools/crowbar.dm | 2 +- code/game/objects/items/tools/screwdriver.dm | 2 +- code/game/objects/items/tools/weldingtool.dm | 2 +- code/game/objects/items/tools/wirecutters.dm | 4 ++-- code/game/objects/items/tools/wrench.dm | 2 +- icons/obj/clothing/belt_overlays.dmi | Bin 4840 -> 5402 bytes icons/obj/tools.dmi | Bin 23306 -> 26057 bytes modular_citadel/icons/obj/tools.dmi | Bin 16853 -> 18597 bytes 8 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 70bfebb799..f891a48df6 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -31,7 +31,7 @@ name = "brass crowbar" desc = "A brass crowbar. It feels faintly warm to the touch." resistance_flags = FIRE_PROOF | ACID_PROOF - icon_state = "crowbar_brass" + icon_state = "crowbar_clock" toolspeed = 0.5 /obj/item/crowbar/bronze diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 68946f73cd..6cbede78a8 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -81,7 +81,7 @@ name = "brass screwdriver" desc = "A screwdriver made of brass. The handle feels freezing cold." resistance_flags = FIRE_PROOF | ACID_PROOF - icon_state = "screwdriver_brass" + icon_state = "screwdriver_clock" item_state = "screwdriver_brass" toolspeed = 0.5 random_color = FALSE diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 9b622a14c4..fb38e4335e 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -360,7 +360,7 @@ name = "brass welding tool" desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." resistance_flags = FIRE_PROOF | ACID_PROOF - icon_state = "brasswelder" + icon_state = "clockwelder" item_state = "brasswelder" /obj/item/weldingtool/bronze diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 527891afdb..e40ae8bdc1 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -63,9 +63,9 @@ /obj/item/wirecutters/brass name = "brass wirecutters" - desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch." + desc = "A pair of eloquent wirecutters made of brass. The handle feels freezing cold to the touch." resistance_flags = FIRE_PROOF | ACID_PROOF - icon_state = "cutters_brass" + icon_state = "cutters_clock" random_color = FALSE toolspeed = 0.5 diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 8ff960825a..462eb22aaa 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -32,7 +32,7 @@ name = "brass wrench" desc = "A brass wrench. It's faintly warm to the touch." resistance_flags = FIRE_PROOF | ACID_PROOF - icon_state = "wrench_brass" + icon_state = "wrench_clock" toolspeed = 0.5 /obj/item/wrench/bronze diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi index 717937c0340ca2f25f7358e58b694d008c93838a..da8ff0a20bd6c93dbbb17545017ddf5de03911ab 100644 GIT binary patch literal 5402 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 f8@CtDDIg_{bR$R$NJxW(bVzsi-e>WB z-`~0Cz4v$S=l6%i+N`TjguFbWn&XR#4^beb@4c^ zTHMtLWsLt*|J+EBjM8jRuVtd*Qfug1*ZGR+UErNZ0BP7)t23J!tyfX4Gj|3rqrP|= zMYbAL=E~a@vCOT+I=pe{Hl083vG4L3lOYzZCbO%%8mQsvI%Ioc!XfS6fcArZ)-A;Q zu5g9b(AH}G_1;fb_*1Fz--|VTU&`g{(F@WQH!I@y0{F9EWw_wFp#xq)_i!_?x7${Cs)0JyH@u2**8Tn+F9IUag+Hg*j!j znZ)(<$ZHXdws~Fw-*8(d2aGV^X^NSa>T)tjeCvSD^tX=v_P)h8%o4X=wIbY;#b}D_ z`k#}Aojv^<1Jazwo>( z;#F|>pgM)Rs>!k|$33sF^)7nO>p$I`zqrQ3#sY_D6LvZ!KQ2WrZz#4=yx!}kDbQ34 zvCT=_>FyD>-%*9Axp1~MhVJg7FXe~L;bG5Rzf!OeP4vQ7Tx7H9E%2nXd$_#8#C#2FanM)8}+BDNPBr)KJJSrP5X)SV zKHsX<5qXvLtiaA=+>r^n=E-YQF$ucvm2L8Sj1o>818%8|833RMl;os!d^7ek{f%|r zzn3 zPS&w`Su9&0i55;q!u6O0RpI>#>*eNUuPgrB3S1$<&xg0?Y16`+!Xv_2o2jX%_Y#+k z2?Oi&m_hV=vFcOmfHWbh1x+6kA*%Gu^S{8uWfFG)RhrNnTNntU#}o~r2LD7rK}Uxq zDl*b?N?k!gA>W03tECg;TKK+493DI+rz z38=2FegcHY#Mm@l2!|2T(YYiqvAtrl`T>-zyT`XdJhr~&x9c-m0bK2PHzG70;JACW zK844E>Bl=SH>T_5*cLJ90?d{8i?auLL9Ghjv!OjY+h$jlAi*;m*btqf(UXY>y?%3~TQ{4e65g0u$)y741 zGRi0)oSN5kp$|SfLIf;t>_pZ?VzZE7D?WWBp{{3&7Xv@^13D`8DUg{V3p<>Fi?gT~ z&;)}<5oABk!1p;OZ&%$UI~;1>(8{RYlbJz@&m&%wP7|o$b+245)xU%9>zWyF;D*>z z-$dV2y!R+&FLdFksmXuw^fBPg@bu|prS~4}X(?qdo*R8`!jWQ4*w~ql0gXJCni@`k z?~Jda(aVsk%1--s52;8vbZ5u@@87@X5DNx6QUZE%CpHEj&*%e`qKX&j**x%hJ=?p| zk`m2V86jqsJa_MOCp{bdlA>v1XqI-oTTZMeyCmOE;2Xa{AUAtAAKxTP6+y4=eadqm zzB)ZYTojqzmZFg4y7^v&(Yc-u3Q_xxEacu4ZoqVY$&ey5;P@~+MV0DwQ>?`|D1&59 z^vVDX3~|n>Z#8eb>+HgnH8v$XDPcz_MbS_T3kJkWXChjb!FOZ19y39FLxyu*5k`?_ zUu57HE9(`d)Z+e};juHBfLZ%H2dcKS8&=;%q`)j;VvKgpqz*Fn=WFLfF`{i>h5 zJ}hj*hIqvX4`9=;L<>pnh(!i7CHs-#iSJAU+IHMlJB zL>&v}yC^AUos}1B*b>vy4vV6(uBW57;sd}Z9tvW?`b>7yx^N_^i0rQQHtguKsvY8Aa1dQ83c`!y#FD^n=nLac$2sR2M zcXv&!vSbr}H}-tj0r;A=Vppc}G9>kn)+!L-QVJ1%K*#S+_!-rY1wKG8C@5%oZ!a1Q zU27YgCnCHPvr0RJnC>2k<|f`VrRxTt`&@%JG83S({uWUL^19$sE8 z6O)gs?^i|~?NjMz)k~+4o05}4YHE0l2YzYeXcW+aFv6Rdn%b`c;3N#l^L1UWjD5iv zMV_vySzcLrAI+vu|0se`MiN^atOB1}6VLsP2c-!{eeH33^ z9RPZYCd244bHyiinCQVzRo1{+gQ4NToY!UX3577`@@;fZOU-z|^Cy@=wlY`FK<8QA z7C_2r*o}@)i3+fAa)v3&4Z%^R4e$%J`!(Rd>ih`HdA`wN_zZ;0qMYk@iiRkCp5SMLYJkVqe5x`6 z92OOR4+L2`6n@RKaOKy;w_xU?fCkZr$Gq3Vhk>xWnW&|{XTR808#-@@zxREteloC-Hi1J&p5eCzAQ9!|^wmZkm7VDHaeUyGdn%C4snJ(y3 zNGT@@OM_u{4zEN*WjZ~i`ecBPI@1XT(kL$xbdHQUvPBHd@&!prd+`Ckle!%_R(dFB z1a%PJI4efn^TcX%VAB12-)knTV_;)oJ-1bjGbGDp;}T_eqV7|hgqq4Waj-C9)KA4m z2#LF20;VD|&}Tiuow}E8NS(vG9P^#af;|VE$>c9;`uf+hOaqoutbb3wzsn*jR_)Z*@hd11$(%DtHZh)>Zz&ggHaMs$AnC^mvwk|#P$rP`@hF5X zjUSNmzlT&C3{u^7cFF)SFc8{DazxBJ=t?tiEF3h6<7lb{`98^qApZzQCd7W40qBi1 zG)e>^<%d1-^bk@pg@ogNNLo=oo+yN1EQ{8=X8+lGYh#mJRi!yF<3Nkjks}*+HH&J| ztclk#Oqkq3gkAa@Xrxp;zoX}Y3rPJd0yolq8pm5}YkBE5KM;L?)We!#nTBHfnU6*e|O zyG1Q1*+7SewDg@{E<~Ci$Tj)Vnh|cQYHcdS90!8VnHZqkEIIZCbg3EKF*d6!oA4PY zBe^t-`p0i(mNjFazM)Y6{w{%-i#OEfT>F(q@58pI)4zLzn|QXBX_j;KmYQ%J|t)G&MCJTOe(YSjy>>-F*-b%8%p` zlaP87?FuiOt@k;cmrkg`m56K(m}&A6tX0U!Jl@zH)AK^b$k+a+i5;AOpsg08EQG(! z$E6~Sq)t~1Xv@+s@Wej*8DR6tTT_z|#NKPjcjK7B!F3x|b_*pim;|~G^?7qxSYY`I z1cA3v4U#qfXRue&NSa#FOO++cSx9Qr#>!4#oGF3jZ|3>GLIw5bp?7REdNIIEinzwFP)fAhtI#_b65nut7aL`2Gt1rAqysE?^_19!yS-o4tk078s8nDp|eMRGW*#2ik)B@L&{TZD}?JG zsx=7`uhA&bV@gU(%QJC1RUa@x24{t5Os@AI0w$uxnnWmqBpdaEXrFio{IHY77TvY? z1BeXLTXG)ApTT?akoL_-#X!>LnfslbngS7n@oxrq1CIXR(z@VGnFmbjRA=}PB#L$i zY94DdiPFCT=o4wodHx`MxGn4pyJSz*OEUkQB~PwCWr7DA+G z)LZ#)5ZJGa3Z9F>e+=H>$dc|13i{l2;n+;|%Cs)sSLkFn;@u?o=s9#;VDp0}$!qf!CrB`ruISoOOFkFE$SvDYv4QoM^Iwe` zoErnKdC&=HqX$wrQ2?k0;Hwe4!T{ObF^atI@6SDZ*d1zYdWz2%Wx8kaVsss*I&X8s_)J57B3ftsaP&s5H`pHN zmbGwNlf6M5^9G@Vef3|YB6CyQD>NZcVVqfn1I&$DU5P(|KvO?lZr1(JR1Xz8Q8aC3{o;F zCaYp#?lBd9u8g44(sHq=fOA)7S+p$;N$i`0^cWZz~_8$Ezqc-knw0uEh=IOE%b5>w5Lo_ zzoAiBT2xe0vS6n;8Ou}P1;V4Etbi)({zn0)LxN0WSv4m{7qfCnuW9)$x#-{yh8`{> z%-6MPtF+d@=$j7e-}A{0O0mg7^tewl46O0iWWaSb2-eip%p_`*FwK2$YC2hY{P^*^ z%HzvR1$A}&z?*GmRCIKS-!6RTYQi2Tv{(S4u;)tGYe>?fgGlp*oa|4U-=u}+s?)Ur zjVUQ9hGG$NLA2uU%+I#Q0x0_*a#6mqUz7lBgAyk9#LpI^+!V$3U|~!brKss0p_B(6 zy~RSf-frRpZz43;fB^r_Thsmn#r~5|{X3@}LS+iaAFg>b@H;tdrVS#h#=;1IJ|@C4 zCGc))imcG8^Xk~pVncnz=#;5s9pRF7uc+RO4myrpm~6_JsMk&1&*-Z9bN&gf^JOIE z$S5R$_RE*8ldU`(wTD}3UMD`aw@`>->%*F%{|n$&xvt2xk<>a&bATvUUQWl`d`(kp zB$3h(6*g`7azyX!ynvBSlnNjuCp4crbM0y0GNp+;{EZBV`HTE0ZDtfkq6$uf8Jcg6 z=J?)hf2{_G>uF80TWW)l-Vz%bK|i&N-Vk_54?0r364MOXzn&Gye9w@Fp`oElF1c7X zL^m}h_z7R#<4?_-XqDLFF+TYAb;&wTQ2Ovl+S4E4e0kiFzoC3Y=IN*~X_mV@Sm+{< zyn}&k`fPgw!|0o%w47Y9{FHISH+b^MdhXesvT?H})=!j<=^>8a&ahZYer(=C4Fx5o2;H-{s#!68eTucaC{k6iI3xreh;5|F!0uNIT1NUV-ViIU zo-H>ut|>0~1{fJ#M|CnE z%6EiUT)msHjN-$1hAxrgz4vD#VhQ^rqEfg3&bZn z;-3AaLxEJ|!woQ?FOoxwlQRk_VFEa09M&1f>&mOc!^4=En6S!Nf|p^TPnei`95btL z&X}X=2*5K*Y;`YM-2dXUTGs9nBv8sj4bb$$^uO@z46nA7L+q#NiheM%IvXrlN;q!N z5h*(sC!gCp<&vumNV&efe5pRnUbb+-)P$7#5r?cQ*2;giiy%_-_gm6;7uykW-0!#0 z!w*oR=L)|Jb@E!x!o4{v&^vM}(dp%mfpFgvQK%TaQo*qeT?zt-jPkWLd+$GDH~JR+ z=Iz_A>0XS@gv9G%0}pZw$jw*vtRB#zu6#Gfr}^L@1VmZd49tKw@%{GJCqGl`B=g6V zE3)-n`h*2RkEHipy8Y#_I-9~fXS@nFdf&#y*`ULvUD%bIi}L-SS5#ouV~8~UUclncw=wD`i!STX zB6WVTB=~CpAr%hbYquG@1-&Gz6~Mq+d5I}5`c1T@Ni=uMG*dqPL*JF)*StJ(C{P4{ zmgW}Pv}*VymnUp>ae=BaF)dWO!I)_85|hs7T*0Ht?^qfxq`K1`OJX0PpLdu&(@J+X z`2zRH{pI7J_?B-XbcOtJD7Mdth=?427ik@xA6G{bhlhuogTWH^ct5D@;CPxM0)z>tJTt2`IU@e4ymAMIdz0m zy}|t$HNYAcpQ%@|`%NTbcB13(aG^C%7r&!_OxgjE^RGk$ACB_vFX{zn8m83b)8AT| z00m;h)01zFfG_qMn%9Eyq_DCxWL^b;Sp>>f9d7CQQV;1xac0nU2nSCm`yYFtomGQt zR5dx(DxDajKwv?SmQ(6JA7Kyx9TB{jv-QOE7^5#8e`2`~NlW#5{^Mz5L?0!y-GLv0 zvF4I&ogUEFdEN)jP?t_N4JTA!{<|N>>uDVBZxbWFPT$FZB$SyZ4PBJwG#?>%cjq6q zXHB#B&U~ILmqtb?zS|n&E7MD8-=|r%JS*{;hv#LlO_&4a)ck`tkm}+gw-*tC_viY5 z*EjQYii4XC%BHv-vFN7seJzf`X0TIs7?KZlzx&`gSis^v)k zW9CWF%-o3W@B9D^$8KpwJ&^R^@7oobSswrfhA1WlarhU=yWA#KeqwRa@(e*ZxT2!^ zeH7NU!^0&i5TULlf-Nrt3H>jmj>5;lZ?;|{vDEtXmudFu9|)aQA^so%B#0=VL|rs! zo!vV{4gOrpWRBC5HQ_T~9~Ir68r>fE=Wx(QT=pdZ9OM@suZ&!LLw^#_UwV6c55BoMVE z91UEnex9lAqdN9q8ObiqZdZjKZ+^ZXc0>n~N*`6Z&#cXOulUsOk8PT1Q&G+~cszz} z6w+AK4&R}vP>^lzn>5q0-giFJ7Qz@^{3t1f-(fwIMqE@;@vR8nC4#g>lHzD+Qy`r}bzW%u_+}tE;+xCT zu(r1L3q9hh!nP_VP4IBzZ3uXF^JGI~Z)S3w)B$-aFt(!p{5zjPDZ0$z@g$xgma4~b zLyRWM=y#It%Oz;#ucL56iM{DMoj^qD+b`TkJ#Tm@)^J;lKA2Ccyyqp~(vHbG-SJc4 z9-c<3SFggl*q>vL1cREKAA2B~oft_B10^ zHQe?}qgv=MwuyGs>dJJKlV3Y4yBjcbIx>k2qoyPc4IhQ8bD#IOba1EmgsZ-IM!z*t z_rHpZ^hU@IyB_>V!&j1$*?$-ahh_|yP;&66FP5O6ah5p8wUiMs3VXn%<+w){!Y%*o zS%95nW!ZOh&8gST=p8G&h3~9l*^|t#5`C2+o&%_Cvh^BxTYW<^uJR?z)!cHa{u-Ow_-r;I!!6r7ps@f_1=eWvMKtNqb6USVpBg%bp<)xNSk#h0@6r1KA?%6+>u9;4&`Ygv5J zfZoc9zjJDe88e8BOhAV`t>8|?S8|g z@;Q~DGs$c1tSYs(#k$WSO1h=}J!a%sKsaSG@+Pw-`w3No#I}*ll8rqeBP*tSMl6$y z|Ad>HNM65!o{x_tA|e8S^>CNi)*>W`vf7XHX7v(BmhOnmrOJzV1)Pwky0pxeiiuwie!&6^cuddd@Dr~X_D^kXuo$Io@?EeXQNpn1nh;z-fF6UcpLmkz z=wi;L_D}6wMn*=I6i&034Vwa8)6--Zo1_VNfGlW^#Gp)5CxvA}r1|wp3_t$IX&@Y_hk8L9Abc|mK->bYXAqzUg zQSA=@!&~j==CNJ&jCRA~8Dw0rp-rB;V+~OoFHT#;Q?pwG`&q+PxQ!b8>C-3rl`XA* zwYKIRc-nwb1N8Fy9v*W<7Id^Jmh0f2C%dkO7lvN$%dGK5M>Ozg`Mvx(mY4CfN1o@d z3er>jA1pTL->o-;>qIC)GeCeHcFw*E1R|#Ap2+gUK2ixr z2CGTo^&2e{Qhr!nwFEk@j@RN-lhCA~Sa<83b?wm_Z<$srwCl~Z@dNxy)ZdEUEj0UF z-$zH|MnAd-S1%*4s)~Dxs`*?)<{1$Go=f&}d!e~u_~@BRGWq$!?d@gHP9+RWsU$Fq z%JLv7jnjhi!m4{ORq^%?2bEsyP+a0J8?%!A(mrxdml}MW=;A}ZUR?pP_ zSf}*agLc&Sj?S(G?=gvB*!hv82x+nM(h_{?o4UEjZUe>>M#gLE!#}mXj(*`05f=S! zo4-3v=Xr3#tYYeRB$_Jx+y-9c(R6@_e0_%=Oa8IQ;`x?XAoHrF&su*qBR9LNvJ7*#txtU4?tEdBlO!`da6P`kBEwIe}qqzgH4n!0vN zo)Q;UI9eq=_vjHp$@Y^&za+fS{UQxA&&Y+_;-7PO%ptR~ef!N91YH|HF}S^k6r65o zaJT&>F91N(_fjirmmuSBs2j8e1Gu_wUpNjBv^l=R$vJF4Uuqu`1@MQI3?AY+jDW63 z>~iU<>dZ9$p=uQw6~(=9DMIHQnb7d;9E_DegQ>ieop#p2 zm1OgFUQK7;{1yPb&N0;*M_HNa`R>5T+6e1Fmh$%g_U9}FG+T<+reZsk;KxGKX>XG~ zwy~3x0h?{H0AcHiN#P5Q<=D4pPEz0@t#6#mW&NA$jLjs3K$4{s@7O?0@YpK95IHhI zKR(ezWe5`}!QkdD{-#UNUVZZ>mf&Z*q)6~@9r{2YA#LqQ_Cn}MyYP|U_~Vff6W#T8 zTObCyS!NSFmbd`=1(26FsJ29N$$lp2^2G0@nen}5%uC=L*g?&jEz~$s z#FBZ#V-rmj0}hw5BI&k@3M_-CnxWfZL1onEh}lr_r>NvKf^=aiduZ7_JH^FKm7AUC znPiVZD{O#dNLa166N3ogxPOO)m$VMR&gwk+`mr1$eenH#4hc>CELdedPqQq~^&hcB z;c(Tz+1A@deE$4?voIP3ur?j4DuPd%HLt2#Jo`1E^FdTSqo^~>Y|(D)ZsHPgv;=K- z18&F#|6mDEJLqCugS8tZfO-hU{5?ZT;rN3AO7+{{Ye?Sf>>8`7;T_C>M*-_TJ86`6 z_lHmy2@2X6Bp|_)Twehoe!~+=f|g7t5)7uNHbr<@yzm=bNgy~lcsYd3lq*UCcyVoA z_p*`1-l{;-7XUpG&Tea6)Yg9u~|6F4zuv{AaZn&&Aa45DmA7k2oHn$wCsq8!b!& zd;Z|msj33BowPP9A#lhIs6RqRKH94tIaxWdW7bMe!E4C3Qheu^n5H+X?{Bd7!T!wE zLwY;?5CsS&psT2*W8mRQQ2We7UrzcI`jE*NYTJ4J%1>lN+Ljb7;=Y=W@ zdk+yZ=8?@?>^oLgBHm-nL)7E|9!j^$jJ3?ZWOk$3dHjL>ubWc@>ue}z>A(RXUZM!4n>O7dyh&u%825Kx|CI#5UVT+xnXTWb zK7zk}#2|jetFBHJ(c6Aa=1^8FE9=Eh>9C`z_bMuM$MDnN-#I1QX{VbbR#!(WhR@s% ze8J+C<4l!BE||{SI<<=iQiFU+AgYZaI5bOi16LFXAZa2~sfd1Q{3@)f3Y|W`yoU}@ ze-2pz-Bl%*tmAST=W1IOTMz1mlb+MD6T4x4y85%MJTm}PoJ@_oT;c;;Lh9yVNsPVc zJ6OZ7FmpLDzc9PyG+&llUVvay32Cyy$Jq1%V0zPRT7>y2XjD8(K1|>UEOv337-1+V z)Nb#})Sit92YGDjghH`?r-wFb2hOu8{7(Dm$Ra0FZb?1wr zMvv0Qw)$M+kAdKy3VN5Y+Oz^#QmC&dQ3Oc={=N6T1Z-2VPkx-EL`%r{bbzds7j^&W zezqmJmjBFUzA@+cdj!Z~mN!09k&Al2=!v0;+MTYBqV7ef|T!V{XRGWlQ*HXEW zU>m4Y(4<y*?aADpeydp4Z{F0~20R=AL+OG@015`aoT4Holg5{5m-hSQrNw5S5yuzgq5CYyc(`E27)UIDBKDOB~F*{6v2GmRrNiB<}$UwNNzm5O};2@05m z^_GNJD5{oB`kR2~nVx)6=%)DK4HxJ+g}+_M@H;f0-$2QPq`*~W&eKUl)L!}NpnASr z#(P+um5(?qjOvlS62v+D%^P_%Iswla%@+notQ=--(SQG1&o{b#kYu*wnPSh`n&`D% z8z@-W7)tlOUQhW!vFeYF7I?oecy}_uX)}qTgKvIjt2^7O8=uCO3qsGY;|%=G~jE7grO+or!%Fc`5S>l zAf`OA`eV9R!-{uFd(A66SFxxWGJ;mLP7$7-Q5M$a`a}i;c18+ zqtaaraJGLoS<>7#TjZPPz9`HKlu%TGw5*;ofeUzBtlGg?0VL64A zwrMTX2WP@%7FXptPPTtzjk*3f4#d`0J=MGvw`8J~-tiJVWlpA_6$V%T%``BSPM24+ zmrK@4C?nf2`y*BL#Fw*uB9k>Z|LYp-2t|E%sY$-4WGgp1wIAV6!efGlL}6fy3S__K zZWr@aDpt=qIMAEwBq9E?94S%OB6?&=y9V|$`t0;Jt3*2HSkR15yBNC$gjDa&dJS?aD6sfFS zqfXV>n0kW$#c%3U05g}-;uIg?62o6I8007Dcyt4{eK)dAgdQYzpg?7}9&G*7hkuj( z@7l5dT_YpX6yxZ;@Mqagiml$g3SZR6+vuM?ke-Jc`VF#C;?hlb$@b^FDdxTJvTw_i zL;GDIoj`}7-SUY`IUnY!%SS%jjiqtB(Ilu!p|lyCJqca*xygVL#=*~z4uj$04pKoiRy zfpkRZzr4Ob2LM?dMj(_{rvJvWEk~yWi4HoDj>t#k{vRm{+PFll&0kdTcEhlmd~(3G zbh}aRbx<4RW~KG=8?P1K&MvzUPUe90|4u9X02tNkr$XNUcUtjL^1spw6?L$6p8G7B z!{isxQ4qBvI2$1@w!&~>dmMP!-jGS*jx3T6+u$_#)gX!Xf6EONODVz~cz&s~xp+TP z<3}^v5(QgYRc{`~48^4gIyrHle?=nu#1Hp09i$KR46C}n;o`1q8(y}QuiO%4`$qI1 z&qD$Nz$R-%x?tsQITm?6<<@jMX)U<+L)07A5qj|k^q&ViyMJBai84c2uD8bR@9RaJ zK;70Xjxjr+If=@bDW(0&tV2BHMkVHHLN7h3KfR5X8w)$x3HY#02#<4AWfdS-y z&6HJFH+a?JG1KfHw)G3=6-Dl?05hBo>(fuP&$HiJKqbP=<4#Iobe=Ab@R+r5|CStP zZ@Z5mB)d&^Hi50Qz`GO9>W@<5lhl9b58I7$X$Sy0xg_T&3 z#Dfn_<`+f+guETG0eWU;3{mer!pxNZnaw;zU)JH=2tf*m$$074b?_Km%$ax<&}zqh zm;~}pfUo|Pkq9hN9v%OZxR<;2j;6r z_lYW>_%8LbaB#eIt7diV#ZOweK+$}yi%vj5(Dam9p6tm=z~%p&i|y zBL|8k22GkRblR{~-Q)?+wD@x8c?UjVOc#Z_nqF_&3eGb2PZR4{IHNIuii*l0Dw-I( z`8*}cTdI}9t}l+kpvm+3gqKSm4XhpNA|~wpRPSYF*S8tG0AEXOTI83uBNz`m6K;vqzd+(KjT-B((kdkZm)*U zrlHTb>j!agaBMBMhD~{uS0K4QoQ_xu2%to}&E|6)7-UIsFqBjWcRur%`TJmriHUiA zxjZ`RE*KyKt3W%DDkpDHphFnEPygcHVf^P$`GG5xf7R4T-!XIjqoVnrBL4p=$Ns7u&gwvA&WOjvZ5_&Cd2}m9Ohc30sBG$zP zFRT%wReF@x5wCGg7ax8oF2I!!0e@(`Gh)L76Z0o{?;LLAvc)I|GwES+f0LA+c%qagp-Ui`6h9=RJh&~24kw8~@Jtsmtz|4J+9K3N z)L}^WftIU5f~uH3r+|NBD+`IwWan29Ik1Q-b6v6m8{JMt%w*OG1;yj8ul)dkj?N71 z^HxqiNX*;#&#^j9M|V(Ws;$Dd#tT&X`unBd=u(hGHqVH@L5Bv;w#8mULRL8_DV_6j zRs_K7nye~U9w3m)2L{rDh34z9(a)&$dS+MEp%UxuR_j^xdsum<*zF)ZCMwc)-4%|J zw<0-y=0U;7_gP-o1xp01?lM0zhvO7!KN#%2zq=E=y1D|D0b*iqryJ)24ZS-PoNR2` zQTne;T(ls++97|l=tWpXXn<+_ftB%}YUk#DzLwyu#;Bz136>lB8IKO3Um5rxU!6_3 zUELe$cLc zzQsjSa(?i;jb~8w$S zQS5lORc%018@e53h5avyHX#jB;tO>BTy9z_P2GN#|BX?&6g+aJ9wRz&5008eKg&k2 z4+yyYdHQR37*!v8f~>NvY|o+q9K%T+{FL{lAW}Veome86!(?95XaaV7sXY4gC)z^u zC07zP=wE8v#B%=KPw~x9lhtx3xg88H4<7mY`tC%pf#If-!ueSy2BiOmXIQzdmS-&V zR$Mx0hpVeW4NHL&WtpB2x$tl1@QYBThYCLGSYWok%%lI`S33Sj81iq`j4;soqEWd( zt3uoEQ~d-8TY(_dF!k!Pe*DGmIFo8LQ#FyG4x4aKQqGG+&N5H-mdcn|t1Hjp9BimR z;k+|2G~;DYo?2QLn6h7j8f8yPVI>lJPkzjdplrhg7A4IZPS00jqTF$)ypdu0Q=B$t zp?)cI2IxRWMV8N|yw%#sAu6mJ=?&>b)}K7$;MwG<20eHb_#l9bdF9El9G=-3{8~f; zfio~{pt>~D%!{C_%MYB<6-0-PG#4NcP6d;k!ST;*xPARlUoL@{IO@Zcb(vK^jgCxNP~t1E(MuB)5$ z^UQ0E_FNEg)RpTZ==|GG$Wa`ThCuS4nC>RO2kRiaki-QAoSp0YpUre|yf&~w{7R*v z-xOQJ6L+e@gzeF{ukHjo4>I`JSTd8gfYdiOHmfJ=1F8l*JdY)Z<|Bu+y2$J#`jSU| zK$i?`+Ogq>05f-81W^xLkjj!&B3_jItG(Ol1rvc!-Rvc(;gNr@vE^7R*bpcs1sgsx z&&OJg_O;F2+jC^{ME;GXdW5OK?&`GtV3p_3p9f$)6Bedu^}l=x*57_tl$Vyu+Sxq^ zwYw{Od$@q%Eoa-6Wz^6^xcr{EIu#9}Nl6~xtQ)Zv0{q7}MY!0@D>dd4ZaNVy&(15& z+K0ii;PU!!`ffr9 z8a_#6?}!b85xb3c^s+>Q^sMsA3{UByjlnRwo$!Cx^cUykyk`m`Vr5N8ST&YIoR@dfD1*)`2%)5=c7&z*BBMf!^+ZS(8e{y&=P|C^Z-P;>*Ra3yp zAaDV3HT;b#xAk{tvh>}E*G_&3A2wpp40_K$@atF5*RRarW8_4A4y;i~0|1~;vIakj zl-+*P7!^D@{ij^m+t&*mgtKpdDz|*IWT$&Of@u9PGjoZ=mjXxHL1p4IX!b6j%F?~U zFsm|uKXqOF>TBfc>grYeqfPq&?iUKWx^0?kIOV4D;ArF15jF~kmA1|z?xRA2cH>W} zB?GCI3le+)ATA*R*&K(J%|1Q}LZP9kV6oOTB$7!8YHrziymoZ7K+=HQGnR2QKC(n` ze|HZaxJpZkJ<$|-=VLy!n*17SX?#lTF{4C4$1UP+Fq;XK+UFIOl&tph?OKARZTn}@ zyK2wqALbw!lgyO7EixkfeyulF_8+CVC1^NB6%|?Y4s#kGtuSi9f|TPf0i==|H!q(! zrjR9Ye8$M;#NR|EZ_0sBv1e1pNl=7#c8ZFu;pAvZfy`f^vqZPl;PqznU_EYc zsoks;54t;5u9~AM^(21zFx_(Hu87#aWEafnK1fP%le|azU<7XNKVnu{SM}_&I%*93 z1F~|%`ba#GbiADp3PLV3tS=eLi~cv`=fe*F|El=^GaLBdCplPf`qw+1|3Lucni&HE z`Eau6hH&>20|!R6!Ca`0N@(q(xf=^OYRuI;lmMt_sT{@|+`RZ84};a=bZ#ot+VK`< z9}PRrH<|#z)?8`WBINK(YuwSgAQNvVjaJqoxQJl2+{))&&2KpuM=55R?~`*VA6_WM zczY)!`{BBZssSgvuYIoMRxyB9w(>7s^~v9Uy`;{4`K*85I}OQESIv>;3;p}o^Nz!< zbMLo~s)uVwhDBFgjaR9(m7~VZKWk5CtyFmF7 z=|;C^pud0nF3bTN3HE`Eqi8?YxW4447LN?Xxm2Y+cay$$+vD0<2?5^VG{yYSoKNQa z-ySc#Vs`Z(X0JagAqdUe`LF^2W83Ykp-TuEzgyM}%BYp!2GJY?BeLLchOX6O+@(^&0l5GNnQOVd1KG;E3wz+UC zrCucd%S1yePuSf>L`z$7d3|Uo6tu*7sqSxE4q^hu{oSR=4AsbxpWXnbdO9~6c;BYL zmxJAyB@e{=flRTnH(ao>(u zG&gMX-;s;DvH0$?=F^y}(cX`Rm6@F!xMbRxu~?Q>-Qx?1H|9`Sc}_vxEWWTxV2Su02sPlc3Qtb7fwAB6-ElGBI@kw z`qSvPRu|0=uwwwrIT-*DaP$M?r7)6-oSa-;Nxe+U@h;;2@`;u5@%mmc zP_aO}<#bpSfMr49sRXf|7J-OFk5VLHb2t+PxVuc@HJmdI?9y_j!^ETvE2j(0jf8HC zRK|b$6udr=Vg#C88p4RRvExqGZm(iP=9HodZrzx|2F`wdH$pk`aj!Xu+VCFNw( zdv9iJXOpg|2W+Gx0qFux;h2SX%fS|)u2I#Np6(ZULfbbK-;!HHU??=}g9ma+ zRlN`v{q3wSAT>fO(fBHk03a83f9eeZyZIj&fy#qL!U))HqzpgJn?D3cJ(QUdw||Ls z`&W|mO@Hi}CsjjjUXz0rG;SiCxdbc5*X@Dg;F(X5s%pb!sW5a@ zauPZ05oTCK1ExXm8Yy8CYa`YEm(Bs8Zs^X<1j2~!cdh__1D1a!vAxSe2re3Y;CJvO zyD<#n4QRUHmz?KM>#1gUI@p(%yjwHQ`nKaR38*jnV@Qzz_v%uQzka9KXlU^SUn2ov z4@&TPPQBIo#}3y*{_sPZJAc1oR&^Y8DFc*cWq5K>DH36@_>V~dmja4!L9Gy`9`}|R zMN=3B{Hf7>J#u){?1@%A%a#W+JOA6d!n1*#N}aB%Nig62*Z&LPq zuVV&+p&7fxL@Qql5BE5v>!%5yl9=FdnTK`MfrdG1&7K z4tbA)k+ydo+rpCB3AVku4jlk;K3hV79@IeLv$<;_zR=P2XfaUW>HieAwzhs~*FJH^ z4RBCcA^#0s#tYld%7$;Tk)IX4<4t*f7CWu%PunjS&H=$7(=cv4?A|5V)r-1Op6uoX zFR+;0$Qt|MkpsFCtg)RpCX%=G&{2f&G_D zDYlY*);q+Qh@&vc<%g7+%FMaL_KO504WtKHAJFk+UcP)8HRrK8%>7E_{R9t%(ef(h zA+5MuWe(ATs1Hx0I7ec2yY2j%#R+F(|7TF(2wDcn{<#m@>CZguWxc=eg{RDMreW(1 zC}Awn&!WmL7AMFS9^M+uyA}f9(+ZKvfr0O38*_x^eK?r<8wPm4Yl^8vqTlRf z182#}4bs;QOi0!v$8MGy(>yeluJpN z0)cVq}#~7oG0UkTHa*9D%@_HM#Y#tkzplFT#j4j ziDHP14noF{Hhn? zodG38S~>;8elh_VVLpeE+lA-oxk z)|=5-iw3xh3f7+W8r8wK^Q_1{F`#cJvrgIXWCeK^0s;aw09#Ps$f)3WuCY;e?2~|2 ziV~l!@239P;aXp6ax%*$SG<^CUbdE$mfmj0KN^P$v+O1POc8;v>C0Ui+9QKPQ-p|6 zPQ|;cF5qYc@vNPjK9jIg_GPMFW9A&^yz#Y$&JW!|aeF%`oML-sS{`}+3o zse9Nf9FdR#<;={?f-!YT5mt3BOhQ6JYYB@B3m>wx6Y#iGSApRFhlN=}+d*Uc)t++a zR{_=0(b4kGPHbuE-7iT=tF})h2*nOO*y#kP5T z6pUuNtm-%vw2=LO8Nwt~*REB&OqSAMR2Z9A5YxbnvyNJp{u%ZWSOx+g6|POcysfOV zmg@fkDGw5lxY_~Ta1B5l51v3DEEN(0B_(;Su(+54Be6(k-+H%)^ zOpQ5Rm`gC$^X=@Ual0av00%1l%{tiBi5q_3X3$)=%coHC>q)WR{i2_Fxa6X@&wsje)W`xRLMnZ3>x_9do9lwXO70%BLRGaNKcB zG}*C@j5~|UN7(e{V-k4Jh8X%OVQe#56bKZ5RvKdfI(83084SwtM*wI{$iB(5mo@Bg zpoe2u3TnxC?w#`s7L{c(D$yZ7WMsrk@bacCqE%Prx}$j=c8nt^`2nBbDb#MO9t~rC z{rlMse0NxS3IGvaaVfa01-c-v<-};{I{M(cMa?e?|s}2lZr9*{L z_b;DV+$Syodm%%Ic#cPvUqL|u$L8@fZ|(q_AyKMtGEfFytK)e80tkRYo9O`G-kv9~ z$-o$g!;bRVvDSuuiKH`$9Md*q9)0)hVQm3aa|9p`Z!`|_;_ z$%num{XxD$;0g(r~Ckn3}J8$kBfo@RqV3@ z_#0Rn83GeJ2*wp)Q!S#6m@NJ7_afcD>MB3Ju{{@ci{6$>)jRdm$Zl)Zpa01S*fJ~C zH(A(Ru__C$fKJE+sbKn`K}Y${e|~<>jl>3nN*l%-z5o>C)(HT$tu!a=nQ*1h24xXs zRE^y;pbCJ}5^e%gJ@yZ543RukI>Pqw5w-&L**FO6~u6Saq1PDA)y{RjV5IJ^?|HER4nK z*j1RLXW)%E-8kp+`x=YwH0Jq`f4ujvBWL&mBaONb_4`8Z#3_z#zq76gVv_)6!U&gI zxfyWN%J0*H{$&uKGuqvOjK8;Cw!!4|o{B=>r;)-Mv_RU@#^x@m=rqU6 z#!^qM!+#kC#VW68?deG-|KPp8Ne)pBy}tYrPp;-5;aL5i#ZhdU$jK`>8b9U@LbiPV zTH(>k@<|_>kSN~;KoIxL+6Ay!Ty69)wRK#)r)Q~#;?DJtwXAKS@?ujRA7DF4v((;y z%FTA4ZD{b8x5XX3`0=>~DNJ{7+`i)Rp|5k*b}Hoa7r+V=c+m*IM>Uic%b3 zzWsMZ;yOh-V*K8)Y-h4%>~QFtY*5Hb0?C%KX$H|8a?^wEkug`VJJw~guiRtEsmXdH zH=WZ~O0V6sJTnVssr~ws{u?90iYEBdc-QDKFMOoGYuS>}s~SA{@L2SSk4F5a`fkEKx>hRzQ>6M!OzuamOtHO5 zwie`;rQP_#j;Q` z_Tk#kY+deg(0j+FayuQT-R!n#$FWg2VKnzy>E?lHmCyL=S*}`Fx?HWt?d1Ai`T2v5 z?Y6zwS^-4|2NbOBi%_!D=8y?7H4|MiHa84Gq!VV9NkjWj{Uct3(6#gKF_GD7-d&tY z9jX)CE6srsHqpii)_to!Tvf|rRnD4PSSa2}&QM4l$WlC3-O_ua(;K$^MNe6Raib;3 z_vC~`lvgTIH6aEGL;#2v5$_C9fnk#9*HxCh0({gS2~-IzgqIEE^Q_cW0}+#C&g}k* zC$q_Uuyf0Fu|4KRzX6tfuJ7P7mREMx3($6Cf!W@sl^5t;m(+6=CXJ{4?y^5mICQ@* z9`7^Gqe4#?I~WV^(=1pO2oadWUNNK{;S$vLl{qPP8EV^jY&L& z9sZ!drpWCrF3xarOzv4}S@OW7lG7JAA9T@3JoH2}F~?qATvKnDui0caSdh1>B3~qF z)veAi9JPbw?8edL%nA_E zezzGVF}M8__v$_{C-ABjqEMSimv#S&)r@g24)e|uVvWR|oJrv#?qL?OR| z5gs&nKV52o7+8!|H)yeAjbMu1?^^wKq+IZF<`s8&){P|CZ)8NAWaae}hZyzuG|j`T z-!s1mv7>N5;-+_c<<%nwTKRmayQ(R7K+;3A4SC_83S=_uA9TF@r?!?6-qNB_sFyuF zMyqt1O|0+;9Uz`*_v`GkA9L+D9a+S4zu5CQL)Dv;Po5D&XO;G%+yt<2tVTlg1bN_I z^M;worK?`2G9lsx7#&sW0 zcc5&H#TDv#+yQrOq0CKxI2Gxh6E}t*9OMt|2z1-p{EDIq!!ru%@-N^_W}vVa^R3(sA-$A)|pD#rrg(+c-3dt zi0Rl~2XHK7GDe;d@G-^+;%eF=9n24U!djX7)=(G3kX&JT1C!A8A{&ToZU$h(M55n_4#383rp%#3x%U z+TWiw6d@c|ODJD83vvxGQMp@)NK10hSNMdTytHJol+04(8vnSQS{sW-7-pjLJ|E5~ zw$$9_N-vAiI4K;J+VPMTX_WQf&L6z`1VnNZ?wVMBRT<*`Yp`zk-EWMVvNygjd^om{ z(6%*h(Y19co63g8wrQu%1dlc#)Ogo5)!N3Ig1K|TzWahzb>Xa+d}bgL-s{rMv_@f# zL~vjxgjzp1K0I~KM|Z42WXH;_=A6RbP3%c#pB*?Wbt_;+|7sZVag<7N{v+B!!DP&< z-o_M4Qj59jBZeagMi4&m!PC;xz|&eK<>g;QUWC_PyxYKJXa<3PYxj2tm0ZQmEPU8l z3LR<1md_uY9&Bj$=T+3n<@|5?SVFad%7NkJ$%7MpzjIG3aoZknZ_=HpW6J$!vLbb! zJ6%Q#K-uORCokZZ;1d_eycyu0yGgZfdxF4YfgOc5qtRS8xe{DE}iJesee0~t&Qz2B`LjIp_Z)}8~;*fHA5!( zWx_qk@BnohP-9c=*A(D_hvmINWN_XZx!tl}V`{VOSDY2u6;vW{hKBnTF>4oXp*7QV zvpJ7gI$wqI0pQ5d@$qp?lh4MsM=K`Dyor; zS9#|IXXd}{p-@X?q&YzKPoF}T+m&W|$((4|;sr7H<26W>h&h`BJf57-jEtBPMJ80} z&GJjc*5IEGsYa*fw1@K*cI|xd5zjg|O35hBAPsfWwLxnG^cwdacZ7g2d5#FQEdw}; z$GFOB2#5mDHv0*I92^|P^n{{*5rI%#szQ)BNViC$aN6@e9?0YzA04H`xQgNkeGzTP z22@ZK41S)k|BzAdW8YJ8S=9s>(I_pINULlwi!~r)cj7EAp`C#hH!Ike3USgJ>Fu2= zcgMv~{9|C@D)C(Py82Zar4AI;J0!e(77GG=Plt1F=$G$7$Bv==87j9C>au3&p*Eu9 z4#)WyHWd>?bT7DvEjw&`UMXN(u6b@w78RDZn%4L8$4{HxGi_o}@-Q^NtRl|jAfy{s z9;}!B(S!`ONr52UAXOvH@qS+lE;0WdUrP-vR}TFWy8DAuCRa|w07OP`e}DhC{e5>3 zaJ9{S@S$xxRK%(!WwOkq)_qZ)ot<5K5&&q>{_O96Us^ePs%(Yk+roR;y3BkrG%GeGLGgpia;f*GYgy?>ez(MS>KY&WIpFHDVGyRiXRR?)3=V*`qd?+ zB*pvZj2A^X63jY%ke!onH#j9z)&SAAv$HeUP7fsxO_@Y)<7qXZoGQSE`y8rzB%Qoh zD&bi74+ngtxNMV`)i30q4JM>I!!_KDMTv8O2MiR9(89F#?VEe!uQ#fP~zGPWdpK25m#_8TOvm+DFNV3ELYir>0nWIS6M(? z=jz-B$l1l^s6ASYDL=lwIVZHA;IrqlJ);L1sHcxw5dg(9o($g=`jm)+FAZ=Z;ii^DM#6ZBgXf|=g#nXi{ zC!N%t5uZ{wS;N3roRQ*{nj~)u{8m)0|0|@@+w$QIpu80mTz_?h2t%=gvG&j;*v8=^ zqABT+R$WTT2umhcEIoRIWDXFTWeM0#ViUrO`jO*j;m36x?j}wu-LX#E3V3{O+13v}L=uwhR-cvsB zeGAB~PrG{_`4|C`w?3*E0+_}PUdfj88a*i`73}9%uvJhh8hPpOXG}+z*##bUj!=p<%j2G&L zLJzcXh6i_wywx{}6?ZENVxLMY$k3d@e{CSCx7ZOuJ>9%nw8J{3!7nGN*xV1k6Z%Rz zTn%^Yz{(J>&`!%wt@yaeHd(l=<3CHVpr9tykC@zGJ-GtGyJHE{4I{k>uSwLFxb7)a<{KWaTalLE5x}2$9_oH3eoc zrGCm0xXA7XeGh1@Dj_Q&}r@bQO&{=ygyhF>^{g5zoU=NHhoikHvt z3JKNe`;hc(Qiapel#nn)f}Ne6M;%A9;uhVf=dFTYJx-2b4z=O`aN~pZU7DEgT`juE ze6^eZF&mH|+aGBfTBKd;$zgRG-bdj)J=Cip+aBOQ%n{BT%f%=N*cB~w(=`8Vue4D< zb5pE-`TDo(T>3k40@sG6Z@p~l2Un-A0-rCaWFcJu4bjNE-v`>i{p0sXa_^s-5$_9V zT5Vqv&AuK!u0Hf|-Y=}})!dkQg?@e?C@?M}#ZM7#P3E-+gq0>?}L$$ zzYpHz(Dl!oV5Wt_5a|nAOOp4>Jo! zH58I6#RLJ>f*8H`TFzJG!s-j@;1Y3*gXc>gJr99ac)U_c($bT4EfPj3gi{l@l-ul$ zZwWCwt@$?Tv@|OrpcA>@hnuku2ztg-FSESfptt(RIqA&5#Lt#N@rDBUU zj)=pJfR(yog=5L?bKl!6m5DBCr>IxrZvPFST)xm?@MF2 zf-Uq=VY!0{nwZC+aBFTa7I0)s~ z6)uW>a+@5~W_9qoPvqC^YW`YAY?R)#ON~E?BM0nntB27ws&{qLpLi$^HB}4Xh~myw z$|iq+T;B|zUVH06(MhG6#|1F&Um-}S8p#+pd7$U4c}s>+i(j#QwcxahBQh;!dC9v#ms+ zC~^6#Lm2r-sW63u*3HpLNQX@F4RJqp_YM?rW2>M+7kS3J!UyX0ya`@Q_|{W)SQR{z zOh#fV32T9E#h3ya?~zX_OZH+1LOve>US(tL0 z|K_9>(uY7o6aNSUtMGYtyL=KfMc24Ku61WXfPpSjme=||kHhWbTNo}^_r2HU@x(qD z?)pf3C@M#$0jVdKYyQZIGIjR_v@)Px_Gbn$t=@i$G`O)Yg1elMsXj^CY;H%sI&vly zo~d$A-ws48Y*9EpIr)+%=8?&H7-r#9o!{IN=1;RYfl)X!FJc$Y-Ii7^v+_$$Y5pLV z;)p6VcH*bJTDY|m;f6l2$ifCBf22}CxON}djB&N$EeboM{Dqv_kM56skfHoGU`#Yu zyk&`l7yFJzOtz0tC|%zzR>eQIQ(%J`ZTV=t5$P?MB6&Z#p`_3LW0UpndWK-As((90 zN6PxM&lp2_VMF#O|E?(l1&_z4k+X(69D=X`tMNY8Zh#Tbp+f{_+vzxe!7IS9Vk{@)o#3n3OEz9z{Law~!oaEcX>XwBIG~a=sA!Jx6K` zin~?X-7k)^J4yWBX`VOFd z68AKVs=^3i+%0};B%C0IJ>ca>3M3{E_U8l8D878o7YJo+E&}EhD{;%bv|q5XXZ)-s zczDHgb1}1RZ83Ayx69!z2MJYZq&S*3&5IZC*Ubr#L?l-Q$@JnR@QD_X Nrkd{KN>%Id{{iEtFbe<@4fZbd;j%&>#fCH;KDukoPGBG?7csGpJ-ieH4;L4LI40ro~SE70{{pD{8-`R zf_J`!ew6_LEIWS#6CdT5-nOrtJbj!z+yUUtrw?iK?s|es{l%|`mGjzG1q@d#Jy}o#Kul8F@ufi}VN0+B=n5%U$ly3L4=l#s< zv&>~y6VIMG>~-2R_6w^x8J#n`@;U$e=vOfkE$r9M%W6AMV=WjU!Df7oCMGiGNt)Z2 z_l&eR%cHC0@WJBHh*kPw7D#FJoO+?kQ)oIi2K&7`2gRu>ExD&1ghY)x$;*z;X&U{{ zfSh}gCT8c`=e-ewH(8v#&q@eL$D9?R;~7Kp&77hU{M zSfgzXZDq}yF{WRKcwWSc_ae!A*nS=2dub}(OC|5&{B;yvzm;sub75Ui+@f$r4&jTZpMZc^lXEjy0bnd?^z@TFUaMzB@5@YJrT=k zgGlDI{d}AQTX{_7k3DqJA=lwMoir>jkemyCyyS~eWa`y{x!YoAr8N8N0v?0&aFH8` zLL+m(skUnY0GL=mQC2W`Gqal&U`F*1(<9fZMWxK&5S)|Kt)it;Ew9t%AFVOEa{pfI<{J@0xsl1&6_TMRv0O zeQRukAuDMr)3eg&2m25D&yNGM*VE~=*^&_~_#uLFyc<;H*a}Gy@Ir0}fER2!0K6#R z%Ky*Xv~g8cg4ER1-5Z*;)Y`LxL#araZe8Q(nLliSHM=AOQ&Otve2)S28q?MF)fE6Z zIXP9;*5UxJ^9>)Mh^Q$1LZ{CXacOC^p;xUVziigXax~bMzW-%7YH}Q%l>s3oVBLq-ST`d;*aM55v_t?$kXQtmqzwn_&ZH^#hAio05|mvHLg5FRVRC zR$Dx=I|BxOb$&+l*{zs`m7)cjPD!_HM&rLSzgvw}Vum{&tw%~jaAf@EbO#N8z04o|Stas$=QmGGYsqRt5 zis1$T8r`~vhT-Mqyybk{pkW-bEx+; zU-0?iRglIw^Z0Am?wgl~N3rmMh~0WKU+hL-DSULdyxz@F4|9g{?bSDGMMCX5gUBf9 zmCj%r>fb<8TvuzOSj@LpN2=U|1ZV-;!%JL9%(vpZ2B%()Y!+s+mu?24NVV# zwwYR&^ok0;Z{NNVPYgfB&GDod`?&U{?wdOImG@e|wGtj##D{ni_w`j;4%GID1ShDb zg=1V}=`sQ0d8RGN!~kGtBjoMsD)r*q8zCsdCY&@Cibpym7tDg6XOCT)4jK0M@x_wT z;4ph<(oZUpAo98y#;Bc;(826M2-;@^G3M*nujH{^;5u;NiGZ~g6hHvcVNz0W1kEZf zBm4T(@u_2nC;yTtMH06Uu_}?b*b$_IHjUdgI7n7kS9frHtYm6R&o(l$kx$zR09HK% zS!V5v?Hhb|+S}V93oR`GV$5Z-YH>#FaV)k1?R!v^28M>LTC4{}Vs)D2xZ=R)%*{=1 zKEAHMCq4!Lo}47I;CJA2wjqHvu4GT2NRQcS=S>>-!lKUKzX?hvzXq>JV*h7(U$z~9 zj}sFe(mh_djJO))*tz&Ox{@8rpzk#j7YBgu;_*lp{4XN5Dn$sEr~%!}%F@y=l-7h$ z-Fy3kv`WuaaIzkSun;FKH$w0!Y1`g)#ZD*XDnWpkFJCT7I-hajcf9Gf6JA=YEbqqa zq}UC$2)g~##%NLE0r$qI9oLRoZ z?>oxU{Yb$6rPGsIcnC{e$N>xpAM`PrA~qw+wNJ1o<8)FOta zNm#Ua?J+Jx$va>>V!m#22~lGK+a zS+o~+SYRKcyYR+BWSI{x2Csy>cymij2@SvTvOLM9Q~ET3;85rAuC-uqw-IV2T$BbZ zDb1d)73*lp+pC(Ik{>7HA({`!V$_v?LBnKiHNYSC~#TuC4KLhh#@!72Y5+$ z!gAtko?n%QQqgJ>TgGOK?{Wch5BQ9U(V%1E=H}KVIxEeFEP}wGD6ZgR#tjwhBt}#Q zv*UCA22jNL&MnM1H>B@y>Khse|4Ie!E=)`qnb^Cy#Db6v-gCYpfyu}#ss9G>LpFRk za~k5v&Oj_YI64}+c&rMO!MPd05ra@*=Tg;oc66krrlyXd-@m826`sE-Ju2ak6mSIj zbbL%XLHQm+9@f5SsjV!)DIBQUHo0}$OeVjurvv(8Wu7P#iU*=fuJiZ0O8Cnj2y{Iz zd;IIShFAAOx@H?bXO2#{ypKgOLDYs|yXERyp*?O)pGB)-*dQ)34iMLhlKRMN(T^3< zL$F6V4ZZ?uD~;O;qJ$Z3s3fKdzVfsDGOVF`Y%OfGPoWc2OqIry*0PEJaM`j_>f;Xs}%&y8PS$} z+siU!WP_$L(Dd9Vpp(BN==M%e1h8O!5)14o{`}mYU3to54@ld1Jx);%ETJn-Q3?W- zBUx=!IA$9j#f*xZgFwt+X@L!l;aOp$E}?HwYs}6!Tu>JL6!|sI=rKI~St{2u?xE z&86|d6TE#Qji6KlF+DRgLO#TgJC6qff~o;Cu3CFGC~#1x*mRk1buXW9zq70{lK}xs%v6bQS}#6T zpRV`pTiGB|X=U zWc4-QpB;@7+)?2;5DY$)9Q&RWL3xIUPY?>KPM|o{JPR1S*oC5&JSZU)y<~{hJ7UD3eCgUHLA#}oW>|i=8(J#`D@l%Q zVR)EAIGy$2sE-KNT;GM&-e5E_802mH?rRd5kE#TC#Stwd|dA(1>N`wqEhOO)vbY7;(Nr{z|m&fkT zOeuEx;x26cz3lcV!IS^ml?~n`0(=E^&XnAo902s@io2sALRFr(*NHDCwK$y;9Ea~= zbCOe1b`}&Au=4Sdfas)AtJ^g=17Z~0wRX9VF6e~l!Dyszp_77)$@NCua73a)R)G$% z?gnA10}K*iFc>}|VF)+{QYPu%pER0X?V)&&x=u^?lkQ&+RNf+#Jt?!*$jFFQ>REo3 zG%s&l*RNlmvUdmqIqv)de~Q3Y%=a)20x?9;7Io(I`QP$&9P_g@e(D+k0Bw>cmTuEe zCg{tyB4|zi5-Lbj&!WgaOy)Ni+z>kcI)9dNQUt#4vv zRCpyRDdH(_rrYEA!j38ZPjuHmfRb+=$!Fb~=wNp&}qoe-3l`H|0gS z4zB!0SY^=BU-HtyOajoqI|e5F{n_ocnU8#Z@>d8YLDLI`Lg@fyH8l|cpNy>M90^DA zqxFrhdKc2T$@&uG{gq8%tUpVBtj9JzkDq0-0)}i4?inCIe%DB3!co{zKI~@G$EE={ zt>tI(=g$M51E0ZavYMNltD2gc%(nf&Ytn}g;oj>5?UR!~v~KcB_SMtkw;kVl)@=>H zhm09IUndj@vS(Cr75+4M3= zOdmn;9LE5Czz%Amj^iwsE-6Gh3V2tJVuPpz$kAFKD z{ud$zKP*aR8i(m`FEtV)r|R4o=5i`TYn!3<>IAeO(d0f>|u5r3b3_o3^z`~RX{CpeNv zzIAft+hN%OS+Ody)C9F@=8e8yYlX}gHltGZc`eC4F|m^d3YB>qF0+Xz3=#m)A}fnK z&n%0gStwH(&Y}kp-j)pYC)J#k8wg!WT@hkt*?T%Nr&QE@roT`>gm-6uB#O{n_cZyp z2ZS-QSyG8?LNC6_^hg!bZ4ml<`gWtdR)}Y=teu0*FWX)CU)04NUfLFC$T45(AFU<| z9C(qDyF1f0-{?nHq@AS*A|);{Euy%XyFXJRF+CJECUJ-V zekGQKfT27ZIPk3Mm^g2ucx*Vg^!ZUG--g?4UHsElFKCyFN^#&pTMqiB0XA=kMq|TO zZiRBNcr#cDTf$t73z%tG;Kb~W=lcix zVgC|k&S>p5vlEt=ZBjM{(_|TQb8~Sg@c_7=lsdCK_X#2pwh$&;TvD+uDh6*M=%#8% z4x#x-FjpAbnzca*NbPqh>e{^VXFr;WdrJ&I{ZvMG+JkKYS(}+D^Hv~G_4L;v$O&9L&)jqoT>&)+|VmM@u6T^+b}(2Gx%8scXVAU zFq>iSJpph;Y7M@PR&0WT;-<-IWMJ_lwv3X*CAit<7t$NEJEPQWMuELeO=xx=9=v^b z7+y2P{Z_}0D}oNQbqMt&t*FtY8?gwXmJJfmb4a&N3QVVG)YkOImtPjTIQ$X9%@zdo zXAY^Mr1$nCr2=u~g8+J6l9oo_-Q|ybFS_05>LFx)ejLAgh_b39@H=Ks20zKfK27B( zn5EOO6ho;6u`hw9SaZ91g&xct*{K9s?S+C6Ld@FTs~_$#wap(M9I34L8|gog-~fn= zwF>fe!Mn5+WkMb_vh9k0kg zuY>^-Zd}W1lep{4a}i(z*(x^xPGWPkh+z!-`zFtV*>~Sv)6jH;%>lf>j3z-D^8td0 zuf41NxivBsGc#$&Dc|0@jdQcY@R1v5YpR~UH-PU zngig9{;H6#`3`I{dGe?x-%li}&64^kiz5jNURNENds*{inktzD#r8N4-rnt~GTOox z7eSGJKV0d~P0eH1uoDiIz;kNYkehC}3ml9LSS|*gON5H!m57r-+C*$G+X@oJ2=~Y7 zYad00z$eQujIXKNQS#<65o&9vPOp7;&OMI%wvGuhS2B%aVqH6Fq47^i@w1gc`6Mg; zJv9BrNOek&?Uo)c`_d9E-v|vSP47N62I z8HxH-PrssSO$7K#x3fnr)&v17S~PR&{GGEe-KQ9TGJ8optJ>e-yhp$v>3po?YDQwT zo5oJt9lt8vT-$LrMsytD=i!kInKF4%LW0=Xc@EIYb4dhO(&$iSgf)~B=pO7hv@<)> zAK&<goth%iFi9V^gV*H{cxB6BI!G4A62G>K)6qVy%&x!|>2P#uJb zvm6hY`}rDglMaX0<&bCL&8UhXLhEvs4nQ__rhNDSU4KVhfb1*ZAKoHfENDFoFZ#jw z&BF-9V7^ zF^j0^7&kf~;b}bxOZY!fjVIMcTeKht(QavZiw{qKf5ipNG%y5yMp>h5RGBMkFd5uJUD#NUBm4%@ZkJtEAfj(XqapmcwOAs!M)K7_Vn>}IfOCE zvZ|bEUC5Bc9N2C>faYknt){olmKo7q$wF-HuoziU$7m4w^$sL-4~$p4$SmxFpsK%J zE}#7FIC8*^fB?(da3XLt4Y2_5W%vYj5V;05P|3yP32J|Vdak%@iPV$N$Os0kK&gY$ zW&*aLERT~2zz~nHPZf2^pw-%}mBWq$*WbvrJunu90L3P6iFs6|+K4kb(Wxie$F#CgY17*;tbyJ{}iL$#2{S~j_GV0>88lB zcFRK&i$X$-^dQq!*0pE=agmdAvOl97#yj}QLVP7zv=vIhZ@q8Iw^C1+~n0g@)HKfaSPks2NN{h<7K zoalb{tSC`Tx_NhKdw4MJ86~rf|9A30wL~U9Y&+YRY=vX%A`n@WoJ9R^a{Rx~)zmfu zSjI>YaK48~fe}OJ8{FT(0_<{EJS(kZ*(SFx`^C(A$a~XL2S5v#1#YXOR@#m)=0%B( zOvtH3iK-A{8kQ_+Q&Lm$0IDk~md^{mz(dcq#AW{1W@BKo&B#pzfKVK24@Byyhxg>A zfT_7cS~S7IvH1hkfBhol^Z%NGYm`489l%r-zOJMXbT_}8YXSp5FxIUR2D)-ChrBZ> z4s8<9s$vd4nC@AkuJT%isj=JKJmO2|0zp6CLgeRJVlpza)wMM&po6Pr@>Ob0ai>(@ zmgvMUB>X0*!1Nk@y8Xy@i;^(~^cz)4Ru`jow*2w9Kv=wb*zU@UMtntVh7-BnICdsL&!ltH70QpYZ3wr^WCeJ{1HTA0hI2w2K%IeK51)B~BoU%QR0$V-%BtF+e6k5+?@e8nG{8puO zr>_L}hQ>0GqNJpx-v9KWzg!~)6BARCMgf4hx!#9&1S-AN56{XrHY-$DdOmvOY_gcW zZ@SzpwxuxD*{PJ4E#g3`p}|RKnC-ZH`r0KO+^d7Pqh-gBwEE(z1^!9=D}>)S$0#N# zv{cicE^E4)jTlI|B-ELegG747ghUKP`s&B&j^<=E~8Ao>ZYrl8j7PvHn@@U(#vs(r?{{Rz}mV*z( zA>%!2?GL%{sHms_2(OiHRz4YX2a>A~>|0zbed*QpJT9UigcoN;YUyW}_7|FY`ilw+ zmxcB|fvV6E~ar{yU1ieP$-{3q6WFbL0^{I?e>EDKRZ-_T#^b-TqEr`2Fn*B4y){LV9tqO zY=)VqugSgoQuxw+AU^xi+uh3^Inzl3SI6rCc}K@$&tCy&J4?h)z~L}~MxRAgMz~UP zav-!t;ytT;H_{H$z z=M{f&5rq_VS1OXazDy6M$HDMg-KjAi{^6l{*i}=rAHF#MBScA=-}kMXoTtdsTs!~~ z(l{UgRnG1m^fRhY2576i*$!Rz7s+Fm%etw{y3syXq#e(!V)AzvA!U3VmKt!)%KLPa zCI;kszJOW5sElyfzg@j!@j{rRBX{N_??MgJ4IE(V+soKzKmt|l^D73Mw?@y9EH`Bp zsW;7JaCkzh{H)#p{NuHzf!<`k@EpK*{h)n`)0b>uZ#ziq*iPWs>y!L49rJ*6+Zahp1 zmkt)-j%=wIW+Be49H!+g#XCa)EQ0>Bq~ZH_L;Rn;TiZYGtF16@MuBNY=-@GxfHF}3 zYU$1v&!1J?_n#2ut(@FJ0q8l(ek*lFa0TM^XkX-m0zivg5z@ZZ}Hwg#mVqqs4^SH zs+KqqC%F2p`9w)cX}Z+VW2H}^)!>D(xp};l-<~|jo!rs}dgh=Lz0p6@HA1xVpCT5W zNvyt@^e1t5W#W;siHg48bnaXaZLMn)AZvoW!Cb79d?5ptEU`;@e-Bp?N2y}@V()f^ zb@F)mPjIfTu5!O5X>vN~yKq9$1V_b;SX`#w{l~8I@5>6^GYWPIbUl5(o$*TlSxeP9 z46BA~ziVQ?@ezQ(f-&nJXOYMFI?5H-IF&6& zAEFbo2jDLT;6*U512UIiJIy~b9^0(#`4a*xA2h=4X_e^Z1GXX~B802o+@lIeyW6@U zW`$_V``v>#D197P)nt6+^nPstp)^Mp74S0j-AANffJtZQ!}>>4xvN=;5P)4RVQeaq z98{0)MCL?h_?6x|%zeILoCQ4tmMvY6R(~HQe7!t}0L=mC-3=vLmp?gREknkO&n<#` zqa$%B@o(73hl%cBQ%1+cIKP%EA3Aw&&bMEbHc2U)=f5nMO;uVj6{z;vlfwR=)%Kd7 zsX6tN>=Tk)P==JcV50)U+RpkpD3_!8@fcXUN*TSYynf%An9-IU;R@2<^z(;qXmD0}AZ43FtW{O@@oFX;v$2#S z0OmcV-XvD%S>|S65+F%PE^nIHZeu7HKY#VSzt+B%MXXOesb6G*bBnd!d;Xzxh*Yk4Jke7;9A^Zv= z7-Oq#d)V07p|@QCmcA=~we!r4V8OYO$sZrQ6%`-fMI_LaQ%ztGG6`nR&JSUzCA@+l z&sVQHMp;?kT>MKtJn9p$ovm}j9iDvo=6oNi2KvWvurhu}?!)AU80K1-NKa4COi>XF zeZHR<78WKxj)AbSUA^1`W!ax81qD|oFT}X+(V(X}YWVxlAHD4%_Mj1oT3FE@ba8fR zHx;`ui^{1VNcZ$MTBHiN)e_dsY(JWn`MC7a2hH29+8I zpcS^m$HKxAe0yYfg<47MI9X^8z#W|&KdUsk%oclksjGeIBgAw5!E=+VkdP*9KYwNS z8E%~_yz6#{)(5z3a(1La`k~6nlFn#gI~wE$Dv)4C*Zt@1(b8MDx3a{WDX@SoKSJn` zVJxOckw=pB0HIRpUR>s0p7;vU1vTz<|F>+}xE(g*?=Z9;X=3y~m8dTwkv1Wm$g*?1 z%$S0iIkCTA(>kkI$V4L2rwwQh6=)^<;XdENQ`v+iOO8y@@LEcgJDBxor8CHuK(w{V z*Vf&Hg<v7j zFV{v%DHeSaH}zNJ-b`u9J(cRpYTK4@cJHh$Zj8;qqaUFcjW1YQpY$kp|3HwYVR@=; z<>%)I$Xi%^R$%VQabjkIUwK(id$eBLdj^@;!k?^oj&5u?7V<#V|9FxUw{_2ASu#~Q zNr2rBr?J$+V1DUb%RBxuCJcM_`|R-?2m!N7tx61SAfmaR8MvH$!`pEUW|~KoW_%Re zln^AnYbgH&$Mc}^qfFf2F?2>qb#+LqxQK8>%hwq>4Mg_#f^+s~M4ypd50L8t0WSzAhtA-6dG$&oT+o&DD>?TF&l5Qkw?IAxci8 z*P;^=>@y<5>6c|eP97>4Oz{0wg7`HvLg<75B=9G0Y5b_Oo)B%w|62v}0aOyCa>~$r zA%-A}bgR?1pHf(?;03gfv-Ldu$+_)OfMt~f8OHrvP}Yn&!=&9G4UlZ@2^QJK=&u503lTf@}e?{;ty8Vy^3Pft+<|&|)Ie;4}TLwIH! zd+akVef6>uF2Hb8di@l9=zwmV@@#?iFX3%k)r$>2ZW>Wuj}Ih`qJEkf#RWrgt@}Q@ zX(AD5BN6-DL$4vwe^hTtSp}N$11zIL)n0#}rbSc=ZFQxqW7hBk$;(b7Z@@?oq@4=9 zUI;_LeOohW@Oc0Q8kri9j_Vt%#9V4c_VE1`zS%T>%AqN2QTWoc-0R!G9)Kpje(bAN>wm8 z_}j7i@2{$Q0{_-mJ+8_Oeq*EFwjkRKvg*KOIE#;HQ3PU08RfD=RL^Ay`<<+QLVk}i zD=9TKR*i`+q0Cr7!Uc<-gvF*S5_DSvfuDt{m_UKn+tWl?C&stsy!&vQ4fXomi*?|F zCFFC+n_kg>`}XR+CPE?v1XDr`_>u}M!&T=(N33f|d8RP5pdegh*3fwTK{}$b5f9i9 z1>&>XKzS#Rqn;1r1B-vcpB7hgLxFq_E*2i1e6L3Ao%!ah#1hQ{o(Kbf z8n$62(@ew|G06NTQhmr76v=191;`nUL*MT>f0|yPIa|=NI$Ld?Y6y_P0~F>fglu)d z^aI3|7<)yKsMsLI1TxDzIhE+vtUnUp7vpsS88XyTXG23Fna*f;PSRoayCo*(^^wsPx{#BEPAEhy;QmA4GA>R z`xQerJ@I#6SA<-FJdD%;DxM8F=v4giH-H3lDXXTZM-daV+E?e1+T*4J-2G4hdi0Rc zP^B7EBlO-FT{_-v5kT68Rhr+dxhKEM0Z zv>5TUz|V{QK%fe`xUv$-ATbiQ`w1+_O1;lajv!%(D0rGGtkqia1M&vUhEr_SY*l{I zyDl_nn=mn?5@qXcokMRoC65;@Ieyu7jho3Cr^SNy*xc^38-w}AwdhdPLF!NMbxI+R zJ>v2x6Lwym-(RWS(a&5tpWWx-QL9i&2TPQW3|;YBN~P(_US2{PPoL_Unm)9Hl+JE~ zn8@}buhm8;fieDe3@~v7b#Cf=B{9$Xsj{nC{KS5Now4md>5Bv123D}q;!DtC4I(V; zSR=h-q~K|~jitP=Z=ES+is92Pwhqg+TU^BbGq4gbVQ#h07&55Vb?Yxd+P`Q-1}Hu7 z!=?nabT=D^`|R%2si(ZwYneSHk1Cmz)XC;bgt!ABy-mYs7n27^nYL^RtAOD`@!4$$ z8iF@RhneEjr%z&E{a(H5{s5M)FqeOVsw%`me8>M{n~tb^Ewi&T79w}sPZCC_w2#dR zLeKwMoc(WVw*L>efg#=&S^5QX9PqjG&Ieb`B(KOG5=S=aoMO84O&7XtN(@4yVYc-B8Y&IMo_uB+aRF_ z90)E5@jXHH%??qH|MXH$I%_g}tf5aR2vn_HIUvpT`Kb%xC1(nEmiv}|mw;ocWBGg0 z-UXci6n<4WgV(j6eiC4keLUXG?OCOlTxvg~aciJ16p9KPjZJ3h;!nGt^b zAijz9XIrEkVhn&ES&d9$acCGy}qG-tZoBL_@gUG5niO zJ3;#|VPMls2AAI|x6!mlP>3LxsQv#0&-{@_jlQDY%X>X*%@H8fvmP5o=qge2|LGLqN+mF!-qWusOC_-=5n%O#0cT z`Pd{sGvhD|L+|K5J-vIQnXA)-tWC&f=_hEmAZ&g3 zN{lj^spG19nD)O=(8$Pdarqe(;O70VfMI+ZrA*d7JWTNR?N3j?a{!Qh^k`+GBF^YX zkMpPiAD_X@*M`!8VzkfIn%5P!wGnRHkIo}dQjC zdD50@DH|;3VU$}ngbQMxMy+V_2J81iMw3*`BLInmXS+8i$#EZYaiQ<2^U&jtV1z6q zd{PD$A~?&L16uw!>&}SwzCNOXfdNlnUn5gE=y3o9yB^??^mM&)z; z&1na61>XY~S#;+9G(>+iyFzaqUmbK(t*+}R7#UHEtGWqh+>R{`j?E?Ni)H!q6;7#` zV2+c?LfzZSb~th!bv#JeYgY>(#9VA7fdgz^z2}5nTwIcplHZ++PR0cuK2+384x9#y zH1S_SiHaqH5^W$*rv#n9%Z~E#;bCVygVPjkZLogD??am0&`>D2X>4Zs6~QM@knhph z*5Y&sP6GkKE+P>@PhKOHul6%_PGtWv4jppyWZ$>6X4QY*xXRua;OAF$a(V#5kdW(? zVC_KjS;+qwp$@l7$QkOlqDqf4O{?1l|AWLxF`yp!F`)W~Le%;TSkHG*gU z;0*{oO*a@R+}-@!tm;-FYj1gS@+>_6`yBsIvEhGzpun8ra&b}c_VXA7JzV*;=LduQ z#mIDX-PX}G&Ni26JiN%eXxV`{H~FT`!Qk-fkZLkg(%FB46L#yZ zVnd_y(Y~y!4Nxg&@mE4XU|_ZH`V0078V8!OeQY501WAmcT{9=Or2`HcK7aif+tY0} zM*viZK8-Jw8~uwFGt)gGF@8t`z6-D#sP2;lM>*`FaS30sH1J<=M1zkg(uo$rdSBz= z%1ip%rru19EYoyE*^bhgnFV)Xace_cFu;GH4Ohklgf{(g@ikdTDVXhUsN~PMB@AQQ zD`wHdF|vJYUd+$qi#D~em$%cHls=yuxXWWiYu38jylHaYNv3$PBG4^1DD#6dG`2rH~FDM$P{*{~M+E$x+GC5vZX7M|=w)}g6vIi7RVk4$sTRYyMn>HV0 z!Pz(DPCElSE-bNs+0jT3#68Ev+k*!UEVW%}`jfIq-=IUXIU#R2eQ7?n)`rjtAKYTy z@@0#r-fY@s&Mqpxmh7FL%%j6=tN0!y)1~L>mSJsbDHS!fI8Mg9JDORK4R<91PBvK0 zd;nc08k*7iz@qAtzLjMgGep`E*afaSK3O%lfsR>kpF*Ftw_683;!cc>6{^ErR9U5b zl*80KMSGaJ48SA7rkf;#UtSv|IbVPd(Ht6bt9wN$Ak4o19^XVppNNdQ%sEBPS~Dkr z$2qt@zfs&qTQvJGp$=CxPuYsg%g1N|9v+_f!pi7@;?~2lk}kQgmaR1+Os&pzf)dvg zpKjvfh$}q4%~n@wr&)e$-1RtM6m=w@vsGAJQsB_(&}UgM=~Lfg9ai>MRhf7XkLOQwl*9md}4 zwmDLFNy&oiZws6Snb~GG=bi=y28!~Zt9|Pb&zmXtUg;(Q1I{r5O>T4GN*ejm0u)+G zS{nD5?()jYa4Q@RHVMAiY^<%V<$mx$0c`yNdtf2*ZkTWyi^Y@a$Z8=PzlXkN^iQ)V zWh-rfwfsRpEBY6fnRP;^cl(-zPDO-;(-ITO%*@QjCfw*=X{1@gc1wJJ4#01&{a7h; zh!MICz{Ow;&2pBMU)XMGSs4USQ(VA($8s}^6K7d{=i|qZRW&u8Yg!Hm%X5*#$UHf5 zH`&l>@73c-QbrrJSr}d+3El{t@*~4j<|IERd(fnOAU1Iomf$kHt!7rFYKXS{{BiL* z)7CAA0}UqWwox~ko_9Us?-A&49A~XFTb9ogL{>{_>0xfCRQocq-Dn$qz7S;Tb_x5; zE_9ggfI#C0zI{_U(vX6Lfi#MUJuwXYPjSZ~mIQG6%N5BJv4*qHz=giAdjOs_=uMl< zq;A5cqLBy+^xEqL5MZNC|L0Lr%V*EN=)ZVDGGv0jlI{1YL6n@_jTCAbcf{%*S^t}e z#It3RLk5>Q!@8w!ZjH(Vr%x*R-}B<8J68QSH)%q)?`3adEXBTFUY{eaJ@#|Xt~H%x zRmtGkBvox6!uHzCY z73^a=T+8%$H9bA8s8O~%I5R>&@o~cW7@aleZ_|bv=UL|LKv6nxOwR>ZG(byp#fZ2z-&ZDcJ?K0*ngEXe6Ru@o?n@)yV{+3eMLIiLR|#dG-=0eA+Y9ROH_ zgec^x9{zDjf~`DcB7+fcPr8mdDuPvB(Y~<~{hv%S{u^_urxB?N7N2QX|2;v2!K1&h zeLrojoZI%rTFH|XPAAux$4=Z}W9W(}uNxk;`;XRl*9Bv}@uvS6Zq zw&{hZO$47Ly|BO&7holdR>oiST}sN*_OW_Rh8+;5P=E4*cQZwHb359mv5D;g;W@-{ zHbMdtu~6Li8&Zl`#mhkIZQwB_- zR%Y6NRWQ{U>N@HgNlMF{_4J;{w@S<2YmrS9oyC*CJ#sP((aQOrPkc!h__xCB=Q|Px zam|&wi;D|z)R$#ybjklIX+IDpjQVf8G5>Fo{gaQF)y#^9~AZC3UJ=H&iHV5Esi$$msY0aNUBmE0-T&DHqJ%f zo7a$#kSn3>34?+*zqkENW=u6|X#)FFRN&|o%-L*Lhgz(F=irdBG!ZJ6I z>D}!rC+-j}B?|whw-n!ICzAs)#IE!)Vf&0_W%@)>e>cyihM2)IRLfw6>vF_}@BnR6 zScd1f=Rtcr$PXuK7?CF)K|BDrB)fe#x~L%`)zjcR!5665&;HL9r|A9Xf*NT8-dgT8 z6JXQzX$$6(aU;=TT{@2%yXbEk7QkKa&7ecF6E0VC6JAC=uyMGi0?5x(>qwq4#06i^ zC4rMk7#}BaTg>Frv>Gih_dMP#N1|7Wsd`W#s_~4Kr&7Py2LZ&0IQY#9*%B18@V6+N8fI(^h|>h! zhvL(|?c>JT^O?)O9XyzLF`DbMF3|)qMhwVjY68IRiO*(Dc}lR0%tg;7yl`>-`grh@ zteB_w(2r*%{d`LmgLC7f;)BU)sD2UoAZUwpld+TeGoJ^5mEu9CWRPmVftJ39gpgB1o~5#E|*oOyP9FZ${d zk%*+6I>{DTowfX}E1V#K45TEY;kTR7%=yVuL_200VxzDABE;2r#JH8hwO1i5JbY;_ zdErRZdM#*9dW2y?WS=M#Y=8$Q?K>A16n3}MM*`!RF!=OV!8`=>hrfR5TF>{B$@WO4 z1c0Y38F3xwo-jvauaGf~y=8H*9~7SoXGvDC0y_y~@WYr|D3%Yit-24TbS(r zLmU`ukfSK%;+vlreOr9yBm@YWpY!69BLf8ePaJp9fn)%#%dLlL_i77r3VxSRenMqd zZMrfLbQs>WR%O+W)wCf%cBUgh1Oa|^ciSXG1j1@vCT&0&gT=hZKU~~p6nyH4Zv|^e zig|d@$Eou<4(yX=mk@Yik-q&8`}vdVCXA$Al*Q!D)_B>ts3?w{Z13SV)p}+bUm3>8 zJF9Z7xbih^v2%qbjgom&_yyRPG?!Ayb~0{Eejb2ZuUfLeW^AU}MEZQQ#2)U^9)e?1 zWfk208ZYxVDM;W1;pXt&p65-J!*B5Ced(=8c7?X!zysxJk4B>$0;% zvcQZr!<+A71>Xz*Hj8WwVx(uAYthbhZJPni0RE^G){$FAhBc;FD;TVIG}#NJK!81( z-v`}Ce&KFsS4ce6&fhz^XJF|MJT7*@KqL#YDBk^GfgU~%>TP)iFUwB~fwbV-4>-4P zK19<*`xDi|gPhA7oIC!G!!pYZf0SX`2;|qCLN~LE3HFG98o5E=Y>7erC&;=~d_(?D z&+-GpQjL5KWXC1m#L)6m>W?{MC3;b0=xvz@Dd z7f;)JwC*-z%HB`N9QCph4(&{H&itv)81}i$ zrwBj`ZR9&p?}JnwVjgb9eSPhxBR?24JNiis)ti&>_Wl6M~ zJBWAlaqGBU&SQ+8nM_7!C<=DNfoDzVfB*h{aQZgviyh6% zzf?esnv5>@1V?n>I+>!BXe!X+4Vl zXId(m1W`mR$)}l;l0WIUTR`BcV}Tb?64+Y`x)pC87G|Q# zeNRpOEgoEOS(AoT?GzHhtFJxF>!Ww>lo$o&iq?L=P@`DDruEO`=fW$-3dtr`P-th2 zNi*j~!B5AH?|ERw95?%)DuQd)eg3@UuyJ^J*zC<4NpOXcWXuCul3pP{>+2VPMNa8Bw&WYz)emipR#no?`g(kT$W6EbHTzyR&ITc71p`Zyy4-(Gj2Mvy z;^?=dz(#)h)5yX3L5O#{I3?RKvm?5BE3B*oq+uspO?chUx8Z{a_4`T` z(uTzlDEGs65?#`Q zlKwZy=!6fFl9KlJ^>ut@n;FKQ)=I{uRTF3fL`fGG-Q)6cq)*-0PE+AL-`cC&d2mCsA>6251Y75~3?c zLLrZZCZohu5A7Re)7qi2<3U}o#%-5vC_Vu}JJ3oY`L;lJ$WlfQyY5pHK~>B&OGP=? zmH$WU;j)_AEtf!M!1DiVdMRED7&<5|G^Hp=NkBwFAhZNQ45$c%DiDMal6Sc8-nZUAZ>{%7*5r@L%szAG zob2!3`?GhLTXa@&NwhDWPmX=Aa&OaGz(z-->?>T%$YU3HPPsj@D;rv#-H-}4GrKnu zwlNYK7+68ATdMZz)o_(*5fD>0^6cRc{f*LIT)D$Rk zq(^EaDS$&LOp_bL5|ec}b^EzsgO#L2$&m<-W3`;r$ufn)Ya3ipyQZlD;P-#<8&Yy0^I z`})M#PN53^4phTob6h9%hcJAMA4}MT^drS`kB!%PrD~i0x4)YS#!UZeOv_|$L(PEW zid0bhKVy7n#q) z68C>Z!-;nZMj$la!#ZmNp+qAv0UH9=)qh@t3I|WzgM9*Wqp&+YF3#Zf!w3U8NUbU- zgBn3=-U^-@T^yZ1C=bGrUbxdui0ns?;yGKJ8Om_AC(YIb{Q5}p(F)w=PCi#!)a{`< zpgp^-b10TS-nC)&7|JCa+#RXUj01$RMhnVYj5R;R`$8K&E)auGZK+aTxrKTj5$0S| zaPW5`MU^AoBR(+{%Z1t7|`Sa0&ot>rigo{y8_xttR z1x|0vl3u6oB1wGV-ZryW=7PPttF>T{Z2&Doa5 zMRYu)w?W&^jO*RVYx@0gE8FRTRDor&unJFtGS*cThaV1fg`z=^ogOvZ?tYH`zmKX3~)ctvMw$4=PmXFuSO3v z4z+{P@3yfzaKs=w(IG9}g^r$T`TXGZ`(0%{{l%~X#-wD~)dgj$HBY*p7c`$o_gAPo zs3UalbRPBW@`fgqTVn|h=Dn5n%IjYZxAzHQi@)EH?mpZEQP6&@4?BRrOVAjMjwC5= zLHn+Isl9K=lP1P7$pwQi$3FV}O2Vo{NNPe!3G~gWocfH5hTTrrVW}WyUyVwkrN(|j zj9I(#V?vBfB1`+?LYNlUF}TBtvZlWu!ES_>IoW)0-ZYUy?F*be2g;b~Pnb+!P6P?- zDS&ahUaX?3?n{|oW5OzKyce|Ru$8ZI>1|heTt7mq5elAu^vKFv>fZJ1+sn$XMGp}f z@iMY2vI^mc`8=4H>=;*l^G*jO@SY*L92zPpn|kb8x5rq(+jyd{QTK}G@boN=47r#! zSzV(%%fM^xiw+QvtxFS~Emcw~ByG#n(%J(c{dS#7YVl(&OP9NCk09Lyg40c!*|W*f&Qix27}4ZD9~2E?NsoUXX*FK6;USx z_r2)rGsqNI|J?Qhyi5JhiL)mvmf=%?b7K7bMxw-Mx-2k z{SK(8IzSDCAj{)Lj&-EPor260zb4qF=-b*+t*_4iiO5abcG7JHn4p{*27#LVDyQtE z29@mbv|o=O@VKj5iX4yYPI}!2hYSORSPbIjJLN-2&Z!XL|ij&)YVY;P=RXn#$lsJ&DG^9{u-K-tft7kBl6HWJ39#Sa&``<(Y_bH z@GLUqc0Vx;V9ncc!b?ku?ml!GA*8Q09cm0Mm8Fj9Y7J7`I;Efv@?FVh=3(u5#FW9( zZu`v-DmPlFNP8jt%@d@F-bA#{Itl}qG)nW~+10fFC3K}txVj-9HsOj+aUpbd z@ByOZo2vH7#dplvfa5Xd;=}|#3{ECJNk}=JPkB~CN{T^N#+OQwTB&=G{(la#TA^bC z&X_^i<`JhWz2C>&ecWRSrA{}lJQa0(dm2IF=YEMz5;zV6q4oaR#D6_#pEwGqKL6Kg z?~lQ6ey1QbjpbOg@NK`#e7;oVF(Ww5{jHv7^HfPElr#+E)RGcjcamg;p?E= zQL=4 z&=RtgYqFJSVeyL{3twN%)Wdwe%#uo`qgf&Gh_RiBT#J}HuTT7?shP0I%g2}3mKq|V#0>qTP6A3G4GrJQUz_BfW34re~7{CJG-wRgs-x$4-7AvZs= zBV6c7?XW=wzcL11M)X5>Gm`e`HfU>+@~J#k#m41!NH%>vvN1Y2{#?AaESiU+Eojuo z3z0%8;(u(VO@*{G&%70vZwk@B_KDcKtPZiwD_iM#NGrubyi*%%CS+OQ8VgmM{2F+0 zoy&&rDGsc;U#0gsc7}$lzgBsh zIU`tBc6K&tvTJE|)z*Mh$2dm7qgXH)tk}nYw628M2F?V+{BunI4PF~bw*teCw-&HI2)X4P|)>YtG@|h+}8D(Wza_G5w38yibJQ7I)N)?l%ryyYhK&lV;XSg?GYYLt@3%6>-|Sjgj~B!q1EOde**q zmf=as#kiv$V3lU2Fq_RQgs3 zRPmzeLRD3-Ov+<5AvZegQ(eQZ=|Gr$FL@cJ#+{N1wikM{n1-wFHgViy7O&? ztG5Rm|Mnl{pfX|r_DVqP?aP-igASy>KIixM^Ncb4NLap#*fT0#ZxHJfC}edcCini8 zDi0lO^k;9Z&NwNrvsCygQW@=F`5S+eaYP=Mo#64|wAJ5EZ-WGdp5Yi;8;)%!^XxBU z_`16b<-X@}Y1;QjcK;H-t=pyTl(5GK`JlTC%;L%ktYa^^wGO6TW&lpb`V8TZ(TdmT zB|^FNPD$#!PJyh1-fY;BC>%Te#W^^(5AR3gJYVVG_jm7wX%>c}1cLVe-!h;40W9dZ zMQJxg>9>XkabjD)h(e^2;YUu3Yc6X&w{D&KWjaw^5n%8DWjtAVY<3`vbf>2^Y-Y|Y z_}5Zm;_m_oZ{cM)fT)4#hRC2hBP}xhu=Mbaa_7wesGNtDZ(qsfqD!{(}a7 z>b1=tOBta39MG{Zqc%d7UEYY8Chvzq7oKUfk9V6BR##S5CVu`rf;7?A&QxM13QER- zP{J)bKX@YC_30f%rMK}dnJFCwRc94Lt9TbMJ8rwYhfk~s|Cs12O3PPaX$jWE@0QET zeLCsw%jnONWIAkGIaeQQwlQ-`RJsoL$jlU=96m*h3? z?({ybz9ZuS>PgFyzs3b}8(mjFLi!SBX3I03pPneDnOjF03dHuUxU25TE3#2_fBWj& z9w23gch@*z#F&8c!dH6p-j|sgc?Gi!xE}@k)^Sk$XCbM*&CTce>Dz$F45)Q8H8lle zO&}H*k847Y2002B((#jBX;-?Qs+>17Q!n8FkbmOaxBeF#uFN^NoDr_I_hgav037QSq zt*=X8s!-@O?7duNu9id9>PUB@+t%Xj0>3u;JZ1g7%(*ed8O^_lpzQo3vsiW*&VwgS zZ|I6PJM3UYt>vl^DRtSVFH^l+!SZ<1aKjWvC?p(@o4se)+HH5|fAv4|XDo~ZDJ)?) zpCnAAKT|t9`nE*<_cATBxw+AzC2LYBS*?Qh!n+`Y+n^go7|36%*owQE^bR56m*j#GX@*o;2r&H;~w z$zBN-=%iD%X6Q#%KJdZs6BPX{;hv<;Grycfk-29=(E87Jwm%JK-dxt+-MltAu~m#- zxpYBwW48#Kuk-bpqlNkR`Ch$9|92irz#IS3mm6hcWvi85Atr$@i48Zkgx38?_}=5);lk-oGKAxHFc}V z<6>x3><{ip!P=F7Z&iaD+d+j1$*ZAJ{x*HQwn7jzH_%@8#UWxllq!HkPW4~ZV#0>Q zoyWW2I+P-$5%boK_T9WAfp$T?);fh$hj(;(4rn*jJ)Yuv1a~y1uwMZ_oeMeyUKmib zLJj+A@O=d}3&Wby^#6>Urdwg-;#z>g-;J_JG9tK+IS|{we%}%QMP#r=`d@%UUJ*X+ z3;IM=gFmFak^PUOJxWu}(DOOI6OZ{s9>Z=J|IL&9=0#H!cAOU9PWacP{`FU@kfa8$ mj*iX+R6z}ieeSu(&vyw`R+Pd(B|!xM07FJvTonLdguxdTG9vg*k7>yX_+img z{gbn}nUjg5mA$i-oh<;kr^Qco+OAV!Bd*ju;uW>_md?sd#j=#DYhWHSd?NakN?>Bs z;c|ZEb<#UfH-F|NmlqB5_$^rH>U{O|VNg+N`#~XQBG-(I|7mvnUrzq9_7J8<#-*%V ztHCqxNUJedvvyoenC+RowPTsNS;pgQ!J^A+B+aAitd@4TRr1f(q6|JNRew2((c7z1 zG@6xQ@Ny%W8QePc=VV!%6khLsB|^5Z5e`a4Fkbi~`fuX_@hcb6ib2?cYGCsq?owgL z>vUA!(NbZ!MO4nwN@2Qq#iL};XXd}_LZzWayBP22C`l~tdQ<1M$pJtDhtK;rfY zksj|Y<9X9GVm&{0Ll0RExA}b_VE;ha)?l6^_mPJt{N^_mO*l;+=JygR4bk_4UH$!{ z7_ms>*rz(b+r_Ul5$F1<3(C_1bGlF>KgQQ6tJBY~Hf)}HIsbAM=S2A?&M2>9T-G%U zV@&Q^huI*vpSU@C+hE;LlGNJH*)~%bZqU7-GbtsLq|%ae3P#IH+*yaELRDg`Qh`M{)VY-*Dy35nE0g|7D46(ALIy|QYrxsg_ znU%R_!4conVC|gjKues?-yo4K^WxBm@VZowKYy*~WzY8;KBuI_XvwQMYDk`T>5*+> zhGlvC_>v8;4#p=NnGbigWJdRW+#1|YOP<*tO!G*;-X8us@!O9IxeNF72R|IV2)3gL zqBM3upXmSoI3I)E{_XAWW5eO;Q||ipN(LL^qXqH9A>%TycGB&Gi0^{Cv4SusTZH)d zZ*A{yZ()EXy$2#B;FxJ?K>jOQP~*o_CCz93v|=Bqub%e6(`7;Q4K+)9a&Oms0ulN3 zwVM?GX4lRB-_KX!dq@{VYvDC!7Hq~#^xjSEy=H{eyRlC!C6uFY1G>$65EA#j*!^#N zY&fMWmFCM;vukVd^7HcvmP?iC0YE#jqkaw#5axqMrSR6Yr^mpMq-1ss*cDWZT;Bn} z+@cfKUj~NkiQO#q_dO=V+l#$*JW4Qt&w!yaW~$k_#Q9A8uLHDA>xFf=4S`nt$2mpO zX#1>3-WlD1pgX0$wn%=j;bz_E(^~!6v$%7&g>uN5by2HM zeiumTDRm@}j|Jsv@9GjgrOqpqr8u@;<5k;2N-BYCal#dbs{G9K#RjrkeyT8V68L#=)B)WzPL$;@n>1A)D&xcN6#ImQ%1vMWX;X`L7O-8j-fy z*#SUKh-mwS^Zjt3QE zpje5B!{SOS=iS_^P3^8S7+9cCl|$3ORX?dJ7DhNUuj_REmv1)OH!9>plMEq`|3*ii)y2Zb%0N1PJfY>>!hTML4Pm zUH92tB&8-MwiL2@MM3f5RXV>*7X)&*(k2Kw8J-vVj`9kARXrysXJvakxTuKU^4I6V z32XARMopJ*+I8L^wPu@n_~_#;XDY}&ul5iCUauoEeLlBgYGP_+f7W2lQVACquG&}Y z&6)=6Us1Uu5r#kdQfzK+_J8!%XL0h-Dhgd^j6A6#s4?*yit%{* z2nz@2aJBHko-FtXvmdlJ0c5jyFm-3AIQ1W*oUD0>{Hc)Nb>$&P{odNGYJostfC!c1 zM5>Uj$RPbJUNlp2{i!?-ykE>RnJ83@tMvm$#;p+$sLxo2|3Rg4QG_^4KcXqlF0N#XG{*6x< z?b9Oic!eInv+{d~+cUFZb0}yVUx{86PFb&RZ*Ny68v>*xA_17AOXZ(cE~KynVOwU^Tm7)5wIGK_&QpE{GDncfTA^5Sw%Cd4(9N8ZNHk7gRhQnnW=9_W&GyO zShG*eiJH{ql2>^a(4LTx8-A3MRCl-jTrG5SYcwn;V8+#@hx=nz9$>Q~g>nKZl-a70 zW)RZ{Z_ek2S-KSF5kzc^M#HCi@vtcR-?PoZ$(unST{y& zXSOwc^m;dg4*}G{*G0gRY)sW&AfXD~58UixoWm4$W6uC`Nxdj}SDh z101uZ{s8cDTSXpTIPVHb|DtZj1{gjIh}4Sa!coD!2{8{Cg_YmhCh7-J{7*g=QBsLu zQ=k$5|9K4OrEwO0z-)~#NC2(p7AXyKj>I~`e;jz=_wU%qBPgf*vtHrXKd%Xn@gv7l zzKYSfz~d&qsSXvQWwWU_8`Fxf4lQAy*^}ecE3lKCD8AFQO(b?bScS+xsF3S}!o$Lhsi~>KTShH2;Em0}#n+>QW&P@d z8Yn8Cm{M>tTP8|n^PA-%oYQbV2f;KXpwFq?9wl560jdx}krJjy-O2oDpv$1!RgiBB z`#nsr1o5lYpRXJJG496lI?d;Ay%U(GEFE{f;95eh9P5oz&0&xj0YF||;E!a~gXBkL zR)NlwfEm%0$%m5CQWd?F9u_gJ5pfMH#5|+a-Un;t_wgy|F!u0JRordI?h9uKu#>II z(Rh(B@kwq*#>wnH>FpP8sO2CcE8geDMdJioZpi-$?BtB-V1-j$}@tqqkp9p z(^gTkrXa;i*@m~n`>1V28o`-gc{s+?$ZQWvJ1r4O#|#{*ZCdt}Xi*UhV2|GcBf~?& zF6?iqFHK4&o4K7znrMHe9*PykAk{ofl{w z-rmH>EtkQh{Efp4yFkv_eDUy_Zc+}Cz{ZzHNjfoP6qL^X7#cRvOFI;iiC|~=iDnC{ ztK)(Gm(_U(lzY@Nz3Y!N`6nZvnvXmbo0f^Y4b#h)i(n)rBsxb%uzY-cLc+rQHA@3E z`Ip;jsF8F2Q4>XgAKP66k}|+(oJr{cmoWK zjNJ7N`{_OivOBIU^eQ)bZz7-wUSu|sVQ?h*PLnuG83{}gwn2YL7X{DpX2{g~e5?>O z#mKS98dc1@It_%sH6gGu_tw}Z6vzNubP6U8(j(Z35;}$2t zg8KS-@!uV{LJ-w;q6jwpsx%`BXiCN9g6{s~$?cCd)sR8 z^+7!obdDjC+D#9v`(tu#_|#a3%{}Vtef$qjAbI0Pb~I8^zj00GxIJP_bb^Nelq+Ee zSizq+yX%K*nGbi3yes^dOVg@*wft&Osm6)U6O(8|8Df`ZbR^^#7l)TuaQBbQ`aK@1 zx|Wt$w({(SVB;l{ME;RUoR#&9? z=aU+buvJwK?x>-U=B`OWOu>aqHThk|*5}n%1nH~k#>w`yE`sw)z)zsy>i+@0?^i%MaAonh=fD}Gu8Ie z95Kj2?(__&qiq-fz}N#|cszYfR&b1Qf}<5-op9l>}fosMXTTQTgD0Y*`b1+Rsu z_wFoR*i-pg2&AGZI>&O!yy#X%f(_&nYkmUGaHz~H&M1_(#C!Kkjgeya9TX&sbIhPq z_#$m(RctAY8VK7+VwOv(iSHtO{EI6RJLuB4Vww)Qizs`wJMNZ?%qawcK@0#u&aOz~ z;*kgjQC9RU%leFS2(2c4110haat{kAW`2P4lK(zm5IVt;4F=g{~et22Ux=Jo3?0tK24kV?@^w^tM!75f#d`^R-e$x6#Y zR~+|(Qd1~`oK0MAcZ0+&XXgIej}QIlyt9X>FOtC0v@xH*yc03%WUgbN(&n1Jz9088 zlG4_89G|(RVCI)kERwzm9*qDrRYT)bLIbRJBFp;Vvm$?)%WRy_R`GgBIzJ)ETKkRq zWdPty$Bb4;F|P5+r4hkHMF1@=Ha>n}wpg%ewzA=2({>|spl|P-%ZStXV~|YC~$hM-EWk=0=O3+my6{Db3^v3giE3qrG34;a^FJM*&iXJzdTZ z3k!!+c7Sa31HLl=SZQnXbuRi3cj-Pl^N~wNlZ77P;OxxQvjoVz`Z87Dz+8nFDC!3$ z>$z>tRz;LCtEMjlc5%Y^`2jZx>o3bi0aEjLvV4dRND2&oXw`4?g3#<_Lo8-rrkl6C z@y~FBoAQNGxE`P&Gat^Xz|*^*b40*P2@E<6bG8Rd)^Gg~x|8M<>Xsh;3@Jq)1%21l z)D-P?ezLp^BghYUBY6|roi8LDA~sc)P*Ef^&{*d}{)ewH{Lc-Rop&udsQC1#!G=v zIYNGRz;eE>JV{d}TZmkuP%(Y9S13J}!q+a^2DA9w!-$v&uorwXCMhi+=P%GmHS`vI z=A#pM8VIz+Az!7NzBad{oHeAEc>8v(?t9zmIWZY9nA8@7A0KC!N~>6R?hCSP*dCEM zoA)3h^cA{?a~|P!uz;_bD5Z$=dFN(Xn{jtY44jw0t@S@&xBv;2rQ(6JS@bv*Fx*sf^h=Fn8E z>{)(<)*@;;4+ik=zzr2aNS%sv0azsNNc=y5$*tSo~Juq8H zd*=(5oLCB>fW^q}Ouw6atYMyGJ&=z` zQt(+8zP@jURXG-!1etE-uDQFbD%7-HUAY|{9ZwbsFaSf51**hNZCi-i79G*z3)Pol z5%B*0WED1+KD)OMC%<;?9%K97$9#0dr@?(wCSmPK-dDuKHf z#{HqQ{Nq-}YNF|vn2SPkrlIp6C#~w8UO_0;8|2;@hZd6T?Ck!50XSfi0AhS@0Xb2! zYk6$4!sTQa&Yoq!^RTf#4sko6eXr_`_h09WBZCC~xR3>$pf+hUJ%FqMM^(8;e@ ze@wQsTSyu^?(>-Yh+fR(%Mk_>_%bDD#$9y^Mtyf8u4dsBr})M)fc&m zyh#ntyyYOmgq8`^@Pxh8EN!~*qqXRCVl$#;e&Gn9?;2BB*}~vJ&~dRK)(v56P>MD6 z&7}hY(QI3Fv{l00G=UdP-xW+P?OFJvrC=f`NF0Rt+(DALo#11Jj+_4_T?7oNz$Bio^sfijYy-7sb)89c5pV+UGJQSyANLw{ji z#VjHtwZ`|3GT;FxM;?M-v-iZd-s5sk+Q~QP<-wf>9Ad{ST+3c8M zIpVq_+pXsL>-V!n6FAx!_y~a#O3V&T64V!pIBIX zcJP)!r?Y^!EV3&S5OPJXe}Bt=+U~&Pg3uD&7Pxj-p%eY_47qmOW1E{0MzH`nXQFG;2@+UCyRZCU23=eY7XKrcEPBCsGN@8==MzL+ENDWnMiC*}8i z)Y4N+Y(cj4x>+gT9M}8iuAJf5ui1+g>BJo#q;n^DgXeoxQarw zt@FWm9aIrFVvmE*TH&PQd|W^G?cV_cZ1E7v}Ug9=5GBYf>84&FoCs&B0$cm&ddZkbu4Ca>|p zi}Uq%xmj5q2ZDaChjT{jbeX`rcfzu$cNFNI>to4lf;wz16($DCH5U)>t97uFGtaSy ztm9J_74-bp*1TYVZDta}oIAJeOt*TO-&;eeFhEaF&!=l~0$`=E#%<^dfzt|_`^wxg z7ky%MR8-fwmEiCj#FR%wXAleM>h2z^v||b0O=WK%BPe+57S~3XObINsdd;joot*{! z%^YDtMtDRRxztLeV(H>Kk1|FI@e6|bP*J_V*^M|)9yu+uE z2ZxIN4`3Tf0loDN#e81WsOs8GpF=fEQSxZFfg*10)B~`x()o?(+>}3fV@&hhDXy&$ zd@5M&>Fn!sCQLav_~Lvpivujr8es~m)-D4uZSZ;GVi5N=My_1?Q7)pC*;Ne(bfN&S zW}dvmKQr3i(eJ)wU^3he@Y-5P5{IE#N4ys4=EJoxioS&rb{B8^vbBv2QQ{PW+BIfy z3;f{sefn6S5Is5XbNooxP*U<s0h!{KmAfI7FSlruG?I+nHv4jOecm- zA{*e4Au(g4H_mEYdHVs?YpAl=z2vt1b_b7x@DTVNNLG9ZA7%fBYnE=DT zlf_AQ@=0Q6DZFw+8L6YhV6+jFt{n*K*(_v(?|sE>Q;QOLr;~ep3RBqEPxm+fFrr}q zXTJ1L=(dcgwO*p?A6|>F3yrV~L5~qRoHPwurH+?cS2s5UUoy?zciCx%K0sCK5Ig}3 zA_2=*J$ZiurAz;CSyuw(W%y?_4N6r!dfeQ^E4%UgR8E>&28Hi~BjLG~e1G70F}I3Dhov$&fIR`A*ELSnW{Eml5-vFNN#;q6N{ z)<8@m(srK%R{aOetn8a+t|!JgSs!Lun>`rvpR^$~3an-O>aFW~UwsNL?1q!(*M?X; zj^5LLTv&V{p`kK?hh>-K-K@b-_->CSn0|&^*PDqTT47}KpiSn(GhcH3;fvjznkgc5QZcnq$3$8Bd;@$FfT7KRaJVQQHJa&+i1+fyUsGtZ8B zW{B2K-ks)`cY{WdD4sQTzTF#cK3Tb5J`ZH`0btGOiE_yWxkx|Un`#g4^W*(LEqk>FqXMrG|qOT0Vn7Kh1639%})tG zwh&43el=GcgYQhu#KzzbQocq6)M!gP_PTVfeH?etYB<53795bAN&0GOf>Id&ijpOU zpMgSRJelsd=At0vZuXKmmFoc>MKrt`uTb&u%W=r}AkC$RyI>oK{5IzVbE_0J36xYE zux~ce{U@DLNu+d2v~a>`nZJEMA8k>;EWe?Fh;__m@^P!~TDbpYfzXIq-snt?UC4v= z=%9?lBdvV2YX|JTF$HTC{{szt>cfYvUIaCGu)a8dw(`J>>B<~pd+~ub>!rLH-9s(5 zitJC7Li68#nmW>~{O!n$w)wt93j4i-(-g_JdZ1-WVLJ`+rem6R*3|dYYz&c#8T6^Q0ujl&V%pdr45kqnKqnLNFaXJRWuNxL{ ziWcse5bS^?4vVOys`nmDq=V$bg9mn179$jR>HNW9@xpi{LjZs_A>AB9{+^B9FdJnq z)le_Dwqh9yW6YoqXaZ=D5z z1XyHvAexz(;E<4@rbkiQd*7TGIW$-NT@eV?>hPN&OtM!(D>rYj=ltA_431tk;i z{WYr9)57$AT+`3RN~G}0C8IC3Mp&uHJzFxy35(MjvG^6AZMeW&70u#n+#7c*O6bMzLrf&2x^KYVSy1r%b)) zYEEr}?df?)(*=WqROjcThw~%u(Ak#cOrIuDPxdqVVSxwdtBRp5Ixg~e1?coDW{tka zE$MRFs2=W*moqVmiNRnU@AvR?2Ju#B%$=3h!@2(ensV_(_J$-uP+2l90Sx?m*}vcy ztLxdRziaXDNqkIKkrMTh#}mYy+)T#lAWGwQwUk+t$S^B~cZSvL?p)kfM`(89Z<9l|c9~e(-F%5jE&tx(=im&OwRDi8Ek zRQyiY`_`-bD8y7$aGtK}+o@fjgopt8N?nn?=l!UNXjNsT6-?;oKe+`@F?`Bazfiyh z${;2&u(hoiV;dgl>CwrJ^qoy2GVD*Wnthm~1s;UTwEHJN;%&LYAl99CyEMS6BCEBne=kDSUqdTZRA&w0Qi_UfkA`^ktu_yNoF^|4W{*cNcQ*Md*7jQXX3} zUoBe~LwBxINy`1fdhJ;X&kxo=(74C&)&O z&XmL(f|}@H+b)~!AVUR6U{x_CB`d@)MsU~bXPa0-w__ZN&+TSnB!v^$6xD5VmhmP( z9rnypqFnjLa@r6Y7+asdPHN7q&}>?(Bnyh%{=Jwv0B~F$9Imf(Lez+s9s|%;XW5>D zeKGDN;IfOVw(^-gdl1zmkU>=%x66S+?O8Ff!+b^feu>1FAokU7r0c&!JUQEV>ge>Ucg=xUjQM&+Qsg~&1Ry3ylcLU{v{qE zxG1ihfAL%KcT9|pS=~pe;AdvOKAmSii_6PLbYBh`?HwTjbklH+pd;@mM@1sZ|p?uWl-ey=N~@%rK4({|(E5uQgI?cHPa zWqcYjILOFr-zy9fx=u-qYE&0$Zy~~6BdPG#%Jj9Bn!w3tnrZK*6@PU8tEB9V_Mgb^ zqq65)EUY$*#|>$JnA@A1ER(({&wCKpGuEs`c>w~CQn|m1Dkvy)3j&py{K1^S2_mINm?SKD%DU*pBtF2Md>-F-k3X8 zlIHvJSsr4YI-*p{j{20%*O>c+wQwi6k}Q@Mk$L2II;^Js*lD~Dq6CjJtsakvQ66b+ zCnUhhE8UXk#LnHH8P7E%$v%}#FCEMLP~~Osf24BFdcj&9tqo56r1S`*P1s?!*}M<7 z+?qar+m}=5m07b|T0W|4Xol@R-d%UME;iFJF=1$EXn4k~^%V%x^Uu@2n~^=oIRk+0 z;dI>GR)_W8P?MaIOrc{=$h)m0pIEwc7qSsSi#vY3YCCpGH=PktfBv;qdqI|Ea_y10 zZu3UT=Y7^K)W`7Kjt9CZ;?@z3ZC^G@T8#eqy8`rnjl0`T0W*PT-6Z|-83ITttvEzz z%$ay@f0%1>p(!jyN6SwKW0wrd-w?)4U4C-ZrD+H(8JM@Cz~0e_fbtc=Wit%`XXoeX zf@BIQ!D7LfyNCSFJKrZRnHC=dLhO2GVw3av4d?QMnltQ_SXKgdO;T&xYWKg9-6gyh z*4j-C2lTS--obuhp2?Je``98oRPgi<>9$a*YZ=S(94V`*x9;?>ON5vP7psduR@<*^ z!O>AucroX?+oZqW82Vt*lA7;PIDL>FiZ}P&YVrK|43-_?cSs=TI9cbHOj6LH^*b9* z*s}i-q&^fO&Kou8VW?}&UYg@*kz}ULO)oq`d-sL&+=R#7qMq`WbWRSJH>c`pVVx7& ze&J-*T#%pM^H@V=EHbdA+%DM0hPp|(ZEjFrQP?^yR9t(JL@qu8KCEstHrD1u2#?$Q zj8_Lv4rI*b^p{G^Cc|3N(q2so!@Y4UR zhZLB6&3xD0oaKJau`+XD56non2kw$eW*Zq9_5b-J;_Yv9@yyOkt|w_>yu$c&8CLa& zdCKkg^~l$WqzY*~UT}$Ctc`*XBRkuLYE3%!)Z$A(JgA-vJ(3n<>zHOn&QrQekk<8q zwmzz}3El`IgCnnva_qX#Z`nUZl292w`|qgsKY+jmDx$17=0kSU^plRosuE=REeY%Z zYD#ZP)9=R1Nd_OP-^2a~(dPaq9R@_=HG=RY&@gjLGk5dJ(PyoctgNY*dzz>Rl1ni@u|h<2Fd@4h11?WsPv;Wje9iii z$!Ngz{wbA)sep7au5_e|rUq#c2D+j4%f|=9Jo&Ea z6jaXtivVcbzla>TpmRC%SD&A{b4>SL{Jx0}WQ?Wt#{7fZdXrg#KjP~+ESk6*99;XV zQbcP{sqqdSjw++MwDNgNHarxdoNq+#o=*SF(0bA(_Ic>`OD}xlP9jrE(e*acP55bb zdbn;0%T$7xklVe#%PMvGmMP(q-oEVPh`GG5yL9OXDRV6BNFG<{NZL;cT)h&ZFN?*$ zUdAKk@34qsxO^ENyd^2N8PeJG=L6b@RX*pb%Vk}M*%Yd%*Fr1{ma}>)DlrXunwmkY zG@pqV$H2TEjv5vox^Rd#JylrA^>JGJu5q5Q>>PG_bFZ*jeObI|;4**tTj^!9qI3$A zF4D_Ir(aJo|75Uh_b1G5A6ui|+FyA;X9Ud?XZ_zQq=P4~8$8YnWZ+(o0~ZQoWS6+t zN9pI?_s6LZ>kap}r223f1$H4^cRdm+=6!d*4`<{K_ftx#wuB;wza+OH_ofruBvlDQ z3zb4;GbJ29mg37ANx1@NwlG)rf*A4k)dJAogNP5Ej2k*;A(k|&U!OO&1^V+m9Pp56 z-%?k%(Nin91^UdO$kbrz3cO7f1l}Ai@>|R{soAve8x&tRH|;&d8~q~EGKjkpfBYbJ zlu}mXROe%An)m0zGA)kG$v4)8Sr_0i^AB^a8)C6$$)}r=xAu?Z_9y#jpZE?B)!mEK z%k1k{roVsxD(mUJz(WAmIiCXu-%wh?*;s{@#tGk_=#|?k&d1-4+bqSuu!NDF{ng=oJrScyO1klH5?*QezWL*#TfU;&GdSenayUyQ#6HubsRU5kNGu=XP>)B zT*WFJtLGrmiY`}iK1gHw>M^Gq+Opgkt_DM&v*~*V=dPv0F|OV z^2_wyr0JBT>8Qtb{Ru+3UQv@5NDk!_32@Txfg)aMZV*{(K)Oats= zsEdn>Bw8W=dlsFp1U5AsXz4}Zv7ss*ORMpB@bn{qp%>~1PHGz!A~K_nxAFJbKoLTX z1yC^s^6D6b04%xVY}r{L8P9;)oqeJT5vXD_@NAuwQ@&wok8)>!sIO{Jx%cF zlmdDS^(Hftj9vyzZEY$S2AGy1fZV_}ETpaH;9pHlV|=u|mtvFOU^)4ylWKPp)&6uj z+^|B=a{KPrny2~oxv)yR%aARSLquF09KXMRWkFbuj`vONnV%8^W$ss-KZ|XKdItby zHK|`M@5is6Z`{C0M?RI}kJ$_h-%&)%Z_JbASnrbQqVw9)3xt3QM#o)J0tC?amcYnW zoF~c|g!p677&VS8lM%9W*i&=B#m8^1xw>NqV~`5u>0{}2w>oGAO z-m_7o`I8c@Sncz87h37UM{a#Q9ahOOz%T|Ppj9TuJgC9Eh!f&P(~)T4LkygJT8^3Z zqLoDUFGS*4$qX0%oqt!LK=cqCM}3CV7(nY_U@~+ zpJQ*$uxp>}eaS2|7^;e^Zdd%84<2sMkx@~*2DKrLFE!Ry0}vYAzkJ4AAc$-3wr?*f z8T1dLukStj{*jG5o$w`hovx2x_t=$0^v-R-b9%mtav$6_VC>nO`U4C~`2r{Bm-)aA zY?9HK)^k!Z_r5QCdxTIyOSVzpQIx<-jnvU;KEwsL&o(&6mw+8(n1?uv|n)rg9`lQ_|5XjCqAaoNSpO_e4IseNh_~F6ZyLL-Ex2aEwJIxG) z+knaNKw^22fsMgJMTNxF(7gLew$BR*S(w9*7k>bh9O4Pk?SGMj&>xDhW}p2;Ez`bd ztbh1s@Q?EOMk=;Xztt1JalI}l2g%ula&MOdgi2DB-?;I|+4fjQcQAcO! zj6FJ+o`oE!@;Emr&u~~<%o|`_|Bba~qq8J;ca&|XBuG}g&wR&3o`TT}KQOIXv+R2d ze<+rVGv|a2tXvxiR`2=$Xw%A~XIU%=kGTM2Q##71Nf$zh5(wu;91Iocw|;+F%ife~z93OPmFhEr3J~KH1Z4JS7bF!gmAz>a@WhSmlV9iM#mW84T%@2F>M03 z_IVY}J6^9$p|A4Xbh?cLm?YTDqzMBg7Q)lY%T~Ji=WxfPCs-3%LV&7e}kd<`&q?JL3gc4 zQR^emj(+Y>EbA0$L9g^Qp3O3I#OBSF=`xY=063#{@a&HpqV!GuZ{*B^*7aH(_mJ{n+S^zpKm%CxU$4 zUm~72#$s>0h+b#b?-k(vB8DHxbPF&VAVt|a;9ryr`0A9HBb!9*0U*AMb#LB|smmEQn;$MJrf0oPOY~ScxDSjfCZ@ZYaWbY( znVvJ$XZsqo)g3 z!9~5xaoBo8_y|r=bWF68N~n)zajg;%7h-IJ>leqZR zj@~(a7qdU3b{itQNkCb~ILUz)d@`!|}A^3~tPtxJ9^H?f<)Xr9sUvz}?Vh>nO z;t83koR{lP)4C^Zd5fXMXZ3JGdXDH|H%JPvHFcaU*02-M#GRF0L?`~SYtbMCI{-~y zE2(nkj8?rU7}OfvVx+RB8)*Z5h|U@Hq%WVU7V{(V1kcZ$AFpb$(8WzgNQE-TUdzWd zbxzWdbK34_j$n5mAq6esmW{DI%)Gs+JB)Z{ekR;)76yg8tPzteo1y**L|efK-**Uq zI{yd)n(BOS5nHA12vZ}*^RQCekm1Iaei@aZ$doA^6PLx$*eCduU~nuf^Y58W|Fz*g zU!!23v%_Q;M!6EF0G5e0i|E)dgYly54wxBtu9ITI{GQXoJYpzKw*DgI9lwTjdw+5w z=T+5Ggmlh^$;vVcj*#y%3HpOLDFNUG!BZ1mkYsoPO-(bu_m>>`#umiq8WK)nKT&d= z7Sxq2{Mq-cIrK5eg)<2Gu{WT(x?H8By2l3)?7T4W1|DKB^vYNahg??B^*&ti_y~Rj z3r`$!Jxh%=tvHWsoXn5m3h2-!?*9M;4&*1MwDkG}`(O-e9tU`;z;@XovtZ`HY`=#C z7Ms|&Qs1GyS?W~5RCHy3`x%VG57I5`vf=om0|vdJl%rlNyr=%SN4-Ihs{v@Eb1HAZ zmHw}}TezDq`!XBh<3K{UsQ7G*i#y2DQYfTI@ecob^XZ0beWOUMCj_++PcXbLnud4jb3GaV>OW6NG%(6pln^F z5|n%_xA^$z5tsm_aOC58#HSexRF)%Z*Ru_oPxGkq zh&u&E>eg2uy0D9qUk~U_OkAQ|cM~H@yMQ~}8U&`3D1pgpv4zL$Wvo5q#lbPlwT9h( zkXGj;vf64`ip%nJ9_gkrUWqb*HfDX2(-mE~h*AuDj5&us#n~;HSkBdCTe6sv^dxj#+(IH|o94Lqe3Hr%}eea*r z)0XAB@8b}(m6%}=xaLoSSC4_%tP6b^Tf)TuI~uz%53LV`?B(j%06()=GliWDr#OxO*$PdZKIk*pgoN9hM^?{0j6Fdp+1LZS zZ)KOAwi)<4c}^jKzDb`!FvlRRR|QY{Q`b>-hYr^!BYhEE?~})?Gp8D`)Ar4$^<3Ar z8r*2W7*M2S$%!4-C7M2yWaKTk_t=e>RR2aTq0Mjj{S}F^<=Nlqhg(9z$(0uvnKyZH zu8ST@BtimV^XrcC6vwOn9Xb%K9pY>EIht9o8|=Go{R~2Gyi5-@n&jbqEv&0N2SQky zqjjY~#AVt?)%S9VL|Vy|qu404zWCBu(g1*H^YVWIi2L6968G)e!rVtEhJ@SmxSi8% z^i|AV$Zad-n%sLStE$2puo#{vQod}2*Q(Sftuu2gUX4i!Cpf6T3;7o^ca;>`~8 z79F0ifjcMBhyu9vz;%g;BVyTgBLv%Ne+?G99yHU^Jx2uMHOa4pz}>fKUIDo$)-V;* z4mYQo7&%-RZqLpjHss*=Td9lpkJYDyu$tE*ZuD2OFJ!z7c#`o1LU%;REMAts^E5p;Xa7#et63Kq<9a$VY)M1y0 zu2UfIe3`1Qyb3)f)C`|#D2vEmSB-PwsH|{4kfjzaQ0vM`Mp$x z1CRi8%4J-mR=$0Kpy*?iUA6!(BPX1j`R9eI8?g!nCS&op z`K>B$ZK2Em5f=pL`&c?ZpSzl$z?L6%7&RzR9R0CO^9JXr2v9IK!31Ya-^eDa)Z#M$ zabHnM3H*bC;U5$%8r{hwr3mloFOEbB@9B?|M@mIwO#fmNnV_3tl>shYa)>Qma)`aN z=pnAOtk`UXw{*!NrU(eaJBu9K2qEZyd@c>8WyN^4PmIaqCPoc}A|MFk(~de)zFA;z zBq)s2O`f}oxx4vAck$PI?Tn7lQWG?{Z{z1PxHli>)7l67h(;&ec%omN#tGlQkQUz4 zAMJyE$OPRCt2#nE+R$v}okb6E=_)ltYhS182u9H*q#-T8uwh$B|63CO$NR?uHOnt_ zpY9mRU-GlZj7I>{zu3fz3u;i;Q^k$%y@ADA=qx=dVJ3&=8<;T07H~iF6EHMEXCTx8 z&X~TDZPUbY6IE&^)b|Pd9-JS?rGK%B3Fa46aUDenM)Zr*#P2Nn#c5pn7n@j6#dVxK z!Vg~z?+KjzViS`dN61IBnGGgd6UY5{%eMLCY$5gqHS60Q7&VwTJ>fBGFu%WVcYwR; zjr>CX*nccgGwx!jSM1VKJlSfMV=Xw*ArU@gu2O zyQl_8G(qs@H~J~1n1|+sbkbA7{G1g53az|`U0kI5g?$rMYF1Uur&kpNIp_IS;OxvQ zv=8LGf`gMT383Jc616@Mypi3M5IzU~asZVncq;-DH z$^4{6-Z8_1^&%)?DlBI-fCv$vDf0vP`ahv~+&(Z656*AsFL-#Bnh8cHCFeXDpF3l7 zM`)on*xvp2B6Ng)AfU6wMwz8c4zX?86Zo{M)?@ktwlsvOFQ~IG?jNQ=T~8I~m8oGu zA3$M_L`UlyjsyW=e80OApX3jqQ>^gh@HWA8-(wNUko&f-WDJvuK0RSK(;6VjN0l(=nDLDo&`aC~s zI7^s189Q3oJ6qV<0)TsF($s)$0UHkTD7SY=l68iPxZ78P3>9e=)-U=Zy%qknXUcQI z=PRE@JKaxDO;N`kl3WH-txm2EAMO|wvA51cX4AeA6~29#EBCAxk?6KK}}DBF>)yd z`1vi4Wx!38b;63R=@ZRPIWg4!mq=(SvXRa~=+BI^J$XAA@TgKChwGXq<*gVXNk?FB zpca5qL||^97qI-%^K5YYqMjk{v3%aA+0jX^IMr-u6Peh+pj0t7qeWHztdM8fMoX>6 z`GkN|wNfko6S+lxfh1oYa!;4efP3gsh0%D`uP>y5+;#dC8~0Yp!vU0T2E6(-=`p_s z&>}81tpznG3r8GXlhRvI>mHdutH*dpY?-+bwzJRf?n8ed7Ce*r7ayr_Xze1kv>m|p z@$UI=%CUnK^nw}CzcdzLsGgVer8E)ju_3s}YP*!?|ad zNmiNP=qHOG^+|Spn)-WRcv`-bam{|GaXz55qqQiQ-MzDx*#-#`vB2Je`?LZ86(B1i z`q4e}Aj`uW-{s*^e*zJm0IJULVcsz*kooz53T_q6>lC?bYJ{f4JesgPu^A(#Dt~{G z0fY(~WY$R+$#_;nQNEr(n!(S0igYa{CW{;qzDK{mdq^F2cBE9Gv)Q`$es|jcmy^@O z=Zn1F*~8)@j|~Pikm_rAN-?Jh4$>N9KY$jf%xvP1B+5X@AreUS9Q_5AC{APuMm$wG zzqHOi79mk{P@{HV-*_yqx*Eq~bIhNG8yW9*+O5Orc%hv{A;|G25g{R+?d{DC1R!Mg zjzsjAM89HpS_m{`(S9gfYA51zZSW0I@6%sc z(<#SHMQAgb_`|4cLf6ldaDVCs7bwBo&3z?q0W9@TM5Z(99Dz4ImcQQWX4Pruiy9hI zKSM_^&o2G&0{|=t)uZYdL-)BdSYCPU- zU)kFoAg8GmCRy$+OqLuy$iNw{W?%|#B$ENt|{>huojV!cvfqZ zF#y*DznPo-iV1wkCAZKNU~xswD4d{Xf2Sj#;S1;Dk(7KvMxRO!AR05XvPx@dkq~Zf zMp{GwosejD<6zerNOH@o?r1WOEldT0$9Jd^tDL{tC!#sQnlX)NpVr#10I$zOhyE8gbmV zNbss3JLR|cSbXbUpA-i(Yf)j|Z6>F^{~GAPV2jzaBaC}b!BYtrNq|3SURBkNNv{4V zj>mU}w!1N;D6L>d&kBXf;nKpMi*SCJhANLr|M>`z#`D>HkvuRR$oaQ!u-#bR*}4?btSjb;^Hj&e+_800qRHH65h zD2JU+9XmVT%xPB6DKf7UFdshlUYhNrVjk2w~(uDcMOXf#g}JyXDsf~@abB07gC zI14ngNTAinr^hCCV{slclnN>q$;KGSi85YE^msiHo-wMhG|2nH2VovM)NLmJhM$R zzFhhOH=1?xApGEEy5o-a_*c1=FGV_Vq%})(2C{Dqwtrd7)_wz3xN8Z&X9-57rmGKl z9f@jw|0adJG)|Gyv*~>P8Ua7j@b5rr$y*)07@k+ACe7+?umC$pSn8IQ=E@>Zfr==CmvQ$chChRh} zx=1=xxiQmeR6DbRGcoObDtzgmLuuABK9w)kU?u-9;~5o=DPlZ=$SposdV)L){`2z$ z1gcjE=@(IHuJbRksGcU#_3tD3IUk>Ly%oI>B^I=!$Ms;8fgY7%sPErLU){ygU8jeX zFErVd&!|*?+FzH=Jbt97f#EJ}*)tj;r6QP1{UL!ogUh5nGeG1h9m39~VH2HvLHI_n zpKy@8Q`0k>v_28@%@8W^#E$aOZ3IwA@+hclfyA3el>d6*i~oNj^uHl-l9{;tEUsZ4 z?^Oqqh2_p-aFNDxPY~SC(9zMwMMQw$t%g~0>#ijM$adr$Qn+_wNzpkRwQr{5sD7F{$9|$C~Igylir(F)l^lDuFg?>d`<9Y zVBo}d-yo6-E%5t$`KEhVaO(JjM8-H0IVh4O*mYUYZET~9BAFxGcsFnML1k7ENcs2)qnra@Q$

x1^}5BkKl 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 C29T%# From 124d8503dc9892acfe8223b21c5501c4f7f187f1 Mon Sep 17 00:00:00 2001 From: Fermi Date: Thu, 29 Aug 2019 00:12:16 +0100 Subject: [PATCH 07/79] Tests and fixes. --- .../food_and_drinks/recipes/drinks_recipes.dm | 8 ++- .../chemistry/machinery/chem_master.dm | 4 +- code/modules/reagents/chemistry/reagents.dm | 58 +++++++++++++++++-- .../chemistry/reagents/alcohol_reagents.dm | 11 +++- .../chemistry/reagents/drink_reagents.dm | 3 + .../chemistry/reagents/fermi_reagents.dm | 47 +-------------- .../reagents/chemistry/recipes/fermi.dm | 4 +- 7 files changed, 77 insertions(+), 58 deletions(-) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index b97b919e1e..af1b5337a1 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -385,8 +385,8 @@ OptimalTempMin = 200 // Lower area of bell curve for determining heat based rate reactions OptimalTempMax = 950 // Upper end for above ExplodeTemp = 999 //Temperature at which reaction explodes - OptimalpHMin = 2 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase) - OptimalpHMax = 2.8 // Higest value for above + OptimalpHMin = 3 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase) + OptimalpHMax = 3.6 // Higest value for above ReactpHLim = 5 // How far out pH wil react, giving impurity place (Exponential phase) CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst) CurveSharpT = 2 // How sharp the temperature exponential curve is (to the power of value) @@ -405,6 +405,10 @@ holder.remove_reagent(src.id, cached_volume) holder.add_reagent("neuroweak", cached_volume) +/datum/chemical_reaction/neurotoxin/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//reduced size + volume = volume/10 + ..() + /datum/chemical_reaction/snowwhite name = "Snow White" id = "snowwhite" diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 002c54be94..0a4b3b8f53 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -391,9 +391,9 @@ state = "Gas" var/const/P = 3 //The number of seconds between life ticks var/T = initial(R.metabolization_rate) * (60 / P) - if(istype(R, /datum/reagent/fermi)) + var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.id) + if(Rcr && Rcr.FermiChem) fermianalyze = TRUE - var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.id) var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2 analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = initial(R.purity), "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache) else diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index c21629ce8f..4a51f3e760 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -33,18 +33,21 @@ var/addiction_stage4_end = 40 var/overdosed = 0 // You fucked up and this is now triggering its overdose effects, purge that shit quick. var/self_consuming = FALSE + var/metabolizing = FALSE + var/invisible = FALSE //Set to true if it doesn't appear on handheld health analyzers. //Fermichem vars: + var/FermiChem = FALSE //If it's a fermichem var/purity = 1 //How pure a chemical is from 0 - 1. var/addProc = FALSE //If the chemical should force an on_new() call - var/turf/loc = null //Should be the creation location! + var/turf/loc = null //Should be the creation location! var/pH = 7 //pH of the specific reagent, used for calculating the sum pH of a holder. + var/SplitChem = FALSE //If the chem splits on metabolism var/ImpureChem = "fermiTox"// What chemical is metabolised with an inpure reaction var/InverseChemVal = 0.25 // If the impurity is below 0.5, replace ALL of the chem with InverseChem upon metabolising var/InverseChem = "fermiTox"// What chem is metabolised when purity is below InverseChemVal, this shouldn't be made, but if it does, well, I guess I'll know about it. var/DoNotSplit = FALSE // If impurity is handled within the main chem itself var/OnMobMergeCheck = FALSE //Call on_mob_life proc when reagents are merging. - var/metabolizing = FALSE - var/invisible = FALSE //Set to true if it doesn't appear on handheld health analyzers. + /datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references . = ..() @@ -74,7 +77,27 @@ return // Called when this reagent is first added to a mob -/datum/reagent/proc/on_mob_add(mob/living/L) +/datum/reagent/proc/on_mob_add(mob/living/L, amount) + if(SplitChem) + var/mob/living/carbon/M = L + if(!M) + return + if(purity < 0) + CRASH("Purity below 0 for chem: [id], Please let Fermis Know!") + if (purity == 1 || DoNotSplit == TRUE) + log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]") + return + else if (InverseChemVal > purity)//Turns all of a added reagent into the inverse chem + M.reagents.remove_reagent(id, amount, FALSE) + M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1) + log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [InverseChem]") + return + else + var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem + M.reagents.remove_reagent(id, (impureVol), FALSE) + M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1) + log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]") + log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [ImpureChem]") return // Called when this reagent is removed while inside a mob @@ -97,7 +120,32 @@ return // Called when two reagents of the same are mixing. -/datum/reagent/proc/on_merge(data) +/datum/reagent/proc/on_merge(data, amount, mob/living/carbon/M, purity) + if(SplitChem) + if(!ishuman(M)) + return + if (purity < 0) + CRASH("Purity below 0 for chem: [id], Please let Fermis Know!") + if (purity == 1 || DoNotSplit == TRUE) + log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [id] in themselves") + return + else if (InverseChemVal > purity) + M.reagents.remove_reagent(id, amount, FALSE) + M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1) + for(var/datum/reagent/fermi/R in M.reagents.reagent_list) + if(R.name == "") + R.name = name//Negative effects are hidden + log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [InverseChem]") + return + else + var/impureVol = amount * (1 - purity) + M.reagents.remove_reagent(id, impureVol, FALSE) + M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1) + for(var/datum/reagent/fermi/R in M.reagents.reagent_list) + if(R.name == "") + R.name = name//Negative effects are hidden + log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]") + log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [ImpureChem]") return /datum/reagent/proc/on_update(atom/A) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 0817d04cb8..97f94d596d 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1383,6 +1383,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "neurotoxinglass" glass_name = "Neurotoxin" glass_desc = "A drink that is guaranteed to knock you silly." + SplitChem = TRUE ImpureChem = "neuroweak" InverseChemVal = 0 //Clear conversion InverseChem = "neuroweak" @@ -1422,14 +1423,18 @@ All effects don't start immediately, but rather get worse over time; the rate is ..() /datum/reagent/consumable/ethanol/neuroweak - name = "Neuroalcohol" + name = "Neuro-Smash" id = "neuroweak" - description = "A mostly safe alcoholic drink for the true daredevils. Do not mix with Neurotoxin." + description = "A mostly safe alcoholic drink for the true daredevils. Counteracts Neurotoxins." boozepwr = 60 /datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M) if(holder.has_reagent("neurotoxin")) - M.adjustBrainLoss(0.5*REM, 150) + M.adjustBrainLoss(-1*REM, 150) + M.reagents.remove_reagent("neurotoxin", 0.25, FALSE) + if(holder.has_reagent("fentanyl")) + M.adjustBrainLoss(-1*REM, 150) + M.reagents.remove_reagent("fentanyl", 0.25, FALSE) else M.adjustBrainLoss(-0.5*REM, 150) M.dizziness +=2 diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index bfefc073f8..913a6b3ef7 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -13,6 +13,7 @@ glass_icon_state = "glass_orange" glass_name = "glass of orange juice" glass_desc = "Vitamins! Yay!" + pH = 3.3 /datum/reagent/consumable/orangejuice/on_mob_life(mob/living/carbon/M) if(M.getOxyLoss() && prob(30)) @@ -45,6 +46,7 @@ glass_icon_state = "glass_green" glass_name = "glass of lime juice" glass_desc = "A glass of sweet-sour lime juice." + pH = 2.2 /datum/reagent/consumable/limejuice/on_mob_life(mob/living/carbon/M) if(M.getToxLoss() && prob(20)) @@ -125,6 +127,7 @@ glass_icon_state = "lemonglass" glass_name = "glass of lemon juice" glass_desc = "Sour..." + pH = 2 /datum/reagent/consumable/banana name = "Banana Juice" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index 275c244a83..d7122e85e3 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -6,58 +6,17 @@ id = "fermi" taste_description = "affection and love!" can_synth = FALSE + SplitChem = TRUE //This should process fermichems to find out how pure they are and what effect to do. /datum/reagent/fermi/on_mob_add(mob/living/carbon/M, amount) . = ..() - if(!M) - return - if(purity < 0) - CRASH("Purity below 0 for chem: [id], Please let Fermis Know!") - if (purity == 1 || DoNotSplit == TRUE) - log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]") - return - else if (InverseChemVal > purity)//Turns all of a added reagent into the inverse chem - M.reagents.remove_reagent(id, amount, FALSE) - M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1) - log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [InverseChem]") - return - else - var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem - M.reagents.remove_reagent(id, (impureVol), FALSE) - M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1) - log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]") - log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [ImpureChem]") - return + //When merging two fermichems, see above /datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)//basically on_mob_add but for merging . = ..() - if(!ishuman(M)) - return - if (purity < 0) - CRASH("Purity below 0 for chem: [id], Please let Fermis Know!") - if (purity == 1 || DoNotSplit == TRUE) - log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [id] in themselves") - return - else if (InverseChemVal > purity) - M.reagents.remove_reagent(id, amount, FALSE) - M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1) - for(var/datum/reagent/fermi/R in M.reagents.reagent_list) - if(R.name == "") - R.name = name//Negative effects are hidden - log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [InverseChem]") - return - else - var/impureVol = amount * (1 - purity) - M.reagents.remove_reagent(id, impureVol, FALSE) - M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1) - for(var/datum/reagent/fermi/R in M.reagents.reagent_list) - if(R.name == "") - R.name = name//Negative effects are hidden - log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]") - log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [ImpureChem]") - return + //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index bd327809eb..ef48ccb789 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -101,10 +101,10 @@ PurityMin = 0.4 //The minimum purity something has to be above, otherwise it explodes. /datum/chemical_reaction/fermi/eigenstate/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does. - if(!locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list) + var/datum/reagent/fermi/eigenstate/E = locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list + if(!E) return var/turf/open/location = get_turf(my_atom) - var/datum/reagent/fermi/eigenstate/E = locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list if(location) E.location_created = location E.data.["location_created"] = location From 5b144ef1c6a8c610491bc6ff3028a79c06a864aa Mon Sep 17 00:00:00 2001 From: Fermi Date: Thu, 29 Aug 2019 00:13:24 +0100 Subject: [PATCH 08/79] Removed unused var --- code/modules/reagents/chemistry/reagents.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 4a51f3e760..520148848c 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -36,7 +36,6 @@ var/metabolizing = FALSE var/invisible = FALSE //Set to true if it doesn't appear on handheld health analyzers. //Fermichem vars: - var/FermiChem = FALSE //If it's a fermichem var/purity = 1 //How pure a chemical is from 0 - 1. var/addProc = FALSE //If the chemical should force an on_new() call var/turf/loc = null //Should be the creation location! From a5b8a56f9a92153413e95004c2a0ee49cfa8dda3 Mon Sep 17 00:00:00 2001 From: Fermi Date: Thu, 29 Aug 2019 00:32:05 +0100 Subject: [PATCH 09/79] Realised it was impossible. --- code/modules/food_and_drinks/recipes/drinks_recipes.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index af1b5337a1..c704c185a3 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -385,8 +385,8 @@ OptimalTempMin = 200 // Lower area of bell curve for determining heat based rate reactions OptimalTempMax = 950 // Upper end for above ExplodeTemp = 999 //Temperature at which reaction explodes - OptimalpHMin = 3 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase) - OptimalpHMax = 3.6 // Higest value for above + OptimalpHMin = 4.6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase) + OptimalpHMax = 5.2 // Higest value for above ReactpHLim = 5 // How far out pH wil react, giving impurity place (Exponential phase) CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst) CurveSharpT = 2 // How sharp the temperature exponential curve is (to the power of value) From c1d9e3f03b456f3cbcaafbf11a382964bd9314bb Mon Sep 17 00:00:00 2001 From: Fermi Date: Thu, 29 Aug 2019 00:37:18 +0100 Subject: [PATCH 10/79] Failing is frustrating --- code/modules/reagents/chemistry/reagents/alcohol_reagents.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 97f94d596d..a58a328003 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1427,6 +1427,7 @@ All effects don't start immediately, but rather get worse over time; the rate is id = "neuroweak" description = "A mostly safe alcoholic drink for the true daredevils. Counteracts Neurotoxins." boozepwr = 60 + pH = 8 /datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M) if(holder.has_reagent("neurotoxin")) From 77eef5de6f14f729e144385465b338c82b5a17ca Mon Sep 17 00:00:00 2001 From: Fermi Date: Fri, 30 Aug 2019 20:42:22 +0100 Subject: [PATCH 11/79] Heat plays a component now. --- .../code/modules/reagents/chemistry/recipes/fermi.dm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 6625207a71..89ef2a329c 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -24,26 +24,32 @@ if (500 to 750) for(var/turf/turf in range(1,T)) new /obj/effect/hotspot(turf) + volume*=1.1 if (751 to 1100) for(var/turf/turf in range(2,T)) new /obj/effect/hotspot(turf) + volume*=1.2 if (1101 to 1500) //If you're crafty for(var/turf/turf in range(3,T)) new /obj/effect/hotspot(turf) + volume*=1.3 if (1501 to 2500) //requested for(var/turf/turf in range(4,T)) new /obj/effect/hotspot(turf) + volume*=1.4 if (2501 to 5000) for(var/turf/turf in range(5,T)) new /obj/effect/hotspot(turf) + volume*=1.5 if (5001 to INFINITY) for(var/turf/turf in range(6,T)) new /obj/effect/hotspot(turf) + volume*=1.6 message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot].") @@ -66,7 +72,7 @@ if (pH > 10) //if alkaline, small explosion. var/datum/effect_system/reagents_explosion/e = new() - e.set_up(round((volume/30)*(pH-9)), T, 0, 0) + e.set_up(round((volume/28)*(pH-9)), T, 0, 0) e.start() if(!ImpureTot == 0) //If impure, v.small emp (0.6 or less) From b474af1a66abeef7d43c019bf963bb32f1974749 Mon Sep 17 00:00:00 2001 From: EmeraldSundisk Date: Sun, 1 Sep 2019 09:58:22 -0700 Subject: [PATCH 12/79] Update DeltaStation2.dmm --- .../map_files/Deltastation/DeltaStation2.dmm | 32 ++++++------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index f02a4f4a31..cefc0eb1a5 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -114276,11 +114276,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -114288,6 +114283,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Chapel Maintenance"; + req_access_txt = "27" + }, /turf/open/floor/plasteel, /area/maintenance/port/aft) "dKE" = ( @@ -118987,7 +118986,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -119332,7 +119330,6 @@ /turf/closed/wall, /area/chapel/office) "dTx" = ( -/obj/structure/bodycontainer/morgue, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -119343,6 +119340,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/closet/crate/coffin, /turf/open/floor/plasteel/dark, /area/chapel/office) "dTy" = ( @@ -121768,7 +121766,6 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "dYv" = ( -/obj/structure/bodycontainer/morgue, /obj/structure/sign/poster/official/ian{ pixel_y = -32 }, @@ -121782,6 +121779,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/closet/crate/coffin, /turf/open/floor/plasteel/dark, /area/chapel/office) "dYw" = ( @@ -126476,6 +126474,7 @@ name = "Mass Driver" }, /obj/machinery/mass_driver{ + id = "chapelgun"; name = "Holy Driver" }, /turf/open/floor/plating, @@ -126706,7 +126705,7 @@ /area/science/mixing) "iyd" = ( /turf/open/space, -/area/space/nearstation) +/area/space) "iQh" = ( /obj/structure/bodycontainer/morgue{ dir = 1 @@ -126946,19 +126945,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/port) -"kzR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Chapel Maintenance"; - req_access_txt = "27" - }, -/turf/open/floor/plasteel, -/area/chapel/office) "kLu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -160100,7 +160086,7 @@ dYu dZg jhK jhK -kzR +dZN owr mXJ gJj From c663e7d324b4779d3cd779f0f5c550b0ae6ac9fa Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Wed, 4 Sep 2019 14:21:25 -0400 Subject: [PATCH 13/79] smaller and bigger --- icons/obj/tools.dmi | Bin 26057 -> 26026 bytes modular_citadel/icons/obj/tools.dmi | Bin 18597 -> 18598 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index 79edf43e8b41c369a7c97022557a5ba7d8bda674..6130c67eb36ef6c27597cf2861d9a6f3b993f1b9 100644 GIT binary patch delta 6445 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 delta 6476 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 diff --git a/modular_citadel/icons/obj/tools.dmi b/modular_citadel/icons/obj/tools.dmi index d62489aa4122b1c8875c3434d1a8e5d438625df6..7b99880799aa452f6dfc3a89e7e726a788d827cb 100644 GIT binary patch literal 18598 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 literal 18597 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 Date: Sat, 7 Sep 2019 20:07:19 -0400 Subject: [PATCH 14/79] Doubles stamina regen when laying down/standing Does as named --- code/modules/mob/living/carbon/life.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 36e4e18817..7a3405cc09 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -475,7 +475,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put /mob/living/carbon/handle_status_effects() ..() if(getStaminaLoss() && !combatmode)//CIT CHANGE - prevents stamina regen while combat mode is active - adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -3) : -1.5)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke + adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -6) : -3)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke if(!recoveringstam && incomingstammult != 1) incomingstammult = max(0.01, incomingstammult) From 0e12a4f8d131eb38d41ce1407674515661569b22 Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Sun, 8 Sep 2019 21:39:32 -0400 Subject: [PATCH 15/79] and swing! --- .../game/objects/items/storage/uplink_kits.dm | 15 +++++++++++++-- code/game/objects/items/weaponry.dm | 8 +++++++- code/modules/clothing/head/soft_caps.dm | 11 +++++++++++ code/modules/clothing/shoes/miscellaneous.dm | 10 ++++++++++ code/modules/clothing/under/syndicate.dm | 11 +++++++++++ .../reagents/reagent_containers/hypospray.dm | 15 +++++++++++++++ code/modules/surgery/organs/autosurgeon.dm | 3 +++ icons/mob/head.dmi | Bin 179122 -> 182367 bytes icons/mob/uniform.dmi | Bin 298364 -> 299251 bytes icons/obj/clothing/hats.dmi | Bin 88442 -> 88755 bytes icons/obj/clothing/uniforms.dmi | Bin 88120 -> 88394 bytes icons/obj/syringe.dmi | Bin 4730 -> 4988 bytes 12 files changed, 70 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 6e41527b24..538e700c52 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -1,7 +1,7 @@ /obj/item/storage/box/syndicate /obj/item/storage/box/syndicate/PopulateContents() - switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1))) + switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "baseball" = 1, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1))) if("bloodyspai") // 30 tc now this is more right new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set new /obj/item/clothing/mask/chameleon(src) // Goes with above @@ -52,7 +52,7 @@ new /obj/item/clothing/under/suit_jacket/really_black(src) new /obj/item/screwdriver/power(src) //2 tc item - if("murder") // 35 tc now + if("murder") // 35 tc new /obj/item/melee/transforming/energy/sword/saber(src) new /obj/item/clothing/glasses/thermal/syndi(src) new /obj/item/card/emag(src) @@ -62,6 +62,17 @@ new /obj/item/clothing/glasses/phantomthief/syndicate(src) new /obj/item/reagent_containers/syringe/stimulants(src) + if("baseball") // 42~ tc + new /obj/item/melee/baseball_bat/ablative/synda(src) //Lets say 12 tc, lesser sleeping carp + new /obj/item/clothing/glasses/sunglasses/garb(src) //Lets say 2 tc + new /obj/item/card/emag(src) //6 tc + new /obj/item/clothing/shoes/sneakers/noslip(src) //2tc + new /obj/item/encryptionkey/syndicate(src) //1tc + new /obj/item/autosurgeon/anti_drop(src) //Lets just say 7~ + new /obj/item/clothing/under/syndicate/baseball(src) //3tc + new /obj/item/clothing/head/soft/baseball(src) //Lets say 4 tc + new /obj/item/reagent_containers/hypospray/stimulants/baseball(src) //lets say 5tc + if("implant") // 67+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it? new /obj/item/implanter/freedom(src) new /obj/item/implanter/uplink/precharged(src) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index c6384e7438..f31292b66d 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -522,7 +522,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throwforce = 14 obj_flags = UNIQUE_RENAME var/chaplain_spawnable = TRUE - total_mass = TOTAL_MASS_MEDIEVAL_WEAPON + total_mass = TOTAL_MASS_MEDIEVAL_WEAPON /obj/item/melee/baseball_bat/chaplain/Initialize() . = ..() @@ -578,6 +578,12 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1) return 1 +/obj/item/melee/baseball_bat/ablative/synda + name = "syndicate major league bat" + desc = "A metal bat made by the syndicate for the major league team." + force = 18 //Spear damage... + throwforce = 30 + /obj/item/melee/flyswatter name = "flyswatter" desc = "Useful for killing insects of all sizes." diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 5c7514541d..b14b0575f9 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -129,3 +129,14 @@ icon_state = "emtsoft" item_color = "emt" dog_fashion = null + +/obj/item/clothing/head/soft/baseball + name = "baseball cap" + desc = "It's a robust baseball hat, this one belongs to syndicate major league team." + icon_state = "baseballsoft" + item_color = "baseballsoft" + item_state = "baseballsoft" + flags_inv = HIDEEYES|HIDEFACE + armor = list("melee" = 35, "bullet" = 35, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 90) + strip_delay = 90 //You dont take a Major Leage cap + dog_fashion = null \ No newline at end of file diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 4659de3e6a..bafd182564 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -62,6 +62,16 @@ desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them." icon_state = "galoshes_dry" +/obj/item/clothing/shoes/sneakers/noslip + desc = "A pair of black shoes, they have the souls of galoshes making them unable to be slipped on a wet surface." + name = "black shoes" + icon_state = "black" + permeability_coefficient = 0.30 + clothing_flags = NOSLIP + strip_delay = 50 + equip_delay_other = 50 + resistance_flags = NONE + /obj/item/clothing/shoes/galoshes/dry/step_action() var/turf/open/t_loc = get_turf(src) SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY) diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 9893edf248..e94f95ae2a 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -67,3 +67,14 @@ icon_state = "syndicate_combat" item_color = "syndicate_combat" can_adjust = FALSE + +/obj/item/clothing/under/syndicate/baseball + name = "major leage, number unknown" + desc = "A major leage outfit with the number faded number on the back. Seems rather robust for just a game" + icon_state = "syndicatebaseball" + item_state = "syndicatebaseball" + item_color = "syndicatebaseball" + has_sensor = NO_SENSORS + armor = list("melee" = 15, "bullet" = 5, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) + alt_covers_chest = TRUE + diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 82d95cea40..9f1d9e4d14 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -127,6 +127,21 @@ else to_chat(usr, "It is spent.") +/obj/item/reagent_containers/hypospray/medipen/stimulants + name = "illegal stimpack medipen" + desc = "A highly illegal medipen do to its load and small injections, allow for five uses before being drained" + volume = 50 + amount_per_transfer_from_this = 10 + list_reagents = list("stimulants" = 50) + +/obj/item/reagent_containers/hypospray/stimulants/baseball + name = "the reason the syndicate major league team wins." + desc = "They say drugs never win, but look were you are now, then were they are." + icon_state = "baseballstim" + volume = 50 + amount_per_transfer_from_this = 50 + list_reagents = list("stimulants" = 50) + /obj/item/reagent_containers/hypospray/medipen/stimpack //goliath kiting name = "stimpack medipen" desc = "A rapid way to stimulate your body's adrenaline, allowing for freer movement in restrictive armor." diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index 0ba6fd7fcd..2cc5c554c6 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -99,6 +99,9 @@ /obj/item/autosurgeon/reviver starting_organ = /obj/item/organ/cyberimp/chest/reviver +/obj/item/autosurgeon/anti_drop + starting_organ = /obj/item/organ/cyberimp/brain/anti_drop + /obj/item/autosurgeon/penis desc = "A single use autosurgeon that contains a penis. A screwdriver can be used to remove it, but implants can't be placed back in." uses = 1 diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 09bfd9e0a265d1e00bd94b19c0a24a7f7a5a9583..25183c5cea529cebd19adba38bf7bfccc1a1b5bf 100644 GIT binary patch literal 182367 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

Q4^Z=`)!>EAWr}P|dGf3`!v> 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 literal 179122 zcmdqIcU%*}*EhOIRRlypkd6o_9qCd6SWr5O^p1k`-b;djC|wbdE+W16UZe#G9qA=N z=v8V$NpjcU^FHtU-23PK@7~X6vzwhgJF_!$=A7^O&dg^m4P}ZOj5h!Ppm_P>=_>#r zTKe}RBLP!Po8(*ofb6}Wj=sm!ckWhhwk{sF&Q1W}la`aJ?mj1V`{VFgnbx3jiNM3Y z-QDh_5;ey);VMY*1d-uWWsC};Sjp9eoYtgr&keKpsys~@bp$KfqYFe(6YOOyKH%K` z^n6$-R;c*dD`UAbd92kjM)-4y(`oYsX8G`U#m&+o=r@%Fz2PFW{->u&a8f=)-Qgn5 zSSp#E_IIbvvl$$4c^59ELaDbY$&{de9+{m&aS7*Oi$2p0iuYE|LpOdY^V-f-s(gU2 zet0&=c6`q|xsVU}yfX5=&~=N(U{1bsqumhInpGXJggs|XwpvX{ui4Xh%}xTlqVl_M zcuAl+55%_~r7D>{H^}%ZS)Q7v({tEC@)5rioGe`#rk-@m^p#$eOYtjM7-@0z*FNDf zkG{8w%KchB?QWlRZ@w{=IkS*^aC|iBqgh@1>r(gKtB5D=JT`B__bxKu*Oja+#tx?M z$tAD5ZpkHM1LH+h5B9en3zw51X%;1us&o$=zoFQ@Yx`VpIq6@Ee5*b~u&nH9Rb4C* z_AWj?fQR_wM@z0>dy>N3Ch{A{_X%CD-blPL1(LcdQmW^Rvy5LRP6g%;Ae5;CT3dQe zSGtd#oKJ=houn5zYGSr?Wy;aEO6QK8ZCmYf-j&E6=XR^}x2@Na9=)ZI87G)zde{}R zPa-Bsd;4PhduxRTcR`Ops#^DmTU2s9eP;~zXn)4Ha3NvPh+JAd@G-xo0qtR++%wfL ziJ4vF!j*UKX8AF)*0@v+3CBMflc6aAtEh}h|*ZUA?L|{7@R1XemBtbA;I_~H%;90k5^@I zQbY!2(ZRPMndR5eE_`#K#Clt1qAx`$HasT{(_ z-a-6g(a8g>!9w@^OVVF*XjLyIdq?dZj1BJnUOU}cPkHBV?`-hG%6_o2q2|o|kadFU zxR!f(_I4c}vb`hST(l+AJ$3A>hwzRlTR$uPI9J_c8*%+6vtPREVteFeyAG2}w%Tv0 z^$vUha~eo^hU|2)NT{`w2| zVTI77*Fy+gZItWAI1#2l?si1ai4wa?)|5`D>2pY2|KNiSMc=RQk@QBbCgj+Ha;6uF zG(ti_zU-vB5sw5njIazSg8rknn4E}ZDq$Z!Kg>y;?7p*Mb+ms9yAZQt_;mWF0=aS3?oynatg@7h2R7;H(#q}&S$Ch5Rb`SL z4be|+?a7h+`UGCw7IVkscDQmiE z2o~6d{eN9>R#Y~Aa|mDDYW%ucZrt8D7=;M!K9n&M?N z?S9OiY7$}GXr!@$J|@5~Z>^wPzbqWl^SMvhH&lOTdB{ad7ahUzF5C9Q`^<}v9djDV zZB{i!y}_y*-;3V}j`$z*X2`?{2{=glTr1{lE5Ebv$Gum0ElJbsrR-6fjApl@*}@T@ z%jb_~uzP&*7Uh*@<6Vfkf=X9|Fmf-dfU^xRokEQ-jDDcy4mNuZLV?4njfo9Nn=FnB z>+C{7Q8DQX0PMiar;0j0X}b&l#yXxj$locLRQpZz4&X+8i-lIlgHHREXmw<6i7j%{ zu&H=r>ZBX8t`WMmi4F+gB-=p4 z|4O@mysHy6oUFY#47Xw(NV~g^mCuyi5I)Wrmd?IKL=bvQiHzfao#f}!(t-cJ0h6aH zwe^lv4NG*je0@LHMRU_cL`2YbCQiJ$W46zn#)7{%mm~`gwmbAvjU+H*!Mv(H^bW%S zw;1xDt41ms3+hqw;9YRXg|BC1i8^Eoe68ho8H6Tu|RZIeKmA%8S-!2}Gy+o74-VNMM zjAXVFo=$}*WJtn>Vlr=K-p`-l1r)Tj;_B1ZI%G&E1L8`(-Q7ijc5~qs<1K?ih%#pt z&NuVg3z88x?3KE$L&44jK1>z}25tmbcgwDrnPR)4ttf!jsFdh_KQLX>Gi8SXR6PepW$2ce~h7T2{*Z{G~FV)vGH*WiBtjw2Uzl;^{>1< z#O=(Iw(4^d1!k&r4Y&YUebpB)$_-4lwAfWCZm-0LuCH4kQXs!@N(21PKx%60ms^=# zo>v9|)=Q~c(koSx$kS6#vYR^D`T1G{T*6w>eFd)@)`X=!3kOpVe*RP7`ug`P``tO7FIouuQ12=~|G}Yz|1vpHQc_ZXxSq-q^jOYV@N9(%`1$i^ zeGI__^!_B$3qPFLXowX+BfCBEkkAYF8Bn?YtK|-UVex%OM~1G}$wd=LH~d5$o^6aH ze_`D;>g-k=zLTmKzf78X=_g3GDS@V3+xo~a@tCn@V&W5v%%pY0tAfzd;+w@%&H2sE zagTf-eN*8AR8g_fPnguc8=&h3ZsJaZFa;TIQ=8E!rY6rMff zit3>Z4GVLRMTkjC&JD(EI^VRN&DfS^W5EX4Ot)!0+v`p> zJ4c~x#xe#uM|Zc!O{lj>Hu%Rr&Ut@sTSlI`-Lf(4bB{OZbi9bV>-Gx zc=t|BPe{1T;!y49*cUx+5HsYrKnF&Mhi_ zYGuXA$i$RYR7@*0_D=S$IyaEGZscGrW{LVaI%{3-JJ2q2SA#IKsb-LU{Ws$Weq~mY zNpx4b)j{JlR(6Fcn#F7I&e_NB-T}6(78c8tHrSiY@yn~54F;^uQ!V-VFI>g{n8h65 zGIr>hs?oz&#{&7N6|wZSwVLk%J@VXM{*4x*oSSfM6Z}$G?sbA`)PfTC?#^lbaC9CvTDk9$p zyu7c}z6&q^Jpb!ea8V_@Ht-U*r!6^UigiTeC6QP4Vr-{NZIV}lhIrhbRty#b>Lhe; z0)KQ&fN_LAd-m+cEPhVjdvt4jWakt-1gr4g)>z*jwkT0F{^$>6j}r)Xbxk>7-o?Wy z1FFZjp$TBaUUA(_`Ae2nTiW9kM`|RWCbmqir0@d*%qdlMq702@+hs^4=-ezL-g&Jr zKY`b0V*G@!AHM8J8!!N1ug}jb1DHOG?hLQo^vX0oe8bD8mi&|0T>Ab%@@dk#g_xHM z8(|^-MG4fD3U)^wv!XRsg3qHUPYXT0A14v5ccnT7IWPgD0Xy?^B8N{rE49*}?Qg=! z01k!Og)!ym>OC_WRu0UCf%QeYoIT6&uloq!gOk0hsmzv1^Gqq|`C3wbVWC_985=Iq@+2(bj(d&`9a#Af z^UfUxYPPIy-CovM6JpTiQE6dW7QAAb*8m9upWkk&2R!EVWzfYt`uOu}3Wsz-6ZB^nuS0LB`_PIu5+*BOZ(4o5)*5q|SKr;X|n|(t3x9ku%c2edXjj#1wuEXbD zG;z=3lqCw=s!Y-^@qAA0)F4jlqTZ66p*S6!a*-zm;hXO$F7uYs^IXK7_iMtK|AFsf zKAs5V{|~?ymz71r{6Fv>v-ba8JfA@Me`7->GUY!o&j0Z;r`>p~f=!$q z9KN;egMF>ii&j-qxiq+{+Wt^{=&ZvVCf~OgXkGOhw@=TTU`a6#1T6oO{ZI3hawolS zU(3-i%Ui3mA0HnJ4UQE{QLAhr7_+PS(2qbotS}L2otLgR46uo9t3n~tLyEe+&p@EN z;aI`{a*o|5V2+sqez~9Jdc{0c2(fP+yxek&Iy1*N(r)f={hq>Kkb&+s4t3Bzfx{Wj z&hE0lHZ*)(eBK3z&tZqDPSEsa2yqfnxAOmZ`L+nRJ!cXOCNeEDP5D0t<(mC zg&NF2su7-Fm6EC?aHJIH786_)4OUu|GY7}ShGb7GlNDNIrI8~MYO8eC(MRKe9jtdh|)E97Gt8LyPcuO)ea~~+M&=Gj0PDHO{nG2ke&#U6Hxz$^hRfA zdF3mcnwWsMzJ$Lf?7|w{H!R0~yClf z+`)mrqeH2Cje>%rT{8)_s(0xdcBf(Gj7?;;Qee~L@qlUNTTye{?-Y78g7WgFKHF>u zP9!kSCU0l3BE-O-w92leB3$wL9VVv8?u}ti?Yt*1^%>+@L`fc}$M|2ZuD(?)(akO^ zqlyM-ZxEjV%`Gj<>+2uE^k5qrr>s{G#opJz`a%l}dEeI)fi4& z3%g*Mj7xOM?-CGTJO&t|KD=9qjEJ~JOB+g3lITz4v^QJRv5v&uc^?1LIQQtNW46Yg zSej9*lp(X_ZW3pBjs4UOM4|wpx$pR3uQ&D#wY=)qsMb+^zBF_;=@F%zAyZSVhqVQ zzMiuD{96a8^nZO!cDz1J2y}IIfgQpa;(ySl?Bmw?e3J``Z&eYR_s7e1AQ#VN(1&dM zn54&~^HP1ouJrb;1PVGjwBVRE@%E@M*TfB4S7Fw(fBXQftM2j&36)kDT%DYFlt1~Q zPYI@MZEaO{vDM>V?M#-Sz4MMlybxe6M+*f3SGa;amZ5=VI;7?nm+5L$o5Rebrga3N zS!)bwYXFP?#95W)$2rqeUlCUOD?p)X<`p!<%KSAx? z>4`Dij1j2^esz#qKp4B!1xxA-6>y6X7$2W(mi_zXb)Gt*xntMb>Z*$j?OQ*?6k&0D z>ek^!dvBzsQzJ2c=J>AL@lm~}BFId>0ASM#+O0s&0n$EDM9&f66 zWuDX~CDA8gg=7Z)m z<_rpTS~11te!g{pC@KlQ$Psvtquo$pXE+rhU_J2NwLt_*oBbPBgTK63Cy1oGtUK^AOe8W7 ztXflRkd_8uTakB`c_bIBlLes8!$?W0BR)vVLC3@Tom~H}4g4^@zr@CVjo6c1_fkkI zcGL{I0Bib}$tTwnf7yB!Y^tH5R#s6vl9Fw4Aki%3G?rJWOg%Dk+#Ievyi}mq+RV7^ zyqXTuB9x|=SSTl|3?J>N+$d4ChCNLhYA=HMFl@z5@8Q!Mu!OMD>BH=OHo?+Ltf&JX zzmj6+Adx!Qxfnpmzws?HHkKYFSy-VvdxJn+llOu3B#@YmgXPSS0IYRbtVu0DwL%{( zmzk<~*;7N5I4{J%YYjBD3Qq`cl7vi$GC4I)>tkM8e{X1LxUN3cR>LXssGS)Aybr3Q z;H}{Y>t7YxU^pp$>zAHIW0Kye8~TlvfB*i4mEv!$E%&52?;FfElQ*onkb};;4?y!f znojOR*qPcQ>QAb!>M=1X&OqE_+uItCzbEu_l5S;XiszOxdIJu!K0AEQPtD>9oPOK= z`QB&;e6kwy#~K_{7|{iKkAHqY&2SbDf=$(MbwS?DLX7 zuSv<_Hhe+mf%4*&udr+_fdTcGO*+7vc!UoC|Mmts5FVM%x^3}XP?Lb3xxK5)wU>{- z{m<}u2FaSvOA+}Yq4xZftvCs*6c&wNj6wV{)zs*Mej56ijg`)?S*_g+jFSOOnZnqp z(qcvxGw}gG!X6$q$T6;8sKV}&Vze10V+T5X|JQ_9AHo;W%wu&woW3)9OeG$qBCYBo zH8P*;yuA+~1|%C&TnP0c7aMAN2G_lgc7iv6yY*3|XIG#$e~PZUDoJi^B)AJ#P_o$G zzH{6=*r(XP+BXkx*JgFex;U049c{mmtf^KgFTSWT#;b}~8Ry~vEu9ln9zgIQlw=Y) z&&P^`3QU>l80lq?geu=`%!sk>q2SS*$7f1uhfY+9W)Q$8o;@4>8wDw^KpUr89DjRg zD8jRND#>t@Y!)9WJvg5ESpV7s8cxCiu89)R)c#8(3HxxF)m!CP^aW?aRr^$#lb81f z$dyfN89W^Nfa224>l8CHW8T8A5Vn|>F{C!RK6`n20qqc)WdUx3897q6##z-@*VO!G z0+`&Z_0D1hf&#-#%joffP7j3O-hNnfO%Z-S1b;XqdRturqRhMHqb7qm5MHvikt>%O z^V&`S*^GB?&YnBlc)@iy_M4@*lf|oug{(+M;j>3l-uukf&iN#b7f&*sYp-_k%_UDV zh8F}Miil8y_^?U>F4f};>W%iRS07SJ#0{D{5tRf8srj*?vgbnU)%ngDjr62a~Z-!~VpG%_RZ>56;3`#z<9Wc2(T0W5br8^coW@uykp<+C!*Ykpk zRZzmNyL{+_7C=V8uP${4%kS-dGiJ8ri`n9OKMTG@UG;&9fz;`*uIH)9t$rUV4evf#1*1PwUZT^q#G!r)&oy(6O@} zr?*fTC0pslC4)>|G>7RHff^BBRwg8W<7U@P&vU0akX(U$B11Oc9`QDyzwrC%bbLl8 zZT*8lLDin`8sRmP7J;PDP@=a&=Wn_?pmIDh%5UE?*7hCIh z?_RD;Bt11XL4f}~it?y)9thSm)I)+*bJnO377JSsLs}E>B_~Ex_HC60%#Q|)dmC_O z;jB2byLLW*{+yVSh9G33YFo*fwTrpT?S$yM)DM3UwU=2?QlwpeYE!rN zX(wV1-!N7c5sJC5ICN-pXyA|-&g|OK(&8H17y2lK01g;WO@FGe6US{2;{Wn#YHE6T zc(fytY@VK;WE2$7OiWm=u-MVj(cgQ2Ul)MX0T`wd5fc-@>W5R)GpUaC>~;6=uHNcf z9+9!VopA+X&zzu7PtSAeX9Dpkr*Qr>93)-c0f!(9$T>W3poO?QI*= zO88-v^Zx$x$koW+frW*66xG>$K|HqwTM#EJ2__GM{cL{~NCn~PQAro;bL!zMJGEhR zs!mmZFkdaup=nzJZJN2CK_5L8&OV0eA(vAq@|opg5ISj3cfb0b;SVCqfDdMo;xmn& zd{daqNqN4W6bX^;eR2YyVkpRL$Y0Jp;tzRug(!ujtwo#)J$(3kvc%|1a&n(Qc;z`0%>4AJZ!YSZ;oAqV-hc`vK7OcQPW;hxN zWh>*>REk%O{YU~2C!b#`$PS7wct>St+ZkEz;s z2W~F+W@UF?_&Io4e=N6~;5Em|icEt37kqb4HfHK#YVyxD;KZ7yvNkIAEWrWqS9Kjc zg1-K1z1=;KAyQ^!@NZi73Ogh{zfEG^{<*$8-Ukkclf$sf58OuWYOY=0d0c>_hiUZn z&8(nMVZ?m=JiUu;Rv6880q?ZPtc$tqizX%PaiURKUf_M3x0j8(FZS9H)=0T(n;Ik@ z4lk41+P$EGbLVN$0ZZZWNcWP@#;zpU6L!QP8SFbah?z%_OQxz}9zP)CO;AbPgGfso zm~VWDe^oRwZ{7Bii;L^}^K4Z15q))yMe1*GvUb9*rW}bp%xmFIxM4GVWZPA0(xjVT zTH4b|1-S`GY$#eGd(J@xxDFbt`PR_i$%n}~s!2DfAXmb-Z{Pk$PNm8Qog>Uv;x*-$ z4e|e;m9?Cu_@u7=dv>*@30=8^2kDF(;^N}^OvApf@~aLYZV+hbC~?a5TD>(e2b9? zZ>96!YXKM;N8GbWi*!pmE)UvbjhtKPn!NUIJNri+DZGFGpiao*{rmUr{WAP{$lz&&z!AQhqq5-BPmWAfwY&kk-XHa0fUk1@;3%lqK5Xc1#|smXwy%}oVA zzsHa7!`Z5sd3kxuv7LLEi*`l9ouC6Onyf~=#s|%oDEcG4tagZ;fyVZ3NE0-OUW}U2 z$*iND6ZeeK1-7cr@DWE6)BCctC%=lRyi24I-)n7_v^?!S2O*sRsb`Ss>~#e7&Sj^h z?q_lFO)GdzH`o^+OJ+R8Q`3_<)KbK*6B846%CpL5`rmJQ`af9bE?;XK>rc_-c4P*J zQdc@L8>|KY4;I>KNCWnNIPEz5yZ?V9p8wy{?5^+6kJdg^xyKncdK9RxJ?ULzT-zo3 z-=w@=rPIRWol{lvBfI01?tqIS%+eT2D8d|G>sFbg2MQHn~(bWl=_lcRvaZ`#b$b7;(;qGsJ+C# z(NC5Y)`J<*?d=NH)z!VMNTU+3*$Y*av}ky9vup+Fm&8PFf8_6k6-4?IQ`3xV3YnrH zi#u0uTeX*H@{&`7gY1d@J>)+YF`h|6$ywqvqUUK30Aye$Q1huS=tXGkUpS@moF@5JHR*8P`2ta2i>h_A;)8DCk8A*-#F};I9bJUT0)pA$TgI+xU8tL`iMn z!(W zeCJBi<{$ujYL@fvoX@GUixl>csWqB1m}-0K{L#pYqB2(eH*Iy8J?CzMo+)*6iX^+e zuJDD@y|~Syr+WT^ve;a!J*M#r&mCRCim4JKo^OfY*ahWTL0dXEXPst&E;$*#>nz5o zZEDzGL*Oy~^O;hB<-PxKmDJSK`2`ibHx?Eav<+W#C=^2 zXlLqnwE@_Ns(hO*s~OGO0(hp{e)}>(ZiPA#_BVYP0@@p0*H8pMva$%8?aSZx-L^pQ zFGPSn$ssg6>!YEn8s9{)CM=JL^}bS1mADR?lo|u>4ThV>P~ZU{UnjXxbGvv@Z#DmK zqa39_p%2OUpm#*R+|bb>&yT$nDAdSQ$QzYf<(`kT1{tTM>O*nvMsWC)4aDA`(J8z$r$!4DOhUpN=(X-IJCT8M}HyyfVDOrqA0u3b=(~j_(M7 z3sdzd$H1vVwgb%FEP{?sZ4s%-EI2=#*`dwz_b`w;@156yfMA19l^L$gJ-HNJ^AMNh&p#qbWv&KNlSI|W=$%wX!m(zl+5FLqU(dv)Wc16nR1Je zyz+O5J5E;ZDb8(}vToE&WgY&rC?D3n$7~njmIefXUXqcKu^tZc;Qv_~WopXmwLkyx zuM=RxD}ONk3S9gn<#+PHsbTF-Dzi__?_71w2f(w;>T~prO(q8?C+c3CctGPkB|(px zPP#mS8b%;Ue$BSoXXS3i`Q)0{``%&cRnQANSK_{)C6T;@9Z#~-zmx5CJq;*d-E8Hs zaZQ%jck^J2q`Ac!A#}i3`nKwTWWA@eeLePM;|Ut;Fp_N0$-)N6KKGxw`X(BrQ$4x9 zA~H+P#l_=_`mkl}u3z`qq~7(n$G2~3q44)YO|m|*zyI@c=Ww(9=0Nds3>Bc_Tr;RC zje_S5RX03nnRp=E$`g43*+bcpMAzJ!tYE1_% zP?_2PC!pRUZM~BMCH6jvCzgpV!{M%xP3&*3l}KOH&PhBvBt_YJU`+OrRpRr~??#+- zdfoL$1Fs*WRQyadvMIm)^v4FNk4HGB{{)oUO`m{}ll7DLXWF#fI z15`Av$*qu3$KJ^xakJ+84o@V2=JWS#pyi84ATz4ZC+TkoA4kw0wzkHRfphcj(Ze2I z%r(irx(l>XJCxY_Mwb&;yIp|~XP}2V?~bGJ^qOzHR$9L~?CBj>mC2mM?{4Rs1BuD7 zKo087U8#O9!BlK*i(^mnjP10ZFsNw?XGW8VG;GxfwQ|A ztPN6FSkx`++Z`Jjs|>1{^>9YCWCUurheHtMH86)EsB3HcXVX?5IlI2u)vgnWKc=}$M78DstS&~1OU zPS~4K%O?ObkWP{&bH0}Y-BPxUE^+5+d-kU9p{p-=Du$lD`6bk(SAm<+YhWe0ST&Q^ zeqlv15E4x|%spR0DW?(oaXI?yqp%Ym`<}k#&{5#E8C#6!rp5M7=k@Ghf3?Z!#};Bg z>Jfey!7G9^F~s3ZpmcY|(yh|)U{=TXZ~j+ivD|4OT48)}3E35SBkd&n(26-D)uA3G zl!7V9&8ebn@(y~qxXzO4yS}KU+Bw{3wIm$mpTGs76cj(U1HFmJVG=#tpZbk8l!-~O zPpWr-b)dl@7hEq!gkfN9)tl>iNv2lz3o=r3+Y2eXs|U9`SpJhezI4PayR4|A$Qi5N zJSZa%tj;$ZjO$JAe>)`=Gzn>~^a2x-jh-}KUJ-z5e->r77#y4g4g`633G|qzTiCqp zSl9X-0|%Q`Xh7;EXGp4+p`m=QGnKnww0Ld!Qc9yk&%N!>sSRo!pZr$V1IMJqa|I7u zOV5lCU5rh2cIW;gUYAo z6#zRYC!w#e@3e;{^WzlzFM8xxhY#vo&=)9eGT#~nWp@FIbcTQ6%=L_kDTzxp@h>(` z_%L@i_iovYNu1AXP$^~>!Bssm)sx~ss;X#8JSiATnB|x?w?^Kty-(G5GXxD|zWsXw zz{mH}d}!B0@qz}}W;Co9hw2A_D%;V4iu?XOBL6)Ye7&Z=!%7OKO<@2R(5RA;$3Afw zkoq%~klk9!Y_>aG!$f6zNE&laf9c*WYiZTP!7ocGDfoSe>+GNZ<}DI{vvhUEbniy} zrx4zvoqvT~{Zm(+m8bXfgcJg{)&5<;J5Zekz+%cbYh|btq^PeKh-$xayYYrAuN;kJ zn~o+e!w|v)4%#5Mj$gb;|D50T`JZ_>w8FHQ84zXKyXS~1i1OXsT&Ptj> z-EaGv>hYEh_u$X!0AK5;p3<1|66j5zwekl7NW&0BpAEwxznqW3jz>c*Q{h@Ssd#Y% ztw{foCEmDV?dk6B*+nH|boJd0{$@9q^+q|Z?IP--iLA0>mW4s?6YESmp?}wenkQ0v z;iM{o4Xcxo{jXoHl>vYTe1({zQ~e$#D2Dp?WH=e_&X&Dz9l!7hG;b(~ z4Xe=PlA9Z&h7+sp%Bi&pg&(=SL(oxA>#n&uYOncTw^K6nFVVlikFrL(mN4{p2+s?U6+B{MH-JUk|W$5)KrJ>aM6|-Jn8q?B&I;;$z6KyjL&*hfW6(m#0Tp|IP68Ya0eDp*=3SP$A1l546L#7$*^IA;IgiK?j z?}q#D8~2L0>gfA01LlM`9t#^VImVMa3$<1e3Q(NZ zi@M*tBK$D2xJZeIvCk(B-Z=vIA7%rmG_0!nRRz(?<-L?#{HZ;!A|nxu=6G6B7`>p}}GRpjyGo$rNY|6Ts* zS}D#`E61E2+|W68Vwr?npR1)vHa?!Nbv4CA9& z-h3V?VgC?l_gA{HDog8$J=qHBX`Bw!^WRNNm9!6a_jDO9dOEz5CpM_LKOqKb&_iYD zU0*h4nVQj4`v-D*A0T$psTM1mXQHDbo`5NpfACi;lH%F3O`{7Aw}pz&bx(WY^X~b6 zt5&JcA2dbT9rT=cJG(^=Gnz+ObEZs3HYF$(>rPEk1JaDmict5O)kSBW?F z0lkKfB(b{@Ud|uQD?eL7xYLusGr!_$9`J8OAU&r{KFMQeF-EeKQL&Mcoysy^E|=F} z|Ad=m<(3O{IvgZA=jNCc6&3%Uoqe2f_?Y+Vx{xNgMhY@(;R}6j>XdBT;ADJ`0Y?p7 z6&@nF^}Px+mgX}F0FxdLwaMosK>o!Y`>V5~8@3_h^LF<3+Mq9)oi$8dla<4sjOUk> z(AmsaAQ;2}W7h9pKLQvt-xe{!IQ^iN!aXM6GS6Imfs$ z3pPer{>mFB0EkG9sHD}^)aVX2Ug~K_O@DWNKQ-0KcVER={%@`Ebg`)VQwFDMwf?1x zXJk9NdE{+Dy^lKuKu=++LiK$>PPSu4+WW|8pkcy|vQ^<_6{mDyun*(_1A2hbS9+g6 zRZOC=q>G8^4PyWu<^X8_SEwTT6QPs+*%8#x`OpzP(9Odrq1i*z2s$hP> zVi&I~EbTBCS76Yxrsb$=!*YWcAJQd^XvKH(IFF>2pu8DBtotFziv_FhPL#a)bd%&y z_6PI&k*Mul-Y%kiM^?BfDFAD@20Ohf8cDL4i$4~lE3v6x8!<*kL`;e%GRopT1p>G- zrBsfVrAc=3G^d&~QjK;pl43Kw>pC4L90C65ip57kJXxh~r1yZ6v(q2P9`elu-+5v~ zj>0WHGKNTBt#rW;hb)Buy=;Cd=p?PvKuA63ZGr7K5-;0Wr@T;#-C>YDs^H$9cvo}L z$V5a}{O;YOWG$07F)sj9MGIl^DI+KU%URhNy#V0W(1e8! zKI;eIvaH5w$9Adz+9cqsQ9$Ao&%>8Gaz_=umPVj|GMgx`9G< zhc;e&vtdp9jpW{ozC1B(5Xwmpzk?R^Qs?Ao;sg_F4o~;~-2l;Co8Idm{75Z1|YHF58vYuEL4-BaN zMj|uquhM0_Z`2`!nk+%)#j?3pLbWQeBlNmHs*c_{ov0Nz@yJPfb12>QK+3x@Nn9qD zMFwQ38kiq@yr_WUgCrCAVws~jUIMTPXZd|74ta0A@m&XT`&s-KgxD{Vd3ygdUZ-Z; zFMszTi=F4&H=;gA{RS_amo{10i$3I1q})~GFhA}f6RKg{5V~XbC-dG8DoPhJ<1f!|Hv5@T0-pxCflXfVl^Do;1URV& zF-QEm0^FHWCU3@YUP?hx2FBm{ppf4fe$< z@3NKLXOW@kMSm&)91kC^0#rr+DCev^K2~AO6qjd+@4IgwP>Un1IAqvgX9Aez1N22~ zhL{P;#Rzhy9i@BB|51(LFt8XT+VO>JWXd~^-$JoKmmW1(Qr!^}6@C3(-2TpbS`c0P zBPUmQz%jW+lu|Hk+Ca){mw}Sy@vq*2f$F|@zdsNM%6RXu-iDUXI8Iv6k31w=F2q>! zC9%u3&2GQp>sp&ztYh`-Jys=iYJ2#yeq$(Xg(C?JsU@cHxZm=-^X`fESARzo4r}}8 zj%-6J#y>I9tHJ3n1qLNEM3;b16~7LX8$W_{*}wd-nzBNI(2ZElh$-Ko>%T+l252XX z{dHtlD+^b@4W8C5`Vd2LQOKzghz~-Ip2G_R-=yImS8jjv^(FN##HH# zVbtDvveb#hWti=;Mtk;bA?-^xeyyBy5j`Z3@Ax?)d>DsV5sV)^ZJ{{rb>3TIM8Z2S zlB2_$*8DUNh{2d+`Mtd;5M6 zTM-+7%UIeJgR*j{hZ)^uQx!_rv&2Qi^bQb;_Dp|AQtPe(;D#aBlg&{Jwvec(n;iG= z6M;J+dxOqtuU!Qz;~o<_w{{ScRO|m_0%~BNcNK}+q zx`#tlbeuw=EL$J!4IN;UaLMa(ug;7vTEMQ|B+IjCJZ$6^qOMf_bWCtYqW#~!i1t}t zqmI#ZW)i@8+z$E|((6hRCW2W^Yb9Qoja zbCevKvBeM*Tal@CWVgfRf)FtvTwS-coP=CU>CBW^6v)T&tD8&11Ajz~0E!b3Lf)oA zjau19N`ypgq#Lq3n~z)_aVBcII`sgs(9$BMKi4ZB-jH(3!UKO(N*bPiOR2ZFJ4Lb|BJdeji;*p--Z`5 zCX_^GD#{QdWZEK85t4aMNMai@51S}5R%VJ&=2>R;HiR-(=5d?ndA8YmJ*VsXU%%`3 z+@I&w^Srp9d%q~Qwazu1=Q_{t_xK*ivFu2E4_&FsQ7@eaTjdKR1L?TQ|D)6R!TCi^ zl1F^BO0?Lhp=~x>!R#}mfq|+~(i5j zwjZ5Cl>e6D=$r)8{}0e~{J$-&aRr_zSe*J2L@eG+tgwDD5=^l*e*8H4L3l;(taH9| z*=lFsR#ku1uzQVx+<=rW3sSdz-XOE@x$*N_W3cU~+`4h6GVcPH0`c*J*zU5fzLulb z8PTQtD3PZIu}t4KYhEKGY))G#r*USRFyR8mO*u|P>7Y_=Ko;X`1l zb+=Qea=y-`YuE0DbxV(%>Cy1Tgm~qVZqHL4(XyT&aGqU7FbtrMx==sSgn(v@%g-m~ z1NP{V^tYxa1!DVUp=bQ$iocPc3<1An0x2l+$}Og#%e1So+Lg3@PTmQ3+;v_JyD|Q zQYV%Eho{VJycsTB;5M@G`3*YhH4skdGdt#OiX+EmYAjD?4NyXN2*d^Ki(?hF$FjH*RNktnStOqkVs^brJuLZcRiU~&hhVLDE(%`k+&yp?gSbpp#eiXK3e8>ti;qx_`b__L4{$t z&-^;ymi9kf0L=N{BE?42*b?`*!fj(`xEgMsoXL1_D6-bF!+!~Rdp8qTii^A`de?{y zDC0rmMgp!aCMJgK>JMgVad90cY1ce~aLIo6Bq^7iu@Vw;nyZaXO;s%^vR>sAb8}<} z1mfiMfT%~ki*;}r0Yt)L;^M<~gwvFi@4udHWk#;7YgXrFWd)nSj&0^ zYN0GYN>9-R-H-lZfCAmbrEr!+2r2YGZ3&Hg)xNkzorfqQ=82+|571g#pW8zPhaS;( zCD%Rd$MMIUeqC8f%N(fC->9~q167}-ITkaU7LVM=;-Zc2 z?^+@gg_UaEb05dkzl0)3mm7SZPhHygq;P&kQ*ZdS8L+0+~rI@ed9GL=`ctwn|fT*{zyW5-5z<@laCxdmzZgM;@{SQK(pot$Oa8F3>T*cO37s7tF>p++ zpbb~+d<>s8LV>X;gOg_l6^A#=H|EWjqJIu}16r}&Qg3!V0)=)@kaFQ`YioO9^>s6Z zgNca(jN|B-nA@oupFu@}Kp;?1Q_rxY_Ev_7Z9Pw(9{~YsK*mZv6sJlMOGvvNQ{2jb#pfK2M=>)RldW0{1L880i1f_dftm&T|P#tyu~Z|sQdR% zKYC;^vDSqgu^1hTI(0$a0PgM8c~*8tTy*<->pSauCAIih$LlG|ZN0qBmMgBHsPYE) zQnCLDj#$#J^EEzfkwEQiZ6ps$&He)d-`?5iH%enF{Q_>KYal#BDr=W^C`BaHpKei{ zsozSwWJLc4I801+4E0QHRS$ax+6oAra<_f{{8dGT1Yo99Q2{$LK+^m4>C>nMNv!%O zCnu*O??Wf=o!`phqC{T@JSYbOha&I|o+6BkdGhRo9TJ}&24!UMI94^7`5ENjRa9(J z^7V2DDk1PxldP?+0W}dhNWb^ea&tqyUO<42E)O*K-wXu7g!@8{GS*~XDPLzKT((^a zmn}^DVy?X*fLzl%L&eBMYrrpfLjw#sG^i;=&Sl(n_sCr-M`>lg_j*z9dlc7o>VwJr z6>gbcs}eW|2*9D@EDeWT$1KVLSW$q1M`ZTB7X=gW#16YJ zV5eS$%ch{7??A5jzH#oZ^|amdv`zcsp^l0M6IkD> zWy4a8S;TYaS@cgQSfL2K{01gmVA zN2KLo-IBCR)(_{SZFuex9HTzYquS9s++3j&`vH6m)WIyR>2}*^+|I3wf(R)?9uYBCm3xsN2wJ2NI3h~=xA7C zH5uzCx8VZ9MN@S>*0by(pFeY64@xT@61?ehrgB7@u|GCk=p7l+wxiX*Wvd3@4;S~yr49j zG6Vl`I~0DEJ!*6J6i|`aE-?#_o?+5~f!V>q!2tw0_3sVK+9L~S1`O~cIc}6-^wUdk zf-$0n_wg3C8y0)<>Al5%rEM|6&vH-S%S$>jDe3G7!s!}3YI?JRk(`vYp}RY>JvHlv ztKo^3?$y*pehHeeEXMq+$LP9vz593TQfypieryQm0PyM<($cdybOE2Y2jXUFgl)DO`DM+KbAjj(!byxqyE`egyP^zi=4z58t55Eak>K^l>JN|8f2i7fWj z(1$PIrhMPx_W3O#^+WO9vKHetWf5g^k6>U_@S_R7lU!iqC_FTQ;#MD6SvfOn04GYd zQ@7J^BAU*oyBz7h&hdLi?8rkS^v7-)bq;;@*WCPsrtWc_LR{wR$FVf{-ZMt0_t%C9 zL8uGVEFt!ua3MbGgpUi z{#I6JsvlIY!AVJi%M7dQWKln>BN_-MSMAEXzE3yz^k~(N=O%Lk(+K-wvgxZY%6CiyR`*glj|l0z2M7Uo@JS=W*XPJ&Qa=U5gcW^#UX>NR%5*=+qulKcHx zJ+ZCTs^F#P%V#4tf}iU#n`?D$bE9>AjY**K!^yKQWxEtq)aV80<7Zq}A2AwXJHLLN_DSWkl$+O}!Bb-17IU8G?vCm9{qoUX%|<`8 z5v4ELE9D`LHFVC)%bPieH4~OU<8nt@K!`X%rja|*YsnUpf94h`%tSrP;urGUFV!%z ztNi*MC8gAy9IA0bvPKwLpnXB=Sth2d;`Ii62CGZRyyY1KcrNFHm~NSSPGgZhmj=;HE zK8CWskiOw&ox*2ceWrGHwqB^RRXbFfOW|sMUF?O~YObq{l`bStDNm*O#mBt+^iK80 zPzshKYJNub1`+Z0N6~lPN4trP38GwB>ttlt)2*M*UD*ewP(9%%R`rv|PWE%?KzW@Z zyYHq;8*S5}g8JDTk!z@CY}pnW{Pm!KPiyV5Aa8!FU_yjkmfmsv3TD28!j& zft!r!H=B$pV1%ff$1Z%duHK__aSz@KxsT}=ymsyP%pr#G-ieeN-`bI`P6QEtdyx`< zg>z^SJ4-Om=2y4U@Ab?hAyS9UUHEI9$sZlmBH3>YTnaN8JbFM}d(D>-viv*e2S;9j!IxYKdH)nA}t3wT!$b>BAg>(@mL zbTbZvn3+fE;!VnQvHV9&SC1rRdgVrP;m+B0+xSX7j&vEZcC68L#wSmnJep;FYH9g3 zHa1p=L|#=@HK%=cOX^nD30)8{ndQNZM<57Yy-ERoZ)@V6KEi-4x$x^NkB}t_&dHZs}i`6Tw_8IygXr9{;B7}zQ=_zeX>q7WT!|48)xI-^YRmWsP5#} z-vbq^d6+qUj#pF%Xk2FRcuGW0?YV3j>b|Qv1Ys#@X(FgKf=zUmkBOf5;f@g{j{vpZ z-iyN4$E?157YqHQZhA3qZEc-UB-Ck9uM+9YG<>e~<`$w2!Y+!EO-@b*gRB9_x4|~Q z{``3r5kd12EF;%I8lUv%>1XBT-SPCS9=J6zY_y82(gUou?5EU+hldLN!6AF6 zjBoPF%=<-I3|AmiO88Tm3;hzKqXR)nptra8gg1FT?sQIJpcGgr03(wqsq;-yk+4s* z#fhZc({sYLCT1;QXlRHVm;ne13WAf_l_HmSbF1(b@YU9i`5^M;>sLyBMf6bgJoL^Y zCp%ly^@_kW16`)7%hD12Uj2cFu@-rsu7Z)%uJ#j2~x3a3}VE&QLYo<23( zn)!J`#sk(Dzd^|av|qRL=Yf){Dm9=^on>Hnovs}D1Z)EoFN(UljDR9lY&&q>a#sj* z>?C5@b{oJ6$BX$Hu>pVnOhwl#>Fl8Sis>r zbv!{==K{AZ{>&Z+2_9QrMky;>6BE{8mBfER=;4Mf+-*Z@8;AlNdzO;kM@0oh%Hb#gSLR21dy^?)i*dGWdTL6; z*f=~dPXM@#a7joo0%pyRwl)P9m$E-i>R&sPBrN)Jw10H%ol4pAmIoaUswp52Js=NRxy~Hn_sW_YMpn2s;_GZwN04~=2l97>?n%WQ@%DFOF zOcKf{^hRbr!e|rWd+hEFO2^gh2VU61SDM_rG5aOlP1w+?e(x^z~oj-~N;1bxg+c`CYS z;ydgbD5n0`zu@dW);nJS>=Wd0)+Y5yjw~-HZr!!;_JapfOG}TaM@+%}trW(kB#oR- zvMbndqp&XRWT>jD^IeC7b?S-GLU%Z`jqt7+IICWoKu7Pz2d3w?j9!RZb^JnYWPJH@ z)fhjQi+-=a3siv34!TFts85d$86EVS7=xNpU+gADM@3zlsT%wc6}8*MmX@9#Q{cO; zjs1~_17jr3E*=35uDbRP4DjPmXXQ;k0H|dN#`oTqhFHB9tghw=TA%u>^^=Ep*9A?x zS?mc{NPmdQ_kBNz+DpN6)ZtBQ-HYEL3B14}v0HBYW7KsK5zWOV3De#1j+_&Zr%;fQ zrbJp=TAon(7pWxmn@%Kxmbut4i+Ag&uyq)?>qQs%ZvJ&v>3DpKBVi;e>8w6W;eZvq zDyd-_IL?>)f^_t;*Tec9OtItHbMzI9WkV?GkkEjb0>Ado)m>XynYCVXLa)foU&93* zbNYP<#@kSH`i14wr@>%C^<#R#sj(TS&j0+Q;2J!BcZASQ@UnoFD}MLG38K~^z{ipN zyB@KBNDNY^SJKcMp11o}2V1~(*?NaoO5vr=1TU@PEj5=jWDa-!`B0JS%R=1$^GOT6 zNFw>qFWj%0>cJHI_vhMoC<4fT{`#nJ{rCPNen77F_vcYC5$iuYyjP%}_-BXU^G_h< ze-8MC?tkMUo|bw-jA`Ie)&y!qeOa1ozgnD&Pk%e4`L=1aLTra7v6Eq}kxyEeXX$Rf z{%cP9ao=e;js8OG{%SdBN;? z0+(-PRF6A6#e@8Cw(QLgHk&fD=Nh~7^Zp%FJkDwdrMBZJ^D&>&L(3Q`SwgVWY>gRU z{)5U#5pLQh!|FHHW@cuBQ=ZT5BP!7B4;mW-YqJX^SoIN^XcLe8)IvDXy(9Z=D|_iP zm?Hyys}SDRE4i%tBWcOA>HV&=(;(_CUU&M#E$7_<>Hu zwdEb%^KW4dIfuNk)G~uZ1c77gVWt*%z^7YSkUKIOy5u!u*H>Jn@87>4jiUd-ID$By zq?Om8b7*G3m4EnfP7pW_+28^D5n|hbQQ)jBs-mIGsphG>ar} z5v4=t%5_?Iq9_}Wk~E|*d_EK$%({TUDORSiUC7umedCK%o=Xsa!-XfGa81IVWa2~+ zhL);PIU%9)xJP~0E{KNh5e5!={dOx)U>%P^1dfaj*>n-GriERLVs_MurZ7<@QLp|t z80MlFB%Pp&KgMzJw6&A(f=!2NhrST@2Xb?rX@)YMQ?Foxis6b;r_+0DW72#$Q(+`K zq`sl8qv?OOX&(b_Ucz*%#dL;RTMCAHR432q*3*#|wWM!h9jaeJWO9MZ&_Q_R-aV5M zXrfbMT=*+ok{o04`FH!`OR8xCcFr|vYgouu$f%MIm_6Xir>35OCC|K{X+|=Qn|tCp za(|fclQ-omThlk2p4!Ibg&!)G+epwu8w@LhR^z;lQ5o_t-Jp$AnoT|hAtFD2EvlAj zhyTnI`DjDv&X6N5Kg;%t59@7hW#vg+nVCXnUwam)`V{o_6Sf#{gJB8c?tn44#(y__%$|m=BcfMHpP4&oWT=4KQqx1 zLbcK+mI>dwb&Fd{YPbhR%RNhc)8yk53@ko@CoZ9q4?Hh-KK0!C0;`EyK~PCRK=b6d zN!by~p(yy1EQ_BTtZ3D>vjUr&pR|j|VNXSqRGu9yYk!4@9XK+c-#*wW@;HJ&Trp28 z=z2Tzw0jxp1t+a%WDp3}L%+<{xY#IYTK!n{qs&F1SC(|&-~@TMrjb!t2PHin zD{CI2pe>|P!Cd`*Rn}Oe9xytW)={DNY4tU=uwcIW(AHS ziURxXokP!@X|-Ee=duT3?`fnB0!cPd{)F0=?W|nuMy}L;aI0_{RDeda19|m{FbWG3 z+&&l59voqTw%`pg>*-B$xcV6Ii$Hu$1f}fl5eYln|p2a`nB@oQ|{ ziO;K;*uuW?^*Fg$5H@`+3&&&X%w_x(E7_(eo%DafW}nN;FUU{qV7R2TJn)x(C&)uP z@VbwWOw+msP zdM*eRu!;NM^PWH%*lEFYZ*g{U%!EY4a;Agt)EB%QQ}Okw6YR> zrE1F#bnSur{6inFq>*rN|D&}ZU(Kh5&g||6hlMDBKrSRSln4S4`!l4imI=$ospK2p zh8W+vf&2B7jYO!BkYJ`8`%VI(7X%-fz@etc+>f-hG&MB*00SX9E)EFI*g&|eVvizkqj_GnN=QBp0q z^mN3hhnWsFV-8hD!4VO@78}#o<8pJbTl>n0m8$D*&P5YIERe8#!rbxaJybNO)@9f(hE64BIKtZhixT9 zHWEmZ`>cWa+B4^xP1l}Hu0pu|Tnocpr91WZ75ul(YqMJo5BI-0w6jyWaa=Ms;W{0V zb@ltszNwN=6;7}YRW>q$ta}ZATxY#Oi{ubY@`6X!zv61-pkvRWS4);rqHeU~z9ZyU zUbh!ikwF^z`fqV>$iU?;IY@SSzJ41LdREUEb=jg)Z<(c=}2d}FPH4bjW-%C6K6I| z7oJkr@7P@kBVvl5ez#|Vvv8tLt5KvSTt)@H`#?REaVKbcB&LANRLh0Jt$IW45gRcL z4OVV_g{@@C?hDswaN#Syz^t`pQx9=>Y3K@4=1VyNvvs@`huLAZmvH70m)&`X=FZ5^ zS3}XSAwkX%9LjP~hPZlF1&B)cvR$Om&&fzhDIw+w{ZuU-os2wR&K;EQA0u`6=yhNq z!{0qYIuCmFdma9K=0_t<*=9HR+y91W-atsx@G`Y#q`(C zAHly6R@BH!(oT9aO^AMkHUEeZ$miQ_0i5ek|pEP~_Xjkq+{w*)pPa0n~l`KU{!~WqHl_avUk%TW`fdF~eL& zYyexr^YD(NW3kDDhz3b?gSMtEKRh7)$w8b7$GPZo7N-(}SpYx^ z%sDwZMPOfC%0+>2A$N!A_smAJLn~lgKE8L4H2qT|ITm0=28Jx6 zjkHEZdC~SZVF~dI>-#VlKrndb2o9kV6DQ{I5i{W^#4KA`#hR~;>ea&NahNM59aj`xx&&)~9jqI{;8BZT zhG!sDqPS>T=jt2dd$UCJOUq|# zEXYGZ$^(`aHfdKgUqcq2Zxz$dHN#6$JZdMQ1`(uQb*W{_eavWjT4;#X!vFecVHTk} zqo8=%ud#5a_mi+as*O#=HO4$_mWP!}HC-JX7zClCj`N=m<|HuLKes>0?)GX;MRp@1 z#hWwz9m^_cy&8zXsdgM(dY572Nii_z>Sg@0fhjDTvq?h#^ah$KFeAIuTAfiKTV{W7 zqA-6;xc#&_wN5X4UP;NLJFU%)E;*#YATt9tpV;m)p_V(pqsl+i)n}j_c;FFpn)a*G zbOo>1H?P*g@46K}VNrsa-{S`>w>{UaeJJ>Z9nQ^xVB_+YE2*HWimcrv1Crbcr>f7m z`_BM+dLF=`CxI$hoq;*i31<^9pMiD!NyZ2kTrC}hw6q}rs6K!FN(vSplX<_TwY4`r zi+8lN=m7~T|0y+?7#YBu3UEq{e*Vt&KScU^d*%CHbCT`Dy4Spl%dNzZBK--xakZhC z$JtdBjrlf-SuQ3F!g!&)yzeaFqV^CVQx#9LQ-Qty0!IbcQ9b?ngJbDd7k7-3)GiB{ zuu6iBzq26YM__p@oRnDpWZzy1pJGc-Nx6bJLaM>xy7G0G5gY);1J2-$tCW)Z$YQygD6MPY{4*tl-0VMbW>EsZka&8o`7hj(8Z z3AB7~vEem*NI8&w0idW)=3Pz)8FRUzy+3(%>QZE;`ReKxvVVB}hRoJ0bdM7Hktj?A z?RdQ7h@7#FJfQ0ZR{weWrDWjLRSt&-{5bFw&_?5Fp|G6?;d+08XNs-bEsX=7wK1Vljc;WkYw6_SZq=RBYBj z47f3x6GuPdaF{0wQo0A$dJ36FTz-30m?fNXBI zi99sJ+jJ}t-gMgaQr%b5Yk1vLWPXgQlE<7fGOR#hD|dt)9)8|Ns@YWu&(E3c9Kne< z?Z0GJaL&$3eg0L7f6dst4=W79US7^35}iD*x`$P;jrea{Yj_A{dz2C%AAI7@0NN zn&qXRIHB|w;j2Q$q}{8U9DcIU+ zyOnFz+Ji;rvf!KWA&=4>I+~4+CTS$n^V#lFAB?VemJ|FZ#$9t zK9V*m>?Dkc)S*=tsVW2ZYW)`Bw3fRsmSLsdyuV!Na&Jnar1Az7)nNR>5i0-(%_0=PZyI>X=KYP~-RIRuGlYTnny9OfXO z>fjk(zfK$92;#luanm4%f8yyG(-j(WUCetY9da}O?``vPiSwU2E-6-GX6G$Ng-~yE z;{@5ZZmrkWQMPipL;Jcqd`G@U%fWPh`yTx>ZIv|PmU)}%z1=RWf4X~}AAg+wNsm6rViI}wuZGE!Ks%M-Me7A5Qxp=Rv zbqV)@VVWXv-hP)UuRtigpFscnYEKU3HyY2?&9ZQnV$1D(d~#_CVLOuSv`6U^*7iBu zMoF^L<#v&e>jRaa|7u#`)H|C>{j-+f?aLbC%ox}4q_jytmemV-}>Up zl%0K;Eua3la7nCibqhU3x0Ya?d=`Y@#D3ip)^B4Zv7BrMl5;pAi6=? zFG`|R;WM~PKN9_Tz1u~@+QS@~<`w#HmX_!7E(?ie?{PLdlqzucRXm}N?MLn8Zol5d z{?;+=kFEIq$Piqa@R&c0MpHvF@I$xyJWdtx)wjG;&-5t=g?(sdTCK=5ZyZoP3>}zn zSi$*OuLbl>shyd6QKkF#^P=f@{{0t3P_0wnnH75HrTYCXthj>D%SNq{<%;NEGxVBe5E0_whCBXv2|O4^fB{ND!8>09Kt| zt62y6Vj-i8Pic#AC7Qvx=mnbhAS9CL0;7PkH?@YQ#rShEeOMVAT<>EVQ6GsuYyRBl zBKm9QR|pbcr)cy~C)ws|5@Be$CB`*>T(7Ba2dSt(5D^TF+D5J34BZUEA|h=I^}S8D zkn*u~FYZlES##T_-i1C(iT3aZYVFpNUp&V1Lh+gsW=n2;=a=0Sw46HG10cWK z7Q*?2iH+sogzhxHPK#tt&X=|HM z`>?%%i^@0yx^vDXqBYhlX5pHzt_|$AJ}wAwySj1)M#f7L61w2ENY~);zxodEqE?6< z8oEZ-ce0)~gLyS(0PYXGH)Z4ka8K8pE3-+m1hbRZ~Vd4tpN<%@RSD0lwrnSe6a7P($8oGDpF@8yDRy z&y=qX2G8kC9K@b~tkY)({!)wgug0RnclmRl@2tAz-^fH$SN`dFv~i4+`mt*m>2rw! z;ayE@==S3Krj*NW@WgbM} z=D3~3HZ+k*zZe%umJWx%siS=X`i80{#B1BZ&#!1>lRYqfn(_K$oT3AO(oC?z`uh4N zk=9S2W)Zjq+U`GipAhqP;2OUmLqf7+{5gWYF~>%rY2Vtjr&gA!xfyzI9IV1_7jh(i z2rc>Z=*!(o)m*p*HG0WFkxj9@^<`h`hH1)UIoRI-%q@D_rYFGkx%9sj2ry)$22zLfat>9{=^&J!oU!^A4|9v5pSELZgO$vMhyB-UE6b( zR=Q}*147*G%YG;UZ0XA>g190_dk5i8mjhUSQEaI6Tm;;qfX@o}^)0%v|t2 z;kVIndt2L$e01KGW#VLy;K)c_9dP*w(I*xnTsN4ZcVd<|m?Kz8A@A|EM*r9gS=9b( z;Suz4#;zA3P5}W`?D)_SC3F%We!dY{iu-F+u~6NKmDRzdM92HRY2m^9+W4Gi_pl85 zGl1z~o67Rs)&4vnVL`3aA4fDez`=owAGN;=NwD_qhVysmL?)3ym753z`<6#e%Y<#r z5EfZ;3MyJVVE0K{g6xOJQfNI??RA;!^Ih%)HxP|X$UoGk*e}U=TRc+!N!)B0?Ng(1 zQJxLJa}bmGDb@S;6>RMbY=}k^=9;JjNNzPxUp(h~kLR_S&VaJl&t>jERp)?6l^whc zk5j@HDza#$A%cK&-~E<}>E+W9PH*^uiSifcuOEgprF$J;Xox=CXGJ}`E8?8^uoQkocM8|LzTIwD>YV3>vSfy9+D|N(#A{9J7XFt%k~cDe zOiwV(yc^^hMM$h1-qC{d>ys<7U}rHh{-yTn07Vt;-IT5*LBit45TR&qsTq+fJd2W7 zOdaew_ow|7B+04>L)yB!tTIKAb zn*iP?`1-?^jrk#Ezn#tG7!8V$JC@D!CaE7opf)`iCv=zEWq)nh8{$7}V) z1dVgV{2mN`qvW$aRV2zbmxUAlA)f`*w5|&*fDit;a?Yl8+Csq3WtxkdJ1w-M$D>q9 zv*Bye$f_cHZegMFc!Y7rDTmB-DZkP!Fq}-u9CQ%`i8Ii+#|)48aXhFq8>@63aZ`iT z?rov{5feC(gVmqxt6*w4u5G)y;xX0LJlC1j3}_Gd-P!2()2f5t?&*gIswI7{z6&ug z?tj3jw>)$4xi?a5K@LtxOmWb%3cMr*ycp#f-kcQ+0c7|+HoBrB-ENu(lpWJSt-%sS z2qidza@$oT60yyAix$+Oo;`oA0J3#ZhTKVVOuDawK;ys__|Zjgk37If)#M-pQaa?H{J_ruvMUO>*2FX-$dsVCUto zmJeH?>#b8d`o2=DKMW#h!s?RcgI!UgIA6jotNG49kl9$Z%T)EU&Pi&dSLb;XCBnN^ z8qOjSGTR0C(O9{=|DZvX*MA9Jpll@QHJZhP+ z+n5*e2Gw)$K{2uJg_Uo#F3lrde8Bz<`s5DQEa<=a1BWBd-Lkwi>@vZNJ(<%5HEYZ+ zn4rI|LH*9lRO!r6VUXAT)r{yE@N^h{MuW=pCFl%*>-qJmhf4Cl2nyEL-{<|3KFYqH zWcj;oa1ZsFHUA|f+_~iZaQ=rY5vz8r8B}^sR`_UC+DsA z=oh&MiOlptS6rc{T*SKfA+t!=qzAf1B>rNftdz7~nDeu#7%d;LpDHb9UIAu%nC?AW z;q7rq9d_o)f#o_9vKH|Y5e*%5ce_wc9j{j~sj$^Ltg{P)D++O>QLBX;y#CqyDTNN96yeTsIDZL~;iCply77&~UsoxwXM$=p zCA}{c;2V$$b0sPsN-Bs2jibPgqBfs7Ms4ri*u(xpmF}Z*amd$zu69D*0+OH0yu2qb zP6a0ETNYX=UcgnGN#^8*NO$hu8QT@Wv^XFY zH{y(-ILCmz9gM%0HYFH5?@M?2(JI~kXo=BBDVO`B&h1W?)585KWnRx|*+ZA+;Q;;H zjkg+l0=(??3sA=a`b)Mf%P9ABHB5p&s`Y-7q=#Yff&o4E!|@B;u6f_yK0d1V{xaO> z!_l@b3Xc9*Ig3G z@7lJ|G7^h62Cc(C-d{>9FV_M5x)5NT;yCl;?EB|IavWAGFyM%C_t8w+3Rrbw9ARrX ze+bTBfd5bjf8^|5O*V{O<`C-qt0{!UC54lwu6boik_E@=)3rjI(Xx-f43p0_h2asr zKeo5A19}~asA<5UGAxA+f1@U7%ma)E%@|Ma2+UO36nz-C>(7k0dXCSFJLRBil<4ya zYCTnAaxU9-VcWcgfDADHGR);2-kf(Ru?DYTZXRJ6@Qex**f>?X0A!ABOLH^j;ktu_ zX!23QQZ92)&U_)Ipt*pfO%fx7o=XK-_krhd>F0ck_PC^m;;RZL>$IbVQ5>TA8BvjU(tS)v)rzI z_u|EiSA~T3Jzq>7UsFkWcM=d>T}6QfF6-Evw;bj0-L}S2HHueVryowiA3H+wItHMa z6{q7u46*wzyw@BS;ytlLfVLM|&LIS9BLw=y14T?I|gbBO(qhmX3LUd}_WK!W# zjw}XEliS)!1dSe~aDdm~sFKO?j|5w8-%RB@6&*C(6;EBeg-8a3CEt-Nc#Glmv@hz2 zYfH@oe{dxAlHK?t=K!@_B(7t6r?z5s!6o7Ci#B-9vr3Cc7({l#Kz!J2dT;q+xfKaYaOP3 z0M$E%Jt72T^hvxCLa*iOn3zPI_-xcmCt*n;A31itqt7QtD%!j4cz8@&e@yB=w`ffS z=?YcdSIX|Wu?No?T2D^~vHMfcbqFUOal}r2@2rp#T!q8c>cdo^_wt@F9-E|xWkMfR z7Y>7Q;iy$TzYEXZ?ZyB|qXhBg(RpIQ_TD?5)z)360rS6FMHj3t8}?{^1*)gX(?Uxw&0SI#m~FOn4MsP5fvtH~vR7l`_Nz@wJbAqVoD<$9H(%%l3=06qc|JPJb{d6w)m$^lU6o`Jca|1exbyUTpm; znqN)#0p0b1zeIsBX!#tjS*Kud>WdR1B$Mo+UhZSvlLf1&?tRFOyv#rpSnNC5#-PZK zn%oHny_E90rEI%3aMZEe7yjk*G%6VpTgicNt5UbZP`yS=&4OgN>Ka-Y$$}Jzc z@J48G2-H|Z==Sz*Y2xXZ*vk7cd}vdfjqgqw7Wl6{5yC~dGxhHn9H8jJSJFw&pAzbb zR}~5oX^I+e|A)=0B3MOi--UB~BU5hO*XO>EuhS?arh$@GO5T25{CSXWgVR!P_6 zQ;lNk`8iAUDjf5a6LR#)!m1!6zVks1l7IMaJ~;E?Bqi+K*{brf=hlB{xhmmU#!rp! z7oK$N7Za}qXzNaorD+|Y8*wqMK0#_ueM!8*T5i`@K%?=JUG%j!i5ZbLj|})Uw8t=f z57qGGES_Q)8-Fr5G=X;iMaMP$insW()GrTxznniXKN;)v+Gq_u-PWQZWBc*s?wAMg zy`5@1Xp^+#qhiF#6swCiv~YmL_D*FRhUzklh(yI$NsdAfK;rAE4? z<8V>mOuC;-$kR4F5R8^XUk zaDGFJfoPPhhUamh*T4Mat7bpw>?`|_^@nUUo>HKfG#pt(V?f&a9!cO~a19J2Yo(HjV1qk=t9G&tlwMQ-{xBh#Z8B+Ez#wVcT zmt58=ct5;g?7h|J{%_@gN)p_%I}bGquj$HZhx7lZldew44E{=ITRPqH<=f*x8^*ad ziMRjtS2Mep&$xYz_`n%pICU{Z|6WvZ^b}XtKb43(RR0br?*FYc?UGO3s0gr7q01#C zBy8umT^2`e5_tmY+U87m2Y9RLYPUIPgLC2CxM6-;>}C6dA*|{c2S7oA9StbN+71+u zLh)7V2F4uFi4-7378vKn*0Pf}GJ(hQ*~`j(+#xrYlo19yvs8~X#rv%z?)tBf`&48V zWZzaaW*fDa0Nwd+#)0$Z6;gOT!TLbf!T)#QMndW*O%P3=)Qo|U=mgWEhJFF12oPKY zq!E~r1+i@q@JDJ#WW8c)96>`EZyE{m6HSR6`(dqhNBrcrW1lQj%7@EP{rl2KSRJjZRwRI`PCPP9)tEKCnpyX2C|qp#;M2M~4{g-iryoC|YvN$Tk$ zRBlcmT{nGfCGd%GS8 zKMJtb@M;UkV)jx?9KDZ*J%E={qVca+uWHAiUip5P*zXT6eXL@wRtw}5RIRx=!f;9Z zgvxydV?`3VgM~|B4<0CjC5fNn zC_>gsl_9`wPnppRRW;39w8|0EuMvHW*(I77peT_!1HS9m-(=X(0bbtR++12g0S%yt-`_)7_+0b`qP0bo-}^G{KJqtYNKnYvt8%(B z?!B!BKp_^zdtZr+K-C)%(RK3l{K0D=*uaZVp^np2RH9;M>2Ek-%2?dfM{7-A6?FH0 zr*3MW@F$z-yRp5*X!Yz##F*Devgh_(eGbl=3I%QZ?ip&rs?);!#{gF}1HG8Mxf7(| zmuU8b$<_QwL7nZiqU5TG+7Cwvx?r!%9=zyWz);cp z#O;?gWA6KP`_X-IL}t62(?FgyP@#PHF1O35q!w|#_JGMUrTVZ4#J4kE>=HgwTv6)!z(`q}o5a|9?^U6<$%j-M>wflYW;!*_edKFj%to{ERY3SlNfnr%s@%qoSUBy z0YLowJy5Cm0f){)7lo;uv2j`eoep^$xZ(e~=xR2YEa-bYC_D-R>3bE2O@l!68dd?} zlI8iA2mC)ut0$X*EtIlKN&3o#uj514EDUs}ad-f45wys|_+QemMMf4{XqIxbx7MYn zgg;yGW?yg0@NoR(=HE6AyjYcF0GR{NRP?cItk6u$yrJe&_uDLzE7f~-M{xA2?mF@~ zjWWM;nq!=3IrZNHZpBb3B~rE_a_p8!f%b!7Nd@a*v+j}pPbhfz8`^$09&Q-_RJ_&@ z$ggCBm(WDkkiaRgtaTrbUd6Pn6N~UHCU}7?z?cW6PEL=nZOO7&I=2=C)ca$E zKhVVACZUqVe$`6#9^JjQDe_Q;uB>%NdfJ_T|f&hE)bh2A>A;cnORP z!Y}_kCkMWxK1Mcc=XO-)!# zu^X|5Dq6Qh8sk`!|@Lw>y*|hYnazdKjPLEaL=yc8#uU)t^d}@ri ziU`5h#fs&d)H4t;DfdEtGbZTZd!tqF5s4yjzWgfaC!J}-%bEWEFa9WG*$o5oGkAtNMZq$kE$l?}pUJ*Dj7A((etp}-_ zuTgDh#-L`~wHxSk7~RQ#3f8g>%KM(TUFc>Jl>2k&mUTvO!*KyVg1_4$D}8kpani~K zY{48(cMO^&o+oa_yH4BKFR`nge!Ttja)EW2S+Uu$P$;-bQj;u>sVzsu%;0LI=S#;s zb;!H`Pvhw% z`HeYT0CtSYwoJ?H%n$y&q5{pBruo*;4#3q(UJ~>NFlN%U804cTSqF7of6!?aik~7BEQ4)S8~xvoA`rz-VTNA2HCYvKda$aZ z-u=)VnCDoibwqpuk!BBPcUeqAyo4+PTLNTG`kpf`(}Lnl4QimQ@zel3IVwCH7mB5) zEq`a}{oG-PW{vNzxJJE;TH4q(#yVQo=(0&DU^nHL$Ry3j>ceF$X$DP@f2k255uak-m)Q`a1LxYFMTW)1=8p7dcJ zE~gC_WKVIj29M3>BY=pKx?@uN8~ZbyKMN1cfaW2re7p3qagZN(xF4i*+o?NTSzEii zd@-;3LLS<7Mtfe=0;=;!zX9re50}P=KJ-nxceqkQ8;u8V9lV-qupg=Qxx@&9Ghsn0gsROeSd<5j!3DBE^(h7WOg$l9 zh-{xTLp*Cyg4Exvq5ugQ6}F)($=kP=3w!v_gDsfBnF6dIin6)>%a)6T_#gwDVr%|* z^^n|~D2>UjK^!M2J~$5gz4Mz{jQy^GD^GWB4x@V1VY3_6EZp%kv?zYsQClv zrUc%O3fKa{BuWrzKu=Gd5n$wE!U9~23h_$0D6Ic-li=3=KDc_t{RC77Hof??vAc-{ z(2Dqy@Q#j}EMviT#k~vg7l4J24^t9zPRv1fO-Or+nXQ0gbNRJ~Uo&+W>iwaatXdly zmKo9WjnhzWt-b<&1k4AXeFE|(ou z?vX*2MAi1|M{)acnEF-K)E`q&pkxP+$84f%S*SCyP`Fj^Br_6p`>74cm-RgB>|Gh@XACwhkqdpu;&sMrs z53;6#MbZ{F8l$o085s#|!0^S4)&Sb7$|eF1mz;S|h*gq@B?BafW-gd{dU-R0^bHKV zh~gZE3qL>R4%fdgBl_P`XY%=$e1Ii=hM@_w7unv2`}vjQNVXBj6&GCb)lBL8}Lk*5PR7js=T93BA4S z3teK>>Nx-)BNM0&iIMk|yM2xNgo(jza2x_zi^xNt;H764iw{JDMT`;`AQ|gbbIW>J zQ|EWtFp@F-n39T*B4hW1qlZ)js%>H_fi2I)p(J`KhHk($0P`k60i?3JseS|J`7xlZ zsfnfq3PshTGXl&v{Y#U^^ER;zT-8ay(J+9wkOTU-@Bi^sxdKC|k`i-mO; z++1iG%;O}O$^XbQ6)dBD*j5W90bak9yHjpKZutpt?^{$CK|X%M zz}=s>9(nSMW$>n*-4y{Irwgi563ZH!^a!VeZaYOWxY896Apy0-$pxb311Ax%DRQrG z>$Zap3E6ifcG2>q%<=r4D$0z_86FWWE$dTVIq7XvX*(|wcYmqlNdir2cuN5Y?4%CF zTZmk_LtUonD<}lsWM!y6$HFbYlR4KFb`kndAX;(7^eDhpC&Xn8ytUxIWB6#-;64^D z;OJ@lzW62(!6j*Z+m*unoRv5DpQNkld#wNszeif&#Tx6IHMj&Oi;*UrWV0cZaIAD* z-RghmW?htY{#!sE7xwwV|G+TiR@(o+&9VOPMe#S~FLjuCRi#2vZmY4FEx5tG|4Gi8lFr}=xWnfUj5 zyr>awpJFUE(*1n>1(~@b!^hC`As;wP;8_!LQ~ccN6}Aa*4XR*?U%Q^*#At@>2ds-P zO~kRCT50izzZsCy8T%E z&W^abGw#XGupqC)-B>Cd$Mcy+lA%7{L|zQv!EaL|0w9**@@{~_Q3Hh%x{8VhC{I3u zw{9mJ?<^pVjmK#`ieDA@%??@MqrW*y(Sz04Lo1s`! z1IhWSo|5%+AXB3%q+Qa5P)?WTtrXftAl>m@o*giv_4+j!==NrT-DbK?+SAGGyVWX< zA0>kh-<;#~}KF!K0B4Q)M@xL=-Mm?21+9{8 zlcvN;lLDc-EbeopDt~I_$S|k{HAWZrIom>FKxZ-mtT)8zuDIx5c%ak0>jy%i&M`Y_ zegXGa(LGXRr0yi7G9sj+pL>&BZ$}xie+pmH2-cG$A->;LT&gu^YRH|Vf4zjzCZ4l=MZz; zh!f4P?q~6lX@*aBvMyrrXBf?$?J1@@HHN1q%`>n19Rmyb-ltBTbxmJ=J}m538W!dl z;tHrL9#|ba$AU$;@8gP;e@c{@)VcS?8Lc>n4Z{7GKKrN3&N~Hp25~j4i-I%(w!g2@ z$47GAle*cVu_!@^#KEsPW=FdlBY4|_M? z;?E*3PV?l+lTxr$*~Gfe8zds{e+?2;+Su4+gCIwM!1LMu>pubeJaY1rZ4Wdj;!;yn zzj-@cf)PFz)cR_JRAVhPXCq}fmVxdvL$0jqYGW*Zg%~Om3HM|N7}=l_?qfaKpx=jR z@~ImbsEm;A)&#%euz#IT>lY~Xw5@Y?miqVb{CL>AormBs0mqvIK_291R>wmidv#&c z6#GSTo{xU4zCf2^V&l(~K=Ik6_f)f~(~1+*R39`^b(?rre1GE8{K}Vm9kqGx6 zHtPz1#5zdWtA5Cgs_k8qX&*VG%>mN@P-_>y^;E!vF41CRww)g_L|GD<7Lb7q0a%CA zB9cOxw5-hs1qgWk_KX6Ay`NSpuQn34saqsU_&EQ(vpz`1-xGbp&X?k%uWpFZ=^pCS zh2gV$owCo>>~bew_{$ay+)e@iChT1+T`}e&a}G>yZ3V?%yH&AfBj>U zn!ig>A#pw5f%mt!f3>GD2a7)mi=AT|2e|W32CJQr^LilD36DeHxmM?!8prszq#T+( zj#r8OM`4m+``%n6tHNiCJh!uh&{k?Qd6!cH;b-szlXS85ED{N(u&gbD2Que_z5XvT?kL&FO0Gk6FfhU*f+r5>;?YAg-S z4qSP@4e?$$lfn(1d=;~eqbYs|`8YaNL4Hl0y7u`m@ zWy|vMW}R}G{istB=GwDN^VJ!n8#MQdR(x`(w806Dmm2-D{cxO@aw4CWrnYk-{sL1o z3Hze(`f#S=@ok>A4n36fjvhgxI0fALo_gzEoK9$R{NWv6zQanOx-`mZZKi^7@0)%G zC7_0$dGMhGv#;#skn3WDZaN8a!L@t%fSW2JEms;7cRd%>)lsn_<<1o_$ebC7U@47k z{Y5<3^(n-HckQ{$@vx&pO-oMgUIzW#f^*WzN34U17-QaElxf9?W}Obod#W`DjvZs% z9XpOvNxS;4hHJ-4C$Tl#Ggr5_Bb;{<4t$WAxS+7`IY>hR7U-#KYJLE*HupjDlHE_U*)NDk8@(LB zxCb^E$sv(x;~~(}(aFlo!v^CuZQ!I9pRC5Yv^-j8Dpg`!g$*mdbh0lh?%9lEc>yw9 z8CO~Lf3t4?rfK>Xgcl*e+{NRn^qsp;Enfeo^Bv21X}+5*xG`7Gp!Dk1Kf_4xbWr%_ z{f$(x)rpkd*h8O`$fziHEZnCY7~92Z5fg8j7R;BgkKHd%j~y^~9HwnY6L<;e-tq&P^8INuRoikc zCqMZXaxOfUsxGgBNx3m$>Q2(~>#Fw-e{DJ+t7P>D9}BjYObLtmd{Te#VX{*8<1eCa z6Q5GOQ-r&b+u?=C@f=mSP!yJXUe>MA7`67Sa$SoN*tiF7QFeT(JE%S&DIzSsW>3p>Ww;6WtHa$Qt4V(rp%UFIjrW zRw{Z=?F+E1gfbp-kVkvjK$G}K2D)j?kcqbcI%VlmIx2xzk1E@n5*Dn;uaqne|E;%X z2dkr+Rwog^MCQGe4--1pVB8*=_my^nMzqxhVsSP30_`w}&*QRgPR`cmuutomtV$mX`Vy8Hy zuX4cz?ZnM%+p8E*>Dyp9&JG!JhNvzHy?;uy!;b8wQkqt6QYlxAW=gCTm%PJUAH|5T z`C^qu6#b2^ZKujm__YOY-fnbEH%$eV-7S48F?M7(RbS% zx`pw-pinZe|6A4?j(27hstv#!SIHAigR}VXi4KH51Vqst3w)$oOL+LlZFOe?yJVU> zcCo-fDzU878Tzt6M{cy#kVvN-HRSSpeVveGuGUG*{{2hzR~^o{sj1`4P3c4Due9Ps zlPGCdh^i`azPNo0Vf{^MZCIXi`#8U~8OVo@o!JAc;zK@Em~`XBPMs8kpG+ApeKT|( zb?2)cE8>t8-$MVr)W#5UKLnaC-nctw(Ix8ItATCT^?4gQ!K{CngIta})U$WwH-VIi8 zS+>k^>)?0omz>3BqE`WI(8pT+-R0p<`DB3+XdR9O}gWxf}! zbJbog0}WQ8$m%E;6%BjfB{aV-2pkS>m07od5oSqxHV*ciKkLY6WWW!<5Cce=4W=Ie zicOPuri6O3x1HL=;;>UmI%eQ@A7a;DXYLnO@U2(|6xEatC~AkMa93X1DD*fd3a$&* z%?G>HMHu_nKH0}+KhZR}oQD1yJuztf-dBNa^rpfF6qQ6)wJG`t>nT`k<>vj?zkB4X zDk`fAse&L6guJ}o3Hq%5>}0ubAVZONft}c;%VIj;Y^7kEgo5rv>U;|!AfjQwUPQq7 z=!yO&k@{;LcJte@i92Jz>jPT~Bs4=p7y`oCkR0zKHRS332vmj@a6tA<@#`KN2AM*S zDP56&&hOWnNGTUyw`8LtoLk5=PCMsBM63k>IXP@v09@Cf-#n(;>)R&hW?lL|q+qgL zMsa+ljH3z9P5|L$C9E;NNhA^%# zc(@FOn8{OV8I~qppSa|)A*YU)$GeKZm^is*Vo}y)Wh)zRols-9C0@JtI(7VVTi7C# zov~BlSk-pu=_G?hSN93iz&v$eclUz)V3EU zsmOhaN4&jOuc}-yd(0(sKd@4SUA$9V_~2EdkiG6vx*ulqZ*Mx|xQMhm10(sV8(C(A znb$zeUta99Y~oD=k^ClZE$@D964XEWBH?l;2kQkW2oqZs)l{~#2FL!49VwT8!P>AT zBO7oO#lHq~cCu@$aY4?z%(j2PiKlUuwsZa1yPAe2gTZxDyq4U7xh^ZmfjdZX{^& z!-MWp7J^acy<2Dalx1{@AkhU}kGU!umHf^jy;hVEbWWu>@uY9wsB=ydMQ=iFAo-yRBrr8(t z{=FNf$b)=XDLIuiA8H}IE##>F+4#oh{w+8(q2U6FKIiw^(vsEoPVTcJ``6WO4)B`r zClLAXTNy1M*QFlL z)#F(I?oV8%b{-v~$Faz+JIGZbD=3@!NLFiCuPkvzUpYa2r~RomStmcwU|QX8Uy?S` zR;yr&pToK*_lFsYdsDQVBuvrtOXW;Grmd7mIw~X_SU@qb((uV)IZm(KM%JRhg64cm z6j*T*0!4=nr_fKsuxahIlrK(xGLKYK1)Zn4)ozoSf!WoitO%}-_5tN;WCPi&1g@@N zJhJLZH0U36g0FsnRBRxK;f5vI;AHTIRPB%VoD%^1kd#D;`#8!%lyP?d4<6vV93{*H z+Qsg+6J@9=&3zf$2o};4ukM9vNxRud{@oxC+L`qMR1a3b%19vhaw1Fco9i+|%`h$| zQj1mCt%pba!AB9pt0`I~n8A zRp03lm{7)cjolq5+;3%Hy7ffI{K1Gr5|#(8Tj@cjsd178u5M7o;qk21Rn3$uzsJi} zUI`10^}ZUF|3k?+H%V%dqJ;4LY`ehQ) zH+!Hm<~K?Oi7}HLo1TWC;iM)Kpn9TR2~*p1PzWbbRy3EX*YkYi}#6QBBrLBp$*L-pqQRl_ZWK*&zuP<_Dir42B+~^mdRlZ6xV)C~xrgznf1YY* z?1T70pB_dbA#yeXNa&lkjdQZgtxTbxMMsqBA00w)O07R~92^GQb7mMU6UK(>LHXMx z^2R?m4|abje%r{`!XC3oRp*`ls*cZRlHUyyvM5w)gmH-u`nbQeeJ|{ldsROG(she{(%>aLw0l6(6?s_$ZS!)xwkA+rKT~^uCT+Uj0~*% zNoG1IQaTiA)jew(nM9{z#!F+Y7$-hhqd+E!Y;y_KM3I!XTnT4kY{m z6PF%0bU$FIGG8sDJN=n|a*iZW%A0timLW+9?Cp#FWrL?NOnLzrcZx5V)eDNp->@E2ge+!bo)6W^d^h7FIDAffjMR@Y=6g^?; z$?E@FHAY09Z|p|JfpeddZZE^wW3TgSBh7^?9JP3I=hw@ZB2#Oq0E=VgRo27`cWJD# zy(EML7g4@iDl9y@`w)Hku3m(3)!T`cHY*GE>8_TxHkP(F37Vl#xc1ruiwG`Y(jWv_ zTo&WYt*0DE?Ur-d($hqY=c_V-nehkSc=eIA08G2q(8x2riG~%ZyEoyGH0`{$$x2;z zVL3WD=@dXX0J*!6%b*(@rlfavw?G)HaTYs@$tT{&dcIA<%@@ibKBVJ#A} z;UGi!x0fH8>s+Kf2NXMhEhhmmZjie<0`E*(sk+|FQR-|TkwNRTnXo%z{$Bolptpi4 zAdPwV4*C6X?T=t>*K*SkyhP6g0?br9lvavueEzLMIgPvv*rxelHKvWzR&mipG?leI)i5D`E5zDE#`^HX~}vuMCnIX`?gXx?nC((QZm( zE;DHklzCypvWsZ|lwIYRa71Uqmq6#|B{z&2L#C|I8?Is`Ss<835x!jB~W>8!30tC};Y5Q}Y z1YBHwq3Tnqm(I)7PD{<0#sYZGc8Q%n_JhkHW8?9#b;c8p4;ych#-VQ<@5%fPpT%_d zXI0-9IXv~9#5Qt2b+JzP_SI~x2T3fYZ9RPyTVoIMRVai&7V zjSNvx@CYe`IQh8e9hhJY|38N->j+UbI1mIJMP)F>C8=rxmX=T%dro>Bn{$-3%De zu2hOu7)kM%K3Abho{(?ABkv6#v+H;XQB8Jfh1!&^1~AZyJ2}v18wl3@(V%Y~wZbmb zGs&KSL16kG>mO5GXd_l~rs}U=u>4ugKwoNp{YKX{w?EJoTp^rVg91iQ+Sw3u?T!Jz zM1Tdo&3lh{tCdtA0L@c$u2k)lWBgccRN-84t&<_*w|CUpDsM zA`KxXad{pEJ?#1H5eMIRR%+~)!aQ~xGC}3ENcxfYo=o`N941!&g&m=kTW^LW$3@qS zANPu3O;E+r+6;7cNhTGj(zuA(+GD3qI8O2rI*FlD40S>&%uH+bGkq;}(z$g)7Z#uS zyX~A~UG}{5-(Or^LLqD7s9eGQ4V!1{ZKjG#%pkq^W&dKiNqm!D!iCKkg<|WOu<$U( z`dnO?(AY>@I|KxfYvn~xf5xJK9+W18kl0R@P&o&9j2^`7^_v=1zG+Mrc6C+c+1WdFpfK} z)5PLGK)0UrxuAlW=_F}l@e7CfX1_K@Sw3_xn5Fa6uZTyr!P3#Roud z{Wfv(iLn=|Z8ylb-~V&8NMov9P{jJQESXUGIRSC6!>5t`bRs#Du0x&*K^DjRa%iSL{hg4?@}kDfxD$3sgMZlb(`xoHkpbw|oT z+bLZJ3;2#4;(V5^D>Zjfh&i`{?gswdvWbuQDOj7VO`fVFhL^(SE&fr!(m_6zMk zVlG+NQGeC28^`gn6}Udgc;ihTE`3lGLI#X#bLVU_4i-r3+ZHvMDxs@Y^%a#JcZJcN zAG4MIt{&yw!vVfWhOFP76ZYGyW7*{_&AG=CMSG#3%3;xS=9G4t=t3H^I4xUJ`Ii5& z7L_V|+vF9j?q|_2k>ig{1-1K_*vttBg8JyRq38BW;^jy0YaD3(@IG`7B@hX)LW_A9 zcIYuG=7L12v=E{ZU7UZM(;Pd-CTV)ffU*R09l=~Lm#0?;^1C>Q zmtR;vg77=$vu60?^FYpM2B~OW6F+%FTGg#rPC)Ooa&A=MF>(1Oy9y7-vDh`+fUJIA(IKGo9KtJ z#Qk(|X=eANHiKg??A9ULzi|H(9MA~e2}LbM_%J?sf(Mdg)vu@P#(PWM`0qQR|Is*p znDx>wj;nUhXj^EZ(dIPwLIIa4N8|Z_Ja^K=-ils;=v)o_^zeT^{U;z0A}2}*{7)nU zm&u0z|Ak<{|E&O^R{jpB-4FfT#hy$x9UJxQUmcMR%Uzo1m;^0$$8=)CChll|&I&7Mt^k3nnU zvL{-+6glD6c%3%I_M;JJQXiuVrq*ydAVW@VFWGB>%M6?$C{e-8-HLseKJWMVIHtA% zO*XcKugkEfjBj~f5yraL*o1y@sJ3heTgFT!?W6fy2gn_(A=tUtpmNcQw?{awJwq;RCP4{ZbkFZdw0L)8n#74Vv)4H z-}Vlq+dh7@l(kf1u6bWJXX91cCT-CGZ_Wj6ynTJ`zTdDbxR~l3 zq`H0C{bp^)8AI<>>=9$vc(l8p6Zk`fIUBt#iouc5z4TFPEfevqd5)f)CvMHzbh?+) zaa?|kVog&RxsI0z#_xLSwsWoa0p9tNOuhKj=0Y?}+mRn=%jq<4cF*FR&G7+%NVS>p z->aek?C0fKV?Ly1jz#NGrI9|Ul4;c*t38SB4@FG(JZ)NZ6E)qVb zz*az(2lH-<66jshqPR&EinAgMBuk|}HU2<5p1p{#1=Hf_CaZqqqpGZ034Jf%Akn2q znZcvMxo?pVX$>g`f3&8aSH83fDis=i^&u%Kp0MBbm(<5i2_6NBE0sbs?&Zl8{ z65D?v#(*$?R_sho>zEVC#u^RqxrtD#8Qqn6<-|27#bsY0mV`Uy1H~pX8gXhxPSh8O z4D9jIsQ?JV7Cn=fRsEmmQXuNY!+AKmL@00%! zZ70}ciC^^y+N?V0=36P2$%JmXCb^CUd>M~PE9!n`LzFewJ0Z4Q(N*o9;_eXk*h8vo zmML`RP*c{r0nzM`uV<*v_$}}_>M~o&@G}r|fxTb|bOE1o@e(riOs%00AO(ETPtd$= zY3tVb4y#XCGdO0a_;>k7>=T~Rw84M36}`^T(^{U}{gq&*mOqRQz15%6YPM>V63FA( znHlu#8N~rO-r6c>W2oXOTH~^b0WPu;11T={vLOpC*|7jw7dW}+ zT#U8CeUqNc!0}`%jT+X>3gyYDs&SNigANKf_;&dH3HD_T1$b0lBr#|HTl3d-dxFWz zLyD8-4n!Ol1I{wzKO7iHK2X<|gw}TDmAUj_<_>uj5RkO)Jcb>5+5HP7!~RTa8UNVK z@7ja#!=7ZJ$IpzTdd}D^2BnB89j^V_dQ+-~&aF|-XKXG*VzR3K0YQ99YP!oYf=)l2 z7Vr7=Tr~I3SZ-Q9=6qN2lRF5g8xA+cHr-*Bf3itV*Yj61TNkgb$?vf8?VU&NL zpMAhZ?9`6qMiM~n-fvA4JL%IOPwxq-Bfa8y1**A{v*1@5DCZZ5-yewBI26L+eGh@* z$}|(*F|GRRY|hZDg2W7LBlHZB*~iT)#BW#H^~W$Pneg1A5PQLIllJzxWnW&Ed$kPN zqt!<|Zn4INM?1SVHqPqbvy%H>nKza{;l-<`uUW`*$;S7$l((NyW|SeN;?1KS%0-j^;yL) zRp@Z#RZP(5=Yhww`G{C6A%XO~666TRiu@}=?nw4PF*=Hb!?tbm3n*(uvGO8eEzq}h zhjGG={eUh=CG3J+@zt`P>vQ8>La0yyJ#5SlEvCZ5#=oFN`~Zlgxi5@R`)sGvWoCK`eTQy=tJP!; zxZ4c716<2Y+TZ8h*L72liPRvLSFML{UR$x!&p2Mup_TfQi-*~ zN~eg%t?AKADMD1IHF&o%F5Bm&!PhkzXmSQo6~VQ-$ZtPS%!3cx6bZ*nB5@R0f6fJH zqOtXWUiMxCA`B!As||ehI`YF;M_;Gx7=0aXiE$oIBk@H4(E25Cj?CvPFyKIGau&!;L8#&czQ zF&(Sc5Z`Ba6ZZFJy+iV^q0Nx~kRz{VhBjC=3;s|Q z!S8D`H}o#MuG>HqEwt^=bxUDMp`6i#dX=0`^M9}atJ6Vl8nTddOiN9?l{7W3D<)T( z0B zeDsEtD(!iNOY;VUuQzyG2mV-6%D~;US0fl6>fh1tzw3d&Es+@}W@<5B?r>4$l@`rZ z%;=zRzZdT{rp!5C<>Wn#eFK zx^c<1rX@{i6DI;6v`I;fWR z0m&%j4c%US`?u;YUyWnXa8x=67iMz|c9daas!|Mfeq_CLOZgN<_qeRPgyAt!3o0Ew zpgVpw2S0Uzzaf5<-LvOC;(MY^!}Gn%ES=5h_>sWRX^IAJp#X-+r)c$M*P5V7;y002 zYo~j!7QE`V-@%4(RN`{?MbEH>Y)(=!kdzX!vgf!J_}`PuM0hqd>oUpXfb)+9A!;BM)?|gJzeM`&j_V+;*V9xOr$Pb zH;nndi}ZF5VmleE-;+%hVA$^P+VK#(Dyy-M#-ss*JL9xjcw= zYFBCgAlc>Gvo9G zKe9I1J3Fmz?HxaR6bpBjiOGI*SsK(-8OWHok1{QXOTDAV-C}*c#P~1(%;S>6T&so$ z*jhuSLcC3+W{y}Mh+F)HqKu}yO8pw?)V`-pxon-+O6@-{8)QIkuAS;)@PqPCAmB8q zBKvn6g>+rQW$?J<7(h@}qf0xLb9a$=P?z`9E zN#b*+6*Y$KRL%1|bHB*dy`LF^e`)jM?-DGw{2X z%lDuC{cx8c;*v?5YC5<8OtCU~kwo8HTLDUn{>sXSEiMNa-XBV24`~Sburnm%cH_1n zuLGKb8@R;qJ$z`V=L>v8I5`1Wqsfsa@L3E?J4y%F88+rR}jQ9gv$9DDZ{9;oh)osHloP5>R zGOpUB14*LWpNhXHeojzMX8ICT45}Fd{t1y7hN*w769%|XhU`4P6uW=SV z*VP5j?JOuEs`7QZ{NF8a74-oG`PV<8b}|+t#CIkUCTaS@x^-cVJ!b9*n8AKFVZ#%5 z6RB#e24`4lT@dtdX?ObyUz&bQV)88a_?{)6H;!6NwBMQ!rW&GA-xbD^Eyc9$mcKa^DJ?(4q(x6=s1Fwx z5txJ1pL{NS&+Az5%NAckN1D{w2_BREcdQqRxFR5stvb-Se+XQO^Ol266QYYKQv>k} z$5G!mwnnCMmznge6EIQf7xH+gksryaP*dX){iiMoW4GHmwG$fCGFQ%#+%Kc0QEOx zy}a0Ie0AV<@zJHg>miJ{^&$!mFrAA;o=RPL8%P}-p-<9UuFpDu-o8DSmB{xzp&mC=P=-v{=cMxbpkE0?FI($gk1F>%?vAH0G#W09&^_$J;fe9c3 zlF!sc5#y{o5*YFC`zo%`m|6_)FM3NuVVd@}6Q3@td@RGnCNd7*@fPRr)B{IRorK8i zp)LQ~8kZKFPt%SgGb*;1)gXbx550kPQ(bX_RDI6jrbUyg7nN|#5oBB32fZ$e&9faN zzYlONZBUB!{?wLTNg4$+=(utTe@6bu>+mGdN=T1D zD4&}|&Qg6CN5T6~q~;5RE^aNB7u#QP7AwmX3x9cwiAmc5rkLT>57lU;Wz`f7)eS>L@b*xxCWEZ4@P7MQL#R=XLK!?B&ju605O63=DI3uqNoVZV5+@uq z@3NpJZ@G~&mp&mJqg}uQa1$0ju{dzX6sZ77C##))BYse%@?*sB)2Ur4vQw9{g?|41 z5AzCNjoswZ;SK2i<>;U@y$8F)j<@&zil5$*#1xB@i#%IP)}re6C{m%TQnBd z!Du3BcpaenI7h5Am@XXeB#pSjeSZk8?H?{d-umhRY-wAJ4fnk9-ql>bJ=n9IZ>F?! z_gez;O@#nO7RK?VE;dvx7;%CX6QWWwwi+`VN%l^rUTU_?mq+CJ?y7{--N1qbaM{u& z4?j|jM)*ZO+IGxtRLSfv-IrSX%w6Q%v29ScpQzQ?*m~jpZm?Rd_TI)N64>5IUManI z&id!N>~*^e!~SVu79kh{3-HtF!D%8mcb)Z-72FNihn^n)E-rUZI<3L+@KHnZ(P4vA zk9CRZCo|#s{*@CcQ5tZJ;o?OoN?gdBE3Y_qVDOr`=ONM{B1bMdaAD5`KI^>^R;i3c zsRuzwlYi%eIqehKe#y}ANVkr*%-m zGKpwOoz|T@;h>e-yi2il<+a&cLOsj}u`;?dbi0TO}Dt~Z$>zBjV>LzL4?2bh~ zgc8p?DV;@-ymu%TKfPU~i`-U4fYcy=@t97@c0GY$IkClNYr~LxE7gIIHv%3s>`kZJ zJh0?^HP}))bg?4g-2*N=j~kCV)DrGdD?tSa_9HVo{&YMKY4930P2||d?2MLgcXyu% zNj9Lj(_5JidufIiE|ZLnM^tD_Z{-b?+V4MD(?b22qeAph$045D*X$ zX;K711!*E3r1uhf4?z)7sfq|v6{I)mouKp@dV~O>w*aA+gk;X}`_6aIx#!>e-1|KD zpExsn_6*Kmd+oB`^}gpjjZ7=4=6q-bUo1dz5*M)@WffnHY?%6L>K7D;7{sC^BK-)c zN}@6pIC9uK<1sznlm&vEBP!lFO=a$bR4h;dlV;Lm4$l)$jylH1UY|z_WmeCr!1rnxin(8x!0$Nx2elZVJJ4Pv`w<1` zF8!0p8wFF8wqm&#(u%!?9@R^$0-L(aYt~z-s+Lr8bvw1Yx@|JaOXebbssX%{w=ALx{gmFkMj)h^=kc^zw@r zC8ncfKSwTl8DshbUmKyN6qDjKzvmv!$-U(Nac^0v37q2Ul>n+YG-^QBRH7# zO^73#8|&v!j`Xz5;U>opqVK?LHa{c2t1Ohicsmvj*vPYZDGc7Ey}O;G_d%mj$;wEy z!KOxOK9^5L|H!(gOQ&xA#qixqrl&@t0)>U{zpALuZ-x^ImqYN2Zdn0Ut)DA&^NTO8 z1pmzC4qQICDlKgmrfJ})sM64~!TNeFGM&tRkn~0B``cVuiaZpMN>6)rlrF#Eg?o~U zN@Dg#JokQ&BaBVC@)6ay(L(wp!I(CxMWjpX3sCBmyw$dQ;JY{_m|*3lRg|CqdmKWO zgDny%q^&#GJW1C0Jy~f_7_dIZlTUyY3!QO1INRiWyVy;kNk%;i6LP1QWf zoNXRHcA%T6nf>5{MOmBgS~i`m+CT7|zM>{J{9k|_=ck9*~XekLe{Z?PNauHX5WQDw5v_wiFM3s z&)OkR0q(Zk>0&{$Sw@&H;dsFlLfn4ISeE8)yUHo67t_b$;-XEPxxD&8zkC1!Nw^lZ z+xxMmmEL4XteL!%&!xTJIak7;OR1yx?1Cx6dMa@dG`XKs!JeS|Rl zM(yU)0#3$Dw_3Hf+oU1*3!xA^yR_7WxjUieWG9Ph0m+~zTOTe{i6nvDn#Qpq<^<*9 zZBjcTHvm)FV+u_g;|x28Ft(y1S{YC{k(Z-2WG4r?yW3J*kLGPU$Cq9tkwd5@U0PdU z8P>x+d%E2l<1`6;K0Zk2JT{xeUE7J;6oW)I+eerw+kgyJ9)amt33WtA3#{WW)s}KN zdYANfy|)T>8lrq@5X%&Yla%rr1U6F{9nz<1pQ#rO%hZ4Og<%eB#GZO@V0o`?V0ws1 zFq&uu2+HZiL?3)JtgWWz(l7qQVt##b7Gv|ne!KpG)t8-d1Y#r?82MKlpL{(mWh2KQ zyA@Qmra&C@&4wdi>-eb7_0pgh=XBmSKhv^oKcza^8RdG8HjJ2E_3P-z&@mDn(k7&ziHTd=L$2#qW?rgSNJdQIK`&S^s=D&we z?khZdKJ(&Z$H@;{1u&#`8R8%fa7~*Q5z1so-<$e@(j_wkhTqMvIle1sFUC2CtPjz@ zr`sQ(Hlmb}pmLbtee#`(ud*Igehx3Avf&jK)p@Z3vZOzCoru(g2?k^5LA4BUL5UK4 z^k~A_e>!;thD{eO#DeHD$RJ-00)g=-PDKtb z|K6+{v{(k+op38^osq1%3fUQHYCEEPqSH7H>(KKjgteBhxAx%uoPemWc={?}fTTq= z=*W?618~Hr-=cjw|C6K9vTe|_Sn$5`aIxo-cWhUd$dToMpX`IZz57ppO7p%+zZuGI z(in!{fLD5mY_m=WEwI z$?^7kLG z8gaeS{=G#jP;})^?T3!g&Fi}}xz}uY(>UQSq(&S$r1Q+b3gsuA=|pT;(ftX{^}#-+ zZFG@ZK@eJ!s3bvKCb#RH3{T8`h}lq1H`6W=YdsIxYC8ufu0kMmI1ILjAxv)4-lu~M z;yNOGW3en#YGlh9g)F-kd5k-Z>e=>5Dn6ND(2F$1q*lLBJe>DDHgC0!KjbMcB|9(B zr{J6u`l1%_6tl8iDRM^ZCw@9d;jY+h#;_{>ay)Bd(F zV}CexLP^WoCv3`aTl-0QmS?gj*DZVz^Q=Ix=4-OVXS+v1D*q}7cZ}O5m0kAlamwnvP2e*-2Dt;iva%e!yecS( zhQ8}rUO9Yz6*2@ex*Ff@TpU|xPbjT;nl-#<(bt($nR7X4(lThcY|N$eBfgM2}% zEUy4g0dQRD^zD=??A3`^tTT z`Sj}(lQNrLPK$Y5*8Iw??4ffvE1KQr7ibYiUYrVg;oDq`WbN6?&IX>EWiKV#klo89 z2Y1;`IpZskd;FBfwb3eihmKF#B%Z6QE21@BKPON3*3do%DLoP`&^2b;7%(St7ay`| z_%YqnXTwATRRS#~9~b46)qj_q%&MTVk8?jfWgb&i(|H_Ao-gpJ%h6pn1*<%ne%`4r zipgbXnMQDen5wLI8jT>y>-*B?${AZU3R)5cVy`D5!(P;W^vOhzbak`1 z9`>IeMq{?_=Fi)WL7i1Jj|Xm6`J1ckN*NQ9a{0ioQxbeeTJ1bv*VS;DnQ5uTrMKqJ zs~D*K+r3_=rZafG)p|p=T4!de zzYm{>PUeIZpEwu9-NWsc@0MJ6xVqVl>ncpg=4Deug7(iXbzMnxalFqf)8dH_zZucA6)2OO~gIqIzNs zKHbrq!kwYw>vKgR(V9%pA9lU+x%{8pz7MZRJ9#||C_r*F9-bb{cWp?Ar5LL8A;Hv7 zCnZ@-o`yU!EmGWZb>Yb5O?wb9Q%X$so{9HeXe*` zQy^-UxC-JG$SZ!YGz$IGc4vrdwgRMZKEv~Av1C_Ln+Zqv;`qLRSvnTA@>l9q+rdBj zDQM)^JIGp0>aFj7Z3$J}AfMnh`R!O}xLe|^y;P{IsKd!{X)fZb)0N+TBRuEPaY%_3T|Eu)lAGNtt-Twsr@%#FTV52|21V`VG<^3fH)HqT;88cFQ&tPe4eU}6U*>D}HtRS!UdUXJomN1i z0>Ti9FAJGuQ2)feCkTbDILh(Hho9!oyx$XTg(yz+e8rGd9BIY5fpADDe{Iv89%;pS zd1?Yk2oSjpGMz*OUD@~Jn$pB-HJ9Xxo;;%;JNbr74>BM76=3=1B`U$*?NeND4?K6O z*3^uvc*B`=*wcig{`F?b1t6=R^;#~``zd!=lc5s^KL|CSIj>pyV*kA(;sMGCW<_-d zAg8Zm9`ga;bz6X+e_rtRN%%_6*dOjA9h5J2MtTN@k`7f zxM)I`-bl$Qn5>g^7mFMfd#=|yU`L>SyGCU=Z`x@RGoG)uj`z{qE&96tOcUOhts?MK z_2boVRE+mEe&%LnW@g5Ls#8Lu({O;OwBcA5#%H=>qNDQ}vpQ!Rw{RLIBsS_YVO}w1 z9Vle9C6;lg_t04)!+dk(TW4myCa-2%{{4uLjC|Au`-X?v54vtz>*id6{F_j^&mVZX z@o4*)z!?*A87g1=27Z{d>^ABQ{`&7%dmh^?aF>Qlz3d^a`IanT-WRIA5`BHRK;f6U))pRYF2#X^b)?cpuU2F^ zu+zw|tD;E~AGdRbB+CN zVuHbF9Ob<~J)_G^rw`zaGSklNHP_Lk*_WUxt)VKJAjl&esxlFMT^fBzHdf5#uZS&R=S>$~#vmHOphQ=DhFs#&%GTKX76uP=s561t1y;~&1|IFihu}Ngnn~#%x zeG1=S`wTM1DZ~^l3-6(bxL7Rk*>aYwMYyanUQE-7~8>zBW08 zh%`^#ubL*Pa}rxFd!;-K3^f}rTS4*~^`4DxfY2dlu=2Rn( zxaLyylX-!%J^p_Rz?UaZ)tKNC&f3|GITDOCbTLg~Om9}UZ=6YA!Vbo=?C(4o(r;)m zKSeSMI4Qd2>ea0EhjgkN;#x}M|NXPTi|1~aEc{wA4F@~{OJpVZ%>JM!FEdH^xxq7= zqxGo05$ozHMY~M>6PsBYtHpPesd6V})ORHp#rB0N<5ojTn+{mT2nQXv;~s|^TR*?o z`@RI~CepdWCAW0Z7o?bXYMp+)L1;d!-Z*!Epf$1+Ww<&%L^aIMeO@qj zJ>M3x+HjRq@f;V<*+M+z%?@l=nVGhwjJs|P9)#wgr+K5ZUgpz6)(adR9WalXuQm`9 zYk-CtKo*G+=$!V#{IeStwPWn8IWqS++h0>STWT2xUvJ6=%VYH#;7SH|i@Fhb{ptNx zJP%@y+PdFpC#}+eX4zbmzz!^($|0e(kHE2(zJr# zSQeBi%*f;!?Sj83Xu58u4|1E6Ccq5$#Rk;2+ZQx^DSPW|L-`pkOSEI$=eU~v)Mt9M zEi33t%9LeaGSAJ|{?VV;*wg_@NcYw#W#Qp~@ioVmEm?7I%fAe$ykik&!BHGBszYgG z6TCM6Rm)V=up{@~-6Cg=AMhm%??0FDT{|w0;9k;HsU^qp~chl#@1jU*F!7;&;H`Y&_(t3t@FI~x{81SaVFN6w|qH-vMAnBl)7z~ zXdj#%A30BR_iw^oO|;s@JvMJ|zErz$)H1NC@xo%^-?M*#w`QyG!(ojNz@nP6wLfMr z3vl}LZ{eW|_VjnjW=U72i+PnX%@WGR zQ%3gVaXn6G2B^60deciBi!m)|I>SpED6QBvuSi4>e2?BK*>$bmn%pw#>=C1BlzuSKkZA*$2dB?t`cPI~nC_SdNfrOlvp|K9a7JI-iE+ z%ZX?RIsL4-zT@SCjUsp!JahZ8Khp5w+}oheiU5FWR{g_#xC_s>xQr}s@m4)`APaU} z$=?*e)z*k@D9lo^n3153OAO4vPejft5L zBi4~G?J(gF6YNj`NSk*48u%=?l%&S7qRl=^nL?eT+4` zb8^;3-rJWdLJ+A#%eywj5Xq>)W(#AW*|^<2e{{` zF%nqD*6bTCBaFt@Rm51fbQ;*^(h9B`uVl&H-#ECCsdwK_MNi@39Qct&5L$kEPolR@ zF||-{avV^WCZu?R`4&K-~4G4GW&Cv9tu5NQT%>CvgmD}D9?hkKp_L~R*{cT$HKRv2wUO(59?+{Qn)r1rce_N- zbac+9BOlSEJq7|<>d*M(2w6V2bov526UK; zq;Zs9htdyL%zQ5U3F~EI)`3~y@jkr?O!DKX4CO->8M(+uR=u}l)~1-{XGk{+SeyVk z??<=SWRgV*%cE>M5AGt@wt+_EddZF~#?Pm`wr$(HW& zEka??Q^whoTa-hDGGj9&@HOZ5$tiee`MSjNp}k9RV&sIJV(-Z38dBISi+BbgEuD0( z?%TVMsH&h1-DJdmkOAb#C{do$2t^em4gx9jg{G|{hWkDVA4GAmW!bwA4;nEZIXeO& z+|t*R%vSpH-psv6^VaZv|4l`KFBA_g;5Zh=57fV$sYA{OS9V&whw|_?E2dyVS_15Z zJ8V%1roR$6a=L>7^ic_3NKTdbd1aPaA0EVVJMYeCqqAq{SDDyQwM1-8#aFYZMTO?{y|DO=gTp;x zwinHis%hTh3`&%uLGP&cZ~$eAs}Gig*N8a4vV3iqgw69C?{L2mN z+(zHmXYA#EMB9*AxM<{H>oH}7`2KLu)L(eW_5lex1@9Nj4|?xQ_;B<3;Ta{a;U^-{ zJL)Drsj*&eO}8d>m*PjEYU5zD<5=BCSFgw7P9V*T?g3)at&^VPLTgPrf%RXB_%Pz% zK;w3(Y_!4S2$pHsAE5|0#PlVe13R=P@k)2>4B<3{NKsREs;V*>2BYwvNoPP*`k_kG z4Snx@LhciPT)I*Um|4r5(P(>KY)>HqyIroP0{2@hv0iBnrkbUhvaquzFn#XUpdJh{ z3sX#2G{59ExZUKX4JEEN`j`m$budzqJzjcB*Vn<)BL=# zbFEKdUQH5M*Hw6}TTun1CCFbmVY@Mv1!GLVh6Fs6DH#Hxk27cKszU9|3%|qLvTlkf zHK-bfcS@;B9RT!5I@^ya_?lIOz3ro)jEfxZ07m!dtZWicXg=h(N9K*(Sz#%r_2nDI zgwdJUzx#VW|ELw_dfSnuFkOqA%Buif@h2L0pTl;{Gx{eQlY1qf%yr?^p8H%O!rcRY zQsy}+^QlEeeCzcE509?2qO-3ibvKrx8&@EMLJI-vMk|Xcz8fazy#m6B3qjUM7lNn4 zxtY96s2nvCByc)tY)|)@f0O@SWMBaTx8FD<%xyK2;B4fpssXd6Wt_r07BPFbj{Fjw z>QJsO&32-TCN(m1TmL(YEa;X}`@0#(_OO}9P5IWaCQN-$XbP~@y7IKq|HEOF?*psw zDNn#9D!f~I?EVX9?I9H|iV+%E)%62B$# zm%($;u^(gY4%cN6 z4gwPuHgTL{ZIcdn<-_WH<;|LLx6Wf0xkc%Gf3i=oZhM!bzy~aE*qI6Af~k_I6vo6i zpJIsA6X?zh4@&Q4Fs=JQxi@Le(0`R`o677ahJoT%;lP}l3-DnrXT+bR+hg`lXB9mLNCcya z);BR%$=z1JhKzev!wJS+BUpRH z>tX9qYZJ*PozF@w&!}wz5bpuDBEdupF#wC_xP@Pi0b;rUDZj0hWz<{FB085>P16lZj`jg$S&MYh zgTel?|R8^{6if(Z)kZ$US~h0(3yV7f%x?R>_i$x3J(_OW;KEv zHl{c9pe&xcFCJH88#*n9tFUOB84$ZS)vuv3>ZSnU# z)s!r*$y(Mm`X)dB$72lKJb)OpD3nqzA{F$9s_cPvW$xK75K^o{4y#6i5el@QVgL~& z#daz(D63($ez3XyAQ2o2BC#NEaGxeu9}W%#MW*!h^t|jNwp;Rei$8K^wvHYwc7@_F z|MgT2!C9+b=M4f-#&S>(kXqeM=4{?u6=Jp6y&`LDmf533DcZm(xg!_*g8NL~s)+lB z;p}%}vGRad!Fo+1G=jg(@jp*A8!gO%4}Y@6tZC;- zIXo>0VmAZ`n#JsyGlh(+Eo79*;u3#dTmR+t#*7{j>A4I#hq47(rLvq~j(7MzQ*6p8 z|2G>d%lX7(d?cN+9|v~@-|k>U^h4t@EU<~#MKteAyRQ_zIttJq^(jrs2N-`HQ1n&dqk(zOH z9sk>XOsS#oTBwS5D_iQzO66B(oa4MhR9Vhi_Lzu&~{tI zq5t;2`mzBcoMZneY}QT3ui1#jjs6WLF-S@ONBOl@s{ciw@iYEEFZu8K_wJCT{jYcw z1NHyktGXS^g<^eOS}5l(`TwB&z@$i}t=hgx&DeF-g&=L^8{z2V9M^UQCf_u)+V)AF z=dNZdy|~l=j5R$?)E9bJwa-!^bSM{_Y1Jvkv0$3dt*hLG^!ZGR!g?r^nR*lCjm=j1 zGNy8B$O2DRXf944+9-XAj1)|Y5;WYct``Z4RtC`(_m#qz=TOw?=jSzVigMdfjs-^cdqy*ET;|9U_oi$x3q7Y{8%t+g$_ZsFy0s%%)%F%4 zUN`wl>+-?{_5i}wHIAoXE2LB~ObCD z@AqAguxL@NToV=i@;3~94XmhX`DoZ$|IXb~P83=9g*~Qm3eHtTQ&VXC3fV=9I>y;1 zeq?jG{c$P+D?!$+XwGJ+e@L{eBa3-!apR<3^5{OtNTqDg_xh!!#Dt9Rk&TU1#Im3E zk-Swd+giqU@<9p0DLNx7^)Ifbz=*57Dh_s+6gg(uejaWPwa+(w8z8zaidk|_l-E{Y zxFIw;|I=-9XYfPsO|7m*8N^bC8^jeIJ{3|r11Fw2HPgv7ws?A|@$EZ54Fw4PoYV#Wo*AKskUH@0U-%tmUm?Z87`8})gJm5jlTxmB#1w07BlATs z8vF!{+h|aW-onC$(x#kWmw)*^b9%7` zw_{GC;D0f-{QBy`etzHE(IQZjqkdd!+$B#)St|9NB4sU+8#`M`;z=_z*4Io%7I%+* z?urwx(N_aPcawyE)E8|lK*X)(ho)t)3TVpz95QpCGEs9gv-P9iu{XI4+4~5I)kS+Pt_Q;9 zIG_ueA+xjd4oss7(F%L>aj=*^tuBJ(=jldtLd^om7-Y7~;sma%nj~IB9IXb3Ypc8( z@(v*Ym)yom?r?)pkmTKKOW3wqjgRB2^xN6RrIv0_4X*t7QFobu^Sa&ORCSFsA56 z>%Wf3%&h^Aa(%Y5((el|l+8c!{;rTTs}O=@?3sLtomLUQ4N2x=E4h1py^L^89^XA5 zEUr{nNa#sLB3i2k&8lu5YustIvOH^&&h3Az13yg*SaM_^mGK+Cg=?ljY95B5wj}+TvQKi7$7Z?g-c3vFCHR9@CrT%g=ye) z@Yrw5ZYBttU}oBTUh_i}K{ErkrMDc1;J+VB3RcOBjI#xegPg>|_Vl6<({-xNH!r`1#+OK5vj6%I9tEwMy@^hvun^@7lS)E=Or zbF_|Zf5LB+9WnD_KgxBDYGgn2o2Ya2@(}Pqv{M-c)|x{fPMV3HPm^zAKr2_Z-D(4 zuKZDejdE-o{<=p>KICZZ)eoQXLs=B*U}a?k89fP`W5?s#@v)_2K(g$G{L35d>wNlq zD_@X&`Z1@mh2>SHE%Ycc?nrn;Ck{jA9YTyk@@9ls-DP^4{()_F>^(`Ada^ERhwiGk ztX~8;x>>qhq>CyHpy(v3;z3!FOE#>$!day&&trm@KO@mS{CCkIZ zjF)i?mV^r@US|S*B=Nk&I7{IB=$Uj#;w5+1w(M*^?FKiYnZa}&orz03m!;vK=ILW^ z6_yCT)fu=P?VvU)Jn+HE*777wA-m&LSGyT%XkY#VLFP(@8Uw!Rq5SasKlB0FXV;k7 zK04Pae9g%DsKqV6#U93ep+VM>wgxhiXJ(ypvh-x#$h3_}6%~D_$?F#zu~yp1w7p2< zg8wb))F&lVJ5N0yl|2Ggu=N-UQ?9n0Nj(0bv5MS7?c9jm*Ax4j1dfgO&6|>qp3J5h z<0bl94FAr*ZFWWJ7%B93gtw6gRc=PzJuj(z*JRYoOkdFCmboW$BD_HOB_mcWD5h>-D zLLH}h5n*vuSHKVnXK#Pcxrw=Zn>3Y%J_cJjlJ=r8z$&bVQx35@51Dt%(K*9M8Q zkudWX+N~`%n7*>(;it(x!t$8)Fp@6%l|K4`x5ZaiI*2B>z!F$QXB*ckX>)Ho#80Yx zD#L9p&ekeRIawk|I6F@$zY+j{EhaYWH)jJ}9LGgu!L9BLhkstUD+ieMG5}r()MDfr z{^JUK5cGA#qqn?Ah)0B-l7Pw^#^IMnYc#wfnH&qT9P=EC$8J}>U3fg(4$BB}USN=N zUE9gl^F65XdN*gNLYWneWRB)KOSv&|ONzxhzcQj~)Y`OojzdcaZbQ%{4{E?Fh9sJ8 zSnEuave#VpXM%C}DgCz6d$>6|pli>s;_zwH-V|8*g!07eNLwsKgZM&S%`y`ADB`d_ z^S1qQ#eTN<63bWe>pyXngKXkfB@HE6XYV|jL%gXm!Gh%M7_GmhuD|Z)Fbs{Pk;plb z7!{jo*hK>DC80`N^EBtnFd!c*q6@5`^R;ew?bF#)J}6x<(=?qbsyadvobkQcoxkVy zAP^bzK-Stp8a9~_imlO!-=0B*k5+!NsVT)PJUXtf(K7EV*cCTKoVjYI`A0ChA^yAz zFK?nr2|p+fzTR}~a>d(ubbv(*+4eMdVjE$A{hyTBL4qmBS+IC zEw;RAg*qb>R75IVKt3xHx?e7YwTeCSck{0OZ^No*X5(%|_6iS{oyGr}m3bKdbsi&mzDYM0U)u4za=5CUt#pCpF8kKxQ}^@UJH=*~r+(a{ z6OwsnLSsI}vLs!3RW*6l!mJx7IF!GW}g~X&0KSr7tB;uVayZ;itU@f5PkQ9>|KNTrWzDos|#%ZbH5Gb1A8Q zus^NreuvX?-}Ea@W|pffi(N_eIo=0HH#?kceQh3E3io!-;~UXH%GII2akuBmUT$Ak z+Br$;HY8DVX#HZ0PjADy0nVKq3i9*Wg`~7@l=xgP@qFy>Y|2I!6@pGev!&%sn_43b z#!q*=szhM+HxtM;t91{(e6Siqh8L*gSXT3aund=)NM$5_svl~(v~8Q?pQOLncKS-@ z6#wOwX=wxCGMgAyYwt|=GK5YN3U%05uYoZA>8KM5N|8t`c}|eXI4oA+aqqri{UYsVsI1jYK{DcU=#^)&4w+9?_)j?=9(G@i z2|5hM?ri26RT`PkN#ybRqvu-s7tHkTCSFO^kSir^mAo-fM%ijmJ?9{Zb_CX?Pl|}4en{UQ`!2dwyqpS zl#p(sKhcUs7e|HJU1OuXeL>K_xZ`>2R}!ki((7>HZ;fk8(S08kb%ch+f?1o}#-mc% z(ETHar%95Lzn3MQSy??OP4emHJx9jwD;8M^307VkzxB=aW9mn|D{Y><#;v7QQ5U$6 zq^M<>bb~V}R`&?>JNrlPeIH`|_>5#*7Pm_RZ`ehoRjJqP2;ILGy7azm1SJU-%mYqA=iCMC~!;is9u`s@q;cYK-mENsCTZou!d1}1kuO`qZW z%z{Es1pSi{A(`d1HOdMv(xzYQmsAh2sXg|p#$(#| z?6)&KW&dpz^-La?l>p6&V`W8vt4XcR8uFcVl8+?c42Q=UWklm@OSqYX{-GEC$~T|7 z^zJt$7-N%JZ)PFc;qpzflGG&a(@gD$55@8Htt+LYme?dY z5$R}FR3ne9$eRme6SefS(TPw&Uz|mFks$EexW49@nVID=9a`#3LhLT`mvzmkW-dH~PjU#-kd0=)ch z;&GqwD7%6xCB+;XO6RIXvNf$1#gmOr*VXSD7P_@@I7}ax`a;q)GL>Gh+z)x)J7+p+ zYv&(0(%z-v1AN?Ke4aG8>^(!^wfyGC}t1n%E}5tY&cp> zzd6YQEmS`_WdijBV4=e4eUlk$n%{#U*7zq~r7aJ4UoJ1Kj# zpW^A+y9%pi9Y%x_gwwO71M=g=jv@C(yX@XS5b&={EDzcbG(~b->Bo?8Zlg@}lD6|u zXNNi>;7+>U(4mnHEn*lMOnXO`J-_ni7esb@Fj{fW#8bjDRI)@hMe9f8TsuK52z~TVyT5&kffTO zjXo+-lJ=2Lj9$1usBczk9B}L(%SQ#WE2gI8WFO9tZZVsbjP^L5 z?UzhiNb(3Gi%iHQ@r_!=HPRwIS;y}%`-i;}iib^SO^D9fUr_=ZnJ2pnvfTp%WtBic zed5_kCf78nGNg-XETT~BbLmf@a09ggeD`wXobsZEAZfy@oH=@j7qX0eibET9){knv zypi>nKF?03$tS2ip)tRPbWW2?qDUTr|8TlA%`|Axd|~jn)iK>jR^z;Z;nOGHlKTHH z=?M5hN0M89%5NUf`5BT)T6XE9eO_;0#E@zLBcq;*klIQ8)^NWMKcF6Bwi@h3C*ls5 zOz)MoBa1}84VPS=HhtRp{pCCKLuHPoC=4i9qW|k1DR=n$d{P7nF?RGA|B=K21f_Gg zj&C4}!mnmidR2Yo@ISQ8`NbgvUN&%XQ|{!on)Xg@ z;u}_ED|&8q9Nwr$844{bKr9vo-!LyTVp44et5q*E(TccpW?z^p$WroUNz^{ueVBDy zlX0S6gul!0i@yu|tV%$dfWXB|NZD+X#F6=Aq}CA;Gv|~uGVs?%5?ZsgG#r5HbMcVX z*j;|5I)h%mhSwKl0+;nA8;?G{Rd+_neDb@kbxZKgN>`frOW*yK<^Mt5TgFB8cK^ad zNta5Oh*%&*-LP0X_DmaH`9Nu+q-cvzf6?d>!&{Sq)KH;zK&oi(Ac>*}!|9O&?3{Z2_bYH8xC@ zHl_Z%+5lW#wLzTG!35T{st7lU2IIQza9>t?f4hAcFQ*(s&jr~;IQKe66nU_Y3?s-9_!Me{2|!S0!P{+YfH&eqjC{^{_bxSoLWE zO51OAx5Oe34k?y;iqh1!@t3&)jw~D!3UmHTbW^z8&B|Pwuz`^BMu4k@H(wAR0Ne!z zZ3n5EMp#>K;D45e#%h%3oZ1Zi+TS%%!=VmRnlX_Qpl~r~WU8Hh*Di}hkCl~PeoD`1 zrhM&w9%m%8rPd~U*RK5b+0IEHuBPh^WO5G{6`_*by#4NSTe=NLyS)hZ@|ce!(ci;g zR%}T>M&pM*bIrhZ?|Z*y|NbEH(BTBN^s}t)#`bxNyAeY8pgRVUYwk-?3i z+5~#7s=!P!W*Af1sBRB_Vf{Lj<>KU9yMatD}8L_X@&`^;~88&sk4dj@%)~`D}U#h z4m|mcrI6%>!k~qC4Jfz)$HuqRDt>rJc9%cSr|a}m*o2G zk2y&eIkw4mu0+a)dD^}E@DbR*<+#ffgF8=!@p^Ge)&kgGmQ-eWMO9e6N8sdK8U-#ca_d3YE=4pvsEPydb)NqLp^3E&7 zqMUGa^ZF3eHekNgZ#%^$LRasXxwxx5ji5!C1a)C>5;BFW*FG4Slmj({yRS&SFE6gGH?y6vxvh1zOXiW>}p z-cMZAmB^7^Yp}Cy16#u(QVGEPN97Hd56Lk#D&Qw$0R~Ry?k>sZcT+&=wLLRlb=R** z_;oQ_<1Hw|HlD>9t6#JK-If2v$XZ=EqCRh{ESK@Fv@CHQl$Myv3ALiNS{sivjsLM% zR`_ts)K8{LT57+?H$xdzMYp-Y+7oYx6*d#mw!=2jEMx2H;M z4i`+Yzo6FhNWfVvYT1yM+0?X)iCM9ji>U%!$0@R$@#r&kvh}%QAaOcv7cdBxps6!@ z_sgsBYuSPIz{;}x88>M0qO_BX-%^9>)fs{Q&mfZdi9|gp@e@EZg#|RJ{tTJ!g~lUr z$ICqE<6L%$&VK0P`a}or0#gO3HV5=rd6LxCWH=&$)ZBj3Vl6ax4{x_hpe3-WD zb(dpwX!$2VPEWjbq%-v=A*KrCa!(WT?Qm&{q1T>jmFU(`x?f_kHE0zhVS1`^IEK&o zvw)Wsn$`=HJkB-UMe8@`6rlC>z47*(7n^>4K*pSHD4y_yj)t9R`b_?!)dV?Pg_|RJ zx)+SxJG2*e_54nFf<8UfW4@G$7;sN7#0;4!3MKlcauwhlJzc%c|AbtAB`Q{s(x4)U zZ=nrDY<>EivD|=ei)X4@*Hh;5?c%lH`ffnb&N6~u=HPJ@(}A|zZtnCbXfly~)h!iZ z%{3f7Q`x-cGe3D*9l#VzQdx4iyY~*aS*gJX`p2<|nXEDeNKF#OCi=G6%6J={KbY(K z`uh9=jG~pj{Xdwpg}KD`kJC5xkK+Z#czhy_B}*`w`J=cejlzx`~k zcP*=N;|G=2fx&Ve0(JI@ov)wQZ2`XVv4D2J?M$vvM~38YXvbLxPd+mOxh#Z|h~D>X z8J*3?2?d`QF!l{Gljn`_0&U!B8q~Uh+E(quYHTB})Wohk<3ts+^4lLlSm71ESp`Ql z(m}*(N_1mCkwWJ2lS0GQ#&aoXc~n~BmsG!)O@cy8c5u%F?jrS-MlPCqD#wv~T$qI) zIBC{VXw=5;ZWut+Q9idWYk@Xp&YaCtlUxyc!s)EbDMIb`Y-b|2u${WY<_Y9|&z#?G zr88C5=`UqyDUxwRCck)}j_E)eZ8uTQo+w#7${4R#iq507P6BEC&(PjyWD&_6P5S?3 zo%?@dqrCe6I~(Qy1LlnuskgWHPzLbVi+t8GkluTb* zG8?2?wwn^`1U8j)o;#C%0PPomxoU1un;}7JEqG;)LWmHJr4fD`wQE1APy2lLU|{fZ zm7F~#fu?~$#S9px9%$3?@xMb?esGjuD!MTX18f)~$dL2^|?o`y@Ix~(DbX;JU?GrHiWxY^-jW9#pe(V#ASqvM>bcemGvhP?8 zir|q^Ai570Oyo8`k&--3Z`u}#jjgu+1HOFfoc0lXQy-!hK^^rS3)J7+Q62t*%Usgi z0Ry?O2xKv~lNBkunDOy9a~D04)P;_7jd$+cxnGSaQD*~H=~XIXfm+*qm0XOB)@@)G z78YVsQf(cb=K%pSJj!t{WXm+{l6gh6y}P8Oq(pRFTq9i}L_mH(ZXTWnxTo^ zLb1rawQq4P9ET~|hLPHPR3kWpInnHpZ~+3wYTF#^S;S)G8`uW3Q}JxmXHag^6Ql(6 zeuoLCyS~MSr1$<}wUUZTo!72`<7nQ~PYupVGAxyt=b2dR7L1Z6RR2F{{PHfXg$Cm)7%=u=#n<<%s zR-W}*S);hh()zjvGejCrcjs2u*R74Jiop^8Q{J~ zZ4;A_Jg9Wu2cD=AG}zbI#~7@ntbCn?<##R~W20Lv<+er!Lr+3Ml71&;)#97BbssqY z!v)Bn2cA25QvChR6vb;sgoabvZ|f6{c7`?YH_3!`A5qEtB><{N3Xcn)xMtAH8dnGD zndct~y-!YgDtiVBZVD-_=tRUUM)th^E6)kEG#HJ51{Npv<@B5N@1P0fxDDpZN};~| z))8)=lby4Y*-`>L0d;BV=`TDyPN*YXfa!RWp(~g(Qmx%SeVney`rJB>`;lyB!mgqk zWxfI}B5q%q>KYuJrO{^wt~CSE{OoK%wHbjg2W5<+9Yw z%x#z19icx}&W-3CJUR$7d4_?*SDjy^ZRN%v6mMKuKel5-NU&dfQc-Qo)%iy%K~pq^ zFMmg0ZU!#iTO=92O?#3%OF5kS2ZB&Q%NK2}pdQ*yP2#__jQ%#nclMAt4qRorf>UKv zP*OUkO;UyGe2j_d{;7npjGMIkY4I)37JW$<`!lq%k`KsY_gqQoK{@Tx-@mqot~QUm zo9?QAy{Kxkb5BYTQMNNUcBp` zt#i`qB>lengCy6F?_kPfB%-;lGN_ zs-G;J&>!pNuLr#!t1<=M_>NYRorJdHJLB^Xgp;iGJhKBGMf~WNZWMTa-0@V0Ytuhx zK^Zo1{?f+ON85xY?qpUZT>OwtEdz>z*Vg6?^_ete%q)dkw!+3afF&RcAjV zDJdz|O)fd(cAv3R7)&LR(_ywgnp4(K^X=Og78V88RoygHRP7~x67A%6>TKfoo@|#u z?EW^PkI(?fAn&SZp8`tXYP)#%cM~2?E^~s4Bd=QP9sO%4)~G0`(iR;r7AU z+%`ceXQ#nVpnYw15`!yO$LpF>|wAH0JqJshJi-4r{5r60Q zrz6vERn^quyq3BM1{Q}h8<5BmWZKY?@2f-RhkSf9qs45BiFYi%{Xys{^ct~CxrGxD zT|1byhZ5X34z#HvCiYp5V3GuewU(Avn30OA^u5lnhMI7H-3=v`_4A4fwnxVS~r#|tU}mZkoH$^mJluw0VJO#QpEg)TyF0H`ilqKaJx!B=vdW`jc1!^*PzwIR5WOVJL z2eMYgsZL<*vaw3eKtm*$dbF}>zeG)~%_@_mmRdOTzX zLsOsN?m0{gGnq{%g}CcZiEn}2cQ2i*LbV;2yCYI@*h~A<5EToH+jC9M66=#S8JDb; zvG306O36zY%L)zP4udS|j<;@*b^I-vzhPJZ;*=H%_$k@zYd! z=tzz_&>JXq_P48S9IDn)Gj&(JLBfh%k%p_PfunY^!t2Z*n8brQL9MN=N5Cn-3O{~@ zvKIk{jV}%5Xx-!IS2M)@WRejMe8NTNz?O-98{u-72XlA?LfbNWy%hyMp&X3Wqv4=m z`JEhsw2uorWf95=rD4i;sq=}0GhBwFzbaaq*i`dt|13`>>nA&rACQlIJ#R2`=17Ax z_ys)683;mdwO{ z=i>SF@8Dvg+mG|1Y5Xe{dcn3BW5eZnON zW%@lBjalW&>}g!~ViWo4vP)25g~A)!aQ%|*4@#NctnQBCf~S1BaX?Y>QCKih3wrOK z(>iXSuvTMtJ=!LRbZN~>|A}u;G~wpWUwIXkPx!)PiLOoB;I-ep;RkdffUz?9M?`$e zZS5Dml{8)+NDjw)_pUM}Ir%pd_0!CJyRXU`8VR*TxBeu5`ea_2^7*rc@=MZQ87@he zE-xJ&Zne6eg6wI6?4&RdDA}R*!wg9h7NWF$!Y0PO6zz>_ajO4aFiFK7am>O!|Fe+k z!wNh!uV!nh(s~Ki1D5MXAaZ$gAL&0S0g@P}0qHYxLlR(P`~pn}$& z-?VWB-ou>l>1AH6ylIL+rQ8NX>Zc%6o2cVC;>&~SW9W2mc?HgL1lFB(CRdv+m#G#0 z+BMZS6T}L+**WOD&od_@Ip$?{`O(#TNT%L~)Mg}ST>;WbZb!6>H!>rl(1XpK!A2az zm@k&7yqxC-e-F4E3TNGKH1@nPY)sGu*%Bw1xZF4U@sZxMbD4&cQe-{eXDCdt%DAp% z%J*S%TAHC=wSiKha=co(cLyLzZU2 zx;0hpr}A#e@{b^Yl|N!2BBJHh7LuXZ@F-^d5fi0A5+E|i)g7Euh2$(J4Han-ApYKa zAK?Adv>Eh4)rPQ{>i}ogi|58ZYwx)84VP1jJC>xFUb!y2De>O-y;_pHM3SJ`pTcf{ ze5)LkqbTnH8d$w$|Fq$C&a0;CAZ?cRNkGwvyN0G>6LxVL5}Jeu9fZ^2=NKOu6h%Zv z)|Lzq&-r?@n<(4aJp>|{^l{!cV+BgA3Lie8NrFkjOq_oTiFyS;c=>S<@ z#q(KwXxZWJ&hHRfOZ*ucur^9in`2>sRkE_WYQG@QlP(R+P!ILK|NQaeL$yIe!B2cg zZ%a!ZsI084YiMYwkz&}c;d6F&^?QaaEVjuMJEh57xg;YiJJaNx`)g?s9{$0b^ z&{#D3I|wv>J%6rlO9C&tbtyhBA^YgTgak~qQf|}y?R)vYkE_5Q@r+1u^A41%zvfZk*V)83NuQ@)ir zv*Ea~$DnC0x}J>8uU~gti6lqEnDg{TU5k&ii#xZ(MLkK(trxs6YZ~$gy%pKN(5-+c zYOMxDFGv3}qzVDSU=z4KX6`syk?vf+Nm^>^b>0(&SL;U1$4-BQo-u`yyN_}K5lxr! zH-D0vmc2uet;pSB3_hH}`(vAEbNLx5fyl2;3lQlr?J{5m*NZ#Oj$*u_2Z?h9z7F=c zZICjS(qv(=v6On14C)hQRaGA7k}|QLrlqB&CyJ7*c{hhE4AWZen3pq!#L1V#?Pe+; zeI3A}wO)iNfAuCFkG${Spd{T&)XE=T;u}NTO=mVnGxCS18J&J6*U@LEKf8>FEFchX z62lrF`F&962sc$GBXim4?!?df!ty~Hf8=?>zc83SBQu9s4W!QCT)(n(iV_16LykMG z&*oh6NfFg^6)b#2uLXU(uz=#k5VO_Vka@E2X4x$p^Vv9Z>n@gsYhZ z4Suwo`BaI_rYe9>P_VSN_Otl$;>J#vP4E`c?P-xvNt;NQQ+Km6maZA7g5fudh|kEL zX4lpFR=uUkdD5(_NFRnc9#Dq=HHFd6>u7{3;ySz%+f!BKtHN) z1Jh${OblTcU`;u9UTnlboAx>{ovLeU=vmWef|)IYTyX}F6rp9@vynI zTcV7ki^YE^}SGseyr2i;mm#5u?dbfnDBINQGRl#!7 zf%+BT)7`SuBf-R!RvGCW+_Mg-XcB>DkzZA08*Cb$2%L(DtB3^wit(MhcY7b?LQGZ9 zuc1E~hzJX3Y1L}LwVO85Bj~zWu7pYUtVf~Jg!uK&=*-*y0gpUiynYQU*_M(Hu3)KW zU}PLG)8a8QsxWQ6M5EtmYMMzqf@g;MfBkYH1IfzDW_!&ITgx{BMq=q1fNtfXH}kHp z_CKL0-5sJVKwvKK?FCITSOJKN0U#{5Fj%%LF%O!8nmW&6{=nf)!@)z-#FKUnwLw_F zCJrAVjkj^W!IdKs8Fs_co9?EF)$70$L6r6W9Ra3Q+}=Kaot@o*aw5nM zW^uY~=;Csq9;I;gQ_ITk&o3+xjEcqs^$(WU*GYl_`wRkssQK=zce%>D08OMpo$rU* zQhN5RTMW3x4pNqzJH({JZ}Rvf(2G7+eqs3cGyHk%vZUaM9L{c>&^I8k!OS-~n>ISk ztkfUy0crtI-dxJW!~~d!=EO z*E@d(WD*C1!KEA_dO*+7R3eo8S2!Ch^Xi9^Q+yStnT{6IV-5FPfPNI4!JwL03BxWZaaKnb~i<3?dbc=&ztg&ncA z!kChxA`rEI+!fUM^k1)T1<2lWd{9==6S%ZLl%v4-?3ws8vd9`<`s?!w^hydk4Y?!_?P~3!pEEczQNTQMRb&s|2g4y z#M>@!e91DgLMre zV|LmgSq?g)aIaRU+_86ShXe2kEA=XO@uY7jSZt!n-ag8*uS^`iui0^}c8B~7wd-p5 zPL*;|@~`N(lkK7Y-Wu28cLi0&KL^ut(;Dj2n{qqbAgZn(#CT;!hQp;z%|I z!~gikXqqYE+-qB!9SIDTJNND>>XYB?yXEeQYyz4Iz5{IByua+!ENYOIeDfpJd(zy0 z@OlwrJCU!k3i&F{#gx%Y{Z95U`$qPOr9^I75(Nu*N^_KxA*!@2__~BKp4N%*2M!{* zKw4x~@k{;$EuE4Q4XS0&JuM9v0Y|Q1a<5^>+Hf>eN8244+H~~v(FqCSaV$4N0EI{` z;LN>_N?WV@x9ncOfkBPu)S zK@R?`x<&Qs8Zj`LuvKMZi|wk_!%fTAAN&biCbmo|;V9VdnYZnLX~)*J5>zKn&D+}!w zhB(k@hT|D#E*p`yT#FkAGIH`iQ&e0Apev{C%}oU>tK!t_cYtCm&y|%=e+dc*OubPk zDk+HpVD|IN%d=+nKIS#7_vD{H;a|V9I$n4U!P;bSMt`%w(p=zR_Y0oC{CV?2rby;% zBKVIqPpiwy=m2=k0sylMT3cCBC{!5~+84(nQsaAU4ODe0?Cj(O_T4zLzm!f2iQ|@& z;GulL`C=xZmi3;BXy|mRr1B$xY<3u*=PF8tjg8m1xeIHomK~1mbqs;FA^^p6 z?1Ib^mOI6~AAoU)rVRo5>%tTb4Puf`&%Md{`if?qoiHhzj#w~wTixJj9qVBX=5XJq zv8;iBJ#<9x{z&v@{qk@huW9i|ziBz<@3)SB+IEd$>OPsS)odzI8e6eE}+^IfPi$bU01DT*+)~l4R{U!qML5*y|<>8We|us zOxdPWOh17nxHcfKaw+CrC_>qp6!d4Eix?D_NYizi&YRwVe)0`9R+`)a`U-sgG@C-& zHNUN50=EJNqyu8YvzWriY>UaD@3GtykZ(kMv*$?p1~XmZ?cej4yYE5KhNnBG>`9`u ztCj5Diwjfu=rdUFy3L(znm!Xt!WU67idxm%Fb8Fd;dp^?=LwUwJ&;UC`zpWbR|MA9 zum4m0&kGk*$(YxmV6fR^Q1&)r_e4FHjaIf<`FvyD;tht`LxYu+b}UlEhk)*b!|}7; z(3x}anM~e$Y+6vqjL$)czmm3zKq#Ti;Sk&u2sBs@8BU;K=3JCae?syazdN&tf5vu) zR?Y?b!OrfPX7D{>q-1~Ba469RvkspiRNVa(!2qIqr0Y(a!S)d2e&{ z=YX$%MSVj9kMA2b=r$OTj|>%4TrN46i&OYkd;OTwoFL`DTuV`GVRjnZrc39j6-N)d zcX-8JNB1(>F9|6D-u(?cb3lViBeLCg2L%KKlwDkEd^<`?uF1*C%^vab@ey?Kb9yk+ z@$&L^I6=$Hp8`0#ug{X%e)Ju%lj%iNo8#jdDSWVOqP%woxQ!F+2CW2gxpJP`>+FzQ zdv{_kqWaTJMUsy$1IZrFSWaziKOZ}#8f@P~l0lnqrqkZKt{@cbsW7vN&s(bWC=)Ov zTHsx<1xf}N>{fF39zU%)bi(`vz#e{|V;D-pEE>dMLnShW=n!gbZKDdP& z^8r}!1!r&?=sm490kRdRZ_){Z55_53FOuCPzT`H0PbwqP88c&(jeP-cx|!b=KCq=i zV8eMtdFvIficP>6bFX82-(h#xhV1ogBFn;1*V6{)OqT5_lUwaFRG7EZp{9$d{92T$ z|0PRzPfyo$*)0z;S`Z;8s9lDnT_%`|!oUT^HMw_f5zai^f^)0}Qw5%^k#xJ>enym| ze2<24vY<|T>8luC`w89%zubm<{#-~%=r&M5q&*10fN$Qsd2mK!`@N5AY>9a^^Knw3 zUF@qRlq&@U#c8`2eSFe}Dl_&-X%w1oMd}!3)^nQfSM;>;=4b+Jr5sRsEb$2gKm}blH33?1SeEH%yOLRZ20hScJ@y$ z-IF#cmaEOZT&IMQ1Y`sVdTvl~;}qxq%Y08N)Qjq5S~5$R3j|>fRf;o! z$L_$%GDil}VS4&rt!FjQ1i+k_S1cr06Qwn!?(GR9_@#eo1Yqc?6L_AGvd=hg7rtiE zDu0mPj3SSFB2NSzUWg&x2uRRJI{hp=7J2NteZ!!aTQzcGLU|dG=#sLI$rD~F{$|CD z?P2;Ovrg8N>s-%u>?oA6Ytrpcy!rNW>r8a(|Kg;!Ioxqy_BGSMqqh9eoQ4G%!P#2_ zlKAA`bBkCv!5Z(nOekK^lrV3NL(>?Jhe9#5uLBPreeDtanfi_Iux}L~vJx5=Y&jy4 z)`37P1qF6)kJQ>?2|$2O9*a6V?sJ5}=Ke}~!58e~fP5}1i(<5Vf#%66DGZruX^B-_ zl%G(F1hql@&#gB&*VcDco|@C|fe*%RQ1>ubx>13WfP+XmFEU;20=`K_(&n@)%t7Y4 zWPC$@4bF!FX9L@XIDOWfl}$`=%do@yu2_ypppx3sHLKt`Evb7>;)p%XYb|Uk?%fx6 zZx?*;mR*WWs!o)%s(OnlVQ%53p9W!0`(1rDmHIL@rX;-XKZ3o-QKu=#qI+o^*w?3z zxnX4_(KF5#?}JN^yq5!3M zo^u@pp9Ag;LzCl`cfyJ1#TqzG<6}Ts!`QnVf8UM^8x0d7PwHrza5rQsle0c_@j=wH9?tL4bBaC1NX@U49&6bfA(x}R$7`dh-) z)it=FgKOW=J*}*|x(85gcIssT$TT?c;qA-hEE$H34FAFHFZW*e>YD~eTu#mN>a?@n zgM)pb@>jM32b&K~GxuhsYM~Nxp1;qxYl?uA?RrX@DdYk&x6=? z%5m@N_(Pr;|7FnOrMgq1`{(6IRVMsz>=Ygw+tv#oafhHrjP*56%RWHF5PrWsv8!dSZde^ks2F%k*39;5(m?q ze}q!53duHJuT72xs%W>Yn~FIO|6?g&a4LdlXP4hBb#5%BA0Llot-JcI(d2Dw;wJG< zc3ji4tOf!dYtNRKmkH$MvZz=k|Etk< zsLuTV(m4CKJ@?=T;eVU`_uqVr_8m^pzi&a`au3Q@O16zU?So0ABfyb#D+i`Z|Jbp> zM^6kqUOOBa`ch-=iQHUiHL-N+5vfjBL{wDl(iq?1witt8UR9NvA(5?j5a3-rplzSG zHPl{!X=!TaSy6c*1u4m{KfncTpyEob+vnd_I^q^4yC{bL!v%O`dd9r-OJ4I0H|UnQ zg-0%n%8{6&7$RGE_g8~IZg<$bR887#HwWByyzpQm!Ke+1*aH-fdLH<{6b|9tLEhPm zGg80gYZGAC%ErF@g$u95@52uE7dN+#(#lXHsb7ocY%;AyMawsaPJS-1G#k##|vQEd{(qzXPxPu zS^6janE(PTUWLBxxFD!G;MS}O3f*@;N7oK6&MYr%DkJjOT%~VP} znlG3gjKF8VlACcINO$by61q*Lc`l`b_7oM}#at5I77(C`j*dI=0_Eobb2UsjTGDw*zOMl=f1AE~mE}xe1fbAT8T@DV7 zG@u{!QAgA%mm1 zkRwAHj|*lNv8D7*0H*qJQ|m zdwlZE&(9~Lp^1b-_q9@7#K7}pJlxk6M%*)7KATEB;lFZIZy=8v6$4>FUign5@6mpo zxEw#nhI+h8~fm8gCiAH90X{8^onqpd9hY+a zgW;x3&F2O-TtW7Yvo!$i(}NzA*lCXn+>bNIQuMiiheipT0BU z?Cwj1yE9Y35#(?f8_+l-D0uAle%v-R-3sf^F(P}$TmeTI&otn?05qI9$A3=>)a3~` zj&q_o#Zh5V%tbP}iis zX?!*qtWfrZ-2;i>qWf}JUHDiJVnqJ>^=ltr-~75dcLn*01Jv_hfi|}t%pdj>e9W>y zUN6sIXvZAlJky&mt@#({DO}ws_i&rupy1I@u5U5Ae2emrm}g>hBjB%BNt8XX@p9c4 z&YnQyn`>LryCE`Evhj*ja78&7Vn6iBID)H5rlqX!w4DpQxu3}TxCNe_4RrG-Ol@BK zZ&F(}Ti@PMS9O~`JwS04va-m&da0|Nz#hFrIkMlTf6nz(o&FcLTnKG%Y?6G_}UE&PFMT0)=sNyAMYH?$Uls%lq*?1z)1g3#xZUU;C0 zZ-Q@&?Zn;l^Yiqm(2DzcRTmv8>J`W9%z(taGVOaF-wJ=+=eE~^q-iGJP8=TA$nxK7 zIX~#39dc!k3;|#Ocfn@dJial?n`N=-4mpS{lQq_Dz|j<_8CUAiLBf&yK7VW9PzZfm zXBLiLxyY3JA;{InXs<6%E6?@X=%R~42DW7zF6$<6x4nam0lXNj1xqIxskRdkpH5K=N2Q_qrIaymzf>VNt&~ zyyKdQmzaAzH9~u4v#aZcua4@n78T2!tDe*8r2k$Ue2e?6wz8^PNm*MYu13>cj%E$H zy6p_pZN=Tob_q@5%>vH8)z3EsT-;3YW%-mu(XA^rq`)$fzYBCFWF9?wBr8C0OJ3ge zHydH|M%$ZziJOGpUS%JDf6G5*T37wrocV*TZAerUshhhy0TnLu_OBk*)z#IpnHh3G zE|GDME-ofiR6GQXdhT1dfI`Do*x^)?o1pMVYDz%7t(G1sBP1f~LtmNcAR)--ImyX% z<-niOgy8~ZkisOQsbJ#Z*-j}uU4m3OssJ;wSGZuDHakIy z0fiLHX4E{h`Fqk8Gk5pIxnA_eQ?;rdBCd)d`E&Wc-!#>{Uu5=YrbP%-fGPG323v!Y zbdH4hDl69UBV)P)2|Uc>fUyfcELw*{J}*Au1tJn4eG3 z(9l3eMa8apVQsZX-uRe7$`<_0-kz<*dT|O%BA2sK8pMMk01Z*A%YrrSqb~mDtX(dz zuEvL-WDXs@WHcQlMeBAEBwVj*`dkU!4IA1EXcO7x?5Rffeq4M7>1^b(zwokYU1i=W z*rtthoNJ2BNKjOd?3alJzH=ReeSUjt`I<&8&8mi>nQI1#maN^)FJwVfxar6>cUv-f zr^JsX2&|&pZm}g+D6dEJkx$_(C||yO*-s0kGw~&5Pvk4w-I2}u(|=>qp_rtBU;yi3+>2puFIYcj!~Vo$G`)|LyjqF%28Yb z_m*-pzQ!20dCkaDJ@KM$nP6idK!SmO{e-b5n5Teyz^~wa#63&BL(3H4H^{N}@$=`3^nm+{^|R4pah#xNR7O5d!1KAN%M;vj z#C+N?itClqz9uUl{g}&7z+Q^HW4t~`cbR*zd@heL!aMc2VpCWxqVj1odq%`?$blp& zD$jJzpo*Q&egxLoed~0aR>4D7FY4z$=ypMVKb^&WOeXNU{x%^D`L! zkpK+iX8Cu#cqLw9@$s7HWXoPM9`I{@g*Q3OSb!2dHL=X~)`K~+a{<&YSQK0l$qqn5 z(FX@uWB7PI?DPf9y2KYTG3BJ43gxqTO#M^n20i`X_hj5OcwK>Zr>xsDOloekQ-?Eh zj=b}AHdw{Mz4X8Jj$>$~A(Pv5@f z?;oJ;dR#HITX9r8p&<>pUx`neVOQ@VT}F!9{|tz(T{aRif)^DPY1tBZ4~c;?Y^*eSNXYlH%F3rf zIQYSF?DJ>OC>}l(PLai>3K&0BPSgN+b=SUT#`?z*jB5WVmKV{!wNT4V{lc&ux;d8N z{HP9e%W>DBNZvhu>eBztcy7jnaXp9Lczb4HT>iy9H9Pa(@Jp<;`lq98w$+gX-a4piynY7W<%{zz34cH$ik1$2I`BBp|U% zx^wFjZ5a&TyQWQYH6wp)wjQ8qr}_fTy~hrj+1Dg zHS%rkO6MN6Y0zdf|Dd?Uw>Tb#t2gofcZ1n?!T|JNiTeTq3h&=jF$&1g=LVi;ybCRV zxU@EM)n>}Q1S0ahyi@a#hcM_Nz&g)RVh6=>X2%^J5rvs_8+(lD0wfql28N7{MiNTK zyt1+vtAU+*HyNzVwxRpoR{MdW=u*y~zqa*OQ*yK7-+{3_1qE*odf8s{u|*B0S!Lc) zm72V$vl(G@b-kBgbcYL%-8U@5P7^(ied4;2!E~FOn?y>Ah52wJ(?^i_Rqw$UyN{8v z0>X7heSjY{3WI?T$sXx!Y6ZRg`l`9MRv5ra_uu~E=0Cws<_bOifC&4Et9#sn^ zN1mpy;e(>j4GdVv`R9!KN^1jDU%es({rU4}2?$d$pv+53qN8VHiv>K7pe~4UTRn2% zl6Etf2o8K^hK1YSi`h(f-9U8{_LwAmh$xtN(7iHgRCBEm-$ z4kL+zvIXab{iMMON4+M;q<;8IZ{y-CEp}E-;m^fYIoKSiihx zc&IALbN^X-FOl9&3(Sms*B>{;ukNYm0rE#2L#v!q{@H((c2o3VCQ*(Z)Uz3aims!OpKj7 z1loS|sxClPLxU63Wul{-a{GZTL8JBVHBdYLw@ot@sMd=I*aDFClaWMShR%+WiHY*V z($06~&dt~s{p{-|b}P;=lx{zM%xs?q3(LcMIfId@-Y!F`t{`^z&|Cq{&v@Lu++{UM z6Bn4f>WI)h<}@3S5IUb96_-j=+|##p5eUN`unA5HqZ|gH0Ov-YV^vi zonP#i@ct4sB=*9vZR%TEPJwG{sxycV=rlmz$u9(bUjH&kOGBgl=FR7+0QeF0s03-p z0vKel(S`1FR`Pw|1wP>cnaxVwNCIR=eq}(?#Tzr1`@I}#cRW%aLwFU;k}L(^bGS`0 zSqvY!0{sb@%))%LDuCLr3ZF2PF1{*yEDnMB?KR?hqr}qv`g|3=upOYhjYKy3qY+hZ zx0q$m)th7b9&c}tYSHj;AGsg|L0vCCK1YqU zP@n18T?5iAQ~1=5D5LbTA}%Y$Gm-0gPQCzsrVi5QLm!>=v>lJ-J`FNw2D%&!ffm-_ z=j+h}?YCd17ZQKt%Svb)}&t6|W6|x*$S?wHseyhF> zLm`0XoD^f|-?(K&#&gG~zAXCdN0<=qC--cB_I62hO8Driarliq(mkGXj9@+Ez1 z%;OB0@I6u~K7EUw>2C(d1S%H|0T*uUGCp*m$AS_}4<0;trcZ98g45ME=DmU%Rx2tY z*WD5Yx6RYFOVmQzu`S4JcsezE+;Fxu0SF+vMq!LRJ3ZMEV0?$KF{6cHqk~YDCHu}i z(B`F=HnMnqU{aF1+!5hMn$^@*KYSST?Rr;kDxSoL{B0XXkSyR*Lr3RkWt>>xQ52M} z{zGL8G7aVSyGJz{37?!?O3s{kY@aGI+)0`)Mk%?zA+DA)AO86>k>v4ALqA2cNUm`# zu*NKArv|lr@lxwjrAq`pc(VzXl2}`t!<=Q0aP$CvqCjlJdc?)TJOzZU0yvS|*wUjJb`*j~~fEnomfN5)lB$LMNFq zzx*5LvdG$lLF3$LyFWUq1r06q>hUO9r(;^?^5SsvL{`C)JJM5#1`k_DCmj}Q5VM3d zv3h(5)ZJy1*{Y=j0)Ee~S!AdgT|vSl5fHx_dnIBYG1aj4RGQ1HhZMu(gRrr4$ui+-ZC)qE1& zZqsuj5GFiV8wd38=1;EH7w)1LExrxL7oCG#WT4u%qB!z>e9V$S?RiGMugKAU`;E+D zX<7hqdE4T|@ik3Q--Pg8Y-yIr$dC4UqbkxGpmYEFJ@zKFxTxr3+@M-J%vYrI5T&H6 z%kbEdRS#lV`UtEZAaiw{Hk*;&GOfZIfaPMpHZ7VQT)UYe>))94^UIc+_pc^K2T0l! zlx^pBO;hf=fn=)*jWVPXwT%$n7;1arlSfrLpLK1CGRw{Ve{lESQB8H-yJ!FflqOO{ zs)F<;C|!yIqJkh6Iz&J~q=b&tpdcU!h;*rTdX-*62MJZ_EfgU@=rM$ZB>QaM_j`Ze zcka03-c$ZKcU%U8kiFJkd+oL6Ds!%9K9l>a;h@f=lvW}RCK0k(0tFmR_v)&9+?-I} z@-?o;nJf@+!!=or;aPt7MPK*2F{|Cjj}Z0`g@x>meg$NK$0`Wys`aIp;mxdU94A#G zr7h<#m)5T)wEsNCsH#UW8OMZ3NlIP;txR2g)y;FN%0H>3gQn_Fv#=;x4V@J2vF};@ z1}XQ;yj+^$O#c}-i!FD7wO;2*!VtRWLyxvfhi)!)ebFzONy$nZP(a8w>^JVfYkLIX zysfvI@)u@(1_^`S+jquzeZJRzC@rNOOIfMO_AV+GD;u)14$>mfz1cKwdYG(AVKdaD ze2@ocgs;| z>AO}GtoCyzVSJ$M2`-SR(rO$zN4jGoP|K{LhE#IiQnUr5yWv$t!@o2%Ot0EDHz5f_IUwISrQ_xKF04PV67bSb}WftZR;C2Q)ltt}T=uH^ z4ZaZ|quDHmIrsrpv?msA56Z#fDLDLE(%Z*K!eL}m%fZ!O6?E^jr%Gka8y+?tbn`?u zjV7vqeP%bBFDE9^=OF5PS02a{B65V_u)23}~_U`bmixA6GOOXev1>3b{65M82uaEa&R}bc67~ zvXLceCMj4mIJhbCZD^Hwi#fi52BHbozFJGK&3PSc#0%Sr0r@2^*T?3dK0O_cM?p=E z`!j*7wI2sa!J~8E1jUBW5tK@lkhvU~(#uaouv4fk0@2Za{mPFR4kwBD4r`v0)R9fm}`KEZ3Q^8PH;@+*ht9C^SF-eF#h~T7SGV z8mv#ThTW3O;w?S#OC_=+Zrv<7+2`Zh*1e&Y8aAd>rzceCn=7C~qzt(iz^`%q)-N7V ziJIf1c??RsGA|*yCIp|Bo5$wPpB7u4NirH0sElZ|MH|lEH~AVeRFs^|UIDHQEKzFn zK0?aMld0;6;++TyFyNCJSX-UDcjHvh5PcBc%y&GCLflPTZf|RVPZ9JVaiRJ)(;dgt zx&Ccv%XpA?U3j=kM|Ji~|C1InL5J)hox3T9cyj9Sx&0?g_Is+U+Was3e#ZTEhMo@) zl`}GJDx;@b?9=w8GHj*c=`fgvF?`Az^5dOLMRs`ku$;g(1kYc#l#$keNp(n3!Gmw- zAs!2lD}MO}G?#5f%{b1q*S_*WXGcWYzt@@h4>X|4sfbr|6nLydrm1>TR$VZ%s0tz)Q z8K@aUvi*dHTOygPhBDpDGZjOgkI0+H$zMqbi)FW~ZOK;tU*oML?H3*9 z5*m%5BLJ!P_ooKlC5-REHK4KkqDDwpd1$HHgXc59L51`Je|D5Xr=M zY%qaZ3zuUX4K2r^@%9~&%zxQS=Da`#6it#e;ZZfy;gecQPo6JtS+Kc_ zndU@xK@fBCO8Dn0$Z^96BI@Rw_|K`_52C14HM1%SGeA5r&5OOVQZx|ue~)ocd+RJ|edafxJ3- z#L9Pt8T_bb_mJ0L1-JQmr8PJ8PdRe6e`oMDrfQ`x8)<($9`aV!5h z-#YA|T1tZUYM+7D4lfsjEZfaZ&p93m{fno)syVbkB(@^6=K>v9MbGsop(Vk*@}`c| z!>V-N=)joX=QBiCn^&pZOuoR%F&naQDeA&R-=2qD7FFP%uvzIHf7ITK6X4)T_?8pQ zJYfyzD2(B?=NiPo7fIgbtLvs7N7ZTKl8d1sUG+B{o2s{kEXOs2eUj4^eJcY(@Hx$p zKO9=6gfGG?Vnt#THd^LA6+uHb2AQho8}XZC_gjBRWt0UmGj^;Qzdt2cjtZaw;SVc3 z3u3L1HSxBXo){IRkzb!e&j)2xflt0fhuV$?EyT==A|WmO#-)WVPS~JK`0ZD@CKoQd zA2CN+-ojl3^>MiI1QFhkn^1`KpWwFpVR}%EsP>VNmhRFPm!*P)W>#3~Q~iDqbMQZv z@4|>w50#`m46b@m`dJlKKq{2#!ha+2J@{mQaXzc;3&d-nwzBcWr~>T}yo+HEA(`bR zJVqG*Sx{lTKu$qDo*`x&F0=4koW3v-EZL~9Wo>^8(A2(W^?N;8vS6?_)ewjCRfeU= zLKeb%EWWdYEn(u97S_eqWU4`mw%jUjH+IkBcWUbB=x-p}w6 z?+65x==+oO5NtzyFhtp@MoDA(=c-Sp)S}N8m6NoFb_W`5V`$8mTdUf%YLZ}+bB6Psu;G;g#;}wkWb|{g=pL>^;pVC-;Gi0}g!#H&>+!U;F$M8$ zZiij6p(7YK`=0o&vQV6)t<$M|?bg0&?ZFokj_VK2PbXF}KrXAGJ4-G7#gV@ElUa)Wd&J^RPbxAEZoE4ddddXKMYaA$Fk(Y-qKcU!*1^L>t*u zrkYV8i_T->9)J7b*?Un?%8*t-fL>Yct5*e$m`b0*va*g;0bYROUjHEt9>vkuTcmwc zptdVAaADIq=dWA7ZM(L==!>+0#WIaybG(c+&n2i7#1ElAcQ3D_A8)_@6kZ*?zSZzd zz|FY>oEE8+4_c^sqavu|y}b)m1tyEv?IZdVqaOFEw^=bz3b*wg@Ii@odjLL+*78YE}(d@vSgG zE?lUaP)~q7oua|q3(7d(Gw_>Or1<98*@PXmD$;5kF3?zx1NZ7x`;=Ne2kYk#uF>Q< zurz5qkTy&a_iHI*E3MI5JvJui71aTj#G+5ZG>-?vf7PAlg$J+oYCeqg{2A}!+AjmIyho39bQ^1(;*46C!49O2czS|2NZUj=qPxRQ&W@tj#(e?fkfJ!$=9h$tXo zsz;#p844exNa#_O2m$xbI~idg)=<25a=+!q>aBb%3OpV{LmAL-b}YOuEmE4rPpCdf zKvM;N{(`B>(7-A1aK5o`^OZT2p4=eU2gcN%DFU=s|@WuR6-L&|n0X{Bqr&DT%4Lj~{#J{PQAgp23c|3ou@xbxAy!rgsN&jUF zpDCQknFeRc`q?a(5e2JN9n&8x+g7oqi}IokcVzt07CuaADz9@f&*!S->ml|%hv_pc zsWnR({ag^OZCc;5S5GJ(^84w+>b=o1!9F{Lb=7l_-73w^2lA2d`71xxDVAtH$kM_q zCLTqxTsVlUw1Q^~r>S|TDZLop@(8MPo}yvq(s-3AnJUZN@x{Zl3+K;OiW%A;u&rZv zFOAe6@lo#Z<^R8ao|RRmGl#(=D(r(j0^ctW*S4NYTMC~59Op|dW-n5nRB;Lw_ACUo zQG3fkln0_D(AFf$QSzYxq_z8x#1*x@m)^ts2Tpxn!liILSL8C0CGF$7hcZjJ-q3Bf zzqf&r=}q5kHme}7!_V#K1R6WH^vg&{Z0y-KTMK85f%is-pUZ&?ILv>o3|^OBCg6;t z!_&;cAl3!#IDvVL(bdU+jsbBOFJ7b?DobeJk0L=J=SUmY*AN<~LD$m0suBleOUMx; zVKFeX)U)@V$@ z2~_jArl@F7LGr^yeV@;0f6Pw6!atSeds!XEH3%mm1Iq8Kvy^7|^{Y*w+W5wydLoGu z|G6(-Qu!ZsQ~Y1w!T#s-{vSOd|4%)l>_u>rEmym5=9zZz2$%61=t{OZ$dY~48q#_j z>E1RWtH}t-pRIi`LyEeaIkikl+nN6=4V{OZHmtUSAl1KIS^S0&a|9(Fy;v~;0ru*e z8#WroX8CRuSadum8=0IqH+mwV;0k=;a8G>|istPl`1=Og@RFIb&y<~^ZXY-em%^X zfQD>^K!z3RKw~C&Ovng&OutQg#SMjnd~C66YfsrZId2@-06bG7;1jx4-ePwogoMH| zWo;GTDUoNIDbiDTC9cSHMbD;RHD6abNze0cxlk!yR6PCZB~4(d7`L z59FRYZG|`5@Y=zo{qyxNX>U`LqYK}wy5Ti_e)`C@!%i4B6aBnr&JC4b*Y*xirM}=g zZLqjAhV9aO5EPqwRt(IwxVUn1Lavwad?nI5IexKHRO4)z{b0%aY0KfM`O;vfSzF3h zFlh>OFV&DF`#1YIjHPrW@FQ?RL z%|l`dE>K=*!TdS>H$ z%HzEUX|ESXemIu$>fP1-x*u%bL^!GQr>>;F;zStnZ2z`g?>I#X?Kt}*$GE?;>mB0iN(w%o|2uo}a}~oUuKhjYfYQ|L!AdS(aOID(wD4^Ej8JFY z1L}Lt(&seUAw6A?i&vH_0OZY;lj&0YWk++bCUlJr-j+<4I4fALG2jeO5#MS0#xTY78Z-(VNF6_}#tKSdAg`qXsn z?#j#hx;%q?$KD^9P%A9j)fxF@#Kt?%!=AF(P#}}po$$BXzxR|W$1X$<6$qIWapEOzUC6|c;mKanSVzwj*K{z6OEU532S`z8J z=`5WWDaj%$d-bYPYX_16lheWmIUYy8j9xIIye}>Wfs{k4u=sIDh&q6;_|VKJpkB${ zmY__DY7p`FfHI!!@fSE)SpRhe5#+i7dJg)jQ)V3~TY;q8A$-pQw0(R4KL?G|sPPG* zz8*UJkYJDU>al`14{X6{_QpKSyoK*OyKMtA`NYCi{J6Gl5ApCZn6h-xbWNN8W1*cD zSO{S^?#1*tfQ4DgY4ow3vR6;^F7E(~Si~J^M>L@-gOh?Xsfhno1Y39D5}4B2Rr`o% z|I8zfHQ23&4q2y@ewi=?ARGuHctx5&e8f|&&f6tX z?ZlHhkG-a!RVa~-|Em%zp5{$8xU#ZeX14OGTmbhvU$G6s|gG1 z9!D;(th_&CV`MU3U(0{`JU4d?Xpl?#^rc4NotBeF_TvO}4VQ~MEV*NYePo+(i^1;`G*u|;qoObUDD}SU&o%dbA zMfn=~Fc05^?34EMIAoQXSdXLF4kKHm+)7E zN*Y`eUE}w-F(c8r4F+q$%i$mHyE1*L;E#KaT>8&sGq57Vgl;O!GD>Vx#YV_7yXqf!OSKrbe9mZ|_-~7kbmimIhS( z0(<(uyCeDCJHg)vs;V9x2S-onyEJ^F2*1MU?^U?>QNwb~?|JZ7O z^T$7DQSP{`V{u>b{d>!P^?8e#2BVhw>2dcK){X_1q`!CK(a}$zZcH@hr6!y5?fbc0 z{PwPK%ULAive~t>|JwK&!;TBO7~xr7SKQ-g-avRBwD{OFW8cnz-nQ-mL8Km2_fJv1 zHe}F^b3vKi*Y$}qL~mV$K^fHL{#6d^$h}`X)XZ9C=m2}d&3~#n`YY^j6y-4xTToSA zFPQn?fWi&U|MU<0KWXp%pWZG1cECfPirr#?T&C6%3%dgW`D#Bk+gEx`?0w;hM_#oZ z!h>MHKHZ`gX*Xtk#bww&Zwa`g5nhJ zsdlf&dw&Qt*nXZHbY*lLL^NB0bfRW;9v2~xgMRMa!dX3aAL{Fq_j=b25e}ET>a>sM zmx1plSw{~V0+N3APm;@itr9pxmYD|1x-I16qL{QkBv`4n?m2|jgFWVzmPG(q-{D${I@n7wQV@o7 zGM%%VuGsq%*de}sP2^zr^R%si;RCgNZ)-orB`d{M>h8|Y&iKt@siC$61AOGNCzp!T zAP(ief8dn^G+Fg$cvnt-U;n`dVW$zJ`Z@jZx2TBCfg1_~#C#;V|JC@1ot-)(Jw$u( z!M!G=!z2V;R#lUSM+g695S=?m$fbzz>?LK_qPIat+#Mn43>L`p=3M;PHHSq^*(Z*p z;V4WQnsD5?+XR$p%Qza)J(n?~=sKAP5McI{Z@Hl{hlkIny1c_Xr%|D0P)hn3)ePAkmiAq@Cf>|%JZ!6bD(up|*#`jGE zOplLvd0YL?aF)PsFQxc@_kPC1-*><}AQWq5nCQlKbi_Wt#>M1-AG2 zpJ{;5d=<*!kdAHl3M7nJ&IxKJ)DTix?`BnofYdk%)Kx~$)k2QByas|F0T2-pUZ>XG zwLj1r9`8Qbbz4WOJ9qA|vdYnh(SgwUa_1@cONLoum6cUvZ$4lsL*fV!U9Jl`0cN72 z>MuAfi6OCiB;R7A`nc;b+*Buqa` z*|-9rwT%fsyl2?{}*@$IhlRZLym;fqaRh2g9f0NwD zab=~Yo%zNs(Xl+S)6?C+(0p@`?jtln1LtehsfcwX<_Uro{`GjrqmQ_l!) z6UCuZ7F&guXEm@VYOx=Y4Ar@ZxH-5X?AY6wu0?k6f zKXqJX0wgBttt|{t6y;kCkdOF~Oa<`pr80}^)1a07-3%T86`dbt@Nb7&nM7#y9RyLc zT;K*IhT47uHZ;1g+xc!u5kmdgrRgI z#3mqMsxOK^=kPmmB4F2*O=iatqCI-}U^T#>lJ+dF_oCslo*ve7K2yq4iqqK2>P_H` z%%rQ|r0ann0&_j~frUj3c%_FYvBt`Tt+&Cc>?vhE>ejTU=pFrp$3uBvAYlm_M0!O_ zagcNS?e}HFtH2)=zd(4`yJ9mb@sEUQmc;M&caWI~rXczG@N}Xyq4-1oQML{D zY}+GzTKt_`Yp*;2wtMU^etqK^DQTHxz-k7thn1&#;{QBxMU!&5lm(iD^lT4zpF~9Y z>zbJ<86?<*Svs~vvuGR=?eis>&O=IJbIDCt_StdpM5@OTUGgjTH2XVw>fhWH)tG%e z)=B>I%R}!kQ-w8*u|oRaU%nm~3^99X^~Rh{MA@We%P(`800mzZ{QB4!Ic}B{Uji9` zyRo4ht2!M0;}DbB0aLcH>(CHf2hzU#iICh#M8owT%D#nEbdW67u`uwEWl=t?!XdP|QJe2uvFcw^iPi{#d>%U+&j0+p4KW(+f&1U3RP$ zaw3xuUcNuvB#H|C2e}Ow(#UlNTVUvt7X9HO^C@)dBMAK=+3D=*ywI)D;4Qk{Apgfm zE>iixA9g!`(&>sCXq#Qd?IV$UD#kA(Ba@UvNy^D339as?cqLpl32&~+bT|cC_PgI^ zvYs;yv+r?*gq~=(qsmL5Ymcm@JPW48T58Oq(y|yQ-L_;vO2ovhtj+auneXV#AMD{r z?~)Rkl}#cYD$S$>9XoI3Ip_|#*S0;8w#XPU^L(BGaq1%m%H4*++Z2_oP=Ky`ButYjPfkgR!SYH{qSt5M>({9h6RGNm8wL<9+r{fW zbZ-GZxwC$^Ep6G=6!5E|8H}x~b))VRMHH+*&B>D|dv{9g$vtmQcpMOOEidfs4Uq*w zdQc2tRFjx4Sx+I8PR!3{oN5da06$*K*`E;fEd{)PLk-DlD~L}-)P%RZ*U^sxAY|;v zt%|H>isim+H3g({oLSsz7=wputPW8o-E&-7A5hXefObIhS)CZqOlkpMyVR0anrcejcWexTe@{10RhpTnWLmzZ&1b*Scdv} zj+3Yl)U9z!j6EQ!YUa;M;n_2goXOLMGy86R!pT5x)=o%{KMlycD={sy@Bw++lcQVJ z{fIyJqn{l&$ow^k-Pfy4QXHr*z}tpNF@NjP$Nwf6+-}Eb(mF4Y##xseTG1 zVYr;}QO>UO)+7)_S312Fwa68_vnSr7AFh|s@wnQeOQGzmPwY_&YQ5+(C+fA)UI=hI z+Syr$u<3O3kj!s41i}MJFW*N**nkmZW%`m_EWM0BGeL^wxtZ6{zzT&oGj(+de3}VKxpk8^{u85;r2RP>`UoOz6S|$b z{k>3F(+<@os;A#AP?jVH&xvMLG$Old3|{fM1UB6*D<&2;=l+1D9pzYWfS4(tA9?I; zbDkz_aa^XZ@CyZq6ih(SGNIdYFP z^dIQgRiVAet-cs#ablY(nd9fH+TUOp1cRRa58B>|o=JSC2N#qjMg$6678hwrpKqI% z&As|K%g;r7u|aUbj4|wrwEgR_IZC)UMg7dQI;;Swhl+F%1LdSx@|m>M_W{f%PMS$? zrvyNcCY`l9z`=Yd&DEgP?z|Y@4!BDm%8muM8`stN%Vh`vPAFa^b7CAI5z^KCw^yJ5 zEgI#5fes+(Zq&;69Grc&{DBjcJo*4+%tQUNUO{m^(?3_lDz~rCsdE-X5vLsV^uJug zA8gK*q}vC*URb!tOL)Q>h*wl|SKI#~s285^54+M|(Hv3i2`U3l7hAD4*Kpu;n>D|!g)eyM-Hj^`IB#8Ip{xLkho8 zAy^(g@N4JgjuO-Ppm{$Q6vb;{NkJ8&wbVSuCjMNk0?ayK1r z>OZ5HIUu?LNDzodNa5s|*m=Ig7Q)vj#4~&e)28QPJmAxwq7qGi!pJdo6>` z@D>jSxcnNRHt*3?Go{cW)J{!UPeg3bk*IK0c*h|=8X5GJEulZc?|=Zqo)^D-Cf_`a zPzEMwW4i=Fe$g|WoRMoxC3lYd9WmzR{+CjnkVOxyft&{3PU794sb| zTP)V&9VLi0f*=O-&iI1)DmmxL7p_$|LbuL60?)htYId>KdlxTH9>C9`L> z535yKeWLw66eqxDf5WqaH-8l}=?jzzT(EV*wX0NG)0{oO0?Z`>A1ST@}_kIu6 zs%-#MaEAp+%bHRg%9FA(hVZ5|S5Q`dBT|%_0Z~y)aF5pNSoNvSY;FT|sdAC4mJMqz zq3FHgT~ALylF5i=60!)6CI#7(kw4%?aSWsi4>GL5T0Ttk(6lrjP@lHUKw zr|blkPu=m2W%<4xf1Y=Vhi)$Zdp2zI%7J>1eyj z@=5l|F2O}X-4BNn|x5j-@7+CWu)-ctV$UmA6KFDVf{=|B!Jgb^qox1Y2x*OEFVH)~m{g^UU z6sX`t*!}vddw%yZP3YS2QH|-NB1toJA7K32cWpL$xR*4H;>4g1iO|qojsRUJ-rCjA zeqD#Uoa2auQB4$JNw6bh$%vG)F~oR8H1Wq)^k&FO34P`dOPMTGy)LA>*q!*qy{G}Q zWFfOfMbJ8R0aJOhc-0wJSX(y%-$>?}@@^#sDFWHD@rN?ygTV^G_ET7&JeK7<|A}#Hiu!qU@MWN+ z=^`MKbejsYl`^|MlCpD<4w&$vQCOzu;OL7pno0zD`w{wx)l8-RF`^UYQHuo-Og1Gv zBVPd|pv7=4H=U=J)axUMyMEK><#A8LPSQo)ndvL7T7FDS(E#4mTaNjO-(dm{^{|Mso14qEa?V zpu(;Rx$Cw8-P=@}LnjdYyNGzVVmPY%?~hd%oRQACotHcwzYD*xPJmXiRnQYxL_?#+ zMO(YWx#ciWH0j5sC+M3ATt2o>&|t!R8Ay`!nt(U_cOie5CAh(;_;0w$rTyRQh5rTD z&S(11B)k8h+ZO!)OG1Leg8YO;`vd&SAd2?Mt!B8${abYrSaARLWx(rA;95XgQ2+LtoFOcWVak5LyJwRbD?3yOfDr}Xc+Z6v z^e9P;*FXPd79B0aVLcS;JwH%_KnH&%rzWQ_t)85q-o%ZTPY0>VQzM=dLVR4a#F&_G zlo8p6Wf1CtW{KzK#-^6k5+0=13JL8tDyo1Qgf6(OTCcY9&gh?@i)xT6Dl1DN)(vF? z2{30eW*l9J{yyHmHt8wZ491jpsr8;kMX?f~ji7T=5U6w4d4GNhFFiLbg9mqfmgHRN z7Ob*^IheZTQf}kDK*0$-x3KH?M#Br-akS0*>7H0_)wG^;M z`x~fe5>4x3IGxPKfxdc+am8R)X7>#pp8{oln!hYpS*0|PuSW3D6}JTS$T`uER+NT~ zJdWG1#czzqc-+2y9^$*=a@&C2rut8p0fwsQOaJ8HAP1D^TmK=X{E~971ED1h0&Znb zP2E-Yc9oUWl;x+3BJFfleVIu zciJZ-{BtM!UV@%9JtnEtg;ceod12-1KX$o%eR2?JiMvw*tpCb|64s&aH@&^J==N|w zfN&O#Xy3Au_HY)PglZQPj13sXHZ2=4W>J^zyVF;W&VV*Z$x4-UUfNzd__ht`W7-1)r2C~%UK#1&|SbcoZ>Dmv+^BCl6SP$*$=%h7Oxlt*d(5l3~ zG_|o&g#F%1x^Tz;)5isUFxU$j+}t@)H{H6H7EZ8dK7u;J!6TD4_pb=m(@);MtV*~IUcy86$dk!=rYRvP;^!=qlcl_+OtG>`p?U;7)*?%kw0&j(FPS9>HCyyV`0NJdrczHa10{(08!yho+n zo#zxR_z~GQ#qIF}5~yOmqwu`^q?YvK^;eQnpYtZ4(Lj!My<-bRt;}1+VNlHjqkFVJ zE9tU=0wd#%0+!OcJr}xK!pGDs% z`Bs3cY!!%vvAKDHB^gRhNHYPVc*59YkBAeJfQh7sZ|X^i2kxUNFZ`1exz-J`kqCet zLMSF6MAUT2D;z3~THAz$p}MbMsD77H{_2k%{Jq*v4WC;GJRB4%h5H)_ctRli&LOQh zUon6TrBH38LXRldxbn+ftS4t9Lczg;F8TSS8(QHJfvnVM4zlmw0ZR3QO9(5okfsl5 z=MRzgYw%^p3QX*)`v?DG?l7pq}FJc6HJw9;Oi?iyLPy_t=x~SwZrYZivHHvKl3GD6%nBZbFV$s zc(VP{!teXTk=0-_@vcoG@Z(o#tHQ)Yo89Z4bI{PJaae1`l=h+$O>0iGewqz80r=w# zLA6%<#mZhto*@dT3UZ2vwxiJWsPy_VP{p}+T0!wQn_iQn{sYG~ul^ zFrCF?4h$yvZ{4l^5PIkVUY;N!O90?a9Www<1l5#mX;A9(28ic2FnpFTfB2!-PMn~v z=cfo=7Nhr%HyjqG%r;sC71cWGF4BI}ZrcpqyMAfaFy&xYzdu{T4{?~cOk}bqd4N;w zhv=*x5O?6@Uqd_Vm=9~89$E#b<*et*+HrA>gobb8Pg@{&+mXM zZciV~#DqI1=;upcm$1=JlG6M$Mn#~A~uk?LnLwxgzMbEyHm7~-ecZ9VLu3r z($yZ$zu|q?>I&u<=vQheJGm6a{r%Gwdq;DTD~N4=hM3}@U3kUL$KD1yU;G*rsOj@E zD>0drKvHpK!re4%Zjp2XLB5E?Q(#7rBW>e38LUy{3f#FZYI0wVj6nrqWos#O%>X7F z=zJ9$7RO_3WY0H=d3Uliu$pxF3o-Wu-0Yl@0Ihjg8MGJn= z<*(fIn`Z7`MX?wG3W_lC(Q3-fDGznZB?FO=C2B6YXFlIjgQjDV`_?t!dNb)74|Q;V zh4w-j%2D}BD*K+Z2B97TPR^|=Cf6)Ny)-Nv9eE^v?X;g;-U4?yz5&0a#l>A}Z#Rji z@JT=Vo(=|SivK#}ZDg^~WF>-D7I`3R5W9IQsUQvMH6?oe_>SOVF!F_W2FsSEaRz9? zYV5C9`VCa2VBV%Vb+KgnQ}bIB#`CK^)_)^Hw)`~S9T8<~rY|q^gWxH!QB7nCCpWg` z@+m@}Y%9zj$Gka+Ax+HLw`uaHAWpV}%SPRCaj3UM{069P0?wv6yD@mUoC{};O%0XZ zxRmw=uyM*?=<+pgQ=_^W$^G0q4_45s78mNTAtLREP!s6LX>Lrc^GGyZK}8es+azQG zpxx}=nh9%3u=b|p1yK}u#zSI7HHq}fA>2kSfW|#&f~aXpd!#SwPC`kStc>4WUU^-e zS?%FBqjA-xq2NQ-Yy0cpHkcGG8^5Nr8+!5+{ygXhuR=C>voyptf%k6Sl@SM@Ebr}e zGeqLfOec)kUnE=0;L7MdDa%TrX;A!u<3+*wmvPt~|0AWqtXFIhgReI93=G%r-sN+x zxo>T!*5lvPd&n8vC3jBVs6B6>v1Y~8vL7M07a|QX2((at?R^SLo!s(@c0;FM{IT+u zrk=E%&X7TvShZH;wE8D66jr^oIHB2zWSQMo=1-SJBR2B`uT>tc%0~1jU6y*UMpLkQ z2HdmNlX+HA>4zX0ymbO3|U&A4u`8QKG;t_)ohl5VL9LT7(sv#NPM zQ@(9U!p@K(7s#%k$!E{%;3-N=-4sgv>O_$&Fy(m^Q^N7H`z^R?D(`r0@B*>camv*g zhRqoSG?2+PGfCL)%INz9bwBzUW~B?*S0x(o&HCe3+YA^M>aLgK8rPonbU@x-J8*9+ zqHA1EP%}CVrkrEMTy%81CgaQhC)!gc?E%>zJSEJRgn%>c&-m(}Q=V&kCCgv5EaiT= zoSa-!aiUnu0WEjcXma@pXbb{xO9`>47pZG3mOwNt?Kqc#z`wMK7+Uy}gipm{_ME zS!m5>SVo)WJB35?W5BG8rWM(awUw1#@GmL5new+=V zwlM1S6o*6bS2Ha013JcGklnS`3!Y?-7v)>`6HeAk=f^PBaV9V`o~>NHu^QqZX#yAz zZBt)npIN3tx@AQVU~f$1+$Uc+PA;BtN9sfT}} zub=Bax39T_AF7W-jqD@Ah&UC4X`6C!{OZJ}Z6Fxfz8?$Mkb6@MpGufnBPgj-2%U9V zSXq73Pjp%!_RmMW+)RoZa>MSvv6Cz{1YE@CS~75{hi>Z%w6NE(KO`PLgtQwYHNbe% z<8`=wzHE&r4L<2gpb83q* zXw`1Xv5z`04n)3nhw~Pl7}yQ{@lA-CU=wdLJKG3L0C~wO>uj9njlx<6skU@>Nyj z`77=i`f-IB=*!Op+KhJ-==IJRfJYDQb`|vM+z^XkNPfZ8TBTLlp{Ka%hr&LbHcUsS zPR4#W@~|IJK_isHBp|*JZpc;Z$I6-zD##6p4rJ27htko}0lrvVkzRtI)Ddw8#wS4S za77hFh5P{zSgZFq`1#{s!K7IO6&Am*W_kxV^TTi6j09(KZ*#@KKTnMxJO~FFgOM5< z!$e+27M7m2a5`4d2>wAk>U8t_%NAJOp#EvIKTkUypFD|9PQKjPO-;u_T~X2c`Sz!- z?YWjr0KE8yN68?Vw0F~bU(Z1%G4|Hx%}f-y|%z!n4lmAkCK!GN+5RHwAprbdGqw?Grj zUD_=g%C2q4J+MVV7TTwG^T5B10*d`3^l#52K8eJ73*BIGLxWVb*K6klc(}QJGQ6Fp zmz!6&@(%9Hh6zY6G##PnL-x7`DS3T3WT)qlp440UQliD!sycp2T+agXaxD-K+v}ezyI;kt-m^G z0oCjH0iIaS2x{?UN==hQM6-+TpL3tx*PGP{<>dx~ zWZeZcnYC|F)}B(YvucW{PCJ+z_51haq9Dd4aP56SuArXVk#@=uw7NM!uCH@&eE@`NtS!konfN?Z0vN z-9b@ATc1q^$&w{13MyG7DLEMs0TDr>NE9UJFbpUXBpCrga+I8hI71GSiF5`_;B|xxaJnIlp5Mg%d&+6X|BfSw=gqxXjHlos9B^ zW=f@16c$%V^J`O&jHYk5QgpoVDO(Kv@Zl<7J24RL4F+YLyjr6J6j3LXGgG_M0pp*d zh{#3*`Z8}NnpBYz8MC{UJ^Ar7s%~d};tT$Bu6)%cG8#TmDiNkY;QDrNoqF-Xd*^!x zQ)htl9|bB!o{@eQmV+SeH#ISefO$->srZ-ue|b1TJZYwYA)i$*+=H}6>jy31c47eJ+#jf04w_< zMzLFsq1_7YO^vH=`1he8zt2U;fH!6>halI8v(UKavVeZk1qtJY2dD-X^gjgqp#{v+ z?tGQT;Co%ioZpw9T`SW z3C9a-+4(zlL!Upt(%j6x3qur>0PY)hvB~&&*7EM3XSWDSrjEK0RBsziQpMaDJ77`v zrgU+mzg*U)XMZSke#ZZD^Ag3&TTlHIe1H=-8~=?xi@$N27LC>FF0#Tw6xGy7fH_QJ zAt>%t9`-yMnTX(sqL}DSDJcmvK48o$y2y@ zkpF;2=E@z(N082MLG~PCNnRvXQx4JDpL%32@)X;o5Z$=(V4&Dc>k$50;xWy4a}?ZS zysBZ)<^T`&MOvvCIam$=J5cE=(#A)*{N~m1h5M@Ake|fbZm39Z0-(VU-86*uTua7- zOOGxyyiyeuE%ct2muf#)UEAzr96vWxw>o;X#(&K@x_FB)e~?#x4o;C9m1Sg*Ju)7B z=A>-9D5|{2Ut_B4I!FswZA7_g9{>rrvk1 z`N8q=FfogE0Jun(N%c_kJACwew!=@dZG;)t;Cb+TODGXAR`8M+LKS+PqN+3;7{f_< zdo<#3eQ`09EYxcm}_6OFfQ<-KwJH3O8K-;A5`!+QUag6JZPewr10%``h!R} zHt`4a7Rf-nECE%*0LlBDTOl!B?9x&fW)xu|Y9od)z74V*^^A`K0 zeVSbwGVL}0fZc*&y(K*2!i@r^U+aU4>v1Aov`kIQ(~}uP93ZFL19ue zEi4Wn1=E*C6bjb`^6?v$xcWG4&dR8-bAUTTR_H!4gPM9+ckC-r2L1I8;1__$;%6Jq z=1M25pCpY0cUUJ5)_HNK^nt02CgRbmtjt0jfwZwWV!)H2gdn%$LrNfl5Z(yoYE~z2 zfMF0clm-rx$y>n6wJY4(iLV~~{$1ja!V>|4C^X(Vv)~D=JkV~>i zNjR#JwuuP zMvxNl8`$Tm*?E_Up6Tvc=;+j)e(JjDqT9`ZBhN>k>zVf^NDTG2{_2JLvQ$ni+sxdh z0fy>0xL3MQo$hnrk?F6QJ&jYMZ!VY6-LuRK^R0ULTeY)(r;iov(f54rN~)#|`&tB9 z_k)Bqs+l-a`=Sbj2(4zlZ0g0KpQ^14fNSa<<{M;ZyS-z>-hWP$LSnkvFN!`@s-^av zZAXIIld82b5N(_o9*7=Wc&Gxv-r3Jn7UMPcRoW{4+-t-myb=2>-u`Z+$FrDU^NahW zV9AGnJ|zALUs^IrIro+P+Dcb0AfemEGUKrMrJWLy%KbPz0strrF!umwMz+AI*Wm8W;TR0G+a8BH4sX5~%Ve zLACZzgmWKUA*5ScyFWS)zn@Wcc^nU6xV)h3A`$2XV%Gzxzna5R7O05nyc~@rdZ4w~ zNOl&<^%422zz%+Wr>^|=?|k|zlMIz#-GV^kbvcgWi>5>-$-;nZae{;_|?I+$%k~AS^?;EbdleMIa(5 z9~X*1U2QM!hIpwhYk*n^?e-dlySF)oy3)}p6Mx6$T^R_Um5Z}uq+HPPN76+3e6q6B z1KByrz06*Rj#bqb&s$p9uL$)ZoK{d@y{W1xORU1RNwsua>+ai&ow4w}ed&rV^L;ij zA-9ix+U5h(bv$1-y3o-sB*5Wvu*yN;=;PkWyI?q^fe(K~lA$_lF+-fFjF~v9Ht@aOew7f8iYYVN{e|tCy8pj5m5dZDIV*T~ts0!A_p)#e>aOIVu;FPtXC)~6W zaa7B-=xjgu3QoG#)xGSud%l~uXS^*7=Ad$Hj7pqrSz(ZKw4?nzE=7&-nR8nBfxJVV z5(9p5{yXyLw35c(g&=}Gh`g$LLIE<`{f}4+deM`Bqi2%K2(@lwKNXx*f$+P^L;JS| zCfDVd4~i$t&KQ8%&v+pbj^^}Ho06puDnk}x_&l5!4N-;cLwaiWtmI=F( z9`;H8qjqgBl2@FO{(BaARz4vR_HgT(2ghUo4L8kFOA0`H;ZE=nG#=xJ;;7j>v$}Mn z=IDKnnQ@->AzIFsDF|e;5-PVRG{D^J~#P}i8*0Ul{x|4OXk@^-cFjB#>D_V85 z7B1)XN4^jV=9HT{&^UTCb`_t>D;dAd8lH68alY@do-VWbww41kchMtcKI`~}%#V5P z;>IEn@Y=T=0x>O|e@b_iL)Pn-^=pyUl3=R7hIl9^cBu{j(QMRggXy$bg!P8!xf?GA zB}3J;wgDFYksH&bqLIz;!!3pgq}M)If{6xMOpT7qi8BuRU&O^ibL(5DyPEqRS;A8SO-;q480GN3V+N)G z!q1nqOJB~i`dZ&y823z5wY*7~gVoj>$vo`bWtgd>yi1{w%9VTD?hCV7%{9%rC%gkf zASp}CCE#Y)dy>Apikqlga`?x_35{!{Ja;drdzYtQx2E_>Pe%s3^*ivhGPc@u)?!EM zVHo88NPIw$_EV$^Ku1<3V6s3KW=*1&-B(+f2-(l zXRFe}WliVR2oKQMz;9O~?ajkOvp6e1Q*zSzX8Qi#t^OEuaLOL8%NcMaXSVlXWj^7* z`x-rD*p@5fj;KQt>6t4&{#h^PF4Vpt-c=0?;APIBrJE*0k8w9GEKdarcL$0>=iI;j zJh7>?Eop?fCVM%|NGsEuy%h~;=+H*fGN0tjA3)?uQM9E?#d9mrBq}bdQmgK^el&>$ zXt456ymn~o`Nb>YJRjB?Q9RRvJ%G7UY4YWc zs$0vWFy0rH6yqW$VGxpi_CWnZmW6?$*mygYJ~4Q}d({JZ2!in_LW`xBY)Qc}>VVnN zuw2uKukO?{oiyTov$F^=!t`nnH>~Je<=c=4MDPwRNhZh2WjsN_m?F-seu-6vOtCB?+&`oB@$tFF&;LLMwUlh_j;#_SP~54W zrBl$-2|o6Vrjutut%|XppP+Al44jBuFT0Zx>2$~%8GtqP2aOPeWQ*)_q#4}MdLXfop`YCe;Ym+GsE6KBw6(3ol74qV&=r4|3sTH?u1VHslOVV zRK6Kv2^A6wYnRl1)-DKU6EQ)WR-Jlzp$eeiW1+zKRLQIQZ?$f^M!tPPQp-?x4+-E^ z(`*9^Q=Kk#b$z|;=iyJ|MH8cgu3FvQ-3(x;zT;w@k+80*X>tjN_|>~NTT7PBo~m54 z(;8vB%ni6UH-FOC&G0fP2F<3dR1t+Y7vEvfp)x#xkChetpRb&>5C^iCISrJ(@NN); z4}zA*4qBc;%l)+z^_ZrT@qfLhd-N98iW_*MsoB;8GL0jLhlW&j&hHE3d1-tdAY_Xk`PzljdC7d9c-5Kc%Vc zVQkRSMcu63HTw#yc|Tt7w|1D|9y}8BD`0aj!uCf-FvOsDcJ>vl)!26S612a$L|9nF z^>5E|ia*vUeTDT_IY{{?rV-p>8igsE$nBs~Ie>22%AD#y6WyL1wCYZZqpn?-iR8F9 zva*4a!2_@4t8Ht(xTe@7I)A)VQ~-s>okGDRjl*0{y|5l6^ajZypVna!7N1|is5C#{ zNlVjS(5mVprYXJs&X->Kz49lP667bL0asVoZ}ou<lEomwf&lX4`cBMG##Tl z#i}EEF~}H^(Tg$mvqUt$&g+44jAJJSB}j(J$XIP0qPCLyKvl4oEP0&*W>PmP;q_)Te}vH&(6xCSXoY#lrp-_ zT=O<*k)jXWjbpY=f#P|@NvS@nez`%2Q?fSxQG?_?a)zHukr6k(jaF9ePZlL3epNiN zx##3H-)Z9WpSk8Z~)>A?j-_^xD;?=9(pG)q(#dTEzPvPS7Ff2ml>FaBO$EUR9 zlDxNWTz1)`CkKy&y2MYlG$!k0dB!8FPsp!lsb1q5-#p%Nz06?LakCVM*E9SWED!lK zkV9)NWVS7Fy2A$U0-cmTq>5h}Tsb!__omj4|J`_#P-Vl zu@WphJ;DK3tiw3dJ|Kw)tAVwR(MWC}qz^H;SBZr3?iV-U*uO(FHu_gjv`fSE7e^0qucqaQqcxWR%_385K1Kl17vNQ<_*nsycBD~{tdjN0MD zgULHutBTE#H{`)sEbwGRND??XJ-x~!I^Z(1iuGEXB$=u8z}P-pxiS5g^zvmoMwZaz zM|%bay6;057fo>1mM<7+aH0$-hg=oYSqhFyf)DrepH>vYbi4!*AK#K6;Khmw>6$}@< zYECnM6%?piS!InBHbq9GJUIXk3(&u%)`21}E{y}98*(2 zFC{6t&7DzxapP`C~Sf@XF5a_B$dXv76%MGuWN+D(WMCE#)buM`Oad z!$l_KjS!rT;L8OAJ`0xXTcj*S|}{8rU4$pAxutl8B2q2^9e7<^_dtm1Xzt^wewfWAs^mOO>lq|SF4pvoQ z7K<3X15`Nz>gGkcwzxAjh#p3ubcmkzFDD+bUeIS-`|zZ;l#cK3@3$r{1$o~syX??$ z^~}K8`YQ#p|7W;fF?@2nDmvD02sA!%6c?#ibp0utMxnTuB-u$bvmZyHJeQ1&)O45Tkdv9)?4=u};llX7CVdZXElLka!H4tREfDZ3!{( zT4@xGvhY&`lBcUQw?00S=3Af@6IZ@TI~k?_13p>U!hm! zB?W$a1LH_gSkl90LRMZBlS(?co{IBs{B?2tF`TnUTgO>4MPQtL}wUJtC6myAOUo*hA(PWB$65GdZ$ox?}0*LZpNI!yRW@cjrSE4vQ zop)*XK7Slm$#fw9^4?}ehwcHyCc^#Yaa<_39ZW6Z3FiuejeXWs;CwSD@C?g6 za0T^6E4WNZ{$h*EG!Clx8svyLO#I0~#o;Hw#o?DXfB%&i)g+C9#yv4krUR zL~%>pM!rY;4{`lxtj>K#0dkWHUT|#n!0v#?aAzH ziydJ$%oR*2&-M(TG~j%(=o+aki9r0>bmHSFZ!1Z5a3rmaQ|VjN#6$lMLJ3eL>|pO7 zKz&vaxIbOx%Lw>Vrgj;Jv^zPtx_}&89YHFg914BimP1@A2g3ReD~g`DncmZAhbfNJ zxF1A+Z}J0V8gS^iHoO#%KaeLio+35qiWORw^DbGu{K=0)(yPP7EgM-naPLZ}B<-CT zk{r&nUY|aKbFQ-n^!J$l4n;DZv3~i&8g8kN9XxZZZ zjys7@$O~c3hAhi>xbIll|6G~A{OtYYs|brWqh&GYf4&Sjx42({GYr)Wb$-R;>m{?! zbSm=Zqldq=C3y9v3s|0Vigw0*pj$aFx9Vmth2jHTuqQ5ip#kTuacgS}wC9-c#g3SW z^D}gWkWp1w-?W(xwBlqkhFSmYGbd<20Jp&ETx<`n-Vd0PK?Z;%93DQ{VQ9i1N%aTa zBCr$nj=R28>iyvI7Zv>mgxbl_j74_NVGxDO;nh2&?qv^Ji2CB9qMh8IWOV%9Uq`LR zgNXFPVE{e|IupDfJaBUN&#<@xBJ&m0>Pd3+#2R$G%qqfmihMYBZ7(${dPg>-N&$Wu zvBl8OZWn7&r zJlhe-YiGZ=(6%t^w=;TPQ2vKA9t_#Qo=GmFV4z(%>J;q&8ci*55cUJ;-hbL7JNy6T z=K?BFCVl@|^#6;gGIyhGw&~MPFukIljcX~)yve(io!bmsG6}+cVdRGsg9u6hRIeCg zI%GpV_huq>9>4mhGBr6$;)h)Ts4LO^eR%6(3gHvr`+Y~k!Wv*r#kII(NQMyb$(ueVt})#^$osD841pYI5YevSBHn> zJm~u~T#>C?oS5#s;7pW9x&G-*DNkO-$ROR933As~atbB2VpAZRS5}T#$%P=gbZwBF zy~;L~T-4)%Vq`5>Y8x`20(S4V$c(f9zkC56SM(7$SCl<7$!;NYR?|`Kt5#Y~9DYF6 zaElD$h6(%W@;+6cs1v#9*Ug%qp04WcEuD~%pslZ;W5ipKo~|7J@#AHXv3GSSixMmj zo~0IbpaR2^RwpY3Kzg1Jvr&pGr^SVZqYV_^oha@{LUH;Pci(kNSz230RDm|Ze&p7v zjk`ZkeO|S9o_czuzA(T0_|UneXh zff^bb3{62n0|_E)6ZGU;^u(_O-$nNr(g^O32X9Iw#_^L9r(V5DPJjzg)Z^6F4}JHJ z@BtAOKuX)+^ee;y2;3%+OKV-B(7HPhYGi}Q@C_IYf8R|Jprd~m(r!)sQ#vi0eRq|? z;sqk0+s11rIxJa^0GI$*q)%<{K;fVP3N5iLNP68lT;V8&avwF(0 zu2%=Zkb|wC}ijvM(rEvvCxME2*e?3co7OYcySDAyB2o z5o)A>Ar|1nQn7W*t6QsA4P;Qn{`f3p&GfeABZY!nE8-|a%RK@LhFqw%m&JT0;4yte zog>j|DYZ}`jW9Sf>nMA#Jm>ZC8hEQ54c_fanHmsQvE3j;gQ^j0ac>usujITe8)BHc z8q@_oCnj!`35tpW0RgTw{Q4#@NQp`2RjqD31>*UM6WXIaP7{0RX)|nhHdq6OjVOGy#plmJVBq%5sEgk?Y<@mo z$MECaU;ZRLoeTb?sB3d1&xwgu>FG(Hhz&j#k|-aksB_GU-LkW`e{m*shPy4$t5Nq7 zCA{ug8S&jAdvx3S<&>SFp{b~j3M12A^A^uFGRB7(EKb@#M5cv6wclo$v3O;%Y0=wy zu3q8bwCCo*zPLCO)9%4R%bOgAItvRi9?7xMvCQjf_kzWvp)Zu~5F4hMJfv$aCj3Cc zB<5KXPZMmEzn()jUnId7!;98do{#&=z@@4X9e@$gTaxt`AVepP6Je^YRCt zD-Z$d!slGK;yl#WV?y^vBfEpn6*iROhcKgMUK|gOqZfg|_<$t4LVZ1jyLocL4U!~A z@P{OZBiodtvPWmJBF|jbDsM^ax&O|G@B|NtoPN8jsd9F_b=1uzq1iG~ZbQ$+lqE}i ziJF=TG_u_k5>h)@?mg<(wgPTUS-#ExC<$g&ZCZ10?k`?G)FcgRp9E{MOozxrKsoo5 z17_8}+uPqy3noocv$V_fig$ZIm zIL{WLaslC6w;uKUl+mS42IgkPx_2FpRp@L#H10dxEG&5YmVN#EwcyyiH-y0U!zZd6 zu|k76>4XFX1itqJPM26Jb}1WU%mh_ze{Q^ZyGFL)xUYVGNaP}=rnVH|TR|1JNnUZb zB!u0k3}lu->FVeN-2!zQ1;i0Ez>{A)Gn?!5+;f?V+0?Jl)MlaqU0awU zt81E+cdIip+b#ca3f+##_xRCyy6S0UVY`SVS>NQ^w&-}6;B-G zi(vM1q&SMz4$azJn!BVeoj8F>`zU(wyisFORk?WH!%Ld`f3YIxZzN z-Ql5;oIlZA9`vObT3a<_gfDT$hf`U(WpgF_8iVqGB-qR5(lY>^EG%zPDh;AykKd)^0 zjhK+8#?}9+!0ZnT0|8aG%*H06aSJVdy`iI1m^AZ51uF7JOY>d@0?*MME~IY7o8c=r zMt8U=ViYe2UIsIfRH&n?lNTDBAio31Hoyw4t?mRgTg6O3d#ihCWMx<*M%GgR^&Z^!N@-Kx$eE=0==Im6 zBohzt-a~Eq5fTzQpA1};6?44~H>i6tK{HT`;r3#y*L(i_6|yf0gK;pbT192#!Ou>d zlKwAPQiEpz)B|rBu0>?7WkM!UK$QQr3!nlSLz9QrNY@g`n5bJ za$dvL!0dYHQQJ_@)A86kYSYscGFnrN&rMQQn#Rgfh`o@Rm&2C4&e9eUGOggW@S)qL zD)@;4*0M9!Q z%@YrCR^0OR`?^VFLG1?l9tq(&>zKyh=6EWX?V%aY9M@_}y7@?bJ+5de-ADFL8I9u6 zQd~RcmelcJTttJAV4(=g?6Myl&9db>WU$ajR@CA9Z@$ziZ{kM=-6JK#j#I>fRkXu;nRG|&(h^6Nofum7>+DZ+@^1JBg%nJc@@PwHD9>9 zHM9PR6)5RutzyH~=VSc%1mdxCzXAlRL$z;j5H*@nJLEc@5(gPF^t!q?UJ%Q4DDSrnzgv6qvSdW{b;zZfF=%N3(^rX(DK>22D#zj&h%pwk}=M z1N|i3fkuyKg*#^&X^*o>gwvBp;E0*;@re5($0y*4LVE=k!?RnfkWuolb0_AM@ud< zu#3pn^IF#*mW4_nUJp;9e1*KlzohtV<#Gc+D6LPO@?zI+?=;H}WUs0$;V25Ks2KQV z57awgK;YcmtIVt{5OA{P>lc#()2`h@n3S(zcp>O8xV!6oZc|TB+y>4VfSi^VxzSDc z7#?Q{ITio$>KMB{kK^twhOdTT0lf8Vtsz%XH>J$Qb8{^qT{0M@Gt<*BKS4t3y` z5FIOP*xV~*xPh~C2@+<8nOD~YXnAD{MEH77#b;9vyq+W+*u3gPeO?|9=XM-vZR{U8 zU&OaWC9pCQs#Xy1YY}l8)tK@c624bXZlRTub9_L@khx*dJzvGO+C30=(U*uXbY z(lIeEjiJFxM9P5~eId{>_JC>~h9&}Jn$1HkcW%1S3K7rrvq0%X_rq3rIz-bGE5#xg znLGY4Q^xb!?VEWx?s{Oq+)7BJ9onho3zc+#lw%}qeInyD>a_ah1?<=-KY-WHz@^K+ zP~KJ*@BN<28z<`c)1b!gJD-^z@~9H?Wpqn)tSm2^%EglIITF$p85ig);D2ZAd*s!x ze|iTtlqXZ)Bp|0=Z9}!{aeI zg-fWu)qF``R}d$tP}mW|82F#25|0@Z8ogL<%vPBhL z9eq>4BZ-J|FMrC{=a${eH;*z@ql(zz$$xt>u_ zFs0)sB`qZ-g203U>RgKC-`(8}Tv*l(&~DEQI(CDY>0-CVjPeqgA1goC$&m3^uHt5N{I06)%UxNXuQ1@!c! z2m6TCk3)BIcrsM}K13H;A^Ueti3O9k^NSR4`g=rQvRu9D1JRFoRLCa_B1B zlL~RRzTG0_24VC4{_WdpQ0n?_*EA^rS~Nqk<)vEBNuArTEKBCj;sioX`5f64C?C`mtHW_=%z9c~QHh$9Rf!US%}8;Qi3hJ3dZY{AF=aYe@X{-hBa05dJGDQL~&QEt*HQiPN3(_NN?wn_qI%vmvShz7TYRC z77`G~!_1#|=S4F^Ff@>!zeCU}=?e5)KV|4b?;zfE%On zF{z^^1my8vb`9c(vNFX$-|Dvg!iV*NHRJV{qcn9JQzpaPlHQl*3&>HCM?nb_rtNI6 zUW^pyQwItJ>(av?-3b;Cb$am@|6N6dfwQH>1w|C|3S<;K!F(tl6mRudo0ovrkV4Lm z+rGpls|6?peW6nwb3#gzpWUH-ZGI-SI!P*Rd`Z@G|Jh+=jLP1voH9(i=fz>2XOr|# zi1AL$rdRn<;zGVJYh%f(x$>-+ptWn{?23uSy|n6TV(>1vr#z#fn)eeHPCyEAondR5 zDe$Xa$+NOz2lP)!05Y2G;pYn2v?5Gd)!WeTM-OfguQh#V0$b!KJ=tBy_QVMi5@$~m z#pPN!o$5qep98GCs=l9nF3GP!B9^KN*mwuSOaj$}GNTaC5!&f0kyKaS7DDU=gM$&k zNf`7rgk7Ga7=GS-m4EkT>?E53*am|V*$h>0&nPSeU~_JG4VSgR2p8$I>iylN^h|G; z(^QS!^+aylz!jXdDJd2uECJb7fZR1Na7*WqKGM)k(Mq|eVE=3iKSAvHsvb&8$ z&3&FHgcB^W$jTa&*UoHVm&pBf8*6L3{qAVYvZST8wc!v;o!8D-kB1)eo4RZTs~6&k zlSambpfM`~-m-T`f7kT@g=h&2Wfmwz1hm8$1}G7Hj4%-gxG_ykvWzTo2AAQ+BLX_K zW`O>#*c`5{`g8|nj-=2}aZk)HqOH|5id?j6EMh3aaXI5(!x}e6r4$B)*T08Fd|CL8 zg|zNDP5xsbPX)a{yL)QoW#r$~SHYRUloqe&k?@fcPCWV)+y@D%KHILV5vP+-(uftL zN6&brWOX2@l#j9XEPg}c5(j>I9>pBKKcwRVA6TXQ+^|WpH!8FPoprGgn~SCc+wN4Z zC-6*@3=B%RjYZ?yu^|8lr}c$M^T_}gEX+e>2q_ON{x_MbPV`ZvK4<7?o-zZ`Tk>HhCO z;#0~D^@)(*o9(N6jk+@xD8KW#WvYkM`i>SLD_*G@-;A!dO!Xk9ugb8Z9 z7CuJ$*JU`}&Bc`9VnID*m_1{L*l%>jh*U12*Mo9u-^3l)sTjMpF~XKadOs8re9NZ} zRW%=^hgq3HVN^z*^&OBV4QZT2wD2JdJ!i(@TnE-vP17vT>FtA#;QY7Ljs9uW|7eDl z#|+Jje?I#P{g8Na2+w7Ajj>8A89!gq3w_nzNDU}Yy$OqqZrhd%6{Mc~6Ara~$YNwo z*l-v9$zZQPM|3`_9tA|oZ9s5)2dW&NfvePqQBE2_Bezjz|muoq{} z0{mH8S?!MMeom_7iIl3!uxQpBc)C40W$poZx~Cxk<0;`u{%Z=0h}cT=HgAQ`HF=Mr z+zLf9eE$ApWm_rvZz^$v0guTwHacSLX@D@+L5>}ks@5q4oOG|XFt$P|5&ikZqTEmP z)*;nC+$Bn7Iq!Birg0kw^TQu}z`@+`<$hR5Dg3*`ZX3oEjhHzqeEVKx3|5EVDsr-7 z_b-LdoI80z1g2hjK^$fuRIaD&>~O6>DDtx3010VYJ4Kx`zO3e-lje4~Q^_o6Xm3AIv3^Dh>xwzHJH`#ama|K z&>yXrsX-1+ez8pn6V@%)DSdsxIIm`Fn|tF-(cC<3m34}RfT1ewwMRPB4UY{|N;-y+ z7X&InBR>>>zXo!fYmtPlyMDL7IpK{p89oE|*kU=0O&!}rc-$m3BS}8pskl@v0>(3S z3N=o>;Z5s3dzee3RN=!-LB$&WxvPnlYl5?ytnth9%%ZYv+Rbff9a_O`6?z|ys7c_% z5QT{fcE7LeNSWzC_?!{E`XkZ5SOqx)-FoD{SAn5Rkk@dsIs z>+EKQ)@a-cAtW!G`O$yX$Z9J>n4ugS=8b(GVl!+1S z>z>|7-9NAz7`xTZ)LJt+MAg+bQ(`$LnwG~Y(kpj;nYEdAF)~rc4Yal^Wr=^bJfA=p zgDQ77fei{V`vn7vqa3-tMwlaijoY$qJOuCCZT*_f2HN{$(R4jQAp6y(D01} zs<=q#qR)<@MA(FASb?n~-j<5(Gc~|^hYqvx(J8$!H+nVo_McWp9-BI-$Et1+3<{xU zK%D||m#kksn|?+B>~Q~_A6?WAaEy7!7B6jaYrAg43R^lMcfv6F`q?TQPc|^MGRRWhAY+ zO0&udnK7Qx$B*w_{pQWfjXn1!>DGGR9hH>h3H*)~%+{cF#|jx+048I(6{YL-|F<;VCsLVNzbFZi&x1q;FI9y?4I5vTV^PV#H6x(;79Yha4KW=^0 za7Lv&Rq9YEEx^@QbTQ2k+|KiYUT3>IVFH4E6**T&GUHpa*U_>4?R!iwLY+bqG^_d@ zSO%JynkNeH`ImnY*o-%Sqj@bHe3W;Yisu5(M&wvw;^MSV>g~awpG4A&=cAG0J!96= z7f(^fO&C$<$J8XB4n6-Kmlkk7bEl_8G^U$>T2x={Q4Ar`J8jc>_qwZarp<({<#3V8 zHapKKg;T(7)l#3%+GTgC+=1usYJU$T@}~;{*ZKS|k%QVwwx_+Ut-tQxzWT7!H|k9W z?Cr!}az}rWeGTkGi2ES^EtOeh_ZqsJ_1={ZRG#RwvAwKw&8nalYjKHPlKRAGvq0O6f$V)hwlNA8k(!ifT8UKmT-22e~ z24d;$7XQ6~>%Rfh{hvJoad3JS1QN~lPh?&4J?DF6@R%1>O)MKzpx8#j%BVe&_~Cb+ zmFtKj?^3JtorwP#k8Bnpwkrb-k3vzp<}dMQuR&lk7x7n;Zx~IG)@>BC?&#;^f@As( z$MA3i)Njd?*O0%$9DK$$#vWNzs0SU%)rmbqfEcHY8ms~$p}Gt7V-3+Hk4e!()ApP_ zOjUWnQ?1h5{Dq-0++Tx`9Q?k7rH>SCS0)8ukgR&@$@&;#(#V2_^xd1EzB_6{%r>AA zRVKwwUihhM{P`QD`=4Ds0Ok8+tKFAkUho_#FvSuBP{V#cue0OMob{F00}bjt3&WzK z)E+(zgBRrHl7s0H|K7JIYb5@$G_Ntg2+<}jW|dkAZuh& z*8e%`+Hb0 zsJ@F%K#$?P0tk$q$@Bqpf4R?4Q|?h)&U=I}*DB*|vWPhEt;do1`tf}Um@p5GZmcR^ zcT8m3+=MocB1<1hT>X}_w|fWHEx)l26&SC;vt{9O2yf{lgSmg${1Ggxy$VA5y^6XW%#bk)A)LDY5!-e z4gF{3-c3i~UuT0mZ2$MQ>i;td{QshDV86VM09-K-r|5>x49!hnRGd*p9VMzmE+D`? z=!KyoSBa22_zKEC-eC33#7<>^NrByak+=2_ckJ7`W~B%ncugoL)d`wDldnMvORf>W zhWKr0816%S$!`wD8gSuGpF!?VzVbTPVS$Zp6rca<*~dZOzAi9@&Xc{Y8iUnRqi05H zUOEdPZr6c(1K3*$@bmIGitaO1+`7?B2)_-D(=ybz!5k~mV|tvQ1##{QWQ3f-95pKI z@sMBeQHN^R)l_S%9D!*NVV?1vw$osab0D70`#5wKhGmFUGt3bGV>0!Ti-!IAz!{m1 z!5GE=x;%{>J`Yte$wOrFa?Nt<&{IvAAc8zi9CM2izWJOXbA=IWM}7jZ$`>a@)r33% zd9>;oZO-ka@HWix7+E0y4wq1R%hbGql2}i%7Gf`J9|}#b_p6A9Nzgn@epxQ+AeLPH zC-ufr<)1U+$#w#h;=(t&jqg_(XK6YpKZ@zQuqW60Ra~4tIM8|>u%sceb+4XO+Jg>} zEu?1%9o^6h?~Et@V{Oxjz2`V-ymXFOKgwy1rtTKo&fAvg#`yu~A+v8Dop2KPXVaooD8&(&IJ*zi)r zamPF$N%9o>9gW}E!D$MfAHF*2{l(e;%n#kH@aN~ zVy+eXBwHQzPKh)OIQ-g|d;)$5=W457xbz|_NaPqX`ge_5!I1$fp)^bYou456%RxT^ zfL-!!i6FMT4rk&rOae4iz3skFW>%R=?bQZSuT28qMx{QOnaE>0isJSu9|s+JDn1jt z7XoW4gdO<+qXew=9PfT?(6VDN8i8jg&^q&kGK_WmUQ7&aTNwR}izn3niT|B#K5v=e z14cMx_pnLp-1pmjq7w~|c)9lJ$zL9fR*zwp)HGlfRV*J3l3MvSaC#!iHfb9-i_FYU ztkuX@#QeVslF#?dPuVA}%y}!7a>0Mm%v+xD*>mOxBn7xfZ?Mx82W5)}=kNTP`uNpZ zYd#U)_l~ZQ1D>>Y$p6R6W|be6r`5dF1vA~)HFb|%3x6TA0{~T<_daGsU$VMt44F@4 zy81I`SF`Ne#b!XF(Oadbj%k0NlGh@oB1D#c?f$C)5h9ZfWE}5eSnY%}+!>qLBGvWr z;vt&V=G6@yP*2i(o@?Q>_)0Fod9G3Er>xK8m*o2Yc!68~Ukm=eK=3MJzO$6b_rz2F z>a>qSu(=cV1x!ExhPCOt>E9V#@5u!=qfqO|qa*8Q%6N9Oty~mi2Xu8H?e$`N6cET| zUIZnVa-7Z$eVx}(=KU@nKSBrYq#u%RkcGAcooZ1x2}JN4Ji`}NucbdQP%y^4qA)e{ z<>#OwlXRR8D_Cvt70sv(cyVa@cDkA#gdW8r4GeMe2Jg7c&jo+s2NgUU+&3H`17h{m zm;GA1cB#3~Esz@2_`?r=9(xIKvQhZ_2&BO?lq@btDBl^ZIfu-k;+BQ%>Q?u69!Sdh z*Bw>KlfQjwb$X&3wZlJ(Q`a3vOVY5)}*mI{$4)PYn5y#wqmYyVv!TK48z*M!Qt%5FB)&GuL8dY~;$PW!_*c zo-Xd|6)R+A;x{N!z^iG!nNo`uSF0m}RQT@JyiM%=B|kmO!j2R(orJigps=Fw&i}#O zdxtgEeE*^wP(YN8Ud%oxV?tSia?;rO(=N_NOu=nhlU1qJBS?e>asFVn1eW5W!mEX1P zo*ybYrR5te7my@7!8n&6mL)5qRr$lg6yr#emzuKB-eH7FMVL-cz0Hg3X9^-WR2Z{s zy0vcS{(f94n54Uy%Nd&d_w+NDH3snH_!oB;b2G~&_+igi2aO$WAFeRmAVz}+E0cuhBt6VMwb0}k&>3cNh4|s8<7`E zTNfErkrN{gaz(N;drh)MkP8^{kkmw203!Yl+&RdH?FV97i~dm~ld^&V+>y}_r>ic~ z$4-8DQ!Re9mSf!`Ht+PRTE$m^kr-3XiRBW3p&>X(X%Ahri8b2;`75#ed;yYH_Q>E# zSQq35(`k_I2e5;lFY{LGL=!H@KvAs@hI+5|q>kh@6tG5*hv3Z}S8KT(Zlyso0o>SO7!N3}DHu%R4$laJ{z4>Sx=0n`gm) z1L+C|s1vn60@j`RQ5$zF53hS1;ZGGg(KeI2$Vc2Y7#Gd=TxW&YRRAaYOfO%w`yu1M z^J%8@O>1dGz%iF4?hWcf?GJtoZ!@01A%}yL^G(_%OSoo+1J0$E!K3a6Y;G7+6GELD zV3GN<_6a_y-Ov7wM|ZvQy=K&ax?VCT=S=$fkR!LWRu0u!P*BHwd@HwVlxT0?X!)5+ zB;@5HYUfOJd+wqYXpz*X7?l(mU`IB!lcX-o`80j1SZsqaSsAWYc5tuEwp(mn2X*6^0)z=X-ADoSqQ{iX9i z5F2Gw$txRUn8Ed@SGDB4AjnpEko(}lu;QKg zl*)>zLx;z5RfsL+P>>$>1TLQ$0y)XzaZEv!Np&AMK83vZX?yEeyZ_$PH8F)^Y_-ax zVd5a&fy%`~6WHRC^!J%Xi~a|g+`vJ)u>dhvZ57TJzg<<9@DC%>lNCd59!%G;P&vUh zJJnIqd&Thqs>p(Nfq-t?(MHSNUYN<6T|<)+=)xlo|A;!3rSmC8oZEj{z%`Uflb<~sJGA)6ZCYcrO#K;@D`Q4x&}mAa;`4#h)1E5b(nwefSBZp%SeM;#qMHOh!J zp#ZBj_)xk6pWR-dyt+T~+t~Y)h?%pg$M3x|x(-Dc#>}p4)Rur6vP!^0sUiw2Qvq3^T+fBPrkb;O}L6He&vSm@FAS{=> zoK7h&cIA{VbR`wY1t{RxREo0FhI#2Z+~87kV3{&M`bBJiTKT@+D{OwZ7w60u$L6MS z%x`=CO-9Dqcd4l>q_uY>w2vQyA`)X-l#5BGZU(lz-H#D>b8i4L{hYRCF5g7uHR@N$ zd7)i(#e~5$ffhBA5_L}D^R^r`opPxW#Sb@Rd}DGm{QG=jdG7`3-s5qexZdO5+7^eF z<25;I7{65RuncpShjh0j1lP0LX@mk7=m!9>O&jbkcb_r^ce-D70ajY^*8?la!uc^(nTWn z{Lm?=m7FB)d@PuWec+83>dAfNE)B>#;=s-}Kc`T_uCl-RJ+JG-Q<4*p`kQltU8Eut zk{)wncw1sqwPxKej1e945?Xl0NySeYBOc)%$m)}#PsDx6`<%JvE(y|GU;Uh=$4FO@ zm%uH1*exUNFM%}8QbEp6rAs(^q~5dalwyjl!eoJJgrE?cv0@(x+UVap0N!dzt`!S7rn^qikw9M zDwHfdRd@b*UXKV39sW8{{Vp|0kE;p%d=aH-q$APd#~&k z%M#<^t5B$Wp)H46-!LSGjLnst0s?FIe%)g71xvsm0;H?tV0$P zWyK6P`rb9~;MR$wbF zzTaZ!#s}McXXUjrb>CZGui(8MrwX4Y=VZ$lz2+pnn|O?zLWv8HzUmWHmSPpd`I}?i zm97Lh0?`_1mK{bWok68~zPr3nFvP#DBvqR{u_XVR4?qTyXh-odvD^BZqE;=r%s;~4 zO2{S^Umcr^^OPxCx-FO`1_%X(4(`fERNvFeU_S-O2JtJ=PA=CtZIKg^J9SrFq2) z{{>O-{@VHjyX3n@SNGV0MwVnY-22Ov`gwuLZMnmr^Pj6}e-HsVDQzsW`r5+rBnv+O zhB8(2myfBy_$gldhE%BQwVi5@n`$w+eyr~j(2F`?h!|zQQT8#-`FsTyp%8 z(yK=U`$T}czuZq7$z#DkQa;$v)6g>R)U(m{j1RumC2`~$;|nod&G63Vq$k#|=0nlH zbbvPR>&)yo5P+LFI=Q3aV5ZVcc>fLm{VH_ILgIwiTu7E1AOZPn z_O$@L-4l=2HcTFGl|O{KiFDh8$^H`d6yACekJn9>-$l56F=b`qZR5nZn%5uhX=~%u zKMGs0zp6ZQ*MYgTnq2Y+ob@+y>%WKv=`_4Gohis4<3EC>c;#Cps@hk|sbf;leX~m1 zR9MldF7JfC!}#t(rj^~5V>7@&ibKnsoU@*j#rn=UoDGq6Js|dEb?yEB8H=Va)O=3D zmAOAq#f*nCYrVR5T}G|4&hds@kGi&Wcl#Pcc}9dl2a`a3z5W?=Z>347Q!wLJkKco1 zCqt9n{7+r~7M*!5Al90ho70%uedv|8lJgx+zJ|?JO&cW(SsFT!*7114CIWfs#ZaDRx6W{Ca=Muf< zl-C|7$d#Li`u)|7n2%a^?RqE2;h+>xjGep2aQo|zGYDKDzpsD6j0)|p!_eb>=34e4 zI3DfyJnUY&{n+HM5b+LUdiD9!tAp2OCiuEn8Q30~(H5L+C5|Wh7#&v`dmlO_?c$-O zB`kmI)nrM33r~h@00S`ofLj~a5M>1;56gH_7?TIJYZuY7G$u2Tr1JikfpQ7Ft`{R~ z7j2!V^=16c<%}I1WcEAgJeE)5yjLJsShV?|w3C|A*6Ou?En@KbWvCjX{4pFKqPFbs z2UXgN%IF1`g(^Of_ErQy~0-^+{o0T@^m_-Sm((&0$OT17Q`;rtb2 zJdLPT>*NdXJw)b>xO$@b65|CCbJ8?}?H|BNKMw)_>}kA2L;*`8Pd)?69>KPu3-3%R zSP3>UsTin$zm#1250sen-tYQGm-5O#ZU0|z#u+4t%C6ZJ-eW~V!I<53k2ZLD?JL=! zqOo(hw{JmmQ@VC{@gcag2}w%Wkz`Xh=Cf_wbFNyUBxq6pF z<8D2foKF# z|Bc@HF;m+2eELIfx^MPWG`>5W61vygTJ~k;1$o`9`QC(R&d<^}!IeOdKX=;dSWHq1 z-3Fo3!2`f#xd82xQ1at3eEu1M7RZ|)~w!EO=%-1mhM zcv9)0_um&{;tN?4doBdF&7~8zcd6_cia|)|clD5Ihc~q9^iy?Zx1Mjz z^6+z{NgO{yd$zlVPKqy-@}Ja4?q`7X$+0<`4jLhMMffhp1oC`1;HG5t#gW=u zEg{xiV$rZ%Xko~gZy#pn$>*r9m;28NQ!}1M_ALAH#%rfxCz?mepxw_klNQ+X_U&cX zAZtj9@Z*!w=HydofKjJ~N`7mHHV(QaAs*UK9nT@!Dajs>RwT>zdOfSiV9(S-3pe4P z*U@NG+OUlSvj_pP6DS#Kt~~#8QD*VjBVNoYpe7cZ`Hj2(jU17uazfptUTJ&2A^H{> zFMHE;95d+^0x-*Iz-Tr=m+$}p%$fIU-<~x)%mD4nq=;>0!X#;c?zim6FW+E~o1T|1 zS9%IPr5EeY3wAO?&r372I=;|&Ah}VSgNY>qs5#${df_XTcmb&RV)74~?net4m;)Fp z(m0vOg}L?ftYuk)^doe@83_gTw{J9Wwl?y)F1G>g1u)k9IKFD2T@jHh5#YqlAF^B% zXfOdL1Xu!pdWN} z^L@3x1)qG!9$D;g0o*`850`Ta#l8;_r1FOYNc-XbS2(*A|GFIT_6^IgT^ z3Qe;ybC_b&jg{_k&rl%CD*XOZucpx)bAv zC-ZX=EO_w+^h;JeqA8RpW75kuRo+&eu&Mncott}V$c{^>$^tcmyz+F@=%@hKVTcD? z$Gk6lIU2*-Daz_a60gEuRd<9tMF5wXYXSa&6MSC*(yf{>zar~JNfT)JWzH4irAwRp z6UE5e2zvdgC2DT|Xo5l!&mjJgsxPyl;m&#EqYXfl<*knYpl`Vu{zGfmoYR;vODGhV z8u%b=>OLnFaxjk<^?yYS#k3j-hw*2{)MPz&&TCh1lt`|wO17n}*Ig_bnCdDLjW1h| zww@O@ec0_9LT(n#ac098V%)PmD6Cc~h8A*t4!8bK4^O%1_Vh2f^iTVYk*0)`PWu=P zp!fC(%w2;JSD++sO<|qr*Q1vHs8_Zz&~uE|R=ppdU3H!e;Y%(RNS#au@M9LIu&LQZ zlJzZSJ2t%a{D)YR@c%osQ7MGa+eYYp^+mBFbN~~1?~8sE1Dzb(_f|KdZan^dtn2P> z!DB{1R5YzW*CuVmuix38udjMw{jHX~ThCpQQ2iXIhHn=?U$4I@+0N<(0Mmi+mV7i$#`iH}rs!I; z1pqm=yW8EGF@C}}5kXCV%9Sh^AQ^>~3(>m~SokIT_mp3isXlV5{hEfZ?mnc}Gl*N-%-Pt9=2&!0t)Ua@x(Y1z zzcCEav?c@mB*8Y;dIZqS{V_Z}@55oM;pY3rhsjFPZRi@!yY4I2Qv_c1~sRO|Xt zx&Uxknx1aj7vlQ)cZ<^J?Y7Il#2Yocch8ADU7xPebP@JSxt^R$Hx93kU12D-d^fyZ2lWKH6Gx4j(^wpo^5a>SaxLBH}(tM_agrU zcY``~P`+{LZC{n&%kI;2pRb9q!^a;+v?eP8^ERa;TAizsM5lG?Zaehs5hMekF*RDR z6U&6WMl&7sp~&YL-x0$LpAL#N0%JN}Tnk4hPj61P#3yyxDSv&^%u+>ST9;Bl>=f`~ zD4P#wBk#ke_5JL~^bsM`AD3hS-sYCF&m>cGiT`OLW84Oi;9omQ(J1QK+WVTapLni6 zXt@L?5nEF`wuwhq0t*4bF^2jUoq@3c&rRZ-!UKLlQaXUc3F~bSOQ#|wsRNT z0GwuE){JfSukZJzG;balUkv;4#`Xu8&8Fl%n6qAv%n4A3kY6Y2a>?QMAaTAT+%@2u z!Vd#_=kTKRn3?MP%iEe5-YLcRAtvU+%6(rAuC)~nL4nXXH2%+_^Ty$x25ssgS?D@q zAb%ji%r9B=$NJR49LOCCFrt2aL!l(kG#`2BpZrZaWMT(5(ANa?t1A&$mI>g0LYPSU zHHFY%7GYq+N+hIFdW4~%b&arkV%s?vg8qPn>xs!ys#%Qx=C`d@6sq4nT3|qV1b^^g zl-hmqA8}=X?(?2Kw|FFNS%MOkeYZXxY;{!GYp1WE34kI$v*+)|QoFXibq!30Wn51K z7GU08@&(jp6hzei7AS-NIM(>Hu{sR`dsI{%LAX~j`j-f;r3;owxJx)>4 zoK3$v54kD>6^7YwG)&*g-DxE+!6o6lQ?AXn-PA^W%5lbK!3=7O%O z5T{nV`cvNXL_*@BtlYpSy2U1%R;xB6Yv{P?xEn%`tHs~Cp5XlaEqjna0;*Y&?!U;K zzJ68zX3iA+&0p3xKQ}iOt*A10tS~2)PDa97nbvI+xE$Y)^)6IozIiLs@FB{4_blZ` zQU-1~e$PT_r^K0ZJT|#dsQU%d?Djmt-~&TYqD6R;!^v^^HO3%@&>6=Sq~$|gOL@G= z1U9)q?TCuuZ)zSv*l`8|Q3G||9H!>*n|Tv-F4$xe?JDsQSkR+UWsj%W)9yy0q)eLd zf6wPd@JceOO9+N&2q5{pluIEng-2B2eQ_n^Dh+n0+3j~JHILoduURcm2U1_vp17WG zb)bE_N$&|rP(eP2Uhn@amvFuvA7ERdZ zmuLhhqIp>RfLZ{Nv0;{6XEz=8p{~>^n{cO%x410T-?0R8lLd+8Besy|RYY$j2x}JS z^3%dF;-LXtbDRhOFR331$X2n7uiO~HC=9FD`eiPN;w|i#q2&TND{+vOmx;~a6zw*C zMO6pdxUE%KrICC5XxH5*$=skkCjb{2FZxc!oin&iL-$?>H} z=7G0A5)~@km2`#{?@7tfAL!=ar|X#gj=WA?ZHpY?@QpVRMKomaY{+0n?uUsD)B&C6 z21f3k3!ziQ!kox`LLv;+141rO73FG~o%CzXT+DLKTpld!=ailiP|7zZozSuJpFWr7 zwd30*(3To-xU#&W>zyZX7qf$67{8-jUEE9iW-ITq1=0P+dR7Q_@ul8z&6B%3uE8kh#?79Hjp?%!^`Ph ziU3}vFX+lXVZBP4kxA+s^{k__2rRwuo9DoaoO$T2sj0GsFR_6nuL8F}vyR{vw#n)D zzgbfO^$tSJN5Vb*<0q1G$wB_iB6jtP+w&>qk+4Vf81IRru|c(G3f)>nN5g>c7uyS48CN>}CkWLV0ej+UVU*7|Go1jOeX?e6=-s$2Hjh zoHzCEAa3no;aC|u$ShaF``!Ml`%?JSWzq7q(rr4|R|vuQcn5SQahtY-zh0Al8q*>Busn{6Os2a*J~uaIY8sn;$LtOMg@?&fMK!+;k!-kJUel z`$^A^&(|q@_l#MtID9RT=Hb2kZ_Csgf{7wUD;>CyiiOkwMcvJ?UG!_h-;}q^jgdsj zd$>t3E-#*f|NAr9XSo-&PXqYYpPgULRHIA#&Q|8@FJTUX0lNh;FVKt5h1w>K!4l<5 zN+F<_x)KeyNT#YbjQ=Pbxcq7Dz?hl5wga-Bvte|&x{N1n=kxJ7H5FRTc}pA5oy-z* z^@N1nYD(YEt}p(qRkzOeYJoeB9cUfnaj`(HhcNdPPUlM5oFvFp1oLS**fo{|XRJFipBZ(k zuW={ISk@${8p{u3h?|X_*p%-e*;+*`j)cq-47^&_k-KitCB0X$ zGuze`zxg(|OG(f{q1z^%H%a?Ud5DV!wJCc+W(wQ&Od5i^0vI}0m2p)7rapXr zlgZiOCQ~%w_SSl>>8t%gRTQW!?B{8p6OcrhN_>Sorh?{ZZInry;7iV{rrbZNxbEfb z>SE>;CRX6QIr`eWtl2OBxK)Dv?~XAiW3$rQGrZx8iQ!$uBZmLwG24Y^-&f3(@b=&D zhhYHL*^)-6pE%Rd*`}kdABG^2-pcGYtf9v1m+v_xzm0Bf{jS~6aI=r;Epl?FD@j(* zcZcyhC5XX>T{T6v8 z6F@BwJ&m41*eC?JP@HY`vB&RX6Ci`*+^(l!(vhb>u>xH*v*$k%{WVD*Kc{c#mPfou zDQlTo`Dim4xpd**vvX1#-|oC7I=1l)8Yh{WKf{|V`mASMwz9NycJJY$o&9OWJ#vlF ztDlXH4TH_dn4YN~`$OadtLfCv@gCw2;B@D= z;>fopMY6&_#p*rdL)8%cgYmB@s{n;O0PUlY9SR-0%YA5hWaxar5)^gY8}Xh*XSp)? zjvh)SQ}WImTCDg7A@|TJq)2D`H~*UK^Nn<$Anc=7L>SDDwRdq9)gW9IW;W630QB9l z|L`gK=c=x*SElz49^n#21do!E}Fu9ml#5i6BbBmkq)D+@5H2;8jfEH~*=@n5wSyJp`s_SXE*r4(jq~g1;@;j~BOZ@m zCu^oG!JC`U&z?W;PDzS^DRU}5i#b_PCD^}m_;blASRx7=U;1Z>WrD-qGo=~3xY}k4 ztiuet7#V^b_zDD>teo@8eS1BTH;J?-JMhw|ug{}?D&y+5?UNRah?IJ6px+^5crft~qb+T=;5`!+GGH=C3p%@q>p<)XrK9zc`>Cx^zTM zt&q z3(1R{8Z*x>k+-beo{#3Qc6}mU=6VYSy?Jx^XLIuz1qHsy$jI~sza&D1Tu`h8rUFU5 zTn_$2LZ=m3zG$$>kPcQNsS7d>uFl-@Y2CT|^!NA;>55*mxD0kC^*2ppa|6dg`)(6a)NeSNxgA6x!C=R4XF66pZp)Igvz89r=h+Z?L#Qh9 zVnASLJ~@hvxP7JnG2Ah2&yq`qHw()TDrplP@dDosuw`>7e_X}(?=#WiJ)v#xHIk|D zi%_@hMXags`Nkqla3g7CdIt3CS+gfMT*JLNRdVU-4gM`D$vrOP$J{zE5>aDb9opeE3%zMctD-d6Db zdVvU6rS9LR`6X^lhfGPBI5Pfs4n95=B~)l}Zhebs@>j>GCX!a;2seiWgj5E`&tJ_{ zZINX|ygur?$58xri4p1~s6Zhaw->~^FEziVtB<3#k)uB9qrk@xR=S;;#s-7u3{fIl z=df$l`Ob3YEOO`LJ+8R?l`VE0n_Jy>7@IvRe*;UIu3?B1V3Y;rJw+BOAWqoOv+a$I zKZZB5m08^WR=S;*mp=(&m*SilR4vm;1>JRLaJfe&*tAaEudrZ;vh(u~Kz)6E5ER8P z_Y#C2dp1^Uyg+eE%p{6IAWtMA0Yn)Z#lQgV)7?5B02t`$@OKAj5Ov0G8#Pwz3$l5` zRAT0)MWM9mH%q!b_PI^ey&m_a%Lm;rzMzxjmYvzfdbcQU9zMVrLQkk3`PL?(Tm zpp=^4RokpFS!90YWpD2rT7qItNhy9-bA{izruOSCIy%Mme?UNh3dJ6VC$Bl8dhrks z!tfSmw^c$Eko>@Y5rAfvFP06!fS2;g_9=_&Mx-A3I3um^!>D*`ly;`!_}dsn{)9=m zRDk4I;hUu*3n-U>XF3S02+GHyt6XJ2B6KBB82aN4xc1#`=IR~!P`cHU$wRiZe# ze$V*Ky9$-nOWUq)`}{-Ae`klJ|>GO zZIXz#10PU!?AF$nz&7|BzeH1Xi_B;8L_9b&SXaEmt8y2NhA*IC=j!fxaA*ap$;P~+ zt0xoR^KPsz*+u{GI4~~P;Ad9z^!Rr%=_dwH9**LA82md;#wXY<(Tw} zS~0BfOqnr68t2`#A^0s6;UCsvXpXCH&6iuc(4N_f@u~2K1(GQI9V&DPrcl{ za!K~5i39S2yg2i%=DN?jp#-a9^pW@_r-NZe%@3ddl|JE&7#bQ%$BfD25;KLtyuG%z zwm-3KXI}{k3p*n%4Z@5MIr}Y-%&O}U9G!Gx5`tgW^6%_Cj@`+BQXxEjnE<~`!v~d* z*(8PJBYB}!5-D1EqK0$7=V+Pt7yU|(ov8_V+LFq!->tu2AY-af5|HI=z4GroU6?7G zaMvl)<&_+Hn;bi!Qp+{d|ALM#s!AzccmzRN%rf+H$J-~bnwm6i1?0nBsl1=cuGi6TkH zB3t)O3U2N!=bc9sib@HHZCB=h50U(!=n83<9WrF&eWOWG37zq|Dxf5Au+5FIfohn} z$=qs;C$p=<3Lh=5Kvn{}dV63_dRK)fQ`n;;=pns52?nhq?XjQQXb@L#XW_LjStUJ} z{lyYm(FpLhWx-d4K*hu&y85S3g6CV#`a^nbKTQ3z6(Faj za#wNO=w>48hLYRl&85HbnPIL@mq&|@?%J4a%yl)Ro0J(KjvD`og=mE2=UjbbV_xXH z(ZPxQ#-nuO@AA+$EGipLBa%;?^L_1n_h)8jT*~i{DR^`XEWV{s3DTxViFXXh3C$VnG;n;YG>1f+2mP&Lu~sL1I(hGf^` zq=r`ypEQ-T7JWMDHx!{6U#BlpOpU0(6!}Vdl6}h2YfWRhv8|4L%{qN@93x#uf996$ zYIXbMy5ojHjh!uxx5}Ykdg@lqz3AS^GYz-DZY8^8-pVsg)-BQVN3MJ&!WAly;|41D zB|G`=-k%r?YOa3v4xB!6^yne)pPC%3h>&H@$l+z(LZ|?0ezcHrUwm1HKeVnwaU#Kh-b=MQQ%Q)YK?rLt)`*sMQo16P60oOcke=x?Fv|LB- z2(VYrOJgmd&&3!RW-mI`MU^(l48cEt-i(Wj8?4>+!qEW1S-?{CBT>p}d}_*L#iCMG zSy|cdl-(=D66*dEmU9o~um#tV_N1mnT$DF!4*dOi>~-NgQsvci$JnXjH?W$&gkze> z3pJNS+w+2E`CK;41fp`*IUdxXgj(4Hue|q2PoxGg3?Q}eHoDdHY|tgHw*n+@jA6gb`8sK}7+{PP%hMi`1}-MVV~#{Px4USz|-hqfg)?>+V8b_YI%x zEb~kUa8J+3F2M@tH{sTgpTk9uG-_o`aN8Ju$=Em)fC>o9p(c!2?>xN?oA}c}Rmoa?>Fi$ckOn;l$Z2bO7M)d;Q}^*mIT6pl+9rmX(onAWq~!h!*kUrNp;z~onh3l zmmg>6 zxD9xe+-g2}qwjII)G?o_Q=UH(u0ARaT+CX&cU@AMZgZb(d+hSxQn}e;JktF*Qq8hSfJnwg0Z3Qz_g* z1>?iZ5st)l91uW_s}tUzx%>JDWCJ#Ar0weHy!4l_ z{#Nj4QVj|H7gy;v6{6U8yHM42c9B7n7aw$6LxTZQQ%mgHD{*alXnE&rV$~q8=xkxF zA@-u-i~XSHBkexHtuzz4MHnQRF7_iip7U@6Sv=kdDEZCfhEN;D@DjFmsgTMveet@O zB*PU$o2G!uhGYrzS|dSqE2}e5ePg5F`3mDw+cMt=%Uu5in(Fzgjp3EV9Q9wUPBP(GRb2>)Y2f1Ga|j?vdR_J#nuw$h{I+{3X>Jv82-T%V9(K zpZxCAmzWC%a*Nmi$wIZ~&#$|? z526fz&}wA1(DRe72mgzYtw5*1|M0Q>8u4G2+yCP5R{wKg8sIzpPR;z^4=n4+ z)u;cH<>X?5AF^_NMHM-HI{p6G>Sy7Gz>x}t)(1$|rz(uzc@ky{^6j?#7A^`svu>ss zq2C|=V+*i)xU#qRp)gi_Q&~K;1}AcQdn;lqLJ!`Ot-+KwkM~gpvtJJvzpGd6kh602 zLISz+;1;%gQY=duPBs&STJtWZNHf|EFb0j8F^pD&%;+dsO7r-7+vs9jV&}rb$%42Y9CcAUC-^|#w6sZb}4u-E(lR|j=MnnTm=lG&ez`jj(IcZQw6ITG0X zw3rzJ0Wnp-ZG-z6mA zL_=2lu4^*5-e&&1*>`*EiH50Za*l`4wu*#=w#zXngrh;vrelCioSAu*pPzprRIrQQ zHTzVX1)I?4g_7>;&UHt&EkbP$g$l|s3)Mv0MC`E`&7FYQ91_nrMeqiL94@~{;Sbd${U4e@?Dh+E0=K3o3!+Mo5?G_Rpewd$}YrcE$x*U_ahmmF%U7TVwTFV zv_y7i5xzlOz_nd;VS;9+e2|r-Xe`p%I}v4vOR#dSprQR1b3ACpD?3Z2txXe4IN^PAIrsuOuF#U9I{#i*+e2|4HxRjPep8xFaQg}u&9qVu8s8NP#h z_UzewCwqHUG)RDFXq{p%NtS5LQn%<=s8zb!!~W@$R4aY*Ne{x!W(@1@FsfP{%uFl} z^zxE+50r%pCcZn6f?vK&lS;nb$_F6^KwV3~k=N6a5y!fyDd`Qc+3NnErSG$@Tp z$o*U#Dh<2dIDTF84`F13eRKQH$-bJS1O2M^sAnCmHFucEU$ounL6B_@Ztkq-Y)gii zQ-di7c|)Zl?>azF@G#iYv)Y{R0kS@`-`3Kr<&g^bsH$TAXI*-6n(HI09j+pWVL=ol z)q-hU+Gvi>o~_$&iZa`%yTipkUOt!V?=m{y^Q9+CTk!evaQ`Mvken+ZJWAycw6Pt? zzQhXo?HK%hlv~Lt{o-%N!f5=qvScaaE2hhL9&G+;erV`@?3dKQS~d$E_OF*(tmkwB z?se4ulmdo{csA2q9lbc18lZu+3o0st5C!UCw6)|f26k62X)TG{!W%WW(<)|6V?pATWo1S?9HLG3QNK57_+m2{FwXxOKJoj5 zsXSup;S#)i;QoaR7eK%j{gT7&jg9J{>l=LrZJa`K)j7IkO!dm>+l*Asox6oTQX{8Z z0^5yjx5SEA0o12*G55v}9`3#3KK*;HTRCrh6Y6YioQhWYLPJ?rCPvQcyUs}pZqX%U zN@j!El`E_6Cx}BqH-i1XAn zKQs7MCc}$qzf;Lup@LKaK6jU?d##tCMyb!hja4itFrQ)I#PY9jAxpH4M5gCK@r~lK zLiv!EB05C{dc)gBPRf;yUdjfxNY@pGD(3RCAY52sbF^oD&uPNoqib7OT)fh|4P+s0 zbaYQ*?#9=Um;;;af|inVwj{V}E>*qAysmTCLrzZ42f(!wRpdDZws?|RRr%soFywZl zf`JS@gxZ21<~n27TXpL*91?XnF;e}T?QLxeXPU3tcMDO!0mi#dbqDK7ro-bexg56S z%>@9;=zG+K@J!oqesrhFSg~61oNeyCUhXBR@s@^XPLl|_0rf%|Ma^*s>uY^C_Q|*v z$dEzTy+|M!`uX~HxDL_y<}!@^Yk9kF>oI$KxJ&;mC2H*=Urhmlui6^ybzL6gfK1bfR(YFV?y{6Y6|g zJTDw;deE-e=!#Vn3&3f_SkX%aKBrfqp{Jj>h-Y;0N9;@Z_r1#em;V*@hej*-HSXOz ze2MFR4bIcrW`L>w58?@+ho#!QHF59Q_}3Rl)^<{>d>qErYCq9EcrBGxZr41U2*^`0 z)E@S9%Y$Z>vK;VnzsYJH$-Q&CDs!pgT^U8{1+Ete#g9%!T+3qxvvYT2MPC_g+tCWpesW@atYEvxbT=8A!_vY z=F1?RZ`3|PZcjO00fsr+_wNTQGJTx3-`CApAz$NzenK|EG|%e;N8GGpukVvgK{Aek<>@*+V2BA6K#WWvkpsVc(TJq={8H;Ld6G zt23#rpYXYWaixwZphVFFG%+(C_z-XC?514S!QAM0e=(oVP_x+s{?;=6q^j(kr!%=u z8p*8g=$Jc?$70KLoG(N5I2?CbSy^^bkp>9#4TeLU)M+Ux{rv%jTkc{KA!K#%UjnLD zzspq2wg_Pa7ypQeHGQ!;9`zwi2&4R5X<#N#iDk7XF!7@RQ+_Lhzytb$8I#}yoFr65 zji)-oM+3g2&s#5xoynhQjz3zTc-m>_$$)V9pK9?wCzM66BKyT{i!GGymT83GH38)( z%GnCKVcK4SFNfBSj8?-UH7+l-Ke8Jj9!DO;OXyq+^)>7~E~8a>)Kg@!yUIRdVPA$l zz5T@@v2t8Pu#msrEqEhYrnQg5Q1zs&)jQ3|o-%j!iy3bs~vMbsnp& z>UYZ-gDEEoZ<5S0gm?M_wRH(aq${%hVXBxC3wt12g-~eY73H`NWGmgt<9$g!R3XW5aP!eH*XG% z{oRmL8M<{rOiaVr_~gsrU{a!+o7?X;M{4)@*7I_jp}xMbnAm*`opaYJ>o-OtHRg9| z4vz=A(qQ9n)GOgfKC$oN<*b+B@jRyS4OWZ9VN~_zcZY-g&?TTa{@zHHl9oO#EPR8# z!L}puD}}DoXYDDn9_+|Li3!b##&}G*F=^&vhSV(&H}GXXUdeAA%(#I^$}0kdTltEMIKXC$w=|{v)Nk zdw77vr@i1~%ErgXB}>jjGh)Q0ss@Te4Mt%bEq=yX<+w2hMYqnd+%Dk}d~g?zZ>aPHr7@cUnbEnoQG zF`&}_cZE0Inlk!frs8cagGtZj zYNjYI0hcx8qS+CSo;j{aQvU_eddFwC)}WaKH+M3kilFq>%4a6t@NuoZ&t{KC{D3tQ z#~WO_jUOc___K75p}dQTOIKz6;nBK%g>;GPy-hB>##rrR&P{&X^BTFyr21r*?hhYv zUlmb4`UDD6H>vm}AKF&Ldl^bAoDMPR#Fi4;u2x#X4D|GmDQiW!x!0UoIt%f`JncMT zrHk~cNEJ={(jVo|yj%&csetQm);>qG3kz2doDmEE4;?lTYe0%GANMygu*mqwO-PK-bMj67=BS3hLaDf+iZMKj1278h zcnyW&6)h^d*f|R0JTouzKWd?5ttv4E8od?&sl`TR3NkJwI;{yJl@l|K zMM>JD+OAaGYKV3=4y^fzy@a1| z-rFV`$}=@_2X2AAz}lLpuX^EEo?ppPmjo5)uy}OlcNn!SbLTfmDK^8;vyE4V^vp*3 z7Zuz=zctLEP^J!WGi~LZ@HXyfDH#DExx!^f(y2ox-|2?YMBQQ3T9%F4O3@ix(tmGx z&1!@{K+Y<@mu6ApULCVX2sfryu-8Ard6ki)_&a%`gst4;w@`B*QuiC?&RGsD?fqnx z`5Qz>Wn3KDTEPcLE0cf6aXi~EUo!UKIC}ImLhQnYAL+jki3V^epNncjcA+%LDY)B3 z$?34N_kctiqbqj={GiwbW@#pq7>qG z0>jh%rJ898ySHT#Y5}4F%DRpRVd}Ke%Cc^gA?qCNM)*`-(hQF^q-S7|iGV?ly3IB< z=5tm6pn$EAzc>x&N5J|6WdrPSLj|^#@L_67!<0Z>0o~(VR7AlxqWwOjrJ3+{TUdn{ zl7b`;-!5wqdSYdqh!4 zPk)4yFd`YHq0cO{Hx|}vU7KLhq8?$&l5(% zQ14mj^Z~YWWdP;<3u{7oU^1815teqcksBg!*Org<+`7Ujv0lv^AyyROl_A(O_u~@a z^!bDtpMcX194Uhu*(^^6QQON{vz<&qg4cNci;p1BTej%JH)ZINfx+Sk0|UdU&}+8Y zd3owU1cEZ?z(U4|YItfi{)vi3F-tzPR>)nVo5UqhX&NXJjivA)l$VH1vQVuFbio;!G z%HLnCj;PHxAog#CcT`hf+by~Q1w@*nbO?wF(tD9EO+f^t_ui%V8kDL?QKUBorS}$k5di@K>7CGf z=%ECXoXzk3-tWBM`Q!d`?j4sgl8ntR+1cyaYp-Xn`OGOU9XVaS&iQKSdG@$S;r{YO za9+Q)Z5!HRhsWS*owL1hc_8>^#^Hw6SaPGh*G)4Lcp2SgKV@wh-E7^Z<7oa@Mb^_h zZikYKFnhdU|1N{ed|k>;mr?v*U1t?yJjq1em&wI(AI+n-QB@16+XfkhW#h2^i+bxB zJM^3p`|oiz_raJI{#e!fr|_1`eFVaZ7~YC!W{+YA?+Ku}WxNHf(nI<0q?1{mTQqaK zh=dy9SQElyaeSqvP3PJF3odR+Ha|?LOdoz^+WT@RQQXbr#bvHqFnj=!b=U{7_kFujYk~Su&K@`oh>e zFeTjM1SXBEz457imsqRcFVoXbwa(zwtqSrATOG3?{Ny|f6=T)5cz=Y^eg8;U2vNA( z(eP6U^hlAsl#@o3V>7^ERfd{8HGk^`;|q$%-!w-*WWS0Ve5N|;*Z#5ivzDl)@ohDz zDY_{aQIuI&7A|q4>M0CBL;Xk`fL%OZEkCc~AWK$U0EIVowxyGPSnvzerjt$1GAZf?GWaDw1Gn0NS0CqkyQG%c$6|+0>tYygSHDu;I z)N;Qx@?Ef#&Hf`apBaN(p;Vp9bSr4{v_E@R0vr7ieU0(|GiO0}sRn9-a1FNUyng-8 zGr=EPQeR+<*Cu?^HL}imlzWGg<20!8{-u!h=A-ztowD1?9 z&!SwksO~-s%(bTlKI$0ve?s-)fjQ|*EU-PIQ#SZY=;X-d*oz_=KWtB+_SZ>ILE-Tv zGX0Py@4?QGP9Fc-!9dFD?W`1b?OXj&GMB~zcB4OOQ-~o(wKgitQ2nzwKG-Sbey`Uv zeSd%0<95-@U1-RJdpZq0(vSrQxqW`y5F8o39|4_+)323>;Drn9=?0-2w5GsWvFIIGcPn3k32{7Q~VL-3Xhp z{qf@DfoRv2+wcfzDZr@hLCLmq0pEoaj%7&{)(~`~K{KVJ#%Z)jmg7Jo3ftS^Z@mG4 zoVS5gbR=^aUI{p(hlWF}>W6Qlc;e9NezC$ULE_b*tj8-8ktS@ya9~+2I(%@ytwstZ zZaoAAkDW1%HE98B$l7UJQ|F;(bxTz{Cvg8*VWBtxT>A&K7kE8_-lEy6Hn=@KA~0gx zo9%eEJa8t?!OBViio-hHY3w~P)ehPU)S0QZCI*ubA^|cxa3pIGMs5>``}nUvp}Ee1 zS&1d2JB1Iw0b3gLLg>23g#W_4tbpU3CvN8)K`3XTQBE$JrA0-`(J{4yQ1I$rnT7S{ z-Gd2+HnfY(@Z02hBf@B-&^{T zXpa(`(c+zO^~T0*q?=*IE&B_oKVB38hKgNG3K~I{F_=J%_-YA8nuebO49nr6;k4dZ9i{Pq)D|sy?SYc8^ zLT+S`6T1DTk|6V!ELc_)_Z=3+kL0RYptP{4s8Pe2jF3=|#LVFNb3(1GC@DTZ4M4`m z#wME9wn_Cq&9D3S?#U3EI}jGxr$xQ5Y$f4eS;dCbVxi41I!V-a4LpukU$kH|#eGcB z!_lGn^Jg;}u&p+M0G?Ddbv%#r5M@Z-_wSFH%N7+(CRsrX~({R-?}%)dHlj~>iu*Rks<5ET{dZ1g0=?MG!j zo^FPVEm1^!L{D|OsJWW7zkz2f7}^Y2c5e_;xm6W#NV&CpC(q-?zi7_F86bzE?A z*Zluk(cYLzfUIZfn{-*^e?BOv-u>s4Z5sI%ImJJcCf9G;^|=4PTN))J<6!W+jyf3K zDVL$SwzJC8!fc_|^Q&quXMsY@GPrbW9Qi(KZoa^I!9q*Kg|9Y0KR$WB5EH6<^L?SD zWEc2(3($idxL>caw@jHC)hsdeZEzK&bf8m>%I;}K1RnB7E zp}P4BKpJId!*(%sXz_JQN!R20vBl@BtQb*wSp+!a#R%2uJZlBF+M`Noag;wQQi zRzPXWP^v3ccD;Ho(%)=)*{B60S?zDJ1Sd^@Z5oRMj=RriGx|O)COwdR~0B{dS!NjL*CaAAx#LLK#e<4sul>sQl zsxoqbF|yiWmWt%y3|3lL$nY){RYy0|fC<=dWdS8u3|dHl*n58za&>FA1HGIZi4;NAdMsU}nEu>4mIQo|}Y z!ZJZGlV9&bE&t60U<#I0rqE`Us1&Z2)np*0*})58m0;pY*ML7ClpVjN286gtX~iso z?Q5Rlp|3mG_95-m>b#b%{7zz5PX+ijGJu{m!-gZAF-k1-Mk{b7nGX z64HkXeHOtyFe`@4?-{}a=nGM|8rA}M!4NRl0Z*?ds{?OX@@s=U8F*eMqiJk9VNfSZ6(V#M zy}uv*Zp`5-zXB&Qu68#2N{6epfd$vJtZP@4?AO^@7Z`0p5^MPbV!8USU*G)@9qm+R zYh{)4ny!KbzKR5C^tT(!kFzSTqpsQp&gzfc4)@W$nqB930QMv(l505W@Ah_m^xDqO z>~ey#%+SBlOLj}@cnKNMpG*FY6=x%X=QHpF_nG*0;AzJGNCpGu{AT+J zN{$60lXk}c-H)e}j0DZ+vQMW7(hN4P zE^!wuo+BJf&Lb_jr49%!e^4jL(2iAVOUeaTr=Cyk||TndG@~@vRVj3$f8l-;{^c=$XjPD$38(FBVYeTf}NC)~dqUM@ZRZhRk2fJEkl z4)m9=FZXBSYMioz78vCK;LYW($CVF4X(rFf)Zuyy-L^AGAbOfI%;){j6L|CcNvJd_ z80hgU2`eN-#PZ-bB7{lXy~mRu%2jxCjeW?{Nb5vN<_c4n3ue3DOv~!1wAxe6`tOvHB zkvEpiY$`KFlkR_d{HD90+Vu!n|jjI53hsv9rN3+#1HS25qXVMCq{<*|Ei!rExLSL{B_Mwt{wNm#;c{0}yyc272PT^V8XlX;qaSs46|I~WE+&>R^ z<4wyLSr8T}t34^d4QN|SGc(n&yrM6^`9N2%O~gqg`cX{-cSv3kmX=N1bXHF#n*fM1 z!lBnSG>i~WPiuV)_~vcZWvRE}_78812pWrc+^09AyGo_OwV`Qcr7jaUNSs^%2|1E9 zKMRe*y}(BTp}l{X*7)B7DA~c0OjI&T+l+tFy#}|m=-ZwA!7zYLR~yu4-+oD0q#gnA z%<{>5p2+kTDn9Z6Ashw{xG{5*wD|qDEToH(xBk6Y#zCdz6z77Xin8;1q|d%t*KLtS zEMuVh4aJBRs>v9aGnB0Pw}R4=XU5j|`&9Z5Rw^MH+8Xa6Bd1IcIf?Hqbs!9|rENUp z!NG{p%J8>JHrgYSyM4ZM04U!+q*v; zrA$uXwT`o;1V^oVnZjPeAtzOyl!wx~Hji7c!k@FB-pkw2K)ga~so}JU(m3G_f|IIC-jxyE_@yyvHMDySq*) zahNmJwf*}Z2NtnQhKIzzii$>X9UYOe7xRz>)sn%B`hwr}H7dFXuUG`!Zm0c;)Bb*? zHcEw9VB(nm@!wlVtb1gs$^azadkTxcG9qd_43abtvdV(FYXo`}Ha5OGbYbqN$e6SR?L*N$}KP_0W>;QR?8x z@*_Ff7>?$nXvcVcHehUOuB@uH#1>8ZP|;AO_oBX+Lw@U90oh9;a*-gKci3Q)Sa3I) z0ym=y8pD8ur8wJ6g2ycZ1_`r(*+^4@&gAx2s_ONy^klkJF!Zz9q*%%K(iO0PGv^dt}`fIrS#4+ z?Z<(%g_RgOfu@--r=lIGSB=Sa@P41WhXY*a1}L#ZFvHL=E7b9)E+H1R{E7b5ny-gF zxaFsJP}McAtjnCFnUDgaylbtU! zrInEAKE}WxLDNfBuoc^84VnqsM?~&y%}*?Q16!&v4h~XBU}A<{q*^)*sK7Vf7b+!^ zn0MkTyWwguthc(9k8Uch)yLT^Ip8|aUr($H&-`;6{z~XZZl80a{y5EBO_C1v7F5aV z7q9V5zD@oJmyj7Ux%e{#TbMwsS~wyd7WHY;Bveh>r2Nqs{ZIzuoF7Ao(`cx8xe73m zEEx7`Z&c*PuF7nw6&B{Q@J?2jtW!7p%|xe&J$5+I>7-qDIa!m{(sai8{#xbUN*t}k zO^Fr>iLW@nU(SXy&gWQFX5=Nhh;Te{{(G-=06!k@tFBc%eD6<B1Ns&Z`kvll@$!89=I{c7}I@kHcWep^!Zsf=u0t+Q*S z;ytU$ZP}@iG7KBf>r2_dBMRFMsWFP1)3qpSz)_m9nf*D4T^T4XrO!Dl5>nAoMDETd zaU57!E_2&iFAO={G(r^mYm&NMHcXUDYC~Vd$xbYsuSvaZu4`+Z$24xE2Ej3D1J>rW ztyWA|ETZ`;G|ed7rkuCw^#wbxWsv3Hhvn&&M5<-J0!?Kt6YI}vjXKYOrX3qQt|@-; zK!J&%Z-yoD8^4+uwslr%90SQV5FQ6=3;v5Y0MHJR2p*fr#^*u)LE3HfQ|*tKKHYj_ zPHmj8ZEe}7OHJ6fre*-JTE;Fd_G2qAIiJACgg~`(`~JS8`*ZF=gA6enuWbr%R;j!_R~HO-Hrb?k)56s>=HKL? zktXEX_au~=*t0AnkIW&-QnO2Hu8Pc0E8O%m`rD6Fq}C*itZr8qw@3n;hNfQqR!2td z8~~{MlZxuzp`(~|KJ!|@F}g-_X=rF%YP~NP&;jvTSqoCR4hs4MTh;hXN-E=+o1Wf5 zKCBziyg~H6ED)41M^xc*gQz)({Uh9TON&ZN6~H8) z|0wpG(xfXO^Fo2)!Ml>kYb`{G5w__6$52JI8nsaYJQ<(Uy%4HU=CrRfM8QAZuXg6IGU*b=oJze zgOZ0fyR0Y+R=*RuMBQPKbld)@pU7~0bR-XsL^U@;(t_&!s=YTdzkJEa)hx}>Otu8C998IQ;a-P#frBP)lblm6CVWabz03(@Cb9 z3bm~8!OF#@X^b#e|E!y+?_=k&jp@|)Vg&~sv*18CvYdx3=^2(6SG$#`D#`nvAgC#8 zJ@d_{3gbw@Fchv&nq;60aHF$2=o*qw4V?0Cx%EP-R1j?7BuehruQKz~NxeV1e*N+V zClLfi1L);fO;*hdNNm%v7l%hRW%8~)+IsHyvv}Su%~p**9%7p)uDSt4)jll%Lrwft0@bZ}J({|8N=nPmbFEJ?rbg z!1vct{|U?gzyB3a$yUlYndcf>Kc!l_C8C`R^w!3}LWOJM7ty7fCtox736)YTz5Veb zXqDdNeb{+%F$TF(&oO~c!ueH85r0tcVW(p|HW=2)6SVg)8cPGva@6D)wNow<#F(KC z9nMkkpP#O_ZIZ`k^5x;+;cp6^?ae!)Bt(mY;}{2cg2^CKyLZt(-6;!xu6ZWMBIP`M z*E?dv4PEX5>gcUx-^!9dk5E|o=TVzMm!81-Kv#{l&P21XlbE;`=ziUu~MFGM*E$0cmc}1@sCz;lyFR}wW>=v1$blacYWg5d_pj$@ zHo;)o{;Q(w)|c4JW$Z~@=^*j~GdEP)TD@K0r>8a823AHrv!V(7@%{VP`uZt@KX3?G zZOs56Wm8I|-%Rm>dJuR(PEJmITAG7$5THj+`M7L*>_r=erf>Z28=V$eYnr@>+d%?9>h=>;5|s{IaO0%4-uB)mjmBS`3e;gLxIKm{aWn|v>m!1hDE5FK*IZ}f2*?Yn{W zBNaYtpNQZfWB0q1C6`)$Xe#FxjgMCjk*db!sPD??7F!oP!ve?!9DPfpFsZ0I-@kQ$CazPTf1~*qV_{u5NRd65CGE{U4 zmBj(I;jTc|v9l(_Pf%$&cYE7GGE9@9or~}`MSsstT;S<>z=~%r^5$>jbPm;99h70= z?}spB6kbW|e|uR$RlZA)vJntR3b-ocJr6Ssg$0VXR^PJ#0JCHEB?!;>%yt9wh&U|Wa z?Ebmcsc(;X4SS2F6ZSI#f0vOT0OFfHcyd~rPn>MRLPCT>1SeuokA9wN$PKSVyO1N+ zeh7xCq@9**&JUwtlhVA@AFoV63fmBoM<-C%Tx| zzYFbhZc5zC3~gMr>f-yAG53}XF2Wktx|NjrQ%}6GlNpfd-s&F~D~KLx@LgRJm)Ejl z0~SxV{5>}pNdPt}6Nf%!QJQx#+>jENgh}lPv#PzRnf1v9$fQ%any=EyKofn49|z9b zcIQdGTtRilPv7!lP~?YNJKXiUyIlx++0IdUC-^;2?&D)VK`Z~o*kqwm+={d0%wfm= zec0TJy#qSpCE1Pn8bByDZVQ&mhp%sXq!LJTA2JxKYmuw(!4&J=MmwFq6W^S7uPHzL zL2D>kBf|wgFKdYVKQ*H@Go|4?dOfDCa1DOv<> zvrL0^Z8DdL>RdE(4-(5CIAej4J5U+hudeaqbb5MYTqK5 zLu`9)T4WXF;Bz<=cdqc<1AsnSx;x9}k}+@WPmw;0$knWtH zL}@uadicD#HXqElIS(hYa{5OPeHX)V|6GOhgv9z5*-HV7hXJ{~Uc+~+ksR#oOr4My z`06&FmJGo=;oZA;Z+?mjZ1?RGkkW(kPVg5jXfyJe_tLAe`=k!urJ*t_L=u;LMebnC zo1;-kLK2d3SYlEVDE8cYt=u&-1Gr+*XO?Syi9kqN8ZD>^gag?8NqPI{&r54BxbF(d zb-05iS>rI(ED0I_^g;9glPOL`CUFpQ4G<{BF@gkqoa+sA7fVgsOxl7#O&4FV^!v*= z4~-Ocuc|EBQ!iXAHle_S253VjcvCa^ZJ40<+r)-~H)Rcv23vrTq4LdJ0QIFDci!$` z`~0K{7v^G3MEUaiX_&IS68a42U$HzvNw%KjM?&3%Nbw4SUG5*C?mj{W_;8Me=7Xa- zoL4&ZaxS}~ljU{k3HN&rNS?Vh))6xV$^rCvfn$?gJhe>tl=nRA%35Q^8t_EzNtTtl zn{aMTO0ri;1t{2KT^gAy0!%ksLv$%=t*!s2+^Xg9yQ-)N6)YFd0uFQ>3B0WhAs z`cMJVSv!+615kK$w`%Xi%>C5kgQYz?)-mab4`ij5fY~MxFJ02k~DbzpL*m8Zl2PcW@ycTl3nV?Fwc(4DobJ5 z%}A6<71B_1UYaD{a%Mt-?e2x!&%;}W3A9Mf~Umt zk#l_>bJ3+>-3lFeFFXgGaXMk&Y1R52wofg*VaQv9f<;q#sxnF_$%ifiplwVs~ufthZuXT@VqJr?ojnDBZ zVY`>lKBtPcNk6uA7f9Xp*t>D$*Jg68Y||S!BncXRvBEv}MViL1&iszVjPZ-h+srVJ z?Ck8?K}*;~uMX=43B{80nqC@-t=?H}eDze3xI4NoWgR`z9|?f-2vkmKD+$26pZ#M> zQ2LpD(6paU`i>roBlLO0z5D7=Vqx^*LKb{xn^0Q(ROvj0{70s5)p4Kk)MFQ28kt_} zWH5CB8od|qQ&HimH{Bcay0j*@Uwy4L`6C~7pox@vuA)M*-+UY^;5(84D<=LrGBWb3 zdPpjofYBF_nIvuQVGJN{JMZH8GLf8Vd-NBNKkADt^;Zn_8`Mfm5E?l-ctGJw|3Su@ zb>ZmubH3@xN$_V3h-XB*%*=f8#=&|o1>yj?b^ADgeA>%`x>+26)kYN$_+e~Ub^H?2 z{K$}VkO?G@6Szue1+;o#;oc>Hf{tVIVZj_h)iHZcO~8RE1vLDKyJE-1o&HRX`?5xl zv%;VhSls=kY23!NIOojZic!L>2mVpoZ_D$}y!}o9mWe z)lQ9F(eQs5X`J_YCJIl9 zy^Eq2zM1>wkkh6SCeZ9e|#?5%lbC1eld@yucS zuGy_+QfzNSOWC*F{3eV;Q5w0Rz#YuW1M+(wRIgC^DBd|{alCFNR*r~AEe;s6TE?4aNJVLiQPN=QZ~OW;4QUF$nPU3<`LjPU5FH(z z$P+rwgZUy|}i?3>6vwW~jEB(a-b>$**^P zKB?E|^VsAv;0}4#DsjdM5$>RZic{s0bp>iIo8MQHp%E!R*Z`hBjZEJ`kMZxZ*`O?b zK*taAOUPo8IOx6y8)P}k)XqLQ>^;$SP`1$LehEv2iL#FZzYUc-gBM(N})jD zEFQ-wu#X+s0XSvtms;j=>%Z9UNS=B;H-)?R-pMH0Uf4<{PyG8RSPry!-(A z7O7Tb=l12DRSc}gIQB)7mX<kVVF@!}q$xbP z#2$S2q{rtiX8{sUjLnL+#21_IH@~QAC0<_l;*8NQ%&*wWJu@9Wnb&83nDvzK3!}X3 z)qO(3{oSVygg zG&=JbP-u@`#T#5Xz>R%WxYu~3HFd|mU8DH-KYRB3!9N9lJ>y||K>HPJzS>>n^aE!0 zj%jqARqs=5eTv;)~+}_^4FYbT-OObxZ>1)JFik2JI2@Oqz z@%6Pr91M*A_dzNkaPOD{@AGvB(b)G7@x^1p#cm8-wyz^;E z%hAzRo4UqMXk1nH&5C;=BhH-*zW!K&|K8l4B_PNf_SfoRgv;kv3T{6BJ1KZV9*1J` zFKSmF5-bqHAFAy^|FeiOwOJDQudjNLBS3>E`tOAY;ne>K0sTW1ee$10kj($N|9?VP z{~rTM;FC|@3lvPX_ zj(nSq+sfU>$DQ7d8$?D$LB8g#lW6G#e?38xGX(vJujNeQ1M@R0RJ3BCjgTd1P2l}K|#;;^4CzD9?gdNLOCy>kHvtoaB zSo-|AzWwGaQT=+O8(3tQv!%cT^06AGO5a11X3sUFxuXtBJA-&vl8(U>)cf}$?LDmc zHXeXZi7&o1nKa#@k11#?(seh&lB~S_nrQ!?HA$@Jt3T;XsgA0*S;K9p7QS52xQ=lf zkK)AMkWs(_J#CtfO0`PC~$4-bI{EG#7D5Nhhp=F)}+8Xjp& zBZ0I2p_Gafb5EL3`g9HExdB}xP7}<5fNHQ{&bn(6PY-BVq+81Q0JQU_P0^&-tu+0BQmzMwv}77-q-i$68GN;(qzJya6RQ#Ge1u>0>4Ir3;=q z+1Go&rSL)R#{vvZGqyKVTTSBOYt6f#$XQ*hh^KrO33bXbxy&AIZ>Gz;#$M1okHUME zWY5ON+0k+)Y4IEZCV?6nOXqb&q@;?VNEcY=CJ&aTgC%!g;=r=){tKU>0*zdC6O+AW z1c=b}?ezTm6;)8ccH_nk&ju1+?x+Oh=Y)hzSZz%W)8ogA#Gb@0-r&G!0{CjKEPR)R zB6CuuNQJx#+Bmy$V8yiNEFq<7VWvX(ENHpw`ES!(f8Ney9*F(wtyv@Fx*%RpP_=`@ z(LNtpVbisEs*vFEywp2cE}dMEHysfqw&LQ$THft6#_+_vo3{>Mi+&FF5qt1}GB?i# z??d(#VXeJQM!@X0bEbb*QWoaJ)FI58a0uo_7wWCz1ap>AyG=~!8m5Xs49*4y(nF(! zU^Q&TTsw^u6O+22j#Eo)yQ=AA!Hmpg1MqaCGfL(azPcl%%xj_UWXZMjX@x&gd$T^a z7oG?J&X^y@7u44`DDh?RnbpR=49kWL1oK=mLZ-8_^^@g+P7v3+!Q0!6czHJ7Z62ni z2WxoBaDa3YrLRd3Aw!=S$l>x{bYK1rP8PpE)Zv;5b(xg*ID>jKg%kpV_`G{vx~JG8 zZeQBiREo+oE2h&#{G4fr*IG?Y7zFkbdt;G0qy;$jtDfWW_vf^}|A>7S z+;JK-RFV;#~$ubo7g7 z&C@ed(gP$@7vnp2_9O~!_QmMm!-1nSwL?!b@n~9OXoZLXb$$K!*Qi_jdkWUCPs95A z`tEjgbX3eDuKA`qI+UagPs70VDK8%j3JbH7EM13@yF0&ufdN>?5Dvzepon;Ivk`LM z$9KX;6ZCTfqsTO6z;~mh8W6?Y%1%hYqagy_>PYN}@f_$13LT!QCgvVDd~f{TuY?X# z1d$N+KgQ2_6_%}L+!s9x#3|L3&XdeO$b=>&C3 zK4|1BzQ2BLsAc}l?CKId(CitS!IO5nUhu_?J^9_^i}JPF+r}PD@ogx01)-_I?xM2l z`*)QfF)GEU2cvo1mU{ZH-~ImmykI7HYhl*;-jnxkt}Sx`voR6$q0aRaA`ZkRrH~f# z^CO%dI?0w;k>Dtkf*J{+Cmmip>D}UlsNI8qDR#BWw+!&|aJ6e&`HW1CF-{8iOA9>a z+7atLq@OMBsjp0-%#3rZyZeg(#`1e|LLYj*i?!d}ow|MG zi;hLNaXLxwwH-XXesLca%D7uHIQtz#Qv45xZp2HH{w6&$8s2qf3dopj!{U?#t@B-` z+@pK^viV*b{=-L^;e1boum33*j4cB{0)o6~zqGir6FYxK7uwveUNXnTRr>T~< z8`f*%dEl;d{ySuegR<8^S!k$+zW(&uX^_ zHpKxH2pv4&0;h&S6nOB0kd#!%#B?Iw%fsD0J~j0{ScT@i|Kc)t@=*aZS@sw$n0KPg z2Eb%wV*_+3h8ao^xJJ0%(U9$n8`8mS-TGz1PxPF-^F@G=ayphEKn-C612)(S&oG7a zJ9pEtwzqJxRJVddF03f}q$S@*u?=CfK7r5TaVsjYq7c%?IKu_YT`y+au&gn3;0wO; zrze4x;pQKooA*py4qNOJzEGwO3u|`c)(NvQboe|ZNCUET;ytasP7ygn7XuGq^ z+i?Q|1f`OQdO*yF5AzBcrZ<784@DlaOLMb2xuvCq?VWwwr*&ieyiD!!)}N4uIdcn) zUVbfoRW1Ddfuob2h%n6`U`1WRx4}#d#+4DeYYx1KZ4)RiE`Gc1u(3i?Se{$exe&J5vyrq_>gmwg;RrKCA%>og<3cnyz7b5WW2J-YjV1vqD69)YOrx9VP8#(~`=b7yvUx8eo@ zj7_^YZ{$J2KrpI5rKUd7^6cof&I6V5c~f5w&H(C~ns`m~v7l&;m9_P)`^K(Smt0It zKx%3#8z<)tV53gju^J~PCPmaON7VP=>t{3{D8)QHH5Fxxb0gP78kF;VATWAJ7PY#% zio>OVIHq>Jj&_IOVWc#QwfL2HfYCFpXRz{}Appe@5LA~Ub@q@5dw*u_)ZtBp4U{r@ z5FSQC7l)^}-dp9&+419;Y)Lx3JfhtOpfP@meO*@W^AUNv#W)*G^KQ!}TC|M_A(Uwz z|NX(0yDqeIVZL7A*yGJqlc8TwOH$ICni{K4i(7K419S&xY6`DM$TWca)4{r$8TlM2_uamELTMJ6@L(O!mt`UF4JF6(2wRcL3>zjNcgF5 zwlbK2oYck;FRgCuJuT7V2|Do(3W{lc`bUc(L~$aq*(;-V=`~dJW5+D=$Ne94pIAeN zX)_@3Ia`^f#n@Vt7zP9c^@?-yQmZdz>->D_EdD}4sw|yoK5(w6WOq4%u4%w;kc-DV zwufmB%MyT9YdE}Hvq1i_kg%J3NqYIT?U59X>>;j*sa0pwxaB9ty=aP`1l5a?fqam5 zSWs&@!%KbGCHAM_;)k<)Up&fdwMS`p(p`(z?#&n=3d$X2z!D1sLm|0f5eCT_A<(PV z76ZRM;{+=}VBD1;f%8x-zc@gG{w)|GBL&m*KWph`@SIXu`@z#p`RU&9cC(4m3RUw8 z)LF||7ys4p@bEn8TP<+-M%<|t_3`8Gh`9}as{HlVQe~Em4^|l<+-R3ac$?&haF?sj z3$YN(E}`IWO?wSEv6GB}fq`?vY$xAMc_#jMVvhsH$4}$>FD+7r4~^Wv_gqRcU+M|- zTHm%f9YVMV*dJp(!(4X0zNcVU#sdVIfs)RM7!~!IE9oe?$u-~mnsr~7_3A#){P?@lL!J}+?I9>2D2ls^v6=+e%PC}3ec z|2Qn%IHuMS(lzqKUey1@8xVO?xZ~?=hL{PIIQ|1w*M;5E(1_hXtE+oZQ&TW~_PT%A z{l}j-3a_&af!BYJnz(Ms0*)FXLBTI}X-Ngr zVsD8yrax4+jNAZwj@4BwP`irv@DMMG5qzO!HAyIV z^mE_{(oWNuX#{<(e|LdqSFG{RiLuXwTG?Cc751nA7abkbl$W?FIvxH9p$en*`hlF= z44O|FlfjsprrzEbUW(?4wFDcK(>N`n*75joHDM^X78zgkd4AhvR+ypM)`zg1-Z`r3ca6=F)s$+D?3iE`%If$3_Fy1#A;|GR)1jZFujZWXY%Nr+CAuS zaha;T;OqAvV$#6JPzt%njoFbNGrEv3U+%rx(fa@v(?xdPr|BaFxOZ55iCjA@V=Z58 zN$&;V+0B)M8fWv0y3GV_F6EKu=8uJIp3>re(0m=jWvE4rV`?N!1!^Bm;r9eyUR*4> zHmaQKT-1FQTf{)JE+Jdo^DbHQSXDq7hrY?xyD!@$&>CC*67l1Akk2D`_oLyzW}Qks z?l{Ex=zWP>a`rvvl7uT=ideee-?gqP?mEhqyqK8W`s?HE!LBqRDD5GZ{!Nif4eMi8j@vysD+wB} zJx9v6F9JX>k6f>eFlM*0Ptps-K>eu;mU?{nVxquaS?#AQC}{5l8apn_JjegZNeRvx zek&*-1joL1PEK7oj^vzNTz#*8s%vO``;ng??JJtp;Z2YCD#2rTVIkI%O5$?nWaRbz zH5}mZ$B*CKWrr%LBPx+T=Vny5qLqzJPHQV8s7raSYxR)56QXf-LE5T#5Q^r$y9VvHc9ua7K4X!RBqIOiFwCgoSrpQ1HgS4x>3 z2%6Y8?P}OgW^W6WD+h7Gv|8w^TUr=;RnP&=Lxi8C@1#lG0sAo6$>Gfpy_WD=7%X?5 zUGWMcEC2l!=vn|~fOlxOH=9Yo)ET^ERziM14sFanZCTQDKV8F%jk{dn&Ex)yklBbl z6qiqe&s)FJ8X5BO+8vFc_ce~Ygg!)Iw+3WRD`PoWrLm0%x~C{f@S!iKt<54hU@N+Z zE!`v}k@UmY%4ZR;^nX;b>)q44&$)g}RQu#9JNq_}GCVRuB>HrpJtFu@r2UXSlf$qX zjV1%URYSE2HMA_oOP;km|JfcjR|~aqad6h4Y!?!O$%L*a0zy@ScI07E* z>=go!ZhAMN%r7o4bH9DVSz20R)RPHb`#zsWo%e{IRpPn8Kj#1YA_qIbntA!7y3@K-(S@4OZ&`i+6s${9~u}Meo9Fpl$MqT2N_Ikc4ixR zf5UhKx9XI7$(^C`$Mv3$<;{U89<4FdV(zXj4(H7f5FzF15qgJ7d85dAN&mm9d#|u2 z!Y*8N=%7?l>7b&ZAiaYS6crT#k*@SENbfZuh^SN%L0SZqDph(3phD=qN(ntc2%!fO zlI-C>``^z#=k8pcvy+R=e3^M><|}K>D(}184(Hw{SY9_s=!oI|V`%AkVh~D6PgGQ< zQpEC6F?(d5QYKPlO3mor7c@37`1}a;!`RtfFD@z3GcbrME*8-UJ38?D@;D_+Aap#T z8p^CB{Id47o^*VJH|m@cay(zjO~CdquLs%R-vLYBQdbsMM2j{*U+HhvuCVuK6M3 z1m1huC*v85JfIsi4)n+9f%YL4n5`zY)sOQKMy-^T!=FnFpkPoqr}%z95y^)mcgcS` zg0N+g24emLpFhj+i*c&o`&Z=iA4ava-G`L_2fI-J-{SPYw1?kZOU!4OMA0W=3VzF?(LxpHp3yy4VyUmJK7<&YI{bP!D{}L{!A@ z&8tP>SsDX%a!O9FEbwaSF3Z~RlMc(JQ)*7`pSBV^L>Ei{nGuh7Y}p+dLj7nBI5(~cf@mb#pBfh;t(F3eDb+mx@S|1xo9NH45ZDz*1*7sF#APR46oIwmRGpHE*q$40|s58~VLp`jtvmKqFLJMYGG&q6}J(b~!N84a2CDk1-|ilI+gq z4LnsAd9*=oXkXwpagMApj`ZY_%We-LcZVuYg-T{_HkAy+uw+sQO9|(o)h13}_u=X3 zp&yaN*@esaFo{&}T*iQFBaDSpuNAT{n@EHV1q$?qZMxpcKAm&?Zphw}ajzUIy%sqxG|;ATCW+ww$dgN8c>WJUkFz%vmh@zJ}xMEJ`$=X(Jy zA3uRAcgm#RBPRfrb)j&}f_vcbeKV08bT@#R_esv6K+mxZYXr4Tn(9ld0p61RTJ3b9 zmFIeaGaBha2a|NYhk^VfvR9jy255)8{tl-Ir^Xz~Zs&X&#I0qhQ3APnd=1lYzwXYZ zt}v^&CQxXO35diu`6!PUB=ygfgCYUK&UiHS*zrl|HTPE97IPSQJJ-FLDpz*L=R-y{ zUysNxiibpIpd(ke193hfa1JnK>WkZAMw2H?N(dZX<}z8{dxSxZQYHVDnM)bd$_9*u@VDQb8F&=k1 z%lR^0!HhafXz?bGr#xcO3`W~IL+Bkn9IVD%t!Zv)Z8nEq-#?oDrDjRE?-OK22Ucon z@Xhx-OyZuOx6Ces=DV^Ktzw9)pw9hThsr)Y`6rw^N(XkJ#f?BHK-9?m$acZ>=0`8xf2?vLH}sj2{X6q1 zkLKo%AyEBO0k*bORwI2eAEg)V>{TA#z%L|+9`bVyjyy{qvb22Zj@?(H+n4)O69&zG z3C$38IrQf(vz2t_)h#9dtSY(%p!(BI8(k4)$8=BynHRp=Et*Ey!q{`}e@0X!WUI^O z^Pq~Kc?8&FRot}smgDde%_fO2Uku04K{HlU@b~Y_di7>zcpMbL6Iw#2Ve2K~GLijbH8(@BogtvHo zAH#BL+z$VxQnoz@4-GzfR1D1@it-@rzg7oV5Gwi3wWzDe*rH^24*$6w+U#H=-OXc% zmPJTZvnh1k)_TtGUkl4vT$1 z((L7Kid)u9jlHD7mx}i8Y7h|Mh^^>SM=jqA+1%MsDCN(1_ajG0>JLkd43)h+0^y$# z%;NtgI{hz>N=3lZfy%FjS)6qb6q)gwmgVKUfp5_Ajq&ZtGg|{l`4yB-dS>G3V5+~| z^-dE>HCwL$gXKfz4EU8 zEG*lVx)T+AVu^ea8rnx=D0g`_5M3zcb%$HFoaW8_`#uhvq8^O_Yfp2O!_k`&0BLyH19?=1)Nr_PJ z`w?Zj6Xz?s7BFn7GiOkQR}Z0%XAOKQ;j0aYY+HX%<-Z5&A19Z(wv zMeMuDBs$T4D9tV$fdnhpx*NMV9_QO+m=lA&Ki1Tki%zwccipk~axi#pkVt>N3wZ^(}|R zfofsdWhHedGQ62kDIxg2Ua*UaNwLz^`7dVhUt_1+nwT1Z^3#Q6kKAuyK%e;#u;N9^ z|D27N#a>k3od@9>6HFZDKEq3AhqAPr{ZRnGocG~qW6RL-M7(4AUEem}jR5qq$@s3+ zxi*bwqYQPMm6B4v9~i6`g-(x(#!Y^0S)4i?ikvQH+ZUG9*doK4M#OK25@D)U+-QLo zjyg#FIWqR@GP+4R7mV8{F6s_+3w7-{`aR_Q(5rKI>ZNtvjMXIv;BuO_(EW$B%M0(F zfi_FEJDbBwLv+vH=YYxmm5wKV3~k(-8H?^xi%xIz1a)Ywl!P;)FWx7DQ`-jbBtT6^ zlUH2K zESja*In=stdU(W5^LgxYQBUy;YiWk+>Dv|4vL<~()HG98F1Wh}pC!06xRbIbw|C>~ z%}e9kHsCu01);e{-~O)A|1j{i?8bM1+q6I9Hg8u}Ke;l@c-?f&5Bga5e%k$142H9p zy@nDuURW-M3VW5Jo*J54akLMW=!*Lgr^CcD(dUYhx5M7*Q9*4oPrK^w*ip|EC*&hvM1C8f_3Zxr4|2-?KCr*_TUoVNsIEJ)?o@i!uHwI{ zpyq>Z;Aeql6I#tm94J2&!zf_a`2j^jvjE}R zkgcb8MZH9szDAzxqdtP=I-aIUQrIHmJ9d{5p2s`ZD<~Atg*O{$t%nnIycAR3gR1X9 z(sTbJDEQy%T@#S{GELH&^1xftZ_8vBM659`KH>_kOLY-WCj|w)NI#Z`AeYNEi2FxI z$gZ;L#UYA66|@p)wvNk@?<{jPE|dd#Dh|PZsA3f zEg@xW@*{&%38JkycTr^(c|N-gvH^3X^(#Pn_ma?+7zXuUfo0|`>N8_)_NwwK#IjRp*OzmP{ zoUI-i@XH~O>o!R2S=`Z=2LTh8%aHb{`Zn31{vD(u;d z8Cn%J;+7-{9lQ|}v-9d>{4OFw5p3XDx57WK8pPp5C*m z@I+R~UxW$kB`#RAqr2&RgUp2{VGVwtRbJPnRLgdGziNBUu)DU-uAwd!b89n3Ggtc5 zE_+9g|KrS;4*A&IsFNx8ipFROce7iR0{Fa=V$}*2{DS(~CT2SMzDmPggdq5ILX)`y zodZ>NhwaAXVgD84-xpk{d}_Y%v+q<@Es!eFdIe)irnnJ! z;|c0aohsHn)M{SA%zn*wmjsgxJw=bsa#tZ2f*dCqVb z`?aU1AwXLc1N-OryV36W^l)3qY$$Fn`ZXl(^)@AJ&~JNe1#>kbLN#P4$(k1M zde?_|)@)W^p=Az$fk%)o3-CDVm1u1?jlVn4{`>9uO1C*>AaSPkt}#?CoW*b~b*33? z0ncE4@ZfVXk$h}JKJwnszJZ@?tzl100a^zR!Zr>ZuN_bA}n57SgW+Bu`T*#sIiDkunVu3 zQXV6e_iDo0mh@O9>KL+*bwm>7C?{tY;O6sJb^wXgmp^HBn7H$#WC*m%F-XRLbPa)UozYx%CZb2kkr2Z_>jC+P95UarN$lrq$0w{H+uWsMV{& zme&9B3+R6`rp(*yW$o+wQNA5=>h#Sd`&Vvny+L0DBU0#TT6lkkf(zb0k%opQ9Zk&s ziFwglzrD+F*_We^V{wFdQDu6sl4SV9f9yYE7)3fdTNoHQM?I9zq;cH3za|Go-45n zCfIJzHc$e!ucvbxskX0y)fmV0br-XPx7+n~RaZl1!F55^#>VRFlN)HKY+PtzPUo;v;5hb!1FXz0IG@O0vzeM7uHFX$|`LJ6RGjo5E~O>yOiHr=m5v30#uva zsVB$!x&S-hIz63eMrnaBFrkl2Lx%(u&#NE!GiGmwkG`|i;wC2Yj84-kJg z!dXcMmJ5F_YXZj3>@f;1$H94RmngDw(!lx?@9C2tRVg}4lwKHEE~hX@-G4xz&q7`a zp=wNq+*ex5nJRX>wYg_V@X{2H{=z5m)2sp?@wH~}$UXtXo1*40JIQ4mnz!X=BCe>= zwHz8#?s_L(B`n0t%ld1nQML18(XGoDL;Q>7aQ8#eY1M_#lDp|jON~w!iq&r*tW|u* z!giXl&XFIU)ZG8YRah=jUQ%AC@RSo3X--#6t_QC)SX?-h40U@wYhZ4AN9EeJ-S6Wf zl!)&yHfymZnLZnVNpRFtrlVsL`FL1;7**d=f;W#7|$@RN?M|-}^i>uI#ln#So z8Jhvl#?x`%+jyz2$|C;WFFdllhYaepcTsVaYj8C$D#bP_VebMM)9sl&KYk-!_Lo&S zZZ+gD$HB{C@-NFNrj$%gZTi3(;FR^Vk#xf|40LCPe|36)bS9H8SXpo>US+%OyhL+2 zSRD0_B>`n;|6Ztx4~#ta)J@uRIY9#setri%wobt<~Fy^q9 z{6Vy1gR?EruAyt%gW4@TkIGFKp{Z+nXp$B{@?;M`3{^WiK_LGYBj#DNx2Tg3gE#Rb zDyGhd0ii%WI$Gh1${;ED!WN~mf|6<_nDRPzlS_<50rCuA- zBea*p#pz=bYX0@FJ<7c4TnJwz=*5|G4KD)=_!3o%D&4yjVYg(~9;Uh<``dRGu5{Tt zSQ3tR65DFokza44p2~&Yc{l>{a`u3xU-+$2IKUc54Ca2P4W?4rzndRZ3zL0jCNIQ| zMOM)gaIzvLHCF9!+_bb&gD?qj-Yl4XD*j|fDf&mP;nYyzVNsdbAGPVY)GuH1LrzMw z)k2c9pk7ZOrV$#4u22bc3eYlXdRub*JDW%~zunZQiEEgXFOKs*L{8p|V;HIIVj2LC z!qsxgI4ppr%V1Uf6BUKzLAGOq6Id>R-n zg3psg%P!7QO8yNFG>DY>&RqXHUiXmCBSTiZa6N2)H{pTDvC|e|{fHmtzqyKjU|Wi6 z8ag<9+v0-D7#pH?5>kHvrsRH48l%vp_Q|Hd8x7G9$Ab z?M74FJp9LVw-aF0i*Gsj5MP3K$BX~P?%t(9UP@88e6e;+r-wU*_p+PjtH*l7nlE`I zrDQ0z!d9kNQ)j9&ehNUnD*XED4-$v-LZpJz)5V)eK_{hO4t6}qdgs@i1t{B6n=)P` zplS>q9gg4f54!#W%}txdRX9JNt=WX{(rgLG5=J;|Y}v(SF%-(7BHvQ_nqj@cSmlf5 zPYAZoT<6WRq?hk!TKzK9)a^qXsB5m5f1mtOKkqS+n{qE+dtBPAfm+|sw0r0=?Y-hu zNF(}2nQRKHnuE<1#kl%}Pj) z!OUC5=uK9x%hB0t^73+56>riDi;66~U;Vc6>eaQYLbP$(+EbzHiTMyhk*Huig)oA> z;QXmK3;%tOXNlg-2647tL5(qt=fOk_d8KrggPiXLYnfeH^E%;IinhZ+(9Biew(bS( z!O=w?P=6=~r!y?(I6Q^1B(*dI(<_9Mf_6_Mak=@OYrD)p-?&e>l<=Qt_hKZ4%_(3F zO4MCjn1XSIO3WE>DrO+xO#a0d`8!H-efdI5^xQQ#V;Yd5PO;8V_^t45|JarhsmvwCF`wxkSQVN5TOoAEN5|-k zCY<9QB~{a%@;cq>Z!Gn8oHv_*RkOltFyy4ohVL!$q;n55SI5@zk(=Q&W1go9m#kmv z+R>Q=tT=7?vA1Q(KwAn+jr>8-Hs^ukRhq_Z3IlsostbqNvvsEcm8cA_>7Zc)7^-<- zTj6=f;dRDOdcxL#^58u%OQy{ZH=S+do8`FO2`D!9n}G-qW<^uYfrdN#B|R7jsE;LG znu`Wkf6&2e_%lDd=~Xda0!Vwf)7dV19o*wo-voa;$b zC8c`m?iO-1=A}i`^NkCpT(WbZofClHD4XM@<%-EA{5lL}x^6_+{UdFF}u zJ@;HcMHqGk4Bm_~9w)3AmW13t&)c4n^e#Ke+^HP8TRlU-P}YYo!cwwn4B{7iL_?b9 zaP9A0dj{2mCYjt7UAB;y1l5i!m`2OOr}lIF@72FD{>hgz{F_7H!N4heIUsN= zOi(wuSJ!^wS2D!${lOct<<$@@)!x2kh zT^Cd{BA`=`^>-Bda(E4|v}7j$Yg>@&cB*cSU~BGP z(Bd7qc&Q;Jn#OY#+xa0)YIyFAy1%XA-Dq>ry!_p@&|3qq3y@iV&bM=xfI}S#q0Qvz zVwUtrKzLO4)vOJ0hMOxh4+6GsM^P&^BAt8df`6bv&#UB{BySzTjIFR_b2lvw?WG70 z#9i{LFOfLUU(R+g!w9fM@r+Uk>sCvStj&y9X)>=2+))80#du4ac`!MMI%74jR#bv( z!S5jl69GfC~(d@8308i}cnBJt1ypk?U-x`(Oe1z||2=U`S|1(K2$$BOl<+ zaw<->-c;GWK7J<3@1RSYvbaraL%Mtus$dj=eqBK2tNfo+x}5%ZYBJ^h_%Bbv>;C5>8~Yzhwf}@d{~xir|NWf* zFC&b%=lKCPw&4vske%orl&H{p5+{GbCD@kn&nsTA$M){jkW@VfG06RYSRVHY%Vs;@ zRAej9gqVyEZ+3C{t5ffYW=;0r7-S{*z$<4IN4X$y2J|<|rDtRe4-JKb&K8Z|Fpvr< z2CV!o2ofjG)VU*8x|4VN6_A`pDj;Q(wzhVfoXcfqUd8ao$wCxBtvk}q85**KdLC)T1addBHm}sSt+v_i{+dS%AmkJDKZsrTCkGK8P zXrE5<&U4|`GsYGjV&5+P zE*NDn32AFsdsZ$YJC-}Yzdw=}y?t3G9tD$ZCasSd47=6bqo?>d9m|dkbzJ9MIdw^= z75GRKNJA4nG1$e4KJ8TUTB%>$hb2iFnasFWoLAY~i=FcW(v;=&Go4>i0crh0ygf?J z>zq~6i1Qi!%)k!IP6s?x=~VkkPxp>6SV&%)-o?#LUX~g(X6^0m!GiL1-{1r-%a}JS(yP!%E*fSUS9k1h<()DEeDIl=^xpQS11@oqHF=pdD#Wq zwvMRG8$peQoC_Yj8c%GhDyI3|Nja}Llhd7@J}8B4ae8hV@Vxd@c`@@(%3*IzchHjtZ&oKl14_=9slduS9{6%wkuEmPrKnO{&3&qO#kYr>= zAG|i;{B$AL)95*4XB>~K6EXIn^4fJp)=H_xnD-2tASsr3y3C&nDKlBe=$H?T51u|% zw6Xooc7ZnrJaC?%`}@2EJ?d@jVn+ir0|NyhD=P~CU@aJ?(pGRHJ5GIu!C0o5@;@=c zdwP0?#>S$ircC~JcG?h*FgHa-^(`!QL2_k5;PbK)SgsJHhzT;w-egFY(|)S(Rno}+ ztDAHK6Ua?3;3B>F{MU3Km&-GvmbOq*?kf-fjawI0Mmw({!`+EKg3Q}>gt=EVkj4;AKSOGTd;&ds{Fdd~YDRllz%$-GQ?O=%Uiv=jrASF3W?g7)RXdJ_%> z`u$X%CnrC+tCuu_|7yy04Kum;pm(_aAa%c0-PZ-I;LF9;L!EfS=9#MP6M znkrf%_NPu6K&(O*!o{y<_UOoR!QWC8j+dIzqd6mc@Y2VW;mUIue4ymLx2%QhQ%9Bg z17v}B6a%a}_QJFCs&qLl0@nnuW!6z4^$lx3Mh4db9#N7>Y-|JQV$e4f7J{y+qiBxP zTYjj5Jms#W#-#Ib*kH3G12%^d05CZ_6&fqDIncTpVlX*og-TVrDR!%ErX0GkS7`sl zS?k9QnyJ(H<-C&PzXlp>(5Dk2p6IOjc#XV!3N4^?*zhAzAb1OXz*#G#t>qi-z9(-b z3;f!bPvM0)hELTGFxP`~?WTlEVYB=KJvSmg;|-_^rjFW00l>TKB8n(t87XZxb7Id7 zv`v7XQAf)__D`QW??va`FF2naWgRZ79ocP185ItEYftJh?Q_uBeA#!|E>=6T;ynE? z2BE90&!0!}X_rQi!4lP&t#3S-njZV$S5ng(>X3|2-b~jPn%eSPPt_rq+~!npi{1Oj zyiIPmsp8x(wX0G3jqE87s($G@B+H(grxDEk1<}zFoj2$Fz}xox8%nBg6w%|`_W)_A zi`(mn@^Y3Xn?G>^2tI$OfJK@Jl<(xF5kE%_$tbF-2=DDK+HJs($1G?xUwdE>LOQku z+L{CRcls5a=TA4Z(`CD-1M>?S&zFOGIZrd8GhaKy0}Pz!fxBStWX#8pGR^08+=9)_ z%u;ti<{9SI)zzNPTo$B_Y=6VAgc(e-J$=C^Mr3%|RTEBS4Mjn4Tp=9A-7hZPd#dJE z$J5wfwePsEV(HuDPBKKmHwC^Rtx9=Xp#V*pj*i_5=q`Kgiy(R_R&>BCQn+;A8pV%uGkQ@=i zb{JfeQ$^S~-Cv`pwqIz=ri|rQ;Fgi-@|iDSSs8%1#~*K^2UXQrz=?hV@K{P)Zagh? zbeT#369L|1X6k~Q;h8g3!RI`zbR%R=xn(fipbWF^*JzdYL6X;!An*68hP&qWFV}|d ze6YTHB}te`Np9+3UI=x*#imeqf~BfSJFLl^*iyn2On^Y=f7smX40ugChRnemP=ied zeK7wb4}X|2Iza$J+ppb!OvcP<>zbjsI(N}ZGK})kOEv{h9=^KB!$UVhsn1%q_29DG zcO%1;LV_AwMwc;- zJ4Y(zyf|}(3vnKV{&&U}4coe@#?_U2uB69=?^xn_`LlXds6gCNGa7@g3`}sz@%4vQ zD(JvI_ZdtVmP0wBb10L;{P5ogd|{Q)P-0vie){#tj>y5@R9eIH8cH|FO#_dMO$(p0 zIyoH8i>exx@N~t;{0d*J&2)os&m|984I8gYTAUCiiQbjudF!E8nqD;8VEntTuzaAO5c<&>q0x2Rup?INdxPFVfv^s#K7IN1CsNO&SF88a zrXc*<;uIuuu$W#ZQWa|7gySp8rr(QZq^NaJ;|gUN9NgBbZiT-&%^G8>;= zT80)D*6q5Ug(fvLHYy+Hnhj%Sv`KOSf2W4hwCu+gDUyATYiAAyuHP#J(>xo_#%BY@ z$H(`c#u_9T`!EraTSl!gvJk66Yjg6{&1y{+ej)y5Irec~=edGNZuku`3_3gd zJ(}$CWB7NOrDH1;9Ub!aE(kO$lYKGeX*c=zI88L}a&v4L)dC{nAI;&r*ItSDfm8<; z4PtBc#>=`oRgw+@H?y-4PLtt{otS`+f;kwU`yK3rh~5sJ!9@7J>csqfzE{IF8GRQQ zodKn}`i)k<*+^n%H-$j!+W6Fdjqsp++=GAc2|wS);J*H|888N0ZAd^+;)pLf<~F^(<$ z^%CAEcONEh$$gGW7+gYMj3>s1hlPZT%;tx(8tC>snZqN$ncQ|G@THC2tPa3j*Mwt) zin62My(^VgE&Wlq=@P!WA1HSF_M=Zakg%V#Ly7tMr=@SXkapi>YDvx^D=$AaB|Y5B zKvzBagayPcgd6#Hlirm$6lF$Umph;NiSYsR(#7(~Dfam65vQDun3Ak`fg1d)$yqG_ z6wReqcs&ZQ7q1&zmrEv{b*Kg1nPSK2DI1nB9p zDz18oy`M+`57Pc5lEU;h=ho)N#A)UvpcBMZ`vBL0#3@mV1#M;T&rSFi>wgV;plV?@ z@#kGa^IPb1)$o$>;_aobZ`$*PmS|jX@Xr=veU+H0wi!(40B;GGwHuEso|tT%oI43x z=RRB$jiTPcH(sEYC$DAnp!R3BUz(Ua!`2~#n4q~?I!LEIO^s@)h(T@6bk({LHTU5Y z6BCmi{x*yOn&oTk<8n=a?usf5x)(t_8cjtv%fX>zXzWCpnPX^CleVDSAxkBbwCKQ;ez zqZIG{S}a;z5L^hka}=iXw1rYJ^r~m)} diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index f783331c19b5488082971039fb64691be51fc2e2..2506d9e629594bbeaca6059c40be900227775f0a 100644 GIT binary patch delta 18112 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 diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index e151808cb142d6167a79c0ba410c16e6b6de61d3..77029e36b6e005cc1964d4a8582146b8aa078a66 100644 GIT binary patch delta 13745 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 delta 13429 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 JCT1A$e*pG@@c;k- delta 15755 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 Hf$#qUETUzr diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi index 80e681399a6af01fc3a28012975ff7bf1f44a03d..59bc7a8e7ca6ba8a063dec994fae384aed9659a9 100644 GIT binary patch literal 4988 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 Z`h^(_=~k7pr~FI;9%<@nRNc3G^B Date: Sun, 8 Sep 2019 21:52:28 -0400 Subject: [PATCH 16/79] It didnt save my last change --- code/modules/reagents/reagent_containers/hypospray.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 9f1d9e4d14..b2115dc4e4 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -134,7 +134,7 @@ amount_per_transfer_from_this = 10 list_reagents = list("stimulants" = 50) -/obj/item/reagent_containers/hypospray/stimulants/baseball +/obj/item/reagent_containers/hypospray/medipen/stimulants/baseball name = "the reason the syndicate major league team wins." desc = "They say drugs never win, but look were you are now, then were they are." icon_state = "baseballstim" From 02771c9d2720ec636e27d479f503b3b614471747 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sun, 8 Sep 2019 22:10:31 -0400 Subject: [PATCH 17/79] Why didnt my last commit save at all? --- code/game/objects/items/storage/uplink_kits.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 538e700c52..319e8d2d98 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -71,7 +71,7 @@ new /obj/item/autosurgeon/anti_drop(src) //Lets just say 7~ new /obj/item/clothing/under/syndicate/baseball(src) //3tc new /obj/item/clothing/head/soft/baseball(src) //Lets say 4 tc - new /obj/item/reagent_containers/hypospray/stimulants/baseball(src) //lets say 5tc + new /obj/item/reagent_containers/hypospray/medipen/stimulants/baseball(src) //lets say 5tc if("implant") // 67+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it? new /obj/item/implanter/freedom(src) From 0a4090d83c12a2af068191d8bc7254b1b09ec88b Mon Sep 17 00:00:00 2001 From: Fermi <> Date: Tue, 10 Sep 2019 21:12:43 +0100 Subject: [PATCH 18/79] Fixes weird message --- .../code/modules/reagents/chemistry/recipes/fermi.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 89ef2a329c..0c93476689 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -367,7 +367,7 @@ hat.animate_atom_living() var/list/seen = viewers(8, get_turf(my_atom)) for(var/mob/M in seen) - to_chat(M, "The [src] makes an off sounding pop, as a hat suddenly climbs out of it!") + to_chat(M, "The [my_atom] makes an off sounding pop, as a hat suddenly climbs out of it!") my_atom.reagents.clear_reagents() /datum/chemical_reaction/fermi/furranium From 4f0afb6e451e8625b8ed8cff8446e40bb9e36af0 Mon Sep 17 00:00:00 2001 From: Fermi <> Date: Tue, 10 Sep 2019 21:36:49 +0100 Subject: [PATCH 19/79] 50 to 100 --- .../code/modules/reagents/chemistry/recipes/fermi.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 0c93476689..9edd800994 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -143,7 +143,9 @@ /datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma! var/turf/T = get_turf(my_atom) - var/amount_to_spawn = round((volume/50), 1) + var/amount_to_spawn = round((volume/100), 1) + if(amount_to_spawn <= 0) + amount_to_spawn = 1 for(var/i in 1 to amount_to_spawn) var/mob/living/simple_animal/slime/S = new(T,"green") S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) @@ -361,7 +363,9 @@ PurityMin = 0.5 /datum/chemical_reaction/fermi/hatmium/FermiExplode(src, var/atom/my_atom, volume, temp, pH) - var/amount_to_spawn = round((volume/50), 1) + var/amount_to_spawn = round((volume/100), 1) + if(amount_to_spawn <= 0) + amount_to_spawn = 1 for(var/i in 1 to amount_to_spawn) var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom)) hat.animate_atom_living() From 6da9f1c64cd95ee87ea9d990d26a97e03945a3aa Mon Sep 17 00:00:00 2001 From: Fermi <> Date: Tue, 10 Sep 2019 21:51:35 +0100 Subject: [PATCH 20/79] Indent --- code/modules/reagents/chemistry/holder.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index e9eb00a180..b0089b3bbb 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -494,13 +494,13 @@ //Standard reaction mechanics: else - if (C.FermiChem == TRUE)//Just to make sure + if (C.FermiChem == TRUE)//Just to make sure, should only proc when grenades are combining. if (chem_temp > C.ExplodeTemp) //To allow fermigrenades var/datum/chemical_reaction/fermi/Ferm = selected_reaction fermiIsReacting = FALSE SSblackbox.record_feedback("tally", "fermi_chem", 1, ("[Ferm] explosion")) Ferm.FermiExplode(src, my_atom, volume = total_volume, temp = chem_temp, pH = pH) - return 0 + return 0 for(var/B in cached_required_reagents) // multiplier = min(multiplier, round((get_reagent_amount(B) / cached_required_reagents[B]), 0.01)) From a751a73113a5ddfd24b8d9961262545b3b3dc8bb Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 10 Sep 2019 18:52:49 -0400 Subject: [PATCH 21/79] Apply suggestions from code review thx Ceb Co-Authored-By: cebutris --- code/game/objects/items/weaponry.dm | 2 +- code/modules/clothing/shoes/miscellaneous.dm | 2 +- code/modules/clothing/under/syndicate.dm | 4 ++-- code/modules/reagents/reagent_containers/hypospray.dm | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index f31292b66d..4cb6fc74c0 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -578,7 +578,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1) return 1 -/obj/item/melee/baseball_bat/ablative/synda +/obj/item/melee/baseball_bat/ablative/syndi name = "syndicate major league bat" desc = "A metal bat made by the syndicate for the major league team." force = 18 //Spear damage... diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index bafd182564..2993828ffd 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -63,7 +63,7 @@ icon_state = "galoshes_dry" /obj/item/clothing/shoes/sneakers/noslip - desc = "A pair of black shoes, they have the souls of galoshes making them unable to be slipped on a wet surface." + desc = "A pair of black shoes, they have the soles of galoshes making them unable to be slipped on a wet surface." name = "black shoes" icon_state = "black" permeability_coefficient = 0.30 diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index e94f95ae2a..4e3e1aa0cc 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -69,8 +69,8 @@ can_adjust = FALSE /obj/item/clothing/under/syndicate/baseball - name = "major leage, number unknown" - desc = "A major leage outfit with the number faded number on the back. Seems rather robust for just a game" + name = "major league, number unknown" + desc = "A major league outfit with the number faded number on the back. Seems rather robust for just a game" icon_state = "syndicatebaseball" item_state = "syndicatebaseball" item_color = "syndicatebaseball" diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index b2115dc4e4..a96ba006c9 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -129,14 +129,14 @@ /obj/item/reagent_containers/hypospray/medipen/stimulants name = "illegal stimpack medipen" - desc = "A highly illegal medipen do to its load and small injections, allow for five uses before being drained" + desc = "A highly illegal medipen due to its load and small injections, allow for five uses before being drained" volume = 50 amount_per_transfer_from_this = 10 list_reagents = list("stimulants" = 50) /obj/item/reagent_containers/hypospray/medipen/stimulants/baseball name = "the reason the syndicate major league team wins." - desc = "They say drugs never win, but look were you are now, then were they are." + desc = "They say drugs never win, but look where you are now, then where they are." icon_state = "baseballstim" volume = 50 amount_per_transfer_from_this = 50 From d61afe00212fd1a257f7a43357e7882a376b278b Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 10 Sep 2019 20:29:31 -0400 Subject: [PATCH 22/79] Update uplink_kits.dm --- code/game/objects/items/storage/uplink_kits.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 319e8d2d98..cf5d685b4a 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -63,7 +63,7 @@ new /obj/item/reagent_containers/syringe/stimulants(src) if("baseball") // 42~ tc - new /obj/item/melee/baseball_bat/ablative/synda(src) //Lets say 12 tc, lesser sleeping carp + new /obj/item/melee/baseball_bat/ablative/syndi(src) //Lets say 12 tc, lesser sleeping carp new /obj/item/clothing/glasses/sunglasses/garb(src) //Lets say 2 tc new /obj/item/card/emag(src) //6 tc new /obj/item/clothing/shoes/sneakers/noslip(src) //2tc From 29a6f12a4eb4e7028a23e2c27463afb3f0ef60b8 Mon Sep 17 00:00:00 2001 From: Fermi <> Date: Wed, 11 Sep 2019 15:00:58 +0100 Subject: [PATCH 23/79] Alligns removal rate to be 2x instead of flat. --- code/modules/reagents/chemistry/reagents/alcohol_reagents.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index a58a328003..b479862c4b 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1432,10 +1432,10 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M) if(holder.has_reagent("neurotoxin")) M.adjustBrainLoss(-1*REM, 150) - M.reagents.remove_reagent("neurotoxin", 0.25, FALSE) + M.reagents.remove_reagent("neurotoxin", 1 * REAGENTS_METABOLISM, FALSE) if(holder.has_reagent("fentanyl")) M.adjustBrainLoss(-1*REM, 150) - M.reagents.remove_reagent("fentanyl", 0.25, FALSE) + M.reagents.remove_reagent("fentanyl", 0.5 * REAGENTS_METABOLISM, FALSE) else M.adjustBrainLoss(-0.5*REM, 150) M.dizziness +=2 From db8586950f0f494981db305c9e4d1b08932f898d Mon Sep 17 00:00:00 2001 From: Fermi <> Date: Wed, 11 Sep 2019 19:07:40 +0100 Subject: [PATCH 24/79] Made it 3x --- .../modules/reagents/chemistry/reagents/alcohol_reagents.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index ae303ff401..0a1fd94d94 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1432,10 +1432,10 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M) if(holder.has_reagent("neurotoxin")) M.adjustBrainLoss(-1*REM, 150) - M.reagents.remove_reagent("neurotoxin", 1 * REAGENTS_METABOLISM, FALSE) + M.reagents.remove_reagent("neurotoxin", 2 * REAGENTS_METABOLISM, FALSE) if(holder.has_reagent("fentanyl")) M.adjustBrainLoss(-1*REM, 150) - M.reagents.remove_reagent("fentanyl", 0.5 * REAGENTS_METABOLISM, FALSE) + M.reagents.remove_reagent("fentanyl", 1 * REAGENTS_METABOLISM, FALSE) else M.adjustBrainLoss(-0.5*REM, 150) M.dizziness +=2 @@ -2157,7 +2157,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "commander_and_chief" glass_name = "Commander and Chief" glass_desc = "The gems of this majestic chalice represent the departments and their Heads." - + /datum/reagent/consumable/ethanol/commander_and_chief/on_mob_life(mob/living/carbon/M) if(M.mind && HAS_TRAIT(M.mind, TRAIT_CAPTAIN_METABOLISM)) M.heal_bodypart_damage(2,2,2) From c003352d354de12b29636146abe51d776a97a622 Mon Sep 17 00:00:00 2001 From: Fermi <> Date: Wed, 11 Sep 2019 19:08:57 +0100 Subject: [PATCH 25/79] Made it 2.5x --- code/modules/reagents/chemistry/reagents/alcohol_reagents.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 0a1fd94d94..a74d6216db 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1432,10 +1432,10 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M) if(holder.has_reagent("neurotoxin")) M.adjustBrainLoss(-1*REM, 150) - M.reagents.remove_reagent("neurotoxin", 2 * REAGENTS_METABOLISM, FALSE) + M.reagents.remove_reagent("neurotoxin", 1.5 * REAGENTS_METABOLISM, FALSE) if(holder.has_reagent("fentanyl")) M.adjustBrainLoss(-1*REM, 150) - M.reagents.remove_reagent("fentanyl", 1 * REAGENTS_METABOLISM, FALSE) + M.reagents.remove_reagent("fentanyl", 0.75 * REAGENTS_METABOLISM, FALSE) else M.adjustBrainLoss(-0.5*REM, 150) M.dizziness +=2 From e987eb27b919dd43a6bb1788375323c89f931ad6 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 12 Sep 2019 23:56:50 +0200 Subject: [PATCH 26/79] Adjusting a few dozen suits' body coverage. --- code/modules/clothing/suits/_suits.dm | 1 + code/modules/clothing/suits/armor.dm | 1 - code/modules/clothing/suits/cloaks.dm | 4 +-- code/modules/clothing/suits/jobs.dm | 2 ++ code/modules/clothing/suits/miscellaneous.dm | 31 +++++++++++++------- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index cf411ef367..3008043156 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -5,6 +5,7 @@ allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) slot_flags = ITEM_SLOT_OCLOTHING + body_parts_covered = CHEST var/blood_overlay_type = "suit" var/togglename = null var/suittoggled = FALSE diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 0840288eee..19050dc36f 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,6 +1,5 @@ /obj/item/clothing/suit/armor allowed = null - body_parts_covered = CHEST cold_protection = CHEST|GROIN min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index c3276213e1..b8287c7f4c 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -7,7 +7,7 @@ icon_state = "qmcloak" item_state = "qmcloak" w_class = WEIGHT_CLASS_SMALL - body_parts_covered = CHEST|GROIN|LEGS|ARMS + body_parts_covered = CHEST|LEGS|ARMS /obj/item/clothing/head/cloakhood name = "cloak hood" @@ -62,7 +62,7 @@ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival) armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|ARMS|LEGS /obj/item/clothing/head/hooded/cloakhood/goliath name = "goliath cloak hood" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 3c3c8f0e9d..4c0f4394b9 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -135,6 +135,7 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "suspenders" blood_overlay_type = "armor" //it's the less thing that I can put here + body_parts_covered = NONE //Security /obj/item/clothing/suit/security/officer @@ -197,3 +198,4 @@ item_state = "techpriesthood" body_parts_covered = HEAD flags_inv = HIDEHAIR|HIDEEARS + mutantrace_variation = MUTANTRACE_VARIATION diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 8a3dbbf274..75677fec79 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -67,6 +67,7 @@ item_state = "death" flags_1 = CONDUCT_1 fire_resist = T0C+5200 + body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|FEET flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -75,6 +76,7 @@ desc = "this pretty much looks ridiculous" //Needs no fixing icon_state = "justice" item_state = "justice" + body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|FEET flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -100,14 +102,14 @@ desc = "A fancy purple apron for a stylish person." icon_state = "purplebartenderapron" item_state = "purplebartenderapron" - body_parts_covered = CHEST|GROIN|LEGS + body_parts_covered = CHEST /obj/item/clothing/suit/syndicatefake name = "black and red space suit replica" icon_state = "syndicate-black-red" item_state = "syndicate-black-red" desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!" - w_class = WEIGHT_CLASS_NORMAL + body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET|HANDS allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT resistance_flags = NONE @@ -154,7 +156,7 @@ icon_state = "owl_wings" item_state = "owl_wings" togglename = "wings" - body_parts_covered = ARMS|CHEST + body_parts_covered = ARMS actions_types = list(/datum/action/item_action/toggle_wings) /obj/item/clothing/suit/toggle/owlwings/Initialize() @@ -219,6 +221,7 @@ desc = "Your classic, non-racist poncho." icon_state = "classicponcho" item_state = "classicponcho" + body_parts_covered = CHEST|GROIN /obj/item/clothing/suit/poncho/green name = "green poncho" @@ -255,7 +258,7 @@ desc = "A costume made from 'synthetic' carp scales, it smells." icon_state = "carp_casual" item_state = "labcoat" - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun) @@ -275,9 +278,7 @@ desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs." icon_state = "ian" item_state = "labcoat" - body_parts_covered = CHEST|GROIN|ARMS - //cold_protection = CHEST|GROIN|ARMS - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET allowed = list() hoodtype = /obj/item/clothing/head/hooded/ian_hood dog_fashion = /datum/dog_fashion/back @@ -287,8 +288,6 @@ desc = "A hood that looks just like a corgi's head, it won't guarantee dog biscuits." icon_state = "ian" body_parts_covered = HEAD - //cold_protection = HEAD - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS /obj/item/clothing/suit/hooded/bee_costume // It's Hip! @@ -314,7 +313,7 @@ desc = "A horribly bloated suit made from human skins." icon_state = "lingspacesuit" item_state = "labcoat" - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET|HANDS allowed = list() actions_types = list(/datum/action/item_action/toggle_human_head) hoodtype = /obj/item/clothing/head/hooded/human_head @@ -355,18 +354,21 @@ desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in." icon_state = "ianshirt" item_state = "ianshirt" + body_parts_covered = CHEST|GROIN /obj/item/clothing/suit/nerdshirt name = "gamer shirt" desc = "A baggy shirt with vintage game character Phanic the Weasel. Why would anyone wear this?" icon_state = "nerdshirt" item_state = "nerdshirt" + body_parts_covered = CHEST|GROIN /obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat. name = "Vape Naysh shirt" desc = "A cheap white T-shirt with a big tacky \"VN\" on the front, Why would you wear this unironically?" icon_state = "vapeshirt" item_state = "vapeshirt" + body_parts_covered = CHEST|GROIN /obj/item/clothing/suit/jacket name = "bomber jacket" @@ -374,7 +376,7 @@ icon_state = "bomberjacket" item_state = "brownjsuit" allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio) - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT @@ -399,6 +401,7 @@ desc = "A thick jacket with a rubbery, water-resistant shell." icon_state = "pufferjacket" item_state = "hostrench" + body_parts_covered = CHEST|GROIN|ARMS armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/jacket/puffer/vest @@ -446,18 +449,21 @@ desc = "Looks like this belongs in a very old movie set." icon_state = "draculacoat" item_state = "draculacoat" + body_parts_covered = CHEST|ARMS /obj/item/clothing/suit/drfreeze_coat name = "doctor freeze's labcoat" desc = "A labcoat imbued with the power of features and freezes." icon_state = "drfreeze_coat" item_state = "drfreeze_coat" + body_parts_covered = CHEST|GROIN|ARMS /obj/item/clothing/suit/gothcoat name = "gothic coat" desc = "Perfect for those who want stalk in a corner of a bar." icon_state = "gothcoat" item_state = "gothcoat" + body_parts_covered = CHEST|ARMS|HAND_LEFT //peculiar /obj/item/clothing/suit/xenos name = "xenos suit" @@ -603,6 +609,7 @@ name = "spooky ghost" desc = "This is obviously just a bedsheet, but maybe try it on?" icon_state = "bedsheet" + body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|HEAD user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150) alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire @@ -611,6 +618,7 @@ desc = "A big and clanky suit made of bronze that offers no protection and looks very unfashionable. Nice." icon = 'icons/obj/clothing/clockwork_garb.dmi' icon_state = "clockwork_cuirass_old" + body_parts_covered = CHEST|GROIN|LEGS armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20) /obj/item/clothing/suit/ghost_sheet @@ -623,4 +631,5 @@ throw_range = 2 w_class = WEIGHT_CLASS_TINY flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|HEAD alternate_worn_layer = UNDER_HEAD_LAYER From 2226bd3b697d5ef76300a7713d7c33e0864014e0 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 13 Sep 2019 00:25:52 +0200 Subject: [PATCH 27/79] More adjustments. --- modular_citadel/code/modules/clothing/suits/suits.dm | 1 + modular_citadel/code/modules/custom_loadout/custom_items.dm | 2 ++ 2 files changed, 3 insertions(+) diff --git a/modular_citadel/code/modules/clothing/suits/suits.dm b/modular_citadel/code/modules/clothing/suits/suits.dm index 22e4aef6a9..5cce40ad09 100644 --- a/modular_citadel/code/modules/clothing/suits/suits.dm +++ b/modular_citadel/code/modules/clothing/suits/suits.dm @@ -12,6 +12,7 @@ icon_state = "hostrench" item_state = "hostrench" mutantrace_variation = NO_MUTANTRACE_VARIATION + body_parts_covered = CHEST|ARMS|LEGS /obj/item/clothing/suit/hooded/cloak/david name = "red cloak" diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 42363e9e07..5d81dbfa49 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -447,6 +447,7 @@ item_state = "kimono" icon = 'icons/obj/custom.dmi' alternate_worn_icon = 'icons/mob/custom_w.dmi' + body_parts_covered = CHEST|GROIN|LEGS|ARMS mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/suit/commjacket @@ -456,6 +457,7 @@ item_state = "commjacket" icon = 'icons/obj/custom.dmi' alternate_worn_icon = 'icons/mob/custom_w.dmi' + body_parts_covered = CHEST|GROIN|LEGS|ARMS mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/mw2_russian_para From ef4b5c1b3485775a78b95da273e4c0e368dcb0ae Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Thu, 12 Sep 2019 23:06:46 -0400 Subject: [PATCH 28/79] gone_reduced_to_atoms --- code/modules/clothing/shoes/vg_shoes.dm | 17 - .../code/game/machinery/plasmacases.dm | 24 -- .../game/objects/items/devices/genemods.dm | 21 -- .../modules/antagonists/cit_crewobjectives.dm | 35 -- .../modules/antagonists/cit_miscreants.dm | 52 --- .../cit_crewobjectives_cargo.dm | 81 ----- .../cit_crewobjectives_civilian.dm | 249 -------------- .../cit_crewobjectives_command.dm | 33 -- .../cit_crewobjectives_engineering.dm | 34 -- .../cit_crewobjectives_medical.dm | 86 ----- .../cit_crewobjectives_science.dm | 45 --- .../cit_crewobjectives_security.dm | 23 -- modular_citadel/code/modules/cargo/packs.dm | 28 -- .../code/modules/crafting/recipes.dm | 11 - .../code/modules/mining/mine_items.dm | 2 - .../mob/living/simple_animal/pokemon.dm | 306 ------------------ .../modules/research/techweb/all_nodes.dm | 36 --- .../modules/research/techweb/all_nodes.dme.dm | 33 -- modular_citadel/icons/misc/misc.dmi | Bin 182 -> 0 bytes modular_citadel/icons/mob/citadel/glasses.dmi | Bin 182 -> 0 bytes modular_citadel/icons/mob/citadel/head.dmi | Bin 182 -> 0 bytes modular_citadel/icons/mob/citadel/masks.dmi | Bin 182 -> 0 bytes modular_citadel/icons/mob/citadel/shoes.dmi | Bin 182 -> 0 bytes modular_citadel/icons/mob/werenerd.dmi | Bin 131353 -> 0 bytes modular_citadel/icons/mob/werenerdleap.dmi | Bin 4862 -> 0 bytes modular_citadel/icons/obj/structures.dmi | Bin 182 -> 0 bytes 26 files changed, 1116 deletions(-) delete mode 100644 modular_citadel/code/game/machinery/plasmacases.dm delete mode 100644 modular_citadel/code/game/objects/items/devices/genemods.dm delete mode 100644 modular_citadel/code/modules/antagonists/cit_crewobjectives.dm delete mode 100644 modular_citadel/code/modules/antagonists/cit_miscreants.dm delete mode 100644 modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm delete mode 100644 modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm delete mode 100644 modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm delete mode 100644 modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm delete mode 100644 modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm delete mode 100644 modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm delete mode 100644 modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm delete mode 100644 modular_citadel/code/modules/cargo/packs.dm delete mode 100644 modular_citadel/code/modules/crafting/recipes.dm delete mode 100644 modular_citadel/code/modules/mining/mine_items.dm delete mode 100644 modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm delete mode 100644 modular_citadel/code/modules/research/techweb/all_nodes.dm delete mode 100644 modular_citadel/code/modules/research/techweb/all_nodes.dme.dm delete mode 100644 modular_citadel/icons/misc/misc.dmi delete mode 100644 modular_citadel/icons/mob/citadel/glasses.dmi delete mode 100644 modular_citadel/icons/mob/citadel/head.dmi delete mode 100644 modular_citadel/icons/mob/citadel/masks.dmi delete mode 100644 modular_citadel/icons/mob/citadel/shoes.dmi delete mode 100644 modular_citadel/icons/mob/werenerd.dmi delete mode 100644 modular_citadel/icons/mob/werenerdleap.dmi delete mode 100644 modular_citadel/icons/obj/structures.dmi diff --git a/code/modules/clothing/shoes/vg_shoes.dm b/code/modules/clothing/shoes/vg_shoes.dm index 931c25b823..627a061181 100644 --- a/code/modules/clothing/shoes/vg_shoes.dm +++ b/code/modules/clothing/shoes/vg_shoes.dm @@ -5,7 +5,6 @@ icon_state = "leather" item_color = "leather" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/magboots/deathsquad @@ -14,7 +13,6 @@ icon_state = "DS-magboots0" magboot_state = "DS-magboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -23,7 +21,6 @@ name = "atmospherics magboots" icon_state = "atmosmagboots0" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' magboot_state = "atmosmagboots" resistance_flags = FIRE_PROOF mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -33,7 +30,6 @@ desc = "Simon's Shoes." icon_state = "simonshoes" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/kneesocks @@ -41,7 +37,6 @@ desc = "A pair of girly knee-high socks." icon_state = "kneesock" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/jestershoes @@ -49,7 +44,6 @@ desc = "As worn by the clowns of old." icon_state = "jestershoes" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/aviatorboots @@ -57,7 +51,6 @@ desc = "Boots suitable for just about any occasion." icon_state = "aviator_boots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/libertyshoes @@ -65,7 +58,6 @@ desc = "Freedom isn't free, neither were these shoes." icon_state = "libertyshoes" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/megaboots @@ -73,7 +65,6 @@ desc = "Large armored boots, very weak to large spikes." icon_state = "megaboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/protoboots @@ -81,7 +72,6 @@ desc = "Functionally identical to the DRN-001 model's boots, but in red." icon_state = "protoboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/megaxboots @@ -89,7 +79,6 @@ desc = "Regardless of how much stronger these boots are than the DRN-001 model's, they're still extremely easy to pierce with a large spike." icon_state = "megaxboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/joeboots @@ -97,7 +86,6 @@ desc = "Nearly identical to the Prototype's boots, except in black." icon_state = "joeboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/doomguy @@ -105,7 +93,6 @@ desc = "If you look closely, you might see skull fragments still buried in these boots." icon_state = "doom" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/rottenshoes @@ -113,7 +100,6 @@ desc = "These shoes seem perfect for sneaking around." icon_state = "rottenshoes" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/sandal/slippers @@ -121,7 +107,6 @@ icon_state = "slippers" desc = "For the wizard that puts comfort first. Who's going to laugh?" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/slippers_worn @@ -129,7 +114,6 @@ desc = "Fluffy..." icon_state = "slippers_worn" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/jackboots/neorussian @@ -137,5 +121,4 @@ desc = "Tovarish, no one will realize you stepped on a pile of shit if your pair already looks like shit." icon_state = "nr_boots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION \ No newline at end of file diff --git a/modular_citadel/code/game/machinery/plasmacases.dm b/modular_citadel/code/game/machinery/plasmacases.dm deleted file mode 100644 index c45eb48caa..0000000000 --- a/modular_citadel/code/game/machinery/plasmacases.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/structure/guncase/plasma - name = "plasma rifle locker" - desc = "A locker that holds plasma rifles. Only opens in dire emergencies." - icon_state = "ecase" - case_type = "egun" - gun_category = /obj/item/gun/energy/plasma - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //because fuck you, powergaming nerds. - -/obj/structure/guncase/plasma/attackby(obj/item/W, mob/user, params) - return - -/obj/structure/guncase/plasma/MouseDrop(over_object, src_location, over_location) - if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA) - . = ..() - else - to_chat(usr, "The storage unit will only unlock during a Red or Delta security alert.") - -/obj/structure/guncase/plasma/attack_hand(mob/user) - return MouseDrop(user) - -/obj/structure/guncase/plasma/emag_act() - . = SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT) - if(!.) - to_chat(usr, "The locking mechanism is fitted with old style parts, The card has no effect.") \ No newline at end of file diff --git a/modular_citadel/code/game/objects/items/devices/genemods.dm b/modular_citadel/code/game/objects/items/devices/genemods.dm deleted file mode 100644 index 5efebf4860..0000000000 --- a/modular_citadel/code/game/objects/items/devices/genemods.dm +++ /dev/null @@ -1,21 +0,0 @@ -//Will include consumable gene mods in the future. - -/obj/item/genemod - name = "genetic modifier" - desc = "Microbodies which can grow, morph, or otherwise change an organism into something else." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "dnainjector" - throw_speed = 3 - throw_range = 5 - w_class = WEIGHT_CLASS_TINY - var/applied_region = "chest" - var/list/add_mutations = list() - var/list/remove_mutations = list() - - var/list/add_mutations_static = list() - var/list/remove_mutations_static = list() - - var/used = 0 - -/obj/item/genemod/proc/use(mob/living/carbon/human/target) - return \ No newline at end of file diff --git a/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm b/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm deleted file mode 100644 index 6afa92af65..0000000000 --- a/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/controller/subsystem/ticker/proc/generate_crew_objectives() - for(var/datum/mind/crewMind in SSticker.minds) - if(prob(5) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed && ROLE_MISCREANT in crewMind.current.client.prefs.be_special) - generate_miscreant_objectives(crewMind) - else - if(CONFIG_GET(flag/allow_crew_objectives)) - generate_individual_objectives(crewMind) - return - -/datum/controller/subsystem/ticker/proc/generate_individual_objectives(var/datum/mind/crewMind) - if(!(CONFIG_GET(flag/allow_crew_objectives))) - return - if(!crewMind) - return - if(!crewMind.current || !crewMind.objectives || crewMind.special_role) - return - if(!crewMind.assigned_role) - return - var/list/validobjs = crewobjjobs["[ckey(crewMind.assigned_role)]"] - if(!validobjs || !validobjs.len) - return - var/selectedObj = pick(validobjs) - var/datum/objective/crew/newObjective = new selectedObj - if(!newObjective) - return - newObjective.owner = crewMind - crewMind.objectives += newObjective - to_chat(crewMind, "As a part of Nanotrasen's anti-tide efforts, you have been assigned an optional objective. It will be checked at the end of the shift. Performing traitorous acts in pursuit of your objective may result in termination of your employment.") - to_chat(crewMind, "Your optional objective: [newObjective.explanation_text]") - -/datum/objective/crew/ - var/jobs = "" - explanation_text = "Yell on the development discussion channel on Citadels discord if this ever shows up. Something just broke here, dude" - -/datum/objective/crew/proc/setup() diff --git a/modular_citadel/code/modules/antagonists/cit_miscreants.dm b/modular_citadel/code/modules/antagonists/cit_miscreants.dm deleted file mode 100644 index 5726167820..0000000000 --- a/modular_citadel/code/modules/antagonists/cit_miscreants.dm +++ /dev/null @@ -1,52 +0,0 @@ -/datum/controller/subsystem/ticker/proc/generate_miscreant_objectives(var/datum/mind/crewMind) - if(!GLOB.miscreants_allowed) - return - if(!crewMind) - return - if(!crewMind.current || !crewMind.objectives || crewMind.special_role) - return - if(!crewMind.assigned_role) - return - if(!(ROLE_MISCREANT in crewMind.current.client.prefs.be_special)) - return - if(jobban_isbanned(crewMind, "Syndicate")) - return - var/list/objectiveTypes = miscreantobjlist - if(!objectiveTypes.len) - return - var/selectedType = pick(objectiveTypes) - var/datum/objective/miscreant/newObjective = new selectedType - if(!newObjective) - return - newObjective.owner = crewMind - crewMind.objectives += newObjective - crewMind.special_role = "miscreant" - to_chat(crewMind, "You are a Miscreant.") - to_chat(crewMind, "Pursuing your objective is entirely optional, as the completion of your objective is unable to be tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment.") - to_chat(crewMind, "Your objective: [newObjective.explanation_text]") - -/datum/objective/miscreant - explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the development discussion channel of citadels discord." - -/* Goon's Miscreant Objectives */ - - -/datum/objective/miscreant/incompetent - explanation_text = "Be as useless and incompetent as possible without getting killed." - -/datum/objective/miscreant/litterbug - explanation_text = "Make a huge mess wherever you go." - -/datum/objective/miscreant/creepy - explanation_text = "Sneak around looking as suspicious as possible without actually doing anything illegal." - -/datum/objective/miscreant/whiny - explanation_text = "Complain incessantly about every minor issue you find." - -/* Citadel's Miscreant Objectives */ - -/datum/objective/miscreant/immersions - explanation_text = "Act as uncharacteristic as you possibly can." // corrected from "Act as out of character as you can" people thought it meant to just ooc in ic - -/datum/objective/miscreant/cargonia - explanation_text = "Attempt to establish independence of your department." diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm deleted file mode 100644 index 010337b49f..0000000000 --- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm +++ /dev/null @@ -1,81 +0,0 @@ -/* CARGO OBJECTIVES */ - -/datum/objective/crew/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." - jobs = "quartermaster,cargotechnician" - -/datum/objective/crew/petsplosion/New() - . = ..() - target_amount = rand(10,30) - update_explanation_text() - -/datum/objective/crew/petsplosion/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/petsplosion/check_completion() - var/petcount = target_amount - for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if(!(P.stat == DEAD)) - if(P.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(P)]) - petcount-- - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!(H.stat == DEAD)) - if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) - petcount-- - if(petcount <= 0) - return TRUE - else - return FALSE - -/datum/objective/crew/points //ported from old hippie - explanation_text = "Make sure the station has at least (Something broke, report this to the development discussion channel of citadels discord) supply points at the end of the shift." - jobs = "quartermaster,cargotechnician" - -/datum/objective/crew/points/New() - . = ..() - target_amount = rand(25000,100000) - update_explanation_text() - -/datum/objective/crew/points/update_explanation_text() - . = ..() - explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift." - -/datum/objective/crew/points/check_completion() - if(SSshuttle.points >= target_amount) - return TRUE - else - return FALSE - -/datum/objective/crew/bubblegum - explanation_text = "Ensure Bubblegum is dead at the end of the shift." - jobs = "shaftminer" - -/datum/objective/crew/bubblegum/check_completion() - for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) - if(!(B.stat == DEAD)) - return FALSE - return TRUE - -/datum/objective/crew/fatstacks //ported from old hippie - explanation_text = "Have at least (something broke, report this to the development discussion channel of citadels discord) mining points on your ID at the end of the shift." - jobs = "shaftminer" - -/datum/objective/crew/fatstacks/New() - . = ..() - target_amount = rand(15000,50000) - update_explanation_text() - -/datum/objective/crew/fatstacks/update_explanation_text() - . = ..() - explanation_text = "Have at least [target_amount] mining points on your ID at the end of the shift." - -/datum/objective/crew/fatstacks/check_completion() - if(owner && owner.current) - var/mob/living/carbon/human/H = owner.current - var/obj/item/card/id/theID = H.get_idcard() - if(istype(theID)) - if(theID.mining_points >= target_amount) - return TRUE - return FALSE diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm deleted file mode 100644 index 491285e9c4..0000000000 --- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm +++ /dev/null @@ -1,249 +0,0 @@ -/* CIVILIAN OBJECTIVES */ - -/datum/objective/crew/druglordbot //ported from old Hippie with adjustments - var/targetchem = "none" - var/datum/reagent/chempath - explanation_text = "Have at least (somethin broke here) harvested plants containing (report this on the development discussion channel of citadel's discord) when the shift ends." - jobs = "botanist" - -/datum/objective/crew/druglordbot/New() - . = ..() - target_amount = rand(3,20) - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingadrenaline, /datum/reagent/medicine/changelinghaste) - var/drugs = typesof(/datum/reagent/drug) - blacklist - var/meds = typesof(/datum/reagent/medicine) - blacklist - var/chemlist = drugs + meds - chempath = pick(chemlist) - targetchem = initial(chempath.id) - update_explanation_text() - -/datum/objective/crew/druglordbot/update_explanation_text() - . = ..() - explanation_text = "Have at least [target_amount] harvested plants containing [initial(chempath.name)] when the shift ends." - -/datum/objective/crew/druglordbot/check_completion() - var/pillcount = target_amount - if(owner && owner.current) - if(owner.current.contents) - for(var/obj/item/reagent_containers/food/snacks/grown/P in owner.current.get_contents()) - if(P.reagents.has_reagent(targetchem)) - pillcount-- - if(pillcount <= 0) - return TRUE - else - return FALSE - -/datum/objective/crew/foodhoard - var/datum/crafting_recipe/food/targetfood - var/obj/item/reagent_containers/food/foodpath - explanation_text = "Personally deliver at least (yo something broke) (report this to the developer discussion channel in citadels discord)s to Centcom." - jobs = "cook" - -/datum/objective/crew/foodhoard/New() - . = ..() - target_amount = rand(2,10) - var/blacklist = list(/datum/crafting_recipe/food, /datum/crafting_recipe/food/cak) - var/possiblefoods = typesof(/datum/crafting_recipe/food) - blacklist - targetfood = pick(possiblefoods) - foodpath = initial(targetfood.result) - update_explanation_text() - -/datum/objective/crew/foodhoard/update_explanation_text() - . = ..() - explanation_text = "Personally deliver at least [target_amount] [initial(foodpath.name)]s to Centcom." - -/datum/objective/crew/foodhoard/check_completion() - if(owner && owner.current && owner.current.check_contents_for(foodpath) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return TRUE - else - return FALSE - -/datum/objective/crew/responsibility - explanation_text = "Make sure nobody dies with alcohol poisoning." - jobs = "bartender" - -/datum/objective/crew/responsibility/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.drunkenness >= 80) - if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)]) - return FALSE - return TRUE - -/datum/objective/crew/clean //ported from old Hippie - var/list/areas = list() - var/hardmode = FALSE - explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift." - jobs = "janitor" - -/datum/objective/crew/clean/New() - . = ..() - if(prob(1)) - hardmode = TRUE - var/list/blacklistnormal = list(typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat)) - var/list/blacklisthard = list(typesof(/area/lavaland) - typesof(/area/mine)) - var/list/possibleareas = list() - if(hardmode) - possibleareas = GLOB.teleportlocs - /area - blacklisthard - else - possibleareas = GLOB.teleportlocs - /area - blacklistnormal - for(var/i in 1 to rand(1,6)) - areas |= pick_n_take(possibleareas) - update_explanation_text() - -/datum/objective/crew/clean/update_explanation_text() - . = ..() - explanation_text = "Ensure that the" - for(var/i in 1 to areas.len) - var/area/A = areas[i] - explanation_text += " [A]" - if(i != areas.len && areas.len >= 3) - explanation_text += "," - if(i == areas.len - 1) - explanation_text += "and" - explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] clean at the end of the shift." - if(hardmode) - explanation_text += " Chop-chop." - -/datum/objective/crew/clean/check_completion() - for(var/area/A in areas) - for(var/obj/effect/decal/cleanable/C in area_contents(A)) - if(C && C.alpha >= 150) - return FALSE - return TRUE - -/datum/objective/crew/slipster //ported from old Hippie with adjustments - explanation_text = "Slip at least (Yell on citadel's development discussion channel if you see this) different people with your PDA, and have it on you at the end of the shift." - jobs = "clown" - -/datum/objective/crew/slipster/New() - . = ..() - target_amount = rand(5, 20) - update_explanation_text() - -/datum/objective/crew/slipster/update_explanation_text() - . = ..() - explanation_text = "Slip at least [target_amount] different people with your PDA, and have it on you at the end of the shift." - -/datum/objective/crew/slipster/check_completion() - var/list/uniqueslips = list() - if(owner && owner.current) - for(var/obj/item/pda/clown/PDA in owner.current.get_contents()) - for(var/mob/living/carbon/human/H in PDA.slipvictims) - uniqueslips |= H - if(uniqueslips.len >= target_amount) - return TRUE - else - return FALSE - -/datum/objective/crew/vow //ported from old Hippie - explanation_text = "Never break your vow of silence." - jobs = "mime" - -/datum/objective/crew/vow/check_completion() - if(owner && owner.current) - var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG] - if(say_log.len > 0) - return FALSE - return TRUE - -/datum/objective/crew/nullrod - explanation_text = "Don't lose your holy rod." - jobs = "chaplain" - -/datum/objective/crew/nullrod/check_completion() - if(owner && owner.current) - for(var/nullrodtypes in typesof(/obj/item/nullrod)) - if(owner.current.check_contents_for(nullrodtypes)) - return TRUE - if(owner.current.getorgan(/obj/item/organ/genital/penis)) - return TRUE - return FALSE - -/datum/objective/crew/reporter //ported from old hippie - var/charcount = 100 - explanation_text = "Publish at least (Yo something broke) articles containing at least (Report this to Citadels development channel) characters." - jobs = "curator" - -/datum/objective/crew/reporter/New() - . = ..() - target_amount = rand(2,10) - charcount = rand(20,250) - update_explanation_text() - -/datum/objective/crew/reporter/update_explanation_text() - . = ..() - explanation_text = "Publish at least [target_amount] articles containing at least [charcount] characters." - -/datum/objective/crew/reporter/check_completion() - if(owner && owner.current) - var/ownername = "[ckey(owner.current.real_name)][ckey(owner.assigned_role)]" - for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) - for(var/datum/newscaster/feed_message/msg in chan.messages) - if(ckey(msg.returnAuthor()) == ckey(ownername)) - if(length(msg.returnBody()) >= charcount) - target_amount-- - if(target_amount <= 0) - return TRUE - else - return FALSE - -/datum/objective/crew/pwrgame //ported from Goon with adjustments - var/obj/item/clothing/targettidegarb - explanation_text = "Get your grubby hands on a (Dear god something broke. Report this to Citadel's development dicussion channel)." - jobs = "assistant" - -/datum/objective/crew/pwrgame/New() - . = ..() - var/list/muhvalids = list(/obj/item/clothing/mask/gas, /obj/item/clothing/head/welding, /obj/item/clothing/head/ushanka, /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas/owl_mask) - if(prob(10)) - muhvalids += list(/obj/item/clothing/suit/space) - targettidegarb = pick(muhvalids) - update_explanation_text() - -/datum/objective/crew/pwrgame/update_explanation_text() - . = ..() - explanation_text = "Get your grubby hands on a [initial(targettidegarb.name)]." -/* DM is not a sane language in any way, shape, or form. If anyone wants to try to get this bit functioning proper, I hold no responsibility for broken keyboards. - if(owner && owner.current) - var/mob/living/carbon/human/H = owner.current - if(H && H.dna && H.dna.species && H.dna.species.id) - explanation_text = "Get your " - if(H.dna.species.id == "avian") - explanation_text += "scratchy claws " - else if(H.dna.species.id == "mammal") - explanation_text += "dirty paws " - else if(H.dna.species.id == "aquatic") - explanation_text += "fishy hands " - else if(H.dna.species.id == "xeno") - explanation_text += "weird claws " - else if(H.dna.species.id == "guilmon") - explanation_text += "digital claws " - else if(H.dna.species.id == "lizard") - explanation_text += "slimy claws " - else if(H.dna.species.id == "datashark") - explanation_text += "glitchy hands " - else if(H.dna.species.id == "insect") - explanation_text += "gross grabbers " - else - explanation_text += "grubby hands " - explanation_text += "on a space suit." replace this if you're making this monstrosity work */ - -/datum/objective/crew/pwrgame/check_completion() - if(owner && owner.current) - for(var/tidegarbtypes in typesof(targettidegarb)) - if(owner.current.check_contents_for(tidegarbtypes)) - return TRUE - return FALSE - -/datum/objective/crew/promotion //ported from Goon - explanation_text = "Have a non-assistant ID registered to you at the end of the shift." - jobs = "assistant" - -/datum/objective/crew/promotion/check_completion() - if(owner && owner.current) - var/mob/living/carbon/human/H = owner.current - var/obj/item/card/id/theID = H.get_idcard() - if(istype(theID)) - if(!(H.get_assignment() == "Assistant") && !(H.get_assignment() == "No id") && !(H.get_assignment() == "No job")) - return TRUE - return FALSE diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm deleted file mode 100644 index f01c887c9f..0000000000 --- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm +++ /dev/null @@ -1,33 +0,0 @@ -/* COMMAND OBJECTIVES */ - -/datum/objective/crew/caphat //Ported from Goon - explanation_text = "Don't lose your hat." - jobs = "captain" - -/datum/objective/crew/caphat/check_completion() - if(owner && owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat)) - return TRUE - else - return FALSE - -/datum/objective/crew/datfukkendisk //Ported from old Hippie - explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." - jobs = "captain" //give this to other heads at your own risk. - -/datum/objective/crew/datfukkendisk/check_completion() - if(owner && owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return TRUE - else - return FALSE - -/datum/objective/crew/ian //Ported from old Hippie - explanation_text = "Defend Ian at all costs, and ensure he gets delivered to Centcom at the end of the shift." - jobs = "headofpersonnel" - -/datum/objective/crew/ian/check_completion() - if(owner && owner.current) - for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in GLOB.mob_list) - if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)]) - return TRUE - return FALSE - return FALSE diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm deleted file mode 100644 index 44d961e9c3..0000000000 --- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm +++ /dev/null @@ -1,34 +0,0 @@ -/* ENGINEERING OBJECTIVES */ - -/datum/objective/crew/integrity //ported from old Hippie - explanation_text = "Ensure the station's integrity rating is at least (Yo something broke, yell on the development discussion channel of citadels discord about this)% when the shift ends." - jobs = "chiefengineer,stationengineer" - -/datum/objective/crew/integrity/New() - . = ..() - target_amount = rand(60,95) - update_explanation_text() - -/datum/objective/crew/integrity/update_explanation_text() - . = ..() - explanation_text = "Ensure the station's integrity rating is at least [target_amount]% when the shift ends." - -/datum/objective/crew/integrity/check_completion() - var/datum/station_state/end_state = new /datum/station_state() - end_state.count() - var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) - if(!SSticker.mode.station_was_nuked && station_integrity >= target_amount) - return TRUE - else - return FALSE - -/datum/objective/crew/poly - explanation_text = "Make sure Poly keeps his headset, and stays alive until the end of the shift." - jobs = "chiefengineer" - -/datum/objective/crew/poly/check_completion() - for(var/mob/living/simple_animal/parrot/Poly/dumbbird in GLOB.mob_list) - if(!(dumbbird.stat == DEAD) && dumbbird.ears) - if(istype(dumbbird.ears, /obj/item/radio/headset)) - return TRUE - return FALSE diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm deleted file mode 100644 index aad6e95df4..0000000000 --- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm +++ /dev/null @@ -1,86 +0,0 @@ -/* MEDICAL OBJECTIVES */ - -/datum/objective/crew/morgue //Ported from old Hippie - explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." - jobs = "chiefmedicalofficer,geneticist,medicaldoctor" - -/datum/objective/crew/morgue/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.z == SSmapping.station_start) - if(get_area(H) != /area/medical/morgue) - return FALSE - return TRUE - -/datum/objective/crew/chems //Ported from old Hippie - var/targetchem = "none" - var/datum/reagent/chempath - explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends." - jobs = "chiefmedicalofficer,chemist" - -/datum/objective/crew/chems/New() - . = ..() - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingadrenaline, /datum/reagent/medicine/changelinghaste) - var/drugs = typesof(/datum/reagent/drug) - blacklist - var/meds = typesof(/datum/reagent/medicine) - blacklist - var/chemlist = drugs + meds - chempath = pick(chemlist) - targetchem = initial(chempath.id) - update_explanation_text() - -/datum/objective/crew/chems/update_explanation_text() - . = ..() - explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." - -/datum/objective/crew/chems/check_completion() - if(owner.current) - if(!owner.current.stat == DEAD && owner.current.reagents) - if(owner.current.reagents.has_reagent(targetchem)) - return TRUE - else - return FALSE - -/datum/objective/crew/druglordchem //ported from old Hippie with adjustments - var/targetchem = "none" - var/datum/reagent/chempath - var/chemamount = 0 - explanation_text = "Have at least (somethin broke here) pills containing at least (like really broke) units of(report this on the development discussion channel of citadel's discord) when the shift ends." - jobs = "chemist" - -/datum/objective/crew/druglordchem/New() - . = ..() - target_amount = rand(5,50) - chemamount = rand(1,20) - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol) - var/drugs = typesof(/datum/reagent/drug) - blacklist - var/chemlist = drugs - chempath = pick(chemlist) - targetchem = initial(chempath.id) - update_explanation_text() - -/datum/objective/crew/druglordchem/update_explanation_text() - . = ..() - explanation_text = "Have at least [target_amount] pills containing at least [chemamount] units of [initial(chempath.name)] when the shift ends." - -/datum/objective/crew/druglordchem/check_completion() - var/pillcount = target_amount - if(owner.current) - if(owner.current.contents) - for(var/obj/item/reagent_containers/pill/P in owner.current.get_contents()) - if(P.reagents.has_reagent(targetchem, chemamount)) - pillcount-- - if(pillcount <= 0) - return TRUE - else - return FALSE - -/datum/objective/crew/noinfections - explanation_text = "Make sure there are no crew members with harmful diseases at the end of the shift." - jobs = "virologist" - -/datum/objective/crew/noinfections/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD) - if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(H.check_virus() == 2) - return FALSE - return TRUE diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm deleted file mode 100644 index fb260583fd..0000000000 --- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm +++ /dev/null @@ -1,45 +0,0 @@ -/* SCIENCE OBJECTIVES */ - -/datum/objective/crew/cyborgs //Ported from old Hippie - explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends." - jobs = "researchdirector,roboticist" - -/datum/objective/crew/cyborgs/New() - . = ..() - target_amount = rand(3,10) - update_explanation_text() - -/datum/objective/crew/cyborgs/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends." - -/datum/objective/crew/cyborgs/check_completion() - var/borgcount = target_amount - for(var/mob/living/silicon/robot/R in GLOB.alive_mob_list) - if(!(R.stat == DEAD)) - borgcount-- - if(borgcount <= 0) - return TRUE - else - return FALSE - -/datum/objective/crew/research //inspired by old hippie's research level objective. should hopefully be compatible with techwebs when that gets finished. hopefully. should be easy to update in the event that it is incompatible with techwebs. - var/datum/design/targetdesign - explanation_text = "Make sure the research required to produce a (something broke, yell on citadel's development discussion channel about this) is available on the R&D server by the end of the shift." - jobs = "researchdirector,scientist" - -/datum/objective/crew/research/New() - . = ..() - targetdesign = pick(subtypesof(/datum/design)) - update_explanation_text() - -/datum/objective/crew/research/update_explanation_text() - . = ..() - explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift." - -/datum/objective/crew/research/check_completion() - for(var/obj/machinery/rnd/server/S in GLOB.machines) - if(S && S.stored_research) - if(S.stored_research.researched_designs[initial(targetdesign.id)]) - return TRUE - return FALSE diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm deleted file mode 100644 index 8906c268d2..0000000000 --- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm +++ /dev/null @@ -1,23 +0,0 @@ -/* SECURITY OBJECTIVES */ - -/datum/objective/crew/enjoyyourstay - explanation_text = "Enforce Space Law to the best of your ability." - jobs = "headofsecurity,securityofficer,warden,detective" - -/datum/objective/crew/enjoyyourstay/check_completion() - if(owner && owner.current) - if(owner.current.stat != DEAD) - return TRUE - return FALSE - -/datum/objective/crew/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." - jobs = "lawyer" - -/datum/objective/crew/justicecrew/check_completion() - if(owner && owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !(M.assigned_role == "Security Officer") && !(M.assigned_role == "Detective") && !(M.assigned_role == "Head of Security") && !(M.assigned_role == "Lawyer") && !(M.assigned_role == "Warden") && get_area(M.current) != typesof(/area/security)) - return FALSE - return TRUE diff --git a/modular_citadel/code/modules/cargo/packs.dm b/modular_citadel/code/modules/cargo/packs.dm deleted file mode 100644 index 6d39a51a76..0000000000 --- a/modular_citadel/code/modules/cargo/packs.dm +++ /dev/null @@ -1,28 +0,0 @@ -//supply packs - -/datum/supply_pack/misc/kinkmate - name = "Kinkmate construction kit" - cost = 2000 - contraband = TRUE - contains = list(/obj/item/vending_refill/kink, /obj/item/circuitboard/machine/kinkmate) - crate_name = "Kinkmate construction kit" - - -//Food and livestocks - -/datum/supply_pack/organic/critter/kiwi - name = "Space kiwi Crate" - cost = 2000 - contains = list( /mob/living/simple_animal/kiwi) - crate_name = "space kiwi crate" - - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Miscellaneous /////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/misc/jukebox - name = "Jukebox" - cost = 35000 - contains = list(/obj/machinery/jukebox) - crate_name = "Jukebox" diff --git a/modular_citadel/code/modules/crafting/recipes.dm b/modular_citadel/code/modules/crafting/recipes.dm deleted file mode 100644 index 6c6001b040..0000000000 --- a/modular_citadel/code/modules/crafting/recipes.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/crafting_recipe/toyneb - name = "Non-Euplastic Blade" - reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4) - result = /obj/item/toy/sword/cx - category = CAT_MISC - -/datum/crafting_recipe/potatos - name = "Potat-OS" - reqs = list(/obj/item/stack/cable_coil = 1, /obj/item/stack/rods = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/aicard = 1 ) - result = /obj/item/aicard/potato - category = CAT_ROBOT \ No newline at end of file diff --git a/modular_citadel/code/modules/mining/mine_items.dm b/modular_citadel/code/modules/mining/mine_items.dm deleted file mode 100644 index d2cd1f2aa3..0000000000 --- a/modular_citadel/code/modules/mining/mine_items.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/machinery/computer/shuttle/mining - req_access = list(ACCESS_MINING) \ No newline at end of file diff --git a/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm b/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm deleted file mode 100644 index c3514719f6..0000000000 --- a/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm +++ /dev/null @@ -1,306 +0,0 @@ -//Sprites are trademarks of Gamefreak, Nintendo, The Pokemon Company, and Spike Chunsoft. -#define ispokemon(A) (istype(A, /mob/living/simple_animal/pokemon)) -//POKEBALL -/obj/item/pokeball - name = "pokeball" - icon = 'icons/obj/pokeball.dmi' - icon_state = "pokeball" - force = 0 - throwforce = 0 - var/success_chance = 25 - var/pokemon -/obj/item/pokeball/great - name = "great ball" - icon_state = "pokeball_great" - success_chance = 50 -/obj/item/pokeball/ultra - icon_state = "pokeball_ultra" - name = "ultra ball" - success_chance = 75 -/obj/item/pokeball/master - icon_state = "pokeball_master" - name = "master ball" - success_chance = 100 -/* //WIP -/obj/item/pokeball/throw_impact(atom/hit_atom) - if(ispokemon(hit_atom)) - var/mob/living/simple_animal/pokemon/pmon = hit_atom - var/initial_success_chance = success_chance - pmon.resize = 0.1 - pmon.color = "RED" - pmon.canmove = 0 - sleep(15) - if(pmon.pokeball == src) - pmon.loc = src - pokemon = pmon - - return 1 - if(pmon.pokeball && pmon.pokeball !=src) - return ..() - var/bonus_chance = ((pmon.maxHealth - pmon.health) / 2) - if(bonus_chance > 100) - bonus_chance = 100 - success_chance = (success_chance + bonus_chance) - if(success_chance > 100) - success_chance = 100 - if(success_chance < 0)//just in case - success_chance = 0 - sleep(15) - if(prob(success_chance)) - visible_message("[src] shakes...") - else - escape() - sleep(15) - if(prob(success_chance)) - visible_message("[src] shakes...") - else - escape() - sleep(15) - if(prob(success_chance)) - visible_message("[src] shakes...") - else - escape() - else - ..() -/obj/item/pokeball/proc/capture(mob/living/simple_animal/pokemon/pmon, mob/living/user) - -/obj/item/pokeball/proc/escape(mob/living/simple_animal/pokemon/pmon, mob/living/user) - if(!pokemon) - return - pmon.resize = 10 - pmon.color = null - pmon.canmove = 1 - pmon.loc = src.loc - if(pmon.pokeball != src) - visible_message("[pmon] breaks free from [src]") - PoolOrNew(/obj/effect/particle_effect/sparks, loc) - playsound(src.loc, "sparks", 50, 1) - qdel(src) - - else -/obj/item/pokeball/proc/recall -/obj/item/pokeball/proc/release -*/ -/mob/living/simple_animal/pokemon - name = "eevee" - icon_state = "eevee" - icon_living = "eevee" - icon_dead = "eevee_d" - desc = "Gotta catch 'em all!" - icon = 'icons/mob/pokemon.dmi' - var/pokeball - pixel_x = -16 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5) - ventcrawler = 2 - health = 100 - maxHealth = 100 - layer = 4 - response_help = "pets" - wander = 1 - turns_per_move = 2 - pass_flags = PASSTABLE | PASSMOB - -/mob/living/simple_animal/pokemon/proc/simple_lay_down() - set name = "Rest" - set category = "IC" - - resting = !resting - src << "You are now [resting ? "resting" : "getting up"]." - update_canmove() - update_icon() - -/mob/living/simple_animal/pokemon/proc/update_icon() - if(lying || resting || sleeping) - icon_state = "[icon_state]_rest" - else - icon_state = "[icon_living]" - -/mob/living/simple_animal/pokemon/New() - ..() - verbs += /mob/living/simple_animal/pokemon/proc/simple_lay_down - -/* -/////TEMPLATE///// - -/mob/living/simple_animal/pokemon/ - name = "" - icon_state = "" - icon_living = "" - icon_dead = "" -*/ - -/mob/living/simple_animal/pokemon/leg - icon = 'icons/mob/legendary.dmi' - pixel_x = -32 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 12) - health = 200 - maxHealth = 200 - - -/mob/living/simple_animal/pokemon/leg/articuno - name = "Articuno" - icon_state = "articuno" - icon_living = "articuno" - icon_dead = "articuno_d" - flying = 1 - -/mob/living/simple_animal/pokemon/leg/rayquaza - name = "Rayquaza" - icon_state = "rayquaza" - icon_living = "rayquaza" - icon_dead = "rayquaza_d" - flying = 1 - -//ALPHABETICAL PLEASE - -/mob/living/simple_animal/pokemon/absol - name = "absol" - icon_state = "absol" - icon_living = "absol" - icon_dead = "absol_d" - speak = list("Absol!", "Ab-Absol!") - -/mob/living/simple_animal/pokemon/aggron - name = "aggron" - icon_state = "aggron" - icon_living = "aggron" - icon_dead = "aggron_d" - -/mob/living/simple_animal/pokemon/ampharos - name = "ampharos" - icon_state = "ampharos" - icon_living = "ampharos" - icon_dead = "ampharos_d" - -/mob/living/simple_animal/pokemon/charmander - name = "charmander" - icon_state = "charmander" - icon_living = "charmander" - icon_dead = "charmander_d" - -/mob/living/simple_animal/pokemon/ditto - name = "ditto" - icon_state = "ditto" - icon_living = "ditto" - icon_dead = "ditto_d" - -/mob/living/simple_animal/pokemon/dratini/dragonair - name = "dragonair" - desc = "A Dragonair stores an enormous amount of energy inside its body. It is said to alter the weather around it by loosing energy from the crystals on its neck and tail." - icon_state = "dragonair" - icon_living = "dragonair" - icon_dead = "dragonair_d" - -/mob/living/simple_animal/pokemon/dratini/dragonair/dragonite - name = "dragonite" - desc = "It can circle the globe in just 16 hours. It is a kindhearted Pokémon that leads lost and foundering ships in a storm to the safety of land." - icon_state = "dragonite" - icon_living = "dragonite" - icon_dead = "dragonite_d" - -/mob/living/simple_animal/pokemon/dratini - name = "dratini" - desc = "A Dratini continually molts and sloughs off its old skin. It does so because the life energy within its body steadily builds to reach uncontrollable levels." - icon_state = "dratini" - icon_living = "dratini" - icon_dead = "dratini_d" - -/mob/living/simple_animal/pokemon/eevee - name = "eevee" - desc = "Eevee has an unstable genetic makeup that suddenly mutates due to its environment. Radiation from various stones causes this Pokémon to evolve." - icon_state = "eevee" - icon_living = "eevee" - icon_dead = "eevee_d" - speak = list("Eevee!", "Ee-Eevee!") - response_help = "pets" - response_harm = "hits" - -/mob/living/simple_animal/pokemon/eevee/espeon - name = "espeon" - desc = "Espeon is extremely loyal to any trainer it considers to be worthy. It is said to have developed precognitive powers to protect its trainer from harm." - icon_state = "espeon" - icon_living = "espeon" - icon_dead = "espeon_d" - -/mob/living/simple_animal/pokemon/flaaffy - name = "flaaffy" - icon_state = "flaaffy" - icon_living = "flaaffy" - icon_dead = "flaaffy_d" - -/mob/living/simple_animal/pokemon/eevee/flareon - name = "flareon" - desc = "Flareon's fluffy fur releases heat into the air so that its body does not get excessively hot. Its body temperature can rise to a maximum of 1,650 degrees F." - icon_state = "flareon" - icon_living = "flareon" - icon_dead = "flareon_d" - speak = list("Flare!", "Flareon!") - -/mob/living/simple_animal/pokemon/eevee/glaceon - name = "glaceon" - desc = "By controlling its body heat, it can freeze the atmosphere around it to make a diamond-dust flurry." - icon_state = "glaceon" - icon_living = "glaceon" - icon_dead = "glaceon_d" - speak = list("Glace!", "Glaceon!") - -/mob/living/simple_animal/pokemon/eevee/jolteon - name = "jolteon" - desc = "Its cells generate weak power that is amplified by its fur's static electricity to drop thunderbolts. The bristling fur is made of electrically charged needles." - icon_state = "jolteon" - icon_living = "jolteon" - icon_dead = "jolteon_d" - speak = list("Jolt!", "Jolteon!") - -/mob/living/simple_animal/pokemon/larvitar - name = "larvitar" - desc = "It is born deep underground. It can't emerge until it has entirely consumed the soil around it." - icon_state = "larvitar" - icon_living = "larvitar" - icon_dead = "larvitar_d" - -/mob/living/simple_animal/pokemon/mareep - name = "mareep" - icon_state = "mareep" - icon_living = "mareep" - icon_dead = "mareep_d" - -/mob/living/simple_animal/pokemon/poochyena/mightyena - name = "mightyena" - icon_state = "mightyena" - icon_living = "mightyena" - icon_dead = "mightyena" - -/mob/living/simple_animal/pokemon/miltank - name = "miltank" - icon_state = "miltank" - icon_living = "miltank" - icon_dead = "miltank_d" - -/mob/living/simple_animal/pokemon/poochyena - name = "poochyena" - icon_state = "poochyena" - icon_living = "poochyena" - icon_dead = "poochyena_d" - -/mob/living/simple_animal/pokemon/eevee/sylveon - name = "Sylveon" - desc = "Sylveon, the Intertwining Pokémon. Sylveon affectionately wraps its ribbon-like feelers around its Trainer's arm as they walk together." - icon_state = "sylveon" - icon_living = "sylveon" - icon_dead = "sylveon_d" - speak = list("Sylveon!", "Syl!") - response_help = "pets" - response_harm = "hits" - -/mob/living/simple_animal/pokemon/eevee/umbreon - name = "umbreon" - icon_state = "umbreon" - icon_dead = "umbreon_d" - icon_living = "umbreon" - -/mob/living/simple_animal/pokemon/vulpix - name = "vulpix" - icon_state = "vulpix" - icon_living = "vulpix" - icon_dead = "vulpix_d" diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dm deleted file mode 100644 index c0ddaceaf7..0000000000 --- a/modular_citadel/code/modules/research/techweb/all_nodes.dm +++ /dev/null @@ -1,36 +0,0 @@ -/datum/techweb_node/bluespace_basic/New() - . = ..() - design_ids += "xenobio_monkeys" - -/datum/techweb_node/practical_bluespace/New() - . = ..() - design_ids += "xenobio_slimebasic" - -/datum/techweb_node/adv_bluespace/New() - . = ..() - design_ids += "xenobio_slimeadv" - -/datum/techweb_node/ballistic_weapons/New() - . = ..() - design_ids += "mag_oldsmg_rubber" - -/datum/techweb_node/computer_board_gaming - id = "computer_board_gaming" - display_name = "Games and Toys" - description = "For the slackers on the station." - prereq_ids = list("comptech") - design_ids = list("arcade_battle", "arcade_orion", "arcade_minesweeper", "slotmachine", "autoylathe") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - export_price = 5000 - -/datum/techweb_node/ballistic_weapons - design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic", "mag_oldsmg_tx") - -/datum/techweb_node/advanced_illegl_ballistics - id = "advanced_illegal_ballistics" - display_name = "Advanced Illegal Ballistics" - description = "Advanced Ballistic for Illegal weaponds." - design_ids = list("10mm","10mmap","10mminc","10mmhp","pistolm9mm","m45","bolt_clip") - prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space. - export_price = 7000 diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm deleted file mode 100644 index d968cfdcc7..0000000000 --- a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm +++ /dev/null @@ -1,33 +0,0 @@ -/datum/techweb_node/bluespace_basic/New() - . = ..() - design_ids += "xenobio_monkeys" - -/datum/techweb_node/practical_bluespace/New() - . = ..() - design_ids += "xenobio_slimebasic" - -/datum/techweb_node/adv_bluespace/New() - . = ..() - design_ids += "xenobio_slimeadv" - -/datum/techweb_node/ballistic_weapons/New() - . = ..() - design_ids += "mag_oldsmg_rubber" - -/datum/techweb_node/computer_board_gaming - id = "computer_board_gaming" - display_name = "Games and Toys" - description = "For the slackers on the station." - prereq_ids = list("comptech") - design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - export_price = 5000 - -/datum/techweb_node/advanced_illegl_ballistics - id = "advanced_illegal_ballistics" - display_name = "Advanced Illegal Ballistics - description = "Advanced Ballistic for Illegal weaponds." - design_ids = list("10mm","10mmap","10mminc","10mmhp","9mm","point_45","bolt_clip") - prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space. - export_price = 7000 diff --git a/modular_citadel/icons/misc/misc.dmi b/modular_citadel/icons/misc/misc.dmi deleted file mode 100644 index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf diff --git a/modular_citadel/icons/mob/citadel/glasses.dmi b/modular_citadel/icons/mob/citadel/glasses.dmi deleted file mode 100644 index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf diff --git a/modular_citadel/icons/mob/citadel/head.dmi b/modular_citadel/icons/mob/citadel/head.dmi deleted file mode 100644 index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf diff --git a/modular_citadel/icons/mob/citadel/masks.dmi b/modular_citadel/icons/mob/citadel/masks.dmi deleted file mode 100644 index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf diff --git a/modular_citadel/icons/mob/citadel/shoes.dmi b/modular_citadel/icons/mob/citadel/shoes.dmi deleted file mode 100644 index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf diff --git a/modular_citadel/icons/mob/werenerd.dmi b/modular_citadel/icons/mob/werenerd.dmi deleted file mode 100644 index 706d4248f891a0b8e0e4d3571d989724e5b8ed2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131353 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 buqSxjO*?UD96_I%| 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 diff --git a/modular_citadel/icons/obj/structures.dmi b/modular_citadel/icons/obj/structures.dmi deleted file mode 100644 index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf From 6a36e5a3170f7b25b59a3a80a15e7494a8c31447 Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Thu, 12 Sep 2019 23:26:07 -0400 Subject: [PATCH 29/79] huh --- code/modules/clothing/glasses/vg_glasses.dm | 5 ---- code/modules/clothing/head/vg_hats.dm | 26 --------------------- code/modules/clothing/masks/vg_masks.dm | 3 --- 3 files changed, 34 deletions(-) diff --git a/code/modules/clothing/glasses/vg_glasses.dm b/code/modules/clothing/glasses/vg_glasses.dm index 449b34b22e..a51a03242c 100644 --- a/code/modules/clothing/glasses/vg_glasses.dm +++ b/code/modules/clothing/glasses/vg_glasses.dm @@ -6,21 +6,18 @@ name = "purple sunglasses" icon_state = "sun_purple" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' /obj/item/clothing/glasses/sunglasses/star name = "star-shaped sunglasses" desc = "Novelty sunglasses, both lenses are in the shape of a star." icon_state = "sun_star" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' /obj/item/clothing/glasses/sunglasses/rockstar name = "red star-shaped sunglasses" desc = "Novelty sunglasses with a fancy silver frame and two red-tinted star-shaped lenses. You should probably stomp on them and get a pair of normal ones." icon_state = "sun_star_silver" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' /obj/item/clothing/glasses/gglasses name = "Green Glasses" @@ -28,7 +25,6 @@ icon_state = "gglasses" item_state = "gglasses" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' /obj/item/clothing/glasses/welding/superior name = "superior welding goggles" @@ -36,7 +32,6 @@ icon_state = "rwelding-g" item_state = "rwelding-g" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' actions_types = list(/datum/action/item_action/toggle) flash_protect = 2 tint = 1 diff --git a/code/modules/clothing/head/vg_hats.dm b/code/modules/clothing/head/vg_hats.dm index efeb5291db..dc245cd39a 100644 --- a/code/modules/clothing/head/vg_hats.dm +++ b/code/modules/clothing/head/vg_hats.dm @@ -1,4 +1,3 @@ - /obj/item/clothing/head/helmet/dredd name = "Judge Helmet" desc = "Judge, Jury, and Executioner." @@ -12,7 +11,6 @@ max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT strip_delay = 80 dog_fashion = null - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/helmet/aviatorhelmet name = "Aviator Helmet" @@ -21,15 +19,12 @@ item_state = "aviator_helmet" icon_state = "aviator_helmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/helmet/biker name = "Biker's Helmet" desc = "This helmet should protect you from russians and masked vigilantes." armor = list(melee = 25, bullet = 15, laser = 20, energy = 10, bomb = 10, bio = 0, rad = 0) icon_state = "biker_helmet" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR /obj/item/clothing/head/helmet/richard @@ -38,7 +33,6 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) icon_state = "richard" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR /obj/item/clothing/head/helmet/megahelmet @@ -47,7 +41,6 @@ icon_state = "megahelmet" item_state = "megahelmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' siemens_coefficient = 1 /obj/item/clothing/head/helmet/protohelmet @@ -56,7 +49,6 @@ icon_state = "protohelmet" item_state = "protohelmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' siemens_coefficient = 1 /obj/item/clothing/head/helmet/megaxhelmet @@ -65,7 +57,6 @@ icon_state = "megaxhelmet" item_state = "megaxhelmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/helmet/joehelmet name = "Sniper Helmet" @@ -74,7 +65,6 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR item_state = "joehelmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/helmet/doomguy name = "Doomguy's helmet" @@ -83,7 +73,6 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR item_state = "doom" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' armor = list(melee = 50, bullet = 40, laser = 40,energy = 40, bomb = 5, bio = 0, rad = 0) /obj/item/clothing/head/helmet/neorussian @@ -92,8 +81,6 @@ icon_state = "nr_helmet" item_state = "nr_helmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' - /obj/item/clothing/head/stalhelm name = "Stalhelm" @@ -101,7 +88,6 @@ icon_state = "stalhelm" item_state = "stalhelm" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/panzer name = "Panzer Cap" @@ -109,7 +95,6 @@ icon_state = "panzercap" item_state = "panzercap" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/naziofficer name = "Officer Cap" @@ -117,8 +102,6 @@ icon_state = "officercap" item_state = "officercap" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' - /obj/item/clothing/head/russobluecamohat name = "russian blue camo beret" @@ -133,7 +116,6 @@ icon_state = "russofurhat" item_state = "russofurhat" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/squatter_hat name = "slav squatter hat" @@ -141,7 +123,6 @@ item_state = "squatter_hat" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' desc = "Cyka blyat." - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/snake name = "snake head" @@ -149,8 +130,6 @@ icon_state = "snakehead" item_state = "snakehead" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' - /obj/item/clothing/head/mummy_rags name = "mummy rags" desc = "Ancient rags taken off from some mummy." @@ -158,7 +137,6 @@ item_state = "mummy" item_color = "mummy" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS /obj/item/clothing/head/clownpiece @@ -167,7 +145,6 @@ icon_state = "clownpiece" item_state = "clownpiece" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/mitre name = "mitre" @@ -175,7 +152,6 @@ icon_state = "mitre" item_state = "mitre" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/tinfoil name = "tinfoil hat" @@ -183,7 +159,6 @@ icon_state = "foilhat" item_state = "paper" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' siemens_coefficient = 2 /obj/item/clothing/head/celtic @@ -192,4 +167,3 @@ icon_state = "celtic_crown" item_state = "celtic_crown" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' diff --git a/code/modules/clothing/masks/vg_masks.dm b/code/modules/clothing/masks/vg_masks.dm index 7de27fb780..29b65a6b8e 100644 --- a/code/modules/clothing/masks/vg_masks.dm +++ b/code/modules/clothing/masks/vg_masks.dm @@ -3,18 +3,15 @@ desc = "Some pranksters are truly magical." icon_state = "wizzclown" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi' /obj/item/clothing/mask/chapmask name = "venetian mask" desc = "A plain porcelain mask that covers the entire face. Standard attire for particularly unspeakable religions. The eyes are wide shut." icon_state = "chapmask" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi' /obj/item/clothing/mask/neorussian name = "neo-Russian mask" desc = "Somehow, it makes you act and look way more polite than usual." icon_state = "nr_mask" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi' From 626e525d24c00fb36593638a8fde212af182944f Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Thu, 12 Sep 2019 23:36:59 -0400 Subject: [PATCH 30/79] ..? --- code/modules/clothing/head/cit_hats.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/clothing/head/cit_hats.dm b/code/modules/clothing/head/cit_hats.dm index 7b0e68264f..df4a21d6c1 100644 --- a/code/modules/clothing/head/cit_hats.dm +++ b/code/modules/clothing/head/cit_hats.dm @@ -4,4 +4,3 @@ icon = 'modular_citadel/icons/obj/clothing/cit_hats.dmi' icon_state = "hunter" item_state = "hunter_worn" - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' From 89360c3574bae697ecbfc218a472ccb5b66e90a0 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Sun, 15 Sep 2019 17:56:20 +0200 Subject: [PATCH 31/79] Fixes clown shoes and work boots. --- code/modules/clothing/shoes/miscellaneous.dm | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 4659de3e6a..e69e1e9a8e 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -70,9 +70,7 @@ desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" name = "clown shoes" icon_state = "clown" - item_state = "clown_shoes" slowdown = SHOES_SLOWDOWN+1 - item_color = "clown" pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown /obj/item/clothing/shoes/clown_shoes/Initialize() @@ -98,7 +96,6 @@ name = "jackboots" desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." icon_state = "jackboots" - item_state = "jackboots" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' item_color = "hosred" @@ -115,7 +112,6 @@ name = "winter boots" desc = "Boots lined with 'synthetic' animal fur." icon_state = "winterboots" - item_state = "winterboots" permeability_coefficient = 0.15 cold_protection = FEET|LEGS min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT @@ -127,7 +123,6 @@ name = "work boots" desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar." icon_state = "workboots" - item_state = "jackboots" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' permeability_coefficient = 0.15 @@ -145,7 +140,6 @@ name = "\improper Nar'Sien invoker boots" desc = "A pair of boots worn by the followers of Nar'Sie." icon_state = "cult" - item_state = "cult" item_color = "cult" cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT @@ -178,7 +172,6 @@ name = "roman sandals" desc = "Sandals with buckled leather straps on it." icon_state = "roman" - item_state = "roman" strip_delay = 100 equip_delay_other = 100 permeability_coefficient = 0.9 @@ -187,14 +180,12 @@ name = "griffon boots" desc = "A pair of costume boots fashioned after bird talons." icon_state = "griffinboots" - item_state = "griffinboots" pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes /obj/item/clothing/shoes/bhop name = "jump boots" desc = "A specialized pair of combat boots with a built-in propulsion system for rapid foward movement." icon_state = "jetboots" - item_state = "jetboots" item_color = "hosred" resistance_flags = FIRE_PROOF pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes @@ -252,7 +243,6 @@ name = "Wheely-Heels" desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel icon_state = "wheelys" - item_state = "wheelys" actions_types = list(/datum/action/item_action/wheelys) var/wheelToggle = FALSE //False means wheels are not popped out var/obj/vehicle/ridden/scooter/wheelys/W @@ -291,7 +281,6 @@ name = "Kindle Kicks" desc = "They'll sure kindle something in you, and it's not childhood nostalgia..." icon_state = "kindleKicks" - item_state = "kindleKicks" actions_types = list(/datum/action/item_action/kindleKicks) var/lightCycle = 0 var/active = FALSE From 300c572886754248a3efeeb86d89310663cb5407 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Sun, 15 Sep 2019 18:21:48 +0200 Subject: [PATCH 32/79] Added work boots and bananium clown shoes inhands, more fixes. ready. --- code/modules/clothing/shoes/miscellaneous.dm | 2 +- icons/mob/feet.dmi | Bin 16784 -> 16784 bytes icons/mob/inhands/clothing_lefthand.dmi | Bin 71974 -> 73569 bytes icons/mob/inhands/clothing_righthand.dmi | Bin 71747 -> 73091 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index e69e1e9a8e..1a213b2d7a 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -69,7 +69,7 @@ /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" name = "clown shoes" - icon_state = "clown" + icon_state = "clown_shoes" slowdown = SHOES_SLOWDOWN+1 pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index e7598f35c9078077446fbd6a32fd94640c179168..118688aaba03009a68f0dfb29a7f67b92a5f06fa 100644 GIT binary patch delta 265 zcmV+k0rviog8`6(0gz|{?9`EJPDyU)B9_$V5kYQC;N`C2uO*ocHewzXJx|t6x}kK@ zx=B`qC5Z~jra>Owh3!ShxKhY0F9S=5o5*H6bcmdH82!VKw0zVquJV78{Vac<#n~#x z`?**B4Uo5Q{du;7T=C-MdU;DefU4vdm8)JdYawLhZGjg1t7%w`$az6FjoI(-9-r^N zD|2<`-&H9gF_12z3X(F+1`2&2k`jN0Y3oT24@YaZ9!L#$n%Muss{DXIOGMI~A)=cK z($q46^@`^LSU0mRhcw7(s8c9WqfU?+Ncq&35g=}|n?mvteg`*QwYTQ=<6sW&$NC># P=8E3@=lEE&)B(IdW4MJm delta 266 zcmV+l0rmcng8`6(0gz|{oZ69UPDMV@MJ!2F1YSNb{Iw*r!A8s@$W5NCn{?yoqIHw3 zNYg2jO@lnP3)_p1aix%1UIUg6H<8VD=ny&YF#3ldY57;XxXOK#0Rb$3W^uNP@qX@A ze*@(0TYsMIAXmINxnACq51=afMdhk4VoB{n$jI9QE%sM)uo{u`f@~VI-`_nx-+fo+ z>de2ZQbJ-NT|^ZmWta^V`aUEj{tVOBlN=t7)@(hH8tyc)|Akfg0e_Z=r1^)4ZYoGq z%LLXdo(o{z%(fiTAg7@$PDPD6L1v&fkEnR|$_NlQ*-at&2)~1yuG(Ak`f)Ia_hbDJ QBf*GW*2FFZv(y2+KlA2+umAu6 diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi index 2b39acd3d88bdcc946eb6d3d5def954138ed742c..90d96492f22270439e786950e7af9e8372e05107 100644 GIT binary patch literal 73569 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 literal 71974 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
i*CGZ=f8(-%6nY6I3w{ub5 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 YV0*KV7?sDxP6QCer>b&APfR}iFZg)>82|tP diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi index ef6c9b3f062ce4746eae778686fea276d9373f4b..c5e10b01dfbf691a2f5272b95ca6f094eb25be90 100644 GIT binary patch literal 73091 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

wvRYqS&biIu~p(-`3CLna| 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

1szRbZPX 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 OKKC?q)Qi+CUi=S0%2y-+ literal 71747 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

Gu$*Eac z<4bfJ5h>PvU&6tvSR=MCe%+4LPr9DmXQQA9+WS}9t>q}Z{qU?t#NT(YxF&YMF7)Zi z)nX|c<<>W>dDcl^vv{(ylp|di(?G3LYNB z!P@oJmc7J2*a=ne@Vv24PJ?IIak%%1)$eCGTyyxBV`@=Iet}r*endnO+^2dw#hq}& z0ZM?h2{|pBI$8@v*d2y*Rm_u#u z^C@>OyBz$}rrs4Zn$(fS#tJ&mPg@*EgU$~NXxWjVC*v5YoCxOA-4>BAe#AFg4~ue5Ze-5i%p zPr61`s8BwxC~ zNXuYo*;g|0r7rvGme5J__8fPxEKOY(_;4pYX=Zor9AThanWvW~8#p(r?X`Y@s3%0A=+Dgxlr$4* zWwh5VW|!4P6#*_HJ%jHmeVV4*;-7AOKE&B~^Bgrd=w|E&;VIF-;!kdMdw;CM!{S6W{hX-bQQDxjQ#adxFM}l6j6z z;QYh`Rf97=Frn*q=u&PQsU>4UrlqkQ6(jtb#htg@&}W>E30~^Pz4C}Jk*eeT&HFry zmt+K|R-w&a`ejC3xm`!?SD_b2LD!UnZIPT>vWP{=&5|!-?rL+Xp<@QBW$;&`gX+ZV z(wQZ^sDa_Ccf*0#=Hk|LW&PSh@7W0TYnd!MXWAdeE}cDZHy^sFIQDIA zwha=vtOSe%T#9#25Dv)4x*mX`r*jk!NUu=(MF`i3p6Chlg*30c594EkIH>^ zm%i_Me?RZAHqA|k<;idCKA}&2$=|I#LH~f!@ph`#T1f==s)HSqEhM@M`(6xwA%=*n z>XFo$1YihspU#ZE{0 z^tXSglD_cJ=YSz%ITL8?IeoNIohLv6*&s9Fn6XoCn9+3R2z+&%F|1187FNq#-8=Zb z*6P(HBpxJVU#;C4xL^#(hwd6yfkYD3(tQFn?G}l7kdMsN{z`H{Ec$a=Z{rB8 zmLF3@bn_dw)u?elQg>`gO@a`5r9G57!8;^sT={IoD8ny)Z8zwh1JdW}_?Zlm?VqE-HZhkeT(U=>KN(d(bhq5fErbiu69Fff#A_uF#mk_ffwg*qz<2xO|> zGg(|+Vuow2@9+&*T)9DkDPY$DD<0ySIy$Q$F9mRVjk{P#h2EIstdE7zG4Z@qQci5D zW__N#+fl)BP4ci7hH@(7O-0!`Hz-zY*x9lzU8{aG$ygNab%}i*SSGIBle*gd(;HGt z*G&3}rSnE3NB;yr{#kMv(euFF7KBnz2<2+fcQ8+v5=`0t@Ov+!I2hxwf3n$>3NHT} z0l?;E3OpF5es4GF)E+WuTpfFn$k+PEqbiwm4rkRnQ=31W1Nc*~hH?s)uL2c9Zcnztk1CCwuh@_9`7_Z3H>5 z$Tcr$(}0(@Av!2L;2qLGR}ORbN5=r_vV<@O%r&MUz`- zCt)Z`IDH4m)BhY}_?;+6GyrH}=n>r5sk)j;PM=o-X5m5lsnaX)p2@PV^>1tW7g_GZ zNXto@qP)H!Lxrk!QF3M%AIxiTzh?XdMMQo*RG7D~jgTnd4*sgfX@-b2qx1hajL%`r zYK}h2abX0Ykf8K<|p8JRIOhSi$=3I2{Q*C!Ze=~kRY9BhscVi>6 z=>o(pxa7k1YY_1FDazxLpbqyT88D}QO}x#~GV*0W=sp&o>5MXLI(lp&UL{l&om_uy8(%-m7#Rk(q+qiYPf={fil`;=N68_ost1g1g^J7ySp@> zn<@WiaDegQ@aFe#_V@($4il>@@gMKXD@RGnMa?m8t#~c>ipv4l-@RjGO^JR(-IFxrtedP)vUM>x0*~Oe#01T{e~l*riL= zLr*&IDp9dck`}~vCsmjRc&_U`4?PppHn`h3fcd~hW>!SwFE~H4)K2l`4}*(6+T2dP z!m%RFrONn4r9rtatIKl*)ldb$&W6Q#5sjCcB+z)N-CvKZ=PqKJf4SVuHLtc%??O$X z;ku2Jy=a&7Gyhc;?NDpKP81@vf-uAGI50Ed&=4qbjCvEUS29%;izvr!-f)>rHx?kQ zpFTn+KP3BCg|43jzYa!*>0h8tJv~EWM4<2|G;Jaiv`hu=gV^?G0u9OFt*FHRC9R%= zVp%YVE2Da!H?RMKZd0sIns~4`mM}-YX0BgZ_|H^@m)o(4gxV`}22~H|$Vi$i49Yo|qa&Sng_n{KXCG%MHImWFN{VJs z0CD+37ikx+X2c`K{zI8K?S<%DgB2A1P9 zAj?6NZp?A-l5VUIU9ta-xexDJy+(O>cwlnO_Iw5Tt+p41%H|%Ef$Qe2^_-q4xLLVD z`5FV937yc5G(mf9P`^`4%^a#+Q9~>vZTnI;Dm2WhEe0RW^BHHB?Im8XI3DJnZ=Ty; zA8j4K2C0@g_0ah8ffx*uG_>EUDclF^g&>)`lz(0w@cC8+U!t?++r`M39(FsFv|tU^ zv{X`xXPNPW)E+8%9%AaZ)Q9vzrNcniP=ZdoV}&kKYAg^zUX=gaQ49-&aC;$hV;<8b zGId7G!ObU-(h&K-V~(+Jlw)>w_z(pOuB%E)V@uxNbpuc-*w<3X1Q;#0^8fe%VWeKD z{=+*W2yk`Wn_bd|1h3J;h zRbTTKRzT3GDBWZNlak|i6a<0GLP4yhWTF7>GPK&qR=w*;t4#@XqE4RF2IegfJ=PJr0!K8Uqa>UO%pCu>_d&)|g> zM6%imSZvg94?pdM68EE*)UlZ7RoFW+H_|yDScZ*#^Mad}rKZq?bZ>M}xE=LDKtBXfJZt%| zALbVczrDmUyU)MG5jVfI8P|jScV{lG;ics3h0FaQ<6eKI+wTBgXaW#$r?*_bJq{~9Ifa99pCbCKX~2IpE0=j!yImbGPJHaGB(I~ zYQ&B36z`~(!}67sZI=k5KDC>4f3$_HFfEv^sY`p%H{G;!&cfmFfy15lHgaI2MN(|JLI@w->goSS~=9KX1XI`g7- z(msMOUKsNJ$V`$bVeUU~f6lbgTFDOr>Nu2feI+6nB?%#6nEtO18tacmHawmX2Y*r{ z-y#ZF(}*bK;7siefDnW+L6DY|{zT8&(U!d}b=;04pnI8fQAOk81vW*67OxFQvoW^O zm4z@Lse^QP-|I0c@}amjBbK)wdJ=^FfLn$zsk<(`6ESIuie8YQ8+vEvF{=7VvNXa# z`x7ZbpHH4@-K1mV`1k^r363~GuGv+1&GfFpeEUFhCD!cd7l<5b77jrEwz^T7!p-}m z%H^DsFutbPXN-v~dpJ_|`K6CpdiWy;gzrKkZfgB+B%%5`#Fbz<3YNpo&hfx!$~xka zOZTQ|SH$I2oKO_dgMAE-Gpt?Cl*Ysko8HXWGRFIWI9M&ZDpL^~|D0{W2c# z&@~~Gv2L-vXJ3apc3(7-E%bTz5#E%$qZi*2RDa^Y>jcz>$k3k`ig`r_V1re&3RSFnsw5re%|C$L2O}x4NhFrD9)k03Kmb zP8a55E3?Pye6mop>-IgL)D?e01AVv5rNZ&n!8mR(XiK4=>c0=|KWN{4>MFMF|Kchp=2o3NK?SCJq^|wU0bazw;&hEEUCh6(CFGnGk zCqhXxjQRCQ{l70AHXdIL21un=$^;t79jB07GsPXWWaD`;$f zyp}%nYJgjH9U!TI1U^t!s6iZ-$k9S)EL@gr63d_q%TroZE5aq937sb2m&RAMnqz&I zjCYs2k}($Gvta;Zw4i*7iE-Z?{Bx$Z^rtmPPkV|v_~msOsaon$Z0cJtsT1#J!GX&U zhkVL0#>S~!kxjB)MQ68yr;g=C4}{HnYMnED9E*$e4xbq?Zl{uPt} zh?ELz>EDQH-hV!d48uyi7EzlBIC~j=S1G9a7VlAn+60}yxvsHHTw^tVvFI)FmX!8vs}KiWk()1%&Kh#;h(+`)gl$ z`VI6ycoBoM7a&BB22s3HNhEQ=Po@;eC89pM+Vro+^&zLvtG?-bmY9wJ^R~O|!~BWN z;VPo6#E$CT{GoINW{f?k#~h>u`X~s~Z9fdX9f$6PhkVn2O^tSgvt!y6vni6p8kS<% zrFSU$nf%5+av%*_MG46j?WJC2K;^hL!ws9)1IpZJ(3*>phriQ;>07EFO=EvPMtu7o zjq|gt_8Iu;(EVwANl0S5GboWy^Z0lfT8rIz<$2owwGb5X{ZElI`+p_Zw2C?%y=HcC z(XpGMvxCCy+ehIW9&SH||L0+9*ipKyY#Wlt*h2F_gHq5{OW z_35?j;@`R8kBtx~uV*SBIzO1Zy7;tPxuamD@Y0iY?G(OV&#=9kqe};l{Nhye6EO;P zF>&G$fN4s8_?b8j8c(wcH!U?u*rbI;t2;eJRvkaISib4z-7l$i6nU;jY>R2I#iZRA z-a0lt)%kMS(XFl(_w9gg2>;$o4_x5F0+U64L9zIVy~k|0=O3Sj6%!|_QpYod;f{iZ zaXm}22nC0tI7#bz?dFKflRhXcB!4Q?8NO13{LXhqn~o@WLBta|IurTxQs3VPYFYo$ z391y1GA!>pGz@PWoTA>^|5L=i(6Tz8D`Hs&omrrkpvbr4wQ(~6jojA(}4e=vl&dT!A4J{oaF>xHtip!QGr9WJit7uZd>55xI) z>eg6(ZF@g@ByPif6b>)0h4&+2=Z&(OJt~-%YnU76?;s(2+d`b-{0P%dmAjq1`p_YJ z)K0NWiXFvQg-V^Vf1GC5i^|FL`# zP;i0P7p?BWh&~5o>r}gQ0tfPW6H@S6B+G!N*Zj3uFkCPswt}u^PkUdFAU#4U8h1EWRV-r z3?e|#JW}s0ek7=w`Dd)4(>#9OA&UMF`2_~Vod-3SrIzN?epN-!e$G{cy{c0 z&^q{o3su`y($YgEG7kv8a&Y6T5B_OiHOLHR9UL?glwv{0^hC8}kQwfoo=~=W1=fm> z7`fw#ohCmlBllU`z>SCOkK_<%S8KptIK#QBjI%-5ZHwN|T$#DKm!LCM4X@z(L4 zh%?kp;`E)*VK?e^k>Km>(P!uP^1N=9{5<$~uX@xD+}mFrvc53Yv*e*!`V>Ii7#C%S zc#N?S#B8}-9MRplTZmSD&g&dSMj5Vo4rdg*8hmbb6c>=i`)s!N$TToP$}E~){rkbU zaD;S}z80MY`mvt)KYb|%gw1wZn9Y#*@a)=Cv$#Vbg{hwO0>5oQ>dEfuja%T-VtHep zz{71K9+SqYk&{H=#E&+6LUeBn6#_QTwrp!=_9^=g0bZc3*R~@Z92~~Ffz8@@x!NK9 zad#hBDz2Yl44Qa1Htu|W=2Ey;J1k&Wt{!0B8EB0^G#`&w%UZ4hJPu5cB}y$_2qd@Z zGq6p3R)QS2kI`(12W=@1F^G-W-^p5LiHFj0RBT&xMCe0;55>Ofg~paib86`~TYRZk zb4M_*zL5P`BU&O#;JD-k-PB1@L^y_n&Y=o?%3UoQD9oGjBb7}lz8ytuPjb@<7+Bcv zWePpuGkQ50KRTFucM8m}a36pA+(eyl=W@+lzmJbQm+Y@gWzjA9T--zF>OUh__vAjx zG~nu-pIatGr46@)T@C9WzdRFkiy6+O5EG-`(PaO~$-BEFQmw@Q`-akFxVD;Y>HBj; z?^bvGutp~C{<%70g5Qj63bB{{RZjeOGxa;If5HMRwsKr3zp%8`(pQ~(lZ5@zqeng` zm@ttC6;k4gHQiyi=Ui*oFNm8^R*N3qo!83I&MeL(7hnzn^{i3%-lelGN+5Q`rUkA~ za;7n^?{m~GAMEZ9L_sVMigpF}_3 zr&pTY0|xw!*B)<;^N6r!EqlG^gg|r#iT7e3K+++XNlIg1PL@xK+n(rIk7V^~*A5!qOP8kF4XBtu7z`nXPF5?XO{+qCq zDEm;`Eql1bYWliLLbs)3W`aDSxtMFpQl=mppa?C=Vuc)x}2{8YxQ!|9OD{wwE zx2sT{x0nTj?6P9{+B80|0TbC_BBh~k9Nm^_A+J!QJDK|M@$_mPOx4~Jh!6DNEpmu5 zUS_Vz)MM*S9pokiQC&pWK9Hovf>5&DImFIf zL(!n2ZJ>FfZlezHS-Rzdh*VYEr6bohpjA=qcIuQyC(vLLPB7_S7Y=qjdpiRxjK!~g z;NnPSUD))?7*u)Z%C__cD%uwdY3iD!Yd!1>Dm-*V*<>)c&RP>_AS;2@=3+2X2)TQ6 zX{lqboalA8KH?7a?alt zq44NK&hkO1X=z04o~|xzbn<_vjkXxe*90qE+`qG?$)xhS?TXXT2G#1{HkIiPY?_8d z{y(Bz`ak&OTyOz?)iz(pzi2I?!yj}vOHn-9#$y)sD5d5cnoUo}yohfYEGg~VfTkksAznK-Bsaoc}L)Jp5Z6}>AFu6I-f-4$upGk)%ztiMMRs7@@={iZa zSdtmMuPSS08o0FMW?TDh_a>~Q+E)!*p^BU*nVpT)hw%kfFPt=(I|xbl@wbj@acKH$ zvNhU@-ech||J?)EVZ&-shD7ONg*4iCR625MDd>frbHtlgYudjsos92qv2L&1XiZR7 z6;#nq#Jn$ zXV%aT6&zo@MO&Bg@~;Df(1`tG1_aLt(c(+q>(i6fvkStKkw&JGCcMVtT88HkVYw3L z;)?BI9RCAU+P)@Ek)*0l6R^Os4-~N9wa+&^!0LcjQ};Mnl}fFdas*iKcVHdkGTu60 z+}IuereJ>Aq1p$yp7i$sX{{5Da{7l*in>(KqjCPPIjk-%PrMJ`>fVx*;KvFy&?AIZ z9v_KNi?>bG(Dqf%9Uvu9eBiqc9!})gt{7&!HSJs%)Ro3N@jluNT%#( z-_f#-XL-YJlq&G{P;Du;nyuF>gs$Od@XgHbRY0*)hFtF8l7D!6I(GUU$}955?fDPa zcc0F!_S<7sQ6dB959e4mNrTeOY)|CGbloL#dtSRQQ)F0bkIfbP4^$tVs(k0wKtmE7 z%hsXfO4D}U-m1V+CIDw23+^~I829&|wF+gS9`@h3e(bG__g|B?oM{F*LIfGXdPA_M zlDPHk$Enu?f$ zVL((Vq)_{Hr2g`l(aElM8xXA~>+3_9^|7iIRL0~qy(eEwiR%IJuJOYv+7Ls}?9oTg zLaUkbo@q$81{#Dycqyw(A8+q}q3PyJrJ@5|w4vcF=pT@NhZpex)Wfff*Rqs;(V%;w zwz?DA37L#Vtms&Smk-t|P<8MS37pE*7l5Bhv=@jqH&C>nr7Asb2&6@V>7q(Uy9KHG z%+9B8_Uep$;4E)eoB`)8V z@#J|F)Akz*nO<*iYAF7%Uo{f@^zaSc%M;od;pgDVdsh*lKp$7qI5_JBs00^# z0`tKm!4;W4)2m^h#LSPkQZ^^d_5Ys12T}w`x;j(Ol8oUrkjlAAT4w1m5sl?wP_HMmct98j^29pkT0}kVQ*3%;?S$&vkNzm z4`7#z1NG|?rrvAk&dFpg{j5PLycxZsqLo|ZO!CF!QuFaacM?+V2Vq;3{cFi{7n2$(tRV637ZFhiK!4y%RLO7U6ii;Zyfoj&t_`$?OdpW^6|Rc z&(^Tt<{oJQ{#|R$s1z&ehV{X)*VatzOx6s@`A6=B)dRaKG~3;O%5tOrzt76*@Vy{n z-e^b_@WW*Dyd3i%Cd%Ifh3)qswj%_(N&}PF=X&o;%wx^&KOjnS%zkv;%@(yyyd1)j zpca)*((jl<-QqsUb;25;cB%XL)ewQkIOBDT@(W;{n~vZm?pKw`Gy($;5r)AY=kGX^!(zEi{c=;XBz z?bz4pBF^luvk$K0gAelCoFVyIisBLz3wmx7JC|R2L_ZS$H#Y%)W&b%(XFKeAjtFut zxq17#T*x`<2t2ID$#!l)TjMVm32GcsaHk2+bvnn z7Cr|}!VG65ut{awJk$mj4ax7np4n=b_$rB4yL~`-%oX0Ex#lE(`R{h7`YbnLM|si| zSz0|Oc7OI2>!oFW{oh0sO5#O@{SqSu(GrqIp9uFCD^+FFn@>BM{BpPnFsx(Ac8tVR z5c||aax2CoO)0_t{K*K9`uR_;B$=*|gLXS9@UufyE_R=8?gj~#mGTN=&v)~ zh}7IuN;P?TD~jCuxVX~4_CIX6gQ|;fA*PM~jD8#d?#%i^&Xsi|d3Tdbj>jv2kIg5k z0=#HFg%9#(*`qZn$$b&)X~CPAEbV0w)>c1}w0~#`xRC+)Q8|zV+RMU>|J&(#?A!l- cROAvUzwl||Mx3uag@EI^f|`7(oY|ZI2e%d;lK=n! From f3a5e2e321e601c55cddc4be31d5cce4fe6628b0 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Sun, 15 Sep 2019 20:30:10 +0200 Subject: [PATCH 33/79] leftover legcuffs/handcuffs overlays fix. --- code/modules/mob/living/carbon/update_icons.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 5662f25993..cdae073af8 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -189,7 +189,7 @@ var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER) legcuffs.color = legcuffed.color - overlays_standing[HANDCUFF_LAYER] = legcuffs + overlays_standing[LEGCUFF_LAYER] = legcuffs apply_overlay(LEGCUFF_LAYER) throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) From a739342a5a381fea8f0551e57db9d2ddac5243ec Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 15 Sep 2019 23:21:27 -0500 Subject: [PATCH 34/79] Updates Travis to 512.1484 just so everything is checked with the DMI fixes. and various other updates. --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a28b231eab..a037093576 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM tgstation/byond:512.1467 as base +FROM tgstation/byond:512.1484 as base FROM base as build_base From ca95d39a46ca61eecd987a64b227acb1422ff38c Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 16 Sep 2019 17:47:22 +0200 Subject: [PATCH 35/79] Slowing down police baton and tele baton speed. --- code/game/objects/items/melee/misc.dm | 19 ++++--- .../code/game/objects/items/melee/misc.dm | 57 ------------------- tgstation.dme | 1 - 3 files changed, 11 insertions(+), 66 deletions(-) delete mode 100644 modular_citadel/code/game/objects/items/melee/misc.dm diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index f9affc230d..82b751dc27 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -180,8 +180,14 @@ slot_flags = ITEM_SLOT_BELT force = 12 //9 hit crit w_class = WEIGHT_CLASS_NORMAL - var/cooldown = 0 + var/cooldown = 14 var/on = TRUE + var/last_hit = 0 + var/stun_stam_cost_coeff = 1.25 + var/hardstun_ds = 1 + var/softstun_ds = 0 + var/stam_dmg = 30 + total_mass = TOTAL_MASS_NORMAL_ITEM /obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user) if(!on) @@ -207,12 +213,10 @@ if(!isliving(target)) return if (user.a_intent == INTENT_HARM) - if(!..()) - return - if(!iscyborg(target)) + if(!..() || !iscyborg(target)) return else - if(cooldown <= world.time) + if(last_hit < world.time) if(ishuman(target)) var/mob/living/carbon/human/H = target if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) @@ -220,7 +224,7 @@ if(check_martial_counter(H, user)) return playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1) - target.Knockdown(60) + target.Knockdown(softstun_ds, TRUE, FALSE, hardstun_ds, stam_dmg) log_combat(user, target, "stunned", src) src.add_fingerprint(user) target.visible_message("[user] has knocked down [target] with [src]!", \ @@ -229,7 +233,7 @@ target.LAssailant = null else target.LAssailant = user - cooldown = world.time + last_hit = world.time + cooldown user.adjustStaminaLossBuffered(getweight())//CIT CHANGE - makes swinging batons cost stamina /obj/item/melee/classic_baton/telescopic @@ -245,7 +249,6 @@ item_flags = NONE force = 0 on = FALSE - total_mass = TOTAL_MASS_SMALL_ITEM /obj/item/melee/classic_baton/telescopic/suicide_act(mob/user) var/mob/living/carbon/human/H = user diff --git a/modular_citadel/code/game/objects/items/melee/misc.dm b/modular_citadel/code/game/objects/items/melee/misc.dm deleted file mode 100644 index 48c221696e..0000000000 --- a/modular_citadel/code/game/objects/items/melee/misc.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/item/melee/classic_baton - var/last_hit = 0 - var/stun_stam_cost_coeff = 1.25 - var/hardstun_ds = 1 - var/softstun_ds = 0 - var/stam_dmg = 30 - cooldown = 0 - total_mass = 3.75 - -/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user) - if(!on) - return ..() - - if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)//CIT CHANGE - makes batons unusuable in stamina softcrit - to_chat(user, "You're too exhausted for that.")//CIT CHANGE - ditto - return //CIT CHANGE - ditto - - add_fingerprint(user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) - to_chat(user, "You club yourself over the head.") - user.Knockdown(60 * force) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD) - else - user.take_bodypart_damage(2*force) - return - if(iscyborg(target)) - ..() - return - if(!isliving(target)) - return - if (user.a_intent == INTENT_HARM) - if(!..()) - return - if(!iscyborg(target)) - return - else - if(last_hit + cooldown < world.time) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) - return - if(check_martial_counter(H, user)) - return - playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1) - target.Knockdown(softstun_ds, TRUE, FALSE, hardstun_ds, stam_dmg) - log_combat(user, target, "stunned", src) - src.add_fingerprint(user) - target.visible_message("[user] has knocked down [target] with [src]!", \ - "[user] has knocked down [target] with [src]!") - if(!iscarbon(user)) - target.LAssailant = null - else - target.LAssailant = user - last_hit = world.time - user.adjustStaminaLossBuffered(getweight())//CIT CHANGE - makes swinging batons cost stamina diff --git a/tgstation.dme b/tgstation.dme index 521afbc87a..5d09504aef 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2924,7 +2924,6 @@ #include "modular_citadel\code\game\objects\items\devices\radio\headset.dm" #include "modular_citadel\code\game\objects\items\devices\radio\shockcollar.dm" #include "modular_citadel\code\game\objects\items\melee\eutactic_blades.dm" -#include "modular_citadel\code\game\objects\items\melee\misc.dm" #include "modular_citadel\code\game\objects\items\robot\robot_upgrades.dm" #include "modular_citadel\code\game\objects\items\storage\firstaid.dm" #include "modular_citadel\code\game\objects\structures\tables_racks.dm" From 0d9b2847843186446241d3b6ade2d967c47a5359 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 16 Sep 2019 18:12:05 +0200 Subject: [PATCH 36/79] unneeded variable, no gameplay changes. --- code/game/objects/items/melee/misc.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 82b751dc27..d8e26cae9a 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -180,14 +180,13 @@ slot_flags = ITEM_SLOT_BELT force = 12 //9 hit crit w_class = WEIGHT_CLASS_NORMAL - var/cooldown = 14 + var/cooldown = 13 var/on = TRUE var/last_hit = 0 var/stun_stam_cost_coeff = 1.25 var/hardstun_ds = 1 var/softstun_ds = 0 var/stam_dmg = 30 - total_mass = TOTAL_MASS_NORMAL_ITEM /obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user) if(!on) From 876d65a695fec325f94d13c22f65ff8cad825465 Mon Sep 17 00:00:00 2001 From: EmeraldSundisk Date: Mon, 16 Sep 2019 12:34:22 -0700 Subject: [PATCH 37/79] Update DeltaStation2.dmm --- .../map_files/Deltastation/DeltaStation2.dmm | 384 +++++++++++++----- 1 file changed, 285 insertions(+), 99 deletions(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index aae5ff8ff9..42019c8a04 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -11774,11 +11774,15 @@ /area/engine/atmospherics_engine) "aAb" = ( /turf/closed/wall, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aAc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aAd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral{ @@ -12358,7 +12362,9 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBh" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/light/small{ @@ -12367,26 +12373,27 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBi" = ( /obj/structure/table, /obj/item/clothing/suit/apron/overalls, /obj/item/cultivator, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBj" = ( /obj/machinery/biogenerator, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBk" = ( /obj/structure/table, -/obj/item/seeds/poppy/lily{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/seeds/poppy/geranium, /obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/food/snacks/grown/wheat, /obj/item/reagent_containers/food/snacks/grown/corn, @@ -12395,15 +12402,23 @@ /obj/machinery/airalarm{ pixel_y = 23 }, +/obj/item/seeds/poppy/lily{ + pixel_x = 4; + pixel_y = 4 + }, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBl" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/tea, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBm" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/status_display{ @@ -12411,7 +12426,9 @@ }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBn" = ( /obj/structure/table, /obj/item/stack/packageWrap, @@ -12422,7 +12439,9 @@ /obj/item/reagent_containers/food/snacks/grown/cherries, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBo" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/light/small{ @@ -12432,14 +12451,18 @@ /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBp" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/poppy, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aBq" = ( /obj/structure/cable/white{ icon_state = "2-4" @@ -13032,26 +13055,34 @@ /turf/closed/wall/r_wall, /area/engine/atmospherics_engine) "aCv" = ( -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aCw" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/hydroponics/soil, +/obj/item/seeds/watermelon, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aCx" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aCy" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aCz" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -13658,15 +13689,21 @@ }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aDy" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aDz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aDA" = ( /obj/structure/sink{ dir = 4; @@ -13677,7 +13714,9 @@ }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aDB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -14188,37 +14227,38 @@ /turf/open/space, /area/space/nearstation) "aEB" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "2-4" }, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aEC" = ( /obj/structure/cable/white{ icon_state = "4-8" }, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aED" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aEE" = ( /obj/structure/cable/white{ icon_state = "2-8" }, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) -"aEF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aEG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -14854,14 +14894,18 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aFK" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/harebell, /obj/machinery/light/small, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aFL" = ( /obj/structure/table, /obj/item/shovel/spade, @@ -14875,23 +14919,27 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white, /obj/machinery/power/apc{ - dir = 2; - name = "Abandoned Garden APC"; areastring = "/area/hydroponics/garden/abandoned"; + dir = 2; + name = "Maintenance Garden APC"; pixel_y = -26 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aFM" = ( -/obj/machinery/seed_extractor, /obj/machinery/status_display{ pixel_y = -32 }, -/obj/item/reagent_containers/glass/bucket, /obj/effect/turf_decal/delivery, +/obj/machinery/hydroponics/soil, +/obj/item/seeds/poppy/geranium, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aFN" = ( /obj/structure/table, /obj/item/plant_analyzer, @@ -14899,12 +14947,16 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aFO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aFP" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -14912,7 +14964,9 @@ }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aFQ" = ( /obj/structure/table, /obj/item/crowbar, @@ -14920,7 +14974,9 @@ /obj/item/reagent_containers/glass/bucket, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aFR" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/tower, @@ -14929,7 +14985,9 @@ /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aFS" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -15922,9 +15980,10 @@ /area/engine/atmospherics_engine) "aHl" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/barricade/wooden, /turf/open/floor/plating, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aHm" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; @@ -15933,7 +15992,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/barricade/wooden, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -15941,7 +15999,9 @@ dir = 1 }, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aHn" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; @@ -15951,7 +16011,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/structure/barricade/wooden, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -15959,13 +16018,16 @@ dir = 1 }, /turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aHo" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/barricade/wooden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, -/area/hydroponics/garden/abandoned) +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "aHp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -16808,7 +16870,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "aIK" = ( /obj/structure/cable/white{ @@ -16818,10 +16881,18 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "aIL" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -17687,7 +17758,14 @@ /area/engine/atmospherics_engine) "aKg" = ( /obj/structure/closet/emcloset, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "aKh" = ( /obj/effect/decal/cleanable/dirt, @@ -17704,7 +17782,11 @@ /area/maintenance/port/fore) "aKi" = ( /obj/structure/closet, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "aKj" = ( /obj/effect/decal/cleanable/dirt, @@ -17715,16 +17797,20 @@ /turf/open/floor/plasteel, /area/maintenance/port/fore) "aKk" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/maintenance/port/fore) "aKl" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -39195,13 +39281,6 @@ name = "Hydroponics Desk"; req_access_txt = "35" }, -/obj/item/seeds/lime{ - pixel_x = 6 - }, -/obj/item/seeds/watermelon, -/obj/item/seeds/grape{ - pixel_x = -6 - }, /obj/item/reagent_containers/food/snacks/grown/wheat, /obj/item/reagent_containers/food/snacks/grown/watermelon, /obj/item/reagent_containers/food/snacks/grown/banana, @@ -126680,6 +126759,23 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/research) +"ibC" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/hydroponics/soil, +/obj/item/seeds/lime{ + pixel_x = 6 + }, +/turf/open/floor/plasteel, +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) +"iiH" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "ijB" = ( /obj/structure/reagent_dispensers/keg/aphro/strong, /obj/item/reagent_containers/glass/beaker, @@ -127109,6 +127205,14 @@ dir = 1 }, /area/science/circuit) +"mdk" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "mkm" = ( /obj/machinery/atmospherics/components/binary/valve, /obj/machinery/embedded_controller/radio/airlock_controller/incinerator_toxmix{ @@ -127211,6 +127315,29 @@ /obj/machinery/atmospherics/pipe/simple/general/hidden, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"oaP" = ( +/obj/machinery/seed_extractor, +/obj/item/reagent_containers/glass/bucket, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) +"obe" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "owr" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -127224,6 +127351,29 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel/dark, /area/chapel/office) +"owI" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) +"ozr" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/hydroponics/soil, +/obj/item/seeds/grape, +/turf/open/floor/plasteel, +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "oIl" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -127363,6 +127513,15 @@ }, /turf/open/floor/plating, /area/science/research/abandoned) +"pHf" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "pQm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -127466,6 +127625,13 @@ /obj/machinery/door/poddoor/incinerator_toxmix, /turf/open/floor/engine/vacuum, /area/science/mixing) +"tbC" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "tmi" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -127479,6 +127645,14 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) +"tAi" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "tCh" = ( /turf/closed/wall, /area/science/misc_lab) @@ -127582,6 +127756,18 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/circuit) +"whX" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "wAA" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall/r_wall, @@ -156627,7 +156813,7 @@ arB aug alg alg -aAd +whX aKg alf aMO @@ -156884,7 +157070,7 @@ aAb aAb aAb aAb -arB +pHf aKh alf aMN @@ -157138,11 +157324,11 @@ aAb aBg aCv aDx -aCw +aCv aFJ aAb aIH -aoY +tAi alf aMP aDw @@ -157393,8 +157579,8 @@ axI ayU aAb aBh -aCw -aCw +aCv +aCv aCv aFK aHl @@ -157650,13 +157836,13 @@ axJ aoY aAb aBi -aCw +aCv aCw aEB aFL aAb -arB -alg +aIH +tbC avm arB arB @@ -157908,11 +158094,11 @@ alf aAb aBj aCv -aCw +oaP aEC aFM aAb -alg +aIH ary aLz aLz @@ -158165,11 +158351,11 @@ alg aAb aBk aCv -aCw +ozr aEC aFN aAb -arA +aIH aKi aLz aMQ @@ -158421,13 +158607,13 @@ axL ayV aAb aBl -aCw +aCv aDy aED aFO aHm aII -aKj +mdk aLz aMR aOq @@ -158678,13 +158864,13 @@ axM ayW aAb aBm -aCw -aCw +aCv +aCv aEE aFP aHn aIJ -aKj +iiH aLz aMS aOr @@ -158936,12 +159122,12 @@ ayX aAb aBn aCx -aCw -aCw +ibC +aCv aFQ aAb -asQ -arB +owI +iiH aLz aMT aOs @@ -159194,7 +159380,7 @@ aAc aBo aCy aDz -aEF +aDz aFR aHo aIK @@ -159449,7 +159635,7 @@ alf alf aAb aBp -aCw +aCv aDA aCv aFJ @@ -159712,7 +159898,7 @@ aAb aAb aAb aIL -arB +tbC aLz aLz aLz @@ -159969,7 +160155,7 @@ aEG aFS aHp aIM -aEG +obe aLB aFS aEG From 5e52c62f29ca4277663362fc80f13a02345604db Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Tue, 17 Sep 2019 03:41:53 +0200 Subject: [PATCH 38/79] actual balance. --- code/game/objects/items/melee/misc.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index d8e26cae9a..10b84917bb 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -248,6 +248,7 @@ item_flags = NONE force = 0 on = FALSE + total_mass = TOTAL_MASS_NORMAL_ITEM /obj/item/melee/classic_baton/telescopic/suicide_act(mob/user) var/mob/living/carbon/human/H = user From 3ba5a2fd69287c170d04e547332c15dcb8bfe430 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Tue, 17 Sep 2019 18:34:16 +0200 Subject: [PATCH 39/79] Fixes undershirts n socks colors. --- code/modules/client/preferences_savefile.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index c900349843..0526a82a3d 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -457,9 +457,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car underwear = sanitize_inlist(underwear, GLOB.underwear_list) undie_color = sanitize_hexcolor(undie_color, 3, FALSE, initial(undie_color)) undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list) - shirt_color = sanitize_hexcolor(shirt_color, 6, FALSE, initial(shirt_color)) + shirt_color = sanitize_hexcolor(shirt_color, 3, FALSE, initial(shirt_color)) socks = sanitize_inlist(socks, GLOB.socks_list) - socks_color = sanitize_hexcolor(socks_color, 6, FALSE, initial(socks_color)) + socks_color = sanitize_hexcolor(socks_color, 3, FALSE, initial(socks_color)) age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) hair_color = sanitize_hexcolor(hair_color, 3, 0) facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0) From 040b6472b48f47fa69e1849a0d32e4432671cd84 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Wed, 18 Sep 2019 01:21:18 +0200 Subject: [PATCH 40/79] FUCK --- code/modules/client/preferences_savefile.dm | 61 ++------------------- 1 file changed, 6 insertions(+), 55 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index c900349843..fcaf7769e5 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 22 +#define SAVEFILE_VERSION_MAX 23 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -49,62 +49,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car pda_style = "mono" if(current_version < 20) pda_color = "#808000" - if(current_version < 21) - job_preferences = list() //It loaded null from nonexistant savefile field. - var/job_civilian_high = 0 - var/job_civilian_med = 0 - var/job_civilian_low = 0 - - var/job_medsci_high = 0 - var/job_medsci_med = 0 - var/job_medsci_low = 0 - - var/job_engsec_high = 0 - var/job_engsec_med = 0 - var/job_engsec_low = 0 - - S["job_civilian_high"] >> job_civilian_high - S["job_civilian_med"] >> job_civilian_med - S["job_civilian_low"] >> job_civilian_low - S["job_medsci_high"] >> job_medsci_high - S["job_medsci_med"] >> job_medsci_med - S["job_medsci_low"] >> job_medsci_low - S["job_engsec_high"] >> job_engsec_high - S["job_engsec_med"] >> job_engsec_med - S["job_engsec_low"] >> job_engsec_low - - //Can't use SSjob here since this happens right away on login - for(var/job in subtypesof(/datum/job)) - var/datum/job/J = job - var/new_value - var/fval = initial(J.flag) - switch(initial(J.department_flag)) - if(CIVILIAN) - if(job_civilian_high & fval) - new_value = JP_HIGH - else if(job_civilian_med & fval) - new_value = JP_MEDIUM - else if(job_civilian_low & fval) - new_value = JP_LOW - if(MEDSCI) - if(job_medsci_high & fval) - new_value = JP_HIGH - else if(job_medsci_med & fval) - new_value = JP_MEDIUM - else if(job_medsci_low & fval) - new_value = JP_LOW - if(ENGSEC) - if(job_engsec_high & fval) - new_value = JP_HIGH - else if(job_engsec_med & fval) - new_value = JP_MEDIUM - else if(job_engsec_low & fval) - new_value = JP_LOW - if(new_value) - job_preferences[initial(J.title)] = new_value - if((current_version < 22) && features["meat_type"] && (features["meat_type"] == null)) + if((current_version < 21) && features["meat_type"] && (features["meat_type"] == null)) features["meat_type"] = "Mammalian" +//if you are wondering why we are skipping current_verion 22, that's because of some huge fuck ups that caused the game to be unplayable that we are fixing here. + if(current_version < 23) + job_preferences = list() //It loaded null from nonexistant savefile field. + /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) return From 63fbf225a6fd82fbe880a973e9f005eb9b865511 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Wed, 18 Sep 2019 01:24:44 +0200 Subject: [PATCH 41/79] aaaaa --- code/modules/client/preferences_savefile.dm | 56 ++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index fcaf7769e5..a72122a6c8 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -51,9 +51,61 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car pda_color = "#808000" if((current_version < 21) && features["meat_type"] && (features["meat_type"] == null)) features["meat_type"] = "Mammalian" + var/itsallogre = TRUE + if(current_version < 22) + var/job_civilian_high = 0 + var/job_civilian_med = 0 + var/job_civilian_low = 0 -//if you are wondering why we are skipping current_verion 22, that's because of some huge fuck ups that caused the game to be unplayable that we are fixing here. - if(current_version < 23) + var/job_medsci_high = 0 + var/job_medsci_med = 0 + var/job_medsci_low = 0 + + var/job_engsec_high = 0 + var/job_engsec_med = 0 + var/job_engsec_low = 0 + + S["job_civilian_high"] >> job_civilian_high + S["job_civilian_med"] >> job_civilian_med + S["job_civilian_low"] >> job_civilian_low + S["job_medsci_high"] >> job_medsci_high + S["job_medsci_med"] >> job_medsci_med + S["job_medsci_low"] >> job_medsci_low + S["job_engsec_high"] >> job_engsec_high + S["job_engsec_med"] >> job_engsec_med + S["job_engsec_low"] >> job_engsec_low + + //Can't use SSjob here since this happens right away on login + for(var/job in subtypesof(/datum/job)) + var/datum/job/J = job + var/new_value + var/fval = initial(J.flag) + switch(initial(J.department_flag)) + if(CIVILIAN) + if(job_civilian_high & fval) + new_value = JP_HIGH + else if(job_civilian_med & fval) + new_value = JP_MEDIUM + else if(job_civilian_low & fval) + new_value = JP_LOW + if(MEDSCI) + if(job_medsci_high & fval) + new_value = JP_HIGH + else if(job_medsci_med & fval) + new_value = JP_MEDIUM + else if(job_medsci_low & fval) + new_value = JP_LOW + if(ENGSEC) + if(job_engsec_high & fval) + new_value = JP_HIGH + else if(job_engsec_med & fval) + new_value = JP_MEDIUM + else if(job_engsec_low & fval) + new_value = JP_LOW + if(new_value) + job_preferences[initial(J.title)] = new_value + itsallogre = FALSE + if(current_version < 23 && itsallogre) // we are fixing a gamebreaking bug. job_preferences = list() //It loaded null from nonexistant savefile field. /datum/preferences/proc/load_path(ckey,filename="preferences.sav") From 150da1d34a66fe53cdf6ea9c448a694217af96e1 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Wed, 18 Sep 2019 01:37:17 +0200 Subject: [PATCH 42/79] code quality --- code/modules/client/preferences_savefile.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index a72122a6c8..2ba98caa56 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -51,7 +51,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car pda_color = "#808000" if((current_version < 21) && features["meat_type"] && (features["meat_type"] == null)) features["meat_type"] = "Mammalian" - var/itsallogre = TRUE if(current_version < 22) var/job_civilian_high = 0 var/job_civilian_med = 0 @@ -104,8 +103,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car new_value = JP_LOW if(new_value) job_preferences[initial(J.title)] = new_value - itsallogre = FALSE - if(current_version < 23 && itsallogre) // we are fixing a gamebreaking bug. + else if(current_version < 23) // we are fixing a gamebreaking bug. job_preferences = list() //It loaded null from nonexistant savefile field. /datum/preferences/proc/load_path(ckey,filename="preferences.sav") From d0296a5e81fec85c22658b6a749f0751e121d89b Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 17 Sep 2019 20:15:06 -0400 Subject: [PATCH 43/79] fixes roundstart runtimes by job_preferences index checks be explicit key checks instead, plus some extra sanity checks --- code/controllers/subsystem/job.dm | 10 +++++----- code/modules/client/preferences.dm | 14 +++++++------- code/modules/client/preferences_savefile.dm | 4 ++-- .../mob/dead/new_player/preferences_setup.dm | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 5983fa3ae5..cc46d35c25 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -116,7 +116,7 @@ SUBSYSTEM_DEF(job) if(player.mind && job.title in player.mind.restricted_roles) JobDebug("FOC incompatible with antagonist role, Player: [player]") continue - if(player.client.prefs.job_preferences[job.title] == level) + if(player.client.prefs.job_preferences["[job.title]"] == level) JobDebug("FOC pass, Player: [player], Level:[level]") candidates += player return candidates @@ -246,7 +246,7 @@ SUBSYSTEM_DEF(job) initial_players_to_assign = unassigned.len - JobDebug("DO, Len: [unassigned.len]") + JobDebug("DO, Len: [unassigned?.len]") if(unassigned.len == 0) return validate_required_jobs(required_jobs) @@ -270,7 +270,7 @@ SUBSYSTEM_DEF(job) JobDebug("DO, Running Overflow Check 1") var/datum/job/overflow = GetJob(SSjob.overflow_role) var/list/overflow_candidates = FindOccupationCandidates(overflow, JP_LOW) - JobDebug("AC1, Candidates: [overflow_candidates.len]") + JobDebug("AC1, Candidates: [overflow_candidates?.len]") for(var/mob/dead/new_player/player in overflow_candidates) JobDebug("AC1 pass, Player: [player]") AssignRole(player, SSjob.overflow_role) @@ -333,7 +333,7 @@ SUBSYSTEM_DEF(job) continue // If the player wants that job on this level, then try give it to him. - if(player.client.prefs.job_preferences[job.title] == level) + if(player.client.prefs.job_preferences["[job.title]"] == level) // If the job isn't filled if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) JobDebug("DO pass, Player: [player], Level:[level], Job:[job.title]") @@ -540,7 +540,7 @@ SUBSYSTEM_DEF(job) if(job.required_playtime_remaining(player.client)) young++ continue - switch(player.client.prefs.job_preferences[job.title]) + switch(player.client.prefs.job_preferences["[job.title]"]) if(JP_HIGH) high++ if(JP_MEDIUM) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 686d5d3572..f9fc7b9221 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1039,7 +1039,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/available_in_days = job.available_in_days(user.client) HTML += "[rank] \[IN [(available_in_days)] DAYS\]" continue - if((job_preferences[SSjob.overflow_role] == JP_LOW) && (rank != SSjob.overflow_role) && !jobban_isbanned(user, SSjob.overflow_role)) + if((job_preferences["[SSjob.overflow_role]"] == JP_LOW) && (rank != SSjob.overflow_role) && !jobban_isbanned(user, SSjob.overflow_role)) HTML += "[rank]" continue if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs @@ -1054,7 +1054,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/prefUpperLevel = -1 // level to assign on left click var/prefLowerLevel = -1 // level to assign on right click - switch(job_preferences[job.title]) + switch(job_preferences["[job.title]"]) if(JP_HIGH) prefLevelLabel = "High" prefLevelColor = "slateblue" @@ -1079,7 +1079,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) HTML += "" if(rank == SSjob.overflow_role)//Overflow is special - if(job_preferences[SSjob.overflow_role] == JP_LOW) + if(job_preferences["[SSjob.overflow_role]"] == JP_LOW) HTML += "Yes" else HTML += "No" @@ -1115,11 +1115,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (level == JP_HIGH) // to high //Set all other high to medium for(var/j in job_preferences) - if(job_preferences[j] == JP_HIGH) - job_preferences[j] = JP_MEDIUM + if(job_preferences["[j]"] == JP_HIGH) + job_preferences["[j]"] = JP_MEDIUM //technically break here - job_preferences[job.title] = level + job_preferences["[job.title]"] = level return TRUE /datum/preferences/proc/UpdateJobPreference(mob/user, role, desiredLvl) @@ -1147,7 +1147,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) jpval = JP_HIGH if(role == SSjob.overflow_role) - if(job_preferences[job.title] == JP_LOW) + if(job_preferences["[job.title]"] == JP_LOW) jpval = null else jpval = JP_LOW diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index c900349843..7da8017f56 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -101,7 +101,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car else if(job_engsec_low & fval) new_value = JP_LOW if(new_value) - job_preferences[initial(J.title)] = new_value + job_preferences["[initial(J.title)]"] = new_value if((current_version < 22) && features["meat_type"] && (features["meat_type"] == null)) features["meat_type"] = "Mammalian" @@ -485,7 +485,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) //Validate job prefs for(var/j in job_preferences) - if(job_preferences[j] != JP_LOW && job_preferences[j] != JP_MEDIUM && job_preferences[j] != JP_HIGH) + if(job_preferences["[j]"] != JP_LOW && job_preferences["[j]"] != JP_MEDIUM && job_preferences["[j]"] != JP_HIGH) job_preferences -= j all_quirks = SANITIZE_LIST(all_quirks) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index b08fadefcb..994d082585 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -28,9 +28,9 @@ var/datum/job/previewJob var/highest_pref = 0 for(var/job in job_preferences) - if(job_preferences[job] > highest_pref) + if(job_preferences["[job]"] > highest_pref) previewJob = SSjob.GetJob(job) - highest_pref = job_preferences[job] + highest_pref = job_preferences["[job]"] if(previewJob) // Silicons only need a very basic preview since there is no customization for them. From cc6e436e96a207f6e0f3306a8cda132658036c72 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 17 Sep 2019 21:48:48 -0400 Subject: [PATCH 44/79] further fixes --- code/controllers/subsystem/job.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index cc46d35c25..a0d9226e14 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -182,7 +182,7 @@ SUBSYSTEM_DEF(job) if((job.current_positions >= job.total_positions) && job.total_positions != -1) continue var/list/candidates = FindOccupationCandidates(job, level) - if(!candidates.len) + if(!candidates?.len) continue var/mob/dead/new_player/candidate = pick(candidates) if(AssignRole(candidate, command_position)) @@ -200,7 +200,7 @@ SUBSYSTEM_DEF(job) if((job.current_positions >= job.total_positions) && job.total_positions != -1) continue var/list/candidates = FindOccupationCandidates(job, level) - if(!candidates.len) + if(!candidates?.len) continue var/mob/dead/new_player/candidate = pick(candidates) AssignRole(candidate, command_position) From abb8450e297278b98b1670220f77a1c10fe0b9e1 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Wed, 18 Sep 2019 04:07:51 +0200 Subject: [PATCH 45/79] ninja shoes. --- code/modules/ninja/suit/shoes.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index 115b14b63b..1bda62e064 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -2,7 +2,6 @@ name = "ninja shoes" desc = "A pair of running shoes. Excellent for running and even better for smashing skulls." icon_state = "s-ninja" - item_state = "secshoes" permeability_coefficient = 0.01 clothing_flags = NOSLIP resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF From 8bf4d5754eae92f0a88bfea6a14f2938976058db Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Wed, 18 Sep 2019 04:23:52 +0200 Subject: [PATCH 46/79] I'm a moron. --- code/modules/client/preferences_savefile.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 2ba98caa56..3782ba9d15 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -52,6 +52,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if((current_version < 21) && features["meat_type"] && (features["meat_type"] == null)) features["meat_type"] = "Mammalian" if(current_version < 22) + + job_preferences = list() //It loaded null from nonexistant savefile field. + var/job_civilian_high = 0 var/job_civilian_med = 0 var/job_civilian_low = 0 From aa610617f8724d05eff90e23e05a7c07c3541c0a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 18 Sep 2019 00:01:02 -0500 Subject: [PATCH 47/79] Automatic changelog generation for PR #9302 [ci skip] --- html/changelogs/AutoChangeLog-pr-9302.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-9302.yml diff --git a/html/changelogs/AutoChangeLog-pr-9302.yml b/html/changelogs/AutoChangeLog-pr-9302.yml new file mode 100644 index 0000000000..4f6ed4d336 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9302.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Things that access job_preferences now explicitly access keys, which means it no longer attempts to access invalid indices and runtimes as a result." From 2c70bd097cceab328f1f87d08b79d4eccfe671d5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 18 Sep 2019 00:03:31 -0500 Subject: [PATCH 48/79] Automatic changelog generation for PR #9295 [ci skip] --- html/changelogs/AutoChangeLog-pr-9295.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-9295.yml diff --git a/html/changelogs/AutoChangeLog-pr-9295.yml b/html/changelogs/AutoChangeLog-pr-9295.yml new file mode 100644 index 0000000000..a96540c11b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9295.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - balance: "Slowed down police baton and tele baton speed by 75%, should be still be faster than the legacy speed (2 seconds) by 0.6 seconds. Telescopic batons' stamina cost per swing is now on par with police batons, ergo more expensive." From 5ecf68918bb95bc10686acd9c542ad6a4e820fce Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Wed, 18 Sep 2019 03:47:52 -0400 Subject: [PATCH 49/79] tada --- .../reagents/reagent_containers/blood_pack.dm | 6 ++++++ .../research/designs/medical_designs.dm | 10 ++++++++++ code/modules/research/techweb/all_nodes.dm | 2 +- icons/obj/bloodpack.dmi | Bin 950 -> 1248 bytes 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 31e893aa3a..3e555f385f 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -90,3 +90,9 @@ update_pack_name() else return ..() + +/obj/item/reagent_containers/blood/bluespace + name = "bluespace blood pack" + desc = "Contains blood used for transfusion, this one has been made with bluespace technology to hold much more blood. Must be attached to an IV drip." + icon_state = "bsbloodpack" + volume = 600 //its a blood bath! \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index d3db4f75b3..d8b93bc92c 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -192,6 +192,16 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL +/datum/design/bsblood_bag + name = "Blue Space Empty Blood Bag" + desc = "A large sterilized plastic bag for blood." + id = "bsblood_bag" + build_path = /obj/item/reagent_containers/blood/bluespace + build_type = PROTOLATHE + materials = list(MAT_GLASS = 2500, MAT_PLASTIC = 4500, MAT_BLUESPACE = 250) + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + /datum/design/cloning_disk name = "Cloning Data Disk" desc = "Produce additional disks for storing genetic data." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 3721e7943e..79df45a104 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -272,7 +272,7 @@ display_name = "Bluespace Pockets" description = "Studies into the mysterious alternate dimension known as bluespace and how to place items in the threads of reality." prereq_ids = list("adv_power", "adv_bluespace", "adv_biotech", "adv_plasma") - design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding") + design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding", "bsblood_bag") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5500) export_price = 5000 diff --git a/icons/obj/bloodpack.dmi b/icons/obj/bloodpack.dmi index 3a5b9fd7064661597e7d4888974f7cfca8ff3c7f..82b4c2e543d8d896b1483ba17c06809357e8c164 100644 GIT binary patch delta 1131 zcmV-x1eE)>2jB^i7Y;xO1^@s6s%dfF0001kktK0|;x!}{6I83L;Ogh1;Nt7a1puB@ zI0;-xMLPfh1Q0I@R6m6D~0|!Q%Z0WN;}B!lAO-g zd$Oc|=d1Kxe!BY|zu)isz4uS=Ue0x0rWr4pF2FQq0+=qqG-d*rF2FQiHeJAJAcVL9 zTu*V`a$WZel^8<_5Ji!byqC}CYs17EHh;6(EH5l9EIyi|i-TCMi^TCEl^ULl^(U#V2C+@})zp8Oeq0?&lV;p4jQJA+~>w}2>$97#L~f-9zKR6`hY3_Ge_~;^CUr7YzS>Pn{!#p<(ew_O${{1O$@)b*e zTs|UykGURs;9d3sZmGo79s~=8!rF1ZAP9DK*Q+f4RDfj|ITf?{D%RaH&-K zd1q%wX%^602NVj0H6aAGS`8rt0JT~zwkL@*3Vd>RpJe_{rzc3%`Ic8Ne+EFkUVoq( zQ@aHuXAQ@3Ua;dvGXKWL2CMBhEWgEnqel-YzM>aTdnK5B^AgGHaUq$%-EQ+87GHOM z;NLG#a?B%h9TH9um7?RKD zHOf%S?;e0#9Nffp@+)_NFbwg1AK&)@QmrIE4qV&bj)fO<={EVC3X}vWm&>(sxm=Uv z_V)HtZ5W2}vpPkn=9lE&xRGvuuWfJd>gLxT1SQEdI|)dVX?B=+S{ow&M@;>u=u809 z1(?Q60MiAS#?%X7{L7Hs;4p=$Zvis_Oc!7pGXYE&U>Z{|z);hm*u2oU2kvhDZEmCR z6wnet5^pxGeqY^lAbUb63m`TxIFh*M_4}ny)IBFlA}EaklDy}olLumdU$beYc9F9R ztRi#g14fO^oevl_GIu^; z)Hv1G;YOo@5F)l&MCQ&1j2f9cA24cYwScgY zjHJMEL%9n`5p27+)=jfg&&X#7N-bb(>rM?|bMr&T!^5+C_mkGbil5C2v+GRBuOaRjbn8wr#@E_YN;}6?j&tL!m002ovPDHLkV1iyx5_kXr delta 831 zcmV-F1Hk;?3AP827Y-l@1^@s6qMd$(0001fktK0|f*O<+T>V@WTzoyb0M^JV=gZML zIRF3x^GQTORA_zOA76QQV^%^ogFfC zaBy(Q(yT2Mu1iFmO5j5rEJA6d9OURC;Y9Gy1&5Nhhz{+Y?d5FlJDVKXJj;7`@9{qG z`+Vqs_+_)Hb0{;R{(-wib0N08T;%S%|kpyrY z$M8Q(CX;%USW)?xmX_31DwW(-+sDz?{=GjW8l4WX=I@;rV>N#aAwufzAqX zoIjV#O>L3$eEZ*R;ExaqOoR}(+Qkgr0gmH;7;fQ~WwrQSU%6a1Iw69ezu9c^lOF(N zG3me3&lWlMVeoi2v_mKXT=Jm8UAVq{K7ZySIF4gfpG?p8O^FjLhAk?bu*L*p?87PijVSM6uck!;9WoBI?owq?5Oxn1`dk{Zc_tT2@_L#5mXd^ zW%h4A%d*yF04eb{c;Eg@pwsD-{^M z!S3!hnM-o*LhA<3+LZN^Vf}>McOM7+#e*SvB&dt3Y9LFJ>%}P&!e_jK+4L^T6o%RNx zR4TDLk&%iQX$|PseD4OoR0mj=wI+n{wz@*0(BeOvv|1q=z(j`9Mh!(#TKFx0%VKpR zgJ{60MBGpU*!JOv#_;fP+agWV#I|jc$)rRY;rK-ZM5cX<%kYPu0=8{qnkJ@c0t8yO z_)cJ^SoDO~27;~sy)XzRfU2sxs;atM-1_=@ptWt=dsilju>5Xu*A|2AOtH8o%P+kM zx Date: Wed, 18 Sep 2019 17:09:24 -0400 Subject: [PATCH 50/79] abductor batteries to tech tree --- code/modules/research/techweb/all_nodes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 3721e7943e..6257d32e10 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -998,7 +998,7 @@ description = "Things used by the greys." prereq_ids = list("biotech","engineering") boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, - /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, + /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor, /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) export_price = 20000 From 34d109f6a2f8f67f83225623555db7eb61939ab6 Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 18 Sep 2019 17:12:06 -0400 Subject: [PATCH 51/79] on further thought, all of them --- code/modules/research/techweb/all_nodes.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 6257d32e10..53958ad5b9 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -1012,7 +1012,7 @@ prereq_ids = list("alientech", "adv_biotech") design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery") boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, - /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, + /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor, /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 20000 @@ -1024,7 +1024,7 @@ description = "Alien engineering tools" prereq_ids = list("alientech", "adv_engi") design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool") - boost_item_paths = list(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, + boost_item_paths = list(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor, /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 20000 From fe3117a00631f69152267b4884559f34c8578558 Mon Sep 17 00:00:00 2001 From: BurgerLua Date: Wed, 18 Sep 2019 14:49:00 -0700 Subject: [PATCH 52/79] Added Jetpack Tweaks --- code/modules/mob/living/carbon/human/species.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 7855e9f4fa..db07caa95c 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1338,10 +1338,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) 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 - . -= 2 - else if(istype(T) && T.allow_thrust(0.01, H)) - . -= 2 + if(istype(J) && J.full_speed && J.allow_thrust(0.005, H)) //Prevents stacking + . -= 1 + else if(istype(T) && T.allow_thrust(0.005, H)) + . -= 1 if(!ignoreslow && gravity) if(H.wear_suit) From 9003404ea80a9c256ee9cf594028c85a1bdc4415 Mon Sep 17 00:00:00 2001 From: BurgerLua Date: Wed, 18 Sep 2019 15:16:02 -0700 Subject: [PATCH 53/79] Further tweak --- code/modules/mob/living/carbon/human/species.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index db07caa95c..c23ca34188 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1339,9 +1339,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!istype(J) && istype(C)) J = C.jetpack if(istype(J) && J.full_speed && J.allow_thrust(0.005, H)) //Prevents stacking - . -= 1 + . -= 0.4 else if(istype(T) && T.allow_thrust(0.005, H)) - . -= 1 + . -= 0.4 if(!ignoreslow && gravity) if(H.wear_suit) From fa4f05b919cd7058b2bece408a87a02d6e143a63 Mon Sep 17 00:00:00 2001 From: Sishen Date: Wed, 18 Sep 2019 20:13:12 -0400 Subject: [PATCH 54/79] Update ert.dm --- code/datums/ert.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 4976891543..4b4cce3794 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -61,7 +61,7 @@ teamsize = 1 opendoors = FALSE enforce_human = FALSE - roles = /datum/antagonist/greybois + roles = list(/datum/antagonist/greybois) leader_role = /datum/antagonist/greybois/greygod rename_team = "Emergency Assistants" polldesc = "an Emergency Assistant" From 8a9ecc3deb420377cf309ad7b18da975e3e52d2f Mon Sep 17 00:00:00 2001 From: GrayRachnid Date: Wed, 18 Sep 2019 20:34:16 -0400 Subject: [PATCH 55/79] WINdoors --- .../map_files/Deltastation/DeltaStation2.dmm | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index aae5ff8ff9..c038d66335 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -15021,6 +15021,9 @@ location = "Bar" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/eastleft{ + req_access_txt = "25" + }, /turf/open/floor/plasteel, /area/crew_quarters/bar) "aGc" = ( @@ -21299,6 +21302,9 @@ location = "Theatre" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/westleft{ + req_access_txt = "46" + }, /turf/open/floor/plasteel, /area/crew_quarters/theatre) "aQj" = ( @@ -26153,6 +26159,9 @@ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/eastright{ + req_one_access_txt = "48,50" + }, /turf/open/floor/plasteel, /area/quartermaster/office) "aXg" = ( @@ -29213,6 +29222,9 @@ location = "Kitchen" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/eastleft{ + req_access_txt = "28" + }, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "bcd" = ( @@ -30865,6 +30877,9 @@ location = "Hydroponics" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/westleft{ + req_access_txt = "35" + }, /turf/open/floor/plasteel, /area/hallway/secondary/service) "beW" = ( @@ -36055,6 +36070,9 @@ /obj/structure/plasticflaps/opaque, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/northright{ + req_access_txt = "48" + }, /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "bnB" = ( @@ -41789,6 +41807,9 @@ location = "Atmospherics" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/westleft{ + req_access_txt = "24" + }, /turf/open/floor/plasteel, /area/engine/atmos) "bwH" = ( @@ -82547,6 +82568,9 @@ location = "Engineering" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/northright{ + req_access_txt = "10" + }, /turf/open/floor/plasteel, /area/engine/engineering) "cIr" = ( @@ -87734,6 +87758,9 @@ location = "Medbay" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/westleft{ + req_access_txt = "5" + }, /turf/open/floor/plasteel, /area/medical/storage) "cRl" = ( @@ -114081,6 +114108,9 @@ location = "Robotics" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/northright{ + req_access_txt = "47" + }, /turf/open/floor/plasteel, /area/science/robotics/lab) "dKl" = ( @@ -127273,6 +127303,19 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) +"oOb" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window{ + req_one_access_txt = "48,50" + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "oSD" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/general/visible{ @@ -167677,7 +167720,7 @@ aCP avQ aFe aGp -aHH +oOb aJg aKF aLP From e38b44d2bcbf40b889d32c3d2b59c1bb402143a2 Mon Sep 17 00:00:00 2001 From: GrayRachnid Date: Wed, 18 Sep 2019 20:35:48 -0400 Subject: [PATCH 56/79] missed one in security --- _maps/map_files/Deltastation/DeltaStation2.dmm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index c038d66335..da2f46696e 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -71774,6 +71774,9 @@ location = "Security" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/northleft{ + req_access_txt = "63" + }, /turf/open/floor/plasteel, /area/security/range) "cqh" = ( From 08eeda97f551c9b2f9538f012fd30113f254b5c9 Mon Sep 17 00:00:00 2001 From: Fermi <> Date: Thu, 19 Sep 2019 01:45:21 +0100 Subject: [PATCH 57/79] Heck --- _maps/map_files/PubbyStation/PubbyStation.dmm | 12 +- _maps/map_files/generic/CentCom.dmm | 4 +- code/__DEFINES/DNA.dm | 7 + code/__DEFINES/admin.dm | 7 + code/__DEFINES/citadel_defines.dm | 11 - code/__DEFINES/is_helpers.dm | 2 +- code/__DEFINES/jobs.dm | 38 + code/__DEFINES/maths.dm | 6 + code/__DEFINES/misc.dm | 3 + code/__DEFINES/preferences.dm | 7 +- code/__HELPERS/_cit_helpers.dm | 6 + code/__HELPERS/cmp.dm | 3 + code/__HELPERS/global_lists.dm | 13 +- code/__HELPERS/mobs.dm | 49 +- code/__HELPERS/roundend.dm | 7 + code/__HELPERS/time.dm | 8 + code/_globalvars/lists/flavor_misc.dm | 3 +- code/controllers/subsystem/assets.dm | 12 +- code/controllers/subsystem/job.dm | 180 +- code/controllers/subsystem/ticker.dm | 2 +- code/datums/outfit.dm | 8 + code/game/gamemodes/brother/traitor_bro.dm | 2 +- code/game/gamemodes/clock_cult/clock_cult.dm | 2 +- code/game/gamemodes/cult/cult.dm | 4 +- code/game/gamemodes/dynamic/dynamic.dm | 750 ++++++ .../gamemodes/dynamic/dynamic_rulesets.dm | 211 ++ .../dynamic/dynamic_rulesets_latejoin.dm | 110 + .../dynamic/dynamic_rulesets_midround.dm | 460 ++++ .../dynamic/dynamic_rulesets_roundstart.dm | 732 ++++++ code/game/gamemodes/dynamic/readme.md | 57 + code/game/gamemodes/game_mode.dm | 7 +- code/game/gamemodes/overthrow/overthrow.dm | 3 +- code/game/gamemodes/revolution/revolution.dm | 3 +- code/game/gamemodes/traitor/traitor.dm | 2 +- code/game/machinery/limbgrower.dm | 4 +- code/game/objects/effects/spawners/bundle.dm | 2 +- code/game/objects/items/holy_weapons.dm | 12 +- code/game/objects/items/melee/misc.dm | 19 +- .../crates_lockers/closets/job_closets.dm | 4 +- code/game/objects/structures/dresser.dm | 2 +- code/modules/admin/admin.dm | 57 + code/modules/admin/create_mob.dm | 3 +- code/modules/admin/topic.dm | 290 +++ .../antagonists/abductor/equipment/gland.dm | 2 +- .../changeling/powers/strained_muscles.dm | 2 + code/modules/client/client_defines.dm | 5 + code/modules/client/preferences.dm | 286 +-- code/modules/client/preferences_savefile.dm | 280 ++- code/modules/clothing/suits/jobs.dm | 30 +- code/modules/clothing/suits/miscellaneous.dm | 17 - code/modules/clothing/under/accessories.dm | 36 +- .../food_and_drinks/food/snacks/meat.dm | 2 +- .../food_and_drinks/recipes/drinks_recipes.dm | 7 +- .../recipes/tablecraft/recipes_pastry.dm | 2 +- code/modules/hydroponics/grown/tea_coffee.dm | 20 +- code/modules/jobs/job_exp.dm | 2 + .../jobs/job_types/{job.dm => _job.dm} | 485 ++-- .../jobs/job_types/{silicon.dm => ai.dm} | 159 +- code/modules/jobs/job_types/assistant.dm | 2 +- .../jobs/job_types/atmospheric_technician.dm | 44 + code/modules/jobs/job_types/bartender.dm | 30 + code/modules/jobs/job_types/botanist.dm | 32 + code/modules/jobs/job_types/captain.dm | 62 +- code/modules/jobs/job_types/cargo_service.dm | 293 --- .../jobs/job_types/cargo_technician.dm | 27 + .../{civilian_chaplain.dm => chaplain.dm} | 216 +- code/modules/jobs/job_types/chemist.dm | 36 + code/modules/jobs/job_types/chief_engineer.dm | 64 + .../jobs/job_types/chief_medical_officer.dm | 59 + code/modules/jobs/job_types/civilian.dm | 206 -- code/modules/jobs/job_types/clown.dm | 58 + code/modules/jobs/job_types/cook.dm | 52 + code/modules/jobs/job_types/curator.dm | 43 + code/modules/jobs/job_types/cyborg.dm | 27 + code/modules/jobs/job_types/detective.dm | 57 + code/modules/jobs/job_types/engineering.dm | 169 -- code/modules/jobs/job_types/geneticist.dm | 35 + .../jobs/job_types/head_of_personnel.dm | 51 + .../jobs/job_types/head_of_security.dm | 68 + code/modules/jobs/job_types/janitor.dm | 27 + code/modules/jobs/job_types/lawyer.dm | 47 + code/modules/jobs/job_types/medical.dm | 207 -- code/modules/jobs/job_types/medical_doctor.dm | 35 + code/modules/jobs/job_types/mime.dm | 49 + code/modules/jobs/job_types/quartermaster.dm | 41 + .../jobs/job_types/research_director.dm | 61 + code/modules/jobs/job_types/roboticist.dm | 34 + code/modules/jobs/job_types/science.dm | 133 -- code/modules/jobs/job_types/scientist.dm | 33 + code/modules/jobs/job_types/security.dm | 346 --- .../jobs/job_types/security_officer.dm | 159 ++ code/modules/jobs/job_types/shaft_miner.dm | 77 + .../jobs/job_types/station_engineer.dm | 54 + code/modules/jobs/job_types/virologist.dm | 35 + code/modules/jobs/job_types/warden.dm | 56 + code/modules/keybindings/bindings_client.dm | 41 +- code/modules/keybindings/setup.dm | 20 +- .../modules/mob/dead/new_player/new_player.dm | 153 +- .../mob/dead/new_player/preferences_setup.dm | 55 +- .../sprite_accessories/Citadel_Snowflake.dm | 53 + .../sprite_accessories/_sprite_accessories.dm | 11 + .../sprite_accessories/alienpeople.dm | 53 + .../sprite_accessories/body_markings.dm | 275 ++- .../new_player/sprite_accessories/ears.dm | 289 ++- .../sprite_accessories/hair_face.dm | 43 +- .../sprite_accessories/hair_head.dm | 161 +- .../new_player/sprite_accessories/horns.dm | 12 +- .../sprite_accessories/ipc_synths.dm | 158 ++ .../new_player/sprite_accessories/legs.dm | 8 - .../sprite_accessories/legs_and_taurs.dm | 124 + .../sprite_accessories/moth_wings.dm | 68 - .../new_player/sprite_accessories/snouts.dm | 357 ++- .../new_player/sprite_accessories/tails.dm | 663 +++++- .../new_player/sprite_accessories/wings.dm | 120 +- .../mob/living/carbon/alien/larva/emote.dm | 113 - code/modules/mob/living/carbon/human/human.dm | 9 +- .../mob/living/carbon/human/human_defines.dm | 2 + code/modules/mob/living/carbon/human/life.dm | 6 +- code/modules/mob/living/carbon/human/login.dm | 9 - .../mob/living/carbon/human/species.dm | 192 +- .../carbon/human/species_types/bugmen.dm | 64 + .../carbon/human/species_types/flypeople.dm | 2 +- .../carbon/human/species_types/furrypeople.dm | 98 + .../carbon/human/species_types/golems.dm | 2 +- .../living/carbon/human/species_types/ipc.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 262 ++- .../human/species_types/lizardpeople.dm | 12 +- .../carbon/human/species_types/mothmen.dm | 61 - .../carbon/human/species_types/mushpeople.dm | 2 +- .../carbon/human/species_types/plasmamen.dm | 2 +- .../carbon/human/species_types/podpeople.dm | 3 +- .../carbon/human/species_types/synths.dm | 2 +- .../mob/living/carbon/human/whisper.dm | 91 - code/modules/oracle_ui/README.md | 233 ++ code/modules/oracle_ui/assets.dm | 8 + code/modules/oracle_ui/hookup_procs.dm | 44 + code/modules/oracle_ui/oracle_ui.dm | 134 ++ code/modules/oracle_ui/themed.dm | 82 + code/modules/paperwork/paper.dm | 56 +- .../projectiles/guns/ballistic/shotgun.dm | 1 + .../projectiles/projectile/bullets/shotgun.dm | 8 +- .../chemistry/machinery/chem_master.dm | 41 +- .../chemistry/reagents/alcohol_reagents.dm | 4 +- .../chemistry/reagents/drink_reagents.dm | 20 + .../chemistry/reagents/other_reagents.dm | 21 +- .../reagents/chemistry/recipes/others.dm | 2 +- code/modules/recycling/disposal/bin.dm | 50 +- .../research/designs/limbgrower_designs.dm | 8 +- code/modules/surgery/bodyparts/bodyparts.dm | 54 +- code/modules/surgery/organs/eyes.dm | 4 +- code/modules/vending/autodrobe.dm | 4 +- code/modules/vending/clothesmate.dm | 10 +- code/modules/vending/wardrobes.dm | 6 +- config/game_options.txt | 2 +- html/changelogs/AutoChangeLog-pr-9086.yml | 4 + html/changelogs/AutoChangeLog-pr-9109.yml | 4 + html/changelogs/AutoChangeLog-pr-9199.yml | 7 + html/changelogs/AutoChangeLog-pr-9241.yml | 6 + html/changelogs/AutoChangeLog-pr-9251.yml | 5 + html/changelogs/AutoChangeLog-pr-9275.yml | 5 + html/changelogs/AutoChangeLog-pr-9276.yml | 6 + html/changelogs/AutoChangeLog-pr-9277.yml | 11 + html/changelogs/AutoChangeLog-pr-9278.yml | 4 + html/changelogs/AutoChangeLog-pr-9279.yml | 4 + html/changelogs/AutoChangeLog-pr-9288.yml | 4 + html/changelogs/AutoChangeLog-pr-9289.yml | 4 + html/changelogs/AutoChangeLog-pr-9295.yml | 4 + html/changelogs/AutoChangeLog-pr-9302.yml | 4 + .../oracle_ui/content/disposal_bin/index.html | 27 + html/oracle_ui/editor_tool.html | 103 + html/oracle_ui/themes/nano/index.html | 19 + .../oracle_ui/themes/nano/sui-nano-common.css | 353 +++ html/oracle_ui/themes/nano/sui-nano-common.js | 47 + .../themes/nano/sui-nano-jquery.min.js | 4 + icons/mob/accessories.dmi | Bin 8771 -> 9452 bytes icons/mob/human_parts.dmi | Bin 38495 -> 41133 bytes icons/mob/human_parts_greyscale.dmi | Bin 55820 -> 60456 bytes icons/mob/mutant_bodyparts.dmi | Bin 33474 -> 34161 bytes icons/mob/wings.dmi | Bin 79283 -> 95000 bytes icons/obj/clothing/accessories.dmi | Bin 9764 -> 10692 bytes icons/obj/hydroponics/growing_flowers.dmi | Bin 13230 -> 14070 bytes icons/obj/hydroponics/harvest.dmi | Bin 51762 -> 52053 bytes icons/obj/hydroponics/seeds.dmi | Bin 22779 -> 22917 bytes .../code/game/gamemodes/gangs/gang_datums.dm | 4 +- .../code/game/objects/items/meat.dm | 26 - .../code/game/objects/items/melee/misc.dm | 57 - modular_citadel/code/init.dm | 20 - .../modules/food_and_drinks/snacks/meat.dm | 26 + .../mob/dead/new_player/sprite_accessories.dm | 2083 ----------------- .../modules/mob/living/carbon/human/human.dm | 6 - .../modules/mob/living/carbon/human/life.dm | 21 - .../mob/living/carbon/human/species.dm | 166 -- .../carbon/human/species_types/furrypeople.dm | 237 -- .../carbon/human/species_types/jellypeople.dm | 257 -- .../reagents/chemistry/recipes/fermi.dm | 3 + modular_citadel/icons/mob/mam_ears.dmi | Bin 10077 -> 10087 bytes modular_citadel/icons/mob/mam_markings.dmi | Bin 93529 -> 106979 bytes .../icons/mob/markings_notmammals.dmi | Bin 37510 -> 45688 bytes .../icons/mob/mutant_bodyparts.dmi | Bin 8294 -> 6146 bytes tgui/assets/tgui.js | 8 +- tgui/src/interfaces/chem_master.ract | 4 +- 201 files changed, 9676 insertions(+), 5741 deletions(-) create mode 100644 code/game/gamemodes/dynamic/dynamic.dm create mode 100644 code/game/gamemodes/dynamic/dynamic_rulesets.dm create mode 100644 code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm create mode 100644 code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm create mode 100644 code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm create mode 100644 code/game/gamemodes/dynamic/readme.md rename code/modules/jobs/job_types/{job.dm => _job.dm} (88%) rename code/modules/jobs/job_types/{silicon.dm => ai.dm} (71%) create mode 100644 code/modules/jobs/job_types/atmospheric_technician.dm create mode 100644 code/modules/jobs/job_types/bartender.dm create mode 100644 code/modules/jobs/job_types/botanist.dm delete mode 100644 code/modules/jobs/job_types/cargo_service.dm create mode 100644 code/modules/jobs/job_types/cargo_technician.dm rename code/modules/jobs/job_types/{civilian_chaplain.dm => chaplain.dm} (66%) create mode 100644 code/modules/jobs/job_types/chemist.dm create mode 100644 code/modules/jobs/job_types/chief_engineer.dm create mode 100644 code/modules/jobs/job_types/chief_medical_officer.dm delete mode 100644 code/modules/jobs/job_types/civilian.dm create mode 100644 code/modules/jobs/job_types/clown.dm create mode 100644 code/modules/jobs/job_types/cook.dm create mode 100644 code/modules/jobs/job_types/curator.dm create mode 100644 code/modules/jobs/job_types/cyborg.dm create mode 100644 code/modules/jobs/job_types/detective.dm delete mode 100644 code/modules/jobs/job_types/engineering.dm create mode 100644 code/modules/jobs/job_types/geneticist.dm create mode 100644 code/modules/jobs/job_types/head_of_personnel.dm create mode 100644 code/modules/jobs/job_types/head_of_security.dm create mode 100644 code/modules/jobs/job_types/janitor.dm create mode 100644 code/modules/jobs/job_types/lawyer.dm delete mode 100644 code/modules/jobs/job_types/medical.dm create mode 100644 code/modules/jobs/job_types/medical_doctor.dm create mode 100644 code/modules/jobs/job_types/mime.dm create mode 100644 code/modules/jobs/job_types/quartermaster.dm create mode 100644 code/modules/jobs/job_types/research_director.dm create mode 100644 code/modules/jobs/job_types/roboticist.dm delete mode 100644 code/modules/jobs/job_types/science.dm create mode 100644 code/modules/jobs/job_types/scientist.dm delete mode 100644 code/modules/jobs/job_types/security.dm create mode 100644 code/modules/jobs/job_types/security_officer.dm create mode 100644 code/modules/jobs/job_types/shaft_miner.dm create mode 100644 code/modules/jobs/job_types/station_engineer.dm create mode 100644 code/modules/jobs/job_types/virologist.dm create mode 100644 code/modules/jobs/job_types/warden.dm create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm delete mode 100644 code/modules/mob/dead/new_player/sprite_accessories/legs.dm create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm delete mode 100644 code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm delete mode 100644 code/modules/mob/living/carbon/alien/larva/emote.dm delete mode 100644 code/modules/mob/living/carbon/human/login.dm create mode 100644 code/modules/mob/living/carbon/human/species_types/bugmen.dm create mode 100644 code/modules/mob/living/carbon/human/species_types/furrypeople.dm rename {modular_citadel/code => code}/modules/mob/living/carbon/human/species_types/ipc.dm (98%) delete mode 100644 code/modules/mob/living/carbon/human/species_types/mothmen.dm delete mode 100644 code/modules/mob/living/carbon/human/whisper.dm create mode 100644 code/modules/oracle_ui/README.md create mode 100644 code/modules/oracle_ui/assets.dm create mode 100644 code/modules/oracle_ui/hookup_procs.dm create mode 100644 code/modules/oracle_ui/oracle_ui.dm create mode 100644 code/modules/oracle_ui/themed.dm create mode 100644 html/changelogs/AutoChangeLog-pr-9086.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9109.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9199.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9241.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9251.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9275.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9276.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9277.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9278.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9279.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9288.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9289.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9295.yml create mode 100644 html/changelogs/AutoChangeLog-pr-9302.yml create mode 100644 html/oracle_ui/content/disposal_bin/index.html create mode 100644 html/oracle_ui/editor_tool.html create mode 100644 html/oracle_ui/themes/nano/index.html create mode 100644 html/oracle_ui/themes/nano/sui-nano-common.css create mode 100644 html/oracle_ui/themes/nano/sui-nano-common.js create mode 100644 html/oracle_ui/themes/nano/sui-nano-jquery.min.js delete mode 100644 modular_citadel/code/game/objects/items/meat.dm delete mode 100644 modular_citadel/code/game/objects/items/melee/misc.dm delete mode 100644 modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm delete mode 100644 modular_citadel/code/modules/mob/living/carbon/human/life.dm delete mode 100644 modular_citadel/code/modules/mob/living/carbon/human/species.dm delete mode 100644 modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm delete mode 100644 modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 2e8887c75f..7e4f54c8b4 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -47466,8 +47466,8 @@ /area/hydroponics/garden/monastery) "cgL" = ( /obj/structure/closet/cabinet, -/obj/item/clothing/suit/holidaypriest, -/obj/item/clothing/suit/nun, +/obj/item/clothing/suit/chaplain/holidaypriest, +/obj/item/clothing/suit/chaplain/nun, /obj/item/clothing/head/nun_hood, /obj/machinery/button/door{ id = "Cell1"; @@ -47834,8 +47834,8 @@ /area/space/nearstation) "cio" = ( /obj/structure/closet/cabinet, -/obj/item/clothing/suit/holidaypriest, -/obj/item/clothing/suit/nun, +/obj/item/clothing/suit/chaplain/holidaypriest, +/obj/item/clothing/suit/chaplain/nun, /obj/item/clothing/head/nun_hood, /obj/machinery/button/door{ id = "Cell2"; @@ -50476,8 +50476,8 @@ /obj/structure/closet, /obj/item/storage/backpack/cultpack, /obj/item/clothing/head/nun_hood, -/obj/item/clothing/suit/nun, -/obj/item/clothing/suit/holidaypriest, +/obj/item/clothing/suit/chaplain/nun, +/obj/item/clothing/suit/chaplain/holidaypriest, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index d04ee2fe49..80e80cd6a9 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -1264,9 +1264,9 @@ /area/holodeck/rec_center/chapelcourt) "dw" = ( /obj/structure/table/wood/fancy, -/obj/item/clothing/suit/nun, +/obj/item/clothing/suit/chaplain/nun, /obj/item/clothing/head/nun_hood, -/obj/item/clothing/suit/holidaypriest, +/obj/item/clothing/suit/chaplain/holidaypriest, /turf/open/floor/holofloor{ dir = 8; icon_state = "dark" diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 4ed099d9e2..4372c4ca24 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -98,6 +98,13 @@ #define DRINKSBLOOD 15 #define NOEYES 16 #define MARKINGS 17 +#define MUTCOLORS2 18 +#define MUTCOLORS3 19 +#define NOAROUSAL 20 //Stops all arousal effects +#define NOGENITALS 21 //Cannot create, use, or otherwise have genitals +#define MATRIXED 22 //if icon is color matrix'd +#define SKINTONE 23 //uses skin tones +#define HORNCOLOR 24 #define ORGAN_SLOT_BRAIN "brain" #define ORGAN_SLOT_APPENDIX "appendix" diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index fb42bc46c0..b875998f0a 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -81,3 +81,10 @@ #define SPAM_TRIGGER_WARNING 5 //Number of identical messages required before the spam-prevention will warn you to stfu #define SPAM_TRIGGER_AUTOMUTE 10 //Number of identical messages required before the spam-prevention will automute you + +///Max length of a keypress command before it's considered to be a forged packet/bogus command +#define MAX_KEYPRESS_COMMANDLENGTH 16 +///Max amount of keypress messages per second over two seconds before client is autokicked +#define MAX_KEYPRESS_AUTOKICK 100 +///Length of held key rolling buffer +#define HELD_KEY_BUFFER_LENGTH 15 diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index da5981ff8a..d966c73d23 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -89,17 +89,6 @@ //Damage stuffs #define AROUSAL "arousal" -//DNA stuffs. Remember to change this if upstream adds more snowflake options - - -//Species stuffs. Remember to change this if upstream updates species flags -#define MUTCOLORS2 35 -#define MUTCOLORS3 36 -#define NOAROUSAL 37 //Stops all arousal effects -#define NOGENITALS 38 //Cannot create, use, or otherwise have genitals -#define MATRIXED 39 //if icon is color matrix'd -#define SKINTONE 40 //uses skin tones - //Citadel istypes #define isgenital(A) (istype(A, /obj/item/organ/genital)) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 8ff40c3ef9..ef9e6a044f 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -56,7 +56,7 @@ #define isslimeperson(A) (is_species(A, /datum/species/jelly/slime)) #define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent)) #define iszombie(A) (is_species(A, /datum/species/zombie)) -#define ismoth(A) (is_species(A, /datum/species/moth)) +#define ismoth(A) (is_species(A, /datum/species/insect)) #define ishumanbasic(A) (is_species(A, /datum/species/human)) #define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid) ) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index dc4080a789..e6eb9f313e 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -48,3 +48,41 @@ #define JOB_UNAVAILABLE_PLAYTIME 3 #define JOB_UNAVAILABLE_ACCOUNTAGE 4 #define JOB_UNAVAILABLE_SLOTFULL 5 + +#define DEFAULT_RELIGION "Christianity" +#define DEFAULT_DEITY "Space Jesus" + +#define JOB_DISPLAY_ORDER_DEFAULT 0 + +#define JOB_DISPLAY_ORDER_ASSISTANT 1 +#define JOB_DISPLAY_ORDER_CAPTAIN 2 +#define JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL 3 +#define JOB_DISPLAY_ORDER_BARTENDER 4 +#define JOB_DISPLAY_ORDER_COOK 5 +#define JOB_DISPLAY_ORDER_BOTANIST 6 +#define JOB_DISPLAY_ORDER_JANITOR 7 +#define JOB_DISPLAY_ORDER_CLOWN 8 +#define JOB_DISPLAY_ORDER_MIME 9 +#define JOB_DISPLAY_ORDER_CURATOR 10 +#define JOB_DISPLAY_ORDER_LAWYER 11 +#define JOB_DISPLAY_ORDER_CHAPLAIN 12 +#define JOB_DISPLAY_ORDER_QUARTERMASTER 13 +#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 14 +#define JOB_DISPLAY_ORDER_SHAFT_MINER 15 +#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 16 +#define JOB_DISPLAY_ORDER_STATION_ENGINEER 17 +#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 18 +#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 19 +#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 20 +#define JOB_DISPLAY_ORDER_CHEMIST 21 +#define JOB_DISPLAY_ORDER_GENETICIST 22 +#define JOB_DISPLAY_ORDER_VIROLOGIST 23 +#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 24 +#define JOB_DISPLAY_ORDER_SCIENTIST 25 +#define JOB_DISPLAY_ORDER_ROBOTICIST 26 +#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 27 +#define JOB_DISPLAY_ORDER_WARDEN 28 +#define JOB_DISPLAY_ORDER_DETECTIVE 29 +#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 30 +#define JOB_DISPLAY_ORDER_AI 31 +#define JOB_DISPLAY_ORDER_CYBORG 32 diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index d344f7f010..5bce51293f 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -201,4 +201,10 @@ return list(region_x1 & region_x2, region_y1 & region_y2) +#define EXP_DISTRIBUTION(desired_mean) ( -(1/(1/desired_mean)) * log(rand(1, 1000) * 0.001) ) + +#define LORENTZ_DISTRIBUTION(x, s) ( s*TAN(TODEGREES(PI*(rand()-0.5))) + x ) +#define LORENTZ_CUMULATIVE_DISTRIBUTION(x, y, s) ( (1/PI)*TORADIANS(arctan((x-y)/s)) + 1/2 ) + +#define RULE_OF_THREE(a, b, x) ((a*x)/b) // ) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index c71780e7e9..b6115e93e9 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -472,6 +472,9 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S #define EGG_LAYING_MESSAGES list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") +// list of all null rod weapons +#define HOLY_WEAPONS /obj/item/nullrod, /obj/item/twohanded/dualsaber/hypereutactic/chaplain, /obj/item/gun/energy/laser/redtag/hitscan/chaplain, /obj/item/multitool/chaplain, /obj/item/melee/baseball_bat/chaplain + // Used by PDA and cartridge code to reduce repetitiveness of spritesheets #define PDAIMG(what) {""} diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 02f151dcd9..0992b2e586 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -69,4 +69,9 @@ //Flags in the players table in the db #define DB_FLAG_EXEMPT 1 -#define DEFAULT_CYBORG_NAME "Default Cyborg Name" \ No newline at end of file +#define DEFAULT_CYBORG_NAME "Default Cyborg Name" + +//Job preferences levels +#define JP_LOW 1 +#define JP_MEDIUM 2 +#define JP_HIGH 3 diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index 8683f75b08..86d0a34e3e 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -94,6 +94,12 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors "Purple" = "#e300ff"//purple )) +GLOBAL_LIST_INIT(meat_types, list( + "Mammalian" = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal, + "Aquatic" = /obj/item/reagent_containers/food/snacks/carpmeat/aquatic, + "Avian" = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/avian, + "Inesct" = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect)) + //Crew objective and miscreants stuff GLOBAL_VAR_INIT(miscreants_allowed, FALSE) diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index e09ebcb10c..37f36a7e0d 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -81,3 +81,6 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_advdisease_resistance_asc(datum/disease/advance/A, datum/disease/advance/B) return A.totalResistance() - B.totalResistance() + +/proc/cmp_job_display_asc(datum/job/A, datum/job/B) + return A.display_order - B.display_order diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index ad2bedaa4e..b20122e653 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -30,7 +30,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.r_wings_list,roundstart = TRUE) init_sprite_accessory_subtypes(/datum/sprite_accessory/caps, GLOB.caps_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_wings, GLOB.insect_wings_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_fluff, GLOB.insect_fluffs_list) //CIT CHANGES START HERE, ADDS SNOWFLAKE BODYPARTS AND MORE //mammal bodyparts (fucking furries) @@ -44,6 +45,9 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, GLOB.xeno_head_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, GLOB.xeno_tail_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, GLOB.xeno_dorsal_list) + //ipcs + init_sprite_accessory_subtypes(/datum/sprite_accessory/screen, GLOB.ipc_screens_list, roundstart = TRUE) + init_sprite_accessory_subtypes(/datum/sprite_accessory/antenna, GLOB.ipc_antennas_list, roundstart = TRUE) //genitals init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list) for(var/K in GLOB.cock_shapes_list) @@ -53,7 +57,11 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list) GLOB.breasts_size_list = list ("a", "b", "c", "d", "e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing. - GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret", "baloney pony", "schlanger") + GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", + "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret", + "baloney pony", "schlanger", "Mutton dagger", "old blind bob","Hanging Johnny", "fishing rod", "Tally whacker", "polly rocket", + "One eyed trouser trout", "Ding dong", "ankle spanker", "Pork sword", "engine cranker", "Harry hot dog", "Davy Crockett", + "Kidney cracker", "Heat seeking moisture missile", "Giggle stick", "love whistle", "Tube steak", "Uncle Dick", "Purple helmet warrior") for(var/K in GLOB.breasts_shapes_list) var/datum/sprite_accessory/breasts/value = GLOB.breasts_shapes_list[K] GLOB.breasts_shapes_icons[K] = value.icon_state @@ -62,6 +70,7 @@ for(var/K in GLOB.balls_shapes_list) var/datum/sprite_accessory/testicles/value = GLOB.balls_shapes_list[K] GLOB.balls_shapes_icons[K] = value.icon_state + //END OF CIT CHANGES //Species diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 7ec99fa885..8f3cd4f60d 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -59,7 +59,7 @@ if(!GLOB.horns_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, GLOB.horns_list) if(!GLOB.ears_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, GLOB.horns_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, GLOB.ears_list) if(!GLOB.frills_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, GLOB.frills_list) if(!GLOB.spines_list.len) @@ -70,8 +70,10 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) if(!GLOB.wings_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) - if(!GLOB.moth_wings_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) + if(!GLOB.insect_wings_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_wings, GLOB.insect_wings_list) + if(!GLOB.insect_fluffs_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_fluff, GLOB.insect_fluffs_list) //CIT CHANGES - genitals and such if(!GLOB.cock_shapes_list.len) @@ -130,22 +132,23 @@ //CIT CHANGE - changes this entire return to support cit's snowflake parts return(list( - "mcolor" = color1, - "mcolor2" = color2, - "mcolor3" = color3, - "tail_lizard" = pick(GLOB.tails_list_lizard), - "tail_human" = "None", - "wings" = "None", - "snout" = pick(GLOB.snouts_list), - "horns" = pick(GLOB.horns_list), - "ears" = "None", - "frills" = pick(GLOB.frills_list), - "spines" = pick(GLOB.spines_list), - "body_markings" = pick(GLOB.body_markings_list), - "legs" = pick("Normal Legs","Digitigrade Legs"), - "caps" = pick(GLOB.caps_list), - "moth_wings" = pick(GLOB.moth_wings_list), - "taur" = "None", + "mcolor" = color1, + "mcolor2" = color2, + "mcolor3" = color3, + "tail_lizard" = pick(GLOB.tails_list_lizard), + "tail_human" = "None", + "wings" = "None", + "snout" = pick(GLOB.snouts_list), + "horns" = pick(GLOB.horns_list), + "ears" = "None", + "frills" = pick(GLOB.frills_list), + "spines" = pick(GLOB.spines_list), + "body_markings" = pick(GLOB.body_markings_list), + "legs" = pick("Plantigrade","Digitigrade"), + "caps" = pick(GLOB.caps_list), + "insect_wings" = pick(GLOB.insect_wings_list), + "insect_fluff" = "None", + "taur" = "None", "mam_body_markings" = pick(snowflake_markings_list), "mam_ears" = pick(snowflake_ears_list), "mam_snouts" = pick(snowflake_mam_snouts_list), @@ -201,9 +204,11 @@ "womb_cum_mult" = CUM_RATE_MULT, "womb_efficiency" = CUM_EFFICIENCY, "womb_fluid" = "femcum", - "ipc_screen" = "Sunburst", - "ipc_antenna" = "None", - "flavor_text" = "")) + "ipc_screen" = "Sunburst", + "ipc_antenna" = "None", + "flavor_text" = "", + "meat_type" = "Mammalian" + )) /proc/random_hair_style(gender) switch(gender) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 55d9e7a6cd..0e9413520b 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -308,6 +308,13 @@ //ignore this comment, it fixes the broken sytax parsing caused by the " above else parts += "[GLOB.TAB]Nobody died this shift!" + if(istype(SSticker.mode, /datum/game_mode/dynamic)) + var/datum/game_mode/dynamic/mode = SSticker.mode + parts += "[GLOB.TAB]Threat level: [mode.threat_level]" + parts += "[GLOB.TAB]Threat left: [mode.threat]" + parts += "[GLOB.TAB]Executed rules:" + for(var/datum/dynamic_ruleset/rule in mode.executed_rules) + parts += "[GLOB.TAB][GLOB.TAB][rule.ruletype] - [rule.name]: -[rule.cost] threat" return parts.Join("
") /client/proc/roundend_report_file() diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index b28e7b5807..f0d5a7b252 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -73,3 +73,11 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) /proc/daysSince(realtimev) return round((world.realtime - realtimev) / (24 HOURS)) + +/proc/worldtime2text() + return gameTimestamp("hh:mm:ss", world.time) + +/proc/gameTimestamp(format = "hh:mm:ss", wtime=null) + if(!wtime) + wtime = world.time + return time2text(wtime - GLOB.timezoneOffset, format) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index d09368d7b7..c759658bd4 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -34,7 +34,8 @@ GLOBAL_LIST_EMPTY(ears_list) GLOBAL_LIST_EMPTY(wings_list) GLOBAL_LIST_EMPTY(wings_open_list) GLOBAL_LIST_EMPTY(r_wings_list) -GLOBAL_LIST_EMPTY(moth_wings_list) +GLOBAL_LIST_EMPTY(insect_wings_list) +GLOBAL_LIST_EMPTY(insect_fluffs_list) GLOBAL_LIST_EMPTY(caps_list) GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index 7285298283..7b6554bd3f 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -6,7 +6,17 @@ SUBSYSTEM_DEF(assets) var/list/preload = list() /datum/controller/subsystem/assets/Initialize(timeofday) - for(var/type in typesof(/datum/asset)) + + var/list/priority_assets = list( + /datum/asset/simple/oui_theme_nano, + /datum/asset/simple/goonchat + ) + + for(var/type in priority_assets) + var/datum/asset/A = new type() + A.register() + + for(var/type in typesof(/datum/asset) - (priority_assets | list(/datum/asset, /datum/asset/simple))) var/datum/asset/A = type if (type != initial(A._abstract)) get_asset_datum(type) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 4001c666ee..a0d9226e14 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -116,7 +116,7 @@ SUBSYSTEM_DEF(job) if(player.mind && job.title in player.mind.restricted_roles) JobDebug("FOC incompatible with antagonist role, Player: [player]") continue - if(player.client.prefs.GetJobDepartment(job, level) & job.flag) + if(player.client.prefs.job_preferences["[job.title]"] == level) JobDebug("FOC pass, Player: [player], Level:[level]") candidates += player return candidates @@ -182,7 +182,7 @@ SUBSYSTEM_DEF(job) if((job.current_positions >= job.total_positions) && job.total_positions != -1) continue var/list/candidates = FindOccupationCandidates(job, level) - if(!candidates.len) + if(!candidates?.len) continue var/mob/dead/new_player/candidate = pick(candidates) if(AssignRole(candidate, command_position)) @@ -200,7 +200,7 @@ SUBSYSTEM_DEF(job) if((job.current_positions >= job.total_positions) && job.total_positions != -1) continue var/list/candidates = FindOccupationCandidates(job, level) - if(!candidates.len) + if(!candidates?.len) continue var/mob/dead/new_player/candidate = pick(candidates) AssignRole(candidate, command_position) @@ -228,7 +228,7 @@ SUBSYSTEM_DEF(job) * fills var "assigned_role" for all ready players. * This proc must not have any side effect besides of modifying "assigned_role". **/ -/datum/controller/subsystem/job/proc/DivideOccupations() +/datum/controller/subsystem/job/proc/DivideOccupations(list/required_jobs) //Setup new player list and get the jobs list JobDebug("Running DO") @@ -241,14 +241,14 @@ SUBSYSTEM_DEF(job) //Get the players who are ready for(var/mob/dead/new_player/player in GLOB.player_list) - if(player.ready == PLAYER_READY_TO_PLAY && player.mind && !player.mind.assigned_role) + if(player.ready == PLAYER_READY_TO_PLAY && player.check_preferences() && player.mind && !player.mind.assigned_role) unassigned += player initial_players_to_assign = unassigned.len - JobDebug("DO, Len: [unassigned.len]") + JobDebug("DO, Len: [unassigned?.len]") if(unassigned.len == 0) - return 0 + return validate_required_jobs(required_jobs) //Scale number of open security officer slots to population setup_officer_positions() @@ -269,8 +269,8 @@ SUBSYSTEM_DEF(job) //People who wants to be the overflow role, sure, go on. JobDebug("DO, Running Overflow Check 1") var/datum/job/overflow = GetJob(SSjob.overflow_role) - var/list/overflow_candidates = FindOccupationCandidates(overflow, 3) - JobDebug("AC1, Candidates: [overflow_candidates.len]") + var/list/overflow_candidates = FindOccupationCandidates(overflow, JP_LOW) + JobDebug("AC1, Candidates: [overflow_candidates?.len]") for(var/mob/dead/new_player/player in overflow_candidates) JobDebug("AC1 pass, Player: [player]") AssignRole(player, SSjob.overflow_role) @@ -297,7 +297,8 @@ SUBSYSTEM_DEF(job) // Loop through all levels from high to low var/list/shuffledoccupations = shuffle(occupations) - for(var/level = 1 to 3) + var/list/levels = list(JP_HIGH,JP_MEDIUM,JP_LOW) + for(var/level in levels) //Check the head jobs first each level CheckHeadPositions(level) @@ -332,7 +333,7 @@ SUBSYSTEM_DEF(job) continue // If the player wants that job on this level, then try give it to him. - if(player.client.prefs.GetJobDepartment(job, level) & job.flag) + if(player.client.prefs.job_preferences["[job.title]"] == level) // If the job isn't filled if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) JobDebug("DO pass, Player: [player], Level:[level], Job:[job.title]") @@ -351,9 +352,28 @@ SUBSYSTEM_DEF(job) //Mop up people who can't leave. for(var/mob/dead/new_player/player in unassigned) //Players that wanted to back out but couldn't because they're antags (can you feel the edge case?) if(!GiveRandomJob(player)) - AssignRole(player, SSjob.overflow_role) //If everything is already filled, make them an assistant + if(!AssignRole(player, SSjob.overflow_role)) //If everything is already filled, make them an assistant + return FALSE //Living on the edge, the forced antagonist couldn't be assigned to overflow role (bans, client age) - just reroll - return 1 + return validate_required_jobs(required_jobs) + +/datum/controller/subsystem/job/proc/validate_required_jobs(list/required_jobs) + if(!required_jobs.len) + return TRUE + for(var/required_group in required_jobs) + var/group_ok = TRUE + for(var/rank in required_group) + var/datum/job/J = GetJob(rank) + if(!J) + SSticker.mode.setup_error = "Invalid job [rank] in gamemode required jobs." + return FALSE + if(J.current_positions < required_group[rank]) + group_ok = FALSE + break + if(group_ok) + return TRUE + SSticker.mode.setup_error = "Required jobs not present." + return FALSE //We couldn't find a job from prefs for this guy. /datum/controller/subsystem/job/proc/HandleUnassigned(mob/dead/new_player/player) @@ -406,7 +426,7 @@ SUBSYSTEM_DEF(job) if(length(GLOB.jobspawn_overrides[rank])) S = pick(GLOB.jobspawn_overrides[rank]) if(S) - SendToAtom(H, S, buckle = FALSE) + S.JoinPlayerHere(H, FALSE) if(!S) //if there isn't a spawnpoint send them to latejoin, if there's no latejoin go yell at your mapper log_world("Couldn't find a round start spawn point for [rank]") SendToLateJoin(H) @@ -418,7 +438,7 @@ SUBSYSTEM_DEF(job) if(job) if(!job.dresscodecompliant)// CIT CHANGE - dress code compliance equip_loadout(N, H) // CIT CHANGE - allows players to spawn with loadout items - var/new_mob = job.equip(H, null, null, joined_late) + var/new_mob = job.equip(H, null, null, joined_late , null, M.client) if(ismob(new_mob)) H = new_mob if(!joined_late) @@ -428,12 +448,18 @@ SUBSYSTEM_DEF(job) SSpersistence.antag_rep_change[M.client.ckey] += job.GetAntagRep() +/* if(M.client.holder) + if(CONFIG_GET(flag/auto_deadmin_players) || (M.client.prefs?.toggles & DEADMIN_ALWAYS)) + M.client.holder.auto_deadmin() + else + handle_auto_deadmin_roles(M.client, rank) */ + to_chat(M, "You are the [rank].") if(job) to_chat(M, "As the [rank] you answer directly to [job.supervisors]. Special circumstances may change this.") - to_chat(M, "To speak on your departments radio, use the :h button. To see others, look closely at your headset.") + job.radio_help_message(M) if(job.req_admin_notify) - to_chat(M, "You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp.") + to_chat(M, "You are playing a job that is important for Game Progression. If you have to disconnect immediately, please notify the admins via adminhelp. Otherwise put your locker gear back into the locker and cryo out.") if(job.custom_spawn_text) to_chat(M, "[job.custom_spawn_text]") if(CONFIG_GET(number/minimal_access_threshold)) @@ -446,12 +472,24 @@ SUBSYSTEM_DEF(job) equip_loadout(N, H, TRUE)//CIT CHANGE - makes players spawn with in-backpack loadout items properly. A little hacky but it works return H - +/* +/datum/controller/subsystem/job/proc/handle_auto_deadmin_roles(client/C, rank) + if(!C?.holder) + return TRUE + var/datum/job/job = GetJob(rank) + if(!job) + return + if((job.auto_deadmin_role_flags & DEADMIN_POSITION_HEAD) && (CONFIG_GET(flag/auto_deadmin_heads) || (C.prefs?.toggles & DEADMIN_POSITION_HEAD))) + return C.holder.auto_deadmin() + else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SECURITY) && (CONFIG_GET(flag/auto_deadmin_security) || (C.prefs?.toggles & DEADMIN_POSITION_SECURITY))) + return C.holder.auto_deadmin() + else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SILICON) && (CONFIG_GET(flag/auto_deadmin_silicons) || (C.prefs?.toggles & DEADMIN_POSITION_SILICON))) //in the event there's ever psuedo-silicon roles added, ie synths. + return C.holder.auto_deadmin()*/ /datum/controller/subsystem/job/proc/setup_officer_positions() var/datum/job/J = SSjob.GetJob("Security Officer") if(!J) - throw EXCEPTION("setup_officer_positions(): Security officer job is missing") + CRASH("setup_officer_positions(): Security officer job is missing") var/ssc = CONFIG_GET(number/security_scaling_coeff) if(ssc > 0) @@ -502,13 +540,15 @@ SUBSYSTEM_DEF(job) if(job.required_playtime_remaining(player.client)) young++ continue - if(player.client.prefs.GetJobDepartment(job, 1) & job.flag) - high++ - else if(player.client.prefs.GetJobDepartment(job, 2) & job.flag) - medium++ - else if(player.client.prefs.GetJobDepartment(job, 3) & job.flag) - low++ - else never++ //not selected + switch(player.client.prefs.job_preferences["[job.title]"]) + if(JP_HIGH) + high++ + if(JP_MEDIUM) + medium++ + if(JP_LOW) + low++ + else + never++ SSblackbox.record_feedback("nested tally", "job_preferences", high, list("[job.title]", "high")) SSblackbox.record_feedback("nested tally", "job_preferences", medium, list("[job.title]", "medium")) SSblackbox.record_feedback("nested tally", "job_preferences", low, list("[job.title]", "low")) @@ -551,51 +591,61 @@ SUBSYSTEM_DEF(job) newjob.spawn_positions = J.spawn_positions newjob.current_positions = J.current_positions -/datum/controller/subsystem/job/proc/SendToAtom(mob/M, atom/A, buckle) - if(buckle && isliving(M) && istype(A, /obj/structure/chair)) - var/obj/structure/chair/C = A - if(C.buckle_mob(M, FALSE, FALSE)) - return - M.forceMove(get_turf(A)) +/atom/proc/JoinPlayerHere(mob/M, buckle) + // By default, just place the mob on the same turf as the marker or whatever. + M.forceMove(get_turf(src)) + +/obj/structure/chair/JoinPlayerHere(mob/M, buckle) + // Placing a mob in a chair will attempt to buckle it, or else fall back to default. + if (buckle && isliving(M) && buckle_mob(M, FALSE, FALSE)) + return + ..() /datum/controller/subsystem/job/proc/SendToLateJoin(mob/M, buckle = TRUE) + var/atom/destination if(M.mind && M.mind.assigned_role && length(GLOB.jobspawn_overrides[M.mind.assigned_role])) //We're doing something special today. - SendToAtom(M,pick(GLOB.jobspawn_overrides[M.mind.assigned_role]),FALSE) + destination = pick(GLOB.jobspawn_overrides[M.mind.assigned_role]) + destination.JoinPlayerHere(M, FALSE) return if(latejoin_trackers.len) - SendToAtom(M, pick(latejoin_trackers), buckle) - else - //bad mojo - var/area/shuttle/arrival/A = GLOB.areas_by_type[/area/shuttle/arrival] - if(A) - //first check if we can find a chair - var/obj/structure/chair/C = locate() in A - if(C) - SendToAtom(M, C, buckle) - return - else //last hurrah - var/list/avail = list() - for(var/turf/T in A) - if(!is_blocked_turf(T, TRUE)) - avail += T - if(avail.len) - SendToAtom(M, pick(avail), FALSE) - return + destination = pick(latejoin_trackers) + destination.JoinPlayerHere(M, buckle) + return - //pick an open spot on arrivals and dump em - var/list/arrivals_turfs = shuffle(get_area_turfs(/area/shuttle/arrival)) - if(arrivals_turfs.len) - for(var/turf/T in arrivals_turfs) - if(!is_blocked_turf(T, TRUE)) - SendToAtom(M, T, FALSE) - return - //last chance, pick ANY spot on arrivals and dump em - SendToAtom(M, arrivals_turfs[1], FALSE) - else - var/msg = "Unable to send mob [M] to late join!" - message_admins(msg) - CRASH(msg) + //bad mojo + var/area/shuttle/arrival/A = GLOB.areas_by_type[/area/shuttle/arrival] + if(A) + //first check if we can find a chair + var/obj/structure/chair/C = locate() in A + if(C) + C.JoinPlayerHere(M, buckle) + return + + //last hurrah + var/list/avail = list() + for(var/turf/T in A) + if(!is_blocked_turf(T, TRUE)) + avail += T + if(avail.len) + destination = pick(avail) + destination.JoinPlayerHere(M, FALSE) + return + + //pick an open spot on arrivals and dump em + var/list/arrivals_turfs = shuffle(get_area_turfs(/area/shuttle/arrival)) + if(arrivals_turfs.len) + for(var/turf/T in arrivals_turfs) + if(!is_blocked_turf(T, TRUE)) + T.JoinPlayerHere(M, FALSE) + return + //last chance, pick ANY spot on arrivals and dump em + destination = arrivals_turfs[1] + destination.JoinPlayerHere(M, FALSE) + else + var/msg = "Unable to send mob [M] to late join!" + message_admins(msg) + CRASH(msg) /////////////////////////////////// @@ -637,4 +687,4 @@ SUBSYSTEM_DEF(job) . |= player.mind /datum/controller/subsystem/job/proc/JobDebug(message) - log_job_debug(message) \ No newline at end of file + log_job_debug(message) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index f2469e8f7d..14e1e86f7d 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -255,7 +255,7 @@ SUBSYSTEM_DEF(ticker) var/can_continue = 0 can_continue = src.mode.pre_setup() //Choose antagonists CHECK_TICK - SSjob.DivideOccupations() //Distribute jobs + can_continue = can_continue && SSjob.DivideOccupations(mode.required_jobs) //Distribute jobs CHECK_TICK if(!GLOB.Debug2) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 1f5c28d3c2..68165af956 100755 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -21,6 +21,7 @@ var/l_hand = null var/internals_slot = null //ID of slot containing a gas tank var/list/backpack_contents = null // In the list(path=count,otherpath=count) format + var/box // Internals box. Will be inserted at the start of backpack_contents var/list/implants = null var/accessory = null @@ -83,6 +84,13 @@ H.equip_to_slot_or_del(new l_pocket(H),SLOT_L_STORE) if(r_pocket) H.equip_to_slot_or_del(new r_pocket(H),SLOT_R_STORE) + + if(box) + if(!backpack_contents) + backpack_contents = list() + backpack_contents.Insert(1, box) + backpack_contents[box] = 1 + if(backpack_contents) for(var/path in backpack_contents) var/number = backpack_contents[path] diff --git a/code/game/gamemodes/brother/traitor_bro.dm b/code/game/gamemodes/brother/traitor_bro.dm index 18611ebfcb..8bbe7f54ed 100644 --- a/code/game/gamemodes/brother/traitor_bro.dm +++ b/code/game/gamemodes/brother/traitor_bro.dm @@ -6,7 +6,7 @@ name = "traitor+brothers" config_tag = "traitorbro" restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Quartermaster", "Chief Engineer", "Research Director") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") announce_span = "danger" announce_text = "There are Syndicate agents and Blood Brothers on the station!\n\ diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 808022d25f..51a34f4194 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -135,7 +135,7 @@ Credit where due: required_enemies = 3 recommended_enemies = 5 enemy_minimum_age = 7 - protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") //Silicons can eventually be converted + protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //Silicons can eventually be converted restricted_jobs = list("Chaplain", "Captain") announce_span = "brass" announce_text = "Servants of Ratvar are trying to summon the Justiciar!\n\ diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index e7cc3c53ae..497cc2f1c3 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -35,8 +35,8 @@ config_tag = "cult" antag_flag = ROLE_CULTIST false_report_weight = 10 - restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel") - protected_jobs = list() + restricted_jobs = list("AI", "Cyborg") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_players = 30 required_enemies = 3 recommended_enemies = 5 diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm new file mode 100644 index 0000000000..ab4ac4d5c6 --- /dev/null +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -0,0 +1,750 @@ +#define CURRENT_LIVING_PLAYERS 1 +#define CURRENT_LIVING_ANTAGS 2 +#define CURRENT_DEAD_PLAYERS 3 +#define CURRENT_OBSERVERS 4 + +#define ONLY_RULESET 1 +#define HIGHLANDER_RULESET 2 +#define TRAITOR_RULESET 4 +#define MINOR_RULESET 8 + +#define RULESET_STOP_PROCESSING 1 + +// -- Injection delays +GLOBAL_VAR_INIT(dynamic_latejoin_delay_min, (5 MINUTES)) +GLOBAL_VAR_INIT(dynamic_latejoin_delay_max, (25 MINUTES)) + +GLOBAL_VAR_INIT(dynamic_midround_delay_min, (15 MINUTES)) +GLOBAL_VAR_INIT(dynamic_midround_delay_max, (35 MINUTES)) + +// Are HIGHLANDER_RULESETs allowed to stack? +GLOBAL_VAR_INIT(dynamic_no_stacking, TRUE) +// A number between -5 and +5. +// A negative value will give a more peaceful round and +// a positive value will give a round with higher threat. +GLOBAL_VAR_INIT(dynamic_curve_centre, 0) +// A number between 0.5 and 4. +// Higher value will favour extreme rounds and +// lower value rounds closer to the average. +GLOBAL_VAR_INIT(dynamic_curve_width, 1.8) +// If enabled only picks a single starting rule and executes only autotraitor midround ruleset. +GLOBAL_VAR_INIT(dynamic_classic_secret, FALSE) +// How many roundstart players required for high population override to take effect. +GLOBAL_VAR_INIT(dynamic_high_pop_limit, 55) +// If enabled does not accept or execute any rulesets. +GLOBAL_VAR_INIT(dynamic_forced_extended, FALSE) +// How high threat is required for HIGHLANDER_RULESETs stacking. +// This is independent of dynamic_no_stacking. +GLOBAL_VAR_INIT(dynamic_stacking_limit, 90) +// List of forced roundstart rulesets. +GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset) +// Forced threat level, setting this to zero or higher forces the roundstart threat to the value. +GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) + +/datum/game_mode/dynamic + name = "dynamic mode" + config_tag = "dynamic" + + announce_span = "danger" + announce_text = "Dynamic mode!" // This needs to be changed maybe + + reroll_friendly = FALSE; + + // Threat logging vars + /// The "threat cap", threat shouldn't normally go above this and is used in ruleset calculations + var/threat_level = 0 + /// Set at the beginning of the round. Spent by the mode to "purchase" rules. + var/threat = 0 + /// Running information about the threat. Can store text or datum entries. + var/list/threat_log = list() + /// List of roundstart rules used for selecting the rules. + var/list/roundstart_rules = list() + /// List of latejoin rules used for selecting the rules. + var/list/latejoin_rules = list() + /// List of midround rules used for selecting the rules. + var/list/midround_rules = list() + /** # Pop range per requirement. + * If the value is five the range is: + * 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+ + * If it is six the range is: + * 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+ + * If it is seven the range is: + * 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+ + */ + var/pop_per_requirement = 6 + /// The requirement used for checking if a second rule should be selected. + var/list/second_rule_req = list(100, 100, 80, 70, 60, 50, 30, 20, 10, 0) + /// The requirement used for checking if a third rule should be selected. + var/list/third_rule_req = list(100, 100, 100, 90, 80, 70, 60, 50, 40, 30) + /// Threat requirement for a second ruleset when high pop override is in effect. + var/high_pop_second_rule_req = 40 + /// Threat requirement for a third ruleset when high pop override is in effect. + var/high_pop_third_rule_req = 60 + /// Number of players who were ready on roundstart. + var/roundstart_pop_ready = 0 + /// List of candidates used on roundstart rulesets. + var/list/candidates = list() + /// Rules that are processed, rule_process is called on the rules in this list. + var/list/current_rules = list() + /// List of executed rulesets. + var/list/executed_rules = list() + /// Associative list of current players, in order: living players, living antagonists, dead players and observers. + var/list/list/current_players = list(CURRENT_LIVING_PLAYERS, CURRENT_LIVING_ANTAGS, CURRENT_DEAD_PLAYERS, CURRENT_OBSERVERS) + /// When world.time is over this number the mode tries to inject a latejoin ruleset. + var/latejoin_injection_cooldown = 0 + /// When world.time is over this number the mode tries to inject a midround ruleset. + var/midround_injection_cooldown = 0 + /// When TRUE GetInjectionChance returns 100. + var/forced_injection = FALSE + /// Forced ruleset to be executed for the next latejoin. + var/datum/dynamic_ruleset/latejoin/forced_latejoin_rule = null + /// When current_players was updated last time. + var/pop_last_updated = 0 + /// How many percent of the rounds are more peaceful. + var/peaceful_percentage = 50 + /// If a highlander executed. + var/highlander_executed = FALSE + /// If a only ruleset has been executed. + var/only_ruleset_executed = FALSE + +/datum/game_mode/dynamic/admin_panel() + var/list/dat = list("Game Mode Panel

Game Mode Panel

") + dat += "Dynamic Mode \[VV\]
" + dat += "Threat Level: [threat_level]
" + + dat += "Threat to Spend: [threat] \[Adjust\] \[View Log\]
" + dat += "
" + dat += "Parameters: centre = [GLOB.dynamic_curve_centre] ; width = [GLOB.dynamic_curve_width].
" + dat += "On average, [peaceful_percentage]% of the rounds are more peaceful.
" + dat += "Forced extended: [GLOB.dynamic_forced_extended ? "On" : "Off"]
" + dat += "Classic secret (only autotraitor): [GLOB.dynamic_classic_secret ? "On" : "Off"]
" + dat += "No stacking (only one round-ender): [GLOB.dynamic_no_stacking ? "On" : "Off"]
" + dat += "Stacking limit: [GLOB.dynamic_stacking_limit] \[Adjust\]" + dat += "
" + dat += "Executed rulesets: " + if (executed_rules.len > 0) + dat += "
" + for (var/datum/dynamic_ruleset/DR in executed_rules) + dat += "[DR.ruletype] - [DR.name]
" + else + dat += "none.
" + dat += "
Injection Timers: ([get_injection_chance(TRUE)]% chance)
" + dat += "Latejoin: [(latejoin_injection_cooldown-world.time)>60*10 ? "[round((latejoin_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(latejoin_injection_cooldown-world.time)] seconds"] \[Now!\]
" + dat += "Midround: [(midround_injection_cooldown-world.time)>60*10 ? "[round((midround_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(midround_injection_cooldown-world.time)] seconds"] \[Now!\]
" + usr << browse(dat.Join(), "window=gamemode_panel;size=500x500") + +/datum/game_mode/dynamic/Topic(href, href_list) + if (..()) // Sanity, maybe ? + return + if(!check_rights(R_ADMIN)) + message_admins("[usr.key] has attempted to override the game mode panel!") + log_admin("[key_name(usr)] tried to use the game mode panel without authorization.") + return + if (href_list["forced_extended"]) + GLOB.dynamic_forced_extended = !GLOB.dynamic_forced_extended + else if (href_list["no_stacking"]) + GLOB.dynamic_no_stacking = !GLOB.dynamic_no_stacking + else if (href_list["classic_secret"]) + GLOB.dynamic_classic_secret = !GLOB.dynamic_classic_secret + else if (href_list["adjustthreat"]) + var/threatadd = input("Specify how much threat to add (negative to subtract). This can inflate the threat level.", "Adjust Threat", 0) as null|num + if(!threatadd) + return + if(threatadd > 0) + create_threat(threatadd) + else + spend_threat(-threatadd) + else if (href_list["injectlate"]) + latejoin_injection_cooldown = 0 + forced_injection = TRUE + message_admins("[key_name(usr)] forced a latejoin injection.", 1) + else if (href_list["injectmid"]) + midround_injection_cooldown = 0 + forced_injection = TRUE + message_admins("[key_name(usr)] forced a midround injection.", 1) + else if (href_list["threatlog"]) + show_threatlog(usr) + else if (href_list["stacking_limit"]) + GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num + + admin_panel() // Refreshes the window + +// Checks if there are HIGHLANDER_RULESETs and calls the rule's round_result() proc +/datum/game_mode/dynamic/set_round_result() + for(var/datum/dynamic_ruleset/rule in executed_rules) + if(rule.flags & HIGHLANDER_RULESET) + if(rule.check_finished()) // Only the rule that actually finished the round sets round result. + return rule.round_result() + // If it got to this part, just pick one highlander if it exists + for(var/datum/dynamic_ruleset/rule in executed_rules) + if(rule.flags & HIGHLANDER_RULESET) + return rule.round_result() + return ..() + +/datum/game_mode/dynamic/send_intercept() + . = "Central Command Status Summary
" + switch(round(threat_level)) + if(0 to 19) + update_playercounts() + if(!current_players[CURRENT_LIVING_ANTAGS].len) + . += "Peaceful Waypoint
" + . += "Your station orbits deep within controlled, core-sector systems and serves as a waypoint for routine traffic through Nanotrasen's trade empire. Due to the combination of high security, interstellar traffic, and low strategic value, it makes any direct threat of violence unlikely. Your primary enemies will be incompetence and bored crewmen: try to organize team-building events to keep staffers interested and productive." + else + . += "Core Territory
" + . += "Your station orbits within reliably mundane, secure space. Although Nanotrasen has a firm grip on security in your region, the valuable resources and strategic position aboard your station make it a potential target for infiltrations. Monitor crew for non-loyal behavior, but expect a relatively tame shift free of large-scale destruction. We expect great things from your station." + if(20 to 39) + . += "Anomalous Exogeology
" + . += "Although your station lies within what is generally considered Nanotrasen-controlled space, the course of its orbit has caused it to cross unusually close to exogeological features with anomalous readings. Although these features offer opportunities for our research department, it is known that these little understood readings are often correlated with increased activity from competing interstellar organizations and individuals, among them the Wizard Federation and Cult of the Geometer of Blood - all known competitors for Anomaly Type B sites. Exercise elevated caution." + if(40 to 65) + . += "Contested System
" + . += "Your station's orbit passes along the edge of Nanotrasen's sphere of influence. While subversive elements remain the most likely threat against your station, hostile organizations are bolder here, where our grip is weaker. Exercise increased caution against elite Syndicate strike forces, or Executives forbid, some kind of ill-conceived unionizing attempt." + if(66 to 79) + . += "Uncharted Space
" + . += "Congratulations and thank you for participating in the NT 'Frontier' space program! Your station is actively orbiting a high value system far from the nearest support stations. Little is known about your region of space, and the opportunity to encounter the unknown invites greater glory. You are encouraged to elevate security as necessary to protect Nanotrasen assets." + if(80 to 99) + . += "Black Orbit
" + . += "As part of a mandatory security protocol, we are required to inform you that as a result of your orbital pattern directly behind an astrological body (oriented from our nearest observatory), your station will be under decreased monitoring and support. It is anticipated that your extreme location and decreased surveillance could pose security risks. Avoid unnecessary risks and attempt to keep your station in one piece." + if(100) + . += "Impending Doom
" + . += "Your station is somehow in the middle of hostile territory, in clear view of any enemy of the corporation. Your likelihood to survive is low, and station destruction is expected and almost inevitable. Secure any sensitive material and neutralize any enemy you will come across. It is important that you at least try to maintain the station.
" + . += "Good luck." + + if(station_goals.len) + . += "
Special Orders for [station_name()]:" + for(var/datum/station_goal/G in station_goals) + G.on_report() + . += G.get_report() + + print_command_report(., "Central Command Status Summary", announce=FALSE) + priority_announce("A summary has been copied and printed to all communications consoles.", "Security level elevated.", 'sound/ai/intercept.ogg') + if(GLOB.security_level < SEC_LEVEL_BLUE) + set_security_level(SEC_LEVEL_BLUE) + +// Yes, this is copy pasted from game_mode +/datum/game_mode/dynamic/check_finished(force_ending) + if(!SSticker.setup_done || !gamemode_ready) + return FALSE + if(replacementmode && round_converted == 2) + return replacementmode.check_finished() + if(SSshuttle.emergency && (SSshuttle.emergency.mode == SHUTTLE_ENDGAME)) + return TRUE + if(station_was_nuked) + return TRUE + if(force_ending) + return TRUE + for(var/datum/dynamic_ruleset/rule in executed_rules) + if(rule.flags & HIGHLANDER_RULESET) + return rule.check_finished() + +/datum/game_mode/dynamic/proc/show_threatlog(mob/admin) + if(!SSticker.HasRoundStarted()) + alert("The round hasn't started yet!") + return + + if(!check_rights(R_ADMIN)) + return + + var/list/out = list("Threat LogThreat Log
Starting Threat: [threat_level]
") + + for(var/entry in threat_log) + if(istext(entry)) + out += "[entry]
" + + out += "Remaining threat/threat_level: [threat]/[threat_level]" + + usr << browse(out.Join(), "window=threatlog;size=700x500") + +/// Generates the threat level using lorentz distribution and assigns peaceful_percentage. +/datum/game_mode/dynamic/proc/generate_threat() + var/relative_threat = LORENTZ_DISTRIBUTION(GLOB.dynamic_curve_centre, GLOB.dynamic_curve_width) + threat_level = round(lorentz_to_threat(relative_threat), 0.1) + + peaceful_percentage = round(LORENTZ_CUMULATIVE_DISTRIBUTION(relative_threat, GLOB.dynamic_curve_centre, GLOB.dynamic_curve_width), 0.01)*100 + + threat = threat_level + +/datum/game_mode/dynamic/can_start() + /* Disabled for now, had some changes that need to be tested and this might interfere with that. + if(GLOB.dynamic_curve_centre == 0) + // 10 is when the centre starts to decrease + // 6 is just 1 + 5 (from the maximum value and the one decreased) + // 1 just makes the curve look better, I don't know. + // Limited between 1 and 5 then inverted and rounded + // With this you get a centre curve that stays at -5 until 10 then first rapidly decreases but slows down at the end + GLOB.dynamic_curve_centre = round(-CLAMP((10*6/GLOB.player_list.len)-1, 0, 5), 0.5) + */ + message_admins("Dynamic mode parameters for the round:") + message_admins("Centre is [GLOB.dynamic_curve_centre], Width is [GLOB.dynamic_curve_width], Forced extended is [GLOB.dynamic_forced_extended ? "Enabled" : "Disabled"], No stacking is [GLOB.dynamic_no_stacking ? "Enabled" : "Disabled"].") + message_admins("Stacking limit is [GLOB.dynamic_stacking_limit], Classic secret is [GLOB.dynamic_classic_secret ? "Enabled" : "Disabled"], High population limit is [GLOB.dynamic_high_pop_limit].") + log_game("DYNAMIC: Dynamic mode parameters for the round:") + log_game("DYNAMIC: Centre is [GLOB.dynamic_curve_centre], Width is [GLOB.dynamic_curve_width], Forced extended is [GLOB.dynamic_forced_extended ? "Enabled" : "Disabled"], No stacking is [GLOB.dynamic_no_stacking ? "Enabled" : "Disabled"].") + log_game("DYNAMIC: Stacking limit is [GLOB.dynamic_stacking_limit], Classic secret is [GLOB.dynamic_classic_secret ? "Enabled" : "Disabled"], High population limit is [GLOB.dynamic_high_pop_limit].") + if(GLOB.dynamic_forced_threat_level >= 0) + threat_level = round(GLOB.dynamic_forced_threat_level, 0.1) + threat = threat_level + else + generate_threat() + + var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min) + latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + world.time + + var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min) + midround_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) + world.time + message_admins("Dynamic Mode initialized with a Threat Level of... [threat_level]!") + log_game("DYNAMIC: Dynamic Mode initialized with a Threat Level of... [threat_level]!") + return TRUE + +/datum/game_mode/dynamic/pre_setup() + for (var/rule in subtypesof(/datum/dynamic_ruleset)) + var/datum/dynamic_ruleset/ruleset = new rule() + // Simple check if the ruleset should be added to the lists. + if(ruleset.name == "") + continue + switch(ruleset.ruletype) + if("Roundstart") + roundstart_rules += ruleset + if ("Latejoin") + latejoin_rules += ruleset + if ("Midround") + if (ruleset.weight) + midround_rules += ruleset + for(var/mob/dead/new_player/player in GLOB.player_list) + if(player.ready == PLAYER_READY_TO_PLAY && player.mind) + roundstart_pop_ready++ + candidates.Add(player) + log_game("DYNAMIC: Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.") + if (candidates.len <= 0) + return TRUE + if (roundstart_rules.len <= 0) + return TRUE + + if(GLOB.dynamic_forced_roundstart_ruleset.len > 0) + rigged_roundstart() + else + roundstart() + + var/starting_rulesets = "" + for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules) + starting_rulesets += "[DR.name], " + candidates.Cut() + return TRUE + +/datum/game_mode/dynamic/post_setup(report) + update_playercounts() + + for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules) + rule.candidates.Cut() // The rule should not use candidates at this point as they all are null. + if(!rule.execute()) + stack_trace("The starting rule \"[rule.name]\" failed to execute.") + ..() + +/// A simple roundstart proc used when dynamic_forced_roundstart_ruleset has rules in it. +/datum/game_mode/dynamic/proc/rigged_roundstart() + message_admins("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.") + log_game("DYNAMIC: [GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.") + for (var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset) + message_admins("Drafting players for forced ruleset [rule.name].") + log_game("DYNAMIC: Drafting players for forced ruleset [rule.name].") + rule.mode = src + rule.candidates = candidates.Copy() + rule.trim_candidates() + if (rule.ready(TRUE)) + picking_roundstart_rule(list(rule), forced = TRUE) + +/datum/game_mode/dynamic/proc/roundstart() + if (GLOB.dynamic_forced_extended) + log_game("DYNAMIC: Starting a round of forced extended.") + return TRUE + var/list/drafted_rules = list() + for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules) + if (rule.acceptable(roundstart_pop_ready, threat_level) && threat >= rule.cost) // If we got the population and threat required + rule.candidates = candidates.Copy() + rule.trim_candidates() + if (rule.ready() && rule.candidates.len > 0) + drafted_rules[rule] = rule.weight + + var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1) + var/extra_rulesets_amount = 0 + if (GLOB.dynamic_classic_secret) + extra_rulesets_amount = 0 + else + if (roundstart_pop_ready > GLOB.dynamic_high_pop_limit) + message_admins("High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.") + log_game("DYNAMIC: High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.") + if (threat_level > high_pop_second_rule_req) + extra_rulesets_amount++ + if (threat_level > high_pop_third_rule_req) + extra_rulesets_amount++ + else + if (threat_level >= second_rule_req[indice_pop]) + extra_rulesets_amount++ + if (threat_level >= third_rule_req[indice_pop]) + extra_rulesets_amount++ + + if (drafted_rules.len > 0 && picking_roundstart_rule(drafted_rules)) + if (extra_rulesets_amount > 0) // We've got enough population and threat for a second rulestart rule + for (var/datum/dynamic_ruleset/roundstart/rule in drafted_rules) + if (rule.cost > threat) + drafted_rules -= rule + if (drafted_rules.len > 0 && picking_roundstart_rule(drafted_rules)) + if (extra_rulesets_amount > 1) // We've got enough population and threat for a third rulestart rule + for (var/datum/dynamic_ruleset/roundstart/rule in drafted_rules) + if (rule.cost > threat) + drafted_rules -= rule + picking_roundstart_rule(drafted_rules) + else + return FALSE + return TRUE + +/// Picks a random roundstart rule from the list given as an argument and executes it. +/datum/game_mode/dynamic/proc/picking_roundstart_rule(list/drafted_rules = list(), forced = FALSE) + var/datum/dynamic_ruleset/roundstart/starting_rule = pickweight(drafted_rules) + if(!starting_rule) + return FALSE + + if(!forced) + if(only_ruleset_executed) + return FALSE + // Check if a blocking ruleset has been executed. + else if(check_blocking(starting_rule.blocking_rules, executed_rules)) + drafted_rules -= starting_rule + if(drafted_rules.len <= 0) + return FALSE + starting_rule = pickweight(drafted_rules) + // Check if the ruleset is highlander and if a highlander ruleset has been executed + else if(starting_rule.flags & HIGHLANDER_RULESET) + if(threat < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) + if(highlander_executed) + drafted_rules -= starting_rule + if(drafted_rules.len <= 0) + return FALSE + starting_rule = pickweight(drafted_rules) + + message_admins("Picking a [istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/) ? " delayed " : ""] ruleset [starting_rule.name]") + log_game("DYNAMIC: Picking a [istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/) ? " delayed " : ""] ruleset [starting_rule.name]") + + roundstart_rules -= starting_rule + drafted_rules -= starting_rule + + if (istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/)) + var/datum/dynamic_ruleset/roundstart/delayed/rule = starting_rule + addtimer(CALLBACK(src, .proc/execute_delayed, rule), rule.delay) + + starting_rule.trim_candidates() + if (starting_rule.pre_execute()) + spend_threat(starting_rule.cost) + threat_log += "[worldtime2text()]: Roundstart [starting_rule.name] spent [starting_rule.cost]" + if(starting_rule.flags & HIGHLANDER_RULESET) + highlander_executed = TRUE + else if(starting_rule.flags & ONLY_RULESET) + only_ruleset_executed = TRUE + executed_rules += starting_rule + if (starting_rule.persistent) + current_rules += starting_rule + for(var/mob/M in starting_rule.assigned) + for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules) + if (!rule.ready()) + drafted_rules -= rule // And removing rules that are no longer elligible + return TRUE + else + stack_trace("The starting rule \"[starting_rule.name]\" failed to pre_execute.") + return FALSE + +/// Executes delayed roundstart rules and has a hack in it. +/datum/game_mode/dynamic/proc/execute_delayed(datum/dynamic_ruleset/roundstart/delayed/rule) + update_playercounts() + rule.candidates = current_players[CURRENT_LIVING_PLAYERS].Copy() + rule.trim_candidates() + if(rule.execute()) + executed_rules += rule + if (rule.persistent) + current_rules += rule + return TRUE + else + stack_trace("The delayed roundstart rule \"[rule.name]\" failed to execute.") + return FALSE + +/// Picks a random midround OR latejoin rule from the list given as an argument and executes it. +/// Also this could be named better. +/datum/game_mode/dynamic/proc/picking_midround_latejoin_rule(list/drafted_rules = list(), forced = FALSE) + var/datum/dynamic_ruleset/rule = pickweight(drafted_rules) + if(!rule) + return FALSE + + if(!forced) + if(only_ruleset_executed) + return FALSE + // Check if a blocking ruleset has been executed. + else if(check_blocking(rule.blocking_rules, executed_rules)) + drafted_rules -= rule + if(drafted_rules.len <= 0) + return FALSE + rule = pickweight(drafted_rules) + // Check if the ruleset is highlander and if a highlander ruleset has been executed + else if(rule.flags & HIGHLANDER_RULESET) + if(threat < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) + if(highlander_executed) + drafted_rules -= rule + if(drafted_rules.len <= 0) + return FALSE + rule = pickweight(drafted_rules) + + if(!rule.repeatable) + if(rule.ruletype == "Latejoin") + latejoin_rules = remove_from_list(latejoin_rules, rule.type) + else if(rule.type == "Midround") + midround_rules = remove_from_list(midround_rules, rule.type) + + if (rule.execute()) + log_game("DYNAMIC: Injected a [rule.ruletype == "latejoin" ? "latejoin" : "midround"] ruleset [rule.name].") + spend_threat(rule.cost) + threat_log += "[worldtime2text()]: [rule.ruletype] [rule.name] spent [rule.cost]" + if(rule.flags & HIGHLANDER_RULESET) + highlander_executed = TRUE + else if(rule.flags & ONLY_RULESET) + only_ruleset_executed = TRUE + if(rule.ruletype == "Latejoin") + var/mob/M = pick(rule.candidates) + message_admins("[key_name(M)] joined the station, and was selected by the [rule.name] ruleset.") + log_game("DYNAMIC: [key_name(M)] joined the station, and was selected by the [rule.name] ruleset.") + executed_rules += rule + rule.candidates.Cut() + if (rule.persistent) + current_rules += rule + return TRUE + else + stack_trace("The [rule.ruletype] rule \"[rule.name]\" failed to execute.") + return FALSE + +/// An experimental proc to allow admins to call rules on the fly or have rules call other rules. +/datum/game_mode/dynamic/proc/picking_specific_rule(ruletype, forced = FALSE) + var/datum/dynamic_ruleset/midround/new_rule + if(ispath(ruletype)) + new_rule = new ruletype() // You should only use it to call midround rules though. + else if(istype(ruletype, /datum/dynamic_ruleset)) + new_rule = ruletype + else + return FALSE + + if(!new_rule) + return FALSE + + if(!forced) + if(only_ruleset_executed) + return FALSE + // Check if a blocking ruleset has been executed. + else if(check_blocking(new_rule.blocking_rules, executed_rules)) + return FALSE + // Check if the ruleset is highlander and if a highlander ruleset has been executed + else if(new_rule.flags & HIGHLANDER_RULESET) + if(threat < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) + if(highlander_executed) + return FALSE + + update_playercounts() + if ((forced || (new_rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && new_rule.cost <= threat))) + new_rule.candidates = current_players.Copy() + new_rule.trim_candidates() + if (new_rule.ready(forced)) + spend_threat(new_rule.cost) + threat_log += "[worldtime2text()]: Forced rule [new_rule.name] spent [new_rule.cost]" + if (new_rule.execute()) // This should never fail since ready() returned 1 + if(new_rule.flags & HIGHLANDER_RULESET) + highlander_executed = TRUE + else if(new_rule.flags & ONLY_RULESET) + only_ruleset_executed = TRUE + log_game("DYNAMIC: Making a call to a specific ruleset...[new_rule.name]!") + executed_rules += new_rule + if (new_rule.persistent) + current_rules += new_rule + return TRUE + else if (forced) + log_game("DYNAMIC: The ruleset [new_rule.name] couldn't be executed due to lack of elligible players.") + return FALSE + +/datum/game_mode/dynamic/process() + if (pop_last_updated < world.time - (60 SECONDS)) + pop_last_updated = world.time + update_playercounts() + + for (var/datum/dynamic_ruleset/rule in current_rules) + if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing. + current_rules -= rule + + if (midround_injection_cooldown < world.time) + if (GLOB.dynamic_forced_extended) + return + + // Somehow it manages to trigger midround multiple times so this was moved here. + // There is no way this should be able to trigger an injection twice now. + var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min) + midround_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) + world.time) + + // Time to inject some threat into the round + if(EMERGENCY_ESCAPED_OR_ENDGAMED) // Unless the shuttle is gone + return + + log_game("DYNAMIC: Checking state of the round.") + + update_playercounts() + + if (prob(get_injection_chance())) + var/list/drafted_rules = list() + for (var/datum/dynamic_ruleset/midround/rule in midround_rules) + if (rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost) + // Classic secret : only autotraitor/minor roles + if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) + continue + rule.candidates = list() + rule.candidates = current_players.Copy() + rule.trim_candidates() + if (rule.ready() && rule.candidates.len > 0) + drafted_rules[rule] = rule.get_weight() + if (drafted_rules.len > 0) + picking_midround_latejoin_rule(drafted_rules) + +/// Updates current_players. +/datum/game_mode/dynamic/proc/update_playercounts() + current_players[CURRENT_LIVING_PLAYERS] = list() + current_players[CURRENT_LIVING_ANTAGS] = list() + current_players[CURRENT_DEAD_PLAYERS] = list() + current_players[CURRENT_OBSERVERS] = list() + for (var/mob/M in GLOB.player_list) + if (istype(M, /mob/dead/new_player)) + continue + if (M.stat != DEAD) + current_players[CURRENT_LIVING_PLAYERS].Add(M) + if (M.mind && (M.mind.special_role || M.mind.antag_datums?.len > 0)) + current_players[CURRENT_LIVING_ANTAGS].Add(M) + else + if (istype(M,/mob/dead/observer)) + var/mob/dead/observer/O = M + if (O.started_as_observer) // Observers + current_players[CURRENT_OBSERVERS].Add(M) + continue + current_players[CURRENT_DEAD_PLAYERS].Add(M) // Players who actually died (and admins who ghosted, would be nice to avoid counting them somehow) + +/// Gets the chance for latejoin and midround injection, the dry_run argument is only used for forced injection. +/datum/game_mode/dynamic/proc/get_injection_chance(dry_run = FALSE) + if(forced_injection) + forced_injection = !dry_run + return 100 + var/chance = 0 + // If the high pop override is in effect, we reduce the impact of population on the antag injection chance + var/high_pop_factor = (current_players[CURRENT_LIVING_PLAYERS].len >= GLOB.dynamic_high_pop_limit) + var/max_pop_per_antag = max(5,15 - round(threat_level/10) - round(current_players[CURRENT_LIVING_PLAYERS].len/(high_pop_factor ? 10 : 5))) + if (!current_players[CURRENT_LIVING_ANTAGS].len) + chance += 50 // No antags at all? let's boost those odds! + else + var/current_pop_per_antag = current_players[CURRENT_LIVING_PLAYERS].len / current_players[CURRENT_LIVING_ANTAGS].len + if (current_pop_per_antag > max_pop_per_antag) + chance += min(50, 25+10*(current_pop_per_antag-max_pop_per_antag)) + else + chance += 25-10*(max_pop_per_antag-current_pop_per_antag) + if (current_players[CURRENT_DEAD_PLAYERS].len > current_players[CURRENT_LIVING_PLAYERS].len) + chance -= 30 // More than half the crew died? ew, let's calm down on antags + if (threat > 70) + chance += 15 + if (threat < 30) + chance -= 15 + return round(max(0,chance)) + +/// Removes type from the list +/datum/game_mode/dynamic/proc/remove_from_list(list/type_list, type) + for(var/I in type_list) + if(istype(I, type)) + type_list -= I + return type_list + +/// Checks if a type in blocking_list is in rule_list. +/datum/game_mode/dynamic/proc/check_blocking(list/blocking_list, list/rule_list) + if(blocking_list.len > 0) + for(var/blocking in blocking_list) + for(var/datum/executed in rule_list) + if(blocking == executed.type) + return TRUE + return FALSE + +/// Checks if client age is age or older. +/datum/game_mode/dynamic/proc/check_age(client/C, age) + enemy_minimum_age = age + if(get_remaining_days(C) == 0) + enemy_minimum_age = initial(enemy_minimum_age) + return TRUE // Available in 0 days = available right now = player is old enough to play. + enemy_minimum_age = initial(enemy_minimum_age) + return FALSE + +/datum/game_mode/dynamic/make_antag_chance(mob/living/carbon/human/newPlayer) + if (GLOB.dynamic_forced_extended) + return + if(EMERGENCY_ESCAPED_OR_ENDGAMED) // No more rules after the shuttle has left + return + + update_playercounts() + + if (forced_latejoin_rule) + forced_latejoin_rule.candidates = list(newPlayer) + forced_latejoin_rule.trim_candidates() + log_game("DYNAMIC: Forcing ruleset [forced_latejoin_rule]") + if (forced_latejoin_rule.ready(TRUE)) + picking_midround_latejoin_rule(list(forced_latejoin_rule), forced = TRUE) + forced_latejoin_rule = null + + else if (latejoin_injection_cooldown < world.time && prob(get_injection_chance())) + var/list/drafted_rules = list() + for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules) + if (rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost) + // Classic secret : only autotraitor/minor roles + if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) + continue + // No stacking : only one round-enter, unless > stacking_limit threat. + if (threat < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) + if(rule.flags & HIGHLANDER_RULESET && highlander_executed) + continue + + rule.candidates = list(newPlayer) + rule.trim_candidates() + if (rule.ready()) + drafted_rules[rule] = rule.get_weight() + + if (drafted_rules.len > 0 && picking_midround_latejoin_rule(drafted_rules)) + var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min) + latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + world.time + +/// Refund threat, but no more than threat_level. +/datum/game_mode/dynamic/proc/refund_threat(regain) + threat = min(threat_level,threat+regain) + +/// Generate threat and increase the threat_level if it goes beyond, capped at 100 +/datum/game_mode/dynamic/proc/create_threat(gain) + threat = min(100, threat+gain) + if(threat > threat_level) + threat_level = threat + +/// Expend threat, can't fall under 0. +/datum/game_mode/dynamic/proc/spend_threat(cost) + threat = max(threat-cost,0) + +/// Turns the value generated by lorentz distribution to threat value between 0 and 100. +/datum/game_mode/dynamic/proc/lorentz_to_threat(x) + switch (x) + if (-INFINITY to -20) + return rand(0, 10) + if (-20 to -10) + return RULE_OF_THREE(-40, -20, x) + 50 + if (-10 to -5) + return RULE_OF_THREE(-30, -10, x) + 50 + if (-5 to -2.5) + return RULE_OF_THREE(-20, -5, x) + 50 + if (-2.5 to -0) + return RULE_OF_THREE(-10, -2.5, x) + 50 + if (0 to 2.5) + return RULE_OF_THREE(10, 2.5, x) + 50 + if (2.5 to 5) + return RULE_OF_THREE(20, 5, x) + 50 + if (5 to 10) + return RULE_OF_THREE(30, 10, x) + 50 + if (10 to 20) + return RULE_OF_THREE(40, 20, x) + 50 + if (20 to INFINITY) + return rand(90, 100) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm new file mode 100644 index 0000000000..66afcbfb92 --- /dev/null +++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm @@ -0,0 +1,211 @@ +/datum/dynamic_ruleset + /// For admin logging and round end screen. + var/name = "" + /// For admin logging and round end screen, do not change this unless making a new rule type. + var/ruletype = "" + /// If set to TRUE, the rule won't be discarded after being executed, and dynamic will call rule_process() every time it ticks. + var/persistent = FALSE + /// If set to TRUE, dynamic mode will be able to draft this ruleset again later on. (doesn't apply for roundstart rules) + var/repeatable = FALSE + /// If set higher than 0 decreases weight by itself causing the ruleset to appear less often the more it is repeated. + var/repeatable_weight_decrease = 2 + /// List of players that are being drafted for this rule + var/list/mob/candidates = list() + /// List of players that were selected for this rule + var/list/datum/mind/assigned = list() + /// Preferences flag such as ROLE_WIZARD that need to be turned on for players to be antag + var/antag_flag = null + /// The antagonist datum that is assigned to the mobs mind on ruleset execution. + var/datum/antagonist/antag_datum = null + /// The required minimum account age for this ruleset. + var/minimum_required_age = 7 + /// If set, and config flag protect_roles_from_antagonist is false, then the rule will not pick players from these roles. + var/list/protected_roles = list() + /// If set, rule will deny candidates from those roles always. + var/list/restricted_roles = list() + /// If set, rule will only accept candidates from those roles, IMPORTANT: DOES NOT WORK ON ROUNDSTART RULESETS. + var/list/exclusive_roles = list() + /// If set, there needs to be a certain amount of players doing those roles (among the players who won't be drafted) for the rule to be drafted IMPORTANT: DOES NOT WORK ON ROUNDSTART RULESETS. + var/list/enemy_roles = list() + /// If enemy_roles was set, this is the amount of enemy job workers needed per threat_level range (0-10,10-20,etc) IMPORTANT: DOES NOT WORK ON ROUNDSTART RULESETS. + var/required_enemies = list(1,1,0,0,0,0,0,0,0,0) + /// The rule needs this many candidates (post-trimming) to be executed (example: Cult needs 4 players at round start) + var/required_candidates = 0 + /// 1 -> 9, probability for this rule to be picked against other rules + var/weight = 5 + /// Threat cost for this rule, this is decreased from the mode's threat when the rule is executed. + var/cost = 0 + /// A flag that determines how the ruleset is handled + /// HIGHLANDER_RULESET are rulesets can end the round. + /// TRAITOR_RULESET and MINOR_RULESET can't end the round and have no difference right now. + var/flags = 0 + /// Pop range per requirement. If zero defaults to mode's pop_per_requirement. + var/pop_per_requirement = 0 + /// Requirements are the threat level requirements per pop range. + /// With the default values, The rule will never get drafted below 10 threat level (aka: "peaceful extended"), and it requires a higher threat level at lower pops. + var/list/requirements = list(40,30,20,10,10,10,10,10,10,10) + /// An alternative, static requirement used instead when pop is over mode's high_pop_limit. + var/high_population_requirement = 10 + /// Reference to the mode, use this instead of SSticker.mode. + var/datum/game_mode/dynamic/mode = null + /// If a role is to be considered another for the purpose of banning. + var/antag_flag_override = null + /// If a ruleset type which is in this list has been executed, then the ruleset will not be executed. + var/list/blocking_rules = list() + /// The minimum amount of players required for the rule to be considered. + var/minimum_players = 0 + /// The maximum amount of players required for the rule to be considered. + /// Anything below zero or exactly zero is ignored. + var/maximum_players = 0 + + +/datum/dynamic_ruleset/New() + ..() + if(CONFIG_GET(flag/protect_roles_from_antagonist)) + restricted_roles += protected_roles + if(CONFIG_GET(flag/protect_assistant_from_antagonist)) + restricted_roles += "Assistant" + + if (istype(SSticker.mode, /datum/game_mode/dynamic)) + mode = SSticker.mode + else if (GLOB.master_mode != "dynamic") // This is here to make roundstart forced ruleset function. + qdel(src) + +/datum/dynamic_ruleset/roundstart // One or more of those drafted at roundstart + ruletype = "Roundstart" + +/datum/dynamic_ruleset/roundstart/delayed/ // Executed with a 30 seconds delay + var/delay = 30 SECONDS + var/required_type = /mob/living/carbon/human // No ghosts, new players or silicons allowed. + +// Can be drafted when a player joins the server +/datum/dynamic_ruleset/latejoin + ruletype = "Latejoin" + +/// By default, a rule is acceptable if it satisfies the threat level/population requirements. +/// If your rule has extra checks, such as counting security officers, do that in ready() instead +/datum/dynamic_ruleset/proc/acceptable(population = 0, threat_level = 0) + if(minimum_players > population) + return FALSE + if(maximum_players > 0 && population > maximum_players) + return FALSE + if (population >= GLOB.dynamic_high_pop_limit) + return (threat_level >= high_population_requirement) + else + pop_per_requirement = pop_per_requirement > 0 ? pop_per_requirement : mode.pop_per_requirement + var/indice_pop = min(10,round(population/pop_per_requirement)+1) + return (threat_level >= requirements[indice_pop]) + +/// This is called if persistent variable is true everytime SSTicker ticks. +/datum/dynamic_ruleset/proc/rule_process() + return + +/// Called on game mode pre_setup, used for non-delayed roundstart rulesets only. +/// Do everything you need to do before job is assigned here. +/// IMPORTANT: ASSIGN special_role HERE +/datum/dynamic_ruleset/proc/pre_execute() + return TRUE + +/// Called on post_setup on roundstart and when the rule executes on midround and latejoin. +/// Give your candidates or assignees equipment and antag datum here. +/datum/dynamic_ruleset/proc/execute() + for(var/datum/mind/M in assigned) + M.add_antag_datum(antag_datum) + return TRUE + +/// Called after delay set in ruleset. +/// Give your candidates or assignees equipment and antag datum here. +/datum/dynamic_ruleset/roundstart/delayed/execute() + if (SSticker && SSticker.current_state < GAME_STATE_PLAYING) + CRASH("The delayed ruleset [name] executed before the round started.") + +/// Here you can perform any additional checks you want. (such as checking the map etc) +/// Remember that on roundstart no one knows what their job is at this point. +/// IMPORTANT: If ready() returns TRUE, that means pre_execute() or execute() should never fail! +/datum/dynamic_ruleset/proc/ready(forced = 0) + if (required_candidates > candidates.len) + return FALSE + return TRUE + +/// Gets weight of the ruleset +/// Note that this decreases weight if repeatable is TRUE and repeatable_weight_decrease is higher than 0 +/// Note: If you don't want repeatable rulesets to decrease their weight use the weight variable directly +/datum/dynamic_ruleset/proc/get_weight() + if(repeatable && weight > 1 && repeatable_weight_decrease > 0) + for(var/datum/dynamic_ruleset/DR in mode.executed_rules) + if(istype(DR, type)) + weight = max(weight-repeatable_weight_decrease,1) + return weight + +/// Here you can remove candidates that do not meet your requirements. +/// This means if their job is not correct or they have disconnected you can remove them from candidates here. +/// Usually this does not need to be changed unless you need some specific requirements from your candidates. +/datum/dynamic_ruleset/proc/trim_candidates() + return + +/// Counts how many players are ready at roundstart. +/// Used only by non-delayed roundstart rulesets. +/datum/dynamic_ruleset/proc/num_players() + . = 0 + for(var/mob/dead/new_player/P in GLOB.player_list) + if(P.client && P.ready == PLAYER_READY_TO_PLAY) + . ++ + +/// Set mode result and news report here. +/// Only called if ruleset is flagged as HIGHLANDER_RULESET +/datum/dynamic_ruleset/proc/round_result() + +/// Checks if round is finished, return true to end the round. +/// Only called if ruleset is flagged as HIGHLANDER_RULESET +/datum/dynamic_ruleset/proc/check_finished() + return FALSE + +////////////////////////////////////////////// +// // +// ROUNDSTART RULESETS // +// // +////////////////////////////////////////////// + +/// Checks if candidates are connected and if they are banned or don't want to be the antagonist. +/datum/dynamic_ruleset/roundstart/trim_candidates() + for(var/mob/dead/new_player/P in candidates) + if (!P.client || !P.mind) // Are they connected? + candidates.Remove(P) + continue + if(!mode.check_age(P.client, minimum_required_age)) + candidates.Remove(P) + continue + if(P.mind.special_role) // We really don't want to give antag to an antag. + candidates.Remove(P) + continue + if (!(antag_flag in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag, ROLE_SYNDICATE)) || (antag_flag_override && jobban_isbanned(P.ckey, list(antag_flag_override, ROLE_SYNDICATE))))//are they willing and not antag-banned? + candidates.Remove(P) + continue + +/// Checks if candidates are required mob type, connected, banned and if the job is exclusive to the role. +/datum/dynamic_ruleset/roundstart/delayed/trim_candidates() + . = ..() + for (var/mob/P in candidates) + if (!istype(P, required_type)) + candidates.Remove(P) // Can be a new_player, etc. + continue + if(!mode.check_age(P.client, minimum_required_age)) + candidates.Remove(P) + continue + if (!P.client || !P.mind || !P.mind.assigned_role) // Are they connected? + candidates.Remove(P) + continue + if(P.mind.special_role || P.mind.antag_datums?.len > 0) // Are they an antag already? + candidates.Remove(P) + continue + if (!(antag_flag in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag, ROLE_SYNDICATE)) || (antag_flag_override && jobban_isbanned(P.ckey, list(antag_flag_override, ROLE_SYNDICATE))))//are they willing and not antag-banned? + candidates.Remove(P) + continue + if ((exclusive_roles.len > 0) && !(P.mind.assigned_role in exclusive_roles)) // Is the rule exclusive to their job? + candidates.Remove(P) + continue + +/// Do your checks if the ruleset is ready to be executed here. +/// Should ignore certain checks if forced is TRUE +/datum/dynamic_ruleset/roundstart/ready(forced = FALSE) + return ..() diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm new file mode 100644 index 0000000000..24b4c67357 --- /dev/null +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -0,0 +1,110 @@ +////////////////////////////////////////////// +// // +// LATEJOIN RULESETS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/latejoin/trim_candidates() + for(var/mob/P in candidates) + if (!P.client || !P.mind || !P.mind.assigned_role) // Are they connected? + candidates.Remove(P) + continue + if(!mode.check_age(P.client, minimum_required_age)) + candidates.Remove(P) + continue + if (!(antag_flag in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag, ROLE_SYNDICATE)) || (antag_flag_override && jobban_isbanned(P.ckey, list(antag_flag_override))))//are they willing and not antag-banned? + candidates.Remove(P) + continue + if (P.mind.assigned_role in restricted_roles) // Does their job allow for it? + candidates.Remove(P) + continue + if ((exclusive_roles.len > 0) && !(P.mind.assigned_role in exclusive_roles)) // Is the rule exclusive to their job? + candidates.Remove(P) + continue + +/datum/dynamic_ruleset/latejoin/ready(forced = 0) + if (!forced) + var/job_check = 0 + if (enemy_roles.len > 0) + for (var/mob/M in mode.current_players[CURRENT_LIVING_PLAYERS]) + if (M.stat == DEAD) + continue // Dead players cannot count as opponents + if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles))) + job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it + + var/threat = round(mode.threat_level/10) + if (job_check < required_enemies[threat]) + return FALSE + return ..() + +/datum/dynamic_ruleset/latejoin/execute() + var/mob/M = pick(candidates) + assigned += M.mind + M.mind.special_role = antag_flag + M.mind.add_antag_datum(antag_datum) + return TRUE + +////////////////////////////////////////////// +// // +// SYNDICATE TRAITORS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/latejoin/infiltrator + name = "Syndicate Infiltrator" + antag_datum = /datum/antagonist/traitor + antag_flag = ROLE_TRAITOR + restricted_roles = list("AI", "Cyborg") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 1 + weight = 7 + cost = 5 + requirements = list(40,30,20,10,10,10,10,10,10,10) + high_population_requirement = 10 + repeatable = TRUE + flags = TRAITOR_RULESET + +////////////////////////////////////////////// +// // +// REVOLUTIONARY PROVOCATEUR // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/latejoin/provocateur + name = "Provocateur" + antag_datum = /datum/antagonist/rev/head + antag_flag = ROLE_REV_HEAD + antag_flag_override = ROLE_REV + restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + enemy_roles = list("AI", "Cyborg", "Security Officer","Detective","Head of Security", "Captain", "Warden") + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 2 + cost = 20 + requirements = list(101,101,70,40,30,20,20,20,20,20) + high_population_requirement = 50 + flags = HIGHLANDER_RULESET + var/required_heads = 3 + +/datum/dynamic_ruleset/latejoin/provocateur/ready(forced=FALSE) + if (forced) + required_heads = 1 + if(!..()) + return FALSE + var/head_check = 0 + for(var/mob/player in mode.current_players[CURRENT_LIVING_PLAYERS]) + if (player.mind.assigned_role in GLOB.command_positions) + head_check++ + return (head_check >= required_heads) + +/datum/dynamic_ruleset/latejoin/provocateur/execute() + var/mob/M = pick(candidates) + assigned += M.mind + M.mind.special_role = antag_flag + var/datum/antagonist/rev/head/new_head = new() + new_head.give_flash = TRUE + new_head.give_hud = TRUE + new_head.remove_clumsy = TRUE + new_head = M.mind.add_antag_datum(new_head) + new_head.rev_team.max_headrevs = 1 // Only one revhead if it is latejoin. + return TRUE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm new file mode 100644 index 0000000000..2acef4f06b --- /dev/null +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -0,0 +1,460 @@ +////////////////////////////////////////////// +// // +// MIDROUND RULESETS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/midround // Can be drafted once in a while during a round + ruletype = "Midround" + /// If the ruleset should be restricted from ghost roles. + var/restrict_ghost_roles = TRUE + /// What type the ruleset is restricted to. + var/required_type = /mob/living/carbon/human + var/list/living_players = list() + var/list/living_antags = list() + var/list/dead_players = list() + var/list/list_observers = list() + +/datum/dynamic_ruleset/midround/from_ghosts + weight = 0 + /// Whether the ruleset should call generate_ruleset_body or not. + var/makeBody = TRUE + +/datum/dynamic_ruleset/midround/trim_candidates() + // Unlike the previous two types, these rulesets are not meant for /mob/dead/new_player + // And since I want those rulesets to be as flexible as possible, I'm not gonna put much here, + // + // All you need to know is that here, the candidates list contains 4 lists itself, indexed with the following defines: + // Candidates = list(CURRENT_LIVING_PLAYERS, CURRENT_LIVING_ANTAGS, CURRENT_DEAD_PLAYERS, CURRENT_OBSERVERS) + // So for example you can get the list of all current dead players with var/list/dead_players = candidates[CURRENT_DEAD_PLAYERS] + // Make sure to properly typecheck the mobs in those lists, as the dead_players list could contain ghosts, or dead players still in their bodies. + // We're still gonna trim the obvious (mobs without clients, jobbanned players, etc) + living_players = trim_list(mode.current_players[CURRENT_LIVING_PLAYERS]) + living_antags = trim_list(mode.current_players[CURRENT_LIVING_ANTAGS]) + dead_players = trim_list(mode.current_players[CURRENT_DEAD_PLAYERS]) + list_observers = trim_list(mode.current_players[CURRENT_OBSERVERS]) + +/datum/dynamic_ruleset/midround/proc/trim_list(list/L = list()) + var/list/trimmed_list = L.Copy() + var/antag_name = initial(antag_flag) + for(var/mob/M in trimmed_list) + if (!istype(M, required_type)) + trimmed_list.Remove(M) + continue + if (!M.client) // Are they connected? + trimmed_list.Remove(M) + continue + if(!mode.check_age(M.client, minimum_required_age)) + trimmed_list.Remove(M) + continue + if (!(antag_name in M.client.prefs.be_special) || jobban_isbanned(M.ckey, list(antag_name, ROLE_SYNDICATE)))//are they willing and not antag-banned? + trimmed_list.Remove(M) + continue + if (M.mind) + if (restrict_ghost_roles && M.mind.assigned_role in GLOB.exp_specialmap[EXP_TYPE_SPECIAL]) // Are they playing a ghost role? + trimmed_list.Remove(M) + continue + if (M.mind.assigned_role in restricted_roles || HAS_TRAIT(M, TRAIT_MINDSHIELD)) // Does their job allow it or are they mindshielded? + trimmed_list.Remove(M) + continue + if ((exclusive_roles.len > 0) && !(M.mind.assigned_role in exclusive_roles)) // Is the rule exclusive to their job? + trimmed_list.Remove(M) + continue + return trimmed_list + +// You can then for example prompt dead players in execute() to join as strike teams or whatever +// Or autotator someone + +// IMPORTANT, since /datum/dynamic_ruleset/midround may accept candidates from both living, dead, and even antag players, you need to manually check whether there are enough candidates +// (see /datum/dynamic_ruleset/midround/autotraitor/ready(var/forced = FALSE) for example) +/datum/dynamic_ruleset/midround/ready(forced = FALSE) + if (!forced) + var/job_check = 0 + if (enemy_roles.len > 0) + for (var/mob/M in living_players) + if (M.stat == DEAD) + continue // Dead players cannot count as opponents + if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles))) + job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it + + var/threat = round(mode.threat_level/10) + if (job_check < required_enemies[threat]) + return FALSE + return TRUE + +/datum/dynamic_ruleset/midround/from_ghosts/execute() + var/list/possible_candidates = list() + possible_candidates.Add(dead_players) + possible_candidates.Add(list_observers) + send_applications(possible_candidates) + if(assigned.len > 0) + return TRUE + else + return FALSE + +/// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset. +/datum/dynamic_ruleset/midround/from_ghosts/proc/send_applications(list/possible_volunteers = list()) + if (possible_volunteers.len <= 0) // This shouldn't happen, as ready() should return FALSE if there is not a single valid candidate + message_admins("Possible volunteers was 0. This shouldn't appear, because of ready(), unless you forced it!") + return + message_admins("Polling [possible_volunteers.len] players to apply for the [name] ruleset.") + log_game("DYNAMIC: Polling [possible_volunteers.len] players to apply for the [name] ruleset.") + + candidates = pollGhostCandidates("The mode is looking for volunteers to become [antag_flag] for [name]", antag_flag, SSticker.mode, antag_flag, poll_time = 300) + + if(!candidates || candidates.len <= 0) + message_admins("The ruleset [name] received no applications.") + log_game("DYNAMIC: The ruleset [name] received no applications.") + mode.refund_threat(cost) + mode.threat_log += "[worldtime2text()]: Rule [name] refunded [cost] (no applications)" + mode.executed_rules -= src + return + + message_admins("[candidates.len] players volunteered for the ruleset [name].") + log_game("DYNAMIC: [candidates.len] players volunteered for [name].") + review_applications() + +/// Here is where you can check if your ghost applicants are valid for the ruleset. +/// Called by send_applications(). +/datum/dynamic_ruleset/midround/from_ghosts/proc/review_applications() + for (var/i = 1, i <= required_candidates, i++) + if(candidates.len <= 0) + if(i == 1) + // We have found no candidates so far and we are out of applicants. + mode.refund_threat(cost) + mode.threat_log += "[worldtime2text()]: Rule [name] refunded [cost] (all applications invalid)" + mode.executed_rules -= src + break + var/mob/applicant = pick(candidates) + candidates -= applicant + if(!isobserver(applicant)) + if(applicant.stat == DEAD) // Not an observer? If they're dead, make them one. + applicant = applicant.ghostize(FALSE) + else // Not dead? Disregard them, pick a new applicant + i-- + continue + + if(!applicant) + i-- + continue + + var/mob/new_character = applicant + + if (makeBody) + new_character = generate_ruleset_body(applicant) + + finish_setup(new_character, i) + assigned += applicant + notify_ghosts("[new_character] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT, header="Something Interesting!") + +/datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant) + var/mob/living/carbon/human/new_character = makeBody(applicant) + new_character.dna.remove_all_mutations() + return new_character + +/datum/dynamic_ruleset/midround/from_ghosts/proc/finish_setup(mob/new_character, index) + var/datum/antagonist/new_role = new antag_datum() + setup_role(new_role) + new_character.mind.add_antag_datum(new_role) + new_character.mind.special_role = antag_flag + +/datum/dynamic_ruleset/midround/from_ghosts/proc/setup_role(datum/antagonist/new_role) + return + +////////////////////////////////////////////// +// // +// SYNDICATE TRAITORS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/midround/autotraitor + name = "Syndicate Sleeper Agent" + antag_datum = /datum/antagonist/traitor + antag_flag = ROLE_TRAITOR + restricted_roles = list("AI", "Cyborg", "Positronic Brain") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 1 + weight = 7 + cost = 10 + requirements = list(50,40,30,20,10,10,10,10,10,10) + repeatable = TRUE + high_population_requirement = 10 + flags = TRAITOR_RULESET + +/datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0) + var/player_count = mode.current_players[CURRENT_LIVING_PLAYERS].len + var/antag_count = mode.current_players[CURRENT_LIVING_ANTAGS].len + var/max_traitors = round(player_count / 10) + 1 + if ((antag_count < max_traitors) && prob(mode.threat_level))//adding traitors if the antag population is getting low + return ..() + else + return FALSE + +/datum/dynamic_ruleset/midround/autotraitor/trim_candidates() + ..() + for(var/mob/living/player in living_players) + if(issilicon(player)) // Your assigned role doesn't change when you are turned into a silicon. + living_players -= player + continue + if(is_centcom_level(player.z)) + living_players -= player // We don't autotator people in CentCom + continue + if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0)) + living_players -= player // We don't autotator people with roles already + +/datum/dynamic_ruleset/midround/autotraitor/ready(forced = FALSE) + if (required_candidates > living_players.len) + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/autotraitor/execute() + var/mob/M = pick(living_players) + assigned += M + living_players -= M + var/datum/antagonist/traitor/newTraitor = new + M.mind.add_antag_datum(newTraitor) + return TRUE + + +////////////////////////////////////////////// +// // +// Malfunctioning AI // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/midround/malf + name = "Malfunctioning AI" + antag_datum = /datum/antagonist/traitor + antag_flag = ROLE_MALF + enemy_roles = list("Security Officer", "Warden","Detective","Head of Security", "Captain", "Scientist", "Chemist", "Research Director", "Chief Engineer") + exclusive_roles = list("AI") + required_enemies = list(4,4,4,4,4,4,2,2,2,0) + required_candidates = 1 + weight = 3 + cost = 35 + requirements = list(101,101,80,70,60,60,50,50,40,40) + high_population_requirement = 35 + required_type = /mob/living/silicon/ai + var/ion_announce = 33 + var/removeDontImproveChance = 10 + +/datum/dynamic_ruleset/midround/malf/trim_candidates() + ..() + candidates = candidates[CURRENT_LIVING_PLAYERS] + for(var/mob/living/player in candidates) + if(!isAI(player)) + candidates -= player + continue + if(is_centcom_level(player.z)) + candidates -= player + continue + if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0)) + candidates -= player + +/datum/dynamic_ruleset/midround/malf/execute() + if(!candidates || !candidates.len) + return FALSE + var/mob/living/silicon/ai/M = pick(candidates) + candidates -= M + assigned += M.mind + var/datum/antagonist/traitor/AI = new + M.mind.special_role = antag_flag + M.mind.add_antag_datum(AI) + if(prob(ion_announce)) + priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/ai/ionstorm.ogg') + if(prob(removeDontImproveChance)) + M.replace_random_law(generate_ion_law(), list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION)) + else + M.add_ion_law(generate_ion_law()) + return TRUE + +////////////////////////////////////////////// +// // +// WIZARD (GHOST) // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/midround/from_ghosts/wizard + name = "Wizard" + antag_datum = /datum/antagonist/wizard + antag_flag = ROLE_WIZARD + enemy_roles = list("Security Officer","Detective","Head of Security", "Captain") + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 1 + cost = 20 + requirements = list(90,90,70,40,30,20,10,10,10,10) + high_population_requirement = 50 + repeatable = TRUE + +/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE) + if (required_candidates > (dead_players.len + list_observers.len)) + return FALSE + if(GLOB.wizardstart.len == 0) + log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") + message_admins("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/wizard/finish_setup(mob/new_character, index) + ..() + new_character.forceMove(pick(GLOB.wizardstart)) + +////////////////////////////////////////////// +// // +// NUCLEAR OPERATIVES (MIDROUND) // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/midround/from_ghosts/nuclear + name = "Nuclear Assault" + antag_flag = ROLE_OPERATIVE + antag_datum = /datum/antagonist/nukeop + enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden","Detective","Head of Security", "Captain") + required_enemies = list(3,3,3,3,3,2,1,1,0,0) + required_candidates = 5 + weight = 5 + cost = 35 + requirements = list(90,90,90,80,60,40,30,20,10,10) + high_population_requirement = 10 + var/operative_cap = list(2,2,3,3,4,5,5,5,5,5) + var/datum/team/nuclear/nuke_team + flags = HIGHLANDER_RULESET + +/datum/dynamic_ruleset/midround/from_ghosts/nuclear/acceptable(population=0, threat=0) + if (locate(/datum/dynamic_ruleset/roundstart/nuclear) in mode.executed_rules) + return FALSE // Unavailable if nuke ops were already sent at roundstart + var/indice_pop = min(10,round(living_players.len/5)+1) + required_candidates = operative_cap[indice_pop] + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE) + if (required_candidates > (dead_players.len + list_observers.len)) + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_setup(mob/new_character, index) + new_character.mind.special_role = "Nuclear Operative" + new_character.mind.assigned_role = "Nuclear Operative" + if (index == 1) // Our first guy is the leader + var/datum/antagonist/nukeop/leader/new_role = new + nuke_team = new_role.nuke_team + new_character.mind.add_antag_datum(new_role) + else + return ..() + +////////////////////////////////////////////// +// // +// BLOB (GHOST) // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/midround/from_ghosts/blob + name = "Blob" + antag_datum = /datum/antagonist/blob + antag_flag = ROLE_BLOB + enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain") + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 4 + cost = 10 + requirements = list(101,101,101,80,60,50,30,20,10,10) + high_population_requirement = 50 + repeatable = TRUE + +/datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant) + var/body = applicant.become_overmind() + return body + +////////////////////////////////////////////// +// // +// XENOMORPH (GHOST) // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/midround/from_ghosts/xenomorph + name = "Alien Infestation" + antag_datum = /datum/antagonist/xeno + antag_flag = ROLE_ALIEN + enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain") + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 3 + cost = 10 + requirements = list(101,101,101,70,50,40,20,15,10,10) + high_population_requirement = 50 + repeatable = TRUE + var/list/vents = list() + +/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute() + // 50% chance of being incremented by one + required_candidates += prob(50) + for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines) + if(QDELETED(temp_vent)) + continue + if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] + if(!temp_vent_parent) + continue // No parent vent + // Stops Aliens getting stuck in small networks. + // See: Security, Virology + if(temp_vent_parent.other_atmosmch.len > 20) + vents += temp_vent + if(!vents.len) + return FALSE + . = ..() + +/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/generate_ruleset_body(mob/applicant) + var/obj/vent = pick_n_take(vents) + var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc) + new_xeno.key = applicant.key + message_admins("[ADMIN_LOOKUPFLW(new_xeno)] has been made into an alien by the midround ruleset.") + log_game("DYNAMIC: [key_name(new_xeno)] was spawned as an alien by the midround ruleset.") + return new_xeno + +////////////////////////////////////////////// +// // +// NIGHTMARE (GHOST) // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/midround/from_ghosts/nightmare + name = "Nightmare" + antag_datum = /datum/antagonist/nightmare + antag_flag = "Nightmare" + antag_flag_override = ROLE_ALIEN + enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain") + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 3 + cost = 10 + requirements = list(101,101,101,70,50,40,20,15,10,10) + high_population_requirement = 50 + repeatable = TRUE + var/list/spawn_locs = list() + +/datum/dynamic_ruleset/midround/from_ghosts/nightmare/execute() + for(var/X in GLOB.xeno_spawn) + var/turf/T = X + var/light_amount = T.get_lumcount() + if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) + spawn_locs += T + if(!spawn_locs.len) + return FALSE + . = ..() + +/datum/dynamic_ruleset/midround/from_ghosts/nightmare/generate_ruleset_body(mob/applicant) + var/datum/mind/player_mind = new /datum/mind(applicant.key) + player_mind.active = TRUE + + var/mob/living/carbon/human/S = new (pick(spawn_locs)) + player_mind.transfer_to(S) + player_mind.assigned_role = "Nightmare" + player_mind.special_role = "Nightmare" + player_mind.add_antag_datum(/datum/antagonist/nightmare) + S.set_species(/datum/species/shadow/nightmare) + + playsound(S, 'sound/magic/ethereal_exit.ogg', 50, 1, -1) + message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Nightmare by the midround ruleset.") + log_game("DYNAMIC: [key_name(S)] was spawned as a Nightmare by the midround ruleset.") + return S diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm new file mode 100644 index 0000000000..38ce6f68d0 --- /dev/null +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -0,0 +1,732 @@ + +////////////////////////////////////////////// +// // +// SYNDICATE TRAITORS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/traitor + name = "Traitors" + persistent = TRUE + antag_flag = ROLE_TRAITOR + antag_datum = /datum/antagonist/traitor/ + minimum_required_age = 0 + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Cyborg") + restricted_roles = list("Cyborg") + required_candidates = 1 + weight = 5 + cost = 10 + requirements = list(10,10,10,10,10,10,10,10,10,10) + high_population_requirement = 10 + var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec) + +/datum/dynamic_ruleset/roundstart/traitor/pre_execute() + var/traitor_scaling_coeff = 10 - max(0,round(mode.threat_level/10)-5) // Above 50 threat level, coeff goes down by 1 for every 10 levels + var/num_traitors = min(round(mode.candidates.len / traitor_scaling_coeff) + 1, candidates.len) + for (var/i = 1 to num_traitors) + var/mob/M = pick(candidates) + candidates -= M + assigned += M.mind + M.mind.special_role = ROLE_TRAITOR + M.mind.restricted_roles = restricted_roles + return TRUE + +/datum/dynamic_ruleset/roundstart/traitor/rule_process() + if (autotraitor_cooldown > 0) + autotraitor_cooldown-- + else + autotraitor_cooldown = 450 // 15 minutes + message_admins("Checking if we can turn someone into a traitor.") + log_game("DYNAMIC: Checking if we can turn someone into a traitor.") + mode.picking_specific_rule(/datum/dynamic_ruleset/midround/autotraitor) + +////////////////////////////////////////// +// // +// BLOOD BROTHERS // +// // +////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/traitorbro + name = "Blood Brothers" + antag_flag = ROLE_BROTHER + antag_datum = /datum/antagonist/brother/ + restricted_roles = list("AI", "Cyborg") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 2 + weight = 4 + cost = 10 + requirements = list(40,30,30,20,20,15,15,15,10,10) + high_population_requirement = 15 + var/list/datum/team/brother_team/pre_brother_teams = list() + var/const/team_amount = 2 // Hard limit on brother teams if scaling is turned off + var/const/min_team_size = 2 + +/datum/dynamic_ruleset/roundstart/traitorbro/pre_execute() + var/num_teams = team_amount + var/bsc = CONFIG_GET(number/brother_scaling_coeff) + if(bsc) + num_teams = max(1, round(num_players() / bsc)) + + for(var/j = 1 to num_teams) + if(candidates.len < min_team_size || candidates.len < required_candidates) + break + var/datum/team/brother_team/team = new + var/team_size = prob(10) ? min(3, candidates.len) : 2 + for(var/k = 1 to team_size) + var/mob/bro = pick(candidates) + candidates -= bro + assigned += bro.mind + team.add_member(bro.mind) + bro.mind.special_role = "brother" + bro.mind.restricted_roles = restricted_roles + pre_brother_teams += team + return TRUE + +/datum/dynamic_ruleset/roundstart/traitorbro/execute() + for(var/datum/team/brother_team/team in pre_brother_teams) + team.pick_meeting_area() + team.forge_brother_objectives() + for(var/datum/mind/M in team.members) + M.add_antag_datum(/datum/antagonist/brother, team) + team.update_name() + mode.brother_teams += pre_brother_teams + return TRUE + +////////////////////////////////////////////// +// // +// CHANGELINGS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/changeling + name = "Changelings" + antag_flag = ROLE_CHANGELING + antag_datum = /datum/antagonist/changeling + restricted_roles = list("AI", "Cyborg") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 1 + weight = 3 + cost = 30 + requirements = list(80,70,60,50,40,20,20,10,10,10) + high_population_requirement = 10 + var/team_mode_probability = 30 + +/datum/dynamic_ruleset/roundstart/changeling/pre_execute() + var/num_changelings = min(round(mode.candidates.len / 10) + 1, candidates.len) + for (var/i = 1 to num_changelings) + var/mob/M = pick(candidates) + candidates -= M + assigned += M.mind + M.mind.restricted_roles = restricted_roles + M.mind.special_role = ROLE_CHANGELING + return TRUE + +/datum/dynamic_ruleset/roundstart/changeling/execute() + var/team_mode = FALSE + if(prob(team_mode_probability)) + team_mode = TRUE + var/list/team_objectives = subtypesof(/datum/objective/changeling_team_objective) + var/list/possible_team_objectives = list() + for(var/T in team_objectives) + var/datum/objective/changeling_team_objective/CTO = T + if(assigned.len >= initial(CTO.min_lings)) + possible_team_objectives += T + + if(possible_team_objectives.len && prob(20*assigned.len)) + GLOB.changeling_team_objective_type = pick(possible_team_objectives) + for(var/datum/mind/changeling in assigned) + var/datum/antagonist/changeling/new_antag = new antag_datum() + new_antag.team_mode = team_mode + changeling.add_antag_datum(new_antag) + return TRUE + +////////////////////////////////////////////// +// // +// WIZARDS // +// // +////////////////////////////////////////////// + +// Dynamic is a wonderful thing that adds wizards to every round and then adds even more wizards during the round. +/datum/dynamic_ruleset/roundstart/wizard + name = "Wizard" + antag_flag = ROLE_WIZARD + antag_datum = /datum/antagonist/wizard + minimum_required_age = 14 + restricted_roles = list("Head of Security", "Captain") // Just to be sure that a wizard getting picked won't ever imply a Captain or HoS not getting drafted + required_candidates = 1 + weight = 1 + cost = 30 + requirements = list(90,90,70,40,30,20,10,10,10,10) + high_population_requirement = 10 + var/list/roundstart_wizards = list() + +/datum/dynamic_ruleset/roundstart/wizard/acceptable(population=0, threat=0) + if(GLOB.wizardstart.len == 0) + log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") + message_admins("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") + return FALSE + return ..() + +/datum/dynamic_ruleset/roundstart/wizard/pre_execute() + if(GLOB.wizardstart.len == 0) + return FALSE + + var/mob/M = pick(candidates) + if (M) + candidates -= M + assigned += M.mind + M.mind.assigned_role = ROLE_WIZARD + M.mind.special_role = ROLE_WIZARD + + return TRUE + +/datum/dynamic_ruleset/roundstart/wizard/execute() + for(var/datum/mind/M in assigned) + M.current.forceMove(pick(GLOB.wizardstart)) + M.add_antag_datum(new antag_datum()) + return TRUE + +////////////////////////////////////////////// +// // +// BLOOD CULT // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/bloodcult + name = "Blood Cult" + antag_flag = ROLE_CULTIST + antag_datum = /datum/antagonist/cult + minimum_required_age = 14 + restricted_roles = list("AI", "Cyborg") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 2 + weight = 3 + cost = 30 + requirements = list(100,90,80,60,40,30,10,10,10,10) + high_population_requirement = 10 + pop_per_requirement = 5 + flags = HIGHLANDER_RULESET + var/cultist_cap = list(2,2,2,3,3,4,4,4,4,4) + var/datum/team/cult/main_cult + +/datum/dynamic_ruleset/roundstart/bloodcult/ready(forced = FALSE) + var/indice_pop = min(10,round(mode.roundstart_pop_ready/pop_per_requirement)+1) + required_candidates = cultist_cap[indice_pop] + . = ..() + +/datum/dynamic_ruleset/roundstart/bloodcult/pre_execute() + var/indice_pop = min(10,round(mode.roundstart_pop_ready/pop_per_requirement)+1) + var/cultists = cultist_cap[indice_pop] + for(var/cultists_number = 1 to cultists) + if(candidates.len <= 0) + break + var/mob/M = pick(candidates) + candidates -= M + assigned += M.mind + M.mind.special_role = ROLE_CULTIST + M.mind.restricted_roles = restricted_roles + return TRUE + +/datum/dynamic_ruleset/roundstart/bloodcult/execute() + main_cult = new + for(var/datum/mind/M in assigned) + var/datum/antagonist/cult/new_cultist = new antag_datum() + new_cultist.cult_team = main_cult + new_cultist.give_equipment = TRUE + M.add_antag_datum(new_cultist) + main_cult.setup_objectives() + return TRUE + +/datum/dynamic_ruleset/roundstart/bloodcult/round_result() + ..() + if(main_cult.check_cult_victory()) + SSticker.mode_result = "win - cult win" + SSticker.news_report = CULT_SUMMON + else + SSticker.mode_result = "loss - staff stopped the cult" + SSticker.news_report = CULT_FAILURE + +////////////////////////////////////////////// +// // +// NUCLEAR OPERATIVES // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/nuclear + name = "Nuclear Emergency" + antag_flag = ROLE_OPERATIVE + antag_datum = /datum/antagonist/nukeop + var/datum/antagonist/antag_leader_datum = /datum/antagonist/nukeop/leader + minimum_required_age = 14 + restricted_roles = list("Head of Security", "Captain") // Just to be sure that a nukie getting picked won't ever imply a Captain or HoS not getting drafted + required_candidates = 5 + weight = 3 + cost = 40 + requirements = list(90,90,90,80,60,40,30,20,10,10) + high_population_requirement = 10 + pop_per_requirement = 5 + flags = HIGHLANDER_RULESET + var/operative_cap = list(2,2,2,3,3,3,4,4,5,5) + var/datum/team/nuclear/nuke_team + +/datum/dynamic_ruleset/roundstart/nuclear/ready(forced = FALSE) + var/indice_pop = min(10,round(mode.roundstart_pop_ready/pop_per_requirement)+1) + required_candidates = operative_cap[indice_pop] + . = ..() + +/datum/dynamic_ruleset/roundstart/nuclear/pre_execute() + // If ready() did its job, candidates should have 5 or more members in it + + var/indice_pop = min(10,round(mode.roundstart_pop_ready/5)+1) + var/operatives = operative_cap[indice_pop] + for(var/operatives_number = 1 to operatives) + if(candidates.len <= 0) + break + var/mob/M = pick(candidates) + candidates -= M + assigned += M.mind + M.mind.assigned_role = "Nuclear Operative" + M.mind.special_role = "Nuclear Operative" + return TRUE + +/datum/dynamic_ruleset/roundstart/nuclear/execute() + var/leader = TRUE + for(var/datum/mind/M in assigned) + if (leader) + leader = FALSE + var/datum/antagonist/nukeop/leader/new_op = M.add_antag_datum(antag_leader_datum) + nuke_team = new_op.nuke_team + else + var/datum/antagonist/nukeop/new_op = new antag_datum() + M.add_antag_datum(new_op) + return TRUE + +/datum/dynamic_ruleset/roundstart/nuclear/round_result() + var result = nuke_team.get_result() + switch(result) + if(NUKE_RESULT_FLUKE) + SSticker.mode_result = "loss - syndicate nuked - disk secured" + SSticker.news_report = NUKE_SYNDICATE_BASE + if(NUKE_RESULT_NUKE_WIN) + SSticker.mode_result = "win - syndicate nuke" + SSticker.news_report = STATION_NUKED + if(NUKE_RESULT_NOSURVIVORS) + SSticker.mode_result = "halfwin - syndicate nuke - did not evacuate in time" + SSticker.news_report = STATION_NUKED + if(NUKE_RESULT_WRONG_STATION) + SSticker.mode_result = "halfwin - blew wrong station" + SSticker.news_report = NUKE_MISS + if(NUKE_RESULT_WRONG_STATION_DEAD) + SSticker.mode_result = "halfwin - blew wrong station - did not evacuate in time" + SSticker.news_report = NUKE_MISS + if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD) + SSticker.mode_result = "loss - evacuation - disk secured - syndi team dead" + SSticker.news_report = OPERATIVES_KILLED + if(NUKE_RESULT_CREW_WIN) + SSticker.mode_result = "loss - evacuation - disk secured" + SSticker.news_report = OPERATIVES_KILLED + if(NUKE_RESULT_DISK_LOST) + SSticker.mode_result = "halfwin - evacuation - disk not secured" + SSticker.news_report = OPERATIVE_SKIRMISH + if(NUKE_RESULT_DISK_STOLEN) + SSticker.mode_result = "halfwin - detonation averted" + SSticker.news_report = OPERATIVE_SKIRMISH + else + SSticker.mode_result = "halfwin - interrupted" + SSticker.news_report = OPERATIVE_SKIRMISH + +////////////////////////////////////////////// +// // +// REVS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/delayed/revs + name = "Revolution" + persistent = TRUE + antag_flag = ROLE_REV_HEAD + antag_flag_override = ROLE_REV + antag_datum = /datum/antagonist/rev/head + minimum_required_age = 14 + restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 3 + weight = 2 + cost = 35 + requirements = list(101,101,70,40,30,20,10,10,10,10) + high_population_requirement = 10 + delay = 5 MINUTES + flags = HIGHLANDER_RULESET + // I give up, just there should be enough heads with 35 players... + minimum_players = 35 + var/datum/team/revolution/revolution + var/finished = 0 + +/datum/dynamic_ruleset/roundstart/delayed/revs/execute() + var/max_canditates = 4 + revolution = new() + for(var/i = 1 to max_canditates) + if(candidates.len <= 0) + break + var/mob/M = pick(candidates) + candidates -= M + assigned += M.mind + M.mind.restricted_roles = restricted_roles + M.mind.special_role = antag_flag + var/datum/antagonist/rev/head/new_head = new antag_datum() + new_head.give_flash = TRUE + new_head.give_hud = TRUE + new_head.remove_clumsy = TRUE + M.mind.add_antag_datum(new_head,revolution) + + revolution.update_objectives() + revolution.update_heads() + SSshuttle.registerHostileEnvironment(src) + + return TRUE + +/datum/dynamic_ruleset/roundstart/delayed/revs/rule_process() + if(check_rev_victory()) + finished = 1 + else if(check_heads_victory()) + finished = 2 + return + +/datum/dynamic_ruleset/roundstart/delayed/revs/check_finished() + if(CONFIG_GET(keyed_list/continuous)["revolution"]) + if(finished) + SSshuttle.clearHostileEnvironment(src) + return ..() + if(finished != 0) + return TRUE + else + return ..() + +/datum/dynamic_ruleset/roundstart/delayed/revs/proc/check_rev_victory() + for(var/datum/objective/mutiny/objective in revolution.objectives) + if(!(objective.check_completion())) + return FALSE + return TRUE + +/datum/dynamic_ruleset/roundstart/delayed/revs/proc/check_heads_victory() + for(var/datum/mind/rev_mind in revolution.head_revolutionaries()) + var/turf/T = get_turf(rev_mind.current) + if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z)) + if(ishuman(rev_mind.current) || ismonkey(rev_mind.current)) + return FALSE + return TRUE + +/datum/dynamic_ruleset/roundstart/delayed/revs/round_result() + if(finished == 1) + SSticker.mode_result = "win - heads killed" + SSticker.news_report = REVS_WIN + else if(finished == 2) + SSticker.mode_result = "loss - rev heads killed" + SSticker.news_report = REVS_LOSE + +// Admin only rulesets. The threat requirement is 101 so it is not possible to roll them. + +////////////////////////////////////////////// +// // +// EXTENDED // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/extended + name = "Extended" + antag_flag = null + antag_datum = null + restricted_roles = list() + required_candidates = 0 + weight = 3 + cost = 0 + requirements = list(101,101,101,101,101,101,101,101,101,101) + high_population_requirement = 101 + +/datum/dynamic_ruleset/roundstart/extended/pre_execute() + message_admins("Starting a round of extended.") + log_game("Starting a round of extended.") + mode.spend_threat(mode.threat) + return TRUE + +////////////////////////////////////////////// +// // +// CLOCKCULT // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/clockcult + name = "Clockcult" + antag_flag = ROLE_SERVANT_OF_RATVAR + antag_datum = /datum/antagonist/clockcult + restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 4 + weight = 3 + cost = 0 + requirements = list(101,101,101,101,101,101,101,101,101,101) + high_population_requirement = 101 + flags = HIGHLANDER_RULESET + var/ark_time + +/datum/dynamic_ruleset/roundstart/clockcult/pre_execute() + var/list/errorList = list() + var/list/reebes = SSmapping.LoadGroup(errorList, "Reebe", "map_files/generic", "City_of_Cogs.dmm", default_traits = ZTRAITS_REEBE, silent = TRUE) + if(errorList.len) + message_admins("Reebe failed to load!") + log_game("Reebe failed to load!") + return FALSE + for(var/datum/parsed_map/PM in reebes) + PM.initTemplateBounds() + + var/starter_servants = 4 + var/number_players = num_players() + if(number_players > 30) + number_players -= 30 + starter_servants += round(number_players / 10) + starter_servants = min(starter_servants, 8) + for (var/i in 1 to starter_servants) + var/mob/servant = pick(candidates) + candidates -= servant + assigned += servant.mind + servant.mind.assigned_role = ROLE_SERVANT_OF_RATVAR + servant.mind.special_role = ROLE_SERVANT_OF_RATVAR + ark_time = 30 + round((number_players / 5)) + ark_time = min(ark_time, 35) + return TRUE + +/datum/dynamic_ruleset/roundstart/clockcult/execute() + var/list/spread_out_spawns = GLOB.servant_spawns.Copy() + for(var/datum/mind/servant in assigned) + var/mob/S = servant.current + if(!spread_out_spawns.len) + spread_out_spawns = GLOB.servant_spawns.Copy() + log_game("[key_name(servant)] was made an initial servant of Ratvar") + var/turf/T = pick_n_take(spread_out_spawns) + S.forceMove(T) + greet_servant(S) + equip_servant(S) + add_servant_of_ratvar(S, TRUE) + var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar //that's a mouthful + G.final_countdown(ark_time) + return TRUE + +/datum/dynamic_ruleset/roundstart/clockcult/proc/greet_servant(mob/M) //Description of their role + if(!M) + return 0 + to_chat(M, "You are a servant of Ratvar, the Clockwork Justiciar!") + to_chat(M, "You have approximately [ark_time] minutes until the Ark activates.") + to_chat(M, "Unlock Script scripture by converting a new servant.") + to_chat(M, "Application scripture will be unlocked halfway until the Ark's activation.") + M.playsound_local(get_turf(M), 'sound/ambience/antag/clockcultalr.ogg', 100, FALSE, pressure_affected = FALSE) + return 1 + +/datum/dynamic_ruleset/roundstart/clockcult/proc/equip_servant(mob/living/M) //Grants a clockwork slab to the mob, with one of each component + if(!M || !ishuman(M)) + return FALSE + var/mob/living/carbon/human/L = M + L.equipOutfit(/datum/outfit/servant_of_ratvar) + var/obj/item/clockwork/slab/S = new + var/slot = "At your feet" + var/list/slots = list("In your left pocket" = SLOT_L_STORE, "In your right pocket" = SLOT_R_STORE, "In your backpack" = SLOT_IN_BACKPACK, "On your belt" = SLOT_BELT) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + slot = H.equip_in_one_of_slots(S, slots) + if(slot == "In your backpack") + slot = "In your [H.back.name]" + if(slot == "At your feet") + if(!S.forceMove(get_turf(L))) + qdel(S) + if(S && !QDELETED(S)) + to_chat(L, "There is a paper in your backpack! It'll tell you if anything's changed, as well as what to expect.") + to_chat(L, "[slot] is a clockwork slab, a multipurpose tool used to construct machines and invoke ancient words of power. If this is your first time \ + as a servant, you can find a concise tutorial in the Recollection category of its interface.") + to_chat(L, "If you want more information, you can read the wiki page to learn more.") + return TRUE + return FALSE + +/datum/dynamic_ruleset/roundstart/clockcult/round_result() + if(GLOB.clockwork_gateway_activated) + SSticker.news_report = CLOCK_SUMMON + SSticker.mode_result = "win - servants completed their objective (summon ratvar)" + else + SSticker.news_report = CULT_FAILURE + SSticker.mode_result = "loss - servants failed their objective (summon ratvar)" + +////////////////////////////////////////////// +// // +// CLOWN OPS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/nuclear/clown_ops + name = "Clown Ops" + antag_datum = /datum/antagonist/nukeop/clownop + antag_leader_datum = /datum/antagonist/nukeop/leader/clownop + requirements = list(101,101,101,101,101,101,101,101,101,101) + high_population_requirement = 101 + +/datum/dynamic_ruleset/roundstart/nuclear/clown_ops/pre_execute() + . = ..() + if(.) + for(var/obj/machinery/nuclearbomb/syndicate/S in GLOB.nuke_list) + var/turf/T = get_turf(S) + if(T) + qdel(S) + new /obj/machinery/nuclearbomb/syndicate/bananium(T) + for(var/datum/mind/V in assigned) + V.assigned_role = "Clown Operative" + V.special_role = "Clown Operative" + +////////////////////////////////////////////// +// // +// DEVIL // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/devil + name = "Devil" + antag_flag = ROLE_DEVIL + antag_datum = /datum/antagonist/devil + restricted_roles = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI") + required_candidates = 1 + weight = 3 + cost = 0 + requirements = list(101,101,101,101,101,101,101,101,101,101) + high_population_requirement = 101 + var/devil_limit = 4 // Hard limit on devils if scaling is turned off + +/datum/dynamic_ruleset/roundstart/devil/pre_execute() + var/tsc = CONFIG_GET(number/traitor_scaling_coeff) + var/num_devils = 1 + + if(tsc) + num_devils = max(required_candidates, min(round(num_players() / (tsc * 3)) + 2, round(num_players() / (tsc * 1.5)))) + else + num_devils = max(required_candidates, min(num_players(), devil_limit)) + + for(var/j = 0, j < num_devils, j++) + if (!candidates.len) + break + var/mob/devil = pick(candidates) + assigned += devil + candidates -= devil + devil.mind.special_role = ROLE_DEVIL + devil.mind.restricted_roles = restricted_roles + + log_game("[key_name(devil)] has been selected as a devil") + return TRUE + +/datum/dynamic_ruleset/roundstart/devil/execute() + for(var/datum/mind/devil in assigned) + add_devil(devil.current, ascendable = TRUE) + add_devil_objectives(devil,2) + return TRUE + +/datum/dynamic_ruleset/roundstart/devil/proc/add_devil_objectives(datum/mind/devil_mind, quantity) + var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target) + var/datum/antagonist/devil/D = devil_mind.has_antag_datum(/datum/antagonist/devil) + for(var/i = 1 to quantity) + var/type = pick(validtypes) + var/datum/objective/devil/objective = new type(null) + objective.owner = devil_mind + D.objectives += objective + if(!istype(objective, /datum/objective/devil/buy_target)) + validtypes -= type + else + objective.find_target() + +////////////////////////////////////////////// +// // +// MONKEY // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/monkey + name = "Monkey" + antag_flag = ROLE_MONKEY + antag_datum = /datum/antagonist/monkey/leader + restricted_roles = list("Cyborg", "AI") + required_candidates = 1 + weight = 3 + cost = 0 + requirements = list(101,101,101,101,101,101,101,101,101,101) + high_population_requirement = 101 + var/players_per_carrier = 30 + var/monkeys_to_win = 1 + var/escaped_monkeys = 0 + var/datum/team/monkey/monkey_team + +/datum/dynamic_ruleset/roundstart/monkey/pre_execute() + var/carriers_to_make = max(round(num_players()/players_per_carrier, 1), 1) + + for(var/j = 0, j < carriers_to_make, j++) + if (!candidates.len) + break + var/mob/carrier = pick(candidates) + candidates -= carrier + assigned += carrier.mind + carrier.mind.special_role = "Monkey Leader" + carrier.mind.restricted_roles = restricted_roles + log_game("[key_name(carrier)] has been selected as a Jungle Fever carrier") + return TRUE + +/datum/dynamic_ruleset/roundstart/monkey/execute() + for(var/datum/mind/carrier in assigned) + var/datum/antagonist/monkey/M = add_monkey_leader(carrier) + if(M) + monkey_team = M.monkey_team + return TRUE + +/datum/dynamic_ruleset/roundstart/monkey/proc/check_monkey_victory() + if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) + return FALSE + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list) + if (M.HasDisease(D)) + if(M.onCentCom() || M.onSyndieBase()) + escaped_monkeys++ + if(escaped_monkeys >= monkeys_to_win) + return TRUE + else + return FALSE + +// This does not get called. Look into making it work. +/datum/dynamic_ruleset/roundstart/monkey/round_result() + if(check_monkey_victory()) + SSticker.mode_result = "win - monkey win" + else + SSticker.mode_result = "loss - staff stopped the monkeys" + +////////////////////////////////////////////// +// // +// METEOR // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/meteor + name = "Meteor" + persistent = TRUE + required_candidates = 0 + weight = 3 + cost = 0 + requirements = list(101,101,101,101,101,101,101,101,101,101) + high_population_requirement = 101 + var/meteordelay = 2000 + var/nometeors = 0 + var/rampupdelta = 5 + +/datum/dynamic_ruleset/roundstart/meteor/rule_process() + if(nometeors || meteordelay > world.time - SSticker.round_start_time) + return + + var/list/wavetype = GLOB.meteors_normal + var/meteorminutes = (world.time - SSticker.round_start_time - meteordelay) / 10 / 60 + + if (prob(meteorminutes)) + wavetype = GLOB.meteors_threatening + + if (prob(meteorminutes/2)) + wavetype = GLOB.meteors_catastrophic + + var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10) + + spawn_meteors(ramp_up_final, wavetype) diff --git a/code/game/gamemodes/dynamic/readme.md b/code/game/gamemodes/dynamic/readme.md new file mode 100644 index 0000000000..6bd064cf7c --- /dev/null +++ b/code/game/gamemodes/dynamic/readme.md @@ -0,0 +1,57 @@ +# DYNAMIC + +## ROUNDSTART + +Dynamic rolls threat based on a special sauce formula: +"dynamic_curve_width \* tan((3.1416 \* (rand() - 0.5) \* 57.2957795)) + dynamic_curve_centre" + +Latejoin and midround injection cooldowns are set using exponential distribution between +5 minutes and 25 for latejoin +15 minutes and 35 for midround +this value is then added to world.time and assigned to the injection cooldown variables. + +rigged_roundstart() is called instead if there are forced rules (an admin set the mode) + +can_start() -> pre_setup() -> roundstart() OR rigged_roundstart() -> picking_roundstart_rule(drafted_rules) -> post_setup() + +## PROCESS + +Calls rule_process on every rule which is in the current_rules list. +Every sixty seconds, update_playercounts() +Midround injection time is checked against world.time to see if an injection should happen. +If midround injection time is lower than world.time, it updates playercounts again, then tries to inject and generates a new cooldown regardless of whether a rule is picked. + +## LATEJOIN + +make_antag_chance(newPlayer) -> [For each latespawn rule...] +-> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE) +**If true, add to drafted rules +**NOTE that acceptable uses threat_level not threat! +**NOTE Latejoin timer is ONLY reset if at least one rule was drafted. +**NOTE the new_player.dm AttemptLateSpawn() calls OnPostSetup for all roles (unless assigned role is MODE) +[After collecting all draftble rules...] +-> picking_latejoin_ruleset(drafted_rules) -> spend threat -> ruleset.execute() +## MIDROUND +process() -> [For each midround rule...] +-> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE) +[After collecting all draftble rules...] +-> picking_midround_ruleset(drafted_rules) -> spend threat -> ruleset.execute() +## FORCED +For latejoin, it simply sets forced_latejoin_rule +make_antag_chance(newPlayer) -> trim_candidates() -> ready(forced=TRUE) **NOTE no acceptable() call +For midround, calls the below proc with forced = TRUE +picking_specific_rule(ruletype,forced) -> forced OR acceptable(living_players, threat_level) -> trim_candidates() -> ready(forced) -> spend threat -> execute() +**NOTE specific rule can be called by RS traitor->MR autotraitor w/ forced=FALSE +**NOTE that due to short circuiting acceptable() need not be called if forced. +## RULESET +acceptable(population,threat) just checks if enough threat_level for population indice. +**NOTE that we currently only send threat_level as the second arg, not threat. +ready(forced) checks if enough candidates and calls the map's map_ruleset(dynamic_ruleset) at the parent level +trim_candidates() varies significantly according to the ruleset type +Roundstart: All candidates are new_player mobs. Check them for standard stuff: connected, desire role, not banned, etc. +**NOTE Roundstart deals with both candidates (trimmed list of valid players) and mode.candidates (everyone readied up). Don't confuse them! +Latejoin: Only one candidate, the latejoiner. Standard checks. +Midround: Instead of building a single list candidates, candidates contains four lists: living, dead, observing, and living antags. Standard checks in trim_list(list). +Midround - Rulesets have additional types +/from_ghosts: execute() -> send_applications() -> review_applications() -> finish_setup(mob/newcharacter, index) -> setup_role(role) +**NOTE: execute() here adds dead players and observers to candidates list diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index d16cbebb2a..f790053863 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -24,6 +24,7 @@ var/list/datum/mind/antag_candidates = list() // List of possible starting antags goes here var/list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist var/list/protected_jobs = list() // Jobs that can't be traitors because + var/list/required_jobs = list() // alternative required job groups eg list(list(cap=1),list(hos=1,sec=2)) translates to one captain OR one hos and two secmans var/required_players = 0 var/maximum_players = -1 // -1 is no maximum, positive numbers limit the selection of a mode on overstaffed stations var/required_enemies = 0 @@ -355,7 +356,7 @@ // Ultimate randomizing code right here for(var/mob/dead/new_player/player in GLOB.player_list) - if(player.client && player.ready == PLAYER_READY_TO_PLAY) + if(player.client && player.ready == PLAYER_READY_TO_PLAY && player.check_preferences()) players += player // Shuffling, the players list is now ping-independent!!! @@ -558,3 +559,7 @@ SSticker.news_report = STATION_EVACUATED if(SSshuttle.emergency.is_hijacked()) SSticker.news_report = SHUTTLE_HIJACK + +/// Mode specific admin panel. +/datum/game_mode/proc/admin_panel() + return diff --git a/code/game/gamemodes/overthrow/overthrow.dm b/code/game/gamemodes/overthrow/overthrow.dm index 1548556515..dca0c1ade1 100644 --- a/code/game/gamemodes/overthrow/overthrow.dm +++ b/code/game/gamemodes/overthrow/overthrow.dm @@ -3,7 +3,8 @@ name = "overthrow" config_tag = "overthrow" antag_flag = ROLE_OVERTHROW - restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer") + restricted_jobs = list("AI", "Cyborg") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_players = 20 // the core idea is of a swift, bloodless coup, so it shouldn't be as chaotic as revs. required_enemies = 2 // minimum two teams, otherwise it's just nerfed revs. recommended_enemies = 4 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 09047b05a9..8459819b5b 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -12,7 +12,8 @@ config_tag = "revolution" antag_flag = ROLE_REV false_report_weight = 10 - restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer") + restricted_jobs = list("AI", "Cyborg") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_players = 30 required_enemies = 2 recommended_enemies = 3 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 789737ec0f..4a6e72cf67 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -96,4 +96,4 @@ /datum/game_mode/traitor/generate_report() return "Although more specific threats are commonplace, you should always remain vigilant for Syndicate agents aboard your station. Syndicate communications have implied that many \ - Nanotrasen employees are Syndicate agents with hidden memories that may be activated at a moment's notice, so it's possible that these agents might not even know their positions." \ No newline at end of file + Nanotrasen employees are Syndicate agents with hidden memories that may be activated at a moment's notice, so it's possible that these agents might not even know their positions." diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 59806e97a4..88ab4ec6f8 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -27,8 +27,10 @@ "human", "lizard", "fly", - "moth", + "insect", "plasmaman", + "mammal", + "xeno", "other" ) diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm index 2fe8d2a460..b9acba70d9 100644 --- a/code/game/objects/effects/spawners/bundle.dm +++ b/code/game/objects/effects/spawners/bundle.dm @@ -133,7 +133,7 @@ /obj/effect/spawner/bundle/costume/holiday_priest name = "holiday priest costume spawner" items = list( - /obj/item/clothing/suit/holidaypriest) + /obj/item/clothing/suit/chaplain/holidaypriest) /obj/effect/spawner/bundle/costume/marisawizard name = "marisa wizard costume spawner" diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 185875a93f..5e8250ea00 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -34,6 +34,7 @@ desc = "God wills it!" icon_state = "knight_templar" item_state = "knight_templar" + allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) // CITADEL CHANGES: More variants /obj/item/clothing/suit/armor/riot/chaplain/teutonic @@ -122,7 +123,6 @@ icon_state = "studentuni" item_state = "studentuni" body_parts_covered = ARMS|CHEST - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/head/helmet/chaplain/cage name = "cage" @@ -166,7 +166,6 @@ icon_state = "witchhunter" item_state = "witchhunter" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/head/helmet/chaplain/witchunter_hat name = "witchunter hat" @@ -191,7 +190,7 @@ icon_state = "chaplain_hoodie" item_state = "chaplain_hoodie" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) hoodtype = /obj/item/clothing/head/hooded/chaplain_hood /obj/item/clothing/head/hooded/chaplain_hood @@ -248,12 +247,7 @@ if(GLOB.holy_weapon_type) return var/obj/item/holy_weapon - var/list/holy_weapons_list = typesof(/obj/item/nullrod) + list( - /obj/item/twohanded/dualsaber/hypereutactic/chaplain, - /obj/item/gun/energy/laser/redtag/hitscan/chaplain, - /obj/item/multitool/chaplain, - /obj/item/melee/baseball_bat/chaplain - ) + var/list/holy_weapons_list = subtypesof(/obj/item/nullrod) + list(HOLY_WEAPONS) var/list/display_names = list() for(var/V in holy_weapons_list) var/obj/item/nullrod/rodtype = V diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index f9affc230d..10b84917bb 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -180,8 +180,13 @@ slot_flags = ITEM_SLOT_BELT force = 12 //9 hit crit w_class = WEIGHT_CLASS_NORMAL - var/cooldown = 0 + var/cooldown = 13 var/on = TRUE + var/last_hit = 0 + var/stun_stam_cost_coeff = 1.25 + var/hardstun_ds = 1 + var/softstun_ds = 0 + var/stam_dmg = 30 /obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user) if(!on) @@ -207,12 +212,10 @@ if(!isliving(target)) return if (user.a_intent == INTENT_HARM) - if(!..()) - return - if(!iscyborg(target)) + if(!..() || !iscyborg(target)) return else - if(cooldown <= world.time) + if(last_hit < world.time) if(ishuman(target)) var/mob/living/carbon/human/H = target if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) @@ -220,7 +223,7 @@ if(check_martial_counter(H, user)) return playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1) - target.Knockdown(60) + target.Knockdown(softstun_ds, TRUE, FALSE, hardstun_ds, stam_dmg) log_combat(user, target, "stunned", src) src.add_fingerprint(user) target.visible_message("[user] has knocked down [target] with [src]!", \ @@ -229,7 +232,7 @@ target.LAssailant = null else target.LAssailant = user - cooldown = world.time + last_hit = world.time + cooldown user.adjustStaminaLossBuffered(getweight())//CIT CHANGE - makes swinging batons cost stamina /obj/item/melee/classic_baton/telescopic @@ -245,7 +248,7 @@ item_flags = NONE force = 0 on = FALSE - total_mass = TOTAL_MASS_SMALL_ITEM + total_mass = TOTAL_MASS_NORMAL_ITEM /obj/item/melee/classic_baton/telescopic/suicide_act(mob/user) var/mob/living/carbon/human/H = user diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index d2ab9ea6fb..b49d0a77d5 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -111,9 +111,9 @@ new /obj/item/clothing/accessory/pocketprotector/cosmetology(src) new /obj/item/clothing/under/rank/chaplain(src) new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/suit/nun(src) + new /obj/item/clothing/suit/chaplain/nun(src) new /obj/item/clothing/head/nun_hood(src) - new /obj/item/clothing/suit/holidaypriest(src) + new /obj/item/clothing/suit/chaplain/holidaypriest(src) new /obj/item/storage/backpack/cultpack(src) new /obj/item/storage/fancy/candle_box(src) new /obj/item/storage/fancy/candle_box(src) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index cdca354563..05e62c196f 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -79,4 +79,4 @@ var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return default_color - return sanitize_hexcolor(n_color) + return sanitize_hexcolor(n_color, 3, FALSE, default_color) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index b400f44b98..555c35980d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -423,6 +423,25 @@ if(GLOB.master_mode == "secret") dat += "(Force Secret Mode)
" + if(GLOB.master_mode == "dynamic") + if(SSticker.current_state <= GAME_STATE_PREGAME) + dat += "(Force Roundstart Rulesets)
" + if (GLOB.dynamic_forced_roundstart_ruleset.len > 0) + for(var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset) + dat += {"-> [rule.name] <-
"} + dat += "(Clear Rulesets)
" + dat += "(Dynamic mode options)
" + else if (SSticker.IsRoundInProgress()) + dat += "(Force Next Latejoin Ruleset)
" + if (SSticker && SSticker.mode && istype(SSticker.mode,/datum/game_mode/dynamic)) + var/datum/game_mode/dynamic/mode = SSticker.mode + if (mode.forced_latejoin_rule) + dat += {"-> [mode.forced_latejoin_rule.name] <-
"} + dat += "(Execute Midround Ruleset!)
" + dat += "
" + if(SSticker.IsRoundInProgress()) + dat += "(Game Mode Panel)
" + dat += {"
Create Object
@@ -839,6 +858,44 @@ browser.set_content(dat.Join()) browser.open() +/datum/admins/proc/dynamic_mode_options(mob/user) + var/dat = {" +

Dynamic Mode Options


+
+

Common options

+ All these options can be changed midround.
+
+ Force extended: - Option is [GLOB.dynamic_forced_extended ? "ON" : "OFF"]. +
This will force the round to be extended. No rulesets will be drafted.
+
+ No stacking: - Option is [GLOB.dynamic_no_stacking ? "ON" : "OFF"]. +
Unless the threat goes above [GLOB.dynamic_stacking_limit], only one "round-ender" ruleset will be drafted.
+
+ Classic secret mode: - Option is [GLOB.dynamic_classic_secret ? "ON" : "OFF"]. +
Only one roundstart ruleset will be drafted. Only traitors and minor roles will latespawn.
+
+
+ Forced threat level: Current value : [GLOB.dynamic_forced_threat_level]. +
The value threat is set to if it is higher than -1.
+
+ High population limit: Current value : [GLOB.dynamic_high_pop_limit]. +
The threshold at which "high population override" will be in effect.
+
+ Stacking threeshold: Current value : [GLOB.dynamic_stacking_limit]. +
The threshold at which "round-ender" rulesets will stack. A value higher than 100 ensure this never happens.
+

Advanced parameters

+ Curve centre: -> [GLOB.dynamic_curve_centre] <-
+ Curve width: -> [GLOB.dynamic_curve_width] <-
+ Latejoin injection delay:
+ Minimum: -> [GLOB.dynamic_latejoin_delay_min / 60 / 10] <- Minutes
+ Maximum: -> [GLOB.dynamic_latejoin_delay_max / 60 / 10] <- Minutes
+ Midround injection delay:
+ Minimum: -> [GLOB.dynamic_midround_delay_min / 60 / 10] <- Minutes
+ Maximum: -> [GLOB.dynamic_midround_delay_max / 60 / 10] <- Minutes
+ "} + + user << browse(dat, "window=dyn_mode_options;size=900x650") + /datum/admins/proc/create_or_modify_area() set category = "Debug" set name = "Create or modify area" diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index f66cda42dc..8b6f471e7d 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -34,7 +34,8 @@ H.dna.features["frills"] = pick(GLOB.frills_list) H.dna.features["spines"] = pick(GLOB.spines_list) H.dna.features["body_markings"] = pick(GLOB.body_markings_list) - H.dna.features["moth_wings"] = pick(GLOB.moth_wings_list) + H.dna.features["insect_wings"] = pick(GLOB.insect_wings_list) + H.dna.features["insect_fluff"] = pick(GLOB.insect_fluffs_list) H.update_body() H.update_hair() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index d881044757..91df9ef85c 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -291,6 +291,11 @@ else if(href_list["editrights"]) edit_rights_topic(href_list) + else if(href_list["gamemode_panel"]) + if(!check_rights(R_ADMIN)) + return + SSticker.mode.admin_panel() + else if(href_list["call_shuttle"]) if(!check_rights(R_ADMIN)) return @@ -1342,6 +1347,291 @@ else if(href_list["f_secret"]) return HandleFSecret() + + else if(href_list["f_dynamic_roundstart"]) + if(!check_rights(R_ADMIN)) + return + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode.", null, null, null, null) + var/roundstart_rules = list() + for (var/rule in subtypesof(/datum/dynamic_ruleset/roundstart)) + var/datum/dynamic_ruleset/roundstart/newrule = new rule() + roundstart_rules[newrule.name] = newrule + var/added_rule = input(usr,"What ruleset do you want to force? This will bypass threat level and population restrictions.", "Rigging Roundstart", null) as null|anything in roundstart_rules + if (added_rule) + GLOB.dynamic_forced_roundstart_ruleset += roundstart_rules[added_rule] + log_admin("[key_name(usr)] set [added_rule] to be a forced roundstart ruleset.") + message_admins("[key_name(usr)] set [added_rule] to be a forced roundstart ruleset.", 1) + Game() + + else if(href_list["f_dynamic_roundstart_clear"]) + if(!check_rights(R_ADMIN)) + return + GLOB.dynamic_forced_roundstart_ruleset = list() + Game() + log_admin("[key_name(usr)] cleared the rigged roundstart rulesets. The mode will pick them as normal.") + message_admins("[key_name(usr)] cleared the rigged roundstart rulesets. The mode will pick them as normal.", 1) + + else if(href_list["f_dynamic_roundstart_remove"]) + if(!check_rights(R_ADMIN)) + return + var/datum/dynamic_ruleset/roundstart/rule = locate(href_list["f_dynamic_roundstart_remove"]) + GLOB.dynamic_forced_roundstart_ruleset -= rule + Game() + log_admin("[key_name(usr)] removed [rule] from the forced roundstart rulesets.") + message_admins("[key_name(usr)] removed [rule] from the forced roundstart rulesets.", 1) + + else if(href_list["f_dynamic_latejoin"]) + if(!check_rights(R_ADMIN)) + return + if(!SSticker || !SSticker.mode) + return alert(usr, "The game must start first.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + var/latejoin_rules = list() + for (var/rule in subtypesof(/datum/dynamic_ruleset/latejoin)) + var/datum/dynamic_ruleset/latejoin/newrule = new rule() + latejoin_rules[newrule.name] = newrule + var/added_rule = input(usr,"What ruleset do you want to force upon the next latejoiner? This will bypass threat level and population restrictions.", "Rigging Latejoin", null) as null|anything in latejoin_rules + if (added_rule) + var/datum/game_mode/dynamic/mode = SSticker.mode + mode.forced_latejoin_rule = latejoin_rules[added_rule] + log_admin("[key_name(usr)] set [added_rule] to proc on the next latejoin.") + message_admins("[key_name(usr)] set [added_rule] to proc on the next latejoin.", 1) + Game() + + else if(href_list["f_dynamic_latejoin_clear"]) + if(!check_rights(R_ADMIN)) + return + if (SSticker && SSticker.mode && istype(SSticker.mode,/datum/game_mode/dynamic)) + var/datum/game_mode/dynamic/mode = SSticker.mode + mode.forced_latejoin_rule = null + Game() + log_admin("[key_name(usr)] cleared the forced latejoin ruleset.") + message_admins("[key_name(usr)] cleared the forced latejoin ruleset.", 1) + + else if(href_list["f_dynamic_midround"]) + if(!check_rights(R_ADMIN)) + return + if(!SSticker || !SSticker.mode) + return alert(usr, "The game must start first.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + var/midround_rules = list() + for (var/rule in subtypesof(/datum/dynamic_ruleset/midround)) + var/datum/dynamic_ruleset/midround/newrule = new rule() + midround_rules[newrule.name] = rule + var/added_rule = input(usr,"What ruleset do you want to force right now? This will bypass threat level and population restrictions.", "Execute Ruleset", null) as null|anything in midround_rules + if (added_rule) + var/datum/game_mode/dynamic/mode = SSticker.mode + log_admin("[key_name(usr)] executed the [added_rule] ruleset.") + message_admins("[key_name(usr)] executed the [added_rule] ruleset.", 1) + mode.picking_specific_rule(midround_rules[added_rule],1) + + else if (href_list["f_dynamic_options"]) + if(!check_rights(R_ADMIN)) + return + + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_roundstart_centre"]) + if(!check_rights(R_ADMIN)) + return + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + + var/new_centre = input(usr,"Change the centre of the dynamic mode threat curve. A negative value will give a more peaceful round ; a positive value, a round with higher threat. Any number between -5 and +5 is allowed.", "Change curve centre", null) as num + if (new_centre < -5 || new_centre > 5) + return alert(usr, "Only values between -5 and +5 are allowed.", null, null, null, null) + + log_admin("[key_name(usr)] changed the distribution curve center to [new_centre].") + message_admins("[key_name(usr)] changed the distribution curve center to [new_centre]", 1) + GLOB.dynamic_curve_centre = new_centre + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_roundstart_width"]) + if(!check_rights(R_ADMIN)) + return + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + + var/new_width = input(usr,"Change the width of the dynamic mode threat curve. A higher value will favour extreme rounds ; a lower value, a round closer to the average. Any Number between 0.5 and 4 are allowed.", "Change curve width", null) as num + if (new_width < 0.5 || new_width > 4) + return alert(usr, "Only values between 0.5 and +2.5 are allowed.", null, null, null, null) + + log_admin("[key_name(usr)] changed the distribution curve width to [new_width].") + message_admins("[key_name(usr)] changed the distribution curve width to [new_width]", 1) + GLOB.dynamic_curve_width = new_width + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_roundstart_latejoin_min"]) + if(!check_rights(R_ADMIN)) + return + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + var/new_min = input(usr,"Change the minimum delay of latejoin injection in minutes.", "Change latejoin injection delay minimum", null) as num + if(new_min <= 0) + return alert(usr, "The minimum can't be zero or lower.", null, null, null, null) + if((new_min MINUTES) > GLOB.dynamic_latejoin_delay_max) + return alert(usr, "The minimum must be lower than the maximum.", null, null, null, null) + + log_admin("[key_name(usr)] changed the latejoin injection minimum delay to [new_min] minutes.") + message_admins("[key_name(usr)] changed the latejoin injection minimum delay to [new_min] minutes", 1) + GLOB.dynamic_latejoin_delay_min = (new_min MINUTES) + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_roundstart_latejoin_max"]) + if(!check_rights(R_ADMIN)) + return + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + var/new_max = input(usr,"Change the maximum delay of latejoin injection in minutes.", "Change latejoin injection delay maximum", null) as num + if(new_max <= 0) + return alert(usr, "The maximum can't be zero or lower.", null, null, null, null) + if((new_max MINUTES) < GLOB.dynamic_latejoin_delay_min) + return alert(usr, "The maximum must be higher than the minimum.", null, null, null, null) + + log_admin("[key_name(usr)] changed the latejoin injection maximum delay to [new_max] minutes.") + message_admins("[key_name(usr)] changed the latejoin injection maximum delay to [new_max] minutes", 1) + GLOB.dynamic_latejoin_delay_max = (new_max MINUTES) + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_roundstart_midround_min"]) + if(!check_rights(R_ADMIN)) + return + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + var/new_min = input(usr,"Change the minimum delay of midround injection in minutes.", "Change midround injection delay minimum", null) as num + if(new_min <= 0) + return alert(usr, "The minimum can't be zero or lower.", null, null, null, null) + if((new_min MINUTES) > GLOB.dynamic_midround_delay_max) + return alert(usr, "The minimum must be lower than the maximum.", null, null, null, null) + + log_admin("[key_name(usr)] changed the midround injection minimum delay to [new_min] minutes.") + message_admins("[key_name(usr)] changed the midround injection minimum delay to [new_min] minutes", 1) + GLOB.dynamic_midround_delay_min = (new_min MINUTES) + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_roundstart_midround_max"]) + if(!check_rights(R_ADMIN)) + return + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + var/new_max = input(usr,"Change the maximum delay of midround injection in minutes.", "Change midround injection delay maximum", null) as num + if(new_max <= 0) + return alert(usr, "The maximum can't be zero or lower.", null, null, null, null) + if((new_max MINUTES) > GLOB.dynamic_midround_delay_max) + return alert(usr, "The maximum must be higher than the minimum.", null, null, null, null) + + log_admin("[key_name(usr)] changed the midround injection maximum delay to [new_max] minutes.") + message_admins("[key_name(usr)] changed the midround injection maximum delay to [new_max] minutes", 1) + GLOB.dynamic_midround_delay_max = (new_max MINUTES) + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_force_extended"]) + if(!check_rights(R_ADMIN)) + return + + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + + GLOB.dynamic_forced_extended = !GLOB.dynamic_forced_extended + log_admin("[key_name(usr)] set 'forced_extended' to [GLOB.dynamic_forced_extended].") + message_admins("[key_name(usr)] set 'forced_extended' to [GLOB.dynamic_forced_extended].") + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_no_stacking"]) + if(!check_rights(R_ADMIN)) + return + + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + + GLOB.dynamic_no_stacking = !GLOB.dynamic_no_stacking + log_admin("[key_name(usr)] set 'no_stacking' to [GLOB.dynamic_no_stacking].") + message_admins("[key_name(usr)] set 'no_stacking' to [GLOB.dynamic_no_stacking].") + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_classic_secret"]) + if(!check_rights(R_ADMIN)) + return + + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + + GLOB.dynamic_classic_secret = !GLOB.dynamic_classic_secret + log_admin("[key_name(usr)] set 'classic_secret' to [GLOB.dynamic_classic_secret].") + message_admins("[key_name(usr)] set 'classic_secret' to [GLOB.dynamic_classic_secret].") + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_stacking_limit"]) + if(!check_rights(R_ADMIN)) + return + + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + + GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num + log_admin("[key_name(usr)] set 'stacking_limit' to [GLOB.dynamic_stacking_limit].") + message_admins("[key_name(usr)] set 'stacking_limit' to [GLOB.dynamic_stacking_limit].") + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_high_pop_limit"]) + if(!check_rights(R_ADMIN)) + return + + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + + var/new_value = input(usr, "Enter the high-pop override threshold for dynamic mode.", "High pop override") as num + if (new_value < 0) + return alert(usr, "Only positive values allowed!", null, null, null, null) + GLOB.dynamic_high_pop_limit = new_value + + log_admin("[key_name(usr)] set 'high_pop_limit' to [GLOB.dynamic_high_pop_limit].") + message_admins("[key_name(usr)] set 'high_pop_limit' to [GLOB.dynamic_high_pop_limit].") + dynamic_mode_options(usr) + + else if(href_list["f_dynamic_forced_threat"]) + if(!check_rights(R_ADMIN)) + return + + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null) + + var/new_value = input(usr, "Enter the forced threat level for dynamic mode.", "Forced threat level") as num + if (new_value > 100) + return alert(usr, "The value must be be under 100.", null, null, null, null) + GLOB.dynamic_forced_threat_level = new_value + + log_admin("[key_name(usr)] set 'forced_threat_level' to [GLOB.dynamic_forced_threat_level].") + message_admins("[key_name(usr)] set 'forced_threat_level' to [GLOB.dynamic_forced_threat_level].") + dynamic_mode_options(usr) else if(href_list["c_mode2"]) if(!check_rights(R_ADMIN|R_SERVER)) diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index 8a3ff2186a..72edb18020 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -167,7 +167,7 @@ /obj/item/organ/heart/gland/pop/activate() to_chat(owner, "You feel unlike yourself.") randomize_human(owner) - var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/moth, /datum/species/fly)) + var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly)) owner.set_species(species) /obj/item/organ/heart/gland/ventcrawling diff --git a/code/modules/antagonists/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm index bdbd38b92d..081b1181dc 100644 --- a/code/modules/antagonists/changeling/powers/strained_muscles.dm +++ b/code/modules/antagonists/changeling/powers/strained_muscles.dm @@ -34,6 +34,7 @@ return TRUE /obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user) + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) while(active) ADD_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles") if(user.stat != CONSCIOUS || user.staminaloss >= 90) @@ -41,6 +42,7 @@ to_chat(user, "Our muscles relax without the energy to strengthen them.") user.Knockdown(40) REMOVE_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles") + changeling.chem_recharge_slowdown -= 0.5 break stacks++ diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 7216b73af6..a54584d6cc 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -75,3 +75,8 @@ var/datum/player_details/player_details //these persist between logins/logouts during the same round. var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen. + + var/client_keysend_amount = 0 + var/next_keysend_reset = 0 + var/next_keysend_trip_reset = 0 + var/keysend_tripped = FALSE \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d487b873b1..f9fc7b9221 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -85,6 +85,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/facial_hair_color = "000" //Facial hair color var/skin_tone = "caucasian1" //Skin color var/eye_color = "000" //Eye color + var/horn_color = "85615a" //Horn color var/datum/species/pref_species = new /datum/species/human() //Mutant race var/list/features = list("mcolor" = "FFF", "tail_lizard" = "Smooth", @@ -96,8 +97,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) "frills" = "None", "spines" = "None", "body_markings" = "None", - "legs" = "Normal Legs", - "moth_wings" = "Plain", + "legs" = "Plantigrade", + "insect_wings" = "Plain", + "insect_fluff" = "None", "mcolor2" = "FFF", "mcolor3" = "FFF", "mam_body_markings" = "Plain", @@ -157,7 +159,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) "womb_fluid" = "femcum", "ipc_screen" = "Sunburst", "ipc_antenna" = "None", - "flavor_text" = "" + "flavor_text" = "", + "meat_type" = "Mammalian" ) var/list/custom_names = list() @@ -172,18 +175,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/list/all_quirks = list() var/list/character_quirks = list() - //Jobs, uses bitflags - var/job_civilian_high = 0 - var/job_civilian_med = 0 - var/job_civilian_low = 0 - - var/job_medsci_high = 0 - var/job_medsci_med = 0 - var/job_medsci_low = 0 - - var/job_engsec_high = 0 - var/job_engsec_med = 0 - var/job_engsec_low = 0 + //Job preferences 2.0 - indexed by job title , no key or value implies never + var/list/job_preferences = list() // Want randomjob if preferences already filled - Donkie var/joblessrole = BERANDOMJOB //defaults to 1 for fewer assistants @@ -241,7 +234,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) return #define APPEARANCE_CATEGORY_COLUMN "" -#define MAX_MUTANT_ROWS 4 +#define MAX_MUTANT_ROWS 5 /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) @@ -351,9 +344,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[TextPreview(features["flavor_text"])]...
" dat += "

Body

" dat += "Gender:[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]
" - dat += "Species:[pref_species.id]
" + dat += "Species:[pref_species.name]
" dat += "Custom Species Name:[custom_species ? custom_species : "None"]
" - dat += "Random Body
" + dat += "Random Body:Randomize!
" dat += "Always Random Body:[be_random_body ? "Yes" : "No"]
" dat += "
Cycle background:[bgstate]
" @@ -448,6 +441,19 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[features["tail_human"]]" + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + + if("meat_type" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Meat Type

" + + dat += "[features["meat_type"]]" + mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) dat += "" @@ -471,6 +477,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Horns

" dat += "[features["horns"]]" + dat += "    Change
" + mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -537,6 +545,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(mutant_category >= MAX_MUTANT_ROWS) dat += "" mutant_category = 0 + if("ears" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -549,6 +558,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(mutant_category >= MAX_MUTANT_ROWS) dat += "" mutant_category = 0 + if("mam_snouts" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -573,14 +583,24 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(mutant_category >= MAX_MUTANT_ROWS) dat += "" mutant_category = 0 - if("moth_wings" in pref_species.default_features) + if("insect_wings" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Moth wings

" + dat += "

Insect wings

" - dat += "[features["moth_wings"]]" + dat += "[features["insect_wings"]]" + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("insect_fluff" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + dat += "

Insect Fluff

" + + dat += "[features["insect_fluff"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) dat += "" @@ -681,13 +701,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Clothing & Equipment

" dat += "Underwear:[underwear]" if(UNDIE_COLORABLE(GLOB.underwear_list[underwear])) - dat += "Underwear Color:[undie_color]" + dat += "Underwear Color:     Change
" dat += "Undershirt:[undershirt]" if(UNDIE_COLORABLE(GLOB.undershirt_list[undershirt])) - dat += "Undershirt Color:[shirt_color]" + dat += "Undershirt Color:     Change
" dat += "Socks:[socks]" if(UNDIE_COLORABLE(GLOB.socks_list[socks])) - dat += "Socks Color:[socks_color]" + dat += "Socks Color:     Change
" dat += "Backpack:[backbag]" dat += "Jumpsuit:
[jumpsuit_style]
" dat += "Uplink Location:[uplink_spawn_loc]" @@ -992,9 +1012,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. var/datum/job/lastJob - var/datum/job/overflow = SSjob.GetJob(SSjob.overflow_role) - - for(var/datum/job/job in SSjob.occupations) + for(var/datum/job/job in sortList(SSjob.occupations, /proc/cmp_job_display_asc)) index += 1 if((index >= limit) || (job.title in splitJobs)) @@ -1011,7 +1029,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/rank = job.title lastJob = job if(jobban_isbanned(user, rank)) - HTML += "[rank] BANNED" + HTML += "[rank] BANNED" continue var/required_playtime_remaining = job.required_playtime_remaining(user.client) if(required_playtime_remaining) @@ -1021,7 +1039,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/available_in_days = job.available_in_days(user.client) HTML += "[rank] \[IN [(available_in_days)] DAYS\]" continue - if((job_civilian_low & overflow.flag) && (rank != SSjob.overflow_role) && !jobban_isbanned(user, SSjob.overflow_role)) + if((job_preferences["[SSjob.overflow_role]"] == JP_LOW) && (rank != SSjob.overflow_role) && !jobban_isbanned(user, SSjob.overflow_role)) HTML += "[rank]" continue if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs @@ -1036,32 +1054,32 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/prefUpperLevel = -1 // level to assign on left click var/prefLowerLevel = -1 // level to assign on right click - if(GetJobDepartment(job, 1) & job.flag) - prefLevelLabel = "High" - prefLevelColor = "slateblue" - prefUpperLevel = 4 - prefLowerLevel = 2 - else if(GetJobDepartment(job, 2) & job.flag) - prefLevelLabel = "Medium" - prefLevelColor = "green" - prefUpperLevel = 1 - prefLowerLevel = 3 - else if(GetJobDepartment(job, 3) & job.flag) - prefLevelLabel = "Low" - prefLevelColor = "orange" - prefUpperLevel = 2 - prefLowerLevel = 4 - else - prefLevelLabel = "NEVER" - prefLevelColor = "red" - prefUpperLevel = 3 - prefLowerLevel = 1 - + switch(job_preferences["[job.title]"]) + if(JP_HIGH) + prefLevelLabel = "High" + prefLevelColor = "slateblue" + prefUpperLevel = 4 + prefLowerLevel = 2 + if(JP_MEDIUM) + prefLevelLabel = "Medium" + prefLevelColor = "green" + prefUpperLevel = 1 + prefLowerLevel = 3 + if(JP_LOW) + prefLevelLabel = "Low" + prefLevelColor = "orange" + prefUpperLevel = 2 + prefLowerLevel = 4 + else + prefLevelLabel = "NEVER" + prefLevelColor = "red" + prefUpperLevel = 3 + prefLowerLevel = 1 HTML += "" if(rank == SSjob.overflow_role)//Overflow is special - if(job_civilian_low & overflow.flag) + if(job_preferences["[SSjob.overflow_role]"] == JP_LOW) HTML += "Yes" else HTML += "No" @@ -1092,61 +1110,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences/proc/SetJobPreferenceLevel(datum/job/job, level) if (!job) - return 0 + return FALSE - if (level == 1) // to high - // remove any other job(s) set to high - job_civilian_med |= job_civilian_high - job_engsec_med |= job_engsec_high - job_medsci_med |= job_medsci_high - job_civilian_high = 0 - job_engsec_high = 0 - job_medsci_high = 0 + if (level == JP_HIGH) // to high + //Set all other high to medium + for(var/j in job_preferences) + if(job_preferences["[j]"] == JP_HIGH) + job_preferences["[j]"] = JP_MEDIUM + //technically break here - if (job.department_flag == CIVILIAN) - job_civilian_low &= ~job.flag - job_civilian_med &= ~job.flag - job_civilian_high &= ~job.flag - - switch(level) - if (1) - job_civilian_high |= job.flag - if (2) - job_civilian_med |= job.flag - if (3) - job_civilian_low |= job.flag - - return 1 - else if (job.department_flag == ENGSEC) - job_engsec_low &= ~job.flag - job_engsec_med &= ~job.flag - job_engsec_high &= ~job.flag - - switch(level) - if (1) - job_engsec_high |= job.flag - if (2) - job_engsec_med |= job.flag - if (3) - job_engsec_low |= job.flag - - return 1 - else if (job.department_flag == MEDSCI) - job_medsci_low &= ~job.flag - job_medsci_med &= ~job.flag - job_medsci_high &= ~job.flag - - switch(level) - if (1) - job_medsci_high |= job.flag - if (2) - job_medsci_med |= job.flag - if (3) - job_medsci_low |= job.flag - - return 1 - - return 0 + job_preferences["[job.title]"] = level + return TRUE /datum/preferences/proc/UpdateJobPreference(mob/user, role, desiredLvl) if(!SSjob || SSjob.occupations.len <= 0) @@ -1163,64 +1137,29 @@ GLOBAL_LIST_EMPTY(preferences_datums) ShowChoices(user) return - if(role == SSjob.overflow_role) - if(job_civilian_low & job.flag) - job_civilian_low &= ~job.flag - else - job_civilian_low |= job.flag - SetChoices(user) - return 1 + var/jpval = null + switch(desiredLvl) + if(3) + jpval = JP_LOW + if(2) + jpval = JP_MEDIUM + if(1) + jpval = JP_HIGH - SetJobPreferenceLevel(job, desiredLvl) + if(role == SSjob.overflow_role) + if(job_preferences["[job.title]"] == JP_LOW) + jpval = null + else + jpval = JP_LOW + + SetJobPreferenceLevel(job, jpval) SetChoices(user) return 1 /datum/preferences/proc/ResetJobs() - - job_civilian_high = 0 - job_civilian_med = 0 - job_civilian_low = 0 - - job_medsci_high = 0 - job_medsci_med = 0 - job_medsci_low = 0 - - job_engsec_high = 0 - job_engsec_med = 0 - job_engsec_low = 0 - - -/datum/preferences/proc/GetJobDepartment(datum/job/job, level) - if(!job || !level) - return 0 - switch(job.department_flag) - if(CIVILIAN) - switch(level) - if(1) - return job_civilian_high - if(2) - return job_civilian_med - if(3) - return job_civilian_low - if(MEDSCI) - switch(level) - if(1) - return job_medsci_high - if(2) - return job_medsci_med - if(3) - return job_medsci_low - if(ENGSEC) - switch(level) - if(1) - return job_engsec_high - if(2) - return job_engsec_med - if(3) - return job_engsec_low - return 0 + job_preferences = list() /datum/preferences/proc/SetQuirks(mob/user) if(!SSquirks) @@ -1562,9 +1501,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) eye_color = sanitize_hexcolor(new_eyes) if("species") - var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_races + var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_race_names if(result) - var/newtype = GLOB.species_list[result] + var/newtype = GLOB.species_list[GLOB.roundstart_race_names[result]] pref_species = new newtype() //let's ensure that no weird shit happens on species swapping. custom_species = null @@ -1692,6 +1631,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["tail_human"] = "None" features["tail_lizard"] = "None" + if("meats") + var/new_meat + new_meat = input(user, "Choose your character's meat type:", "Character Preference") as null|anything in GLOB.meat_types + if(new_meat) + features["meat_type"] = new_meat + if("snout") var/list/snowflake_snouts_list = list() for(var/path in GLOB.snouts_list) @@ -1727,6 +1672,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_horns) features["horns"] = new_horns + if("horns_color") + var/new_horn_color = input(user, "Choose your character's horn colour:", "Character Preference","#"+horn_color) as color|null + if(new_horn_color) + horn_color = sanitize_hexcolor(new_horn_color) + if("wings") var/new_wings new_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.r_wings_list @@ -1761,11 +1711,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["legs"] = new_legs update_preview_icon() - if("moth_wings") - var/new_moth_wings - new_moth_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.moth_wings_list - if(new_moth_wings) - features["moth_wings"] = new_moth_wings + if("insect_wings") + var/new_insect_wings + new_insect_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.insect_wings_list + if(new_insect_wings) + features["insect_wings"] = new_insect_wings + + if("insect_fluffs") + var/new_insect_fluff + new_insect_fluff = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.insect_fluffs_list + if(new_insect_fluff) + features["insect_fluff"] = new_insect_fluff if("s_tone") var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in GLOB.skin_tones @@ -2285,6 +2241,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) organ_eyes.old_eye_color = eye_color character.hair_color = hair_color character.facial_hair_color = facial_hair_color + character.horn_color = horn_color character.skin_tone = skin_tone character.hair_style = hair_style @@ -2325,7 +2282,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("xenotail" in pref_species.default_features) character.dna.species.mutant_bodyparts |= "xenotail" - if(("legs" in character.dna.species.mutant_bodyparts) && character.dna.features["legs"] == "Digitigrade Legs") + if("meat_type" in pref_species.default_features) + character.type_of_meat = GLOB.meat_types[features["meat_type"]] + + if(("legs" in character.dna.species.mutant_bodyparts) && (character.dna.features["legs"] == "Digitigrade" || character.dna.features["legs"] == "Avian")) pref_species.species_traits |= DIGITIGRADE else pref_species.species_traits -= DIGITIGRADE diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 7911d92495..84db999325 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 20 +#define SAVEFILE_VERSION_MAX 23 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -49,6 +49,65 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car pda_style = "mono" if(current_version < 20) pda_color = "#808000" + if((current_version < 21) && features["meat_type"] && (features["meat_type"] == null)) + features["meat_type"] = "Mammalian" + if(current_version < 22) + + job_preferences = list() //It loaded null from nonexistant savefile field. + + var/job_civilian_high = 0 + var/job_civilian_med = 0 + var/job_civilian_low = 0 + + var/job_medsci_high = 0 + var/job_medsci_med = 0 + var/job_medsci_low = 0 + + var/job_engsec_high = 0 + var/job_engsec_med = 0 + var/job_engsec_low = 0 + + S["job_civilian_high"] >> job_civilian_high + S["job_civilian_med"] >> job_civilian_med + S["job_civilian_low"] >> job_civilian_low + S["job_medsci_high"] >> job_medsci_high + S["job_medsci_med"] >> job_medsci_med + S["job_medsci_low"] >> job_medsci_low + S["job_engsec_high"] >> job_engsec_high + S["job_engsec_med"] >> job_engsec_med + S["job_engsec_low"] >> job_engsec_low + + //Can't use SSjob here since this happens right away on login + for(var/job in subtypesof(/datum/job)) + var/datum/job/J = job + var/new_value + var/fval = initial(J.flag) + switch(initial(J.department_flag)) + if(CIVILIAN) + if(job_civilian_high & fval) + new_value = JP_HIGH + else if(job_civilian_med & fval) + new_value = JP_MEDIUM + else if(job_civilian_low & fval) + new_value = JP_LOW + if(MEDSCI) + if(job_medsci_high & fval) + new_value = JP_HIGH + else if(job_medsci_med & fval) + new_value = JP_MEDIUM + else if(job_medsci_low & fval) + new_value = JP_LOW + if(ENGSEC) + if(job_engsec_high & fval) + new_value = JP_HIGH + else if(job_engsec_med & fval) + new_value = JP_MEDIUM + else if(job_engsec_low & fval) + new_value = JP_LOW + if(new_value) + job_preferences["[initial(J.title)]"] = new_value + else if(current_version < 23) // we are fixing a gamebreaking bug. + job_preferences = list() //It loaded null from nonexistant savefile field. /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) @@ -246,6 +305,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/species_id S["species"] >> species_id if(species_id) + if(species_id == "avian" || species_id == "aquatic") + species_id = "mammal" + else if(species_id == "moth") + species_id = "insect" + var/newtype = GLOB.species_list[species_id] if(newtype) pref_species = new newtype @@ -254,28 +318,29 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["features["mcolor"]"] , "#FFF") //Character - S["real_name"] >> real_name - S["nameless"] >> nameless - S["custom_species"] >> custom_species - S["name_is_always_random"] >> be_random_name - S["body_is_always_random"] >> be_random_body - S["gender"] >> gender - S["age"] >> age - S["hair_color"] >> hair_color - S["facial_hair_color"] >> facial_hair_color - S["eye_color"] >> eye_color - S["skin_tone"] >> skin_tone - S["hair_style_name"] >> hair_style - S["facial_style_name"] >> facial_hair_style - S["underwear"] >> underwear - S["undie_color"] >> undie_color - S["undershirt"] >> undershirt - S["shirt_color"] >> shirt_color - S["socks"] >> socks - S["socks_color"] >> socks_color - S["backbag"] >> backbag - S["jumpsuit_style"] >> jumpsuit_style - S["uplink_loc"] >> uplink_spawn_loc + S["real_name"] >> real_name + S["nameless"] >> nameless + S["custom_species"] >> custom_species + S["name_is_always_random"] >> be_random_name + S["body_is_always_random"] >> be_random_body + S["gender"] >> gender + S["age"] >> age + S["hair_color"] >> hair_color + S["facial_hair_color"] >> facial_hair_color + S["eye_color"] >> eye_color + S["skin_tone"] >> skin_tone + S["hair_style_name"] >> hair_style + S["facial_style_name"] >> facial_hair_style + S["underwear"] >> underwear + S["undie_color"] >> undie_color + S["undershirt"] >> undershirt + S["shirt_color"] >> shirt_color + S["socks"] >> socks + S["socks_color"] >> socks_color + S["horn_color"] >> horn_color + S["backbag"] >> backbag + S["jumpsuit_style"] >> jumpsuit_style + S["uplink_loc"] >> uplink_spawn_loc S["feature_mcolor"] >> features["mcolor"] S["feature_lizard_tail"] >> features["tail_lizard"] S["feature_lizard_snout"] >> features["snout"] @@ -284,29 +349,23 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_lizard_spines"] >> features["spines"] S["feature_lizard_body_markings"] >> features["body_markings"] S["feature_lizard_legs"] >> features["legs"] - S["feature_moth_wings"] >> features["moth_wings"] S["feature_human_tail"] >> features["tail_human"] S["feature_human_ears"] >> features["ears"] + S["feature_insect_wings"] >> features["insect_wings"] + S["feature_insect_fluff"] >> features["insect_fluff"] //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) var/savefile_slot_name = custom_name_id + "_name" //TODO remove this S[savefile_slot_name] >> custom_names[custom_name_id] - S["preferred_ai_core_display"] >> preferred_ai_core_display - S["prefered_security_department"] >> prefered_security_department + S["preferred_ai_core_display"] >> preferred_ai_core_display + S["prefered_security_department"] >> prefered_security_department //Jobs S["joblessrole"] >> joblessrole - S["job_civilian_high"] >> job_civilian_high - S["job_civilian_med"] >> job_civilian_med - S["job_civilian_low"] >> job_civilian_low - S["job_medsci_high"] >> job_medsci_high - S["job_medsci_med"] >> job_medsci_med - S["job_medsci_low"] >> job_medsci_low - S["job_engsec_high"] >> job_engsec_high - S["job_engsec_med"] >> job_engsec_med - S["job_engsec_low"] >> job_engsec_low + //Load prefs + S["job_preferences"] >> job_preferences //Quirks S["all_quirks"] >> all_quirks @@ -325,6 +384,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_mam_tail_animated"] >> features["mam_tail_animated"] S["feature_taur"] >> features["taur"] S["feature_mam_snouts"] >> features["mam_snouts"] + S["feature_meat"] >> features["meat_type"] //Xeno features S["feature_xeno_tail"] >> features["xenotail"] S["feature_xeno_dors"] >> features["xenodorsal"] @@ -374,11 +434,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Sanitize - real_name = reject_bad_name(real_name) - gender = sanitize_gender(gender, TRUE, TRUE) + real_name = reject_bad_name(real_name) + gender = sanitize_gender(gender, TRUE, TRUE) if(!real_name) - real_name = random_unique_name(gender) - custom_species = reject_bad_name(custom_species) + real_name = random_unique_name(gender) + custom_species = reject_bad_name(custom_species) for(var/custom_name_id in GLOB.preferences_custom_names) var/namedata = GLOB.preferences_custom_names[custom_name_id] custom_names[custom_name_id] = reject_bad_name(custom_names[custom_name_id],namedata["allow_numbers"]) @@ -388,57 +448,55 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(!features["mcolor"] || features["mcolor"] == "#000") features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F") - nameless = sanitize_integer(nameless, 0, 1, initial(nameless)) + nameless = sanitize_integer(nameless, 0, 1, initial(nameless)) be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body)) if(gender == MALE) - hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list) + hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list) facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_male_list) else - hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list) + hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list) facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list) - underwear = sanitize_inlist(underwear, GLOB.underwear_list) - undie_color = sanitize_hexcolor(undie_color, 6, 1, initial(undie_color)) - undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list) - shirt_color = sanitize_hexcolor(shirt_color, 6, 1, initial(shirt_color)) - socks = sanitize_inlist(socks, GLOB.socks_list) - socks_color = sanitize_hexcolor(socks_color, 6, 1, initial(socks_color)) - age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) - hair_color = sanitize_hexcolor(hair_color, 3, 0) - facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0) - eye_color = sanitize_hexcolor(eye_color, 3, 0) - skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones) - backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag)) - jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style)) - uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) - features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0) - features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) - features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human) - features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list) - features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list) - features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list) - features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) - features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) - features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) + underwear = sanitize_inlist(underwear, GLOB.underwear_list) + undie_color = sanitize_hexcolor(undie_color, 3, FALSE, initial(undie_color)) + undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list) + shirt_color = sanitize_hexcolor(shirt_color, 6, FALSE, initial(shirt_color)) + socks = sanitize_inlist(socks, GLOB.socks_list) + socks_color = sanitize_hexcolor(socks_color, 6, FALSE, initial(socks_color)) + age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) + hair_color = sanitize_hexcolor(hair_color, 3, 0) + facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0) + eye_color = sanitize_hexcolor(eye_color, 3, 0) + skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones) + horn_color = sanitize_hexcolor(horn_color, 3, FALSE) + backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag)) + jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style)) + uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) + features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0) + features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) + features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human) + features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list) + features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list) + features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list) + features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) + features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) + features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list) - features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list) + features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list) + features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list) joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) - job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high)) - job_civilian_med = sanitize_integer(job_civilian_med, 0, 65535, initial(job_civilian_med)) - job_civilian_low = sanitize_integer(job_civilian_low, 0, 65535, initial(job_civilian_low)) - job_medsci_high = sanitize_integer(job_medsci_high, 0, 65535, initial(job_medsci_high)) - job_medsci_med = sanitize_integer(job_medsci_med, 0, 65535, initial(job_medsci_med)) - job_medsci_low = sanitize_integer(job_medsci_low, 0, 65535, initial(job_medsci_low)) - job_engsec_high = sanitize_integer(job_engsec_high, 0, 65535, initial(job_engsec_high)) - job_engsec_med = sanitize_integer(job_engsec_med, 0, 65535, initial(job_engsec_med)) - job_engsec_low = sanitize_integer(job_engsec_low, 0, 65535, initial(job_engsec_low)) + //Validate job prefs + for(var/j in job_preferences) + if(job_preferences["[j]"] != JP_LOW && job_preferences["[j]"] != JP_MEDIUM && job_preferences["[j]"] != JP_HIGH) + job_preferences -= j all_quirks = SANITIZE_LIST(all_quirks) + positive_quirks = SANITIZE_LIST(positive_quirks) negative_quirks = SANITIZE_LIST(negative_quirks) - neutral_quirks = SANITIZE_LIST(neutral_quirks) + neutral_quirks = SANITIZE_LIST(neutral_quirks) cit_character_pref_load(S) @@ -460,31 +518,32 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.) //Character - WRITE_FILE(S["real_name"] , real_name) - WRITE_FILE(S["nameless"] , nameless) - WRITE_FILE(S["custom_species"] , custom_species) - WRITE_FILE(S["name_is_always_random"] , be_random_name) - WRITE_FILE(S["body_is_always_random"] , be_random_body) - WRITE_FILE(S["gender"] , gender) - WRITE_FILE(S["age"] , age) - WRITE_FILE(S["hair_color"] , hair_color) - WRITE_FILE(S["facial_hair_color"] , facial_hair_color) - WRITE_FILE(S["eye_color"] , eye_color) - WRITE_FILE(S["skin_tone"] , skin_tone) - WRITE_FILE(S["hair_style_name"] , hair_style) - WRITE_FILE(S["facial_style_name"] , facial_hair_style) - WRITE_FILE(S["underwear"] , underwear) - WRITE_FILE(S["undie_color"] , undie_color) - WRITE_FILE(S["undershirt"] , undershirt) - WRITE_FILE(S["shirt_color"] , shirt_color) - WRITE_FILE(S["socks"] , socks) - WRITE_FILE(S["socks_color"] , socks_color) - WRITE_FILE(S["backbag"] , backbag) - WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style) - WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc) - WRITE_FILE(S["species"] , pref_species.id) + WRITE_FILE(S["real_name"] , real_name) + WRITE_FILE(S["nameless"] , nameless) + WRITE_FILE(S["custom_species"] , custom_species) + WRITE_FILE(S["name_is_always_random"] , be_random_name) + WRITE_FILE(S["body_is_always_random"] , be_random_body) + WRITE_FILE(S["gender"] , gender) + WRITE_FILE(S["age"] , age) + WRITE_FILE(S["hair_color"] , hair_color) + WRITE_FILE(S["facial_hair_color"] , facial_hair_color) + WRITE_FILE(S["eye_color"] , eye_color) + WRITE_FILE(S["skin_tone"] , skin_tone) + WRITE_FILE(S["hair_style_name"] , hair_style) + WRITE_FILE(S["facial_style_name"] , facial_hair_style) + WRITE_FILE(S["underwear"] , underwear) + WRITE_FILE(S["undie_color"] , undie_color) + WRITE_FILE(S["undershirt"] , undershirt) + WRITE_FILE(S["shirt_color"] , shirt_color) + WRITE_FILE(S["socks"] , socks) + WRITE_FILE(S["socks_color"] , socks_color) + WRITE_FILE(S["horn_color"] , horn_color) + WRITE_FILE(S["backbag"] , backbag) + WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style) + WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc) + WRITE_FILE(S["species"] , pref_species.id) WRITE_FILE(S["feature_mcolor"] , features["mcolor"]) - WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"]) + WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"]) WRITE_FILE(S["feature_human_tail"] , features["tail_human"]) WRITE_FILE(S["feature_lizard_snout"] , features["snout"]) WRITE_FILE(S["feature_lizard_horns"] , features["horns"]) @@ -492,28 +551,23 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_lizard_frills"] , features["frills"]) WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) - WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) - WRITE_FILE(S["feature_moth_wings"] , features["moth_wings"]) + WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) + WRITE_FILE(S["feature_insect_wings"] , features["insect_wings"]) + WRITE_FILE(S["feature_insect_fluff"] , features["insect_fluff"]) + WRITE_FILE(S["feature_meat"] , features["meat_type"]) //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) var/savefile_slot_name = custom_name_id + "_name" //TODO remove this WRITE_FILE(S[savefile_slot_name],custom_names[custom_name_id]) - WRITE_FILE(S["preferred_ai_core_display"] , preferred_ai_core_display) - WRITE_FILE(S["prefered_security_department"] , prefered_security_department) + WRITE_FILE(S["preferred_ai_core_display"] , preferred_ai_core_display) + WRITE_FILE(S["prefered_security_department"] , prefered_security_department) //Jobs WRITE_FILE(S["joblessrole"] , joblessrole) - WRITE_FILE(S["job_civilian_high"] , job_civilian_high) - WRITE_FILE(S["job_civilian_med"] , job_civilian_med) - WRITE_FILE(S["job_civilian_low"] , job_civilian_low) - WRITE_FILE(S["job_medsci_high"] , job_medsci_high) - WRITE_FILE(S["job_medsci_med"] , job_medsci_med) - WRITE_FILE(S["job_medsci_low"] , job_medsci_low) - WRITE_FILE(S["job_engsec_high"] , job_engsec_high) - WRITE_FILE(S["job_engsec_med"] , job_engsec_med) - WRITE_FILE(S["job_engsec_low"] , job_engsec_low) + //Write prefs + WRITE_FILE(S["job_preferences"] , job_preferences) //Quirks WRITE_FILE(S["all_quirks"] , all_quirks) diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 3c3c8f0e9d..36965afd07 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -23,30 +23,48 @@ allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) //Chaplain -/obj/item/clothing/suit/nun +/obj/item/clothing/suit/chaplain + name = "chaplain suit" + desc = "A piece of clothing adorned by the gods of Coding. Should never exist in this mortal realm." + allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + +/obj/item/clothing/suit/chaplain/nun name = "nun robe" desc = "Maximum piety in this star system." icon_state = "nun" item_state = "nun" body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS flags_inv = HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) -/obj/item/clothing/suit/studentuni +/obj/item/clothing/suit/chaplain/studentuni name = "student robe" desc = "The uniform of a bygone institute of learning." icon_state = "studentuni" item_state = "studentuni" body_parts_covered = ARMS|CHEST - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) -/obj/item/clothing/suit/witchhunter +/obj/item/clothing/suit/chaplain/witchhunter name = "witchunter garb" desc = "This worn outfit saw much use back in the day." icon_state = "witchhunter" item_state = "witchhunter" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + +/obj/item/clothing/suit/chaplain/pharaoh + name = "pharaoh tunic" + desc = "Lavish space tomb not included." + icon_state = "pharaoh" + icon_state = "pharaoh" + body_parts_covered = CHEST|GROIN + +/obj/item/clothing/suit/chaplain/holidaypriest + name = "holiday priest" + desc = "This is a nice holiday, my son." + icon_state = "holidaypriest" + item_state = "w_suit" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + flags_inv = HIDEJUMPSUIT + //Chef /obj/item/clothing/suit/toggle/chef diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 8a3dbbf274..ddffe5fe6e 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -167,16 +167,6 @@ icon_state = "griffin_wings" item_state = "griffin_wings" - -/obj/item/clothing/suit/holidaypriest - name = "holiday priest" - desc = "This is a nice holiday, my son." - icon_state = "holidaypriest" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - /obj/item/clothing/suit/cardborg name = "cardborg suit" desc = "An ordinary cardboard box with holes cut in the sides." @@ -468,13 +458,6 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT allowed = list(/obj/item/clothing/mask/facehugger/toy) -/obj/item/clothing/suit/pharaoh - name = "pharaoh tunic" - desc = "Lavish space tomb not included." - icon_state = "pharaoh" - icon_state = "pharaoh" - body_parts_covered = CHEST|GROIN - // WINTER COATS diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 6535e40d0d..878030bc5d 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -1,4 +1,4 @@ -/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals and armbands, this accessory system is being kept as-is +/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals, pokadots, and armbands, this accessory system is being kept as-is name = "Accessory" desc = "Something has gone wrong!" icon = 'icons/obj/clothing/accessories.dmi' @@ -368,7 +368,7 @@ /obj/item/clothing/accessory/kevlar name = "kevlar sheets" - desc = "Long thin sheets of kevlar to help resist bullets and some physical attacks.." + desc = "Long thin sheets of kevlar to help resist bullets and some physical attacks." icon_state = "padding" item_color = "nothing" armor = list("melee" = 10, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 25) @@ -379,3 +379,35 @@ icon_state = "plastics" item_color = "nothing" armor = list("melee" = 0, "bullet" = 0, "laser" = 20, "energy" = 10, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = -40) + +///////////////////// +//Pokadots On Pants// +///////////////////// + +/obj/item/clothing/accessory/attrocious_pokadots + name = "atrocious pokadots" + desc = "They look like something out of a thrift store. Attaches to clothing not to be worn by itself." + icon_state = "attrocious_pokadots" + item_color = "attrocious_pokadots" + attack_verb = list("horrifed", "eye bleeded") + +/obj/item/clothing/accessory/black_white_pokadots + name = "checkered pokadots" + desc = "You can play a game of chess on these! Attaches to clothing not to be worn by itself." + icon_state = "black_white_pokadots" + item_color = "black_white_pokadots" + attack_verb = list("check", "mate") + +/obj/item/clothing/accessory/nt_pokadots + name = "blue and white pokadots" + desc = "To show your pride in your workplace, in the most annoying possable way. Attaches to clothing not to be worn by itself." + icon_state = "nt_pokadots" + item_color = "nt_pokadots" + attack_verb = list("eye bleeded", "annoyed") + +/obj/item/clothing/accessory/syndi_pokadots + name = "black and red pokadots" + desc = "King me. Attaches to clothing not to be worn by itself." //checkers! + icon_state = "syndi_pokadots" + item_color = "syndi_pokadots" + attack_verb = list("jumped", "taken") \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm index 1a82d1b406..ee169e9861 100644 --- a/code/modules/food_and_drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -108,7 +108,7 @@ tastes = list("maggots" = 1, "the inside of a reactor" = 1) foodtype = MEAT | RAW | GROSS -/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect icon_state = "mothmeat" desc = "Unpleasantly powdery and dry. Kind of pretty, though." filling_color = "#BF896B" diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 81887dc96b..8d63d68878 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -822,6 +822,12 @@ id = "red_queen" results = list("red_queen" = 10) required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1) + +/datum/chemical_reaction/catnip_tea + name = "Catnip Tea" + id = "catnip_tea" + results = list("catnip_tea" = 3) + required_reagents = list("tea" = 5, "catnip" = 2) /datum/chemical_reaction/commander_and_chief name = "Commander and Chief" @@ -829,4 +835,3 @@ results = list("commander_and_chief" = 50) required_reagents = list("alliescocktail" = 50, "champagne" = 20, "doctorsdelight" = 10, "quintuple_sec" = 10, "screwdrivercocktail" = 10) mix_message = "When your powers combine, I am Captain Pl-..." - diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 931a78212f..365cf499bb 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -23,7 +23,7 @@ result = /obj/item/reagent_containers/food/snacks/donut subcategory = CAT_PASTRY -/datum/crafting_recipe/food/donut +/datum/crafting_recipe/food/donut/semen time = 15 name = "Semen donut" reqs = list( diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm index d9e775acc0..06cbb1df0c 100644 --- a/code/modules/hydroponics/grown/tea_coffee.dm +++ b/code/modules/hydroponics/grown/tea_coffee.dm @@ -33,7 +33,7 @@ species = "teaastra" plantname = "Tea Astra Plant" product = /obj/item/reagent_containers/food/snacks/grown/tea/astra - mutatelist = list() + mutatelist = list(/obj/item/seeds/tea/catnip) reagents_add = list("synaptizine" = 0.1, "vitamin" = 0.04, "teapowder" = 0.1) rarity = 20 @@ -44,6 +44,24 @@ filling_color = "#4582B4" grind_results = list("teapowder" = 0, "salglu_solution" = 0) +// Kitty drugs +/obj/item/seeds/tea/catnip + name = "pack of catnip seeds" + icon_state = "seed-catnip" + desc = "Long stocks with flowering tips that has a chemical to make feline attracted to it." + species = "catnip" + plantname = "Catnip Plant" + growthstages = 3 + product = /obj/item/reagent_containers/food/snacks/grown/tea/catnip + reagents_add = list("catnip" = 0.1, "vitamin" = 0.06, "teapowder" = 0.3) + rarity = 50 + +/obj/item/reagent_containers/food/snacks/grown/tea/catnip + seed = /obj/item/seeds/tea/catnip + name = "Catnip buds" + icon_state = "catnip_leaves" + filling_color = "#4582B4" + grind_results = list("catnp" = 2, "water" = 1) // Coffee /obj/item/seeds/coffee diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm index 4b7b175240..f99bf65071 100644 --- a/code/modules/jobs/job_exp.dm +++ b/code/modules/jobs/job_exp.dm @@ -8,6 +8,8 @@ GLOBAL_PROTECT(exp_to_update) return 0 if(!CONFIG_GET(flag/use_exp_tracking)) return 0 + if(!SSdbcore.Connect()) + return 0 if(!exp_requirements || !exp_type) return 0 if(!job_is_xp_locked(src.title)) diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/_job.dm similarity index 88% rename from code/modules/jobs/job_types/job.dm rename to code/modules/jobs/job_types/_job.dm index 9549b6100c..2eeffa8b7a 100644 --- a/code/modules/jobs/job_types/job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -1,240 +1,245 @@ -/datum/job - //The name of the job - var/title = "NOPE" - - //Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access - var/list/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population) - var/list/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!) - - //Determines who can demote this position - var/department_head = list() - - //Tells the given channels that the given mob is the new department head. See communications.dm for valid channels. - var/list/head_announce = null - - //Bitflags for the job - var/flag = 0 - var/department_flag = 0 - - //Players will be allowed to spawn in as jobs that are set to "Station" - var/faction = "None" - - //How many players can be this job - var/total_positions = 0 - - //How many players can spawn in as this job - var/spawn_positions = 0 - - //How many players have this job - var/current_positions = 0 - - //Supervisors, who this person answers to directly - var/supervisors = "" - - //Sellection screen color - var/selection_color = "#ffffff" - - - //If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect. - var/req_admin_notify - - var/custom_spawn_text - - //If you have the use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) - var/minimal_player_age = 0 - - var/outfit = null - - var/exp_requirements = 0 - - var/exp_type = "" - var/exp_type_department = "" - - //The amount of good boy points playing this role will earn you towards a higher chance to roll antagonist next round - //can be overridden by antag_rep.txt config - var/antag_rep = 10 - - var/list/mind_traits // Traits added to the mind of the mob assigned this job - - var/list/blacklisted_quirks //list of quirk typepaths blacklisted. - -//Only override this proc -//H is usually a human unless an /equip override transformed it -/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE) - //do actions on H but send messages to M as the key may not have been transferred_yet - if(mind_traits) - for(var/t in mind_traits) - ADD_TRAIT(H.mind, t, JOB_TRAIT) - -/datum/job/proc/announce(mob/living/carbon/human/H) - if(head_announce) - announce_head(H, head_announce) - -/datum/job/proc/override_latejoin_spawn(mob/living/carbon/human/H) //Return TRUE to force latejoining to not automatically place the person in latejoin shuttle/whatever. - return FALSE - -//Used for a special check of whether to allow a client to latejoin as this job. -/datum/job/proc/special_check_latejoin(client/C) - return TRUE - -/datum/job/proc/GetAntagRep() - . = CONFIG_GET(keyed_list/antag_rep)[lowertext(title)] - if(. == null) - return antag_rep - -//Don't override this unless the job transforms into a non-human (Silicons do this for example) -/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, datum/outfit/outfit_override = null) - if(!H) - return FALSE - - if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions)) - if(H.dna.species.id != "human") - H.set_species(/datum/species/human) - H.apply_pref_name("human", H.client) - - //Equip the rest of the gear - H.dna.species.before_equip_job(src, H, visualsOnly) - - if(outfit_override || outfit) - H.equipOutfit(outfit_override ? outfit_override : outfit, visualsOnly) - - H.dna.species.after_equip_job(src, H, visualsOnly) - - if(!visualsOnly && announce) - announce(H) - -/datum/job/proc/get_access() - if(!config) //Needed for robots. - return src.minimal_access.Copy() - - . = list() - - if(CONFIG_GET(flag/jobs_have_minimal_access)) - . = src.minimal_access.Copy() - else - . = src.access.Copy() - - if(CONFIG_GET(flag/everyone_has_maint_access)) //Config has global maint access set - . |= list(ACCESS_MAINT_TUNNELS) - -/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. - if(H && GLOB.announcement_systems.len) - //timer because these should come after the captain announcement - SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/addtimer, CALLBACK(pick(GLOB.announcement_systems), /obj/machinery/announcement_system/proc/announce, "NEWHEAD", H.real_name, H.job, channels), 1)) - -//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 -/datum/job/proc/player_old_enough(client/C) - if(available_in_days(C) == 0) - return TRUE //Available in 0 days = available right now = player is old enough to play. - return FALSE - - -/datum/job/proc/available_in_days(client/C) - if(!C) - return 0 - if(!CONFIG_GET(flag/use_age_restriction_for_jobs)) - return 0 - if(C.prefs.db_flags & DB_FLAG_EXEMPT) - return 0 - if(!isnum(C.player_age)) - return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced - if(!isnum(minimal_player_age)) - return 0 - - return max(0, minimal_player_age - C.player_age) - -/datum/job/proc/config_check() - return TRUE - -/datum/job/proc/map_check() - return TRUE - - -/datum/outfit/job - name = "Standard Gear" - - var/jobtype = null - - uniform = /obj/item/clothing/under/color/grey - id = /obj/item/card/id - ears = /obj/item/radio/headset - belt = /obj/item/pda - back = /obj/item/storage/backpack - shoes = /obj/item/clothing/shoes/sneakers/black - - var/backpack = /obj/item/storage/backpack - var/satchel = /obj/item/storage/backpack/satchel - var/duffelbag = /obj/item/storage/backpack/duffelbag - var/box = /obj/item/storage/box/survival - - var/pda_slot = SLOT_BELT - -/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - switch(H.backbag) - if(GBACKPACK) - back = /obj/item/storage/backpack //Grey backpack - if(GSATCHEL) - back = /obj/item/storage/backpack/satchel //Grey satchel - if(GDUFFELBAG) - back = /obj/item/storage/backpack/duffelbag //Grey Duffel bag - if(LSATCHEL) - back = /obj/item/storage/backpack/satchel/leather //Leather Satchel - if(DSATCHEL) - back = satchel //Department satchel - if(DDUFFELBAG) - back = duffelbag //Department duffel bag - else - back = backpack //Department backpack - - if(box) - if(!backpack_contents) - backpack_contents = list() - backpack_contents.Insert(1, box) // Box always takes a first slot in backpack - backpack_contents[box] = 1 - - //converts the uniform string into the path we'll wear, whether it's the skirt or regular variant - var/holder - if(H.jumpsuit_style == PREF_SKIRT) - holder = "[uniform]/skirt" - if(!text2path(holder)) - holder = "[uniform]" - else - holder = "[uniform]" - uniform = text2path(holder) - -/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/datum/job/J = SSjob.GetJobType(jobtype) - if(!J) - J = SSjob.GetJob(H.job) - - if(H.nameless && J.dresscodecompliant) - if(J.title in GLOB.command_positions) - H.real_name = J.title - else - H.real_name = "[J.title] #[rand(10000, 99999)]" - - var/obj/item/card/id/C = H.wear_id - if(istype(C)) - C.access = J.get_access() - shuffle_inplace(C.access) // Shuffle access list to make NTNet passkeys less predictable - C.registered_name = H.real_name - C.assignment = J.title - C.update_label() - H.sec_hud_set_ID() - - var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot) - if(istype(PDA)) - PDA.owner = H.real_name - PDA.ownjob = J.title - PDA.update_label() - -/datum/outfit/job/get_chameleon_disguise_info() - var/list/types = ..() - types -= /obj/item/storage/backpack //otherwise this will override the actual backpacks - types += backpack - types += satchel - types += duffelbag - return types +/datum/job + //The name of the job , used for preferences, bans and more. Make sure you know what you're doing before changing this. + var/title = "NOPE" + + //Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access + var/list/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population) + var/list/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!) + + //Determines who can demote this position + var/department_head = list() + + //Tells the given channels that the given mob is the new department head. See communications.dm for valid channels. + var/list/head_announce = null + + //Bitflags for the job + var/flag = NONE //Deprecated + var/department_flag = NONE //Deprecated +// var/auto_deadmin_role_flags = NONE + + //Players will be allowed to spawn in as jobs that are set to "Station" + var/faction = "None" + + //How many players can be this job + var/total_positions = 0 + + //How many players can spawn in as this job + var/spawn_positions = 0 + + //How many players have this job + var/current_positions = 0 + + //Supervisors, who this person answers to directly + var/supervisors = "" + + //Sellection screen color + var/selection_color = "#ffffff" + + + //If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect. + var/req_admin_notify + + // This is for Citadel specific tweaks to job notices. + var/custom_spawn_text + + //If you have the use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) + var/minimal_player_age = 0 + + var/outfit = null + + var/exp_requirements = 0 + + var/exp_type = "" + var/exp_type_department = "" + + //The amount of good boy points playing this role will earn you towards a higher chance to roll antagonist next round + //can be overridden by antag_rep.txt config + var/antag_rep = 10 + + var/list/mind_traits // Traits added to the mind of the mob assigned this job + var/list/blacklisted_quirks //list of quirk typepaths blacklisted. + + var/display_order = JOB_DISPLAY_ORDER_DEFAULT + +//Only override this proc +//H is usually a human unless an /equip override transformed it +/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE) + //do actions on H but send messages to M as the key may not have been transferred_yet + if(mind_traits) + for(var/t in mind_traits) + ADD_TRAIT(H.mind, t, JOB_TRAIT) + +/datum/job/proc/announce(mob/living/carbon/human/H) + if(head_announce) + announce_head(H, head_announce) + +/datum/job/proc/override_latejoin_spawn(mob/living/carbon/human/H) //Return TRUE to force latejoining to not automatically place the person in latejoin shuttle/whatever. + return FALSE + +//Used for a special check of whether to allow a client to latejoin as this job. +/datum/job/proc/special_check_latejoin(client/C) + return TRUE + +/datum/job/proc/GetAntagRep() + . = CONFIG_GET(keyed_list/antag_rep)[lowertext(title)] + if(. == null) + return antag_rep + +//Don't override this unless the job transforms into a non-human (Silicons do this for example) +/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, datum/outfit/outfit_override = null, client/preference_source) + if(!H) + return FALSE + + if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions)) + if(H.dna.species.id != "human") + H.set_species(/datum/species/human) + H.apply_pref_name("human", preference_source) + + //Equip the rest of the gear + H.dna.species.before_equip_job(src, H, visualsOnly) + + if(outfit_override || outfit) + H.equipOutfit(outfit_override ? outfit_override : outfit, visualsOnly) + + H.dna.species.after_equip_job(src, H, visualsOnly) + + if(!visualsOnly && announce) + announce(H) + +/datum/job/proc/get_access() + if(!config) //Needed for robots. + return src.minimal_access.Copy() + + . = list() + + if(CONFIG_GET(flag/jobs_have_minimal_access)) + . = src.minimal_access.Copy() + else + . = src.access.Copy() + + if(CONFIG_GET(flag/everyone_has_maint_access)) //Config has global maint access set + . |= list(ACCESS_MAINT_TUNNELS) + +/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. + if(H && GLOB.announcement_systems.len) + //timer because these should come after the captain announcement + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/addtimer, CALLBACK(pick(GLOB.announcement_systems), /obj/machinery/announcement_system/proc/announce, "NEWHEAD", H.real_name, H.job, channels), 1)) + +//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 +/datum/job/proc/player_old_enough(client/C) + if(available_in_days(C) == 0) + return TRUE //Available in 0 days = available right now = player is old enough to play. + return FALSE + + +/datum/job/proc/available_in_days(client/C) + if(!C) + return 0 + if(!CONFIG_GET(flag/use_age_restriction_for_jobs)) + return 0 + if(!SSdbcore.Connect()) + return 0 //Without a database connection we can't get a player's age so we'll assume they're old enough for all jobs + if(C.prefs.db_flags & DB_FLAG_EXEMPT) + return 0 + if(!isnum(minimal_player_age)) + return 0 + + return max(0, minimal_player_age - C.player_age) + +/datum/job/proc/config_check() + return TRUE + +/datum/job/proc/map_check() + return TRUE + +/datum/job/proc/radio_help_message(mob/M) + to_chat(M, "Prefix your message with :h to speak on your department's radio. To see other prefixes, look closely at your headset.") + +/datum/outfit/job + name = "Standard Gear" + + var/jobtype = null + + uniform = /obj/item/clothing/under/color/grey + id = /obj/item/card/id + ears = /obj/item/radio/headset + belt = /obj/item/pda + back = /obj/item/storage/backpack + shoes = /obj/item/clothing/shoes/sneakers/black + box = /obj/item/storage/box/survival + + var/backpack = /obj/item/storage/backpack + var/satchel = /obj/item/storage/backpack/satchel + var/duffelbag = /obj/item/storage/backpack/duffelbag + + var/pda_slot = SLOT_BELT + +/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + switch(H.backbag) + if(GBACKPACK) + back = /obj/item/storage/backpack //Grey backpack + if(GSATCHEL) + back = /obj/item/storage/backpack/satchel //Grey satchel + if(GDUFFELBAG) + back = /obj/item/storage/backpack/duffelbag //Grey Duffel bag + if(LSATCHEL) + back = /obj/item/storage/backpack/satchel/leather //Leather Satchel + if(DSATCHEL) + back = satchel //Department satchel + if(DDUFFELBAG) + back = duffelbag //Department duffel bag + else + back = backpack //Department backpack + + //converts the uniform string into the path we'll wear, whether it's the skirt or regular variant + var/holder + if(H.jumpsuit_style == PREF_SKIRT) + holder = "[uniform]/skirt" + if(!text2path(holder)) + holder = "[uniform]" + else + holder = "[uniform]" + uniform = text2path(holder) + +/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + if(visualsOnly) + return + + var/datum/job/J = SSjob.GetJobType(jobtype) + if(!J) + J = SSjob.GetJob(H.job) + + if(H.nameless && J.dresscodecompliant) + if(J.title in GLOB.command_positions) + H.real_name = J.title + else + H.real_name = "[J.title] #[rand(10000, 99999)]" + + var/obj/item/card/id/C = H.wear_id + if(istype(C)) + C.access = J.get_access() + shuffle_inplace(C.access) // Shuffle access list to make NTNet passkeys less predictable + C.registered_name = H.real_name + C.assignment = J.title + C.update_label() + H.sec_hud_set_ID() + + var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot) + if(istype(PDA)) + PDA.owner = H.real_name + PDA.ownjob = J.title + PDA.update_label() + +/datum/outfit/job/get_chameleon_disguise_info() + var/list/types = ..() + types -= /obj/item/storage/backpack //otherwise this will override the actual backpacks + types += backpack + types += satchel + types += duffelbag + return types + +//Warden and regular officers add this result to their get_access() +/datum/job/proc/check_config_for_sec_maint() + if(CONFIG_GET(flag/security_has_maint_access)) + return list(ACCESS_MAINT_TUNNELS) + return list() diff --git a/code/modules/jobs/job_types/silicon.dm b/code/modules/jobs/job_types/ai.dm similarity index 71% rename from code/modules/jobs/job_types/silicon.dm rename to code/modules/jobs/job_types/ai.dm index ab963eb8f3..4bcfab5836 100644 --- a/code/modules/jobs/job_types/silicon.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -1,90 +1,69 @@ -/* -AI -*/ -/datum/job/ai - title = "AI" - flag = AI_JF - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - selection_color = "#ccffcc" - supervisors = "your laws" - req_admin_notify = TRUE - minimal_player_age = 30 - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_SILICON - var/do_special_check = TRUE - -/datum/job/ai/equip(mob/living/carbon/human/H, visualsOnly, announce, latejoin, outfit_override) - . = H.AIize(latejoin) - -/datum/job/ai/after_spawn(mob/H, mob/M, latejoin) - . = ..() - if(latejoin) - var/obj/structure/AIcore/latejoin_inactive/lateJoinCore - for(var/obj/structure/AIcore/latejoin_inactive/P in GLOB.latejoin_ai_cores) - if(P.is_available()) - lateJoinCore = P - GLOB.latejoin_ai_cores -= P - break - if(lateJoinCore) - lateJoinCore.available = FALSE - H.forceMove(lateJoinCore.loc) - qdel(lateJoinCore) - var/mob/living/silicon/ai/AI = H - AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. - AI.set_core_display_icon(null, M.client) - - //we may have been created after our borg - if(SSticker.current_state == GAME_STATE_SETTING_UP) - for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs) - if(!R.connected_ai) - R.TryConnectToAI() - - if(latejoin) - announce(AI) - -/datum/job/ai/override_latejoin_spawn() - return TRUE - -/datum/job/ai/special_check_latejoin(client/C) - if(!do_special_check) - return TRUE - for(var/i in GLOB.latejoin_ai_cores) - var/obj/structure/AIcore/latejoin_inactive/LAI = i - if(istype(LAI)) - if(LAI.is_available()) - return TRUE - return FALSE - -/datum/job/ai/announce(mob/living/silicon/ai/AI) - . = ..() - SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "[AI] has been downloaded to an empty bluespace-networked AI core at [AREACOORD(AI)].")) - -/datum/job/ai/config_check() - return CONFIG_GET(flag/allow_ai) - -/* -Cyborg -*/ -/datum/job/cyborg - title = "Cyborg" - flag = CYBORG - department_flag = ENGSEC - faction = "Station" - total_positions = 0 - spawn_positions = 1 - supervisors = "your laws and the AI" //Nodrak - selection_color = "#ddffdd" - minimal_player_age = 21 - exp_requirements = 120 - exp_type = EXP_TYPE_CREW - -/datum/job/cyborg/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, outfit_override = null) - return H.Robotize(FALSE, latejoin) - -/datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M) - R.updatename(M.client) - R.gender = NEUTER +/datum/job/ai + title = "AI" + flag = AI_JF +// auto_deadmin_role_flags = DEADMIN_POSITION_SILICON + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + selection_color = "#ccffcc" + supervisors = "your laws" + req_admin_notify = TRUE + minimal_player_age = 30 + exp_requirements = 180 + exp_type = EXP_TYPE_CREW + exp_type_department = EXP_TYPE_SILICON + display_order = JOB_DISPLAY_ORDER_AI + var/do_special_check = TRUE + +/datum/job/ai/equip(mob/living/carbon/human/H, visualsOnly, announce, latejoin, datum/outfit/outfit_override, client/preference_source = null) + if(visualsOnly) + CRASH("dynamic preview is unsupported") + . = H.AIize(latejoin,preference_source) + +/datum/job/ai/after_spawn(mob/H, mob/M, latejoin) + . = ..() + if(latejoin) + var/obj/structure/AIcore/latejoin_inactive/lateJoinCore + for(var/obj/structure/AIcore/latejoin_inactive/P in GLOB.latejoin_ai_cores) + if(P.is_available()) + lateJoinCore = P + GLOB.latejoin_ai_cores -= P + break + if(lateJoinCore) + lateJoinCore.available = FALSE + H.forceMove(lateJoinCore.loc) + qdel(lateJoinCore) + var/mob/living/silicon/ai/AI = H + AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. + AI.set_core_display_icon(null, M.client) + + //we may have been created after our borg + if(SSticker.current_state == GAME_STATE_SETTING_UP) + for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs) + if(!R.connected_ai) + R.TryConnectToAI() + + if(latejoin) + announce(AI) + +/datum/job/ai/override_latejoin_spawn() + return TRUE + +/datum/job/ai/special_check_latejoin(client/C) + if(!do_special_check) + return TRUE + for(var/i in GLOB.latejoin_ai_cores) + var/obj/structure/AIcore/latejoin_inactive/LAI = i + if(istype(LAI)) + if(LAI.is_available()) + return TRUE + return FALSE + +/datum/job/ai/announce(mob/living/silicon/ai/AI) + . = ..() + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "[AI] has been downloaded to an empty bluespace-networked AI core at [AREACOORD(AI)].")) + +/datum/job/ai/config_check() + return CONFIG_GET(flag/allow_ai) + diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index ce6eea97b0..c04560f849 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -14,7 +14,7 @@ Assistant minimal_access = list() //See /datum/job/assistant/get_access() outfit = /datum/outfit/job/assistant antag_rep = 7 - + display_order = JOB_DISPLAY_ORDER_ASSISTANT /datum/job/assistant/get_access() if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm new file mode 100644 index 0000000000..93775beca9 --- /dev/null +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -0,0 +1,44 @@ +/datum/job/atmos + title = "Atmospheric Technician" + flag = ATMOSTECH + department_head = list("Chief Engineer") + department_flag = ENGSEC + faction = "Station" + total_positions = 3 + spawn_positions = 2 + supervisors = "the chief engineer" + selection_color = "#ff9b3d" + exp_requirements = 60 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/atmos + + access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, + ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM) + display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN + +/datum/outfit/job/atmos + name = "Atmospheric Technician" + jobtype = /datum/job/atmos + + belt = /obj/item/storage/belt/utility/atmostech + l_pocket = /obj/item/pda/atmos + ears = /obj/item/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/atmospheric_technician + r_pocket = /obj/item/analyzer + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + box = /obj/item/storage/box/engineer + pda_slot = SLOT_L_STORE + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + +/datum/outfit/job/atmos/rig + name = "Atmospheric Technician (Hardsuit)" + + mask = /obj/item/clothing/mask/gas + suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos + suit_store = /obj/item/tank/internals/oxygen + internals_slot = SLOT_S_STORE diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm new file mode 100644 index 0000000000..0ace449757 --- /dev/null +++ b/code/modules/jobs/job_types/bartender.dm @@ -0,0 +1,30 @@ +/datum/job/bartender + title = "Bartender" + flag = BARTENDER + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#bbe291" + exp_type_department = EXP_TYPE_SERVICE // This is so the jobs menu can work properly + + outfit = /datum/outfit/job/bartender + + access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM) + display_order = JOB_DISPLAY_ORDER_BARTENDER + +/datum/outfit/job/bartender + name = "Bartender" + jobtype = /datum/job/bartender + + glasses = /obj/item/clothing/glasses/sunglasses/reagent + belt = /obj/item/pda/bar + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/bartender + suit = /obj/item/clothing/suit/armor/vest + backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1) + shoes = /obj/item/clothing/shoes/laceup + diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm new file mode 100644 index 0000000000..e6338d9b0a --- /dev/null +++ b/code/modules/jobs/job_types/botanist.dm @@ -0,0 +1,32 @@ +/datum/job/hydro + title = "Botanist" + flag = BOTANIST + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 3 + spawn_positions = 2 + supervisors = "the head of personnel" + selection_color = "#bbe291" + + outfit = /datum/outfit/job/botanist + + access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) + display_order = JOB_DISPLAY_ORDER_BOTANIST + +/datum/outfit/job/botanist + name = "Botanist" + jobtype = /datum/job/hydro + + belt = /obj/item/pda/botanist + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/hydroponics + suit = /obj/item/clothing/suit/apron + gloves =/obj/item/clothing/gloves/botanic_leather + suit_store = /obj/item/plant_analyzer + + backpack = /obj/item/storage/backpack/botany + satchel = /obj/item/storage/backpack/satchel/hyd + + diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 58943df4e4..7e832d6975 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -1,20 +1,19 @@ -/* -Captain -*/ /datum/job/captain title = "Captain" flag = CAPTAIN +// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY //:eyes: department_head = list("CentCom") department_flag = ENGSEC faction = "Station" total_positions = 1 spawn_positions = 1 supervisors = "Nanotrasen officials and Space law" - selection_color = "#ccccff" + selection_color = "#aac1ee" req_admin_notify = 1 minimal_player_age = 14 exp_requirements = 180 exp_type = EXP_TYPE_CREW + exp_type_department = EXP_TYPE_COMMAND outfit = /datum/outfit/job/captain @@ -22,6 +21,9 @@ Captain minimal_access = list() //See get_access() mind_traits = list(TRAIT_CAPTAIN_METABOLISM) +// mind_traits = list(TRAIT_DISK_VERIFIER) + + display_order = JOB_DISPLAY_ORDER_CAPTAIN blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) @@ -62,55 +64,3 @@ Captain mask = /obj/item/clothing/mask/gas/sechailer suit = /obj/item/clothing/suit/space/hardsuit/captain suit_store = /obj/item/tank/internals/oxygen - -/* -Head of Personnel -*/ -/datum/job/hop - title = "Head of Personnel" - flag = HOP - department_head = list("Captain") - department_flag = CIVILIAN - head_announce = list(RADIO_CHANNEL_SERVICE) - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ddddff" - req_admin_notify = 1 - minimal_player_age = 10 - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_SUPPLY - - outfit = /datum/outfit/job/hop - - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS, - ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, - ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, - ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, - ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION, - ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS, - ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, - ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, - ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, - ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION, - ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM) - - blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity) - -/datum/outfit/job/hop - name = "Head of Personnel" - jobtype = /datum/job/hop - - id = /obj/item/card/id/silver - belt = /obj/item/pda/heads/hop - ears = /obj/item/radio/headset/heads/hop - uniform = /obj/item/clothing/under/rank/head_of_personnel - shoes = /obj/item/clothing/shoes/sneakers/brown - head = /obj/item/clothing/head/hopcap - backpack_contents = list(/obj/item/storage/box/ids=1,\ - /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) - - chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop) diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm deleted file mode 100644 index 8e24ece655..0000000000 --- a/code/modules/jobs/job_types/cargo_service.dm +++ /dev/null @@ -1,293 +0,0 @@ -/* -Quartermaster -*/ -/datum/job/qm - title = "Quartermaster" - flag = QUARTERMASTER - department_head = list("Head of Personnel") - department_flag = CIVILIAN - head_announce = list(RADIO_CHANNEL_SUPPLY) - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#d7b088" - - outfit = /datum/outfit/job/quartermaster - - access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT) - minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT) - - blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) - -/datum/outfit/job/quartermaster - name = "Quartermaster" - jobtype = /datum/job/qm - - belt = /obj/item/pda/quartermaster - ears = /obj/item/radio/headset/headset_cargo - uniform = /obj/item/clothing/under/rank/cargo - shoes = /obj/item/clothing/shoes/sneakers/brown - glasses = /obj/item/clothing/glasses/sunglasses - l_hand = /obj/item/clipboard - - chameleon_extras = /obj/item/stamp/qm - -/* -Cargo Technician -*/ -/datum/job/cargo_tech - title = "Cargo Technician" - flag = CARGOTECH - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 3 - spawn_positions = 2 - supervisors = "the quartermaster and the head of personnel" - selection_color = "#dcba97" - - outfit = /datum/outfit/job/cargo_tech - - access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/cargo_tech - name = "Cargo Technician" - jobtype = /datum/job/cargo_tech - - belt = /obj/item/pda/cargo - ears = /obj/item/radio/headset/headset_cargo - uniform = /obj/item/clothing/under/rank/cargotech - l_hand = /obj/item/export_scanner - -/* -Shaft Miner -*/ -/datum/job/mining - title = "Shaft Miner" - flag = MINER - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 3 - spawn_positions = 3 - supervisors = "the quartermaster and the head of personnel" - selection_color = "#dcba97" - custom_spawn_text = "Remember, you are a miner, not a hunter. Hunting monsters is not a requirement of your job, the only requirement of your job is to provide materials for the station. Don't be afraid to run away if you're inexperienced with fighting the mining area's locals." - - outfit = /datum/outfit/job/miner - - access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/miner - name = "Shaft Miner (Lavaland)" - jobtype = /datum/job/mining - - belt = /obj/item/pda/shaftminer - ears = /obj/item/radio/headset/headset_cargo/mining - shoes = /obj/item/clothing/shoes/workboots/mining - gloves = /obj/item/clothing/gloves/color/black - uniform = /obj/item/clothing/under/rank/miner/lavaland - l_pocket = /obj/item/reagent_containers/hypospray/medipen/survival - r_pocket = /obj/item/storage/bag/ore //causes issues if spawned in backpack - backpack_contents = list( - /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1,\ - /obj/item/mining_voucher=1,\ - /obj/item/suit_voucher=1,\ - /obj/item/stack/marker_beacon/ten=1) - - backpack = /obj/item/storage/backpack/explorer - satchel = /obj/item/storage/backpack/satchel/explorer - duffelbag = /obj/item/storage/backpack/duffelbag - box = /obj/item/storage/box/survival_mining - - chameleon_extras = /obj/item/gun/energy/kinetic_accelerator - -/datum/outfit/job/miner/asteroid - name = "Shaft Miner (Asteroid)" - uniform = /obj/item/clothing/under/rank/miner - shoes = /obj/item/clothing/shoes/workboots - -/datum/outfit/job/miner/equipped - name = "Shaft Miner (Lavaland + Equipment)" - suit = /obj/item/clothing/suit/hooded/explorer/standard - mask = /obj/item/clothing/mask/gas/explorer - glasses = /obj/item/clothing/glasses/meson - suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE - backpack_contents = list( - /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1, - /obj/item/mining_voucher=1, - /obj/item/t_scanner/adv_mining_scanner/lesser=1, - /obj/item/gun/energy/kinetic_accelerator=1,\ - /obj/item/stack/marker_beacon/ten=1) - -/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - if(istype(H.wear_suit, /obj/item/clothing/suit/hooded)) - var/obj/item/clothing/suit/hooded/S = H.wear_suit - S.ToggleHood() - -/datum/outfit/job/miner/equipped/hardsuit - name = "Shaft Miner (Equipment + Hardsuit)" - suit = /obj/item/clothing/suit/space/hardsuit/mining - mask = /obj/item/clothing/mask/breath - - -/* -Bartender -*/ -/datum/job/bartender - title = "Bartender" - flag = BARTENDER - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#bbe291" - - outfit = /datum/outfit/job/bartender - - access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM) - - -/datum/outfit/job/bartender - name = "Bartender" - jobtype = /datum/job/bartender - - glasses = /obj/item/clothing/glasses/sunglasses/reagent - belt = /obj/item/pda/bar - ears = /obj/item/radio/headset/headset_srv - uniform = /obj/item/clothing/under/rank/bartender - suit = /obj/item/clothing/suit/armor/vest - backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1) - shoes = /obj/item/clothing/shoes/laceup - -/* -Cook -*/ -/datum/job/cook - title = "Cook" - flag = COOK - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 2 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#bbe291" - var/cooks = 0 //Counts cooks amount - - outfit = /datum/outfit/job/cook - - access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/cook - name = "Cook" - jobtype = /datum/job/cook - - belt = /obj/item/pda/cook - ears = /obj/item/radio/headset/headset_srv - uniform = /obj/item/clothing/under/rank/chef - suit = /obj/item/clothing/suit/toggle/chef - head = /obj/item/clothing/head/chefhat - mask = /obj/item/clothing/mask/fakemoustache/italian - backpack_contents = list(/obj/item/sharpener = 1) - -/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - var/datum/job/cook/J = SSjob.GetJobType(jobtype) - if(J) // Fix for runtime caused by invalid job being passed - if(J.cooks>0)//Cooks - suit = /obj/item/clothing/suit/apron/chef - head = /obj/item/clothing/head/soft/mime - if(!visualsOnly) - J.cooks++ - -/datum/outfit/job/cook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - var/list/possible_boxes = subtypesof(/obj/item/storage/box/ingredients) - var/chosen_box = pick(possible_boxes) - var/obj/item/storage/box/I = new chosen_box(src) - H.equip_to_slot_or_del(I,SLOT_IN_BACKPACK) - var/datum/martial_art/cqc/under_siege/justacook = new - justacook.teach(H) - -/* -Botanist -*/ -/datum/job/hydro - title = "Botanist" - flag = BOTANIST - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 3 - spawn_positions = 2 - supervisors = "the head of personnel" - selection_color = "#bbe291" - - outfit = /datum/outfit/job/botanist - - access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) - // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS - // Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT - // Given Morgue access because they have a viable means of cloning. - - -/datum/outfit/job/botanist - name = "Botanist" - jobtype = /datum/job/hydro - - belt = /obj/item/pda/botanist - ears = /obj/item/radio/headset/headset_srv - uniform = /obj/item/clothing/under/rank/hydroponics - suit = /obj/item/clothing/suit/apron - gloves =/obj/item/clothing/gloves/botanic_leather - suit_store = /obj/item/plant_analyzer - - backpack = /obj/item/storage/backpack/botany - satchel = /obj/item/storage/backpack/satchel/hyd - - -/* -Janitor -*/ -/datum/job/janitor - title = "Janitor" - flag = JANITOR - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 2 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#bbe291" - var/global/janitors = 0 - - outfit = /datum/outfit/job/janitor - - access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/janitor - name = "Janitor" - jobtype = /datum/job/janitor - - belt = /obj/item/pda/janitor - ears = /obj/item/radio/headset/headset_srv - uniform = /obj/item/clothing/under/rank/janitor - backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm new file mode 100644 index 0000000000..3ceb29bae2 --- /dev/null +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -0,0 +1,27 @@ +/datum/job/cargo_tech + title = "Cargo Technician" + flag = CARGOTECH + department_head = list("Quartermaster") + department_flag = CIVILIAN + faction = "Station" + total_positions = 3 + spawn_positions = 2 + supervisors = "the quartermaster" + selection_color = "#ca8f55" + + outfit = /datum/outfit/job/cargo_tech + + access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN + +/datum/outfit/job/cargo_tech + name = "Cargo Technician" + jobtype = /datum/job/cargo_tech + + belt = /obj/item/pda/cargo + ears = /obj/item/radio/headset/headset_cargo + uniform = /obj/item/clothing/under/rank/cargotech + l_hand = /obj/item/export_scanner + diff --git a/code/modules/jobs/job_types/civilian_chaplain.dm b/code/modules/jobs/job_types/chaplain.dm similarity index 66% rename from code/modules/jobs/job_types/civilian_chaplain.dm rename to code/modules/jobs/job_types/chaplain.dm index 2d190cfe60..f6648fdf86 100644 --- a/code/modules/jobs/job_types/civilian_chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -1,95 +1,121 @@ -//Due to how large this one is it gets its own file -/* -Chaplain -*/ -/datum/job/chaplain - title = "Chaplain" - flag = CHAPLAIN - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#dddddd" - - outfit = /datum/outfit/job/chaplain - - access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE) - minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE) - -/datum/job/chaplain/after_spawn(mob/living/H, mob/M) - . = ..() - if(H.mind) - H.mind.isholy = TRUE - - var/obj/item/storage/book/bible/booze/B = new - - if(GLOB.religion) - B.deity_name = GLOB.deity - B.name = GLOB.bible_name - B.icon_state = GLOB.bible_icon_state - B.item_state = GLOB.bible_item_state - to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.") - H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK) - var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod - var/obj/item/nullrod/N = new nrt(H) - H.put_in_hands(N) - return - - var/new_religion = "Christianity" - if(M.client && M.client.prefs.custom_names["religion"]) - new_religion = M.client.prefs.custom_names["religion"] - - var/new_deity = "Space Jesus" - if(M.client && M.client.prefs.custom_names["deity"]) - new_deity = M.client.prefs.custom_names["deity"] - - B.deity_name = new_deity - - - switch(lowertext(new_religion)) - if("christianity") - B.name = pick("The Holy Bible","The Dead Sea Scrolls") - if("satanism") - B.name = "The Unholy Bible" - if("cthulhu") - B.name = "The Necronomicon" - if("islam") - B.name = "Quran" - if("scientology") - B.name = pick("The Biography of L. Ron Hubbard","Dianetics") - if("chaos") - B.name = "The Book of Lorgar" - if("imperium") - B.name = "Uplifting Primer" - if("toolboxia") - B.name = "Toolbox Manifesto" - if("homosexuality") - B.name = "Guys Gone Wild" - if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks", "meme", "memes") - B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition") - H.adjustBrainLoss(100) // starts off retarded as fuck - if("science") - B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition") - else - B.name = "The Holy Book of [new_religion]" - - GLOB.religion = new_religion - GLOB.bible_name = B.name - GLOB.deity = B.deity_name - - H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK) - - SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1) - SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1) - -/datum/outfit/job/chaplain - name = "Chaplain" - jobtype = /datum/job/chaplain - - belt = /obj/item/pda/chaplain - uniform = /obj/item/clothing/under/rank/chaplain - backpack_contents = list(/obj/item/camera/spooky = 1) - backpack = /obj/item/storage/backpack/cultpack - satchel = /obj/item/storage/backpack/cultpack +/datum/job/chaplain + title = "Chaplain" + flag = CHAPLAIN + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#dddddd" + + outfit = /datum/outfit/job/chaplain + + access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE) + minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE) + + display_order = JOB_DISPLAY_ORDER_CHAPLAIN + + +/datum/job/chaplain/after_spawn(mob/living/H, mob/M) + . = ..() + if(H.mind) + H.mind.isholy = TRUE + + var/obj/item/storage/book/bible/booze/B = new + + if(GLOB.religion) + B.deity_name = GLOB.deity + B.name = GLOB.bible_name + B.icon_state = GLOB.bible_icon_state + B.item_state = GLOB.bible_item_state + to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.") + H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK) + var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod + var/obj/item/nullrod/N = new nrt(H) + H.put_in_hands(N) + return + + var/new_religion = DEFAULT_RELIGION + if(M.client && M.client.prefs.custom_names["religion"]) + new_religion = M.client.prefs.custom_names["religion"] + + var/new_deity = DEFAULT_DEITY + if(M.client && M.client.prefs.custom_names["deity"]) + new_deity = M.client.prefs.custom_names["deity"] + + B.deity_name = new_deity + + + switch(lowertext(new_religion)) + if("christianity") // DEFAULT_RELIGION + B.name = pick("The Holy Bible","The Dead Sea Scrolls") + if("buddhism") + B.name = "The Sutras" + if("clownism","honkmother","honk","honkism","comedy") + B.name = pick("The Holy Joke Book", "Just a Prank", "Hymns to the Honkmother") + if("chaos") + B.name = "The Book of Lorgar" + if("cthulhu") + B.name = "The Necronomicon" + if("hinduism") + B.name = "The Vedas" + if("homosexuality") + B.name = pick("Guys Gone Wild","Coming Out of The Closet") + if("imperium") + B.name = "Uplifting Primer" + if("islam") + B.name = "Quran" + if("judaism") + B.name = "The Torah" + if("lampism") + B.name = "Fluorescent Incandescence" + if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks", "meme", "memes") + B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition","F.A.T.A.L. Rulebook") + H.adjustBrainLoss(100) // starts off retarded as fuck + if("monkeyism","apism","gorillism","primatism") + B.name = pick("Going Bananas", "Bananas Out For Harambe") + if("mormonism") + B.name = "The Book of Mormon" + if("pastafarianism") + B.name = "The Gospel of the Flying Spaghetti Monster" + if("rastafarianism","rasta") + B.name = "The Holy Piby" + if("satanism") + B.name = "The Unholy Bible" + if("science") + B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition") + if("scientology") + B.name = pick("The Biography of L. Ron Hubbard","Dianetics") + if("servicianism", "partying") + B.name = "The Tenets of Servicia" + B.deity_name = pick("Servicia", "Space Bacchus", "Space Dionysus") + B.desc = "Happy, Full, Clean. Live it and give it." + if("subgenius") + B.name = "Book of the SubGenius" + if("toolboxia","greytide") + B.name = pick("Toolbox Manifesto","iGlove Assistants") + if("weeaboo","kawaii") + B.name = pick("Fanfiction Compendium","Japanese for Dummies","The Manganomicon","Establishing Your O.T.P") + else + B.name = "The Holy Book of [new_religion]" + + GLOB.religion = new_religion + GLOB.bible_name = B.name + GLOB.deity = B.deity_name + + H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK) + + SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1) + SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1) + +/datum/outfit/job/chaplain + name = "Chaplain" + jobtype = /datum/job/chaplain + + belt = /obj/item/pda/chaplain + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/chaplain + backpack_contents = list(/obj/item/camera/spooky = 1) + backpack = /obj/item/storage/backpack/cultpack + satchel = /obj/item/storage/backpack/cultpack \ No newline at end of file diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm new file mode 100644 index 0000000000..a915d261ed --- /dev/null +++ b/code/modules/jobs/job_types/chemist.dm @@ -0,0 +1,36 @@ +/datum/job/chemist + title = "Chemist" + flag = CHEMIST + department_head = list("Chief Medical Officer") + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the chief medical officer" + selection_color = "#74b5e0" + exp_type = EXP_TYPE_CREW + exp_requirements = 60 + + outfit = /datum/outfit/job/chemist + + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_CHEMIST + +/datum/outfit/job/chemist + name = "Chemist" + jobtype = /datum/job/chemist + + glasses = /obj/item/clothing/glasses/science + belt = /obj/item/pda/chemist + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/chemist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/chemist + backpack = /obj/item/storage/backpack/chemistry + satchel = /obj/item/storage/backpack/satchel/chem + duffelbag = /obj/item/storage/backpack/duffelbag/med + + chameleon_extras = /obj/item/gun/syringe + diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm new file mode 100644 index 0000000000..da3f281267 --- /dev/null +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -0,0 +1,64 @@ +/datum/job/chief_engineer + title = "Chief Engineer" + flag = CHIEF +// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD + department_head = list("Captain") + department_flag = ENGSEC + head_announce = list(RADIO_CHANNEL_ENGINEERING) + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#ee7400" + req_admin_notify = 1 + minimal_player_age = 7 + exp_requirements = 180 + exp_type = EXP_TYPE_CREW + exp_type_department = EXP_TYPE_ENGINEERING + + outfit = /datum/outfit/job/ce + + access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, + ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA, + ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT, + ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, + ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA, + ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT, + ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity) + +/datum/outfit/job/ce + name = "Chief Engineer" + jobtype = /datum/job/chief_engineer + + id = /obj/item/card/id/silver + belt = /obj/item/storage/belt/utility/chief/full + l_pocket = /obj/item/pda/heads/ce + ears = /obj/item/radio/headset/heads/ce + uniform = /obj/item/clothing/under/rank/chief_engineer + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/hardhat/white + gloves = /obj/item/clothing/gloves/color/black/ce + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1) + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + box = /obj/item/storage/box/engineer + pda_slot = SLOT_L_STORE + chameleon_extras = /obj/item/stamp/ce + +/datum/outfit/job/ce/rig + name = "Chief Engineer (Hardsuit)" + + mask = /obj/item/clothing/mask/breath + suit = /obj/item/clothing/suit/space/hardsuit/engine/elite + shoes = /obj/item/clothing/shoes/magboots/advance + suit_store = /obj/item/tank/internals/oxygen + glasses = /obj/item/clothing/glasses/meson/engine + gloves = /obj/item/clothing/gloves/color/yellow + head = null + internals_slot = SLOT_S_STORE diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm new file mode 100644 index 0000000000..4c7249f048 --- /dev/null +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -0,0 +1,59 @@ +/datum/job/cmo + title = "Chief Medical Officer" + flag = CMO_JF + department_head = list("Captain") + department_flag = MEDSCI +// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD + head_announce = list(RADIO_CHANNEL_MEDICAL) + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#509ed1" + req_admin_notify = 1 + minimal_player_age = 7 + exp_requirements = 180 + exp_type = EXP_TYPE_CREW + exp_type_department = EXP_TYPE_MEDICAL + + outfit = /datum/outfit/job/cmo + + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM, + ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, + ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS) + minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM, + ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, + ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS) + + display_order = JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) + +/datum/outfit/job/cmo + name = "Chief Medical Officer" + jobtype = /datum/job/cmo + + id = /obj/item/card/id/silver + belt = /obj/item/pda/heads/cmo + l_pocket = /obj/item/pinpointer/crew + ears = /obj/item/radio/headset/heads/cmo + uniform = /obj/item/clothing/under/rank/chief_medical_officer + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat/cmo + l_hand = /obj/item/storage/firstaid/regular + suit_store = /obj/item/flashlight/pen + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + + chameleon_extras = list(/obj/item/gun/syringe, /obj/item/stamp/cmo) + +/datum/outfit/job/cmo/hardsuit + name = "Chief Medical Officer (Hardsuit)" + + mask = /obj/item/clothing/mask/breath + suit = /obj/item/clothing/suit/space/hardsuit/medical + suit_store = /obj/item/tank/internals/oxygen + r_pocket = /obj/item/flashlight/pen + diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm deleted file mode 100644 index f21ff69e8e..0000000000 --- a/code/modules/jobs/job_types/civilian.dm +++ /dev/null @@ -1,206 +0,0 @@ -/* -Clown -*/ -/datum/job/clown - title = "Clown" - flag = CLOWN - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#dddddd" - - outfit = /datum/outfit/job/clown - - access = list(ACCESS_THEATRE) - minimal_access = list(ACCESS_THEATRE) - -/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M) - . = ..() - H.apply_pref_name("clown", M.client) - -/datum/outfit/job/clown - name = "Clown" - jobtype = /datum/job/clown - - belt = /obj/item/pda/clown - uniform = /obj/item/clothing/under/rank/clown - shoes = /obj/item/clothing/shoes/clown_shoes - mask = /obj/item/clothing/mask/gas/clown_hat - l_pocket = /obj/item/bikehorn - backpack_contents = list( - /obj/item/stamp/clown = 1, - /obj/item/reagent_containers/spray/waterflower = 1, - /obj/item/reagent_containers/food/snacks/grown/banana = 1, - /obj/item/instrument/bikehorn = 1, - ) - - implants = list(/obj/item/implant/sad_trombone) - - backpack = /obj/item/storage/backpack/clown - satchel = /obj/item/storage/backpack/clown - duffelbag = /obj/item/storage/backpack/duffelbag/clown //strangely has a duffel - - box = /obj/item/storage/box/hug/survival - - chameleon_extras = /obj/item/stamp/clown - - -/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - - H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names)) - -/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - - H.dna.add_mutation(CLOWNMUT) - H.dna.add_mutation(SMILE) - -/* -Mime -*/ -/datum/job/mime - title = "Mime" - flag = MIME - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#dddddd" - - outfit = /datum/outfit/job/mime - - access = list(ACCESS_THEATRE) - minimal_access = list(ACCESS_THEATRE) - -/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M) - H.apply_pref_name("mime", M.client) - -/datum/outfit/job/mime - name = "Mime" - jobtype = /datum/job/mime - - belt = /obj/item/pda/mime - uniform = /obj/item/clothing/under/rank/mime - mask = /obj/item/clothing/mask/gas/mime - gloves = /obj/item/clothing/gloves/color/white - head = /obj/item/clothing/head/frenchberet - suit = /obj/item/clothing/suit/suspenders - backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing=1) - - accessory = /obj/item/clothing/accessory/pocketprotector/cosmetology - backpack = /obj/item/storage/backpack/mime - satchel = /obj/item/storage/backpack/mime - - -/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - if(H.mind) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null)) - H.mind.miming = 1 - -/* -Curator -*/ -/datum/job/curator - title = "Curator" - flag = CURATOR - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#dddddd" - - outfit = /datum/outfit/job/curator - - access = list(ACCESS_LIBRARY) - minimal_access = list(ACCESS_LIBRARY, ACCESS_CONSTRUCTION,ACCESS_MINING_STATION) - -/datum/outfit/job/curator - name = "Curator" - jobtype = /datum/job/curator - - belt = /obj/item/pda/curator - uniform = /obj/item/clothing/under/rank/curator - l_hand = /obj/item/storage/bag/books - r_pocket = /obj/item/key/displaycase - l_pocket = /obj/item/laser_pointer - accessory = /obj/item/clothing/accessory/pocketprotector/full - backpack_contents = list( - /obj/item/melee/curator_whip = 1, - /obj/item/soapstone = 1, - /obj/item/barcodescanner = 1 - ) - - -/datum/outfit/job/curator/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - H.grant_all_languages(omnitongue=TRUE) -/* -Lawyer -*/ -/datum/job/lawyer - title = "Lawyer" - flag = LAWYER - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the head of personnel" - selection_color = "#dddddd" - var/lawyers = 0 //Counts lawyer amount - - outfit = /datum/outfit/job/lawyer - - access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS) - minimal_access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS) - - mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) - -/datum/outfit/job/lawyer - name = "Lawyer" - jobtype = /datum/job/lawyer - - belt = /obj/item/pda/lawyer - ears = /obj/item/radio/headset/headset_sec - uniform = /obj/item/clothing/under/lawyer/bluesuit - suit = /obj/item/clothing/suit/toggle/lawyer - shoes = /obj/item/clothing/shoes/laceup - l_hand = /obj/item/storage/briefcase/lawyer - l_pocket = /obj/item/laser_pointer - r_pocket = /obj/item/clothing/accessory/lawyers_badge - - chameleon_extras = /obj/item/stamp/law - - -/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - - var/datum/job/lawyer/J = SSjob.GetJobType(jobtype) - J.lawyers++ - if(J.lawyers>1) - uniform = /obj/item/clothing/under/lawyer/purpsuit - suit = /obj/item/clothing/suit/toggle/lawyer/purple diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm new file mode 100644 index 0000000000..d8b88ae871 --- /dev/null +++ b/code/modules/jobs/job_types/clown.dm @@ -0,0 +1,58 @@ +/datum/job/clown + title = "Clown" + flag = CLOWN + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#dddddd" + + outfit = /datum/outfit/job/clown + + access = list(ACCESS_THEATRE) + minimal_access = list(ACCESS_THEATRE) + + display_order = JOB_DISPLAY_ORDER_CLOWN + + +/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M) + . = ..() + H.apply_pref_name("clown", M.client) + +/datum/outfit/job/clown + name = "Clown" + jobtype = /datum/job/clown + + belt = /obj/item/pda/clown + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/clown + shoes = /obj/item/clothing/shoes/clown_shoes + mask = /obj/item/clothing/mask/gas/clown_hat + l_pocket = /obj/item/bikehorn + backpack_contents = list( + /obj/item/stamp/clown = 1, + /obj/item/reagent_containers/spray/waterflower = 1, + /obj/item/reagent_containers/food/snacks/grown/banana = 1, + /obj/item/instrument/bikehorn = 1, + ) + + implants = list(/obj/item/implant/sad_trombone) + + backpack = /obj/item/storage/backpack/clown + satchel = /obj/item/storage/backpack/clown + duffelbag = /obj/item/storage/backpack/duffelbag/clown //strangely has a duffel + + box = /obj/item/storage/box/hug/survival + + chameleon_extras = /obj/item/stamp/clown + +/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + + H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names)) //rename the mob AFTER they're equipped so their ID gets updated properly. + H.dna.add_mutation(CLOWNMUT) + H.dna.add_mutation(SMILE) diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm new file mode 100644 index 0000000000..c213d4dffc --- /dev/null +++ b/code/modules/jobs/job_types/cook.dm @@ -0,0 +1,52 @@ +/datum/job/cook + title = "Cook" + flag = COOK + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 2 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#bbe291" + var/cooks = 0 //Counts cooks amount + + outfit = /datum/outfit/job/cook + + access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_COOK + +/datum/outfit/job/cook + name = "Cook" + jobtype = /datum/job/cook + + belt = /obj/item/pda/cook + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/chef + suit = /obj/item/clothing/suit/toggle/chef + head = /obj/item/clothing/head/chefhat + mask = /obj/item/clothing/mask/fakemoustache/italian + backpack_contents = list(/obj/item/sharpener = 1) + +/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/datum/job/cook/J = SSjob.GetJobType(jobtype) + if(J) // Fix for runtime caused by invalid job being passed + if(J.cooks>0)//Cooks + suit = /obj/item/clothing/suit/apron/chef + head = /obj/item/clothing/head/soft/mime + if(!visualsOnly) + J.cooks++ + +/datum/outfit/job/cook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + var/list/possible_boxes = subtypesof(/obj/item/storage/box/ingredients) + var/chosen_box = pick(possible_boxes) + var/obj/item/storage/box/I = new chosen_box(src) + H.equip_to_slot_or_del(I,SLOT_IN_BACKPACK) + var/datum/martial_art/cqc/under_siege/justacook = new + justacook.teach(H) + diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm new file mode 100644 index 0000000000..35fa8483d5 --- /dev/null +++ b/code/modules/jobs/job_types/curator.dm @@ -0,0 +1,43 @@ +/datum/job/curator + title = "Curator" + flag = CURATOR + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#dddddd" + + outfit = /datum/outfit/job/curator + + access = list(ACCESS_LIBRARY) + minimal_access = list(ACCESS_LIBRARY, ACCESS_CONSTRUCTION, ACCESS_MINING_STATION) + + display_order = JOB_DISPLAY_ORDER_CURATOR + +/datum/outfit/job/curator + name = "Curator" + jobtype = /datum/job/curator + + shoes = /obj/item/clothing/shoes/laceup + belt = /obj/item/pda/curator + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/curator + l_hand = /obj/item/storage/bag/books + r_pocket = /obj/item/key/displaycase + l_pocket = /obj/item/laser_pointer + accessory = /obj/item/clothing/accessory/pocketprotector/full + backpack_contents = list( + /obj/item/melee/curator_whip = 1, + /obj/item/soapstone = 1, + /obj/item/barcodescanner = 1 + ) + +/datum/outfit/job/curator/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + + if(visualsOnly) + return + + H.grant_all_languages(omnitongue=TRUE) diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm new file mode 100644 index 0000000000..29c4c3d833 --- /dev/null +++ b/code/modules/jobs/job_types/cyborg.dm @@ -0,0 +1,27 @@ +/datum/job/cyborg + title = "Cyborg" + flag = CYBORG +// auto_deadmin_role_flags = DEADMIN_POSITION_SILICON + department_flag = ENGSEC + faction = "Station" + total_positions = 0 + spawn_positions = 1 + supervisors = "your laws and the AI" //Nodrak + selection_color = "#ddffdd" + minimal_player_age = 21 + exp_requirements = 120 + exp_type = EXP_TYPE_CREW + + display_order = JOB_DISPLAY_ORDER_CYBORG + +/datum/job/cyborg/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, datum/outfit/outfit_override = null, client/preference_source = null) + if(visualsOnly) + CRASH("dynamic preview is unsupported") + return H.Robotize(FALSE, latejoin) + +/datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M) + R.updatename(M.client) + R.gender = NEUTER + +/datum/job/cyborg/radio_help_message(mob/M) + to_chat(M, "Prefix your message with :b to speak with other cyborgs and AI.") diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm new file mode 100644 index 0000000000..27a54fbd1f --- /dev/null +++ b/code/modules/jobs/job_types/detective.dm @@ -0,0 +1,57 @@ +/datum/job/detective + title = "Detective" + flag = DETECTIVE +// auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY + department_head = list("Head of Security") + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of security" + selection_color = "#c02f2f" + minimal_player_age = 7 + exp_requirements = 300 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/detective + + access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) + + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_DETECTIVE + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic) + +/datum/outfit/job/detective + name = "Detective" + jobtype = /datum/job/detective + + belt = /obj/item/pda/detective + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/det + neck = /obj/item/clothing/neck/tie/black + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/det_suit + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/fedora/det_hat + l_pocket = /obj/item/toy/crayon/white + r_pocket = /obj/item/lighter + backpack_contents = list(/obj/item/storage/box/evidence=1,\ + /obj/item/detective_scanner=1,\ + /obj/item/melee/classic_baton=1) + mask = /obj/item/clothing/mask/cigarette + + implants = list(/obj/item/implant/mindshield) + + chameleon_extras = list(/obj/item/gun/ballistic/revolver/detective, /obj/item/clothing/glasses/sunglasses) + +/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/clothing/mask/cigarette/cig = H.wear_mask + if(istype(cig)) //Some species specfic changes can mess this up (plasmamen) + cig.light("") + + if(visualsOnly) + return + diff --git a/code/modules/jobs/job_types/engineering.dm b/code/modules/jobs/job_types/engineering.dm deleted file mode 100644 index e65cbab1bd..0000000000 --- a/code/modules/jobs/job_types/engineering.dm +++ /dev/null @@ -1,169 +0,0 @@ -/* -Chief Engineer -*/ -/datum/job/chief_engineer - title = "Chief Engineer" - flag = CHIEF - department_head = list("Captain") - department_flag = ENGSEC - head_announce = list(RADIO_CHANNEL_ENGINEERING) - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ffeeaa" - req_admin_notify = 1 - minimal_player_age = 7 - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_ENGINEERING - - outfit = /datum/outfit/job/ce - - access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, - ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA, - ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT, - ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, - ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA, - ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT, - ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) - - blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity) - -/datum/outfit/job/ce - name = "Chief Engineer" - jobtype = /datum/job/chief_engineer - - id = /obj/item/card/id/silver - belt = /obj/item/storage/belt/utility/chief/full - l_pocket = /obj/item/pda/heads/ce - ears = /obj/item/radio/headset/heads/ce - uniform = /obj/item/clothing/under/rank/chief_engineer - shoes = /obj/item/clothing/shoes/sneakers/brown - head = /obj/item/clothing/head/hardhat/white - gloves = /obj/item/clothing/gloves/color/black/ce - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1) - - backpack = /obj/item/storage/backpack/industrial - satchel = /obj/item/storage/backpack/satchel/eng - duffelbag = /obj/item/storage/backpack/duffelbag/engineering - box = /obj/item/storage/box/engineer - pda_slot = SLOT_L_STORE - chameleon_extras = /obj/item/stamp/ce - -/datum/outfit/job/ce/rig - name = "Chief Engineer (Hardsuit)" - - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/hardsuit/engine/elite - shoes = /obj/item/clothing/shoes/magboots/advance - suit_store = /obj/item/tank/internals/oxygen - glasses = /obj/item/clothing/glasses/meson/engine - gloves = /obj/item/clothing/gloves/color/yellow - head = null - internals_slot = SLOT_S_STORE - - -/* -Station Engineer -*/ -/datum/job/engineer - title = "Station Engineer" - flag = ENGINEER - department_head = list("Chief Engineer") - department_flag = ENGSEC - faction = "Station" - total_positions = 5 - spawn_positions = 5 - supervisors = "the chief engineer" - selection_color = "#fff5cc" - exp_requirements = 60 - exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/engineer - - access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, - ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, - ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/engineer - name = "Station Engineer" - jobtype = /datum/job/engineer - - belt = /obj/item/storage/belt/utility/full/engi - l_pocket = /obj/item/pda/engineering - ears = /obj/item/radio/headset/headset_eng - uniform = /obj/item/clothing/under/rank/engineer - shoes = /obj/item/clothing/shoes/workboots - head = /obj/item/clothing/head/hardhat - r_pocket = /obj/item/t_scanner - - backpack = /obj/item/storage/backpack/industrial - satchel = /obj/item/storage/backpack/satchel/eng - duffelbag = /obj/item/storage/backpack/duffelbag/engineering - box = /obj/item/storage/box/engineer - pda_slot = SLOT_L_STORE - backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) - -/datum/outfit/job/engineer/gloved - name = "Station Engineer (Gloves)" - gloves = /obj/item/clothing/gloves/color/yellow - -/datum/outfit/job/engineer/gloved/rig - name = "Station Engineer (Hardsuit)" - - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/hardsuit/engine - suit_store = /obj/item/tank/internals/oxygen - head = null - internals_slot = SLOT_S_STORE - - -/* -Atmospheric Technician -*/ -/datum/job/atmos - title = "Atmospheric Technician" - flag = ATMOSTECH - department_head = list("Chief Engineer") - department_flag = ENGSEC - faction = "Station" - total_positions = 3 - spawn_positions = 2 - supervisors = "the chief engineer" - selection_color = "#fff5cc" - exp_requirements = 60 - exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/atmos - - access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, - ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_EMERGENCY_STORAGE, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/atmos - name = "Atmospheric Technician" - jobtype = /datum/job/atmos - - belt = /obj/item/storage/belt/utility/atmostech - l_pocket = /obj/item/pda/atmos - ears = /obj/item/radio/headset/headset_eng - uniform = /obj/item/clothing/under/rank/atmospheric_technician - r_pocket = /obj/item/analyzer - - backpack = /obj/item/storage/backpack/industrial - satchel = /obj/item/storage/backpack/satchel/eng - duffelbag = /obj/item/storage/backpack/duffelbag/engineering - box = /obj/item/storage/box/engineer - pda_slot = SLOT_L_STORE - backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) - -/datum/outfit/job/atmos/rig - name = "Atmospheric Technician (Hardsuit)" - - mask = /obj/item/clothing/mask/gas - suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos - suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm new file mode 100644 index 0000000000..d7f59ff883 --- /dev/null +++ b/code/modules/jobs/job_types/geneticist.dm @@ -0,0 +1,35 @@ +/datum/job/geneticist + title = "Geneticist" + flag = GENETICIST + department_head = list("Chief Medical Officer", "Research Director") + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the chief medical officer and research director" + selection_color = "#74b5e0" + exp_type = EXP_TYPE_CREW + exp_requirements = 60 + + outfit = /datum/outfit/job/geneticist + + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_ROBOTICS, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE) + minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_GENETICIST + +/datum/outfit/job/geneticist + name = "Geneticist" + jobtype = /datum/job/geneticist + + belt = /obj/item/pda/geneticist + ears = /obj/item/radio/headset/headset_medsci + uniform = /obj/item/clothing/under/rank/geneticist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/genetics + suit_store = /obj/item/flashlight/pen + + backpack = /obj/item/storage/backpack/genetics + satchel = /obj/item/storage/backpack/satchel/gen + duffelbag = /obj/item/storage/backpack/duffelbag/med + diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm new file mode 100644 index 0000000000..e320ce20b4 --- /dev/null +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -0,0 +1,51 @@ +/datum/job/hop + title = "Head of Personnel" + flag = HOP +// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD + department_head = list("Captain") + department_flag = CIVILIAN + head_announce = list(RADIO_CHANNEL_SERVICE) + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#3a8529" + req_admin_notify = 1 + minimal_player_age = 10 + exp_requirements = 180 + exp_type = EXP_TYPE_CREW + exp_type_department = EXP_TYPE_SERVICE + + outfit = /datum/outfit/job/hop + + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS, + ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, + ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, + ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, + ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION, + ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS, + ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, + ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, + ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, + ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION, + ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL + + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity) + +/datum/outfit/job/hop + name = "Head of Personnel" + jobtype = /datum/job/hop + + id = /obj/item/card/id/silver + belt = /obj/item/pda/heads/hop + ears = /obj/item/radio/headset/heads/hop + uniform = /obj/item/clothing/under/rank/head_of_personnel + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/hopcap + backpack_contents = list(/obj/item/storage/box/ids=1,\ + /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) + + chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop) diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm new file mode 100644 index 0000000000..f6b5dbd3ef --- /dev/null +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -0,0 +1,68 @@ +/datum/job/hos + title = "Head of Security" + flag = HOS +// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY + department_head = list("Captain") + department_flag = ENGSEC + head_announce = list(RADIO_CHANNEL_SECURITY) + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#b90000" + req_admin_notify = 1 + minimal_player_age = 14 + exp_requirements = 300 + exp_type = EXP_TYPE_CREW + exp_type_department = EXP_TYPE_SECURITY + + outfit = /datum/outfit/job/hos + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, + ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, + ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, + ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, + ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, + ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, + ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_HEAD_OF_SECURITY + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/insanity) + +/datum/outfit/job/hos + name = "Head of Security" + jobtype = /datum/job/hos + + id = /obj/item/card/id/silver + belt = /obj/item/pda/heads/hos + ears = /obj/item/radio/headset/heads/hos/alt + uniform = /obj/item/clothing/under/rank/head_of_security + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/hos/trenchcoat + gloves = /obj/item/clothing/gloves/color/black/hos + head = /obj/item/clothing/head/HoS/beret + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + suit_store = /obj/item/gun/energy/e_gun + r_pocket = /obj/item/assembly/flash/handheld + l_pocket = /obj/item/restraints/handcuffs + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + box = /obj/item/storage/box/security + + implants = list(/obj/item/implant/mindshield) + + chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos) + +/datum/outfit/job/hos/hardsuit + name = "Head of Security (Hardsuit)" + + mask = /obj/item/clothing/mask/gas/sechailer + suit = /obj/item/clothing/suit/space/hardsuit/security/hos + suit_store = /obj/item/tank/internals/oxygen + backpack_contents = list(/obj/item/melee/baton/loaded=1, /obj/item/gun/energy/e_gun=1) + diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm new file mode 100644 index 0000000000..d0a06ca0e0 --- /dev/null +++ b/code/modules/jobs/job_types/janitor.dm @@ -0,0 +1,27 @@ +/datum/job/janitor + title = "Janitor" + flag = JANITOR + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 2 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#bbe291" + var/global/janitors = 0 + + outfit = /datum/outfit/job/janitor + + access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_JANITOR + +/datum/outfit/job/janitor + name = "Janitor" + jobtype = /datum/job/janitor + + belt = /obj/item/pda/janitor + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/janitor + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm new file mode 100644 index 0000000000..0b8be52116 --- /dev/null +++ b/code/modules/jobs/job_types/lawyer.dm @@ -0,0 +1,47 @@ +/datum/job/lawyer + title = "Lawyer" + flag = LAWYER + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the head of personnel" + selection_color = "#dddddd" + var/lawyers = 0 //Counts lawyer amount + + outfit = /datum/outfit/job/lawyer + + access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS) + minimal_access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS) + + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_LAWYER + +/datum/outfit/job/lawyer + name = "Lawyer" + jobtype = /datum/job/lawyer + + belt = /obj/item/pda/lawyer + ears = /obj/item/radio/headset/headset_sec + uniform = /obj/item/clothing/under/lawyer/bluesuit + suit = /obj/item/clothing/suit/toggle/lawyer + shoes = /obj/item/clothing/shoes/laceup + l_hand = /obj/item/storage/briefcase/lawyer + l_pocket = /obj/item/laser_pointer + r_pocket = /obj/item/clothing/accessory/lawyers_badge + + chameleon_extras = /obj/item/stamp/law + + +/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + + var/datum/job/lawyer/J = SSjob.GetJobType(jobtype) + J.lawyers++ + if(J.lawyers>1) + uniform = /obj/item/clothing/under/lawyer/purpsuit + suit = /obj/item/clothing/suit/toggle/lawyer/purple diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm deleted file mode 100644 index 9eeb4ab06e..0000000000 --- a/code/modules/jobs/job_types/medical.dm +++ /dev/null @@ -1,207 +0,0 @@ -/* -Chief Medical Officer -*/ -/datum/job/cmo - title = "Chief Medical Officer" - flag = CMO_JF - department_head = list("Captain") - department_flag = MEDSCI - head_announce = list(RADIO_CHANNEL_MEDICAL) - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ffddf0" - req_admin_notify = 1 - minimal_player_age = 7 - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_MEDICAL - - outfit = /datum/outfit/job/cmo - - access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM, - ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, - ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS) - minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM, - ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, - ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS) - - blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) - -/datum/outfit/job/cmo - name = "Chief Medical Officer" - jobtype = /datum/job/cmo - - id = /obj/item/card/id/silver - belt = /obj/item/pda/heads/cmo - l_pocket = /obj/item/pinpointer/crew - ears = /obj/item/radio/headset/heads/cmo - uniform = /obj/item/clothing/under/rank/chief_medical_officer - shoes = /obj/item/clothing/shoes/sneakers/brown - suit = /obj/item/clothing/suit/toggle/labcoat/cmo - l_hand = /obj/item/storage/firstaid/regular - suit_store = /obj/item/flashlight/pen - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) - - backpack = /obj/item/storage/backpack/medic - satchel = /obj/item/storage/backpack/satchel/med - duffelbag = /obj/item/storage/backpack/duffelbag/med - - chameleon_extras = list(/obj/item/gun/syringe, /obj/item/stamp/cmo) - -/datum/outfit/job/cmo/hardsuit - name = "Chief Medical Officer (Hardsuit)" - - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/hardsuit/medical - suit_store = /obj/item/tank/internals/oxygen - r_pocket = /obj/item/flashlight/pen - -/* -Medical Doctor -*/ -/datum/job/doctor - title = "Medical Doctor" - flag = DOCTOR - department_head = list("Chief Medical Officer") - department_flag = MEDSCI - faction = "Station" - total_positions = 5 - spawn_positions = 3 - supervisors = "the chief medical officer" - selection_color = "#ffeef0" - - outfit = /datum/outfit/job/doctor - - access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/doctor - name = "Medical Doctor" - jobtype = /datum/job/doctor - - belt = /obj/item/pda/medical - ears = /obj/item/radio/headset/headset_med - uniform = /obj/item/clothing/under/rank/medical - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat - l_hand = /obj/item/storage/firstaid/regular - suit_store = /obj/item/flashlight/pen - - backpack = /obj/item/storage/backpack/medic - satchel = /obj/item/storage/backpack/satchel/med - duffelbag = /obj/item/storage/backpack/duffelbag/med - - chameleon_extras = /obj/item/gun/syringe - -/* -Chemist -*/ -/datum/job/chemist - title = "Chemist" - flag = CHEMIST - department_head = list("Chief Medical Officer") - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the chief medical officer" - selection_color = "#ffeef0" - exp_type = EXP_TYPE_CREW - exp_requirements = 60 - - outfit = /datum/outfit/job/chemist - - access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_MEDICAL, ACCESS_CHEMISTRY, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/chemist - name = "Chemist" - jobtype = /datum/job/chemist - - glasses = /obj/item/clothing/glasses/science - belt = /obj/item/pda/chemist - ears = /obj/item/radio/headset/headset_med - uniform = /obj/item/clothing/under/rank/chemist - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat/chemist - backpack = /obj/item/storage/backpack/chemistry - satchel = /obj/item/storage/backpack/satchel/chem - duffelbag = /obj/item/storage/backpack/duffelbag/med - l_hand = /obj/item/fermichem/pHbooklet - - chameleon_extras = /obj/item/gun/syringe - -/* -Geneticist -*/ -/datum/job/geneticist - title = "Geneticist" - flag = GENETICIST - department_head = list("Chief Medical Officer", "Research Director") - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the chief medical officer and research director" - selection_color = "#ffeef0" - exp_type = EXP_TYPE_CREW - exp_requirements = 60 - - outfit = /datum/outfit/job/geneticist - - access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_ROBOTICS, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE) - minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/geneticist - name = "Geneticist" - jobtype = /datum/job/geneticist - - belt = /obj/item/pda/geneticist - ears = /obj/item/radio/headset/headset_medsci - uniform = /obj/item/clothing/under/rank/geneticist - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat/genetics - suit_store = /obj/item/flashlight/pen - - backpack = /obj/item/storage/backpack/genetics - satchel = /obj/item/storage/backpack/satchel/gen - duffelbag = /obj/item/storage/backpack/duffelbag/med - -/* -Virologist -*/ -/datum/job/virologist - title = "Virologist" - flag = VIROLOGIST - department_head = list("Chief Medical Officer") - department_flag = MEDSCI - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the chief medical officer" - selection_color = "#ffeef0" - exp_type = EXP_TYPE_CREW - exp_requirements = 60 - - outfit = /datum/outfit/job/virologist - - access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_MEDICAL, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/virologist - name = "Virologist" - jobtype = /datum/job/virologist - - belt = /obj/item/pda/viro - ears = /obj/item/radio/headset/headset_med - uniform = /obj/item/clothing/under/rank/virologist - mask = /obj/item/clothing/mask/surgical - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat/virologist - suit_store = /obj/item/flashlight/pen - - backpack = /obj/item/storage/backpack/virology - satchel = /obj/item/storage/backpack/satchel/vir - duffelbag = /obj/item/storage/backpack/duffelbag/med diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm new file mode 100644 index 0000000000..19fa1c7158 --- /dev/null +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -0,0 +1,35 @@ +/datum/job/doctor + title = "Medical Doctor" + flag = DOCTOR + department_head = list("Chief Medical Officer") + department_flag = MEDSCI + faction = "Station" + total_positions = 5 + spawn_positions = 3 + supervisors = "the chief medical officer" + selection_color = "#74b5e0" + + outfit = /datum/outfit/job/doctor + + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR + +/datum/outfit/job/doctor + name = "Medical Doctor" + jobtype = /datum/job/doctor + + belt = /obj/item/pda/medical + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat + l_hand = /obj/item/storage/firstaid/regular + suit_store = /obj/item/flashlight/pen + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + + chameleon_extras = /obj/item/gun/syringe diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm new file mode 100644 index 0000000000..1347da7125 --- /dev/null +++ b/code/modules/jobs/job_types/mime.dm @@ -0,0 +1,49 @@ +/datum/job/mime + title = "Mime" + flag = MIME + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#dddddd" + + outfit = /datum/outfit/job/mime + + access = list(ACCESS_THEATRE) + minimal_access = list(ACCESS_THEATRE) + + display_order = JOB_DISPLAY_ORDER_MIME + +/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M) + H.apply_pref_name("mime", M.client) + +/datum/outfit/job/mime + name = "Mime" + jobtype = /datum/job/mime + + belt = /obj/item/pda/mime + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/mime + mask = /obj/item/clothing/mask/gas/mime + gloves = /obj/item/clothing/gloves/color/white + head = /obj/item/clothing/head/frenchberet + suit = /obj/item/clothing/suit/suspenders + backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing=1) + + backpack = /obj/item/storage/backpack/mime + satchel = /obj/item/storage/backpack/mime + + +/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + + if(visualsOnly) + return + + if(H.mind) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null)) + H.mind.miming = 1 + diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm new file mode 100644 index 0000000000..49a93026ba --- /dev/null +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -0,0 +1,41 @@ +/datum/job/qm + title = "Quartermaster" + flag = QUARTERMASTER + department_head = list("Captain") + department_flag = CIVILIAN + head_announce = list(RADIO_CHANNEL_SUPPLY) +// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#a06121" + req_admin_notify = 1 + minimal_player_age = 7 + exp_requirements = 180 + exp_type = EXP_TYPE_CREW + exp_type_department = EXP_TYPE_SUPPLY + + outfit = /datum/outfit/job/quartermaster + + access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, + ACCESS_MINERAL_STOREROOM, ACCESS_VAULT) + minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, + ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT) + + display_order = JOB_DISPLAY_ORDER_QUARTERMASTER + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) + +/datum/outfit/job/quartermaster + name = "Quartermaster" + jobtype = /datum/job/qm + + belt = /obj/item/pda/quartermaster + ears = /obj/item/radio/headset/headset_cargo + uniform = /obj/item/clothing/under/rank/cargo + shoes = /obj/item/clothing/shoes/sneakers/brown + glasses = /obj/item/clothing/glasses/sunglasses + l_hand = /obj/item/clipboard + + chameleon_extras = /obj/item/stamp/qm + diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm new file mode 100644 index 0000000000..5368ceee64 --- /dev/null +++ b/code/modules/jobs/job_types/research_director.dm @@ -0,0 +1,61 @@ +/datum/job/rd + title = "Research Director" + flag = RD_JF +// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD + department_head = list("Captain") + department_flag = MEDSCI + head_announce = list(RADIO_CHANNEL_SCIENCE) + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#7544cc" + req_admin_notify = 1 + minimal_player_age = 7 + exp_type_department = EXP_TYPE_SCIENCE + exp_requirements = 180 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/rd + + access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE, + ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS, + ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD, + ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, + ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK) + minimal_access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE, + ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS, + ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD, + ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, + ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK) + + display_order = JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) + +/datum/outfit/job/rd + name = "Research Director" + jobtype = /datum/job/rd + + id = /obj/item/card/id/silver + belt = /obj/item/pda/heads/rd + ears = /obj/item/radio/headset/heads/rd + uniform = /obj/item/clothing/under/rank/research_director + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat + l_hand = /obj/item/clipboard + l_pocket = /obj/item/laser_pointer + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1) + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + + chameleon_extras = /obj/item/stamp/rd + +/datum/outfit/job/rd/rig + name = "Research Director (Hardsuit)" + + l_hand = null + mask = /obj/item/clothing/mask/breath + suit = /obj/item/clothing/suit/space/hardsuit/rd + suit_store = /obj/item/tank/internals/oxygen + internals_slot = SLOT_S_STORE diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm new file mode 100644 index 0000000000..782b175ad4 --- /dev/null +++ b/code/modules/jobs/job_types/roboticist.dm @@ -0,0 +1,34 @@ +/datum/job/roboticist + title = "Roboticist" + flag = ROBOTICIST + department_head = list("Research Director") + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the research director" + selection_color = "#9574cd" + exp_requirements = 60 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/roboticist + + access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM, ACCESS_XENOBIOLOGY, ACCESS_GENETICS) + minimal_access = list(ACCESS_ROBOTICS, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_ROBOTICIST + +/datum/outfit/job/roboticist + name = "Roboticist" + jobtype = /datum/job/roboticist + + belt = /obj/item/storage/belt/utility/full + l_pocket = /obj/item/pda/roboticist + ears = /obj/item/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/roboticist + suit = /obj/item/clothing/suit/toggle/labcoat + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + + pda_slot = SLOT_L_STORE diff --git a/code/modules/jobs/job_types/science.dm b/code/modules/jobs/job_types/science.dm deleted file mode 100644 index b58f3faa27..0000000000 --- a/code/modules/jobs/job_types/science.dm +++ /dev/null @@ -1,133 +0,0 @@ -/* -Research Director -*/ -/datum/job/rd - title = "Research Director" - flag = RD_JF - department_head = list("Captain") - department_flag = MEDSCI - head_announce = list(RADIO_CHANNEL_SCIENCE) - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ffddff" - req_admin_notify = 1 - minimal_player_age = 7 - exp_type_department = EXP_TYPE_SCIENCE - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/rd - - access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE, - ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS, - ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD, - ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, - ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK) - minimal_access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE, - ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS, - ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD, - ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, - ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK) - - blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) - -/datum/outfit/job/rd - name = "Research Director" - jobtype = /datum/job/rd - - id = /obj/item/card/id/silver - belt = /obj/item/pda/heads/rd - ears = /obj/item/radio/headset/heads/rd - uniform = /obj/item/clothing/under/rank/research_director - shoes = /obj/item/clothing/shoes/sneakers/brown - suit = /obj/item/clothing/suit/toggle/labcoat - l_hand = /obj/item/clipboard - l_pocket = /obj/item/laser_pointer - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1) - - backpack = /obj/item/storage/backpack/science - satchel = /obj/item/storage/backpack/satchel/tox - - chameleon_extras = /obj/item/stamp/rd - -/datum/outfit/job/rd/rig - name = "Research Director (Hardsuit)" - - l_hand = null - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/hardsuit/rd - suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE - -/* -Scientist -*/ -/datum/job/scientist - title = "Scientist" - flag = SCIENTIST - department_head = list("Research Director") - department_flag = MEDSCI - faction = "Station" - total_positions = 5 - spawn_positions = 3 - supervisors = "the research director" - selection_color = "#ffeeff" - exp_requirements = 60 - exp_type = EXP_TYPE_CREW - - - outfit = /datum/outfit/job/scientist - - access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS) - minimal_access = list(ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/scientist - name = "Scientist" - jobtype = /datum/job/scientist - - belt = /obj/item/pda/toxins - ears = /obj/item/radio/headset/headset_sci - uniform = /obj/item/clothing/under/rank/scientist - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat/science - - backpack = /obj/item/storage/backpack/science - satchel = /obj/item/storage/backpack/satchel/tox - -/* -Roboticist -*/ -/datum/job/roboticist - title = "Roboticist" - flag = ROBOTICIST - department_head = list("Research Director") - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the research director" - selection_color = "#ffeeff" - exp_requirements = 60 - exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/roboticist - - access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM, ACCESS_XENOBIOLOGY, ACCESS_GENETICS) - minimal_access = list(ACCESS_ROBOTICS, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/roboticist - name = "Roboticist" - jobtype = /datum/job/roboticist - - belt = /obj/item/storage/belt/utility/full - l_pocket = /obj/item/pda/roboticist - ears = /obj/item/radio/headset/headset_sci - uniform = /obj/item/clothing/under/rank/roboticist - suit = /obj/item/clothing/suit/toggle/labcoat - - backpack = /obj/item/storage/backpack/science - satchel = /obj/item/storage/backpack/satchel/tox - - pda_slot = SLOT_L_STORE diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm new file mode 100644 index 0000000000..f40a25d6ba --- /dev/null +++ b/code/modules/jobs/job_types/scientist.dm @@ -0,0 +1,33 @@ +/datum/job/scientist + title = "Scientist" + flag = SCIENTIST + department_head = list("Research Director") + department_flag = MEDSCI + faction = "Station" + total_positions = 5 + spawn_positions = 3 + supervisors = "the research director" + selection_color = "#9574cd" + exp_requirements = 60 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/scientist + + access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS) + minimal_access = list(ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_SCIENTIST + +/datum/outfit/job/scientist + name = "Scientist" + jobtype = /datum/job/scientist + + belt = /obj/item/pda/toxins + ears = /obj/item/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/scientist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/science + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm deleted file mode 100644 index 96cedd89ef..0000000000 --- a/code/modules/jobs/job_types/security.dm +++ /dev/null @@ -1,346 +0,0 @@ -//Warden and regular officers add this result to their get_access() -/datum/job/proc/check_config_for_sec_maint() - if(CONFIG_GET(flag/security_has_maint_access)) - return list(ACCESS_MAINT_TUNNELS) - return list() - -/* -Head of Security -*/ -/datum/job/hos - title = "Head of Security" - flag = HOS - department_head = list("Captain") - department_flag = ENGSEC - head_announce = list(RADIO_CHANNEL_SECURITY) - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ffdddd" - req_admin_notify = 1 - minimal_player_age = 14 - exp_requirements = 300 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_SECURITY - - outfit = /datum/outfit/job/hos - - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, - ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, - ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, - ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, - ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, - ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, - ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) - - mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) - - blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/insanity) - -/datum/outfit/job/hos - name = "Head of Security" - jobtype = /datum/job/hos - - id = /obj/item/card/id/silver - belt = /obj/item/pda/heads/hos - ears = /obj/item/radio/headset/heads/hos/alt - uniform = /obj/item/clothing/under/rank/head_of_security - shoes = /obj/item/clothing/shoes/jackboots - suit = /obj/item/clothing/suit/armor/hos/trenchcoat - gloves = /obj/item/clothing/gloves/color/black/hos - head = /obj/item/clothing/head/HoS/beret - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - suit_store = /obj/item/gun/energy/e_gun - r_pocket = /obj/item/assembly/flash/handheld - l_pocket = /obj/item/restraints/handcuffs - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) - - backpack = /obj/item/storage/backpack/security - satchel = /obj/item/storage/backpack/satchel/sec - duffelbag = /obj/item/storage/backpack/duffelbag/sec - box = /obj/item/storage/box/security - - implants = list(/obj/item/implant/mindshield) - - chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos) - -/datum/outfit/job/hos/hardsuit - name = "Head of Security (Hardsuit)" - - mask = /obj/item/clothing/mask/gas/sechailer - suit = /obj/item/clothing/suit/space/hardsuit/security/hos - suit_store = /obj/item/tank/internals/oxygen - backpack_contents = list(/obj/item/melee/baton/loaded=1, /obj/item/gun/energy/e_gun=1) - -/* -Warden -*/ -/datum/job/warden - title = "Warden" - flag = WARDEN - department_head = list("Head of Security") - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of security" - selection_color = "#ffeeee" - minimal_player_age = 7 - exp_requirements = 300 - exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/warden - - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //SEE /DATUM/JOB/WARDEN/GET_ACCESS() - - mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) - blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic) - -/datum/job/warden/get_access() - var/list/L = list() - L = ..() | check_config_for_sec_maint() - return L - -/datum/outfit/job/warden - name = "Warden" - jobtype = /datum/job/warden - - belt = /obj/item/pda/warden - ears = /obj/item/radio/headset/headset_sec/alt - uniform = /obj/item/clothing/under/rank/warden - shoes = /obj/item/clothing/shoes/jackboots - suit = /obj/item/clothing/suit/armor/vest/warden/alt - gloves = /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/warden - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - r_pocket = /obj/item/assembly/flash/handheld - l_pocket = /obj/item/restraints/handcuffs - suit_store = /obj/item/gun/energy/e_gun/advtaser - backpack_contents = list(/obj/item/melee/baton/loaded=1) - - backpack = /obj/item/storage/backpack/security - satchel = /obj/item/storage/backpack/satchel/sec - duffelbag = /obj/item/storage/backpack/duffelbag/sec - box = /obj/item/storage/box/security - - implants = list(/obj/item/implant/mindshield) - - chameleon_extras = /obj/item/gun/ballistic/shotgun/automatic/combat/compact - -/* -Detective -*/ -/datum/job/detective - title = "Detective" - flag = DETECTIVE - department_head = list("Head of Security") - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of security" - selection_color = "#ffeeee" - minimal_player_age = 7 - exp_requirements = 300 - exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/detective - - access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) - - mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) - blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic) - -/datum/outfit/job/detective - name = "Detective" - jobtype = /datum/job/detective - - belt = /obj/item/pda/detective - ears = /obj/item/radio/headset/headset_sec/alt - uniform = /obj/item/clothing/under/rank/det - shoes = /obj/item/clothing/shoes/sneakers/brown - suit = /obj/item/clothing/suit/det_suit - gloves = /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/fedora/det_hat - l_pocket = /obj/item/toy/crayon/white - r_pocket = /obj/item/lighter - backpack_contents = list(/obj/item/storage/box/evidence=1,\ - /obj/item/detective_scanner=1,\ - /obj/item/melee/classic_baton=1) - mask = /obj/item/clothing/mask/cigarette - - implants = list(/obj/item/implant/mindshield) - - chameleon_extras = list(/obj/item/gun/ballistic/revolver/detective, /obj/item/clothing/glasses/sunglasses) - -/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - var/obj/item/clothing/mask/cigarette/cig = H.wear_mask - if(istype(cig)) //Some species specfic changes can mess this up (plasmamen) - cig.light("") - - if(visualsOnly) - return - -/* -Security Officer -*/ -/datum/job/officer - title = "Security Officer" - flag = OFFICER - department_head = list("Head of Security") - department_flag = ENGSEC - faction = "Station" - total_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() - spawn_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() - supervisors = "the head of security, and the head of your assigned department (if applicable)" - selection_color = "#ffeeee" - minimal_player_age = 7 - exp_requirements = 300 - exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/security - - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //BUT SEE /DATUM/JOB/WARDEN/GET_ACCESS() - - mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) - blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic) - -/datum/job/officer/get_access() - var/list/L = list() - L |= ..() | check_config_for_sec_maint() - return L - -GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY)) - -/datum/job/officer/after_spawn(mob/living/carbon/human/H, mob/M) - // Assign department security - var/department - if(M && M.client && M.client.prefs) - department = M.client.prefs.prefered_security_department - if(!LAZYLEN(GLOB.available_depts) || department == "None") - return - else if(department in GLOB.available_depts) - LAZYREMOVE(GLOB.available_depts, department) - else - department = pick_n_take(GLOB.available_depts) - var/ears = null - var/accessory = null - var/list/dep_access = null - var/destination = null - var/spawn_point = null - switch(department) - if(SEC_DEPT_SUPPLY) - ears = /obj/item/radio/headset/headset_sec/alt/department/supply - dep_access = list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION) - destination = /area/security/checkpoint/supply - spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in GLOB.department_security_spawns - accessory = /obj/item/clothing/accessory/armband/cargo - if(SEC_DEPT_ENGINEERING) - ears = /obj/item/radio/headset/headset_sec/alt/department/engi - dep_access = list(ACCESS_CONSTRUCTION, ACCESS_ENGINE) - destination = /area/security/checkpoint/engineering - spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in GLOB.department_security_spawns - accessory = /obj/item/clothing/accessory/armband/engine - if(SEC_DEPT_MEDICAL) - ears = /obj/item/radio/headset/headset_sec/alt/department/med - dep_access = list(ACCESS_MEDICAL) - destination = /area/security/checkpoint/medical - spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in GLOB.department_security_spawns - accessory = /obj/item/clothing/accessory/armband/medblue - if(SEC_DEPT_SCIENCE) - ears = /obj/item/radio/headset/headset_sec/alt/department/sci - dep_access = list(ACCESS_RESEARCH) - destination = /area/security/checkpoint/science - spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns - accessory = /obj/item/clothing/accessory/armband/science - - if(accessory) - var/obj/item/clothing/under/U = H.w_uniform - U.attach_accessory(new accessory) - if(ears) - if(H.ears) - qdel(H.ears) - H.equip_to_slot_or_del(new ears(H),SLOT_EARS) - - var/obj/item/card/id/W = H.wear_id - W.access |= dep_access - - var/teleport = 0 - if(!CONFIG_GET(flag/sec_start_brig)) - if(destination || spawn_point) - teleport = 1 - if(teleport) - var/turf/T - if(spawn_point) - T = get_turf(spawn_point) - H.Move(T) - else - var/safety = 0 - while(safety < 25) - T = safepick(get_area_turfs(destination)) - if(T && !H.Move(T)) - safety += 1 - continue - else - break - if(department) - to_chat(M, "You have been assigned to [department]!") - else - to_chat(M, "You have not been assigned to any department. Patrol the halls and help where needed.") - - - -/datum/outfit/job/security - name = "Security Officer" - jobtype = /datum/job/officer - - belt = /obj/item/pda/security - ears = /obj/item/radio/headset/headset_sec/alt - uniform = /obj/item/clothing/under/rank/security - gloves = /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/helmet/sec - suit = /obj/item/clothing/suit/armor/vest/alt - shoes = /obj/item/clothing/shoes/jackboots - l_pocket = /obj/item/restraints/handcuffs - r_pocket = /obj/item/assembly/flash/handheld - suit_store = /obj/item/gun/energy/e_gun/advtaser - backpack_contents = list(/obj/item/melee/baton/loaded=1) - - backpack = /obj/item/storage/backpack/security - satchel = /obj/item/storage/backpack/satchel/sec - duffelbag = /obj/item/storage/backpack/duffelbag/sec - box = /obj/item/storage/box/security - - implants = list(/obj/item/implant/mindshield) - - chameleon_extras = list(/obj/item/gun/energy/e_gun/advtaser, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet) - //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state - - -/obj/item/radio/headset/headset_sec/alt/department/Initialize() - . = ..() - wires = new/datum/wires/radio(src) - secure_radio_connections = new - recalculateChannels() - -/obj/item/radio/headset/headset_sec/alt/department/engi - keyslot = new /obj/item/encryptionkey/headset_sec - keyslot2 = new /obj/item/encryptionkey/headset_eng - -/obj/item/radio/headset/headset_sec/alt/department/supply - keyslot = new /obj/item/encryptionkey/headset_sec - keyslot2 = new /obj/item/encryptionkey/headset_cargo - -/obj/item/radio/headset/headset_sec/alt/department/med - keyslot = new /obj/item/encryptionkey/headset_sec - keyslot2 = new /obj/item/encryptionkey/headset_med - -/obj/item/radio/headset/headset_sec/alt/department/sci - keyslot = new /obj/item/encryptionkey/headset_sec - keyslot2 = new /obj/item/encryptionkey/headset_sci diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm new file mode 100644 index 0000000000..4f12d6a19c --- /dev/null +++ b/code/modules/jobs/job_types/security_officer.dm @@ -0,0 +1,159 @@ +/datum/job/officer + title = "Security Officer" + flag = OFFICER +// auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY + department_head = list("Head of Security") + department_flag = ENGSEC + faction = "Station" + total_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() + spawn_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() + supervisors = "the head of security, and the head of your assigned department (if applicable)" + selection_color = "#c02f2f" + minimal_player_age = 7 + exp_requirements = 300 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/security + + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) // See /datum/job/officer/get_access() + + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic) + +/datum/job/officer/get_access() + var/list/L = list() + L |= ..() | check_config_for_sec_maint() + return L + +GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY)) + +/datum/job/officer/after_spawn(mob/living/carbon/human/H, mob/M) + . = ..() + // Assign department security + var/department + if(M && M.client && M.client.prefs) + department = M.client.prefs.prefered_security_department + if(!LAZYLEN(GLOB.available_depts) || department == "None") + return + else if(department in GLOB.available_depts) + LAZYREMOVE(GLOB.available_depts, department) + else + department = pick_n_take(GLOB.available_depts) + var/ears = null + var/accessory = null + var/list/dep_access = null + var/destination = null + var/spawn_point = null + switch(department) + if(SEC_DEPT_SUPPLY) + ears = /obj/item/radio/headset/headset_sec/alt/department/supply + dep_access = list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_CARGO) + destination = /area/security/checkpoint/supply + spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/cargo + if(SEC_DEPT_ENGINEERING) + ears = /obj/item/radio/headset/headset_sec/alt/department/engi + dep_access = list(ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_ATMOSPHERICS) + destination = /area/security/checkpoint/engineering + spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/engine + if(SEC_DEPT_MEDICAL) + ears = /obj/item/radio/headset/headset_sec/alt/department/med + dep_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING) + destination = /area/security/checkpoint/medical + spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/medblue + if(SEC_DEPT_SCIENCE) + ears = /obj/item/radio/headset/headset_sec/alt/department/sci + dep_access = list(ACCESS_RESEARCH, ACCESS_TOX) + destination = /area/security/checkpoint/science + spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/science + + if(accessory) + var/obj/item/clothing/under/U = H.w_uniform + U.attach_accessory(new accessory) + if(ears) + if(H.ears) + qdel(H.ears) + H.equip_to_slot_or_del(new ears(H),SLOT_EARS) + + var/obj/item/card/id/W = H.wear_id + W.access |= dep_access + + var/teleport = 0 + if(!CONFIG_GET(flag/sec_start_brig)) + if(destination || spawn_point) + teleport = 1 + if(teleport) + var/turf/T + if(spawn_point) + T = get_turf(spawn_point) + H.Move(T) + else + var/safety = 0 + while(safety < 25) + T = safepick(get_area_turfs(destination)) + if(T && !H.Move(T)) + safety += 1 + continue + else + break + if(department) + to_chat(M, "You have been assigned to [department]!") + else + to_chat(M, "You have not been assigned to any department. Patrol the halls and help where needed.") + + + +/datum/outfit/job/security + name = "Security Officer" + jobtype = /datum/job/officer + + belt = /obj/item/pda/security + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/security + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/helmet/sec + suit = /obj/item/clothing/suit/armor/vest/alt + shoes = /obj/item/clothing/shoes/jackboots + l_pocket = /obj/item/restraints/handcuffs + r_pocket = /obj/item/assembly/flash/handheld + suit_store = /obj/item/gun/energy/e_gun/advtaser + backpack_contents = list(/obj/item/melee/baton/loaded=1) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + box = /obj/item/storage/box/security + + implants = list(/obj/item/implant/mindshield) + + chameleon_extras = list(/obj/item/gun/energy/disabler, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet) + //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state + + +/obj/item/radio/headset/headset_sec/alt/department/Initialize() + . = ..() + wires = new/datum/wires/radio(src) + secure_radio_connections = new + recalculateChannels() + +/obj/item/radio/headset/headset_sec/alt/department/engi + keyslot = new /obj/item/encryptionkey/headset_sec + keyslot2 = new /obj/item/encryptionkey/headset_eng + +/obj/item/radio/headset/headset_sec/alt/department/supply + keyslot = new /obj/item/encryptionkey/headset_sec + keyslot2 = new /obj/item/encryptionkey/headset_cargo + +/obj/item/radio/headset/headset_sec/alt/department/med + keyslot = new /obj/item/encryptionkey/headset_sec + keyslot2 = new /obj/item/encryptionkey/headset_med + +/obj/item/radio/headset/headset_sec/alt/department/sci + keyslot = new /obj/item/encryptionkey/headset_sec + keyslot2 = new /obj/item/encryptionkey/headset_sci diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm new file mode 100644 index 0000000000..ef16d8e53f --- /dev/null +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -0,0 +1,77 @@ +/datum/job/mining + title = "Shaft Miner" + flag = MINER + department_head = list("Quartermaster") + department_flag = CIVILIAN + faction = "Station" + total_positions = 3 + spawn_positions = 3 + supervisors = "the quartermaster" + selection_color = "#ca8f55" + custom_spawn_text = "Remember, you are a miner, not a hunter. Hunting monsters is not a requirement of your job, the only requirement of your job is to provide materials for the station. Don't be afraid to run away if you're inexperienced with fighting the mining area's locals." + + + outfit = /datum/outfit/job/miner + + access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_SHAFT_MINER + +/datum/outfit/job/miner + name = "Shaft Miner (Lavaland)" + jobtype = /datum/job/mining + + belt = /obj/item/pda/shaftminer + ears = /obj/item/radio/headset/headset_cargo/mining + shoes = /obj/item/clothing/shoes/workboots/mining + gloves = /obj/item/clothing/gloves/color/black + uniform = /obj/item/clothing/under/rank/miner/lavaland + l_pocket = /obj/item/reagent_containers/hypospray/medipen/survival + r_pocket = /obj/item/storage/bag/ore //causes issues if spawned in backpack + backpack_contents = list( + /obj/item/flashlight/seclite=1,\ + /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/mining_voucher=1,\ + /obj/item/suit_voucher=1,\ + /obj/item/stack/marker_beacon/ten=1) + + backpack = /obj/item/storage/backpack/explorer + satchel = /obj/item/storage/backpack/satchel/explorer + duffelbag = /obj/item/storage/backpack/duffelbag + box = /obj/item/storage/box/survival_mining + + chameleon_extras = /obj/item/gun/energy/kinetic_accelerator + +/datum/outfit/job/miner/asteroid + name = "Shaft Miner (Asteroid)" + uniform = /obj/item/clothing/under/rank/miner + shoes = /obj/item/clothing/shoes/workboots + +/datum/outfit/job/miner/equipped + name = "Shaft Miner (Lavaland + Equipment)" + suit = /obj/item/clothing/suit/hooded/explorer/standard + mask = /obj/item/clothing/mask/gas/explorer + glasses = /obj/item/clothing/glasses/meson + suit_store = /obj/item/tank/internals/oxygen + internals_slot = SLOT_S_STORE + backpack_contents = list( + /obj/item/flashlight/seclite=1,\ + /obj/item/kitchen/knife/combat/survival=1, + /obj/item/mining_voucher=1, + /obj/item/t_scanner/adv_mining_scanner/lesser=1, + /obj/item/gun/energy/kinetic_accelerator=1,\ + /obj/item/stack/marker_beacon/ten=1) + +/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + if(istype(H.wear_suit, /obj/item/clothing/suit/hooded)) + var/obj/item/clothing/suit/hooded/S = H.wear_suit + S.ToggleHood() + +/datum/outfit/job/miner/equipped/hardsuit + name = "Shaft Miner (Equipment + Hardsuit)" + suit = /obj/item/clothing/suit/space/hardsuit/mining + mask = /obj/item/clothing/mask/breath diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm new file mode 100644 index 0000000000..55381549ba --- /dev/null +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -0,0 +1,54 @@ +/datum/job/engineer + title = "Station Engineer" + flag = ENGINEER + department_head = list("Chief Engineer") + department_flag = ENGSEC + faction = "Station" + total_positions = 5 + spawn_positions = 5 + supervisors = "the chief engineer" + selection_color = "#ff9b3d" + exp_requirements = 60 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/engineer + + access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, + ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, + ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER + +/datum/outfit/job/engineer + name = "Station Engineer" + jobtype = /datum/job/engineer + + belt = /obj/item/storage/belt/utility/full/engi + l_pocket = /obj/item/pda/engineering + ears = /obj/item/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/engineer + shoes = /obj/item/clothing/shoes/workboots + head = /obj/item/clothing/head/hardhat + r_pocket = /obj/item/t_scanner + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + box = /obj/item/storage/box/engineer + pda_slot = SLOT_L_STORE + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + +/datum/outfit/job/engineer/gloved + name = "Station Engineer (Gloves)" + gloves = /obj/item/clothing/gloves/color/yellow + +/datum/outfit/job/engineer/gloved/rig + name = "Station Engineer (Hardsuit)" + mask = /obj/item/clothing/mask/breath + suit = /obj/item/clothing/suit/space/hardsuit/engine + suit_store = /obj/item/tank/internals/oxygen + head = null + internals_slot = SLOT_S_STORE + + diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm new file mode 100644 index 0000000000..dcc13af627 --- /dev/null +++ b/code/modules/jobs/job_types/virologist.dm @@ -0,0 +1,35 @@ +/datum/job/virologist + title = "Virologist" + flag = VIROLOGIST + department_head = list("Chief Medical Officer") + department_flag = MEDSCI + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the chief medical officer" + selection_color = "#74b5e0" + exp_type = EXP_TYPE_CREW + exp_requirements = 60 + + outfit = /datum/outfit/job/virologist + + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_MEDICAL, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM) + + display_order = JOB_DISPLAY_ORDER_VIROLOGIST + +/datum/outfit/job/virologist + name = "Virologist" + jobtype = /datum/job/virologist + + belt = /obj/item/pda/viro + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/virologist + mask = /obj/item/clothing/mask/surgical + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/virologist + suit_store = /obj/item/flashlight/pen + + backpack = /obj/item/storage/backpack/virology + satchel = /obj/item/storage/backpack/satchel/vir + duffelbag = /obj/item/storage/backpack/duffelbag/med diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm new file mode 100644 index 0000000000..a5c16ab5cf --- /dev/null +++ b/code/modules/jobs/job_types/warden.dm @@ -0,0 +1,56 @@ +/datum/job/warden + title = "Warden" + flag = WARDEN +// auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY + department_head = list("Head of Security") + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of security" + selection_color = "#c02f2f" + minimal_player_age = 7 + exp_requirements = 300 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/warden + + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) // See /datum/job/warden/get_access() + + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_WARDEN + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic) + +/datum/job/warden/get_access() + var/list/L = list() + L = ..() | check_config_for_sec_maint() + return L + +/datum/outfit/job/warden + name = "Warden" + jobtype = /datum/job/warden + + belt = /obj/item/pda/warden + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/warden + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/vest/warden/alt + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/warden + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + r_pocket = /obj/item/assembly/flash/handheld + l_pocket = /obj/item/restraints/handcuffs + suit_store = /obj/item/gun/energy/e_gun/advtaser + backpack_contents = list(/obj/item/melee/baton/loaded=1) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + box = /obj/item/storage/box/security + + implants = list(/obj/item/implant/mindshield) + + chameleon_extras = /obj/item/gun/ballistic/shotgun/automatic/combat/compact + diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm index 548a734f74..2b8bfa6860 100644 --- a/code/modules/keybindings/bindings_client.dm +++ b/code/modules/keybindings/bindings_client.dm @@ -4,7 +4,42 @@ set instant = TRUE set hidden = TRUE + client_keysend_amount += 1 + + var/cache = client_keysend_amount + + if(keysend_tripped && next_keysend_trip_reset <= world.time) + keysend_tripped = FALSE + + if(next_keysend_reset <= world.time) + client_keysend_amount = 0 + next_keysend_reset = world.time + (1 SECONDS) + + //The "tripped" system is to confirm that flooding is still happening after one spike + //not entirely sure how byond commands interact in relation to lag + //don't want to kick people if a lag spike results in a huge flood of commands being sent + if(cache >= MAX_KEYPRESS_AUTOKICK) + if(!keysend_tripped) + keysend_tripped = TRUE + next_keysend_trip_reset = world.time + (2 SECONDS) + else + log_admin("Client [ckey] was just autokicked for flooding keysends; likely abuse but potentially lagspike.") + message_admins("Client [ckey] was just autokicked for flooding keysends; likely abuse but potentially lagspike.") + QDEL_IN(src, 1) + return + + ///Check if the key is short enough to even be a real key + if(LAZYLEN(_key) > MAX_KEYPRESS_COMMANDLENGTH) + to_chat(src, "Invalid KeyDown detected! You have been disconnected from the server automatically.") + log_admin("Client [ckey] just attempted to send an invalid keypress. Keymessage was over [MAX_KEYPRESS_COMMANDLENGTH] characters, autokicking due to likely abuse.") + message_admins("Client [ckey] just attempted to send an invalid keypress. Keymessage was over [MAX_KEYPRESS_COMMANDLENGTH] characters, autokicking due to likely abuse.") + QDEL_IN(src, 1) + return + //offset by 1 because the buffer address is 0 indexed because the math was simpler + keys_held[current_key_address + 1] = _key + //the time a key was pressed isn't actually used anywhere (as of 2019-9-10) but this allows easier access usage/checking keys_held[_key] = world.time + current_key_address = ((current_key_address + 1) % HELD_KEY_BUFFER_LENGTH) var/movement = SSinput.movement_keys[_key] if(!(next_move_dir_sub & movement) && !keys_held["Ctrl"]) next_move_dir_add |= movement @@ -35,7 +70,11 @@ set instant = TRUE set hidden = TRUE - keys_held -= _key + //Can't just do a remove because it would alter the length of the rolling buffer, instead search for the key then null it out if it exists + for(var/i in 1 to HELD_KEY_BUFFER_LENGTH) + if(keys_held[i] == _key) + keys_held[i] = null + break var/movement = SSinput.movement_keys[_key] if(!(next_move_dir_add & movement)) next_move_dir_sub |= movement diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index 54df252f5d..8433c9bf5a 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -1,9 +1,14 @@ /client - var/list/keys_held = list() // A list of any keys held currently - // These next two vars are to apply movement for keypresses and releases made while move delayed. - // Because discarding that input makes the game less responsive. - var/next_move_dir_add // On next move, add this dir to the move that would otherwise be done - var/next_move_dir_sub // On next move, subtract this dir from the move that would otherwise be done + /// A rolling buffer of any keys held currently + var/list/keys_held = list() + ///used to keep track of the current rolling buffer position + var/current_key_address = 0 + /// These next two vars are to apply movement for keypresses and releases made while move delayed. + /// Because discarding that input makes the game less responsive. + /// On next move, add this dir to the move that would otherwise be done + var/next_move_dir_add + /// On next move, subtract this dir from the move that would otherwise be done + var/next_move_dir_sub // Set a client's focus to an object and override these procs on that object to let it handle keypresses @@ -31,6 +36,11 @@ /client/proc/set_macros() set waitfor = FALSE + //Reset and populate the rolling buffer + keys_held.Cut() + for(var/i in 1 to HELD_KEY_BUFFER_LENGTH) + keys_held += null + erase_all_macros() var/list/macro_sets = SSinput.macro_sets diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 750805ae93..fa172ab604 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -13,8 +13,12 @@ canmove = FALSE anchored = TRUE // don't get pushed around + var/mob/living/new_character //for instant transfer once the round is set up + //Used to make sure someone doesn't get spammed with messages if they're ineligible for roles + var/ineligible_for_roles = FALSE + /mob/dead/new_player/Initialize() if(client && SSticker.state == GAME_STATE_STARTUP) var/obj/screen/splash/S = new(client, TRUE, TRUE) @@ -34,7 +38,7 @@ /mob/dead/new_player/proc/new_player_panel() var/output = "

Welcome, [client ? client.prefs.real_name : "Unknown User"]

" - output += "

Setup Character

" + output += "

Setup Character

" if(SSticker.current_state <= GAME_STATE_PREGAME) switch(ready) @@ -75,7 +79,7 @@ var/datum/browser/popup = new(src, "playersetup", "
New Player Options
", 250, 265) popup.set_window_options("can_close=0") popup.set_content(output) - popup.open(0) + popup.open(FALSE) /mob/dead/new_player/Topic(href, href_list[]) if(src != usr) @@ -432,6 +436,8 @@ var/level = "green" switch(GLOB.security_level) + if(SEC_LEVEL_GREEN) + level = "green" if(SEC_LEVEL_BLUE) level = "blue" if(SEC_LEVEL_AMBER) @@ -439,10 +445,9 @@ if(SEC_LEVEL_RED) level = "red" if(SEC_LEVEL_DELTA) - level = "delta" + level = "delta" var/dat = "
Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time)]
Alert Level: [capitalize(level)]
" - if(SSshuttle.emergency) switch(SSshuttle.emergency.mode) if(SHUTTLE_ESCAPE) @@ -450,37 +455,62 @@ if(SHUTTLE_CALL) if(!SSshuttle.canRecall()) dat += "
The station is currently undergoing evacuation procedures.

" + for(var/datum/job/prioritized_job in SSjob.prioritized_jobs) + if(prioritized_job.current_positions >= prioritized_job.total_positions) + SSjob.prioritized_jobs -= prioritized_job + dat += "
" + var/column_counter = 0 + var/free_space = 0 + for(var/list/category in list(GLOB.command_positions) + list(GLOB.supply_positions) + list(GLOB.engineering_positions) + list(GLOB.nonhuman_positions - "pAI") + list(GLOB.civilian_positions) + list(GLOB.medical_positions) + list(GLOB.science_positions) + list(GLOB.security_positions)) + var/cat_color = "fff" //random default + if(SSjob.name_occupations && SSjob.name_occupations[category[1]]) + cat_color = SSjob.name_occupations[category[1]].selection_color //use the color of the first job in the category (the department head) as the category color + else + cat_color = SSjob.occupations[category[1]].selection_color + dat += "
" + dat += "[SSjob.name_occupations[category[1]].exp_type_department]" - var/available_job_count = 0 - for(var/datum/job/job in SSjob.occupations) - if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE) - available_job_count++ + var/list/dept_dat = list() + for(var/job in category) + var/datum/job/job_datum = SSjob.name_occupations[job] + if(job_datum && IsJobUnavailable(job_datum.title, TRUE) == JOB_AVAILABLE) + var/command_bold = "" + if(job in GLOB.command_positions) + command_bold = " command" + if(job_datum in SSjob.prioritized_jobs) + dept_dat += "[job_datum.title] ([job_datum.current_positions])" + else + dept_dat += "[job_datum.title] ([job_datum.current_positions])" + if(!dept_dat.len) + dept_dat += "No positions open." + dat += jointext(dept_dat, "") + dat += "

" + column_counter++ + if(free_space <=4) + free_space++ + if(column_counter > 0 && (column_counter % 3 == 0)) + dat += "
" + if(free_space >= 5 && (free_space % 5 == 0) && (column_counter % 3 != 0)) + free_space = 0 + column_counter = 0 + dat += "" + + dat += "
" + + var/available_ghosts = 0 for(var/spawner in GLOB.mob_spawners) if(!LAZYLEN(spawner)) continue var/obj/effect/mob_spawn/S = pick(GLOB.mob_spawners[spawner]) if(!istype(S) || !S.can_latejoin()) continue - available_job_count++ + available_ghosts++ break - if(!available_job_count) - dat += "
There are currently no open positions!
" - + if(!available_ghosts) + dat += "
There are currently no open ghost spawners.
" else - dat += "
Choose from the following open positions:

" - var/list/categorizedJobs = list( - "Command" = list(jobs = list(), titles = GLOB.command_positions, color = "#aac1ee"), - "Engineering" = list(jobs = list(), titles = GLOB.engineering_positions, color = "#ffd699"), - "Supply" = list(jobs = list(), titles = GLOB.supply_positions, color = "#ead4ae"), - "Miscellaneous" = list(jobs = list(), titles = list(), color = "#ffffff", colBreak = TRUE), - "Ghost Role" = list(jobs = list(), titles = GLOB.mob_spawners, color = "#ffffff"), - "Synthetic" = list(jobs = list(), titles = GLOB.nonhuman_positions, color = "#ccffcc"), - "Service" = list(jobs = list(), titles = GLOB.civilian_positions, color = "#cccccc"), - "Medical" = list(jobs = list(), titles = GLOB.medical_positions, color = "#99ffe6", colBreak = TRUE), - "Science" = list(jobs = list(), titles = GLOB.science_positions, color = "#e6b3e6"), - "Security" = list(jobs = list(), titles = GLOB.security_positions, color = "#ff9999"), - ) + var/list/categorizedJobs = list("Ghost Role" = list(jobs = list(), titles = GLOB.mob_spawners, color = "#ffffff")) for(var/spawner in GLOB.mob_spawners) if(!LAZYLEN(spawner)) continue @@ -489,47 +519,13 @@ continue categorizedJobs["Ghost Role"]["jobs"] += spawner - for(var/datum/job/job in SSjob.occupations) - if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE) - var/categorized = FALSE - for(var/jobcat in categorizedJobs) - var/list/jobs = categorizedJobs[jobcat]["jobs"] - if(job.title in categorizedJobs[jobcat]["titles"]) - categorized = TRUE - if(jobcat == "Command") - - if(job.title == "Captain") // Put captain at top of command jobs - jobs.Insert(1, job) - else - jobs += job - else // Put heads at top of non-command jobs - if(job.title in GLOB.command_positions) - jobs.Insert(1, job) - else - jobs += job - if(!categorized) - categorizedJobs["Miscellaneous"]["jobs"] += job - - - dat += "\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"
" + dat += "
" for(var/jobcat in categorizedJobs) - if(categorizedJobs[jobcat]["colBreak"]) - dat += "" if(!length(categorizedJobs[jobcat]["jobs"])) continue var/color = categorizedJobs[jobcat]["color"] dat += "
" dat += "[jobcat]" - for(var/datum/job/job in categorizedJobs[jobcat]["jobs"]) - var/position_class = "otherPosition" - if(job.title in GLOB.command_positions) - position_class = "commandPosition" - if(job in SSjob.prioritized_jobs) - dat += "[job.title] ([job.current_positions])" - else - dat += "[job.title] ([job.current_positions])" - categorizedJobs[jobcat]["jobs"] -= job - for(var/spawner in categorizedJobs[jobcat]["jobs"]) dat += "[spawner]" @@ -537,16 +533,11 @@ dat += "
" dat += "" - // Removing the old window method but leaving it here for reference - //src << browse(dat, "window=latechoices;size=300x640;can_close=1") - - // Added the new browser window method - var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 680, 580) + var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 720, 600) popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css') - popup.set_content(dat) + popup.set_content(jointext(dat, "")) popup.open(FALSE) // FALSE is passed to open so that it doesn't use the onclose() proc - /mob/dead/new_player/proc/create_character(transfer_after) spawning = 1 close_spawn_windows() @@ -602,3 +593,31 @@ src << browse(null, "window=preferences") //closes job selection src << browse(null, "window=mob_occupation") src << browse(null, "window=latechoices") //closes late job selection + +/* Used to make sure that a player has a valid job preference setup, used to knock players out of eligibility for anything if their prefs don't make sense. + A "valid job preference setup" in this situation means at least having one job set to low, or not having "return to lobby" enabled + Prevents "antag rolling" by setting antag prefs on, all jobs to never, and "return to lobby if preferences not availible" + Doing so would previously allow you to roll for antag, then send you back to lobby if you didn't get an antag role + This also does some admin notification and logging as well, as well as some extra logic to make sure things don't go wrong +*/ + +/mob/dead/new_player/proc/check_preferences() + if(!client) + return FALSE //Not sure how this would get run without the mob having a client, but let's just be safe. + if(client.prefs.joblessrole != RETURNTOLOBBY) + return TRUE + // If they have antags enabled, they're potentially doing this on purpose instead of by accident. Notify admins if so. + var/has_antags = FALSE + if(client.prefs.be_special.len > 0) + has_antags = TRUE + if(client.prefs.job_preferences.len == 0) + if(!ineligible_for_roles) + to_chat(src, "You have no jobs enabled, along with return to lobby if job is unavailable. This makes you ineligible for any round start role, please update your job preferences.") + ineligible_for_roles = TRUE + ready = PLAYER_NOT_READY + if(has_antags) + log_admin("[src.ckey] just got booted back to lobby with no jobs, but antags enabled.") + message_admins("[src.ckey] just got booted back to lobby with no jobs enabled, but antag rolling enabled. Likely antag rolling abuse.") + + return FALSE //This is the only case someone should actually be completely blocked from antag rolling as well + return TRUE diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 6e91b58506..994d082585 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -24,50 +24,35 @@ age = rand(AGE_MIN,AGE_MAX) /datum/preferences/proc/update_preview_icon() - // Silicons only need a very basic preview since there is no customization for them. -// var/wide_icon = FALSE //CITDEL THINGS -// if(features["taur"] != "None") -// wide_icon = TRUE - if(job_engsec_high) - switch(job_engsec_high) - if(AI_JF) - parent.show_character_previews(image('icons/mob/ai.dmi', resolve_ai_icon(preferred_ai_core_display), dir = SOUTH)) - return - if(CYBORG) - parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH)) - return + // Determine what job is marked as 'High' priority, and dress them up as such. + var/datum/job/previewJob + var/highest_pref = 0 + for(var/job in job_preferences) + if(job_preferences["[job]"] > highest_pref) + previewJob = SSjob.GetJob(job) + highest_pref = job_preferences["[job]"] + + if(previewJob) + // Silicons only need a very basic preview since there is no customization for them. + if(istype(previewJob,/datum/job/ai)) + parent.show_character_previews(image('icons/mob/ai.dmi', icon_state = resolve_ai_icon(preferred_ai_core_display), dir = SOUTH)) + return + if(istype(previewJob,/datum/job/cyborg)) + parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH)) + return // Set up the dummy for its photoshoot var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) mannequin.cut_overlays() + // Apply the Dummy's preview background first so we properly layer everything else on top of it. mannequin.add_overlay(mutable_appearance('modular_citadel/icons/ui/backgrounds.dmi', bgstate, layer = SPACE_LAYER)) copy_to(mannequin) - // Determine what job is marked as 'High' priority, and dress them up as such. - var/datum/job/previewJob - var/highRankFlag = job_civilian_high | job_medsci_high | job_engsec_high - - if(job_civilian_low & ASSISTANT) - previewJob = SSjob.GetJob("Assistant") - else if(highRankFlag) - var/highDeptFlag - if(job_civilian_high) - highDeptFlag = CIVILIAN - else if(job_medsci_high) - highDeptFlag = MEDSCI - else if(job_engsec_high) - highDeptFlag = ENGSEC - - for(var/datum/job/job in SSjob.occupations) - if(job.flag == highRankFlag && job.department_flag == highDeptFlag) - previewJob = job - break - if(previewJob) - if(current_tab != 2) - mannequin.job = previewJob.title - previewJob.equip(mannequin, TRUE) + mannequin.job = previewJob.title + previewJob.equip(mannequin, TRUE, preference_source = parent) COMPILE_OVERLAYS(mannequin) parent.show_character_previews(new /mutable_appearance(mannequin)) unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) + diff --git a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm new file mode 100644 index 0000000000..020776a75f --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm @@ -0,0 +1,53 @@ +/datum/sprite_accessory/mam_tails/shark/datashark + name = "DataShark" + icon_state = "datashark" + ckeys_allowed = list("rubyflamewing") + +/datum/sprite_accessory/mam_tails_animated/shark/datashark + name = "DataShark" + icon_state = "datashark" + ckeys_allowed = list("rubyflamewing") + +/datum/sprite_accessory/mam_body_markings/shark/datashark + name = "DataShark" + icon_state = "datashark" + ckeys_allowed = list("rubyflamewing") + +//Sabresune +/datum/sprite_accessory/mam_ears/sabresune + name = "Sabresune" + icon_state = "sabresune" + ckeys_allowed = list("poojawa") + extra = TRUE + extra_color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_tails/sabresune + name = "Sabresune" + icon_state = "sabresune" + ckeys_allowed = list("poojawa") + +/datum/sprite_accessory/mam_tails_animated/sabresune + name = "Sabresune" + icon_state = "sabresune" + ckeys_allowed = list("poojawa") + +/datum/sprite_accessory/mam_body_markings/sabresune + name = "Sabresune" + icon_state = "sabresune" + ckeys_allowed = list("poojawa") + +//Lunasune +/datum/sprite_accessory/mam_ears/lunasune + name = "lunasune" + icon_state = "lunasune" + ckeys_allowed = list("invader4352") + +/datum/sprite_accessory/mam_tails/lunasune + name = "lunasune" + icon_state = "lunasune" + ckeys_allowed = list("invader4352") + +/datum/sprite_accessory/mam_tails_animated/lunasune + name = "lunasune" + icon_state = "lunasune" + ckeys_allowed = list("invader4352") diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm index 5e24d0630b..dd66f68e5d 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm @@ -61,6 +61,17 @@ var/dimension_y = 32 var/center = FALSE //Should we center the sprite? + //Special / holdover traits for Citadel specific sprites. + var/extra = FALSE + var/extra_color_src = MUTCOLORS2 //The color source for the extra overlay. + var/extra_icon = 'modular_citadel/icons/mob/mam_tails.dmi' + var/extra2 = FALSE + var/extra2_color_src = MUTCOLORS3 + var/extra2_icon = 'modular_citadel/icons/mob/mam_tails.dmi' + + //for snowflake/donor specific sprites + var/list/ckeys_allowed + /datum/sprite_accessory/underwear icon = 'icons/mob/underwear.dmi' var/has_color = FALSE \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm b/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm new file mode 100644 index 0000000000..6c0659f851 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm @@ -0,0 +1,53 @@ + +/****************************************** +*********** Xeno Dorsal Tubes ************* +*******************************************/ +/datum/sprite_accessory/xeno_dorsal + icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi' + +/datum/sprite_accessory/xeno_dorsal/standard + name = "Standard" + icon_state = "standard" + +/datum/sprite_accessory/xeno_dorsal/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/xeno_dorsal/down + name = "Dorsal Down" + icon_state = "down" + +/****************************************** +************* Xeno Tails ****************** +*******************************************/ +/datum/sprite_accessory/xeno_tail + icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi' + +/datum/sprite_accessory/xeno_tail/none + name = "None" + +/datum/sprite_accessory/xeno_tail/standard + name = "Xenomorph Tail" + icon_state = "xeno" + +/****************************************** +************* Xeno Heads ****************** +*******************************************/ +/datum/sprite_accessory/xeno_head + icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi' + +/datum/sprite_accessory/xeno_head/standard + name = "Standard" + icon_state = "standard" + +/datum/sprite_accessory/xeno_head/royal + name = "royal" + icon_state = "royal" + +/datum/sprite_accessory/xeno_head/hollywood + name = "hollywood" + icon_state = "hollywood" + +/datum/sprite_accessory/xeno_head/warrior + name = "warrior" + icon_state = "warrior" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index 6bce18d7ce..2f1d48cfa7 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -1,6 +1,6 @@ -//////////.////////////////// -// MutantParts Definitions // -///////////////////////////// +/****************************************** +************* Lizard Markings ************* +*******************************************/ /datum/sprite_accessory/body_markings icon = 'icons/mob/mutant_bodyparts.dmi' @@ -22,4 +22,271 @@ /datum/sprite_accessory/body_markings/lbelly name = "Light Belly" icon_state = "lbelly" - gender_specific = 1 \ No newline at end of file + gender_specific = 1 + +/****************************************** +************ Furry Markings *************** +*******************************************/ + +// These are all color matrixed and applied per-limb by default. you MUST comply with this if you want to have your markings work --Pooj +// use the HumanScissors tool to break your sprite up into the zones easier. +// Although Byond supposedly doesn't have an icon limit anymore of 512 states after 512.1478, just be careful about too many additions. + +/datum/sprite_accessory/mam_body_markings + extra = FALSE + extra2 = FALSE + color_src = MATRIXED + gender_specific = 0 + icon = 'modular_citadel/icons/mob/mam_markings.dmi' + +/datum/sprite_accessory/mam_body_markings/none + name = "None" + icon_state = "none" + ckeys_allowed = list("yousshouldnteverbeseeingthisyoumeme") + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/plain + name = "Plain" + icon_state = "plain" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/redpanda + name = "Redpanda" + icon_state = "redpanda" + +/datum/sprite_accessory/mam_body_markings/bee + name = "Bee" + icon_state = "bee" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/belly + name = "Belly" + icon_state = "belly" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/bellyslim + name = "Bellyslim" + icon_state = "bellyslim" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/corgi + name = "Corgi" + icon_state = "corgi" + +/datum/sprite_accessory/mam_body_markings/cow + name = "Bovine" + icon_state = "bovine" + +/datum/sprite_accessory/mam_body_markings/corvid + name = "Corvid" + icon_state = "corvid" + +/datum/sprite_accessory/mam_body_markings/dalmation + name = "Dalmation" + icon_state = "dalmation" + +/datum/sprite_accessory/mam_body_markings/deer + name = "Deer" + icon_state = "deer" + +/datum/sprite_accessory/mam_body_markings/dog + name = "Dog" + icon_state = "dog" + +/datum/sprite_accessory/mam_body_markings/eevee + name = "Eevee" + icon_state = "eevee" + +/datum/sprite_accessory/mam_body_markings/fennec + name = "Fennec" + icon_state = "Fennec" + +/datum/sprite_accessory/mam_body_markings/fox + name = "Fox" + icon_state = "fox" + +/datum/sprite_accessory/mam_body_markings/frog + name = "Frog" + icon_state = "frog" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/goat + name = "Goat" + icon_state = "goat" + +/datum/sprite_accessory/mam_body_markings/handsfeet + name = "Handsfeet" + icon_state = "handsfeet" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/hawk + name = "Hawk" + icon_state = "hawk" + +/datum/sprite_accessory/mam_body_markings/husky + name = "Husky" + icon_state = "husky" + +/datum/sprite_accessory/mam_body_markings/hyena + name = "Hyena" + icon_state = "hyena" + +/datum/sprite_accessory/mam_body_markings/lab + name = "Lab" + icon_state = "lab" + +/datum/sprite_accessory/mam_body_markings/insect + name = "Insect" + icon_state = "insect" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/otie + name = "Otie" + icon_state = "otie" + +/datum/sprite_accessory/mam_body_markings/otter + name = "Otter" + icon_state = "otter" + +/datum/sprite_accessory/mam_body_markings/orca + name = "Orca" + icon_state = "orca" + +/datum/sprite_accessory/mam_body_markings/panther + name = "Panther" + icon_state = "panther" + +/datum/sprite_accessory/mam_body_markings/possum + name = "Possum" + icon_state = "possum" + +/datum/sprite_accessory/mam_body_markings/raccoon + name = "Raccoon" + icon_state = "raccoon" + +/datum/sprite_accessory/mam_body_markings/pede + name = "Scolipede" + icon_state = "scolipede" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/shark + name = "Shark" + icon_state = "shark" + +/datum/sprite_accessory/mam_body_markings/skunk + name = "Skunk" + icon_state = "skunk" + +/datum/sprite_accessory/mam_body_markings/sergal + name = "Sergal" + icon_state = "sergal" + +/datum/sprite_accessory/mam_body_markings/shepherd + name = "Shepherd" + icon_state = "shepherd" + +/datum/sprite_accessory/mam_body_markings/tajaran + name = "Tajaran" + icon_state = "tajaran" + +/datum/sprite_accessory/mam_body_markings/tiger + name = "Tiger" + icon_state = "tiger" + +/datum/sprite_accessory/mam_body_markings/turian + name = "Turian" + icon_state = "turian" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/mam_body_markings/wolf + name = "Wolf" + icon_state = "wolf" + +/datum/sprite_accessory/mam_body_markings/xeno + name = "Xeno" + icon_state = "xeno" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/****************************************** +************* Insect Markings ************* +*******************************************/ + +/datum/sprite_accessory/insect_fluff + icon = 'icons/mob/wings.dmi' + color_src = 0 + +/datum/sprite_accessory/insect_fluff/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/insect_fluff/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/insect_fluff/reddish + name = "Reddish" + icon_state = "redish" + +/datum/sprite_accessory/insect_fluff/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/insect_fluff/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/insect_fluff/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/insect_fluff/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/insect_fluff/punished + name = "Burnt Off" + icon_state = "punished" + +/datum/sprite_accessory/insect_fluff/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/insect_fluff/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/insect_fluff/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/insect_fluff/ragged + name = "Ragged" + icon_state = "ragged" + +/datum/sprite_accessory/insect_fluff/moonfly + name = "Moon Fly" + icon_state = "moonfly" + +/datum/sprite_accessory/insect_fluff/snow + name = "Snow" + icon_state = "snow" + +/datum/sprite_accessory/insect_fluff/colored + name = "Colored (Hair)" + icon_state = "snow" + color_src = HAIR + +/datum/sprite_accessory/insect_fluff/colored1 + name = "Colored (Primary)" + icon_state = "snow" + color_src = MUTCOLORS + +/datum/sprite_accessory/insect_fluff/colored2 + name = "Colored (Secondary)" + icon_state = "snow" + color_src = MUTCOLORS2 + +/datum/sprite_accessory/insect_fluff/colored3 + name = "Colored (Tertiary)" + icon_state = "snow" + color_src = MUTCOLORS3 \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm index 163f8370a2..1496ca030a 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm @@ -5,8 +5,295 @@ name = "None" icon_state = "none" +/****************************************** +*************** Human Ears **************** +*******************************************/ + +/datum/sprite_accessory/ears/human/axolotl + name = "Axolotl" + icon_state = "axolotl" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + +/datum/sprite_accessory/ears/human/bear + name = "Bear" + icon_state = "bear" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/bigwolf + name = "Big Wolf" + icon_state = "bigwolf" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/bigwolfinner + name = "Big Wolf (ALT)" + icon_state = "bigwolfinner" + hasinner = 1 + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/bigwolfdark + name = "Dark Big Wolf" + icon_state = "bigwolfdark" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/bigwolfinnerdark + name = "Dark Big Wolf (ALT)" + icon_state = "bigwolfinnerdark" + hasinner = 1 + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + /datum/sprite_accessory/ears/cat name = "Cat" icon_state = "cat" hasinner = 1 - color_src = HAIR \ No newline at end of file + color_src = HAIR + +/datum/sprite_accessory/ears/human/cow + name = "Cow" + icon_state = "cow" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/curled + name = "Curled Horn" + icon_state = "horn1" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MUTCOLORS3 + +/datum/sprite_accessory/ears/human/eevee + name = "Eevee" + icon_state = "eevee" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/elephant + name = "Elephant" + icon_state = "elephant" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/elf + name = "Elf" + icon_state = "elf" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = SKINTONE + +/datum/sprite_accessory/ears/fennec + name = "Fennec" + icon_state = "fennec" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/fish + name = "Fish" + icon_state = "fish" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/fox + name = "Fox" + icon_state = "fox" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + +/datum/sprite_accessory/ears/human/jellyfish + name = "Jellyfish" + icon_state = "jellyfish" + color_src = HAIR + +/datum/sprite_accessory/ears/lab + name = "Dog, Floppy" + icon_state = "lab" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + +/datum/sprite_accessory/ears/murid + name = "Murid" + icon_state = "murid" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/otie + name = "Otusian" + icon_state = "otie" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + +/datum/sprite_accessory/ears/human/pede + name = "Scolipede" + icon_state = "pede" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/rabbit + name = "Rabbit" + icon_state = "rabbit" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + +/datum/sprite_accessory/ears/human/sergal + name = "Sergal" + icon_state = "sergal" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/human/skunk + name = "skunk" + icon_state = "skunk" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/squirrel + name = "Squirrel" + icon_state = "squirrel" + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/ears/wolf + name = "Wolf" + icon_state = "wolf" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + + +/****************************************** +*************** Furry Ears **************** +*******************************************/ + +/datum/sprite_accessory/mam_ears + icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/mam_ears/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/mam_ears/axolotl + name = "Axolotl" + icon_state = "axolotl" + +/datum/sprite_accessory/mam_ears/bear + name = "Bear" + icon_state = "bear" + +/datum/sprite_accessory/mam_ears/bigwolf + name = "Big Wolf" + icon_state = "bigwolf" + +/datum/sprite_accessory/mam_ears/bigwolfinner + name = "Big Wolf (ALT)" + icon_state = "bigwolfinner" + hasinner = 1 + +/datum/sprite_accessory/mam_ears/bigwolfdark + name = "Dark Big Wolf" + icon_state = "bigwolfdark" + +/datum/sprite_accessory/mam_ears/bigwolfinnerdark + name = "Dark Big Wolf (ALT)" + icon_state = "bigwolfinnerdark" + hasinner = 1 + +/datum/sprite_accessory/mam_ears/cat + name = "Cat" + icon_state = "cat" + hasinner = 1 + color_src = HAIR + +/datum/sprite_accessory/mam_ears/catbig + name = "Cat, Big" + icon_state = "catbig" + +/datum/sprite_accessory/mam_ears/cow + name = "Cow" + icon_state = "cow" + +/datum/sprite_accessory/mam_ears/curled + name = "Curled Horn" + icon_state = "horn1" + color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_ears/deer + name = "Deer" + icon_state = "deer" + color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_ears/eevee + name = "Eevee" + icon_state = "eevee" + + +/datum/sprite_accessory/mam_ears/elf + name = "Elf" + icon_state = "elf" + color_src = MUTCOLORS3 + + +/datum/sprite_accessory/mam_ears/elephant + name = "Elephant" + icon_state = "elephant" + +/datum/sprite_accessory/mam_ears/fennec + name = "Fennec" + icon_state = "fennec" + +/datum/sprite_accessory/mam_ears/fish + name = "Fish" + icon_state = "fish" + +/datum/sprite_accessory/mam_ears/fox + name = "Fox" + icon_state = "fox" + +/datum/sprite_accessory/mam_ears/husky + name = "Husky" + icon_state = "wolf" + +/datum/sprite_accessory/mam_ears/kangaroo + name = "kangaroo" + icon_state = "kangaroo" + +/datum/sprite_accessory/mam_ears/jellyfish + name = "Jellyfish" + icon_state = "jellyfish" + color_src = HAIR + +/datum/sprite_accessory/mam_ears/lab + name = "Dog, Long" + icon_state = "lab" + +/datum/sprite_accessory/mam_ears/murid + name = "Murid" + icon_state = "murid" + +/datum/sprite_accessory/mam_ears/otie + name = "Otusian" + icon_state = "otie" + +/datum/sprite_accessory/mam_ears/squirrel + name = "Squirrel" + icon_state = "squirrel" + +/datum/sprite_accessory/mam_ears/pede + name = "Scolipede" + icon_state = "pede" + +/datum/sprite_accessory/mam_ears/rabbit + name = "Rabbit" + icon_state = "rabbit" + +/datum/sprite_accessory/mam_ears/sergal + name = "Sergal" + icon_state = "sergal" + +/datum/sprite_accessory/mam_ears/skunk + name = "skunk" + icon_state = "skunk" + +/datum/sprite_accessory/mam_ears/wolf + name = "Wolf" + icon_state = "wolf" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm index 3566f3dea5..d11299fd5b 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm @@ -86,4 +86,45 @@ /datum/sprite_accessory/facial_hair/elvis name = "Sideburns (Elvis)" - icon_state = "facial_elvis" \ No newline at end of file + icon_state = "facial_elvis" + +#define VFACE(_name, new_state) /datum/sprite_accessory/facial_hair/##new_state/icon_state=#new_state;;/datum/sprite_accessory/facial_hair/##new_state/name= #_name + " (Virgo)" +VFACE("Watson", facial_watson_s) +VFACE("Chaplin", facial_chaplin_s) +VFACE("Fullbeard", facial_fullbeard_s) +VFACE("Vandyke", facial_vandyke_s) +VFACE("Elvis", facial_elvis_s) +VFACE("Abe", facial_abe_s) +VFACE("Chin", facial_chin_s) +VFACE("GT", facial_gt_s) +VFACE("Hip", facial_hip_s) +VFACE("Hogan", facial_hogan_s) +VFACE("Selleck", facial_selleck_s) +VFACE("Neckbeard", facial_neckbeard_s) +VFACE("Longbeard", facial_longbeard_s) +VFACE("Dwarf", facial_dwarf_s) +VFACE("Sideburn", facial_sideburn_s) +VFACE("Mutton", facial_mutton_s) +VFACE("Moustache", facial_moustache_s) +VFACE("Pencilstache", facial_pencilstache_s) +VFACE("Goatee", facial_goatee_s) +VFACE("Smallstache", facial_smallstache_s) +VFACE("Volaju", facial_volaju_s) +VFACE("3 O\'clock", facial_3oclock_s) +VFACE("5 O\'clock", facial_5oclock_s) +VFACE("7 O\'clock", facial_7oclock_s) +VFACE("5 O\'clock Moustache", facial_5oclockmoustache_s) +VFACE("7 O\'clock", facial_7oclockmoustache_s) +VFACE("Walrus", facial_walrus_s) +VFACE("Muttonmus", facial_muttonmus_s) +VFACE("Wise", facial_wise_s) +VFACE("Martial Artist", facial_martialartist_s) +VFACE("Dorsalfnil", facial_dorsalfnil_s) +VFACE("Hornadorns", facial_hornadorns_s) +VFACE("Spike", facial_spike_s) +VFACE("Chinhorns", facial_chinhorns_s) +VFACE("Cropped Fullbeard", facial_croppedfullbeard_s) +VFACE("Chinless Beard", facial_chinlessbeard_s) +VFACE("Moonshiner", facial_moonshiner_s) +VFACE("Tribearder", facial_tribearder_s) +#undef VFACE \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm index f8d8d26328..abcc90c0ee 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm @@ -461,4 +461,163 @@ /datum/sprite_accessory/hair/longestalt name = "Very Long with Fringe" - icon_state = "hair_vlongfringe" \ No newline at end of file + icon_state = "hair_vlongfringe" + +/*************** VIRGO PORTED HAIRS ****************************/ +#define VHAIR(_name, new_state) /datum/sprite_accessory/hair/##new_state/icon_state=#new_state;/datum/sprite_accessory/hair/##new_state/name = #_name + " (Virgo)" +//VIRGO PORTED HAIRS +VHAIR("Short Hair Rosa", hair_rosa_s) +VHAIR("Short Hair 80s", hair_80s_s) +VHAIR("Long Bedhead", hair_long_bedhead_s) +VHAIR("Dave", hair_dave_s) +VHAIR("Country", hair_country_s) +VHAIR("Shy", hair_shy_s) +VHAIR("Unshaven Mohawk", hair_unshaven_mohawk_s) +VHAIR("Manbun", hair_manbun_s) +VHAIR("Longer Bedhead", hair_longer_bedhead_s) +VHAIR("Ponytail", hair_ponytail_s) +VHAIR("Ziegler", hair_ziegler_s) +VHAIR("Emo Fringe", hair_emofringe_s) +VHAIR("Very Short Over Eye Alt", hair_veryshortovereyealternate_s) +VHAIR("Shorthime", hair_shorthime_s) +VHAIR("High Tight", hair_hightight_s) +VHAIR("Thinning Front", hair_thinningfront_s) +VHAIR("Big Afro", hair_bigafro_s) +VHAIR("Afro", hair_afro_s) +VHAIR("High Braid", hair_hbraid_s) +VHAIR("Braid", hair_braid_s) +VHAIR("Sargeant", hair_sargeant_s) +VHAIR("Gelled", hair_gelled_s) +VHAIR("Kagami", hair_kagami_s) +VHAIR("ShortTail", hair_stail_s) +VHAIR("Gentle", hair_gentle_s) +VHAIR("Grande", hair_grande_s) +VHAIR("Bobcurl", hair_bobcurl_s) +VHAIR("Pompadeur", hair_pompadour_s) +VHAIR("Plait", hair_plait_s) +VHAIR("Long", hair_long_s) +VHAIR("Rattail", hair_rattail_s) +VHAIR("Tajspiky", hair_tajspiky_s) +VHAIR("Messy", hair_messy_s) +VHAIR("Bangs", hair_bangs_s) +VHAIR("TBraid", hair_tbraid_s) +VHAIR("Toriyama2", hair_toriyama2_s) +VHAIR("CIA", hair_cia_s) +VHAIR("Mulder", hair_mulder_s) +VHAIR("Scully", hair_scully_s) +VHAIR("Nitori", hair_nitori_s) +VHAIR("Joestar", hair_joestar_s) +VHAIR("Ponytail4", hair_ponytail4_s) +VHAIR("Ponytail5", hair_ponytail5_s) +VHAIR("Beehive2", hair_beehive2_s) +VHAIR("Short Braid", hair_shortbraid_s) +VHAIR("Reverse Mohawk", hair_reversemohawk_s) +VHAIR("SHort Bangs", hair_shortbangs_s) +VHAIR("Half Shaved", hair_halfshaved_s) +VHAIR("Longer Alt 2", hair_longeralt2_s) +VHAIR("Bun", hair_bun_s) +VHAIR("Curly", hair_curly_s) +VHAIR("Victory", hair_victory_s) +VHAIR("Ponytail6", hair_ponytail6_s) +VHAIR("Undercut3", hair_undercut3_s) +VHAIR("Bobcut Alt", hair_bobcultalt_s) +VHAIR("Fingerwave", hair_fingerwave_s) +VHAIR("Oxton", hair_oxton_s) +VHAIR("Poofy2", hair_poofy2_s) +VHAIR("Fringe Tail", hair_fringetail_s) +VHAIR("Bun3", hair_bun3_s) +VHAIR("Wisp", hair_wisp_s) +VHAIR("Undercut2", hair_undercut2_s) +VHAIR("TBob", hair_tbob_s) +VHAIR("Spiky Ponytail", hair_spikyponytail_s) +VHAIR("Rowbun", hair_rowbun_s) +VHAIR("Rowdualtail", hair_rowdualtail_s) +VHAIR("Rowbraid", hair_rowbraid_s) +VHAIR("Shaved Mohawk", hair_shavedmohawk_s) +VHAIR("Topknot", hair_topknot_s) +VHAIR("Ronin", hair_ronin_s) +VHAIR("Bowlcut2", hair_bowlcut2_s) +VHAIR("Thinning Rear", hair_thinningrear_s) +VHAIR("Thinning", hair_thinning_s) +VHAIR("Jade", hair_jade_s) +VHAIR("Bedhead", hair_bedhead_s) +VHAIR("Dreadlocks", hair_dreads_s) +VHAIR("Very Long", hair_vlong_s) +VHAIR("Jensen", hair_jensen_s) +VHAIR("Halfbang", hair_halfbang_s) +VHAIR("Kusangi", hair_kusangi_s) +VHAIR("Ponytail", hair_ponytail_s) +VHAIR("Ponytail3", hair_ponytail3_s) +VHAIR("Halfbang Alt", hair_halfbang_alt_s) +VHAIR("Bedhead V2", hair_bedheadv2_s) +VHAIR("Long Fringe", hair_longfringe_s) +VHAIR("Flair", hair_flair_s) +VHAIR("Bedhead V3", hair_bedheadv3_s) +VHAIR("Himecut", hair_himecut_s) +VHAIR("Curls", hair_curls_s) +VHAIR("Very Long Fringe", hair_vlongfringe_s) +VHAIR("Longest", hair_longest_s) +VHAIR("Father", hair_father_s) +VHAIR("Emo Long", hair_emolong_s) +VHAIR("Short Hair 3", hair_shorthair3_s) +VHAIR("Double Bun", hair_doublebun_s) +VHAIR("Sleeze", hair_sleeze_s) +VHAIR("Twintail", hair_twintail_s) +VHAIR("Emo 2", hair_emo2_s) +VHAIR("Low Fade", hair_lowfade_s) +VHAIR("Med Fade", hair_medfade_s) +VHAIR("High Fade", hair_highfade_s) +VHAIR("Bald Fade", hair_baldfade_s) +VHAIR("No Fade", hair_nofade_s) +VHAIR("Trim Flat", hair_trimflat_s) +VHAIR("Shaved", hair_shaved_s) +VHAIR("Trimmed", hair_trimmed_s) +VHAIR("Tight Bun", hair_tightbun_s) +VHAIR("Short Hair 4", hair_d_s) +VHAIR("Short Hair 5", hair_e_s) +VHAIR("Short Hair 6", hair_f_s) +VHAIR("Skinhead", hair_skinhead_s) +VHAIR("Afro2", hair_afro2_s) +VHAIR("Bobcut", hair_bobcut_s) +VHAIR("Emo", hair_emo_s) +VHAIR("Long Over Eye", hair_longovereye_s) +VHAIR("Feather", hair_feather_s) +VHAIR("Hitop", hair_hitop_s) +VHAIR("Short Over Eye", hair_shortoverye_s) +VHAIR("Straight", hair_straight_s) +VHAIR("Buzzcut", hair_buzzcut_s) +VHAIR("Combover", hair_combover_s) +VHAIR("Crewcut", hair_crewcut_s) +VHAIR("Devillock", hair_devilock_s) +VHAIR("Clean", hair_clean_s) +VHAIR("Shaggy", hair_shaggy_s) +VHAIR("Updo", hair_updo_s) +VHAIR("Mohawk", hair_mohawk_s) +VHAIR("Odango", hair_odango_s) +VHAIR("Ombre", hair_ombre_s) +VHAIR("Parted", hair_parted_s) +VHAIR("Quiff", hair_quiff_s) +VHAIR("Volaju", hair_volaju_s) +VHAIR("Bun2", hair_bun2_s) +VHAIR("Rows1", hair_rows1_s) +VHAIR("Rows2", hair_rows2_s) +VHAIR("Dandy Pompadour", hair_dandypompadour_s) +VHAIR("Poofy", hair_poofy_s) +VHAIR("Toriyama", hair_toriyama_s) +VHAIR("Drillruru", hair_drillruru_s) +VHAIR("Bowlcut", hair_bowlcut_s) +VHAIR("Coffee House", hair_coffeehouse_s) +VHAIR("Family Man", hair_thefamilyman_s) +VHAIR("Shaved Part", hair_shavedpart_s) +VHAIR("Modern", hair_modern_s) +VHAIR("One Shoulder", hair_oneshoulder_s) +VHAIR("Very Short Over Eye", hair_veryshortovereye_s) +VHAIR("Unkept", hair_unkept_s) +VHAIR("Wife", hair_wife_s) +VHAIR("Nia", hair_nia_s) +VHAIR("Undercut", hair_undercut_s) +VHAIR("Bobcut Alt", hair_bobcutalt_s) +VHAIR("Short Hair 4 alt", hair_shorthair4_s) +VHAIR("Tressshoulder", hair_tressshoulder_s) + //END +#undef VHAIR \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/horns.dm b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm index 607ad650e3..a630ead7b3 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/horns.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm @@ -1,5 +1,6 @@ /datum/sprite_accessory/horns icon = 'icons/mob/mutant_bodyparts.dmi' + color_src = HORNCOLOR /datum/sprite_accessory/horns/none name = "None" @@ -23,4 +24,13 @@ /datum/sprite_accessory/horns/angler name = "Angeler" - icon_state = "angler" \ No newline at end of file + icon_state = "angler" + color_src = MUTCOLORS + +/datum/sprite_accessory/horns/antler + name = "Deer Antlers" + icon_state = "deer" + +/datum/sprite_accessory/horns/guilmon + name = "Guilmon" + icon_state = "guilmon" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm b/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm new file mode 100644 index 0000000000..6d2ab1a39b --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm @@ -0,0 +1,158 @@ + +/****************************************** +************** IPC SCREENS **************** +*******************************************/ +/datum/sprite_accessory/screen + icon = 'modular_citadel/icons/mob/ipc_screens.dmi' + color_src = null + +/datum/sprite_accessory/screen/blank + name = "Blank" + icon_state = "blank" + +/datum/sprite_accessory/screen/pink + name = "Pink" + icon_state = "pink" + +/datum/sprite_accessory/screen/green + name = "Green" + icon_state = "green" + +/datum/sprite_accessory/screen/red + name = "Red" + icon_state = "red" + +/datum/sprite_accessory/screen/blue + name = "Blue" + icon_state = "blue" + +/datum/sprite_accessory/screen/yellow + name = "Yellow" + icon_state = "yellow" + +/datum/sprite_accessory/screen/shower + name = "Shower" + icon_state = "shower" + +/datum/sprite_accessory/screen/nature + name = "Nature" + icon_state = "nature" + +/datum/sprite_accessory/screen/eight + name = "Eight" + icon_state = "eight" + +/datum/sprite_accessory/screen/goggles + name = "Goggles" + icon_state = "goggles" + +/datum/sprite_accessory/screen/heart + name = "Heart" + icon_state = "heart" + +/datum/sprite_accessory/screen/monoeye + name = "Mono eye" + icon_state = "monoeye" + +/datum/sprite_accessory/screen/breakout + name = "Breakout" + icon_state = "breakout" + +/datum/sprite_accessory/screen/purple + name = "Purple" + icon_state = "purple" + +/datum/sprite_accessory/screen/scroll + name = "Scroll" + icon_state = "scroll" + +/datum/sprite_accessory/screen/console + name = "Console" + icon_state = "console" + +/datum/sprite_accessory/screen/rgb + name = "RGB" + icon_state = "rgb" + +/datum/sprite_accessory/screen/golglider + name = "Gol Glider" + icon_state = "golglider" + +/datum/sprite_accessory/screen/rainbow + name = "Rainbow" + icon_state = "rainbow" + +/datum/sprite_accessory/screen/sunburst + name = "Sunburst" + icon_state = "sunburst" + +/datum/sprite_accessory/screen/static + name = "Static" + icon_state = "static" + +//Oracle Station sprites + +/datum/sprite_accessory/screen/bsod + name = "BSOD" + icon_state = "bsod" + +/datum/sprite_accessory/screen/redtext + name = "Red Text" + icon_state = "retext" + +/datum/sprite_accessory/screen/sinewave + name = "Sine wave" + icon_state = "sinewave" + +/datum/sprite_accessory/screen/squarewave + name = "Square wave" + icon_state = "squarwave" + +/datum/sprite_accessory/screen/ecgwave + name = "ECG wave" + icon_state = "ecgwave" + +/datum/sprite_accessory/screen/eyes + name = "Eyes" + icon_state = "eyes" + +/datum/sprite_accessory/screen/textdrop + name = "Text drop" + icon_state = "textdrop" + +/datum/sprite_accessory/screen/stars + name = "Stars" + icon_state = "stars" + + +/****************************************** +************** IPC Antennas *************** +*******************************************/ + +/datum/sprite_accessory/antenna + icon = 'modular_citadel/icons/mob/ipc_antennas.dmi' + color_src = MUTCOLORS2 + +/datum/sprite_accessory/antenna/none + name = "None" + icon_state = "None" + +/datum/sprite_accessory/antenna/antennae + name = "Angled Antennae" + icon_state = "antennae" + +/datum/sprite_accessory/antenna/tvantennae + name = "TV Antennae" + icon_state = "tvantennae" + +/datum/sprite_accessory/antenna/cyberhead + name = "Cyberhead" + icon_state = "cyberhead" + +/datum/sprite_accessory/antenna/antlers + name = "Antlers" + icon_state = "antlers" + +/datum/sprite_accessory/antenna/crowned + name = "Crowned" + icon_state = "crowned" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/legs.dm b/code/modules/mob/dead/new_player/sprite_accessories/legs.dm deleted file mode 100644 index 7663100822..0000000000 --- a/code/modules/mob/dead/new_player/sprite_accessories/legs.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them. - icon = null //These datums exist for selecting legs on preference, and little else - -/datum/sprite_accessory/legs/none - name = "Normal Legs" - -/datum/sprite_accessory/legs/digitigrade_lizard - name = "Digitigrade Legs" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm new file mode 100644 index 0000000000..15640a2699 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm @@ -0,0 +1,124 @@ +/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them. -- OR SO THEY USED TO BE + icon = null //These datums exist for selecting legs on preference, and little else + +/****************************************** +***************** Leggy ******************* +*******************************************/ + +/datum/sprite_accessory/legs/none + name = "Plantigrade" + +/datum/sprite_accessory/legs/digitigrade_lizard + name = "Digitigrade" + +/datum/sprite_accessory/legs/digitigrade_bird + name = "Avian" + + +/****************************************** +************** Taur Bodies **************** +*******************************************/ + +/datum/sprite_accessory/taur + icon = 'modular_citadel/icons/mob/mam_taur.dmi' + extra_icon = 'modular_citadel/icons/mob/mam_taur.dmi' + extra = TRUE + extra2_icon = 'modular_citadel/icons/mob/mam_taur.dmi' + extra2 = TRUE + center = TRUE + dimension_x = 64 + var/taur_mode = NOT_TAURIC + color_src = MATRIXED + +/datum/sprite_accessory/taur/none + name = "None" + icon_state = "None" + +/datum/sprite_accessory/taur/cow + name = "Cow" + icon_state = "cow" + taur_mode = HOOF_TAURIC + +/datum/sprite_accessory/taur/deer + name = "Deer" + icon_state = "deer" + taur_mode = HOOF_TAURIC + color_src = MUTCOLORS + +/datum/sprite_accessory/taur/drake + name = "Drake" + icon_state = "drake" + taur_mode = PAW_TAURIC + +/datum/sprite_accessory/taur/drider + name = "Drider" + icon_state = "drider" + color_src = MUTCOLORS + +/datum/sprite_accessory/taur/eevee + name = "Eevee" + icon_state = "eevee" + taur_mode = PAW_TAURIC + color_src = MUTCOLORS + +/datum/sprite_accessory/taur/fox + name = "Fox" + icon_state = "fox" + taur_mode = PAW_TAURIC + +/datum/sprite_accessory/taur/husky + name = "Husky" + icon_state = "husky" + taur_mode = PAW_TAURIC + +/datum/sprite_accessory/taur/horse + name = "Horse" + icon_state = "horse" + taur_mode = HOOF_TAURIC + +/datum/sprite_accessory/taur/lab + name = "Lab" + icon_state = "lab" + taur_mode = PAW_TAURIC + +/datum/sprite_accessory/taur/naga + name = "Naga" + icon_state = "naga" + taur_mode = SNEK_TAURIC + +/datum/sprite_accessory/taur/otie + name = "Otie" + icon_state = "otie" + taur_mode = PAW_TAURIC + +/datum/sprite_accessory/taur/pede + name = "Scolipede" + icon_state = "pede" + taur_mode = PAW_TAURIC + color_src = MUTCOLORS + +/datum/sprite_accessory/taur/panther + name = "Panther" + icon_state = "panther" + taur_mode = PAW_TAURIC + +/datum/sprite_accessory/taur/shepherd + name = "Shepherd" + icon_state = "shepherd" + taur_mode = PAW_TAURIC + +/datum/sprite_accessory/taur/tentacle + name = "Tentacle" + icon_state = "tentacle" + taur_mode = SNEK_TAURIC + color_src = MUTCOLORS + +/datum/sprite_accessory/taur/tiger + name = "Tiger" + icon_state = "tiger" + taur_mode = PAW_TAURIC + +/datum/sprite_accessory/taur/wolf + name = "Wolf" + icon_state = "wolf" + taur_mode = PAW_TAURIC diff --git a/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm deleted file mode 100644 index 6b8036bd69..0000000000 --- a/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm +++ /dev/null @@ -1,68 +0,0 @@ -/datum/sprite_accessory/moth_wings - icon = 'icons/mob/wings.dmi' - color_src = null - -/datum/sprite_accessory/moth_wings/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/moth_wings/monarch - name = "Monarch" - icon_state = "monarch" - -/datum/sprite_accessory/moth_wings/luna - name = "Luna" - icon_state = "luna" - -/datum/sprite_accessory/moth_wings/atlas - name = "Atlas" - icon_state = "atlas" - -/datum/sprite_accessory/moth_wings/reddish - name = "Reddish" - icon_state = "redish" - -/datum/sprite_accessory/moth_wings/royal - name = "Royal" - icon_state = "royal" - -/datum/sprite_accessory/moth_wings/gothic - name = "Gothic" - icon_state = "gothic" - -/datum/sprite_accessory/moth_wings/lovers - name = "Lovers" - icon_state = "lovers" - -/datum/sprite_accessory/moth_wings/whitefly - name = "White Fly" - icon_state = "whitefly" - -/datum/sprite_accessory/moth_wings/punished - name = "Burnt Off" - icon_state = "punished" - locked = TRUE - -/datum/sprite_accessory/moth_wings/firewatch - name = "Firewatch" - icon_state = "firewatch" - -/datum/sprite_accessory/moth_wings/deathhead - name = "Deathshead" - icon_state = "deathhead" - -/datum/sprite_accessory/moth_wings/poison - name = "Poison" - icon_state = "poison" - -/datum/sprite_accessory/moth_wings/ragged - name = "Ragged" - icon_state = "ragged" - -/datum/sprite_accessory/moth_wings/moonfly - name = "Moon Fly" - icon_state = "moonfly" - -/datum/sprite_accessory/moth_wings/snow - name = "Snow" - icon_state = "snow" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm index c663c08d69..7252f85324 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm @@ -15,4 +15,359 @@ /datum/sprite_accessory/snouts/roundlight name = "Round + Light" - icon_state = "roundlight" \ No newline at end of file + icon_state = "roundlight" + +/datum/sprite_accessory/snout/guilmon + name = "Guilmon" + icon_state = "guilmon" + color_src = MATRIXED + +//christ this was a mistake, but it's here just in case someone wants to selectively fix -- Pooj +/************* Lizard compatable snoots *********** +/datum/sprite_accessory/snouts/bird + name = "Beak" + icon_state = "bird" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/bigbeak + name = "Big Beak" + icon_state = "bigbeak" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/bug + name = "Bug" + icon_state = "bug" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + extra2 = TRUE + extra2_color_src = MUTCOLORS3 + +/datum/sprite_accessory/snouts/elephant + name = "Elephant" + icon_state = "elephant" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + extra = TRUE + extra_color_src = MUTCOLORS3 + +/datum/sprite_accessory/snouts/lcanid + name = "Mammal, Long" + icon_state = "lcanid" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/lcanidalt + name = "Mammal, Long ALT" + icon_state = "lcanidalt" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/scanid + name = "Mammal, Short" + icon_state = "scanid" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/scanidalt + name = "Mammal, Short ALT" + icon_state = "scanidalt" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/wolf + name = "Mammal, Thick" + icon_state = "wolf" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/wolfalt + name = "Mammal, Thick ALT" + icon_state = "wolfalt" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/redpanda + name = "WahCoon" + icon_state = "wah" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/rhino + name = "Horn" + icon_state = "rhino" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + extra = TRUE + extra = MUTCOLORS3 + +/datum/sprite_accessory/snouts/rodent + name = "Rodent" + icon_state = "rodent" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/husky + name = "Husky" + icon_state = "husky" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/otie + name = "Otie" + icon_state = "otie" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/pede + name = "Scolipede" + icon_state = "pede" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/sergal + name = "Sergal" + icon_state = "sergal" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/shark + name = "Shark" + icon_state = "shark" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + +/datum/sprite_accessory/snouts/toucan + name = "Toucan" + icon_state = "toucan" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED +*/ + +/****************************************** +************** Mammal Snouts ************** +*******************************************/ + +/datum/sprite_accessory/mam_snouts + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + +/datum/sprite_accessory/mam_snouts/none + name = "None" + icon_state = "none" + + +/datum/sprite_accessory/mam_snouts/bird + name = "Beak" + icon_state = "bird" + +/datum/sprite_accessory/mam_snouts/bigbeak + name = "Big Beak" + icon_state = "bigbeak" + +/datum/sprite_accessory/mam_snouts/bug + name = "Bug" + icon_state = "bug" + color_src = MUTCOLORS + extra2 = TRUE + extra2_color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/elephant + name = "Elephant" + icon_state = "elephant" + extra = TRUE + extra_color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/lcanid + name = "Mammal, Long" + icon_state = "lcanid" + +/datum/sprite_accessory/mam_snouts/lcanidalt + name = "Mammal, Long ALT" + icon_state = "lcanidalt" + +/datum/sprite_accessory/mam_snouts/scanid + name = "Mammal, Short" + icon_state = "scanid" + +/datum/sprite_accessory/mam_snouts/scanidalt + name = "Mammal, Short ALT" + icon_state = "scanidalt" + +/datum/sprite_accessory/mam_snouts/wolf + name = "Mammal, Thick" + icon_state = "wolf" + +/datum/sprite_accessory/mam_snouts/wolfalt + name = "Mammal, Thick ALT" + icon_state = "wolfalt" + +/datum/sprite_accessory/mam_snouts/redpanda + name = "WahCoon" + icon_state = "wah" + +/datum/sprite_accessory/mam_snouts/redpandaalt + name = "WahCoon ALT" + icon_state = "wahalt" + +/datum/sprite_accessory/mam_snouts/rhino + name = "Horn" + icon_state = "rhino" + extra = TRUE + extra = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/rodent + name = "Rodent" + icon_state = "rodent" + +/datum/sprite_accessory/mam_snouts/husky + name = "Husky" + icon_state = "husky" + +/datum/sprite_accessory/mam_snouts/otie + name = "Otie" + icon_state = "otie" + +/datum/sprite_accessory/mam_snouts/pede + name = "Scolipede" + icon_state = "pede" + +/datum/sprite_accessory/mam_snouts/sergal + name = "Sergal" + icon_state = "sergal" + +/datum/sprite_accessory/mam_snouts/shark + name = "Shark" + icon_state = "shark" + +/datum/sprite_accessory/mam_snouts/toucan + name = "Toucan" + icon_state = "toucan" + +/datum/sprite_accessory/mam_snouts/sharp + name = "Sharp" + icon_state = "sharp" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/round + name = "Round" + icon_state = "round" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/sharplight + name = "Sharp + Light" + icon_state = "sharplight" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/roundlight + name = "Round + Light" + icon_state = "roundlight" + color_src = MUTCOLORS + + +/****************************************** +**************** Snouts ******************* +*************but higher up*****************/ + +/datum/sprite_accessory/mam_snouts/fbird + name = "Beak (Top)" + icon_state = "fbird" + +/datum/sprite_accessory/mam_snouts/fbigbeak + name = "Big Beak (Top)" + icon_state = "fbigbeak" + +/datum/sprite_accessory/mam_snouts/fbug + name = "Bug (Top)" + icon_state = "fbug" + color_src = MUTCOLORS + extra2 = TRUE + extra2_color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/felephant + name = "Elephant (Top)" + icon_state = "felephant" + extra = TRUE + extra_color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/flcanid + name = "Mammal, Long (Top)" + icon_state = "flcanid" + +/datum/sprite_accessory/mam_snouts/flcanidalt + name = "Mammal, Long ALT (Top)" + icon_state = "flcanidalt" + +/datum/sprite_accessory/mam_snouts/fscanid + name = "Mammal, Short (Top)" + icon_state = "fscanid" + +/datum/sprite_accessory/mam_snouts/fscanidalt + name = "Mammal, Short ALT (Top)" + icon_state = "fscanidalt" + +/datum/sprite_accessory/mam_snouts/fwolf + name = "Mammal, Thick (Top)" + icon_state = "fwolf" + +/datum/sprite_accessory/mam_snouts/fwolfalt + name = "Mammal, Thick ALT (Top)" + icon_state = "fwolfalt" + +/datum/sprite_accessory/mam_snouts/fredpanda + name = "WahCoon (Top)" + icon_state = "fwah" + +/datum/sprite_accessory/mam_snouts/frhino + name = "Horn (Top)" + icon_state = "frhino" + extra = TRUE + extra = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/frodent + name = "Rodent (Top)" + icon_state = "frodent" + +/datum/sprite_accessory/mam_snouts/fhusky + name = "Husky (Top)" + icon_state = "fhusky" + +/datum/sprite_accessory/mam_snouts/fotie + name = "Otie (Top)" + icon_state = "fotie" + +/datum/sprite_accessory/mam_snouts/fpede + name = "Scolipede (Top)" + icon_state = "fpede" + +/datum/sprite_accessory/mam_snouts/fsergal + name = "Sergal (Top)" + icon_state = "fsergal" + +/datum/sprite_accessory/mam_snouts/fshark + name = "Shark (Top)" + icon_state = "fshark" + +/datum/sprite_accessory/mam_snouts/ftoucan + name = "Toucan (Top)" + icon_state = "ftoucan" + +/datum/sprite_accessory/mam_snouts/fsharp + name = "Sharp (Top)" + icon_state = "fsharp" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/fround + name = "Round (Top)" + icon_state = "fround" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/fsharplight + name = "Sharp + Light (Top)" + icon_state = "fsharplight" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/froundlight + name = "Round + Light (Top)" + icon_state = "froundlight" + color_src = MUTCOLORS \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm index 31faabf663..6042d97247 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -4,6 +4,10 @@ /datum/sprite_accessory/tails_animated icon = 'icons/mob/mutant_bodyparts.dmi' +/****************************************** +************* Lizard Tails **************** +*******************************************/ + /datum/sprite_accessory/tails/lizard/smooth name = "Smooth" icon_state = "smooth" @@ -36,6 +40,48 @@ name = "Spikes" icon_state = "spikes" +/datum/sprite_accessory/tails/lizard/none + name = "None" + icon_state = "None" + +/datum/sprite_accessory/tails_animated/lizard/none + name = "None" + icon_state = "None" + +/datum/sprite_accessory/tails/lizard/axolotl + name = "Axolotl" + icon_state = "axolotl" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/lizard/axolotl + name = "Axolotl" + icon_state = "axolotl" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/body_markings/guilmon + name = "Guilmon" + icon_state = "guilmon" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + +/datum/sprite_accessory/tails/lizard/guilmon + name = "Guilmon" + icon_state = "guilmon" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/lizard/guilmon + name = "Guilmon" + icon_state = "guilmon" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/****************************************** +************** Human Tails **************** +*******************************************/ + /datum/sprite_accessory/tails/human/none name = "None" icon_state = "none" @@ -43,13 +89,626 @@ /datum/sprite_accessory/tails_animated/human/none name = "None" icon_state = "none" -/* + +/datum/sprite_accessory/tails/human/ailurus + name = "Red Panda" + icon_state = "wah" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/ailurus + name = "Red Panda" + icon_state = "wah" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/axolotl + name = "Axolotl" + icon_state = "axolotl" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/axolotl + name = "Axolotl" + icon_state = "axolotl" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/bee + name = "Bee" + icon_state = "bee" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/bee + name = "Bee" + icon_state = "bee" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + /datum/sprite_accessory/tails/human/cat name = "Cat" icon_state = "cat" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' color_src = HAIR /datum/sprite_accessory/tails_animated/human/cat name = "Cat" icon_state = "cat" - color_src = HAIR*/ \ No newline at end of file + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = HAIR + +/datum/sprite_accessory/tails/human/catbig + name = "Cat, Big" + icon_state = "catbig" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/catbig + name = "Cat, Big" + icon_state = "catbig" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/cow + name = "Cow" + icon_state = "cow" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/cow + name = "Cow" + icon_state = "cow" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/corvid + name = "Corvid" + icon_state = "crow" + +/datum/sprite_accessory/tails_animated/human/corvid + name = "Corvid" + icon_state = "crow" + +/datum/sprite_accessory/tails/human/eevee + name = "Eevee" + icon_state = "eevee" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/eevee + name = "Eevee" + icon_state = "eevee" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/fennec + name = "Fennec" + icon_state = "fennec" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/fennec + name = "Fennec" + icon_state = "fennec" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/fish + name = "Fish" + icon_state = "fish" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/fish + name = "Fish" + icon_state = "fish" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/fox + name = "Fox" + icon_state = "fox" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/fox + name = "Fox" + icon_state = "fox" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/horse + name = "Horse" + icon_state = "horse" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = HAIR + +/datum/sprite_accessory/tails_animated/human/horse + name = "Horse" + icon_state = "horse" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = HAIR + +/datum/sprite_accessory/tails/human/husky + name = "Husky" + icon_state = "husky" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/husky + name = "Husky" + icon_state = "husky" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/insect + name = "Insect" + icon_state = "insect" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails_animated/human/insect + name = "insect" + icon_state = "insect" + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/tails/human/kitsune + name = "Kitsune" + icon_state = "kitsune" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/kitsune + name = "Kitsune" + icon_state = "kitsune" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/murid + name = "Murid" + icon_state = "murid" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/murid + name = "Murid" + icon_state = "murid" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/otie + name = "Otusian" + icon_state = "otie" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/otie + name = "Otusian" + icon_state = "otie" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/orca + name = "Orca" + icon_state = "orca" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/orca + name = "Orca" + icon_state = "orca" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/pede + name = "Scolipede" + icon_state = "pede" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/pede + name = "Scolipede" + icon_state = "pede" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/rabbit + name = "Rabbit" + icon_state = "rabbit" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/rabbit + name = "Rabbit" + icon_state = "rabbit" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/sergal + name = "Sergal" + icon_state = "sergal" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/sergal + name = "Sergal" + icon_state = "sergal" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/skunk + name = "skunk" + icon_state = "skunk" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/skunk + name = "skunk" + icon_state = "skunk" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/shark + name = "Shark" + icon_state = "shark" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/shark + name = "Shark" + icon_state = "shark" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/datashark + name = "datashark" + icon_state = "datashark" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/datashark + name = "datashark" + icon_state = "datashark" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/straighttail + name = "Straight Tail" + icon_state = "straighttail" + +/datum/sprite_accessory/tails_animated/human/straighttail + name = "Straight Tail" + icon_state = "straighttail" + +/datum/sprite_accessory/tails/human/squirrel + name = "Squirrel" + icon_state = "squirrel" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/squirrel + name = "Squirrel" + icon_state = "squirrel" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/tentacle + name = "Tentacle" + icon_state = "tentacle" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/tentacle + name = "Tentacle" + icon_state = "tentacle" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/tiger + name = "Tiger" + icon_state = "tiger" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/tiger + name = "Tiger" + icon_state = "tiger" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails/human/wolf + name = "Wolf" + icon_state = "wolf" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/human/wolf + name = "Wolf" + icon_state = "wolf" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/****************************************** +************** Furry Tails **************** +*******************************************/ + +/datum/sprite_accessory/mam_tails + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/mam_tails/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/mam_tails_animated + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/mam_tails_animated/none + name = "None" + icon_state = "none" + color_src = MATRIXED + +/datum/sprite_accessory/mam_tails/ailurus + name = "Red Panda" + icon_state = "wah" + extra = TRUE + +/datum/sprite_accessory/mam_tails_animated/ailurus + name = "Red Panda" + icon_state = "wah" + extra = TRUE + +/datum/sprite_accessory/mam_tails/axolotl + name = "Axolotl" + icon_state = "axolotl" + +/datum/sprite_accessory/mam_tails_animated/axolotl + name = "Axolotl" + icon_state = "axolotl" + +/datum/sprite_accessory/mam_tails/bee + name = "Bee" + icon_state = "bee" + +/datum/sprite_accessory/mam_tails_animated/bee + name = "Bee" + icon_state = "bee" + +/datum/sprite_accessory/mam_tails/cat + name = "Cat" + icon_state = "cat" + color_src = HAIR + +/datum/sprite_accessory/mam_tails_animated/cat + name = "Cat" + icon_state = "cat" + color_src = HAIR + +/datum/sprite_accessory/mam_tails/catbig + name = "Cat, Big" + icon_state = "catbig" + +/datum/sprite_accessory/mam_tails_animated/catbig + name = "Cat, Big" + icon_state = "catbig" + +/datum/sprite_accessory/mam_tails/corvid + name = "Corvid" + icon_state = "crow" + +/datum/sprite_accessory/mam_tails_animated/corvid + name = "Corvid" + icon_state = "crow" + +/datum/sprite_accessory/mam_tail/cow + name = "Cow" + icon_state = "cow" + +/datum/sprite_accessory/mam_tails_animated/cow + name = "Cow" + icon_state = "cow" + +/datum/sprite_accessory/mam_tails/eevee + name = "Eevee" + icon_state = "eevee" + +/datum/sprite_accessory/mam_tails_animated/eevee + name = "Eevee" + icon_state = "eevee" + +/datum/sprite_accessory/mam_tails/fennec + name = "Fennec" + icon_state = "fennec" + +/datum/sprite_accessory/mam_tails_animated/fennec + name = "Fennec" + icon_state = "fennec" + +/datum/sprite_accessory/mam_tails/human/fish + name = "Fish" + icon_state = "fish" + +/datum/sprite_accessory/mam_tails_animated/human/fish + name = "Fish" + icon_state = "fish" + +/datum/sprite_accessory/mam_tails/fox + name = "Fox" + icon_state = "fox" + +/datum/sprite_accessory/mam_tails_animated/fox + name = "Fox" + icon_state = "fox" + +/datum/sprite_accessory/mam_tails/hawk + name = "Hawk" + icon_state = "hawk" + +/datum/sprite_accessory/mam_tails_animated/hawk + name = "Hawk" + icon_state = "hawk" + +/datum/sprite_accessory/mam_tails/horse + name = "Horse" + icon_state = "horse" + color_src = HAIR + +/datum/sprite_accessory/mam_tails_animated/horse + name = "Horse" + icon_state = "Horse" + color_src = HAIR + +/datum/sprite_accessory/mam_tails/husky + name = "Husky" + icon_state = "husky" + +/datum/sprite_accessory/mam_tails_animated/husky + name = "Husky" + icon_state = "husky" + +datum/sprite_accessory/mam_tails/insect + name = "Insect" + icon_state = "insect" + +/datum/sprite_accessory/mam_tails_animated/insect + name = "Insect" + icon_state = "insect" + +/datum/sprite_accessory/mam_tails/kangaroo + name = "kangaroo" + icon_state = "kangaroo" + +/datum/sprite_accessory/mam_tails_animated/kangaroo + name = "kangaroo" + icon_state = "kangaroo" + +/datum/sprite_accessory/mam_tails/kitsune + name = "Kitsune" + icon_state = "kitsune" + +/datum/sprite_accessory/mam_tails_animated/kitsune + name = "Kitsune" + icon_state = "kitsune" + +/datum/sprite_accessory/mam_tails/lab + name = "Lab" + icon_state = "lab" + +/datum/sprite_accessory/mam_tails_animated/lab + name = "Lab" + icon_state = "lab" + +/datum/sprite_accessory/mam_tails/murid + name = "Murid" + icon_state = "murid" + +/datum/sprite_accessory/mam_tails_animated/murid + name = "Murid" + icon_state = "murid" + +/datum/sprite_accessory/mam_tails/otie + name = "Otusian" + icon_state = "otie" + +/datum/sprite_accessory/mam_tails_animated/otie + name = "Otusian" + icon_state = "otie" + +/datum/sprite_accessory/mam_tails/orca + name = "Orca" + icon_state = "orca" + +/datum/sprite_accessory/mam_tails_animated/orca + name = "Orca" + icon_state = "orca" + +/datum/sprite_accessory/mam_tails/pede + name = "Scolipede" + icon_state = "pede" + +/datum/sprite_accessory/mam_tails_animated/pede + name = "Scolipede" + icon_state = "pede" + +/datum/sprite_accessory/mam_tails/rabbit + name = "Rabbit" + icon_state = "rabbit" + +/datum/sprite_accessory/mam_tails_animated/rabbit + name = "Rabbit" + icon_state = "rabbit" + +/datum/sprite_accessory/mam_tails/sergal + name = "Sergal" + icon_state = "sergal" + +/datum/sprite_accessory/mam_tails_animated/sergal + name = "Sergal" + icon_state = "sergal" + +/datum/sprite_accessory/mam_tails/skunk + name = "Skunk" + icon_state = "skunk" + +/datum/sprite_accessory/mam_tails_animated/skunk + name = "Skunk" + icon_state = "skunk" + +/datum/sprite_accessory/mam_tails/shark + name = "Shark" + icon_state = "shark" + +/datum/sprite_accessory/mam_tails_animated/shark + name = "Shark" + icon_state = "shark" + +/datum/sprite_accessory/mam_tails/shepherd + name = "Shepherd" + icon_state = "shepherd" + +/datum/sprite_accessory/mam_tails_animated/shepherd + name = "Shepherd" + icon_state = "shepherd" + +/datum/sprite_accessory/mam_tails/straighttail + name = "Straight Tail" + icon_state = "straighttail" + +/datum/sprite_accessory/mam_tails_animated/straighttail + name = "Straight Tail" + icon_state = "straighttail" + +/datum/sprite_accessory/mam_tails/squirrel + name = "Squirrel" + icon_state = "squirrel" + +/datum/sprite_accessory/mam_tails_animated/squirrel + name = "Squirrel" + icon_state = "squirrel" + +/datum/sprite_accessory/mam_tails/tentacle + name = "Tentacle" + icon_state = "tentacle" + +/datum/sprite_accessory/mam_tails_animated/tentacle + name = "Tentacle" + icon_state = "tentacle" + +/datum/sprite_accessory/mam_tails/tiger + name = "Tiger" + icon_state = "tiger" + +/datum/sprite_accessory/mam_tails_animated/tiger + name = "Tiger" + icon_state = "tiger" + +/datum/sprite_accessory/mam_tails/wolf + name = "Wolf" + icon_state = "wolf" + +/datum/sprite_accessory/mam_tails_animated/wolf + name = "Wolf" + icon_state = "wolf" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm index d051b2f07a..dc0e0222bf 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm @@ -1,3 +1,5 @@ +//Angel Wings + /datum/sprite_accessory/wings/none name = "None" icon_state = "none" @@ -23,4 +25,120 @@ dimension_x = 46 center = TRUE dimension_y = 34 - locked = TRUE \ No newline at end of file + locked = TRUE + +//INSECT WINGS + +/datum/sprite_accessory/insect_wings + icon = 'icons/mob/wings.dmi' + color_src = null + +/datum/sprite_accessory/insect_wings/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/insect_wings/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/insect_wings/monarch + name = "Monarch" + icon_state = "monarch" + +/datum/sprite_accessory/insect_wings/luna + name = "Luna" + icon_state = "luna" + +/datum/sprite_accessory/insect_wings/atlas + name = "Atlas" + icon_state = "atlas" + +/datum/sprite_accessory/insect_wings/reddish + name = "Reddish" + icon_state = "redish" + +/datum/sprite_accessory/insect_wings/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/insect_wings/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/insect_wings/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/insect_wings/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/insect_wings/punished + name = "Burnt Off" + icon_state = "punished" + locked = TRUE + +/datum/sprite_accessory/insect_wings/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/insect_wings/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/insect_wings/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/insect_wings/ragged + name = "Ragged" + icon_state = "ragged" + +/datum/sprite_accessory/insect_wings/moonfly + name = "Moon Fly" + icon_state = "moonfly" + +/datum/sprite_accessory/insect_wings/snow + name = "Snow" + icon_state = "snow" + +/datum/sprite_accessory/insect_wings/colored + name = "Colored (Hair)" + icon_state = "snowplain" + color_src = HAIR + +/datum/sprite_accessory/insect_fluff/colored1 + name = "Colored (Primary)" + icon_state = "snowplain" + color_src = MUTCOLORS + +/datum/sprite_accessory/insect_fluff/colored2 + name = "Colored (Secondary)" + icon_state = "snowplain" + color_src = MUTCOLORS2 + +/datum/sprite_accessory/insect_fluff/colored3 + name = "Colored (Tertiary)" + icon_state = "snowplain" + color_src = MUTCOLORS3 + +/datum/sprite_accessory/insect_wings/bee + name = "Bee" + icon_state = "bee" + +/datum/sprite_accessory/insect_wings/bee_color + name = "Bee (Hair colored)" + icon_state = "bee" + color_src = HAIR + +/datum/sprite_accessory/insect_wings/fairy + name = "Fairy" + icon_state = "fairy" + +/datum/sprite_accessory/insect_wings/bat + name = "Bat" + icon_state = "bat" + +/datum/sprite_accessory/insect_wings/feathery + name = "Feathery" + icon_state = "feathery" diff --git a/code/modules/mob/living/carbon/alien/larva/emote.dm b/code/modules/mob/living/carbon/alien/larva/emote.dm deleted file mode 100644 index 62cb620ee4..0000000000 --- a/code/modules/mob/living/carbon/alien/larva/emote.dm +++ /dev/null @@ -1,113 +0,0 @@ -/mob/living/carbon/alien/larva/emote(act,m_type=1,message = null) - - var/param = null - if (findtext(act, "-", 1, null)) - var/t1 = findtext(act, "-", 1, null) - param = copytext(act, t1 + 1, length(act) + 1) - act = copytext(act, 1, t1) - - var/muzzled = is_muzzled() - - switch(act) //Alphabetically sorted please. - if ("burp","burps") - if (!muzzled) - message = "[src] burps." - m_type = 2 - if ("choke","chokes") - message = "[src] chokes." - m_type = 2 - if ("collapse","collapses") - Paralyse(2) - message = "[src] collapses!" - m_type = 2 - if ("dance","dances") - if (!src.restrained()) - message = "[src] dances around happily." - m_type = 1 - if ("deathgasp","deathgasps") - message = "[src] lets out a sickly hiss of air and falls limply to the floor..." - m_type = 2 - if ("drool","drools") - message = "[src] drools." - m_type = 1 - if ("gasp","gasps") - message = "[src] gasps." - m_type = 2 - if ("gnarl","gnarls") - if (!muzzled) - message = "[src] gnarls and shows its teeth.." - m_type = 2 - if ("hiss","hisses") - message = "[src] hisses softly." - m_type = 1 - if ("jump","jumps") - message = "[src] jumps!" - m_type = 1 - if ("me") - ..() - return - if ("moan","moans") - message = "[src] moans!" - m_type = 2 - if ("nod","nods") - message = "[src] nods its head." - m_type = 1 - if ("roar","roars") - if (!muzzled) - message = "[src] softly roars." - m_type = 2 - if ("roll","rolls") - if (!src.restrained()) - message = "[src] rolls." - m_type = 1 - if ("scratch","scratches") - if (!src.restrained()) - message = "[src] scratches." - m_type = 1 - if ("screech","screeches") //This orignally was called scretch, changing it. -Sum99 - if (!muzzled) - message = "[src] screeches." - m_type = 2 - if ("shake","shakes") - message = "[src] shakes its head." - m_type = 1 - if ("shiver","shivers") - message = "[src] shivers." - m_type = 2 - if ("sign","signs") - if (!src.restrained()) - message = text("[src] signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null)) - m_type = 1 - if ("snore","snores") - message = "[src] snores." - m_type = 2 - if ("sulk","sulks") - message = "[src] sulks down sadly." - m_type = 1 - if ("sway","sways") - message = "[src] sways around dizzily." - m_type = 1 - if ("tail") - message = "[src] waves its tail." - m_type = 1 - if ("twitch") - message = "[src] twitches violently." - m_type = 1 - if ("whimper","whimpers") - if (!muzzled) - message = "[src] whimpers." - m_type = 2 - - if ("help") //"The exception" - src << "Help for larva emotes. You can use these emotes with say \"*emote\":\n\nburp, choke, collapse, dance, deathgasp, drool, gasp, gnarl, hiss, jump, me, moan, nod, roll, roar, scratch, screech, shake, shiver, sign-#, sulk, sway, tail, twitch, whimper" - - else - src << "Unusable emote '[act]'. Say *help for a list." - - if ((message && src.stat == 0)) - log_emote("[name]/[key] : [message]") - if (m_type & 1) - visible_message(message) - else - audible_message(message) - return diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 528b55c921..f02689c481 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -802,6 +802,11 @@ else hud_used.healthdoll.icon_state = "healthdoll_DEAD" + if(hud_used.staminas) + hud_used.staminas.icon_state = staminahudamount() + if(hud_used.staminabuffer) + hud_used.staminabuffer.icon_state = staminabufferhudamount() + /mob/living/carbon/human/fully_heal(admin_revive = 0) if(admin_revive) regenerate_limbs() @@ -1029,8 +1034,8 @@ /mob/living/carbon/human/species/lizard/ashwalker race = /datum/species/lizard/ashwalker -/mob/living/carbon/human/species/moth - race = /datum/species/moth +/mob/living/carbon/human/species/insect + race = /datum/species/insect /mob/living/carbon/human/species/mush race = /datum/species/mush diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 35b0384145..2425fcf14d 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -17,6 +17,8 @@ //Eye colour var/eye_color = "000" + var/horn_color = "85615a" //specific horn colors, because why not? + var/skin_tone = "caucasian1" //Skin tone var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 1af9dbc5f5..b1c31ffdff 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -39,6 +39,10 @@ //Stuff jammed in your limbs hurts handle_embedded_objects() + if(stat != DEAD) + //process your dick energy + handle_arousal() + //Update our name based on whether our face is obscured/disfigured name = get_visible_name() @@ -54,7 +58,7 @@ var/obj/item/clothing/CH = head if (CS.clothing_flags & CH.clothing_flags & STOPSPRESSUREDAMAGE) return ONE_ATMOSPHERE - if(istype(loc, /obj/belly)) //START OF CIT CHANGES - Makes it so you don't suffocate while inside vore organs. Remind me to modularize this some time - Bhijn + if(isbelly(loc)) //START OF CIT CHANGES - Makes it so you don't suffocate while inside vore organs. Remind me to modularize this some time - Bhijn return ONE_ATMOSPHERE if(istype(loc, /obj/item/dogborg/sleeper)) return ONE_ATMOSPHERE //END OF CIT CHANGES diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm deleted file mode 100644 index 1ac24cffa9..0000000000 --- a/code/modules/mob/living/carbon/human/login.dm +++ /dev/null @@ -1,9 +0,0 @@ -/mob/living/carbon/human/Login() - ..() - if(src.martial_art == default_martial_art && mind.stored_martial_art) //If the mind has a martial art stored and the body has the default one. - src.mind.stored_martial_art.teach(src) //Running teach so that it deals with help verbs. - else if(src.martial_art != default_martial_art && src.martial_art != mind.stored_martial_art) //If the body has a martial art which is not the default one and is not stored in the mind. - if(src.martial_art_owner != mind) - src.martial_art.remove(src) - else - src.mind.stored_martial_art = src.martial_art diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 0f83e675fc..7855e9f4fa 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1,6 +1,7 @@ // This code handles different species in the game. GLOBAL_LIST_EMPTY(roundstart_races) +GLOBAL_LIST_EMPTY(roundstart_race_names) /datum/species var/id // if the game needs to manually check your race to do something not included in a proc here, it will use this @@ -15,6 +16,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/hair_color // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent. + var/horn_color //specific horn colors, because why not? + var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans) var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id. var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc) @@ -79,7 +82,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/fixed_mut_color3 = "" var/whitelisted = 0 //Is this species restricted to certain players? var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both. - + var/should_draw_citadel = FALSE /////////// // PROCS // @@ -98,6 +101,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/datum/species/S = new I if(S.check_roundstart_eligible()) GLOB.roundstart_races += S.id + GLOB.roundstart_race_names["[S.name]"] = S.id qdel(S) if(!GLOB.roundstart_races.len) GLOB.roundstart_races += "human" @@ -260,7 +264,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) C.hud_used.update_locked_slots() // this needs to be FIRST because qdel calls update_body which checks if we have DIGITIGRADE legs or not and if not then removes DIGITIGRADE from species_traits - if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs") + if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian")) species_traits += DIGITIGRADE if(DIGITIGRADE in species_traits) C.Digitigrade_Leg_Swap(FALSE) @@ -294,8 +298,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) for(var/datum/disease/A in C.diseases) A.cure(FALSE) - SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species) - //CITADEL EDIT if(NOAROUSAL in species_traits) C.canbearoused = FALSE @@ -306,6 +308,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/mob/living/carbon/human/H = C if(NOGENITALS in H.dna.species.species_traits) H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return. + if("meat_type" in default_features) //I can't believe it's come to the meat + H.type_of_meat = GLOB.meat_types[H.dna.features["meat_type"]] + + SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species) + // EDIT ENDS @@ -317,6 +324,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) for(var/X in inherent_traits) REMOVE_TRAIT(C, X, SPECIES_TRAIT) + if("meat_type" in default_features) + C.type_of_meat = GLOB.meat_types[C.dna.features["meat_type"]] + else + C.type_of_meat = initial(meat) + SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src) /datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour) @@ -612,6 +624,10 @@ GLOBAL_LIST_EMPTY(roundstart_races) else if ("wings" in mutant_bodyparts) bodyparts_to_add -= "wings_open" + if("insect_fluff" in mutant_bodyparts) + if(!H.dna.features["insect_fluff"] || H.dna.features["insect_fluff"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) + bodyparts_to_add -= "insect_fluff" + //CITADEL EDIT //Race specific bodyparts: //Xenos @@ -717,8 +733,10 @@ GLOBAL_LIST_EMPTY(roundstart_races) S = GLOB.wings_open_list[H.dna.features["wings"]] if("legs") S = GLOB.legs_list[H.dna.features["legs"]] - if("moth_wings") - S = GLOB.moth_wings_list[H.dna.features["moth_wings"]] + if("insect_wings") + S = GLOB.insect_wings_list[H.dna.features["insect_wings"]] + if("insect_fluff") + S = GLOB.insect_fluffs_list[H.dna.features["insect_fluff"]] if("caps") S = GLOB.caps_list[H.dna.features["caps"]] if("ipc_screen") @@ -815,6 +833,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) accessory_overlay.color = "#[H.facial_hair_color]" if(EYECOLOR) accessory_overlay.color = "#[H.eye_color]" + if(HORNCOLOR) + accessory_overlay.color = "#[H.horn_color]" else accessory_overlay.color = forced_colour else @@ -880,6 +900,9 @@ GLOBAL_LIST_EMPTY(roundstart_races) extra_accessory_overlay.color = "#[H.facial_hair_color]" if(EYECOLOR) extra_accessory_overlay.color = "#[H.eye_color]" + + if(HORNCOLOR) + extra_accessory_overlay.color = "#[H.horn_color]" standing += extra_accessory_overlay if(S.extra2) //apply the extra overlay, if there is one @@ -912,6 +935,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) extra2_accessory_overlay.color = "#[H.dna.features["mcolor"]]" else extra2_accessory_overlay.color = "#[H.hair_color]" + if(HORNCOLOR) + extra2_accessory_overlay.color = "#[H.horn_color]" standing += extra2_accessory_overlay @@ -1732,6 +1757,161 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.forcesay(GLOB.hit_appends) //forcesay checks stat already. return TRUE +/datum/species/proc/alt_spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) + if(!istype(M)) + return TRUE + CHECK_DNA_AND_SPECIES(M) + CHECK_DNA_AND_SPECIES(H) + + if(!istype(M)) //sanity check for drones. + return TRUE + if(M.mind) + attacker_style = M.mind.martial_art + if((M != H) && M.a_intent != INTENT_HELP && H.check_shields(M, 0, M.name, attack_type = UNARMED_ATTACK)) + log_combat(M, H, "attempted to touch") + H.visible_message("[M] attempted to touch [H]!") + return TRUE + switch(M.a_intent) + if(INTENT_HELP) + if(M == H) + althelp(M, H, attacker_style) + return TRUE + return FALSE + if(INTENT_DISARM) + altdisarm(M, H, attacker_style) + return TRUE + return FALSE + +/datum/species/proc/althelp(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) + if(user == target && istype(user)) + if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) + to_chat(user, "You're too exhausted for that.") + return + if(!user.resting) + to_chat(user, "You can only force yourself up if you're on the ground.") + return + user.visible_message("[user] forces [p_them()]self up to [p_their()] feet!", "You force yourself up to your feet!") + user.resting = 0 + user.update_canmove() + user.adjustStaminaLossBuffered(user.stambuffer) //Rewards good stamina management by making it easier to instantly get up from resting + playsound(user, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + +/datum/species/proc/altdisarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) + if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) + to_chat(user, "You're too exhausted.") + return FALSE + if(target.check_block()) + target.visible_message("[target] blocks [user]'s shoving attempt!") + return FALSE + if(attacker_style && attacker_style.disarm_act(user,target)) + return TRUE + if(user.resting) + return FALSE + else + if(user == target) + return + user.do_attack_animation(target, ATTACK_EFFECT_DISARM) + user.adjustStaminaLossBuffered(4) + playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + + if(target.w_uniform) + target.w_uniform.add_fingerprint(user) + SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected) + + if(!target.resting) + target.adjustStaminaLoss(5) + + + var/turf/target_oldturf = target.loc + var/shove_dir = get_dir(user.loc, target_oldturf) + var/turf/target_shove_turf = get_step(target.loc, shove_dir) + var/mob/living/carbon/human/target_collateral_human + var/obj/structure/table/target_table + var/shove_blocked = FALSE //Used to check if a shove is blocked so that if it is knockdown logic can be applied + + //Thank you based whoneedsspace + target_collateral_human = locate(/mob/living/carbon/human) in target_shove_turf.contents + if(target_collateral_human) + shove_blocked = TRUE + else + target.Move(target_shove_turf, shove_dir) + if(get_turf(target) == target_oldturf) + if(target_shove_turf.density) + shove_blocked = TRUE + else + var/thoushallnotpass = FALSE + for(var/obj/O in target_shove_turf) + if(istype(O, /obj/structure/table)) + target_table = O + else if(!O.CanPass(src, target_shove_turf)) + shove_blocked = TRUE + thoushallnotpass = TRUE + if(thoushallnotpass) + target_table = null + + if(target.is_shove_knockdown_blocked()) + return + + if(shove_blocked || target_table) + var/directional_blocked = FALSE + if(shove_dir in GLOB.cardinals) //Directional checks to make sure that we're not shoving through a windoor or something like that + var/target_turf = get_turf(target) + for(var/obj/O in target_turf) + if(O.flags_1 & ON_BORDER_1 && O.dir == shove_dir && O.density) + directional_blocked = TRUE + break + if(target_turf != target_shove_turf) //Make sure that we don't run the exact same check twice on the same tile + for(var/obj/O in target_shove_turf) + if(O.flags_1 & ON_BORDER_1 && O.dir == turn(shove_dir, 180) && O.density) + directional_blocked = TRUE + break + var/targetatrest = target.resting + if(((!target_table && !target_collateral_human) || directional_blocked) && !targetatrest) + target.Knockdown(SHOVE_KNOCKDOWN_SOLID) + user.visible_message("[user.name] shoves [target.name], knocking them down!", + "You shove [target.name], knocking them down!", null, COMBAT_MESSAGE_RANGE) + log_combat(user, target, "shoved", "knocking them down") + else if(target_table) + if(!targetatrest) + target.Knockdown(SHOVE_KNOCKDOWN_TABLE) + user.visible_message("[user.name] shoves [target.name] onto \the [target_table]!", + "You shove [target.name] onto \the [target_table]!", null, COMBAT_MESSAGE_RANGE) + target.forceMove(target_shove_turf) + log_combat(user, target, "shoved", "onto [target_table]") + else if(target_collateral_human && !targetatrest) + target.Knockdown(SHOVE_KNOCKDOWN_HUMAN) + if(!target_collateral_human.resting) + target_collateral_human.Knockdown(SHOVE_KNOCKDOWN_COLLATERAL) + user.visible_message("[user.name] shoves [target.name] into [target_collateral_human.name]!", + "You shove [target.name] into [target_collateral_human.name]!", null, COMBAT_MESSAGE_RANGE) + log_combat(user, target, "shoved", "into [target_collateral_human.name]") + + else + user.visible_message("[user.name] shoves [target.name]!", + "You shove [target.name]!", null, COMBAT_MESSAGE_RANGE) + var/target_held_item = target.get_active_held_item() + var/knocked_item = FALSE + if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types)) + target_held_item = null + if(!target.has_movespeed_modifier(SHOVE_SLOWDOWN_ID)) + target.add_movespeed_modifier(SHOVE_SLOWDOWN_ID, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH) + if(target_held_item) + target.visible_message("[target.name]'s grip on \the [target_held_item] loosens!", + "Your grip on \the [target_held_item] loosens!", null, COMBAT_MESSAGE_RANGE) + addtimer(CALLBACK(target, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH) + else if(target_held_item) + target.dropItemToGround(target_held_item) + knocked_item = TRUE + target.visible_message("[target.name] drops \the [target_held_item]!!", + "You drop \the [target_held_item]!!", null, COMBAT_MESSAGE_RANGE) + var/append_message = "" + if(target_held_item) + if(knocked_item) + append_message = "causing them to drop [target_held_item]" + else + append_message = "loosening their grip on [target_held_item]" + log_combat(user, target, "shoved", append_message) + /datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H) var/hit_percent = (100-(blocked+armor))/100 hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100 diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm new file mode 100644 index 0000000000..94dba550b6 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -0,0 +1,64 @@ +/datum/species/insect + name = "Anthromorphic Insect" + id = "insect" + say_mod = "flutters" + default_color = "00FF00" + species_traits = list(LIPS,NOEYES,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR) + inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG) + mutant_bodyparts = list("mam_ears", "mam_snout", "mam_tail", "taur", "insect_wings", "mam_snouts", "insect_fluff","horns") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", + "insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None","horns" = "None") + attack_verb = "slash" + attack_sound = 'sound/weapons/slash.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect + liked_food = VEGETABLES | DAIRY + disliked_food = FRUIT | GROSS + toxic_food = MEAT | RAW + mutanteyes = /obj/item/organ/eyes/insect + should_draw_citadel = TRUE + +/datum/species/insect/on_species_gain(mob/living/carbon/C) + . = ..() + if(ishuman(C)) + var/mob/living/carbon/human/H = C + if(!H.dna.features["insect_wings"]) + H.dna.features["insect_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["insect_wings"]) ? H.client.prefs.features["insect_wings"] : "None"]" + handle_mutant_bodyparts(H) + +/datum/species/insect/random_name(gender,unique,lastname) + if(unique) + return random_unique_moth_name() + + var/randname = moth_name() + + if(lastname) + randname += " [lastname]" + + return randname + +/datum/species/insect/handle_fire(mob/living/carbon/human/H, no_protection = FALSE) + ..() + if(H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive + to_chat(H, "Your precious wings burn to a crisp!") + if(H.dna.features["insect_wings"] != "None") + H.dna.features["insect_wings"] = "Burnt Off" + handle_mutant_bodyparts(H) + +/datum/species/insect/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) + . = ..() + if(chem.id == "pestkiller") + H.adjustToxLoss(3) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + +/datum/species/insect/check_weakness(obj/item/weapon, mob/living/attacker) + if(istype(weapon, /obj/item/melee/flyswatter)) + return 9 //flyswatters deal 10x damage to insects + return 0 + +/datum/species/insect/space_move(mob/living/carbon/human/H) + . = ..() + if(H.loc && !isspaceturf(H.loc) && (H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None")) + var/datum/gas_mixture/current = H.loc.return_air() + if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible + return TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index 6f05eb393d..043ee4fde1 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -1,5 +1,5 @@ /datum/species/fly - name = "Flyperson" + name = "Anthromorphic Fly" id = "fly" say_mod = "buzzes" species_traits = list(NOEYES) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm new file mode 100644 index 0000000000..e726d45347 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -0,0 +1,98 @@ +/datum/species/mammal + name = "Anthromorph" + id = "mammal" + default_color = "4B4B4B" + should_draw_citadel = TRUE + species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR) + inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) + mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur", "horns", "legs") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", + "mam_body_markings" = "Husky", "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian") + attack_verb = "claw" + attack_sound = 'sound/weapons/slash.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal + liked_food = MEAT | FRIED + disliked_food = TOXIC + +//Curiosity killed the cat's wagging tail. +/datum/species/mammal/spec_death(gibbed, mob/living/carbon/human/H) + if(H) + stop_wagging_tail(H) + +/datum/species/mammal/spec_stun(mob/living/carbon/human/H,amount) + if(H) + stop_wagging_tail(H) + . = ..() + +/datum/species/mammal/can_wag_tail(mob/living/carbon/human/H) + return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts) + +/datum/species/mammal/is_wagging_tail(mob/living/carbon/human/H) + return ("mam_waggingtail" in mutant_bodyparts) + +/datum/species/mammal/start_wagging_tail(mob/living/carbon/human/H) + if("mam_tail" in mutant_bodyparts) + mutant_bodyparts -= "mam_tail" + mutant_bodyparts |= "mam_waggingtail" + H.update_body() + +/datum/species/mammal/stop_wagging_tail(mob/living/carbon/human/H) + if("mam_waggingtail" in mutant_bodyparts) + mutant_bodyparts -= "mam_waggingtail" + mutant_bodyparts |= "mam_tail" + H.update_body() + + +/datum/species/mammal/qualifies_for_rank(rank, list/features) + return TRUE + + +//Alien// +/datum/species/xeno + // A cloning mistake, crossing human and xenomorph DNA + name = "Xenomorph Hybrid" + id = "xeno" + say_mod = "hisses" + default_color = "00FF00" + should_draw_citadel = TRUE + species_traits = list(MUTCOLORS,EYECOLOR,LIPS) + inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) + mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs") + default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade") + attack_verb = "slash" + attack_sound = 'sound/weapons/slash.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno + skinned_type = /obj/item/stack/sheet/animalhide/xeno + exotic_bloodtype = "L" + damage_overlay_type = "xeno" + liked_food = MEAT + +/datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species) + if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian")) + species_traits += DIGITIGRADE + if(DIGITIGRADE in species_traits) + C.Digitigrade_Leg_Swap(FALSE) + . = ..() + +/datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species) + if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Plantigrade") + species_traits -= DIGITIGRADE + if(DIGITIGRADE in species_traits) + C.Digitigrade_Leg_Swap(TRUE) + . = ..() + +//Praise the Omnissiah, A challange worthy of my skills - HS + +//EXOTIC// +//These races will likely include lots of downsides and upsides. Keep them relatively balanced.// + +//misc +/mob/living/carbon/human/dummy + no_vore = TRUE + +/mob/living/carbon/human/vore + devourable = TRUE + digestable = TRUE + feeding = TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 88dd59749c..84c44ea81c 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -45,7 +45,7 @@ return golem_name /datum/species/golem/random - name = "Random Golem" + name = "Golem Mutant" blacklisted = FALSE dangerous_existence = FALSE var/static/list/random_golem_types diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm similarity index 98% rename from modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm rename to code/modules/mob/living/carbon/human/species_types/ipc.dm index 25b8daf2cb..95b924ea18 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -1,5 +1,5 @@ /datum/species/ipc - name = "IPC" + name = "I.P.C." id = "ipc" say_mod = "beeps" default_color = "00FF00" diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 66586744fb..03cd514300 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -118,7 +118,7 @@ //Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death. /datum/species/jelly/slime - name = "Slimeperson" + name = "Xenobiological Slime Entity" id = "slime" default_color = "00FFFF" species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD) @@ -389,12 +389,268 @@ "...and move this one instead.") +////////////////////////////////////////////////////////Round Start Slimes/////////////////////////////////////////////////////////////////// + +/datum/species/jelly/roundstartslime + name = "Xenobiological Slime Hybrid" + id = "slimeperson" + limbs_id = "slime" + default_color = "00FFFF" + species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD) + inherent_traits = list(TRAIT_TOXINLOVER) + mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur") + default_features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None") + say_mod = "says" + hair_color = "mutcolor" + hair_alpha = 160 //a notch brighter so it blends better. + coldmod = 3 + heatmod = 1 + burnmod = 1 + +/datum/species/jelly/roundstartslime/spec_death(gibbed, mob/living/carbon/human/H) + if(H) + stop_wagging_tail(H) + +/datum/species/jelly/roundstartslime/spec_stun(mob/living/carbon/human/H,amount) + if(H) + stop_wagging_tail(H) + . = ..() + +/datum/species/jelly/roundstartslime/can_wag_tail(mob/living/carbon/human/H) + return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts) + +/datum/species/jelly/roundstartslime/is_wagging_tail(mob/living/carbon/human/H) + return ("mam_waggingtail" in mutant_bodyparts) + +/datum/species/jelly/roundstartslime/start_wagging_tail(mob/living/carbon/human/H) + if("mam_tail" in mutant_bodyparts) + mutant_bodyparts -= "mam_tail" + mutant_bodyparts |= "mam_waggingtail" + H.update_body() + +/datum/species/jelly/roundstartslime/stop_wagging_tail(mob/living/carbon/human/H) + if("mam_waggingtail" in mutant_bodyparts) + mutant_bodyparts -= "mam_waggingtail" + mutant_bodyparts |= "mam_tail" + H.update_body() + + +/datum/action/innate/slime_change + name = "Alter Form" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "alter_form" //placeholder + icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/slime_change/Activate() + var/mob/living/carbon/human/H = owner + if(!isjellyperson(H)) + return + else + H.visible_message("[owner] gains a look of \ + concentration while standing perfectly still.\ + Their body seems to shift and starts getting more goo-like.", + "You focus intently on altering your body while \ + standing perfectly still...") + change_form() + +/datum/action/innate/slime_change/proc/change_form() + var/mob/living/carbon/human/H = owner + var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel") + if(select_alteration == "Hair Style") + if(H.gender == MALE) + var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list + if(new_style) + H.facial_hair_style = new_style + else + H.facial_hair_style = "Shaved" + //handle normal hair + var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list + if(new_style) + H.hair_style = new_style + H.update_hair() + else if (select_alteration == "Genitals") + var/list/organs = list() + var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel") + switch(operation) + if("add sexual organ") + var/new_organ = input("Select sexual organ:", "Organ Manipulation") in list("Penis", "Testicles", "Breasts", "Vagina", "Womb", "Cancel") + if(new_organ == "Penis") + H.give_penis() + else if(new_organ == "Testicles") + H.give_balls() + else if(new_organ == "Breasts") + H.give_breasts() + else if(new_organ == "Vagina") + H.give_vagina() + else if(new_organ == "Womb") + H.give_womb() + else + return + if("remove sexual organ") + for(var/obj/item/organ/genital/X in H.internal_organs) + var/obj/item/organ/I = X + organs["[I.name] ([I.type])"] = I + var/obj/item/organ = input("Select sexual organ:", "Organ Manipulation", null) in organs + organ = organs[organ] + if(!organ) + return + var/obj/item/organ/genital/O + if(isorgan(organ)) + O = organ + O.Remove(H) + organ.forceMove(get_turf(H)) + qdel(organ) + H.update_genitals() + + else if (select_alteration == "Ears") + var/list/snowflake_ears_list = list("Normal" = null) + for(var/path in GLOB.mam_ears_list) + var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_ears_list[S.name] = path + var/new_ears + new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in snowflake_ears_list + if(new_ears) + H.dna.features["mam_ears"] = new_ears + H.update_body() + + else if (select_alteration == "Snout") + var/list/snowflake_snouts_list = list("Normal" = null) + for(var/path in GLOB.mam_snouts_list) + var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_snouts_list[S.name] = path + var/new_snout + new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list + if(new_snout) + H.dna.features["mam_snouts"] = new_snout + H.update_body() + + else if (select_alteration == "Markings") + var/list/snowflake_markings_list = list() + for(var/path in GLOB.mam_body_markings_list) + var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_markings_list[S.name] = path + var/new_mam_body_markings + new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list + if(new_mam_body_markings) + H.dna.features["mam_body_markings"] = new_mam_body_markings + if(new_mam_body_markings == "None") + H.dna.features["mam_body_markings"] = "Plain" + for(var/X in H.bodyparts) //propagates the markings changes + var/obj/item/bodypart/BP = X + BP.update_limb(FALSE, H) + H.update_body() + + else if (select_alteration == "Tail") + var/list/snowflake_tails_list = list("Normal" = null) + for(var/path in GLOB.mam_tails_list) + var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_tails_list[S.name] = path + var/new_tail + new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list + if(new_tail) + H.dna.features["mam_tail"] = new_tail + if(new_tail != "None") + H.dna.features["taur"] = "None" + H.update_body() + + else if (select_alteration == "Taur body") + var/list/snowflake_taur_list = list("Normal" = null) + for(var/path in GLOB.taur_list) + var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_taur_list[S.name] = path + var/new_taur + new_taur = input(owner, "Choose your character's tauric body:", "Tauric Alteration") as null|anything in snowflake_taur_list + if(new_taur) + H.dna.features["taur"] = new_taur + if(new_taur != "None") + H.dna.features["mam_tail"] = "None" + H.update_body() + + else if (select_alteration == "Penis") + for(var/obj/item/organ/genital/penis/X in H.internal_organs) + qdel(X) + var/new_shape + new_shape = input(owner, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list + if(new_shape) + H.dna.features["cock_shape"] = new_shape + H.update_genitals() + H.give_balls() + H.give_penis() + H.apply_overlay() + + + else if (select_alteration == "Vagina") + for(var/obj/item/organ/genital/vagina/X in H.internal_organs) + qdel(X) + var/new_shape + new_shape = input(owner, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list + if(new_shape) + H.dna.features["vag_shape"] = new_shape + H.update_genitals() + H.give_womb() + H.give_vagina() + H.apply_overlay() + + else if (select_alteration == "Penis Length") + for(var/obj/item/organ/genital/penis/X in H.internal_organs) + qdel(X) + var/new_length + new_length = input(owner, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Genital Alteration") as num|null + if(new_length) + H.dna.features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN) + H.update_genitals() + H.apply_overlay() + H.give_balls() + H.give_penis() + + else if (select_alteration == "Breast Size") + for(var/obj/item/organ/genital/breasts/X in H.internal_organs) + qdel(X) + var/new_size + new_size = input(owner, "Breast Size", "Genital Alteration") as null|anything in GLOB.breasts_size_list + if(new_size) + H.dna.features["breasts_size"] = new_size + H.update_genitals() + H.apply_overlay() + H.give_breasts() + + else if (select_alteration == "Breast Shape") + for(var/obj/item/organ/genital/breasts/X in H.internal_organs) + qdel(X) + var/new_shape + new_shape = input(owner, "Breast Shape", "Genital Alteration") as null|anything in GLOB.breasts_shapes_list + if(new_shape) + H.dna.features["breasts_shape"] = new_shape + H.update_genitals() + H.apply_overlay() + H.give_breasts() + + else + return + + ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// //Luminescents are able to consume and use slime extracts, without them decaying. /datum/species/jelly/luminescent - name = "Luminescent" + name = "Luminescent Slime Entity" id = "lum" say_mod = "says" var/glow_intensity = LUMINESCENT_DEFAULT_GLOW @@ -561,7 +817,7 @@ //Stargazers are the telepathic branch of jellypeople, able to project psychic messages and to link minds with willing participants. /datum/species/jelly/stargazer - name = "Stargazer" + name = "Stargazer Slime Entity" id = "stargazer" var/datum/action/innate/project_thought/project_thought var/datum/action/innate/link_minds/link_minds diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 30bf705547..4dbfd23df8 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -1,17 +1,19 @@ /datum/species/lizard // Reptilian humanoids with scaled skin and tails. - name = "Lizardperson" + name = "Anthromorphic Lizard" id = "lizard" say_mod = "hisses" default_color = "00FF00" - species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS) + species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_REPTILE) mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings", "legs", "taur") mutanttongue = /obj/item/organ/tongue/lizard mutanttail = /obj/item/organ/tail/lizard coldmod = 1.5 heatmod = 0.67 - default_features = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "taur" = "None") + default_features = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "snout" = "Round", + "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", + "legs" = "Digitigrade", "taur" = "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -71,14 +73,14 @@ H.update_body() /datum/species/lizard/on_species_gain(mob/living/carbon/human/C, datum/species/old_species) - if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs") + if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian")) species_traits += DIGITIGRADE if(DIGITIGRADE in species_traits) C.Digitigrade_Leg_Swap(FALSE) return ..() /datum/species/lizard/on_species_loss(mob/living/carbon/human/C, datum/species/new_species) - if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs") + if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Plantigrade") species_traits -= DIGITIGRADE if(DIGITIGRADE in species_traits) C.Digitigrade_Leg_Swap(TRUE) diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm deleted file mode 100644 index d15d989384..0000000000 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ /dev/null @@ -1,61 +0,0 @@ -/datum/species/moth - name = "Mothman" - id = "moth" - say_mod = "flutters" - default_color = "00FF00" - species_traits = list(LIPS, NOEYES) - inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG) - mutant_bodyparts = list("moth_wings") - default_features = list("moth_wings" = "Plain") - attack_verb = "slash" - attack_sound = 'sound/weapons/slash.ogg' - miss_sound = 'sound/weapons/slashmiss.ogg' - meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth - liked_food = VEGETABLES | DAIRY - disliked_food = FRUIT | GROSS - toxic_food = MEAT | RAW - mutanteyes = /obj/item/organ/eyes/moth - -/datum/species/moth/on_species_gain(mob/living/carbon/C) - . = ..() - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(!H.dna.features["moth_wings"]) - H.dna.features["moth_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["moth_wings"]) ? H.client.prefs.features["moth_wings"] : "Plain"]" - handle_mutant_bodyparts(H) - -/datum/species/moth/random_name(gender,unique,lastname) - if(unique) - return random_unique_moth_name() - - var/randname = moth_name() - - if(lastname) - randname += " [lastname]" - - return randname - -/datum/species/moth/handle_fire(mob/living/carbon/human/H, no_protection = FALSE) - ..() - if(H.dna.features["moth_wings"] != "Burnt Off" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive - to_chat(H, "Your precious wings burn to a crisp!") - H.dna.features["moth_wings"] = "Burnt Off" - handle_mutant_bodyparts(H) - -/datum/species/moth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - . = ..() - if(chem.id == "pestkiller") - H.adjustToxLoss(3) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - -/datum/species/moth/check_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/melee/flyswatter)) - return 9 //flyswatters deal 10x damage to moths - return 0 - -/datum/species/moth/space_move(mob/living/carbon/human/H) - . = ..() - if(H.loc && !isspaceturf(H.loc) && H.dna.features["moth_wings"] != "Burnt Off") - var/datum/gas_mixture/current = H.loc.return_air() - if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible - return TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index 7be0265cba..ceadb28115 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -1,5 +1,5 @@ /datum/species/mush //mush mush codecuck - name = "Mushroomperson" + name = "Anthromorphic Mushroom" id = "mush" mutant_bodyparts = list("caps") default_features = list("caps" = "Round") diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index d7bb151ddc..b4d47033f3 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -1,5 +1,5 @@ /datum/species/plasmaman - name = "Plasmaman" + name = "Phoronoid" id = "plasmaman" say_mod = "rattles" sexes = 0 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 0da4073f1d..46207e5e60 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -1,6 +1,6 @@ /datum/species/pod // A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness. - name = "Podperson" + name = "Anthromorphic Plant" id = "pod" default_color = "59CE00" species_traits = list(MUTCOLORS,EYECOLOR) @@ -71,6 +71,7 @@ H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL) /datum/species/pod/pseudo_weak + name = "Anthromorphic Plant" id = "podweak" limbs_id = "pod" species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS) 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 0ebd6e795b..e325cbb4f4 100644 --- a/code/modules/mob/living/carbon/human/species_types/synths.dm +++ b/code/modules/mob/living/carbon/human/species_types/synths.dm @@ -1,5 +1,5 @@ /datum/species/synth - name = "Synth" //inherited from the real species, for health scanners and things + name = "Synthetic" //inherited from the real species, for health scanners and things id = "synth" say_mod = "beep boops" //inherited from a user's real species sexes = 0 diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm deleted file mode 100644 index 51c7ad9d25..0000000000 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ /dev/null @@ -1,91 +0,0 @@ -/mob/living/carbon/human/whisper_verb(message as text) - whisper(message) - -/mob/living/carbon/human/whisper(message, datum/language/language=null) - if(!IsVocal()) - return - if(!message) - return - if(!language) - language = get_default_language() - - if(GLOB.say_disabled) //This is here to try to identify lag problems - to_chat(usr, "Speech is currently admin-disabled.") - return - - if(stat == DEAD) - return - - - message = trim(html_encode(message)) - if(!can_speak(message)) - return - - message = "[message]" - log_whisper("[src.name]/[src.key] : [message]") - - if (src.client) - if (src.client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot whisper (muted).") - return - - log_whisper("[src.name]/[src.key] : [message]") - - var/alt_name = get_alt_name() - - var/whispers = "whispers" - var/critical = InCritical() - - // We are unconscious but not in critical, so don't allow them to whisper. - if(stat == UNCONSCIOUS && !critical) - return - - // If whispering your last words, limit the whisper based on how close you are to death. - if(critical) - var/health_diff = round(-HEALTH_THRESHOLD_DEAD + health) - // If we cut our message short, abruptly end it with a-.. - var/message_len = length(message) - message = copytext(message, 1, health_diff) + "[message_len > health_diff ? "-.." : "..."]" - message = Ellipsis(message, 10, 1) - - message = treat_message(message) - if(!message) - return - - var/list/listening_dead = list() - for(var/mob/M in GLOB.player_list) - if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7))) - listening_dead |= M - - var/list/listening = get_hearers_in_view(1, src) - listening |= listening_dead - var/list/eavesdropping = get_hearers_in_view(2, src) - eavesdropping -= listening - var/list/watching = hearers(5, src) - watching -= listening - watching -= eavesdropping - - var/rendered - whispers = critical ? "whispers something in [p_their()] final breath." : "whispers something." - rendered = "[src.name] [whispers]" - for(var/mob/M in watching) - M.show_message(rendered, 2) - - var/spans = list(SPAN_ITALICS) - whispers = critical ? "whispers in [p_their()] final breath" : "whispers" - rendered = "[GetVoice()][alt_name] [whispers], \"[attach_spans(message, spans)]\"" - - for(var/atom/movable/AM in listening) - if(istype(AM,/obj/item/radio)) - continue - AM.Hear(rendered, src, language, message, , spans) - - message = stars(message) - rendered = "[GetVoice()][alt_name] [whispers], \"[attach_spans(message, spans)]\"" - for(var/atom/movable/AM in eavesdropping) - if(istype(AM,/obj/item/radio)) - continue - AM.Hear(rendered, src, language, message, , spans) - - if(critical) //Dying words. - succumb() diff --git a/code/modules/oracle_ui/README.md b/code/modules/oracle_ui/README.md new file mode 100644 index 0000000000..bc96eb1f51 --- /dev/null +++ b/code/modules/oracle_ui/README.md @@ -0,0 +1,233 @@ +# `/datum/oracle_ui` + +This datum is a replacement for tgui which does not use any Node.js dependencies, and works entirely through raw HTML, JS and CSS. It's designed to be reasonably easy to port something from tgui to oracle_ui. + +### How to create a UI + +For this example, we're going to port the disposals bin from tgui to oracle_ui. + +#### Step 1 + +In order to create a UI, you will first need to create an instance of `/datum/oracle_ui` or one of its subclasses, in this case `/datum/oracle_ui/themed/nano`. + +You need to pass in `src`, the width of the window, the height of the window, and the template to render from. You can optionally set some flags to disallow window resizing and whether to automatically refresh the UI. + +`code/modules/recycling/disposal-unit.dm` +```dm +/obj/machinery/disposal/bin/Initialize(mapload, obj/structure/disposalconstruct/make_from) + . = ..() + ui = new /datum/oracle_ui/themed/nano(src, 330, 190, "disposal_bin") + ui.auto_refresh = TRUE + ui.can_resize = FALSE +``` + +#### Step 2 + +You will now need to make a template in `html/oracle_ui/content/{template_name}`. + +Values defined as `@{value}` will get replaced at runtime by oracle_ui. + +`html/oracle_ui/content/disposal_bin/index.html` +```html +
+
+ State: +
@{full_pressure}
+
+
+ Pressure: +
+
+
+
@{per}
+
+
+
+
+ Handle: +
@{flush}
+
+
+ Eject: +
@{contents}
+
+
+ Compressor: +
@{pressure_charging}
+
+
+``` + +#### Step 3 + +Now you need to implement the methods that provide data to oracle_ui. `oui_data` can be adapted from the `ui_data` proc that tgui uses. + +The `act` proc generates a hyperlink that will result in `oui_act` getting called on your object when clicked. The `class` argument defines a css class to be added to the hyperlink, and disabled determines whether the hyperlink will be disabled or not. + +Calling `soft_update_fields` will result in the UI being updated on all clients, which is useful when the object changes state. + +`code/modules/recycling/disposal-unit.dm` +```dm +/obj/machinery/disposal/bin/oui_data(mob/user) + var/list/data = list() + data["flush"] = flush ? ui.act("Disengage", user, "handle-0", class="active") : ui.act("Engage", user, "handle-1") + data["full_pressure"] = full_pressure ? "Ready" : (pressure_charging ? "Pressurizing" : "Off") + data["pressure_charging"] = pressure_charging ? ui.act("Turn Off", user, "pump-0", class="active", disabled=full_pressure) : ui.act("Turn On", user, "pump-1", disabled=full_pressure) + var/per = full_pressure ? 100 : Clamp(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 99) + data["per"] = "[round(per, 1)]%" + data["contents"] = ui.act("Eject Contents", user, "eject", disabled=contents.len < 1) + data["isai"] = isAI(user) + return data +/obj/machinery/disposal/bin/oui_act(mob/user, action, list/params) + if(..()) + return + switch(action) + if("handle-0") + flush = FALSE + update_icon() + . = TRUE + if("handle-1") + if(!panel_open) + flush = TRUE + update_icon() + . = TRUE + if("pump-0") + if(pressure_charging) + pressure_charging = FALSE + update_icon() + . = TRUE + if("pump-1") + if(!pressure_charging) + pressure_charging = TRUE + update_icon() + . = TRUE + if("eject") + eject() + . = TRUE + ui.soft_update_fields() +``` + +#### Step 4 + +You now need to hook in and ensure oracle_ui is invoked upon clicking. `render` should be used to open the UI for a user, typically on click. + +`code/modules/recycling/disposal-unit.dm` +```dm +/obj/machinery/disposal/bin/ui_interact(mob/user, state) + if(stat & BROKEN) + return + if(user.loc == src) + to_chat(user, "You cannot reach the controls from inside!") + return + ui.render(user) +``` + +#### Done + +![gif](https://user-images.githubusercontent.com/202160/37561879-1bb9179e-2a52-11e8-902c-80e6e6df7204.gif) + +You should have a functional UI at this point. Some additional odds and ends can be discovered throughout `code/modules/recycling/disposal-unit.dm`. For a full diff of the changes made to it, refer to [the original pull request on GitHub](https://github.com/OracleStation/OracleStation/pull/702/files#diff-4b6c20ec7d37222630e7524d9577e230). + +### API Reference + +#### `/datum/oracle_ui` + +The main datum which handles the UI. + +##### `get_content(mob/target)` +Returns the HTML that should be displayed for a specified target mob. Calls `oui_getcontent` on the datasource to get the return value. *This proc is not used in the themed subclass.* + +##### `can_view(mob/target)` +Returns whether the specified target mob can view the UI. Calls `oui_canview` on the datasource to get the return value. + +##### `test_viewer(mob/target, updating)` +Tests whether the client is valid and can view the UI. If updating is TRUE, checks to see if they still have the UI window open. + +##### `render(mob/target, updating = FALSE)` +Opens the UI for a target mob, sending HTML. If updating is TRUE, will only do it to clients which still have the window open. + +##### `render_all()` +Does the above, but for all viewers and with updating set to TRUE. + +##### `close(mob/target)` +Closes the UI for the specified target mob. + +##### `close_all()` +Does the above, but for all viewers. + +##### `check_view(mob/target)` +Checks if the specified target mob can view the UI, and if they can't closes their UI + +##### `check_view_all()` +Does the above, but for all viewers. + +##### `call_js(mob/target, js_func, list/parameters = list())` +Invokes `js_func` in the UI of the specified target mob with the specified parameters. + +##### `call_js_all(js_func, list/parameters = list()))` +Does the above, but for all viewers. + +##### `steal_focus(mob/target)` +Causes the UI to steal focus for the specified target mob. + +##### `steal_focus_all()` +Does the above, but for all viewers. + +##### `flash(mob/target, times = -1)` +Causes the UI to flash for the specified target mob the specified number of times, the default keeps the element flashing until focused. + +##### `flash_all()` +Does the above, but for all viewers. + +##### `href(mob/user, action, list/parameters = list())` +Generates a href for the specified user which will invoke `oui_act` on the datasource with the specified action and parameters. + +#### `/datum/oracle_ui/themed` + +A subclass which supports templating and theming. + +##### `get_file(path)` +Loads a file from disk and returns the contents. Caches files loaded from disk for you. + +##### `get_content_file(filename)` +Loads a file from the current content folder and returns the contents. + +##### `get_themed_file(filename)` +Loads a file from the current theme folder and returns the contents. + +##### `process_template(template, variables)` +Processes a template and populates it with the provided variables. + +##### `get_inner_content(mob/target)` +Returns the templated content to be inserted into the main template for the specified target mob. + +##### `soft_update_fields()` +For all viewers, updates the fields in the template via the `updateFields` javaScript function. + +##### `soft_update_all()` +For all viewers, updates the content body in the template via the `replaceContent` javaScript function. + +##### `change_page(var/newpage)` +Changes the template to use to draw the page and forces an update to all viewers + +##### `act(label, mob/user, action, list/parameters = list(), class = "", disabled = FALSE` +Returns a fully formatted hyperlink for the specified user. `label` will be the hyperlink label, `action` and `parameters` are what will be passed to `oui_act`, `class` is any CSS classes to apply to the hyperlink and `disabled` will disable the hyperlink. + +#### `/datum` + +Functions built into all objects to support oracle_ui. There are default implementations for most major superclasses. + +##### `oui_canview(mob/user)` +Returns whether the specified user view the UI at this time. + +##### `oui_getcontent(mob/user)` +Returns the raw HTML to be sent to the specified user. *This proc is not used in the themed subclass of oracle_ui.* + +##### `oui_data(mob/user)` +Returns templating data for the specified user. *This proc is only used in the themed subclass of oracle_ui.* + +##### `oui_data_debug(mob/user)` +Returns the above, but JSON-encoded and escaped, for copy pasting into the web IDE. *This proc is only used for debugging purposes.* + +##### `oui_act(mob/user, action, list/params)` +Called when a hyperlink is clicked in the UI. diff --git a/code/modules/oracle_ui/assets.dm b/code/modules/oracle_ui/assets.dm new file mode 100644 index 0000000000..5d26d80a81 --- /dev/null +++ b/code/modules/oracle_ui/assets.dm @@ -0,0 +1,8 @@ +/datum/asset/simple/oui_theme_nano + assets = list( + // JavaScript + "sui-nano-common.js" = 'html/oracle_ui/themes/nano/sui-nano-common.js', + "sui-nano-jquery.min.js" = 'html/oracle_ui/themes/nano/sui-nano-jquery.min.js', + // Stylesheets + "sui-nano-common.css" = 'html/oracle_ui/themes/nano/sui-nano-common.css', + ) diff --git a/code/modules/oracle_ui/hookup_procs.dm b/code/modules/oracle_ui/hookup_procs.dm new file mode 100644 index 0000000000..e6038744c1 --- /dev/null +++ b/code/modules/oracle_ui/hookup_procs.dm @@ -0,0 +1,44 @@ +/datum/proc/oui_canview(mob/user) + return TRUE + +/datum/proc/oui_getcontent(mob/user) + return "Default Implementation" + +/datum/proc/oui_canuse(mob/user) + if(isobserver(user) && !user.has_unlimited_silicon_privilege) + return FALSE + return oui_canview(user) + +/datum/proc/oui_data(mob/user) + return list() + +/datum/proc/oui_data_debug(mob/user) + return html_encode(json_encode(oui_data(user))) + +/datum/proc/oui_act(mob/user, action, list/params) + // No Implementation + +/atom/oui_canview(mob/user) + if(isobserver(user)) + return TRUE + if(user.incapacitated()) + return FALSE + if(isturf(src.loc) && Adjacent(user)) + return TRUE + return FALSE + +/obj/item/oui_canview(mob/user) + if(src.loc == user) + return src in user.held_items + return ..() + +/obj/machinery/oui_canview(mob/user) + if(user.has_unlimited_silicon_privilege) + return TRUE + if(!can_interact()) + return FALSE + if(iscyborg(user)) + return can_see(user, src, 7) + if(isAI(user)) + return GLOB.cameranet.checkTurfVis(get_turf_pixel(src)) + return ..() diff --git a/code/modules/oracle_ui/oracle_ui.dm b/code/modules/oracle_ui/oracle_ui.dm new file mode 100644 index 0000000000..5e8d6b9c7b --- /dev/null +++ b/code/modules/oracle_ui/oracle_ui.dm @@ -0,0 +1,134 @@ +/datum/oracle_ui + var/width = 512 + var/height = 512 + var/can_close = TRUE + var/can_minimize = FALSE + var/can_resize = TRUE + var/titlebar = TRUE + var/window_id = null + var/viewers[0] + var/auto_check_view = TRUE + var/auto_refresh = FALSE + var/atom/datasource = null + var/datum/asset/assets = null + +/datum/oracle_ui/New(atom/n_datasource, n_width = 512, n_height = 512, n_assets = null) + datasource = n_datasource + window_id = REF(src) + width = n_width + height = n_height + +/datum/oracle_ui/Destroy() + close_all() + if(src.datum_flags & DF_ISPROCESSING) + STOP_PROCESSING(SSobj, src) + return ..() + +/datum/oracle_ui/process() + if(auto_check_view) + check_view_all() + if(auto_refresh) + render_all() + +/datum/oracle_ui/proc/get_content(mob/target) + return call(datasource, "oui_getcontent")(target) + +/datum/oracle_ui/proc/can_view(mob/target) + return call(datasource, "oui_canview")(target) + +/datum/oracle_ui/proc/test_viewer(mob/target, updating) + //If the target is null or does not have a client, remove from viewers and return + if(!target | !target.client | !can_view(target)) + viewers -= target + if(viewers.len < 1 && (src.datum_flags & DF_ISPROCESSING)) + STOP_PROCESSING(SSobj, src) //No more viewers, stop polling + close(target) + return FALSE + //If this is an update, and they have closed the window, remove from viewers and return + if(updating && winget(target, window_id, "is-visible") != "true") + viewers -= target + if(viewers.len < 1 && (src.datum_flags & DF_ISPROCESSING)) + STOP_PROCESSING(SSobj, src) //No more viewers, stop polling + return FALSE + return TRUE + +/datum/oracle_ui/proc/render(mob/target, updating = FALSE) + set waitfor = FALSE //Makes this an async call + if(!can_view(target)) + return + //Check to see if they have the window open still if updating + if(updating && !test_viewer(target, updating)) + return + //Send assets + if(!updating && assets) + assets.send(target) + //Add them to the viewers if they aren't there already + viewers |= target + if(!(src.datum_flags & DF_ISPROCESSING) && (auto_refresh | auto_check_view)) + START_PROCESSING(SSobj, src) //Start processing to poll for viewability + //Send the content + if(updating) + target << output(get_content(target), "[window_id].browser") + else + target << browse(get_content(target), "window=[window_id];size=[width]x[height];can_close=[can_close];can_minimize=[can_minimize];can_resize=[can_resize];titlebar=[titlebar];focus=false;") + steal_focus(target) + +/datum/oracle_ui/proc/render_all() + for(var/viewer in viewers) + render(viewer, TRUE) + +/datum/oracle_ui/proc/close(mob/target) + if(target && target.client) + target << browse(null, "window=[window_id]") + +/datum/oracle_ui/proc/close_all() + for(var/viewer in viewers) + close(viewer) + viewers = list() + +/datum/oracle_ui/proc/check_view_all() + for(var/viewer in viewers) + check_view(viewer) + +/datum/oracle_ui/proc/check_view(mob/target) + set waitfor = FALSE //Makes this an async call + if(!test_viewer(target, TRUE)) + close(target) + +/datum/oracle_ui/proc/call_js(mob/target, js_func, list/parameters = list()) + set waitfor = FALSE //Makes this an async call + if(!test_viewer(target, TRUE)) + return + target << output(list2params(parameters),"[window_id].browser:[js_func]") + +/datum/oracle_ui/proc/call_js_all(js_func, list/parameters = list()) + for(var/viewer in viewers) + call_js(viewer, js_func, parameters) + +/datum/oracle_ui/proc/steal_focus(mob/target) + set waitfor = FALSE //Makes this an async call + winset(target, "[window_id]","focus=true") + +/datum/oracle_ui/proc/steal_focus_all() + for(var/viewer in viewers) + steal_focus(viewer) + +/datum/oracle_ui/proc/flash(mob/target, times = -1) + set waitfor = FALSE //Makes this an async call + winset(target, "[window_id]","flash=[times]") + +/datum/oracle_ui/proc/flash_all(times = -1) + for(var/viewer in viewers) + flash(viewer, times) + +/datum/oracle_ui/proc/href(mob/user, action, list/parameters = list()) + var/params_string = replacetext(list2params(parameters),"&",";") + return "?src=[REF(src)];sui_action=[action];sui_user=[REF(user)];[params_string]" + +/datum/oracle_ui/Topic(href, parameters) + var/action = parameters["sui_action"] + var/mob/current_user = locate(parameters["sui_user"]) + if(!call(datasource, "oui_canuse")(current_user)) + return + if(datasource) + call(datasource, "oui_act")(current_user, action, parameters); diff --git a/code/modules/oracle_ui/themed.dm b/code/modules/oracle_ui/themed.dm new file mode 100644 index 0000000000..56b82c2647 --- /dev/null +++ b/code/modules/oracle_ui/themed.dm @@ -0,0 +1,82 @@ +/datum/oracle_ui/themed + var/theme = "" + var/content_root = "" + var/current_page = "index.html" + var/root_template = "" + +/datum/oracle_ui/themed/New(atom/n_datasource, n_width = 512, n_height = 512, n_content_root = "") + root_template = get_themed_file("index.html") + content_root = n_content_root + return ..(n_datasource, n_width, n_height, get_asset_datum(/datum/asset/simple/oui_theme_nano)) + +/datum/oracle_ui/themed/process() + if(auto_check_view) + check_view_all() + if(auto_refresh) + soft_update_fields() + +GLOBAL_LIST_EMPTY(oui_template_variables) +GLOBAL_LIST_EMPTY(oui_file_cache) + +/datum/oracle_ui/themed/proc/get_file(path) + if(GLOB.oui_file_cache[path]) + return GLOB.oui_file_cache[path] + else if(fexists(path)) + var/data = file2text(path) + GLOB.oui_file_cache[path] = data + return data + else + var/errormsg = "MISSING PATH '[path]'" +#ifndef UNIT_TESTS + log_world(errormsg) //Because Travis absolutely hates these procs +#endif + return errormsg + +/datum/oracle_ui/themed/proc/get_content_file(filename) + return get_file("./html/oracle_ui/content/[content_root]/[filename]") + +/datum/oracle_ui/themed/proc/get_themed_file(filename) + return get_file("./html/oracle_ui/themes/[theme]/[filename]") + +/datum/oracle_ui/themed/proc/process_template(template, variables) + var/regex/pattern = regex("\\@\\{(\\w+)\\}","gi") + GLOB.oui_template_variables = variables + var/replaced = pattern.Replace(template, /proc/oui_process_template_replace) + GLOB.oui_template_variables = null + return replaced + +/proc/oui_process_template_replace(match, group1) + var/value = GLOB.oui_template_variables[group1] + return "[value]" + +/datum/oracle_ui/themed/proc/get_inner_content(mob/target) + var/list/data = call(datasource, "oui_data")(target) + return process_template(get_content_file(current_page), data) + +/datum/oracle_ui/themed/get_content(mob/target) + var/list/template_data = list("title" = datasource.name, "body" = get_inner_content(target)) + return process_template(root_template, template_data) + +/datum/oracle_ui/themed/proc/soft_update_fields() + for(var/viewer in viewers) + var/json = json_encode(call(datasource, "oui_data")(viewer)) + call_js(viewer, "updateFields", list(json)) + +/datum/oracle_ui/themed/proc/soft_update_all() + for(var/viewer in viewers) + call_js(viewer, "replaceContent", list(get_inner_content(viewer))) + +/datum/oracle_ui/themed/proc/change_page(newpage) + if(newpage == current_page) + return + current_page = newpage + render_all() + +/datum/oracle_ui/themed/proc/act(label, mob/user, action, list/parameters = list(), class = "", disabled = FALSE) + if(disabled) + return "[label]" + else + return "[label]" + +/datum/oracle_ui/themed/nano + theme = "nano" diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 37877ffb09..059a42bb36 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -31,6 +31,7 @@ var/spam_flag = 0 var/contact_poison // Reagent ID to transfer on contact var/contact_poison_volume = 0 + var/datum/oracle_ui/ui = null /obj/item/paper/pickup(user) @@ -40,16 +41,40 @@ if(!istype(G) || G.transfer_prints) H.reagents.add_reagent(contact_poison,contact_poison_volume) contact_poison = null + ui.check_view_all() ..() +/obj/item/paper/dropped(mob/user) + ui.check_view(user) + return ..() + /obj/item/paper/Initialize() . = ..() pixel_y = rand(-8, 8) pixel_x = rand(-9, 9) + ui = new /datum/oracle_ui(src, 420, 600, get_asset_datum(/datum/asset/spritesheet/simple/paper)) + ui.can_resize = FALSE update_icon() updateinfolinks() +/obj/item/paper/oui_getcontent(mob/target) + if(!target.is_literate()) + return "[name][stars(info)]
[stamps]" + else if(istype(target.get_active_held_item(), /obj/item/pen) | istype(target.get_active_held_item(), /obj/item/toy/crayon)) + return "[name][info_links]
[stamps]" + else + return "[name][info]
[stamps]" + +/obj/item/paper/oui_canview(mob/target) + if(check_rights_for(target.client, R_FUN)) //Allows admins to view faxes + return TRUE + if(isAI(target)) + var/mob/living/silicon/ai/ai = target + return get_dist(src, ai.current) < 2 + if(iscyborg(target)) + return get_dist(src, target) < 2 + return ..() /obj/item/paper/update_icon() @@ -65,20 +90,13 @@ /obj/item/paper/examine(mob/user) ..() to_chat(user, "Alt-click to fold it.") - - var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/simple/paper) - assets.send(user) - - if(in_range(user, src) || isobserver(user)) - if(user.is_literate()) - user << browse("[name][info]
[stamps]", "window=[name]") - onclose(user, "[name]") - else - user << browse("[name][stars(info)]
[stamps]", "window=[name]") - onclose(user, "[name]") + if(oui_canview(user)) + ui.render(user) else to_chat(user, "You're too far away to read it!") +/obj/item/paper/proc/show_content(mob/user) + user.examinate(src) /obj/item/paper/verb/rename() set name = "Rename paper" @@ -98,7 +116,7 @@ if((loc == usr && usr.stat == CONSCIOUS)) name = "paper[(n_name ? text("- '[n_name]'") : null)]" add_fingerprint(usr) - + ui.render_all() /obj/item/paper/suicide_act(mob/user) user.visible_message("[user] scratches a grid on [user.p_their()] wrist with the paper! It looks like [user.p_theyre()] trying to commit sudoku...") @@ -108,7 +126,7 @@ spam_flag = FALSE /obj/item/paper/attack_self(mob/user) - user.examinate(src) + show_content(user) if(rigged && (SSevents.holidays && SSevents.holidays[APRIL_FOOLS])) if(!spam_flag) spam_flag = TRUE @@ -123,11 +141,9 @@ else //cyborg or AI not seeing through a camera dist = get_dist(src, user) if(dist < 2) - usr << browse("[name][info]
[stamps]", "window=[name]") - onclose(usr, "[name]") + show_content(user) else - usr << browse("[name][stars(info)]
[stamps]", "window=[name]") - onclose(usr, "[name]") + to_chat(user, "You can't quite see it.") /obj/item/paper/proc/addtofield(id, text, links = 0) @@ -173,6 +189,7 @@ for(var/i in 1 to min(fields, 15)) addtofield(i, "write", 1) info_links = info_links + "write" + ui.render_all() /obj/item/paper/proc/clearpaper() @@ -274,7 +291,7 @@ else info += t // Oh, he wants to edit to the end of the file, let him. updateinfolinks() - usr << browse("[name][info_links]
[stamps]", "window=[name]") // Update the window + show_content(usr) update_icon() @@ -289,7 +306,7 @@ if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) if(user.is_literate()) - user << browse("[name][info_links]
[stamps]", "window=[name]") + show_content(user) return else to_chat(user, "You don't know how to read or write.") @@ -312,6 +329,7 @@ add_overlay(stampoverlay) to_chat(user, "You stamp the paper with your rubber stamp.") + ui.render_all() if(P.is_hot()) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10)) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 7d71a9acdd..d1b99c0e3c 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -207,6 +207,7 @@ name = "combat shotgun" desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath." icon_state = "cshotgun" + fire_delay = 3 mag_type = /obj/item/ammo_box/magazine/internal/shot/com w_class = WEIGHT_CLASS_HUGE unique_reskin = list("Tatical" = "cshotgun", diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index f9aa47c6a3..4a1c954b1b 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -5,7 +5,7 @@ /obj/item/projectile/bullet/shotgun_beanbag name = "beanbag slug" damage = 5 - stamina = 80 + stamina = 70 /obj/item/projectile/bullet/incendiary/shotgun name = "incendiary slug" @@ -61,12 +61,12 @@ /obj/item/projectile/bullet/pellet/shotgun_buckshot name = "buckshot pellet" - damage = 12.5 + damage = 10 /obj/item/projectile/bullet/pellet/shotgun_rubbershot name = "rubbershot pellet" - damage = 3 - stamina = 25 + damage = 2 + stamina = 15 /obj/item/projectile/bullet/pellet/Range() ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 8416bb17f2..85cf5e5011 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -233,6 +233,12 @@ else reagents.remove_reagent(id, amount) . = TRUE + else if (amount == -1) // -1 means custom amount + useramount = input("Enter the Amount you want to transfer:", name, useramount) as num|null + if (useramount > 0) + end_fermi_reaction() + reagents.trans_id_to(beaker, id, useramount) + . = TRUE if("toggleMode") mode = !mode @@ -379,7 +385,7 @@ reagents.trans_to(P, vol_part) . = TRUE //END CITADEL ADDITIONS - if("analyze") + if("analyzeBeak") var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]] if(R) var/state = "Unknown" @@ -395,7 +401,38 @@ if(Rcr && Rcr.FermiChem) fermianalyze = TRUE var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2 - analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = initial(R.purity), "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache) + var/datum/reagent/targetReagent = beaker.reagents.has_reagent("[R.id]") + + if(!targetReagent) + CRASH("Tried to find a reagent that doesn't exist in the chem_master!") + analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache) + else + fermianalyze = FALSE + analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold)) + screen = "analyze" + return + + if("analyzeBuff") + var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]] + if(R) + var/state = "Unknown" + if(initial(R.reagent_state) == 1) + state = "Solid" + else if(initial(R.reagent_state) == 2) + state = "Liquid" + else if(initial(R.reagent_state) == 3) + state = "Gas" + var/const/P = 3 //The number of seconds between life ticks + var/T = initial(R.metabolization_rate) * (60 / P) + if(istype(R, /datum/reagent/fermi)) + fermianalyze = TRUE + var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.id) + var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2 + var/datum/reagent/targetReagent = reagents.has_reagent("[R.id]") + + if(!targetReagent) + CRASH("Tried to find a reagent that doesn't exist in the chem_master!") + analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache) else fermianalyze = FALSE analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold)) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index a74d6216db..88073ca5f3 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1395,12 +1395,12 @@ All effects don't start immediately, but rather get worse over time; the rate is M.set_drugginess(50) M.dizziness +=2 M.adjustBrainLoss(1*REM, 150) - if(prob(20)) + if(prob(20) && !holder.has_reagent("neuroweak")) M.adjustStaminaLoss(10) M.drop_all_held_items() to_chat(M, "You cant feel your hands!") if(current_cycle > 5) - if(prob(20)) + if(prob(20) && !holder.has_reagent("neuroweak")) var/t = pickt() ADD_TRAIT(M, t, type) M.adjustStaminaLoss(10) diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 913a6b3ef7..dd51ce2bc7 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -886,3 +886,23 @@ to_chat(M, "[pick("Diamond skies where white deer fly.","Sipping strawberry tea.","Silver raindrops drift through timeless, Neverending June.","Crystal ... pearls free, with love!","Beaming love into me.")]") ..() . = 1 + +/datum/reagent/consumable/catnip_tea + name = "Catnip Tea" + id = "catnip_tea" + description = "A sleepy and tasty catnip tea!" + color = "#101000" // rgb: 16, 16, 0 + nutriment_factor = 0 + taste_description = "sugar and catnip" + glass_icon_state = "teaglass" + glass_name = "glass of catnip tea" + glass_desc = "A purrfect drink for a cat." + +/datum/reagent/consumable/catnip_tea/on_mob_life(mob/living/carbon/M) + M.adjustStaminaLoss(min(50 - M.getStaminaLoss(), 3)) + if(prob(20)) + M.emote("nya") + if(prob(20)) + to_chat(M, "[pick("Headpats feel nice.", "Backrubs would be nice.", "Mew")]") + M.adjustArousalLoss(5) + ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 07c9b166ff..bc64d6636b 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -536,12 +536,12 @@ race = /datum/species/fly mutationtext = "The pain subsides. You feel... buzzy." -/datum/reagent/mutationtoxin/moth - name = "Moth Mutation Toxin" +/datum/reagent/mutationtoxin/insect + name = "Insect Mutation Toxin" id = "mothmutationtoxin" description = "A glowing toxin." color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/moth + race = /datum/species/insect mutationtext = "The pain subsides. You feel... attracted to light." /datum/reagent/mutationtoxin/pod @@ -2031,3 +2031,18 @@ /datum/reagent/changeling_string/Destroy() qdel(original_dna) return ..() + +/datum/reagent/pax/catnip + name = "catnip" + id = "catnip" + taste_description = "grass" + description = "A colorless liquid that makes people more peaceful and felines more happy." + metabolization_rate = 1.75 * REAGENTS_METABOLISM + +/datum/reagent/pax/catnip/on_mob_life(mob/living/carbon/M) + if(prob(20)) + M.emote("nya") + if(prob(20)) + to_chat(M, "[pick("Headpats feel nice.", "The feeling of a hairball...", "Backrubs would be nice.", "Whats behind those doors?")]") + M.adjustArousalLoss(2) + ..() diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index e34f34675c..fb2e4c396c 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -623,7 +623,7 @@ required_temp = 450 /datum/chemical_reaction/moff - name = "moth mutation toxic" + name = "insect mutation toxic" id = "moffs" results = list("mothmutationtoxin" = 1) required_reagents = list("liquid_dark_matter" = 2, "ammonia" = 5, "lithium" = 1, "stablemutationtoxin" = 1) diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 871fd32b16..082b1a7d11 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -264,6 +264,13 @@ name = "disposal unit" desc = "A pneumatic waste disposal unit." icon_state = "disposal" + var/datum/oracle_ui/themed/nano/ui + +/obj/machinery/disposal/bin/Initialize(mapload, obj/structure/disposalconstruct/make_from) + . = ..() + ui = new /datum/oracle_ui/themed/nano(src, 330, 190, "disposal_bin") + ui.auto_refresh = TRUE + ui.can_resize = FALSE // attack by item places it in to disposal /obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, params) @@ -275,32 +282,43 @@ STR.remove_from_storage(O,src) T.update_icon() update_icon() + ui.soft_update_fields() else + ui.soft_update_fields() return ..() // handle machine interaction -/obj/machinery/disposal/bin/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) +/obj/machinery/disposal/bin/ui_interact(mob/user, state) if(stat & BROKEN) return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "disposal_unit", name, 300, 200, master_ui, state) - ui.open() + if(user.loc == src) + to_chat(user, "You cannot reach the controls from inside!") + return + ui.render(user) -/obj/machinery/disposal/bin/ui_data(mob/user) +/obj/machinery/disposal/bin/oui_canview(mob/user) + if(user.loc == src) + return FALSE + if(stat & BROKEN) + return FALSE + if(Adjacent(user)) + return TRUE + return ..() + + +/obj/machinery/disposal/bin/oui_data(mob/user) var/list/data = list() - data["flush"] = flush - data["full_pressure"] = full_pressure - data["pressure_charging"] = pressure_charging - data["panel_open"] = panel_open - var/per = CLAMP(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 100) - data["per"] = round(per, 1) + data["flush"] = flush ? ui.act("Disengage", user, "handle-0", class="active") : ui.act("Engage", user, "handle-1") + data["full_pressure"] = full_pressure ? "Ready" : (pressure_charging ? "Pressurizing" : "Off") + data["pressure_charging"] = pressure_charging ? ui.act("Turn Off", user, "pump-0", class="active", disabled=full_pressure) : ui.act("Turn On", user, "pump-1", disabled=full_pressure) + var/per = full_pressure ? 100 : CLAMP(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 99) + data["per"] = "[round(per, 1)]%" + data["contents"] = ui.act("Eject Contents", user, "eject", disabled=contents.len < 1) data["isai"] = isAI(user) return data -/obj/machinery/disposal/bin/ui_act(action, params) +/obj/machinery/disposal/bin/oui_act(mob/user, action, list/params) if(..()) return @@ -327,6 +345,7 @@ if("eject") eject() . = TRUE + ui.soft_update_fields() /obj/machinery/disposal/bin/hitby(atom/movable/AM) @@ -346,6 +365,7 @@ full_pressure = FALSE pressure_charging = TRUE update_icon() + ui.soft_update_fields() /obj/machinery/disposal/bin/update_icon() cut_overlays() @@ -389,7 +409,7 @@ do_flush() flush_count = 0 - updateDialog() + ui.soft_update_fields() if(flush && air_contents.return_pressure() >= SEND_PRESSURE) // flush can happen even without power do_flush() diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm index 71f7234e34..dae59408c8 100644 --- a/code/modules/research/designs/limbgrower_designs.dm +++ b/code/modules/research/designs/limbgrower_designs.dm @@ -8,7 +8,7 @@ build_type = LIMBGROWER reagents_list = list("synthflesh" = 25) build_path = /obj/item/bodypart/l_arm - category = list("initial","human","lizard","fly","moth","plasmaman") + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") /datum/design/rightarm name = "Right Arm" @@ -16,7 +16,7 @@ build_type = LIMBGROWER reagents_list = list("synthflesh" = 25) build_path = /obj/item/bodypart/r_arm - category = list("initial","human","lizard","fly","moth","plasmaman") + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") /datum/design/leftleg name = "Left Leg" @@ -24,7 +24,7 @@ build_type = LIMBGROWER reagents_list = list("synthflesh" = 25) build_path = /obj/item/bodypart/l_leg - category = list("initial","human","lizard","fly","moth","plasmaman") + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") /datum/design/rightleg name = "Right Leg" @@ -32,7 +32,7 @@ build_type = LIMBGROWER reagents_list = list("synthflesh" = 25) build_path = /obj/item/bodypart/r_leg - category = list("initial","human","lizard","fly","moth","plasmaman") + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") /datum/design/armblade name = "Arm Blade" diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 81b491e6de..40c22189d9 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -40,6 +40,7 @@ var/skin_tone = "" var/body_gender = "" var/species_id = "" + var/should_draw_citadel = FALSE var/should_draw_gender = FALSE var/should_draw_greyscale = FALSE var/species_color = "" @@ -48,8 +49,8 @@ var/body_markings = "" //for bodypart markings var/body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi' var/list/markings_color = list() - var/auxmarking = "" - var/list/auxmarking_color = list() + var/aux_marking + var/digitigrade_type var/animal_origin = null //for nonhuman bodypart (e.g. monkey) var/dismemberable = 1 //whether it can be dismembered with a weapon. @@ -309,7 +310,7 @@ should_draw_greyscale = FALSE no_update = TRUE body_markings = "husk" // reeee - auxmarking = "husk" + aux_marking = "husk" if(no_update) return @@ -351,6 +352,13 @@ else species_color = "" + if("legs" in S.default_features) + if(body_zone == BODY_ZONE_L_LEG || body_zone == BODY_ZONE_R_LEG) + if(DIGITIGRADE in S.species_traits) + digitigrade_type = lowertext(H.dna.features.["legs"]) + else + digitigrade_type = null + if("mam_body_markings" in S.default_features) var/datum/sprite_accessory/Smark Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]] @@ -358,15 +366,15 @@ body_markings_icon = Smark.icon if(H.dna.features.["mam_body_markings"] != "None") body_markings = lowertext(H.dna.features.["mam_body_markings"]) - auxmarking = lowertext(H.dna.features.["mam_body_markings"]) + aux_marking = lowertext(H.dna.features.["mam_body_markings"]) else body_markings = "plain" - auxmarking = "plain" + aux_marking = "plain" markings_color = list(colorlist) else body_markings = null - auxmarking = null + aux_marking = null if(!dropping_limb && H.dna.check_mutation(HULK)) mutation_color = "00aa00" @@ -381,7 +389,7 @@ if(status == BODYPART_ROBOTIC) dmg_overlay_type = "robotic" body_markings = null - auxmarking = null + aux_marking = null if(dropping_limb) no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner. @@ -423,7 +431,7 @@ else . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - . += image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/image/aux @@ -453,21 +461,25 @@ if(should_draw_gender) limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" else if(use_digitigrade) - limb.icon_state = "digitigrade_[use_digitigrade]_[body_zone]" + limb.icon_state = "[digitigrade_type]_[use_digitigrade]_[body_zone]" else limb.icon_state = "[species_id]_[body_zone]" else limb.icon = 'icons/mob/human_parts.dmi' if(should_draw_gender) limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" + else if(use_digitigrade) + limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]" else limb.icon_state = "[species_id]_[body_zone]" // Citadel Start - if(should_draw_citadel && !use_digitigrade) + if(should_draw_citadel) limb.icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi' if(should_draw_gender) limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" + else if(use_digitigrade) + limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]" else limb.icon_state = "[species_id]_[body_zone]" @@ -476,7 +488,7 @@ if(species_id == "husk") marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) - marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else if(!use_digitigrade) if(body_zone == BODY_ZONE_CHEST) @@ -484,20 +496,21 @@ else marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += marking // Citadel End if(aux_zone) aux = image(limb.icon, "[species_id]_[aux_zone]", -aux_layer, image_dir) - . += aux - if(!isnull(auxmarking)) + if(!isnull(aux_marking)) if(species_id == "husk") auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir) else auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir) - . += auxmarking + . += aux + . += auxmarking else limb.icon = icon @@ -509,7 +522,7 @@ if(aux_zone) aux = image(limb.icon, "[aux_zone]", -aux_layer, image_dir) . += aux - if(!isnull(auxmarking)) + if(!isnull(aux_marking)) if(species_id == "husk") auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir) else @@ -528,7 +541,7 @@ else marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) . += marking return @@ -538,8 +551,11 @@ limb.color = "#[draw_color]" if(aux_zone) aux.color = "#[draw_color]" - if(!isnull(auxmarking)) - auxmarking.color = list(markings_color) + if(!isnull(aux_marking)) + if(species_id == "husk") + auxmarking.color = "#141414" + else + auxmarking.color = list(markings_color) if(!isnull(body_markings)) if(species_id == "husk") diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index eeaaaf2a03..40d11ca2a4 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -321,7 +321,7 @@ if(!istype(parent)) return INITIALIZE_HINT_QDEL -/obj/item/organ/eyes/moth - name = "moth eyes" +/obj/item/organ/eyes/insect + name = "insect eyes" desc = "These eyes seem to have increased sensitivity to bright light, with no improvement to low light vision." flash_protect = -1 diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index a265a4e907..c577643df3 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -54,7 +54,7 @@ /obj/item/clothing/head/ushanka = 1, /obj/item/clothing/suit/imperium_monk = 1, /obj/item/clothing/mask/gas/cyborg = 1, - /obj/item/clothing/suit/holidaypriest = 1, + /obj/item/clothing/suit/chaplain/holidaypriest = 1, /obj/item/clothing/head/wizard/marisa/fake = 1, /obj/item/clothing/suit/wizrobe/marisa/fake = 1, /obj/item/clothing/under/sundress = 1, @@ -122,7 +122,7 @@ /obj/item/clothing/shoes/roman = 1, /obj/item/shield/riot/roman/fake = 1, /obj/item/skub = 1, - /obj/item/clothing/under/lobster = 1, // CIT CHANGES + /obj/item/clothing/under/lobster = 1, // CIT CHANGES /obj/item/clothing/head/lobsterhat = 1, /obj/item/clothing/head/drfreezehat = 1, /obj/item/clothing/suit/dracula = 1, diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index 1497992fe8..b232184975 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -99,7 +99,9 @@ /obj/item/clothing/suit/jacket/letterman_red = 3, /obj/item/clothing/ears/headphones = 10, /obj/item/clothing/suit/apron/purple_bartender = 4, - /obj/item/clothing/under/rank/bartender/purple = 4) + /obj/item/clothing/under/rank/bartender/purple = 4, + /obj/item/clothing/accessory/attrocious_pokadots = 8, + /obj/item/clothing/accessory/black_white_pokadots = 8) contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3, /obj/item/clothing/under/syndicate/tacticool/skirt = 3, /obj/item/clothing/mask/balaclava = 3, @@ -109,7 +111,8 @@ /obj/item/clothing/suit/jacket/letterman_syndie = 5, /obj/item/clothing/under/jabroni = 2, /obj/item/clothing/suit/vapeshirt = 2, - /obj/item/clothing/under/geisha = 4) + /obj/item/clothing/under/geisha = 4, + /obj/item/clothing/accessory/syndi_pokadots = 4) premium = list(/obj/item/clothing/under/suit_jacket/checkered = 4, /obj/item/clothing/head/mailman = 2, /obj/item/clothing/under/rank/mailman = 2, @@ -117,7 +120,8 @@ /obj/item/clothing/suit/jacket/leather/overcoat = 4, /obj/item/clothing/under/pants/mustangjeans = 3, /obj/item/clothing/neck/necklace/dope = 5, - /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5) + /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5, + /obj/item/clothing/accessory/nt_pokadots = 5) refill_canister = /obj/item/vending_refill/clothing /obj/item/vending_refill/clothing diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index 015890419d..0cf0069436 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -317,10 +317,10 @@ /obj/item/clothing/under/rank/chaplain = 2, /obj/item/clothing/under/rank/chaplain/skirt = 2, /obj/item/clothing/shoes/sneakers/black = 2, - /obj/item/clothing/suit/nun = 2, + /obj/item/clothing/suit/chaplain/nun = 2, /obj/item/clothing/head/nun_hood = 2, - /obj/item/clothing/suit/holidaypriest = 2, - /obj/item/clothing/suit/pharaoh = 2, + /obj/item/clothing/suit/chaplain/holidaypriest = 2, + /obj/item/clothing/suit/chaplain/pharaoh = 2, /obj/item/clothing/head/nemes = 1, /obj/item/clothing/head/pharaoh = 1, /obj/item/storage/fancy/candle_box = 3) diff --git a/config/game_options.txt b/config/game_options.txt index 6d59f10807..2e346ce0ac 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -410,7 +410,7 @@ ROUNDSTART_RACES human ## Races that are strictly worse than humans that could probably be turned on without balance concerns ROUNDSTART_RACES lizard #ROUNDSTART_RACES fly -#ROUNDSTART_RACES moth +#ROUNDSTART_RACES insect ROUNDSTART_RACES plasmaman #ROUNDSTART_RACES shadow ROUNDSTART_RACES felinid diff --git a/html/changelogs/AutoChangeLog-pr-9086.yml b/html/changelogs/AutoChangeLog-pr-9086.yml new file mode 100644 index 0000000000..4dea682d47 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9086.yml @@ -0,0 +1,4 @@ +author: "original by TheChosenEvilOne, port by sishen1542" +delete-after: True +changes: + - rscadd: "Ported dynamic mode from /vg/, originally made by @DeityLink, @Kurfursten and @ShiftyRail" diff --git a/html/changelogs/AutoChangeLog-pr-9109.yml b/html/changelogs/AutoChangeLog-pr-9109.yml new file mode 100644 index 0000000000..137ca7f325 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9109.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "amazing things like tea of catnip, catnip and plant" diff --git a/html/changelogs/AutoChangeLog-pr-9199.yml b/html/changelogs/AutoChangeLog-pr-9199.yml new file mode 100644 index 0000000000..bf0219c7d9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9199.yml @@ -0,0 +1,7 @@ +author: "Tupinambis" +delete-after: True +changes: + - balance: "added a small fire delay (3 ticks) to automatic shotguns" + - balance: "Reduced buckshot brute damage by 20%. (12.5 -> 10 brute per pellet) (75 -> 60 brute at close range)" + - balance: "Reduced rubbershot stamina damage by 40% (25 -> 15 stamina per pellet) (150 -> 90 stamina at close range)" + - balance: "Reduced beanbag stamina damage by 12.5% (80 -> 70 stamina per shot)" diff --git a/html/changelogs/AutoChangeLog-pr-9241.yml b/html/changelogs/AutoChangeLog-pr-9241.yml new file mode 100644 index 0000000000..1cb08cd8d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9241.yml @@ -0,0 +1,6 @@ +author: "Alonefromhell" +delete-after: True +changes: + - rscadd: "Ported Oracle UI, a framework for self-updating and neat UI's" + - refactor: "Paper now uses OUI" + - refactor: "Bins now use OUI" diff --git a/html/changelogs/AutoChangeLog-pr-9251.yml b/html/changelogs/AutoChangeLog-pr-9251.yml new file mode 100644 index 0000000000..c40c2e05fc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9251.yml @@ -0,0 +1,5 @@ +author: "Linzolle" +delete-after: True +changes: + - tweak: "all chaplain suits can hold the same items in suit storage" + - code_imp: "improvement to organisation for chaplain suits" diff --git a/html/changelogs/AutoChangeLog-pr-9275.yml b/html/changelogs/AutoChangeLog-pr-9275.yml new file mode 100644 index 0000000000..cd74273366 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9275.yml @@ -0,0 +1,5 @@ +author: "Fermis" +delete-after: True +changes: + - bugfix: "Fixes analyse function on ChemMasters to correctly display purity." + - bugfix: "Fixes the custom transfer for buffer to beaker button." diff --git a/html/changelogs/AutoChangeLog-pr-9276.yml b/html/changelogs/AutoChangeLog-pr-9276.yml new file mode 100644 index 0000000000..f778c26c13 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9276.yml @@ -0,0 +1,6 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "trash" + - imageadd: "eye bleed +:add: misstakes" diff --git a/html/changelogs/AutoChangeLog-pr-9277.yml b/html/changelogs/AutoChangeLog-pr-9277.yml new file mode 100644 index 0000000000..4bf92cd32e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9277.yml @@ -0,0 +1,11 @@ +author: "Poojawa" +delete-after: True +changes: + - rscadd: "Added new wings to Insects and separated fluff from old ones, they're Insect's new body markings now without being per-limb (for now)." + - rscadd: "Horns are now available to mammals, and they have their own color." + - rscadd: "Legs are no longer a binary hack code, but actually something that can be changed. Framework for tauric adaptations." + - rscdel: "Purged Modular Citadel's sprite_accessories." + - bugfix: "improved the quality of a number of sprites." + - tweak: "Moths are now all insects. Avians and Aquatics are all anthromorphics. Just as planned." + - rscadd: "Anthromorphs can choose their preferred gibbing meat. I guess. Snowflakes are weird." + - bugfix: "Additional Gentlemen names." diff --git a/html/changelogs/AutoChangeLog-pr-9278.yml b/html/changelogs/AutoChangeLog-pr-9278.yml new file mode 100644 index 0000000000..3ec1eb839a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9278.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Spamming forged packets no longer crashes the server." diff --git a/html/changelogs/AutoChangeLog-pr-9279.yml b/html/changelogs/AutoChangeLog-pr-9279.yml new file mode 100644 index 0000000000..572f40e643 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9279.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixed undergarments color preferences resetting each round." diff --git a/html/changelogs/AutoChangeLog-pr-9288.yml b/html/changelogs/AutoChangeLog-pr-9288.yml new file mode 100644 index 0000000000..8a684431bf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9288.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - bugfix: "UI memes" diff --git a/html/changelogs/AutoChangeLog-pr-9289.yml b/html/changelogs/AutoChangeLog-pr-9289.yml new file mode 100644 index 0000000000..7abf947bfc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9289.yml @@ -0,0 +1,4 @@ +author: "Sishen1542" +delete-after: True +changes: + - bugfix: "fixing chems for strained muscles" diff --git a/html/changelogs/AutoChangeLog-pr-9295.yml b/html/changelogs/AutoChangeLog-pr-9295.yml new file mode 100644 index 0000000000..a96540c11b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9295.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - balance: "Slowed down police baton and tele baton speed by 75%, should be still be faster than the legacy speed (2 seconds) by 0.6 seconds. Telescopic batons' stamina cost per swing is now on par with police batons, ergo more expensive." diff --git a/html/changelogs/AutoChangeLog-pr-9302.yml b/html/changelogs/AutoChangeLog-pr-9302.yml new file mode 100644 index 0000000000..4f6ed4d336 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9302.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Things that access job_preferences now explicitly access keys, which means it no longer attempts to access invalid indices and runtimes as a result." diff --git a/html/oracle_ui/content/disposal_bin/index.html b/html/oracle_ui/content/disposal_bin/index.html new file mode 100644 index 0000000000..8f7713b53c --- /dev/null +++ b/html/oracle_ui/content/disposal_bin/index.html @@ -0,0 +1,27 @@ +
+
+ State: +
@{full_pressure}
+
+
+ Pressure: +
+
+
+
@{per}
+
+
+
+
+ Handle: +
@{flush}
+
+
+ Eject: +
@{contents}
+
+
+ Compressor: +
@{pressure_charging}
+
+
\ No newline at end of file diff --git a/html/oracle_ui/editor_tool.html b/html/oracle_ui/editor_tool.html new file mode 100644 index 0000000000..e0ce75bb29 --- /dev/null +++ b/html/oracle_ui/editor_tool.html @@ -0,0 +1,103 @@ + + + + + + OracleUI IDE + + + +
+

Content Template:

+ +
+
+

Data:

+ +
+
+

Output:

+ +
+ + + diff --git a/html/oracle_ui/themes/nano/index.html b/html/oracle_ui/themes/nano/index.html new file mode 100644 index 0000000000..388f6e4ce4 --- /dev/null +++ b/html/oracle_ui/themes/nano/index.html @@ -0,0 +1,19 @@ + + + + + + @{title} + + + + + +
+
@{title}
+
+ @{body} +
+
+ + diff --git a/html/oracle_ui/themes/nano/sui-nano-common.css b/html/oracle_ui/themes/nano/sui-nano-common.css new file mode 100644 index 0000000000..481b81c3e3 --- /dev/null +++ b/html/oracle_ui/themes/nano/sui-nano-common.css @@ -0,0 +1,353 @@ +body +{ + padding: 0; + margin: 0; + background-color: #272727; + font-size: 12px; + color: #ffffff; + line-height: 170%; + cursor: default; + -moz-user-select: none; + -ms-user-select: none; +} + +hr +{ + background-color: #40628a; + height: 1px; +} + +a, a:link, a:visited, a:active, .linkOn, .linkOff +{ + color: #ffffff; + text-decoration: none; + background: #40628a; + border: 1px solid #161616; + padding: 1px 4px 1px 4px; + margin: 0 2px 0 0; + cursor:default; +} + +a:hover +{ + color: #40628a; + background: #ffffff; +} + +a.white, a.white:link, a.white:visited, a.white:active +{ + color: #40628a; + text-decoration: none; + background: #ffffff; + border: 1px solid #161616; + padding: 1px 4px 1px 4px; + margin: 0 2px 0 0; + cursor:default; +} + +a.white:hover +{ + color: #ffffff; + background: #40628a; +} + +.active, a.active:link, a.active:visited, a.active:active, a.active:hover +{ + color: #ffffff; + background: #2f943c; + border-color: #24722e; +} + +.disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover +{ + color: #ffffff; + background: #999999; + border-color: #666666; +} + +a.icon, .linkOn.icon, .linkOff.icon +{ + position: relative; + padding: 1px 4px 2px 20px; +} + +a.icon img, .linkOn.icon img +{ + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; +} + +ul +{ + padding: 4px 0 0 10px; + margin: 0; + list-style-type: none; +} + +li +{ + padding: 0 0 2px 0; +} + +img, a img +{ + border-style:none; +} + +h1, h2, h3, h4, h5, h6 +{ + margin: 0; + padding: 16px 0 8px 0; + color: #517087; +} + +h1 +{ + font-size: 15px; +} + +h2 +{ + font-size: 14px; +} + +h3 +{ + font-size: 13px; +} + +h4 +{ + font-size: 12px; +} + +.uiWrapper +{ + + width: 100%; + height: 100%; +} + +.uiTitle +{ + clear: both; + padding: 6px 8px 6px 8px; + border-bottom: 2px solid #161616; + background: #383838; + color: #98B0C3; + font-size: 16px; +} + +.uiTitle.icon +{ + padding: 6px 8px 6px 42px; + background-position: 2px 50%; + background-repeat: no-repeat; +} + +.uiContent +{ + clear: both; + padding: 8px; + font-family: Verdana, Geneva, sans-serif; +} + +.good +{ + color: #00ff00; +} + +.average +{ + color: #d09000; +} + +.bad +{ + color: #ff0000; +} + +.highlight +{ + color: #8BA5C4; +} + +.dark +{ + color: #272727; +} + +.notice +{ + position: relative; + background: #E9C183; + color: #15345A; + font-size: 10px; + font-style: italic; + padding: 2px 4px 0 4px; + margin: 4px; +} + +.notice.icon +{ + padding: 2px 4px 0 20px; +} + +.notice img +{ + position: absolute; + top: 0; + left: 0; + width: 16px; + height: 16px; +} + +div.notice +{ + clear: both; +} + +.statusDisplay +{ + background: #000000; + color: #ffffff; + border: 1px solid #40628a; + padding: 4px; + margin: 3px 0; +} + +.statusLabel +{ + width: 138px; + float: left; + overflow: hidden; + color: #98B0C3; +} + +.statusValue +{ + float: left; +} + +.block +{ + padding: 8px; + margin: 10px 4px 4px 4px; + border: 1px solid #40628a; + background-color: #202020; +} + +.block h3 +{ + padding: 0; +} + +.progressBar +{ + position: relative; + width: 185px; + height: 14px; + border: 1px solid #666666; + float: left; + overflow: hidden; + padding: 1px; +} + +.progressLabel +{ + top: -2px; + height: 100%; + position: absolute; + right: 4px; + text-align: right; +} + +.progressFill +{ + width: 100%; + height: 100%; + background: #40628a; + overflow: hidden; + transition: width 2.2s linear; +} + +.progressFill.good +{ + color: #ffffff; + background: #00ff00; +} + +.progressFill.average +{ + color: #ffffff; + background: #d09000; +} + +.progressFill.bad +{ + color: #ffffff; + background: #ff0000; +} + +.progressFill.highlight +{ + color: #ffffff; + background: #8BA5C4; +} + +.clearBoth +{ + clear: both; +} + +.clearLeft +{ + clear: left; +} + +.clearRight +{ + clear: right; +} + +.line +{ + width: 100%; + clear: both; +} + +section .label, section .content +{ + display: table-cell; + margin: 0; + text-align: left; + vertical-align: middle; + padding: 3px 2px +} + +section .label +{ + width: 1%; + padding-right: 32px; + white-space: nowrap; + color: #8ba5c4; +} + +section +{ + display: table-row; + width: 100% +} + +.display { + width: calc(100% - 8px); + padding: 4px; + background-color: #000; + background-color: rgba(0, 0, 0, .33); + box-shadow: inset 0 0 5px rgba(0, 0, 0, .5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)"; + filter: progid: DXImageTransform.Microsoft.gradient(startColorStr=#54000000, endColorStr=#54000000); +} \ No newline at end of file diff --git a/html/oracle_ui/themes/nano/sui-nano-common.js b/html/oracle_ui/themes/nano/sui-nano-common.js new file mode 100644 index 0000000000..716891a53f --- /dev/null +++ b/html/oracle_ui/themes/nano/sui-nano-common.js @@ -0,0 +1,47 @@ +function replaceContent(body) { + var maincontent = document.getElementById('maincontent'); + if(maincontent) { + maincontent.innerHTML = body; + } +} + +function updateProgressLabels() { + var progressBars = document.getElementsByClassName("progressBar"); + for(var i = 0; i < progressBars.length; i++) { + var progressBar = progressBars[i]; + if(!progressBar) + continue; + var progressFill = progressBar.getElementsByClassName("progressFill")[0]; + if(!progressFill) + continue; + var width = parseInt(getComputedStyle(progressFill).width); + var maxWidth = parseInt(getComputedStyle(progressBar).width); + var progressLabel = progressBar.getElementsByClassName("progressLabel")[0]; + if(progressLabel) + progressLabel.innerHTML = Math.round((width / maxWidth) * 100) + '%'; + } +} + +if(getComputedStyle) { setInterval(updateProgressLabels, 50); } //Fallback + +function updateFields(json) { + var fields = JSON.parse(json); + for (var key in fields) { + let value = fields[key]; + var element = document.getElementById(key); + if(element == null) { + continue; + } else if(element.classList.contains('progressBar')) { + var progressFill = element.getElementsByClassName("progressFill")[0]; + if(progressFill) + progressFill.style["width"] = value; + if(!getComputedStyle) { //Fallback + var progressLabel = element.getElementsByClassName("progressLabel")[0]; + if(progressLabel) + progressLabel.innerHTML = value; + } + } else { + element.innerHTML = value; + } + } +} \ No newline at end of file diff --git a/html/oracle_ui/themes/nano/sui-nano-jquery.min.js b/html/oracle_ui/themes/nano/sui-nano-jquery.min.js new file mode 100644 index 0000000000..645c5adc18 --- /dev/null +++ b/html/oracle_ui/themes/nano/sui-nano-jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; + if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/
","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("