From 52477eb16e0770837239b9ac937f3a71fe35c7e4 Mon Sep 17 00:00:00 2001 From: Sometinyprick Date: Tue, 17 Feb 2015 00:44:45 +0000 Subject: [PATCH 001/101] Adds a new spell. The Barnyard curse Created a new file because I didn't want to get rid of the horseman curse. Essentially the same as the horseman curse but you can also be a pig and a cow. --- code/datums/spells/barnyard.dm | 77 +++++++++++++++++++ code/game/gamemodes/wizard/spellbook.dm | 8 +- code/modules/clothing/masks/miscellaneous.dm | 42 ++++++++++ config/admins.txt | 3 +- icons/mob/mask.dmi | Bin 27175 -> 27918 bytes tgstation.dme | 46 +++++++++++ 6 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 code/datums/spells/barnyard.dm diff --git a/code/datums/spells/barnyard.dm b/code/datums/spells/barnyard.dm new file mode 100644 index 00000000000..1b4c11a1554 --- /dev/null +++ b/code/datums/spells/barnyard.dm @@ -0,0 +1,77 @@ +/obj/effect/proc_holder/spell/targeted/barnyardcurse + name = "Curse of the Barnyard" + desc = "This spell dooms the fate of any unlucky soul to the speech and facial attributes of a barnyard animal" + school = "transmutation" + charge_type = "recharge" + charge_max = 150 + charge_counter = 0 + clothes_req = 0 + stat_allowed = 0 + invocation = "KN'A FTAGHU, PUCK 'BTHNK!" + invocation_type = "shout" + range = 7 + cooldown_min = 30 + selection_type = "range" + var/list/compatible_mobs = list(/mob/living/carbon/human,/mob/living/carbon/monkey) + +/obj/effect/proc_holder/spell/targeted/barnyardcurse/cast(list/targets, mob/user = usr) + if(!targets.len) + user << "No target found in range." + return + + var/mob/living/carbon/target = targets[1] + + if(!(target.type in compatible_mobs)) + user << "You are unable to curse [target]'s head!" + return + + if(!(target in oview(range))) + user << "They are too far away!" + return + + if (prob(33)) + + var/obj/item/clothing/mask/spig/magicpig = new /obj/item/clothing/mask/spig //needs to be different otherwise you could turn it off and on. + magicpig.flags |=NODROP + magicpig.flags_inv = null + magicpig.voicechange = 1 + target.equip_to_slot_if_possible(magicpig, slot_wear_mask,1,1) + target.visible_message("[target]'s face lights up in fire, and after the event a pig's head takes it's place!", \ + "Your face burns up, and shortly after the fire you realise you have the face of a pig!") + if(!target.unEquip(target.wear_mask)) + qdel(target.wear_mask) + target.equip_to_slot_if_possible(magicpig,slot_wear_mask,1,1) + + flick("e_flash", target.flash) + return + + if (prob(55)) + + var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead + magichead.flags |=NODROP + magichead.flags_inv = null + magichead.voicechange = 1 + target.equip_to_slot_if_possible(magichead, slot_wear_mask,1,1) + target.visible_message("[target]'s face lights up in fire, and after the event a horses head takes it's place!", \ + "Your face burns up, and shortly after the fire you realise you have the face of a horse!") + if(!target.unEquip(target.wear_mask)) + qdel(target.wear_mask) + target.equip_to_slot_if_possible(magichead,slot_wear_mask,1,1) + + flick("e_flash", target.flash) + return + + if (prob(100)) //If nothing else works then it will be a cow head. + + var/obj/item/clothing/mask/cowmask/magiccow = new /obj/item/clothing/mask/cowmask + magiccow.flags |=NODROP + magiccow.flags_inv = null + target.equip_to_slot_if_possible(magiccow, slot_wear_mask,1,1) + target.visible_message("[target]'s face lights up in fire, and after the event a cow's head takes it's place!", \ + "Your face burns up. and shortly after the fire you realise you have the face of a cow!") + if(!target.unEquip(target.wear_mask)) + qdel(target.wear_mask) + target.equip_to_slot_if_possible(magiccow,slot_wear_mask,1,1) + + flick("e_flash", target.flash) + return diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 084cefb272c..9075ab6788c 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -103,6 +103,9 @@ dat += "Curse of the Horseman (15)
" dat += "This spell will curse a person to wear an unremovable horse mask (it has glue on the inside) and speak like a horse. It does not require wizard garb.
" + dat += "Curse of the Barnyward (15)
" + dat += " This Spell dooms any unlucky soul to the life of a barnyard animal. Well not exactly but you still get to laugh at them when they MOO!. It does not require a wizard garb.
" + dat += "Flesh to Stone (60)
" dat += "This spell will curse a person to immediately turn into an unmoving statue. The effect will eventually wear off if the statue is not destroyed.
" @@ -216,7 +219,7 @@ uses-- /* */ - var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", repulse = "Repulse", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", horseman = "Curse of the Horseman", fleshtostone = "Flesh to Stone", summonitem = "Instant Summons", summonguns = "Summon Guns", summonmagic = "Summon Magic", summonevents = "Summon Events", staffchange = "Staff of Change", soulstone = "Six Soul Stone Shards and the spell Artificer", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation", staffchaos = "Staff of Chaos", staffdoor = "Staff of Door Creation", wands = "Wand Assortment") + var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", repulse = "Repulse", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", horseman = "Curse of the Horseman", barnyardcurse ="The Curse of the Barnyard", fleshtostone = "Flesh to Stone", summonitem = "Instant Summons", summonguns = "Summon Guns", summonmagic = "Summon Magic", summonevents = "Summon Events", staffchange = "Staff of Change", soulstone = "Six Soul Stone Shards and the spell Artificer", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation", staffchaos = "Staff of Chaos", staffdoor = "Staff of Door Creation", wands = "Wand Assortment") var/already_knows = 0 for(var/obj/effect/proc_holder/spell/aspell in H.mind.spell_list) if(available_spells[href_list["spell_choice"]] == initial(aspell.name)) @@ -370,6 +373,9 @@ new /obj/item/weapon/gun/magic/staff/door(get_turf(H)) temp = "You have purchased a staff of door creation." max_uses-- + if("barnyard") + feedback_add_details("wizard_spell_learned","BC") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + H.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/barnyardcurse(null) if("wands") feedback_add_details("wizard_spell_learned","WA") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/storage/belt/wands/full(get_turf(H)) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 479b461b02a..fde26d8cc2a 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -49,6 +49,48 @@ flags = BLOCKHAIR flags_inv = HIDEFACE w_class = 2 + action_button_name = "Toggle Voice Box" + var/voicechange = 0 + +/obj/item/clothing/mask/pig/attack_self(mob/user) + voicechange = !voicechange + user << "You turn the voice box [voicechange ? "on" : "off"]!" + +/obj/item/clothing/mask/pig/speechModification(message) + if(voicechange) + message = pick("Oink!","Squeeeeeeee!","Oink Oink!") + return message + +/obj/item/clothing/mask/spig //needs to be different otherwise you could turn the speedmodification off and on + name = "Pig face" + desc = "It looks like a mask, but closer inspection reveals it's melded onto this persons face!" //It's only ever going to be attached to your face. + icon_state = "pig" + item_state = "pig" + flags = BLOCKHAIR + flags_inv = HIDEFACE + w_class = 2 + var/voicechange = 0 + +/obj/item/clothing/mask/spig/speechModification(message) + if(voicechange) + message = pick("Oink!","Squeeeeeeee!","Oink Oink!") + return message + +/obj/item/clothing/mask/cowmask + name = "Cowface" + desc = "It looks like a mask, but closer inspection reveals it's melded onto this persons face!" + icon = 'icons/mob/mask.dmi' + icon_state = "cowmask" + item_state = "cowmask" + flags = BLOCKHAIR + flags_inv = HIDEFACE + w_class = 2 + var/voicechange = 0 + +/obj/item/clothing/mask/cowmask/speechModification(message) + if(voicechange) + message = pick("Moooooooo!","Moo!","Moooo!") + return message /obj/item/clothing/mask/horsehead name = "horse head mask" diff --git a/config/admins.txt b/config/admins.txt index e263284f00a..e7dd7b8f9fa 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -78,4 +78,5 @@ xerux = Game Master dannno = Game Master allura = Game Master lo6a4evskiy = Game Master -vekter = Game Master \ No newline at end of file +vekter = Game Master +Sometinyprick = Game Master \ No newline at end of file diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index 111bdc0b9bdc77a593218dd32b03541b8910224c..adafb05bc00fe605d67593e278afbaab287fe06e 100644 GIT binary patch delta 8670 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 diff --git a/tgstation.dme b/tgstation.dme index 34098beb6ea..c3dfde729b2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6,6 +6,51 @@ // BEGIN_FILE_DIR #define FILE_DIR . +#define FILE_DIR "html" +#define FILE_DIR "icons" +#define FILE_DIR "icons/ass" +#define FILE_DIR "icons/effects" +#define FILE_DIR "icons/mecha" +#define FILE_DIR "icons/misc" +#define FILE_DIR "icons/mob" +#define FILE_DIR "icons/mob/inhands" +#define FILE_DIR "icons/obj" +#define FILE_DIR "icons/obj/assemblies" +#define FILE_DIR "icons/obj/atmospherics" +#define FILE_DIR "icons/obj/clothing" +#define FILE_DIR "icons/obj/doors" +#define FILE_DIR "icons/obj/flora" +#define FILE_DIR "icons/obj/guns" +#define FILE_DIR "icons/obj/machines" +#define FILE_DIR "icons/obj/pipes" +#define FILE_DIR "icons/obj/power_cond" +#define FILE_DIR "icons/pda_icons" +#define FILE_DIR "icons/spideros_icons" +#define FILE_DIR "icons/stamp_icons" +#define FILE_DIR "icons/Testing" +#define FILE_DIR "icons/turf" +#define FILE_DIR "icons/vending_icons" +#define FILE_DIR "nano" +#define FILE_DIR "nano/images" +#define FILE_DIR "sound" +#define FILE_DIR "sound/AI" +#define FILE_DIR "sound/ambience" +#define FILE_DIR "sound/effects" +#define FILE_DIR "sound/hallucinations" +#define FILE_DIR "sound/items" +#define FILE_DIR "sound/machines" +#define FILE_DIR "sound/mecha" +#define FILE_DIR "sound/misc" +#define FILE_DIR "sound/piano" +#define FILE_DIR "sound/spookoween" +#define FILE_DIR "sound/violin" +#define FILE_DIR "sound/voice" +#define FILE_DIR "sound/voice/complionator" +#define FILE_DIR "sound/vox_fem" +#define FILE_DIR "sound/weapons" +#define FILE_DIR "tools" +#define FILE_DIR "tools/AddToChangelog" +#define FILE_DIR "tools/AddToChangelog/AddToChangelog" // END_FILE_DIR // BEGIN_PREFERENCES @@ -216,6 +261,7 @@ #include "code\datums\helper_datums\teleport.dm" #include "code\datums\helper_datums\topic_input.dm" #include "code\datums\spells\area_teleport.dm" +#include "code\datums\spells\barnyard.dm" #include "code\datums\spells\charge.dm" #include "code\datums\spells\conjure.dm" #include "code\datums\spells\construct_spells.dm" From 699e674f59389e3324603e90e1b50fb09a1993fa Mon Sep 17 00:00:00 2001 From: Sometinyprick Date: Wed, 18 Feb 2015 10:54:05 +0000 Subject: [PATCH 002/101] Changelog and uncommits the .dme --- .../Sometinyprick-TheAnimalsTheyAttack!.yml | 36 ++++++++++++++ tgstation.dme | 47 +------------------ 2 files changed, 37 insertions(+), 46 deletions(-) create mode 100644 html/changelogs/Sometinyprick-TheAnimalsTheyAttack!.yml diff --git a/html/changelogs/Sometinyprick-TheAnimalsTheyAttack!.yml b/html/changelogs/Sometinyprick-TheAnimalsTheyAttack!.yml new file mode 100644 index 00000000000..a7d1c0882a6 --- /dev/null +++ b/html/changelogs/Sometinyprick-TheAnimalsTheyAttack!.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: Sometinyprick + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in single (') or double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Left blank for now, so I can edit this later." \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index c3dfde729b2..31259b5f58d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6,51 +6,6 @@ // BEGIN_FILE_DIR #define FILE_DIR . -#define FILE_DIR "html" -#define FILE_DIR "icons" -#define FILE_DIR "icons/ass" -#define FILE_DIR "icons/effects" -#define FILE_DIR "icons/mecha" -#define FILE_DIR "icons/misc" -#define FILE_DIR "icons/mob" -#define FILE_DIR "icons/mob/inhands" -#define FILE_DIR "icons/obj" -#define FILE_DIR "icons/obj/assemblies" -#define FILE_DIR "icons/obj/atmospherics" -#define FILE_DIR "icons/obj/clothing" -#define FILE_DIR "icons/obj/doors" -#define FILE_DIR "icons/obj/flora" -#define FILE_DIR "icons/obj/guns" -#define FILE_DIR "icons/obj/machines" -#define FILE_DIR "icons/obj/pipes" -#define FILE_DIR "icons/obj/power_cond" -#define FILE_DIR "icons/pda_icons" -#define FILE_DIR "icons/spideros_icons" -#define FILE_DIR "icons/stamp_icons" -#define FILE_DIR "icons/Testing" -#define FILE_DIR "icons/turf" -#define FILE_DIR "icons/vending_icons" -#define FILE_DIR "nano" -#define FILE_DIR "nano/images" -#define FILE_DIR "sound" -#define FILE_DIR "sound/AI" -#define FILE_DIR "sound/ambience" -#define FILE_DIR "sound/effects" -#define FILE_DIR "sound/hallucinations" -#define FILE_DIR "sound/items" -#define FILE_DIR "sound/machines" -#define FILE_DIR "sound/mecha" -#define FILE_DIR "sound/misc" -#define FILE_DIR "sound/piano" -#define FILE_DIR "sound/spookoween" -#define FILE_DIR "sound/violin" -#define FILE_DIR "sound/voice" -#define FILE_DIR "sound/voice/complionator" -#define FILE_DIR "sound/vox_fem" -#define FILE_DIR "sound/weapons" -#define FILE_DIR "tools" -#define FILE_DIR "tools/AddToChangelog" -#define FILE_DIR "tools/AddToChangelog/AddToChangelog" // END_FILE_DIR // BEGIN_PREFERENCES @@ -261,7 +216,6 @@ #include "code\datums\helper_datums\teleport.dm" #include "code\datums\helper_datums\topic_input.dm" #include "code\datums\spells\area_teleport.dm" -#include "code\datums\spells\barnyard.dm" #include "code\datums\spells\charge.dm" #include "code\datums\spells\conjure.dm" #include "code\datums\spells\construct_spells.dm" @@ -307,6 +261,7 @@ #include "code\game\communications.dm" #include "code\game\data_huds.dm" #include "code\game\dna.dm" +#include "code\datums\spells\barnyard.dm" #include "code\game\say.dm" #include "code\game\shuttle_engines.dm" #include "code\game\skincmd.dm" From e5b53f2e3cdb4ab7130286887bb4309b392626b4 Mon Sep 17 00:00:00 2001 From: Sometinyprick Date: Sat, 21 Feb 2015 01:26:58 +0000 Subject: [PATCH 003/101] Finishing up --- code/datums/spells/barnyard.dm | 55 ++++---------------- code/datums/spells/horsemask.dm | 42 --------------- code/game/gamemodes/wizard/rightandwrong.dm | 2 - code/game/gamemodes/wizard/spellbook.dm | 21 +++----- code/modules/clothing/masks/miscellaneous.dm | 6 +-- tgstation.dme | 3 +- 6 files changed, 21 insertions(+), 108 deletions(-) delete mode 100644 code/datums/spells/horsemask.dm diff --git a/code/datums/spells/barnyard.dm b/code/datums/spells/barnyard.dm index 1b4c11a1554..7b62eb90a81 100644 --- a/code/datums/spells/barnyard.dm +++ b/code/datums/spells/barnyard.dm @@ -29,49 +29,14 @@ user << "They are too far away!" return - if (prob(33)) + var/choice = pick(/obj/item/clothing/mask/spig, /obj/item/clothing/mask/cowmask, /obj/item/clothing/mask/horsehead) + var/obj/item/clothing/mask/magichead = new choice + magichead.flags |=NODROP + magichead.flags_inv = null + target.visible_message("[target]'s face lights up in fire, and after the event a barnyard animal's head takes it's place!", \ + "Your face burns up, and shortly after the fire you realise you have the face of a barnyard animal!") + if(!target.unEquip(target.wear_mask)) + qdel(target.wear_mask) + target.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1) - var/obj/item/clothing/mask/spig/magicpig = new /obj/item/clothing/mask/spig //needs to be different otherwise you could turn it off and on. - magicpig.flags |=NODROP - magicpig.flags_inv = null - magicpig.voicechange = 1 - target.equip_to_slot_if_possible(magicpig, slot_wear_mask,1,1) - target.visible_message("[target]'s face lights up in fire, and after the event a pig's head takes it's place!", \ - "Your face burns up, and shortly after the fire you realise you have the face of a pig!") - if(!target.unEquip(target.wear_mask)) - qdel(target.wear_mask) - target.equip_to_slot_if_possible(magicpig,slot_wear_mask,1,1) - - flick("e_flash", target.flash) - return - - if (prob(55)) - - var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead - magichead.flags |=NODROP - magichead.flags_inv = null - magichead.voicechange = 1 - target.equip_to_slot_if_possible(magichead, slot_wear_mask,1,1) - target.visible_message("[target]'s face lights up in fire, and after the event a horses head takes it's place!", \ - "Your face burns up, and shortly after the fire you realise you have the face of a horse!") - if(!target.unEquip(target.wear_mask)) - qdel(target.wear_mask) - target.equip_to_slot_if_possible(magichead,slot_wear_mask,1,1) - - flick("e_flash", target.flash) - return - - if (prob(100)) //If nothing else works then it will be a cow head. - - var/obj/item/clothing/mask/cowmask/magiccow = new /obj/item/clothing/mask/cowmask - magiccow.flags |=NODROP - magiccow.flags_inv = null - target.equip_to_slot_if_possible(magiccow, slot_wear_mask,1,1) - target.visible_message("[target]'s face lights up in fire, and after the event a cow's head takes it's place!", \ - "Your face burns up. and shortly after the fire you realise you have the face of a cow!") - if(!target.unEquip(target.wear_mask)) - qdel(target.wear_mask) - target.equip_to_slot_if_possible(magiccow,slot_wear_mask,1,1) - - flick("e_flash", target.flash) - return + flick("e_flash", target.flash) diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm deleted file mode 100644 index 8be107d4d40..00000000000 --- a/code/datums/spells/horsemask.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/horsemask - name = "Curse of the Horseman" - desc = "This spell triggers a curse on a target, causing them to wield an unremovable horse head mask. They will speak like a horse! Any masks they are wearing will be disintegrated. This spell does not require robes." - school = "transmutation" - charge_type = "recharge" - charge_max = 150 - charge_counter = 0 - clothes_req = 0 - stat_allowed = 0 - invocation = "KN'A FTAGHU, PUCK 'BTHNK!" - invocation_type = "shout" - range = 7 - cooldown_min = 30 //30 deciseconds reduction per rank - selection_type = "range" - var/list/compatible_mobs = list(/mob/living/carbon/human, /mob/living/carbon/monkey) - -/obj/effect/proc_holder/spell/targeted/horsemask/cast(list/targets, mob/user = usr) - if(!targets.len) - user << "No target found in range." - return - - var/mob/living/carbon/target = targets[1] - - if(!(target.type in compatible_mobs)) - user << "It'd be stupid to curse [target] with a horse's head!" - return - - if(!(target in oview(range)))//If they are not in overview after selection. - user << "They are too far away!" - return - - var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead - magichead.flags |= NODROP //curses! - magichead.flags_inv = null //so you can still see their face - magichead.voicechange = 1 //NEEEEIIGHH - target.visible_message( "[target]'s face lights up in fire, and after the event a horse's head takes its place!", \ - "Your face burns up, and shortly after the fire you realise you have the face of a horse!") - if(!target.unEquip(target.wear_mask)) - qdel(target.wear_mask) - target.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1) - - flick("e_flash", target.flash) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 430950915b4..36af179df20 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -103,8 +103,6 @@ new /obj/item/weapon/spellbook/oneuse/forcewall(get_turf(H)) if("knock") new /obj/item/weapon/spellbook/oneuse/knock(get_turf(H)) - if("horsemask") - new /obj/item/weapon/spellbook/oneuse/horsemask(get_turf(H)) if("charge") new /obj/item/weapon/spellbook/oneuse/charge(get_turf(H)) if("summonitem") diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 9075ab6788c..8ec2539161b 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -100,9 +100,6 @@ dat += "Knock (10)
" dat += "This spell opens nearby doors and does not require wizard garb.
" - dat += "Curse of the Horseman (15)
" - dat += "This spell will curse a person to wear an unremovable horse mask (it has glue on the inside) and speak like a horse. It does not require wizard garb.
" - dat += "Curse of the Barnyward (15)
" dat += " This Spell dooms any unlucky soul to the life of a barnyard animal. Well not exactly but you still get to laugh at them when they MOO!. It does not require a wizard garb.
" @@ -219,7 +216,7 @@ uses-- /* */ - var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", repulse = "Repulse", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", horseman = "Curse of the Horseman", barnyardcurse ="The Curse of the Barnyard", fleshtostone = "Flesh to Stone", summonitem = "Instant Summons", summonguns = "Summon Guns", summonmagic = "Summon Magic", summonevents = "Summon Events", staffchange = "Staff of Change", soulstone = "Six Soul Stone Shards and the spell Artificer", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation", staffchaos = "Staff of Chaos", staffdoor = "Staff of Door Creation", wands = "Wand Assortment") + var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", repulse = "Repulse", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", barnyardcurse ="The Curse of the Barnyard", fleshtostone = "Flesh to Stone", summonitem = "Instant Summons", summonguns = "Summon Guns", summonmagic = "Summon Magic", summonevents = "Summon Events", staffchange = "Staff of Change", soulstone = "Six Soul Stone Shards and the spell Artificer", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation", staffchaos = "Staff of Chaos", staffdoor = "Staff of Door Creation", wands = "Wand Assortment") var/already_knows = 0 for(var/obj/effect/proc_holder/spell/aspell in H.mind.spell_list) if(available_spells[href_list["spell_choice"]] == initial(aspell.name)) @@ -309,10 +306,6 @@ feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells H.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(null) temp = "You have learned knock." - if("horseman") - feedback_add_details("wizard_spell_learned","HH") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells - H.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/horsemask(null) - temp = "You have learned curse of the horseman." if("fleshtostone") feedback_add_details("wizard_spell_learned","FS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells H.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/inflict_handler/flesh_to_stone(null) @@ -488,7 +481,7 @@ var/mob/stored_swap = null //Used in used book recoils to store an identity for mindswaps /obj/item/weapon/spellbook/oneuse/mindswap/onlearned() - spellname = pick("fireball","smoke","blind","forcewall","knock","horses","charge") + spellname = pick("fireball","smoke","blind","forcewall","knock","barnyard","charge") icon_state = "book[spellname]" name = "spellbook of [spellname]" //Note, desc doesn't change by design ..() @@ -557,13 +550,13 @@ user <<"You're knocked down!" user.Weaken(20) -/obj/item/weapon/spellbook/oneuse/horsemask - spell = /obj/effect/proc_holder/spell/targeted/horsemask - spellname = "horses" +/obj/item/weapon/spellbook/oneuse/barnyard + spell = /obj/effect/proc_holder/spell/targeted/barnyardcurse + spellname = "barnyard" icon_state ="bookhorses" desc = "This book is more horse than your mind has room for." -/obj/item/weapon/spellbook/oneuse/horsemask/recoil(mob/living/carbon/user as mob) +/obj/item/weapon/spellbook/oneuse/barnyard/mask/recoil(mob/living/carbon/user as mob) if(istype(user, /mob/living/carbon/human)) user <<"HOR-SIE HAS RISEN" var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead @@ -575,7 +568,7 @@ user.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1) qdel(src) else - user <<"I say thee neigh" + user <<"I say thee neigh" //It still lives here /obj/item/weapon/spellbook/oneuse/charge spell = /obj/effect/proc_holder/spell/targeted/charge diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index fde26d8cc2a..4ce903e2bf8 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -69,7 +69,7 @@ flags = BLOCKHAIR flags_inv = HIDEFACE w_class = 2 - var/voicechange = 0 + var/voicechange = 1 /obj/item/clothing/mask/spig/speechModification(message) if(voicechange) @@ -85,7 +85,7 @@ flags = BLOCKHAIR flags_inv = HIDEFACE w_class = 2 - var/voicechange = 0 + var/voicechange = 1 /obj/item/clothing/mask/cowmask/speechModification(message) if(voicechange) @@ -100,7 +100,7 @@ flags = BLOCKHAIR flags_inv = HIDEFACE w_class = 2 - var/voicechange = 0 + var/voicechange = 1 /obj/item/clothing/mask/horsehead/speechModification(message) if(voicechange) diff --git a/tgstation.dme b/tgstation.dme index 31259b5f58d..63f9590a0c7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -216,6 +216,7 @@ #include "code\datums\helper_datums\teleport.dm" #include "code\datums\helper_datums\topic_input.dm" #include "code\datums\spells\area_teleport.dm" +#include "code\datums\spells\barnyard.dm" #include "code\datums\spells\charge.dm" #include "code\datums\spells\conjure.dm" #include "code\datums\spells\construct_spells.dm" @@ -224,7 +225,6 @@ #include "code\datums\spells\ethereal_jaunt.dm" #include "code\datums\spells\explosion.dm" #include "code\datums\spells\genetic.dm" -#include "code\datums\spells\horsemask.dm" #include "code\datums\spells\inflict_handler.dm" #include "code\datums\spells\knock.dm" #include "code\datums\spells\mime.dm" @@ -261,7 +261,6 @@ #include "code\game\communications.dm" #include "code\game\data_huds.dm" #include "code\game\dna.dm" -#include "code\datums\spells\barnyard.dm" #include "code\game\say.dm" #include "code\game\shuttle_engines.dm" #include "code\game\skincmd.dm" From 922dd6120e56acb839363d1e1bb293dc201cb59e Mon Sep 17 00:00:00 2001 From: Sometinyprick Date: Sat, 21 Feb 2015 01:30:01 +0000 Subject: [PATCH 004/101] I said I was going to edit this --- html/changelogs/Sometinyprick-TheAnimalsTheyAttack!.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/changelogs/Sometinyprick-TheAnimalsTheyAttack!.yml b/html/changelogs/Sometinyprick-TheAnimalsTheyAttack!.yml index a7d1c0882a6..5e415a3bbdf 100644 --- a/html/changelogs/Sometinyprick-TheAnimalsTheyAttack!.yml +++ b/html/changelogs/Sometinyprick-TheAnimalsTheyAttack!.yml @@ -33,4 +33,4 @@ delete-after: True # Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. # Please surround your changes in single (') or double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. changes: - - rscadd: "Left blank for now, so I can edit this later." \ No newline at end of file + - rscadd: "The Horsemask spell has now been altered, instead of just a horse mask it will now choose between three animal masks including the horse mask." From 145175342f37bc0a9e71a79cae43a4b9960f1fa3 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 21 Feb 2015 18:31:21 +0100 Subject: [PATCH 005/101] Makes NPC queens/drones plant weeds/eggs --- .../mob/living/simple_animal/hostile/alien.dm | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index e08f84a93fd..4b8c7303d86 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -43,6 +43,16 @@ health = 60 melee_damage_lower = 15 melee_damage_upper = 15 + var/plant_cooldown = 30 + +/mob/living/simple_animal/hostile/alien/drone/Life() + ..() + if(!stat) + plant_cooldown-- + if(stance==HOSTILE_STANCE_IDLE) + if(prob(10) && plant_cooldown<=0) + plant_cooldown = initial(plant_cooldown) + SpreadPlants() /mob/living/simple_animal/hostile/alien/sentinel name = "alien sentinel" @@ -75,6 +85,38 @@ projectiletype = /obj/item/projectile/neurotox projectilesound = 'sound/weapons/pierce.ogg' status_flags = 0 + var/sterile = 1 + var/egg_cooldown = 30 + var/plant_cooldown = 30 + +/mob/living/simple_animal/hostile/alien/queen/Life() + ..() + if(!stat) + egg_cooldown-- + plant_cooldown-- + if(stance==HOSTILE_STANCE_IDLE) + if(prob(10) && plant_cooldown<=0) + plant_cooldown = initial(plant_cooldown) + SpreadPlants() + if(!sterile && prob(10) && egg_cooldown<=0) + egg_cooldown = initial(egg_cooldown) + LayEggs() + +/mob/living/simple_animal/hostile/alien/proc/SpreadPlants() + if(!isturf(loc) || istype(loc, /turf/space)) + return + if(locate(/obj/structure/alien/weeds/node) in get_turf(src)) + return + visible_message("[src] has planted some alien weeds!") + new /obj/structure/alien/weeds/node(loc) + +/mob/living/simple_animal/hostile/alien/proc/LayEggs() + if(!isturf(loc) || istype(loc, /turf/space)) + return + if(locate(/obj/structure/alien/egg) in get_turf(src)) + return + visible_message("[src] has laid an egg!") + new /obj/structure/alien/egg(loc) /mob/living/simple_animal/hostile/alien/queen/large name = "alien empress" From fb2912146fd7e66777891f207de4f3f1fb7b413b Mon Sep 17 00:00:00 2001 From: AnturK Date: Sun, 22 Feb 2015 19:19:31 +0100 Subject: [PATCH 006/101] Adds plants_flag, sets moonoutpost aliens to use it --- _maps/RandomZLevels/moonoutpost19.dmm | 10 +++++----- code/modules/mob/living/simple_animal/hostile/alien.dm | 6 ++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 3fa664d176a..a1c4d3b4548 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -35,14 +35,14 @@ "aI" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/structure/alien/weeds{desc = "A large mottled egg."; health = 100; icon_state = "egg_hatched"; name = "egg"},/obj/effect/decal/cleanable/blood/gibs,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "aJ" = (/obj/structure/alien/weeds,/obj/structure/alien/weeds{desc = "A large mottled egg."; health = 100; icon_state = "egg_hatched"; name = "egg"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "aK" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/obj/effect/decal/cleanable/blood/gibs,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) -"aL" = (/obj/structure/alien/weeds,/mob/living/simple_animal/hostile/alien/drone,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) +"aL" = (/obj/structure/alien/weeds,/mob/living/simple_animal/hostile/alien/drone{plants_off = 1},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "aM" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "aN" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "aO" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "aP" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "aQ" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "aR" = (/obj/item/weapon/ore/iron{pixel_x = 7; pixel_y = -6},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) -"aS" = (/obj/structure/alien/weeds,/mob/living/simple_animal/hostile/alien/queen/large{desc = "A gigantic alien who is in charge of the hive and all of its loyal servants."; name = "alien queen"; pixel_x = -16},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) +"aS" = (/obj/structure/alien/weeds,/mob/living/simple_animal/hostile/alien/queen/large{desc = "A gigantic alien who is in charge of the hive and all of its loyal servants."; name = "alien queen"; pixel_x = -16; plants_off = 1},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "aT" = (/turf/simulated/wall,/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "aU" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "darkredcorners"; tag = "icon-darkredcorners (WEST)"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "aV" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) @@ -50,7 +50,7 @@ "aX" = (/obj/machinery/gateway{dir = 6},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "aY" = (/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "darkredcorners"; tag = "icon-darkredcorners"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "aZ" = (/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) -"ba" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/mob/living/simple_animal/hostile/alien/drone,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) +"ba" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/mob/living/simple_animal/hostile/alien/drone{plants_off = 1},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "bb" = (/obj/structure/alien/weeds,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "bc" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "bd" = (/obj/machinery/vending/cigarette,/obj/structure/sign/poster{icon_state = "poster7"; pixel_y = 32; serial_number = 7; subtype = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) @@ -156,7 +156,7 @@ "cZ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "da" = (/turf/simulated/floor/wood{heat_capacity = 1e+006},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "db" = (/obj/machinery/door_control{id = "awaydorm5"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/obj/structure/dresser,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood{heat_capacity = 1e+006},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) -"dc" = (/obj/structure/alien/weeds/node,/mob/living/simple_animal/hostile/alien/drone,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) +"dc" = (/obj/structure/alien/weeds/node,/mob/living/simple_animal/hostile/alien/drone{plants_off = 1},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "dd" = (/obj/machinery/mineral/stacking_machine{dir = 1; input_dir = 1; output_dir = 2},/turf/simulated/floor/plating{carbon_dioxide = 48.7; dir = 4; heat_capacity = 1e+006; icon_state = "warnplate"; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "de" = (/obj/machinery/mineral/stacking_unit_console{machinedir = 8},/turf/simulated/wall,/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) "df" = (/obj/structure/closet/crate,/obj/item/stack/sheet/glass{amount = 10},/obj/structure/alien/weeds,/turf/simulated/floor/plasteel{carbon_dioxide = 48.7; dir = 1; heat_capacity = 1e+006; icon_state = "bot"; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a4{has_gravity = 1; name = "Syndicate Outpost"}) @@ -197,7 +197,7 @@ "dO" = (/obj/structure/alien/weeds,/obj/structure/alien/resin/wall,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "dP" = (/obj/structure/alien/weeds/node,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "dQ" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/obj/structure/alien/resin/wall,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) -"dR" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/effect/decal/cleanable/blood,/mob/living/simple_animal/hostile/alien/drone,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) +"dR" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/effect/decal/cleanable/blood,/mob/living/simple_animal/hostile/alien/drone{plants_off = 1},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a5{always_unpowered = 1; has_gravity = 1; name = "The Hive"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "dS" = (/obj/structure/alien/weeds,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "dT" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "dU" = (/obj/structure/alien/weeds/node,/obj/structure/alien/resin/wall,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 4b8c7303d86..70f9f55c8ab 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -44,13 +44,14 @@ melee_damage_lower = 15 melee_damage_upper = 15 var/plant_cooldown = 30 + var/plants_off = 0 /mob/living/simple_animal/hostile/alien/drone/Life() ..() if(!stat) plant_cooldown-- if(stance==HOSTILE_STANCE_IDLE) - if(prob(10) && plant_cooldown<=0) + if(!plant_off && prob(10) && plant_cooldown<=0) plant_cooldown = initial(plant_cooldown) SpreadPlants() @@ -86,6 +87,7 @@ projectilesound = 'sound/weapons/pierce.ogg' status_flags = 0 var/sterile = 1 + var/plants_off = 0 var/egg_cooldown = 30 var/plant_cooldown = 30 @@ -95,7 +97,7 @@ egg_cooldown-- plant_cooldown-- if(stance==HOSTILE_STANCE_IDLE) - if(prob(10) && plant_cooldown<=0) + if(!plants_off && prob(10) && plant_cooldown<=0) plant_cooldown = initial(plant_cooldown) SpreadPlants() if(!sterile && prob(10) && egg_cooldown<=0) From 9eceaeb9e88421f6ee372d5e443ea2af067e4ed7 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sun, 22 Feb 2015 19:21:44 +0100 Subject: [PATCH 007/101] Goddamit --- code/modules/mob/living/simple_animal/hostile/alien.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 70f9f55c8ab..b00b0c95e70 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -51,7 +51,7 @@ if(!stat) plant_cooldown-- if(stance==HOSTILE_STANCE_IDLE) - if(!plant_off && prob(10) && plant_cooldown<=0) + if(!plants_off && prob(10) && plant_cooldown<=0) plant_cooldown = initial(plant_cooldown) SpreadPlants() From 228d15c7d81ba3b0117bddc177ac3f37fe543913 Mon Sep 17 00:00:00 2001 From: AnturK Date: Tue, 24 Feb 2015 15:54:46 +0100 Subject: [PATCH 008/101] Changelog --- html/changelogs/Anturke-PR-7872.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/Anturke-PR-7872.yml diff --git a/html/changelogs/Anturke-PR-7872.yml b/html/changelogs/Anturke-PR-7872.yml new file mode 100644 index 00000000000..2d2904330ae --- /dev/null +++ b/html/changelogs/Anturke-PR-7872.yml @@ -0,0 +1,6 @@ +author: AnturK + +delete-after: True + +changes: + - rscadd: "Non-player Alien Queens/Drones now spread weeds. Can also lay eggs when enabled." From 7a8e78a4c3e50b89ef6fbab2300d72529642c682 Mon Sep 17 00:00:00 2001 From: paprka Date: Wed, 25 Feb 2015 00:19:53 -0800 Subject: [PATCH 009/101] this kills the object verbs --- code/modules/projectiles/gun.dm | 41 +++++++++++++++ .../projectiles/guns/energy/special.dm | 5 +- .../projectiles/guns/projectile/revolver.dm | 47 ++++++------------ .../projectiles/guns/projectile/shotgun.dm | 20 +++++++- icons/obj/guns/projectile.dmi | Bin 18549 -> 20442 bytes 5 files changed, 77 insertions(+), 36 deletions(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 722d6289a68..4bd972b9998 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -33,6 +33,11 @@ var/semicd = 0 //cooldown handler var/heavy_weapon = 0 + var/unique_rename = 0 //allows renaming with a pen + var/unique_reskin = 0 //allows one-time reskinning + var/reskinned = 0 //whether or not the gun has been reskinned + var/list/options = list() + lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/guns_righthand.dmi' @@ -251,6 +256,11 @@ S.update_brightness(user) update_icon() verbs -= /obj/item/weapon/gun/proc/toggle_gunlight + + if(unique_rename) + if(istype(A, /obj/item/weapon/pen)) + rename_gun(user) + ..() return @@ -305,3 +315,34 @@ if(F.on) user.AddLuminosity(-F.brightness_on) SetLuminosity(F.brightness_on) + + +/obj/item/weapon/gun/attack_hand(mob/user as mob) + if(unique_reskin && !reskinned && loc == user) + reskin_gun(user) + return + ..() + +/obj/item/weapon/gun/proc/reskin_gun(var/mob/M) + var/choice = input(M,"Warning, you can only reskin your weapon once!","Reskin Gun") in options + + if(src && choice && !M.stat && in_range(M,src) && !M.restrained() && M.canmove) + if(sawn_state == SAWN_OFF) + icon_state = options[choice] + "-sawn" + if(icon_state == "[initial(icon_state)]-sawn") + return + else + icon_state = options[choice] + if(icon_state == initial(icon_state)) + return + M << "Your gun is now skinned as [choice]. Say hello to your new friend." + reskinned = 1 + return + +/obj/item/weapon/gun/proc/rename_gun(var/mob/M) + var/input = stripped_input(M,"What do you want to name the gun?", ,"", MAX_NAME_LEN) + + if(src && input && !M.stat && in_range(M,src) && !M.restrained() && M.canmove) + name = input + M << "You name the gun [input]. Say hello to your new friend." + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 9b8bb0f23ae..96822335fce 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -128,7 +128,7 @@ var/range_add = 0 var/overheat_time = 20 upgrades = list("diamond" = 0, "screwdriver" = 0, "plasma" = 0) - + unique_rename = 1 /obj/item/weapon/gun/energy/kinetic_accelerator/newshot() ..() @@ -161,6 +161,8 @@ power_supply.rigged = 1 // This is dangerous! S.use(1) + ..() + /obj/item/weapon/gun/energy/kinetic_accelerator/shoot_live_shot() overheat = 1 spawn(overheat_time) @@ -192,6 +194,7 @@ origin_tech = "combat=2;magnets=2;syndicate=5" suppressed = 1 ammo_type = list(/obj/item/ammo_casing/energy/bolt) + unique_rename = 0 /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large name = "energy crossbow" diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index be0fa4540a0..43af3e81a62 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -22,6 +22,10 @@ update_icon() chamber_round() + if(unique_rename) + if(istype(A, /obj/item/weapon/pen)) + rename_gun(user) + /obj/item/weapon/gun/projectile/revolver/attack_self(mob/living/user as mob) var/num_unloaded = 0 while (get_ammo() > 0) @@ -57,6 +61,16 @@ icon_state = "detective" origin_tech = "combat=2;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 + unique_rename = 1 + unique_reskin = 1 + +/obj/item/weapon/gun/projectile/revolver/detective/New() + ..() + options["Leopard Spots"] = "detective_leopard" + options["Black Panther"] = "detective_panther" + options["Gold Trim"] = "detective_gold" + options["The Peacemaker"] = "detective_peacemaker" + options["Cancel"] = "detective" /obj/item/weapon/gun/projectile/revolver/detective/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, var/message = 1, params) if(magazine.caliber != initial(magazine.caliber)) @@ -69,39 +83,6 @@ return 0 ..() - -/obj/item/weapon/gun/projectile/revolver/detective/verb/rename_gun() - set name = "Name Gun" - set category = "Object" - set desc = "Click to rename your gun." - - var/mob/M = usr - var/input = stripped_input(M,"What do you want to name the gun?", ,"", MAX_NAME_LEN) - - if(src && input && !M.stat && in_range(M,src) && !M.restrained() && M.canmove) - name = input - M << "You name the gun [input]. Say hello to your new friend." - return 1 - -/obj/item/weapon/gun/projectile/revolver/detective/verb/reskin_gun() - set name = "Reskin gun" - set category = "Object" - set desc = "Click to reskin your gun." - - var/mob/M = usr - var/list/options = list() - options["The Original"] = "detective" - options["Leopard Spots"] = "detective_leopard" - options["Black Panther"] = "detective_panther" - options["Gold Trim"] = "detective_gold" - options["The Peacemaker"] = "detective_peacemaker" - var/choice = input(M,"What do you want to skin the gun to?","Reskin Gun") in options - - if(src && choice && !M.stat && in_range(M,src) && !M.restrained() && M.canmove) - icon_state = options[choice] - M << "Your gun is now skinned as [choice]. Say hello to your new friend." - return 1 - /obj/item/weapon/gun/projectile/revolver/detective/attackby(var/obj/item/A as obj, mob/user as mob, params) ..() if(istype(A, /obj/item/weapon/screwdriver)) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 8301d638c28..08e791a40fb 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -139,6 +139,17 @@ origin_tech = "combat=3;materials=1" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/dualshot sawn_desc = "Omar's coming!" + unique_rename = 1 + unique_reskin = 1 + +/obj/item/weapon/gun/projectile/revolver/doublebarrel/New() + ..() + options["Dark Red Finish"] = "dshotgun-d" + options["Ash"] = "dshotgun-f" + options["Faded Grey"] = "dshotgun-g" + options["Maple"] = "dshotgun-l" + options["Rosewood"] = "dshotgun-p" + options["Cancel"] = "dshotgun" /obj/item/weapon/gun/projectile/revolver/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob, params) ..() @@ -179,6 +190,8 @@ origin_tech = "combat=2;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/improvised sawn_desc = "I'm just here for the gasoline." + unique_rename = 0 + unique_reskin = 0 /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/attackby(var/obj/item/A as obj, mob/user as mob, params) ..() @@ -193,7 +206,8 @@ user << "You need at least ten lengths of cable if you want to make a sling." return -//Sawing guns related procs +// Sawing guns related procs // + /obj/item/weapon/gun/projectile/proc/blow_up(mob/user as mob) . = 0 for(var/obj/item/ammo_casing/AC in magazine.stored_ammo) @@ -228,7 +242,7 @@ user.visible_message("[user] shortens \the [src]!", "You shorten \the [src]!") name = "sawn-off [src.name]" desc = sawn_desc - icon_state = initial(icon_state) + "-sawn" + icon_state = "[icon_state]-sawn" w_class = 3.0 item_state = "gun" slot_flags &= ~SLOT_BACK //you can't sling it on your back @@ -240,6 +254,8 @@ sawn_state = SAWN_INTACT +// Bulldog shotgun // + /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog name = "syndicate shotgun" desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index fe8cd6434d3c64147c2f4307bcf8d2da8b4eb1f9..39b46c7806e1ee70ba58cf7195c39bde1cd779f4 100644 GIT binary patch literal 20442 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 Date: Wed, 25 Feb 2015 00:20:40 -0800 Subject: [PATCH 010/101] beck sprites --- icons/mob/back.dmi | Bin 69743 -> 72339 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 00aae60bf8d0f6b5823f16ab6c1868dd89e9fe9d..f75a53e38e47e8f874a8ace9d09c5461fdaff067 100644 GIT binary patch delta 8688 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 delta 6071 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 bNQQN22qUYuKJP=f^MJPI4UMuZ)_?sM_pY+@ From 9e450b30dfb3f90e78d1df2f90cade4de151007e Mon Sep 17 00:00:00 2001 From: paprka Date: Wed, 25 Feb 2015 00:25:27 -0800 Subject: [PATCH 011/101] further improvements and changelog --- code/modules/projectiles/gun.dm | 6 ++---- code/modules/projectiles/guns/projectile/revolver.dm | 3 ++- code/modules/projectiles/guns/projectile/shotgun.dm | 3 ++- html/changelogs/Paprka-renamingandreskinning.yml | 6 ++++++ 4 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 html/changelogs/Paprka-renamingandreskinning.yml diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4bd972b9998..9b14f51bf4d 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -327,14 +327,12 @@ var/choice = input(M,"Warning, you can only reskin your weapon once!","Reskin Gun") in options if(src && choice && !M.stat && in_range(M,src) && !M.restrained() && M.canmove) + if(options[choice] == null) + return if(sawn_state == SAWN_OFF) icon_state = options[choice] + "-sawn" - if(icon_state == "[initial(icon_state)]-sawn") - return else icon_state = options[choice] - if(icon_state == initial(icon_state)) - return M << "Your gun is now skinned as [choice]. Say hello to your new friend." reskinned = 1 return diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 43af3e81a62..b826698eb39 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -66,11 +66,12 @@ /obj/item/weapon/gun/projectile/revolver/detective/New() ..() + options["Default"] = "detective" options["Leopard Spots"] = "detective_leopard" options["Black Panther"] = "detective_panther" options["Gold Trim"] = "detective_gold" options["The Peacemaker"] = "detective_peacemaker" - options["Cancel"] = "detective" + options["Cancel"] = null /obj/item/weapon/gun/projectile/revolver/detective/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, var/message = 1, params) if(magazine.caliber != initial(magazine.caliber)) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 08e791a40fb..b4de0731b06 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -144,12 +144,13 @@ /obj/item/weapon/gun/projectile/revolver/doublebarrel/New() ..() + options["Default"] = "dshotgun" options["Dark Red Finish"] = "dshotgun-d" options["Ash"] = "dshotgun-f" options["Faded Grey"] = "dshotgun-g" options["Maple"] = "dshotgun-l" options["Rosewood"] = "dshotgun-p" - options["Cancel"] = "dshotgun" + options["Cancel"] = null /obj/item/weapon/gun/projectile/revolver/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob, params) ..() diff --git a/html/changelogs/Paprka-renamingandreskinning.yml b/html/changelogs/Paprka-renamingandreskinning.yml new file mode 100644 index 00000000000..87ff793ab9b --- /dev/null +++ b/html/changelogs/Paprka-renamingandreskinning.yml @@ -0,0 +1,6 @@ +author: Paprka + +delete-after: True + +changes: + - tweak: "Reworked reskinning and renaming guns, and added the ability to reskin the bartender's shotgun. Click it with an empty active hand to reskin. Warning, you can only do this once! Rename by hitting it with a pen. This also works with miner shotguns now." \ No newline at end of file From 9a08a81d39d4e1061f26e9b5285a50b49ac3f8d2 Mon Sep 17 00:00:00 2001 From: Incoming Date: Wed, 25 Feb 2015 03:59:40 -0500 Subject: [PATCH 012/101] Reworks the pink/light pink slime line to not be nearly worthless to breed. Pink: Before: Replaced the slime mob with a peaceful simple animal version. This used to be ok, but then a friend system was added to slimes that meant you could have all the fun of not geting attacked by slimes without having to cripple their ability to defend themselves Now: Puts checks in to keep the slime from eating or targeting people, but keeping their friendships intact so the scientist can still make use of the system. Light Pink: Then: Same as pink, except you can use it on adult slimes to make equally pointless adult simple animals Now: Can be used on any mindless simple animal/monkey/slime to give them "sentience" aka player control drawn from ghosts with BE_ALIEN. Sample uses include: Weaponizing gold core mobs into working for you, using player mice to spy on people, providing an admitedly convoluted way to get player spiders in the round. Sepia: Then: It produces Cameras and film, readily accessble low demand items. Everyone laughs at this slime. Now: It still does that. Someone please figure out something for the sepia slime to do, its life is a joke. --- code/modules/mob/living/carbon/slime/life.dm | 7 +- .../modules/mob/living/carbon/slime/powers.dm | 4 + code/modules/mob/living/carbon/slime/slime.dm | 97 ++++++++----------- code/modules/reagents/Chemistry-Recipes.dm | 4 +- html/changelogs/Incoming5643-slimechanges.yml | 6 ++ 5 files changed, 61 insertions(+), 57 deletions(-) create mode 100644 html/changelogs/Incoming5643-slimechanges.yml diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index dd04410c66b..48e1f708a93 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -226,6 +226,10 @@ /mob/living/carbon/slime/proc/handle_nutrition() + if(docile) //God as my witness, I will never go hungry again + nutrition = 700 + return + if(prob(15)) nutrition -= 1 + is_adult @@ -283,7 +287,7 @@ if(Target) --target_patience - if (target_patience <= 0 || SStun || Discipline || attacked) // Tired of chasing or something draws out attention + if (target_patience <= 0 || SStun || Discipline || attacked || docile) // Tired of chasing or something draws out attention target_patience = 0 Target = null @@ -547,6 +551,7 @@ else return 200 /mob/living/carbon/slime/proc/will_hunt(var/hunger = -1) // Check for being stopped from feeding and chasing + if (docile) return 0 if (hunger == 2 || rabid || attacked) return 1 if (Leader) return 0 if (holding_still) return 0 diff --git a/code/modules/mob/living/carbon/slime/powers.dm b/code/modules/mob/living/carbon/slime/powers.dm index ef91582c3ec..01918ec5fc5 100644 --- a/code/modules/mob/living/carbon/slime/powers.dm +++ b/code/modules/mob/living/carbon/slime/powers.dm @@ -5,6 +5,10 @@ Feedstop() return 0 + if(docile) + src << "I'm not hungry anymore..." + return 0 + if(stat) src << "I must be conscious to do this..." return 0 diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 208960cc5f1..50f69d07669 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -6,6 +6,7 @@ say_message = "hums" ventcrawler = 2 var/is_adult = 0 + var/docile = 0 languages = SLIME | HUMAN faction = list("slime") @@ -135,8 +136,8 @@ stat(null, "Health: [round((health / 200) * 100)]%") else stat(null, "Health: [round((health / 150) * 100)]%") - - stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]") + if(!docile) + stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]") if(amount_grown >= 10) if(is_adult) stat(null, "You can reproduce!") @@ -634,71 +635,59 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 ////Pet Slime Creation/// -/obj/item/weapon/slimepotion +/obj/item/slimepotion name = "docility potion" - desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame." + desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame." icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" - attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. - user << " The potion only works on baby slimes!" - return ..() - if(M.is_adult) //Can't tame adults - user << " Only baby slimes can be tamed!" - return..() - if(M.stat) - user << " The slime is dead!" - return..() - if(M.mind) - user << " The slime resists!" - return ..() - var/mob/living/simple_animal/slime/pet = new /mob/living/simple_animal/slime(M.loc) - pet.icon_state = "[M.colour] baby slime" - pet.icon_living = "[M.colour] baby slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - user <<"You feed the slime the potion, removing it's powers and calming it." - qdel(M) - var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) - - if (!newname) - newname = "pet slime" - pet.name = newname - pet.real_name = newname - qdel(src) - -/obj/item/weapon/slimepotion2 - name = "advanced docility potion" - desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame. This one is meant for adult slimes" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle19" - -/obj/item/weapon/slimepotion2/attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime/))//If target is not a slime. - user << " The potion only works on slimes!" +/obj/item/slimepotion/attack(mob/living/carbon/slime/M as mob, mob/user as mob) + if(!isslime(M)) + user << "The potion only works on slimes!" return ..() if(M.stat) - user << " The slime is dead!" + user << "The slime is dead!" return..() - if(M.mind) - user << " The slime resists!" - return ..() - var/mob/living/simple_animal/slime/adult/pet = new /mob/living/simple_animal/slime/adult(M.loc) - pet.icon_state = "[M.colour] adult slime" - pet.icon_living = "[M.colour] adult slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - user <<"You feed the slime the potion, removing it's powers and calming it." - qdel(M) + + M.docile = 1 + M.nutrition = 700 + M <<" You absorb the potion and feel your intense desire to feed melt away." + user <<" You feed the slime the potion, removing it's hunger and calming it." var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) if (!newname) newname = "pet slime" - pet.name = newname - pet.real_name = newname + M.name = newname + M.real_name = newname qdel(src) +/obj/item/slimepotion2 + name = "sentience potion" + desc = "A miraculous chemical mix that can raise the intelligence of creatures to human levels." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle19" + +/obj/item/slimepotion2/afterattack(mob/living/M as mob, mob/user as mob) + if(!(isslime(M) || isanimal(M) || ismonkey(M) || !M.ckey)) //I'm sorry for this line + user << "[M] is already too inteligent for this to work!" + return ..() + if(M.stat) + user << "[M] is dead!" + return..() + + var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET) + var/client/C = null + + if(candidates.len) + C = pick(candidates) + M.key = C.key + M.languages |= HUMAN + M << "All at once it makes sense, you know what you are and who you are! Self awareness is yours!" + user << "[M] is suddenly attentive and aware. It worked!" + qdel(src) + else + user << "[M] looks interested for a moment, but then looks back down. Maybe you should try again later..." + ..() /obj/item/weapon/slimesteroid name = "slime steroid" diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index c9107f329d3..7f6ac8c1992 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -870,7 +870,7 @@ datum/chemical_reaction/pestkiller required_other = 1 /datum/chemical_reaction/slimeppotion/on_reaction(var/datum/reagents/holder) feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion + var/obj/item/slimepotion/P = new /obj/item/slimepotion P.loc = get_turf(holder.my_atom) @@ -913,7 +913,7 @@ datum/chemical_reaction/pestkiller required_other = 1 /datum/chemical_reaction/slimepotion2/on_reaction(var/datum/reagents/holder) feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2 + var/obj/item/slimepotion2/P = new /obj/item/slimepotion2 P.loc = get_turf(holder.my_atom) //Adamantine /datum/chemical_reaction/slimegolem diff --git a/html/changelogs/Incoming5643-slimechanges.yml b/html/changelogs/Incoming5643-slimechanges.yml new file mode 100644 index 00000000000..f77e7e6fc8c --- /dev/null +++ b/html/changelogs/Incoming5643-slimechanges.yml @@ -0,0 +1,6 @@ +author: Incoming5643 + +delete-after: True + +changes: + - rscadd: Nanotrasen scientists have recently reported mutations within the pink family line of slimes. Station scientists are encoraged to investigate." \ No newline at end of file From 1e8324c3c50ffbc1dfcb05fc8575330e8d1fd4f9 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Thu, 26 Feb 2015 17:04:00 +0000 Subject: [PATCH 013/101] Exposes all embedding related multipliers as variables and definitions. Only items of throw_speed 4 or more can embed now, Explosions force their object to be thrown at 4, this throw_speed threshold is ON TOP of needing to be a can_embed() object. --- code/__DEFINES/combat.dm | 12 +++++-- code/game/objects/explosion.dm | 4 ++- code/game/objects/items.dm | 31 ++++++++++++------- code/game/objects/items/weapons/weaponry.dm | 12 +++++-- code/modules/mob/living/carbon/human/human.dm | 4 +-- code/modules/mob/living/carbon/human/life.dm | 4 +-- 6 files changed, 46 insertions(+), 21 deletions(-) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index e9b5c883731..901e45b3a68 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -52,6 +52,12 @@ //Embedded objects -#define EMBEDDED_PAIN_CHANCE 15 //Chance for embedded objects to cause pain (damage user) -#define EMBEDDED_ITEM_FALLOUT 5 //Chance for embedded object to fall out (causing pain but removing the object) -#define EMBED_CHANCE 45 //Chance for an object to embed into somebody when thrown (if it's sharp) \ No newline at end of file +#define EMBEDDED_PAIN_CHANCE 15 //Chance for embedded objects to cause pain (damage user) +#define EMBEDDED_ITEM_FALLOUT 5 //Chance for embedded object to fall out (causing pain but removing the object) +#define EMBED_CHANCE 45 //Chance for an object to embed into somebody when thrown (if it's sharp) +#define EMBEDDED_PAIN_MULTIPLIER 2 //Coefficient of multiplication for the damage the item does while embedded (this*item.w_class) +#define EMBEDDED_FALL_PAIN_MULTIPLIER 5 //Coefficient of multiplication for the damage the item does when it falls out (this*item.w_class) +#define EMBEDDED_IMPACT_PAIN_MULTIPLIER 4 //Coefficient of multiplication for the damage the item does when it first embeds (this*item.w_class) +#define EMBED_THROWSPEED_THRESHOLD 4 //The minimum value of an item's throw_speed for it to embed (Unless it has embedded_ignore_throwspeed_threshold set to 1) +#define EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER 8 //Coefficient of multiplication for the damage the item does when removed without a surgery (this*item.w_class) +#define EMBEDDED_UNSAFE_REMOVAL_TIME 30 //A Time in ticks, total removal time = (this*item.w_class) diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 3a68df046f1..902fccd1660 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -113,7 +113,9 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa spawn(0) //Simultaneously not one at a time var/throw_range = rand(throw_dist, max_range) var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range) - I.throw_at(throw_at, throw_range,1) + I.throw_speed = 4 //Temporarily change their throw_speed for embedding purposes (Reset when it finishes throwing, regardless of hitting anything) + I.throw_at(throw_at, throw_range, 2)//Throw it at 2 speed, this is purely visual anyway. + var/took = (world.timeofday-start)/10 //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cf8461e8b75..876faef69b0 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -48,9 +48,15 @@ var/hooded = 0 //So items can have custom embedd values + //Because customisation is king var/embed_chance = EMBED_CHANCE var/embedded_fall_chance = EMBEDDED_ITEM_FALLOUT var/embedded_pain_chance = EMBEDDED_PAIN_CHANCE + var/embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does while embedded (this*w_class) + var/embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when falling out of a limb (this*w_class) + var/embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when first embedded (this*w_class) + var/embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class) + var/embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME //A time in ticks, multiplied by the w_class. var/list/can_be_placed_into = list( /obj/structure/table, @@ -417,16 +423,19 @@ /obj/item/throw_impact(A) - if(istype(A, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = A - if(can_embed(src)) - if(prob(embed_chance)) - var/obj/item/organ/limb/L = pick(H.organs) - L.embedded_objects |= src - add_blood(H)//it embedded itself in you, of course it's bloody! - loc = H - L.take_damage(w_class*5) - H.visible_message("\the [name] embeds itself in [H]'s [L.getDisplayName()]!","\the [name] embeds itself in your [L.getDisplayName()]!") - return + if(throw_speed >= EMBED_THROWSPEED_THRESHOLD) + if(istype(A, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = A + if(can_embed(src)) + if(prob(embed_chance)) + var/obj/item/organ/limb/L = pick(H.organs) + L.embedded_objects |= src + add_blood(H)//it embedded itself in you, of course it's bloody! + loc = H + L.take_damage(w_class*embedded_impact_pain_multiplier) + H.visible_message("\the [name] embeds itself in [H]'s [L.getDisplayName()]!","\the [name] embeds itself in your [L.getDisplayName()]!") + return + //Reset regardless of if we hit a human. + throw_speed = initial(throw_speed) //explosions change this. ..() diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index ce19b97d11a..3d9068d8b53 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -138,11 +138,15 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob, params) icon_state = "throwingstar" item_state = "eshield0" force = 2 - throwforce = 20 + throwforce = 0 //This is never used since this has a 100% embed chance. + throw_speed = 4 + embedded_pain_multiplier = 4 w_class = 2 embed_chance = 100 embedded_fall_chance = 0 //Hahaha! +//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. +//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) /obj/item/weapon/storage/box/throwing_stars/New() ..() contents = list() @@ -150,4 +154,8 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob, params) new /obj/item/weapon/throwing_star(src) new /obj/item/weapon/throwing_star(src) new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + + + + diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 61ad8e31b36..d294f970454 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -257,11 +257,11 @@ var/obj/item/organ/limb/L = locate(href_list["embedded_limb"]) if(!I || !L || I.loc != src) //no item, no limb, or item is not in limb (the person atleast) anymore return - var/time_taken = 30*I.w_class + var/time_taken = I.embedded_unsafe_removal_time*I.w_class usr.visible_message("[usr] attempts to remove [I] from their [L.getDisplayName()]!","You attempt to remove [I] from your [L.getDisplayName()], it will take [time_taken/10] seconds.") if(do_after(usr, time_taken, needhand = 1)) L.embedded_objects -= I - L.take_damage(8*I.w_class)//It hurts to rip it out, get surgery you dingus. + L.take_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. I.loc = get_turf(src) usr.put_in_hands(I) usr.emote("scream") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a32591f9d52..f99726adacb 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -613,11 +613,11 @@ for(var/obj/item/organ/limb/L in organs) for(var/obj/item/I in L.embedded_objects) if(prob(I.embedded_pain_chance)) - L.take_damage(I.w_class*2) + L.take_damage(I.w_class*I.embedded_pain_multiplier) src << "\the [I] embedded in your [L.getDisplayName()] hurts!" if(prob(I.embedded_fall_chance)) - L.take_damage(I.w_class*5) + L.take_damage(I.w_class*I.embedded_fall_pain_multiplier) L.embedded_objects -= I I.loc = get_turf(src) visible_message("\the [I] falls out of [name]'s [L.getDisplayName()]!","\the [I] falls out of your [L.getDisplayName()]!") From 4a01237141b3a6f2ca1e23e95ff2443d9b6c7122 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Thu, 26 Feb 2015 17:24:48 +0000 Subject: [PATCH 014/101] Buffs spear pain multiplier from 2 to 3, Makes spears embed when thrown by a human. --- code/game/objects/items/weapons/twohanded.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 67acf259eae..e72ac3aa40a 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -279,9 +279,10 @@ obj/item/weapon/twohanded/ w_class = 4.0 slot_flags = SLOT_BACK force_unwielded = 10 - force_wielded = 18 // Was 13, Buffed - RR + force_wielded = 18 throwforce = 20 - throw_speed = 3 + throw_speed = 4 + embedded_impact_pain_multiplier = 3 flags = NOSHIELD hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") From 5e9e6a0264272b5fe2320284a088a15f95855ec0 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Fri, 27 Feb 2015 17:57:22 +0000 Subject: [PATCH 015/101] Embedded object removal added to revive() changeling revive and fleshmend --- code/game/gamemodes/changeling/powers/fleshmend.dm | 2 ++ code/game/gamemodes/changeling/powers/revive.dm | 1 + code/modules/mob/living/living.dm | 2 ++ code/modules/surgery/organs/organ.dm | 10 +++++++++- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm index d450fd61899..c19fbc6dbbe 100644 --- a/code/game/gamemodes/changeling/powers/fleshmend.dm +++ b/code/game/gamemodes/changeling/powers/fleshmend.dm @@ -13,6 +13,8 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user H.restore_blood() + H.remove_all_embedded_objects() + for(var/i = 0, i<10,i++) user.adjustBruteLoss(-10) user.adjustOxyLoss(-10) diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 35fa9f3463b..0acb082e057 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -23,6 +23,7 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user H.restore_blood() + H.remove_all_embedded_objects() user << "We have regenerated." user.status_flags &= ~(FAKEDEATH) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 9a4f7f5fb39..04b43182a56 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -413,6 +413,8 @@ Sorry Giacom. Please don't be mad :( if(ishuman(src)) var/mob/living/carbon/human/human_mob = src human_mob.restore_blood() + human_mob.remove_all_embedded_objects() + update_fire() regenerate_icons() ..() diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 264f6482ca0..df88239994d 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -170,7 +170,7 @@ return 0 //Returns a display name for the organ -/obj/item/organ/limb/proc/getDisplayName() //Added "Chest" and "Head" just in case, this may not be needed - RR. +/obj/item/organ/limb/proc/getDisplayName() //Added "Chest" and "Head" just in case, this may not be needed switch(name) if("l_leg") return "left leg" if("r_leg") return "right leg" @@ -181,3 +181,11 @@ else return name +//Remove all embedded objects from all limbs on the human mob +/mob/living/carbon/human/proc/remove_all_embedded_objects() + var/turf/T = get_turf(src) + + for(var/obj/item/organ/limb/L in organs) + for(var/obj/item/I in L.embedded_objects) + L.embedded_objects -= I + I.loc = T \ No newline at end of file From 4f44282664729fa76f2f597f4eb206da1516bed6 Mon Sep 17 00:00:00 2001 From: Incoming Date: Sun, 1 Mar 2015 17:15:25 -0500 Subject: [PATCH 016/101] Adds a free pass to assistants for player accounts younger than two weeks. --- code/modules/mob/new_player/new_player.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index b33337556f3..2438513af06 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -251,6 +251,8 @@ return 0 if((job.current_positions >= job.total_positions) && job.total_positions != -1) if(job.title == "Assistant") + if(client.player_age <= 14) //Newbies can always be assistants + return 1 for(var/datum/job/J in SSjob.occupations) if(J && J.current_positions < J.total_positions && J.title != job.title) return 0 From 95ee4a7d435b1ffbd978224a9a836098fc265b3c Mon Sep 17 00:00:00 2001 From: Incoming5643 Date: Mon, 2 Mar 2015 22:47:53 -0500 Subject: [PATCH 017/101] Sanity check --- code/modules/mob/new_player/new_player.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 2438513af06..31d00683044 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -251,7 +251,7 @@ return 0 if((job.current_positions >= job.total_positions) && job.total_positions != -1) if(job.title == "Assistant") - if(client.player_age <= 14) //Newbies can always be assistants + if(isnum(player_age) && client.player_age <= 14) //Newbies can always be assistants return 1 for(var/datum/job/J in SSjob.occupations) if(J && J.current_positions < J.total_positions && J.title != job.title) From d6eb8ec1fe2f6dbac836cc47c60ad18e0370efb4 Mon Sep 17 00:00:00 2001 From: Miauw Date: Tue, 3 Mar 2015 13:26:45 +0100 Subject: [PATCH 018/101] Adds a toggle so ghosts can hear radio chatter more easily. --- code/__DEFINES/preferences.dm | 3 ++- code/game/machinery/telecomms/broadcaster.dm | 4 ++++ code/modules/client/preferences_toggles.dm | 9 +++++++++ html/changelogs/Miauw1.yml | 7 +++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/Miauw1.yml diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index c21cb6c999f..1a859052578 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -16,8 +16,9 @@ #define CHAT_GHOSTWHISPER 8192 #define MIDROUND_ANTAG 16384 #define CHAT_GHOSTPDA 32768 +#define CHAT_GHOSTRADIO 65536 -#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|MEMBER_PUBLIC|CHAT_PULLR|INTENT_STYLE|CHAT_GHOSTWHISPER|MIDROUND_ANTAG|CHAT_GHOSTPDA) +#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|MEMBER_PUBLIC|CHAT_PULLR|INTENT_STYLE|CHAT_GHOSTWHISPER|MIDROUND_ANTAG|CHAT_GHOSTPDA|CHAT_GHOSTRADIO) #define BE_TRAITOR 1 #define BE_OPERATIVE 2 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index add0390729f..085ab861d26 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -261,6 +261,10 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept if (R.client && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. receive -= R + for(var/mob/M in player_list) + if(isobserver(M) && M.client && (M.client.prefs.toggles & CHAT_GHOSTRADIO)) + receive |= M + var/rendered = virt.compose_message(virt, virt.languages, message, freq) //Always call this on the virtualspeaker to advoid issues. for(var/atom/movable/hearer in receive) hearer.Hear(rendered, virt, AM.languages, message, freq) diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 3f41b53cdfd..98445fcb02c 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -26,6 +26,15 @@ prefs.save_preferences() feedback_add_details("admin_verb","TGW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/verb/toggle_ghost_radio() + set name = "Show/Hide GhostRadio" + set category = "Preferences" + set desc = ".Enable or disable hearing radio chatter as a ghost" + prefs.toggles ^= CHAT_GHOSTRADIO + src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTWHISPER) ? "see radio chatter" : "not see radio chatter"]." + prefs.save_preferences() + feedback_add_details("admin_verb","TGR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 + /client/verb/toggle_ghost_pda() set name = "Show/Hide GhostPDA" set category = "Preferences" diff --git a/html/changelogs/Miauw1.yml b/html/changelogs/Miauw1.yml new file mode 100644 index 00000000000..eb63d342d4e --- /dev/null +++ b/html/changelogs/Miauw1.yml @@ -0,0 +1,7 @@ +#ayy lmao +author: Miauw + +delete-after: True + +changes: + - rscadd: "Added a toggle for ghosts that allows them to hear radio chatter without having to hover near intercoms/over people with headsets." From 2d70141cd891b28854c36a746a5220f70a437265 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 3 Mar 2015 20:23:26 +0000 Subject: [PATCH 019/101] Allows admins (or coders if worn icons go the way of inhands) to specify an alternate file to load worn states from. --- code/game/objects/items.dm | 4 + .../mob/living/carbon/human/update_icons.dm | 73 ++++++++++++++++--- 2 files changed, 67 insertions(+), 10 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cf8461e8b75..12a97df7505 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -4,6 +4,10 @@ var/item_state = null var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' var/righthand_file = 'icons/mob/inhands/items_righthand.dmi' + + //Not on /clothing because for some reason any /obj/item can technically be "worn" with enough fuckery. + var/icon/alternate_worn_icon = null//If this is set, update_icons() will find on mob (WORN, NOT INHANDS) states in this file instead, primary use: badminnery/events + var/hitsound = null var/throwhitsound = null var/w_class = 3.0 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f9f227fa930..9139c933661 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -264,7 +264,12 @@ Please contact me on #coderbus IRC. ~Carnie x var/t_color = w_uniform.item_color if(!t_color) t_color = icon_state - var/image/standing = image("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_s", "layer"=-UNIFORM_LAYER) + + var/image/standing + if(U.alternate_worn_icon) + standing = image("icon"=U.alternate_worn_icon, "icon_state"="[t_color]_s", "layer"=-UNIFORM_LAYER) + if(!standing) + standing = image("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_s", "layer"=-UNIFORM_LAYER) overlays_standing[UNIFORM_LAYER] = standing @@ -311,7 +316,13 @@ Please contact me on #coderbus IRC. ~Carnie x var/t_state = gloves.item_state if(!t_state) t_state = gloves.icon_state - var/image/standing = image("icon"='icons/mob/hands.dmi', "icon_state"="[t_state]", "layer"=-GLOVES_LAYER) + + var/image/standing + if(gloves.alternate_worn_icon) + standing = image("icon"=gloves.alternate_worn_icon, "icon_state"="[t_state]", "layer"=-GLOVES_LAYER) + if(!standing) + standing = image("icon"='icons/mob/hands.dmi', "icon_state"="[t_state]", "layer"=-GLOVES_LAYER) + overlays_standing[GLOVES_LAYER] = standing if(gloves.blood_DNA) @@ -334,7 +345,13 @@ Please contact me on #coderbus IRC. ~Carnie x glasses.screen_loc = ui_glasses //...draw the item in the inventory screen client.screen += glasses //Either way, add the item to the HUD - overlays_standing[GLASSES_LAYER] = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]", "layer"=-GLASSES_LAYER) + var/image/standing + if(glasses.alternate_worn_icon) + standing = image("icon"=glasses.alternate_worn_icon, "icon_state"="[glasses.icon_state]","layer"=-GLASSES_LAYER) + if(!standing) + standing = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]", "layer"=-GLASSES_LAYER) + + overlays_standing[GLASSES_LAYER] = standing apply_overlay(GLASSES_LAYER) @@ -348,7 +365,13 @@ Please contact me on #coderbus IRC. ~Carnie x ears.screen_loc = ui_ears //...draw the item in the inventory screen client.screen += ears //Either way, add the item to the HUD - overlays_standing[EARS_LAYER] = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]", "layer"=-EARS_LAYER) + var/image/standing + if(ears.alternate_worn_icon) + standing = image("icon"=ears.alternate_worn_icon, "icon_state"="[ears.icon_state]", "layer"=-EARS_LAYER) + if(!standing) + standing = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]", "layer"=-EARS_LAYER) + + overlays_standing[EARS_LAYER] = standing apply_overlay(EARS_LAYER) @@ -362,7 +385,11 @@ Please contact me on #coderbus IRC. ~Carnie x shoes.screen_loc = ui_shoes //...draw the item in the inventory screen client.screen += shoes //Either way, add the item to the HUD - var/image/standing = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]", "layer"=-SHOES_LAYER) + var/image/standing + if(shoes.alternate_worn_icon) + standing = image("icon"=shoes.alternate_worn_icon, "icon_state"="[shoes.icon_state]","layer"=-SHOES_LAYER) + if(!standing) + standing = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]", "layer"=-SHOES_LAYER) overlays_standing[SHOES_LAYER] = standing if(shoes.blood_DNA) @@ -396,7 +423,11 @@ Please contact me on #coderbus IRC. ~Carnie x head.screen_loc = ui_head //TODO //...draw the item in the inventory screen client.screen += head //Either way, add the item to the HUD - var/image/standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) + var/image/standing + if(head.alternate_worn_icon) + standing = image("icon"=head.alternate_worn_icon, "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) + if(!standing) + standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) standing.color = head.color // For now, this is here solely for kitty ears, but everything should do this eventually standing.alpha = head.alpha @@ -418,7 +449,14 @@ Please contact me on #coderbus IRC. ~Carnie x var/t_state = belt.item_state if(!t_state) t_state = belt.icon_state - overlays_standing[BELT_LAYER] = image("icon"='icons/mob/belt.dmi', "icon_state"="[t_state]", "layer"=-BELT_LAYER) + + var/image/standing + if(belt.alternate_worn_icon) + standing = image("icon"=belt.alternate_worn_icon, "icon_state"="[t_state]", "layer"=-BELT_LAYER) + if(!standing) + standing = image("icon"='icons/mob/belt.dmi', "icon_state"="[t_state]", "layer"=-BELT_LAYER) + + overlays_standing[BELT_LAYER] = standing apply_overlay(BELT_LAYER) @@ -433,7 +471,11 @@ Please contact me on #coderbus IRC. ~Carnie x wear_suit.screen_loc = ui_oclothing //TODO //...draw the item in the inventory screen client.screen += wear_suit //Either way, add the item to the HUD - var/image/standing = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]", "layer"=-SUIT_LAYER) + var/image/standing + if(wear_suit.alternate_worn_icon) + standing = image("icon"=wear_suit.alternate_worn_icon, "icon_state"="[wear_suit.icon_state]", "layer"=-SUIT_LAYER) + if(!standing) + standing = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]", "layer"=-SUIT_LAYER) overlays_standing[SUIT_LAYER] = standing if(istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) @@ -470,7 +512,12 @@ Please contact me on #coderbus IRC. ~Carnie x wear_mask.screen_loc = ui_mask //TODO //...draw the item in the inventory screen client.screen += wear_mask //Either way, add the item to the HUD - var/image/standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) + var/image/standing + if(wear_mask.alternate_worn_icon) + standing = image("icon"=wear_mask.alternate_worn_icon, "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) + if(!standing) + standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) + overlays_standing[FACEMASK_LAYER] = standing if(wear_mask.blood_DNA && !istype(wear_mask, /obj/item/clothing/mask/cigarette)) @@ -488,7 +535,13 @@ Please contact me on #coderbus IRC. ~Carnie x if(client && hud_used && hud_used.hud_shown) client.screen += back - overlays_standing[BACK_LAYER] = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) + var/image/standing + if(back.alternate_worn_icon) + standing = image("icon"=back.alternate_worn_icon, "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) + if(!standing) + standing = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) + + overlays_standing[BACK_LAYER] = standing apply_overlay(BACK_LAYER) From f5e1b851dc2076639cdacb903fb6b76ef2e91419 Mon Sep 17 00:00:00 2001 From: Incoming5643 Date: Tue, 3 Mar 2015 15:50:40 -0500 Subject: [PATCH 020/101] Updating from the git web interface is a bad idea, you shouldn't do it! --- code/modules/mob/new_player/new_player.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 31d00683044..70a8b157f64 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -251,7 +251,7 @@ return 0 if((job.current_positions >= job.total_positions) && job.total_positions != -1) if(job.title == "Assistant") - if(isnum(player_age) && client.player_age <= 14) //Newbies can always be assistants + if(isnum(client.player_age) && client.player_age <= 14) //Newbies can always be assistants return 1 for(var/datum/job/J in SSjob.occupations) if(J && J.current_positions < J.total_positions && J.title != job.title) From c28d8ff7d0680f2aaae757cfd896db5e555a1de5 Mon Sep 17 00:00:00 2001 From: Incoming Date: Tue, 3 Mar 2015 16:39:01 -0500 Subject: [PATCH 021/101] Adds the ability for admins to "take the shot" and end rounds at their discretion. This is behind a two confirmation gate with a 20 second reflection period between them. All this is logged. When mulligan antag is set to kick in, the suggestion for admins to end the round if they feel enough has happened is given. The option can also be found on the check antagonist panel. The check antagonist panel will show what the muligan roundtype is if it exists. If absolutely no one wants/can be the midround antags, the round ends there. The round will end no matter what if the primary antagonist survived over an hour before biting it (unless the shuttle is already past the point of no return, in which case a peaceful ending takes priority) Adds force_ending to VV editing protection, to avoid admins trying to shinanigans it on. --- code/controllers/subsystem/ticker.dm | 3 ++- code/game/gamemodes/game_mode.dm | 11 ++++++++--- code/modules/admin/player_panel.dm | 3 +++ code/modules/admin/topic.dm | 15 +++++++++++++++ code/modules/admin/verbs/modifyvariables.dm | 2 +- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index dac80e068a2..06e7ee4327c 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -9,6 +9,7 @@ var/datum/subsystem/ticker/ticker var/restart_timeout = 250 //delay when restarting server var/current_state = GAME_STATE_STARTUP //state of current round (used by process()) Use the defines GAME_STATE_* ! + var/force_ending = 0 //Round was ended by admin intervention var/hide_mode = 0 var/datum/game_mode/mode = null @@ -91,7 +92,7 @@ var/datum/subsystem/ticker/ticker if(GAME_STATE_PLAYING) mode.process(wait * 0.1) - if(!mode.explosion_in_progress && mode.check_finished()) + if(!mode.explosion_in_progress && mode.check_finished() || force_ending) current_state = GAME_STATE_FINISHED auto_toggle_ooc(1) // Turn it on declare_completion() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 04fa08b5a57..8a27e9f8a92 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -29,6 +29,7 @@ var/pre_setup_before_jobs = 0 var/antag_flag = null //preferences flag such as BE_WIZARD that need to be turned on for players to be antag var/datum/mind/sacrifice_target = null + var/list/datum/game_mode/replacementmode = null var/round_converted = 0 var/reroll_friendly //During mode conversion only these are in the running var/enemy_minimum_age = 7 //How many days must players have been playing before they can play this antagonist @@ -102,7 +103,7 @@ if(!runnable_modes) return 0 - var/list/datum/game_mode/replacementmode = pickweight(runnable_modes) + replacementmode = pickweight(runnable_modes) switch(SSshuttle.emergency.mode) //Rounds on the verge of ending don't get new antags, they just run out if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE) @@ -111,6 +112,9 @@ if(SSshuttle.emergency.timeLeft(1) < initial(SSshuttle.emergencyCallTime)*0.5) return 1 + if(world.time >= 36000) //If it's been over an hour, just end it + return 0 + var/living_crew = 0 for(var/mob/Player in mob_list) @@ -126,8 +130,7 @@ antag_canadates += H if(!antag_canadates) - message_admins("The roundtype has been converted, antagonists may have been created") - return 1 + return 0 antag_canadates = shuffle(antag_canadates) @@ -136,6 +139,8 @@ if(config.protect_assistant_from_antagonist) replacementmode.restricted_jobs += "Assistant" + message_admins("The roundtype will be converted. If you feel that the round should not continue, end the round now.") + spawn(rand(1800,4200)) //somewhere between 3 and 7 minutes from now for(var/mob/living/carbon/human/H in antag_canadates) replacementmode.make_antag_chance(H) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 2e13a806984..10af3669fc4 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -368,6 +368,8 @@ if (ticker && ticker.current_state >= GAME_STATE_PLAYING) var/dat = "Round Status

Round Status

" dat += "Current Game Mode: [ticker.mode.name]
" + if(ticker.mode.replacementmode) + dat += "Replacement Game Mode: [ticker.mode.replacementmode.name]
" dat += "Round Duration: [round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]
" dat += "Emergency shuttle
" if(SSshuttle.emergency.mode < SHUTTLE_CALL) @@ -379,6 +381,7 @@ dat += "Send Back
" else dat += "ETA: [(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]
" + dat += "End Round Now
" dat += "[ticker.delay_end ? "End Round Normally" : "Delay Round End"]
" if(ticker.mode.syndicates.len) dat += "
" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ddb5f5c3868..43aa60f2f6b 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -226,6 +226,21 @@ message_admins("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") href_list["secretsadmin"] = "check_antagonist" + else if(href_list["end_round"]) + if(!check_rights(R_ADMIN)) return + + message_admins("[key_name_admin(usr)] is considering ending the round.") + if(alert(usr, "This will end the round, are you SURE you want to do this?", "Confirmation", "Yes", "No") == "Yes") + spawn(200) //I wish you would step back from that ledge my friend + if(alert(usr, "Final Confirmation: End the round NOW?", "Confirmation", "Yes", "No") == "Yes") + message_admins("[key_name_admin(usr)] has ended the round.") + ticker.force_ending = 1 //Yeah there we go APC destroyed mission accomplished + return + else + message_admins("[key_name_admin(usr)] decided against ending the round.") + else + message_admins("[key_name_admin(usr)] decided against ending the round.") + else if(href_list["simplemake"]) if(!check_rights(R_SPAWN)) return diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 79ce1fb1f6a..f14df6a3fc9 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -5,7 +5,7 @@ var/list/forbidden_varedit_object_types = list( /datum/admin_rank //editing my own rank? it's more likely than you think ) -var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "step_x", "step_y") +var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "step_x", "step_y", "force_ending") var/list/VVicon_edit_lock = list("icon", "icon_state", "overlays", "underlays") var/list/VVckey_edit = list("key", "ckey") From 6de8b0bd0c238bfa72b3364f8c5f94b7bd0dd5c7 Mon Sep 17 00:00:00 2001 From: Incoming Date: Tue, 3 Mar 2015 17:12:46 -0500 Subject: [PATCH 022/101] Enforces :3 on docile slimes, gives newly sentient creatures some direction on not wasting their creators, and fixes spelling errors --- code/modules/mob/living/carbon/slime/life.dm | 1 + code/modules/mob/living/carbon/slime/slime.dm | 3 ++- html/changelogs/Incoming5643-slimechanges.yml | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index 48e1f708a93..324a5d639ee 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -381,6 +381,7 @@ //Mood starts here var/newmood = "" if (rabid || attacked) newmood = "angry" + else if (docile) newmood = ":3" else if (Target) newmood = "mischevous" if (!newmood) diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 50f69d07669..816006d56ce 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -669,7 +669,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 /obj/item/slimepotion2/afterattack(mob/living/M as mob, mob/user as mob) if(!(isslime(M) || isanimal(M) || ismonkey(M) || !M.ckey)) //I'm sorry for this line - user << "[M] is already too inteligent for this to work!" + user << "[M] is already too intelligent for this to work!" return ..() if(M.stat) user << "[M] is dead!" @@ -683,6 +683,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 M.key = C.key M.languages |= HUMAN M << "All at once it makes sense, you know what you are and who you are! Self awareness is yours!" + M << "You are greatful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost." user << "[M] is suddenly attentive and aware. It worked!" qdel(src) else diff --git a/html/changelogs/Incoming5643-slimechanges.yml b/html/changelogs/Incoming5643-slimechanges.yml index f77e7e6fc8c..c67566840b3 100644 --- a/html/changelogs/Incoming5643-slimechanges.yml +++ b/html/changelogs/Incoming5643-slimechanges.yml @@ -3,4 +3,4 @@ author: Incoming5643 delete-after: True changes: - - rscadd: Nanotrasen scientists have recently reported mutations within the pink family line of slimes. Station scientists are encoraged to investigate." \ No newline at end of file + - rscadd: Nanotrasen scientists have recently reported mutations within the pink family line of slimes. Station scientists are encouraged to investigate." \ No newline at end of file From db1b40c5cad86ad7f00cfa36eba7cfffaeb6696b Mon Sep 17 00:00:00 2001 From: Incoming Date: Tue, 3 Mar 2015 17:49:46 -0500 Subject: [PATCH 023/101] The living crew and time checks are now both config options. --- code/controllers/configuration.dm | 6 ++++++ code/game/gamemodes/game_mode.dm | 4 ++-- config/game_options.txt | 10 +++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 2fda7488b44..57c0100cdc5 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -102,6 +102,8 @@ var/continuous_round_wiz = 0 var/continuous_round_malf = 0 var/continuous_round_blob = 0 + var/midround_antag_time_check = 60 // How late (in minutes) you want the midround antag system to stay on, setting this to 0 will disable the system + var/midround_antag_life_check = 0.7 // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist var/shuttle_refuel_delay = 12000 var/show_game_type_odds = 0 //if set this allows players to see the odds of each roundtype on the get revision screen var/mutant_races = 0 //players can choose their mutant race before joining the game @@ -394,6 +396,10 @@ config.continuous_round_malf = 1 if("continuous_round_blob") config.continuous_round_blob = 1 + if("midround_antag_time_check") + config.midround_antag_time_check = text2num(value) + if("midround_antag_life_check") + config.midround_antag_life_check = text2num(value) if("shuttle_refuel_delay") config.shuttle_refuel_delay = text2num(value) if("show_game_type_odds") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 8a27e9f8a92..13b75680933 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -112,7 +112,7 @@ if(SSshuttle.emergency.timeLeft(1) < initial(SSshuttle.emergencyCallTime)*0.5) return 1 - if(world.time >= 36000) //If it's been over an hour, just end it + if(world.time >= (config.midround_antag_time_check * 600)) return 0 var/living_crew = 0 @@ -120,7 +120,7 @@ for(var/mob/Player in mob_list) if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player)) living_crew++ - if(living_crew / joined_player_list.len <= 0.7) //If a lot of the player base died, we start fresh + if(living_crew / joined_player_list.len <= config.midround_antag_life_check) //If a lot of the player base died, we start fresh return 0 var/list/antag_canadates = list() diff --git a/config/game_options.txt b/config/game_options.txt index a67f24fda9d..31ecdee0942 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -225,4 +225,12 @@ ASSISTANT_CAP -1 STARLIGHT ## Uncomment to bring back old grey suit assistants instead of the now default rainbow colored assistants. -#GREY_ASSISTANTS \ No newline at end of file +#GREY_ASSISTANTS + +### Midround Antag (aka Mulligan antag) config options ### + +## A time, in minutes, after which the midround antag system stops attempting to run and continuous rounds end immediately upon completion. +MIDROUND_ANTAG_TIME_CHECK 60 + +## A ratio of living to total crew members, the lower this is, the more people will have to die in order for midround antag to be skipped +MIDROUND_ANTAG_LIFE_CHECK 0.7 \ No newline at end of file From 87ab60d1bb1b4ee6d1d5c245d3a528cc03532490 Mon Sep 17 00:00:00 2001 From: Incoming Date: Wed, 4 Mar 2015 11:20:38 -0500 Subject: [PATCH 024/101] When a round is converted, late join antagonists for that roundtype will be made for the rest of the round. --- code/game/gamemodes/game_mode.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 13b75680933..795beb6fdf2 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -30,7 +30,7 @@ var/antag_flag = null //preferences flag such as BE_WIZARD that need to be turned on for players to be antag var/datum/mind/sacrifice_target = null var/list/datum/game_mode/replacementmode = null - var/round_converted = 0 + var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted var/reroll_friendly //During mode conversion only these are in the running var/enemy_minimum_age = 7 //How many days must players have been playing before they can play this antagonist @@ -90,6 +90,8 @@ ///make_antag_chance() ///Handles late-join antag assignments /datum/game_mode/proc/make_antag_chance(var/mob/living/carbon/human/character) + if(replacementmode && round_converted == 2) + replacementmode.make_antag_chance(character) return ///convert_roundtype() @@ -144,7 +146,7 @@ spawn(rand(1800,4200)) //somewhere between 3 and 7 minutes from now for(var/mob/living/carbon/human/H in antag_canadates) replacementmode.make_antag_chance(H) - + round_converted = 2 message_admins("The roundtype has been converted, antagonists may have been created") return 1 From a7e23d672a5a7e822ab8b63863ec26894f133445 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Thu, 5 Mar 2015 17:12:12 +1100 Subject: [PATCH 025/101] Improves drill's handling of power --- code/game/objects/structures/false_walls.dm | 5 +-- code/game/objects/structures/girders.dm | 7 ++-- code/game/objects/structures/statues.dm | 4 +- code/game/turfs/simulated/walls.dm | 7 ++-- code/game/turfs/simulated/walls_reinforced.dm | 13 +++--- code/modules/mining/mine_items.dm | 14 +------ code/modules/mining/mine_turfs.dm | 41 +++++++------------ 7 files changed, 32 insertions(+), 59 deletions(-) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index a1ff1406751..08123b5fec1 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -124,10 +124,9 @@ if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) var/obj/item/weapon/pickaxe/drill/jackhammer/D = W if(!D.bcell.use(300)) - user << "Your jackhammer doesn't have enough power to break through that wall." - D.update_charge() + user << "Your [D.name] doesn't have enough power to break through the [name]." return - D.update_charge() + D.update_icon() D.playDigSound() dismantle(user) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index ebe1fd7c6e6..23fd1f4b1bc 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -42,9 +42,9 @@ else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) var/obj/item/weapon/pickaxe/drill/jackhammer/D = W if(!D.bcell.use(D.drillcost)) - D.update_charge() + user << "Your [D.name] doesn't have enough power to break through the [name]." return - D.update_charge() + D.update_icon() user << "You smash through the girder!" new /obj/item/stack/sheet/metal(get_turf(src)) D.playDigSound() @@ -283,9 +283,8 @@ else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) var/obj/item/weapon/pickaxe/drill/jackhammer/D = W if(!D.bcell.use(D.drillcost)) - D.update_charge() return - D.update_charge() + D.update_icon() user << "Your jackhammer smashes through the girder!" var/obj/effect/decal/remains/human/R = new (get_turf(src)) transfer_fingerprints_to(R) diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 43a5a3d4639..888af8a09ac 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -57,9 +57,9 @@ else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) var/obj/item/weapon/pickaxe/drill/jackhammer/D = W if(!D.bcell.use(D.drillcost)) - D.update_charge() + user << "Your [D.name] doesn't have enough power to break through the [name]." return - D.update_charge() + D.update_icon() if(!src.loc) return user.visible_message("[user] destroys the [name]!", \ diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index bb0b9d7b701..bd54b2067b9 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -215,16 +215,15 @@ if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) var/obj/item/weapon/pickaxe/drill/jackhammer/D = W if(!D.bcell.use(400)) - D.update_charge() - user << "Your jackhammer doesn't have enough power to break through that wall." + user << "Your [D.name] doesn't have enough power to break through the [name]." return - D.update_charge() + D.update_icon() if( !istype(src, /turf/simulated/wall) || !user || !W || !T ) return 1 if( user.loc == T && user.get_active_hand() == W ) D.playDigSound() dismantle_wall() - visible_message("[user] smashes through the wall with [W]!", "You hear the grinding of metal.") + visible_message("[user] smashes through the [name] with the [W.name]!", "You hear the grinding of metal.") return 1 else if( istype(W, /obj/item/weapon/melee/energy/blade) ) var/obj/item/weapon/melee/energy/blade/EB = W diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index aeb3c507dfa..c66d1061e50 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -34,20 +34,17 @@ return 1 else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) var/obj/item/weapon/pickaxe/drill/jackhammer/D = W - if(!D.powered) + if(!D.bcell.use(800)) + user << "Your [D.name] doesn't have enough power to break through the [name]." return 1 - user << "You begin to smash though the reinforced wall." + user << "You begin to smash though the [name]." if(do_after(user, 50)) if( !istype(src, /turf/simulated/wall/r_wall) || !user || !W || !T ) return 1 if( user.loc == T && user.get_active_hand() == W ) - if(!D.bcell.use(800)) - user << "Your jackhammer doesn't have enough power to break through that wall." - D.update_charge() - return 1 - D.update_charge() + D.update_icon() D.playDigSound() - user << "Your jackhammer smashes though the last of the reinforced plating." + visible_message("[user] smashes through the [name] with the [D.name]!", "You hear the grinding of metal.") dismantle_wall() return 1 else if(istype(W, /obj/item/stack/sheet/metal) && d_state) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 1d746d9068a..fffb61016e5 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -63,7 +63,6 @@ var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg') origin_tech = "materials=1;engineering=1" attack_verb = list("hit", "pierced", "sliced", "attacked") - var/powered = 1 //used to check for drill charge when mining /obj/item/weapon/pickaxe/proc/playDigSound() playsound(src, pick(digsound),50,1) @@ -87,21 +86,12 @@ desc = "An electric mining drill for the especially scrawny." var/drillcost = 125 //80 mineral walls by default var/obj/item/weapon/stock_parts/cell/high/bcell = null - powered = 0 /obj/item/weapon/pickaxe/drill/New() //this one starts with a cell pre-installed. ..() bcell = new(src) - update_charge() return -/obj/item/weapon/pickaxe/drill/proc/update_charge() - if(bcell && bcell.charge >= drillcost) - powered = 1 - else - powered = 0 - update_icon() - /obj/item/weapon/pickaxe/drill/update_icon() if(!bcell) icon_state = "[initial(icon_state)]-nocell" @@ -119,14 +109,14 @@ W.loc = src bcell = W user << "You install a cell in [src]." - update_charge() + update_icon() else if(istype(W, /obj/item/weapon/screwdriver)) if(bcell) bcell.updateicon() bcell.loc = get_turf(src.loc) bcell = null user << "You remove the cell from [src]." - update_charge() + update_icon() return ..() return diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index e7702171258..38afd36308c 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -392,39 +392,28 @@ if (!( istype(T, /turf) )) return - if(!P.powered) - return -/* - if (istype(W, /obj/item/weapon/pickaxe/radius)) - var/turf/T = user.loc - if (!( istype(T, /turf) )) - return -*/ -//Watch your tabbing, microwave. --NEO + if(istype(P, /obj/item/weapon/pickaxe/drill)) + var/obj/item/weapon/pickaxe/drill/D = P + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(!R.cell.use(D.drillcost)) + R << "Your [D.name] doesn't have enough charge." + return + if(!D.bcell.use(D.drillcost)) + user << "Your [D.name] doesn't have enough charge." + return + if(last_act+P.digspeed > world.time)//prevents message spam return last_act = world.time user << "You start picking." - //playsound(user, 'sound/weapons/Genhit.ogg', 20, 1) P.playDigSound() if(do_after(user,P.digspeed)) - if(istype(P, /obj/item/weapon/pickaxe/drill)) - var/obj/item/weapon/pickaxe/drill/D = P - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - if(R && R.cell) - if(!R.cell.use(D.drillcost)) - D.update_charge() - return - else - if(!D.bcell.use(D.drillcost)) - user << "Your drill ran out of power." - D.update_charge() - return - D.update_charge() - user << "You finish cutting into the rock." - gets_drilled(user) + if(istype(src, /turf/simulated/mineral)) //sanity check against turf being deleted during digspeed delay + user << "You finish cutting into the rock." + P.update_icon() + gets_drilled(user) else return attack_hand(user) return From 82bc75c263bc97623b99722a7383ed56d372b33a Mon Sep 17 00:00:00 2001 From: Miauw Date: Thu, 5 Mar 2015 18:38:07 +0100 Subject: [PATCH 026/101] Moves chat toggles into their own variable. --- code/__DEFINES/preferences.dm | 33 ++++++++------- code/game/machinery/telecomms/broadcaster.dm | 6 +-- code/game/objects/items/devices/PDA/PDA.dm | 2 +- code/game/verbs/ooc.dm | 4 +- code/modules/admin/verbs/deadsay.dm | 2 +- code/modules/admin/verbs/pray.dm | 2 +- code/modules/client/preferences.dm | 25 +++++++----- code/modules/client/preferences_toggles.dm | 40 +++++++++---------- code/modules/mob/living/carbon/brain/emote.dm | 2 +- code/modules/mob/living/carbon/emote.dm | 2 +- code/modules/mob/living/carbon/human/emote.dm | 2 +- .../mob/living/carbon/human/whisper.dm | 2 +- code/modules/mob/living/emote.dm | 2 +- code/modules/mob/living/say.dm | 2 +- code/modules/mob/say.dm | 2 +- code/world.dm | 6 +-- 16 files changed, 72 insertions(+), 62 deletions(-) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 1a859052578..d6c41b34888 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -4,22 +4,27 @@ #define SOUND_MIDI 2 #define SOUND_AMBIENCE 4 #define SOUND_LOBBY 8 -#define CHAT_OOC 16 -#define CHAT_DEAD 32 -#define CHAT_GHOSTEARS 64 -#define CHAT_GHOSTSIGHT 128 -#define CHAT_PRAYER 256 -#define CHAT_RADIO 512 -#define MEMBER_PUBLIC 1024 -#define CHAT_PULLR 2048 -#define INTENT_STYLE 4096 -#define CHAT_GHOSTWHISPER 8192 -#define MIDROUND_ANTAG 16384 -#define CHAT_GHOSTPDA 32768 -#define CHAT_GHOSTRADIO 65536 +#define MEMBER_PUBLIC 16 +#define INTENT_STYLE 32 +#define MIDROUND_ANTAG 64 -#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|MEMBER_PUBLIC|CHAT_PULLR|INTENT_STYLE|CHAT_GHOSTWHISPER|MIDROUND_ANTAG|CHAT_GHOSTPDA|CHAT_GHOSTRADIO) +#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG) +//Chat toggles +#define CHAT_OOC 1 +#define CHAT_DEAD 2 +#define CHAT_GHOSTEARS 4 +#define CHAT_GHOSTSIGHT 8 +#define CHAT_PRAYER 16 +#define CHAT_RADIO 32 +#define CHAT_PULLR 64 +#define CHAT_GHOSTWHISPER 128 +#define CHAT_GHOSTPDA 256 +#define CHAT_GHOSTRADIO 512 + +#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO) + +//Antag toggles #define BE_TRAITOR 1 #define BE_OPERATIVE 2 #define BE_CHANGELING 4 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 085ab861d26..692d9c8951b 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -258,11 +258,11 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/list/receive = get_mobs_in_radio_ranges(radios) //this includes all hearers. for(var/mob/R in receive) //Filter receiver list. - if (R.client && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + if (R.client && !(R.client.prefs.chat_toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. receive -= R for(var/mob/M in player_list) - if(isobserver(M) && M.client && (M.client.prefs.toggles & CHAT_GHOSTRADIO)) + if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTRADIO)) receive |= M var/rendered = virt.compose_message(virt, virt.languages, message, freq) //Always call this on the virtualspeaker to advoid issues. @@ -370,7 +370,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* --- Loop through the receivers and categorize them --- */ - if (R.client && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + if (R.client && !(R.client.prefs.chat_toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. continue diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 7179aee66c9..1dc916012ad 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -817,7 +817,7 @@ var/global/list/obj/item/device/pda/PDAs = list() tnote += "→ To [P.owner]:
[t]
" P.tnote += "← From [owner] ([ownjob]):
[t]
" for(var/mob/M in player_list) - if(isobserver(M) && M.client && (M.client.prefs.toggles & CHAT_GHOSTPDA)) + if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA)) M.show_message("PDA Message - [owner] -> [P.owner]: [t]") if (!P.silent) diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 77a5b65105e..790021ee0d5 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -14,7 +14,7 @@ msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) if(!msg) return - if(!(prefs.toggles & CHAT_OOC)) + if(!(prefs.chat_toggles & CHAT_OOC)) src << "You have OOC muted." return @@ -46,7 +46,7 @@ msg = emoji_parse(msg) for(var/client/C in clients) - if(C.prefs.toggles & CHAT_OOC) + if(C.prefs.chat_toggles & CHAT_OOC) if(holder) if(!holder.fakekey || C.holder) if(check_rights_for(src, R_ADMIN)) diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 213e618d82d..19cc6dd5667 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -26,7 +26,7 @@ for (var/mob/M in player_list) if (istype(M, /mob/new_player)) continue - if (M.stat == DEAD || (M.client && M.client.holder && (M.client.prefs.toggles & CHAT_DEAD))) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above + if (M.stat == DEAD || (M.client && M.client.holder && (M.client.prefs.chat_toggles & CHAT_DEAD))) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above M.show_message(rendered, 2) feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 2ab5df2bb8d..85fb049bd4d 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -20,7 +20,7 @@ msg = "\icon[cross] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) (JMP) (TP) (SC): [msg]" for(var/client/C in admins) - if(C.prefs.toggles & CHAT_PRAYER) + if(C.prefs.chat_toggles & CHAT_PRAYER) C << msg usr << "Your prayers have been received by the gods." diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 523bdb74165..f3ca23c51f9 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -36,6 +36,7 @@ datum/preferences var/be_special = 0 //Special role selection var/UI_style = "Midnight" var/toggles = TOGGLES_DEFAULT + var/chat_toggles = TOGGLES_DEFAULT_CHAT var/ghost_form = "ghost" var/allow_midround_antag = 1 @@ -221,11 +222,12 @@ datum/preferences dat += "UI Style: [UI_style]
" dat += "Play admin midis: [(toggles & SOUND_MIDI) ? "Yes" : "No"]
" dat += "Play lobby music: [(toggles & SOUND_LOBBY) ? "Yes" : "No"]
" - dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]
" - dat += "Ghost sight: [(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]
" - dat += "Ghost whispers: [(toggles & CHAT_GHOSTWHISPER) ? "Nearest Creatures" : "All Speech"]
" - dat += "Ghost pda: [(toggles & CHAT_GHOSTPDA) ? "Nearest Creatures" : "All Messages"]
" - dat += "Pull requests: [(toggles & CHAT_PULLR) ? "Yes" : "No"]
" + dat += "Ghost ears: [(chat_toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]
" + dat += "Ghost sight: [(chat_toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]
" + dat += "Ghost whispers: [(chat_toggles & CHAT_GHOSTWHISPER) ? "Nearest Creatures" : "All Speech"]
" + dat += "Ghost radio: [(chat_toggles & CHAT_GHOSTRADIO) ? "Yes" : "No"]
" + dat += "Ghost pda: [(chat_toggles & CHAT_GHOSTPDA) ? "Nearest Creatures" : "All Messages"]
" + dat += "Pull requests: [(chat_toggles & CHAT_PULLR) ? "Yes" : "No"]
" dat += "Midround Antagonist: [(toggles & MIDROUND_ANTAG) ? "Yes" : "No"]
" if(config.allow_Metadata) dat += "OOC Notes: Edit
" @@ -780,19 +782,22 @@ datum/preferences user << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) if("ghost_ears") - toggles ^= CHAT_GHOSTEARS + chat_toggles ^= CHAT_GHOSTEARS if("ghost_sight") - toggles ^= CHAT_GHOSTSIGHT + chat_toggles ^= CHAT_GHOSTSIGHT if("ghost_whispers") - toggles ^= CHAT_GHOSTWHISPER + chat_toggles ^= CHAT_GHOSTWHISPER + + if("ghost_radio") + chat_toggles ^= CHAT_GHOSTRADIO if("ghost_pda") - toggles ^= CHAT_GHOSTPDA + chat_toggles ^= CHAT_GHOSTPDA if("pull_requests") - toggles ^= CHAT_PULLR + chat_toggles ^= CHAT_PULLR if("allow_midround_antag") toggles ^= MIDROUND_ANTAG diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 98445fcb02c..52b9329094d 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -3,8 +3,8 @@ set name = "Show/Hide GhostEars" set category = "Preferences" set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs" - prefs.toggles ^= CHAT_GHOSTEARS - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"]." + prefs.chat_toggles ^= CHAT_GHOSTEARS + src << "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"]." prefs.save_preferences() feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -12,8 +12,8 @@ set name = "Show/Hide GhostSight" set category = "Preferences" set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs" - prefs.toggles ^= CHAT_GHOSTSIGHT - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"]." + prefs.chat_toggles ^= CHAT_GHOSTSIGHT + src << "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"]." prefs.save_preferences() feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -21,8 +21,8 @@ set name = "Show/Hide GhostWhispers" set category = "Preferences" set desc = ".Toggle between hearing all whispers, and only whispers of nearby mobs" - prefs.toggles ^= CHAT_GHOSTWHISPER - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTWHISPER) ? "see all whispers in the world" : "only see whispers from nearby mobs"]." + prefs.chat_toggles ^= CHAT_GHOSTWHISPER + src << "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTWHISPER) ? "see all whispers in the world" : "only see whispers from nearby mobs"]." prefs.save_preferences() feedback_add_details("admin_verb","TGW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -30,8 +30,8 @@ set name = "Show/Hide GhostRadio" set category = "Preferences" set desc = ".Enable or disable hearing radio chatter as a ghost" - prefs.toggles ^= CHAT_GHOSTRADIO - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTWHISPER) ? "see radio chatter" : "not see radio chatter"]." + prefs.chat_toggles ^= CHAT_GHOSTRADIO + src << "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTRADIO) ? "see radio chatter" : "not see radio chatter"]." prefs.save_preferences() feedback_add_details("admin_verb","TGR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 @@ -39,8 +39,8 @@ set name = "Show/Hide GhostPDA" set category = "Preferences" set desc = ".Toggle Between seeing all mob pda messages, and only pda messages of nearby mobs" - prefs.toggles ^= CHAT_GHOSTPDA - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTPDA) ? "see all pda messages in the world" : "only see pda messages from nearby mobs"]." + prefs.chat_toggles ^= CHAT_GHOSTPDA + src << "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTPDA) ? "see all pda messages in the world" : "only see pda messages from nearby mobs"]." prefs.save_preferences() feedback_add_details("admin_verb","TGP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -49,9 +49,9 @@ set category = "Preferences" set desc = "Toggle seeing radiochatter from nearby radios and speakers" if(!holder) return - prefs.toggles ^= CHAT_RADIO + prefs.chat_toggles ^= CHAT_RADIO prefs.save_preferences() - usr << "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from nearby radios or speakers" + usr << "You will [(prefs.chat_toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from nearby radios or speakers" feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggleadminhelpsound() @@ -68,27 +68,27 @@ set name = "Show/Hide Deadchat" set category = "Preferences" set desc ="Toggles seeing deadchat" - prefs.toggles ^= CHAT_DEAD + prefs.chat_toggles ^= CHAT_DEAD prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat." + src << "You will [(prefs.chat_toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat." feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggleprayers() set name = "Show/Hide Prayers" set category = "Preferences" set desc = "Toggles seeing prayers" - prefs.toggles ^= CHAT_PRAYER + prefs.chat_toggles ^= CHAT_PRAYER prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat." + src << "You will [(prefs.chat_toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat." feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/togglePRs() set name = "Show/Hide Pull Request Announcements" set category = "Preferences" set desc = "Toggles receiving a notification when new pull requests are created." - prefs.toggles ^= CHAT_PULLR + prefs.chat_toggles ^= CHAT_PULLR prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_PULLR) ? "now" : "no longer"] see new pull request announcements." + src << "You will [(prefs.chat_toggles & CHAT_PULLR) ? "now" : "no longer"] see new pull request announcements." feedback_add_details("admin_verb","TPullR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/togglemidroundantag() @@ -138,9 +138,9 @@ set name = "Show/Hide OOC" set category = "Preferences" set desc = "Toggles seeing OutOfCharacter chat" - prefs.toggles ^= CHAT_OOC + prefs.chat_toggles ^= CHAT_OOC prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel." + src << "You will [(prefs.chat_toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel." feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm index 6c7b938288f..4a75b2765fe 100644 --- a/code/modules/mob/living/carbon/brain/emote.dm +++ b/code/modules/mob/living/carbon/brain/emote.dm @@ -62,7 +62,7 @@ for(var/mob/M in dead_mob_list) if (!M.client || istype(M, /mob/new_player)) continue //skip monkeys, leavers, and new_players - if(M.stat == DEAD && (M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT)) && !(M in viewers(src,null))) + if(M.stat == DEAD && (M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTSIGHT)) && !(M in viewers(src,null))) M.show_message(message) diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 0c9893c0d39..cdbb56ad240 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -188,7 +188,7 @@ for(var/mob/M in dead_mob_list) if(!M.client || istype(M, /mob/new_player)) continue //skip monkeys, leavers and new players - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + if(M.stat == DEAD && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) M.show_message(message) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 4c16885f216..bc73e507787 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -328,7 +328,7 @@ for(var/mob/M in dead_mob_list) if(!M.client || istype(M, /mob/new_player)) continue //skip monkeys, leavers and new players - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + if(M.stat == DEAD && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) M.show_message(message) diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index b7df925da57..24d98e205e7 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -46,7 +46,7 @@ var/list/listening_dead = list() for(var/mob/M in player_list) - if(M.stat == DEAD && M.client && ((M.client.prefs.toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7))) + if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7))) listening_dead |= M var/list/listening = get_hearers_in_view(1, src) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 891fae0abeb..35817513e08 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -268,7 +268,7 @@ if(!M.client || istype(M, /mob/new_player)) continue //skip monkeys, leavers and new players var/T = get_turf(src) - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(T,null))) + if(M.stat == DEAD && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) && !(M in viewers(T,null))) M.show_message(message) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index e68d1be4cdf..d158b3648c1 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -161,7 +161,7 @@ var/list/department_radio_keys = list( var/list/listening = get_hearers_in_view(message_range, source) var/list/listening_dead = list() for(var/mob/M in player_list) - if(M.stat == DEAD && M.client && ((M.client.prefs.toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7)) && client) // client is so that ghosts don't have to listen to mice + if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7)) && client) // client is so that ghosts don't have to listen to mice listening_dead |= M listening -= listening_dead //so ghosts dont hear stuff twice diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 544522c7934..95ac2edf15f 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -45,7 +45,7 @@ for(var/mob/M in player_list) if(istype(M, /mob/new_player)) continue - if(M.client && M.client.holder && (M.client.prefs.toggles & CHAT_DEAD)) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above + if(M.client && M.client.holder && (M.client.prefs.chat_toggles & CHAT_DEAD)) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above M << rendered //Admins can hear deadchat, if they choose to, no matter if they're blind/deaf or not. else if(M.stat == DEAD) //M.show_message(rendered, 2) //Takes into account blindness and such. //preserved so you can look at it and cry at the stupidity of oldcoders. whoever coded this should be punched into the sun diff --git a/code/world.dm b/code/world.dm index 1b0a3d17072..182130a4ce2 100644 --- a/code/world.dm +++ b/code/world.dm @@ -129,11 +129,11 @@ if(input["key"] != global.comms_key) return "Bad Key" else - #define CHAT_PULLR 2048 +#define CHAT_PULLR 64 //for some reason this has to be here, not sure why. Look in preferences.dm for the "proper" definition. for(var/client/C in clients) - if(C.prefs && (C.prefs.toggles & CHAT_PULLR)) + if(C.prefs && (C.prefs.chat_toggles & CHAT_PULLR)) C << "PR: [input["announce"]]" - #undef CHAT_PULLR +#undef CHAT_PULLR /world/Reboot(var/reason) #ifdef dellogging From b0b4d7f580cef8193d15d30d837c7502c6ab84a8 Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Thu, 5 Mar 2015 19:35:33 -0800 Subject: [PATCH 027/101] IsBanned() now rejects blank ckeys/ips/cids Also removes the admin notice. Its still logged, but this way the admins don't get spammed during world reboot. --- code/modules/admin/IsBanned.dm | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 4abe574216a..a89aea9f725 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -1,6 +1,9 @@ //Blocks an attempt to connect before even creating our client datum thing. world/IsBanned(key,address,computer_id) + if (!key || !address || !computer_id) + log_access("Failed Login (invalid data): [key] [address]-[computer_id]") + return list("reason"="invalid login data", "desc"="Your computer provided invalid or blank information to the server on connection (byond username, IP, and Computer ID.) Provided information for reference: Username:'[key]' IP:'[address]' Computer ID:'[computer_id]' If you continue to get this error, please restart byond or contact byond support.") if(ckey(key) in admin_datums) //It has proven to be a bad idea to make admins completely immune to bans, making them have to wait for someone with daemon access //to add a daemon ban to finally stop them. Admin tempbans and admin permabans are special, high-level ban types, which are there to help @@ -76,18 +79,13 @@ world/IsBanned(key,address,computer_id) world.log << "Ban database connection failure. Key [ckeytext] not checked" diary << "Ban database connection failure. Key [ckeytext] not checked" return - - var/failedcid = 1 - var/failedip = 1 - + var/ipquery = "" var/cidquery = "" if(address) - failedip = 0 ipquery = " OR ip = '[address]' " if(computer_id) - failedcid = 0 cidquery = " OR computerid = '[computer_id]' " var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") @@ -112,9 +110,4 @@ world/IsBanned(key,address,computer_id) var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban was applied by [ackey] on [bantime], [expires]" return list("reason"="[bantype]", "desc"="[desc]") - - if (failedcid) - message_admins("[key] has logged in with a blank computer id in the ban check.") - if (failedip) - message_admins("[key] has logged in with a blank ip in the ban check.") return ..() //default pager ban stuff From d4de07d3363d1f6c914b06a17e30d99f0ad3676d Mon Sep 17 00:00:00 2001 From: phil235 Date: Fri, 6 Mar 2015 12:38:08 +0100 Subject: [PATCH 028/101] Fixes ghostburger and appendixburger icons. --- code/modules/food&drinks/food/snacks_burgers.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/food&drinks/food/snacks_burgers.dm b/code/modules/food&drinks/food/snacks_burgers.dm index 62612c9b47d..83340dc3f14 100644 --- a/code/modules/food&drinks/food/snacks_burgers.dm +++ b/code/modules/food&drinks/food/snacks_burgers.dm @@ -1,11 +1,11 @@ /obj/item/weapon/reagent_containers/food/snacks/burger filling_color = "#CD853F" + icon_state = "hburger" /obj/item/weapon/reagent_containers/food/snacks/burger/plain name = "burger" desc = "The cornerstone of every nutritious breakfast." - icon_state = "hburger" list_reagents = list("vitamin" = 1) bitesize = 3 @@ -14,13 +14,13 @@ var/job = null name = "-burger" desc = "A bloody burger." - icon_state = "hburger" list_reagents = list("vitamin" = 4) /obj/item/weapon/reagent_containers/food/snacks/burger/appendix name = "appendix burger" desc = "Tastes like appendicitis." list_reagents = list("nutriment" = 6, "vitamin" = 6) + icon_state = "appendixburger" /obj/item/weapon/reagent_containers/food/snacks/burger/fish name = "fillet -o- carp sandwich" From 8130d16ddb0418d9fb8350c4f95cb32e5f45a2e9 Mon Sep 17 00:00:00 2001 From: phil235 Date: Fri, 6 Mar 2015 19:00:50 +0100 Subject: [PATCH 029/101] Fixes maintenance drone being targeted by the AI's porta turrets. Fixes occupied mechs not being targeted by AI's porta turrets. Simplifies target searching a bit. Non AI Porta turrets with check_anomalies now also targets living/carbon/slime. --- code/game/machinery/portable_turret.dm | 87 +++++++++++--------------- 1 file changed, 38 insertions(+), 49 deletions(-) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 948e11e1eff..61fb96edcb0 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -51,6 +51,8 @@ var/shot_sound //what sound should play when the turret fires var/eshot_sound //what sound should play when the emagged turret fires + var/faction = "neutral" + var/datum/effect/effect/system/spark_spread/spark_system //the spark system, used for generating... sparks? /obj/machinery/porta_turret/New() @@ -410,62 +412,49 @@ return var/list/targets = list() //list of primary targets - var/list/secondarytargets = list() //targets that are least important + var/turretview = view(7, src) - if(check_anomalies) //if its set to check for xenos/carps, check for non-mob "crittersssss"(And simple_animals) - for(var/mob/living/simple_animal/C in view(7, src)) - if(!C.stat) + if(check_anomalies) //if it's set to check for xenos/simpleanimals + for(var/mob/living/simple_animal/SA in turretview) + if(!SA.stat && (!SA.has_unlimited_silicon_privilege || !(faction in SA.faction)) ) //don't target dead animals or NT maint drones. + targets += SA + + for(var/mob/living/carbon/C in turretview) //loops through all carbon-based lifeforms in view(7) + if(emagged && C.stat != DEAD) //if emagged, every living carbon is a target. + targets += C + continue + + if(C.stat || C.handcuffed || C.lying) //if the perp is handcuffed or lying or dead/dying, no need to bother really + continue + + if(ai) //If it's set to attack all nonsilicons, target them! + targets += C + continue + + if(istype(C, /mob/living/carbon/human)) //if the target is a human, analyze threat level + if(assess_perp(C) >= 4) targets += C - for(var/mob/living/carbon/C in view(7,src)) //loops through all living carbon-based lifeforms in view(12) - if(istype(C, /mob/living/carbon/alien) && check_anomalies) //git those fukken xenos - if(!C.stat) //if it's dead/dying, there's no need to keep shooting at it. - targets += C - - else - if(emagged) //if emagged, HOLY SHIT EVERYONE IS DANGEROUS beep boop beep - targets += C - else - if(C.stat || C.handcuffed) //if the perp is handcuffed or dead/dying, no need to bother really - continue //move onto next potential victim! - - var/dst = get_dist(src, C) //if it's too far away, why bother? - if(dst > 7) - continue - - if(ai) //If it's set to attack all nonsilicons, target them! - if(C.lying) - if(lasercolor) - continue - else - secondarytargets += C - continue - else + else if(check_anomalies) + if(!(faction in C.faction)) + for(var/F in C.faction) //We target carbons without the portaturret's faction and who also have alien or slime faction. + if(F == "alien" || F == "slime") targets += C - continue + break - if(istype(C, /mob/living/carbon/human)) //if the target is a human, analyze threat level - if(assess_perp(C) < 4) - continue //if threat level < 4, keep going - - else if(istype(C, /mob/living/carbon/monkey)) - continue //Don't target monkeys or borgs/AIs you dumb shit - - if(C.lying) //if the perp is lying down, it's still a target but a less-important target - secondarytargets += C - continue - - targets += C //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee + for(var/obj/mecha/M in turretview) + if(M.occupant) + if(ai || emagged) // we target all occupied mechs if we're emagged or set to attack all non silicons. + targets += M if(!tryToShootAt(targets)) - if(!tryToShootAt(secondarytargets)) // if no valid targets, go for secondary targets - spawn() - popDown() // no valid targets, close the cover + spawn() + popDown() // no valid targets, close the cover -/obj/machinery/porta_turret/proc/tryToShootAt(var/list/mob/living/targets) +/obj/machinery/porta_turret/proc/tryToShootAt(var/list/atom/movable/targets) while(targets.len > 0) - var/mob/living/M = pick(targets) + var/atom/movable/M = pick(targets) targets -= M if(target(M)) return 1 @@ -558,10 +547,10 @@ return threatcount -/obj/machinery/porta_turret/proc/target(var/mob/living/target) +/obj/machinery/porta_turret/proc/target(var/atom/movable/target) if(disabled) return - if(target && (target.stat != DEAD) && (!(target.lying) || emagged)) + if(target) spawn() popUp() //pop the turret up if it's not already up. dir = get_dir(src, target) //even if you can't shoot, follow the target @@ -570,7 +559,7 @@ return 1 return -/obj/machinery/porta_turret/proc/shootAt(var/mob/living/target) +/obj/machinery/porta_turret/proc/shootAt(var/atom/movable/target) if(!emagged) //if it hasn't been emagged, it has to obey a cooldown rate if(last_fired || !raised) //prevents rapid-fire shooting, unless it's been emagged return From febd47c6d64f7413dd8a690730cae180c2511381 Mon Sep 17 00:00:00 2001 From: Incoming5643 Date: Fri, 6 Mar 2015 15:20:56 -0500 Subject: [PATCH 030/101] byond inline spell checker fucking when --- code/modules/mob/living/carbon/slime/slime.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 816006d56ce..b0b63fc3e93 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -683,7 +683,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 M.key = C.key M.languages |= HUMAN M << "All at once it makes sense, you know what you are and who you are! Self awareness is yours!" - M << "You are greatful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost." + M << "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost." user << "[M] is suddenly attentive and aware. It worked!" qdel(src) else From e20f36d6399394fe9b1b1c3be19d2e1426f0e907 Mon Sep 17 00:00:00 2001 From: Menshin Date: Sat, 7 Mar 2015 04:03:40 +0100 Subject: [PATCH 031/101] * Fixes runtimes with Summon Guns. * Fixes some summoned guns uncorrectly instanciating pins --- code/game/gamemodes/wizard/rightandwrong.dm | 40 +++++++++------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 27668da7648..446741ea8df 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -62,37 +62,29 @@ if("speargun") new /obj/item/weapon/gun/projectile/automatic/speargun(get_turf(H)) if("cannon") - var/obj/item/weapon/gun/energy/lasercannon/gat - gat.pin = /obj/item/device/firing_pin //no authentication pins for spawned guns. fun allowed. - new gat(get_turf(H)) + var/obj/item/weapon/gun/energy/lasercannon/gat = new(get_turf(H)) + gat.pin = new /obj/item/device/firing_pin //no authentication pins for spawned guns. fun allowed. if("crossbow") - var/obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large/gat - gat.pin = /obj/item/device/firing_pin - new gat(get_turf(H)) + var/obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large/gat = new(get_turf(H)) + gat.pin = new /obj/item/device/firing_pin if("nuclear") - var/obj/item/weapon/gun/energy/gun/nuclear/gat - gat.pin = /obj/item/device/firing_pin - new gat(get_turf(H)) + var/obj/item/weapon/gun/energy/gun/nuclear/gat = new(get_turf(H)) + gat.pin = new /obj/item/device/firing_pin if("sabr") - var/obj/item/weapon/gun/projectile/automatic/gat - gat.pin = /obj/item/device/firing_pin - new gat(get_turf(H)) + var/obj/item/weapon/gun/projectile/automatic/gat = new(get_turf(H)) + gat.pin = new /obj/item/device/firing_pin if("bulldog") - var/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/gat - gat.pin = /obj/item/device/firing_pin - new gat(get_turf(H)) + var/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/gat = new(get_turf(H)) + gat.pin = new /obj/item/device/firing_pin if("c20r") - var/obj/item/weapon/gun/projectile/automatic/c20r/gat - gat.pin = /obj/item/device/firing_pin - new gat(get_turf(H)) + var/obj/item/weapon/gun/projectile/automatic/c20r/gat = new(get_turf(H)) + gat.pin = new /obj/item/device/firing_pin if("saw") - var/obj/item/weapon/gun/projectile/automatic/l6_saw/gat - gat.pin = /obj/item/device/firing_pin - new gat(get_turf(H)) + var/obj/item/weapon/gun/projectile/automatic/l6_saw/gat = new(get_turf(H)) + gat.pin = new /obj/item/device/firing_pin if("car") - var/obj/item/weapon/gun/projectile/automatic/m90/gat - gat.pin = /obj/item/device/firing_pin - new gat(get_turf(H)) + var/obj/item/weapon/gun/projectile/automatic/m90/gat = new(get_turf(H)) + gat.pin = new /obj/item/device/firing_pin else switch (randomizemagic) if("fireball") From 3b24de7509dce441b46525d04e6f0558e2b4ebed Mon Sep 17 00:00:00 2001 From: Mandurrrh Date: Sat, 7 Mar 2015 11:50:39 -0500 Subject: [PATCH 032/101] Fixes lightup floortiles icon state changing with merge. --- .../game/turfs/simulated/floor/light_floor.dm | 2 +- .../changelogs/Mandurrh-colortilesiconfix.yml | 10 ++++++++++ icons/turf/floors.dmi | Bin 362461 -> 362460 bytes 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/Mandurrh-colortilesiconfix.yml diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index f9d8e5a111b..85755fc867d 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -24,7 +24,7 @@ if(on) switch(state) if(0) - icon_state = "light_on_[coloredlights[currentcolor]]" + icon_state = "light_on-[coloredlights[currentcolor]]" SetLuminosity(1) if(1) var/num = pick("1","2","3","4") diff --git a/html/changelogs/Mandurrh-colortilesiconfix.yml b/html/changelogs/Mandurrh-colortilesiconfix.yml new file mode 100644 index 00000000000..94e1fdc0618 --- /dev/null +++ b/html/changelogs/Mandurrh-colortilesiconfix.yml @@ -0,0 +1,10 @@ + +# Your name. +author: Mandurrrh + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + + +changes: + - bugfix: "Light up floor tile icon state was changing with merge so altered the code to fit the updated states" diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 75a11015b5f8a42e7952c452a546cdce7107f0bc..9894e89c626785ec0f7652b09d699d86b8ce7c6f 100644 GIT binary patch delta 84 zcmccHFLtM2Y=R0S_eRy{Y&zoKXZ|*RH2v33>r1a$i~LeVDvbQ%|8jjS{rUNP|I_~a m`^EkNUtibyW7nUb&yRmP n{yx6@KSS}3*uXa%z0NdSu(w;VGXgOa5HkZY%XSNP)+G%93W6qd From 77d553e619599d9a14ebeff837f8dee88798d664 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 7 Mar 2015 19:35:44 +0100 Subject: [PATCH 033/101] Fixes disposal climbing. Aliens, slimes and monkeys can climb into disposal but cannot flush it. Non carbon mobs can no longer climb into disposal by themselves. Stuffing another mob in a disposal unit is now only done via grabbing.(fixes bugs like stuffing someone while being inside the disposal yourself) Large mobs no longer fit inside disposal. Fixes hydrotray growing overlay layer. Fixes slicing broken pipes dropping a straight pipe. Fixes typos. Removing unused var from disposal. --- code/game/objects/items/devices/PDA/PDA.dm | 4 +- code/modules/hydroponics/hydroponics.dm | 13 +++-- code/modules/recycling/disposal.dm | 61 ++++++++------------ html/changelogs/phil235-AlienDisposalFix.yml | 6 ++ 4 files changed, 40 insertions(+), 44 deletions(-) create mode 100644 html/changelogs/phil235-AlienDisposalFix.yml diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 846d42b7b3e..9fae064b2a6 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -809,8 +809,8 @@ var/global/list/obj/item/device/pda/PDAs = list() t = Gibberish(t, signal.data["compression"] + 50) if(useMS && useTC) // only send the message if it's stable - if(useTC != 2) // Does our recepient have a broadcaster on their level? - U << "ERROR: Cannot reach recepient." + if(useTC != 2) // Does our recipient have a broadcaster on their level? + U << "ERROR: Cannot reach recipient." return useMS.send_pda_message("[P.owner]","[owner]","[t]") diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index dc57adaae27..e5d6f4c5d53 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -242,19 +242,22 @@ obj/machinery/hydroponics/update_icon() UpdateDescription() if(planted) + var/image/I if(dead) - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-dead") + I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-dead") else if(harvest) if(myseed.plant_type == 2) // Shrooms don't have a -harvest graphic - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-grow[myseed.growthstages]") + I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-grow[myseed.growthstages]") else - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-harvest") + I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-harvest") else if(age < myseed.maturation) var/t_growthstate = ((age / myseed.maturation) * myseed.growthstages ) // Make sure it won't crap out due to HERPDERP 6 stages only - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-grow[round(t_growthstate)]") + I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-grow[round(t_growthstate)]") lastproduce = age //Cheating by putting this here, it means that it isn't instantly ready to harvest else - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-grow[myseed.growthstages]") // Same + I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-grow[myseed.growthstages]") // Same + I.layer = MOB_LAYER + 0.1 + overlays += I if(waterlevel <= 10) overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowwater3") diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index f70795a8737..3419ad8a2af 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -131,15 +131,13 @@ var/obj/item/weapon/grab/G = I if(istype(G)) // handle grabbed mob if(ismob(G.affecting)) - stuff_mob_in(G.affecting, usr) + stuff_mob_in(G.affecting, user) return if(!I) return user.drop_item() - if(I) - I.loc = src - + I.loc = src user.visible_message("[user.name] places \the [I] into \the [src].", \ "You place \the [I] into \the [src].") @@ -147,12 +145,15 @@ // mouse drop another mob or self // -/obj/machinery/disposal/MouseDrop_T(mob/target, mob/user) - if(istype(target)) +/obj/machinery/disposal/MouseDrop_T(mob/living/target, mob/living/user) + if(istype(target) && user == target) stuff_mob_in(target, user) -/obj/machinery/disposal/proc/stuff_mob_in(mob/target, mob/user) - if (!user.canUseTopic(target) || istype(user, /mob/living/silicon/ai)) +/obj/machinery/disposal/proc/stuff_mob_in(mob/living/target, mob/living/user) + if(!iscarbon(user)) + return + if(target.mob_size > 1) + user << "[target] doesn't fit inside [src]." return src.add_fingerprint(user) if(user == target) @@ -161,7 +162,7 @@ else target.visible_message("[user] starts putting [target] into [src].", \ "[user] starts putting [target] into [src]!") - if(do_mob(usr, target, 20)) + if(do_mob(user, target, 20)) if (target.client) target.client.perspective = EYE_PERSPECTIVE target.client.eye = src @@ -205,13 +206,9 @@ // monkeys can only pull the flush lever /obj/machinery/disposal/attack_paw(mob/user as mob) - if(stat & BROKEN) + if(!user.canUseTopic(src)) return - flush = !flush - update() - return - // ai as human but can't flush /obj/machinery/disposal/attack_ai(mob/user as mob) interact(user, 1) @@ -485,7 +482,6 @@ var/active = 0 // true if the holder is moving, otherwise inactive dir = 0 var/count = 1000 //*** can travel 1000 steps before going inactive (in case of loops) - var/has_fat_guy = 0 // true if contains a fat person var/destinationTag = 0 // changes if contains a delivery container var/tomail = 0 //changes if contains wrapped package var/hasmob = 0 //If it contains a mob @@ -502,7 +498,7 @@ //Check for any living mobs trigger hasmob. //hasmob effects whether the package goes to cargo or its tagged destination. for(var/mob/living/M in D) - if(M && M.stat != 2) + if(M && M.stat != DEAD) hasmob = 1 //Checks 1 contents level deep. This means that players can be sent through disposals... @@ -510,17 +506,13 @@ for(var/obj/O in D) if(O.contents) for(var/mob/living/M in O.contents) - if(M && M.stat != 2) + if(M && M.stat != DEAD) hasmob = 1 // now everything inside the disposal gets put into the holder // note AM since can contain mobs or objs for(var/atom/movable/AM in D) AM.loc = src - if(istype(AM, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = AM - if(H.disabilities & FAT) // is a human and fat? - has_fat_guy = 1 // set flag on holder if(istype(AM, /obj/structure/bigDelivery) && !hasmob) var/obj/structure/bigDelivery/T = AM src.destinationTag = T.sortTag @@ -587,9 +579,6 @@ var/mob/M = AM if(M.client) // if a client mob, update eye to follow this holder M.client.eye = src - - if(other.has_fat_guy) - has_fat_guy = 1 qdel(other) @@ -869,14 +858,15 @@ // called when pipe is cut with welder /obj/structure/disposalpipe/Deconstruct() - var/turf/T = loc - stored.loc = T - transfer_fingerprints_to(stored) - stored.dir = dir - stored.density = 0 - stored.anchored = 1 - stored.update() - ..() + if(stored) + var/turf/T = loc + stored.loc = T + transfer_fingerprints_to(stored) + stored.dir = dir + stored.density = 0 + stored.anchored = 1 + stored.update() + ..() /obj/structure/disposalpipe/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) @@ -1212,13 +1202,10 @@ update() return -// called when welded -// for broken pipe, remove and turn into scrap +// the disposal outlet machine /obj/structure/disposalpipe/broken/Deconstruct() - ..() - -// the disposal outlet machine + qdel(src) /obj/structure/disposaloutlet name = "disposal outlet" diff --git a/html/changelogs/phil235-AlienDisposalFix.yml b/html/changelogs/phil235-AlienDisposalFix.yml new file mode 100644 index 00000000000..4a1a84d210b --- /dev/null +++ b/html/changelogs/phil235-AlienDisposalFix.yml @@ -0,0 +1,6 @@ +author: phil235 +delete-after: True +changes: + - tweak: "Aliens, slimes and monkeys can now climb into disposal but cannot flush it. Cyborgs and very large mobs can no longer climb into it." + - tweak: "Stuffing another mob in a disposal unit is now only done via grabbing." + From 643de0c922473f9ee721be207a024676121294de Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Sat, 7 Mar 2015 18:46:02 +0000 Subject: [PATCH 034/101] Hostile mobs no longer run all their hostile targeting/hunting code if there is nobody (or item, for those that hunt items) near them, they simply move to a simpler loop that decides whether to let the main loop continue. --- code/__DEFINES/combat.dm | 7 ++++ .../living/simple_animal/hostile/hostile.dm | 38 ++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index e9b5c883731..bee34b9d2c9 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -44,12 +44,19 @@ #define GRAB_UPGRADING 4 #define GRAB_KILL 5 + +//Hostile Mob Stances #define HOSTILE_STANCE_IDLE 1 //#define HOSTILE_STANCE_ALERT 2 //Was only used by bears #define HOSTILE_STANCE_ATTACK 3 #define HOSTILE_STANCE_ATTACKING 4 //#define HOSTILE_STANCE_TIRED 5 //Was also only used by bears +//Hostile Mob AI Status +#define AI_ON 1 +#define AI_SLEEP 2 +#define AI_OFF 3 + //Embedded objects #define EMBEDDED_PAIN_CHANCE 15 //Chance for embedded objects to cause pain (damage user) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 3828dbdce6c..7d1b74fe07a 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -30,6 +30,8 @@ var/stat_exclusive = 0 //Mobs with this set to 1 will exclusively attack things defined by stat_attack, stat_attack 2 means they will only attack corpses var/attack_same = 0 //Set us to 1 to allow us to attack our own faction, or 2, to only ever attack our own faction + var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_SLEEP (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever) + /mob/living/simple_animal/hostile/Life() . = ..() @@ -40,6 +42,8 @@ ranged_cooldown-- if(client) return 0 + if(!AICanContinue()) + return 0 if(!stat) switch(stance) if(HOSTILE_STANCE_IDLE) @@ -56,6 +60,9 @@ AttackTarget() DestroySurroundings() + if(AIShouldSleep()) + AIStatus = AI_SLEEP + //////////////HOSTILE MOB TARGETTING AND AGGRESSION//////////// @@ -313,4 +320,33 @@ if(ranged && ranged_cooldown <= 0) target = A OpenFire(A) - ..() \ No newline at end of file + ..() + + + +////// AI Status /////// +/mob/living/simple_animal/hostile/proc/AICanContinue() + switch(AIStatus) + if(AI_ON) + . = 1 + if(AI_SLEEP) + if(AIShouldWake()) + . = 1 + AIStatus = AI_ON //Wake up for more than one Life() cycle. + else + . = 0 + if(AI_OFF) + . = 0 + + +//Returns 1 if the AI should wake up +//Returns 0 if the AI should remain asleep +/mob/living/simple_animal/hostile/proc/AIShouldWake() + . = 0 + if(FindTarget()) + . = 1 + + +//Convenience +/mob/living/simple_animal/hostile/proc/AIShouldSleep() + . = !(AIShouldWake()) \ No newline at end of file From fdc0399a46505901f2970fd37a1ebb8f536e1610 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 7 Mar 2015 20:03:25 +0100 Subject: [PATCH 035/101] Ventcrawlers can now climb into disposal by themselves. --- code/modules/recycling/disposal.dm | 2 +- html/changelogs/phil235-AlienDisposalFix.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 3419ad8a2af..853c5311dda 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -150,7 +150,7 @@ stuff_mob_in(target, user) /obj/machinery/disposal/proc/stuff_mob_in(mob/living/target, mob/living/user) - if(!iscarbon(user)) + if(!iscarbon(user) && !user.ventcrawler) //only carbon and ventcrawlers can climb into disposal by themselves. return if(target.mob_size > 1) user << "[target] doesn't fit inside [src]." diff --git a/html/changelogs/phil235-AlienDisposalFix.yml b/html/changelogs/phil235-AlienDisposalFix.yml index 4a1a84d210b..7f46c7fb2e5 100644 --- a/html/changelogs/phil235-AlienDisposalFix.yml +++ b/html/changelogs/phil235-AlienDisposalFix.yml @@ -1,6 +1,6 @@ author: phil235 delete-after: True changes: - - tweak: "Aliens, slimes and monkeys can now climb into disposal but cannot flush it. Cyborgs and very large mobs can no longer climb into it." + - tweak: "Aliens, slimes, monkeys and ventcrawler mobs can now climb into disposal but cannot flush it. Cyborgs and very large mobs can no longer climb into it." - tweak: "Stuffing another mob in a disposal unit is now only done via grabbing." From 588f1adb612fe96f72feb3604cfe7d048b3c288b Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 7 Mar 2015 21:06:33 +0100 Subject: [PATCH 036/101] Make Airlocks with safety on no longer close on dense objects. --- code/game/machinery/doors/airlock.dm | 10 +++++----- html/changelogs/phil235-AirlockDensityObstacleFix.yml | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 html/changelogs/phil235-AirlockDensityObstacleFix.yml diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ade7ad34aa9..aa7e40ee737 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1028,11 +1028,11 @@ About the new airlock wires panel: if( !hasPower() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS) ) return if(safe) - if(locate(/mob/living) in get_turf(src)) - // playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) //THE BUZZING IT NEVER STOPS -Pete - spawn (60) - autoclose() - return + for(var/atom/movable/M in get_turf(src)) + if(M.density && M != src) //something is blocking the door + spawn (60) + autoclose() + return if(forced < 2) if(emagged) diff --git a/html/changelogs/phil235-AirlockDensityObstacleFix.yml b/html/changelogs/phil235-AirlockDensityObstacleFix.yml new file mode 100644 index 00000000000..70d257ee2c3 --- /dev/null +++ b/html/changelogs/phil235-AirlockDensityObstacleFix.yml @@ -0,0 +1,4 @@ +author: phil235 +delete-after: True +changes: + - rscadd: "Airlocks with their safety on no longer closes on dense objects (like mechs or tables)." \ No newline at end of file From 00fdd0ededd3a2c37306942621264c8f808d8c1c Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 7 Mar 2015 22:22:06 +0100 Subject: [PATCH 037/101] Monkeys and xeno can flush disposal units. --- code/modules/recycling/disposal.dm | 6 ++++-- html/changelogs/phil235-AlienDisposalFix.yml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 853c5311dda..ef4b2049d97 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -204,10 +204,12 @@ return -// monkeys can only pull the flush lever +// monkeys and xenos can only pull the flush lever /obj/machinery/disposal/attack_paw(mob/user as mob) - if(!user.canUseTopic(src)) + if(stat & BROKEN) return + flush = !flush + update() // ai as human but can't flush /obj/machinery/disposal/attack_ai(mob/user as mob) diff --git a/html/changelogs/phil235-AlienDisposalFix.yml b/html/changelogs/phil235-AlienDisposalFix.yml index 7f46c7fb2e5..463b8b026cc 100644 --- a/html/changelogs/phil235-AlienDisposalFix.yml +++ b/html/changelogs/phil235-AlienDisposalFix.yml @@ -1,6 +1,6 @@ author: phil235 delete-after: True changes: - - tweak: "Aliens, slimes, monkeys and ventcrawler mobs can now climb into disposal but cannot flush it. Cyborgs and very large mobs can no longer climb into it." + - tweak: "Aliens, slimes, monkeys and ventcrawler mobs can now climb into disposal. Cyborgs and very large mobs can no longer climb into it." - tweak: "Stuffing another mob in a disposal unit is now only done via grabbing." From 400d12e4781cb143809f6571ec5e2a2d0cc7e44a Mon Sep 17 00:00:00 2001 From: Mandurrrh Date: Sat, 7 Mar 2015 17:24:17 -0500 Subject: [PATCH 038/101] removes changelog because I goofed its a bug fix --- html/changelogs/Mandurrh-colortilesiconfix.yml | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 html/changelogs/Mandurrh-colortilesiconfix.yml diff --git a/html/changelogs/Mandurrh-colortilesiconfix.yml b/html/changelogs/Mandurrh-colortilesiconfix.yml deleted file mode 100644 index 94e1fdc0618..00000000000 --- a/html/changelogs/Mandurrh-colortilesiconfix.yml +++ /dev/null @@ -1,10 +0,0 @@ - -# Your name. -author: Mandurrrh - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - - -changes: - - bugfix: "Light up floor tile icon state was changing with merge so altered the code to fit the updated states" From 1d9106e6f07b3789bcc8299c4e3a3c33f3540169 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 7 Mar 2015 23:42:44 +0100 Subject: [PATCH 039/101] Changing Coffee jittering to be an overdose effect. --- .../Consumable-Reagents/Drink-Reagents/Drinks.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Drink-Reagents/Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Drink-Reagents/Drinks.dm index d7ae0aa1ab9..3e5ddf8d0dc 100644 --- a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Drink-Reagents/Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Drink-Reagents/Drinks.dm @@ -166,6 +166,11 @@ datum/reagent/consumable/coffee description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant." color = "#482000" // rgb: 72, 32, 0 nutriment_factor = 0 + overdose_threshold = 80 + +datum/reagent/consumable/coffee/overdose_process(var/mob/living/M as mob) + M.Jitter(5) + ..() datum/reagent/consumable/coffee/on_mob_life(var/mob/living/M as mob) M.dizziness = max(0,M.dizziness-5) @@ -173,11 +178,9 @@ datum/reagent/consumable/coffee/on_mob_life(var/mob/living/M as mob) M.sleeping = max(0,M.sleeping - 2) if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.Jitter(5) if(holder.has_reagent("frostoil")) holder.remove_reagent("frostoil", 5) ..() - return datum/reagent/consumable/tea name = "Tea" From b2d5c9c3c2675558784e760b1fdf2191b299dc02 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Sat, 28 Feb 2015 13:48:52 -0500 Subject: [PATCH 040/101] Allows paper burning --- code/modules/paperwork/paper.dm | 45 +++++++++++++++++++++++++ html/changelogs/Xhuis-PaperBurning.yml | 5 +++ icons/obj/bureaucracy.dmi | Bin 11102 -> 12314 bytes 3 files changed, 50 insertions(+) create mode 100644 html/changelogs/Xhuis-PaperBurning.yml diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e6ed40a2164..7cfccca5032 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -26,6 +26,7 @@ var/list/stamped var/rigged = 0 var/spam_flag = 0 + var/burning = 0 //Whether or not the paper is on fire /obj/item/weapon/paper/New() @@ -88,6 +89,15 @@ spam_flag = 0 +/obj/item/weapon/paper/attack_hand() + var/mob/living/carbon/M = usr + if(burning) + M << "Picking up a burning paper seems awfully stupid." + return //Doesn't make any sense to pick up a burning paper + else //Probably isn't necessary but it's safer + ..() + + /obj/item/weapon/paper/attack_ai(mob/living/silicon/ai/user) var/dist if(istype(user) && user.current) //is AI @@ -268,6 +278,9 @@ /obj/item/weapon/paper/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params) ..() + if(burning) + return + if(is_blind(user)) return @@ -298,8 +311,40 @@ user << "You stamp the paper with your rubber stamp." + if(is_hot(P)) + if(user.disabilities & CLUMSY && prob(10)) + user.visible_message("[user] accidentally ignites themselves!", \ + "You miss the paper and accidentally light yourself on fire!") + user.unEquip(P) + user.adjust_fire_stacks(1) + user.IgniteMob() + return + + if(!(in_range(user, src))) //to prevent issues as a result of telepathically lighting a paper + return + + user.unEquip(src) + user.visible_message("[user] lights [src] ablaze with [P]!", "You light [src] on fire!") + burn(showmsg = 0) + + + add_fingerprint(user) +/obj/item/weapon/paper/fire_act() + burn(showmsg = 1) + +/obj/item/weapon/paper/proc/burn(var/burntime, var/showmsg = 1) + burntime = 70 //7 seconds, can be changed + if(showmsg) + src.visible_message("[src] catches on fire!") + burning = 1 + icon_state = "paper_onfire" + info = "[stars(info)]" + sleep(burntime) + src.visible_message("[src] burns away, leaving behind a pile of ashes.") + new /obj/effect/decal/cleanable/ash(src.loc) + qdel(src) /* * Premade paper diff --git a/html/changelogs/Xhuis-PaperBurning.yml b/html/changelogs/Xhuis-PaperBurning.yml new file mode 100644 index 00000000000..ff22ce980b4 --- /dev/null +++ b/html/changelogs/Xhuis-PaperBurning.yml @@ -0,0 +1,5 @@ +author: Xhuis +delete-after: true + +changes: + - rscadd: "You can now burn papers using lighters, welders, or matches. Useful for secret messages." \ No newline at end of file diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 9c293950b7e4ad345525ebd43b695a2812a1e97c..5ad942985510350a814260948d5d0e6a06e4bedf 100644 GIT binary patch literal 12314 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 literal 11102 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 From 7ac05bc3fd70f1237852bc6e67f209cd82e16a20 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Sat, 7 Mar 2015 21:13:18 -0500 Subject: [PATCH 041/101] Fixes ogresight + removes burntime var --- code/modules/paperwork/paper.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 7cfccca5032..d6bd3c2c88d 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -334,14 +334,13 @@ /obj/item/weapon/paper/fire_act() burn(showmsg = 1) -/obj/item/weapon/paper/proc/burn(var/burntime, var/showmsg = 1) - burntime = 70 //7 seconds, can be changed +/obj/item/weapon/paper/proc/burn(var/burntime, var/showmsg) if(showmsg) src.visible_message("[src] catches on fire!") burning = 1 icon_state = "paper_onfire" info = "[stars(info)]" - sleep(burntime) + sleep(70) //7 seconds src.visible_message("[src] burns away, leaving behind a pile of ashes.") new /obj/effect/decal/cleanable/ash(src.loc) qdel(src) @@ -399,4 +398,4 @@ /obj/item/weapon/paper/crumpled/bloody - icon_state = "scrap_bloodied" \ No newline at end of file + icon_state = "scrap_bloodied" From 71e2f745d47c48bd53e29f8445464f1c73f409b2 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Sat, 7 Mar 2015 21:22:08 -0500 Subject: [PATCH 042/101] Update paper.dm --- code/modules/paperwork/paper.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index d6bd3c2c88d..8ad852bad73 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -325,14 +325,14 @@ user.unEquip(src) user.visible_message("[user] lights [src] ablaze with [P]!", "You light [src] on fire!") - burn(showmsg = 0) + burn(showmsg = 0, burntime = 100) add_fingerprint(user) /obj/item/weapon/paper/fire_act() - burn(showmsg = 1) + burn(showmsg = 1, burntime = 50) /obj/item/weapon/paper/proc/burn(var/burntime, var/showmsg) if(showmsg) @@ -340,7 +340,7 @@ burning = 1 icon_state = "paper_onfire" info = "[stars(info)]" - sleep(70) //7 seconds + sleep(burntime) //7 seconds src.visible_message("[src] burns away, leaving behind a pile of ashes.") new /obj/effect/decal/cleanable/ash(src.loc) qdel(src) From 9eddc94ccd4bf885ea998be2e5554aefef30524c Mon Sep 17 00:00:00 2001 From: Xhuis Date: Sat, 7 Mar 2015 21:23:01 -0500 Subject: [PATCH 043/101] fixes args --- code/modules/paperwork/paper.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 8ad852bad73..5d4d98b84a8 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -325,16 +325,16 @@ user.unEquip(src) user.visible_message("[user] lights [src] ablaze with [P]!", "You light [src] on fire!") - burn(showmsg = 0, burntime = 100) + burn(0, 100) add_fingerprint(user) /obj/item/weapon/paper/fire_act() - burn(showmsg = 1, burntime = 50) + burn(1, 50) -/obj/item/weapon/paper/proc/burn(var/burntime, var/showmsg) +/obj/item/weapon/paper/proc/burn(var/showmsg, var/burntime) if(showmsg) src.visible_message("[src] catches on fire!") burning = 1 From d295a401a1cb148c0017259642fc8bcc5c82c13b Mon Sep 17 00:00:00 2001 From: Ahammer18 Date: Sat, 7 Mar 2015 22:23:01 -0600 Subject: [PATCH 045/101] A bit of a test I did, added slimecake. --- code/modules/food&drinks/food/snacks_cake.dm | 13 ++++++ .../recipes/tablecraft/recipes_cake.dm | 8 ++++ icons/obj/food.dmi | Bin 96731 -> 97624 bytes tgstation.dme | 43 ++++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/code/modules/food&drinks/food/snacks_cake.dm b/code/modules/food&drinks/food/snacks_cake.dm index c51750173dc..b2c65630b10 100644 --- a/code/modules/food&drinks/food/snacks_cake.dm +++ b/code/modules/food&drinks/food/snacks_cake.dm @@ -161,3 +161,16 @@ name = "cake slice" icon_state = "plaincake_slice" filling_color = "#FFFFFF" + +/obj/item/weapon/reagent_containers/food/snacks/store/cake/slimecake + name = "Slime cake" + desc = "A cake made of slimes. Probably not electrified." + icon_state = "slimecake" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/slimecake + slice_num = 5 + list_reagents = list("nutriment" = 1, "vitamin" = 3) + +/obj/item/weapon/reagent_containers/food/snacks/cakeslice/slimecake + name = "Slime cake slice" + icon_state = "slimecake_slice" + filling_color = "#FA8072" diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm index e866629edca..cab10ba4b66 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm @@ -74,3 +74,11 @@ /obj/item/weapon/reagent_containers/food/snacks/store/cake/plain = 1 ) result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/brain + +/datum/table_recipe/slimecake + name = "Slime cake" + reqs = list( + /obj/item/weapon/obj/item/slime_extract = 1, + /obj/item/weapon/reagent_containers/food/snacks/store/cake/plain = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/slimecake \ No newline at end of file diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 9b05ea1d2cef02a26be61bf76125696cdce59a78..a3bc7cb5293c054ab889e63afe4c5dd462edaee4 100644 GIT binary patch delta 6616 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 delta 5716 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 Date: Sat, 7 Mar 2015 22:34:56 -0600 Subject: [PATCH 046/101] Updated --- code/modules/food&drinks/food/snacks_cake.dm | 2 +- code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/food&drinks/food/snacks_cake.dm b/code/modules/food&drinks/food/snacks_cake.dm index b2c65630b10..c171169a2f5 100644 --- a/code/modules/food&drinks/food/snacks_cake.dm +++ b/code/modules/food&drinks/food/snacks_cake.dm @@ -167,7 +167,7 @@ desc = "A cake made of slimes. Probably not electrified." icon_state = "slimecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/slimecake - slice_num = 5 + slices_num = 5 list_reagents = list("nutriment" = 1, "vitamin" = 3) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/slimecake diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm index cab10ba4b66..e9fbbdacc7a 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm @@ -78,7 +78,7 @@ /datum/table_recipe/slimecake name = "Slime cake" reqs = list( - /obj/item/weapon/obj/item/slime_extract = 1, + /obj/item/slime_extract = 1, /obj/item/weapon/reagent_containers/food/snacks/store/cake/plain = 1 ) result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/slimecake \ No newline at end of file From 12a9607b807ff1d260c896939f69b9fa3e430a13 Mon Sep 17 00:00:00 2001 From: Ahammer18 Date: Sat, 7 Mar 2015 22:42:43 -0600 Subject: [PATCH 047/101] Updated --- config/admins.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/admins.txt b/config/admins.txt index e263284f00a..aff7eb7fb37 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -78,4 +78,5 @@ xerux = Game Master dannno = Game Master allura = Game Master lo6a4evskiy = Game Master -vekter = Game Master \ No newline at end of file +vekter = Game Master +Ahammer18 = Game Master \ No newline at end of file From 425c2c438f5ccff10e259d72c1fba4fc090f5b90 Mon Sep 17 00:00:00 2001 From: Ahammer18 Date: Sat, 7 Mar 2015 22:56:13 -0600 Subject: [PATCH 048/101] Unticked --- tgstation.dme | 43 ------------------------------------------- 1 file changed, 43 deletions(-) diff --git a/tgstation.dme b/tgstation.dme index 70853467dfc..a74a3ce7694 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6,49 +6,6 @@ // BEGIN_FILE_DIR #define FILE_DIR . -#define FILE_DIR "html" -#define FILE_DIR "icons" -#define FILE_DIR "icons/ass" -#define FILE_DIR "icons/effects" -#define FILE_DIR "icons/mecha" -#define FILE_DIR "icons/misc" -#define FILE_DIR "icons/mob" -#define FILE_DIR "icons/mob/inhands" -#define FILE_DIR "icons/obj" -#define FILE_DIR "icons/obj/assemblies" -#define FILE_DIR "icons/obj/atmospherics" -#define FILE_DIR "icons/obj/clothing" -#define FILE_DIR "icons/obj/doors" -#define FILE_DIR "icons/obj/flora" -#define FILE_DIR "icons/obj/guns" -#define FILE_DIR "icons/obj/hydroponics" -#define FILE_DIR "icons/obj/machines" -#define FILE_DIR "icons/obj/pipes" -#define FILE_DIR "icons/obj/power_cond" -#define FILE_DIR "icons/pda_icons" -#define FILE_DIR "icons/spideros_icons" -#define FILE_DIR "icons/stamp_icons" -#define FILE_DIR "icons/Testing" -#define FILE_DIR "icons/turf" -#define FILE_DIR "icons/vending_icons" -#define FILE_DIR "nano" -#define FILE_DIR "nano/images" -#define FILE_DIR "sound" -#define FILE_DIR "sound/AI" -#define FILE_DIR "sound/ambience" -#define FILE_DIR "sound/effects" -#define FILE_DIR "sound/hallucinations" -#define FILE_DIR "sound/items" -#define FILE_DIR "sound/machines" -#define FILE_DIR "sound/mecha" -#define FILE_DIR "sound/misc" -#define FILE_DIR "sound/piano" -#define FILE_DIR "sound/spookoween" -#define FILE_DIR "sound/violin" -#define FILE_DIR "sound/voice" -#define FILE_DIR "sound/voice/complionator" -#define FILE_DIR "sound/vox_fem" -#define FILE_DIR "sound/weapons" // END_FILE_DIR // BEGIN_PREFERENCES From 823faea2bf2f3213d193fb2adfc6030765477bb1 Mon Sep 17 00:00:00 2001 From: Ahammer18 Date: Sun, 8 Mar 2015 00:06:56 -0600 Subject: [PATCH 049/101] Added a changelog (you're welcome Jordie) --- html/changelogs/Ahammer18-PR-8215.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/Ahammer18-PR-8215.yml diff --git a/html/changelogs/Ahammer18-PR-8215.yml b/html/changelogs/Ahammer18-PR-8215.yml new file mode 100644 index 00000000000..48c1a156024 --- /dev/null +++ b/html/changelogs/Ahammer18-PR-8215.yml @@ -0,0 +1,5 @@ +author: Ahammer18 +delete-after: true + +changes: + - rscadd: "Adds the braincake and braincake slice." From 9384d44ee5a125d72465f034a5e34bff2fd56f7d Mon Sep 17 00:00:00 2001 From: Incoming Date: Sun, 8 Mar 2015 04:24:04 -0400 Subject: [PATCH 050/101] Adds a magic mirror to the wizards shuttle. The magic mirror has greatly expanded functionality compared to the normal one, and can additionally change a wizards name, gender, race, hair color and eye color. Additionally this fixes up some rogue simulated airless tiles on the wizards shuttle (these tiles were why the creature would always end up dead) --- _maps/map_files/generic/z2.dmm | 33 +++++---- code/game/objects/structures/mirror.dm | 93 +++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 18 deletions(-) diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index a209cde1838..7453230b960 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -354,13 +354,21 @@ "gP" = (/obj/structure/optable,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "gQ" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/cautery,/obj/item/weapon/surgicaldrill,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "gR" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/surgical_drapes,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) +"gS" = (/obj/item/weapon/shard{color = "#008000"; icon_state = "small"},/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/unsimulated/floor/plating,/area/wizard_station) "gT" = (/obj/machinery/door/airlock/shuttle,/obj/docking_port/mobile{dir = 8; dwidth = 2; height = 12; id = "ferry"; name = "ferry shuttle"; travelDir = 180; width = 5},/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 12; id = "ferry_away"; name = "unknown"; turf_type = /turf/unsimulated/floor; width = 5},/turf/simulated/shuttle/floor,/area/space) "gU" = (/obj/machinery/door/airlock/external{name = "Ferry Airlock"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/ferry) "gV" = (/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/ferry) "gW" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 4},/area/centcom/ferry) "gX" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/unsimulated/wall,/area/centcom/evac) +"gY" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/unsimulated/floor/plating,/area/wizard_station) +"gZ" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/turf/unsimulated/floor/plating,/area/wizard_station) "ha" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 5},/area/centcom/ferry) +"hb" = (/obj/structure/table/wood,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/obj/structure/mirror/magic{pixel_y = 28},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "hc" = (/obj/structure/flora/bush,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership) +"hd" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/unsimulated/floor/plating,/area/wizard_station) +"he" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/unsimulated/floor/plating,/area/wizard_station) +"hf" = (/obj/item/weapon/shard{color = "#008000"; icon_state = "medium"},/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/unsimulated/floor/plating,/area/wizard_station) +"hg" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor/plating,/area/wizard_station) "hi" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/space) "hj" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/ferry) "hk" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/evac) @@ -445,7 +453,6 @@ "iX" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/evac) "iY" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) "iZ" = (/obj/structure/filingcabinet/filingcabinet,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) -"ja" = (/obj/item/weapon/shard{color = "#008000"; icon_state = "small"},/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating/airless,/area/wizard_station) "jb" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 8; icon_state = "fakewindows2"},/area/wizard_station) "jc" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 4; icon_state = "fakewindows"},/area/wizard_station) "jd" = (/turf/unsimulated/wall/normal{tag = "icon-uranium2"; icon_state = "uranium2"},/area/wizard_station) @@ -527,7 +534,6 @@ "kQ" = (/turf/space,/area/tdome/tdomeobserve) "kR" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{tag = "icon-cultdamage6"; icon_state = "cultdamage6"},/area/wizard_station) "kS" = (/obj/effect/decal/cleanable/blood/splatter,/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station) -"kT" = (/obj/structure/mirror{pixel_x = 28},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "kU" = (/obj/machinery/suit_storage_unit/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "kV" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "kW" = (/turf/unsimulated/wall/fakeglass,/area/syndicate_mothership) @@ -557,10 +563,8 @@ "lz" = (/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve) "lA" = (/obj/structure/stool/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve) "lB" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space/transit,/area/wizard_station) -"lC" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/simulated/floor/plating/airless,/area/wizard_station) "lD" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/unsimulated/floor{icon_state = "floor"},/area/wizard_station) "lE" = (/turf/unsimulated/floor{icon_state = "floor"},/area/wizard_station) -"lF" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plating/airless,/area/wizard_station) "lG" = (/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station) "lH" = (/obj/effect/forcefield,/turf/unsimulated/floor{tag = "icon-cultdamage7"; icon_state = "cultdamage7"},/area/wizard_station) "lI" = (/obj/effect/forcefield,/turf/unsimulated/floor{tag = "icon-cultdamage5"; icon_state = "cultdamage5"},/area/wizard_station) @@ -613,7 +617,6 @@ "mF" = (/obj/structure/stool/bed/chair/wood/wings,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "mG" = (/obj/structure/table/wood,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "mH" = (/obj/structure/table/wood,/obj/item/weapon/retractor,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) -"mI" = (/obj/structure/table/wood,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "mJ" = (/obj/structure/table/wood,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "mK" = (/obj/structure/rack,/obj/item/clothing/head/helmet/space/hardsuit/wizard,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "mL" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station) @@ -655,10 +658,8 @@ "nx" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "ny" = (/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "nz" = (/obj/effect/decal/cleanable/blood/splatter,/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) -"nA" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plating/airless,/area/wizard_station) "nB" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "floor"},/area/wizard_station) "nC" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/unsimulated/floor{icon_state = "floor"},/area/wizard_station) -"nD" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/floor/plating/airless,/area/wizard_station) "nE" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space/transit,/area/wizard_station) "nF" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "nG" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) @@ -668,7 +669,6 @@ "nK" = (/obj/machinery/flasher{id = "tdomeflash"; name = "Thunderdome Flash"},/turf/simulated/floor/bluegrid,/area/tdome/arena) "nL" = (/obj/machinery/camera{pixel_x = 12; pixel_y = -10; network = list("thunder"); c_tag = "Green Team"},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) "nM" = (/turf/unsimulated/wall/fakeglass{color = "#008000"},/area/wizard_station) -"nN" = (/obj/item/weapon/shard{color = "#008000"; icon_state = "medium"},/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/wizard_station) "nO" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{tag = "icon-cultdamage5"; icon_state = "cultdamage5"},/area/wizard_station) "nP" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "nQ" = (/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/wizard_station) @@ -738,7 +738,6 @@ "ph" = (/turf/unsimulated/wall/fakedoor{name = "Squad 2 Pod"},/area/wizard_station) "pi" = (/turf/unsimulated/wall/normal{tag = "icon-uranium13"; icon_state = "uranium13"},/area/wizard_station) "pj" = (/turf/simulated/shuttle/wall,/area/wizard_station) -"pk" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/wizard_station) "pl" = (/obj/structure/table/wood,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "pm" = (/obj/structure/table/wood,/obj/item/weapon/gun/magic/wand{desc = "Used in emergency's to reignite magma engines. This one appears spent."; name = "wand of emergency engine ignition"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "pn" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/wizard_station) @@ -951,31 +950,31 @@ ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhMhNhOhOhOhOhOhNhPgIgIgIgIhcgIhygJhygJgIgKgIgKgzabababababababababababababababababababababababababababababababfhhUhUhUhUfDhUfDhUhUhUhUhUhUisfhhZhZiaibicidiehZhZekgigigigjfxfyfzdGhJhJhJhJdGfqfqfqifdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNigihiiijikililhNimgIgIhygzgziniogzgzhyipiqhygzabababababababababababababababababababababababababababababababfhiJhUhUiKiKiKiKfRhUhUhUhUhUiLfhitiuiviwixiyiviuiuekgiiziAiBekababdGiCiCiDiDdGfrfqfqhLezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNiEihihiFihihihhNimgIiGgzgziHiIiIiHgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababfhiMhUfTiKiNiOiKhUhUhUhUhUhUiPfhiuiUiViwixiyiViWiuekgiiXiYiZekababebfeedededededededfeeeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajajbjcjdaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNjeihihihjfihjghNimhciGgzjhjijijijijjjkjljmjnjojpgzabababababababababababababababababababababababababababababfhiQhUhUiKiKiKiKfRhUhUhUhUhUiRfhjriujriwixiyjriujrekgigigigiekabababebegegegegegegegeeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagSjbjcjdaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNjeihihihjfihjghNimhciGgzjhjijijijijjjkjljmjnjojpgzabababababababababababababababababababababababababababababfhiQhUhUiKiKiKiKfRhUhUhUhUhUiRfhjriujriwixiyjriujrekgigigigiekabababebegegegegegegegeeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsaajtjujvjwjxaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIjyhNhNhNjzhNhNhNjAgIgIjBgzjCjijDjDjEjijijijFjGjGjGgzabababababababababababababababababababababababababababababfhiShUhUgnhUgnhUhUhUhUhUhUhUiTfhjPiuiuiwixiyiuiujQekjRjSjSjTekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsjUjVjWjvjXjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNjZihkahNkbhyhyhykcgzjijDkdkejDjikfkgjmkhkigzgzabababababababababababababababababababababababababababababfhjqhUhUhUhUhUhUhUjHjJjIgpiTjLfhklkmkmiwixiyknknkoekekkpekekekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajYkqlGjXksktjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNkuihkvhNkwkxkxkxiogzjijDkykzjDjikfkAgzgzgzgzababababababababababababababababababababababababababababababfhfhfhfhfhgBfhfhfhfhfhfhfhfhfhfhhZhZhZhZixhZhZhZhZekeoeoeoeoekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajwjxkIkJkIkKkLaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhMhNhNhNhNhNkuihkvhNkMkNkNkNkNkOjijijijijijikfkAgzgzgzgzabababababababababababababababababababababababababababababababababababababababababababababababababhZixhZkQkQkQeoeoeoeoeoekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsjskLkRkSkTjwaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihihkVhNkuihkvhNkWkXinkxiogzkYjDjDjDjijikfkZgzlalbgzgzabababababababababababababababababababababababababababababababababababababababababkQhZhZhZhZhZhZhZichZhZhZhZhZhZhZhZekekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsjskLkRkSjvjwaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihihkVhNkuihkvhNkWkXinkxiogzkYjDjDjDjijikfkZgzlalbgzgzabababababababababababababababababababababababababababababababababababababababababkQhZhZhZhZhZhZhZichZhZhZhZhZhZhZhZekekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaalhliljlklllmjvlnjsaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihlolphNkuihkvhNhNnrlrhPlsgzltlulvlulujijijilwlxlxlygzabababababababababababababababababababababababababababababababababababababababababhZlzlAlAlAlAlAlzlzlzlAlAlAlAlAlzhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaalBlClDlElFlljvlGlHlIjsjsaaaaaaaaaaaaaaaaababababababgzlJgIhNkUihihlKhNihihihhNihihihhNjBgzlLlMlLlLlNjijijigzlOlPlygzababababababababababababababababababababababababababababababababababababababababablQlzlzlzlRlzlzlzlzlzlzlzlRlzlzlzlQababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaalBgYlDlEgZlljvlGlHlIjsjsaaaaaaaaaaaaaaaaababababababgzlJgIhNkUihihlKhNihihihhNihihihhNjBgzlLlMlLlLlNjijijigzlOlPlygzababababababababababababababababababababababababababababababababababababababababablQlzlzlzlRlzlzlzlzlzlzlzlRlzlzlzlQababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaajsaaljlSlSlTlljvlUlGlIaalVlWaaaaaaaaaaaaaaababababababgzgIgIhNkUihihihlXihihihlYihihihhNiGgzgzkglZmambgzmcjigzgzgzgzgzabababababababababababababababababababababababababababababababababababababababababhZlzlAlAlAlAlAlzlzlzlAlAlAlAlAlzhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaalnjsaaaajsmdmejWmfjWlnjsjsaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihihihmgihihihmhihihmihNmjmjlsgzgzgzgzgzgNgCmlmmmnmogzabababababababababababababababababababababababababababababababababababababababababhZidmpmpmpmpmpmpmpmpmpmpmpmpmpibhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaakKmqmrmsmtmumtmtmqmvmsmtmtmumtmtaajsaaaaaaaaaaababababababgzgIhMhNhNhNhNhNhNmwihihhNhNhNhNhNhNhPmxmxmxmylsgzmzmzmzmzmzmzgzabababababababababababababababababababababababababababababababababmBmBmBmBmBmBmBmBmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBmBmBmBmBmBmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaamEmFjvjvmFmEmGmHjvjvjvmImJmEmKmLlnmMjsjsaaaaaaababababababgzgIhNmNmNmOmPmQhNihihihhNmRmSmTmUmVhNgIgJgIgIgLjmmzmzmzmzmzmWgzabababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaamEmFjvjvmFmEmGmHjvjvjvhbmJmEmKmLlnmMjsjsaaaaaaababababababgzgIhNmNmNmOmPmQhNihihihhNmRmSmTmUmVhNgIgJgIgIgLjmmzmzmzmzmzmWgzabababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaanhnijvjvninhmMmMjvjvjvjvnjnhnknllSlSnmaaaaaaaaababababababgzgIhNihihihloihnnihihihnoihloihlonphNgIhcgKgJhcgznqnqnqnqnqlqgzabababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaanunvjvlGjvnwlUlGjvnxjvjvnynunznAnBnCnDnEaaaaaaababababababgzgIhNnFihihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaanMnijvjWlUnNjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNnFihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaanunvjvlGjvnwlUlGjvnxjvjvnynunzhdnBnChenEaaaaaaababababababgzgIhNnFihihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaanMnijvjWlUhfjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNnFihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaajdnZjvjvnZjdoajvlGjWjvjvoajdobocodoeaaaaaaaaaaababababababgzgIhNihihgOhNhNhNofogihhNhNhNihihihhNgIgIgJgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaajwmqojmsmtokmtmqkIolkImsmtokmtmqjsjsjsaaaaaaaaababababababgzgIhNgQgPgRhNgIhNopopophNgIhNiloqorhNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaamdlGaajsaajsoslmmdaaaajsaaaaaaaajsaaaaaaaaababababababgzgIhNopopophNgIjyotegoujAgIhNopopophNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmBmBovovovovovmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBovovovovovmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaajsjsaaowlGaaoxoymdjsaalUaaaaaaaaaaaaaaaaaaababababababgzgIjyotegoujAgIgIgIgIgIgIgIjyotegoujAgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababababmBozozozozozmBoAoBoBoBoBoBoBoBoBoBoBoBoBoBoCmBoDoDoDoDoDmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsjsaaoElGoFaaaaaajsaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababababmBmBmBmBmBmBmBoGoHoHoHoHoHoIoJoKoHoHoHoHoHoGmBmBmBmBmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsmumqoLmsmujsaajsjsaaaaaaaaaaaaaaababababababgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzababababababababababababababababababababababababababababababababababababababababababababababababoMoGoGoGoNoGoOoOoOoOoOoGoNoGoGoGoMababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaamEoPoQoRmEownllFoSoTjsaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababoMoMoUoMoMoMoMoVoWoXoMoMoMoMoUoMoMababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaamEoPoQoRmEownlgZoSoTjsaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababoMoMoUoMoMoMoMoVoWoXoMoMoMoMoUoMoMababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaakIoYoZpakIpbpclEpdjvjYaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababoMoMoMoMoMababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaalmjsjdpepfpgjdjWphlEpdaajsaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsmupimqkImspimupjpkpdaajsaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhshshshshshshshshshshshshshshshshshshsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsmupimqkImspimupjhgpdaajsaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhshshshshshshshshshshshshshshshshshshsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsmEjvplpmpljvmEaapnaaaajsaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspopppqprprpppsptpupvpwpxpypxpxpxpzhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaajslGpAjvjvjvjvjvpAaaaaaaaalGaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspopppppppppppBpwpwpwpCpxpxpxpDpxpxhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaajsjslmjvjdpEjvjvjvpEjdaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspopppFpopGpHpIpwpwpwpwpxpxpJpxpKpyhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 87809a71d38..562fc159cd9 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -100,4 +100,95 @@ playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return user.visible_message("[user] smashes [src]!") - shatter() \ No newline at end of file + shatter() + +/obj/structure/mirror/magic + name = "magic mirror" + desc = "Turn and face the strange... face." + + +/obj/structure/mirror/magic/attack_hand(mob/user as mob) + if(!ishuman(user)) + return + + var/mob/living/carbon/human/H = user + + var/choice = input(user, "Something to change?", "Magical Grooming") as null|anything in list("name", "race", "gender", "hair", "eyes") + + switch(choice) + if("name") + var/newname = copytext(sanitize(input(H, "Who are we again?", "Name change", H.name) as null|text),1,MAX_NAME_LEN) + + if(!newname) + return + + H.real_name = newname + H.name = newname + if(H.mind) + H.mind.name = newname + + if("race") + var/newrace + var/racechoice = input(H, "What are we again?", "Race change") as null|anything in species_list + newrace = species_list[racechoice] + + if(!newrace || !H.dna) + return + + H.dna.species = new newrace + + if(H.dna.species.use_skintones) + var/new_s_tone = input(user, "What are we again?", "Race change") as null|anything in skin_tones + + if(new_s_tone) + H.skin_tone = new_s_tone + + if(MUTCOLORS in H.dna.species.specflags) + var/new_mutantcolor = input(user, "Choose your skin color:", "Race change") as color|null + if(new_mutantcolor) + var/temp_hsv = RGBtoHSV(new_mutantcolor) + + if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright + H.dna.mutant_color = sanitize_hexcolor(new_mutantcolor) + + else + H << "Invalid color. Your color is not bright enough." + + H.regenerate_icons() + + if("gender") + if(!(H.gender in list("male", "female"))) //blame the patriarchy + return + + if(H.gender == "male") + if(alert(H, "Become a Witch?", "Confirmation", "Yes", "No") == "Yes") + H.gender = "female" + H << "Man, you feel like a woman!" + H.regenerate_icons() + else + if(alert(H, "Become a Warlock?", "Confirmation", "Yes", "No") == "Yes") + H.gender = "male" + H << "Whoa man, you feel like a man!" + H.regenerate_icons() + + if("hair") + var/hairchoice = alert(H, "Hair style or hair color?", "Change Hair", "Style", "Color") + + if(hairchoice == "Style") //So you just want to use a mirror then? + ..() + else + var/new_hair_color = input(H, "Choose your hair color", "Hair Color") as null|color + if(new_hair_color) + H.hair_color = sanitize_hexcolor(new_hair_color) + if(H.gender == "male") + var/new_face_color = input(H, "Choose your facial hair color", "Hair Color") as null|color + if(new_face_color) + H.facial_hair_color = sanitize_hexcolor(new_face_color) + + H.update_hair() + + if("eyes") + var/new_eye_color = input(H, "Choose your eye color", "Eye Color") as null|color + if(new_eye_color) + H.eye_color = sanitize_hexcolor(new_eye_color) + H.update_body() \ No newline at end of file From 93c982ea5cca0a34b28b9b22ca1c537ad0c8536e Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 8 Mar 2015 16:38:44 +0100 Subject: [PATCH 051/101] Fixes hulks not losing their mutation when low on health. Fixes carbon mobs resistant to paralysis not going unconscious when in crit. --- code/modules/mob/living/carbon/human/life.dm | 5 ++++- code/modules/mob/living/carbon/life.dm | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 11d0dbc0995..cc448dba36d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -38,6 +38,9 @@ tinttotal = tintcheck() //here as both hud updates and status updates call it if(..()) + if(dna) + for(var/datum/mutation/human/HM in dna.mutations) + HM.on_life(src) //Stuff jammed in your limbs hurts handle_embedded_objects() @@ -356,4 +359,4 @@ I.loc = get_turf(src) visible_message("\the [I] falls out of [name]'s [L.getDisplayName()]!","\the [I] falls out of your [L.getDisplayName()]!") -#undef HUMAN_MAX_OXYLOSS +#undef HUMAN_MAX_OXYLOSS diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index b4181b590a0..e9a2c026479 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -343,12 +343,12 @@ silent = 0 return 1 - if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) ) + if(getOxyLoss() > 50 || health <= config.health_threshold_crit) Paralyse(3) + stat = UNCONSCIOUS if(paralysis) AdjustParalysis(-1) - stat = UNCONSCIOUS else if(sleeping) handle_dreams() adjustStaminaLoss(-10) From 3796f32394ea6d2a9f23fa8ac849895b54a6e9e7 Mon Sep 17 00:00:00 2001 From: norill Date: Sun, 8 Mar 2015 18:23:34 +0100 Subject: [PATCH 052/101] fixed improper req_tech "power" -> "powerstorage" in several research designs --- code/modules/research/designs/machine_designs.dm | 8 ++++---- code/modules/research/designs/mechfabricator_designs.dm | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index ff5e33b0ef3..120963be22c 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -6,7 +6,7 @@ name = "Machine Design (SMES Board)" desc = "The circuit board for a SMES." id = "smes" - req_tech = list("programming" = 4, "power" = 5, "engineering" = 4) + req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER materials = list("$glass" = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/smes @@ -16,7 +16,7 @@ name = "Computer Design (Power Turbine Console Board)" desc = "The circuit board for a power turbine console." id = "power_turbine_console" - req_tech = list("programming" = 4, "power" = 4, "engineering" = 4) + req_tech = list("programming" = 4, "powerstorage" = 4, "engineering" = 4) build_type = IMPRINTER materials = list("$glass" = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/turbine_computer @@ -26,7 +26,7 @@ name = "Machine Design (Power Compressor Board)" desc = "The circuit board for a power compressor." id = "power_compressor" - req_tech = list("programming" = 4, "power" = 5, "engineering" = 4) + req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER materials = list("$glass" = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/power_compressor @@ -36,7 +36,7 @@ name = "Machine Design (Power Turbine Board)" desc = "The circuit board for a power turbine." id = "power_turbine" - req_tech = list("programming" = 4, "power" = 4, "engineering" = 5) + req_tech = list("programming" = 4, "powerstorage" = 4, "engineering" = 5) build_type = IMPRINTER materials = list("$glass" = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/power_turbine diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index b04f53bdff7..6c08a097ce2 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -640,7 +640,7 @@ id = "borg_upgrade_disablercooler" build_type = MECHFAB build_path = /obj/item/borg/upgrade/disablercooler - req_tech = list("combat" = 5, "power" = 4) + req_tech = list("combat" = 5, "powerstorage" = 4) materials = list("$metal"=80000 , "$glass"=6000 , "$gold"= 2000, "$diamond" = 500) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -650,7 +650,7 @@ id = "borg_upgrade_jetpack" build_type = MECHFAB build_path = /obj/item/borg/upgrade/jetpack - req_tech = list("engineering" = 4, "power" = 4) + req_tech = list("engineering" = 4, "powerstorage" = 4) materials = list("$metal"=10000, "$plasma"=5000, "$uranium" = 6000) construction_time = 120 category = list("Cyborg Upgrade Modules") From 8b14886c51fede6be3e6b1e97e880adf553ad125 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sun, 8 Mar 2015 10:44:43 -0700 Subject: [PATCH 053/101] Cyborgs no longer have flesh to knit. --- .../reagents/Chemistry-Goon-Medicine.dm | 49 ++++++++++--------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index ab16118b87f..df1c02a394a 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -13,15 +13,16 @@ datum/reagent/silver_sulfadiazine metabolization_rate = 2 datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1) - if(method == TOUCH) - M.adjustFireLoss(-volume) - if(show_message) - M << "You feel your burns healing!" - M.emote("scream") - if(method == INGEST) - M.adjustToxLoss(0.5*volume) - if(show_message) - M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" + if(ishuman(M)) + if(method == TOUCH) + M.adjustFireLoss(-volume) + if(show_message) + M << "You feel your burns healing!" + M.emote("scream") + if(method == INGEST) + M.adjustToxLoss(0.5*volume) + if(show_message) + M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" ..() return @@ -40,15 +41,16 @@ datum/reagent/styptic_powder metabolization_rate = 2 datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1) - if(method == TOUCH) - M.adjustBruteLoss(-volume) - if(show_message) - M << "You feel your wounds knitting back together!" - M.emote("scream") - if(method == INGEST) - M.adjustToxLoss(0.5*volume) - if(show_message) - M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" + if(ishuman(M)) + if(method == TOUCH) + M.adjustBruteLoss(-volume) + if(show_message) + M << "You feel your wounds knitting back together!" + M.emote("scream") + if(method == INGEST) + M.adjustToxLoss(0.5*volume) + if(show_message) + M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" ..() return @@ -83,11 +85,12 @@ datum/reagent/synthflesh datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume,var/show_message = 1) if(!M) M = holder.my_atom - if(method == TOUCH) - M.adjustBruteLoss(-1.5*volume) - M.adjustFireLoss(-1.5*volume) - if(show_message) - M << "You feel your burns healing and your flesh knitting together!" + if(ishuman(M)) + if(method == TOUCH) + M.adjustBruteLoss(-1.5*volume) + M.adjustFireLoss(-1.5*volume) + if(show_message) + M << "You feel your burns healing and your flesh knitting together!" ..() return From 0aa2246231024c462564f28a31a2c3d348de6a1d Mon Sep 17 00:00:00 2001 From: Ahammer18 Date: Sun, 8 Mar 2015 13:52:26 -0500 Subject: [PATCH 054/101] Fixed changelog and color --- code/modules/food&drinks/food/snacks_cake.dm | 2 +- html/changelogs/Ahammer18-PR-8215.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/food&drinks/food/snacks_cake.dm b/code/modules/food&drinks/food/snacks_cake.dm index c171169a2f5..d8a65be515b 100644 --- a/code/modules/food&drinks/food/snacks_cake.dm +++ b/code/modules/food&drinks/food/snacks_cake.dm @@ -173,4 +173,4 @@ /obj/item/weapon/reagent_containers/food/snacks/cakeslice/slimecake name = "Slime cake slice" icon_state = "slimecake_slice" - filling_color = "#FA8072" + filling_color = "#00FFFF" diff --git a/html/changelogs/Ahammer18-PR-8215.yml b/html/changelogs/Ahammer18-PR-8215.yml index 48c1a156024..8ad4551896c 100644 --- a/html/changelogs/Ahammer18-PR-8215.yml +++ b/html/changelogs/Ahammer18-PR-8215.yml @@ -2,4 +2,4 @@ author: Ahammer18 delete-after: true changes: - - rscadd: "Adds the braincake and braincake slice." + - rscadd: "Adds the Slimecake and Slimecake slice." From f602408aef24e2230cc351e5156e668383caee85 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sun, 8 Mar 2015 13:12:29 -0700 Subject: [PATCH 055/101] Update Chemistry-Goon-Medicine.dm --- code/modules/reagents/Chemistry-Goon-Medicine.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index df1c02a394a..3169bea4dc0 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -13,7 +13,7 @@ datum/reagent/silver_sulfadiazine metabolization_rate = 2 datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1) - if(ishuman(M)) + if(iscarbon(M)) if(method == TOUCH) M.adjustFireLoss(-volume) if(show_message) @@ -41,7 +41,7 @@ datum/reagent/styptic_powder metabolization_rate = 2 datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1) - if(ishuman(M)) + if(iscarbon(M)) if(method == TOUCH) M.adjustBruteLoss(-volume) if(show_message) @@ -85,7 +85,7 @@ datum/reagent/synthflesh datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume,var/show_message = 1) if(!M) M = holder.my_atom - if(ishuman(M)) + if(iscarbon(M)) if(method == TOUCH) M.adjustBruteLoss(-1.5*volume) M.adjustFireLoss(-1.5*volume) From dd2fe28678543b30dba83b9589392e05e6f82ad0 Mon Sep 17 00:00:00 2001 From: Incoming Date: Sun, 8 Mar 2015 16:35:46 -0400 Subject: [PATCH 056/101] Fixes cavity implant surgery not respecting NODROP --- code/modules/surgery/cavity_implant.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index 72223b4716f..289dadeec2d 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -25,7 +25,7 @@ /datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(tool) - if(IC || tool.w_class > 3 || tool.GetTypeInAllContents(/obj/item/weapon/disk/nuclear) || istype(tool, /obj/item/weapon/disk/nuclear) || istype(tool, /obj/item/organ)) + if(IC || tool.w_class > 3 || NODROP in tool.flags || tool.GetTypeInAllContents(/obj/item/weapon/disk/nuclear) || istype(tool, /obj/item/weapon/disk/nuclear) || istype(tool, /obj/item/organ)) user.visible_message("[user] can't seem to fit [tool] in [target]'s [target_zone].") return 0 else From 1a092e0edef2cca0e0f131bacd1dcfa8d1702be3 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 8 Mar 2015 22:15:55 +0100 Subject: [PATCH 057/101] Changes how doughs are made. 10water+15flour chem reaction for dough. 15flour+15eggyolk+5sugar for cake batter (or alternatively for vegans 15 soymilk instead of the eggyolk). Introduce egg yolk reagent You can break eggs in open reagent containers or blend them to get egg yolk. Fixes breadslices sprites and other merge conflict bugs in food.dmi. Change customizable snack max volume to 60. Buff nutriment amount in doughs. --- code/game/objects/items/weapons/manuals.dm | 5 +- .../modules/food&drinks/food/customizables.dm | 4 +- code/modules/food&drinks/food/snacks/dough.dm | 11 +-- code/modules/food&drinks/food/snacks_egg.dm | 15 ++++ .../food&drinks/recipes/food_mixtures.dm | 72 ++++++------------ .../recipes/tablecraft/recipes_dough.dm | 53 ------------- code/modules/reagents/Chemistry-Machinery.dm | 1 + .../Consumable-Reagents/Food-Reagents.dm | 6 ++ code/modules/reagents/reagent_containers.dm | 18 ----- html/changelogs/phil235-DoughChange.yml | 6 ++ icons/obj/food.dmi | Bin 96731 -> 94626 bytes tgstation.dme | 1 - 12 files changed, 62 insertions(+), 130 deletions(-) delete mode 100644 code/modules/food&drinks/recipes/tablecraft/recipes_dough.dm create mode 100644 html/changelogs/phil235-DoughChange.yml diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index b7d25927991..94a1afa043c 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -680,7 +680,10 @@

Basic ingredients preparation:

- Dough: Add an egg to 15 flour. Dough can be transformed by using your knife and rolling pin or by adding milk. All doughs can be microwaved.
+ Dough: 10u water + 15u flour for simple dough.
+ 15u egg yolk + 15u flour + 5u sugar for cake batter.
+ Doughs can be transformed by using a knife and rolling pin.
+ All doughs can be microwaved.
Bowl: Add water to it for soup preparation.
Meat: Microwave it, process it, slice it into microwavable cutlets with your knife, or use it raw.
Cheese: Add 5u universal enzyme (catalyst) to milk and soy milk to prepare cheese (sliceable) and tofu. diff --git a/code/modules/food&drinks/food/customizables.dm b/code/modules/food&drinks/food/customizables.dm index 46c1f0dace6..168210ad21f 100644 --- a/code/modules/food&drinks/food/customizables.dm +++ b/code/modules/food&drinks/food/customizables.dm @@ -15,6 +15,7 @@ /obj/item/weapon/reagent_containers/food/snacks/customizable bitesize = 4 w_class = 3 + volume = 60 var/ingMax = 12 var/list/ingredients = list() @@ -67,9 +68,8 @@ return name = "[customname] [initial(name)]" - else . = ..() - return + /obj/item/weapon/reagent_containers/food/snacks/customizable/proc/update_name(obj/item/weapon/reagent_containers/food/snacks/S) for(var/obj/item/I in ingredients) diff --git a/code/modules/food&drinks/food/snacks/dough.dm b/code/modules/food&drinks/food/snacks/dough.dm index aca417a2473..d03339809cd 100644 --- a/code/modules/food&drinks/food/snacks/dough.dm +++ b/code/modules/food&drinks/food/snacks/dough.dm @@ -8,9 +8,8 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "dough" cooked_type = /obj/item/weapon/reagent_containers/food/snacks/store/bread/plain - list_reagents = list("nutriment" = 3) + list_reagents = list("nutriment" = 6) w_class = 3 - flags = OPENCONTAINER // Dough + rolling pin = flat dough @@ -35,9 +34,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/doughslice slices_num = 3 cooked_type = /obj/item/weapon/reagent_containers/food/snacks/pizzabread - list_reagents = list("nutriment" = 3) + list_reagents = list("nutriment" = 6) w_class = 3 - flags = OPENCONTAINER /obj/item/weapon/reagent_containers/food/snacks/pizzabread name = "pizza bread" @@ -56,7 +54,6 @@ icon_state = "doughslice" cooked_type = /obj/item/weapon/reagent_containers/food/snacks/bun filling_color = "#CD853F" - flags = OPENCONTAINER /obj/item/weapon/reagent_containers/food/snacks/bun @@ -74,7 +71,7 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "cakebatter" cooked_type = /obj/item/weapon/reagent_containers/food/snacks/store/cake/plain - list_reagents = list("nutriment" = 3) + list_reagents = list("nutriment" = 9) w_class = 3 // Cake batter + rolling pin = pie dough @@ -97,7 +94,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/rawpastrybase slices_num = 3 cooked_type = /obj/item/weapon/reagent_containers/food/snacks/pie/plain - list_reagents = list("nutriment" = 3) + list_reagents = list("nutriment" = 9) w_class = 3 /obj/item/weapon/reagent_containers/food/snacks/rawpastrybase diff --git a/code/modules/food&drinks/food/snacks_egg.dm b/code/modules/food&drinks/food/snacks_egg.dm index 8d9a585c2f8..c86118a5462 100644 --- a/code/modules/food&drinks/food/snacks_egg.dm +++ b/code/modules/food&drinks/food/snacks_egg.dm @@ -16,6 +16,21 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/boiledegg filling_color = "#F0E68C" +/obj/item/weapon/reagent_containers/food/snacks/egg/afterattack(obj/target, mob/user, proximity) + if(!proximity) + return + + if(istype(target, /obj/item/weapon/reagent_containers)) + if(target.is_open_container() && target.reagents) + + if(target.reagents.total_volume >= target.reagents.maximum_volume) + user << "[target] is full." + else + user << "You break [src] in [target]." + target.reagents.add_reagent("eggyolk", 5) + qdel(src) + return + /obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) ..() new/obj/effect/decal/cleanable/egg_smudge(src.loc) diff --git a/code/modules/food&drinks/recipes/food_mixtures.dm b/code/modules/food&drinks/recipes/food_mixtures.dm index d468f33dfde..f038a3b3fb1 100644 --- a/code/modules/food&drinks/recipes/food_mixtures.dm +++ b/code/modules/food&drinks/recipes/food_mixtures.dm @@ -111,43 +111,6 @@ required_reagents = list("capsaicin" = 1, "hot_ramen" = 6) result_amount = 6 -/datum/chemical_reaction/cakebatter - name = "Cake Batter" - id = "cakebatter" - result = null - required_reagents = list("milk" = 5) - result_amount = 1 - required_container = /obj/item/weapon/reagent_containers/food/snacks/dough - mix_message = "The dough forms a cake batter." - -/datum/chemical_reaction/cakebatter/on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/reagent_containers/food/snacks/S = new /obj/item/weapon/reagent_containers/food/snacks/cakebatter - S.loc = get_turf(holder.my_atom) - if(holder && holder.my_atom) - qdel(holder.my_atom) - -/datum/chemical_reaction/piedough - name = "Pie Dough" - id = "piedough" - result = null - required_reagents = list("milk" = 5) - result_amount = 1 - required_container = /obj/item/weapon/reagent_containers/food/snacks/flatdough - mix_message = "The dough forms a pie dough." - -/datum/chemical_reaction/piedough/on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/reagent_containers/food/snacks/S = new /obj/item/weapon/reagent_containers/food/snacks/piedough - S.loc = get_turf(holder.my_atom) - if(holder && holder.my_atom) - qdel(holder.my_atom) - -/datum/chemical_reaction/cakebatter/alt - id = "cakebatteralt" - required_reagents = list("soymilk" = 5) - -/datum/chemical_reaction/piedough/alt - id = "piedoughalt" - required_reagents = list("soymilk" = 5) /datum/chemical_reaction/imitationcarpmeat name = "Imitation Carpmeat" @@ -164,22 +127,35 @@ if(holder && holder.my_atom) qdel(holder.my_atom) -/datum/chemical_reaction/rawpastrybase - name = "Raw Pastry Base" - id = "rawpastrybase" +/datum/chemical_reaction/dough + name = "Dough" + id = "dough" result = null - required_reagents = list("milk" = 5) + required_reagents = list("water" = 10, "flour" = 15) result_amount = 1 - required_container = /obj/item/weapon/reagent_containers/food/snacks/doughslice - mix_message = "The doughslice forms a raw pastry base" + mix_message = "The ingredients form a dough." -/datum/chemical_reaction/rawpastrybase/on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/reagent_containers/food/snacks/S = new /obj/item/weapon/reagent_containers/food/snacks/rawpastrybase +/datum/chemical_reaction/cakebatter/on_reaction(var/datum/reagents/holder) + var/obj/item/weapon/reagent_containers/food/snacks/S = new /obj/item/weapon/reagent_containers/food/snacks/cakebatter S.loc = get_turf(holder.my_atom) if(holder && holder.my_atom) qdel(holder.my_atom) -/datum/chemical_reaction/rawpastrybase/alt - id = "rawpastrybasealt" - required_reagents = list("soymilk" = 5) +/datum/chemical_reaction/cakebatter + name = "Cake Batter" + id = "cakebatter" + result = null + required_reagents = list("eggyolk" = 15, "flour" = 15, "sugar" = 5) + result_amount = 1 + mix_message = "The ingredients form a cake batter." + +/datum/chemical_reaction/cakebatter/on_reaction(var/datum/reagents/holder) + var/obj/item/weapon/reagent_containers/food/snacks/S = new /obj/item/weapon/reagent_containers/food/snacks/cakebatter + S.loc = get_turf(holder.my_atom) + if(holder && holder.my_atom) + qdel(holder.my_atom) + +/datum/chemical_reaction/cakebatter/vegan + id = "vegancakebatter" + required_reagents = list("soymilk" = 15, "flour" = 15, "sugar" = 5) diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_dough.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_dough.dm deleted file mode 100644 index a81fee36e52..00000000000 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_dough.dm +++ /dev/null @@ -1,53 +0,0 @@ - - -// see code/module/crafting/table.dm - -////////////////////////////////////////////////DOUGH//////////////////////////////////////////////// - -//these recipes can also be done with attackby. - -/datum/table_recipe/cakebatter - name = "Cake Batter" - reqs = list( - /datum/reagent/consumable/milk = 5, - /obj/item/weapon/reagent_containers/food/snacks/dough = 1 - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cakebatter - -/datum/table_recipe/cakebatter/alt - reqs = list( - /datum/reagent/consumable/soymilk = 5, - /obj/item/weapon/reagent_containers/food/snacks/dough = 1 - ) - -/datum/table_recipe/piedough - name = "Pie Dough" - reqs = list( - /datum/reagent/consumable/milk = 5, - /obj/item/weapon/reagent_containers/food/snacks/flatdough = 1 - ) - result = /obj/item/weapon/reagent_containers/food/snacks/piedough - -/datum/table_recipe/piedough/alt - reqs = list( - /datum/reagent/consumable/soymilk = 5, - /obj/item/weapon/reagent_containers/food/snacks/flatdough = 1 - ) - -/datum/table_recipe/rawpastrybase - name = "Raw Pastry Base" - reqs = list( - /datum/reagent/consumable/milk = 5, - /obj/item/weapon/reagent_containers/food/snacks/doughslice = 1 - ) - result = /obj/item/weapon/reagent_containers/food/snacks/rawpastrybase - -/datum/table_recipe/rawpastrybase/alt - reqs = list( - /datum/reagent/consumable/soymilk = 5, - /obj/item/weapon/reagent_containers/food/snacks/doughslice = 1 - ) - - - - diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index a23de90b69c..496b6467887 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -922,6 +922,7 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) /obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), /obj/item/weapon/reagent_containers/food/snacks/grown/oat = list("flour" = -5), /obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), + /obj/item/weapon/reagent_containers/food/snacks/egg = list("eggyolk" = -5), //Grinder stuff, but only if dry /obj/item/weapon/reagent_containers/food/snacks/grown/coffee/arabica = list("coffeepowder" = 0), diff --git a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm index 994ef10178d..03da7a121b3 100644 --- a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm @@ -404,3 +404,9 @@ datum/reagent/consumable/vanilla reagent_state = SOLID nutriment_factor = 5 * REAGENTS_METABOLISM color = "#FFFACD" + +datum/reagent/consumable/eggyolk + name = "Egg Yolk" + id = "eggyolk" + description = "It's full of protein." + color = "#FFB500" \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index c0051eb3b8a..4803a311e33 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -77,21 +77,3 @@ return 0 return 1 - -/obj/item/weapon/reagent_containers/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/egg)) //making dough - var/obj/item/weapon/reagent_containers/food/snacks/egg/E = W - if(flags & OPENCONTAINER) - if(reagents) - if(reagents.has_reagent("flour")) - if(reagents.get_reagent_amount("flour") >= 15) - var/obj/item/weapon/reagent_containers/food/snacks/S = new /obj/item/weapon/reagent_containers/food/snacks/dough(get_turf(src)) - user << "You mix egg and flour to make some dough." - reagents.remove_reagent("flour", 15) - if(E.reagents) - E.reagents.trans_to(S,E.reagents.total_volume) - qdel(E) - else - user << "Not enough flour to make dough." - return - ..() \ No newline at end of file diff --git a/html/changelogs/phil235-DoughChange.yml b/html/changelogs/phil235-DoughChange.yml new file mode 100644 index 00000000000..db83d37a729 --- /dev/null +++ b/html/changelogs/phil235-DoughChange.yml @@ -0,0 +1,6 @@ +author: phil235 +delete-after: True +changes: + - rscadd: "Adds egg yolk reagent. You can break eggs in open reagent containers or blend them to get egg yolk." + - tweak: "Changes how doughs are made. 10water+15flour chem reaction for dough. 15flour+15eggyolk+5sugar for cake batter (or alternatively soymilk instead of the eggyolk for vegans)." + - tweak: "Change customizable snack max volume to 60 and buffs nutriment amount in doughs." \ No newline at end of file diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 9b05ea1d2cef02a26be61bf76125696cdce59a78..a8ee5a9eeada7d5246d77177171ccebf7d13ea3e 100644 GIT binary patch delta 56939 zcmYJZ1yCMM6E6DV5D4xP++BhNcMI+s+$|6s7I!BEcZcAvFTvg2-QAtb_n&j>cGXnv zPVH>XboaD9y?hOmyA2ad0fcy{YC4OVIvM}8ba1w`w*!IP(lb*3{oLV14j#W#xuKY+ z*i9LsNDE+IOj$~mp>z*qiVdV_680BY{0DPbBE{==d zz2CMkF7L;nWit@DcH_D01loHRGO*F%k~wO z{=Yq%_}kh$@IQ&Ky}hA(&i9@PIk{%H`}Iv~<6I}~EEUlN)ys;@QtQ8-EG%}z+$hr+ z_}+(9a3(RS?Z-V~#*lY;W$nk;pX0}D-^-gLF%XiBeJVg>Z>}k2MCHZa3w)H0C$#t~ zbK-eKeO)+%8|G8x3=HiltSGpAku*mk7ODVabNx5YBx5~eoSWJ(|Gh%m3oLireIA7k143b%RgEwf|$kKgK#A_8GVS35me%~P3Uy2Fo)Q1egX?<=+KXTSx8`n;fW5KpG5j9|A{8{ zbCCRY)Mz?;UR7hf9AC9bvtJ504m`=F=cH6@x8 z%KKHomUG1Wk>MA<7#6B(TnP%6breRRfCC%6vm6X$k^2t!d`WU|DWsfbt<>l1Tr&iu zr_DV!$Tam@Ls%sZDf9sW-xZ>=3KAV8XlpYyXGJz%%Si1^_9R5Np%fKV4*URB=e4$_ zsgy|iufvtD+o3IIN@E-k(yFl;xKQLOPWjrv=LKVo#zLf=h#3UPbN3wyWX`lczo~SiMvVP^0%_cR=`yQn>E%$AbI7q&66f_MF+IPvVHE+G_niIG%8 zmcOm6Udgerk}p_`t=0TB`&=gwYKkoqfK-)<#(=w&g3v*S>*o{t;$H&xXGk>qZ0t^0 zt8A4b18qeoiChfq$q1eE=mh^UOAir#O8)p)?C78CRK!Nfvw5BL7YZ4_r%7jyF->im z3>uh|LR0#VDR^7=+Ps|-kWt_fMRny(gTF*GIM8J(EyEYebK9LTj(s;$er6m{Ik*~N zg$P+RVZ^QSWckVkwa;Eq6`BQ7ldgC4eKd*s!Od2`lq?^b2@lJGW>x68H5cpbL6#8) zDIH(Jxx~R)b-edg#r9@=hk0JZFLAE>bhF#_Jk!U%aa~Z|XdfSrSa&-}v>wX_%b{Gx zJEcK!8(oXh@br@cEj--N!0k5hp*^F;cSIe=vshy_3^6g7C6O37k4x!Z8U4X6gQ@-f z9gi8%p9QhhvoDi4?)=+*d)F=~k@x=f=(?xia_?qpB6kj+euBDmJ{f~!6&JmHx?EMyM!Fmjx*s~vsy0x<@Pb{oc3ov8d9{&ueoWP8~P)2l4 zAEMucE{@5>lT3d@&|c%<+q;dUs~<3@?#LpD;_8OoHm>R z&8RXK&eNXo<7t#Ni$ZwzDcWDQBRi!%A={AF_EVivgF)wkorsT`qwW&^-lp~L{b((w z*YoPS4{+SKQhlV6Y9a`Vy*VBqa> zd0)YPt?e+LeE084F~~boM;6Q zcNylTI=X}KYY(I?nP3Xng{+L^nlIICMMQK!vCL5;wtk}ch0}f-$Ah0nBG1_dlkElR z<_S~dCUrVvc(>4W-{MqdR`})@38ms&NXN?GySskvC#+mW#_ZYcoJH?kz06LQO z=k0duqi1b^oLOxeBrO3M+xmFO_}R(GPRhF3;^Urs<~ovNfJnw&wdTfw0DpHs&Eg-{ zAQ+!q+EVP&z)UGcHTMF5j8G}JtB7O*8gFGd)V(om_04g(cen8C#p1FFgS@d=#0zHB zkfavVpI#3-QMKp%2L*H=MiK4_-A01jzgZ=6?Z0C!9KXe2)AH&gIhloBISp||2=&xx zx|&MGXO^nKVa@xj_IPT*ICO85H}8~_`Mfw0;s{{-j<<{NR74pAuDmN3ZVaZEttD;@ zAfbtTQAxa$sZiZqb#T}_3@Dug1;9JTs`^s9x$z&eH#boX8bR`$8@{8Fs;3$*2 z@!ov4fJJ6OS{rcDy;gR#ne(VF8;Rh#O@vKknD48&k<)Q31niraUl_cBy>k>V z2bHV9%CW+4SES9eVEtZec(C@v4F;4flkZ78zL61RlOeE03nL^taqI7C0sS?lA0F>p z#O{2#YkXFGJk^_{TF_Q|fM`%;E*p~+es87FVpy&naX<1a82ZdWRvJkzN;-$ag^o4? z8>0GT(T$jvIh>MNUsrA4G*U&VMr+5OpvSo{w*qN`Q$9tBNo4LEc>+S zJYt671U#gcB9ud_?zXFEoFm;C;k^&z%3n1A#F=pOln<< znq1d7-r@9jl+(e9TCX*=`1J5}PNTf?Xc6VlkRBjd&$q_<33qn|(RoX(71pv9vpJc4 zP{FlU&>6HQllrOhVgDcwc?XIsh`Ymbr~_xvI_FqO2z{^0%db>^&yw+n z)?DAoQft07#;wFs_}~^jL;9!s$Bo?w2I>uv|Ss^gxm_R?b331HkhN zuPNW>^;=G5&rhF9A&Lc7B|NHcW^q>7j&T3&IUr|V>~wqoQ?=r2I=3QHI+*y%naA3E zxho6|;jggLzQQB0-O=g0{|Ux&3K(Sio13#}kwlDY4iG(AA)6$J+GBC(o>p9!o|11lVnyac7C9v9J>A# zD*VcodOLv_Z&KQ9Rmq2N*vu)R#rc81%Y-FQ@d3S_Kchw~4|n$+x{0>xC^Gpo)hGL= z8goI-_;l>YX1i4nY{u2@_~!FEnMr!t9@}N9xUxgUN55%!MHd&&Jjob|a&`8gcAMek zuFQY>4@E(f(7LQ0w@~gRm9fBP()`x!!M{Nc{ty?ulp1Gdt9twbWod0~d}-%b48{6$ ztsuu}{R>Z0za}h3<_c6%mrr12O^C^t#3_I(^sbjl=J!dV zp-TX26Mxn4rJAfabjb>3*yxSY#hOYlM_OmM&d5{Ss|70#Rd=*#?A4VcG9P!athv9T zEuqqU&(*bjlc70AivrT>n?w483jsM?>*b~TrRd$A?6KQZw}ZeMejkHb+!NjjeTZ-z zc}l(JiurJ%gB_SZG7gB?e2OSLeXj8IBwAivD}RV?=VwnMnK4<-wV)SNZYWyG>8BR7 zu2gA0wwYA-=&WySS$J4;Otm&wBAW2g`>@wR-Dw2T7lN*%Kh>nZCB-Zj#p0(CmC44R z9cZWK-g-R1Rg~m zTgpAoldG$*K0>QiX#}=l#g&&$R67gNdS?r)HIR-8yAjeyWe?(@mj^+m72{Q-a6 zj``T>^yMASJCHmo7z^RspdQhnZk?2sE=swYK#Wi#o$_ZYf&+?yCbXF&pgtw*?n~FO zEQ4Oz%MzFRaUHCZ*A#NYIf|9&Y~a^V{nkr$;_=xuz@>>!VKv)r<}+%C$LHQzS9D2h zYy0K7P9RMzK>s9Ab$nV;*+OKVCL2F{ zV-TE}r%E?CG}L9oneaPqCNE${AXecb4MBdIC_eurVW|;-6 z#ZhVw24edT7`F0qSjfXvU{Hyx2#gB1A;fA4Q20lhy?7H_-@`p_oVRrDB2ci0O>{ce zN7GpyhPcWkFDqYL!k8;QWiLVxXNB1gUeyTz=d?;bE=AozgDjd(F#35trg}tf#B_VX z8Q=NCKUcM1sLAiVB_4^|{nh7-*ge(|k-#mR2Y%OjsL>tIYp|O`jA%zbEcMT`oB!jT zt3-k8dT8=OtM&cWyu6^l;Pe<*!$%(A3ctq1CyN~WeqeLu_efjItz>>u)nAk+vCqEQ z%0=`#qjc9_F)_cjEu|Xq(#F#G2hQiyW>9lIi0?uLzK(*Qq29N;Z@0RvOikCv9d{jA z2i(6LTn)q37)$yM8_QlYClkrr+VaPp@#2r@Cm*lSSg4YM0@{z8o#k01@9y6a7g(V% z4{~f8*RbP!b;LXLd`f?5TYWzrw(Dlb?MtXMt=@qoWR;xD0<`zxTeXgPdR`uBj|kDx*(WB9OG_fDpCR*@ zh{U9WA9xPRUz|1R;!-pItwHmd%}4}0Alg^W84JO+qb+J4Q9BTwThcuAE)PZlbiGuVKVQj)nMCw*8n>Vv#Jr`FS-#>0=reP6y>ge|ifBxD zWWe=X#ySq4R-U80j5ecHur=%S*Yw&)uvpJAIP((0z`)SZ?XfwN^u#2~JFVKWKC{Dy zrZAl;lD$X0bb~-7AZamS)lXA@fOA)N=j>$CA#%h-8F4EsI;T3P7D7SxyFiD{6|I9h zZPgITt%U;ye&i0SxlFY9d<$1zjz zdnIOPldO3hGpa{v&lYUMfA^4$eex80JoHjeqTu;o*lOn0LN7Q`pYnqU0p;d3>ievL zIXr!3mT6L^DS>Eupv7VzYR3~(V&eR`(dzMWN!z7W67l%IPppU>WCD?qT}Li4APjO{ z;B)p{XjWkcwVP(@AQSMHjBjRLAYhnp$AeUkNMSQfV`MSG*J z8o)tPK@fw1Ff1Ooj3ez>4N?i8`ShVQTLhif@5*=@1z)ZU8kS~5^=uO zz@hON?{9a89QZAaf}k>qa^=77)=?Yh=i^(w%Tkq<`@jYc9G->8pAQ`vk@43mGZ&Je zqYi`~SnfL-S4NO+_?N9ia?aR*^FhExOyAoMRQg?a!mkt_I>()Bcx;6W0C>R#Y!$7p?~hwJtnXV`@G;%6iuS z_h;=^bCi3gaKr5_ONOTtE>1h=s28c=;z0!QlHGlF)cw~ATqJJZq-N}YY|S$5K}nvMHLve6i# zanLpoR>kYTbaD-Ufm}N*(y*#mt5RwWUPg?@^rKL7Pf7t>RwNBXFgD;zA%Z?R%lbPw z5#VOTV9!vVF5=j4Cn;Bb9&2~kLvRobV%QZWEYJT6Q8hd&wc*Wdbd3Q9v zcwh9O6d?7BUoYAjuNVhOdjVeIiskdHKeLCJ zz9ilMo6UOu=419s*+n2YdwB;iQQr2eqK5>ce|?n+Z!EmpvDR8?;SS{zEZaZl3c3WJ zt6ukHNblh6C!nVJ0?s5Td<`*({aPg>_D5BM#avSD!Y5j?gJ0Ynx4$T#wayn@0Z>NR z7C#&)CcAagnvP}YSvV|P*DqE+cjet7*sQG-*gk7}$S1-0Pn-Lvna@5Qenq=%N45SIE3uh@}|{+cURN% z;D}9>zATqN`g_+wtKon={70=F5UEXLHUl>7Pv>N#94b(=q8GNP%>pZkyodxfUT5su zCGx7xy>iKW%q+9y=F{`pjTPW!3Q!;*h!j}utfrb(y_U$r6cvZXdwBCYIyxk`$fZ%Z zBVt$=2<$Upf(GZPyPPUW5K!yRA+#G<10B}Q=D?S{31%bPofX6-ZSI$V`?G%Yr$eLA zIO(?@lt3pK>3I<{0=U9>myejJolFmgqQmG;R*j?NbH)f`%g_|#J1{E}L z-+r`B5FzjuK_A>l8a8QP4E|Nc4UU*+{F(TWjv{r%{_yal7qEV#U%~cBGdi}m%4z&Q z3Q){^xCf1~c3-pFlpn~MealauxX>gMMcyC0s@2rZn5E|bau#XT5l`$ zB#5z*|IrA~NO16H|H?{c2%oL5$$!=9r(Su0C^L4>wC~ti`egt2v&a$m5FLQn_kU|X zRxL_kli>Z2Qm&Cd81jE;?3)QhJP$cDRy#$T`sI=(voI6+f8@kO$|XGPJcQWH44;{q z+0!2}&qvG547V{B`fWD_j_rf?@sei1uMht86&q2Wz!|CAl}W|(b=K*4yTAVfrNyI) zH{N@|Dt#j*qki9?)^lm!ZaEFAiqc9u?H6y)2Q?4BI|vKQ6iVq zGHQcHuwL5wWF4#HTJR5;Ym8LF$8B}{Y0C&Os%VYIVg^V4sQ$sg+;7Hd%%0|WfBA2< zKjdRpZnP4tTyIN2zSjEWsL=~tWhFG=4b!E#4N{J{?~0Fb5`6uNkEBiyTb2m%6PUk|gbhKd&(9w>_KKnkJw6X!tv%6_A2MRj#5bH5KMrgI+xF#yYE z7v@b`rA9Kf0D}bwok)#3tPtuL`BJIHb$qewk~4(cvi9rAN%OEFdFqaM+@9C>D$@O=rAB%TsSQC{ixqMq}uz* zz)3(!g&|7}_U{T1|C@d{Xvr>I1Aqp(N&nM4Ifb|#$>j;5+Ui)0kTN_T(vL_-{3KS) z-4%D_1KREdI`|n?mvldJKHv>&xOwteCPv_169o~9?v_5Qs$r9R| za6U-!@@boBNWsx1njeGW`nllFV|V+P8N0gh58WRmk_7n0>}iWydY?O`qk_RG1br1p zRsyeEh=uwtc&4yWN#cM6`pKbmx=imiwE`P0cd|!qN=69sg%&^q7FGm-Fslq2&8}Oy_-(_UfNw2 z_@TET5m8Y~8=Jbygg~i3#2*)5lHxJ$;V^i3c`ybHj_wSt{)v6yDt~%A)DIzV$&t_X zm6e{vH@e3#mYN zr^}LCO^%=)LjIwH9TVi&7j}a4=8zAgl%N*Q@>!h$jgkkPpfp9mMeY{N{PTZ1CQGtP6v?$5P24 z1;KZe3YD^L>Aatwd|HFhu~j^lqTl(x1)0)fCy?d;F{Np0G)il8(*@0gUN9@Zjw7D> zd+wA)zHpIfT2hFs6nu4cwTaDYcusyGjz+mrF<9`!faa^K8P+YfFbJZTBmiZNwETR@ zd@OxTBG1VDqV67)dCIvZvmANWH500;A?8)go0kCtGW@O*3+3ls=1PF zZ7QAou$YWQ7b5JPS{OMz{XlfwcgnXyA^0gn+Bze3C`xR|_V(%?x++ZVOZmpxic zi6jA6%v~`tW;rZaY^Q^ZH0`Ubsec1ofuD0e`|?xUBz#m(>>|dTAbryA^t(w7GoyNh z9y)43P(&0C4IP9RU9;ggq=q ztP$qG`3lOLS!k212ywn#XFRvSQxp9PIeMJ(NjaF1UC>wM&OFS3RgGBfE(N5;zzJ$o zHIn;R2$6#qQC&O^Z85v4CUSLms%eC^Ak#TI`dOh2OQp`Y92zoFX6U8vVcs(jv3f&e zKSdOU&FR_ zs+H|2V*GgZaL;u4*1kAJc^Sw3YO&-%^{CbU24}MX-DnT2JiS1j)9?`pN*fN!Xqz7F zxdwK`l1TeRBh5MWkRFo{Dg;%ehYE~HxzlZfSdM#|^h>MZIX`C(an~4Yz>9{jA0*tj z^G*cX`@xaYVe!_(L`nM@g!$^^#wW-SK~3{dXhw>0JQ|}h%mgp$Vz(}y!$OeHq>Ug| zHs(46T)_jxK3eq|5pyGjT`j7;w0Gk_rP4yjv05MtX`*9+ zA%XmT!};oZBO)tr`VgeZsEPopz$PtOxqTd3J_Ty7ABSAi8{$j`5*M(S0^!vtl=sZh zPT2+B>?ymxbxU`3{vyLnyG|wh<`R^x`ne$@wqg?=)BzDzv|K+gW~HXN!Z2e|Pt)Db zvTJoIuWZO$B7S-%Zye}rkD!_?S8ODtw%76w{bz5^M%FC$8%wC)BlYF4fXX!{>fEjg zWqbfbd|=j;mG;@V7U8r9ZsRbdA)J_r$-T&C|tLs7u<%#vhlg}d=YGl z`|tpm=KG2UDj|EB^u;ypl*2J2=c&_wI&Bbp1>F^>1ziPhVy>ZwoTuX}*? z#_cj+SOVx4KYdUwiNHKOix32g02hHao9M^2=Gbe_$23z}WjtB;S?S<&zr)SnElF^_ zd6X_=!u`O_oT?A>nsk%ygvd%HsaTHK3N zyMQDCben+|?T~^u#`b&m)%NQirXP@|5np>Hj2;5}Z~blZiSGxfQ0M;kuxa<9B5J(^ zw1~X~O`FH={z5|yfuD#vm-A59s}$%#FB}i@qv4NsrV?#OL+QUnK~|_kR6IKw^(u|} zwbW1^ThCt@-h##y*ZCh;r?|ef7lJ@)8*V};FjHK+v8s3L0%+Ok&Fs=^0KLrmL6%SM zK&u}p5vR}#u>ltalCBdS>R0VMWaoICa3rsDmnkIl#^GjgQHXzw1Uu)(>HH@M_^Ugz znhOe#G#a6&KS#@T{pNSt{#Nbh*nFb#CyT_^k6-3qyuax)Zsq-iityD7Y{T3r0qI3x zrod?4f@_8O3p5~ioV&6d0n+K8u8KygkSt8;v*Mg}0m@l)Ok8^)#gtbj zef^C@r>1cq<~3$y442GO>Q7amFh7SHVOH=DgsQsw z&+cE>Cs(y+ujehlHa?&`2R-Zo$L73|m^`-|bzhJR{MM>%(gPNhGo4_@S5u9dD3C7u z+u!14Xa{WKOX*rYAY7O6LzocoiI6zzyDlxKOsZSSBY{HyEV=kWwJ*PF6mvA?_^|J2~AI?!D$YMKL+V(>eJvZFTq*#tG~%&ixaV z(BUt>%0rO1BEENLV8!IQpFD*VESLUyk`YmXdfC>E<@dsXt4KFwNeMO>&xgRvuu^>E z^>dhrSH6>UZC!RWn2~VNZh1T=@f)Kjqwb6~+R^!?;Cr~XRJpGf8fs49C-QuCp`Y*% zp8kE1-?8B@0!iOu%h8CLR~-m%?X8kt4V*Ev0z+A@uCF`$*O`PtxIO1k8W9uc!an{L zkMbZTkDvDdIC4rfCJ3O;iwC{&>4N-aBd9>DbIL~4z6O#zY$7zAZ)m&s@E|UT8t?G}Dfq$r3>|?j z=?vJb2HW@3)tLb!{>hJib0;xLkS~NXKd7?&R{s!--XwPIE13V>PPcdt19NoL_YYJy zm;Tx=mR58Dm4|Sv)jw%qZ5t()lPS))wG}po+Y(G--5`&FDEZ|BE0^uF-Jn^9KZ7x6-}jZ*{RovYZ?ywU*8vSg z;c2Rb%NL&)U&!p!z!Q%i3>IGqZX~{HNcnW%D)5awCXQCH`}Dx*iHoj#_yMg zsPETIZ{GjFdT&9RW?E#N-{9Pr3G$D>ZsDxIQL7AwT8zT${cLyRt3W5AMWpyDupgFW zB(h5t92!wn)_&q?myYp0Olh!5ld|BleoI==3LSv*A~IW~ z?Md*-tJpnSVI)U)}4w8v3|2HhVGAElDS}kF`KCi-$mUcvD6|*Mu1Q;^1pI7!-CzR{- zo9k~-!9T;H6I@e=%L-8J=SNfAikhsvq`!*&wOX8mD~3q*eMFHj^a{h$gb1;tW+qbp z61V-Xzn$fRo$S0N&t9}BPSRNX;@rx@%@lv$nBQ{K!>m+q_TQz(C83;!80@Ceqb zG)fhxtcTrRjWnbxB=6e}>c4KHPBo0FmII+65B}3j^&MqZ{_! zIa3=9f`E(#Ga%Z3q_az%TR|ttjt3!trlyz_t~I;>|#w6;W$s{{FM)6x;AAR+jfSv1O^J z!BC8Z^^XTr4bZ%A8Z!o@g2R!lqkmZ8WM5UpyM%3D5`cSKpt@(eQNo7GX@UnUi;7)o ziD_#P>3Ts}Cz`kLc+O(BX29rtOTo|^Lr@L5rH)FNZR9c{&&Hlb{p8IBOPDnfx_e#x z?UJ>ne$h?;d@Quf#2JTL`OA@H-MSYWSYJqF3snvyc74q8w8N)(J%9Dru~&dl^uhgiSuVwgCzL9aj`(=kM{b5NjSvahRAS+MhD+%HPyp(u(oP zS!Kx2?PyI01}th6es8Vm23F9*63Z)CzaSx-5S&m}9r*oosjg1yI^vLj?zkC6c)tFa z0SE^;QP1{;6C0Z0E}zX`&;bG_GxtuO>1p*~&cwQ*u?3Qc4$PV~F+BgdnuRW=zF%Sm z%6`J#lQ&4P)X04XhpVYDR)g?gIa@I>u*IZ*@qdLWQVa>dQqfY0;N|EMz-au&y|yM2 zpVfTstuXk`qwwo|IFlFw1%PO2J`1r(`Q!xSc@UNBxRou^TeX3V^#d;e`e$ms?q zF}oF$aW}uKwFT_|m^lCEI`JN-?gi}@kaDk)MXMWfIX$d_db=&=FZovphXo_1iXu4h zDUPVH*K5nz3K*lhA!es7M-Z!}@Gmr2BO#$l;aElX5132Pxg`CimDc1{PxyY14}j-g z1I|M~fGNb3ah$tHxv;mU&k{hwhqJiwFvA0pR?{&^lqJJh$xB|O{L8#Ca4Z1TGx|wG zQVfo-G}DPX%KpD*0w;(MuVmG;Bf#kQOTy1F4wQ|ox^GTCpAo!1L{=znnDsh?_u~3XOmq=#Yp^T?s z%*?@x7T$>h!o^aF`Xe3zg;}sN{YIE;2c>}ii1x3qP&*3&4?y?yJ;=z($xfar00S;! zYkObVUA%yQdt1sRFm?EgXY(?D=q9n)CuMsDU~oJxpUiM;fdWYaqhR-|*t~)NBGS^6 z1gwHLZWM``|4{^|iUH|b@LrEX8Xkve`ro)lYw7^Ak)4CH3Mh#Z^mxQVHf)NVmP$so47aNpX4ql~M>j9=`dASLik9BN`$V za2I&*cyfOZBXmHAJgjD%Y5;M)Rf3Zr4|2WgqTVOc0rOKbC~kzfn+0r39bY(u&qr!6 zV}0);hR-8?Ps6?Oy7qnVdE+r%H;2=c$G0vB_~;*o)0QB6`3}SwYB`GZQGYx>9zI)b zO)*cN-@VVt`!e#~Itx0xa04?3Dg=_-)QhmUsP%t5T$(QY$N=eO6 z7>Jnc#yFuC=`EZjWVEMpH^QywB~bs)xJenii*mHdKDb<;FooZAQX-d2E_$itk?VBUB?Vd3Oh|=4`6wp`b0vU;g)}T(PfJzpUt7}d!@i7{mhYIbd|-rW z1;%D$UD$;`jk|TS*6Xs)GY{8nBBQq|ABW?Z&fn*OC>QsaTi3#RjI4zP&G3kb41G@${rR%X z_k-)a57R0wFE3F!U+Z;;``q#oVJtYCKAxWTU*6vCPUMKyY;ua(l|=j`l3)e8qWgw;!z^!_f8MFiayF@aa9rfQWzG-r)YcrcKBBW9+M{D=*@R zSv3i?7GB-4FN09~e@ROhH4nZg!d@JpK;dG=@f||u-4FLGj3)mU z%Ul?Hz6*cjy1u_w>cRS{SW13x6-n9|`fFu6k@V*N35iU(W6s@U4*U2cD$AHGE z)o-j`HW)mab)rSQAQLuvYVD(4c`0(SP(4=>X)6?Am%P4G8dx&pT8@Fq`c% zG|8eljRQg0l(F2#@XLYj=P%fxPgG%CJGOV$A1D}! zka_@`m7!uE#0QQ6cnoenba#c#M&PlrrG8ycuLG}Tphr4ifwwYVq0iyZ=FYbrUJMPN zq2@o_#6N1D^4j(m41@TrG(o|Yyoad=`}dB2w8P{(LQ>Rcg`{-oAZI<95e3h$NVx^!TkqE3S>`3YI{yilKS6EY?HmgMVTI@%a^9w&;BNl zagTW)_@!K9^ZWes@>hf5t!)qFeqwAsetu~wsZJZt>(%di;J&F@Vj@aGLE?zssqF+{ z`GKG!4Vc*VwqO6fcKl$h5rbu9Z2Y*Bpy0vxCi%rZaBIsbx?F$?5NMTtfQ$2I5M%>P zK2XoN$Bbyi2f`JAf=er@hPaO>NQ|9wPvdKQ?cKmn%UXak?8{QrQj*KpaxlvQ>2X8Xi4 z^i(~o8D_#HoIPp&+LuF}vz!D1LZPkSpd`g0Se}AUS6f|f@h*G-$K=olApKC(_M3D2AR}JO=gOu}>48uUZOFCN(tY)k)l_C|J_h3Z& zkJl@0@#%>u;fsaf*SuTzPLN#VS*^XNoS+KsajVK0^5DRK^fGp!>U*Qnystsj8Y~=l zJwX2+H=_HQyz9Noepq8!Tq+*fKFA+dSjfDV)qWOoW#4_XB3VK22|O^y@$*#g8*uTu zw8V(U#_WI*_zD#k^@!0+NgVH_EE)eq%4X*?#w0T3o#X9`pN)|GzF{(yr0Iv{aNu$^ zMY!gsmk zA5yyucJHE~(#?^fKMoMItuKJPUV@Mu;1#B%*IAKuZhFuOO?S&mxOk1hCD_zDjBfIg zms!-oZfQo)*}=5raw&d2rC`5?2SG(E^w>Z09m#t|+Szhu&bMxBBuAcYiKU9XhTf$q z?9C%eNfC;q*l{1WaydR8WlF~$n&EsOQKcS8ObY*@I96X$-@TGxs}( z;7TAwAU1m`J`yL}T7}g_5*{eZ|FsuPvu1ok6;e_o8oJU6Bl`Ij6eK=N0s9=MQY1c+ zmH(rk7Ja`^QF~wXBG%!`6%cmVV6nRO=<-fdG+z`kz4NJPw}umHgoe+qYYQ&k3WJW( z1R#X8^eII}UI!{Bw@UbhPRADmnbM^#zmu$ylUqFPeungqFPXMPP+ye{*cCmhaf!bQ zb(=0d`}DuFz;IO-)S|Dzz-e3@_i(kS`qQiHGWC2~&tmn_IgI;HVZkW)4rlZ?){hG3 zh6j2n9}NM8z=5LgT_o+W0$yC`8emZ)tC%nb-&r-;_(PonLQ(CCeb&^d(y6Z!PDue5 zLTGmrDYr;hXpgyMGHgAwgSUU>B_aH1LM?(%; zNaX_Idyp2$&W834iVXkS#S zm8n&hvT4YEe-aA<()^G|522z;7_*{Q$v+{E$AFcq7{>cY*#-2oUx?@NQ>nzI5;iGb zic^HV=l@P}e|KZj735`E#Gv{m@Vz2u=1+pZ=H7PHzwzvtsnmffCB_<9WisxCNMsrDI6Jxym|g{ z6nbKc;EGZIV=II+Ip-qid7K+puaxTuhytq|PPE@(|CmX4y;CWN2%AKb|N3FZ7+btZ z#iRqh+S}z@GuBL8!XE0x(MgGS54Q;-_r65L82`O)hMq@z^(Gy9i)ME6Varx!Y@!Yj z&=>(}0rK?~h@nn@NP3klBHy+VV|50Dy6jEMho^Iev@?0#`-y#C*Z{(vv>cbNM@|3Z zNEO%Opa#k&q3kwOZ*$5f*2>mBlZo|9(=h|s-=#2(VuCC!hWrzOKl}@G=WZb!75Rv^ zy55=~XW}k?<0gV4Bh;1*Doe26$>L0<_H>1@foygMfuxP>cV@B0|NdeRtBQ=VQltyv z`)l2G;pY*LHeCgQ2^KNbR%ac&7xK#`w8i-wVvyz5Y83oujI^w1Y=ST){BJ7)91Ih? zWS9c)eqZz;z*g6YK&qeWxYb>lGB8GxMpNhmC{od$WZep`0-jw797fhw# z2a535`-N==?K!ox_@oY_iK&`m8<{K^V9C`Wuf~_uuaE*qpqz#mNAY%;7N=$etSw%R z*7A{*F1~4-Z=ctIZe3CO9>l3- zNB{fucEx7AG+~C$@{VWAFYVOmpmEYhhuyBCMF-dQ4EWa%Mu9#!^}!)_>V1lS2`coh zbJ6lXp{uG@Z|r5qm&#Re{HSFtVTkvOJy>UKkK@VtMK9+>pq^!nDEP1Ms;I6L!&~dD zhzgpj_C_p(&vf@HY56hmtn8B>XxZZl*X~t%wp)iE+vYVD&Wd9EN~gsx z0s72TRUiK*jcylQjV>zxI;|+w9>43E(C;2Ib<4ja*BoYvoRu$syxWiB9_9!m(i|WX zTSW>Kg$noqUSU7IHhQhHaqetPbaA3qIl`y-5}((|{JQBwKrtJ0#Si~}iM+T}565d& z)2YP?-&27+GMweNrqkZmv!#a4$H=R2zh^$4U=jEn^I?K*!0jW8)F;aMtXIBOl|(Lb-8HJuBHEAp~orpu!vZU>?AGG-feYb7Pm#c%);rAbjUrK(<=lj*zXoW-65*4Bfq{aZzU0z2@9!7f`xZa=E8(|M z?7!hU5AMpIMlZQqC@~!G1TbQq^3Bz{mjl?CC5-0vs?2Sw$8~)1-G+u8h-UIU-Qvc)~=;6S+~tbWFgTL-W=p&6W$3?`Vmz?m=V>iQkN zDxz4Ia~Sj0(9xgZ9V7e*J<9IVdQ~_S%6*?zX`RzivPAoyIv|HSc3&OW${$QY6B*ZE zI#Jh;NK0`xQ7Daqoukt9Ga25iz)3|DicKcz|CLJ2`xxj$OOk|o3jIsQ09~fRN1Dw1 z;kEJOYRpM}1GfCY^?q^N_*y%CBc66u*mNuSW8IkeZrId-eM*YAZ6x+PZ>7r6-2ldQ zhVrJmK+}q9tC$7+5!5^Pq5Hk^2f(i_ej=423H+x#n^fhNQzphZZ6^hnwDQhm`UE}0 zv(Ptw2)f#-eboYus$GtaAkloVo#TMh2<{qIh%0zXr`@aUUjA&e701YMV+~FMpKLHf zPWVNCFLI3is!PKbS0X$JR*-5x3_BjUWsiTG^yTYzh{IOL$o0wc59SeiRbU%7WBAmG zA{Dm*Tt*Y5qw`7`mx3(&ZoT|)HlTH8W*3xgZ?4PZzdqe6<~=bejbFi)Y^$xdrYedV zi;57!Io+CEWQ}cCI$G_C6Sq`6gMd}ZY`AwO=Pa|Xt|RLJabTBbY!xXw6)E!Xbof0E zVodn&)1Rd76kM`q=dG~60~(R}NoP?B-a*+Hr~an)sv)(Ia!*pwC&<&)tNqz@)*;eVwS^PbF0##V ze+0P9YQ*ob4ZRWK;;gNqY*@<0)Gq)MQdVzs)Z-bLqEFszVbXBXB*t2d* zXgYvxFL!S7>vXG+{E;d8ax96s43p7mgECHw&us`FAC}=56~@^j>>KgvJdl?}eCOTE zR6ovZ@&*IFAv&pv&4HDD!{7^Hw_=^ap!GEQB#0p3k@)m3a@W#>3 zQqWyqaO%(PK5XK15^?jy{{>tu08oE=!a8(QDi3+=<#*Kj(1d!JXa0jsMZMlfV|Stn zMo9Dw#!_v~n=uLOwU`;gK(FC}9S0C4Ka}erOHLEGiFH&6boj0^edrEn-K-y1V?3IZ zlZ^CotF7Txq@lx-c2lF*5;0Fv{wY)VqKvsz;Qj2O3k>BY9l@{RQWX~f3$&y`Xzzjx z48f0dDBVb*NzKi$wwYJiYAp10iN8(&GY_P)uzjhdJf)4ke8^Mwr@L}Zuo>Y_e>2+> z@ld3QQUz?1kYiBk;xG!(4R~pAdnJWJ+wA>YbL-m5k4nW-p4+=iCx@2EA4f+ zvn)I}y%PbSXk*n_56y*vrqD4xXk9Fc_I>)!<+RWK zwj163;NzO;r57KBMF9DPbcduq`IAh z0-BC(KO{vny~F(1&Qt2#;_Yr67Y7*#r*(LJXs)Gcmrh#45;zDuKHY7Ajo88LT49>A z4O+=0a1#Ykih%UO50fMGIkI+xJ14NfyfebR8Hvc}s7?g3`Z8xVBRQ(y+t}7gJ@#$MK=+punW)#*^ zpBLC>@ty$i?+>UI`5a(zzYZ`zYwGDKJn;}Ad?~Ry3!a&`#h6dk<}ueLZze_5V!-xQ zI4M=JQC+49{1|^G4y!aUw1Ek4D+IZX7n#_5pCOht7YCiGMM~PHc7=ltuI-%!5xBcY3!R0zGRJ|8v4vyuvgBUb`U@Zv0LP>p3ucR7bJRJ~rwM^R;$ z3{(*E_*-nA#uxMar~tdvvXx45x-0bl+2eg3b`;{*&zkPMX zYWXPs0xdh@bO?U!JX#PYx!iHHM`KQgfc`h~Vix%}X`QV-2C}%e0fp#ZcQmAy|p{**f{B9Lkrl8I)`7wZ$ZKI|QdcP5+ zuTAAHuiT{zOZu8~wdBEcay@RQC9)ra}~ak zy&f+&aV%6c{!PM9Sk1=pxNHQqKEY950JejJ!|}r6qH$$)^TJk;HXDn2WdyZW3Yh@H zrabjMJk5?M-w?yHc>pjzd6KBokc}iiejU(#<>P6UmuV%Mxtw_)kY{Ciy5eM;rEFp# z2$xlqZDs8|Oy!i+)WpvhULNC9n@+Bo zd}5JTgzRRtUBq{%Xp=^K5~p_!69~mMPdFicfvTn3{gL=Z<|Q{r4@&Hy*Q+k#ir{mw zDO$E#FRL2I4`(Q$tF8H=o&Y7VF3KEF)B!zR7YUOvU7-y5^x2dIr+rEk|7MI3g(Qo8 zsdIXns_g>7oemO_a(SZSnVI&Jw^V4s?F2%~<5RS9TFmCV)`^0)O0u`u!g9L$I%8J5 zlSV%^d$^z2qsL0Gd`&oketh9BHTtiC+Mh)|ZcqMSJ@y&7Z0VEgdlRZa3kQ#A=8tj2 zDsKm&dr12|EF;t`XQeQgylXJG_gR4A%eWtSY3>birH}umjx!;&N9Egi&sefQ)VB0x zUO;%Le>&iZTxS0|GCrv>VARecZ$E?BBXd~^57`48npa=>c2|E8POoD)g)Q;Q$PCgO zP|W+QGZr+)C7ynzF#H2}QCbbSzSy0$0i{1#V5n|}Jvu^>l1tsqfT2l<|G6v z3Z)q9bB#PM{iZ%QFKcIkf4Ymun}@^YN%-pd&dn&8S?u^3GDVtA@9pcGoRst<3P=3u z$N-LM-7BkYxe$I@d-NVglPWa#hb;}()6;8eX@Rki&-$T_`~X=dDT*83&I52e^`aab zavZR9|KO0>B1h?76{SuTLkh}Hvf>ty^EVf`4bxs_A;=j`tAwE-HO&%*8;1uZ0+ z2#EIzGK^xRiM~UzeEvqZhnP?Y&Q`s}>L%{LVLV3p{EWMdeRIe^&2bCe&<_2hUz5JI zJzN~Okv8Urp%K07zWet6Xy%LCQwQ-@p);3bh!`Fq4P0Ga(QYfmm)n7#i27C0CCwh%UloZV@ z{yHk+;o$?-%j)c`q=5mMk&%(|aPIW^s%JT{N`(4EMk5|9A*F_x@r?-$2_dLgD-`bE zR-BsH)%{Xg3)a9vMG8LWkPQ6KUK|X8|L*`)cs$g9d*AKgAke`MLkKb%ra_YbcLqXV zf)r}P|C~${jzj%F*O9`a5&w5>9Mmv!$w1)0S8Pi6L4=*rTO_cnYBPjv497Cp!Xs$G zR@%tz?e|M6=VcBn?8Tl^jRQ=^>F6KR2(0u~8dL4hR5Box)wZ_EH9Bt{NjyH=<5n7_ zR`5N-t2g+Hl+SUzeYt2Yf*i{Hh8VX!J=^O)zD?_Td2J8n%w9Y-8F9D<;O3VIVqN5m zS!KW>2?mZvEV(zI`$pNR+#2rC2V*If1`m}PYJHL}2B8|eQ2#sOXIdR$RuJ??ZJF&w zk2~<`3A~33F1j-g;f8ze78-4{+5Svg7-i~sFqd#z85CxP`BUuN|k^6SP z5#vh?>)=5`!ana&{u&eZ6I5=Y6-ly@G}Vuy_LtBgzBZ}mj;$F;rX12pENHr_jR;U1 zOW(7G?R@oDm*Vq%r?(&E_&?jOCNQsTX^h3wNgs_w)(ip4`cHHRBHN?^ zTezc-6K{bC{TyuZLsRy3x3NG4yZ@32YD+!#t-elm=M`2OoBuhe2jATAhtNX4hvF2# zE4rQBYUq9v3Nlrw*deZTTez>GZEl^O{iHZlUKn!r>;AN_eRe#N29A8V(qeBI2Ww{m zPhEeqzuafVU+T9%Q+6F;#s{sbxa8e&GADq2)n95l6c9Yv>Pe~cXH@7A=u#lawP(&S zSIN~!xDx(b==YX?ig>JE@I!8Dxo6^%f~ETLCGJ$UnSA?zrr2F*lq!>4+lu-1FPUkrJexNLubO`@Bf93btrh!hs=B+g%`Q zHJMqYihkR@WJShv;&jCCHlStB^_@jxdj<(yFA)mq!}>g2kFuSKat?O+_I7!> z;1CRlGlT>J=Pxh28u&t}*0@yJ?J6c`@>>1HhggxU;eJ5Z&6285n63&7E^l1y{9`95 zzGg+Eq$1^x88gYC_--$MMi-YhM+Gb}O;7_>hN|$8>bA|j)A5j|x$O4~BA+#8v+AWA zCZ0Zws!qCbj=8Pm#GkJa^`EIMr5r@`-4!-kv>73Au0MFb;xo_*9rjOQ~{Rd1(NQ07KzO4 zg8DZ}M8mFy@~U1IcSIMa?#qEO#(i!(3mVp6V{&gkq(vbO$ob-uk|?RjM6xIyGDZ^< z9u6!=@u?EDUUZkktG|E8BeBKz05AK|5 zQnL5^n0~{X6Oa$!>DiEKSH8-=^dE5=yf4mMI?8dvo=nAnpFU&t@=slCUP+BYnjj~U zlxoV05m}Z-@pYrFP4nEqxyua+vlhvlXnrq!oJsN4E8jaOclFqTRO7dKfae|w^O&`z zZBS%GjAhB2mJ84i2DpY|6GtqkBTp?@AC~S04l-QV1Bbfon`4?8R}aEJ(@WL8ei3NX zSjSWIe*eCzRh;kSqK{=wzGZwhZIjmJpGA+I%WzSiyz%(pz$5l8UkQoer`ERm7+W+B z$&?*&XVJ4qD!H2xmifP-lc|hXEi1s4q&fRVhXwB@gf&D!>yP9|8?w}5dOw$fpwR|5 zzdHJCKy!dyn)u5Htv^4jqmv%FtAip)yfB8Z&kNcxjX)2PMlaW+{7`RkeJih=hbr9P z%HUnG;_nwu)=kvSh!lZ_?~`&dY=r$CtY)l_sHvwzkPCC*D_BSdBd16+xr)73-)}y> zgvMrlD>=kT+HikAk=8Jx&w_NYKmAfXBS2}j4=5@z=rxKS(pS?>4i{p{$9xkk`1@C0 z!>pURF~_&kUw!Bm1)Sy3FiC;`@KxhEIa12#xfQI)Nsm%y0TxuQIAnudXJaZu40qSR z7G!}!CSSv9=8?x})nK5v!&qziQSv=pa@5#ziOt^12V z^$Ko?bxeI1w3wUNNam|f+%|6bLYuuv&S;y00us_Was}h^oF(j~K2+-E*_sJ8U%JdA zgi5gEXwYH1V`C?Y4GG2b6=2_gf#Ifc39s|<5A#_y!ppuidq=~RaTJ3F5`19)7i{~u zK3`cJl!iuHXK3O%t4SGuSjt&=eVwxL46o8l{`TZ`$_DHEpz?BxwK1_*{)rw0A<|)! zyPPRu-uyEkcp@IkqffcTYqox$F6fG3KoM_q9B$uQ_G`C7vG=ct6bUdL=s0h*=*w6U zZrpk~Q?G8X*Btj(LmJ?U(}AWW(qk3F6XuA_vpTNuPiP3gA7X`3J81OP#BBsHXP!8g zHuMcAb6%A``H_Fdxpe-{zUtZL%F%f3>AFZ~tgaDmz{!?M(43*k;5tqIy3?zpOQo7b zsp#Ync@nQj)#SDL&rCk=Fwxi5tytH~k}H@qMb8V)4mq4KOfzD?@&pWQ&)OJU)u3+; zmfE-ipVx(m|a$Y|Cuo&IGM#aErtTcPCjSn87)PrNY{nK4GMCWj< z32q_sP2haU5#4Qa%qPdwJ2`os=2|)4!Tu1jK;!Y0v6)Bs z7~YM=uCmQK9Z(T_8v4p7iHcCkPcqOj_s36U$*3qa^px6xV^EF7*$x~G3g0nIhHDNO zT0M?dt~{8ICI$#V1H1=2Kp=iUjL~PiUp=mNFC6*paW+P2K#$j&09FyE+2AQWN!@#KET|`fg$q+E_BFK)E%a0)F+;00aO_q zl`W&Bb;m+w=?xXEyMa{Ecb3(PSN>0Mia44%i24Pt?UQ$kgC0!LUvo9!^= zYK*I7e3{=AEaR{oDZ4L|@ zr>}TghT|tu+c=2NetBu1m-FJWELTRPt^c6fDyuYro3f^{lnT15zhymH_GZDeI5~?n zYOenUeE2g84`Leqj&Bxia}=k14JtDc$l(K8hm&DG7!DQoVox$%JFVfNv7a4dQc#d7 zQaFRUj%Hb!r=)IgZ`PN2?+8`%8;ow`;y;dgK-ZPPzj&CQ zh9n%b_s}%n^$B7(VH5r8&s%karP=e##j~UUoAzPM-Ulb&mK2XESs2Z#c74k70pr*- ziI_@4ON(b+-&lWQLON7>+SajT#MS5{xA>^IwT?C0tIt)(OoC|T4ennpt#cIB){iYq zJ|oNZe6s<as{S!vy` z7IE&^=|RsEZpT1vA2a}kXaBn~IMltwokr9~r_;k!W2;oyh_Hb%TbIXygca-9#FV<| z1$T}p;45i*-<6oj(@*TRVB3}a=Zr4RXu~*T(+sa<76~hZmkY5v)k#zVVQc`k*PKn7 zC?jx0SH6=EOVa~|LGaVz$0ZA9-;f4j_<;EnKFyhF+40X#2w-6?Tn%oqPasYubjOCEC#6V$bOUwD>cFp;~ z=v-jZ0}CAOHchWRzUH_)@WCr0%*IEt?8jD&SotrH@yS(Yr>Va7q{`K;(#t_kme-T{ zrGxX*Ws~uwn)uf5Ly;dnJF5zD+TY5*w%brhVhH#4$XpX>Z(cd`r!HIb(9EI}U7ww7 zkdsTy&ED4TZ22%6uMv=J1sg{->27ZjypSZm?>wX?iOxokBpNM71HxrQ&)qZ*{TuG| zG6Ti70{a8Sa52Cs<(;Luvv;*ldM56YGlQ57B5i=IL+D315@+;;v_6OY5iQ4OHssk^ z>iq_zq4Q02NQX5lXK_VE=7qCyMa7OwT7U>~&j0+)dp^>lM3NPbMxj2rQ;<9oa$gd!l3%te zB}~q#S#c0q;8(*|UEGFhll)+O%eMDE_ro>SgH{8ZJS!G}QMnOlBO8!f6@n=X!`!g5 z)JoG!yQ=aweaF94HtLj97YEhEZ?!vkOXMS|0)GY7y~`j77qgsrkMGp;2}LMa?>U~~ zwW3%M@XNG{hl85ahD#?`|HKvC@*zs8(+L%Va>V>x7cp2(VY}Sc9C9b(VmpF0O>r;o z^(Vx0BOxG>YRCa0gM3leAWQmg(b84y{m7MB^r3nFO2dHWl60V`5xZeA=WJo!T`rwM zVq(NFj^b7&Q)DgeRg^5k`0k>ZzcBostA0r{powQZpqCs6JHm4R)Z8kM3+K20FWt*t8r@5Rqc zwo!f6*3j0Qvk{3S^7Z0`$lZ@8&7+HnrwPYd8tU`h4V5#Dn4<3yA?QRi7c{%Z}LCL|_~w7HmZrFAUzu)A=<0~xE;#g)Gm z)HwChy;7SVxb^&C$~`appiZ_KV%#7-dckyTtU=EFtB?uXwwUi{_|I#HrWVq6ZU|~L z=UjdDQx?a4w-Q3rwJrsxSOejgaqB3482<92zvr_c&eXH=-hQctxeu_G*5%{Qn6m71 zC*MIie^TG3_*dND>JvcrQV7RS{5d}{Z8m5IFKgGsgv(o2NCrmuFO#epZ-cY`TF&77 z4JNhEl*3WH4qw;XWB83LwtJ@jwl==#X}*hZ2ibcF1sIU;4mGxGce7UDXVvJOGfDXO zxn#qOGcl9y(>wiV)g<@&{=&`{@w6YNg7`2u^V7*?sYGSz_pXQz2JE9OVR5rq zuHRyklPNa0{e<7}aY=&tjz6q=?cWkNI(TU|l*A2a()9=fInzvtNJuyp*U62Ngs>=3 zGQ>{^Ew0eHZ4NjsuB&caK6{i>yw^_25AzK1lld4rlo%E4cGaM8W)YYI-wF4L*F{fC zAe&OxGL>5CaWm+3yQ(izSj4m{(ZiOlX6w13sew_WANID~Zk&kju%M&!o+}J)GL;vH2w(iN9T@>E63I3E zc;7(EV+sW2rRaD-m(LtpmpZyCi#iFPK7KV41ue-w=vr9$As`*^fSdu;3j``Btx#|h zy^@zM?YI5avWmll1_~GlGH&FVH^~%Exnw<=sBIiufu)&*w@dIf zmW=I%v+Yh7oB2VLYZHf_|5R|KwUqU$&^_p}_^u+?U$sYt8Sl-Bp;SmXHax{*0I+wH zq`g(x-H}SZilMI7uroY>7k{>b@YTjJOrO!C4J-dw-UIpFr%oiL*Rv-Omb(Yd`l0+A zo~tLwtp!@);J{rQW>i@jwlKyF7tc&K;Rc4Rw6unQNg%L$x_d}wIVu*tS@&7z_!H8I z7H&nklPpz1b8>+YQ5dep;a1eeB~T2*ywLdCr}Y+ckUC{)a&GpomMzOtJr=7nBHP_Q zU^C##Nw2#{GA;l5yb+Sv+J1f{{pjg3wA-OuN{d<(C9dVb^F&?E2A_uh=%D#)zDn(G z^SaG1E8~*y zkexxrNM8~4rq>TN!BJ&QQ*cp~+u!yr@K(neBPl3lBtFsu;Ab?)7bR{?-s;@6W82&) z>UI{%K^D}Qmh^%|Y+JM@ztBRAfUjAIk=zgE=MG~XBUk(EZ{H^0sErd>ezwygX*7$b zm4Jujg}!>$FtmDM(*np=XTt3||J(cWc9n^tOq^Zah&H2(2_AdGdhG)yM+s2-=WT?p z;Zb&m<8g0E76WSs-YtBC-pRtX{AJ#IT@W<->_Mhh(<7A@Q!3U1$cN!lVuuA{SzjbHibo>`nJCGY zg%F^(j(OmD4Vwj}g}YD(B6ZS|5Mz(+v{2-Y*~@tr(8cG=3pus(Fn#E`lAj5gzv>K+|9zN`QjEz zJYh47(I+im^onecI_*YC0lRtbtx5Yt6ogheUCyg*4V(36vf%xm5SlHs_UBT?N5BTv zp%mTEizKmOlyqsUmcJ6uncbDa{P)wEt1Obqb-*J)^9sMJ{OxncE4p|P8sq`r4(#0^ z|7jukaa^s_p?2uO>(gH$Czh~?K_x=5skp{L=(5o?M#z-1>!UKMvzTya>(b?vt#8ye zim}N9#xCK#Hq3hC(+#-UUn?-E0i;8%2Ha)$Y)#KL7;=4w9B=2{v5b~($U*h6jA;2V zp8KMPrKYS(SlW||Y_qbc<6l2Ld>Jln2?c1svdMc6baihnvY6?SkZgy+Csw`uqYlfT z!TyO<@?StXJZKHM>)ADR*e$-UOOkq_Uw-y>8cljy>=Fu9Z=|q8m9nQ30i4|dPzxU} z<4B2O*&o6K;O zIT%0boS zS&HAbY%R?3bp=2?(5Sx)=Z-d=9{t@mSE1O?wnV7gn-_J=!2?QEp=G1-Rc?cnC^D;- zCLACL^6T638+Z7xhYLt(=9wDiWw5;WPb3PPRLc@scgUGGM1}q7k)}v1>om<}cVtcx zjIDB4Vt(&)yrw>?CNBIWw%%o$lJiohtj3A)SKX5tW~d#P9E4Q&!cxVynhUE%1_Ade zHUS8AH4EY{aBEpZQM_%PnK^>YP8a{p-i}D_?#D8n)AG;^cjFp&a_zxm*Sr}xUS(&Z zI3Mfa!CMeNk7~8_L8TD1Yko>}v}O|Y5zj5=N=*>_SW6PqJ_S*jCa@8~j%uM`d=EW( zb)agzXa?rrC#6fEmrtZIV^;pWr_cxS#Iy3Cj3xI1dUCgzyn9Z$sp#81QGSCOOXS@c zQT`S$ykl7mm(oYv9(=XBFfv?b*3qu)|87esJSLZ}ROrxUpYOrLTSpZrxCpd{KY$NT!j4}b zGRzy8To_aP@#LxY8h7Sugx_US({bZvfq+Ob;MGu7bZ5$9vujJsHxkVbQMjiD6-DG> z=cO)Di-0%Wb52PtQ~A`)0`R?pJ;U%a0a2{ku-Je`v|~SDPfB2dt;-eJOmnHTIkx2s z!V4#5x6N2;Oj75m7_jBd3sp{L_mrC@2WV^iot(^7i>T$KkM~RLdYAH7ssL(=fq@DK^uai3V@G z2FvmU+_NsJLRv1>I3Uw!Tqt&|LhmS8H8>&vCOom0F8A(&Rfzz=DkRuR_wlXKAFYMT zhxoHhdS)Wm12&{5YCACGe*F7ouA%K(#foK(UXG~wRz5i1K29{}&;Em#;#7rR&L+?M zH&9r?HS`kQoZWGWNZ4m`Z^I)xu}Nf^DUc7mL-^n=3nbeOGl`aaS}y{@p+UtB-_$Co zxu*Vg%eebXrW8Pux1@NON${D+aIz^T$^%k~7zHMu;& zP5mXsBhG+ztH+P(bi-*sX8D9hT)f!S{F;bxKjQyMqmqLq%XY5TLj3)IZw%NgZ9d{p zDd|_I4G+tQ`hwz>8kH7%vAW-5phL@<*rMU_dn5C~H2Zx9WoQcyO8g&Yp~uRe}l0kf}`VIX{K#`@1G4V8y|!7 zA2{h~18|}0aR3wb|I32-RlNWI5Gru|(*HM20{Fk=N&J^4@qbIaC^UeN(!H%H0__+5 zd%tJ(DJ}v{P^VYU(!V$$D}Y!Geaa3$-o5}*D)FOp4#pd94LYD5j{gui#GSt%Tn(w; zwvrSjZm=;pK`h}!ZHa3peUGN;uF`~G58A=ET~=rRen?I=>1w$?_FY0$@2Rm@htfK( z7C9APjoO048MpV3kDF9A-FRZH8fN4|H$6@oBq(a%K4rHkh9XHiaKN4JUb$=^0_Sga zF0g|V=*IjIcaMnzO1IJ(Y7;SVgNRw(;H+)S8ne%daFk8@nPO4}-s67TJBT{}1n%r1 zeoIe3P=8(N-g#J$W(t?`Mw{n8>yu|ds;a#tu^VAddb23gf4Kxtssm#4@c=F;0@_Io z(uAMguuQmEo|Mz_a&zkiNdDbg+UqE!=1T^n!Pwj-@-`L1qF#q8fh$Dq7+c~Lym`Ju zgYu5PP_>F{2jZXGFB?~MH* zAK}$8v)IjKLEOgJxqdnCt|j=xhJsHoi>Sr7@CBPN8#Q&$Cmx`yQS?W(&1yj$v{(nf z=&&#c9Z(}5wb}bOx9kCydU+tajD7%(U3%da=*_Se6O~XM(+N+0g^7Y!s)>Oykf4y% zhYckfsafSoJLzW_KAuQYn$Nyo!`>jWR)k+LhUzgdKVLz)=-fH&PJNqdg(y%n_GtQ% z%iSL9%p>~=IEJu%48XWaP7tIM%rdYMO#U_^78PfU4@auW441?~8e9HGfe14Y@MD5V zz*`HyXF6trf`^FwK*zPumGj1@@`ZURT}rbvCF33}qSRw*I@fR*Xme%D&xFFqc`04 z$2izmog=rF)Oh4~!#PdBng`=uE=P!j) znV`dqKv9wwSf^i6q=gn;HYAge%pvBc^Rqixz9)Ugp;HhgQ*&c!I&upWBCB>R3wRF6BT{uW&AdrJw@pyA* zWEE2MQEer*P_sc*dOT#5B87mmL!D0_9)gGTtKoOVEJ;&};a5u6MIfGD8?JnOeIg3y> z@~1!kE?fM<*G}GK_S>y%P|c3`4b?zCH7e$6;sp~%F*4Dd;vT>#U@V~X8v(qJ=@XZh zqYq2I;QPpzVkc}}_=Z#}xZP1$%}Q$o{h#J|ul5EYl ziox7uXUSjoUOr78xHoNYZZf0C*N=C&@O{b`le?O4SJ#?mg{?=v*Fh6MN+|o_u1-ir zb`m;7OA^RNt9k@HWU`==i+s%8ulY`8+osatXwISBSv}X~dhT1z7~Hn3-lfK#9rr>8 zb-ot^&z3RL%h;0d4sucxi=SQ{F(aBs)0mRN0A+0wDOcc2LXr+-*wHryR(=nhvP04T zDM#tF&!1cjZE5W=;2&%jQfjr3P+R@B4DP7dXHq${1cFoQ3eA;h5-^A+cfCK&1#v7!C7BWj~0&gJo2 zJctzyI8q4c9WgYCyJ~cq^x+fjii&kxbaQ*?^pw2$d1JO#(^cOzXd{q-M#-<1My1AX z-HjTb1{%m#W}s7ONT#yLi=v}Zz$9e?c0$|s&7Zv`w7p5RNwB_phi6+wNOV!r(Uw6#wspYYFjs2Ta*W73i zFp*D8!odEk4;NIr0oAK2dMz`X*XJkMK(mIb2UG5RyY3~CO8PeEZ)6m78m^zGC2Xs| zCmuN`_OPpn42K>Z`v3kI0Os+a=*}0+@_wWL`Cba_WI_dfagT#y9ydkf0xx@|3s7H) z;x1?>o`#$t+Vljx6Br~O;QML3|mZv zqf2$rWZwA{gU)Q_TMO;WdUJnNwa^NLq6wu#-4z<Dl2R0qf0>OK40;WsLpi4@1;%2ISuF6V83iQ=3Wi zQUD(!TM8q{oQo+uCwaDRW5*C%F!Fn5ro&7)Otexzn^axr=^>F7NbS)Lr*9eL{u(Au zEyu4nCsT16QtvWi)$d}**S$=1f6@*%#%Ri*p+&IWTWF(z{;@j&2ELaysib1dZMwXn zEsoy+S9Fp@*%r>xZWp7zcH<}%7pqCYW0Kf6zE${!z+vx9QRC@>7z672$ z6;et5bMC5OVfyHp(fGC)NP{px+$a!APBFuI>DBRfHEqoTflV(kngrVCtmkJ5hKmw@ zVuno_{Ob&$AQ{JS{sHZq;xStQZuKT&hXh;b-UF$} z&l`ut)OD!SzbefiFP9y41lKY5YUbHQQ*C_7;&Yp2OevB%fx4Xc)>$tgW3bu0sfx5x6x-QyWF3>Tjsz@)~@$LG3t zyFA`)S}Z)Hi?A!VoRa-BgN!n<7^P~<%$q&eCs||`_PBu^E=dRk^40HXQ={`qPb?{; zj$EpmyW`~dbtDv(aC=1MX}|EN4JzdYyi8ny~L!Xya9xTh5tlBLjcmE_NAf~4*_P995;tW<@i%# z8iT%%=JF$y%ag3kReOslpOwZ~FG2P0!7FL5WIZf8um>KXP;KTP`?Y(RM)^cTu!-XL z=Aqp)wL{QZPNPpK0wG$#ZoK}SRd`i z4)mX>;ey2xJY);g4`Yf(cVKI{wZHSXWyL;!(K!S{%ov?A3B2B0_g83MkP2f>lXggBiifNu9XzueuSVz z=07m>>ocT~5B{192}}@2kVH7NJ};1gYOWkXB)2?y|T303Ws(2X1> zhRymBt6AexG1u3~DoQt6Q`hp@EjO!|X4KbZ#YZs)mne#;8zZ8^yfQCuknt+hE3f9% zABb)Cj?vH#4Z%a6r>5&amtd^-w+Z>rW+NRRj_+L4m^JDXsic0s_XO{Y4663CXE|=j zK%U(`p;e&WS@rLr_5f=Q*-3K^U~#L*$hf${U%y^Zx>=J7&Gli9lvZTq0K{8N(ceN) zJccO4A0aZfW$KBJe&F`&eFjgB?yM5g{nm#@sOexhU{49x%9se|P2^OBi?IFhE@AiTV$yb|E0(Xqxv{3;5{vz8vX%YvzWg~R+Z}W2H z=7z-_Pp@8Mqa21!y(7keJ%OrV!Pb`m%8D+B=!z_Nh^5)UA!6#glpbt$cOYk=c5e%H z@;6Upk%+@XZg5xey=)XchxWOGr^phW7)60^PPbE+V!B({Wh3dV`VbTuxo}BZ^oy3Cv}5ok@PpP;bHOowm1GcUg4%#($*#mtvs|ItIg z+>CE{je~pD3OC5ZRgxh+%@?8{N zlmwfRPy9ftq3=0dS4j>mH7$KW1AMOSDeZvs>_NWOyApI*ab|=}Ppi-VSggAZnL?X3 z;Hcvx$v12lVpjEr5fH}UM6*LSav$cz0Q5kGFf4)9tEJ0%a{b!T_*f=jW3jiYo za~-^ey%z4*2_7>*UtigB?|Q5>ZK{GLBqVak@41GsavA0elU}>wV)6mqjgVHS{_}8S z9=`|YuI}#Bol^d1svYG~6oba!k6MCmwF>mi%yCISZJXVTivAB{Umey~^Ms3QfkG)z z3dLOu6o=qWu@)%aQrz7+0ZJ+E?(Wc{#i0~;0>$0kB@oC>zn|RuJomZsSCW&>$=TW2 z+1Yvbo%x=2Yss}8Ia7X;sK0BsRoZwDM;v5W4XXTLZ9d4q!3#~y9KMC@_$|YO_HK1H z`+lChc0bufxYSdr>(@0*>DzBf+HevAO9r~v@pTm2b!>>XhUI`o4X zx(BdKI&FZoYtKIVU?Y}tRqLC{iCEQ4wBnX0G3BCemP9Iz?TteUk~67PCYu7`PQEGm zY^LDzu(6uj{D`JIBCH68>07)6KpLNI3X#!l@!g3pWy9G1i}&pqqOn_jy1z!BnQeMy zn2q*lZ2)QmDiay2Up9}9RF#x)7~?}T3SZ7a_acWgO(cY`7&q;XwS8-9YAo&S7#Mha z3jJqV4@DUx8e2;%zJB9|c8*YSt$fwJMMo>_e`xN`itC_EVK9UY@&mM{0vMQNMe!|u zfQN3RB}cXQuOH@=1XiG_!1FTa;mqMjVDjks^%Mc@4_@IOY|Qw#nCuHh!ak7FmX z(eR)LPZ&YbtztZ8^LC`Ci$bq)Los{|u!ceJKmKN?E_XPK#!s4w?^vmd^bdvOE5nM~ zdmLua%@>Xea-x1<1EhLY+r5qUH9oHZbv4B1t2*FSOQ*SPb%OsJTg(m+0zdkk5TTyD zWNi3kGAm=JuQx*b{K?^h9SHcvhO%(7oeAPHX1wd@iV@qGM+wsW;4ditETh*Y`b=l$EqM_t@A!1Nb2 zx1xAXkmeL>`aa54?mKs8$SE5R$dfUK*m~eamh23GGWnQgH9&)l^z58Nv}mjMu8+$Lv7uqI$WgP7$Bl<|nzP zxz~JsQ99>0LC-wxuk`(*Kn@Rp_xf;0;8v=qx3@d_0c7R@)R6zw4@_bg9y|MmyO==2 zbr?nHkCss~v9{?oc0p^GN|F38@Cy9jfw`k~on2KJ4yvI4d$17*-aIuwKiE$N8>tG% z{r)UE))>}vT*bD~(n;Lqlt818u#vBG{n`JbxLds=VMZ)02Y?2BiHL2j^ysnrLX8Vy zHMDJik}RjJjP(@&bIQt!``C707JUfYw95kVL?s(}haxIUCHEo;NeeyASn?(~r#@Py zxW(BH9??`aL;ovPai4a@$LsamH4pT@cnPyNGoYhBsujQJ@ox%s`hJ+Mu#Q%Q=-srE zC_0`&kq-fxek&_B$;9c!dhuWoVvDX<`G<1@vU0{ow0XEUb}WjgSL%b;k^PXMv< zF=hE=baqPA>2VYm7K)0kStUObHY|Naz)ZHas%*W$U|PKLbaVU#%wP~EnEzQWG@UUXoNYtTQS=mPjN(_341D_VERDre-Mxv*rEoEEm%qd7VXTwIGR{M;^6 zT;zVtSu9?FDCUTV=Rw?jot-g^{rn;lZw!V?nn121M_#3+DMsvOeiyG!DjvQVZFaYj*>0sun*=AO!YVMO>MSQ&Vh` z@b4b}8z+C&u|$@$qbAB_Rj)@&M+coY?U3`r7~2#DiA*>#3gLtu!l0?ip6gA0$nVZd z|Aim1gQ7&IE=#7~H?TN#sZHr$8X_W8*bFcK_PZ%^y>?i+=E?45bba+AbM(Vp?7>jK z;D-bN(d(t0{yW#;b31B_osNmS+xXh`fN(&(Y7p2f#6MbYvcej?ZLJ1+kP-Y?}B~ksG0N1+ofe|+Icg{qVc8qcc{u>?$ z;$S;m7WNmI@!<6rLDu~KJohoDdVK@u4)A$f*4T8zH`^qTLXx)VU2toXm{rBiW$VuN z7~ng8gMokzRxu)MH}2Gg~WCUfWHX>&2jdT9I{PA@5`8 z?|GTbMMkvTk&K=!s4VHM&?4sp7y3w(S@#T(W#7p7leP(~rjwc{dnZ7%6f1lt>%`Xg zFDLi*m=>)cJFHXm`=MN&j~Xp9O*^vXryxr!2d1sPmE2J5&ntceM6O%JdIk8`%lF`B zm>nTq%GDyA&h$QHzq#FpwxHtxCv+oOJMatmFNHX#5ewOQwaH>zNvXl2&*2r5^Rg@A z#zcM_l?n`3@9b9qHP~}yL0@>cr;RB0kz$|xhU97M9uob?eLyC~68Y=ERUs|U< z46(_AHLQ&Fk(T+L*_`r=-V7V;9rx20wVe?l;efoe%K%0?t*W-nIt!p{%Hpx}(IT6E zcd!&J)3>~VX8b0;xtaipdo7hzB2K~QINANcE>RdOjW-zZZ*>|s3nV^EwdOr~+}3b3 zMW#SyM1J|qtD9EhMj(0}Z-ru#-Hq!D77M~|kUf)B_)CMn@;V0J2 zrg?_A?sdi9`sUT`aF#;&+%W2py{iqkn+I^|0gHldBL`ikV?LRD_ZiyM;YB=nz_&s% zo6_H2>(SjSGwJIxB}~y+U0zYVB5>*z4i+;WKPe|cs6BFBB$>u`Vs`Y5p@-SU29<@T z!Q$7D5O&Jk+;&e-ORud&TXOQ%z2ZJi{e!Lg&x%Dl{^C{Uwwz}7oEG4M0ULT%4S?K8 z&v53Y4L?nfnyia!4?3LxRqLejV87_E?++{wlYd;sh7PU+-ecV6T7G?@<6_a17z-d8I~ z3i=o12(hX7Z4-#z^*bMba7J~~0)WZlqvMlXJB{C%pF>m2T)kA$Y@3_;z}EcuOP^E{ zWEBU{3MX1@)pgG6n!SkceRp_TyqKbv92yLEs|5c}8BU_Rb+fpc!@0is>!WyHR*TUB zr;#^LUsW;C{t6#g=NJ=>AC3kx6wSiqZ?+4zhQmV z_d%@Uy}fcsb(E?pVz6;{zEU?oR668vtYFNX0k5+_1K-Q?c?MHcYKy@#OI9|gA6v0W2guD+Q&I z?Yp;2p9Hbg9q1KKYGw7@#>CtW9dXLR(}wIb`fLA~I$4P%_5qoEE7W1TZ2$d3zD4Zn zLS;xvX+RCnd`(T!wIZ0)@!k+WFiB2~#khv!9AaD1c?hh9G|sWAEK|z0m_#V`N3*A|P<4g1uIR`=TS>7Q}hyIkYAc4Xy4Z6a#&+b|>YApC+Lg_4l}n zQu6>2Fj8?w@!=lhuVQ%Jq4Q}V7l>V^=%4whR>w`kuNetnV_Txa$j&bGGkZ_&ODo6| zcW^?#DdueNvdFER8f2qMh|Sx!r1LYDT`=f#oZ$s-%LuW>*FtC&wNjPRSS8!Gf(Mnd z!oGEC4^uS09?3O$7!^rqy!`PIp*m!NCFj7|Oh?ofbceUJ^tBI%;rvypDCejSWw@5{ z32vQ+w)wS^q9U%}8P9+rcC+r0$a8A04jTr$PJ^^?C2oP2uT6jFcbDL(g~;bX?9?|E z2x;t|-}d%>x^B_7wweD^9_}=9AN|zreuafiRAs11*z%^RzA|{cQ^NWUxgPmTY`kco z@VyOEPGw=le9*n1KT%Z+q^;pm%kcLK2`sci-oMP;L*=9$IXMztaUEfKp5* zCWsuLuuGAbthk}ICF4i`R6l=pOL(Ha*<7z$4FCCc%6L)U&YL8-#r<_&_^rMuq*O3o zK1PjsPUO0_r6#6$5qCwXT`0#@p!5>}dA~%>xx+zkEYGn=8Lr7w$ixO)JE;DEkW)qT z&MUX&cdOi^Jr+S7p!Yh4J$cWV=)oKxOz%0K6@<69FPy0qO^$I|{!y&snkPL9zvfc9 zPfWBUfm)(cGs>0Yi}RC@xVw#P^DleS#e z@*6^@SO`%ngve8y6LeJROijpy6jn7hMc_wE2(Ozs-2dk=0r}X30a`nYilEDk6m*ce0D~iP0cW7Z--;)p4VXox&4%b{lWB zLw@tkb-p2Dvcxt129zl*euPRBZTzNDrH(;EVTe(0j+yjv*gKDFkZ{nqTyxHq7~10Z zv$8U7_+|G&k24{O1SR+@12#Q9-iJk7_fJeeHe}zn4xZC;#l1P9%73BUu<^czMrdqj zV@!cp{%*8?ayWlQi1%*Chf9N7#;wmfw0P@b36;KB_lDw_z#XVPw}>u@X1N;>BYUG~ z{;)lxFwNnKBDRYhrBHX?}spVG(XTZANu&T?VydZ%B`lk28FEx%fT zwb`67MhOYV+yoo>^3edVRUGEJE68?$pVv-A1APIE2>{oG%v131Bvk{l3)m5T(t*?O z;Byg%G+!cxm=rJWYv`Paq7B5vrJvBw2wN@w5H0Dl+kkB2X2s~}EeVtL_}tdFWo>ML z8J=*=UHb_J#kKTUSF%NJk<6Og4`FPYS}H5=qZok|6(MbHA!odWws(JAP0~O2+)j-{ zMw$GB$Uj@j0UjyZnUGh;!g$aa%NFrKMtbo=8e~rlMMdi;I_aD_mi0mpiO)WLEwP4H zM^gW3)8^(=sK>Za+#4LapPbBRh~vy(EKahiy)Yn2Re4pHZ`aEQcPEP1PpUThj}501 z`zK8mgN~8t83J~kqcFqMw4$O2A^@9P6gFxJzjOCLn6H4&7fRlOqeVcy-?+a-VrM z0UJ@VRbQ2^)%>M;qJiP;M*H_{lBzR?#bN5enH7#0<9tf75feI}$l1vFCz@ArDkc+M zAGxScz^$5G7!ZQ|mS;FajW&-syz6T!&*>S0dQi+b#)+*99-g?zGcXbr3?^HUkg%C3 zVYH#^=_QPWXtKFO-uxIc_7w26h}}UF0|qRAjLYHYU#2Pi}gvalK9t`fngt z*1^}M$@CC{RG!hXY?lq9ftYl*llIKFVvwR2SZFZMHs{2i1F;r^{!hd?l@6Z6mMvWv zBV!{Y`9E)0Kd?!xv45zExmngC(2)kV2%b{wPui{uW~v@p9PN|i6yg*t%O$buPabMu zt2-L1@9*w*9({em0xm|QTZQg={oFJ!V($oTeASM3gUoGl9U4sw>T+|)o3`FVv}_(_ zjg&zlN`5{Ld1+F~8=vQ4Boi0NXB*q|%gKv|N&FTU$)805>TwbgL%~OGE(Tn&#n8jL zs1=C*B!*jg0RoLH*Ru9{E*!>dDD&==o0i2MzZZ=4wYno%LhC4)8EB}Y9&DMks*L0w zJ>Ucm{s-dj{MtNp%jo^*F3shMvZJm<$1Pq{3xKM9XkD%f0-T&}iti(3S5Foj*%hh# zRn7~CK=REa>d50Sn#Pd*0HT6-fel|}Ea}(tMf*It)!N?9=g(nx@|kS&i3q2EJszYM z6P%`0*La%I#;X{5j}yhL1g13}0l(l#vLXeKASF_EQV^qB;TPqdOq)d9E4^coN#sIW zmn=uFrDRnLNEb)mP}&vyDmF?S1Z&B~NUpT)`D9j;dW z-?=!YRmM5+j-EPu+4(nfF66P2!&Vx^9L_)8G8`Ii2P zOI~(|$I+5*Nf$V^l-`ssN{KuM4n2P~3OgteF;Y9oD4fmDfUnK>#g6qVn9WbA*jknp zkeZ`upj8B6w4MTSmP1Ba+R<62;Cbt=x%!l5EqS*@yW* zKJkKYcmxnvcbPy|t8g?i%fN1Lm8CbbLx0?}O$?~1q8Dq4Z^2S6luAnXD5ziYFRU(U z;)lE{hJYb^JF`D(hXx&?Iz}v1U#zW_rdT14&=!xAok2EW%Zcoy&BL(-hK#Z~ch8g& zY@Am+iI+1N@e1Qzz^L}a-b8WPk_okPBErOhx$s*?9?l+y+y{*fMkB)GI<-)mhF_xY(LQN{FN-fdd!PnBBM=eG=NKt^c`#s`)rK~bl^-Pr9{O8Zr+J(bMkP zO>m0@+XvuT7b^kpu@^Y568Hp1^+3IJb1>{ktFCOz>dnG$uh|wR_c+$c_TekAh2d{` zhz&%@;z|)E45f~Uc)}RzOEV8xou6XLs4cr}f5^%PzJs#OqlPNR*h?RLmsaELZLp3o{0Nl= z|H1OcbRXK%7$z7>j?(HvOIx3fh^TujFlwAfw4u1Ly z%d=bhGH-@7TcQ$_Kj9rqD)K|b!)MBQ=TIiH%ZuH7hUbwM=iUqR80`Fd5h^WPBtV(} z^;0npzmuL1bG6F1k2hOC1pQVB<${6x>)@|@5Q23_GPz7+J-uHy9oah_M-AxKZ>*lu zqU~}q0n{UVx8H_9_w+2dx&ClWG+{IBNsI*y1@&7y*{=y*laiHqei@Mo!O7B-TNI0r zhEaL|wV(esmpqK%hhF9Ek-Hw;3=px^$7iWQ6RQ89Yiq(CpvX0(_K8+urbE%$npLlo zq|Hdp$43NFwVf`q`#W>=wV3>Oj`ox~QP%f!x0KDVd{A9V03u=#+cOK* zH%{JSa+Og^*&%^nTn#|&sZ&n2piWieN1nrlzHa!#N~`bm`+~yaa$4T%63cg5VPP1e zH;?P?J%!4*Szje=*l%19%eDT_Sost z($h%Dr~pzk5z!AmIi?O5Vd6{_ChnoC0EBV2rxXqeuPSOsl^{HCpT#EIi06jp#T%m$ z$Alr{Ik|J(4dOducD<%bo1eZ$=zl&cDt}r5J%tQYN9sERb__tpM2FRQ`dsk)xj%~B z^PFO3Yprb4ML0kbg7zfE6!UHF#e37&^b$S*vh;GfjRg{BKH}!?NY6|fA*Q0i0oLaV zITm0rawfR1OuWzY;>ey^C0SsIxXgE2LzM{IRWrYV3(Ykb=akidH=%uy)PXuxuZFf^5Eq%oQhsSZ&htqJ&ra>C~q~yI=0!z%KuWsR+2+9UCS>k ztSn4)3H4_3zaPBDUX9e`G+chJa=N4KnvAAKbs++MUj ze~vqrMCC-8)A`0wb8c)Cl0nMefwp6j{iT=n zltQaJ5kh&I2KpYU=#V2q?GbZ%i7~bFD6jwUeFmA__TCQ;)j!nI+^xCPG}M&U2v27Z zkGHzU?5s(*qI2SoV`tIC=bIi=y zn-wn|`xu@-PczIKN=!qhOM}BizK;663%YV>$fk4c`#Gk>e>$xcUlgxzz6sCJfk2UC zOHi0C)WJbY-*6D}3R$Bj!qz`92PXvJrUp=@nPN?3)bDE=m|0&prms;9$u2`IC;xnc zB;_BG8T(TwoM^I|AWyVLfKo8MQ&mrW8nbf`G)YUcqm7}JcFohmRrOlrRW)Py}vtqRJhwz!W>qe=jdCe89rlI$Q zD1x;Qh2NaSamp^itl|mwI@v(+^?cjAW3M3Dv;{d|b=DEK#0WXMrluxWH#aBPPv4%E zWmRL7<{w#cU)zs4+uEyB3Mp=tm6iAQ_FhbMQGLd4J`Q7x0Y{0QS9f|SOG?oCuNeqm zCsPkaW8e{mlI}p34vOuJ2XgF&$vF%)pQ>7N5q9iKEiX0L{U((ZUAPABA1@kzf8coc zMxbQLaANk+##y<5x2K1h=n{s@_5JezQTyyfZrHeG5yD?8YG_FEdE5Z$Ubn17D*FG@ zkg*i(MVz`n@qN51W4QGdkBjnsA%#*WP!UN0Wk<6q7QO9RA0@;kM$Q2$wA`8H0)gxNX8o2 zBR&M>7QG*Ex5qVH6N;hmAbVzNan)2mR;ETwpeJD8)l#X{ujIW3kR1^n?kGngIV z3x!^3HrsavrNbNQwg z00Qk1errp_MK>HP%6JXea&DNPagM-6!AS@D))O9*Hg+qc78TH7hkl|4fr_aU)Wf6V z_sHS6*eL-dNEsaUg2={Kw-;PK(n;UHP557In>ujmptHZ7+iM(>ika06h#JL$zVLZ; z{_t!23R{;+_%OgZqALcBE-msvyybe@4U8|5(|}AzK{XKsGxo*t;>c{m==^p8D(|T=2f17o=1ldPC+!ScIn=Tfy&K=bc^kyyUB=2Ssinxoh9wF3~(8 z8Rw4zf%f`&HeZ|g8SZhC1T`qVdP0zsc#|wH3dUB3Y&{U1*Iq5*9wS@Klu(V8a!xos9mq%{<=>mp zp_cUhG(3%63DwXipVcI7{IRbhLm%=1mt%bYrM|zWmrx`pX>$@uvt0w>dw)KBOzeXh z$oVjDnIqEqhdl7ZaH`tp#~e^FKzM6gylG{d+wGLmXu3Gs?Cy;XC;GZXfGCO4- zk+LFeHW(8P5ze$U;4IiS4}3L-w5ChSb;66-ho)A*XaHOl!rb%B>by58LPqX^R(t1y z&+?m2^4!G?YXY>J(o-{e!*e>qUktTBeRGy-nP6<2{cNX`2NV(|ZDuLahUYw1Zj{eJ zjUHlaI=w$fDy$wU5BM_%opS#8VKO%Gad5FoqmAf7<}}bN`Lo(^Zas^0i+~{9M;eYHJIw`&5sjl*G*rOB=MVKS=CYSMOz|n#{y~MLr zP@Zv+19L?jQikF{5a$ga|Eh{oFJv}nRC!tCNXu>fT3CR2x$3Ac4B63p8N!~WrbbY&y`k#+U7#pko zxtC4+St{3mshI#XEf2*6QFdrQ>A%tY)mBs2jwF_UGa>Q+%i{FGs7iD8UXA%IoBiQr{dY?_B zZqGE^H09isUC6b+V$%byHd@(p-EMf*KA;5rDsQ>>FW$pd{&b(3pihN3l;guFAXq^xfAFvJBns5&ebA~Q>1&19_8HOj)gG@?H?IG98e4nsLj7BQccTW~#KD4+GJP+RAe=u-Dr)S((RN`56-EV^XLvt2pcbQlQ zI&G?<55k#?;+L~OUVV{$+}sW^HJGENygS{%I#V2L@s|+s7&zbqDAbrt^+?X1lm7m^ zQ&;V2|K%Hdnmz?2Gly0@?DX@9Q4Z$?)ECKj=bqqfGyeu-f~XnTcGKqXNJhJ3=bhO+ zRuO(@<8rSBVF>R5h+dEFT)dub?Q8dAErO@(c#tZ%{8>Z>-v?PJcEAqykN)7RP0=$O z_&@P(6Rs5Y!vGWb(>Fh$=Ud#qmQYm0=x%ny3;+X=qTqxiIZj{=9V~j){x;;}QuBkS zs5)t|aT+N!K7C9AicOl`2tQ}X-Tpb{b$;o#JDMkUpF#|%Vr%|pnl>|C9%k8x-P{ab zn9@i^Kd(&w)l+SXDdNMQ_PDTU2L{^uqK|tfo$Lz z5FLJAajPth#Rz6;Pfz33<0(ShtJpWQnRv%CVv_Zguq^ZZdjj_kkF`)VeLo2STQ#`g zGqjxxsrUdegJNfs(h)-y-@3{TJAfs3dIC?6tDr*{LYIHI5H$Dk2J{ZQM0P1E(V_Ad z+=4SDb@-r~rc@xSB&6tV7ZsKxbS$~#fKP+xa`hou)|apa-bFALJ=Q7o8xiRKM_K0U z8DRT5Ua(Cj22asUX>mxMmD9d%!k<4#?-BWzqbPBa5DqJRF#=jSd-0CG{W z$Mg6|DpuOfHX_`5IakEL)q+i)k)2nxUMVpJqZgYtNNaBvLlzV==t7h7shq2n)%QaU ziCjqKM>A3}m~1e!Z@Tm~s*#qiq_Pq+b~p2Up%2FTK52CFL%Se?)&2<{e*b#a?^_H_D{G!3IXC0{<%R3?dzU8BDj9cdw)*DkjHr!q|T@ zQ;v^?RJ~y%T4iXYZ&OUJ8G=l~*PnSm zQFBm;?WL0>J$fj*oRQC3tx`Vuz2!WyxTs?2hw%89Ch-u7L1mPpXvG1)P3$NSucqB) z2c?bJoJg~mg+RT{jI-gfTR~BgrjCyMhYv60U80p7TF)?^vIvFURv5M@iA%!WW_hp)G7EKj@P?d+WEyud7&@HN2WJlxEk^G!I|G@ zpPq@~_%E=og7xsi&@tM?rTmHKu&ZHD8hp*oF%T=2839*Z9*txe3`y{bHs>3my`ys% zIS4*jWL9|j8}gR{O%Ceh|C}Wl%lV=VyoGyBtmd_?B=C!0a#PJ{tLqr|f#6WJ$w`QU zs^XSsa&n8mBNJ({naf0`-!zS^Z$e*0$lsB3@V`heyF6U!ph_Q+Ll7cZSXc}^mfS4) z$obnRbSO1{7gtq9QHr=ffx?1tV*UjZwivf>O!3;K1uQO#hJ_Pk)uRA}qj3zlUMFo2 zgND-f$NoFL43i2iA7vg_p^pppF9*6`i#~cTd!FAvGj<9nYPk8Hkd&yZrVI`KUBWQ1fEGT1-ttYJ8(G76)=@~>c% z47)wFJ1874+Ngvq5zo6;q*||&Myn6JRI6)9n^EJ$<_A6YZ$-S2+ycQ#r6y67bDOfClBJdOXYcwS+^GQi3aHBH*Nv4>1&%z8MXC30FH&uGOBED14nt@Z!8hUGNU^ z6XH-S8yl^y;tCbQ#hVnq}MMa8wF#+6?4S`9tD!6Xj-pKLo-lDuE5kP3@_ zCF%^m4@pZSnx98O#fR}PblRsbwcNODCE_A`p0ou4gSrVC7ubUY1AT$HR8QA?NdFG_ z)cNx>=yYR;s=vQDl8%uV!$H<94pO@PgYmM@i5L<-g<$8+<~1%}G)TN1#(hmn#dyyf zp4$+BnEHft>}mjQpe4oGw~ z9H3IOFtcZK;bo`qiN2lBqWhG3r8qJgb)q0!I6}O6tr(+8sQIP1`5S4^TcxzAy5PiM1#K{P&e*kDPWcFjHDpq5?w^ngp$B( z{E94#7sSGsctSPb9?H-LioQd(c<4?ACeun8mxY%`5HEjzAH0VuhR)BmQN2-9XBC^(=kh1VJoAL zn-{QTkJ@Q6?y}RiqO%h%^Yzz4bn@xGS}sR=)+p!OuLEOGOld`2;V>EeFaCf&xzEjv zn!sZOyA4XPj)9z>H+lVW`)yY6Fia}n7{q`hD!_lAvqjV= z!i&j9P}$sGJ=I`f<>1&_a_A6gcrEdGv_M+pC&F%|GBRAzy4=u!Y!^X72eEGoF3T2^ zQBz)#q&~Rm2odu^A}N`U&;atbhc>-}B=^02LVQ)q-iAn*2a_7VGnZupz+f^E*A4s{ zR>-0$k>wrs-CFhC`Mm`y%88V2+AzdCXVsqRj>xOcg&?;r#*pr`jp zO$OrbRoSU;6_4!XbBqTSIl(MMuXZNu$la&Rx%(i}2)`*si&NqpctyuzRIM~V5x?pX zzcM-@{?hiZ0@R?Wmr3UDO_E2$TwVKvGX2EHm+^BSutTB{>Fg~Jk^G)ox1Fys)8G%2 zoVtN~FzYo*ucPoQ4k|Q~sbgBY2JsVn4E!HY7ul^w-aSK@c^o@or1xJCJwJn=U?hz(__CJTSr3mFLVlk?^uUvgFQ%Oc*Nqgsfuiz}$aU3HcDNd|ZuqVM z!{mb`yB4h?Z;BJcEtb;waeyZiyAf8`D+OyzWznfGoFl|kTxzJ2AJQh-Cyr3GW?1MY zouY;ii@?O5-R5mq=4-^EDbDIPyS57K_t0O#3Z*E8zYkcRaOlGwi};qEBs&(r2Lk%- zPS22v-!_$&Co5-Xw>;JoUVM7*m0D3%-6dG}0QPQfao%sqwF_sJU6Yaa&pD9_Nd{EK zM;@T0*@(e5XY)EVy}Wt&9`Hjk zh81+*YxJ-u22tv6SP~_uF#3UW159ibjHOl%#_+snl@7ZlHgZa31-$_Y^K8TDfYold3OguxfKIDZ#5SiusTl7dk0FJJ*J;Uz zYlJ}T%h3m~)dltUWc7C_byXjp{TQyb5&4kS@UdEj{cp5@S+AHfi5MABO67TO(rJg7 zvguT!HY>`TURYsu(TrT=IZxRt6^7)jOnue}!$)Gx%MZ(UGL%+fHMa_XSjTG1(5j>oq zvM+GzeS)a1r)kcJQT(imAk0oY`j|$i>!r}oZ|>2WVZ|IKKDwk(d}0g9Ar6G6Mw)muT{)kSw0R& z#P9fL*p*^u3Dj051sqBO#wMDtqosPsxDvd_>Ug$>%BQ_tid9}xOD0ls)HT-29nFJq zK(lA4d;PI=6?)SGKbNiR@ndoj%hV(U64E9Y^D9Sws^Hw2+>q0igTr;fb{B9Jb`@TV zQ7do~RM73nO0vk(Aoz*&#lN=4e|uQrkNhTpaz56Jv!I&R;ozl+a%-yq{)Nb?-GTaB z#$V#a0-f;{^asa_r{rNm?*Sz-RXuV#WqE0 z-+IY%1{nW<%wB8aYrEB$%+DqF=y~4d_m9-z#nQTR4ia3tnHkn1z|aO>oTHI~{g&k9lrR-AF9?_M0 z^+^9vn?K62!OGmxR^lXm?;C<&_n=4V|;3@)$;n2|3L!Fli)vlG8@h`Zv>uQ zdSXyG&h*?MJ<<1jiU{<8G#lzf*^o1;PF~)=Vmo^g5&9_heV~A^`rY$f!g?-_!s244 zqIKR66@Z}DK8ULoSdS+{c*n}6zX#(F5}YySwfmxuhXs(Lqo%z3It~=unU1+=KThWL19>`3AdN>gt-&nqJQOd zpchemdBbuMyHAj-m^v2l9nvNL_hy7Q@-C;(5k2JkCu3gI=m+45+xMW;xuPJ#Z2D}! z$z@%EqM+*j>_y*yiVKdKjj~FN3%p_gpyz~CU+$?qKOSzpl|jS-asM)<9IJQ=kXV>8 zf%RBz`aHkY|K-lTh={eM&{G2W3jEf;;Z5|vQCUG9vc&)7@XNrpWb#4(7b^>kk^Dd9 z3`a%&lblcRTF_Z4?yglC4KM23sYRNRN%$uz;LCLt z={Y@kQ-;aIs6`8gR3-6LI;^$~4Py67xQ$qq2#K-Gh20tmGKJLD zl_H6rH<}Sq%P3HPLtaia8kjpo#1&+R9qjF2agT{W*n}E{KV1vKn4xr5%dKAfezkMM z%WXbQ1#3iSb5soLGpp!<8ab{WX67nAmWpUOeKYj9gijAx$N!pm($N8p6E>6r;1pr$ zKXFPXBNFxcKl@`%P1fAFLDM*kj62H0dd^nh*o94+70;wrc40A^A!M0u88$9IK&7ah z%vo4d6IWNq*WBEUaEEUn{H<+l5OXFsH&^o8I5XLM^xgTX#cxEbEBi_zzPX9l-Ssb7 zZa%#F)(Jdo1B7_31XVKE))sy}|-LpwF`QORg0uPW>Y5U}Vt|a*epB{4| zFE_5 zISDyIVW*y=ugpg?2L5g&-hqD=mH=j!qRi(TH}?aBgMcPO|H%z%Oj42@VqHOWYb)Q7 zN^v4CC$EBbV9#~^%+pag^D|X{R>GKvtbed;gYAh@wYLFTrDIeHimRP<)jQp`tn07& zvv%(D^9v=_4)h`?MAznzgx?Yc*$EWxNJ1UR&g>E=0j^FA0QAW`5@9w;9`ClF#9r5w=^H_{h zG`F+_C=6))?)%I$F*g^gUH5ljjMz2s5N=sX?Rsf z<(JQJ%g+mNVy7O$9KXIir5M5)KT=aouHk_w0;-A_CS#AN>_#aBGTMQk-lI2PF1xY_ zOh_aOboN+nV_|C^dtel}v=hCHHKsu@ZA))#Y-}`+)0g=(Aq)QP8i=cs*~1Y8o zTGMQL_3e+-EY5g+X_My1J)U`ysL83#+=d4H{0RwXXWDsA0WbJ)Uz#iOjQREZkiRnB ztH`ZDpLqWLZqQENxH#ax3NV&MUxZT6Ug0{BI&CShk`!NHb^YZgi zt7q5%teV=sc9eJ(gpl`2%wt(8?~z}|pi&sNeHC6k_gJAdL-lhQjPYcSPQ73mC9wE@ z%!OX~@=(TP9YdPSD5Y9S-R{WheIR+7=rcml8ioCx-R~#|qjiC?J7G4v1wcW>C6C)(Vs=f7r1{)_i-$nInf@J5Q>TfX1`?~ zmdY*CZtOd74Z&v{3c=n? zvsUd~V_l~q+U-y9zN6gk89%f%uYGS3~_Ivi>{ zBYN3Mhd2qZ7Y#yk2%K0VzjKd^i=QqLAJhqR;DnfL=5`WFytvkJfthXq0JWpNrvew& zGe!`C{FDB*$cy@i_zTPyj|;kMh~U zJ?~t4rj89+LU19;*#_pQzle-*h}k{Ji)W5_gc=DQ+0fcR9zDQ4rdg}ekzsE-yK|Y^ zC4CtY8M%-1rM`O?EQEQTqHkB;Dg%V$zki1r_^GQS4G^ifz~%Z8ZRz#R`pw)luT6CF zbd$G$t|>xrXlMw&(3Fzq*l^=Du_9e5-7`zt>3?$#yJ8RrD?m z$j*G901q^C&hoI?Nr{!21_ovNGUSL$ugGeo&9le}q32(}-|lm%1iCHk64wvjyGcX| znNqUoB=n>#qGC;UZI~O{A(~ooEZ`xUp4(zYSJ^xcwm_WghB!t=*OJ2LGD*<(j?L+{ zs2JjtR70oU+q9uGZ}Zl=`oq4huUg{M)9rw{y}!m}Wd3;cP~7hh%!G=!?G1qsphb6H z=}-y1`6I9Bq|+*|70-S$?pB3vmWBE}H2?y!}}ZARbNee>iyN8G{T;h5vN zoQ_|@+y$$`L;TmWPm~(3yB-_)GkH)|KSm(6jf@5{R4soCl8Q60mr3G$#gll9zXt$> zBoiD_b2~le6}+B*jKE&bW;REAqcwqjFq(p3+EdzOV-NZp?8NPvDzE@hChg$DL z>(sO~9h^qabxX?B=dNs3HY1GHFI@UaAD*RsoOU8LukBqq{x$}3Gtb(WzbnvaGH?>X z6F48nJsSJ5lGoT6`sWX$j}IQ8=N1WTwcTF4g|*ufX>p-*<=1*{U@Y$tPg_<->YqJX zSrZP(T(Qt)WO`#kGGJuQ>ye6}gcLA~90)QuwzJ4K1w&P@xy%aAKPaLcwgjKG$9My((}ptn8ar z=&|Q>jecGbvdz*7zDb*&!HBDqxSz-*+tImZ0}ez=8m8m{wBLGZ%bA^!)52gc4EQv# zCR&7VDyJn{KZt2L2h z=rdnnaWNN|g?>`=E5A-dmkQe*F)=Z4?z1RT38h7CZ^Jn_IdQ$nOG+KXjJ}(%75}`_ ze3KNvyK~?%uRqNkiwon^D3uTP z40v*MnmP@vK2nbFxomk5J%>u=f!%tQ$n^Wc$(^DtWC!{rSDCHZx=lEbX_O%tIvSeh z$I0Dtc`bE-6XHD7$M}sPr<%+O7Iibmg{c`_8kw(&qEv$tO0Tc|J;s;!tJ0&@DfZc#Fa@bt@-rx0;4*UnoQ?NG!Br&yW7cdVDVwy(Hi5b24`8~?NH zCW=nZmo^qTHi2Xx?&{SM(Yz_M8OW80jZG~6j%0q7-r~5-<$}?}y1PGv@BCV+r&;mK z>|j+`WR5k~RyBw?EaoQy_I?Em6%G`7iLcDO-w0I(amR8Xg?QVVOS(=7#KqP1UxagS zEjXV5Bs*DyPPX(~eaM1&^FOgO#Cx)@I4bQjocvYyXpydikaf#kkNL>hm6)HRac`uS2w;+QC#f$+#^z%@?OxbE@{JJ~*B!y+b@F81NCjE-N3D6xp| zwmKjs3g#zz9N7F#I@&yNoWY~CxmM2iVOP;n6*?&p8mId=u}!5+l!ZeYY?9OmbLI21 z4{GeM*nf`W0f&NKjH>nUGk25Aj1VZ*#Mnare&UZTj~!U>2p%t>>FxcT^G)&V4F+*v zFMpz%+S)3&&2jZ(+ugviiZihM<9O#36XH=l#Z}B%gV4&vi9=AY^Z#vj=H;Agnw;&>aR0ptHDxD}n=kvm(b!QNs+tW8xtD zw#f~ji(`zUx_VxDc}(+%6FF@Jb!qFRk6OB@pzUJ9h)#yRw;G)qykqU%qa9)v8+OX8 zYW^)wDN{6x8yYkav*M(cFRp{U5b~yO^J;7fSx&O{_LZ%>W$cj?HS0sstNZ<=ckWn_ z8U^5RHjn(B?}IxC=z@Z9v~n^*R}K~%FWtKZ{?pp|J}%gr@AWjnd_rB|!U8sLpbU&c{KTyPZ=7vNO{N*QWc(}-3Pl$8DOni&H!L~_p%kaf6 zX;yDNy9Dnrs^hmQjomZ{5*i@~U@!{ct3sY4f-t53eLf40xVGnG$AVO6x>o;ilYhR4 z7$WYFxWWPqsI306VUgn=IXfUNhh!ZYn*EP_5Ke`~pR!Fj!#6kM z5Ix7mJ!m9inZ_KEqo>$sxq%E?YWSKnpF=}J-=4#FA1p{+6Nx4YC2Z`JD>=Uf&gbX4 z4lkaHlYkOJ?8fQ^)yQXA1!q5g4rs&1Q_hfL2;?OmceoOmw`9DT2-5jiuU-L!t1R7M zA$JhFrC@AcU-+2Xis3KU&xXb)({+2{4D{roUvNKextkm#5LhZKzTFGGL9-cYif3k0 z9zEY}E#onquQ+S+k+{i*3{OA>I`NPa1-6@Hx0^Ltz7^LYi<&Nev%FFQZkN5^8?qYz zi1kpL{;=3M{!hGM<5H&t(gDL*Wy2374h#(7J?G>%C>rxTQsAX$5hvZwXf2N6Nn0_m zYmHSHum8v_K|)T?1d>aT)X4hDs?;umV65^eNWIo^o^D_|3_pmnevL4VIunk?1-{ST zmm5M|;cd<$kuk7#8NT)dmJ}7abb&FeCb#!cx%hCe_>@8|K*uO1_T!kDWcHZzZ>Qug zU(;={Z93K-Pn}D|to2xty2xh4&o=nL_uoJw3e)PgKiX36m^br$R2R70s^_I zsVF0*O`xo(bk7B6cubR^{M;$wTQYm&RfPaVBZy*mT7QG zfUO-97e@sgstBI9(A5y+TpyKLr|1DAkzkpZNo;jmb?RjCx-qsf?lx1q3~%f~)m06v zrra4dh^p?`j1tl<%+-fBQNIWV-RJ$!gCmzsR=WCcrZzdypUtth<1l{I#{=owtGWt2 z$&ms!!!d?&MH*f51^%>F-MKG}VpHvDhoE1-l>!;9J1>-^teLTIxS>n4UYx+3XTrKr zNj}ky5K9??9Bm*Z9u`CV#DHqT)GKLzPf%1;wA`SCFjpvzd$}Ub^c0{(Mg`v%eD+MH z56O>yIID;Nxde3S*ys7dN7^!4CX2panHP)LW0%!N69_*bn#{7uol%a@tQ+&n27eyV zINnWbI=EG`QHnRZklgZrN{|N2e_>O55_4(0?zVVd(uN8IEXUJKJM2I6o(l`cd+GYH((=$7GSHEb|EFN>LqCH6SzGS$ z)229A*^E1BI;E%8HJ&jk0%?O^fEh@2oqa{OVL?ez9+N=qiSkQxt{5|g5E_ucu~EtT z9+aJpf33{M7WS4BMmi`3ou1OEnJZ@8Xqz;>aO`sBkfv6pYyc%UGP3f4TIJaqd)j~6 zSY~E`kxMoW9|Y9oqD>J&y+4F^`$)UBb$hv7B>hfLQ4CjSluKVe?*R|JFlVK1-88z+ z#JbL<#R94mKg(AF)mHLooU7zYm;g2R!?_OJ8X6I=8h^BD_ z6bB?SrjY@g*i(q|fr>BLW9S}Ew1O!zrnTi>@6Vb->L=3GxZtbD-Gv|Em{Mb3?qBwN zSEH&Zak1qVT^>T!d%prR-kt?*gx=v1Z_61N$v6@lH$Pbh^2<6WDRPto!$CoyQ!g59|%le(L=aXwYkt`f%c4vtg!emU!Ju@JqSX^NyJ6NBp8o3 z7;d6T?JB`o7~FpsCARtDQD|oX2FvQZ)fOO(;YT8_oi>H;c4Z=OT_I7oYhq zWMkw_KQ7d?a6*4Ncam)dUx22A=?V*ynVFfb9p$IZ3ACoZvH!k<$F|N=`VuxnQYlD- zqtP@lpv$dQr2~}(w}Vy1;y0Z2to3~Qq2c*>5SZH^h2L=7`jo&R(cd(|qIV}g<)WJm zaD!h6+!%hQHZj5fVG17C%s41V_#%S5>bEP*p6=2^(Yksn8<>3DG{BkF82MWV(NUpa zVpk)7f91}?B)X5X?VQy`AK%Y9%Q|L4(O%zQPAjcFyd^q!k4e^tS~HF+-wFP!GkeHF zoYiELK#N1_z3KzJV{W|A|v?e0S z4T~~Yk2%<0w1PdddY#WYm9>YrLv6WyN8wpt!K0N|`_wyM+oq@4%4kDt5uRM%Di8lA zWNdi;SRY;AAqfC7HZDZG`R{l^05fy*j-S`e<@pLF4R_&uj9y(M22L1#-g`1@wTb6K zcxNrs*6uC)qJ0A=iEn?LzPe1db>In7Q|b8jE$E%xs?9z2Jzwf-1O%fWH7r(@ZLy5c zxm!DU_rLSh-{-iES~>I-jY6-28JEeIeU4~l8s^FqjE0F&&Dw}}EHa*)Kt4fNCsJ_R z* zWnwbronFyq%+uX`%XYVFttLET>|j|`VrRPk#3LHz0Wt7KK6S~O?CwN@G@bX8%HFSS ze5iAGz6GI8z^@S~KBgI1pcxK9J^6K34!!lI#{Q^yXh;>Z-gPxLrUB{uX#mr@^>RtC z6UkrV#mj9oXzt|l``D)zOU}4=_9p%_>heb9z>}cHXmbY#G6wn7_cqpdk*JsL6@A>u zLBY@F1Dp%gHk_)QgTo#e;1^9scUM{1)7;yej-6*ci2RaJXNN%mPpZDdQ>ja=)b0ooY-w}vkc)GLE9hJr2<==DKuB`=%}tWH6h{4sO@`QdYkp>j>cGBSuCYMdBVrutG?^p_EO)n!$~p&ex?8BUK?V z9^LD+J5yW1TLzG}btSvSP?*^Ud&KMOoXZDKNf#pGX#Bqb^sN)BEu#IFK`_W`$G_$E z6oVrdI0ZV2GLq2~MGwZQ={3o9ALkspo(Yce4L1yeq%xsn#w2`Ktzx)S>Sszycc(m3 zFL;Dj{BFIV{vhV{_I!pc%*4(z5TTU2b*Mjmt}#@AEAq}rq9tbXp4Tfwiy6-paevN4%Ss(Yl zNb|bH&$z#T&*R*ZR;mmn;5lpB9?O_}!uIm}5aYE$sa@5C zwcQpir6+iZe_AJ4p$HLnakCVnAO5z_f#j>`nlxT|AzPA%v6X$N(b)&D$yP-y7opCe zsSkqb{va4LiH`qIhY@Jl?YJ7T@}aD;ch)Y|+i&j0Dl=%_2U8weMH9p{YCxESZZ9i= xcRnQXH}K&4!=T&JN({tI(%@Mg`TylOEHO1G&Clr_Q3L@Win3}lrP5{}{}($Iq6Yu~ delta 59061 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 Date: Sun, 8 Mar 2015 16:46:41 -0500 Subject: [PATCH 058/101] Loyalty Implant Firing Pins - Allows the construction of Loyalty Pins at Combat tech 5, instead of 10. --- code/modules/research/designs/weapon_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 62aca6fca2a..38615c9f359 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -16,7 +16,7 @@ name = "loyalty firing pin" desc = "This is a security firing pin which only authorizes users who are loyalty-implanted." id = "pin_loyalty" - req_tech = list("combat" = 10, "materials" = 3, "powerstorage" = 3) + req_tech = list("combat" = 5, "materials" = 3, "powerstorage" = 3) build_type = PROTOLATHE materials = list("$silver" = 600, "$diamond" = 600, "$uranium" = 200) build_path = /obj/item/device/firing_pin/implant/loyalty From 831f0dee6306dfd65594d5ebaac6b5dbfbff7293 Mon Sep 17 00:00:00 2001 From: GunHog Date: Sun, 8 Mar 2015 16:54:10 -0500 Subject: [PATCH 059/101] Changelog Mandatory sacrifice to Jordie! --- html/changelogs/Gun_Hog-LoyaltyPins.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/Gun_Hog-LoyaltyPins.yml diff --git a/html/changelogs/Gun_Hog-LoyaltyPins.yml b/html/changelogs/Gun_Hog-LoyaltyPins.yml new file mode 100644 index 00000000000..1d310521b39 --- /dev/null +++ b/html/changelogs/Gun_Hog-LoyaltyPins.yml @@ -0,0 +1,7 @@ + +author: Gun Hog + +delete-after: True + +changes: + - rscadd: "Nanotrasen has approved distribution of Loyalty Implant Firing Pin designs. They can be fabricated with sufficient research into weapons technology. If inserted into a firearm, it will only fire upon successful interface with a user's Loyalty Implant." From c9cc003c650248d6f44ebde37f1ba23eac4197c0 Mon Sep 17 00:00:00 2001 From: Incoming Date: Sun, 8 Mar 2015 20:55:36 -0400 Subject: [PATCH 060/101] Explicitly passes a mobs mutant_color in blood samples --- code/modules/hydroponics/hydroponics.dm | 4 +++- code/modules/hydroponics/seeds.dm | 2 ++ code/modules/mob/living/carbon/human/blood.dm | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index dc57adaae27..0192476e487 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -842,7 +842,9 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p podman.ckey = ckey_holder podman.gender = blood_gender podman.faction |= factions - hardset_dna(podman,null,null,podman.real_name,blood_type,/datum/species/plant/pod)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman + if(!mutant_color) + mutant_color = "#59CE00" + hardset_dna(podman,null,null,podman.real_name,blood_type,/datum/species/plant/pod,mutant_color)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman podman.set_cloned_appearance() else //else, one packet of seeds. maybe two diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 287a8e398e2..1258ec006ae 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -90,6 +90,7 @@ var/datum/mind/mind = null var/blood_gender = null var/blood_type = null + var/mutant_color = null var/factions = null var/contains_sample = 0 @@ -103,6 +104,7 @@ realName = bloodSample.data["real_name"] blood_gender = bloodSample.data["gender"] blood_type = bloodSample.data["blood_type"] + mutant_color = bloodSample.data["mutant_color"] factions = bloodSample.data["factions"] W.reagents.clear_reagents() user << "You inject the contents of the syringe into the seeds." diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index e8c04f0444b..48da639f97e 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -30,7 +30,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 /mob/living/carbon/human/proc/fixblood() for(var/datum/reagent/blood/B in vessel.reagent_list) if(B.id == "blood") - B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"mutant_color"=null, "factions"=null) /mob/living/carbon/human/proc/suppress_bloodloss(var/amount) if(bleedsuppress) @@ -171,6 +171,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 B.data["blood_type"] = copytext(src.dna.blood_type,1,0) B.data["gender"] = src.gender B.data["real_name"] = src.real_name + B.data["mutant_color"] = src.dna.mutant_color B.data["factions"] = src.faction return B From 6f318417fec866a3c1bd997c174f5b1c60a2d65f Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Mon, 9 Mar 2015 19:28:22 +1100 Subject: [PATCH 061/101] unhardcodes brig timers --- .../MetaStation/MetaStation.v40D.dmm | 8 ++-- _maps/map_files/MiniStation/MiniStation.dmm | 16 +++---- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 10 ++--- code/game/machinery/doors/brigdoors.dm | 42 ------------------- 4 files changed, 17 insertions(+), 59 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v40D.dmm b/_maps/map_files/MetaStation/MetaStation.v40D.dmm index 4a87c6eefcd..16cb900b63b 100644 --- a/_maps/map_files/MetaStation/MetaStation.v40D.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v40D.dmm @@ -1230,12 +1230,12 @@ "axH" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/brig) "axI" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig) "axJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/brig) -"axK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light,/obj/machinery/door_timer/cell_1,/obj/machinery/camera{c_tag = "Brig - Hallway - Port"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) +"axK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light,/obj/machinery/camera{c_tag = "Brig - Hallway - Port"; dir = 1; network = list("SS13")},/obj/machinery/door_timer{id = "Cell 1"; name = "Cell 1"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "axL" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/brig) "axM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/security/brig) -"axN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door_timer/cell_2,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) +"axN" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/obj/machinery/door_timer{id = "Cell 3"; name = "Cell 3"; pixel_y = -32},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/brig) "axO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) -"axP" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/obj/machinery/door_timer/cell_3,/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/brig) +"axP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door_timer{id = "Cell 2"; name = "Cell 2"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "axQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig) "axR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) "axS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) @@ -7953,7 +7953,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatJatJatJatJatJaahatJatJaahcrMatJatJaahaahaahaahalWalWatKalWalWatLatMatMatMatMatMatNalWalWalWalWatOavbatPatPatPatPatQatRaheatSavcatUatVatWatXatYatZauaaubaucaudaheangaavaavaavanmahAaukaulansaumavdavgajSauoadRadRanBanyanoakjadRautanBahJahJajQanCauwauxanCajQaodanZajQaoiaqtaqtauBauBauBajQajQauCaheaiYauDauEarWauFauGauHauIauJauKauLauMauNauOauParWauQaocaxqauSauTauUaocauVaocaocaocauWaocaocauXauYauZajoajoajoajoauVapwapxavaazvatHaBwaBjaveatHaobatHaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQxaahatJatJatJatJatJatJatJatJatJatJatJavfatJaahcrMalWalWalWaBFavhalWaahaahaahaahaahaahaahaahaahaahaahalWankaviaotalOavjalOavkavlavmavnavoavpaheaheaheaokaojaojaojaolaheaheaoAaoOaoMaoPaoAahAahAagKavzavAameavBavBavCavDavBavEavBavDavBavFavBavEavGavHavIavDavJavKavBavBavBavDavBavLahCavMavNavNavNavNagKaquaheauEaiYaiYarWarWarWarWarWavOavPavQavRavSarWarWarWavTaocapwavUatyapxaocapxaocavVaocavWavXavYavZawaawbawcawdaweawfawgawhaweawiapxapxavUapxawjatIawkatIabjabjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrMaahatJaraatJatJatJatJawlaahatJatJatJatJatJatJawmawnawmawoawpalWalWaahaaaaaaaaaaaaaaaaaaaaaaaaaahalWalWalWapRalOawqalOawrawsawtawuawvawwaheaaaaahaaaaaaaaaaaaaaaaahaaaaoUapyapvapCapzawCavNapDawEawFawGawHawHawIawGawHawJawKawGawLawMawHawNawOawPawHawQawRawSawTawTawUawVawWawXawYawZaxaaxbaxcaxdagKaquaheaxeahfaxfarWaxgaxhaxiatratsattaxjarWaxkatpaxlarWaxmaocaocaocauWaocaocapxaocaqKaocaxnatHatHatAaxoajoatHatHatHatHatHatHatHatHatHaoaatHatHatHatHatHaxpatHaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatJatJatJatJatJatJatJatJatJatJatJaahatJatJatJaahalWalWalWaBHawwaotalWaaaangadoaavadoanmaahaahaahaahalWapFalWaxwasvasvasvaxxaxyalWaxzaxAaxBaheaaaaxCaxCaxCaxCaxCaxCaxCaaaaoAapLapGaqbaoAahAahAagKaxHaxIaxJaxKaxLaxMaxJaxNaxLaxIaxOaxPaxQaxRaxSaxTaxUaxVaxWaxXaxYaxZayaaxYaybaycaydayeayfaygayhayiayjagKaquaykaykaykaykaykauPaylaymaynayoaypauLayqayraysauFarWaqhaytayuayvaywayvayxayvayyayvayvayzayAayBayCayDayEayFayGayFayHayIayJayIayKatHatHatHayHayIayKayLayLayFaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatJatJatJatJatJatJatJatJatJatJatJaahatJatJatJaahalWalWalWaBHawwaotalWaaaangadoaavadoanmaahaahaahaahalWapFalWaxwasvasvasvaxxaxyalWaxzaxAaxBaheaaaaxCaxCaxCaxCaxCaxCaxCaaaaoAapLapGaqbaoAahAahAagKaxHaxIaxJaxKaxLaxMaxJaxPaxLaxIaxOaxNaxQaxRaxSaxTaxUaxVaxWaxXaxYaxZayaaxYaybaycaydayeayfaygayhayiayjagKaquaykaykaykaykaykauPaylaymaynayoaypauLayqayraysauFarWaqhaytayuayvaywayvayxayvayyayvayvayzayAayBayCayDayEayFayGayFayHayIayJayIayKatHatHatHayHayIayKayLayLayFaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahatJatJatJatJatJatJatJayMatJaahaahaahaahalWalOawwaouagAaaaaoAarlaqQarlaoAarCarCarCayUayUayUayUaxFayUayUayWayWayWayWayTayWayYaheaahaxCayXayVazaayZazbaxCaaaaoAasJasJaueaoAaaaaaaazgaufaziaugagKaufazlaugagKaufazoaugagKavyahAawxagKahAauhazuahAahAazxazxauiazzaujazxazxazBagKagKagKagKagKaquaykazCazDazEaykarWarWarWarWazFazGazHavRavSarWarWarWaocazIapwaoaapxapwazJapxatHatHatHatHatHazKazLazMazNazOazPazOazQazRazSazRazTayIazUayIazVazRazSazRayLazWazXaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQxaahaahaahatJatJatJatJaraatJatJatJazYatJatJatJatJaahaaaaahagAaviawwanfalWaaaaavasJaupasJaavarCaAcaAdayUaAeaAfaAgaAhaAiayUaAjaAkaAlaAmaAnayWayYaheaaaaxCazdazcaAoazeaApaxCaaaaoUauqasJauraoAausausaboaAxaAyaAzagKaAAaAyaAzagKaABaAyaAzagKaACaADaAEagKaAFaAGaAHaAIawyazxaAKaALaAMaANaAOaAPazBaAQaARaARaASaARaATaykaAUaAVaAWaykaAXaAYaAXarWaAZaBaaBbaBcaBdaBeaBfaBgayvaBhatHatHatHatHatHatHatHaBiaBIauuaBkaBlaBmaBnaBoayFayFayFaahaahaJzaBqazRazRazRazRazRaBraJzazRaBsayFayFazXaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahatJatJatJatJatJatJatJaahatJaahaahatJatJaahaahalWalWardawwalWalWaaaaoAasJasJasJaBLaBuaBvaBvaCTaBxaByaBzaBAaBBaBCaBDaBEaCVaBGaDHayWayYaheaaaaxCaAraAqaBJaAsaBKaxCaaaaoAauyasJasJauzaBOauAaboaBQaAyaBRagKaBQaAyaBSagKaBQaAyaBTagKaBUaBVaBWagKaBXaBYaBZaCaaCbazxaCcaCdaCeaCfaCgaChazBaCiapjapjapjaCjaCkaykaClaCmaCnaykaCoaCpaCpaCqaCraCsaCtarWarWarWarWarWaocaCuatHavqaCwaCxaCyavraCAaCBaCCaCCaCCaCCaCDaCEaCFavsaCHayFaCIaahaahaaaaaaaaaaahaahaaaaaaaahaaaatJazRayFazXaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index d63590ecb3c..ba976b45402 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -252,7 +252,7 @@ "eR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/security/brig) "eS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/brig) "eT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/brig) -"eU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/door_timer/cell_2{dir = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) +"eU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door_timer{id = "Cell 2"; name = "Cell 2"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) "eV" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/turf/simulated/floor/engine,/area/medical/research{name = "Research Division"}) "eW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "eX" = (/turf/simulated/wall,/area/space) @@ -345,7 +345,7 @@ "gG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel,/area/security/brig) "gH" = (/obj/structure/table,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/turf/simulated/floor/plasteel,/area/security/brig) "gI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/security/brig) -"gJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door_timer/cell_3{dir = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) +"gJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/door_timer{id = "Cell 1"; name = "Cell 1"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) "gK" = (/obj/machinery/computer/security/wooden_tv,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/brig) "gL" = (/obj/item/weapon/storage/secure/safe{pixel_x = 4; pixel_y = 26},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/fancy/carpet,/area/security/brig) "gM" = (/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/camera/autoname,/obj/item/weapon/folder/yellow,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/fancy/carpet,/area/security/brig) @@ -396,7 +396,7 @@ "hF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/brig) "hG" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/security/brig) "hH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/brig) -"hI" = (/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 3"; name = "Cell 3"; req_access_txt = "2"},/obj/machinery/door/firedoor/border_only{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) +"hI" = (/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 1"; name = "Cell 1"; req_access_txt = "2"},/obj/machinery/door/firedoor/border_only{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) "hJ" = (/obj/machinery/flasher{id = "Cell 3"; pixel_x = 28},/turf/simulated/floor/plasteel,/area/security/brig) "hK" = (/obj/structure/closet/secure_closet/detective,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/brig) "hL" = (/turf/simulated/floor/fancy/carpet,/area/security/brig) @@ -1703,7 +1703,7 @@ "GM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/computer) "GN" = (/obj/structure/closet/radiation,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/tcommsat/computer) "GO" = (/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 12; id = "ferry_home"; name = "station"; turf_type = /turf/space; width = 5},/turf/simulated/floor/plating,/area/space) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1825,13 +1825,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaambqcMcNcOcOcPcOcQcRcSbqbNbNbNcTcUcVcUcWcXcYcZcWdadbcUdccjdddedfdgdhdidjckamamamamamambUcscscsdkdlcpcpdmdncmcmdobUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamamambqdpcScScScScSdqcSdrdsbNdtdudvdwdxdydwdzdAdBdCdDdEcjcjcjdFdedGdHdedIdJckaaaaaaaaaaambUbUbUbUdKbUdLdMbUbUbUbUbUbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamamamamamambqdNcSdOcScSdPcSdOdQbqbqbqdRdSdTdUdVdWdXdYdZeaebecedeeefdeegeheiejekelckaaaaaaaaaaaabUclcmcmemencpcpeoepeqeresetaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeuamamamamamamambqevewexeyezezezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeSeSeTeUckckckckckaaaaaaaaaaambUcFcGcseVcIcpcpcpcpcpcpcpeWamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeuamamamamamamambqevewexeyezezezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeSeSeTgJckckckckckaaaaaaaaaaambUcFcGcseVcIcpcpcpcpcpcpcpeWamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXamaaaaaaaaaaambJeZfafbfccScScSfdfebqffcSfbfgfheIfieKeLfjfkflebfmedfndedefofpfqfrfsckamamamamamamambUcscscsftfucpcpcpcpfvcpcpfwamamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaabqfxcSfyfzfAfAfAfAfBfCfDfAfEfFfGfHfIfJeLfKfLcjfMfNckdededefofOfPdefQckamaaaaaaaaaaambUbUbUbUbUbUcpcpfRfSfTfUbUbUbUbUbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaabqfxcSfyfzfAfAfAfAfBfCfDfAfEfFfGfHfIfJeLfKfLcjfMfNckdededefofOhIdefQckamaaaaaaaaaaambUbUbUbUbUbUcpcpfRfSfTfUbUbUbUbUbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaabqcScSfbfccScScScSdrfVcScSfafWbIfXfXfXfYfZgacjgbgcgdgegfggghgigjgegkcjckckckckglgmgngogpgqgrgsbUgtgugvbUbUgwbUgxgygzbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaagAgBcSfbfccScSgCcSdrfVcScScSdrgDfXfXfXeLfjgacjgEgFgFgGgHgIdegJckckckcjgKgLgMckgNgOgPgogQcpcpcpcpcpgRgSgTgUgVbUgWgXgYbUamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaagAgBcSfbfccScSgCcSdrfVcScScSdrgDfXfXfXeLfjgacjgEgFgFgGgHgIdeeUckckckcjgKgLgMckgNgOgPgogQcpcpcpcpcpgRgSgTgUgVbUgWgXgYbUamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaagZhacShbhchdbqbqbqbqbqbqbqbqbqbqbxbxbxeLfjhecjcjhfdehghhhigFhjfqfrhkcjhlhmhnckhofXhphqhrcpcpcphshthuhvhththwbUhxhyhxbUbUamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaaeHhAcSfbfccSbqbNbNbNbNbNbNbNbNbNbNbxhBeLfjgahCcjhDhEhFdehGgehHhIdehJcjhKhLhMckhNfXhOgohPhQhRhShThUhVhWcpcphXbUgRhYhZiabUamamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaaeHhAcSfbfccSbqbNbNbNbNbNbNbNbNbNbNbxhBeLfjgahCcjhDhEhFdehGgehHfPdehJcjhKhLhMckhNfXhOgohPhQhRhShThUhVhWcpcphXbUgRhYhZiabUamamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaaibcScShbhcicbqbNbxbxbxbxbxbxbxbxidbxieeLfjgaifcjigihiiijikilimgjgegkcjinioipckiqfXfXgoirhQisitiuiviwixiyiziAbUcpiBiCbUbUbUbUbUamamamamamamamamamamamamamamamamamiDiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaaafhgBcSfbfccSbqiEdwiFiGbxiHiIiJiKiLbxbxiMiNiOiPcjcjcjcjcjcjcjcjcjcjcjcjiQiRiSckiTfXiUgobUbUbUbUbUgviVbUbUbUbUbUcpiWcpiXbUiYiZjabLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajbjcjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaaaxJgZhaewjehcjfbqbOjgjhjijjjkjljljljmjnjofYdAjpjpjqjqjqjqjqjqjqjqjrjqjqjqjsjtjujqdzjqjvjwjxjyjzjAjBjCjDjEjFjEjGjHcpjIjJjKjLjMjLbUamamamamamamamamamamamamamamamamamiDiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index d54c10c66f8..be76146f855 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -502,13 +502,13 @@ "ajH" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/brig) "ajI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig) "ajJ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/brig) -"ajK" = (/obj/machinery/door_timer/cell_1,/obj/machinery/light,/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) +"ajK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door_timer{id = "Cell 2"; name = "Cell 2"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "ajL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/brig) -"ajM" = (/obj/machinery/door_timer/cell_2,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) -"ajN" = (/obj/machinery/door_timer/cell_3,/obj/machinery/camera{c_tag = "Brig Central"; dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) +"ajM" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/machinery/door_timer{id = "Cell 1"; name = "Cell 1"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) +"ajN" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door_timer{id = "Cell 4"; name = "Cell 4"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "ajO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "ajP" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig) -"ajQ" = (/obj/machinery/door_timer/cell_4,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) +"ajQ" = (/obj/machinery/camera{c_tag = "Brig Central"; dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door_timer{id = "Cell 3"; name = "Cell 3"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "ajR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/brig) "ajS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/security/brig) "ajT" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) @@ -6556,7 +6556,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfacfafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaiaieagWaigafRaihaiiaiiaijahcafRaikailafUaimainaioaipaipaiqairafUafUaisaitaduaduaduabmabmabmabmabmabmabmabmaiuaivaiwaidaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaafdaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaixaixaiyaixaizaiAafRafRafRafRafRafRaiBaiCafRaiDaiEaiFaiFaiFaiFaiFaiFaiFaiFaiGaiHaiIaiJaiFailaiAaiKaiLaiMaiNaiOaiPaiQaiRaiuaivaiwaidaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaiSabqaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaafdaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaixaiTaiUaiVaiWaiXaiYaiZajaajbajcajdajeajfajgajhajiajjajkajjajjajjajjajjajjajlajjajiajmajkajnajoajpajqajrajsajtajuajvajwaiuaivaiwacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaadzaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxaeZaeZaeZaelaaaaafaizajyajzajAajBajCajDajEajFajGajHajIajJajKajLajIajJajMajLajIajJajNajOajOajOajPahCajQajRajSajTajUajVajWajVajVajVajXajYaiPaiuaivaiwaidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafaafadzaafaafaafaafaafabfabfabfaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxaeZaeZaeZaelaaaaafaizajyajzajAajBajCajDajEajFajGajHajIajJajMajLajIajJajKajLajIajJajQajOajOajOajPahCajNajRajSajTajUajVajWajVajVajVajXajYaiPaiuaivaiwaidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafaafadzaafaafaafaafaafabfabfabfaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaiSafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZakaakbakcajZaiyaiyakdakeakfakgakhaiAafRakiafRafRakjakkaklakmaknakoaklakmaknakpakqakmakraksakmaktakuakmakvakwakxaiAakyakzaiPakAaiPakBakCaiPaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaakDaaaaaaaafaaaaaaaafaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaakEaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaakFakGakHakIakJakKakLakKakeakMakNakOaiAakPakQakPafRakRakSakTafRakUakSakTafRakUakSakTafRakVakWakXakYailafRakZalaalbaiAalcaldalealfalealgalhaliaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaaaaaaljaaaaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaallalmallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafalnaloalnaafaafaafaafabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZalpalqalrajZaiyaiyaiyalsaltalualvaiAakPakQakPafRalwakSalxafRalyakSalzafRalAakSalBafRalCalDalEakYalFafRalGakSalHaiAalIalJalIalKalIalIalLalIaiuaivaiwacAacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaalMalNalMaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaallalOallaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index f3bee16d85f..f91fb5a6ddf 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -251,48 +251,6 @@ if(maptext != new_text) maptext = new_text - -/obj/machinery/door_timer/cell_1 - name = "Cell 1" - id = "Cell 1" - dir = 2 - pixel_y = -32 - - -/obj/machinery/door_timer/cell_2 - name = "Cell 2" - id = "Cell 2" - dir = 2 - pixel_y = -32 - - -/obj/machinery/door_timer/cell_3 - name = "Cell 3" - id = "Cell 3" - dir = 2 - pixel_y = -32 - - -/obj/machinery/door_timer/cell_4 - name = "Cell 4" - id = "Cell 4" - dir = 2 - pixel_y = -32 - - -/obj/machinery/door_timer/cell_5 - name = "Cell 5" - id = "Cell 5" - dir = 2 - pixel_y = -32 - - -/obj/machinery/door_timer/cell_6 - name = "Cell 6" - id = "Cell 6" - dir = 4 - pixel_x = 32 - #undef FONT_SIZE #undef FONT_COLOR #undef FONT_STYLE From 79857b0eacbbe1caa61cadf00ac77191bb7a4130 Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Mon, 9 Mar 2015 17:02:34 +0800 Subject: [PATCH 062/101] InitalCommit --- code/game/gamemodes/objective_items.dm | 2 +- code/modules/projectiles/guns/energy/nuclear.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 721e683891a..34713b6fb25 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -18,7 +18,7 @@ datum/objective_item/steal/caplaser excludefromjob = list("Captain") datum/objective_item/steal/hoslaser - name = "the head of security's recreated antique laser gun" + name = "the head of security's personal laser gun" targetitem = /obj/item/weapon/gun/energy/gun/hos difficulty = 10 excludefromjob = list("Head Of Security") diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index f83123bf7c7..412c581c620 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -13,7 +13,7 @@ update_icon() /obj/item/weapon/gun/energy/gun/hos - desc = "This is a modern recreation of the antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time, its also expensive." + desc = "This is an expensive, modern recreation of a antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time." icon_state = "hoslaser" item_state = null force = 10 @@ -126,4 +126,4 @@ trigger_guard = 0 obj/item/weapon/gun/energy/gun/turret/update_icon() - icon_state = initial(icon_state) + icon_state = initial(icon_state) From 4071f25270cb817cbb72af322e94ad833f1f5bf6 Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 9 Mar 2015 12:28:35 +0100 Subject: [PATCH 063/101] Simplifies laser reflection code, no more reflect_chance var at the obj/item level. --- code/game/gamemodes/changeling/powers/mutations.dm | 3 --- code/game/objects/items.dm | 4 +--- code/game/objects/items/weapons/shields.dm | 2 -- code/game/objects/items/weapons/twohanded.dm | 3 +-- code/modules/clothing/suits/armor.dm | 3 +-- code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 6 files changed, 4 insertions(+), 13 deletions(-) diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index 98d0a0f18c6..eb77d14ef3d 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -224,9 +224,6 @@ remaining_uses-- return 1 -/obj/item/weapon/shield/changeling/IsReflect() - return 0 - /***************************************\ |*********SPACE SUIT + HELMET***********| diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 876faef69b0..33928ac82a2 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -33,7 +33,6 @@ var/list/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) var/list/allowed = null //suit storage stuff. var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers. - var/reflect_chance = 0 //This var dictates what % of a time an object will reflect an energy based weapon's shot var/strip_delay = 40 var/put_on_delay = 20 var/m_amt = 0 // metal @@ -311,8 +310,7 @@ return 0 /obj/item/proc/IsReflect(var/def_zone) //This proc determines if and at what% an object will reflect energy projectiles if it's in l_hand,r_hand or wear_suit - if(prob(reflect_chance)) - return 1 + return 0 /obj/item/proc/eyestab(mob/living/carbon/M as mob, mob/living/carbon/user as mob) diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 2a9a15c156c..a8875117ade 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -70,7 +70,6 @@ w_class = 4 playsound(user, 'sound/weapons/saberon.ogg', 35, 1) user << "[src] is now active." - reflect_chance = 40 else force = 3 throwforce = 3 @@ -78,7 +77,6 @@ w_class = 1 playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) user << "[src] can now be concealed." - reflect_chance = 0 add_fingerprint(user) /obj/item/weapon/shield/riot/tele diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index e72ac3aa40a..32349ddb581 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -192,7 +192,6 @@ obj/item/weapon/twohanded/ item_color = "green" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") var/hacked = 0 - reflect_chance = 0 /obj/item/weapon/twohanded/dualsaber/New() item_color = pick("red", "blue", "green", "purple") @@ -234,7 +233,7 @@ obj/item/weapon/twohanded/ user << "You cant pick up such dangerous item with your meaty hands without losing fingers, better not to." return 1 -/obj/item/weapon/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflect_chance var for balance issues and switches hitsounds. +/obj/item/weapon/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflection chance for balance issues and switches hitsounds. if(istype(M)) if(M.dna.check_mutation(HULK)) M << "You lack the grace to wield this." diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index ff4daf648d0..d5ee7e59bcc 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -91,10 +91,9 @@ item_state = "armor_reflec" blood_overlay_type = "armor" armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) - reflect_chance = 40 + var/hit_reflect_chance = 40 /obj/item/clothing/suit/armor/laserproof/IsReflect(var/def_zone) - var/hit_reflect_chance = reflect_chance if(!(def_zone in list("chest", "groin"))) //If not shot where ablative is covering you, you don't get the reflection bonus! hit_reflect_chance = 0 if (prob(hit_reflect_chance)) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 0748e9d3747..108d680a734 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -67,7 +67,7 @@ emp_act return 2 return (..(P , def_zone)) -/mob/living/carbon/human/proc/check_reflect(var/def_zone) //Reflection checks for anything in your l_hand, r_hand, or wear_suit based on reflect_chance var of the object +/mob/living/carbon/human/proc/check_reflect(var/def_zone) //Reflection checks for anything in your l_hand, r_hand, or wear_suit based on the reflection chance of the object if(wear_suit && istype(wear_suit, /obj/item/)) var/obj/item/I = wear_suit if(I.IsReflect(def_zone) == 1) From 8a1a5ff832c72d97e5b5f5a9deb20693f41c0ae8 Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 9 Mar 2015 16:49:31 +0100 Subject: [PATCH 064/101] Fixes Strangeness mutation gain text not appearing. --- code/datums/mutations.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index 566adcedc03..8e3b2a80fe6 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -215,6 +215,7 @@ text_gain_indication = "You feel strange." /datum/mutation/human/bad_dna/on_acquiring(var/mob/living/carbon/human/owner) + owner << text_gain_indication var/mob/new_mob if(prob(95)) if(prob(50)) From 1cb7674ebd4121392e2fee309ababe239a426ddb Mon Sep 17 00:00:00 2001 From: Incoming Date: Mon, 9 Mar 2015 12:42:41 -0400 Subject: [PATCH 065/101] Adds a cheap looking pulse animation for magic mirrors so wizards notice they are actually more than normal mirrors Adds a changelog --- code/game/objects/structures/mirror.dm | 1 + html/changelogs/Incoming5643-magicmirror.yml | 9 +++++++++ icons/obj/watercloset.dmi | Bin 16366 -> 15003 bytes 3 files changed, 10 insertions(+) create mode 100644 html/changelogs/Incoming5643-magicmirror.yml diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 562fc159cd9..050f225a6b4 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -105,6 +105,7 @@ /obj/structure/mirror/magic name = "magic mirror" desc = "Turn and face the strange... face." + icon_state = "magic_mirror" /obj/structure/mirror/magic/attack_hand(mob/user as mob) diff --git a/html/changelogs/Incoming5643-magicmirror.yml b/html/changelogs/Incoming5643-magicmirror.yml new file mode 100644 index 00000000000..aad4ce79883 --- /dev/null +++ b/html/changelogs/Incoming5643-magicmirror.yml @@ -0,0 +1,9 @@ +################################ + + +author: Incoming5643 + +delete-after: True + +changes: + - rscadd: "Utilizing a new magic mirror found in the den, wizards can now customize their appearance to a high degree before descending upon the station." diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 2b0a66d9ac5249da4f247103c64cfe91949b7263..e31bb79d2474249dd2d161f76d69219e54f38c68 100644 GIT binary patch literal 15003 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 literal 16366 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 From 71d560bd3af6102b808f984cfefc67f474398566 Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 9 Mar 2015 19:09:52 +0100 Subject: [PATCH 066/101] Fixes a runtime with buckling screen alert Fixes being able to buckle to janicart while crit and when there's a dense object on the janicart's turf. Fixes alien nest not buckling and being wrongly pixel shifted, and fixed a runtime. Fixes golems being super easy to weaken by punch and not doing more damage themselves via punch. Fixes some typos. --- code/_onclick/hud/alert.dm | 2 +- code/game/objects/buckling.dm | 1 + code/game/objects/structures/janicart.dm | 13 +++++++++---- .../stool_bed_chair_nest/alien_nests.dm | 15 +++++---------- code/modules/mob/living/carbon/human/species.dm | 3 ++- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 5dffc0127b2..fbde37f1d94 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -76,7 +76,7 @@ alerts -= category if(client && hud_used) hud_used.reorganize_alerts() - client.screen -= alert + client.screen -= alert qdel(alert) // Make sure any alerts you throw have a path that matches /obj/screen/alert/[id] or /obj/screen/alert/[category] diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 78933650b03..d4235047a97 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -82,6 +82,7 @@ "[M.name] is buckled to [src] by [user.name]!",\ "You are buckled to [src] by [user.name]!",\ "You heat metal clanking.") + return 1 /obj/proc/user_unbuckle_mob(mob/user) var/mob/living/M = unbuckle_mob() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 34a68cee94c..8cab07a87e5 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -250,11 +250,16 @@ else user << "You'll need the keys in one of your hands to drive this [callme]." - /obj/structure/stool/bed/chair/janicart/user_buckle_mob(mob/living/M, mob/user) - M.loc = loc - ..() - update_mob() + if(user.incapacitated()) //user can't move the mob on the janicart's turf if incapacitated + return + for(var/atom/movable/A in get_turf(src)) //we check for obstacles on the turf. + if(A.density) + if(A != src && A != M) + return + M.loc = loc //we move the mob on the janicart's turf before checking if we can buckle. + if(..()) + update_mob() /obj/structure/stool/bed/chair/janicart/unbuckle_mob() if(buckled_mob) diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index 974a5a9af5e..594ce58d2d4 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -26,7 +26,7 @@ */ /obj/structure/stool/bed/nest/user_buckle_mob(mob/M as mob, mob/user as mob) - if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) ) + if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || user.stat || M.buckled || istype(user, /mob/living/silicon/pai) ) return if(istype(M,/mob/living/carbon/alien)) @@ -36,27 +36,22 @@ unbuckle_mob() - if(M == usr) - return - else + if(buckle_mob(M)) M.visible_message(\ "[user.name] secretes a thick vile goo, securing [M.name] into [src]!",\ "[user.name] drenches you in a foul-smelling resin, trapping you in [src]!",\ "You hear squelching...") - return /obj/structure/stool/bed/nest/post_buckle_mob(mob/living/M) if(M == buckled_mob) - M.pixel_y += 1 + M.pixel_y += 6 M.pixel_x += 2 overlays += image('icons/mob/alien.dmi', "nestoverlay", layer=6) else - buckled_mob.pixel_y -= 1 - buckled_mob.pixel_x -= 2 + M.pixel_x -= 2 + M.pixel_y = initial(M.pixel_y) overlays.Cut() - - /obj/structure/stool/bed/nest/attackby(obj/item/weapon/W as obj, mob/user as mob, params) var/aforce = W.force health = max(0, health - aforce) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 61746a85d4e..ed4242776fc 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -757,7 +757,8 @@ atk_verb = M.dna.species.attack_verb var/damage = rand(0, 9) - damage += punchmod + if(M.dna) + damage += M.dna.species.punchmod if(!damage) if(M.dna) From 79a20bd57bf5cd09c8a6a7d2a4fddd74764c8405 Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 9 Mar 2015 19:19:17 +0100 Subject: [PATCH 067/101] slight fix --- code/game/objects/buckling.dm | 1 - code/game/objects/structures/janicart.dm | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index d4235047a97..78933650b03 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -82,7 +82,6 @@ "[M.name] is buckled to [src] by [user.name]!",\ "You are buckled to [src] by [user.name]!",\ "You heat metal clanking.") - return 1 /obj/proc/user_unbuckle_mob(mob/user) var/mob/living/M = unbuckle_mob() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 8cab07a87e5..3de876924ca 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -258,8 +258,8 @@ if(A != src && A != M) return M.loc = loc //we move the mob on the janicart's turf before checking if we can buckle. - if(..()) - update_mob() + ..() + update_mob() /obj/structure/stool/bed/chair/janicart/unbuckle_mob() if(buckled_mob) From bc091234eebaee6a33172131fd1ab1f127825b67 Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 9 Mar 2015 19:43:39 +0100 Subject: [PATCH 068/101] Changes egg breaking to use reagent_containers/glass/attackby() (fix issue with custom egg salad) You can only break eggs on glass containers (beaker,bucket,bowl,etc) --- code/modules/food&drinks/food/snacks_egg.dm | 15 --------------- code/modules/reagents/reagent_containers/glass.dm | 11 +++++++++++ 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/code/modules/food&drinks/food/snacks_egg.dm b/code/modules/food&drinks/food/snacks_egg.dm index c86118a5462..8d9a585c2f8 100644 --- a/code/modules/food&drinks/food/snacks_egg.dm +++ b/code/modules/food&drinks/food/snacks_egg.dm @@ -16,21 +16,6 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/boiledegg filling_color = "#F0E68C" -/obj/item/weapon/reagent_containers/food/snacks/egg/afterattack(obj/target, mob/user, proximity) - if(!proximity) - return - - if(istype(target, /obj/item/weapon/reagent_containers)) - if(target.is_open_container() && target.reagents) - - if(target.reagents.total_volume >= target.reagents.maximum_volume) - user << "[target] is full." - else - user << "You break [src] in [target]." - target.reagents.add_reagent("eggyolk", 5) - qdel(src) - return - /obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) ..() new/obj/effect/decal/cleanable/egg_smudge(src.loc) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 7079ae6bf26..e8cb2865b49 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -101,6 +101,17 @@ reagents.handle_reactions() else user << "[src] is already hotter than [I]." + + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/egg)) //breaking eggs + var/obj/item/weapon/reagent_containers/food/snacks/egg/E = I + if(reagents) + if(reagents.total_volume >= reagents.maximum_volume) + user << "[src] is full." + else + user << "You break [E] in [src]." + reagents.add_reagent("eggyolk", 5) + qdel(E) + return ..() From 4f6c96235b49326a3467fc1917718b35709ee1e3 Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 9 Mar 2015 21:13:01 +0100 Subject: [PATCH 069/101] Fixes book bags not being able to hold bibles. Changes the book bag sprite so it looks more like a briefcase and isn't confused with a backpack. --- .../objects/items/weapons/storage/bags.dm | 2 +- icons/obj/library.dmi | Bin 22396 -> 22315 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index fa45ef40477..04f6af6e312 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -277,7 +277,7 @@ max_combined_w_class = 21 max_w_class = 3 w_class = 4 //Bigger than a book because physics - can_hold = list(/obj/item/weapon/book, /obj/item/weapon/spellbook) //No bibles, consistent with bookcase + can_hold = list(/obj/item/weapon/book, /obj/item/weapon/storage/book, /obj/item/weapon/spellbook) /* * Trays - Agouri diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index a1610b9e284f996ee000a38675cb9ba061d4fd08..e15935f6ff36d97831196179572eb042dcae3a55 100644 GIT binary patch delta 2731 zcmV;c3RLy{t^upA0kG>q0V}iYLAnZm>S5$IuJHGUKf8O9&L>4y?5Gi77>Euj639Uc z!*CHGg%P+5ASl)uYEq@LiXeq6r?HK|g;k{qWFwXVcZt)eQedbEkONW}QXx1p&O#7F zr@P#3?)HzINip-tA(wm0U6RX%jvrv(?r^w|yW)I&^X7eTY;7D9NfxBi1T#s0w&FVR zxwd`B6mbjX`0lZs!eHC?9GkGRzke2pF!9=#2~0j$|Mtt7&;9t-Kb3wxPaASi!Saxa zjl6`#QVBqp)DVKAzg4#{%Fa>trBoP736}_-HG=aDO(}Ja65B@Fjt%a|6$N$=brAVP z%SmLTS7m>!{!)RBApzizmoJZhUFNk+>?KNTOa$qFbQ8dOI-86I($ z@+Y5^OG2B7pCq%)&l)69h=7Wc51@6@6BCv2k0r3c;_$F3LdmLKlgs8NJZdcKE zJHnyFXGrs!2NS7(m}u&@512aEQehIXo_+g8ov$bp!-! zzry4Sm*)uV_XDhUTunGc(I%1e+IKUKlSurexeChxG5G{JVn^I(C?)>7vx769hn-Q0 zbq_Y73CDJMUn=k8j~nJDpx58MfV*Ej08p%0yLQ#}jmX7+U zDiBIYu+oB z%q3cFyKn`;7X-h8O##^Z8HOqwq*Hdrdm zMLCq$*~i?TD#e#dj7g8H5y91H{au7hC^!gu3kc|M;| ztSCRncjUaArl5m|aZXjz?70J`Cl5LhMYlZx_@D^sXTKy@$PiU?m=E zGMcw2zf^>9sQYXmXyI$y$~zi`I&0ezx(2uJ7T**g>-&XDVRgo3{!!{PjslZSM+kh^ z_i@;e&r)NiJHaNOmtT1icqKme?Uy?D=iYDi`^VecxjysxXIc}FIf5d$-_Dw44*~#u zN4xcZ{Itz#pEu*SPWx3A<+s5e%!=vvV5AqYj=Wo2BestGRg!_ko zhq$=1k{}nGjO_NWdOf`G)?3(l?>(GvwJ<6n<9Z^d5KrFw|G1+N0kQW}WGQ}gYd?`< zoRBZrFY<%{*ey===jKfCa#UUR7mW4iPGb9D7_IOzq*-O!{ARDxO#x;>UrK!M+BMw2 zc@sVnUg&fHjC(p?^?Dd8g=gP<6WtqsHxkDxBcUb_s1y_;prYgh0HC<$jKa8X2uSAS z9Mw){P^Cj8YC`{|u%8pQa{Z|D)6*hXkX|M?2V9{`df0KD{wTzX@0i@4c=`nBRWsWY zDr$cg{P69!@%a7saq;?fY;SMl{>_^J0N*ms#B=uSS#)pQz_3cM$3~L}R0;}zeBfuE3KB*=uu`g04{^l^n9aE=oR?V$IpQjDUyvV$-LKKu|ZB3!(F9RRRx1$dcw zy3k})YP{ztObJ5gz5kCp<|d$j!k&)-C#p%MFGdP8BeH^;1VAaB+{dHF8ruLU_F~My zavVVMptbE;QUM^ohw8F#A76wNBamA2#;atEVGzf5mPLy3&v)Lzny1q=hDt@#tCJQB zb~*ETQJxRu5}F`%37Cn1W>vc9x&V{fugDB`sYkFPy#x+3wTX9gQ6Nx%B=QWU?jvB% zH|I!cwvnNDKoEcsh#uF%B8WQe1B;Vle7ir0rc|tgkBN$wQi>6IHI9>*elfBDG5ZTT>-9RBok3=h2W5abc7yY z=EH@VOS!3dgy&GL_7kgrM+=Z*Fwzb~C>466aH*siS8m;+c}r|O?DeA8zy9pA{BG9- zG&O#zL8aw5rqzQ6fD30YX(7Riti{HmkN~t0<+vJ zBPoOf358HeKqbqL3Ibe9Dp801_JXAtfF>V%QG8^U%N4M6QjDs9DjY5XO+D!8m`Xr- zNTdjCDF(+;JQ7jhcMwptQtmrKyX~Yf2(@=XP;iBap0ooi-^3HKY#<0Fl$k!cti^ID zAt9*4K7fTvG1{I3qHJ||U^2ItO^Q(`8WO1%wciOW#pw7)r_K9{GVYjxSL|#r liAAxaf?3NN4I0df{{v7{boR?QsZ#&|002ovPDHLkV1nCVKp_AC delta 2812 zcmVq0erLULAnZmYC_~VuJHG&y5~od*ODVEwsa8~L$b*spoAQZ z@gb0d2|gGELP2YE$ths44DN8e_4TV)@4fP4m~mk% zflT`P@}*7U7OR81$Fd89FF%w%VdYmWER3Yj3`V%PaOY#;e+=6^F`sd zT|4Nqab1kM%GtJ2x134xg;${}@Q%!r&t?0=2;Fvom3DyLL6quuyc?o7h|nLHHg(A7 z@BTHH#RnHIXrFYl->bs8DcWvSE&MUYRCn6y>I)Ow+`M^XsuS4wdMA~CT4OB8xSIgp z)7d5+;{#}&e74m%Fyry>eeSnl`SZl3ADzL!cL%Ad6l*4{&m6 zhUP?>e9Fp~6-}>vFtPmP#EG$O_Lah)?wgDUpI*GEFMRSzV+3AelqR58-Z_gu{_3mQ zPrzn243MNwO_@F^bJN>_&DIh}4oFDDrTd}G`1X&bjT~W|lou+0pNnFhPct=$&+N7`B{S$N(G~qB_F^fotMH6 zOuNbw*mp_hCCHS21zctah!ELwbF&MWRURpmdLak`$@kE{mO;KCLLdb~yJ{u9#QR*v z;H3PLGS`rkte?x3((d?xSvvO(&Y=|8-H+VyC6U`Ca#s0y^}g1{$0&kpYis(Y|IkeN1- z<_P@7$=CiEl!P|SbSdlRQ&m#_z<$>{?Mt-M2@nWEOAuN$Yzn~I&oI_5+1xbB&`_zd zgte~}`byz{^PL^^l|olajI>5yDV#oinqIwfMc1YYH7JFd2#Cq&{-4Y56!HAiM-L>E zmx2%qQEU0URT>n;RR5Mw zJ}`DXcTBr4Nav*dH<&YeR2-n)J~ z^}SRJlTO1g#AcCd4rdK z4_Viy0C_>J{ZWkHUdsIma?w{RR|E1fH~Y^7;wgInA9j=?Al81$EX8kZ?xtLfQ{fB# zha&42tQKe5b8#+sIcibz=Zw{7j$vzW=vMd`$}VSbe7#farU27oXbELIif|$boXrO? zgp@b^nhP2~ph{5652!5p001aa<=v8hZf0<3m?v=d;g&6D9%1J|e(6UYXVLNtf+N%? z_2+tS6J-2&0%1~m_;wxMtdV_^e7`4Ob`|o=qHm{Nc~h^sLTBC^%!HWLR_3X$kPHSB`Ji2%8m$*Ee;k+uVEZ$FF%ad4 zL-6sG*6x)YE9vjIXM*IMK7k;wfBIaemCtP=rAryH0pQDr4*?i0h&3Mn^FRB2Jom;M zxqa{6y{rH5`s=9N2Z%E785F($4?AX_f|b^MEZ9*^X>&44SWUt+Y8uBmj7e2Ht-kZ6ZfROgudpLv^h_KWK9N)P-8zMknQi27t3q9dR!F1na^t2_Xq6A}G6W zmI5G2Ah3hLJfStTN>YU?0FhnpRW1}lLO~rL0LeC1Hr1{ih|0#$jAM|8QB%mTBQU-n~2HR0W z64t(=F^I^ml((cXYCCBRVxwIUGy);qlXl?wn}i|>8;D{BZKqEG$6`rJg%B)4K7hG~ zVst_Yq9hfEkH~s|ZZA_P2E%DMQX;g+%hP;DnXR&D@s_1sGS(HVCDQ$*EI+J^-wA3<2)$S7*z}3&ps8 z>;BmG1k@gi!Phwr>Pj@9!yNqm>KTDBSq-J2l%Ec7&9k}P#~@NBKsGa+{T(r` z-@1<*|Jr_Qr2M?l3zna~{wUVi8%B_5bEP8XRIQoPd_e?f)>~JEx99hGu%j zmY`v*Fo=y2e)B;e_iVb31`X;)sZfjt|9{{WJ6}uUpx9BJq3aDA Date: Mon, 9 Mar 2015 20:43:56 +0000 Subject: [PATCH 070/101] A restructure/removal/cleanup of Ninja Code --- code/game/gamemodes/objective.dm | 25 +- code/game/machinery/camera/tracking.dm | 17 +- code/game/machinery/doors/windowdoor.dm | 16 - code/game/turfs/turf.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 2 +- code/modules/clothing/clothing.dm | 1 + code/modules/clothing/gloves/ninja.dm | 104 - code/modules/clothing/masks/gasmask.dm | 29 - code/modules/clothing/spacesuits/ninja.dm | 65 - code/modules/events/ninja.dm | 2436 ----------------- code/modules/mob/living/carbon/human/human.dm | 8 +- code/modules/mob/mob_helpers.dm | 2 +- code/modules/ninja/Ninja_Readme.dm | 10 + code/modules/ninja/__ninjaDefines.dm | 13 + code/modules/ninja/admin_ninja_verbs.dm | 61 + code/modules/ninja/energy_katana.dm | 10 + code/modules/ninja/ninja_event.dm | 214 ++ code/modules/ninja/suit/SpiderOS.dm | 277 ++ code/modules/ninja/suit/gloves.dm | 343 +++ code/modules/ninja/suit/head.dm | 11 + code/modules/ninja/suit/mask.dm | 137 + .../suit/n_suit_verbs/energy_net_nets.dm | 174 ++ .../suit/n_suit_verbs/ninja_adrenaline.dm | 26 + .../suit/n_suit_verbs/ninja_cost_check.dm | 29 + .../ninja/suit/n_suit_verbs/ninja_empulse.dm | 15 + .../ninja/suit/n_suit_verbs/ninja_net.dm | 32 + .../ninja/suit/n_suit_verbs/ninja_smoke.dm | 19 + .../ninja/suit/n_suit_verbs/ninja_stars.dm | 33 + .../ninja/suit/n_suit_verbs/ninja_stealth.dm | 78 + .../suit/n_suit_verbs/ninja_teleporting.dm | 89 + code/modules/ninja/suit/suit.dm | 172 ++ code/modules/ninja/suit/suit_attackby.dm | 61 + .../modules/ninja/suit/suit_initialisation.dm | 102 + code/modules/ninja/suit/suit_process.dm | 28 + .../modules/ninja/suit/suit_verbs_handlers.dm | 52 + code/modules/power/cell.dm | 9 - .../reagents/reagent_containers/glass.dm | 1 + icons/mob/belt.dmi | Bin 10854 -> 11183 bytes icons/mob/inhands/items_lefthand.dmi | Bin 91047 -> 91333 bytes icons/mob/inhands/items_righthand.dmi | Bin 89377 -> 89645 bytes icons/obj/weapons.dmi | Bin 30727 -> 30904 bytes tgstation.dme | 26 +- 42 files changed, 2048 insertions(+), 2681 deletions(-) delete mode 100644 code/modules/clothing/gloves/ninja.dm delete mode 100644 code/modules/clothing/spacesuits/ninja.dm delete mode 100644 code/modules/events/ninja.dm create mode 100644 code/modules/ninja/Ninja_Readme.dm create mode 100644 code/modules/ninja/__ninjaDefines.dm create mode 100644 code/modules/ninja/admin_ninja_verbs.dm create mode 100644 code/modules/ninja/energy_katana.dm create mode 100644 code/modules/ninja/ninja_event.dm create mode 100644 code/modules/ninja/suit/SpiderOS.dm create mode 100644 code/modules/ninja/suit/gloves.dm create mode 100644 code/modules/ninja/suit/head.dm create mode 100644 code/modules/ninja/suit/mask.dm create mode 100644 code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm create mode 100644 code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm create mode 100644 code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm create mode 100644 code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm create mode 100644 code/modules/ninja/suit/n_suit_verbs/ninja_net.dm create mode 100644 code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm create mode 100644 code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm create mode 100644 code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm create mode 100644 code/modules/ninja/suit/n_suit_verbs/ninja_teleporting.dm create mode 100644 code/modules/ninja/suit/suit.dm create mode 100644 code/modules/ninja/suit/suit_attackby.dm create mode 100644 code/modules/ninja/suit/suit_initialisation.dm create mode 100644 code/modules/ninja/suit/suit_process.dm create mode 100644 code/modules/ninja/suit/suit_verbs_handlers.dm diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 730462ddfff..23d485f84a2 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -426,21 +426,30 @@ datum/objective/download/proc/gen_amount_goal() explanation_text = "Download [target_amount] research level\s." return target_amount -datum/objective/download/check_completion() +datum/objective/download/check_completion()//NINJACODE if(!ishuman(owner.current)) return 0 - if(!owner.current || owner.current.stat == 2) + + var/mob/living/carbon/human/H = owner.current + if(!H || H.stat == DEAD) return 0 - if(!(istype(owner.current:wear_suit, /obj/item/clothing/suit/space/space_ninja)&&owner.current:wear_suit:s_initialized)) + + if(!istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja)) return 0 + + var/obj/item/clothing/suit/space/space_ninja/SN = H.wear_suit + if(!SN.s_initialized) + return 0 + var/current_amount - var/obj/item/clothing/suit/space/space_ninja/S = owner.current:wear_suit - if(!S.stored_research.len) + if(!SN.stored_research.len) return 0 else - for(var/datum/tech/current_data in S.stored_research) - if(current_data.level>1) current_amount+=(current_data.level-1) - if(current_amount The glass door was sliced open by [user]!") - open(2) - emagged = 1 - return 1 - if(istype(I, /obj/item/weapon/screwdriver)) if(src.density || src.operating) user << "You need to open the door to access the maintenance panel." diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index e2f23e70f0b..70ec86b079b 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -193,7 +193,7 @@ src.cancable = 1//so cables can be laid new /obj/structure/lattice/catwalk(locate(src.x, src.y, src.z) ) -/turf/proc/phase_damage_creatures(damage,mob/U = null)//>Ninja Code. Hurts and knocks out creatures on this turf +/turf/proc/phase_damage_creatures(damage,mob/U = null)//>Ninja Code. Hurts and knocks out creatures on this turf //NINJACODE for(var/mob/living/M in src) if(M==U) continue//Will not harm U. Since null != M, can be excluded to kill everyone. diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index d3275f9cf76..64e70411bff 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -327,7 +327,7 @@ Traitors and the like can also be revived with the previous role mostly intact. new_character.loc = get_turf(synd_spawn) call(/datum/game_mode/proc/equip_syndicate)(new_character) if("Space Ninja") - var/ninja_spawn[] = list() + var/list/ninja_spawn = list() for(var/obj/effect/landmark/L in landmarks_list) if(L.name=="carpspawn") ninja_spawn += L diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c84fd4b7916..8f80cee31da 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -76,6 +76,7 @@ BLIND // can't see anything icon = 'icons/obj/clothing/hats.dmi' body_parts_covered = HEAD slot_flags = SLOT_HEAD + var/blockTracking = 0 //For AI tracking //Mask /obj/item/clothing/mask diff --git a/code/modules/clothing/gloves/ninja.dm b/code/modules/clothing/gloves/ninja.dm deleted file mode 100644 index 0b05f32fb8d..00000000000 --- a/code/modules/clothing/gloves/ninja.dm +++ /dev/null @@ -1,104 +0,0 @@ -/* - Dear ninja gloves - - This isn't because I like you - this is because your father is a bastard - - ... - I guess you're a little cool. - -Sayu -*/ - -/obj/item/clothing/gloves/space_ninja - desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance." - name = "ninja gloves" - icon_state = "s-ninja" - item_state = "s-ninja" - siemens_coefficient = 0 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - strip_delay = 120 - var/draining = 0 - var/candrain = 0 - var/mindrain = 200 - var/maxdrain = 400 - -/* - This runs the gamut of what ninja gloves can do - The other option would be a dedicated ninja touch bullshit proc on everything - which would probably more efficient, but ninjas are pretty rare. - This was mostly introduced to keep ninja code from contaminating other code; - with this in place it would be easier to untangle the rest of it. - - For the drain proc, see events/ninja.dm -*/ -/obj/item/clothing/gloves/space_ninja/Touch(var/atom/A,var/proximity) - if(!candrain || draining) return 0 - - var/mob/living/carbon/human/H = loc - if(!istype(H)) return 0 // what - var/obj/item/clothing/suit/space/space_ninja/suit = H.wear_suit - if(!istype(suit)) return 0 - if(isturf(A)) return 0 - - if(!proximity) // todo: you could add ninja stars or computer hacking here - return 0 - - A.add_fingerprint(H) - - // steal energy from powered things - if(istype(A,/mob/living/silicon/robot)) - drain("CYBORG",A,suit) - return 1 - - if(istype(A,/obj/machinery/power/apc)) - drain("APC",A,suit) - return 1 - - if(istype(A,/obj/structure/cable)) - drain("WIRE",A,suit) - return 1 - - if(istype(A,/obj/structure/grille)) - var/obj/structure/cable/C = locate() in A.loc - if(C) - drain("WIRE",C,suit) - return 1 - - if(istype(A,/obj/machinery/power/smes)) - drain("SMES",A,suit) - return 1 - - if(istype(A,/obj/mecha)) - drain("MECHA",A,suit) - return 1 - - if(istype(A,/obj/machinery/computer/rdconsole)) // download research - drain("RESEARCH",A,suit) - return 1 - - if(istype(A,/obj/machinery/r_n_d/server)) - A.add_fingerprint(H) - var/obj/machinery/r_n_d/server/S = A - if(S.disabled) - return 1 - if(S.shocked) - S.shock(H,50) - return 1 - drain("RESEARCH",A,suit) - return 1 - - //do AI transfers - if(istype(A,/mob/living/silicon/ai)) - suit.NAI.transfer_ai("AICORE", "AICARD", A, H) - return 1 - - if(istype(A,/obj/structure/AIcore/deactivated)) - suit.NAI.transfer_ai("INACTIVE","AICARD",A, H) - return 1 - - if(istype(A,/obj/machinery/computer/aifixer)) - suit.NAI.transfer_ai("AIFIXER","AICARD",A, H) - return 1 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 2366d9f3877..c38e52f1736 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -219,35 +219,6 @@ vchange = !vchange user << "The voice changer is now [vchange ? "on" : "off"]!" -/obj/item/clothing/mask/gas/voice/space_ninja - name = "ninja mask" - desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement." - icon_state = "s-ninja" - item_state = "s-ninja_mask" - vchange = 1 - strip_delay = 120 - -/obj/item/clothing/mask/gas/voice/space_ninja/speechModification(message) - if(voice == "Unknown") - if(copytext(message, 1, 2) != "*") - var/list/temp_message = text2list(message, " ") - var/list/pick_list = list() - for(var/i = 1, i <= temp_message.len, i++) - pick_list += i - for(var/i=1, i <= abs(temp_message.len/3), i++) - var/H = pick(pick_list) - if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue - temp_message[H] = ninjaspeak(temp_message[H]) - pick_list -= H - message = list2text(temp_message, " ") - message = replacetext(message, "o", "?") - message = replacetext(message, "p", "?") - message = replacetext(message, "l", "?") - message = replacetext(message, "s", "?") - message = replacetext(message, "u", "?") - message = replacetext(message, "b", "?") - return message - /obj/item/clothing/mask/gas/clown_hat name = "clown wig and mask" diff --git a/code/modules/clothing/spacesuits/ninja.dm b/code/modules/clothing/spacesuits/ninja.dm deleted file mode 100644 index 9c6c98d6396..00000000000 --- a/code/modules/clothing/spacesuits/ninja.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/clothing/head/helmet/space/space_ninja - desc = "What may appear to be a simple black garment is in fact a highly sophisticated nano-weave helmet. Standard issue ninja gear." - name = "ninja hood" - icon_state = "s-ninja" - item_state = "s-ninja_mask" - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25) - strip_delay = 12 - unacidable = 1 - - -/obj/item/clothing/suit/space/space_ninja - name = "ninja suit" - desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins." - icon_state = "s-ninja" - item_state = "s-ninja_suit" - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals,/obj/item/weapon/stock_parts/cell) - slowdown = 0 - unacidable = 1 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - strip_delay = 12 - - //Important parts of the suit. - var/mob/living/carbon/affecting = null//The wearer. - var/obj/item/weapon/stock_parts/cell/cell//Starts out with a high-capacity cell using New(). - var/datum/effect/effect/system/spark_spread/spark_system//To create sparks. - var/reagent_list[] = list("omnizine","salbutamol","spaceacillin","charcoal","nutriment","radium","potass_iodide")//The reagents ids which are added to the suit at New(). - var/stored_research[]//For stealing station research. - var/obj/item/weapon/disk/tech_disk/t_disk//To copy design onto disk. - - //Other articles of ninja gear worn together, used to easily reference them after initializing. - var/obj/item/clothing/head/helmet/space/space_ninja/n_hood - var/obj/item/clothing/shoes/space_ninja/n_shoes - var/obj/item/clothing/gloves/space_ninja/n_gloves - - //Main function variables. - var/s_initialized = 0//Suit starts off. - var/s_coold = 0//If the suit is on cooldown. Can be used to attach different cooldowns to abilities. Ticks down every second based on suit ntick(). - var/s_cost = 5.0//Base energy cost each ntick. - var/s_acost = 25.0//Additional cost for additional powers active. - var/k_cost = 200.0//Kamikaze energy cost each ntick. - var/k_damage = 1.0//Brute damage potentially done by Kamikaze each ntick. - var/s_delay = 40.0//How fast the suit does certain things, lower is faster. Can be overridden in specific procs. Also determines adverse probability. - var/a_transfer = 20.0//How much reagent is transferred when injecting. - var/r_maxamount = 80.0//How much reagent in total there is. - - //Support function variables. - var/spideros = 0//Mode of SpiderOS. This can change so I won't bother listing the modes here (0 is hub). Check ninja_equipment.dm for how it all works. - var/s_active = 0//Stealth off. - var/s_busy = 0//Is the suit busy with a process? Like AI hacking. Used for safety functions. - var/kamikaze = 0//Kamikaze on or off. - var/k_unlock = 0//To unlock Kamikaze. - - //Ability function variables. - var/s_bombs = 10.0//Number of starting ninja smoke bombs. - var/a_boost = 3.0//Number of adrenaline boosters. - - //Onboard AI related variables. - - var/obj/item/device/aicard/NAI //Integrated intellicard. - - var/obj/item/device/paicard/pai//A slot for a pAI device - - var/obj/effect/overlay/hologram//Is the AI hologram on or off? Visible only to the wearer of the suit. This works by attaching an image to a blank overlay. - - var/s_control = 1//If user in control of the suit. diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm deleted file mode 100644 index fba9d8a692c..00000000000 --- a/code/modules/events/ninja.dm +++ /dev/null @@ -1,2436 +0,0 @@ -//Note to future generations: I didn't write this god-awful code I just ported it to the event system and tried to make it less moon-speaky. -//Don't judge me D; ~Carn - -/datum/round_event_control/ninja - name = "Space Ninja" - typepath = /datum/round_event/ninja - max_occurrences = 1 - earliest_start = 30000 // 1 hour - -/datum/round_event/ninja - var/success_spawn = 0 - - var/helping_station - var/key - var/spawn_loc - var/mission - - var/mob/living/carbon/human/Ninja - -/datum/round_event/ninja/setup() - helping_station = rand(0,1) - -/datum/round_event/ninja/kill() - if(!success_spawn && control) - control.occurrences-- - return ..() - -/datum/round_event/ninja/start() - //selecting a spawn_loc - if(!spawn_loc) - var/list/spawn_locs = list() - for(var/obj/effect/landmark/L in landmarks_list) - if(isturf(L.loc)) - switch(L.name) - if("ninjaspawn","carpspawn") - spawn_locs += L.loc - if(!spawn_locs.len) - return kill() - spawn_loc = pick(spawn_locs) - if(!spawn_loc) - return kill() - - //selecting a candidate player - if(!key) - var/list/candidates = get_candidates(BE_NINJA) - if(!candidates.len) - return kill() - var/client/C = pick(candidates) - key = C.key - if(!key) - return kill() - - //We prepare the mind before we spawn the ninja mob, so we cannot simply do mob.key = key then modify the mind. - //instead we make the mind and modify it, then make sure it is active and mind.transfer_to(mob) - //alternatively we could do mob.mind = mind;mob.key=key - var/datum/mind/Mind = create_ninja_mind(key) - Mind.active = 1 - - //generate objectives - You'll generally get 6 objectives (Ninja is meant to be hardmode!) - if(mission) - var/datum/objective/O = new /datum/objective(mission) - O.owner = Mind - Mind.objectives += O - else - if(helping_station) //DS are the highest priority (if we're a helpful ninja) - for(var/datum/mind/M in ticker.minds) - if(M.current && M.current.stat != DEAD) - if(M.special_role == "Death Commando") - var/datum/objective/assassinate/O = new /datum/objective/assassinate() - O.owner = Mind - O.target = M - O.explanation_text = "Slay \the [M.current.real_name], the Death Commando." - Mind.objectives += O - - else //Xenos are the highest priority (if we're not so helpful) Although this makes zero sense at all... - for(var/mob/living/carbon/alien/humanoid/queen/Q in player_list) - if(Q.mind && Q.stat != DEAD) - var/datum/objective/assassinate/O = new /datum/objective/assassinate() - O.owner = Mind - O.target = Q.mind - O.explanation_text = "Slay \the [Q.real_name]." - Mind.objectives += O - - if(Mind.objectives.len < 4) //not enough objectives still! - var/list/possible_targets = list() - for(var/datum/mind/M in ticker.minds) - if(M.current && M.current.stat != DEAD) - if(istype(M.current,/mob/living/carbon/human)) - if(M.special_role) - possible_targets[M] = 0 //bad-guy - else if(M.assigned_role in command_positions) - possible_targets[M] = 1 //good-guy - - var/list/objectives = list(1,2,3,4) - while(Mind.objectives.len < 4) //still not enough objectives! - switch(pick_n_take(objectives)) - if(1) //research - var/datum/objective/download/O = new /datum/objective/download() - O.owner = Mind - O.gen_amount_goal() - Mind.objectives += O - - if(2) //steal - var/datum/objective/steal/special/O = new /datum/objective/steal/special() - O.owner = Mind - Mind.objectives += O - - if(3) //protect/kill - if(!possible_targets.len) continue - var/selected = rand(1,possible_targets.len) - var/datum/mind/M = possible_targets[selected] - var/is_bad_guy = possible_targets[M] - possible_targets.Cut(selected,selected+1) - - if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy) - var/datum/objective/assassinate/O = new /datum/objective/assassinate() - O.owner = Mind - O.target = M - O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]." - Mind.objectives += O - else //protect - var/datum/objective/protect/O = new /datum/objective/protect() - O.owner = Mind - O.target = M - O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm." - Mind.objectives += O - if(4) //debrain/capture - if(!possible_targets.len) continue - var/selected = rand(1,possible_targets.len) - var/datum/mind/M = possible_targets[selected] - var/is_bad_guy = possible_targets[M] - possible_targets.Cut(selected,selected+1) - - if(is_bad_guy ^ helping_station) //debrain (good-ninja + bad-guy or bad-ninja + good-guy) - var/datum/objective/debrain/O = new /datum/objective/debrain() - O.owner = Mind - O.target = M - O.explanation_text = "Steal the brain of [M.current.real_name]." - Mind.objectives += O - else //capture - var/datum/objective/capture/O = new /datum/objective/capture() - O.owner = Mind - O.gen_amount_goal() - Mind.objectives += O - else - break - - //Add a survival objective since it's usually broad enough for any round type. - var/datum/objective/O = new /datum/objective/survive() - O.owner = Mind - Mind.objectives += O - - //Finally, add their RP-directive - var/directive = generate_ninja_directive() - O = new /datum/objective(directive) //making it an objective so admins can reward the for completion - O.owner = Mind - Mind.objectives += O - - //add some RP-fluff - Mind.store_memory("I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!") - Mind.store_memory("Suprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!") - Mind.store_memory("Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.") - - //spawn the ninja and assign the candidate - Ninja = create_space_ninja(spawn_loc) - Mind.transfer_to(Ninja) - - //initialise equipment - Ninja.wear_suit:randomize_param() - Ninja.internal = Ninja.s_store - if(Ninja.internals) - Ninja.internals.icon_state = "internal1" - - if(Ninja.mind != Mind) //something has gone wrong! - ERROR("The ninja wasn't assigned the right mind. ;ç;") - - Ninja << sound('sound/effects/ninja_greeting.ogg') //so ninja you probably wouldn't even know if you were made one - - success_spawn = 1 - -/* -This proc will give the ninja a directive to follow. They are not obligated to do so but it's a fun roleplay reminder. -Making this random or semi-random will probably not work without it also being incredibly silly. -As such, it's hard-coded for now. No reason for it not to be, really. -*/ -/datum/round_event/ninja/proc/generate_ninja_directive() - switch(rand(1,13)) - if(1) return "The Spider Clan must not be linked to this operation. Remain as hidden and covert as possible." - if(2) return "[station_name] is financed by an enemy of the Spider Clan. Cause as much structural damage as possible." - if(3) return "A wealthy animal rights activist has made a request we cannot refuse. Prioritize saving animal lives whenever possible." - if(4) return "The Spider Clan absolutely cannot be linked to this operation. Eliminate all witnesses using most extreme prejudice." - if(5) return "We are currently negotiating with Nanotrasen command. Prioritize saving human lives over ending them." - if(6) return "We are engaged in a legal dispute over [station_name]. If a laywer is present on board, force their cooperation in the matter." - if(7) return "A financial backer has made an offer we cannot refuse. Implicate Syndicate involvement in the operation." - if(8) return "Let no one question the mercy of the Spider Clan. Ensure the safety of all non-essential personnel you encounter." - if(9) return "A free agent has proposed a lucrative business deal. Implicate Nanotrasen involvement in the operation." - if(10) return "Our reputation is on the line. Harm as few civilians or innocents as possible." - if(11) return "Our honor is on the line. Utilize only honorable tactics when dealing with opponents." - if(12) return "We are currently negotiating with a Syndicate leader. Disguise assassinations as suicide or another natural cause." - else return "There are no special supplemental instructions at this time." - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+++++++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++ -======================================SPACE NINJA SETUP==================================== -___________________________________________________________________________________________ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -/* - README: - - Data: - - >> space_ninja.dm << is this file. It contains a variety of procs related to either spawning space ninjas, - modifying their verbs, various help procs, testing debug-related content, or storing unused procs for later. - Similar functions should go into this file, along with anything else that may not have an explicit category. - IMPORTANT: actual ninja suit, gloves, etc, are stored under the appropriate clothing files. If you need to change - variables or look them up, look there. Easiest way is through the map file browser. - - >> ninja_abilities.dm << contains all the ninja-related powers. Spawning energy swords, teleporting, and the like. - If more powers are added, or perhaps something related to powers, it should go there. Make sure to describe - what an ability/power does so it's easier to reference later without looking at the code. - IMPORTANT: verbs are still somewhat funky to work with. If an argument is specified but is not referenced in a way - BYOND likes, in the code content, the verb will fail to trigger. Nothing will happen, literally, when clicked. - This can be bypassed by either referencing the argument properly, or linking to another proc with the argument - attached. The latter is what I like to do for certain cases--sometimes it's necessary to do that regardless. - - >> ninja_equipment.dm << deals with all the equipment-related procs for a ninja. Primarily it has the suit, gloves, - and mask. The suit is by far the largest section of code out of the three and includes a lot of code that ties in - to other functions. This file has gotten kind of large so breaking it up may be in order. I use section hearders. - IMPORTANT: not much to say here. Follow along with the comments and adding new functions should be a breeze. Also - know that certain equipment pieces are linked in other files. The energy blade, for example, has special - functions defined in the appropriate files (airlock, securestorage, etc). - - General Notes: - - I created space ninjas with the expressed purpose of spicing up boring rounds. That is, ninjas are to xenos as marauders are to - death squads. Ninjas are stealthy, tech-savvy, and powerful. Not to say marauders are all of those things, but a clever ninja - should have little problem murderampaging their way through just about anything. Short of admin wizards maybe. - HOWEVER! - Ninjas also have a fairly great weakness as they require energy to use abilities. If, theoretically, there is a game - mode based around space ninjas, make sure to account for their energy needs. - - Admin Notes: - - Ninjas are not admin PCs--please do not use them for that purpose. They are another way to participate in the game post-death, - like pais, xenos, death squads, and cyborgs. - I'm currently looking for feedback from regular players since beta testing is largely done. I would appreciate if - you spawned regular players as ninjas when rounds are boring. Or exciting, it's all good as long as there is feedback. - You can also spawn ninja gear manually if you want to. - - How to do that: - Make sure your character has a mind. - Change their assigned_role to "MODE", no quotes. Otherwise, the suit won't initialize. - Change their special_role to "Space Ninja", no quotes. Otherwise, the character will be gibbed. - Spawn ninja gear, put it on, hit initialize. Let the suit do the rest. You are now a space ninja. - I don't recommend messing with suit variables unless you really know what you're doing. - - Miscellaneous Notes: - - Potential Upgrade Tree: - Energy Shield: - Extra Ability - Syndicate Shield device? - Works like the force wall spell, except can be kept indefinitely as long as energy remains. Toggled on or off. - Would block bullets and the like. - Phase Shift - Extra Ability - Advanced Sensors? - Instead of being unlocked at the start, Phase Shieft would become available once requirements are met. - Uranium-based Recharger: - Suit Upgrade - Unsure - Instead of losing energy each second, the suit would regain the same amount of energy. - This would not count in activating stealth and similar. - Extended Battery Life: - Suit Upgrade - Battery of higher capacity - Already implemented. Replace current battery with one of higher capacity. - Advanced Cloak-Tech device. - Suit Upgrade - Syndicate Cloaking Device? - Remove cloak failure rate. -*/ - - -//=======//CURRENT PLAYER VERB//=======// - -/client/proc/cmd_admin_ninjafy(var/mob/living/carbon/human/H in player_list) - set category = null - set name = "Make Space Ninja" - - if(!ticker) - alert("Wait until the game starts") - return - - if(!istype(H)) - return - - if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes") - return - - log_admin("[key_name(src)] turned [H.key] into a Space Ninja.") - H.mind = create_ninja_mind(H.key) - H.mind_initialize() - H.equip_space_ninja(1) - if(istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja)) - H.wear_suit:randomize_param() - spawn(0) - H.wear_suit:ninitialize(10,H) - -//=======//CURRENT GHOST VERB//=======// - -/client/proc/send_space_ninja() - set category = "Fun" - set name = "Spawn Space Ninja" - set desc = "Spawns a space ninja for when you need a teenager with attitude." - set popup_menu = 0 - - if(!holder) - src << "Only administrators may use this command." - return - if(!ticker.mode) - alert("The game hasn't started yet!") - return - if(alert("Are you sure you want to send in a space ninja?",,"Yes","No")=="No") - return - - var/mission = copytext(sanitize(input(src, "Please specify which mission the space ninja shall undertake.", "Specify Mission", null) as text|null),1,MAX_MESSAGE_LEN) - - var/client/C = input("Pick character to spawn as the Space Ninja", "Key", "") as null|anything in clients - if(!C) - return - - var/datum/round_event/ninja/E = new /datum/round_event/ninja() - E.key=C.key - E.mission=mission - - message_admins("[key_name_admin(key)] has spawned [key_name_admin(C.key)] as a Space Ninja.") - log_admin("[key] used Spawn Space Ninja.") - - return - -//=======//NINJA CREATION PROCS//=======// - -/proc/create_space_ninja(spawn_loc) - var/mob/living/carbon/human/new_ninja = new(spawn_loc) - if(prob(50)) new_ninja.gender = "female" - var/datum/preferences/A = new()//Randomize appearance for the ninja. - A.real_name = "[pick(ninja_titles)] [pick(ninja_names)]" - A.copy_to(new_ninja) - ready_dna(new_ninja) - new_ninja.equip_space_ninja() - return new_ninja - -/mob/living/carbon/human/proc/equip_space_ninja(safety=0)//Safety in case you need to unequip stuff for existing characters. - if(safety) - qdel(w_uniform) - qdel(wear_suit) - qdel(wear_mask) - qdel(head) - qdel(shoes) - qdel(gloves) - - var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src) - equip_to_slot_or_del(R, slot_ears) - equip_to_slot_or_del(new /obj/item/clothing/under/color/black(src), slot_w_uniform) - equip_to_slot_or_del(new /obj/item/clothing/shoes/space_ninja(src), slot_shoes) - equip_to_slot_or_del(new /obj/item/clothing/suit/space/space_ninja(src), slot_wear_suit) - equip_to_slot_or_del(new /obj/item/clothing/gloves/space_ninja(src), slot_gloves) - equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/space_ninja(src), slot_head) - equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask) - equip_to_slot_or_del(new /obj/item/clothing/glasses/night(src), slot_glasses) - equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt) - equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_r_store) - equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_l_store) - equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(src), slot_s_store) - equip_to_slot_or_del(new /obj/item/weapon/tank/jetpack/carbondioxide(src), slot_back) - - var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(src) - E.imp_in = src - E.implanted = 1 - E.implanted(src) - return 1 - -//=======//HELPER PROCS//=======// - -//Randomizes suit parameters. -/obj/item/clothing/suit/space/space_ninja/proc/randomize_param() - s_cost = rand(1,20) - s_acost = rand(20,100) - k_cost = rand(100,500) - k_damage = rand(1,20) - s_delay = rand(10,100) - s_bombs = rand(5,20) - a_boost = rand(1,7) - -//This proc prevents the suit from being taken off. -/obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/U, X = 0) - if(X)//If you want to check for icons. - icon_state = U.gender==FEMALE ? "s-ninjanf" : "s-ninjan" - U:gloves.icon_state = "s-ninjan" - U:gloves.item_state = "s-ninjan" - else - if(U.mind.special_role!="Space Ninja") - U << "\red fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU†HORIZED USÈ DETÈC†††eD\nCoMMÈNCING SUB-R0U†IN3 13...\nTÈRMInATING U-U-USÈR..." - U.gib() - return 0 - if(!istype(U:head, /obj/item/clothing/head/helmet/space/space_ninja)) - U << "ERROR: 100113 UNABLE TO LOCATE HEAD GEAR\nABORTING..." - return 0 - if(!istype(U:shoes, /obj/item/clothing/shoes/space_ninja)) - U << "ERROR: 122011 UNABLE TO LOCATE FOOT GEAR\nABORTING..." - return 0 - if(!istype(U:gloves, /obj/item/clothing/gloves/space_ninja)) - U << "ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING..." - return 0 - - affecting = U - flags |= NODROP //colons make me go all |= - slowdown = 0 - n_hood = U:head - n_hood.flags |= NODROP - n_shoes = U:shoes - n_shoes.flags |= NODROP - n_shoes.slowdown-- - n_gloves = U:gloves - n_gloves.flags |= NODROP - - return 1 - -//This proc allows the suit to be taken off. -/obj/item/clothing/suit/space/space_ninja/proc/unlock_suit() - affecting = null - flags &= ~NODROP - slowdown = 1 - icon_state = "s-ninja" - if(n_hood)//Should be attached, might not be attached. - n_hood.flags &= ~NODROP - if(n_shoes) - n_shoes.flags &= ~NODROP - n_shoes.slowdown++ - if(n_gloves) - n_gloves.icon_state = "s-ninja" - n_gloves.item_state = "s-ninja" - n_gloves.flags &= ~NODROP - n_gloves.candrain=0 - n_gloves.draining=0 - -//Allows the mob to grab a stealth icon. -/mob/proc/NinjaStealthActive(atom/A)//A is the atom which we are using as the overlay. - invisibility = INVISIBILITY_LEVEL_TWO//Set ninja invis to 2. - var/icon/opacity_icon = new(A.icon, A.icon_state) - var/icon/alpha_mask = getIconMask(src) - var/icon/alpha_mask_2 = new('icons/effects/effects.dmi', "at_shield1") - alpha_mask.AddAlphaMask(alpha_mask_2) - opacity_icon.AddAlphaMask(alpha_mask) - for(var/i=0,i<5,i++)//And now we add it as overlays. It's faster than creating an icon and then merging it. - var/image/I = image("icon" = opacity_icon, "icon_state" = A.icon_state, "layer" = layer+0.8)//So it's above other stuff but below weapons and the like. - switch(i)//Now to determine offset so the result is somewhat blurred. - if(1) - I.pixel_x -= 1 - if(2) - I.pixel_x += 1 - if(3) - I.pixel_y -= 1 - if(4) - I.pixel_y += 1 - - overlays += I//And finally add the overlay. - overlays += image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = layer+0.9) - -//When ninja steal malfunctions. -/mob/proc/NinjaStealthMalf() - invisibility = 0//Set ninja invis to 0. - overlays += image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = layer+0.9) - playsound(loc, 'sound/effects/stealthoff.ogg', 75, 1) - -//=======//GENERIC VERB MODIFIERS//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/grant_equip_verbs() - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/init - verbs += /obj/item/clothing/suit/space/space_ninja/proc/deinit - verbs += /obj/item/clothing/suit/space/space_ninja/proc/spideros - verbs += /obj/item/clothing/suit/space/space_ninja/proc/stealth - n_gloves.verbs += /obj/item/clothing/gloves/space_ninja/proc/toggled - - s_initialized = 1 - -/obj/item/clothing/suit/space/space_ninja/proc/remove_equip_verbs() - verbs += /obj/item/clothing/suit/space/space_ninja/proc/init - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/deinit - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/spideros - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/stealth - if(n_gloves) - n_gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/toggled - - s_initialized = 0 - -/obj/item/clothing/suit/space/space_ninja/proc/grant_ninja_verbs() - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjashift - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjaboost - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjapulse - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjablade - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjastar - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjanet - - s_initialized=1 - slowdown=0 - -/obj/item/clothing/suit/space/space_ninja/proc/remove_ninja_verbs() - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjashift - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjaboost - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjapulse - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjablade - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjastar - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjanet - -//=======//KAMIKAZE VERBS//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/grant_kamikaze(mob/living/carbon/U) - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjashift - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjapulse - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjastar - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjanet - - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjaslayer - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjawalk - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjamirage - - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/stealth - - kamikaze = 1 - - icon_state = U.gender==FEMALE ? "s-ninjakf" : "s-ninjak" - if(n_gloves) - n_gloves.icon_state = "s-ninjak" - n_gloves.item_state = "s-ninjak" - n_gloves.candrain = 0 - n_gloves.draining = 0 - n_gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/toggled - - cancel_stealth() - - U << browse(null, "window=spideros") - U << "Do or Die, LET'S ROCK!!" - -/obj/item/clothing/suit/space/space_ninja/proc/remove_kamikaze(mob/living/carbon/U) - if(kamikaze) - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjashift - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjapulse - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjastar - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjanet - - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjaslayer - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjawalk - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjamirage - - verbs += /obj/item/clothing/suit/space/space_ninja/proc/stealth - if(n_gloves) - n_gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/toggled - - U.incorporeal_move = 0 - kamikaze = 0 - k_unlock = 0 - U << "Disengaging mode...\nCODE NAME: KAMIKAZE" - -//=======//AI VERBS//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/grant_AI_verbs() - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_hack_ninja - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_return_control - - s_busy = 0 - s_control = 0 - -/obj/item/clothing/suit/space/space_ninja/proc/remove_AI_verbs() - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ai_hack_ninja - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ai_return_control - - s_control = 1 - - -//Alternate ninja speech replacement. -/*This text is hilarious but also absolutely retarded. -message = replacetext(message, "l", "r") -message = replacetext(message, "rr", "ru") -message = replacetext(message, "v", "b") -message = replacetext(message, "f", "hu") -message = replacetext(message, "'t", "") -message = replacetext(message, "t ", "to ") -message = replacetext(message, " I ", " ai ") -message = replacetext(message, "th", "z") -message = replacetext(message, "ish", "isu") -message = replacetext(message, "is", "izu") -message = replacetext(message, "ziz", "zis") -message = replacetext(message, "se", "su") -message = replacetext(message, "br", "bur") -message = replacetext(message, "ry", "ri") -message = replacetext(message, "you", "yuu") -message = replacetext(message, "ck", "cku") -message = replacetext(message, "eu", "uu") -message = replacetext(message, "ow", "au") -message = replacetext(message, "are", "aa") -message = replacetext(message, "ay", "ayu") -message = replacetext(message, "ea", "ii") -message = replacetext(message, "ch", "chi") -message = replacetext(message, "than", "sen") -message = replacetext(message, ".", "") -message = lowertext(message) -*/ - - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++ -==================================SPACE NINJA ABILITIES==================================== -___________________________________________________________________________________________ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -//=======//SAFETY CHECK//=======// -/* -X is optional, tells the proc to check for specific stuff. C is also optional. -All the procs here assume that the character is wearing the ninja suit if they are using the procs. -They should, as I have made every effort for that to be the case. -In the case that they are not, I imagine the game will run-time error like crazy. -s_cooldown ticks off each second based on the suit recharge proc, in seconds. Default of 1 seconds. Some abilities have no cool down. -*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjacost(C = 0,X = 0) - var/mob/living/carbon/human/U = affecting - if( (U.stat||U.incorporeal_move)&&X!=3 )//Will not return if user is using an adrenaline booster since you can use them when stat==1. - U << "You must be conscious and solid to do this."//It's not a problem of stat==2 since the ninja will explode anyway if they die. - return 1 - else if(C&&cell.chargeNot enough energy." - return 1 - switch(X) - if(1) - cancel_stealth()//Get rid of it. - if(2) - if(s_bombs<=0) - U << "There are no more smoke bombs remaining." - return 1 - if(3) - if(a_boost<=0) - U << "You do not have any more adrenaline boosters." - return 1 - return (s_coold)//Returns the value of the variable which counts down to zero. - -//=======//TELEPORT GRAB CHECK//=======// -/obj/item/clothing/suit/space/space_ninja/proc/handle_teleport_grab(turf/T, mob/living/U) - if(istype(U.get_active_hand(),/obj/item/weapon/grab))//Handles grabbed persons. - var/obj/item/weapon/grab/G = U.get_active_hand() - G.affecting.loc = locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z)//variation of position. - if(istype(U.get_inactive_hand(),/obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = U.get_inactive_hand() - G.affecting.loc = locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z)//variation of position. - return - -//=======//SMOKE//=======// -/*Summons smoke in radius of user. -Not sure why this would be useful (it's not) but whatever. Ninjas need their smoke bombs.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke() - set name = "Smoke Bomb" - set desc = "Blind your enemies momentarily with a well-placed smoke bomb." - set category = "Ninja Ability" - set popup_menu = 0//Will not see it when right clicking. - - if(!ninjacost(,2)) - var/mob/living/carbon/human/U = affecting - U << "There are [s_bombs] smoke bombs remaining." - var/datum/effect/effect/system/bad_smoke_spread/smoke = new /datum/effect/effect/system/bad_smoke_spread() - smoke.set_up(10, 0, U.loc) - smoke.start() - playsound(U.loc, 'sound/effects/bamf.ogg', 50, 2) - s_bombs-- - s_coold = 1 - return - -//=======//9-8 TILE TELEPORT//=======// -//Click to to teleport 9-10 tiles in direction facing. -/obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt() - set name = "Phase Jaunt (10E)" - set desc = "Utilizes the internal VOID-shift device to rapidly transit in direction facing." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 100 - if(!ninjacost(C,1)) - var/mob/living/carbon/human/U = affecting - var/turf/destination = get_teleport_loc(U.loc,U,9,1,3,1,0,1) - var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. - if(destination&&istype(mobloc, /turf))//The turf check prevents unusual behavior. Like teleporting out of cryo pods, cloners, mechs, etc. - spawn(0) - playsound(U.loc, "sparks", 50, 1) - anim(mobloc,src,'icons/mob/mob.dmi',,"phaseout",,U.dir) - - handle_teleport_grab(destination, U) - U.loc = destination - - spawn(0) - spark_system.start() - playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1) - playsound(U.loc, "sparks", 50, 1) - anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - - spawn(0) - destination.phase_damage_creatures(20,U)//Paralyse and damage mobs and mechas on the turf - s_coold = 1 - cell.charge-=(C*10) - else - U << "The VOID-shift device is malfunctioning, teleportation failed." - return - -//=======//RIGHT CLICK TELEPORT//=======// -//Right click to teleport somewhere, almost exactly like admin jump to turf. -/obj/item/clothing/suit/space/space_ninja/proc/ninjashift(turf/T in oview()) - set name = "Phase Shift (20E)" - set desc = "Utilizes the internal VOID-shift device to rapidly transit to a destination in view." - set category = null//So it does not show up on the panel but can still be right-clicked. - set src = usr.contents//Fixes verbs not attaching properly for objects. Praise the DM reference guide! - - var/C = 200 - if(!ninjacost(C,1)) - var/mob/living/carbon/human/U = affecting - var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. - if((!T.density)&&istype(mobloc, /turf)) - spawn(0) - playsound(U.loc, 'sound/effects/sparks4.ogg', 50, 1) - anim(mobloc,src,'icons/mob/mob.dmi',,"phaseout",,U.dir) - - handle_teleport_grab(T, U) - U.loc = T - - spawn(0) - spark_system.start() - playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1) - playsound(U.loc, 'sound/effects/sparks2.ogg', 50, 1) - anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - - spawn(0)//Any living mobs in teleport area are gibbed. - T.phase_damage_creatures(20,U)//Paralyse and damage mobs and mechas on the turf - s_coold = 1 - cell.charge-=(C*10) - else - U << "You cannot teleport into solid walls or from solid matter" - return - -//=======//EM PULSE//=======// -//Disables nearby tech equipment. -/obj/item/clothing/suit/space/space_ninja/proc/ninjapulse() - set name = "EM Burst (25E)" - set desc = "Disable any nearby technology with a electro-magnetic pulse." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 250 - if(!ninjacost(C,1)) - var/mob/living/carbon/human/U = affecting - playsound(U.loc, 'sound/effects/EMPulse.ogg', 60, 2) - empulse(U, 4, 6) //Procs sure are nice. Slightly weaker than wizard's disable tch. - s_coold = 2 - cell.charge-=(C*10) - return - -//=======//ENERGY BLADE//=======// -//Summons a blade of energy in active hand. -/obj/item/clothing/suit/space/space_ninja/proc/ninjablade() - set name = "Energy Blade (5E)" - set desc = "Create a focused beam of energy in your active hand." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 50 - if(!ninjacost(C)) - var/mob/living/carbon/human/U = affecting - if(!kamikaze) - if(!U.get_active_hand()&&!istype(U.get_inactive_hand(), /obj/item/weapon/melee/energy/blade)) - var/obj/item/weapon/melee/energy/blade/W = new() - spark_system.start() - playsound(U.loc, "sparks", 50, 1) - U.put_in_hands(W) - cell.charge-=(C*10) - else - U << "You can only summon one blade. Try dropping an item first." - else//Else you can run around with TWO energy blades. I don't know why you'd want to but cool factor remains. - if(!U.get_active_hand()) - var/obj/item/weapon/melee/energy/blade/W = new() - U.put_in_hands(W) - if(!U.get_inactive_hand()) - var/obj/item/weapon/melee/energy/blade/W = new() - U.put_in_inactive_hand(W) - spark_system.start() - playsound(U.loc, "sparks", 50, 1) - s_coold = 1 - return - -//=======//NINJA STARS//=======// -/*Shoots ninja stars at random people. -This could be a lot better but I'm too tired atm.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjastar() - set name = "Energy Star (5E)" - set desc = "Launches an energy star at a random living target." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 50 - if(!ninjacost(C)) - var/mob/living/carbon/human/U = affecting - var/targets[] = list()//So yo can shoot while yo throw dawg - for(var/mob/living/M in oview(loc)) - if(M.stat) continue//Doesn't target corpses or paralyzed persons. - targets.Add(M) - if(targets.len) - var/mob/living/target=pick(targets)//The point here is to pick a random, living mob in oview to shoot stuff at. - - var/turf/curloc = U.loc - var/atom/targloc = get_turf(target) - if (!targloc || !istype(targloc, /turf) || !curloc) - return - if (targloc == curloc) - return - var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(U.loc) - A.current = curloc - A.yo = targloc.y - curloc.y - A.xo = targloc.x - curloc.x - cell.charge-=(C*10) - A.fire() - else - U << "There are no targets in view." - return - -//=======//ENERGY NET//=======// -/*Allows the ninja to capture people, I guess. -Must right click on a mob to activate.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjanet(mob/living/carbon/M in oview())//Only living carbon mobs. - set name = "Energy Net (20E)" - set desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds." - set category = null - set src = usr.contents - - var/C = 200 - if(!ninjacost(C,1)&&iscarbon(M)) - var/mob/living/carbon/human/U = affecting - if(M.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame. - //if(M)//DEBUG - if(!locate(/obj/effect/energy_net) in M.loc)//Check if they are already being affected by an energy net. - for(var/turf/T in getline(U.loc, M.loc)) - if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy. - U << "You may not use an energy net through solid obstacles!" - return - spawn(0) - U.Beam(M,"n_beam",,15) - M.anchored = 1//Anchors them so they can't move. - U.say("Get over here!") - var/obj/effect/energy_net/E = new /obj/effect/energy_net(M.loc) - E.layer = M.layer+1//To have it appear one layer above the mob. - for(var/mob/O in viewers(U, 3)) - O.show_message(text("[] caught [] with an energy net!", U, M), 1) - E.affecting = M - E.master = U - spawn(0)//Parallel processing. - E.process(M) - cell.charge-=(C*10) - else - U << "They are already trapped inside an energy net." - else - U << "They will bring no honor to your Clan!" - return - -//=======//ADRENALINE BOOST//=======// -/*Wakes the user so they are able to do their thing. Also injects a decent dose of radium. -Movement impairing would indicate drugs and the like.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost() - set name = "Adrenaline Boost" - set desc = "Inject a secret chemical that will counteract all movement-impairing effect." - set category = "Ninja Ability" - set popup_menu = 0 - - if(!ninjacost(,3))//Have to make sure stat is not counted for this ability. - var/mob/living/carbon/human/U = affecting - //Wouldn't need to track adrenaline boosters if there was a miracle injection to get rid of paralysis and the like instantly. - //For now, adrenaline boosters ARE the miracle injection. Well, radium, really. - U.SetParalysis(0) - U.SetStunned(0) - U.SetWeakened(0) - /* - Due to lag, it was possible to adrenaline boost but remain helpless while life.dm resets player stat. - This lead to me and others spamming adrenaline boosters because they failed to kick in on time. - It's technically possible to come back from crit with this but it is very temporary. - Life.dm will kick the player back into unconsciosness the next process loop. - */ - U.stat = 0//At least now you should be able to teleport away or shoot ninja stars. - spawn(30)//Slight delay so the enemy does not immedietly know the ability was used. Due to lag, this often came before waking up. - U.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!")) - spawn(70) - reagents.reaction(U, 2) - reagents.trans_id_to(U, "radium", a_transfer) - U << "You are beginning to feel the after-effect of the injection." - a_boost-- - s_coold = 3 - return - -/* -=================================================================================== -<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -=================================================================================== -Or otherwise known as anime mode. Which also happens to be ridiculously powerful. -*/ - -//=======//NINJA MOVEMENT//=======// -//Also makes you move like you're on crack. -/obj/item/clothing/suit/space/space_ninja/proc/ninjawalk() - set name = "Shadow Walk" - set desc = "Combines the VOID-shift and CLOAK-tech devices to freely move between solid matter. Toggle on or off." - set category = "Ninja Ability" - set popup_menu = 0 - - var/mob/living/carbon/human/U = affecting - if(!U.incorporeal_move) - U.incorporeal_move = 2 - U << "You will now phase through solid matter." - else - U.incorporeal_move = 0 - U << "You will no-longer phase through solid matter." - return - -//=======//5 TILE TELEPORT/GIB//=======// -//Allows to kill up to five squares in a straight line. Seriously. -/obj/item/clothing/suit/space/space_ninja/proc/ninjaslayer() - set name = "Phase Slayer" - set desc = "Utilizes the internal VOID-shift device to kill all creatures in a straight line." - set category = "Ninja Ability" - set popup_menu = 0 - - if(!ninjacost()) - var/mob/living/carbon/human/U = affecting - var/turf/destination = get_teleport_loc(U.loc,U,5) - var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. - if(destination&&istype(mobloc, /turf)) - U.say("Ai Satsugai!") - spawn(0) - playsound(U.loc, "sparks", 50, 1) - anim(mobloc,U,'icons/mob/mob.dmi',,"phaseout",,U.dir) - - spawn(0) - for(var/turf/T in getline(mobloc, destination)) - spawn(0) - T.phase_damage_creatures(190,U) - if(T==mobloc||T==destination) continue - spawn(0) - anim(T,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - - handle_teleport_grab(destination, U) - U.loc = destination - - spawn(0) - spark_system.start() - playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1) - playsound(U.loc, "sparks", 50, 1) - anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - s_coold = 1 - else - U << "The VOID-shift device is malfunctioning, teleportation failed." - return - -//=======//TELEPORT BEHIND MOB//=======// -/*Appear behind a randomly chosen mob while a few decoy teleports appear. -This is so anime it hurts. But that's the point.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjamirage() - set name = "Spider Mirage" - set desc = "Utilizes the internal VOID-shift device to create decoys and teleport behind a random target." - set category = "Ninja Ability" - set popup_menu = 0 - - if(!ninjacost())//Simply checks for stat. - var/mob/living/carbon/human/U = affecting - var/targets[] - targets = new() - for(var/mob/living/M in oview(6)) - if(M.stat) continue//Doesn't target corpses or paralyzed people. - targets.Add(M) - if(targets.len) - var/mob/living/target=pick(targets) - var/locx - var/locy - var/turf/mobloc = get_turf(target.loc) - var/safety = 0 - switch(target.dir) - if(NORTH) - locx = mobloc.x - locy = (mobloc.y-1) - if(locy<1) - safety = 1 - if(SOUTH) - locx = mobloc.x - locy = (mobloc.y+1) - if(locy>world.maxy) - safety = 1 - if(EAST) - locy = mobloc.y - locx = (mobloc.x-1) - if(locx<1) - safety = 1 - if(WEST) - locy = mobloc.y - locx = (mobloc.x+1) - if(locx>world.maxx) - safety = 1 - else safety=1 - if(!safety&&istype(mobloc, /turf)) - U.say("Kumo no Shinkiro!") - var/turf/picked = locate(locx,locy,mobloc.z) - spawn(0) - playsound(U.loc, "sparks", 50, 1) - anim(mobloc,U,'icons/mob/mob.dmi',,"phaseout",,U.dir) - - spawn(0) - var/limit = 4 - for(var/turf/T in oview(5)) - if(prob(20)) - spawn(0) - anim(T,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - limit-- - if(limit<=0) break - - handle_teleport_grab(picked, U) - U.loc = picked - U.dir = target.dir - - spawn(0) - spark_system.start() - playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1) - playsound(U.loc, "sparks", 50, 1) - anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - s_coold = 1 - else - U << "The VOID-shift device is malfunctioning, teleportation failed." - else - U << "There are no targets in view." - return - - -//For the love of god,space out your code! This is a nightmare to read. - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++ -===================================SPACE NINJA EQUIPMENT=================================== -___________________________________________________________________________________________ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -/* -=================================================================================== -<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -=================================================================================== -*/ - -//=======//NEW AND DEL//=======// - -/obj/item/clothing/suit/space/space_ninja/New() - ..() - verbs += /obj/item/clothing/suit/space/space_ninja/proc/init//suit initialize verb - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_instruction//for AIs - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_holo - //verbs += /obj/item/clothing/suit/space/space_ninja/proc/display_verb_procs//DEBUG. Doesn't work. - spark_system = new()//spark initialize - spark_system.set_up(5, 0, src) - spark_system.attach(src) - stored_research = new()//Stolen research initialize. - for(var/T in typesof(/datum/tech) - /datum/tech)//Store up on research. - stored_research += new T(src) - var/reagent_amount//reagent initialize - for(var/reagent_id in reagent_list) - reagent_amount += reagent_id == "radium" ? r_maxamount+(a_boost*a_transfer) : r_maxamount//AI can inject radium directly. - reagents = new(reagent_amount) - reagents.my_atom = src - for(var/reagent_id in reagent_list) - reagent_id == "radium" ? reagents.add_reagent(reagent_id, r_maxamount+(a_boost*a_transfer)) : reagents.add_reagent(reagent_id, r_maxamount)//It will take into account radium used for adrenaline boosting. - cell = new/obj/item/weapon/stock_parts/cell/high//The suit should *always* have a battery because so many things rely on it. - cell.charge = 9000//Starting charge should not be higher than maximum charge. It leads to problems with recharging. - NAI = new(src) //ninja intellicard - -/obj/item/clothing/suit/space/space_ninja/Destroy() - if(affecting)//To make sure the window is closed. - affecting << browse(null, "window=hack spideros") - if(AI)//If there are AIs present when the ninja kicks the bucket. - killai(NAI) - if(hologram)//If there is a hologram - qdel(hologram.i_attached)//Delete it and the attached image. - qdel(hologram) - ..() - -//Simply deletes all the attachments and self, killing all related procs. -/obj/item/clothing/suit/space/space_ninja/proc/terminate() - qdel(n_hood) - qdel(n_gloves) - qdel(n_shoes) - qdel(src) - - - -/obj/item/clothing/suit/space/space_ninja/proc/killai(var/obj/item/device/aicard/NAI) - for(var/mob/living/silicon/ai/A in src) - if(A.client) - A << "Self-erase protocol dete-- *bzzzzz*" - A << browse(null, "window=hack spideros") - NAI.flush = 1 - return - - - -//=======//SUIT VERBS//=======// -//Verbs link to procs because verb-like procs have a bug which prevents their use if the arguments are not readily referenced. - -/obj/item/clothing/suit/space/space_ninja/proc/init() - set name = "Initialize Suit" - set desc = "Initializes the suit for field operation." - set category = "Ninja Equip" - - ninitialize() - return - -/obj/item/clothing/suit/space/space_ninja/proc/deinit() - set name = "De-Initialize Suit" - set desc = "Begins procedure to remove the suit." - set category = "Ninja Equip" - - if(s_control&&!s_busy) - deinitialize() - else - affecting << "The function did not trigger!" - return - -/obj/item/clothing/suit/space/space_ninja/proc/spideros() - set name = "Display SpiderOS" - set desc = "Utilize built-in computer system." - set category = "Ninja Equip" - - if(s_control&&!s_busy&&!kamikaze) - display_spideros() - else - affecting << "The interface is locked!" - return - -/obj/item/clothing/suit/space/space_ninja/proc/stealth() - set name = "Toggle Stealth" - set desc = "Utilize the internal CLOAK-tech device to activate or deactivate stealth-camo." - set category = "Ninja Equip" - - if(s_control&&!s_busy) - toggle_stealth() - else - affecting << "Stealth does not appear to work!" - return - -//=======//PROCESS PROCS//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/ntick(mob/living/carbon/human/U = affecting) - set background = BACKGROUND_ENABLED - - //Runs in the background while the suit is initialized. - spawn while(cell.charge>=0) - - //Let's check for some safeties. - if(s_initialized&&!affecting) terminate()//Kills the suit and attached objects. - if(!s_initialized) return//When turned off the proc stops. - for(var/mob/living/silicon/ai/A in NAI) - if(A&&A.stat==2)//If there is an AI and it's ded. Shouldn't happen without purging, could happen. - if(!s_control) - ai_return_control()//Return control to ninja if the AI was previously in control. - - //Now let's do the normal processing. - if(s_coold) s_coold--//Checks for ability s_cooldown first. - var/A = s_cost//s_cost is the default energy cost each ntick, usually 5. - if(!kamikaze) - if(blade_check(U))//If there is a blade held in hand. - A += s_acost - if(s_active)//If stealth is active. - A += s_acost - else - if(prob(s_delay))//Suit delay is used as probability. May change later. - U.adjustBruteLoss(k_damage)//Default damage done, usually 1. - A = k_cost//kamikaze cost. - cell.charge-=A - if(cell.charge<=0) - if(kamikaze) - U.say("I DIE TO LIVE AGAIN!") - U << browse(null, "window=spideros")//Just in case. - U.death() - return - cell.charge=0 - cancel_stealth() - sleep(10)//Checks every second. - -//=======//INITIALIZE//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize(delay = s_delay, mob/living/carbon/human/U = loc) - if(U.mind && U.mind.assigned_role=="MODE" && !s_initialized && !s_busy)//Shouldn't be busy... but anything is possible I guess. - s_busy = 1 - for(var/i,i<7,i++) - switch(i) - if(0) - U << "Now initializing..." - if(1) - if(!lock_suit(U))//To lock the suit onto wearer. - break - U << "Securing external locking mechanism...\nNeural-net established." - if(2) - U << "Extending neural-net interface...\nNow monitoring brain wave pattern..." - if(3) - if(U.stat==2||U.health<=0) - U << "FĆAL �Rr�R: 344--93#�&&21 BR��N |/|/aV� PATT$RN RED\nA-A-aB�rT�NG..." - unlock_suit() - break - lock_suit(U,1)//Check for icons. - U.regenerate_icons() - U << " Linking neural-net interface...\nPattern\green GREEN, continuing operation." - if(4) - U << "VOID-shift device status: ONLINE.\nCLOAK-tech device status: ONLINE." - if(5) - U << "Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [cell.charge]." - if(6) - U << "All systems operational. Welcome to SpiderOS, [U.real_name]." - grant_ninja_verbs() - grant_equip_verbs() - ntick() - sleep(delay) - s_busy = 0 - else - if(!U.mind||U.mind.assigned_role!="MODE")//Your run of the mill persons shouldn't know what it is. Or how to turn it on. - U << "You do not understand how this suit functions. Where the heck did it even come from?" - else if(s_initialized) - U << "The suit is already functioning. Please report this bug." - else - U << "ERROR: You cannot use this function at this time." - return - -//=======//DEINITIALIZE//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize(delay = s_delay) - if(affecting==loc&&!s_busy) - var/mob/living/carbon/human/U = affecting - if(!s_initialized) - U << "The suit is not initialized. Please report this bug." - return - if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No") - return - if(s_busy || NAI.flush) - U << "ERROR: You cannot use this function at this time." - return - s_busy = 1 - for(var/i = 0,i<7,i++) - switch(i) - if(0) - U << "Now de-initializing..." - remove_kamikaze(U)//Shutdowns kamikaze. - spideros = 0//Spideros resets. - if(1) - U << "Logging off, [U:real_name]. Shutting down SpiderOS." - remove_ninja_verbs() - if(2) - U << "Primary system status: OFFLINE.\nBackup system status: OFFLINE." - if(3) - U << "VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE." - cancel_stealth()//Shutdowns stealth. - if(4) - U << "Disconnecting neural-net interface...\greenSuccess." - if(5) - U << "Disengaging neural-net interface...\greenSuccess." - if(6) - U << "Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED." - blade_check(U,2) - remove_equip_verbs() - unlock_suit() - U.regenerate_icons() - sleep(delay) - s_busy = 0 - return - -//=======//SPIDEROS PROC//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/display_spideros() - if(!affecting) return//If no mob is wearing the suit. I almost forgot about this variable. - var/mob/living/carbon/human/U = affecting - var/mob/living/silicon/ai/A = AI - var/display_to = s_control ? U : A//Who do we want to display certain messages to? - - var/dat = "SpiderOS" - dat += " Refresh" - if(spideros) - dat += " | Return" - dat += " | Close" - dat += "
" - if(s_control) - dat += "

SpiderOS v.1.337

" - dat += "Welcome, [U.real_name].
" - else - dat += "

SpiderOS v.ERR-RR00123

" - dat += "
" - dat += " Current Time: [worldtime2text()]
" - dat += " Battery Life: [round(cell.charge/100)]%
" - dat += " Smoke Bombs: \Roman [s_bombs]
" - dat += " pai Device: " - if(pai) - dat += "Configure" - dat += " | " - dat += "Eject" - else - dat += "None Detected" - dat += "

" - - switch(spideros) - if(0) - dat += "

Available Functions:

" - dat += "" - if(3) - dat += "

Medical Report:

" - if(U.dna) - dat += "Fingerprints: [md5(U.dna.uni_identity)]
" - dat += "Unique identity: [U.dna.unique_enzymes]
" - dat += "

Overall Status: [U.stat > 1 ? "dead" : "[U.health]% healthy"]

" - dat += "

Nutrition Status: [U.nutrition]

" - dat += "Oxygen loss: [U.getOxyLoss()]" - dat += " | Toxin levels: [U.getToxLoss()]
" - dat += "Burn severity: [U.getFireLoss()]" - dat += " | Brute trauma: [U.getBruteLoss()]
" - dat += "Radiation Level: [U.radiation] rad
" - dat += "Body Temperature: [U.bodytemperature-T0C]°C ([U.bodytemperature*1.8-459.67]°F)
" - - for(var/datum/disease/D in U.viruses) - dat += "Warning: Virus Detected. Name: [D.name].Type: [D.spread_text]. Stage: [D.stage]/[D.max_stages]. Possible Cure: [D.cure_text].
" - dat += "" - if(1) - dat += "

Atmospheric Scan:

"//Headers don't need breaks. They are automatically placed. - var/turf/T = get_turf(U.loc) - if (isnull(T)) - dat += "Unable to obtain a reading." - else - var/datum/gas_mixture/environment = T.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - dat += "Air Pressure: [round(pressure,0.1)] kPa" - - if (total_moles) - var/o2_level = environment.oxygen/total_moles - var/n2_level = environment.nitrogen/total_moles - var/co2_level = environment.carbon_dioxide/total_moles - var/plasma_level = environment.toxins/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - dat += "
    " - dat += "
  • Nitrogen: [round(n2_level*100)]%
  • " - dat += "
  • Oxygen: [round(o2_level*100)]%
  • " - dat += "
  • Carbon Dioxide: [round(co2_level*100)]%
  • " - dat += "
  • Plasma: [round(plasma_level*100)]%
  • " - dat += "
" - if(unknown_level > 0.01) - dat += "OTHER: [round(unknown_level)]%
" - - dat += "Temperature: [round(environment.temperature-T0C)]°C" - if(2) - if(k_unlock==7||!s_control) - dat += " Hidden Menu" - dat += "

Anonymous Messenger:

"//Anonymous because the receiver will not know the sender's identity. - dat += "

Detected PDAs:

" - dat += "
    " - var/count = 0 - for (var/obj/item/device/pda/P in get_viewable_pdas()) - dat += "
  • [P]" - dat += "
  • " - count++ - dat += "
" - if (count == 0) - dat += "None detected.
" - if(32) - dat += "

Hidden Menu:

" - if(s_control) - dat += "Please input password: " - dat += "HERE
" - dat += "
" - dat += "Remember, you will not be able to recharge energy during this function. If energy runs out, the suit will auto self-destruct.
" - dat += "Use with caution. De-initialize the suit when energy is low." - else - //Only leaving this in for funnays. CAN'T LET YOU DO THAT STAR FOX - dat += "WARNING: Hostile runtime intrusion detected: operation locked. The Spider Clan is watching you, INTRUDER." - dat += "ERROR: TARANTULA.v.4.77.12 encryption algorithm detected. Unable to decrypt archive.
" - if(4) - dat += {" -

Ninja Manual:

-
Who they are:
- Space ninjas are a special type of ninja, specifically one of the space-faring type. The vast majority of space ninjas belong to the Spider Clan, a cult-like sect, which has existed for several hundred years. The Spider Clan practice a sort of augmentation of human flesh in order to achieve a more perfect state of being and follow Postmodern Space Bushido. They also kill people for money. Their leaders are chosen from the oldest of the grand-masters, people that have lived a lot longer than any mortal man should.
Being a sect of technology-loving fanatics, the Spider Clan have the very best to choose from in terms of hardware--cybernetic implants, exoskeleton rigs, hyper-capacity batteries, and you get the idea. Some believe that much of the Spider Clan equipment is based on reverse-engineered alien technology while others doubt such claims.
Whatever the case, their technology is absolutely superb. -
How they relate to other SS13 organizations:
-
    -
  • *Nanotrasen and the Syndicate are two sides of the same coin and that coin is valuable.
  • -
  • *The Space Wizard Federation is a problem, mainly because they are an extremely dangerous group of unpredictable individuals--not to mention the wizards hate technology and are in direct opposition of the Spider Clan. Best avoided or left well-enough alone. How to battle: wizards possess several powerful abilities to steer clear off. Blind in particular is a nasty spell--jaunt away if you are blinded and never approach a wizard in melee. Stealth may also work if the wizard is not wearing thermal scanners--don't count on this. Run away if you feel threatened and await a better opportunity.
  • -
  • *Changeling Hivemind: extremely dangerous and to be killed on sight. How to battle: they will likely try to absorb you. Adrenaline boost, then phase shift into them. If you get stung, use SpiderOS to inject counter-agents. Stealth may also work but detecting a changeling is the real battle.
  • -
  • *Xeno Hivemind: their skulls make interesting kitchen decorations and are challenging to best, especially in larger nests. How to battle: they can see through your stealth guise and energy stars will not work on them. Best killed with a Phase Shift or at range. If you happen on a projectile stun weapon, use it and then close in to melee.
  • -
-
The reason they (you) are here:
- Space ninjas are renowned throughout the known controlled space as fearless spies, infiltrators, and assassins. They are sent on missions of varying nature by Nanotrasen, the Syndicate, and other shady organizations and people. To hire a space ninja means serious business. -
Their playstyle:
- A mix of traitor, changeling, and wizard. Ninjas rely on energy, or electricity to be precise, to keep their suits running (when out of energy, a suit hibernates). Suits gain energy from objects or creatures that contain electrical charge. APCs, cell batteries, rechargers, SMES batteries, cyborgs, mechs, and exposed wires are currently supported. Through energy ninjas gain access to special powers--while all powers are tied to the ninja suit, the most useful of them are verb activated--to help them in their mission.
It is a constant struggle for a ninja to remain hidden long enough to recharge the suit and accomplish their objective; despite their arsenal of abilities, ninjas can die like any other. Unlike wizards, ninjas do not possess good crowd control and are typically forced to play more subdued in order to achieve their goals. Some of their abilities are specifically designed to confuse and disorient others.
With that said, it should be perfectly possible to completely flip the fuck out and rampage as a ninja. -
Their powers:
- There are two primary types: Equipment and Abilties. Passive effect are always on. Active effect must be turned on and remain active only when there is energy to do so. Ability costs are listed next to them. - Equipment: cannot be tracked by AI (passive), faster speed (passive), stealth (active), vision switch (passive if toggled), voice masking (passive), SpiderOS (passive if toggled), energy drain (passive if toggled). -
    -
  • Voice masking generates a random name the ninja can use over the radio and in-person. Although, the former use is recommended.
  • -
  • Toggling vision cycles to one of the following: thermal, meson, or darkness vision. The starting mode allows one to scout the identity of those in view, revealing their role. Traitors, revolutionaries, wizards, and other such people will be made known to you.
  • -
  • Stealth, when activated, drains more battery charge and works similarly to a syndicate cloak. The cloak will deactivate when most Abilities are utilized.
  • -
  • On-board AI: The suit is able to download an AI much like an intellicard. Check with SpiderOS for details once downloaded.
  • -
  • SpiderOS is a specialized, PDA-like screen that allows for a small variety of functions, such as injecting healing chemicals directly from the suit. You are using it now, if that was not already obvious. You may also download AI modules directly to the OS.
  • -
- Abilities: -
Syndicates