From 4191e1f7fd3cd68f50b380a97d9e79205d6e9e53 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 24 May 2017 05:54:42 -0500 Subject: [PATCH 01/37] Adds the Beach Bum Language --- code/__DEFINES/DNA.dm | 1 + code/datums/mutations.dm | 17 ++++++++++++++ code/modules/awaymissions/corpse.dm | 4 ++++ code/modules/language/beachbum.dm | 22 ++++++++++++++++++ .../mob/living/carbon/human/status_procs.dm | 13 +++++++++++ code/modules/surgery/organs/tongue.dm.rej | 9 +++++++ icons/misc/language.dmi | Bin 1675 -> 2383 bytes tgstation.dme.rej | 9 +++++++ 8 files changed, 75 insertions(+) create mode 100644 code/modules/language/beachbum.dm create mode 100644 code/modules/surgery/organs/tongue.dm.rej create mode 100644 tgstation.dme.rej diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 4a3618e941..9a2b6473af 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -23,6 +23,7 @@ #define WACKY "Wacky" #define MUT_MUTE "Mute" #define SMILE "Smile" +#define STONER "Stoner" #define UNINTELLIGABLE "Unintelligable" #define SWEDISH "Swedish" #define CHAV "Chav" diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index caab422e8b..05e4f4d458 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -608,6 +608,23 @@ GLOBAL_LIST_EMPTY(mutations_list) message = replacetext(message," muh valids "," getting my kicks ") return trim(message) +/datum/mutation/human/stoner + name = "Stoner" + quality = NEGATIVE + dna_block = NON_SCANNABLE + text_gain_indication = "You feel...totally chill, man!" + text_lose_indication = "You feel like you have a better sense of time." + +/datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner) + ..() + owner.grant_language(/datum/language/beachbum) + owner.remove_language(/datum/language/common) + +/datum/mutation/human/stoner/on_losing(mob/living/carbon/human/owner) + ..() + owner.grant_language(/datum/language/common) + owner.remove_language(/datum/language/beachbum) + /datum/mutation/human/laser_eyes name = "Laser Eyes" quality = POSITIVE diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 6100b296ed..0bda03c667 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -377,6 +377,10 @@ icon_state = "sleeper" flavour_text = "You are a beach bum!" +/obj/effect/mob_spawn/human/beach/equip(mob/living/carbon/human/H) + ..() + H.dna.add_mutation(STONER) + /////////////////Officers+Nanotrasen Security////////////////////// /obj/effect/mob_spawn/human/bridgeofficer diff --git a/code/modules/language/beachbum.dm b/code/modules/language/beachbum.dm new file mode 100644 index 0000000000..84c75c9ca4 --- /dev/null +++ b/code/modules/language/beachbum.dm @@ -0,0 +1,22 @@ +/datum/language/beachbum + name = "Beach Bumbian" + desc = "For when you're too toasted to speak normally." + speech_verb = "mumbles" + ask_verb = "grills" + exclaim_verb = "hollers" + key = "u" + space_chance = 85 + default_priority = 90 + syllables = list("cowabunga", "rad", "radical", "dudes", "bogus", "weeed", "every", + "dee", "dah", "woah", "surf", "blazed", "high", "heinous", "day", + "brah", "bro", "blown", "catch", "body", "beach", "oooo", "twenty", + "shiz", "phiz", "wizz", "pop", "chill", "awesome", "dude", "it", + "wax", "stoked", "yes", "ding", "way", "no", "wicked", "aaaa", + "cool", "hoo", "wah", "wee", "man", "maaaaaan", "mate", "wick", + "oh", "ocean", "up", "out", "rip", "slide", "big", "stomp", + "weed", "pot", "smoke", "four-twenty", "shove", "wacky", "hah", + "sick", "slash", "spit", "stoked", "shallow", "gun", "party", + "heavy", "stellar", "excellent", "triumphant", "babe", "four", + "tail", "trim", "tube", "wobble", "roll", "gnarly", "epic") + + icon_state = "beach" diff --git a/code/modules/mob/living/carbon/human/status_procs.dm b/code/modules/mob/living/carbon/human/status_procs.dm index 4e80477e6b..f1ff497a2a 100644 --- a/code/modules/mob/living/carbon/human/status_procs.dm +++ b/code/modules/mob/living/carbon/human/status_procs.dm @@ -20,3 +20,16 @@ . = ..() if(.) update_hair() + +/mob/living/carbon/human/set_drugginess(amount) + ..() + if(!amount) + remove_language(/datum/language/beachbum) + +/mob/living/carbon/human/adjust_drugginess(amount) + ..() + if(!dna.check_mutation(STONER)) + if(druggy) + grant_language(/datum/language/beachbum) + else + remove_language(/datum/language/beachbum) diff --git a/code/modules/surgery/organs/tongue.dm.rej b/code/modules/surgery/organs/tongue.dm.rej new file mode 100644 index 0000000000..11c501c6f6 --- /dev/null +++ b/code/modules/surgery/organs/tongue.dm.rej @@ -0,0 +1,9 @@ +diff a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm (rejected hunks) +@@ -17,6 +17,7 @@ + /datum/language/codespeak, + /datum/language/monkey, + /datum/language/narsie, ++ /datum/language/beachbum, + /datum/language/ratvar + )) + diff --git a/icons/misc/language.dmi b/icons/misc/language.dmi index 081bbf1aa3c0ef6f7e6b3989e29cd5314bddbcb3..f4894c2b90c0d864e1a2a80f2457ed507ebaba17 100644 GIT binary patch delta 2020 zcmV+bpa^!@ws`0uRu=2`dQH`$oN#xjz^C5r3o?d|RE@bK^V_U!lHHu&5L z_}&Kif7}M;;N{%H)y6oK!5@g@;N$PxZT8m=_SXva)(iC14)V|t-PYaJ%h$@j&cR-u zy+wY`#@6Z1R`AUg^3M|T&=T&+7}Lnq!nVe}r@FT?aKpOH=fEE6!yW6z8|}v$?Z_DI z#~J6sD9F3Zys^Nzth%=}aK*N(-nJ#-xFh7ee<9|+ALhLv+q+r8wZy)%z`L)#x2m|m zPJ&cP5X_k^(W5KYsVds8DB`#z;J7QxxxvS{#l*G2!L-4@vcJ)#Kh&l$*{v+zvn%Af zCfvMZ&cMvi!OPIV%gw#X$hgJexJlu;IODl6=e;WCz9-nkt<}iU)W*=!!_LdQ$ic6? zf9S(W=)ySb!z|~;SJ}+I6lJ@Mf_U>H8?u9YhuFro*pHExO?-N%18)*< z3HkAdkksnbp1WQ(mrhPd*`=tCYQNb^e=$2#?9%KGQdo3@Eo+kt6kN&*!B$M$p0<@7BJBVG1v*JYK~z|Uos|cC6IC3?e_uj! zX;UuOn55TX)kd2{ujjhBHCNX;4p3VnNbzFgChpyjBNS9r)VlZHilR6`MXk8^HV(us z4#bIqisS#@yYa3Rr1yXK)-}KH`;T{@BIM0{K6~khK7yH7Lkv$K;3Esr`LS+RPZMLqHtkK{x<mnd2M+$zjL=ghE3BYHDhR1|U0x5I7$Wf6)+J2_!`r z$&X|Ki1C243mFcZMRX_7PcMwiThA7CuUL-3Q zCV*5D4FXsf$-2s6_A0vpb{x(%a*UK9D#k)X{j;9=OMx( zg!)ED4=yBP5I`$<0D43TQE_e3+=-0X8E9lpAc31Xph*zpg18Pee<3cSL5QIMi5OD_ z;(;i}qhf;?jf)~;a&IM5aOv9w6eFpl1EGj5A}%DESpc$JVB~G23Oo#?(<*=q6d<~E z&H`?68!_uT^X3WGj6`O1?g3j&K^Vrz5OHiZ6)Pn$?~*8)8Hd@_~X z)KVyt;+zOO44`j7l;Py;W}9baEdYf&x%VDz|P@&lXg)Sw9p5F;l84NI; z#E0#7*m0+wHBH-P*WGqE^@=X(rVOV;O+!R@#6FCYM`y>#e|vPuW3r>=QTP{o?xks6 z(6n4P@gSX6Q~;<-n)nPlT>-VC0|Wfec8-+bH}XF?9k zRbAK9&~#nJ2pA<@QlP_M5bBwjN0~hSSC!A8{KOsrS!UU6aa(m2H8fy8wfLh!RZ8 z9e%`-M@>5Vm}ARjN8$Pw;A4;^*VlzlckH<1PdM?Ua+%Q&20$&{dc?W6s22=*x8B~9 zPdW9p-ik+gWpdw?sZ&lrh__dPT3y>Hh24-B7BdGMjxa~_^K zXZ9nH&YJt!;~oG{3_LmSsi&Wr_v~|XpMT*+4}h0me&yBI1_oY#E~a5UGm%SOTFk( zb=k5%{`_nC@+FIwdi@%z)xZDwcR|Ig99yO0RsJ8Im@5z)@!4kp0000 CB>?3B delta 1307 zcmV+$1?2kA5{nIx7Y;B80{{R3mX(Yx0004Nu_bQ-f9e-iVgLXD0d!JMQvg8b*k%9# z0J3^iSad{Xb7OL8aCB*JZU6vyoQ=}K3c@f92HH8?wXp4q=U3v28|L zHu3454!lXcCFJ9Wkd)?9Uz^TUZKG%8Pt# zmLx6RkYb=|i&cw4&@^7bTS>j*k=<2cao6n{e+2Kv`~LHN=bOxtE~~r!CUa5VXTD?d zql{h5YBja2qhB)S`w-)4G-|YfuFiFr)GW-h_#@4>ZR(}osR;mIh?7aE0T6Flcnm$6 z)HfV-8i;TgfUCD*mO)^);X$(jJqV2^>4ooV24I`?9AN}*L;*t6ahgJ3O`rhmY;W&a ze-@uC9fKT^f3C09h)}C0kV4?c?^pt487U|MHS)ejxoGfIn(-@uIN74vwl#rr=xBiB zYyxa;ZEXfH6@mljn~n&fl0YiLW%sfPV1@^_DrB=+7O|SZy0}DAzhfj(1Grw4QCtJV z{d!#%4G^tY1(5nCqM*UNNHP~CfGWw(e*xr0l2^HDUgau4#i6f}HY$OmUnZTvx{l%h z%y^wIV67G&-Y=}bo8ZA7L@(3|;CZ{S|3tJa09FM+{?INV)R%nUuc+Idwqj`KOMq9( zC85jpT~6qh`c8W<*y9YH0>hMke}A6{2VMWrKS1vuNPRDOIOtUfEfXN+FaU7&f6<}u z`iDpGLlAn81ZX{#hn9)(cK5X&E_8haa0CyaXM)fU9;H@IWJ_gW-!zW`FLNN05OloY zF*L6euycq_fUa*;fjkI;PCM8O+MOU^M($-Yy^8+WV?L!$3`7Zf0WT!YCV)v74EZrt z!NovbQ~@psKv2=?1#a;%nY_+!e|dtOSzwI%9+<`Sya#w0TH5YYaZiHrS)cX$?mZP7 z?C~eeU4P)Z19xa3LNvp|vP&Crz({Qe!zYIW7nH$M@}mgN(DO~C2q(-Q#qr3-Lg=3! zKJ%>moZBDvpO=axO7w}?ae(*)qLCesUwCmG+aubtmtKD5)z@BsW5P{3e~_XnKq8h= zBF;aBG=>3lNhIL30ty)tyUP8?4+o8fAH1UWff2Y_^fXd zg&>woK0sTrLT)G76l!?z&9~oeyayZ*D&F^utr)3Sv{4>R@2r1VD?yZ30Ox>A5K5c; z_|wn7-1+sl-`8ucsJsh!8KS82cJb4-{qg5tfB&;y8~XDA)Uv8)>K~4O0fjE41Fm8L R6#xJL07*qoM6N<$0fMd^ZcYFI diff --git a/tgstation.dme.rej b/tgstation.dme.rej new file mode 100644 index 0000000000..6f5a5fec15 --- /dev/null +++ b/tgstation.dme.rej @@ -0,0 +1,9 @@ +diff a/tgstation.dme b/tgstation.dme (rejected hunks) +@@ -1390,6 +1390,7 @@ + #include "code\modules\jobs\job_types\security.dm" + #include "code\modules\jobs\job_types\silicon.dm" + #include "code\modules\jobs\map_changes\map_changes.dm" ++#include "code\modules\language\beachbum.dm" + #include "code\modules\language\codespeak.dm" + #include "code\modules\language\common.dm" + #include "code\modules\language\draconic.dm" From 20089a34e826b63fc412f45ad3277027bb10c059 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 24 May 2017 08:25:49 -0500 Subject: [PATCH 02/37] Fixes full controller recovery not restoring appropriate runlevel --- code/controllers/master.dm | 3 ++- code/controllers/subsystem/ticker.dm.rej | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 code/controllers/subsystem/ticker.dm.rej diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 0f4ae021ad..74847ed88c 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -177,7 +177,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new to_chat(world, "[msg]") log_world(msg) - SetRunLevel(1) + if (!current_runlevel) + SetRunLevel(1) // Sort subsystems by display setting for easy access. sortTim(subsystems, /proc/cmp_subsystem_display) diff --git a/code/controllers/subsystem/ticker.dm.rej b/code/controllers/subsystem/ticker.dm.rej new file mode 100644 index 0000000000..019d7cf3cd --- /dev/null +++ b/code/controllers/subsystem/ticker.dm.rej @@ -0,0 +1,16 @@ +diff a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm (rejected hunks) +@@ -719,6 +719,14 @@ SUBSYSTEM_DEF(ticker) + cinematic = SSticker.cinematic + maprotatechecked = SSticker.maprotatechecked + ++ switch (current_state) ++ if(GAME_STATE_SETTING_UP) ++ Master.SetRunLevel(RUNLEVEL_SETUP) ++ if(GAME_STATE_PLAYING) ++ Master.SetRunLevel(RUNLEVEL_GAME) ++ if(GAME_STATE_FINISHED) ++ Master.SetRunLevel(RUNLEVEL_POSTGAME) ++ + /datum/controller/subsystem/ticker/proc/send_news_report() + var/news_message + var/news_source = "Nanotrasen News Network" From 29384db52f654acdaa52c0aeb74eed1ce0bddf3e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 24 May 2017 18:20:41 -0500 Subject: [PATCH 03/37] Improves collector feedback --- code/modules/power/singularity/collector.dm | 22 ++++++++++++------- .../power/singularity/collector.dm.rej | 12 ++++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 code/modules/power/singularity/collector.dm.rej diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 7f6bfb3026..28e8709984 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -73,28 +73,34 @@ GLOBAL_LIST_EMPTY(rad_collectors) /obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/device/multitool)) to_chat(user, "The [W.name] detects that [last_power]W were recently produced.") - return 1 + return TRUE else if(istype(W, /obj/item/device/analyzer) && loaded_tank) atmosanalyzer_scan(loaded_tank.air_contents, user) else if(istype(W, /obj/item/weapon/tank/internals/plasma)) if(!anchored) to_chat(user, "The [src] needs to be secured to the floor first!") - return 1 + return TRUE if(loaded_tank) to_chat(user, "There's already a plasma tank loaded!") - return 1 + return TRUE if(!user.drop_item()) - return 1 + return TRUE loaded_tank = W W.forceMove(src) update_icons() else if(istype(W, /obj/item/weapon/crowbar)) - if(loaded_tank && !locked) + if(loaded_tank) + if(locked) + to_chat(user, "The controls are locked!") + return TRUE eject() - return 1 + return TRUE + else + to_chat(user, "There isn't a tank loaded!") + return TRUE else if(istype(W, /obj/item/weapon/wrench)) default_unfasten_wrench(user, W, 0) - return 1 + return TRUE else if(W.GetID()) if(allowed(user)) if(active) @@ -104,7 +110,7 @@ GLOBAL_LIST_EMPTY(rad_collectors) to_chat(user, "The controls can only be locked when \the [src] is active!") else to_chat(user, "Access denied.") - return 1 + return TRUE else return ..() diff --git a/code/modules/power/singularity/collector.dm.rej b/code/modules/power/singularity/collector.dm.rej new file mode 100644 index 0000000000..68aa14d5d7 --- /dev/null +++ b/code/modules/power/singularity/collector.dm.rej @@ -0,0 +1,12 @@ +diff a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm (rejected hunks) +@@ -46,7 +46,9 @@ GLOBAL_LIST_EMPTY(rad_collectors) + toggle_power() + user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ + "You turn the [src.name] [active? "on":"off"].") +- var/fuel = loaded_tank.air_contents.gases["plasma"] ++ var/fuel ++ if(loaded_tank) ++ fuel = loaded_tank.air_contents.gases["plasma"] + fuel = fuel ? fuel[MOLES] : 0 + investigate_log("turned [active?"on":"off"] by [user.key]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"It is empty"].","singulo") + return From 2cc74f4a8fae1c8db4f48a8cd442f6556f58232c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 20:55:04 -0500 Subject: [PATCH 04/37] Changes incorporeal movement to use defines --- code/__DEFINES/mobs.dm | 5 +++++ code/game/gamemodes/miniantags/revenant/revenant.dm | 12 ++++++------ code/modules/clothing/suits/miscellaneous.dm | 2 +- code/modules/mob/living/living_defines.dm | 3 ++- .../living/simple_animal/guardian/types/ranged.dm | 4 ++-- code/modules/mob/living/simple_animal/parrot.dm | 2 +- code/modules/mob/mob_movement.dm | 6 +++--- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 2d36d72ee3..e5d1f4c19e 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -124,3 +124,8 @@ #define MAX_CHICKENS 50 #define UNHEALING_EAR_DAMAGE 100 + + +#define INCORPOREAL_MOVE_BASIC 1 +#define INCORPOREAL_MOVE_SHADOW 2 // leaves a trail of shadows +#define INCORPOREAL_MOVE_JAUNT 3 // is blocked by holy water/salt \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 293b114b36..da7cdee931 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -15,7 +15,7 @@ var/icon_stun = "revenant_stun" var/icon_drain = "revenant_draining" var/stasis = FALSE - incorporeal_move = 3 + incorporeal_move = INCORPOREAL_MOVE_JAUNT invisibility = INVISIBILITY_REVENANT health = INFINITY //Revenants don't use health, they use essence instead maxHealth = INFINITY @@ -102,7 +102,7 @@ if(unreveal_time && world.time >= unreveal_time) unreveal_time = 0 revealed = FALSE - incorporeal_move = 3 + incorporeal_move = INCORPOREAL_MOVE_JAUNT invisibility = INVISIBILITY_REVENANT to_chat(src, "You are once more concealed.") if(unstun_time && world.time >= unstun_time) @@ -222,7 +222,7 @@ R.essence = max(reforming_essence - 15 * perfectsouls, 75) //minus any perfect souls R.client_to_revive = client //If the essence reforms, the old revenant is put back in the body R.revenant = src - invisibility = INVISIBILITY_ABSTRACT + invisibility = INVISIBILITY_ABSTRACT revealed = FALSE ghostize(0)//Don't re-enter invisible corpse return @@ -236,7 +236,7 @@ return revealed = TRUE invisibility = 0 - incorporeal_move = 0 + incorporeal_move = FALSE if(!unreveal_time) to_chat(src, "You have been revealed!") unreveal_time = world.time + time @@ -309,12 +309,12 @@ /mob/living/simple_animal/revenant/proc/death_reset() revealed = FALSE - unreveal_time = 0 + unreveal_time = 0 notransform = 0 unstun_time = 0 inhibited = FALSE draining = FALSE - incorporeal_move = 3 + incorporeal_move = INCORPOREAL_MOVE_JAUNT invisibility = INVISIBILITY_REVENANT alpha=255 stasis = FALSE diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index bc1f25cfa7..02040b4469 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -541,5 +541,5 @@ name = "spooky ghost" desc = "this is obviously just a bedsheet, but maybe try it on?" icon_state = "bedsheet" - user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = 1, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150) + 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 diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index fbf9c35303..83cc990a52 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -24,7 +24,8 @@ var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. //Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects. - var/incorporeal_move = 0 //0 is off, 1 is normal, 2 is for ninjas. + var/incorporeal_move = FALSE //FALSE is off, INCORPOREAL_MOVE_BASIC is normal, INCORPOREAL_MOVE_SHADOW is for ninjas + //and INCORPOREAL_MOVE_JAUNT is blocked by holy water/salt var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them. diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm index 37777a5ead..e3792d40ba 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm @@ -37,7 +37,7 @@ environment_smash = initial(environment_smash) alpha = 255 range = initial(range) - incorporeal_move = 0 + incorporeal_move = FALSE to_chat(src, "You switch to combat mode.") toggle = FALSE else @@ -48,7 +48,7 @@ environment_smash = ENVIRONMENT_SMASH_NONE alpha = 45 range = 255 - incorporeal_move = 1 + incorporeal_move = INCORPOREAL_MOVE_BASIC to_chat(src, "You switch to scout mode.") toggle = TRUE else diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index e5dc99ea27..a0c1fe9fbe 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -948,7 +948,7 @@ color = "#FFFFFF77" speak_chance = 20 status_flags = GODMODE - incorporeal_move = 1 + incorporeal_move = INCORPOREAL_MOVE_BASIC butcher_results = list(/obj/item/weapon/ectoplasm = 1) /mob/living/simple_animal/parrot/Poly/ghost/Initialize() diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index e85dca9cad..43d8a924a1 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -209,10 +209,10 @@ return var/mob/living/L = mob switch(L.incorporeal_move) - if(1) + if(INCORPOREAL_MOVE_BASIC) L.loc = get_step(L, direct) L.setDir(direct) - if(2) + if(INCORPOREAL_MOVE_SHADOW) if(prob(50)) var/locx var/locy @@ -250,7 +250,7 @@ new /obj/effect/temp_visual/dir_setting/ninja/shadow(mobloc, L.dir) L.loc = get_step(L, direct) L.setDir(direct) - if(3) //Incorporeal move, but blocked by holy-watered tiles and salt piles. + if(INCORPOREAL_MOVE_JAUNT) //Incorporeal move, but blocked by holy-watered tiles and salt piles. var/turf/open/floor/stepTurf = get_step(L, direct) for(var/obj/effect/decal/cleanable/salt/S in stepTurf) to_chat(L, "[S] bars your passage!") From a4b0d04fe4b0562f6afe61c1810c09bbe559320b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 20:56:13 -0500 Subject: [PATCH 05/37] Fixes a runtime with contraband crates --- code/modules/cargo/packs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index b88cfc0315..421b8a057e 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1582,7 +1582,7 @@ name = "Contraband Crate" contraband = TRUE cost = 3000 - num_contained = 6 + num_contained = 5 contains = list(/obj/item/weapon/poster/random_contraband, /obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori, From de3d21902a07a7b9bd8d08acd753ea5880d0658f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 20:56:17 -0500 Subject: [PATCH 06/37] Fixes typo in garbage subsystem --- code/controllers/subsystem/garbage.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 2611bc53e6..234569bfdc 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -164,8 +164,8 @@ SUBSYSTEM_DEF(garbage) if (time > highest_del_time) highest_del_time = time if (time > 10) - log_game("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete)") - message_admins("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete).") + log_game("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete)") + message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete).") postpone(time/5) /datum/controller/subsystem/garbage/proc/HardQueue(datum/A) From fdb54c3ce3ead0b67282e724ad9140138727d8ff Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 27 May 2017 22:49:20 -0500 Subject: [PATCH 07/37] hat --- code/modules/clothing/head/cit_hats.dm | 3 ++- icons/mob/head.dmi | Bin 174767 -> 174987 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/head/cit_hats.dm b/code/modules/clothing/head/cit_hats.dm index d562802db1..31b36b7723 100644 --- a/code/modules/clothing/head/cit_hats.dm +++ b/code/modules/clothing/head/cit_hats.dm @@ -1,5 +1,6 @@ /obj/item/clothing/head/hunter name = "hunter hat" desc = "It's a flimsy looking hat." - icon_state = "hunter" + item_state = "hunter" + icon_state = "hunter-worn" icon = 'icons/obj/clothing/cit_hats.dmi' \ No newline at end of file diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 9d63c276bc9ef32dd74be79e7ccea017ab24aa39..f98009ca3a5aaa6cab59b15bdcbede5583112ae2 100644 GIT binary patch delta 19809 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�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 V=n$6hm9zVp3zoJPRp#!|{{>ez#~T0u From fa42d8631a73f4dfc8b07e4a2484fab918b83a1d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 23:27:19 -0500 Subject: [PATCH 08/37] Comm Console Fix --- code/game/machinery/computer/communications.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index c9a448fc7b..605cd60ce6 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -54,7 +54,7 @@ /obj/machinery/computer/communications/Topic(href, href_list) if(..()) return - if (src.z > ZLEVEL_CENTCOM) //Can only use on centcom and SS13 + if (z != ZLEVEL_STATION && z != ZLEVEL_CENTCOM) //Can only use on centcom and SS13 to_chat(usr, "Unable to establish a connection: \black You're too far away from the station!") return usr.set_machine(src) From f64ba98e9092daa26870487b919532cdcde3e0be Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 08:12:11 -0500 Subject: [PATCH 09/37] Ports modular computers to initialize --- .../computers/machinery/console_presets.dm | 2 +- .../computers/machinery/modular_computer.dm | 8 +++----- .../computers/machinery/modular_console.dm | 8 ++++---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm index b2f0c5fb07..18a43defb6 100644 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console_presets.dm @@ -5,7 +5,7 @@ var/_has_battery = 0 var/_has_ai = 0 -/obj/machinery/modular_computer/console/preset/New() +/obj/machinery/modular_computer/console/preset/Initialize() . = ..() if(!cpu) return diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index b7b258d1ef..c8c303e453 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -27,15 +27,13 @@ var/obj/item/device/modular_computer/processor/cpu = null // CPU that handles most logic while this type only handles power and other specific things. -/obj/machinery/modular_computer/New() - ..() +/obj/machinery/modular_computer/Initialize() + . = ..() cpu = new(src) cpu.physical = src /obj/machinery/modular_computer/Destroy() - if(cpu) - qdel(cpu) - cpu = null + QDEL_NULL(cpu) return ..() /obj/machinery/modular_computer/attack_ghost(mob/dead/observer/user) diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm index 60315198ca..3f53ba715f 100644 --- a/code/modules/modular_computers/computers/machinery/modular_console.dm +++ b/code/modules/modular_computers/computers/machinery/modular_console.dm @@ -20,8 +20,8 @@ max_integrity = 300 integrity_failure = 150 -/obj/machinery/modular_computer/console/buildable/New() - ..() +/obj/machinery/modular_computer/console/buildable/Initialize() + . = ..() // User-built consoles start as empty frames. var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD] var/obj/item/weapon/computer_hardware/hard_drive/network_card = cpu.all_components[MC_NET] @@ -30,8 +30,8 @@ qdel(network_card) qdel(hard_drive) -/obj/machinery/modular_computer/console/New() - ..() +/obj/machinery/modular_computer/console/Initialize() + . = ..() var/obj/item/weapon/computer_hardware/battery/battery_module = cpu.all_components[MC_CELL] if(battery_module) qdel(battery_module) From 9f665647c20c7cc5a62554311d584a6a4521077c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 08:13:16 -0500 Subject: [PATCH 10/37] Ports cable structures to Initialize --- code/modules/power/cable.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 5bf4bab33e..c0ad4fd2b7 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -66,9 +66,8 @@ By design, d1 is the smallest direction and d2 is the highest icon = 'icons/obj/power_cond/power_cond_white.dmi' // the power cable object -/obj/structure/cable/New() - ..() - +/obj/structure/cable/Initialize() + . = ..() // ensure d1 & d2 reflect the icon_state for entering and exiting cable var/dash = findtext(icon_state, "-") @@ -529,7 +528,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai return(OXYLOSS) /obj/item/stack/cable_coil/New(loc, new_amount = null, var/param_color = null) - ..() + . = ..() if(new_amount) // MAXCOIL by default amount = new_amount if(param_color) From 4b9a7ce9cf092886698114f4f9bcc40b5c284a18 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 08:14:21 -0500 Subject: [PATCH 11/37] Adds AI follow links to PDA messages and holopad speech --- code/game/objects/items/devices/PDA/PDA.dm | 9 ++++++++- code/modules/mob/living/silicon/ai/ai.dm | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 4a64cf5c0d..f3c32d3d68 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -632,7 +632,14 @@ GLOBAL_LIST_EMPTY(PDAs) L = get(src, /mob/living/silicon) if(L && L.stat != UNCONSCIOUS) - to_chat(L, "\icon[src] Message from [source.owner] ([source.ownjob]), \"[msg.message]\"[msg.get_photo_ref()] (Reply)") + + var/hrefstart + var/hrefend + if (isAI(L)) + hrefstart = "" + hrefend = "" + + to_chat(L, "\icon[src.icon] Message from [hrefstart][source.owner] ([source.ownjob])[hrefend], \"[msg.message]\"[msg.get_photo_ref()] (Reply)") update_icon() add_overlay(icon_alert) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d3fe5eb6d2..f4cfb363fd 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -833,8 +833,20 @@ /mob/living/silicon/ai/proc/relay_speech(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) raw_message = lang_treat(speaker, message_language, raw_message, spans, message_mode) - var/name_used = speaker.GetVoice() - var/rendered = "Relayed Speech: [name_used] [raw_message]" + var/start = "Relayed Speech: " + var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]" + var/hrefpart = "" + var/jobpart + + if (iscarbon(speaker)) + var/mob/living/carbon/S = speaker + if(S.job) + jobpart = "[S.job]" + else + jobpart = "Unknown" + + var/rendered = "[start][hrefpart][namepart] ([jobpart]) [raw_message]" + show_message(rendered, 2) /mob/living/silicon/ai/fully_replace_character_name(oldname,newname) From f89d732d0ae80f87bf450b5d5f7f38ebf4ad0cde Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 08:16:35 -0500 Subject: [PATCH 12/37] Removes duplicate sharpener from gang uplink --- code/game/gamemodes/gang/gang_datum.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm index 0ff9ef4f2d..f5db21f0ab 100644 --- a/code/game/gamemodes/gang/gang_datum.dm +++ b/code/game/gamemodes/gang/gang_datum.dm @@ -53,7 +53,6 @@ /datum/gang_item/weapon/ammo/uzi_ammo, /datum/gang_item/equipment/sharpener, /datum/gang_item/equipment/spraycan, - /datum/gang_item/equipment/sharpener, /datum/gang_item/equipment/emp, /datum/gang_item/equipment/c4, /datum/gang_item/equipment/frag, @@ -91,7 +90,6 @@ /datum/gang_item/weapon/ammo/uzi_ammo, /datum/gang_item/equipment/sharpener, /datum/gang_item/equipment/spraycan, - /datum/gang_item/equipment/sharpener, /datum/gang_item/equipment/emp, /datum/gang_item/equipment/c4, /datum/gang_item/equipment/frag, From 64562ba0c478623465f365cbd69d27fdd27059a7 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 08:17:44 -0500 Subject: [PATCH 13/37] Fixes clown creampie cannon not recharging properly --- code/game/objects/items/weapons/pneumaticCannon.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 64fb4c7ecc..91b605543b 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -270,4 +270,4 @@ /obj/item/weapon/pneumatic_cannon/pie/selfcharge/process() if(++charge_tick >= charge_ticks) - fill_with_type(/obj/item/weapon/reagent_containers/food/snacks/pie, charge_amount) + fill_with_type(/obj/item/weapon/reagent_containers/food/snacks/pie/cream, charge_amount) From cd554d253795ac758b9cd52f9ba6733c41adfb94 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 11:09:34 -0500 Subject: [PATCH 14/37] Fixes crew monitoring console minimaps --- .../{Box Station_1.png => Box Station_2.png} | Bin .../{CereStation_1.png => CereStation_2.png} | Bin .../{Delta Station_1.png => Delta Station_2.png} | Bin .../{MetaStation_1.png => MetaStation_2.png} | Bin .../{OmegaStation_1.png => OmegaStation_2.png} | Bin 5 files changed, 0 insertions(+), 0 deletions(-) rename icons/minimaps/{Box Station_1.png => Box Station_2.png} (100%) rename icons/minimaps/{CereStation_1.png => CereStation_2.png} (100%) rename icons/minimaps/{Delta Station_1.png => Delta Station_2.png} (100%) rename icons/minimaps/{MetaStation_1.png => MetaStation_2.png} (100%) rename icons/minimaps/{OmegaStation_1.png => OmegaStation_2.png} (100%) diff --git a/icons/minimaps/Box Station_1.png b/icons/minimaps/Box Station_2.png similarity index 100% rename from icons/minimaps/Box Station_1.png rename to icons/minimaps/Box Station_2.png diff --git a/icons/minimaps/CereStation_1.png b/icons/minimaps/CereStation_2.png similarity index 100% rename from icons/minimaps/CereStation_1.png rename to icons/minimaps/CereStation_2.png diff --git a/icons/minimaps/Delta Station_1.png b/icons/minimaps/Delta Station_2.png similarity index 100% rename from icons/minimaps/Delta Station_1.png rename to icons/minimaps/Delta Station_2.png diff --git a/icons/minimaps/MetaStation_1.png b/icons/minimaps/MetaStation_2.png similarity index 100% rename from icons/minimaps/MetaStation_1.png rename to icons/minimaps/MetaStation_2.png diff --git a/icons/minimaps/OmegaStation_1.png b/icons/minimaps/OmegaStation_2.png similarity index 100% rename from icons/minimaps/OmegaStation_1.png rename to icons/minimaps/OmegaStation_2.png From 13b6a18f428c6163afeea0a8518ae7ea4f4f96ae Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 14:16:07 -0500 Subject: [PATCH 15/37] Automatic changelog generation for PR #1268 [ci skip] --- html/changelogs/AutoChangeLog-pr-1268.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1268.yml diff --git a/html/changelogs/AutoChangeLog-pr-1268.yml b/html/changelogs/AutoChangeLog-pr-1268.yml new file mode 100644 index 0000000000..1ed2a4fcb7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1268.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "Crew monitoring consoles once again have minimaps while you're on the station level" From 7e88443115a94e41a61cddc6751e1252abc1dc9d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 14:32:19 -0500 Subject: [PATCH 16/37] Automatic changelog generation for PR #1255 [ci skip] --- html/changelogs/AutoChangeLog-pr-1255.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1255.yml diff --git a/html/changelogs/AutoChangeLog-pr-1255.yml b/html/changelogs/AutoChangeLog-pr-1255.yml new file mode 100644 index 0000000000..fdd7e8ac0f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1255.yml @@ -0,0 +1,5 @@ +author: "cacogen" +delete-after: True +changes: + - rscadd: "Adds AI follow links to holopad speech and PDA messages. Note that PDA messages point to the owner of the PDA and not the PDA's actual location." + - bugfix: "Fixes PDA icon not showing up beside received messages for AIs" From 42edd006b88b9711486e988712c149d244727311 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 28 May 2017 14:57:17 -0500 Subject: [PATCH 17/37] A BUNCH OF SHIT --- code/citadel/cit_clothing.dm | 6 +++ code/modules/clothing/head/cit_hats.dm | 2 +- code/modules/power/singularity/collector.dm | 40 +++++++++--------- .../power/singularity/collector.dm.rej | 12 ------ icons/mob/head.dmi | Bin 174987 -> 174985 bytes icons/obj/clothing/cit_hats.dmi | Bin 390 -> 286 bytes tgstation.dme | 2 +- 7 files changed, 29 insertions(+), 33 deletions(-) create mode 100644 code/citadel/cit_clothing.dm delete mode 100644 code/modules/power/singularity/collector.dm.rej diff --git a/code/citadel/cit_clothing.dm b/code/citadel/cit_clothing.dm new file mode 100644 index 0000000000..31b36b7723 --- /dev/null +++ b/code/citadel/cit_clothing.dm @@ -0,0 +1,6 @@ +/obj/item/clothing/head/hunter + name = "hunter hat" + desc = "It's a flimsy looking hat." + item_state = "hunter" + icon_state = "hunter-worn" + icon = 'icons/obj/clothing/cit_hats.dmi' \ No newline at end of file diff --git a/code/modules/clothing/head/cit_hats.dm b/code/modules/clothing/head/cit_hats.dm index 31b36b7723..a5b9d1a1b6 100644 --- a/code/modules/clothing/head/cit_hats.dm +++ b/code/modules/clothing/head/cit_hats.dm @@ -2,5 +2,5 @@ name = "hunter hat" desc = "It's a flimsy looking hat." item_state = "hunter" - icon_state = "hunter-worn" + icon_state = "hunter" icon = 'icons/obj/clothing/cit_hats.dmi' \ No newline at end of file diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 28e8709984..ac4873a09b 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -30,7 +30,7 @@ GLOBAL_LIST_EMPTY(rad_collectors) /obj/machinery/power/rad_collector/process() if(loaded_tank) if(!loaded_tank.air_contents.gases["plasma"]) - investigate_log("out of fuel.", INVESTIGATE_SINGULO) + investigate_log("out of fuel.", INVESTIGATE_SINGULO) eject() else loaded_tank.air_contents.gases["plasma"][MOLES] -= 0.001*drainratio @@ -46,9 +46,11 @@ GLOBAL_LIST_EMPTY(rad_collectors) toggle_power() user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ "You turn the [src.name] [active? "on":"off"].") - var/fuel = loaded_tank.air_contents.gases["plasma"] + var/fuel + if(loaded_tank) + fuel = loaded_tank.air_contents.gases["plasma"] fuel = fuel ? fuel[MOLES] : 0 - investigate_log("turned [active?"on":"off"] by [user.key]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"It is empty"].", INVESTIGATE_SINGULO) + investigate_log("turned [active?"on":"off"] by [user.key]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"It is empty"].", INVESTIGATE_SINGULO) return else to_chat(user, "The controls are locked!") @@ -73,34 +75,34 @@ GLOBAL_LIST_EMPTY(rad_collectors) /obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/device/multitool)) to_chat(user, "The [W.name] detects that [last_power]W were recently produced.") - return TRUE + return TRUE else if(istype(W, /obj/item/device/analyzer) && loaded_tank) atmosanalyzer_scan(loaded_tank.air_contents, user) else if(istype(W, /obj/item/weapon/tank/internals/plasma)) if(!anchored) to_chat(user, "The [src] needs to be secured to the floor first!") - return TRUE + return TRUE if(loaded_tank) to_chat(user, "There's already a plasma tank loaded!") - return TRUE + return TRUE if(!user.drop_item()) - return TRUE + return TRUE loaded_tank = W W.forceMove(src) update_icons() else if(istype(W, /obj/item/weapon/crowbar)) - if(loaded_tank) - if(locked) - to_chat(user, "The controls are locked!") - return TRUE + if(loaded_tank) + if(locked) + to_chat(user, "The controls are locked!") + return TRUE eject() - return TRUE - else - to_chat(user, "There isn't a tank loaded!") - return TRUE + return TRUE + else + to_chat(user, "There isn't a tank loaded!") + return TRUE else if(istype(W, /obj/item/weapon/wrench)) default_unfasten_wrench(user, W, 0) - return TRUE + return TRUE else if(W.GetID()) if(allowed(user)) if(active) @@ -110,7 +112,7 @@ GLOBAL_LIST_EMPTY(rad_collectors) to_chat(user, "The controls can only be locked when \the [src] is active!") else to_chat(user, "Access denied.") - return TRUE + return TRUE else return ..() @@ -147,11 +149,11 @@ GLOBAL_LIST_EMPTY(rad_collectors) /obj/machinery/power/rad_collector/proc/update_icons() cut_overlays() if(loaded_tank) - add_overlay("ptank") + add_overlay("ptank") if(stat & (NOPOWER|BROKEN)) return if(active) - add_overlay("on") + add_overlay("on") /obj/machinery/power/rad_collector/proc/toggle_power() diff --git a/code/modules/power/singularity/collector.dm.rej b/code/modules/power/singularity/collector.dm.rej deleted file mode 100644 index 68aa14d5d7..0000000000 --- a/code/modules/power/singularity/collector.dm.rej +++ /dev/null @@ -1,12 +0,0 @@ -diff a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm (rejected hunks) -@@ -46,7 +46,9 @@ GLOBAL_LIST_EMPTY(rad_collectors) - toggle_power() - user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ - "You turn the [src.name] [active? "on":"off"].") -- var/fuel = loaded_tank.air_contents.gases["plasma"] -+ var/fuel -+ if(loaded_tank) -+ fuel = loaded_tank.air_contents.gases["plasma"] - fuel = fuel ? fuel[MOLES] : 0 - investigate_log("turned [active?"on":"off"] by [user.key]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"It is empty"].","singulo") - return diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index f98009ca3a5aaa6cab59b15bdcbede5583112ae2..d27cfca0f9f3ff5f20de4b9f2f830af7c7ca7243 100644 GIT binary patch delta 52 zcmV-40L%Z2*9wW(3XmiLBe5kD2pIXc!25Oc`=4JnU;g;|_&>*n`Azihtz@%8b4kN(RKVoO-WgHQ;E MPzV9HPzVA!qrsXP5dZ)H diff --git a/icons/obj/clothing/cit_hats.dmi b/icons/obj/clothing/cit_hats.dmi index 25a03dc97e193cdfc267cc0555ad5b47f9e1ebb2..2f2b877effcf352a32a805499db394a0b1530d17 100644 GIT binary patch delta 158 zcmZo;p2wuv8Q|y6%O%Cdz`(%k>ERLtq!mDzg&9aThNK^#sA$fZH8Cu&0)_)2iBL{Q4GJ0x0000DNk~Le0000$0000$1Oos709Z$C?U5lj0c(+2 zR)3_6i!-e#F*g;&Hsn%PaP@Nmn+pJ3T^giU6)fBU005#%L_t(YiS3lZ4Z<)CMIB{< zd@=#f0z0N7gh|<*DRqNMs%4l@Cu^g{a7{Ng?X~pmF?zeXbUO=SI#Sy$^?g032$OA z(xlpkkhjrjyfjPQojpa(|HHWlkklRM9_h-_*xr;`J5B%b04kNrE+3Ks5XqgBazp?C N002ovPDHLkV1nZAYV-gA diff --git a/tgstation.dme b/tgstation.dme index f61256862c..7e42602839 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -161,6 +161,7 @@ #include "code\citadel\_cit_helpers.dm" #include "code\citadel\cit_areas.dm" #include "code\citadel\cit_arousal.dm" +#include "code\citadel\cit_clothing.dm" #include "code\citadel\cit_genemods.dm" #include "code\citadel\cit_guns.dm" #include "code\citadel\cit_kegs.dm" @@ -1194,7 +1195,6 @@ #include "code\modules\clothing\gloves\miscellaneous.dm" #include "code\modules\clothing\gloves\vg_gloves.dm" #include "code\modules\clothing\head\beanie.dm" -#include "code\modules\clothing\head\cit_hats.dm" #include "code\modules\clothing\head\collectable.dm" #include "code\modules\clothing\head\hardhat.dm" #include "code\modules\clothing\head\helmet.dm" From 2d41b7fe17eebf07620f5ed1f313469ee20e160c Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 28 May 2017 15:49:22 -0500 Subject: [PATCH 18/37] EHHH --- code/citadel/cit_clothing.dm | 6 ------ code/modules/clothing/head/cit_hats.dm | 6 ------ code/modules/clothing/head/misc.dm | 6 ++++++ icons/mob/head.dmi | Bin 174985 -> 174985 bytes icons/obj/clothing/hats.dmi | Bin 76536 -> 76690 bytes tgstation.dme | 1 - 6 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 code/citadel/cit_clothing.dm delete mode 100644 code/modules/clothing/head/cit_hats.dm diff --git a/code/citadel/cit_clothing.dm b/code/citadel/cit_clothing.dm deleted file mode 100644 index 31b36b7723..0000000000 --- a/code/citadel/cit_clothing.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/clothing/head/hunter - name = "hunter hat" - desc = "It's a flimsy looking hat." - item_state = "hunter" - icon_state = "hunter-worn" - icon = 'icons/obj/clothing/cit_hats.dmi' \ No newline at end of file diff --git a/code/modules/clothing/head/cit_hats.dm b/code/modules/clothing/head/cit_hats.dm deleted file mode 100644 index a5b9d1a1b6..0000000000 --- a/code/modules/clothing/head/cit_hats.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/clothing/head/hunter - name = "hunter hat" - desc = "It's a flimsy looking hat." - item_state = "hunter" - icon_state = "hunter" - icon = 'icons/obj/clothing/cit_hats.dmi' \ No newline at end of file diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 3bf866cc2c..c2979b1bcf 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -280,3 +280,9 @@ name = "magnificent crown" desc = "A crown worn by only the highest emperors of the land." icon_state = "fancycrown" + +/obj/item/clothing/head/hunter + name = "hunter hat" + desc = "It's a flimsy looking hat." + item_state = "hunter_hat" + icon_state = "hunter_hat" diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index d27cfca0f9f3ff5f20de4b9f2f830af7c7ca7243..86e720a42176ed23692088b882c5e6181f8f5d30 100644 GIT binary patch delta 47 zcmV+~0MP%5*9wW(3a~f`7%M5_*Uj&Le%XBa(%hM00wmV;0ThfoLsw@?TI FIipE-7OVgO delta 47 zcmV+~0MP%5*9wW(3a~f`82Prq`*rjCpIfYNw?}JbXhfoLsw@?TI FIirJn84Caa diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 6b0dd135f6e54f49c0bd608fa8e29e3eeb3473db..520ed276b83f3d377211292283a0c1d8b507f920 100644 GIT binary patch delta 20836 zcmbrlWl&wg(l&|{JV=6Dkl^l4@ZjzcAh=s_77!poH^JRq6Wlep>qbIwcX#+!&U@bP z{<&56$E{tvYR~LhBR$jzxmi0pz`%H>XQaxz zF7cuFj}I1|)`NaYag(=UZX^Ozf}=uh<@0+q3GaPVtKh_9(#mQ!TXMX z<$nQ9>ge!a@qNC&It$^J4^Jx^EfTGVU?KnNwa?@M{C$0$nDQ78AO^*!+twE>RAD5oo>!hY|-NN;ANQm8=QBFc7GK7N}c0G2DM%P0LUIy2v5`UT*-Ki2y4*K3- zUO&n-zP0^)`LSGwisf%@bhtXmbuzpP3@Y5TMQUCiCwvKnh2AHu`klBW%=$#RkZdWX zk;tqe;TOl!jA9OuAm7Q^vTx67dHM$z80FtPB zd@P>2U9i~?1CLzF5K7jduTNblPQhchqGJB8^u(n_bMPfwR+_#~3H)jY#dZ%=K3SM_ z9k!bdZ6WIyQhvDYM_sbMsw;htT^?SlE5VLF)c6K&RHwc%-UKOe_&w2n!t+PM31lw9 z*KbiwYUpB(k-`(-&CYre;nxpR06Tx#7Y-4>_ro(zm@qAV_Hzi5T2UCgnUN$7Qao2xFKT8W(^TxM@IQud7N22nS*rLU0-c2CW3Z*5Q0 zuKjgMiMsBvUV#zZ$jwEujo3ifGP5CTV*nPvdc`Nj@)Kg-d&b~=5eb`b`DTy;bQ$xd zarxx;*^^Cpbj2|J?Bkysk%9MKp=qbCV@qE=xfAi}TcrJ$oJnXn7}ahKD*jN_9R>a7 z;f#V?I;IfSzb*~@`{j{gzI3G!4 z{I72AqZ?Blc29c-_Uk^wg>dny!C7PRus}IWB%>kQ>_}?ojo%6+r0{^m5AA4-%=)9^ z;CRb^hQeO)wBKBa;eKte=Yr!Ic#jGths9F9OpgZPe0|R;Zn^rQ``f2+9_uzZ(#P%) z>0%VEdO86)*ig;5c$avBz=|Py^dUX+3Q*7{0)nWKIV|E){k>?#2&doq7zFV|LwF8D z10@1m4}Pz~UZ>vGUD5&}Vv|AdH{%~pV)c)@Y9<=CQ+u^+cNhvL^=jsADufMdWeJPu zX=@kVxO{MaMzzyB2k8D*41}M^8}etx9yEcP=SvK;yu0Mw>0Xqm38LwvikDUPdpq>x z;C-=o)>U1!v29)R@Du!;8c#xsqaZf~l&mD;KNrnI_*15oS*F2ml=@{FmQef^MC!hJ%Xg> zyMA085-{(g$OlY}N;8$S&@AP7963t5mE+g(!a4Q2Bv`ASM8Bo0c0`!S-PV$f(OQ?L zAYOa*c|{+)HnR0cm(9cBK;hSKA^{ULxN7`a;=8tKXy{RKmWnkSaMmI<$?L9(C)pae zZ;?A*w`4Br9$ey?yA|})?z|@;SWc;j@g?Z2KOQ9?A+ponshu=cN&eE1F70^IL9h1jWhV>w652?@mw z21Jn0uIx9U3-9gs(~!r?ab396gyQSYYhkn@TGj~dNMw)Q3n*%OoKhwm8ZIar&RLwI8y6i^ET8zxIc z*_NcZusm`C8ML$DwU0Zr3-HZ^^ov;RT-+VDig4BlUM$`ejnLaA<(z5TRvCXvd`BfQ zFvQULg^+07d-4QuSrnnCEoI$HDf(sD*B=ec8Fct)kPkxpUjJoZ=mjknU$p)tmv+KX>GXfAMZXOlK-{ZjWEKKuLn3GI>1?&OL* zGpA&U0iwP^A6WLEpzAl#oL3Xk!NC@YxL^2qm<|<~eNeEl9P5?%`S~#`;yCLLX_`V@ zaZXlU*AHp3NK^IIT0-h=neS_z++Y=osstdmtM}oCS zGzMb7WPsi1xNX)EqxSjRzub$;2eL6oy&io%K*Mg;{i>#D#Y@nEf6mCGCe-` zU`>j$fB4kEEsC`wx{~|S)sb`yR;i_t2N1tEGM`*&b#EZgwx%wwfpk>dHGS#!jCh7D zdEEccW6=E@=(dQM4V8;4+E%-wYz&FH!WU|4*$Qj=lR6#=8!8+U5(O(Ot2~Y?Y}i57 zK58K$0~XSApEI~rUzC*axGc|7(KC;lorqI4qk1(Ie5BG=2!BUG z5$T$ef`^}^qH1Km5K6UgYU?j@w}}hTI9?wvnA_myBi7>s#&yq;3pK+t_$F~k_x1Q- zaoIzWUfno2s;(Ckdh#Ec)bAME2i11YJr-X%rh95GY*(~A#mlNxBHd^BJ=%{#^j;QG zHilv3)zKRO^ywu%4)zQPvq++YOz8Wap2>mScAqWpPvbyH60dvAGIx+G)^WflM zeqrG{u(dUt)2yMXDd+6${JX!uL5~O2MXV8+`UaRau7lRO&9Hu@|>4fwaS?qFDjc>{CT zQDI_5F1nI;Py&2(xWAs1B2e%RBv~5IV|Hc&#+k3&<6+g_iPdk*h=Z$)gjq21oxLBD z(isM_|H-4>1$&MIZbtW^>Yq|U^o-fX^`ry(jGX0a?nO_8cZ=K+iff`faA2#sMQ!|g z5v&Peo9F$3FE_9@Wp{ffC!t5#GEY25YZiJAEVis`Yinx0zOBpK@A>%VO%}U=t}g2L z?;G@3xVYkPZ*SkG4KK>Od(y$>#-A1KaYvu0xJmg;(wWdf&i= z=yJ!We5B`0P)pYA(LW(uJ%R-sFAmX`REMyLZa?}TpkC)l2IzGYVrM6+JO|nYo@3S0 z!~@xS6AS-Vuh*@MoxQE{P7Eyf8;8Nv1>?X@1&#d$D*OR^8#qD9>6hR3j!Mz3cO?zh zWoF8TBvLju3=@qD@?p)z&iQw$j?;4p+}cU^191{pHP&oApb7$#hBJHzkG$GRcG*{+ zDNiIX!cmk@rpyP^(OI95Vgj|yg_`Y?U|=X<F}XaXeZWc zz+|`2BhfvDqyS)G+|LdH0hw@%C2KCr_bclq+%c$*5yNca zX>;Tom-i@q&ox$4>vdf5Rx=G+@~?lsuF|-aFLmQDE=6o(xPwn#8yK2sN*jDq1 znX>`te61d5o9zmyEY5l4NG-HICT48t9IU>Vu`rg2?R}>&={elTOx42(0bKzELRtYn zA3J?5w{OAXj%-~K+P!1(oRim17+EY5+ngf5EUs6Ua|(KegS5K*`&W?v9fr>LzasGn zs^3{@qjL1$w_mie#kK~lFf3C@eRd<8AFJ(%v_-$`88${PL=T#2 z4!v$@VcZ}NQ(_CWaF=^xN-nWWq54VuO^8Uo0x=U4D&1dwNo+&}^o_-ru?5x^dJ?zW zu==iNJ%Nu#3GYfuVC>Au`wj;Hegrs}oF$)4>jKw!Ez1l{#yDw(X zPf81byUcEI$5HLBqnFpu!ck+?eaaK!GBf7;Y0W)7w*V~_@|RwZ=g*VIr-Lv>B>!4> zGnn;!!qaSiOPc*==HX?63c~gHob=d%c6|da^a?m^`bBR}G6|b_Z%>DvQNL>&XkS}E zgGnkdvxYeV0~i?@HA{Rubey-9Ctd1EfH+hWL>KOsU##f034E}!qT}yP2u8kR18pB( zgw$&G&y{Abok-|q1dY(ZxAgUoE%)JuboZ$HIma*v*VY1tR5KFxR8&-iTvo4t{P>}@ zrIH?X$;8*4E{yICd~V}V)ArM`uytv6)MbdL%hxlL1I7aZ?50#bloyc*6D2(j0eH0_nMD_FU|0okXbm{5+3dM_b9J=nSvv~r;9Ho;2O zs%X*Y&9b>|620H;h)fd8S`Jc}oDgQ=3$k!GhI528`ByYsl)0cs!mQnCElqTK0We=m`cX`^M3@0 zEeRoGb6~GQ5wI-+;=H^!5x~90?nu8X_2GPu`U=7`VbSZGLIt&uTw9`1UF^56_t)$`y(#zhC*;h`8jgbq4a^w;pG<=C&DE1}{Dycsn_a^U-n^2z zz)e|%f7favA$Tc;oBW?8RlI)lrgtJof>6YludA!e_wtq;0RiFl>(^osGU4x0QAdXi z0wJ5ZpEG?o#iO_1pKnrO#TvvPYCOSvo%Vh2Z3Vnx9V2x{0$Z;gK-cUbheKy zCKclQ9`n_!2?K3*Au8!enAL$FRN#CDmzNEvH)6CXiK9eBh@G!=0-7v-nWxytTzs=G z$6`CIBNZrUlGi2ENv5ci=}<(HWfuY6l&6>1+BPll=QD?@rl$EIbn%ripAX>o3?dI+mGR8p>eoYCnEuYI!MK;IlwoK`1VsJu&X_41**2ZI+ZNzx=oj|_Z#>K}~ zbQ`DR7_&HknzN6sarnU6)-Kz87^{j-HlLLrM|m}@-glu9s-qjFcrM z5xm>T+Ke2-o?#lBnslcUIP{V!wzf}7pc@$p5E(6zzq)sx`&UZrusdj>}wQ zK#la>)3nT6tI7_SE26z~d1<)QUTx!=-J_e^^|C71#>dznsVl+fuC6e$0$xK5hPvA4 zb-6Vd$raC{5paT<#$CGi8D~#Epi9VS&3gP{S!LW^17%$!hqh0AZrUmG9STZoxagdB z^gPH}0Z9L14S?!gL_kh+ZWgiliZDugZNYMOWE54M zPk!%1oA>MywtfEzltb|Eo1jg+A}%S#1OHT@uE}FD-*2q;xJYhvLRvknU8vcZ3`u~= z%`=a~Hg;<);D|8Vy6X9%2%n9~jqisuw$`0)$pXo!aVM1@zHKg+OPst;@uM(sUIqNh zw@e?U<`({1d+8=4&!dYRqc~oLj0GE$WW0)Z^!SIw)Xa1@^Ma@?G%?oAg-1L1DJmW? zgYDEA#YoQ0ay!R+VM3K8Cmd^QarJ!H_&fH5$*&H@B@y;(c5eV(s&_-k(; z1o|kLW>^3Qfca_Ki%Ky{xu_`RTJNwt^cz&C8+~`8PwcV{e_SFY_9yW0tM^pRv=NGH zYvVy!Iby+y^fhpCQIA@#+m6SK2T1!t9R?QBk>Ejt0vmjkmnSvS_2A`&b3x^!oL$>r zH}%Sh*?%=a-?^-~WF0kz{3LNhLcMuq#rPBh&Ep4UJbLv8?_&C5<|HvmU|DydP{x0O z=pD1l2-d)baxs5umaMOn?-RAjVm6QHU&_B)RRfK$LPIcjo~F_CRsa>``C4mS{b(|? z$)%HDt~abq-Veg{B*J}#ifLT4nz?9iOlGM=sB4%#vF@7q?a=;8sL67Gby{1s@0f)% zW(UpW_}_NIqh!UnFa?064AV|Lzuw0gi>+)3`c9TqpwjI4Fze6c%>1~bbPKVZi*|rU zl&jUF?V~^JuJkhy=+NnrD74og3L9;Yq|WP8P*8A|)W02@m}tQ+YHe-(M{q-FYHF%n z1U_36Z`U+O6W(pv9V++nLQ7Q@yRx$Ktt*urPAoO~%G8vafuSJ?YpS`v8G0Pv8SMPAG2SkVELHKOCbmnD$oRJ8vJqEJi`3eXX)~x(eSOdUkz zgNm|F=9jQ5V?=e?%l+tm`Z|ZTlJfos^t;ccCTMkBoD`rW47?Y%KHCXP_4OAG=rFAW zaK43BISTg{BpFuf;(b`C0(-%HY|euEf2ZBjfvI|WJsN0yqwiL?2$;8sdZE`QXWh1C z=_vpc%4F~vxmAZRpr-z!Z1`@BMFz%-9@{r31t&Y|=kUoMyse$yh5~=S^{yyQY>s!} z%<48ckmgAn^nnhH$?IUQ!tBp);_@lHJ_z~AX|sXC{2PwqiVCSJsQw%ni4P7{A3we! zB$RV^ubZ{3?R-PZ!V=||#yG}Kkx_xg1(cki$8WPD*6r~x8Ixg_ULsDF5-Kd;$gm3s zfVqSP^y}j-VlOw*M7kK}L8(C(T%A;&d&s4sUD&DQJDETjbi~km+Mkk5C<^dT;F3SI ze2cq3UO^FY#l1tu!Y0O*SQI_(Jcw1zcUY9Px^YrW6Q7!z4$IV8xtzi+ZD*te?qBYE z7D9b1RM6)=h`}jm4Pd+%ZRmP@ww}TR1!&CqWHzad>%7XzcbbwuFPy&WmIQH@i5CKsE~GWS#nDa^XHB3Phjm!V|BtQNvE8yh5ch ze8bAbG^|9-PpgaYYKlOJlRVAn+7xC;TvTgtM7jfr-U=+g9y5F51^CvgtVXmF5LXJ z-1CXgO6%#&aWVcm%tB}`2StUDVSjeTht8zi<-f%BiwSv421tvx{jO#JH%R{o_$Xza z_XKSwSFr^AUJ{vfyIseHp*BtUMxKFE5pVf59>6#!@mcuo9QVpj&Cj1P+1V6gVE(12 zQsslaJu_%^jm^!bYy{=+gi&W_X9>`e6EC8$u+ss_L5j zxV6(s7{|r#N4beBEIw$CC`*SJNZW$3F4MM^KkzOMSRUCn=G7m8%-zG3>=AxWAFchU zE|6n0*y6}MxwW&cbDvF@VZv-dC!7Il*k3=}utL$$)<-y&md|*<*x7@>V7&)J190I| zM*e|`)i5*Z!`tnrL$p^XXjS>!2K8WcaU!}p^Mt$uyu?4uKi*xyF068e#5zFaY|wxe z-wTX?U;PG$f}cNClr++^O6DfBy1PF_lkl6~+3D!$Xt(muM;Rgw%+9{4S%@qvWAtuo z|AC@50x_y;U^uY)YxMkUtSu$2ttBG5Aqgno8x$eG6pTHQjo$r3C#&?UHF`Jw#$Xwg z1fk}IdR|f@t<}7(pxejksVQoH0B)w=lFHAQ2Zx-*F|5^2Rw9lt#s2DB2xh-Q4T0;Z zDd?%82FC0ZUU!I54m_ZIHn;Gt9K`GtU$1gqOfMiEE;l6Zf~H`r3Rv~=C|=p$bR<LbePev#YbEy{Xn zJ{WmiHpsGN0UmLylU+YsBr{>(Z0f33p~hc`wd}1{Tx}8Rn)~se=hZ#`+fL#8TVMKG zA3kUH$$-Zbed~K*Lf}5P^6S)0E>lKHg_5hq<(}{K$%5R!*v)4x1YeI!;G@5k6r#Dg z`J!e%;f7h*Ygj>#;~AxwcOM$e`Y~J381tIr=^zare(y)_3t4+_A5VL*-W`6y&UFi7 zxpA?b3#g4hDHf=$wYMCRsC{NdnHnh8yqp_`;y%S5|*0n{&`7UO!wP_JvvqVBN{tI2j8HH~CxZ(_` zchb>XO|mrYF|xD&a9D1(w(&=Z24wyV#||agKLiE_Cf4?o0|o?HXs=EF3qjrZ1$I(U z{|6W&WPJbsiIKTH1I3*Doo~{c5-kJ$ntg$k>GviFc76qze@!T19uGqBGxWY8XFhyG z_%y({8{6MebCn?A)_XzjWZ{_itt;`m{e!~qdCWy&>~#>9UunGkHB!o^3=>|9K^IADJsWO4-};;8I{s*$ zu$D#y-5Xa0dFXtf6?I{5a_uVzKsS}nK1_c<^z8F3WOaY12b=`_r~8?+L|{vAYGzcq z1j0EM$oFD+^N5_jz!(w|qB{bKh(KduVe$0zeEs(A+~?1-6CCzDV&SlRd+o^>)<3yW z9PX@fz|-1pG$UX9O~pbgqwVtfG<70vS18x+UVGzkYW7)@=)~5wt|HJjcm~tDZ~QmF z@@Wd~lt@Hq%0NN|p-X8=WY-xRNC zdhrZZznm@RPPpgWprsoFpdv3KA|j6uD=*tUSfY|e)4#y@`1$Ds*x1;}D>#&rPs32r z3jx_RblU!*P-+oAAQPj^!$syXOV{NDXS5wg{@C!{GWLrlPx)UtUne1b*Z1uFT9pya z4u&D%lqsCcZBw)FzeA9#7gQr5SgXjlP*yP0{vq>9dN(NQ)iSvCGi8n>?JIurSE5Pq zDo^8ExBfTGZTEfF{%4wwE1(KAwNC9z=hwC8TC!CAHUNyQ<+P)}&8fm{t#r7I%wDNM z6&Ziuoiy(lTi;I|T){*V^N!h+Ko7#g!mw4dd8W3NCMwC$Ji+5Sk(QeP^52{X#bnp4 z?a1V#WVFaR1t@u#&%~=@WUcI`?8@Z2*-g)PL8ktm>~Eg2`)`NIW4;`}KoNah9nr36 zfj)RAgpYdi^L6Ys$*0pShrSvSxYfJg zBnVzjyXW$6)bwU1J7DG)bWU~ zZenj>3GGYS{V@u`c~X5RoO!iZ89>MeHyZ$3oKLw31?K(GI%Ee%bC>^N#jV~(JNdlptj z6=RKl<>Pg7_7{w=0HAFy#DWnw+7E_hn|oAf`-%gP*LL-q_qTSnlGz*#pO4_ZT&9zn zmBxMxnS?!k=QhuC#f^4GC8|qqFg_5EB0N9$7hPE(usq_UZ^PYF{ zreS4ywbpE9O4P{`+|0Jg4nNDMhnIhX@fb^{S+HSD9%kfjLt(tHPaWfeU4QggzNkv3 z2mp7nwXF?y;g;@B&)S2Q?AYaIl!6>$F?{RUxUm7-o51ba*ka0&a=7@V?+}Q;ib5^>PvXM&j)#N1rr3UFg7+p>+OLKP#?d~zZEAcWyIzM_-Nm@Y7 z^V8CtMB8z>fLmf^5Z?>Nl}eRI!o^C0O0Fn#3b}qbhE;6)IfORUDtt+ZCKE&)5|m9>>W)nd%biKRu;AMlK=sFXIWSg8|jQMQ!2(tNraq z$gsP!W%w}k^wqee!fQA~^24MKL3mGI7vza>U*Y%~1+hImJnpX!zBM%9BT3MFMaKFx z(m3qo>b_O4U+5cP7r^jCQJE}8zk^AdM=C)qq0KK4?*f+qFCeKyP}5wx^>KMni8Z@W zOIi0ziMryybh8^$R+aAZZmJisLpsgfbbU3x#J~+boF)0_nmmpEnoII)Ef3Aul&V>( zkZ!Z-rB!Q@a{o{7I&&1RJ0soW<%V%e+WeX;TpXNyajK2I1;%h@+pRI9Ht(xBhr@Q-w}n^~{cn$vImWNd|!# z>dqA3c8fZ%+CsOb!a^$bSG*s2*9eQj*ygM){Mb#iv55)ktD8C$FJ>goIxd9-#St9(xUeNp&M^0g@cW_kn$G+NgR-KE}`uSwu}z4 z=*k7$oOT|UUm(eqb>#?{0^;6Fs|ETgLCcuf%g)b7;N|62pru-F`L?>V^ED|6zfQBx zz+-vTZmIqbSe(pbeToiUI~#iKRd@HR#eb{L!eBU3Mcs~Fd?DrP2L-S3<7MThpo`@{ z#zScB2meJPxw3$W<-jWCa2g{nA>|JK+qVKBMBuYT8@~N?G%h4$UvB7CL5Z%ysKKlY zC$^R^CkYoK>^6seXfX#vnw#;-T*Sk)d8akvj65-_FLJ31N_ z00VsZ5L8@RTJ78S$?4BejedIGasW} z>VJa6GXERax89q3sooKU%(0VsGD}ZQeh=3_5)!18lrYCdUmg+593v1;h1gKP7b^oJ zNSK3r0wlHpGrMjAHn4jqIFVE0jf}Bng4-WaTs1M=Q@9^hw#JT^AJ~YZD8^y)6#{f3 z{*YK8?eBZ^R$@;0duto``IgYRG=x7EQ;D~C9S8S$o`J4ZK9~HTrSV0l(V}mBtrJx@ zP#w*i#w{+lCI}PSu739Yb*CN92$bsbJuLFrHyC0`ym2G_@{fl?SFE}vXd2z+t6m!{ z?0O_g8dU}>hIdFR$f2x6!ks86I5Y#(;_aA*)v$)%DC7z8rW|Q>EG#D7!M|*+2(FEy zg$PYC&Nsi?;Lb2?)wzi7eWzn8M24`HAtTi0{O?_Yt5Oas|9c=}-P!CPEA)Lsu7Agk zx+8BSohwzQ=)H<L#A2SD7%=w(8`A%^!f@%=T&*ynC&r^;$E0-42W zh188Lf5@5?0uYLz5@Y=8JjTPEz!$~kAwDovR>knCOcPYPM5QrMoCN1^XBa%ONoKX> zK6fo~hJUub-uzR=)}o(3omkk4n*7DW?@CyAoZ@qi#6`$z%~W)1Uct|xUMQyr;Jz2A zjfy%u!!K`7Z7uh8NdAJ+Tqim>`ibWc+Yyn!=<_!~qBiy2jR6@{v5hF}s>KNe0?Nu^ z0We|TUva9cZW*xWitbqx#=lAWDs*TljBQF^4O=Q54L4iIgFMk)LtLBxXgG8K*PckRj@Y-6=PW3QL&nLFkwVWcKn`7`w z)9T({S0b~qV)os)9Ie?ZC@pPa{XN@Ei1G>pEP6|+U=z2y0nSN(*XH@#q?Jk__JI-Q zf(m3UNvXhq3GcAX@j_uj>P_8e3w#hiP9QBI=L%eSS%Kl`UU$#KY*SNH4)kF1;3{3< z%9fRA`(BmI+vdaZg}OwK6&sa`*$EX}cGoMZn@gK|g+5&{El5BPvVBhIM}BX0r0V1d zD7t!wPuH9Uh|nQ|7;z+}K-RrOC6E#m1p#S&vxYm>Jc69U*L^aeLnetZ4LI~8OP-GQeuW;f?690wK2!@#d4{-i} zZ8(D97kEB5gOVthMP}Rpw8@XD_#RHcTJILiw`{imW2m#uzQ3A49MD&PFI$({PRCkD zxX(Z$=q4uMey$N=J_pok>AlP@vUu42hfWsghB5p^xBdQ)hKZLuH*T%P)<=}p=oC)< z$Y+Hn`_xL0D!yt?HJUBX|I9wX6R!_3Wbv_h(D?#U%-9f^q)F|WD>tCOBA+Lx`FCXw zPFBE0Rv<2RD1NEX@UkD=2?LVIKmJ8qkfk-0tOoBR8{4}JLu1=u*yaEgVv62N7)d!K z4)?!G>|(wAOHs$i0#bSPg?;6$^xRF&EiE&Jg;0&Cj_qwR=Bqa@V}Pznt5xFDBqga*+ll&t!f&`l`&;lvo@UoSLX0VnGA9_Eg!moW5j0!$=QxGixM$^`?UV2bx3viHcA?C4e6IpJJDnJYF4|x&?@c?) zZ_d8V;+s3hp=-KJUZocA-L2G_;cwvd)$MWC0khm7FI#QhM6$#BD)W(dc_S z2vuh(^>FR#?`cy_86u*pD-?iXDBY5o2JZu4h|eAiH9BN$%~vK1Xr7gF~d;%h)tOncBZ%dTcM;!I@BNgIIy6bo! ztW=m$T`qKPdi88@s>GX_lpoYF)F{g1VnV{g0Bmt_u~d}@ zrC?F4ytKDx68;hA10v*$J;Z;#>VbyWgBJ-xV7{=zs{N$APli3HiQ8wwlQuXyMEe9; zDR}a^X_&{We=e(=Qsn(B<}WU?MN@E85)DdWz4iIju59=FQl~(t=JYmO?`qA6ve!?X}&mkHjo8zgz^khDd?DUdAf_Yo^7v7WBtLSZ( zM^R1-InDt1&VnoJq`4wn`ykLvR;@pS@`<%aD4w5wHIN5%k<4Nhmkwq8NQy-IQ(Vdu zlXx!(`yANVwCm(Ny|H~9SXG5jMn*O>M^sXBR#0Cb+4}eqE=yd?g{<0geh*hYOZ{m>;UBxHy3cNIHXbn2ic3mN z7SbZ}o0Nrt68##Ng8by1E8~iU%0^Qz-eor`FdLA1GFMRqCi;8&w^J-Le>J}bGn~Wk z7U^Fb{4S;vjjQwwpC#|Qd@xX*DqJbbKye|z5RSD(PqW43*0)HuL_aob@7Hk*5(vk+ z>srF~lcei&;k@hP)VRD2R;QO>+Pc3Hh^}f+7xMr(kNtCI;8>0;@qTum&S}W9C zM~y~vxV~i!GfSeuU(Rnp2v)DNX^wcOQHM}%xwyr{?*ftF^Laj$O|am67KAJB z!}~lKHwrP62_$`VZ=ftsn;cd#l0Fe>+ZDB)-t?aoDXXh$jXeTFOF0{P1X*FY?_=ZQ z;Ke*W`9OvNG2JqF+t;(IH-H(~6;XXZy@;a}S~Vb;4B7kG?2@{Jhf zJszt#3`%4DZc`yC@^0nN10&!b?G?8-V@2aUIk(*7$@o>HK%yP4UHJ(K(aRz`f!Yeu zPo#)8j^q@eH~1s*)#-pe7AKE5R-bw&ocN~g5W5yFgFZsc1Gmui8~ZkX-a|oGxqCj= zMAl2I0qU#d?(jE1DjYVtkZba%rmlR?dO>FH&<4&n;!br4nz}g0+hYVm;i+Y0RN^U# z<_DegIu3EmpFBb~m@_-Jy&DHW{lP!~;d0^B^|`XAN73Qf#nrt_Ca5)4KqfV7QMIS% z57wdRK=@YL>Dl#qNyiKMFXuHF$*aTB_O^$Gmtpb8C%?f_=66D^#L&N&IJRpDR1ma4B>jeKW8oS( z-<9@*A7p`&EwUx6bUl9!&}ft+{3_26OR~ znx8FVqLp1R^0|`dIezDPETci-s$z#&{PNYJR2VxN>o_nNZ`V3*+F8pcih=@E zlVp(!w%b}^=wg@noOaPq{oCd0euO%kfJ+AqR~m;!f4l$?PuXgW@hCs>SA4&|scjvH z>Kwd`CevJ10zg1$yXaskN87=0TdpdeEW5Y~+4(Q-l!Jk?lA2BakNqpq!?y$ko%gIa zCY5D*wXHz_*2+UHBG7@x>d1`KJ$MgO|k?sy`+hRJlVikMbbx^?BYc|Pd{aP zZ4=6s(M_adog}==Izby)5!assJgf4}x#;NW<j{jlIWR1HuimffZm z?G|h0n)eFRV3Pe;gkY{^S|RDkY!J}iL4Ck;zf(-(aUVc{z0JH%cvtSS&Eav(k;rVz zMm~4Iao1BHx7d)o+%Hyf@`WKNl~NQ?F(rcL{!{UOYQ2FVZIS@|s|BHg9L z@7c^QzTn_U%Ysn$?I9Ub6+wDUh`I02YfG|Bp1De)itk5c!%0i{x^q>TY_UOqa8nOx zsXY9nwcE6(G6GG5W)6r3lB;W6{=oh*Ff8FFVkX4?f&G~28*Y5_7&u4`c?PDMb|-T3 zTFY_NE6{Rs#5IT%5Re~u+OFQp5{M?2m)qqx3&bjCc8{+>e&N1{ccP_9=n3m*BaCXC zl?x8>D4Mg{^i)HFh@7z(3g8-E1$7t~4!FVVG@~OY{?r?LTo*idTlCJ!S`nU-gM^g{r6jENpey&UI@b{^g;O4bo z{Jo%9b=p;^oy@}#F}yQOngt>9a}V!YXuMHG$zIq~uXBWAMcBqUfU$&{tn4dycXw)1VN9`x)8ljn z0XYjB0T@+hb{IO0at8+o&%1k7RlU$}MeqHepM6{R@s-kt-iZn(30jQRPU*bN>J9d^ zC_epy)v3Mpqo+`LW=%}Yocf$HpKOGHApO(o>|rVnjm#O?+E7O5uN~ZW%q#yC|`Eq#wj8Cu5=8f%Kxpln)coBiqVq`+nIPCeb zxY({GsuH<_lC7O&C>m zyIeWFJT$xca>OIXt4Pp?Yzq`N=Kd$iqYF&Gena4@3$)KaGWNciWlHz6C;n3Am!HlA zM>GPdR^ZnS26!K&%jy#T4$v0eFSvyY-4bL~d43aT?R8pTa69%rWmhWqL>^Bv-CbS` zWr1n_CYx;A-Dr9UbN&2CEDrmub(d*mWFXK?zQb{GdUKYO-%27%?g-unZ#3VZy#yjr zY0q{;c@8q=ePOYnS3#A?urd zvDx*Q(LjJ(jauqy>{{D@O+cr7Y6ut^VFqMnWzi_hsVBK|opij23@36MSfx#833{*$ zC$V}owy$8|eqX9b?w#WGcvL?~8z31?<`b5yd&>UX(&EJ zmXX44@loZBikDt|SGSL%6aoHE&ruG2Pk1ML7W8>(svkQ1U$$>nPWq>7urN;$D%f0O zN&G9hXLT_mZq7RCM~!UkMgd6m44nBTlwoy5o}C2PBMxtSs97S`nabK=_51q1`Yt8V zHT1WwoNfqXWhU%p1Tr8Byz>q|-`F<3TWjet;CDcWg$*>|v3O0mw?Lw-&<|ZolV?2{ z2BTSOYOe27v2d4U-d|4mujYfpetkJm0y6>*)1g;t=GKHMC42F20sM<@eT=9lWl=8e z{l8SP2eiw#GppEnZ()UQZhiMg90w(P`#y1`IzbP>7v#D?6>#Y4G5|K*clWdYIBzS2 z&!&Gk%F%a%Sq_3HD!4hoRWwnh50P5rLKbdo59TdISSQ_Hup^W(;#RI=4QwH)TFH~a z0&iH!$jPC6MZ%~CI7ngME2UGgvBi)Hdvn!p%N-z=jBKpI$C92_WSRaK3K&TtXk4&KUo znG6Ybw%AW9DGB`@xTW*-_R)POhPvt^K@L=RH9g-S433O!{toN&J3_)BlGM<^ zTLE5#L7MAJFNP4^kA2pcLu7C@lmMY9t9o z5l;}M2?z$HOHrhWfCG5^3kV@XD4|2BDn$~cBd7JkAerM+SJ2aps04k~)}#7juN+1`BsmhW#1Cu_Ha+5ywYz3g`dy*JJ5 z$gnb--d;%%DN}T0_r`X_1||Lb zx)?=&mLE5_xMDQxo~10G&~E6h)5DBmf2{U>qSm?j1TpzB3iUvL;@dI!Ba6?K>%AxX z@h?yb2ze}z7vR0H;dI5uug+#o?{F=2xyc;9rh7V2@h0_fi9n$k^4OXJ2` zS)Cpot#kJfA9U>;?N3eMVQ)iAO$IMN^gqx%_dD4uYrpR}%i;vC8*ULkwc376M#_ai zBiX#^8<`fKk$aK9e{Y7o7nn^$8z%30wAt9(Ot=dGBJH~?+ByLQm!9;Sc@Gq_yq2>& ziYCP#G?6!{RhWIOp7k_+@P&M^XKCbs5Y;WaO0CYNBbKu-M?ZCS_0ElmpLG|Q$Aw|; zU_MpNz6MJ*h@8Ck3kdyr+e=LHQ2OY`oLj-}&lP!OSPuM(>Bfh6lvY? z8^jwBh+&UI^PAJm6v~RMe)Ib82>ZRSE(AO!Bx2NfkV87T!4>%-19oSOB^+rMRQuRMi=R=f|`NK1R5c-D2< ztK&OD;{Fv9VbFpssW>$xS+Ekd>bi(F5t6Pjpg)txc6*8Csh5y;=?Q$WaV7Ypx_m$- zsZ}d>km!8_Sj6w_Fl9!`;TshW3*`zjGDMA!QpGJT32m*$@4E-y+WQt2y}<&ncU&$I z8b`i#%>um{f61HSU-_)YT}{e62xFS2*f=`%c^xvO5BKP=k%kA!d;i@3QEAs{mZWub zkSQK3_TA!>oOq!6W7p?rFn+x1k2_SEPlPoBNT8cueKYNAKFSYEIrq$@@()`R)ek z4(DBUsT3e25i1$W&&m}M&Fx>fj=2kP*o)?t4oh^m@}U7Ww&3GD#WfAZ zpA_$0&6JL=MjztDbkXTK5{N1ojFgr>WO$A=ZqLx5N3%T)XQYj0KI?^#jlsRWE!Wnd zE;@HiP(_%n)yc2xC7)LspFd@D1ob53omK3)4JlCKeMed(=;A?5JLqMuz{Mm=f9EnE zJ>3p)?*t_ZAR^jFI2*SSqAQ&U}I;+R};S||4{z%hdLp#c12iq?S~bQyYPul zeoAH9Yj=;wub?tzO(Fu9w*5j^^i2KyMA*5oj<X?T| zt(*YIOFphoJw9ZBWPz5!5}qx{Cu0`fPYd;VeKTl09BS}!2{{^Rdm~XoZ)VM}Mp-}( z8D-qku1UKUjZ+d38l7EU?jIkd>v%w-3^e(lHye^L5=m)VDk|dAW0O zhA6(f+fxGJk<-~NbsNgl;p=C$NB75RfGeshK|mI8tEC zP8wPEbiUV9Z)N_dyOtN*Q=ih5=K7_PP z$~}8-!NIj_b)$42I!iZ1<9Uwp{M%%%tMiGW|FzGDdvQElTYb%A1Cb?cJDeqA{J8P*DY>kgHsT#AcImVe`jLzm@;N{tdIVQgem?J zh-ntZAxuX?2P4Jr+V0v^8fy6avX#k81PMRYrJ?QjzI8S%LPuCvd9+) zuhIYFq#+Kalfkb1{QL&ZEEndWvfkEE;~$m-CLAIE1E~J*pyC3DdPBjztqRWc`To|8 zxtq?ui+?snK7wOoj}zL7034Fu!YFmmwzDFB)K6nY6gxQoe0fCi4MimPecb8=kJ{Rx zV^D4?N$BaH=pGUbO2+CSe8<$d3(CvmlEihFlq|9oIFBA>U!6HTxP}-xCBi>e{QK&a z`S^=027k=aI5_q+jTLVJJxcKj338yhC?O#Mlxl!%R<8vl{(jKQs$!Ys)UM>fwVjtr zy=TJ}Im6|cEHD{+8jLv(DtY#2DV{%np3Ma=vbw$wB2NgIN%V;4_33DrHDS}|C#B`O zrImq!hTcEX%|VHu0Y}7jA4F2br>b&Mxm(pJ*9p|=eMw*GAm;1+s%O=pJ7t6dAfrT~ zT>TWRj9DxRjkeGZVx6X`rL@D5zQ3b(mV(m#F&o>$!AnRFXV%EfV}5F3Ex=n9XJ3Kh z$(^J7zPT#?&o~A&k2pKeq?gb$;42Jl*)3iPEz%-lWvKE71JfN^QBpOrhpewk2#4m-N;t@=u`Xx)1CIC(?2Tv7oZ>HSl@A>4h2NGuL%12P zd0WzHv)0zebivmoJX{|lj=t;qwt%#)34w5AvKkYZ!A!TIuUf9nDw(2 zjtlB1)cJl~(n26W;lJ#~i#`?0OjdRCMhTCdts!>T?1}=j9wO)(S;ODOIZ|4TqK^Q> z-(j0Z<*VL zSY#o)hXrkJ+!!E8qF@WzffwvxLr*Ps+AU<=@@WB+Fb!Q@oz-RHKQO}{_08#uucyiZ-B$}OLv9ft=M3&Zxw*hf~##WwsvGICa&3nj_=^M>4&@~3FupoB0 z48GeacW7M$hP%IZIYy3Uq-a2iQGe|HO)A14&cco6i*&SELm>E;U9Tnnx$*}-tgX1@ zbvO6j0vncT;g}z*hQbVd6*AV|g>jZFK5vZt^Lbd7F*1f5rUzaGJgJnIbC^w%H}e*I z5jX29Yir7J@lJ;<4&%P|zJCA%jiyTb_h@0UJZXOko}!IV32oD-caRA}5;k(UuulA>%Ze{YP1=yBvSXK9z*^UsAv<}s}A6B+YW<622xrZ~p zIlKuZsTWH4VD2Kc#XTse_~*#HB&}BaH=a8JS&Sit(JdQc++17jy1EP^cj^mC@5U8JvOp$;cZOvuI`4S>Fp%sw+xy)$>=DBHl~Fitu--Uc^za(ic9we+Kwx z(o0E(5^;7{NmSV8Py|vi`}se0q1gqD-wFzOIntAq1kWKAZ=0!jJtcfnJS?($p!Cdq zN!MYy)zB9Bc+uyD+kPZ0=f$$xZ`q+%m+lunkE4rB^C61sc(tCN~h(CdB z(c>@UMz@IqRXYYARj#^*bO&n%AKibDDGs`YBB?@%&^pV0sIzI7WxKYr!}rC)N!uvfM}KG>zKBRBMcwDAssWLp z-0GuU>QP+zJ#8F3+8>Tn#VU6^`t)|w!aKl#H_l!5f2#+r4pD|I99N3 zd0SNywN9y&yXXVFwe(`O}Ev)gk ze_v`3t8b)Ud$N=fw!Tgv^sLcY2o>%ga_;a8{Vr*WqC0Gv6^?Ab*(>vg6hM-VQH#Xn zwf>`kMn4g$A~S+w9czw`_u%oa3{6tSW>_{P@jLrbLFzMne_A$S(>0OqVEqYBbABY! z$L>I}qUWmhbUcy>sVZ^t4)KKF^M~m%hBa-=BZl7?@bIFCXEO;04j2>2qpe}vE4$G7 zI9UJ2L<&Ycs=y8A{cX85KLw=WA%1!BGg|3yhjc?E>W#?i%lQvl;=HEx5xE>AbI`?} zFJZ&nvMkvP1-T1xzQ&ibp-7kSY;fNAlBryKhDczve5EASRK?ED{6sKEc7XqZg)Cdh zqohXu*mXHgE($A=pA-xN%fbJC;8KD)-@IB)U!8YjFKN^izM+%n1M)-v*gVPA*af4b z%9$W~S_Hk*$a-+jij9IIs>Qqy%C`O{u}cyfO`Y<*?sM$COwrqHVMGGr zcQ4TcZS7BAR2>#))P0px5L5FgbM*1+LV<+@z251~N!l*WHFpEryA7_9XEsRf(icp6cgUo#*3me}p|g(H!lEpwRS9iC0WRZNWw zO7kKhhSsL}ie9)X12J?j#P7V$KmDhl$CBKH?)MrBI@g~o-*bM@z4Z%a7Z&0PkPw}E zzTajwd~D(a$e6IDHKXyS1$h088W1qqy}0|^D!^95d$D*^IBHJJ^T^TuxRng>-d)Qp>q_c;48YpPx(c zon_B#i81+>r(t;?ZEp5vo)Dt=W>4u4DXqZoA`NbDxvQKnvMZ0uu^7`bf4l;GG@qJ* zXMF?Be*7K?zfnm08Zm-<$cEUX1TC9Q!*iRBt%az4G(mMlxMlyb4dov$w zuEyS--CT7syxq%L0T_J%0z8C8BJ$NT{l~8lL4l;j#thln*<*9`yu5!ZoE`EK%c<(@ zzHa>W`ue7LHo6y=Tr|QQtXlnBz*8FbndtE2E2>V1(0=@Vt7eR}k6`5vlI&*OerdB(gp}FGE7; zM;pI+ef&*}I5YX!dc6Q+rM87;eDkV}MCNF{9rw6BdHpm?-g=OGB?t{7SZz5@2TY*w z%Nk4pO>sXS4>(C`X7GugJ`}#TD(wwER6K^&i5WMbaoJ$?XA{Yc80}zhb9M4jo6S7u z3w(gIHt; z%|CpNn7`o=6Th!3$SboYj5omWd$*PItsusR&6ypnGZCG6gHqjS_qm!)Ko=cJ?2kH3i`R@( zTv{xTLQ+yPFE0;RTVJ;qb}lX}i#Ieh{1FyrS!boIOBNUyn3|H67%uUdXXDWnX}78a zEtS``0{L`GkR~=w4YBikgZG(Zg6%bRzabOck{&|Q<-_-|!30q)Q@8KBO8&?~xi?$| zA4PK8Z<54&oq!a5nnKX8?F!NUTtetz`V8_NVTJFZ`y~XphMkN4YQu=eL9j6M!JDCx z7HtVX|ZfT|-e@JAG`2 z_T$G%8({JK_wQ8H)ODIn+}z2Hjg7C9f}Y z?4KXRFaCzLsB>Pkt!UX}L`TSlR1x~#sJ{8O@O#4Tx=)908-LS@0)y;QY9&h`2IByC zsD}CP+R=C0i@6q5`oXe-8D){;;sC!Y0?x6NU&I4hjMy4xy zN!5ELU}dELOifYy1DE67gXhPq-8L(!=!=ozlA{u=s~wZ;Ed*Iz15-J&wcKPXPcqME z+Z)Yp&}G>JW?iQSId5_xz^>(xfndH*TEIdR7!nsK5qR!0f3o+aHaeEGOKzhGKrgT! zW^ND;3|zhYmaG=)2WV+Gqr~pC>W|K<`l#xXz=a5Hx^w7h5Rm1t_ikF(BG-~p^xWTj znm@Rir$L%o5Nut^xyh+s%oCPZtymWUR& zeAvrbW}M`?5rN9bTA+4W=0}d6w)T+iYO|7+pB7LLyRKBc3}di&uB#O2oUMTsD5ZA& z3;lUEJBqGA^qd8qm)(*|^M`y&lPMQTQWG`T$r%ee8@uQlCN?&`{U7wjJ%0~grfOma zg3A&WMwSacAFFsHePF`mjA~vU)V*u;n4Mce6#k<I6@@ozg>8BB<> z+367cV5Zz3vkU)enN)qVOoA}U->iYOje?yehZ-aCt|9UlQ(PlHiVx3^wKaVaq}IO{ z0z8^}!pqn^um#G*oi?n22g}9B{H)_2O>6swjQ7%dZWxTb`tOT)4NYuGY@k?~Ucehh zULl5}8+f0ZZtWiYTi4Ue1;AN+@3!Npde7F|{YSx=9{K^rNm@w`<2{?ozNV9}sysQI z+V#;0s&_ji6#V9&w4c>(9!s`9z-jU!@g65JXReh z7MAJhT30}DuvWfhh({4)XLNGGbY0H64+;tjdrAfVLH04^wx2x%sK7pO2OuI|+G#TL zp+N(mB*Cq>}+bYqrImB0mk z!S5q=CIDSPm(1PW9h`-FYD3;aHQL<)p+pU;Mrv_&*!vIL%&)xzOHH3-3zIWUH+_6J z1l>4~QG>^jN#D38d~N!@;{GHb8XDSoai9G%Eu@|aLk>(`>im7)Q9QFiecJk!k~RAP z?+mxcd;R(h{CN2X-nhrY)A!fw_7_Qf!RdOB%}XE+jfZvN4It-ZhJJ< z(V-gL#n2O-Kq9aH!Z?9d6Z5m0jYa*8aPdXp+!vytip$cFkP!3wGR6L%JB0>1R^|SR zyDxxpX;(qGMZAIzsOYWj?Xy2R4uWs<_a#|KuL)r*L|4xcg$Jf*!Y3o$F#7v`$fE4w zl);y|f^$ubZ1z{%931~XdsF>6<2?gIJ~UTcD~Ey6`QzO1ExStL&N-eV9wDJwl7uq& z2H9*v?0mh*snvdk{@h%!*Y9hFodsVffw8ftoOU9fb9=lqUe|*eE@5X;p?x~b5igGV zDQy6~j>sYYPN5du7fG=ddBpzIU`c?zVeXsdLZSDF--Ya0^rvMeGtNF~qem8LNn;a; z6K59Ki7q!k+z~uSM(pYvc*c*R^7a+@{d*R}RDr=M_|U&50a7;v4H*#tTYE0gk*NMF z@rME<`aie*Y=S=u{a3V^^gojSFM^!>FJ%7vuC?17xBYbcY~!|uL!6+FoyLKe3rc#T zzThyx{%eQNzMM_Xm=Tfzd?K7=U6jehjD@^X0PK|pJR+tV_DFFwPk{aQza!;5+xt%6 zNzjQmc;{CqW8g3$`*K<@5%L`tt*hIyq8osK^PkB*({`2#`nAjW=2gr=HUjCxfovNmn2@xk%>1Ztzi&6~d+f|E8nW#Q#}a_8x$t zvi02;QPEd~gg+V@xF9EE_k`goe87NkX*CoIeLU^KO1%kYA&!W>&#(L0-I6pSt0NgG znV7_*V_A)H&f2DZ{8+~BPrq-SuOq9^wPg1>4%KTUk&(c7Pj2#)#z(lo$c^28brg>k z9wN63m8ke3l2?ay%l2j1YmjNa! zNcHD&94{ZRom{;GBU#^uUK=!&md}wYpc>lOWiv%u?j=}7c%Mq5Q`lhT#UiA*gFRype`ug3RSb^g)X(_R z;o4809=3OA_Z0aE7@KV4Px?~Lrw{Q6_lBFmaKrmU)psLz?k=sx@~JS;V8!q%|tl4e5D zgt|K#udSnVdUjsh3Vx=tKNHd8eLdPCcV5h%-8y43h`kuRTwx*xOt2-+gOlZ`^q)eL zGx%2Ws5t4tZ6 z3nwdYz`@L}aeQZg2ZW2|UT!DpS(pSw8jZfIdjtN>VIU@dmX_8TPba6Y zP6)1CPR_g1M=*lbf>tHV2L|$PKX&Nf@cZBs0nyGA&IHvaFB^+W&1zJakaCewnh6JfnyM!`iu>12q(Cn)==T@R-b0hbu?BmDf>EQ) zlufK-mxzAx_pn&c0$}_ILXCRMM>G0fkc~QQ)BS~e-YSmlrLc_y8d_q^t9w~=P|s5&$cSfu|R z3Jl>9p>sHa;k$B+85jQ8LcKLf9IagalI^UyZ{OQxuZuC4;?GJ>#?!g|1<&OrCDA}! znLK8Kfr7-r!66YFuwVuBTX9lK;($#;3>46PK!N!9_}^{S6--RG#=DMEC4CD+L+3oy zvl~enQKez^)5OjwPd%>W@Aj@F7@o4`DL;ALP>fxHhBp0hc>>18Wre{4aUTwLQO&Gm z^61@6c}KnzLi_Lb&T#?e{)>-pDDIkV-QT(i$@u(kCO!aG-k%9NcgE5dJRXt5R(+y$ zJbet#{+v`@-J)^Yu9Ov5;ONj{6~CjP3px7kIW#h4;<=`a;};8FtA1aIUujSnHaF5 z%$?|PzOrGfT(9FNT3ls=lu|Ocea`Zs1B-#uU{*l^N}H~&1{M|;E!%YSg_@fiw~C62 zY9OwsI0I{Fh> zMrRFItn1!KFiPjaHeL9bh-8O%#*l9?W^0M4I2a=ahn!`Z+p^Dr7Q=UNTS$88#5{VR zuXlsFzwuK@y8OAr!PrS=fz0MwB`W*0AhtWc0ji+Cf96mK|7WyE6MD!>XNdHPk@~%h z?4_ql;^fG@KlwzS`T?8Imc9?4W(R!!GVHt5!|Ee`TOd` z4%4+*DnV-peaa7@{pptDWBf$zY#vOU@Tc9I7Xbm`?_yopzx}P|-pSdDRmh`lWvWt~ z<4Ea>J^v)$OqBu>i$6QuSgkLhRpN&T;%xWoXa_5Iu{n&-cgGr7c=pvvU> zu+}Eg>quYwZ+GX15sB@DYNB5>dGaiVUPW<>`1x;{B>glO-4(~i(P)UQANvS8;Aqp0 zfb?oExEY{e#y$AyxD1&|H>);Yp;LzOHZ}89#lYlj{Ou0$QHY-|BNJ3{me^)2;Bh0; z#77--Pk=Aa!9#=7zT!{M<0jRSw$ttxA9P!PS1f{R0=nK<2Y&&ybOkA@2}p zh&cmsEG#VSTwMAW7Kr@2^zru0eV9|!(fwMVj}JMQMKP-Xf<$9}RifLk zPX_YpPsg}c|NZ{5{=y-$3fmzvEc|#ohH*(Rkovp3%r*(YXD@ ztWMH&6m(XQ!^7O%FQ}tlsgRwK5s;3i6!LE4gw9*yf4!# z+L8+#6-Gvj4a#Bud9@{GpB{pfcJiv`49?5xt3k2Ix1iR+N^5_?+EPWN8@ zR{AjEi+)~KwE4KrH)+G;X6fxNrmCSA2`UnPtR?LnCD1N}eoQ1KqfGS{{-ByFP#f7^ zbeP3nM<*?AQ9AvG$os(Rz761&=m0lZ=GIe@Ffs8VW@hHX+FIq7Q1)+LAF$u)&sXRy z?(2!}xg0NziPOLxr z;r@g3ky@7+zbaM0<4yt3)KZn#N#s}LoUI!!$^c>XxCqECn?lLg4}q?#so|H?YPkt8 z#|eJgz~JD`<71n+f9KE;OklpY}GI zJnXDHGm(=GeH3Wl5f^3=7TSCXy)yQ_-;4SvR6fo0Uq~wK3f_SnA0M}JN&h5TWawOk zm>c-afB?k&Xt7RqN5^rDWB8Y=ftQsi;eYX>=6cia&p4re1K0$_jUW>?t&P^y+^){=Wp%exfkHdd@@OI+kJT{`z+zLn5yiPJQH@+QAwT4svIQ zt{XJl*=-GI0wf?oOOH10kGz_C#h+dI;6A1|93F&Ll9>#>qTxqb%eWL|dU(vw?knrd z2wqPZ-daYwzx^g|@dBB2OviCo@^eLN{7A5v!|<-4*aH;kq`(8>;xl1JXV zoes4isMq);_1O4f@!epV?_7pJ%CsK^)4f|E14ICVJ*?&A?uNHT4rFt>$Hp*CO-;dE zY<6}wFFzj*cjo2dEV7H2LaWnwW3)Z2rjbp=Cj(5UuU-sUewC}E-{1u?5qUtsDNl#C=b8rC16%idBO+)$FFVVaP zK@mg3cAnZwCeRq|AE1zUFJlPed(0BEvHCX}hdY@Czdj&v7Knf{%X7%Gt&iVr8YV0b zWFkq{6mHIumktxjdbay{H0pMv^f{(8(VA1Jc>DZ(>J`Xuki<52a&uNJ^c~p)Ci`vD91n;e+FXmBJePpXg+>zsF#1`I zq;$`iH8CADI}_08!hCx}j?MiJ-U-+YnuxOq==x%;8A>7fWPqwxUODQvU~4ec|d4nlJ)Cm4zEPNdPUtCrN()DXynyNS|>c;9?u<9wn6A$^NLlZ8@L;W-OHnz1PjOQJ}n_Zm zCNmn$wCQeRLR^FOY7ZaYe>Wq2_AyCi?eC_s24_MA$4)i6*S#o$ybEW<`uu>>%QvV@ z^V&K)w;WuEAK!4dI~S^W*NUdYkG)|CV8YS}hdmTmR1_2x1Qiw09e2Qez>Dnj#}e9${ED1+K<0ZuA;#vsi!N{+|{pP6HBa=fBRq@F1(Od4_a zPkW;jGu|0Sf6ff=!&4`ihSu3rc^F;fiURQxQJy-@Z2BnSLiqZS_eD`|QiDN7(r1+f zx--ixhh+P=a~W?|7e(9qGd>FHJ?SkYO+0-D-YY#JsjXfLfER)Z?VM-UL8+3P#e>8Q z*_z8w<`n{(@5Vc1z_38=T``$I`{jE{X( zK42GJI%quTS1euTSHw};N9ZvUxsE&BCfUq?2liM=2s+xQ(C7r;o{A1chY= zBJ-2~l)&f33pp2W8djJ0egWTBrv&Z9L1mUhJG{l89^hVAfV1mpv$#c3IcT(#mo#O2 zTr*C2Xs>oV9)1FS$Oxc)uJ7-o4fcx<%}cdV+B+t+*rK>KacK3AjNvnL(UlbSkIfRr z4H-?>|KZ0V)9=ySB3ZYtIyGhu4^=PUk9IP?eTWIycrEK|e&P%)y}G@SSB=8H=WNpo1PQ6tc!Od!@4_6;J zDU3l%IXuZbCZ$&yL(s)~S#D{kK2gx=||E%LR2Z2kc|XXktX z4s-MH(Eq6X(P&Vp|7#-#fvKrYoBJZ_AW9M9!sQm?C+CrOMoP*E%8QEx5-fr+1RuBC zWCn1fhekwDzkLhw1*w=Yv}T|F*>vggU!`b@my{2eI|G%j8yg!U9X{S@=;+bdOcmurzU41H2uk|7X|P_-2Uk2*Sg6V<^+#aD-;-xA8dy)PxbR)rLGq_k|6S3hFk$!Ud+F z_ZFcqq#%|TNUvVK60)-TFf=rTM-Xp!AQ8*Il{z!O|CWXZ1pojDxD`IfzyMps03f(@ z=`lKM;tM%Q>wX{2E6G4PkRHP;`o~M#>vH^`E)t0%<=kkDQ`Q5%2&o3q!Vu)Ol?^9! z@Sh|5ef7t=+W*tQOe^#VmefV zeI%fVxL+@6{3|z5@v*wXLgUbAcVCjSI(>08?(W%o^z%amE5<0h+QRhYWe+LArr{0r zl^g*G7JUz`CF3c7d z6s&J-golN_@Bw_yuSE6BC++g#|wN&MW@-@GA5Q6+#d=Le^nwV=1%VyA>?&Pf7C?H9tR}GE0P(gMiXXdOq4G^=QDU- z{~a)6_v1s2W<@Z>bZ|^2Dk}ejpT;Bfu$N(feO}NyIs5)RHxk($wHfElc9$M`#`_ST zf7Kd&K~QPwSaVM@3hww(Q4t z8F4BoE05+$Zq6$T{%yl>XYIAv8p58XDN-4>*z%b&z*d*RvY{Bjwi^83a|5b}3Hf4P zmjr#A{r~Dv*tED`$J?SGUl?D=s3@+82uESfIU65)CvsJP=Vn99Sw`-6Fp`-V$eGh^1#Zi!2EDhg-ib) zKMBD!1U;l4-%Xsxl&%((lBP1s`7hTi(I3=ctVREXuKZ{5 zjZoOn_AlqB(ZLN2$qecAr7T>UKR?mj2%n$YnLwu-Br4m^>da7Z!MYyiy21J|hc(C! zr)G^_F1;Sckd^yg+HZ3K(FtElh<+RRlFX~?&yav~s9Z3H`2|5Z5b zWF81I9qM9!^e3Nl5EnW&qfMfEe}Ep;uj@_Jr(qlr5FoE%-Z?T7r`zU1Az2sjZDH)zD*La$cmOD@}({Y*OYbrJds?98Y4POmTm%pgx{k!0fEO$-3H6C_uHqX zrAuv>1!IsX2ESeYU5Ja1H(FX={@r|4D#;H2I5XUQmHKT!QPZ37Ag9na1`-r?DEZZy zF{$^?j;^?@Z@Zy%8z$BL_^&J)h#k|ef_^#I;7+sG4V)9RR-XqV;Fx{xLCxVgcQ^Zo zV?;hb%r`eSX3ZZ$53kY%o-99HIX=;0@pDkz+!Yu2uqR^|)n8!~%G(CK^YmobqIpVR zLZ%6i0!xLzgRcc%l(i01VMMQO82A1lB)tk6NVu1LIVK>MZn3(dZrW0gR8`EC>oBo@SFY0?FE{9UJ}vAh4ZD# z#8))pAV7T+JY#XnlW+Vbe6}wNA0kAxe6Q9oABXtq?tbXQMsbxrSk(D8ndGk6`ana z8q)^Crxce%44us1gw<0@RNHL-DKq=J;fW=QSo_QvwYVW=RlYxYJ!W93RvwFjLF@~j zHyeA7K=p?ILk1xG)nKuljp=?9R0PvYv7^SG^MRwmya}x~m%2JH)A@N~1K;LX7D#!? zWWLXbgo4JWDNu^&JcFULDure<%4%s>ebh9jYHEe4@wErTA!@5zmHF)=*G=qb`Zwdt zoJ4PZdvOQyI(;D`p5o5;vaW#;{cWkt6i(!#zSa#6mW5Xj@xXL{z53&`YQ z7^G%pWLiTnxlV^wc@77gS7Z93!*kb$rdQ5v+SH0x!_zdEbhTt8l)KSb(uc;(H7{oTz9eEM*#d#CGL~GHStgnjS-I(a?fxq9TZ_ZJ)6htHfHr1r z?8M(hLk~|J92{uwl6+uC6t7rr3|KSO)&{))@u>sz7(y;CEJ4G>d72?L9o7j`Y%)QT z^GjR#!gYfaL&i@8heZ_?Hq*P>I@&`LU!gftpc#{7C1;-ZJ}c8)>$Sq96t)OOe-9z# zH+RZyz1(!r6~cPZvstbn_E*XxpZX2Ovt3*+Ylp|9aX-7~F!$qO05!v{g$gfbTX7iU@?mJRpkbh>1Zts|r^ZgFN&F;x# zd3b-Cny$Lk0c20#I>@56wRH$t9cqn%4(%twVpDbQO&ZxwE6%vMlrM|q z9nz@Rq-It0R-iNFk=Qo=Y<=V#4wYV1A_b%9nETWECsinRl5m}GO~IH!=$Sp~1HZw# z8oLIKgBZO=$^+f~HczLI*x*qKOR{%s*EFd&+%m+=kSvcY8{P}-D(}Ox>N&A%pi9Ow z@}($r@4QR54vwdC?i6s>w#5{_aKKiMmD3+Z-jm#$%C_T0@xzkw^2kj!CMp+tcx~Hq zn_j>t$~^NlI)&G!nro#Gr|LL`iFoAfxT-<@7aJfK4K6<)%SNHe$7hd1c2*&$SOD z_*b5qg}HP?dt%cHQO);vxzk#|rh=Zoyu+*}{d9jbFg+3%dX6sABXV|iwf+#12I78` zyR@);cRBuItrm-fyyR?5z4Ew#zNy#@HtKzByBP-EAj* zsa1O0_(MV5r$GA*&r-lI<>pgv-dL*~FYXr4wI|gLUA;27P5r3d4W0IYPgK=7vJRcp z7OI@_aY5l_q>*Y3^U8rpNv9Xw5XMNgfmsS>tmSJ}a!}H0Db6h>D;BkkU=@;k+)BYYF z8s~Ma!lqT6d=@X~wk`WM4_){Eg%1aN$8MvFzOgSh#}4)`-O_$bz=5V`YGx{wQbZez zjJtOjKke-Na;>-nP7Ygwv{x~3-|jZ92p5@Lg(X1%jLq(j<~3syASR;& z)-1xq*Ndfkt>#?cF9dRylFL~IBd#V07z@=pZ9*eb+#2Qb-KM=?BNYVRg+#&Qwr~F~ z-RXE+4h{o$%l=qj<6w`w`2UD96{I}Z;!Fnni^xsL61TZqt^?-9Oy+c`gr4ij17AcP zY!wW30?sE`imNxYk}3sqI!$Wqp@{S}biJ|y^)!x*O|x~0e4hKa9%(v{Pfx#3w|z$I z>f+-QF4jHus!vZ`H`e#Nswf{Mcrtpg$s-k%0Y!_uB{{)2#?XtJ-@sdZIK&nOE5x94 zjbTxlnM)4q-8&C^0k#)4&_UNjF7QBrtbP<(KyZ-5X1pLsf(@>+kX&z`oJ6z))7I62oGmgKwnPCvK3oPV_%>dbw5R8MD(-PzWoMkUyh7`ls(&b_&Ox(HM|bf&8vDSIT{) zmQIw=6!WiNaR}RTe4>Jk%QdzNPzsX!PB$#QGdC9@_j2}U&(5@J-T3`Yva+anLhsJ? zNQ`Uz=~UO;Wa$bbQ`XcQtLqPq1uFY)Dh)c)R9;Y-Fwbg~bA7OlqLX)bZ*tm<;Hq}N zFxl@Xu|?M3@xDOdeswM2K-TF6%CUgPGPBKPyW%BG^StvRyaCT7fi24YBC*EHz3uLo zZqg7*yMMgT_K^UJg?G}lfil+9cf;v`*Z)jnVAYtde_BoVmydMs0348PKCH+sYd65D zssH;{z$Y({Q`ov|$KW)y>yw)NFzTVt&N|Vi_3(7)-cP7k)3++)rxMBB!HG}#O*S|V zySv=8p47|ObTkre72m_@8QA{dclIr$5a&W;v0sz*pGX$oIiHXx%bf2qXT-fEQW{p$$GUQN7n+#sBr%=Iv+Jkg&&=tUf6DyP>}||Q zfZX!T!n^3o52tGjOVG)t>R(b*JD@rU3U-K@Yu4DUi-3g1bQuhQJuTjF5wn;$f%!c~SdUme{5X)xci6BWUVE_H)BZ36wpypL~d`W`WPtN)fXf%+M@ z_6fw|?C1_xNYQQ=I==N<+ACMW7%%X)m4a-CINs^&20VUhnG=bq1NAZ=IX(0lEy79% z?sP6s94!7f7+8G78{n?F50dPJx};@s@?%_S3!Ar`{|#)uvwVo8gxp@+<<@4U9`Q!L z;-#BZ{2FHRt01*8R&#I~y_}YJW}j-Fzr`oNzCQ8vXBXbK^H3G1nRrl|}k;!xeDiJ4NVor{t7)F$NoJ}_r=uwoHe^pmkNA*S!O(<&eClw7< zY)mYQkf;nEL<*@Ct1mct8H+GIAqbixnD`A03g=|A3!|T@zHRbG_UUgp`F07OQ zE68hRcfIqABzRbU0X3Hf4bS`6g7A<3E_yhuQ@ZerYuPq^S-g^<>Tu(P$8iwLWGUdi zqW~y`iTT`q8Mo0-v$>t>gBdb=2qHBVl|-ppr3qN&97`-NE;g7e(@5Q8fM#ZFS@(&T`3YOv@QN;t}0( zEiFGRw(5YKSwvjWMOSksNIY#oQ_hr?=f$7(>vH-s*FQ>u{8ZSE_H@v)1^EyV5-8Mm zr;s=l5_o(4%eq!mYv13>q2#CRw>|%;v%6te!be5C!k@C6k*MUGGsCWS0DY)HxpmQt zNj8aYZPIT1P1Nd>-PPx(7j?s~H>Yb;EKi>@W5Ozv2>OhTZ{6HCwzhi5rYmz?Mc)oY z+FI2dFKprY`T3PieI@;5Qm3m3P~CW!uqtottVgy4qxyVD*jv85MY)a1%;+QMpD;D= zj@*KGuOPNdue+~Y)KCGy-S4Ejnib;Z<@Lc`Dz!Pi%^m)9qtV_96Zr$A!&==h)T;~w zm#@4lGDSzP+vpP8n>I5Q=S59y`}_AKi}tacSC;$Q1e!q*=gIyRGd$u>2lpw(e!ix! zmf+xJOX=_r5=>{MpUGPen({vzA$BIqF?Lz@@#2zd!#Z>;D-HqT8YhJfKdr8ZeVeRS zTKyQ1b`-^IXSQ2WpGbl0VQB6P4#DlGVP_4~>b&&;dp`cfRKpJR3**KUZ?0IJ=2zO9`&r(liUXtWz6 zJ)>*?!g3VMe(i8mTD?-=XX%_l(91P|fi}EvVj^>-|0NASV_4k4)amu**3`&@{lt?i z_%EkIlJ)`~T>PHbKYgsGw#?F;3zvC5H@I)26zAl{hsU!^g@(GVm*4lp3dvJxum0kX z*D2Y!Squ(BfiQ%ho?hRbt{bS{<>Y=Ol5IS=;{Nn$on%css#B<nE_4T0dEGhei~(t;vzN2cv9UM|aYk~6^(WLl zM(;l1rzFihoJQns}i0{iUEQ zU$j;qRa7&@TjPk4zeRk5iP3E`Yc8?}S)#7-d;i>2w%`vgHM-OG?k-)+XHFhd3k>Dg zjO3`fEhFnY(tpZx8~ZFB&P=sgruo6rJne7x*QeH%;oCdIA2@>=!YPYxAsMKS5JxtV$0 zlaeM$s}grt)L6LbLBWUU*%l#}iiVPW@RI7|I z-3Qb0%3b83jVQ3HZzel)r*}{Qvcyj2i44MZ=pmYXT+Ta;O70gM-nqP2y{=XuJ)WJ^ zTSWiN9}>2{j**D@NYy5m<|nqRxpNWsTOXn1XUFTnq???Dxu^qZeW$Q1KIze^+WdO5 z$E^y+XJi<|*K0fVON&t3@2)!hvd z6%$LVs5qyLKe?bdv;5OC;sZ1grg67%wpE=jfZgj<=|Rptsn1+w#0`r%%byzEi2Phr z8zhv970$NsZj5SN-`IKgm3KM=uA6k|6>D$p*zd_J&~mV78TBKL1iKqFmHD4?mQLatXr^x$C^ zD_M$(?R11{u5o>krBTVW;0-!#H2GRj3=l7%c_N46Uv$Sbv;q^BV>oA&lVl|8W0fhN zO9G3S4e#!$>=j-=6E|e>MXQ$r;VK;&N)<6NsqonsrF-Al@<-n)yx_PkJM}6q&s>DU zP9h=bt#w|q-T5MI;H{B1hqAv`9|*Cp57zphHZU=xh z*Of6fTEKNDrrurUBJaZYYD4o2Q=mO7PpHOk3iS&n%nEI}US?$@zTKnVORq zG-Xmp-1hlhzq=a0^%jm^6b`kYo}VXWEpgd6IG7MdMeFdvO2gSQFby(7A=&2EYVCp2 z-qee;{bfp7cZ8LLLyLh@dY)E>Xa?We^)cYM6G7jEStQXf0I!7~R%Wc*6n8`4{Me5% zj2L)FG`#WEV|4KgH^$&ASRNmzN}8RU1$pyk(X)H=Cq+hOtd!u++>h9v1;eLgU_Ej| zBGsr?=Jn1}0M{?fz^mxFGxuay>*y&sbdvdI>S zse#kY(TYj{dO1L)*U~aQGreC$HG9FA1|zk^8idm_)Uqo~m4@wA!W{#HLr%G?2Sw`? zA>OS`%y5=`qc-DHpw3`NN!7PYbYknS1lHJn-24Co0~>O$Rdacb6PkKD7@OVUD9?`c zg?6HJUQYd(@!0t$4xROD-{WaQ+zRR%Iq*O{(5I~PMp19PfXX{K>+QwT{v5VVn)s&U% zuTLaIJ}76AF#Y$03`~B8E*xRIc{KHLM*0hBieSR5Du!hGHQ#%W8gQciT?keLgjuZt zYx87qc~}-+`@79m;b*%F^bp?EtX4qZH#KWGBY37S|CK&QTmPa>K_^5rNctGljhiNxZlKV%zGi(=uR%EWC#?%o1wR!ZXBleW~9ouZ2 z)ieH4l*6gy|BZD7!}hYV+if;>!IVOR*fAFDJtf5lfDQc)Cp4H2Gz(G*E>J(n2J>FzIEG>|EQFMkH7 zd7Y1;1WJbGJiYD3I&*d8aA;EVaESvfIvkItdeYOoRHo5A-oYU!$}5zAh%8t*mG7v; zAa?hdzQ6#{82{1V&gED1y$^RHmU{+o}u&%y{L!o#3VS zKr&vz5L}N5+5(nM#ymDZN=iKy7dOlVbbg#e9kyIoLCmMplk0kYg2(nae#SA-B_<5W zWF*U)Xhu3}V{$)@*_Bp%BOOBEYEIgFUjgLZ=1ofvBtx4=mI67Aq0VO#g)@6!zO=Kp z?y5SV4nQS@b^fN&4pJhhm$DK?V83B5_VKG2>>pC6HB;LkU+J*=%L?f#jM|~5L`6lH z$-w4!?FjcaUBnj|uaDcgAg&i@*;A*%Zw3L^U-PCJ(x)wkY_COuof-IV@gcf}C5{UO zcAJYU8Q9R|nFF}?wckKgYys#0z*GOHH1U}wIZoj--b((>r9kRSjjRP{Gll{(wm_Eg zM_PxEE<+sm=PFqTm!go{l;%~-> zs4s);d1nqJho?YJaB_~l0XK}qbXi+>cTouaXcbUXIe)A#W&w(W!m!U6RF~KS$t%*n z`WR4K-aasp29_5;!GkEk+a+CH@Y$gGCgamyY=)Rziim4ZlSa!GQ-HJc^Dh<{$RWEk z$YRyUyr0KDECI(rK%opA4hI2Gh`6}8T%VY{fNH3Ks8O6UzOH&BeGV3;^;;r|E}pb- z=asSy2rd5B%k@Uc^jllwbM%e`M^ zeZNt39S^R*=$u+^x9Hxw71Z%@oMj%aij(mtn;;2y5LBNsy7|NeV2v`)6$`w}KE*b%7EBcL>I<;xD zT5B8M9;uEH7!w)G%yv^zAUo1c-fp#0^5{n4Y*VYd`*cezdWU(@c<^Z{U{%vm+&4&L zV1^45p*bFF>nh(<*wMs->Lrs#r1tXbUXeFpy3g@&F=U5M>Yo<+c~|N9sP`(*45b$E zhx@_KYENX306w@I>ojTp>vSS*cveCET~yr-Ki|l~B@01uhLu8H8{(n1n*lqKsgloz zJe-hWRR;^#jL63MK-9rfduOK^XzHH1DJ238u4jice|;sENF;(J4WBHkP#QMJz%$$m zL%d7#{1Dof8{rZO{MHbcnh6%fHfWSL97(38^*T=;rb(7HG;uRePV6N>LE2iLe#l;R zEX^d7QbsOq&{!z~JF_4MvT|#QNThwBHucZ5F#%(HDTj9#qu)ZhLx(n-lImweKz*xu zj`Gz-Kf^K)K=`_ab)>gtTJdMlEA+?_zIf<3=w`28CiXffFn#+#RdP9ue^3(JS~|u* zf{NDj^prU0AAkmhgv``8LeUA27v=UL%%rcknP0n(8vu;>vA0kE$1dyg7Huc<)USb3Gaeou7FJep zc{VmQeCo3OfI3lbhprmzamQk@3EdVUGB`HR8SuI_GFQ`G6;SycIDP%0WwvhZ=aU=* zjMum@Pxj{N=rnMx+}z*#)gJ?8){NeNW6*8%VCY)>X>!*|wUWYL(6#mTR#yvGe}^M0 zVmDFhl3Y5NPO7lG+sk&GFTt2Bq>yr>A7m+tudlD4clm?i+nJ$G%o0JDPW2>@vk0DK zwJ=XYGlCY7#9r$AiEmDi`cL4Ve8$C(FT3ED4F=7a{ue)>%ir6F_!ij;DiSOWZVj&K zmoq};v??Q6eOxF@xk2QeI-8EGncDz;5=50xfF~s_1j|Kl_IMlJk`G@jSLoY%DGDZc zFsa-+%_FLxRa}|#*YBW!Hw?F#SpOb&nteIu|EoFgq_bIw^IjQ_Pl7|h%jBx%l~ Date: Sun, 28 May 2017 16:02:29 -0500 Subject: [PATCH 19/37] [s] Fixes Centcom not being selflooping --- code/datums/map_config.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/map_config.dm b/code/datums/map_config.dm index 4dc0362d01..139ad096ec 100644 --- a/code/datums/map_config.dm +++ b/code/datums/map_config.dm @@ -11,8 +11,8 @@ var/minetype = "lavaland" - var/list/transition_config = list(MAIN_STATION = CROSSLINKED, - CENTCOMM = SELFLOOPING, + var/list/transition_config = list(CENTCOMM = SELFLOOPING, + MAIN_STATION = CROSSLINKED, EMPTY_AREA_1 = CROSSLINKED, EMPTY_AREA_2 = CROSSLINKED, MINING = SELFLOOPING, From 0706161afeb4be1f4fe76c5b9d083063de24847e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:10:46 -0500 Subject: [PATCH 20/37] Lets bayonets butcher, fixes bayoneting typo (#1242) --- code/modules/projectiles/gun.dm | 6 +++--- icons/obj/guns/projectile.dmi | Bin 31842 -> 31844 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 04761befdc..89baa173c1 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -295,14 +295,14 @@ /obj/item/weapon/gun/attack(mob/M as mob, mob/user) if(user.a_intent == INTENT_HARM) //Flogging if(bayonet) - bayonet.attack(M, user) + M.attackby(bayonet, user) return return ..() /obj/item/weapon/gun/attack_obj(obj/O, mob/user) if(user.a_intent == INTENT_HARM) if(bayonet) - bayonet.attack_obj(O, user) + O.attackby(bayonet, user) return return ..() @@ -332,7 +332,7 @@ if(!bayonet) if(!user.transferItemToLoc(I, src)) return - to_chat(user, "You attach \the [K] to the front of ]the [src].") + to_chat(user, "You attach \the [K] to the front of \the [src].") bayonet = K update_icon() else if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 7cb9f2a3ff850efb26d82416b0aa04f60c0a4163..dd6146d7fb813cb53568e2f79f99b2a6dfffa33e 100644 GIT binary patch delta 43 zcmV+`0M!5D_yOej0gxmCeX%8O0~ejSb;ozr*B?*S)A#4?Z?yt%24@_s*|Vqvx_IJ% B77_pe delta 41 zcmV+^0M`HH_yOYh0gxmCd$A>M0~IZB@2amqo~ozs&)eVA;BIvJt~P+Pssp-szZn)( From 636f9b9fa19662bb2db49b2d2c2369296729cdc3 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:10:47 -0500 Subject: [PATCH 21/37] Automatic changelog generation for PR #1242 [ci skip] --- html/changelogs/AutoChangeLog-pr-1242.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1242.yml diff --git a/html/changelogs/AutoChangeLog-pr-1242.yml b/html/changelogs/AutoChangeLog-pr-1242.yml new file mode 100644 index 0000000000..a50edc4efb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1242.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "Bayonets can now be used for butchery" From dec17dcfe65c432b552fbe06edcbc3384f56abd5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:11:06 -0500 Subject: [PATCH 22/37] Dog beds can now be renamed after new owners (#1238) --- code/game/objects/structures/beds_chairs/bed.dm | 9 +++++++++ code/modules/mob/living/simple_animal/friendly/dog.dm | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 757a0bbb8d..744740c6f9 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -161,7 +161,16 @@ anchored = 0 buildstacktype = /obj/item/stack/sheet/mineral/wood buildstackamount = 10 + var/mob/living/owner = null +/obj/structure/bed/dogbed/proc/update_owner(mob/living/M) + owner = M + name = "[M]'s bed" + desc = "[M]'s bed! Looks comfy." + +/obj/structure/bed/dogbed/buckle_mob(mob/living/M, force, check_loc) + . = ..() + update_owner(M) /obj/structure/bed/alien name = "resting contraption" diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index a2ae3b4b2d..e691ff2dfd 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -44,6 +44,13 @@ butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/pug = 3) gold_core_spawnable = 2 +/mob/living/simple_animal/pet/dog/Initialize() + var/dog_area = get_area(src) + for(var/obj/structure/bed/dogbed/D in dog_area) + if(!D.owner) + D.update_owner(src) + break + /mob/living/simple_animal/pet/dog/corgi/Initialize() ..() regenerate_icons() From fa3db4309422d4dacdc308293bd351a038277477 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:11:08 -0500 Subject: [PATCH 23/37] Automatic changelog generation for PR #1238 [ci skip] --- html/changelogs/AutoChangeLog-pr-1238.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1238.yml diff --git a/html/changelogs/AutoChangeLog-pr-1238.yml b/html/changelogs/AutoChangeLog-pr-1238.yml new file mode 100644 index 0000000000..f2e48eb64f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1238.yml @@ -0,0 +1,5 @@ +author: "cacogen" +delete-after: True +changes: + - rscadd: "You can now rename dog beds by buckling a new owner to them" + - rscadd: "Dogs that spawn in an area with a vacant bed will take possession of and rename the bed" From 7aff4f588e5e6874f198b8ac7b86659a8c19a755 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:13:04 -0500 Subject: [PATCH 24/37] [MIRROR] refactors how vehicles use offsets + multiseat (#1128) * refactors how vehicles use offsets + multiseat * RIDE --- code/datums/riding.dm | 175 ++++++++++------------------- code/modules/vehicles/speedbike.dm | 1 + 2 files changed, 60 insertions(+), 116 deletions(-) diff --git a/code/datums/riding.dm b/code/datums/riding.dm index c069e0cdeb..1d989cc653 100644 --- a/code/datums/riding.dm +++ b/code/datums/riding.dm @@ -1,6 +1,4 @@ /datum/riding - var/generic_pixel_x = 0 //All dirs show this pixel_x for the driver - var/generic_pixel_y = 0 //All dirs show this pixel_y for the driver, use these vars if the pixel shift is stable across all dir, override handle_vehicle_offsets otherwise. var/next_vehicle_move = 0 //used for move delays var/vehicle_move_delay = 2 //tick delay between movements, lower = faster, higher = slower var/keytype = null @@ -34,16 +32,29 @@ /datum/riding/proc/force_dismount(mob/living/M) ridden.unbuckle_mob(M) -//Override this to set your vehicle's various pixel offsets -//if they differ between directions, otherwise use the -//generic variables /datum/riding/proc/handle_vehicle_offsets() + var/ridden_dir = "[ridden.dir]" + var/passindex = 0 if(ridden.has_buckled_mobs()) for(var/m in ridden.buckled_mobs) + passindex++ var/mob/living/buckled_mob = m - buckled_mob.setDir(ridden.dir) - buckled_mob.pixel_x = generic_pixel_x - buckled_mob.pixel_y = generic_pixel_y + var/list/offsets = get_offsets(passindex) + dir_loop: + for(var/offsetdir in offsets) + if(offsetdir == ridden_dir) + var/list/diroffsets = offsets[offsetdir] + buckled_mob.pixel_x = diroffsets[1] + if(diroffsets.len == 2) + buckled_mob.pixel_y = diroffsets[2] + if(diroffsets.len == 3) + buckled_mob.layer = diroffsets[3] + break dir_loop + + +//Override this to set your vehicle's various pixel offsets +/datum/riding/proc/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(0, 0), "[SOUTH]" = list(0, 0), "[EAST]" = list(0, 0), "[WEST]" = list(0, 0)) //KEYS /datum/riding/proc/keycheck(mob/user) @@ -100,10 +111,12 @@ //atv /datum/riding/atv keytype = /obj/item/key - generic_pixel_x = 0 - generic_pixel_y = 4 vehicle_move_delay = 1 +/datum/riding/atv/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(0, 4), "[EAST]" = list(0, 4), "[WEST]" = list( 0, 4)) + + /datum/riding/atv/handle_vehicle_layer() if(ridden.dir == SOUTH) ridden.layer = ABOVE_MOB_LAYER @@ -150,24 +163,9 @@ keytype = /obj/item/key/janitor -/datum/riding/janicart/handle_vehicle_offsets() - ..() - if(ridden.has_buckled_mobs()) - for(var/m in ridden.buckled_mobs) - var/mob/living/buckled_mob = m - switch(buckled_mob.dir) - if(NORTH) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 4 - if(EAST) - buckled_mob.pixel_x = -12 - buckled_mob.pixel_y = 7 - if(SOUTH) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 7 - if(WEST) - buckled_mob.pixel_x = 12 - buckled_mob.pixel_y = 7 +/datum/riding/janicart/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(-12, 7), "[EAST]" = list(0, 7), "[WEST]" = list( 12, 7)) + //scooter /datum/riding/scooter/handle_vehicle_layer() if(ridden.dir == SOUTH) @@ -175,20 +173,14 @@ else ridden.layer = OBJ_LAYER +/datum/riding/scooter/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(0), "[SOUTH]" = list(-2), "[EAST]" = list(0), "[WEST]" = list( 2)) + /datum/riding/scooter/handle_vehicle_offsets() ..() if(ridden.has_buckled_mobs()) for(var/m in ridden.buckled_mobs) var/mob/living/buckled_mob = m - switch(buckled_mob.dir) - if(NORTH) - buckled_mob.pixel_x = 0 - if(EAST) - buckled_mob.pixel_x = -2 - if(SOUTH) - buckled_mob.pixel_x = 0 - if(WEST) - buckled_mob.pixel_x = 2 if(buckled_mob.get_num_legs() > 0) buckled_mob.pixel_y = 5 else @@ -209,16 +201,18 @@ //secway /datum/riding/secway keytype = /obj/item/key/security - generic_pixel_x = 0 - generic_pixel_y = 4 + +/datum/riding/secway/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(0, 4), "[EAST]" = list(0, 4), "[WEST]" = list( 0, 4)) //i want to ride my /datum/riding/bicycle keytype = null - generic_pixel_x = 0 - generic_pixel_y = 4 vehicle_move_delay = 0 +/datum/riding/bicycle/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(0, 4), "[EAST]" = list(0, 4), "[WEST]" = list( 0, 4)) + //speedbike /datum/riding/space/speedbike keytype = null @@ -233,54 +227,28 @@ ridden.pixel_x = -18 ridden.pixel_y = 0 -/datum/riding/space/speedbike/handle_vehicle_offsets() - if(ridden.has_buckled_mobs()) - for(var/m in ridden.buckled_mobs) - var/mob/living/buckled_mob = m - buckled_mob.setDir(ridden.dir) - switch(ridden.dir) - if(NORTH) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = -8 - if(SOUTH) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 4 - if(EAST) - buckled_mob.pixel_x = -10 - buckled_mob.pixel_y = 5 - if(WEST) - buckled_mob.pixel_x = 10 - buckled_mob.pixel_y = 5 +/datum/riding/space/speedbike/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(0, -8), "[SOUTH]" = list(0, 4), "[EAST]" = list(-10, 5), "[WEST]" = list( 10, 5)) //SPEEDUWAGON /datum/riding/space/speedwagon vehicle_move_delay = 0 -/datum/riding/space/speedwagon/handle_vehicle_offsets() - if(ridden.has_buckled_mobs()) - for(var/m in ridden.buckled_mobs) - var/mob/living/buckled_mob = m - buckled_mob.setDir(ridden.dir) - ridden.pixel_x = -48 - ridden.pixel_y = -48 - switch(ridden.dir) - if(NORTH) - buckled_mob.pixel_x = -10 - buckled_mob.pixel_y = -3 - if(SOUTH) - buckled_mob.pixel_x = 16 - buckled_mob.pixel_y = 3 - if(EAST) - buckled_mob.pixel_x = -4 - buckled_mob.pixel_y = 30 - if(WEST) - buckled_mob.pixel_x = 4 - buckled_mob.pixel_y = -1 - /datum/riding/space/speedwagon/handle_vehicle_layer() ridden.layer = BELOW_MOB_LAYER +/datum/riding/space/speedwagon/get_offsets(pass_index) // list(dir = x, y, layer) + switch(pass_index) + if(1) + return list("[NORTH]" = list(-10, -4), "[SOUTH]" = list(16, 3), "[EAST]" = list(-4, 30), "[WEST]" = list(4, -3)) + if(2) + return list("[NORTH]" = list(19, -5, 4), "[SOUTH]" = list(-13, 3, 4), "[EAST]" = list(-4, -3, 4.1), "[WEST]" = list(4, 28, 3.9)) + if(3) + return list("[NORTH]" = list(-10, -18, 4.2), "[SOUTH]" = list(16, 25, 3.9), "[EAST]" = list(-22, 30), "[WEST]" = list(22, -3, 4.1)) + if(4) + return list("[NORTH]" = list(19, -18, 4.2), "[SOUTH]" = list(-13, 25, 3.9), "[EAST]" = list(-22, 3, 3.9), "[WEST]" = list(22, 28)) + ///////////////BOATS//////////// /datum/riding/boat keytype = /obj/item/weapon/oar @@ -297,17 +265,15 @@ /datum/riding/boat/dragon keytype = null - generic_pixel_y = 2 - generic_pixel_x = 1 vehicle_move_delay = 1 +/datum/riding/boat/dragon/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(1, 2), "[SOUTH]" = list(1, 2), "[EAST]" = list(1, 2), "[WEST]" = list( 1, 2)) ///////////////ANIMALS//////////// //general animals /datum/riding/animal keytype = null - generic_pixel_x = 0 - generic_pixel_y = 4 /datum/riding/animal/handle_ride(mob/user, direction) if(user.incapacitated()) @@ -335,7 +301,7 @@ /datum/riding/human/ride_check(mob/living/M) var/mob/living/carbon/human/H = ridden //IF this runtimes I'm blaming the admins. if(M.incapacitated(FALSE, TRUE) || H.incapacitated(FALSE, TRUE)) - M.visible_message("[M] falls off [ridden]!") + M.visible_message("[M] falls off of [ridden]!") Unbuckle(M) return FALSE if(M.restrained(TRUE)) @@ -345,22 +311,8 @@ if(H.pulling == M) H.stop_pulling() -/datum/riding/human/handle_vehicle_offsets() - for(var/mob/living/M in ridden.buckled_mobs) - M.setDir(ridden.dir) - switch(ridden.dir) - if(NORTH) - M.pixel_x = 0 - M.pixel_y = 6 - if(SOUTH) - M.pixel_x = 0 - M.pixel_y = 6 - if(EAST) - M.pixel_x = -6 - M.pixel_y = 4 - if(WEST) - M.pixel_x = 6 - M.pixel_y = 4 +/datum/riding/human/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(0, 6), "[SOUTH]" = list(0, 6), "[EAST]" = list(-6, 4), "[WEST]" = list( 6, 4)) /datum/riding/human/handle_vehicle_layer() if(ridden.buckled_mobs && ridden.buckled_mobs.len) @@ -375,7 +327,7 @@ ridden.unbuckle_mob(user) user.Weaken(3) user.Stun(3) - user.visible_message("[ridden] pushes [user] off of them!") + user.visible_message("[ridden] pushes [user] off of them!") /datum/riding/cyborg keytype = null @@ -407,6 +359,9 @@ else ridden.layer = MOB_LAYER +/datum/riding/cyborg/get_offsets(pass_index) // list(dir = x, y, layer) + return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(0, 4), "[EAST]" = list(-6, 3), "[WEST]" = list( 6, 3)) + /datum/riding/cyborg/handle_vehicle_offsets() if(ridden.has_buckled_mobs()) for(var/mob/living/M in ridden.buckled_mobs) @@ -417,26 +372,14 @@ M.pixel_x = R.module.ride_offset_x[dir2text(ridden.dir)] M.pixel_y = R.module.ride_offset_y[dir2text(ridden.dir)] else - switch(ridden.dir) - if(NORTH) - M.pixel_x = 0 - M.pixel_y = 4 - if(SOUTH) - M.pixel_x = 0 - M.pixel_y = 4 - if(EAST) - M.pixel_x = -6 - M.pixel_y = 3 - if(WEST) - M.pixel_x = 6 - M.pixel_y = 3 + ..() /datum/riding/cyborg/force_dismount(mob/living/M) ridden.unbuckle_mob(M) var/turf/target = get_edge_target_turf(ridden, ridden.dir) var/turf/targetm = get_step(get_turf(ridden), ridden.dir) M.Move(targetm) - M.visible_message("[M] is thrown clear of [ridden]!") + M.visible_message("[M] is thrown clear of [ridden]!") M.throw_at(target, 14, 5, ridden) M.Weaken(3) diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm index 7cd2839b4b..d67e769ea3 100644 --- a/code/modules/vehicles/speedbike.dm +++ b/code/modules/vehicles/speedbike.dm @@ -35,6 +35,7 @@ icon_state = "speedwagon" layer = LYING_MOB_LAYER overlay_state = "speedwagon_cover" + max_buckled_mobs = 4 var/crash_all = FALSE //CHAOS pixel_y = -48 //to fix the offset when Initialized() pixel_x = -48 From e3d228aa000cc79e8e9f4dbb6dd19592f79f0a71 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:19:46 -0500 Subject: [PATCH 25/37] [MIRROR] ID card mapping aid (#1223) * ID card mapping aid * Update cards_ids.dm * lf --- code/game/objects/items/weapons/cards_ids.dm | 8 +++++ code/modules/jobs/access.dm | 31 +++++++++----------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 222fbe4174..021966570a 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -83,6 +83,14 @@ var/list/access = list() var/registered_name = null // The name registered_name on the card var/assignment = null + var/access_txt // mapping aid + + + +/obj/item/weapon/card/id/Initialize(mapload) + . = ..() + if(mapload && access_txt) + access = text2access(access_txt) /obj/item/weapon/card/id/attack_self(mob/user) user.visible_message("[user] shows you: \icon[src] [src.name].", \ diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index d3a8c089d6..bf554f85a9 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -136,26 +136,23 @@ GLOBAL_VAR_CONST(access_away_generic4, 208) /obj/item/proc/GetID() return null +/obj/proc/text2access(access_text) + . = list() + if(!access_text) + return + var/list/split = splittext(access_text,";") + for(var/x in split) + var/n = text2num(x) + if(n) + . += n + //Call this before using req_access or req_one_access directly /obj/proc/gen_access() //These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system. - if(!src.req_access) - src.req_access = list() - if(src.req_access_txt) - var/list/req_access_str = splittext(req_access_txt,";") - for(var/x in req_access_str) - var/n = text2num(x) - if(n) - req_access += n - - if(!src.req_one_access) - src.req_one_access = list() - if(src.req_one_access_txt) - var/list/req_one_access_str = splittext(req_one_access_txt,";") - for(var/x in req_one_access_str) - var/n = text2num(x) - if(n) - req_one_access += n + for(var/a in text2access(req_access_txt)) + req_access += a + for(var/b in text2access(req_one_access_txt)) + req_one_access += b /obj/proc/check_access(obj/item/I) gen_access() From ee638d81a5db198f977872c6593287b42902d2b2 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:20:00 -0500 Subject: [PATCH 26/37] Fixes projectile dampening fields being on infinite cooldown (#1263) --- code/game/objects/items/robot/robot_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 5bca9cf535..eafd5fdba4 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -548,7 +548,7 @@ return ..() /obj/item/borg/projectile_dampen/attack_self(mob/user) - if(cycle_delay < world.time) + if(cycle_delay > world.time) to_chat(user, "\the [src] is still recycling its projectors!") return cycle_delay = world.time + PKBORG_DAMPEN_CYCLE_DELAY From 53fb384b63545aadeb99a4637228f3b7bc714f57 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:22:10 -0500 Subject: [PATCH 27/37] Emagging a cloner drops bits, cloners don't keep extra flesh (#1264) --- code/game/machinery/cloning.dm | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 6df194cf25..fac4f7f31b 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -358,8 +358,12 @@ /obj/machinery/clonepod/proc/go_out() countdown.stop() var/mob/living/mob_occupant = occupant + var/turf/T = get_turf(src) if(mess) //Clean that mess and dump those gibs! + for(var/obj/fl in unattached_flesh) + fl.forceMove(T) + unattached_flesh.Cut() mess = FALSE new /obj/effect/gibspawner/generic(loc) audible_message("You hear a splat.") @@ -375,10 +379,12 @@ to_chat(occupant, "There is a bright flash!
You feel like a new being.
") mob_occupant.flash_act() - var/turf/T = get_turf(src) occupant.forceMove(T) icon_state = "pod_0" mob_occupant.domutcheck(1) //Waiting until they're out before possible monkeyizing. The 1 argument forces powers to manifest. + for(var/fl in unattached_flesh) + qdel(fl) + unattached_flesh.Cut() occupant = null @@ -389,8 +395,7 @@ SPEAK("Critical error! Please contact a Thinktronic Systems \ technician, as your warranty may be affected.") mess = TRUE - for(var/obj/item/O in unattached_flesh) - qdel(O) + maim_clone(mob_occupant) //Remove every bit that's grown back so far to drop later, also destroys bits that haven't grown yet icon_state = "pod_g" if(mob_occupant.mind != clonemind) clonemind.transfer_to(mob_occupant) @@ -450,9 +455,10 @@ var/static/list/zones = list("r_arm", "l_arm", "r_leg", "l_leg") for(var/zone in zones) var/obj/item/bodypart/BP = H.get_bodypart(zone) - BP.drop_limb() - BP.forceMove(src) - unattached_flesh += BP + if(BP) + BP.drop_limb() + BP.forceMove(src) + unattached_flesh += BP for(var/o in H.internal_organs) var/obj/item/organ/organ = o From fac3bfb81b9d2ee3ff5b00a1a4ea5c4e8d800085 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:22:11 -0500 Subject: [PATCH 28/37] Automatic changelog generation for PR #1264 [ci skip] --- html/changelogs/AutoChangeLog-pr-1264.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1264.yml diff --git a/html/changelogs/AutoChangeLog-pr-1264.yml b/html/changelogs/AutoChangeLog-pr-1264.yml new file mode 100644 index 0000000000..774cea31f2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1264.yml @@ -0,0 +1,5 @@ +author: "QualityVan" +delete-after: True +changes: + - tweak: "Cloning pods which are interrupted by a emagging will now produce a slightly lumpier smoothie" + - bugfix: "Cloning pods that have stopped cloning early can no longer be broken open to extract leftover parts" From 4576d03eb46ee579f6c0d6aa4ccb9861335153d9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:27:25 -0500 Subject: [PATCH 29/37] Fixes attaching heads without brainmobs (#1273) --- code/modules/surgery/bodyparts/dismemberment.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 585f452de4..089d8be105 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -294,10 +294,11 @@ /obj/item/bodypart/head/attach_limb(mob/living/carbon/C, special) //Transfer some head appearance vars over if(brain) - brainmob.container = null //Reset brainmob head var. - brainmob.loc = brain //Throw mob into brain. - brain.brainmob = brainmob //Set the brain to use the brainmob - brainmob = null //Set head brainmob var to null + if(brainmob) + brainmob.container = null //Reset brainmob head var. + brainmob.loc = brain //Throw mob into brain. + brain.brainmob = brainmob //Set the brain to use the brainmob + brainmob = null //Set head brainmob var to null brain.Insert(C) //Now insert the brain proper brain = null //No more brain in the head From 455ac22c90550c1dae7623ddce847bcb91cd58d6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:27:26 -0500 Subject: [PATCH 30/37] Automatic changelog generation for PR #1273 [ci skip] --- html/changelogs/AutoChangeLog-pr-1273.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1273.yml diff --git a/html/changelogs/AutoChangeLog-pr-1273.yml b/html/changelogs/AutoChangeLog-pr-1273.yml new file mode 100644 index 0000000000..27ad107949 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1273.yml @@ -0,0 +1,4 @@ +author: "Swindly" +delete-after: True +changes: + - bugfix: "fixed not being able to attach heads without brainmobs in them" From 6b6a156c2f82a7a58e543e64d45144002c931968 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:27:50 -0500 Subject: [PATCH 31/37] Lavaland Lighting Fix + ruin varedit cleanup (#1257) --- .../LavaRuins/lavaland_surface_xeno_nest.dmm | 420 ++---------------- code/game/area/areas/ruins.dm | 13 + 2 files changed, 55 insertions(+), 378 deletions(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm index 8993318f00..8f1e550e17 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm @@ -8,185 +8,81 @@ }, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "c" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" }, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "d" = ( /obj/structure/alien/resin/wall, /obj/structure/alien/weeds{ icon_state = "weeds2" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "e" = ( /obj/structure/alien/weeds{ icon_state = "weeds1" }, /obj/structure/alien/egg/burst, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "f" = ( /obj/structure/alien/weeds, /obj/structure/alien/weeds{ icon_state = "weeds2" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "g" = ( /obj/structure/alien/weeds, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "h" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "i" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "j" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" }, /mob/living/simple_animal/hostile/alien, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "k" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" }, /obj/structure/alien/egg/burst, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "l" = ( /obj/structure/alien/weeds/node, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "m" = ( /obj/structure/alien/weeds{ icon_state = "weeds1" }, /obj/structure/bed/nest, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "n" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" }, /obj/structure/bed/nest, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "o" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -198,43 +94,19 @@ }, /obj/item/weapon/gun/ballistic/automatic/pistol, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "p" = ( /obj/structure/alien/weeds{ icon_state = "weeds1" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "q" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "r" = ( /obj/structure/alien/weeds{ icon_state = "weeds1" @@ -242,112 +114,48 @@ /obj/structure/alien/resin/wall, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "s" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" }, /obj/structure/alien/egg, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "t" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" }, /mob/living/simple_animal/hostile/alien/sentinel, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "u" = ( /obj/structure/alien/weeds{ icon_state = "weeds1" }, /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "v" = ( /obj/structure/alien/weeds/node, /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "w" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "x" = ( /obj/structure/alien/weeds, /obj/structure/alien/egg/burst, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "y" = ( /obj/structure/alien/weeds/node, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "z" = ( /obj/structure/alien/weeds{ icon_state = "weeds1" @@ -364,28 +172,12 @@ /obj/item/weapon/melee/baton/loaded, /obj/item/clothing/head/helmet, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "A" = ( /obj/structure/alien/weeds, /obj/structure/alien/egg, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "B" = ( /obj/structure/alien/weeds{ icon_state = "weeds1" @@ -393,59 +185,27 @@ /obj/structure/alien/egg/burst, /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "C" = ( /obj/structure/alien/weeds, /obj/structure/alien/egg/burst, /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "D" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" }, /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "E" = ( /obj/structure/alien/weeds, /mob/living/simple_animal/hostile/alien/drone{ plants_off = 1 }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "F" = ( /obj/structure/alien/weeds, /mob/living/simple_animal/hostile/alien/queen/large{ @@ -455,15 +215,7 @@ plants_off = 1 }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "G" = ( /obj/structure/alien/weeds{ icon_state = "weeds1" @@ -472,28 +224,12 @@ plants_off = 1 }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "H" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "I" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -507,56 +243,24 @@ /obj/item/clothing/under/syndicate, /obj/item/clothing/glasses/night, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "J" = ( /obj/structure/alien/weeds, /mob/living/simple_animal/hostile/alien/sentinel, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "K" = ( /obj/structure/alien/weeds/node, /mob/living/simple_animal/hostile/alien, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "L" = ( /obj/structure/alien/weeds/node, /mob/living/simple_animal/hostile/alien/drone{ plants_off = 1 }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "M" = ( /obj/structure/alien/weeds{ icon_state = "weeds1" @@ -573,15 +277,7 @@ stat = 2 }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "N" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, @@ -590,15 +286,7 @@ "O" = ( /obj/structure/alien/weeds/node, /turf/template_noop, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "P" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" @@ -615,41 +303,17 @@ plants_off = 1 }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "R" = ( /obj/structure/alien/weeds, /turf/template_noop, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "S" = ( /obj/structure/alien/weeds{ icon_state = "weeds2" }, /turf/template_noop, -/area/awaycontent/a5{ - always_unpowered = 1; - has_gravity = 1; - name = "The Hive"; - power_environ = 0; - power_equip = 0; - power_light = 0; - poweralm = 0 - }) +/area/ruin/xenonest) "T" = ( /obj/structure/alien/weeds/node, /obj/structure/alien/resin/wall, diff --git a/code/game/area/areas/ruins.dm b/code/game/area/areas/ruins.dm index 828d165dd8..4a1fd86c20 100644 --- a/code/game/area/areas/ruins.dm +++ b/code/game/area/areas/ruins.dm @@ -5,6 +5,7 @@ icon_state = "away" has_gravity = 1 hidden = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/ruin/unpowered @@ -199,3 +200,15 @@ /area/ruin/abandonedzoo name = "Abandoned Zoo" icon_state = "green" + + +//Xeno Nest + +/area/ruin/xenonest + name = "The Hive" + always_unpowered = 1 + power_environ = 0 + power_equip = 0 + power_light = 0 + poweralm = 0 + \ No newline at end of file From f42bcaf76002aea78249daab7e82d8c045e8f796 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 28 May 2017 17:28:51 -0500 Subject: [PATCH 32/37] Finally remembers to make drakes unclickable while they're in the invulnerable stage of swooping (#1262) --- .../mob/living/simple_animal/hostile/megafauna/dragon.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index 1c1fc8fb9e..5df35b2d93 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -193,6 +193,7 @@ Difficulty: Medium return animate(src, transform = matrix()*0.7, time = 7) swooping |= SWOOP_INVULNERABLE + mouse_opacity = 0 sleep(7) var/list/flame_hit = list() while(swoop_duration > 0) @@ -233,6 +234,7 @@ Difficulty: Medium animate(src, transform = oldtransform, time = 5) sleep(5) swooping &= ~SWOOP_INVULNERABLE + mouse_opacity = initial(mouse_opacity) icon_state = "dragon" playsound(src.loc, 'sound/effects/meteorimpact.ogg', 200, 1) for(var/mob/living/L in orange(1, src)) From a29e0c45ae4628f25fb8d4420d913629a5102af3 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 28 May 2017 21:54:10 -0500 Subject: [PATCH 33/37] BEACHBUMBS! --- code/modules/surgery/organs/tongue.dm | 1 + tgstation.dme | 1 + 2 files changed, 2 insertions(+) diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 5a3555c8f9..5f23b1ef7d 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -15,6 +15,7 @@ /datum/language/common, /datum/language/draconic, /datum/language/monkey, + /datum/language/beachbum, /datum/language/narsie, )) diff --git a/tgstation.dme b/tgstation.dme index 53723583d2..7c1d803849 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1439,6 +1439,7 @@ #include "code\modules\jobs\job_types\science.dm" #include "code\modules\jobs\job_types\security.dm" #include "code\modules\jobs\job_types\silicon.dm" +#include "code\modules\language\beachbum.dm" #include "code\modules\language\common.dm" #include "code\modules\language\draconic.dm" #include "code\modules\language\drone.dm" From e0fab7fa5ec20d7375bae62ff8e593964e9db63b Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 29 May 2017 01:25:02 -0500 Subject: [PATCH 34/37] fixes an oopsie --- code/modules/jobs/access.dm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index bf554f85a9..527b6ff736 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -149,10 +149,14 @@ GLOBAL_VAR_CONST(access_away_generic4, 208) //Call this before using req_access or req_one_access directly /obj/proc/gen_access() //These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system. - for(var/a in text2access(req_access_txt)) - req_access += a - for(var/b in text2access(req_one_access_txt)) - req_one_access += b + if(!req_access) + req_access = list() + for(var/a in text2access(req_access_txt)) + req_access += a + if(!req_one_access) + req_one_access = list() + for(var/b in text2access(req_one_access_txt)) + req_one_access += b /obj/proc/check_access(obj/item/I) gen_access() From 4bb28836384b5654db5f67d308f2e2c9b4ce2a98 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 29 May 2017 01:27:52 -0500 Subject: [PATCH 35/37] Fixes gun rapid-melee attack exploit (#1276) --- code/modules/projectiles/gun.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 89baa173c1..d9a0ee78a2 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -297,7 +297,9 @@ if(bayonet) M.attackby(bayonet, user) return - return ..() + else + return ..() + return /obj/item/weapon/gun/attack_obj(obj/O, mob/user) if(user.a_intent == INTENT_HARM) From 5fe7f7083a82e7d0cc4b8562b4243f4fb59d4733 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 29 May 2017 01:59:49 -0500 Subject: [PATCH 36/37] woo --- code/controllers/subsystem/ticker.dm | 13 +++++++++++-- code/controllers/subsystem/ticker.dm.rej | 16 ---------------- 2 files changed, 11 insertions(+), 18 deletions(-) delete mode 100644 code/controllers/subsystem/ticker.dm.rej diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index a54c74966a..c839c7c33d 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -744,6 +744,15 @@ SUBSYSTEM_DEF(ticker) cinematic = SSticker.cinematic maprotatechecked = SSticker.maprotatechecked + switch (current_state) + if(GAME_STATE_SETTING_UP) + Master.SetRunLevel(RUNLEVEL_SETUP) + if(GAME_STATE_PLAYING) + Master.SetRunLevel(RUNLEVEL_GAME) + if(GAME_STATE_FINISHED) + Master.SetRunLevel(RUNLEVEL_POSTGAME) + + modevoted = SSticker.modevoted /datum/controller/subsystem/ticker/proc/send_news_report() @@ -844,7 +853,7 @@ SUBSYSTEM_DEF(ticker) if(delay_end) to_chat(world, "An admin has delayed the round end.") return - + to_chat(world, "Rebooting World in [delay/10] [(delay >= 10 && delay < 20) ? "second" : "seconds"]. [reason]") var/start_wait = world.time @@ -854,7 +863,7 @@ SUBSYSTEM_DEF(ticker) if(delay_end) to_chat(world, "Reboot was cancelled by an admin.") return - + SSblackbox.set_details("[feedback_c]","[feedback_r]") log_game("Rebooting World. [reason]") diff --git a/code/controllers/subsystem/ticker.dm.rej b/code/controllers/subsystem/ticker.dm.rej deleted file mode 100644 index 019d7cf3cd..0000000000 --- a/code/controllers/subsystem/ticker.dm.rej +++ /dev/null @@ -1,16 +0,0 @@ -diff a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm (rejected hunks) -@@ -719,6 +719,14 @@ SUBSYSTEM_DEF(ticker) - cinematic = SSticker.cinematic - maprotatechecked = SSticker.maprotatechecked - -+ switch (current_state) -+ if(GAME_STATE_SETTING_UP) -+ Master.SetRunLevel(RUNLEVEL_SETUP) -+ if(GAME_STATE_PLAYING) -+ Master.SetRunLevel(RUNLEVEL_GAME) -+ if(GAME_STATE_FINISHED) -+ Master.SetRunLevel(RUNLEVEL_POSTGAME) -+ - /datum/controller/subsystem/ticker/proc/send_news_report() - var/news_message - var/news_source = "Nanotrasen News Network" From ac9f139f570f4c74e850065975e8bcdd2cadfc1c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 29 May 2017 02:04:33 -0500 Subject: [PATCH 37/37] Automatic changelog generation for PR #1151 [ci skip] --- html/changelogs/AutoChangeLog-pr-1151.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1151.yml diff --git a/html/changelogs/AutoChangeLog-pr-1151.yml b/html/changelogs/AutoChangeLog-pr-1151.yml new file mode 100644 index 0000000000..1cd57ad4c9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1151.yml @@ -0,0 +1,5 @@ +author: "That Really Good Soda Flavor" +delete-after: True +changes: + - rscadd: "People who are high and beach bums can now talk in their own stoner language." + - tweak: "Beach bums can only communicate with other beach bums and people who are high."