From e5ab12acd077a96992ff54d350f396ec34f6b27a Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 6 Jan 2017 23:46:49 -0800 Subject: [PATCH 001/122] PR 2 Creation --- .../components/unary_devices/vent_pump.dm | 2 + code/_globalvars/lists/objects.dm | 1 + code/modules/admin/player_panel.dm | 7 + code/modules/events/event_container.dm | 1 + code/modules/events/spider_terror.dm | 44 ++++ .../hostile/terror_spiders/__defines.dm | 14 +- .../hostile/terror_spiders/actions.dm | 112 ++++++++- .../hostile/terror_spiders/black.dm | 6 +- .../hostile/terror_spiders/chem.dm | 49 ++-- .../hostile/terror_spiders/ghost.dm | 6 +- .../hostile/terror_spiders/gray.dm | 3 - .../hostile/terror_spiders/green.dm | 60 +++++ .../hostile/terror_spiders/hive.dm | 43 ++++ .../hostile/terror_spiders/mother.dm | 45 ++++ .../hostile/terror_spiders/prince.dm | 28 ++- .../hostile/terror_spiders/purple.dm | 87 +++++++ .../hostile/terror_spiders/queen.dm | 222 ++++++++++++++++++ .../hostile/terror_spiders/reproduction.dm | 179 ++++++++++++++ .../hostile/terror_spiders/terror_spiders.dm | 59 +++-- .../hostile/terror_spiders/white.dm | 41 ++++ code/modules/surgery/organs/parasites.dm | 82 +++++++ paradise.dme | 8 + 22 files changed, 1037 insertions(+), 62 deletions(-) create mode 100644 code/modules/events/spider_terror.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 299d0c20e22..a2ba4429ffa 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -61,6 +61,7 @@ /obj/machinery/atmospherics/unary/vent_pump/New() ..() + all_vent_pumps += src icon = null initial_loc = get_area(loc) area_uid = initial_loc.uid @@ -426,6 +427,7 @@ return ..() /obj/machinery/atmospherics/unary/vent_pump/Destroy() + all_vent_pumps -= src if(initial_loc) initial_loc.air_vent_info -= id_tag initial_loc.air_vent_names -= id_tag diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 600dac2f273..091ecd40dbb 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -23,6 +23,7 @@ var/global/list/rcd_list = list() //list of Rapid Construction Devices. var/global/list/apcs = list() var/global/list/air_alarms = list() var/global/list/power_monitors = list() +var/global/list/all_vent_pumps = list() var/global/list/navbeacons = list() //list of all bot nagivation beacons, used for patrolling. var/global/list/deliverybeacons = list() //list of all MULEbot delivery beacons. diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 2e76bcea6a2..631b621528f 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -523,6 +523,13 @@ if(ticker.mode.greyshirts.len) dat += check_role_table("Greyshirts", ticker.mode.greyshirts) + if(ts_spiderlist.len) + var/list/spider_minds = list() + for(var/mob/living/simple_animal/hostile/poison/terror_spider/S in ts_spiderlist) + if(S.ckey) + spider_minds += S.mind + dat += check_role_table("Terror Spiders", spider_minds) + dat += "" usr << browse(dat, "window=roundstatus;size=400x500") else diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index deaa1b85aa8..1a2a4e897cb 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -185,6 +185,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MAJOR, "Abductor Visit", /datum/event/abductor, 80, is_one_shot = 1), new /datum/event_meta/alien(EVENT_LEVEL_MAJOR, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 30), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 0, is_one_shot = 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 0, is_one_shot = 1) ) diff --git a/code/modules/events/spider_terror.dm b/code/modules/events/spider_terror.dm new file mode 100644 index 00000000000..ba636867b35 --- /dev/null +++ b/code/modules/events/spider_terror.dm @@ -0,0 +1,44 @@ + +/datum/event/spider_terror + announceWhen = 400 + var/spawncount = 1 + +/datum/event/spider_terror/setup() + announceWhen = rand(announceWhen, announceWhen + 50) + spawncount = 1 + +/datum/event/spider_infestation/announce() + command_announcement.Announce("Confirmed outbreak of level 3 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren.ogg') + +/datum/event/spider_terror/start() + + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in all_vent_pumps) + if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) + if(temp_vent.parent.other_atmosmch.len > 50) + vents += temp_vent + + var/spider_type + var/infestation_type = pick(1, 2, 3, 4) + switch(infestation_type) + if(1) + spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/green + spawncount = pick(2,3) + if(2) + spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/white + spawncount = 1 + if(3) + spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/prince + spawncount = 1 + if(4) + spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/queen + spawncount = 1 + + while((spawncount >= 1) && vents.len) + var/obj/vent = pick(vents) + var/obj/effect/spider/spiderling/terror_spiderling/S = new(vent.loc) + S.name = "evil-looking spiderling" + S.grow_as = spider_type + S.amount_grown = 75 + vents -= vent + spawncount-- \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm index fafd30a4ae4..bea086c3ee6 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm @@ -4,8 +4,20 @@ #define MOVING_TO_TARGET 3 #define SPINNING_COCOON 4 +#define TS_DESC_RED "Red - Assault" +#define TS_DESC_GRAY "Gray - Ambush" +#define TS_DESC_GREEN "Green - Nurse" +#define TS_DESC_WHITE "White - Infect" +#define TS_DESC_BLACK "Black - Poison" +#define TS_DESC_PURPLE "Purple - Guard" +#define TS_DESC_PRINCE "Prince - WAR" +#define TS_DESC_MOTHER "Mother - HORROR" +#define TS_DESC_QUEEN "Queen - LEADER" + #define TS_TIER_1 1 #define TS_TIER_2 2 #define TS_TIER_3 3 #define TS_TIER_4 4 -#define TS_TIER_5 5 \ No newline at end of file +#define TS_TIER_5 5 + +#define isterrorspider(A) (istype((A), /mob/living/simple_animal/hostile/poison/terror_spider)) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm index 2111f350b0b..91ff4cbb53e 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm @@ -1,4 +1,4 @@ - +// ---------- ACTIONS FOR ALL SPIDERS /datum/action/innate/terrorspider/web name = "Web" @@ -19,17 +19,84 @@ user.FindWrapTarget() user.DoWrap() +// ---------- GREEN ACTIONS + +/datum/action/innate/terrorspider/greeneggs + name = "Lay Green Eggs" + icon_icon = 'icons/effects/effects.dmi' + button_icon_state = "eggs" + +/datum/action/innate/terrorspider/greeneggs/Activate() + var/mob/living/simple_animal/hostile/poison/terror_spider/green/user = owner + user.DoLayGreenEggs() + +// ---------- PRINCE ACTIONS + +/datum/action/innate/terrorspider/princesmash + name = "Smash Welded Vent" + icon_icon = 'icons/atmos/vent_pump.dmi' + button_icon_state = "map_vent" + +/datum/action/innate/terrorspider/princesmash/Activate() + var/mob/living/simple_animal/hostile/poison/terror_spider/prince/user = owner + user.DoPrinceSmash() + + +// ---------- QUEEN ACTIONS + +/datum/action/innate/terrorspider/queen/queennest + name = "Nest" + icon_icon = 'icons/mob/terrorspider.dmi' + button_icon_state = "terror_queen" + +/datum/action/innate/terrorspider/queen/queennest/Activate() + var/mob/living/simple_animal/hostile/poison/terror_spider/queen/user = owner + user.NestMode() + +/datum/action/innate/terrorspider/queen/queensense + name = "Hive Sense" + icon_icon = 'icons/mob/actions.dmi' + button_icon_state = "mindswap" + +/datum/action/innate/terrorspider/queen/queensense/Activate() + var/mob/living/simple_animal/hostile/poison/terror_spider/queen/user = owner + user.DoHiveSense() + +/datum/action/innate/terrorspider/queen/queeneggs + name = "Lay Queen Eggs" + icon_icon = 'icons/effects/effects.dmi' + button_icon_state = "eggs" + +/datum/action/innate/terrorspider/queen/queeneggs/Activate() + var/mob/living/simple_animal/hostile/poison/terror_spider/queen/user = owner + user.LayQueenEggs() + +/datum/action/innate/terrorspider/queen/queenfakelings + name = "Fake Spiderlings" + icon_icon = 'icons/effects/effects.dmi' + button_icon_state = "spiderling" + +/datum/action/innate/terrorspider/queen/queenfakelings/Activate() + var/mob/living/simple_animal/hostile/poison/terror_spider/queen/user = owner + user.QueenFakeLings() // ---------- WEB /mob/living/simple_animal/hostile/poison/terror_spider/proc/Web() + var/turf/mylocation = loc visible_message("[src] begins to secrete a sticky substance.") if(do_after(src, 40, target = loc)) - var/obj/effect/spider/terrorweb/T = locate() in get_turf(src) - if(T) - to_chat(src, "There is already a web here.") + if(loc != mylocation) + return + else if(istype(loc, /turf/space)) + to_chat(src, "Webs cannot be spun in space.") else - new /obj/effect/spider/terrorweb(loc) + var/obj/effect/spider/terrorweb/T = locate() in get_turf(src) + if(T) + to_chat(src, "There is already a web here.") + else + var/obj/effect/spider/terrorweb/W = new /obj/effect/spider/terrorweb(loc) + W.creator_ckey = ckey /obj/effect/spider/terrorweb name = "terror web" @@ -39,6 +106,7 @@ density = 0 // prevents it blocking all movement health = 20 // two welders, or one laser shot (15 for the normal spider webs) icon_state = "stickyweb1" + var/creator_ckey = null /obj/effect/spider/terrorweb/New() @@ -50,12 +118,17 @@ /obj/effect/spider/terrorweb/CanPass(atom/movable/mover, turf/target) if(istype(mover, /mob/living/simple_animal/hostile/poison/terror_spider)) return 1 + if(istype(mover, /obj/item/projectile/terrorqueenspit)) + return 1 if(isliving(mover)) if(prob(80)) to_chat(mover, "You get stuck in [src] for a moment.") var/mob/living/M = mover M.Stun(4) // 8 seconds. M.Weaken(4) // 8 seconds. + if(iscarbon(mover)) + spawn(70) + qdel(src) return 1 else return 0 @@ -64,7 +137,12 @@ return ..() - +/obj/effect/spider/terrorweb/bullet_act(var/obj/item/projectile/Proj) + if(Proj.damage_type != BRUTE && Proj.damage_type != BURN) + visible_message("[src] is undamaged by [Proj]!") + // Webs don't care about disablers, tasers, etc. Or toxin damage. They're organic, but not alive. + else + ..() // ---------- WRAP @@ -73,12 +151,12 @@ if(!cocoon_target) var/list/choices = list() for(var/mob/living/L in oview(1,src)) - if(Adjacent(L)) + if(Adjacent(L) && !L.anchored) if(L.stat == DEAD) choices += L for(var/obj/O in oview(1,src)) if(Adjacent(O) && !O.anchored) - if(!istype(O, /obj/effect/spider/terrorweb) && !istype(O, /obj/effect/spider/cocoon)) + if(!istype(O, /obj/effect/spider/terrorweb) && !istype(O, /obj/effect/spider/cocoon) && !istype(O, /obj/effect/spider/spiderling/terror_spiderling)) choices += O if(choices.len) cocoon_target = input(src,"What do you wish to cocoon?") in null|choices @@ -87,6 +165,9 @@ /mob/living/simple_animal/hostile/poison/terror_spider/proc/DoWrap() if(cocoon_target && busy != SPINNING_COCOON) + if(cocoon_target.anchored) + cocoon_target = null + return busy = SPINNING_COCOON visible_message("[src] begins to secrete a sticky substance around [cocoon_target].") stop_automated_movement = 1 @@ -125,3 +206,18 @@ busy = 0 stop_automated_movement = 0 + +/mob/living/simple_animal/hostile/poison/terror_spider/prince/proc/DoPrinceSmash() + for(var/obj/machinery/atmospherics/unary/vent_pump/P in view(1,src)) + if(P.welded) + P.welded = 0 + P.update_icon() + visible_message("[src] smashes the welded cover off [P]!") + return + for(var/obj/machinery/atmospherics/unary/vent_scrubber/C in view(1,src)) + if(C.welded) + C.welded = 0 + C.update_icon() + visible_message("[src] smashes the welded cover off [C]!") + return + to_chat(src, "There is no unwelded vent close enough to do this.") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm index 68d25a29492..93add83a261 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm @@ -10,7 +10,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/black name = "Black Terror spider" - desc = "An ominous-looking spider, black as the darkest night, and with merciless eyes and a blood-red hourglass pattern on its back." + desc = "An ominous-looking spider, black as the darkest night. It has merciless eyes, and a blood-red hourglass pattern on its back." spider_role_summary = "Hit-and-run attacker with extremely venomous bite." icon_state = "terror_widow" @@ -27,11 +27,11 @@ /mob/living/simple_animal/hostile/poison/terror_spider/black/spider_specialattack(mob/living/carbon/human/L, poisonable) if(!poisonable) return ..() - if(L.reagents.has_reagent("terror_black_toxin", 50)) + if(L.reagents.has_reagent("terror_black_toxin", 100)) return ..() var/inject_target = pick("chest", "head") if(L.stunned || L.can_inject(null, 0, inject_target, 0)) - L.reagents.add_reagent("terror_black_toxin", 15) // inject our special poison + L.reagents.add_reagent("terror_black_toxin", 30) // inject our special poison visible_message("[src] buries its long fangs deep into the [inject_target] of [target]!") else visible_message("[src] bites [target], but cannot inject venom into their [inject_target]!") diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm index 8ad926a8729..8c43cc6b1a0 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm @@ -1,3 +1,4 @@ + // Terror Spider, Black, Deadly Venom /datum/reagent/terror_black_toxin @@ -8,26 +9,44 @@ metabolization_rate = 0.1 /datum/reagent/terror_black_toxin/on_mob_life(mob/living/M) - if(volume < 15) - // bitten once, die slowly. Easy to survive a single bite - just go to medbay. - // total damage: 2/tick, human health 150 until crit, = 75 ticks, = 150 seconds = 2.5 minutes to get to medbay. - M.adjustToxLoss(2) // same damage/tick as tabun cycle 0 to 60 - else if(volume < 30) - // bitten twice, die more quickly, muscle cramps make movement difficult. Call medics immediately. - // total damage: 4, human health 150 until crit, = 37.5 ticks, = 75s = 1m15s until death - M.adjustToxLoss(4) - M.Confused(3) + if(volume < 30) + // bitten once, die very slowly. Easy to survive a single bite - just go to medbay. + // total damage: 1/tick, human health 150 until crit, = 150 ticks, = 300 seconds = 5 minutes to get to medbay. + M.adjustToxLoss(1) + else if(volume < 60) + // bitten twice, die slowly. Get to medbay. + // total damage: 2/tick, human health 150 until crit, = 75 ticks, = 150 seconds = 2.5 minutes to get some medical treatment. + M.adjustToxLoss(2) M.EyeBlurry(3) - else if(volume < 45) - // bitten thrice, die very quickly, severe muscle cramps make movement very difficult. Even calling for help probably won't save you. - // total damage: 8, human health 150 until crit, = 18.75 ticks, = 37s until death - M.adjustToxLoss(8) // a bit worse than coiine + else if(volume < 90) + // bitten thrice, die quickly, severe muscle cramps make movement very difficult. Even calling for help probably won't save you. + // total damage: 4, human health 150 until crit, = 37.5 ticks, = 75s = 1m15s until death + M.adjustToxLoss(4) // a bit worse than coiine M.Confused(6) M.EyeBlurry(6) else // bitten 4 or more times, whole body goes into shock/death - // total damage: 12, human health 150 until crit, = 12.5 ticks, = 25s until death - M.adjustToxLoss(12) + // total damage: 8, human health 150 until crit, = 18.75 ticks, = 37s until death + M.adjustToxLoss(8) M.EyeBlurry(6) M.Paralyse(5) ..() + + + +// Terror Spider, Queen Toxin + +/datum/reagent/terror_queen_toxin + name = "Terror Queen venom" + id = "terror_queen_toxin" + description = "A royally potent venom." + color = "#CF3600" + metabolization_rate = 2 + +/datum/reagent/terror_queen_toxin/on_mob_life(mob/living/M as mob) + if(!M) + M = holder.my_atom + // make them hallucinate a lot, like a changeling sting + M.hallucination = min(400, M.hallucination+50) + + diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/ghost.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/ghost.dm index 06703cc2106..ddfbf598fc7 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/ghost.dm @@ -13,15 +13,15 @@ return var/error_on_humanize = "" var/humanize_prompt = "Take direct control of [src]?" - humanize_prompt += "Role: [spider_role_summary]" + humanize_prompt += " Role: [spider_role_summary]" if(user.ckey in ts_ckey_blacklist) error_on_humanize = "You are not able to control any terror spider this round." - else if(!ai_playercontrol_allowingeneral) - error_on_humanize = "Terror spiders cannot currently be player-controlled." else if(spider_awaymission) error_on_humanize = "Terror spiders that are part of an away mission cannot be controlled by ghosts." else if(!ai_playercontrol_allowtype) error_on_humanize = "This specific type of terror spider is not player-controllable." + else if(degenerate) + error_on_humanize = "Dying spiders are not player-controllable." else if(stat == DEAD) error_on_humanize = "Dead spiders are not player-controllable." if(jobban_isbanned(user, "Syndicate") || jobban_isbanned(user, "alien")) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm index 42c16cc7666..04ee2b97d25 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm @@ -18,11 +18,8 @@ health = 120 melee_damage_lower = 10 melee_damage_upper = 20 - ventcrawler = 1 move_to_delay = 5 // normal speed stat_attack = 1 // ensures they will target people in crit, too! - environment_smash = 1 - /mob/living/simple_animal/hostile/poison/terror_spider/gray/spider_specialattack(mob/living/carbon/human/L, poisonable) if(!poisonable) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm new file mode 100644 index 00000000000..56265386686 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm @@ -0,0 +1,60 @@ + +// -------------------------------------------------------------------------------- +// ----------------- TERROR SPIDERS: T1 GREEN TERROR ------------------------------ +// -------------------------------------------------------------------------------- +// -------------: ROLE: reproduction +// -------------: SPECIAL: can also create webs, web normal objects, etc +// -------------: TO FIGHT IT: kill it however you like - just don't die to it! +// -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 + +/mob/living/simple_animal/hostile/poison/terror_spider/green + name = "Green Terror spider" + desc = "An ominous-looking green spider. It has a small egg-sac attached to it, and dried blood stains on its carapace." + spider_role_summary = "Average melee spider that webs its victims and lays more spider eggs" + + icon_state = "terror_green" + icon_living = "terror_green" + icon_dead = "terror_green_dead" + maxHealth = 120 + health = 120 + melee_damage_lower = 10 + melee_damage_upper = 20 + var/feedings_to_lay = 2 + + var/datum/action/innate/terrorspider/greeneggs/greeneggs_action + + +/mob/living/simple_animal/hostile/poison/terror_spider/green/New() + ..() + greeneggs_action = new() + greeneggs_action.Grant(src) + +/mob/living/simple_animal/hostile/poison/terror_spider/green/proc/DoLayGreenEggs() + var/obj/effect/spider/eggcluster/E = locate() in get_turf(src) + if(E) + to_chat(src, "There is already a cluster of eggs here!") + else if(fed < feedings_to_lay) + to_chat(src, "You must wrap more prey before you can do this!") + else + visible_message("[src] begins to lay a cluster of eggs.") + if(prob(33)) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, 1, 1) + else if(prob(50)) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/gray, 1, 1) + else + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, 1, 1) + fed -= feedings_to_lay + +/mob/living/simple_animal/hostile/poison/terror_spider/green/spider_specialattack(mob/living/carbon/human/L, poisonable) + if(!poisonable) + ..() + return + var/inject_target = pick("chest","head") + if(L.stunned || L.can_inject(null,0,inject_target,0)) + if(L.eye_blurry < 60) + L.AdjustEyeBlurry(10) + // instead of having a venom that only lasts seconds, we just add the eyeblur directly. + visible_message("[src] buries its fangs deep into the [inject_target] of [target]!") + else + visible_message("[src] bites [target], but cannot inject venom into their [inject_target]!") + L.attack_animal(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm new file mode 100644 index 00000000000..eda1836a968 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm @@ -0,0 +1,43 @@ + +// All terror spider code that relates to queen ruling over a hive + + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/DoHiveSense() + var/hsline = "" + to_chat(src, "Your Brood: ") + for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) + if(T.spider_awaymission != spider_awaymission) + continue + hsline = "* [T] in [get_area(T)], " + if(T.stat == DEAD) + hsline += "DEAD" + else + hsline += "health [T.health] / [T.maxHealth], " + if(T.ckey) + hsline += " *Player Controlled* " + else + hsline += " AI " + to_chat(src,hsline) + + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/CountSpiders() + var/numspiders = 0 + for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) + if(T.stat != DEAD && !T.spider_placed && spider_awaymission == T.spider_awaymission) + numspiders += 1 + return numspiders + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/CountSpidersType(specific_type) + var/numspiders = 0 + for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) + if(T.stat != DEAD && !T.spider_placed && spider_awaymission == T.spider_awaymission) + if(T.type == specific_type) + numspiders += 1 + for(var/obj/effect/spider/eggcluster/terror_eggcluster/E in ts_egg_list) + if(E.spiderling_type == specific_type && E.z == z) + numspiders += E.spiderling_number + for(var/obj/effect/spider/spiderling/terror_spiderling/L in ts_spiderling_list) + if(!L.stillborn && L.grow_as == specific_type && L.z == z) + numspiders += 1 + return numspiders + diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm new file mode 100644 index 00000000000..634948d1a58 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm @@ -0,0 +1,45 @@ + +// -------------------------------------------------------------------------------- +// ----------------- TERROR SPIDERS: T3 MOTHER OF TERROR -------------------------- +// -------------------------------------------------------------------------------- +// -------------: ROLE: living schmuck bait +// -------------: SPECIAL: spawns an ungodly number of spiderlings when killed +// -------------: TO FIGHT IT: don't! Just leave it alone! It is harmless by itself... but god help you if you aggro it. +// -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 + +/mob/living/simple_animal/hostile/poison/terror_spider/mother + name = "Mother of Terror spider" + desc = "An enormous spider. Hundreds of tiny spiderlings are crawling all over it. Their beady little eyes all stare at you. The horror!" + spider_role_summary = "Schmuck bait. Extremely weak in combat, but spawns many spiderlings when it dies." + + icon_state = "terror_gray2" + icon_living = "terror_gray2" + icon_dead = "terror_gray2_dead" + maxHealth = 50 + health = 50 + melee_damage_lower = 10 + melee_damage_upper = 20 + move_to_delay = 5 + + spider_tier = TS_TIER_3 + spider_opens_doors = 2 + + var/canspawn = 1 + +/mob/living/simple_animal/hostile/poison/terror_spider/mother/death(gibbed) + if(canspawn) + canspawn = 0 + for(var/i=0, i<30, i++) + var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src)) + S.grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/red, /mob/living/simple_animal/hostile/poison/terror_spider/gray) + if(prob(66)) + S.stillborn = 1 + else if(prob(10)) + S.grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/black, /mob/living/simple_animal/hostile/poison/terror_spider/green) + visible_message("[src] breaks apart, the many spiders on its back scurrying everywhere!") + degenerate = 1 + ..() + +/mob/living/simple_animal/hostile/poison/terror_spider/mother/Destroy() + canspawn = 0 + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm index 669449a6ae3..5a3a746e1a9 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm @@ -11,20 +11,34 @@ /mob/living/simple_animal/hostile/poison/terror_spider/prince name = "Prince of Terror spider" desc = "An enormous, terrifying spider. It looks like it is judging everything it sees. Its hide seems armored, and it bears the scars of many battles." - spider_role_summary = "Boss-level terror spider. Lightning bruiser. Capable of taking on a squad by itself." + spider_role_summary = "Miniboss terror spider. Lightning bruiser." + icon_state = "terror_allblack" icon_living = "terror_allblack" icon_dead = "terror_allblack_dead" - maxHealth = 400 // 20 laser shots. - health = 400 - melee_damage_lower = 15 - melee_damage_upper = 25 - move_to_delay = 5 - ventcrawler = 1 + + maxHealth = 600 // 30 laser shots + health = 600 + regen_points_per_hp = 6 // double the normal - IE halved regen speed + + melee_damage_lower = 20 + melee_damage_upper = 30 + move_to_delay = 4 // faster than normal + + ventcrawler = 0 + environment_smash = 3 + loot = list(/obj/item/clothing/accessory/medal) spider_tier = TS_TIER_3 spider_opens_doors = 2 + var/datum/action/innate/terrorspider/princesmash/princesmash_action + + +/mob/living/simple_animal/hostile/poison/terror_spider/prince/New() + ..() + princesmash_action = new() + princesmash_action.Grant(src) /mob/living/simple_animal/hostile/poison/terror_spider/prince/spider_specialattack(mob/living/carbon/human/L) if(prob(15)) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm new file mode 100644 index 00000000000..14515567f4a --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm @@ -0,0 +1,87 @@ + +// -------------------------------------------------------------------------------- +// ----------------- TERROR SPIDERS: T2 PURPLE TERROR ----------------------------- +// -------------------------------------------------------------------------------- +// -------------: ROLE: guarding queen nests +// -------------: SPECIAL: chance to stun on hit +// -------------: TO FIGHT IT: shoot it from range, bring friends! +// -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 + +/mob/living/simple_animal/hostile/poison/terror_spider/purple + name = "Purple Terror spider" + desc = "An ominous-looking purple spider. It looks about warily, as if waiting for something." + spider_role_summary = "Guards the nest of the Queen of Terror." + + icon_state = "terror_purple" + icon_living = "terror_purple" + icon_dead = "terror_purple_dead" + maxHealth = 200 + health = 200 + melee_damage_lower = 15 + melee_damage_upper = 25 + move_to_delay = 6 + + spider_tier = TS_TIER_2 + spider_opens_doors = 2 + + ventcrawler = 0 + environment_smash = 3 + + var/dcheck_counter = 0 + var/queen_visible = 1 + var/cycles_noqueen = 0 + + +/mob/living/simple_animal/hostile/poison/terror_spider/purple/spider_specialattack(mob/living/carbon/human/L, poisonable) + if(cycles_noqueen < 6 && prob(10)) + visible_message("[src] rams into [L], knocking them to the floor!") + L.Weaken(5) + L.Stun(5) + else + ..() + + +/mob/living/simple_animal/hostile/poison/terror_spider/purple/Life() + ..() + if(!degenerate && spider_myqueen) + if(dcheck_counter >= 10) + dcheck_counter = 0 + purple_distance_check() + else + dcheck_counter++ + + +/mob/living/simple_animal/hostile/poison/terror_spider/purple/proc/purple_distance_check() + if(spider_myqueen) + var/mob/living/simple_animal/hostile/poison/terror_spider/queen/Q = spider_myqueen + if(Q) + if(Q.stat == DEAD) + spider_myqueen = null + degenerate = 1 + to_chat(src,"Your Queen has died! Her power no longer sustains you!") + return + queen_visible = 0 + for(var/mob/living/M in view(src, vision_range)) + if(M == Q) + queen_visible = 1 + break + if(queen_visible) + cycles_noqueen = 0 + if(spider_debug) + to_chat(src,"Queen visible.") + else + cycles_noqueen++ + if(spider_debug) + to_chat(src,"Queen NOT visible. Cycles: [cycles_noqueen].") + if(cycles_noqueen == 3) + // one minute without queen sighted + to_chat(src,"You wonder where your Queen is.") + else if(cycles_noqueen == 6) + // two minutes without queen sighted + to_chat(src,"Without your Queen in sight, you feel yourself getting weaker...") + else if(cycles_noqueen >= 9) + // three minutes without queen sighted, kill them. + degenerate = 1 + to_chat(src,"Your link to your Queen has been broken! Your life force starts to drain away!") + melee_damage_lower = 5 + melee_damage_upper = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm new file mode 100644 index 00000000000..37c92264ebd --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm @@ -0,0 +1,222 @@ + +// -------------------------------------------------------------------------------- +// ----------------- TERROR SPIDERS: T4 QUEEN OF TERROR --------------------------- +// -------------------------------------------------------------------------------- +// -------------: ROLE: gamma-level threat to the whole station, like a blob +// -------------: SPECIAL: spins webs, breaks lights, breaks cameras, webs objects, lays eggs, commands other spiders... +// -------------: TO FIGHT IT: bring an army, and take no prisoners. Mechs and/or decloner guns are a very good idea. +// -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 + +/mob/living/simple_animal/hostile/poison/terror_spider/queen + name = "Queen of Terror spider" + desc = "An enormous, terrifying spider. Its egg sac is almost as big as its body, and teeming with spider eggs!" + spider_role_summary = "Commander of the spider forces. Lays eggs, directs the brood." + + icon_state = "terror_queen" + icon_living = "terror_queen" + icon_dead = "terror_queen_dead" + maxHealth = 200 + health = 200 + melee_damage_lower = 10 + melee_damage_upper = 20 + move_to_delay = 15 // yeah, this is very slow, but + ventcrawler = 1 + var/spider_spawnfrequency = 1200 // 120 seconds + var/spider_spawnfrequency_stable = 1200 // 120 seconds. Spawnfrequency is set to this on ai spiders once nest setup is complete. + var/spider_lastspawn = 0 + var/nestfrequency = 150 // 15 seconds + var/lastnestsetup = 0 + var/neststep = 0 + var/hasnested = 0 + var/spider_max_per_nest = 20 // above this, queen stops spawning more, and declares war. + + var/canlay = 0 // main counter for egg-laying ability! # = num uses, incremented at intervals + var/spider_can_fakelings = 3 // spawns defective spiderlings that don't grow up, used to freak out crew, atmosphere + + force_threshold = 18 // outright immune to anything of force under 18, this means welders can't hurt it, only guns can + + ranged = 1 + retreat_distance = 5 + minimum_distance = 5 + projectilesound = 'sound/weapons/pierce.ogg' + projectiletype = /obj/item/projectile/terrorqueenspit + + spider_tier = TS_TIER_4 + spider_opens_doors = 2 + loot = list(/obj/item/clothing/accessory/medal) + + var/datum/action/innate/terrorspider/queen/queennest/queennest_action + var/datum/action/innate/terrorspider/queen/queensense/queensense_action + var/datum/action/innate/terrorspider/queen/queeneggs/queeneggs_action + var/datum/action/innate/terrorspider/queen/queenfakelings/queenfakelings_action + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/New() + ..() + queennest_action = new() + queennest_action.Grant(src) + spider_myqueen = src + if(spider_awaymission) + spider_growinstantly = 1 + spider_spawnfrequency = 150 + + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/Life() + ..() + if(stat != DEAD) + if(ckey && canlay < 12 && hasnested) // max 12 eggs worth stored at any one time, realistically that's tons. + if(world.time > (spider_lastspawn + spider_spawnfrequency)) + canlay++ + spider_lastspawn = world.time + if(canlay == 1) + to_chat(src, "You are able to lay eggs again.") + else if(canlay == 12) + to_chat(src, "You have [canlay] eggs available to lay. You won't grow any more eggs until you lay some of your existing ones.") + else + to_chat(src, "You have [canlay] eggs available to lay.") + + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/death(gibbed) + if(!hasdied) + // When a queen dies, so do her player-controlled purple-type guardians. Intended as a motivator for purples to ensure they guard her. + for(var/mob/living/simple_animal/hostile/poison/terror_spider/purple/P in ts_spiderlist) + if(ckey) + P.visible_message("\The [src] writhes in pain!") + to_chat(P,"\The [src] has died. Without her hivemind link, purple terrors like yourself cannot survive more than a few minutes!") + P.degenerate = 1 + ..() + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/NestMode() + queeneggs_action = new() + queeneggs_action.Grant(src) + queenfakelings_action = new() + queenfakelings_action.Grant(src) + queensense_action = new() + queensense_action.Grant(src) + queennest_action.Remove(src) + hasnested = 1 + ventcrawler = 0 + environment_smash = 3 + DoQueenScreech(8, 100, 8, 100) + MassFlicker() + to_chat(src, "You have matured to your egglaying stage. You can now smash through walls, and lay eggs, but can no longer ventcrawl.") + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/MassFlicker() + var/list/target_lights = list() + for(var/mob/living/carbon/human/H in player_list) + if(H.z != src.z) + continue + if(H.stat == DEAD) + continue + for(var/obj/machinery/light/L in orange(7, H)) + if(L.on && prob(25)) + target_lights += L + for(var/obj/machinery/light/I in target_lights) + I.flicker() + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/LayQueenEggs() + if(!hasnested) + to_chat(src, "You must nest before doing this.") + return + if(canlay < 1) + var/remainingtime = round(((spider_lastspawn + spider_spawnfrequency) - world.time) / 10, 1) + if(remainingtime > 0) + to_chat(src, "Too soon to attempt that again. Wait another [num2text(remainingtime)] seconds.") + else + to_chat(src, "Too soon to attempt that again. Wait just a few more seconds...") + return + var/list/eggtypes = list(TS_DESC_RED, TS_DESC_GRAY, TS_DESC_GREEN, TS_DESC_BLACK, TS_DESC_PURPLE) + if(canlay >= 12) + eggtypes |= TS_DESC_MOTHER + eggtypes |= TS_DESC_PRINCE + var num_purples = CountSpidersType(/mob/living/simple_animal/hostile/poison/terror_spider/purple) + if(num_purples >= 2) + eggtypes -= TS_DESC_PURPLE + var num_blacks = CountSpidersType(/mob/living/simple_animal/hostile/poison/terror_spider/black) + if(num_blacks >= 2) + eggtypes -= TS_DESC_BLACK + var/eggtype = input("What kind of eggs?") as null|anything in eggtypes + if(!(eggtype in eggtypes)) + to_chat(src, "Unrecognized egg type.") + return 0 + if(eggtype == TS_DESC_MOTHER || eggtype == TS_DESC_PRINCE) + if(canlay < 12) + to_chat(src, "Insufficient strength. It takes as much effort to lay one of those as it does to lay 12 normal eggs.") + else + if(eggtype == TS_DESC_MOTHER) + canlay -= 12 + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/mother, 1, 0) + else if(eggtype == TS_DESC_PRINCE) + canlay -= 12 + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/prince, 1, 0) + return + var/numlings = 1 + if(eggtype != TS_DESC_PURPLE) + if(canlay >= 5) + numlings = input("How many in the batch?") as null|anything in list(1, 2, 3, 4, 5) + else if(canlay >= 3) + numlings = input("How many in the batch?") as null|anything in list(1, 2, 3) + else if(canlay == 2) + numlings = input("How many in the batch?") as null|anything in list(1, 2) + if(eggtype == null || numlings == null) + to_chat(src, "Cancelled.") + return + //spider_lastspawn = world.time // don't think we actually need this, if queen is laying manually canlay controls her rate. + canlay -= numlings + if(eggtype == TS_DESC_RED) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, numlings, 1) + else if(eggtype == TS_DESC_GRAY) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/gray, numlings, 1) + else if(eggtype == TS_DESC_GREEN) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, numlings, 1) + else if(eggtype == TS_DESC_BLACK) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/black, numlings, 1) + else if(eggtype == TS_DESC_PURPLE) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, numlings, 0) + else + to_chat(src, "Unrecognized egg type.") + + + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/DoQueenScreech(light_range, light_chance, camera_range, camera_chance) + visible_message("\The [src] emits a bone-chilling shriek!") + for(var/obj/machinery/light/L in orange(light_range, src)) + if(L.on && prob(light_chance)) + L.broken() + for(var/obj/machinery/camera/C in orange(camera_range, src)) + if(C.status && prob(camera_chance)) + C.toggle_cam(src, 0) + + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/QueenFakeLings() + if(spider_can_fakelings) + spider_can_fakelings-- + var/numlings = 15 + for(var/i in 1 to numlings) + var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src)) + S.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/red + S.stillborn = 1 + S.name = "Evil-Looking Spiderling" + S.desc = "It moves very quickly, hisses loudly for its size... and has disproportionately large fangs. Hopefully it does not grow up..." + if(!spider_can_fakelings) + queenfakelings_action.Remove(src) + else + to_chat(src, "You have run out of uses of this ability.") + + + +/obj/item/projectile/terrorqueenspit + name = "poisonous spit" + damage = 0 + icon_state = "toxin" + damage_type = TOX + + +/obj/item/projectile/terrorqueenspit/on_hit(mob/living/carbon/target) + if(istype(target, /mob)) + var/mob/living/L = target + if(L.reagents) + if(L.can_inject(null, 0, "chest", 0)) + L.reagents.add_reagent("terror_queen_toxin", 15) + if(!istype(L, /mob/living/simple_animal/hostile/poison/terror_spider)) + L.adjustToxLoss(30) + diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm new file mode 100644 index 00000000000..cf5a17647e2 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm @@ -0,0 +1,179 @@ + +// -------------------------------------------------------------------------------- +// ----------------- TERROR SPIDERS: SPIDERLINGS (USED BY GREEN, WHITE, QUEEN AND MOTHER TYPES) +// -------------------------------------------------------------------------------- + +/obj/effect/spider/spiderling/terror_spiderling + name = "spiderling" + desc = "A fast-moving tiny spider, prone to making aggressive hissing sounds. Hope it doesn't grow up." + icon_state = "spiderling" + anchored = 0 + layer = 2.75 + health = 3 + var/stillborn = 0 + faction = list("terrorspiders") + var/spider_myqueen = null + var/use_vents = 1 + + +/obj/effect/spider/spiderling/terror_spiderling/New() + ..() + ts_spiderling_list += src + + +/obj/effect/spider/spiderling/terror_spiderling/Destroy() + ts_spiderling_list -= src + return ..() + +/obj/effect/spider/spiderling/terror_spiderling/Bump(atom/A) + if(istype(A, /obj/structure/table)) + forceMove(A.loc) + else if(istype(A, /obj/machinery/recharge_station)) + qdel(src) + else + ..() + + +/obj/effect/spider/spiderling/terror_spiderling/process() + if(travelling_in_vent) + if(isturf(loc)) + travelling_in_vent = 0 + entry_vent = null + else if(entry_vent) + if(get_dist(src, entry_vent) <= 1) + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.parent.other_atmosmch) + vents.Add(temp_vent) + if(!vents.len) + entry_vent = null + return + var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents) + if(prob(50)) + visible_message("[src] scrambles into the ventillation ducts!", "You hear something squeezing through the ventilation ducts.") + var/original_location = loc + spawn(rand(20,60)) + forceMove(exit_vent) + var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) + spawn(travel_time) + if(!exit_vent || exit_vent.welded) + forceMove(original_location) + entry_vent = null + return + if(prob(50)) + audible_message("You hear something squeezing through the ventilation ducts.") + spawn(travel_time) + if(!exit_vent || exit_vent.welded) + forceMove(original_location) + entry_vent = null + return + forceMove(exit_vent.loc) + entry_vent = null + var/area/new_area = get_area(loc) + if(new_area) + new_area.Entered(src) + else if(prob(33)) + var/list/nearby = oview(10, src) + if(nearby.len) + var/target_atom = pick(nearby) + walk_to(src, target_atom) + else if(prob(10) && use_vents) + for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) + if(!v.welded) + entry_vent = v + walk_to(src, entry_vent, 1) + break + if(isturf(loc)) + amount_grown += rand(0,2) + if(amount_grown >= 100) + if(stillborn) + die() + else + if(!grow_as) + grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/red, /mob/living/simple_animal/hostile/poison/terror_spider/gray, /mob/living/simple_animal/hostile/poison/terror_spider/green) + var/mob/living/simple_animal/hostile/poison/terror_spider/S = new grow_as(loc) + S.faction = faction + S.spider_myqueen = spider_myqueen + S.master_commander = master_commander + qdel(src) + + +// -------------------------------------------------------------------------------- +// ----------------- TERROR SPIDERS: EGGS (USED BY NURSE AND QUEEN TYPES) --------- +// -------------------------------------------------------------------------------- + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/DoLayTerrorEggs(lay_type, lay_number, lay_crawl) + stop_automated_movement = 1 + var/obj/effect/spider/eggcluster/terror_eggcluster/C = new /obj/effect/spider/eggcluster/terror_eggcluster(get_turf(src)) + C.spiderling_type = lay_type + C.spiderling_number = lay_number + C.spiderling_ventcrawl = lay_crawl + C.faction = faction + C.spider_myqueen = spider_myqueen + C.master_commander = master_commander + if(spider_growinstantly) + C.amount_grown = 250 + C.spider_growinstantly = 1 + spawn(10) + stop_automated_movement = 0 + + +/obj/effect/spider/eggcluster/terror_eggcluster + name = "terror egg cluster" + desc = "A cluster of tiny spider eggs. They pulse with a strong inner life, and appear to have sharp thorns on the sides." + icon_state = "eggs" + var/spider_growinstantly = 0 + faction = list("terrorspiders") + var/spider_myqueen = null + var/spiderling_type = null + var/spiderling_number = 1 + var/spiderling_ventcrawl = 1 + + +/obj/effect/spider/eggcluster/terror_eggcluster/New() + ..() + ts_egg_list += src + spawn(50) + if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/red) + name = "red terror eggs" + else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/gray) + name = "gray terror eggs" + else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/green) + name = "green terror eggs" + else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/black) + name = "black terror eggs" + else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/purple) + name = "purple terror eggs" + else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/white) + name = "white terror eggs" + else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/mother) + name = "mother of terror eggs" + else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/prince) + name = "prince of terror eggs" + else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/queen) + name = "queen of terror eggs" + + +/obj/effect/spider/eggcluster/terror_eggcluster/Destroy() + ts_egg_list -= src + return ..() + +/obj/effect/spider/eggcluster/terror_eggcluster/process() + amount_grown += rand(0,2) + if(amount_grown >= 100) + var/num = spiderling_number + for(var/i=0, i spider_tier) visible_message("[src] bows in respect for the terrifying presence of [target].") @@ -163,10 +167,15 @@ var/global/list/ts_spiderlist = list() spider_specialattack(G,can_poison) else G.attack_animal(src) + else if(istype(target, /obj/structure/alien/resin)) + var/obj/structure/alien/resin/E = target + do_attack_animation(E) + E.health -= rand(melee_damage_lower, melee_damage_upper) + E.healthcheck() else target.attack_animal(src) -/mob/living/simple_animal/hostile/poison/terror_spider/proc/spider_specialattack(mob/living/carbon/human/L, var/poisonable) +/mob/living/simple_animal/hostile/poison/terror_spider/proc/spider_specialattack(mob/living/carbon/human/L, poisonable) L.attack_animal(src) @@ -195,6 +204,8 @@ var/global/list/ts_spiderlist = list() msgs += "It has many injuries." else if(health > (maxHealth*0.25)) msgs += "It is barely clinging on to life!" + if(degenerate) + msgs += "It appears to be dying." else if(health < maxHealth && regen_points > regen_points_per_kill) msgs += "It appears to be regenerating quickly." if(killcount >= 1) @@ -206,7 +217,8 @@ var/global/list/ts_spiderlist = list() ..() ts_spiderlist += src add_language("Spider Hivemind") - add_language("Galactic Common") + if(spider_tier >= TS_TIER_2) + add_language("Galactic Common") default_language = all_languages["Spider Hivemind"] web_action = new() @@ -215,6 +227,7 @@ var/global/list/ts_spiderlist = list() wrap_action.Grant(src) name += " ([rand(1, 1000)])" + real_name = name msg_terrorspiders("[src] has grown in [get_area(src)].") if(is_away_level(z)) spider_awaymission = 1 @@ -233,7 +246,7 @@ var/global/list/ts_spiderlist = list() if(ckey) var/image/alert_overlay = image('icons/mob/terrorspider.dmi', icon_state) notify_ghosts("[src] has appeared in [get_area(src)]. (already player-controlled)", source = src, alert_overlay = alert_overlay) - else if(ai_playercontrol_allowingeneral && ai_playercontrol_allowtype) + else if(ai_playercontrol_allowtype) var/image/alert_overlay = image('icons/mob/terrorspider.dmi', icon_state) notify_ghosts("[src] has appeared in [get_area(src)].", enter_link = "(Click to control)", source = src, alert_overlay = alert_overlay, attack_not_jump = 1) @@ -250,6 +263,8 @@ var/global/list/ts_spiderlist = list() visible_message("\The dead body of the [src] decomposes!") gib() else + if(degenerate > 0) + adjustToxLoss(rand(1,10)) if(regen_points < regen_points_max) regen_points += regen_points_per_tick if((bruteloss > 0) || (fireloss > 0)) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm new file mode 100644 index 00000000000..32d48a80264 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm @@ -0,0 +1,41 @@ + +// -------------------------------------------------------------------------------- +// ----------------- TERROR SPIDERS: T2 WHITE TERROR ------------------------------ +// -------------------------------------------------------------------------------- +// -------------: ROLE: stealthy reproduction +// -------------: AI: injects a venom that makes you grow spiders in your body, then retreats +// -------------: SPECIAL: stuns you on first attack - vulnerable to groups while it does this +// -------------: TO FIGHT IT: blast it before it can get away +// -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 + +/mob/living/simple_animal/hostile/poison/terror_spider/white + name = "White Terror spider" + desc = "An ominous-looking white spider, its ghostly eyes and vicious-looking fangs are the stuff of nightmares." + spider_role_summary = "Rare, bite-and-run spider that infects hosts with spiderlings" + + icon_state = "terror_white" + icon_living = "terror_white" + icon_dead = "terror_white_dead" + maxHealth = 100 + health = 100 + melee_damage_lower = 5 + melee_damage_upper = 15 + move_to_delay = 4 + spider_tier = TS_TIER_2 + loot = list(/obj/item/clothing/accessory/medal) + +/mob/living/simple_animal/hostile/poison/terror_spider/white/spider_specialattack(mob/living/carbon/human/L, poisonable) + if(!poisonable) + ..() + return + var/inject_target = pick("chest","head") + L.attack_animal(src) + if(L.stunned || L.paralysis || L.can_inject(null,0,inject_target,0)) + if(!IsInfected(L)) + visible_message("[src] buries its long fangs deep into the [inject_target] of [L]!") + new /obj/item/organ/internal/body_egg/terror_eggs(L) + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/IsInfected(mob/living/carbon/C) // Terror AI requires this + if(C.get_int_organ(/obj/item/organ/internal/body_egg)) + return 1 + return 0 diff --git a/code/modules/surgery/organs/parasites.dm b/code/modules/surgery/organs/parasites.dm index 61e72743464..b3f274c3838 100644 --- a/code/modules/surgery/organs/parasites.dm +++ b/code/modules/surgery/organs/parasites.dm @@ -1,3 +1,6 @@ + +// Traitor-only space spider eggs + /obj/item/organ/internal/body_egg/spider_eggs name = "spider eggs" icon = 'icons/effects/effects.dmi' @@ -34,3 +37,82 @@ M.reagents.del_reagent("spidereggs") //purge all remaining spider eggs reagent if caught, in time. qdel(src) //We don't want people re-implanting these for near instant gibbings. return null + + + +// Terror Spiders - white spider infection + +/obj/item/organ/internal/body_egg/terror_eggs + name = "terror eggs" + icon = 'icons/effects/effects.dmi' + icon_state = "eggs" + var/current_cycle = 0 + var/awaymission_infection = 0 + var/alternate_ending = 0 + +/obj/item/organ/internal/body_egg/terror_eggs/on_life() + current_cycle += 1 + if(owner.health < -25) + to_chat(owner,"You feel a strange, blissful senstation.") + owner.adjustBruteLoss(-5) + owner.adjustFireLoss(-5) + owner.adjustToxLoss(-5) + // the spider eggs secrete stimulants to keep their host alive until they hatch + switch(current_cycle) + if(1) // immediately + to_chat(owner,"Your spider bite wound hurts horribly! ") + if(istype(get_area(owner), /area/awaycontent) || istype(get_area(owner), /area/awaymission/)) + awaymission_infection = 1 + if(15) // 30 seconds... enough time for the nerve agent to kick in, the pain to be blocked, and healing to begin + to_chat(owner,"The pain has faded, and stopped bleeding, though the skin around it has turned black.") + owner.adjustBruteLoss(-10) + if(60) // 2 minutes... the point where the venom uses and accellerates the healing process, to feed the eggs + to_chat(owner,"Your bite wound has completely sealed up, though the skin is still black. You feel significantly better.") + owner.adjustBruteLoss(-20) + if(120) // 4 minutes... where the eggs are developing, and the wound is turning into a hatching site, but invisibly + to_chat(owner,"The black flesh around your old spider bite wound has started to peel off.") + if(150) // 5 minutes... where the victim realizes something is wrong - this is not a normal wound + to_chat(owner,"The black flesh around your spider bite wound has cracked, and started to split open!") + if(165) // 5m 30s + to_chat(owner,"The black flesh splits open completely, revealing a cluster of small black oval shapes inside you, shapes that seem to be moving!") + if(180) // 6m + if(awaymission_infection && is_away_level(owner.z)) + // we started in the awaymission, we ended on the station. + // To prevent someone bringing an infection back, we're going to trigger an alternate, equally-bad result here. + // Actually, let's make it slightly worse... just to discourage people from bringing back infections. + alternate_ending = 1 + to_chat(owner,"The shapes extend tendrils out of your wound... no... those are legs! SPIDER LEGS! You have spiderlings growing inside you! You scratch at the wound, but it just aggrivates them - they swarm out of the wound, biting you all over!") + owner.visible_message("[owner] flails around on the floor as spiderlings erupt from their skin and swarm all over them! ") + owner.Stun(20) + owner.Weaken(20) + // yes, this is a long stun - that's intentional. Gotta give the spiderlings time to escape. + var/obj/effect/spider/spiderling/terror_spiderling/S1 = new(get_turf(owner)) + S1.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/red + S1.name = "red spiderling" + if(prob(50)) + S1.stillborn = 1 + var/obj/effect/spider/spiderling/terror_spiderling/S2 = new(get_turf(owner)) + S2.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/gray + S2.name = "gray spiderling" + if(prob(50)) + S2.stillborn = 1 + var/obj/effect/spider/spiderling/terror_spiderling/S3 = new(get_turf(owner)) + S3.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/green + S3.name = "green spiderling" + if(prob(50)) + S3.stillborn = 1 + if(alternate_ending) + S1.stillborn = 1 + S2.stillborn = 1 + S3.stillborn = 1 + owner.gib() + else + owner.adjustToxLoss(rand(100,180)) // normal case, range: 100-180, average 140, almost crit (150). + if(190) // 6m 30s + to_chat(owner,"The spiderlings are gone. Your wound, though, looks worse than ever. Remnants of tiny spider eggs, and dead spiders, inside your flesh. Disgusting.") + qdel(src) + +/obj/item/organ/internal/body_egg/terror_eggs/remove(var/mob/living/carbon/M, var/special = 0) + ..() + qdel(src) // prevent people re-implanting them into others + return null diff --git a/paradise.dme b/paradise.dme index 2c8c24688fa..3012b8503cd 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1299,6 +1299,7 @@ #include "code\modules\events\slaughterevent.dm" #include "code\modules\events\spacevine.dm" #include "code\modules\events\spider_infestation.dm" +#include "code\modules\events\spider_terror.dm" #include "code\modules\events\spontaneous_appendicitis.dm" #include "code\modules\events\tear.dm" #include "code\modules\events\traders.dm" @@ -1691,9 +1692,16 @@ #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\chem.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\ghost.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\gray.dm" +#include "code\modules\mob\living\simple_animal\hostile\terror_spiders\green.dm" +#include "code\modules\mob\living\simple_animal\hostile\terror_spiders\hive.dm" +#include "code\modules\mob\living\simple_animal\hostile\terror_spiders\mother.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\prince.dm" +#include "code\modules\mob\living\simple_animal\hostile\terror_spiders\purple.dm" +#include "code\modules\mob\living\simple_animal\hostile\terror_spiders\queen.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\red.dm" +#include "code\modules\mob\living\simple_animal\hostile\terror_spiders\reproduction.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\terror_spiders.dm" +#include "code\modules\mob\living\simple_animal\hostile\terror_spiders\white.dm" #include "code\modules\mob\new_player\login.dm" #include "code\modules\mob\new_player\logout.dm" #include "code\modules\mob\new_player\new_player.dm" From 43aaf4a8d9cc131c22537b80c3a8b486577ac9ae Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 7 Jan 2017 16:07:43 -0800 Subject: [PATCH 002/122] Tiger requests --- code/modules/events/spider_terror.dm | 2 +- .../simple_animal/hostile/terror_spiders/__defines.dm | 2 -- .../living/simple_animal/hostile/terror_spiders/chem.dm | 4 +--- .../living/simple_animal/hostile/terror_spiders/mother.dm | 2 +- .../living/simple_animal/hostile/terror_spiders/queen.dm | 4 ++-- code/modules/mob/mob_helpers.dm | 7 +++++-- code/modules/surgery/organs/parasites.dm | 2 +- 7 files changed, 11 insertions(+), 12 deletions(-) diff --git a/code/modules/events/spider_terror.dm b/code/modules/events/spider_terror.dm index ba636867b35..2556c369470 100644 --- a/code/modules/events/spider_terror.dm +++ b/code/modules/events/spider_terror.dm @@ -34,7 +34,7 @@ spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/queen spawncount = 1 - while((spawncount >= 1) && vents.len) + while(spawncount >= 1 && vents.len) var/obj/vent = pick(vents) var/obj/effect/spider/spiderling/terror_spiderling/S = new(vent.loc) S.name = "evil-looking spiderling" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm index bea086c3ee6..8453a71cff4 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm @@ -19,5 +19,3 @@ #define TS_TIER_3 3 #define TS_TIER_4 4 #define TS_TIER_5 5 - -#define isterrorspider(A) (istype((A), /mob/living/simple_animal/hostile/poison/terror_spider)) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm index 8c43cc6b1a0..1b67c074b22 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm @@ -43,9 +43,7 @@ color = "#CF3600" metabolization_rate = 2 -/datum/reagent/terror_queen_toxin/on_mob_life(mob/living/M as mob) - if(!M) - M = holder.my_atom +/datum/reagent/terror_queen_toxin/on_mob_life(mob/living/M) // make them hallucinate a lot, like a changeling sting M.hallucination = min(400, M.hallucination+50) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm index 634948d1a58..51c95bf6fdf 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm @@ -29,7 +29,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/mother/death(gibbed) if(canspawn) canspawn = 0 - for(var/i=0, i<30, i++) + for(var/i in 0 to 30) var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src)) S.grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/red, /mob/living/simple_animal/hostile/poison/terror_spider/gray) if(prob(66)) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm index 37c92264ebd..874be829e29 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm @@ -103,7 +103,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/MassFlicker() var/list/target_lights = list() for(var/mob/living/carbon/human/H in player_list) - if(H.z != src.z) + if(H.z != z) continue if(H.stat == DEAD) continue @@ -212,7 +212,7 @@ /obj/item/projectile/terrorqueenspit/on_hit(mob/living/carbon/target) - if(istype(target, /mob)) + if(ismob(target)) var/mob/living/L = target if(L.reagents) if(L.can_inject(null, 0, "chest", 0)) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 0b04647d094..1610999f5ed 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -586,8 +586,8 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) if(5) newletter="glor" newphrase+="[newletter]";counter-=1 - return newphrase - + return newphrase + /mob/proc/get_preference(toggleflag) if(!client) return FALSE @@ -596,3 +596,6 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) return FALSE // Cast to 1/0 return !!(client.prefs.toggles & toggleflag) + + +#define isterrorspider(A) (istype((A), /mob/living/simple_animal/hostile/poison/terror_spider)) \ No newline at end of file diff --git a/code/modules/surgery/organs/parasites.dm b/code/modules/surgery/organs/parasites.dm index b3f274c3838..3d1917fe258 100644 --- a/code/modules/surgery/organs/parasites.dm +++ b/code/modules/surgery/organs/parasites.dm @@ -61,7 +61,7 @@ switch(current_cycle) if(1) // immediately to_chat(owner,"Your spider bite wound hurts horribly! ") - if(istype(get_area(owner), /area/awaycontent) || istype(get_area(owner), /area/awaymission/)) + if(istype(get_area(owner), /area/awaycontent) || istype(get_area(owner), /area/awaymission)) awaymission_infection = 1 if(15) // 30 seconds... enough time for the nerve agent to kick in, the pain to be blocked, and healing to begin to_chat(owner,"The pain has faded, and stopped bleeding, though the skin around it has turned black.") From 5fa8d3319362f54d58782888f8b8f2db5112711d Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Sun, 22 Jan 2017 07:07:32 +0400 Subject: [PATCH 003/122] tweaked event delay, enabled morph, enabled immovable rod --- code/modules/events/event_container.dm | 12 ++++++++++-- code/modules/events/immovable_rod.dm | 11 ++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index deaa1b85aa8..c2dc2109cd2 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -101,8 +101,15 @@ var/list/event_last_fired = list() playercount_modifier = 1 if(26 to 35) playercount_modifier = 0.9 - if(36 to 100000) + if(36 to 50) playercount_modifier = 0.8 + if(50 to 70) + playercount_modifier = 0.7 + if(70 to 90) + playercount_modifier = 0.6 + if(90 to 50000) + playercount_modifier = 0.5 + playercount_modifier = playercount_modifier * delay_modifier var/event_delay = rand(config.event_delay_lower[severity], config.event_delay_upper[severity]) * playercount_modifier @@ -155,6 +162,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ion_storm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Borer Infestation", /datum/event/borer_infestation, 40, list(ASSIGNMENT_SECURITY = 30), 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Immovable Rod", /datum/event/immovable_rod, 0, list(ASSIGNMENT_ENGINEER = 30), 1), //new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 15), 1), // NON-BAY EVENTS new /datum/event_meta(EVENT_LEVEL_MODERATE, "Mass Hallucination", /datum/event/mass_hallucination, 300), @@ -170,7 +178,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravitational Anomaly", /datum/event/anomaly/anomaly_grav, 200), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Revenant", /datum/event/revenant, 150), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Swarmer Spawn", /datum/event/spawn_swarmer, 150, is_one_shot = 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 0, is_one_shot = 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 100, is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Disease Outbreak", /datum/event/disease_outbreak, 0, list(ASSIGNMENT_MEDICAL = 150), 1) ) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index b1a5a0f054a..5c643d95d80 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -11,7 +11,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 announceWhen = 5 /datum/event/immovable_rod/announce() - event_announcement.Announce("What the fuck was that?!", "General Alert") + event_announcement.Announce("Immovable object inbound. Brace for impact.", "Collision Alert") /datum/event/immovable_rod/start() var/startside = pick(cardinal) @@ -34,6 +34,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 loc = start z_original = z destination = end + notify_ghosts("\A [src] is inbound!", source = src) if(end && end.z==z_original) walk_towards(src, destination, 1) @@ -43,7 +44,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 return ..() /obj/effect/immovablerod/ex_act(test) - return 0 + return FALSE /obj/effect/immovablerod/Bump(atom/clong) if(prob(10)) @@ -54,12 +55,12 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 x = clong.x y = clong.y - if(istype(clong, /turf) || istype(clong, /obj)) + if(isturf(clong) || isobj(clong)) if(clong.density) clong.ex_act(2) - else if(istype(clong, /mob)) - if(istype(clong, /mob/living/carbon/human)) + else if(ismob(clong)) + if(ishuman(clong)) var/mob/living/carbon/human/H = clong H.visible_message("[H.name] is penetrated by an immovable rod!" , "The rod penetrates you!" , "You hear a CLANG!") H.adjustBruteLoss(160) From 1eec76088bfa081ef79e4aa3451242a621c116ee Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Mon, 23 Jan 2017 21:52:45 +0400 Subject: [PATCH 004/122] tweaked playercount and decreased morph weight --- code/modules/events/event_container.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index c2dc2109cd2..af407b4a25e 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -105,9 +105,9 @@ var/list/event_last_fired = list() playercount_modifier = 0.8 if(50 to 70) playercount_modifier = 0.7 - if(70 to 90) + if(70 to 100) playercount_modifier = 0.6 - if(90 to 50000) + if(100 to 50000) playercount_modifier = 0.5 playercount_modifier = playercount_modifier * delay_modifier @@ -178,7 +178,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravitational Anomaly", /datum/event/anomaly/anomaly_grav, 200), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Revenant", /datum/event/revenant, 150), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Swarmer Spawn", /datum/event/spawn_swarmer, 150, is_one_shot = 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 100, is_one_shot = 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 40, is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Disease Outbreak", /datum/event/disease_outbreak, 0, list(ASSIGNMENT_MEDICAL = 150), 1) ) From 1d06b3afca7d89ac1cdb6c462f26478c3ef59e12 Mon Sep 17 00:00:00 2001 From: Kyep Date: Mon, 23 Jan 2017 23:42:44 -0800 Subject: [PATCH 005/122] Fox Requests --- .../living/simple_animal/hostile/terror_spiders/actions.dm | 4 ++-- .../mob/living/simple_animal/hostile/terror_spiders/chem.dm | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm index 91ff4cbb53e..d041f50322a 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm @@ -141,8 +141,8 @@ if(Proj.damage_type != BRUTE && Proj.damage_type != BURN) visible_message("[src] is undamaged by [Proj]!") // Webs don't care about disablers, tasers, etc. Or toxin damage. They're organic, but not alive. - else - ..() + return + ..() // ---------- WRAP diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm index 1b67c074b22..366d28a32a3 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/chem.dm @@ -45,6 +45,7 @@ /datum/reagent/terror_queen_toxin/on_mob_life(mob/living/M) // make them hallucinate a lot, like a changeling sting - M.hallucination = min(400, M.hallucination+50) + if(M.hallucination < 400) + M.Hallucinate(50) From 28f9496713bd6866169d20ccadd8a23113789297 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Thu, 19 Jan 2017 22:13:16 -0500 Subject: [PATCH 006/122] Adds Colourblindness for Vulpkanin&Tajara, Refactors Darksight, tidying up, etc. Adds colourblindness for Vulpkanin and Tajara that can be turned on by a preference in character creation. By default, Vulpkanin and Tajara still see in full colour, however their darksight is reduced to Human levels unless they choose the 'unaugmented' eyes option. Refactors darksight so it's tied to the eye organ. Refactors noir glasses. You can now visually distinguish mechanical/mechassisted organs from their organic counterparts due to their names and icons. Resolves issue w/ Colour-vision after Cloning/Lesser-to-greater Formswapping. Cloned Vulpkanin and Tajara get unaugmented vision (colourblind and darksight) by default since the cloners can't administer the eye-augmentation surgery. Same goes for swapping from lesser to greater form as a Changeling. The monkey-forms of Vulpkanin and Tajara now have almost the same organs as their greater forms, meaning they get the same colourblindness but excellent darksight. --- code/__DEFINES/misc.dm | 13 +---- code/__HELPERS/AnimationLibrary.dm | 2 +- code/modules/client/client procs.dm | 3 + code/modules/client/preference/preferences.dm | 16 ++++-- code/modules/clothing/glasses/glasses.dm | 34 +---------- code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 18 +++--- .../mob/living/carbon/human/inventory.dm | 2 + .../living/carbon/human/species/abductor.dm | 10 +++- .../mob/living/carbon/human/species/apollo.dm | 9 ++- .../mob/living/carbon/human/species/golem.dm | 3 +- .../mob/living/carbon/human/species/monkey.dm | 21 +++++++ .../living/carbon/human/species/plasmaman.dm | 2 + .../mob/living/carbon/human/species/shadow.dm | 4 +- .../living/carbon/human/species/skeleton.dm | 2 +- .../living/carbon/human/species/species.dm | 18 ++++-- .../living/carbon/human/species/station.dm | 53 ++++++++++++------ code/modules/mob/login.dm | 2 + code/modules/mob/mob_helpers.dm | 26 +++++++-- code/modules/mob/new_player/new_player.dm | 2 +- .../designs/mechfabricator_designs.dm | 2 +- code/modules/surgery/organs/helpers.dm | 1 - code/modules/surgery/organs/organ.dm | 28 ++++----- code/modules/surgery/organs/organ_internal.dm | 44 +++++++++++++-- .../surgery/organs/subtypes/abductor.dm | 4 ++ code/modules/surgery/organs/subtypes/diona.dm | 44 ++------------- code/modules/surgery/organs/subtypes/drask.dm | 26 +-------- code/modules/surgery/organs/subtypes/grey.dm | 5 ++ .../surgery/organs/subtypes/machine.dm | 20 ++----- .../surgery/organs/subtypes/nucleation.dm | 7 +-- .../modules/surgery/organs/subtypes/shadow.dm | 4 ++ .../surgery/organs/subtypes/tajaran.dm | 9 +++ .../modules/surgery/organs/subtypes/unathi.dm | 5 ++ .../surgery/organs/subtypes/vulpkanin.dm | 9 +++ code/modules/surgery/organs/subtypes/wryn.dm | 4 ++ code/modules/surgery/organs_internal.dm | 4 +- icons/obj/surgery.dmi | Bin 31763 -> 31898 bytes paradise.dme | 2 + 38 files changed, 258 insertions(+), 202 deletions(-) create mode 100644 code/modules/surgery/organs/subtypes/abductor.dm create mode 100644 code/modules/surgery/organs/subtypes/shadow.dm diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 5e9815b7758..09ea7bf366f 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -250,16 +250,9 @@ #define MAP_MAXZ 6 //Matricies -#define MATRIX_DEFAULT list(1, 0, 0, 0,\ - 0, 1, 0, 0,\ - 0, 0, 1, 0,\ - 0, 0, 0, 1) - -#define MATRIX_GREYSCALE list(0.33, 0.33, 0.33, 0,\ - 0.33, 0.33, 0.33, 0,\ - 0.33, 0.33, 0.33, 0,\ - 0.00, 0.00, 0.00, 1,\ - 0.00, 0.00, 0.00, 0) +#define MATRIX_GREYSCALE list(0.33, 0.33, 0.33,\ + 0.33, 0.33, 0.33,\ + 0.33, 0.33, 0.33) //Gun trigger guards #define TRIGGER_GUARD_ALLOW_ALL -1 #define TRIGGER_GUARD_NONE 0 diff --git a/code/__HELPERS/AnimationLibrary.dm b/code/__HELPERS/AnimationLibrary.dm index fcabe2e0a78..fd79fe197f2 100644 --- a/code/__HELPERS/AnimationLibrary.dm +++ b/code/__HELPERS/AnimationLibrary.dm @@ -7,7 +7,7 @@ /proc/animate_fade_grayscale(var/atom/A, var/time = 5) if(!istype(A) && !istype(A, /client)) return - A.color = MATRIX_DEFAULT + A.color = null animate(A, color = MATRIX_GREYSCALE, time = time, easing = SINE_EASING) /proc/animate_melt_pixel(var/atom/A) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 6e1fe9126fd..3e2e1f54e0c 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -621,3 +621,6 @@ if(lang.flags & RESTRICTED) message += " (RESTRICTED)" to_chat(world, "[message]") + +/client/proc/colour_transition(var/list/colour_to = null, var/time = 10) //Call this with no parameters to reset to default. + animate(src, color=colour_to, time=time, easing=SINE_EASING) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index ba51996f4e7..4ec7516a409 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -282,6 +282,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "Species: [species]
" if(species == "Vox") dat += "N2 Tank: [speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
" + else if(species in list("Vulpkanin", "Tajaran")) + dat += "Colour Vision: [speciesprefs ? "Unaugmented" : "Surgically Corrected"]
" dat += "Secondary Language: [language]
" dat += "Blood Type: [b_type]
" if(species in list("Human", "Drask", "Vox")) @@ -1337,9 +1339,13 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts //Reset prosthetics. organ_data = list() rlimb_data = list() - if("speciesprefs")//oldvox code - speciesprefs = !speciesprefs - + if("speciesprefs") + if(species == "Vox") //oldvox code + speciesprefs = !speciesprefs //Starts 0, so if someone clicks the button up top there, this won't be 0 anymore. If they click it again, it'll go back to 0. + else if(species in list("Vulpkanin", "Tajaran")) //Species that can be colourblind. + var/list/vision_options = list("Surgically Corrected", "Unaugmented") //Surgically corrected eyes (default option) see in full colour but have 2 darksight. Unaugmented eyes are colourblind but have 8 darksight. + speciesprefs = input("Please select your vision preference. \nOverridden by mech. assisted or mechanical eyes. \nSurgically Corrected: Full colour, low darksight. \n Unaugmented: Colourblind, full darksight.", "Character Generation", 0) in vision_options + speciesprefs = (speciesprefs != "Surgically Corrected") //Ensure the default option (surgically corrected) returns 0. I would've set up the vision_options list such that Surgically Corrected = 0, but input() didn't care for it. if("language") // var/languages_available var/list/new_languages = list("None") @@ -2020,8 +2026,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts return 1 /datum/preferences/proc/copy_to(mob/living/carbon/human/character) - var/datum/species/S = all_species[species] - character.change_species(species) // Yell at me if this causes everything to melt if(be_random_name) real_name = random_name(gender,species) @@ -2173,7 +2177,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.dna.SetSEState(MUTEBLOCK,1,1) character.disabilities |= MUTE - S.handle_dna(character) + character.species.handle_dna(character) if(character.dna.dirtySE) character.dna.UpdateSE() diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 4fde338ba54..5b38adc6a82 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -232,8 +232,6 @@ name = "noir sunglasses" desc = "Somehow these seem even more out-of-date than normal sunglasses." actions_types = list(/datum/action/item_action/noir) - var/noir_mode = 0 - color_view = MATRIX_GREYSCALE /obj/item/clothing/glasses/sunglasses/noir/attack_self() toggle_noir() @@ -243,36 +241,8 @@ return 1 /obj/item/clothing/glasses/sunglasses/noir/proc/toggle_noir() - var/list/difference = difflist(usr.client.color, color_view) - - if(!noir_mode) - if(color_view && usr.client && (!usr.client.color || difference)) - animate(usr.client, color = color_view, time = 10) - noir_mode = 1 - else - if(usr.client && usr.client.color && !difference) - animate(usr.client, color = initial(usr.client.color), time = 10) - noir_mode = 0 - -/obj/item/clothing/glasses/sunglasses/noir/equipped(mob/user, slot) - var/list/difference = difflist(user.client.color, color_view) - - if(slot == slot_glasses) - if(noir_mode) - if(color_view && user.client && (!user.client.color || difference.len)) - animate(user.client, color = color_view, time = 10) - else - if(user.client && user.client.color && !difference.len) - animate(user.client, color = initial(user.client.color), time = 10) - ..(user, slot) - -/obj/item/clothing/glasses/sunglasses/noir/dropped(mob/living/carbon/human/user) - var/list/difference = difflist(user.client.color, color_view) - - if(istype(user) && user.glasses == src) - if(user.client && user.client.color && !difference.len) - animate(user.client, color = initial(user.client.color), time = 10) - ..(user) + color_view = color_view ? null : MATRIX_GREYSCALE //Toggles between null and grayscale, with null being the default option. + usr.update_client_colour() /obj/item/clothing/glasses/sunglasses/yeah name = "agreeable glasses" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 827f0ded62e..1ec1695352a 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -309,7 +309,7 @@ Stun(2) var/obj/item/organ/internal/eyes/E = get_int_organ(/obj/item/organ/internal/eyes) - if(!E) + if(!E || (E && E.weld_proof)) return switch(damage) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ae88df869d9..c2e2f090bb2 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -721,8 +721,6 @@ if(istype(id)) return id - - /mob/living/carbon/human/update_sight() if(!client) return @@ -1533,12 +1531,6 @@ if(species.default_language) add_language(species.default_language) - see_in_dark = species.darksight - if(see_in_dark > 2) - see_invisible = SEE_INVISIBLE_LEVEL_ONE - else - see_invisible = SEE_INVISIBLE_LIVING - hunger_drain = species.hunger_drain digestion_ratio = species.digestion_ratio @@ -1608,8 +1600,17 @@ dna.real_name = real_name species.handle_post_spawn(src) + + see_in_dark = species.get_resultant_darksight(src) + if(see_in_dark > 2) + see_invisible = SEE_INVISIBLE_LEVEL_ONE + else + see_invisible = SEE_INVISIBLE_LIVING + species.handle_dna(src) //Give them whatever special dna business they got. + update_client_colour(0) + spawn(0) overlays.Cut() update_mutantrace(1) @@ -1632,7 +1633,6 @@ return null return species.default_language ? all_languages[species.default_language] : null - /mob/living/carbon/human/proc/bloody_doodle() set category = "IC" set name = "Write in blood" diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 4e90d763e9e..c375d718e3d 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -119,6 +119,7 @@ if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) update_sight() update_inv_glasses() + update_client_colour() else if(I == head) head = null if(I.flags & BLOCKHAIR || I.flags & BLOCKHEADHAIR) @@ -271,6 +272,7 @@ if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) update_sight() update_inv_glasses(redraw_mob) + update_client_colour() if(slot_gloves) gloves = W update_inv_gloves(redraw_mob) diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index 3bcade9f00d..4690529524f 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -7,8 +7,16 @@ language = "Abductor Mindlink" default_language = "Abductor Mindlink" unarmed_type = /datum/unarmed_attack/punch - darksight = 3 eyes = "blank_eyes" + has_organ = list( + "heart" = /obj/item/organ/internal/heart, + "lungs" = /obj/item/organ/internal/lungs, + "liver" = /obj/item/organ/internal/liver, + "kidneys" = /obj/item/organ/internal/kidneys, + "brain" = /obj/item/organ/internal/brain, + "appendix" = /obj/item/organ/internal/appendix, + "eyes" = /obj/item/organ/internal/eyes/abductor //3 darksight. + ) flags = HAS_LIPS | NO_BLOOD | NO_BREATHE diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm index faeecdfcc5f..476f1aa9049 100644 --- a/code/modules/mob/living/carbon/human/species/apollo.dm +++ b/code/modules/mob/living/carbon/human/species/apollo.dm @@ -9,7 +9,6 @@ punchdamagelow = 0 punchdamagehigh = 1 //primitive = /mob/living/carbon/monkey/wryn - darksight = 3 slowdown = 1 warning_low_pressure = -300 hazard_low_pressure = 1 @@ -32,7 +31,7 @@ has_organ = list( "heart" = /obj/item/organ/internal/heart, "brain" = /obj/item/organ/internal/brain, - "eyes" = /obj/item/organ/internal/eyes, + "eyes" = /obj/item/organ/internal/eyes/wryn, //3 darksight. "appendix" = /obj/item/organ/internal/appendix, "antennae" = /obj/item/organ/internal/wryn/hivenode ) @@ -89,7 +88,7 @@ name_plural = "Nucleations" icobase = 'icons/mob/human_races/r_nucleation.dmi' unarmed_type = /datum/unarmed_attack/punch - blurb = "A sub-race of unforunates who have been exposed to too much supermatter radiation. As a result, \ + blurb = "A sub-race of unfortunates who have been exposed to too much supermatter radiation. As a result, \ supermatter crystal clusters have begun to grow across their bodies. Research to find a cure for this ailment \ has been slow, and so this is a common fate for veteran engineers. The supermatter crystals produce oxygen, \ negating the need for the individual to breathe. Their massive change in biology, however, renders most medicines \ @@ -109,8 +108,8 @@ reagent_tag = PROCESS_ORG has_organ = list( "heart" = /obj/item/organ/internal/heart, - "crystalized brain" = /obj/item/organ/internal/brain/crystal, - "eyes" = /obj/item/organ/internal/eyes/luminescent_crystal, + "crystallized brain" = /obj/item/organ/internal/brain/crystal, + "eyes" = /obj/item/organ/internal/eyes/luminescent_crystal, //Standard darksight of 2. "strange crystal" = /obj/item/organ/internal/nucleation/strange_crystal, "resonant crystal" = /obj/item/organ/internal/nucleation/resonant_crystal ) diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 1bb4ba8e214..a2f2eb30467 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -40,7 +40,8 @@ has_organ = list( "brain" = /obj/item/organ/internal/brain/golem - ) + ) //Has standard darksight of 2. + suicide_messages = list( "is crumbling into dust!", "is smashing their body apart!") diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index dffc73d4e1d..34f4e16bfdf 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -26,6 +26,7 @@ tail = "chimptail" bodyflags = FEET_PADDED | HAS_TAIL reagent_tag = PROCESS_ORG + //Has standard darksight of 2. //unarmed_types = list(/datum/unarmed_attack/bite, /datum/unarmed_attack/claws) //inherent_verbs = list(/mob/living/proc/ventcrawl) @@ -106,6 +107,16 @@ tail = "farwatail" reagent_tag = PROCESS_ORG + has_organ = list( + "heart" = /obj/item/organ/internal/heart, + "lungs" = /obj/item/organ/internal/lungs, + "liver" = /obj/item/organ/internal/liver/tajaran, + "kidneys" = /obj/item/organ/internal/kidneys, + "brain" = /obj/item/organ/internal/brain, + "appendix" = /obj/item/organ/internal/appendix, + "eyes" = /obj/item/organ/internal/eyes/tajaran //Tajara monkey-forms are uniquely colourblind and have excellent darksight. + ) + /datum/species/monkey/vulpkanin name = "Wolpin" @@ -121,6 +132,16 @@ tail = "wolpintail" reagent_tag = PROCESS_ORG + has_organ = list( + "heart" = /obj/item/organ/internal/heart, + "lungs" = /obj/item/organ/internal/lungs, + "liver" = /obj/item/organ/internal/liver/vulpkanin, + "kidneys" = /obj/item/organ/internal/kidneys, + "brain" = /obj/item/organ/internal/brain, + "appendix" = /obj/item/organ/internal/appendix, + "eyes" = /obj/item/organ/internal/eyes/vulpkanin //Vulpkanin monkey-forms are uniquely colourblind and have excellent darksight. + ) + /datum/species/monkey/skrell name = "Neara" diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 1a79374407c..d0d9d10fd94 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -20,6 +20,8 @@ heat_level_2 = 400 // Heat damage level 2 above this point. heat_level_3 = 500 // Heat damage level 3 above this point. + //Has default darksight of 2. + suicide_messages = list( "is twisting their own neck!", "is letting some O2 in!", diff --git a/code/modules/mob/living/carbon/human/species/shadow.dm b/code/modules/mob/living/carbon/human/species/shadow.dm index ca26348d188..35f008af802 100644 --- a/code/modules/mob/living/carbon/human/species/shadow.dm +++ b/code/modules/mob/living/carbon/human/species/shadow.dm @@ -7,12 +7,12 @@ default_language = "Galactic Common" unarmed_type = /datum/unarmed_attack/claws - darksight = 8 blood_color = "#CCCCCC" flesh_color = "#AAAAAA" has_organ = list( - "brain" = /obj/item/organ/internal/brain + "brain" = /obj/item/organ/internal/brain, + "eyes" = /obj/item/organ/internal/eyes/shadow //8 darksight. ) flags = NO_BLOOD | NO_BREATHE | RADIMMUNE diff --git a/code/modules/mob/living/carbon/human/species/skeleton.dm b/code/modules/mob/living/carbon/human/species/skeleton.dm index 4a3b087e93d..d09c8dd1699 100644 --- a/code/modules/mob/living/carbon/human/species/skeleton.dm +++ b/code/modules/mob/living/carbon/human/species/skeleton.dm @@ -41,7 +41,7 @@ "is twisting their skull off!") has_organ = list( "brain" = /obj/item/organ/internal/brain/golem, - ) + ) //Has default darksight of 2. /datum/species/skeleton/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R) // Crazylemon is still silly diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e2238057533..73c557c9c58 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -49,7 +49,6 @@ var/siemens_coeff = 1 //base electrocution coefficient var/invis_sight = SEE_INVISIBLE_LIVING - var/darksight = 2 var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure. var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning. var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning. @@ -586,12 +585,23 @@ It'll return null if the organ doesn't correspond, so include null checks when u return null return has_organ[organ_slot] +/datum/species/proc/get_resultant_darksight(mob/living/carbon/human/H) //Returns default value of 2 if the mob doesn't have eyes, otherwise it grabs the eyes darksight. + var/resultant_darksight = 2 + var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) + if(eyes && eyes.dark_view) + resultant_darksight = eyes.dark_view + return resultant_darksight /datum/species/proc/update_sight(mob/living/carbon/human/H) H.sight = initial(H.sight) - H.see_in_dark = darksight + H.see_in_dark = get_resultant_darksight(H) H.see_invisible = invis_sight + if(H.see_in_dark > 2) //Preliminary see_invisible handling as per set_species() in code\modules\mob\living\carbon\human\human.dm. + H.see_invisible = SEE_INVISIBLE_LEVEL_ONE + else + H.see_invisible = SEE_INVISIBLE_LIVING + if(H.client.eye != H) var/atom/A = H.client.eye if(A.update_remote_sight(H)) //returns 1 if we override all other sight updates. @@ -642,7 +652,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(rig.visor && rig.visor.vision && rig.visor.active && rig.visor.vision.glasses) var/obj/item/clothing/glasses/G = rig.visor.vision.glasses if(istype(G)) - H.see_in_dark = (G.darkness_view ? G.darkness_view : darksight) // Otherwise we keep our darkness view with togglable nightvision. + H.see_in_dark = (G.darkness_view ? G.darkness_view : get_resultant_darksight(H)) // Otherwise we keep our darkness view with togglable nightvision. if(G.vision_flags) // MESONS H.sight |= G.vision_flags @@ -652,7 +662,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u H.see_in_dark = max(lesser_darkview_bonus, H.see_in_dark) if(H.vision_type) - H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark, darksight) + H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark, get_resultant_darksight(H)) H.see_invisible = H.vision_type.see_invisible if(H.vision_type.light_sensitive) H.weakeyes = 1 diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 5bde6ce8e5b..4ae52431e9a 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -18,6 +18,7 @@ worlds tumultous at best." reagent_tag = PROCESS_ORG + //Has standard darksight of 2. /datum/species/unathi name = "Unathi" @@ -30,7 +31,6 @@ tail = "sogtail" unarmed_type = /datum/unarmed_attack/claws primitive_form = "Stok" - darksight = 3 blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \ Uuosa-Eso system, which roughly translates to 'burning mother'.

Coming from a harsh, radioactive \ @@ -66,7 +66,7 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes, + "eyes" = /obj/item/organ/internal/eyes/unathi //3 darksight. ) allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, @@ -91,7 +91,6 @@ language = "Siik'tajr" tail = "tajtail" unarmed_type = /datum/unarmed_attack/claws - darksight = 8 blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \ S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \ @@ -126,7 +125,8 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes, + "eyes" = /obj/item/organ/internal/eyes/tajaran /*Most Tajara are surgically augmented at birth for full colour vision, although it cost them their darksight (darksight = 2) unless they choose otherwise in character creation (darksight = 8 but colourblind). + However, this organ define is for unaugmented eyes so cloned Tajara are colourblind but have excellent darksight.*/ ) allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/chick, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, @@ -138,6 +138,15 @@ "is twisting their own neck!", "is holding their breath!") +/datum/species/tajaran/equip(var/mob/living/carbon/human/H) //Handles colourblindness preferences. Should only happen if the client is in a mob otherwise it won't work. + var/sight_pref = H.client.prefs.speciesprefs + if(!sight_pref) + var/obj/item/organ/internal/eyes/tajaran/tajeyes = H.get_int_organ(/obj/item/organ/internal/eyes) + if(tajeyes && !tajeyes.robotic) //To avoid overriding the properties of cybernetic/mechassisted eyes, apply the colour matrix and darksight modifier only if the organ is organic. Robotic/mechassisted eyes currently do this, too, as is necessary. + tajeyes.colourmatrix = null //For individuals who recieved the modification, they lose much of their darksight and gain full colour vision. + tajeyes.dark_view = 2 //If they didn't, they would have their unique colour-vision and full darksight. See code\modules\surgery\organs\subtypes\tajaran.dm + H.update_client_colour(0) + /datum/species/tajaran/handle_death(var/mob/living/carbon/human/H) H.stop_tail_wagging(1) @@ -152,7 +161,6 @@ primitive_form = "Wolpin" tail = "vulptail" unarmed_type = /datum/unarmed_attack/claws - darksight = 8 blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \ dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \ @@ -176,7 +184,8 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes, + "eyes" = /obj/item/organ/internal/eyes/vulpkanin /*Most Vulpkanin are surgically augmented at birth for full colour vision, although it cost them their darksight (darksight = 2) unless they choose otherwise in character creation (darksight = 8 but colourblind). + However, this organ define is for unaugmented eyes so cloned Vulpkanin are colourblind but have excellent darksight.*/ ) allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, @@ -188,6 +197,15 @@ "is twisting their own neck!", "is holding their breath!") +/datum/species/vulpkanin/equip(var/mob/living/carbon/human/H) //Handles colourblindness preferences. Should only happen if the client is in a mob otherwise it won't work. + var/sight_pref = H.client.prefs.speciesprefs + if(!sight_pref) + var/obj/item/organ/internal/eyes/vulpkanin/vulpeyes = H.get_int_organ(/obj/item/organ/internal/eyes) + if(vulpeyes && !vulpeyes.robotic) //To avoid overriding the properties of cybernetic/mechassisted eyes, apply the colour matrix and darksight modifier only if the organ is organic. Robotic/mechassisted eyes currently do this, too, as is necessary. + vulpeyes.colourmatrix = null //For individuals who recieved the modification, they lose much of their darksight and gain full colour vision. + vulpeyes.dark_view = 2 //If they didn't, they would have their unique colour-vision and full darksight. See code\modules\surgery\organs\subtypes\vulpkanin.dm + H.update_client_colour(0) + /datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H) H.stop_tail_wagging(1) @@ -226,7 +244,7 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes, + "eyes" = /obj/item/organ/internal/eyes //Default darksight of 2. ) suicide_messages = list( @@ -315,7 +333,7 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes, + "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2. "stack" = /obj/item/organ/internal/stack/vox //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used ) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ. @@ -439,7 +457,7 @@ "liver" = /obj/item/organ/internal/liver, "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, - "eyes" = /obj/item/organ/internal/eyes, + "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2. "stack" = /obj/item/organ/internal/stack/vox //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used ) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ. @@ -478,7 +496,7 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes, + "eyes" = /obj/item/organ/internal/eyes //Default darksight of 2. ) allowed_consumed_mobs = list(/mob/living/simple_animal/diona) @@ -517,6 +535,7 @@ exotic_blood = "water" //ventcrawler = 1 //ventcrawling commented out butt_sprite = "slime" + //Has default darksight of 2. has_organ = list( "brain" = /obj/item/organ/internal/brain/slime @@ -685,7 +704,6 @@ default_language = "Galactic Common" language = "Psionic Communication" unarmed_type = /datum/unarmed_attack/punch - darksight = 5 // BOOSTED from 2 eyes = "grey_eyes_s" butt_sprite = "grey" @@ -696,7 +714,7 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain/grey, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes, + "eyes" = /obj/item/organ/internal/eyes/grey //5 darksight. ) brute_mod = 1.25 //greys are fragile @@ -771,13 +789,13 @@ has_organ = list( "nutrient channel" = /obj/item/organ/internal/liver/diona, "neural strata" = /obj/item/organ/internal/heart/diona, - "receptor node" = /obj/item/organ/internal/diona_receptor, + "receptor node" = /obj/item/organ/internal/eyes/diona, //Default darksight of 2. "gas bladder" = /obj/item/organ/internal/brain/diona, "polyp segment" = /obj/item/organ/internal/kidneys/diona, "anchoring ligament" = /obj/item/organ/internal/appendix/diona ) - vision_organ = /obj/item/organ/internal/diona_receptor + vision_organ = /obj/item/organ/internal/eyes/diona has_limbs = list( "chest" = list("path" = /obj/item/organ/external/chest/diona), "groin" = list("path" = /obj/item/organ/external/groin/diona), @@ -878,10 +896,10 @@ has_organ = list( "brain" = /obj/item/organ/internal/brain/mmi_holder/posibrain, "cell" = /obj/item/organ/internal/cell, - "optics" = /obj/item/organ/internal/optical_sensor + "optics" = /obj/item/organ/internal/eyes/optical_sensor //Default darksight of 2. ) - vision_organ = /obj/item/organ/internal/optical_sensor + vision_organ = /obj/item/organ/internal/eyes/optical_sensor has_limbs = list( "chest" = list("path" = /obj/item/organ/external/chest/ipc), "groin" = list("path" = /obj/item/organ/external/groin/ipc), @@ -927,7 +945,6 @@ language = "Orluum" unarmed_type = /datum/unarmed_attack/punch eyes = "drask_eyes_s" - darksight = 5 speech_sounds = list('sound/voice/DraskTalk.ogg') speech_chance = 20 @@ -977,7 +994,7 @@ "heart" = /obj/item/organ/internal/heart/drask, "lungs" = /obj/item/organ/internal/lungs/drask, "metabolic strainer" = /obj/item/organ/internal/liver/drask, - "eyes" = /obj/item/organ/internal/eyes/drask, + "eyes" = /obj/item/organ/internal/eyes/drask, //5 darksight. "brain" = /obj/item/organ/internal/brain/drask ) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 8cc51882ebf..27197474c00 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -72,6 +72,8 @@ for(var/datum/alternate_appearance/AA in viewing_alternate_appearances) AA.display_to(list(src)) + update_client_colour(0) + callHook("mob_login", list("client" = client, "mob" = src)) // Calling update_interface() in /mob/Login() causes the Cyborg to immediately be ghosted; because of winget(). diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 0b04647d094..e07fb765ce7 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -22,6 +22,24 @@ return 0 return 1 +/mob/proc/get_screen_colour() + +/mob/proc/update_client_colour(var/time = 10) //Update the mob's client.color with an animation the specified time in length. + if(!client) + return + client.colour_transition(get_screen_colour(), time = time) + +/mob/living/carbon/human/get_screen_colour() //Fetch the colour matrix from wherever (e.g. eyes) so it can be compared to client.color. + . = ..() + if(.) + return . + var/obj/item/clothing/glasses/worn_glasses = glasses + var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) + if(istype(worn_glasses) && worn_glasses.color_view) //Check to see if they got those magic glasses and they're augmenting the colour of what the wearer sees. If they're not, color_view should be null. + return worn_glasses.color_view + else if(eyes && eyes.colourmatrix) //If they're not, check to see if their eyes got one of them there colour matrices. + return eyes.colourmatrix + /proc/isloyal(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them for(var/obj/item/weapon/implant/loyalty/L in A) if(L && L.implanted) @@ -291,10 +309,10 @@ proc/muffledspeech(phrase) /mob/proc/abiotic(var/full_body = 0) - if(full_body && ((src.l_hand && !(src.l_hand.flags & ABSTRACT)) || (src.r_hand && !(src.r_hand.flags & ABSTRACT)) || (src.back || src.wear_mask))) + if(full_body && ((l_hand && !(l_hand.flags & ABSTRACT)) || (r_hand && !(r_hand.flags & ABSTRACT)) || (back || wear_mask))) return 1 - if((src.l_hand && !(src.l_hand.flags & ABSTRACT)) || (src.r_hand && !(src.r_hand.flags & ABSTRACT))) + if((l_hand && !(l_hand.flags & ABSTRACT)) || (r_hand && !(r_hand.flags & ABSTRACT))) return 1 return 0 @@ -586,8 +604,8 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) if(5) newletter="glor" newphrase+="[newletter]";counter-=1 - return newphrase - + return newphrase + /mob/proc/get_preference(toggleflag) if(!client) return FALSE diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index bccd7990de9..2233c617b6e 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -483,7 +483,7 @@ close_spawn_windows() check_prefs_are_sane() - var/mob/living/carbon/human/new_character = new(loc) + var/mob/living/carbon/human/new_character = new(loc, client.prefs.species) new_character.lastarea = get_area(loc) if(ticker.random_players || appearance_isbanned(new_character)) diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 702afa68f2f..46e5a478c88 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1100,7 +1100,7 @@ name = "IPC Optical Sensor" id = "ipc_optics" build_type = MECHFAB - build_path = /obj/item/organ/internal/optical_sensor + build_path = /obj/item/organ/internal/eyes/optical_sensor materials = list(MAT_METAL=1000, MAT_GLASS=2500) construction_time = 200 category = list("Misc") diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm index a61537f1985..24ae966cd14 100644 --- a/code/modules/surgery/organs/helpers.dm +++ b/code/modules/surgery/organs/helpers.dm @@ -13,7 +13,6 @@ /mob/living/carbon/get_int_organ(typepath) return (locate(typepath) in internal_organs) - /mob/living/carbon/get_organs_zone(zone, var/subzones = 0) var/list/returnorg = list() if(subzones) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 66436d22b64..f2da2d0a949 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -228,10 +228,10 @@ var/list/organ_cache = list() /obj/item/organ/proc/take_damage(amount, var/silent=0) if(tough) return - if(src.status & ORGAN_ROBOT) - src.damage = between(0, src.damage + (amount * 0.8), max_damage) + if(status & ORGAN_ROBOT) + damage = between(0, damage + (amount * 0.8), max_damage) else - src.damage = between(0, src.damage + amount, max_damage) + damage = between(0, damage + amount, max_damage) //only show this if the organ is not robotic if(owner && parent_organ && amount > 0) @@ -241,18 +241,18 @@ var/list/organ_cache = list() /obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc robotic = 2 - src.status &= ~ORGAN_BROKEN - src.status &= ~ORGAN_BLEEDING - src.status &= ~ORGAN_SPLINTED - src.status &= ~ORGAN_CUT_AWAY - src.status &= ~ORGAN_ATTACHABLE - src.status &= ~ORGAN_DESTROYED - src.status |= ORGAN_ROBOT - src.status |= ORGAN_ASSISTED + status &= ~ORGAN_BROKEN + status &= ~ORGAN_BLEEDING + status &= ~ORGAN_SPLINTED + status &= ~ORGAN_CUT_AWAY + status &= ~ORGAN_ATTACHABLE + status &= ~ORGAN_DESTROYED + status |= ORGAN_ROBOT + status |= ORGAN_ASSISTED /obj/item/organ/proc/mechassist() //Used to add things like pacemakers, etc - robotize() - src.status &= ~ORGAN_ROBOT + robotize(1) //Skip the icon/name setting that occurs in robotize to avoid having to reset the icon file. + status &= ~ORGAN_ROBOT robotic = 1 min_bruised_damage = 15 min_broken_damage = 35 @@ -325,7 +325,7 @@ var/list/organ_cache = list() affected.internal_organs |= src if(!target.get_int_organ(src)) target.internal_organs += src - src.loc = target + loc = target if(robotic) status |= ORGAN_ROBOT diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 5dd4d570ee2..79d1ed5faae 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -201,7 +201,7 @@ /obj/item/organ/internal/heart/prepare_eat() var/obj/S = ..() - S.icon_state = "heart-off" + S.icon_state = dead_icon return S /obj/item/organ/internal/heart/cursed @@ -343,16 +343,17 @@ parent_organ = "head" slot = "eyes" var/list/eye_colour = list(0,0,0) + var/list/colourmatrix = null + var/dark_view = 2 //Default dark_view for Humans. + var/weld_proof = null //If set, the eyes will not take damage during welding. eg. IPC optical sensors do not take damage when they weld things while all other eyes will. /obj/item/organ/internal/eyes/proc/update_colour() dna.write_eyes_attributes(src) -/obj/item/organ/internal/eyes/insert(mob/living/carbon/M, special = 0) +/obj/item/organ/internal/eyes/insert(mob/living/carbon/human/M, special = 0) ..() if(istype(M) && eye_colour) - var/mob/living/carbon/human/H = M - // Apply our eye colour to the target. - H.update_body() + M.update_body() //Apply our eye colour to the target. /obj/item/organ/internal/eyes/surgeryize() if(!owner) @@ -362,6 +363,38 @@ owner.SetEyeBlurry(0) owner.SetEyeBlind(0) +/obj/item/organ/internal/robotize(var/icon_bypass) //If icon bypass isn't null, skip the processing here and go straight to the parent call. + if(!icon_bypass && !(status & ORGAN_ROBOT)) //Don't override the icons for the already-mechanical IPC organs. + var/list/states = icon_states('icons/obj/surgery.dmi') //Insensitive to specially-defined icon files for species like the Drask or whomever else. Everyone gets the same robotic heart. + if(slot == "heart" && ("[slot]-prosthetic-on" in states) && ("[slot]-prosthetic-off" in states)) //Give the robotic heart its robotic heart icons if they exist. + var/obj/item/organ/internal/heart/H = src + H.icon = icon('icons/obj/surgery.dmi') + H.icon_base = "[slot]-prosthetic" + H.dead_icon = "[slot]-prosthetic-off" + H.update_icon() + else if("[slot]-prosthetic" in states) //Give the robotic organ its robotic organ icons if they exist. + icon = icon('icons/obj/surgery.dmi') + icon_state = "[slot]-prosthetic" + name = "mechanical [slot]" + ..() //Go apply all the organ flags/robotic statuses. + +/obj/item/organ/internal/eyes/robotize() + colourmatrix = null + dark_view = 2 + ..() //Make sure the organ's got the robotic status indicators before updating the client colour. + owner.update_client_colour(0) //Since both mechassisted and mechanical eyes give dark_view of 2 and full colour vision atm, just having this here is fine as mechassist() will call it anyway. + +/obj/item/organ/internal/mechassist() + ..() //Go back, call robotize(), adjust the robotic status indicators and the organ damage parameters. + var/list/states = icon_states(icon) //Sensitive to specially-defined icon files since the organs are not fully synthetic. + if(slot == "heart" && ("[organ_tag]-assisted-on" in states) && ("[organ_tag]-assisted-off" in states)) //Give the mechassisted heart its mechassisted heart icons if they exist. + var/obj/item/organ/internal/heart/H = src + H.icon_base = "[organ_tag]-assisted" + H.dead_icon = "[organ_tag]-assisted-off" + H.update_icon() + else if("[organ_tag]-assisted" in states) //Give the mechassisted organ its mechassisted organ icons if they exist. + icon_state = "[organ_tag]-assisted" + name = "mechanically assisted [initial(name)]" //Avoid setting the organ's name to something like "mechanically assisted mechanical eyes". /obj/item/organ/internal/liver name = "liver" @@ -372,7 +405,6 @@ var/alcohol_intensity = 1 /obj/item/organ/internal/liver/process() - ..() if(!owner) diff --git a/code/modules/surgery/organs/subtypes/abductor.dm b/code/modules/surgery/organs/subtypes/abductor.dm new file mode 100644 index 00000000000..6fd234bc501 --- /dev/null +++ b/code/modules/surgery/organs/subtypes/abductor.dm @@ -0,0 +1,4 @@ +/obj/item/organ/internal/eyes/abductor + name = "abductor eyeballs" + dark_view = 3 + species = "Abductor" diff --git a/code/modules/surgery/organs/subtypes/diona.dm b/code/modules/surgery/organs/subtypes/diona.dm index a4b0d8fb92b..729a87d2819 100644 --- a/code/modules/surgery/organs/subtypes/diona.dm +++ b/code/modules/surgery/organs/subtypes/diona.dm @@ -116,74 +116,42 @@ /obj/item/organ/diona/process() return -/obj/item/organ/internal/heart/diona +/obj/item/organ/internal/heart/diona // Turns into a nymph instantly, no transplanting possible. name = "neural strata" icon = 'icons/obj/objects.dmi' icon_state = "nymph" - organ_tag = "heart" // Turns into a nymph instantly, no transplanting possible. - origin_tech = "biotech=3" - parent_organ = "chest" - slot = "heart" species = "Diona" -/obj/item/organ/internal/brain/diona +/obj/item/organ/internal/brain/diona // Turns into a nymph instantly, no transplanting possible. name = "gas bladder" - parent_organ = "head" icon = 'icons/obj/objects.dmi' icon_state = "nymph" - organ_tag = "brain" // Turns into a nymph instantly, no transplanting possible. - origin_tech = "biotech=3" - slot = "brain" species = "Diona" -/obj/item/organ/internal/kidneys/diona +/obj/item/organ/internal/kidneys/diona // Turns into a nymph instantly, no transplanting possible. name = "polyp segment" icon = 'icons/obj/objects.dmi' icon_state = "nymph" - organ_tag = "kidneys" // Turns into a nymph instantly, no transplanting possible. - origin_tech = "biotech=3" - parent_organ = "groin" - slot = "kidneys" species = "Diona" -/obj/item/organ/internal/appendix/diona +/obj/item/organ/internal/appendix/diona // Turns into a nymph instantly, no transplanting possible. name = "anchoring ligament" icon = 'icons/obj/objects.dmi' icon_state = "nymph" - organ_tag = "appendix" // Turns into a nymph instantly, no transplanting possible. - origin_tech = "biotech=3" - parent_organ = "groin" - slot = "appendix" species = "Diona" -/obj/item/organ/internal/diona_receptor +/obj/item/organ/internal/eyes/diona // Turns into a nymph instantly, no transplanting possible. name = "receptor node" - organ_tag = "eyes" icon = 'icons/mob/alien.dmi' icon_state = "claw" - origin_tech = "biotech=3" - parent_organ = "head" - slot = "eyes" species = "Diona" -/obj/item/organ/internal/diona_receptor/surgeryize() - if(!owner) - return - owner.CureNearsighted() - owner.CureBlind() - owner.SetEyeBlurry(0) - owner.SetEyeBlind(0) - - //TODO:Make absorb rads on insert -/obj/item/organ/internal/liver/diona +/obj/item/organ/internal/liver/diona // Turns into a nymph instantly, no transplanting possible. name = "nutrient vessel" - parent_organ = "chest" - organ_tag = "liver" icon = 'icons/mob/alien.dmi' icon_state = "claw" - slot = "liver" alcohol_intensity = 0.5 species = "Diona" diff --git a/code/modules/surgery/organs/subtypes/drask.dm b/code/modules/surgery/organs/subtypes/drask.dm index b3b260a28a0..6e1e6662d0a 100644 --- a/code/modules/surgery/organs/subtypes/drask.dm +++ b/code/modules/surgery/organs/subtypes/drask.dm @@ -9,51 +9,29 @@ /obj/item/organ/internal/heart/drask name = "drask heart" icon = 'icons/obj/surgery_drask.dmi' - icon_state = "heart-on" - dead_icon = "heart-off" - organ_tag = "heart" parent_organ = "head" - slot = "heart" species = "Drask" /obj/item/organ/internal/lungs/drask - name = "lungs" icon = 'icons/obj/surgery_drask.dmi' - icon_state = "lungs" - gender = PLURAL - organ_tag = "lungs" - parent_organ = "chest" - slot = "lungs" species = "Drask" /obj/item/organ/internal/liver/drask name = "metabolic strainer" icon = 'icons/obj/surgery_drask.dmi' - icon_state = "kidneys" - gender = PLURAL - organ_tag = "kidneys" - parent_organ = "groin" - slot = "kidneys" alcohol_intensity = 0.8 species = "Drask" /obj/item/organ/internal/brain/drask - name = "brain" icon = 'icons/obj/surgery_drask.dmi' icon_state = "brain2" - organ_tag = "brain" - slot = "brain" mmi_icon = 'icons/obj/surgery_drask.dmi' mmi_icon_state = "mmi_full" species = "Drask" /obj/item/organ/internal/eyes/drask - name = "eyes" + name = "drask eyeballs" icon = 'icons/obj/surgery_drask.dmi' - icon_state = "eyes" - gender = PLURAL - organ_tag = "eyes" - parent_organ = "head" - slot = "eyes" desc = "Drask eyes. They look even stranger disembodied" + dark_view = 5 species = "Drask" diff --git a/code/modules/surgery/organs/subtypes/grey.dm b/code/modules/surgery/organs/subtypes/grey.dm index a47ab801d6f..6c06da373b7 100644 --- a/code/modules/surgery/organs/subtypes/grey.dm +++ b/code/modules/surgery/organs/subtypes/grey.dm @@ -14,3 +14,8 @@ /obj/item/organ/internal/brain/grey/remove(var/mob/living/carbon/M, var/special = 0) . = ..() M.remove_language("Psionic Communication") + +/obj/item/organ/internal/eyes/grey + name = "grey eyeballs" + dark_view = 5 + species = "Grey" diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index 0f402a42e5d..b3bb3f61e07 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -117,37 +117,26 @@ robotize() ..() -/obj/item/organ/internal/optical_sensor +/obj/item/organ/internal/eyes/optical_sensor name = "optical sensor" - organ_tag = "eyes" - parent_organ = "head" icon = 'icons/obj/robot_component.dmi' icon_state = "camera" - slot = "eyes" status = ORGAN_ROBOT species = "Machine" // dead_icon = "camera_broken" + weld_proof = 1 -/obj/item/organ/internal/optical_sensor/New() +/obj/item/organ/internal/eyes/optical_sensor/New() robotize() ..() -/obj/item/organ/internal/optical_sensor/remove(var/mob/living/user,special = 0) +/obj/item/organ/internal/eyes/optical_sensor/remove(var/mob/living/user,special = 0) if(!special) to_chat(owner, "Error 404:Optical Sensors not found.") . = ..() -/obj/item/organ/internal/optical_sensor/surgeryize() - if(!owner) - return - owner.CureNearsighted() - owner.CureBlind() - owner.SetEyeBlurry(0) - owner.SetEyeBlind(0) - - // Used for an MMI or posibrain being installed into a human. /obj/item/organ/internal/brain/mmi_holder name = "brain" @@ -160,7 +149,6 @@ species = "Machine" var/obj/item/device/mmi/stored_mmi - /obj/item/organ/internal/brain/mmi_holder/Destroy() if(stored_mmi) qdel(stored_mmi) diff --git a/code/modules/surgery/organs/subtypes/nucleation.dm b/code/modules/surgery/organs/subtypes/nucleation.dm index d234b666ae3..4223834501d 100644 --- a/code/modules/surgery/organs/subtypes/nucleation.dm +++ b/code/modules/surgery/organs/subtypes/nucleation.dm @@ -26,8 +26,6 @@ icon_state = "crystal-eyes" organ_tag = "luminescent eyes" light_color = "#1C1C00" - parent_organ = "head" - slot = "eyes" species = "Nucleation" /obj/item/organ/internal/eyes/luminescent_crystal/New() @@ -35,8 +33,7 @@ ..() /obj/item/organ/internal/brain/crystal - name = "crystalized brain" + name = "crystallized brain" icon_state = "crystal-brain" - organ_tag = "crystalized brain" - slot = "brain" + organ_tag = "crystallized brain" species = "Nucleation" diff --git a/code/modules/surgery/organs/subtypes/shadow.dm b/code/modules/surgery/organs/subtypes/shadow.dm new file mode 100644 index 00000000000..f81fc54bfb1 --- /dev/null +++ b/code/modules/surgery/organs/subtypes/shadow.dm @@ -0,0 +1,4 @@ +/obj/item/organ/internal/eyes/shadow + name = "dark orbs" + dark_view = 8 + species = "Shadow" diff --git a/code/modules/surgery/organs/subtypes/tajaran.dm b/code/modules/surgery/organs/subtypes/tajaran.dm index e37686a05ca..f65070feb6c 100644 --- a/code/modules/surgery/organs/subtypes/tajaran.dm +++ b/code/modules/surgery/organs/subtypes/tajaran.dm @@ -1,3 +1,12 @@ /obj/item/organ/internal/liver/tajaran alcohol_intensity = 1.4 species = "Tajaran" + +/obj/item/organ/internal/eyes/tajaran /*Most Tajara are surgically augmented at birth for full colour vision, although it cost them their darksight (darksight = 2) unless they choose otherwise in character creation (darksight = 8 but colourblind). + However, this organ define is for unaugmented eyes so cloned Tajara are colourblind but have excellent darksight.*/ + name = "tajaran eyeballs" + species = "Tajaran" + dark_view = 8 + colourmatrix = list(0.4,0.2,0.4,\ + 0.4,0.6,0.0,\ + 0.2,0.2,0.6) //Slightly less richness of hues or saturation of colours than Vulpkanin eyes. Pastel colour scheme, blues slightly green-shifted, reds slightly blue-shifted, greens yellow-shifted. diff --git a/code/modules/surgery/organs/subtypes/unathi.dm b/code/modules/surgery/organs/subtypes/unathi.dm index a769bce7a02..0fb45319ce5 100644 --- a/code/modules/surgery/organs/subtypes/unathi.dm +++ b/code/modules/surgery/organs/subtypes/unathi.dm @@ -1,3 +1,8 @@ /obj/item/organ/internal/liver/unathi alcohol_intensity = 0.8 species = "Unathi" + +/obj/item/organ/internal/eyes/unathi + name = "unathi eyeballs" + dark_view = 3 + species = "Unathi" diff --git a/code/modules/surgery/organs/subtypes/vulpkanin.dm b/code/modules/surgery/organs/subtypes/vulpkanin.dm index ca47ac83ddd..39ee9463425 100644 --- a/code/modules/surgery/organs/subtypes/vulpkanin.dm +++ b/code/modules/surgery/organs/subtypes/vulpkanin.dm @@ -1,3 +1,12 @@ /obj/item/organ/internal/liver/vulpkanin alcohol_intensity = 1.4 species = "Vulpkanin" + +/obj/item/organ/internal/eyes/vulpkanin /*Most Vulpkanin are surgically augmented at birth for full colour vision, although it cost them their darksight (darksight = 2) unless they choose otherwise in character creation (darksight = 8 but colourblind). + However, this organ define is for unaugmented eyes so cloned Vulpkanin are colourblind but have excellent darksight.*/ + name = "vulpkanin eyeballs" + species = "Vulpkanin" + dark_view = 8 + colourmatrix = list(0.5,0.4,0.1,\ + 0.5,0.4,0.1,\ + 0.0,0.2,0.8) //Seeing in tones of blues and yellows, blind to greens. More richness of hue and saturation of colour than Tajara. diff --git a/code/modules/surgery/organs/subtypes/wryn.dm b/code/modules/surgery/organs/subtypes/wryn.dm index f51adb6054e..ee1a12fd1ab 100644 --- a/code/modules/surgery/organs/subtypes/wryn.dm +++ b/code/modules/surgery/organs/subtypes/wryn.dm @@ -7,3 +7,7 @@ parent_organ = "head" slot = "hivenode" species = "Wryn" + +/obj/item/organ/internal/eyes/wryn + dark_view = 3 + species = "Wryn" diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index f86cf41bcd0..73416045624 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -182,7 +182,7 @@ H.custom_pain("The pain in your [affected.name] is living hell!", 1) else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) - to_chat(user, "[tool] was biten by someone! It's too damaged to use!") + to_chat(user, "[tool] was bitten by someone! It's too damaged to use!") return -1 ..() @@ -244,6 +244,8 @@ thing.forceMove(get_turf(target)) else user.put_in_hands(thing) + + target.update_icons() else user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", "You can't extract anything from [target]'s [parse_zone(target_zone)]!") diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 88161a20b5c2e7c031a5ab2afdee7c9e2421fdbc..db3343f1ca25a0e2671e4a37bd38bbfd5c016be1 100644 GIT binary patch literal 31898 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 Date: Fri, 20 Jan 2017 22:36:45 -0500 Subject: [PATCH 007/122] Changes Colourblindness from a Preference to a Disability For Vulpkanin and Tajara, it gives them their species-specific colourblindness but their excellent darksight, too. Otherwise it gives noir vision. You can choose this disability at character creation. It is off by default. You can turn it off via genetics and mutadone. Fixes Cling Transform&Lesser/Greater form & Darksight bugs Transforming to an identity will now, with 100% reliability, give you the exact appearance as that ability bar the body_accessory and the secondary hair/facial hair colours. Same thing with going from lesser form to an identity that was not the one you lesser formed with. Fixes the darksight bug from the last commit, happened 'cause typo. Woops. Eye Transplantation Applies Eye-dependent Genes Transplanting colourblind Vulpkanin/Tajara eyes into a Human gives the Human the dark_view and unique colourblindness of said Vulpkanin eyes. Removing colourblind eyes will take the disability with it, meaning the person will have colour vision/low darksight. --- code/__DEFINES/genetics.dm | 11 ++++-- code/__DEFINES/misc.dm | 10 ++++++ code/_globalvars/genetics.dm | 1 + code/game/dna/dna2.dm | 1 + code/game/dna/dna2_domutcheck.dm | 4 ++- code/game/dna/genes/disabilities.dm | 35 ++++++++++++++++++- code/game/dna/genes/gene.dm | 3 ++ .../gamemodes/changeling/powers/humanform.dm | 15 ++++---- .../gamemodes/changeling/powers/lesserform.dm | 7 +++- .../gamemodes/changeling/powers/transform.dm | 13 ++++--- code/game/gamemodes/setupgame.dm | 3 ++ code/modules/client/preference/preferences.dm | 14 ++++---- .../mob/living/carbon/human/species/monkey.dm | 31 ++++++++++++---- .../living/carbon/human/species/station.dm | 28 +++------------ code/modules/mob/transform_procs.dm | 1 - code/modules/surgery/organs/organ_internal.dm | 14 ++++++++ .../surgery/organs/subtypes/tajaran.dm | 9 ++--- .../surgery/organs/subtypes/vulpkanin.dm | 9 ++--- 18 files changed, 141 insertions(+), 68 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 11393957fc1..822179bf4cd 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -12,6 +12,7 @@ #define DISABILITY_FLAG_DEAF 8 #define DISABILITY_FLAG_BLIND 16 #define DISABILITY_FLAG_MUTE 32 +#define DISABILITY_FLAG_COLOURBLIND 64 /////////////////////////////////////// // MUTATIONS @@ -84,8 +85,9 @@ #define TOURETTES 8 #define NERVOUS 16 #define BLIND 32 -#define MUTE 64 -#define DEAF 128 +#define COLOURBLIND 64 +#define MUTE 128 +#define DEAF 256 //Nutrition levels for humans. No idea where else to put it #define NUTRITION_LEVEL_FAT 600 @@ -113,4 +115,7 @@ #define GENETIC_DAMAGE_STAGE_3 35 #define CLONER_FRESH_CLONE "fresh" -#define CLONER_MATURE_CLONE "mature" \ No newline at end of file +#define CLONER_MATURE_CLONE "mature" + +//Gene properties +#define GENE_EYE_DEPENDENT 1 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 09ea7bf366f..bf19a447232 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -253,6 +253,16 @@ #define MATRIX_GREYSCALE list(0.33, 0.33, 0.33,\ 0.33, 0.33, 0.33,\ 0.33, 0.33, 0.33) + +#define MATRIX_VULP_CBLIND list(0.5,0.4,0.1,\ + 0.5,0.4,0.1,\ + 0.0,0.2,0.8) + +#define MATRIX_TAJ_CBLIND list(0.4,0.2,0.4,\ + 0.4,0.6,0.0,\ + 0.2,0.2,0.6) + + //Gun trigger guards #define TRIGGER_GUARD_ALLOW_ALL -1 #define TRIGGER_GUARD_NONE 0 diff --git a/code/_globalvars/genetics.dm b/code/_globalvars/genetics.dm index 73b2b7304f6..116aa0797cb 100644 --- a/code/_globalvars/genetics.dm +++ b/code/_globalvars/genetics.dm @@ -1,5 +1,6 @@ /////////// var/BLINDBLOCK = 0 +var/COLOURBLINDBLOCK = 0 var/DEAFBLOCK = 0 var/HULKBLOCK = 0 var/TELEBLOCK = 0 diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 82f7ffb2e93..2967dafe5ae 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -65,6 +65,7 @@ var/global/list/assigned_gene_blocks[DNA_SE_LENGTH] var/global/list/assigned_blocks[DNA_SE_LENGTH] var/global/list/datum/dna/gene/dna_genes[0] +var/global/list/datum/dna/gene/eye_dependent_genes[0] var/global/list/good_blocks[0] var/global/list/bad_blocks[0] diff --git a/code/game/dna/dna2_domutcheck.dm b/code/game/dna/dna2_domutcheck.dm index 6175d547d63..61ecb735459 100644 --- a/code/game/dna/dna2_domutcheck.dm +++ b/code/game/dna/dna2_domutcheck.dm @@ -44,7 +44,7 @@ var/mob/living/carbon/human/H = M defaultgenes = H.species.default_genes - if((gene in defaultgenes) && gene_active) + if((gene in defaultgenes) && gene_active && !gene.update) //Unless we want to update them with current information they depend on. return // Prior state @@ -65,3 +65,5 @@ gene.deactivate(M,connected,flags) if(M) M.active_genes -= gene.type + else if(gene.update && gene_active && (gene.type in M.active_genes)) //Update the gene. It should already be in the list of active genes. Updating is only useful if it's active. + gene.activate(M,connected,flags) diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm index 4cfa6f45750..28c9c1c76b6 100644 --- a/code/game/dna/genes/disabilities.dm +++ b/code/game/dna/genes/disabilities.dm @@ -115,6 +115,40 @@ /datum/dna/gene/disability/blindness/New() block=BLINDBLOCK +/datum/dna/gene/disability/colourblindness + name="Colourblindness" + activation_message="Your perception of colour warps and distorts." + deactivation_message ="Your perception of colour returns to normal." + instability = -GENE_INSTABILITY_MODERATE + disability = COLOURBLIND + flags = GENE_EYE_DEPENDENT + update = 1 + +/datum/dna/gene/disability/colourblindness/New() + block=COLOURBLINDBLOCK + +/datum/dna/gene/disability/colourblindness/activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + var/mob/living/carbon/human/H = M + if(istype(M)) + var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) + if(eyes && !eyes.robotic) //To avoid overriding the properties of cybernetic/mechassisted eyes, apply the colour matrix and darksight modifier only if the organ is organic. Robotic/mechassisted eyes currently do this, too, as is necessary. + var/list/cblind_properties = (eyes.colourblind_special) ? eyes.colourblind_special : null //If the mob's species has its own colourblindness parameters, gather them. + eyes.colourmatrix = (cblind_properties && cblind_properties["colour_matrix"]) ? cblind_properties["colour_matrix"] : MATRIX_GREYSCALE //If the mob's species has its own colourblindness colour matrix parameter, use it. + eyes.dark_view = (cblind_properties && cblind_properties["darkview"]) ? cblind_properties["darkview"] : eyes.dark_view //If the mob's species has its own colourblindness dark view parameter, use it. + H.update_client_colour() + +/datum/dna/gene/disability/colourblindness/deactivate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + var/mob/living/carbon/human/H = M + if(istype(M)) + var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) + if(eyes && !eyes.robotic) //To avoid overriding the properties of cybernetic/mechassisted eyes, apply the colour matrix and darksight modifier only if the organ is organic. Robotic/mechassisted eyes currently do this, too, as is necessary. + var/list/cblind_properties = (eyes.colourblind_special) ? eyes.colourblind_special : null //If the mob's species has its own colourblindness parameters, gather them. + eyes.colourmatrix = null //The only time a mob will have this set is if they're colourblind, so it's fine to null this out. + eyes.dark_view = (cblind_properties && cblind_properties["darkview"]) ? initial(eyes.dark_view) : eyes.dark_view //If the mob's species has its own colourblindness dark view parameter, set the mob's dark_view back to normal. + H.update_client_colour() + /datum/dna/gene/disability/deaf name="Deafness" activation_message="It's kinda quiet." @@ -139,7 +173,6 @@ /datum/dna/gene/disability/nearsighted/New() block=GLASSESBLOCK - /datum/dna/gene/disability/lisp name = "Lisp" desc = "I wonder wath thith doeth." diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm index f74d0c7d2a0..63992e16a5f 100644 --- a/code/game/dna/genes/gene.dm +++ b/code/game/dna/genes/gene.dm @@ -26,6 +26,9 @@ // Chance of the gene to cause adverse effects when active var/instability=0 + // Whether the gene needs to be updated regardless of whether the mob has it or not. Useful for colour vision modifiers. + var/update=0 + /* * Is the gene active in this mob's DNA? */ diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm index e587a7db0ab..aa333a865b5 100644 --- a/code/game/gamemodes/changeling/powers/humanform.dm +++ b/code/game/gamemodes/changeling/powers/humanform.dm @@ -24,15 +24,18 @@ if(!user) return 0 to_chat(user, "We transform our appearance.") - user.dna.SetSEState(MONKEYBLOCK,0) - domutcheck(user, null) // Do a pre-mutcheck to cleanly switch from monkey form. - user.dna = chosen_dna + user.dna.SetSEState(MONKEYBLOCK,0,1) + genemutcheck(user,MONKEYBLOCK,null,MUTCHK_FORCED) user.real_name = chosen_dna.real_name - user.flavor_text = "" if(ishuman(user)) - user.set_species() + user.set_species(chosen_dna.species) + user.dna = chosen_dna.Clone() + domutcheck(user, null, MUTCHK_FORCED) + user.flavor_text = "" + user.dna.UpdateSE() + user.dna.UpdateUI() + user.sync_organ_dna(1) user.UpdateAppearance() - domutcheck(user, null) changeling.purchasedpowers -= src //O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/lesserform(null) diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index e5040af282f..7316d635acf 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -21,13 +21,18 @@ to_chat(H, "We cannot perform this ability in this form!") return + var/datum/dna/DNA = changeling.GetDNA(user.dna.real_name) + user.dna = DNA ? DNA.Clone() : user.dna + H.visible_message("[H] transforms!") changeling.geneticdamage = 30 to_chat(H, "Our genes cry out!") var/list/implants = list() //Try to preserve implants. for(var/obj/item/weapon/implant/W in H) implants += W - H.monkeyize() + + user.dna.SetSEState(MONKEYBLOCK,1,1) + genemutcheck(user,MONKEYBLOCK,null,MUTCHK_FORCED) changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null) feedback_add_details("changeling_powers","LF") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index f1ff51a42a2..5ca928c77c7 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -14,14 +14,17 @@ if(!chosen_dna) return - user.dna = chosen_dna.Clone() user.real_name = chosen_dna.real_name - user.flavor_text = "" if(ishuman(user)) - user.set_species() + user.set_species(chosen_dna.species) + user.dna = chosen_dna.Clone() + domutcheck(user, null, MUTCHK_FORCED) //Ensures species that get powers by the species proc handle_dna keep them + user.flavor_text = "" + user.dna.UpdateSE() + user.dna.UpdateUI() + user.sync_organ_dna(1) user.UpdateAppearance() - domutcheck(user, null) - + user.changeling_update_languages(changeling.absorbed_languages) feedback_add_details("changeling_powers","TR") diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index c177e85f870..e55d99c4c9e 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -35,6 +35,7 @@ // Standard muts BLINDBLOCK = getAssignedBlock("BLIND", numsToAssign) + COLOURBLINDBLOCK = getAssignedBlock("COLOURBLIND", numsToAssign) DEAFBLOCK = getAssignedBlock("DEAF", numsToAssign) HULKBLOCK = getAssignedBlock("HULK", numsToAssign, DNA_HARD_BOUNDS, good=1) TELEBLOCK = getAssignedBlock("TELE", numsToAssign, DNA_HARD_BOUNDS, good=1) @@ -115,6 +116,8 @@ if(G.block in blocks_assigned) warning("DNA2: Gene [G.name] trying to use already-assigned block [G.block] (used by [english_list(blocks_assigned[G.block])])") dna_genes.Add(G) + if(G.flags & GENE_EYE_DEPENDENT) + eye_dependent_genes.Add(G) var/list/assignedToBlock[0] if(blocks_assigned[G.block]) assignedToBlock=blocks_assigned[G.block] diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 4ec7516a409..8a2bec6a7ef 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -282,8 +282,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "Species: [species]
" if(species == "Vox") dat += "N2 Tank: [speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
" - else if(species in list("Vulpkanin", "Tajaran")) - dat += "Colour Vision: [speciesprefs ? "Unaugmented" : "Surgically Corrected"]
" dat += "Secondary Language: [language]
" dat += "Blood Type: [b_type]
" if(species in list("Human", "Drask", "Vox")) @@ -817,6 +815,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts HTML += ShowDisabilityState(user,DISABILITY_FLAG_EPILEPTIC,"Seizures") HTML += ShowDisabilityState(user,DISABILITY_FLAG_DEAF,"Deaf") HTML += ShowDisabilityState(user,DISABILITY_FLAG_BLIND,"Blind") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_COLOURBLIND,"Colourblind") HTML += ShowDisabilityState(user,DISABILITY_FLAG_MUTE,"Mute") @@ -1340,12 +1339,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts organ_data = list() rlimb_data = list() if("speciesprefs") - if(species == "Vox") //oldvox code - speciesprefs = !speciesprefs //Starts 0, so if someone clicks the button up top there, this won't be 0 anymore. If they click it again, it'll go back to 0. - else if(species in list("Vulpkanin", "Tajaran")) //Species that can be colourblind. - var/list/vision_options = list("Surgically Corrected", "Unaugmented") //Surgically corrected eyes (default option) see in full colour but have 2 darksight. Unaugmented eyes are colourblind but have 8 darksight. - speciesprefs = input("Please select your vision preference. \nOverridden by mech. assisted or mechanical eyes. \nSurgically Corrected: Full colour, low darksight. \n Unaugmented: Colourblind, full darksight.", "Character Generation", 0) in vision_options - speciesprefs = (speciesprefs != "Surgically Corrected") //Ensure the default option (surgically corrected) returns 0. I would've set up the vision_options list such that Surgically Corrected = 0, but input() didn't care for it. + speciesprefs = !speciesprefs //Starts 0, so if someone clicks the button up top there, this won't be 0 anymore. If they click it again, it'll go back to 0. if("language") // var/languages_available var/list/new_languages = list("None") @@ -2173,6 +2167,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.dna.SetSEState(BLINDBLOCK,1,1) character.disabilities |= BLIND + if(disabilities & DISABILITY_FLAG_COLOURBLIND) + character.dna.SetSEState(COLOURBLINDBLOCK,1,1) + character.disabilities |= COLOURBLIND + if(disabilities & DISABILITY_FLAG_MUTE) character.dna.SetSEState(MUTEBLOCK,1,1) character.disabilities |= MUTE diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 34f4e16bfdf..0108d693c18 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -54,8 +54,9 @@ ..() /datum/species/monkey/handle_dna(var/mob/living/carbon/human/H) - H.dna.SetSEState(MONKEYBLOCK,1) - genemutcheck(H, MONKEYBLOCK) + if(!is_type_in_list(/datum/dna/gene/monkey, H.active_genes)) //Only activate the monkey gene if it isn't already. + H.dna.SetSEState(MONKEYBLOCK,1,1) + genemutcheck(H,MONKEYBLOCK,null,MUTCHK_FORCED) /datum/species/monkey/handle_can_equip(obj/item/I, slot, disable_warning = 0, mob/living/carbon/human/user) switch(slot) @@ -106,7 +107,6 @@ base_color = "#000000" tail = "farwatail" reagent_tag = PROCESS_ORG - has_organ = list( "heart" = /obj/item/organ/internal/heart, "lungs" = /obj/item/organ/internal/lungs, @@ -114,8 +114,18 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes/tajaran //Tajara monkey-forms are uniquely colourblind and have excellent darksight. + "eyes" = /obj/item/organ/internal/eyes/tajaran //Tajara monkey-forms are uniquely colourblind and have excellent darksight, which is why they need the same organ as the Tajara. ) + default_genes = list(COLOURBLIND) + +/datum/species/monkey/tajaran/handle_dna(var/mob/living/carbon/C, var/remove) + if(!remove) + C.dna.SetSEState(COLOURBLINDBLOCK,1,1) + genemutcheck(C,COLOURBLINDBLOCK,null,MUTCHK_FORCED) + else + C.dna.SetSEState(COLOURBLINDBLOCK,0,1) + genemutcheck(C,COLOURBLINDBLOCK,null,MUTCHK_FORCED) + ..() /datum/species/monkey/vulpkanin @@ -131,7 +141,6 @@ base_color = "#000000" tail = "wolpintail" reagent_tag = PROCESS_ORG - has_organ = list( "heart" = /obj/item/organ/internal/heart, "lungs" = /obj/item/organ/internal/lungs, @@ -139,8 +148,18 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes/vulpkanin //Vulpkanin monkey-forms are uniquely colourblind and have excellent darksight. + "eyes" = /obj/item/organ/internal/eyes/vulpkanin //Vulpkanin monkey-forms are uniquely colourblind and have excellent darksight, which is why they need the same organ as the Vulpkanin. ) + default_genes = list(COLOURBLIND) + +/datum/species/monkey/vulpkanin/handle_dna(var/mob/living/carbon/C, var/remove) + if(!remove) + C.dna.SetSEState(COLOURBLINDBLOCK,1,1) + genemutcheck(C,COLOURBLINDBLOCK,null,MUTCHK_FORCED) + else + C.dna.SetSEState(COLOURBLINDBLOCK,0,1) + genemutcheck(C,COLOURBLINDBLOCK,null,MUTCHK_FORCED) + ..() /datum/species/monkey/skrell diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 4ae52431e9a..f7635e2a9c4 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -125,8 +125,8 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes/tajaran /*Most Tajara are surgically augmented at birth for full colour vision, although it cost them their darksight (darksight = 2) unless they choose otherwise in character creation (darksight = 8 but colourblind). - However, this organ define is for unaugmented eyes so cloned Tajara are colourblind but have excellent darksight.*/ + "eyes" = /obj/item/organ/internal/eyes/tajaran /*Most Tajara see in full colour as a result of genetic augmentation, although it cost them their darksight (darksight = 2) + unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/ ) allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/chick, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, @@ -138,15 +138,6 @@ "is twisting their own neck!", "is holding their breath!") -/datum/species/tajaran/equip(var/mob/living/carbon/human/H) //Handles colourblindness preferences. Should only happen if the client is in a mob otherwise it won't work. - var/sight_pref = H.client.prefs.speciesprefs - if(!sight_pref) - var/obj/item/organ/internal/eyes/tajaran/tajeyes = H.get_int_organ(/obj/item/organ/internal/eyes) - if(tajeyes && !tajeyes.robotic) //To avoid overriding the properties of cybernetic/mechassisted eyes, apply the colour matrix and darksight modifier only if the organ is organic. Robotic/mechassisted eyes currently do this, too, as is necessary. - tajeyes.colourmatrix = null //For individuals who recieved the modification, they lose much of their darksight and gain full colour vision. - tajeyes.dark_view = 2 //If they didn't, they would have their unique colour-vision and full darksight. See code\modules\surgery\organs\subtypes\tajaran.dm - H.update_client_colour(0) - /datum/species/tajaran/handle_death(var/mob/living/carbon/human/H) H.stop_tail_wagging(1) @@ -184,8 +175,8 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes/vulpkanin /*Most Vulpkanin are surgically augmented at birth for full colour vision, although it cost them their darksight (darksight = 2) unless they choose otherwise in character creation (darksight = 8 but colourblind). - However, this organ define is for unaugmented eyes so cloned Vulpkanin are colourblind but have excellent darksight.*/ + "eyes" = /obj/item/organ/internal/eyes/vulpkanin /*Most Vulpkanin see in full colour as a result of genetic augmentation, although it cost them their darksight (darksight = 2) + unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/ ) allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, @@ -197,15 +188,6 @@ "is twisting their own neck!", "is holding their breath!") -/datum/species/vulpkanin/equip(var/mob/living/carbon/human/H) //Handles colourblindness preferences. Should only happen if the client is in a mob otherwise it won't work. - var/sight_pref = H.client.prefs.speciesprefs - if(!sight_pref) - var/obj/item/organ/internal/eyes/vulpkanin/vulpeyes = H.get_int_organ(/obj/item/organ/internal/eyes) - if(vulpeyes && !vulpeyes.robotic) //To avoid overriding the properties of cybernetic/mechassisted eyes, apply the colour matrix and darksight modifier only if the organ is organic. Robotic/mechassisted eyes currently do this, too, as is necessary. - vulpeyes.colourmatrix = null //For individuals who recieved the modification, they lose much of their darksight and gain full colour vision. - vulpeyes.dark_view = 2 //If they didn't, they would have their unique colour-vision and full darksight. See code\modules\surgery\organs\subtypes\vulpkanin.dm - H.update_client_colour(0) - /datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H) H.stop_tail_wagging(1) @@ -732,11 +714,9 @@ /datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove) if(!remove) C.dna.SetSEState(REMOTETALKBLOCK,1,1) - C.mutations |= REMOTE_TALK genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) else C.dna.SetSEState(REMOTETALKBLOCK,0,1) - C.mutations -= REMOTE_TALK genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) ..() diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 8adc505102b..a484324560d 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -1,7 +1,6 @@ /mob/living/carbon/human/proc/monkeyize() var/mob/H = src H.dna.SetSEState(MONKEYBLOCK,1) - domutcheck(H, null) /mob/new_player/AIize() spawning = 1 diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 79d1ed5faae..514d836bfc3 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -344,6 +344,7 @@ slot = "eyes" var/list/eye_colour = list(0,0,0) var/list/colourmatrix = null + var/list/colourblind_special = list("colour_matrix" = null, "darkview" = null) //Special colourblindness parameters. var/dark_view = 2 //Default dark_view for Humans. var/weld_proof = null //If set, the eyes will not take damage during welding. eg. IPC optical sensors do not take damage when they weld things while all other eyes will. @@ -355,6 +356,19 @@ if(istype(M) && eye_colour) M.update_body() //Apply our eye colour to the target. + for(var/datum/dna/gene/G in eye_dependent_genes) //Handle the application of the eye-dependent genes from the eye to the new host mob if the genes are active. + if(dna && dna.GetSEState(G.block)) //If the eye-dependent gene in the eye's DNA is active, activate it on the human and genemutcheck to apply its effects. + M.dna.SetSEState(G.block,1,1) + genemutcheck(M,G.block,null,MUTCHK_FORCED) + +/obj/item/organ/internal/eyes/remove(mob/living/carbon/human/M, special = 0) + for(var/datum/dna/gene/G in eye_dependent_genes) //Handle the removal of the eye-dependent genes from the eye to the new host mob if the genes are active. + if(G.type in M.active_genes) //If there's an active eye-dependent gene on the mob, turn it off. + dna = M.dna.Clone() //Preserve the eye-dependent genes by ensuring the genome on the eyes remains intact. + M.dna.SetSEState(G.block,0,1) + genemutcheck(M,G.block,null,MUTCHK_FORCED) + .=..() + /obj/item/organ/internal/eyes/surgeryize() if(!owner) return diff --git a/code/modules/surgery/organs/subtypes/tajaran.dm b/code/modules/surgery/organs/subtypes/tajaran.dm index f65070feb6c..7feacd4fbc4 100644 --- a/code/modules/surgery/organs/subtypes/tajaran.dm +++ b/code/modules/surgery/organs/subtypes/tajaran.dm @@ -2,11 +2,8 @@ alcohol_intensity = 1.4 species = "Tajaran" -/obj/item/organ/internal/eyes/tajaran /*Most Tajara are surgically augmented at birth for full colour vision, although it cost them their darksight (darksight = 2) unless they choose otherwise in character creation (darksight = 8 but colourblind). - However, this organ define is for unaugmented eyes so cloned Tajara are colourblind but have excellent darksight.*/ +/obj/item/organ/internal/eyes/tajaran /*Most Tajara see in full colour as a result of genetic augmentation, although it cost them their darksight (darksight = 2) + unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/ name = "tajaran eyeballs" species = "Tajaran" - dark_view = 8 - colourmatrix = list(0.4,0.2,0.4,\ - 0.4,0.6,0.0,\ - 0.2,0.2,0.6) //Slightly less richness of hues or saturation of colours than Vulpkanin eyes. Pastel colour scheme, blues slightly green-shifted, reds slightly blue-shifted, greens yellow-shifted. + colourblind_special = list("colour_matrix" = MATRIX_TAJ_CBLIND, "darkview" = 8) //The colour matrix and darksight parameters that the mob will recieve when they get the disability. diff --git a/code/modules/surgery/organs/subtypes/vulpkanin.dm b/code/modules/surgery/organs/subtypes/vulpkanin.dm index 39ee9463425..27172e50215 100644 --- a/code/modules/surgery/organs/subtypes/vulpkanin.dm +++ b/code/modules/surgery/organs/subtypes/vulpkanin.dm @@ -2,11 +2,8 @@ alcohol_intensity = 1.4 species = "Vulpkanin" -/obj/item/organ/internal/eyes/vulpkanin /*Most Vulpkanin are surgically augmented at birth for full colour vision, although it cost them their darksight (darksight = 2) unless they choose otherwise in character creation (darksight = 8 but colourblind). - However, this organ define is for unaugmented eyes so cloned Vulpkanin are colourblind but have excellent darksight.*/ +/obj/item/organ/internal/eyes/vulpkanin /*Most Vulpkanin see in full colour as a result of genetic augmentation, although it cost them their darksight (darksight = 2) + unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/ name = "vulpkanin eyeballs" species = "Vulpkanin" - dark_view = 8 - colourmatrix = list(0.5,0.4,0.1,\ - 0.5,0.4,0.1,\ - 0.0,0.2,0.8) //Seeing in tones of blues and yellows, blind to greens. More richness of hue and saturation of colour than Tajara. + colourblind_special = list("colour_matrix" = MATRIX_VULP_CBLIND, "darkview" = 8) //The colour matrix and darksight parameters that the mob will recieve when they get the disability. From d73413b04662b6e0f2a0d0622943a865a734c351 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Mon, 23 Jan 2017 05:51:46 -0500 Subject: [PATCH 008/122] Uses the Disabilities system more correctly Allows eyes to track eye-dependent disabilities when removed from the mob. Farwas and Wolpins are now incurably colourblind (non-genetics based), so going lesser-form and back won't wipe your colourblindness. Eyes being straight-up deleted (as per how set_species() handles setting up the organs required for the species we're changing to) no longer wipes colourblindness. Now with more helper procs, less unnecessary commenting, random changes and other cleanliness-related tweaks. --- code/__DEFINES/genetics.dm | 3 -- code/game/dna/dna2.dm | 1 - code/game/dna/dna2_domutcheck.dm | 4 +-- code/game/dna/genes/disabilities.dm | 32 +++++-------------- code/game/dna/genes/gene.dm | 3 -- .../gamemodes/changeling/powers/humanform.dm | 8 ++--- .../gamemodes/changeling/powers/lesserform.dm | 5 +-- .../gamemodes/changeling/powers/transform.dm | 2 +- code/game/gamemodes/setupgame.dm | 2 -- code/game/machinery/adv_med.dm | 3 ++ code/game/objects/items/devices/flashlight.dm | 17 +++++----- code/modules/client/preference/preferences.dm | 5 +-- .../mob/living/carbon/human/species/monkey.dm | 24 ++------------ .../living/carbon/human/species/species.dm | 4 +-- code/modules/mob/mob_helpers.dm | 9 +++--- code/modules/mob/new_player/new_player.dm | 2 +- code/modules/mob/transform_procs.dm | 1 + code/modules/surgery/organs/helpers.dm | 1 + code/modules/surgery/organs/organ_internal.dm | 32 ++++++++++++------- .../surgery/organs/subtypes/tajaran.dm | 9 +++++- .../surgery/organs/subtypes/vulpkanin.dm | 9 +++++- nano/templates/adv_med.tmpl | 7 ++-- 22 files changed, 84 insertions(+), 99 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 822179bf4cd..8e7be007d12 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -116,6 +116,3 @@ #define CLONER_FRESH_CLONE "fresh" #define CLONER_MATURE_CLONE "mature" - -//Gene properties -#define GENE_EYE_DEPENDENT 1 diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 2967dafe5ae..82f7ffb2e93 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -65,7 +65,6 @@ var/global/list/assigned_gene_blocks[DNA_SE_LENGTH] var/global/list/assigned_blocks[DNA_SE_LENGTH] var/global/list/datum/dna/gene/dna_genes[0] -var/global/list/datum/dna/gene/eye_dependent_genes[0] var/global/list/good_blocks[0] var/global/list/bad_blocks[0] diff --git a/code/game/dna/dna2_domutcheck.dm b/code/game/dna/dna2_domutcheck.dm index 61ecb735459..6175d547d63 100644 --- a/code/game/dna/dna2_domutcheck.dm +++ b/code/game/dna/dna2_domutcheck.dm @@ -44,7 +44,7 @@ var/mob/living/carbon/human/H = M defaultgenes = H.species.default_genes - if((gene in defaultgenes) && gene_active && !gene.update) //Unless we want to update them with current information they depend on. + if((gene in defaultgenes) && gene_active) return // Prior state @@ -65,5 +65,3 @@ gene.deactivate(M,connected,flags) if(M) M.active_genes -= gene.type - else if(gene.update && gene_active && (gene.type in M.active_genes)) //Update the gene. It should already be in the list of active genes. Updating is only useful if it's active. - gene.activate(M,connected,flags) diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm index 28c9c1c76b6..aaea991d5cf 100644 --- a/code/game/dna/genes/disabilities.dm +++ b/code/game/dna/genes/disabilities.dm @@ -116,38 +116,22 @@ block=BLINDBLOCK /datum/dna/gene/disability/colourblindness - name="Colourblindness" - activation_message="Your perception of colour warps and distorts." - deactivation_message ="Your perception of colour returns to normal." + name = "Colourblindness" + activation_message = "You feel a peculiar prickling in your eyes while your perception of colour changes." + deactivation_message ="Your eyes tingle unsettlingly, though everything seems to become alot more colourful." instability = -GENE_INSTABILITY_MODERATE disability = COLOURBLIND - flags = GENE_EYE_DEPENDENT - update = 1 /datum/dna/gene/disability/colourblindness/New() block=COLOURBLINDBLOCK /datum/dna/gene/disability/colourblindness/activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - var/mob/living/carbon/human/H = M - if(istype(M)) - var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) - if(eyes && !eyes.robotic) //To avoid overriding the properties of cybernetic/mechassisted eyes, apply the colour matrix and darksight modifier only if the organ is organic. Robotic/mechassisted eyes currently do this, too, as is necessary. - var/list/cblind_properties = (eyes.colourblind_special) ? eyes.colourblind_special : null //If the mob's species has its own colourblindness parameters, gather them. - eyes.colourmatrix = (cblind_properties && cblind_properties["colour_matrix"]) ? cblind_properties["colour_matrix"] : MATRIX_GREYSCALE //If the mob's species has its own colourblindness colour matrix parameter, use it. - eyes.dark_view = (cblind_properties && cblind_properties["darkview"]) ? cblind_properties["darkview"] : eyes.dark_view //If the mob's species has its own colourblindness dark view parameter, use it. - H.update_client_colour() + ..() + M.update_client_colour() //Handle the activation of the colourblindness on the mob. /datum/dna/gene/disability/colourblindness/deactivate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - var/mob/living/carbon/human/H = M - if(istype(M)) - var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) - if(eyes && !eyes.robotic) //To avoid overriding the properties of cybernetic/mechassisted eyes, apply the colour matrix and darksight modifier only if the organ is organic. Robotic/mechassisted eyes currently do this, too, as is necessary. - var/list/cblind_properties = (eyes.colourblind_special) ? eyes.colourblind_special : null //If the mob's species has its own colourblindness parameters, gather them. - eyes.colourmatrix = null //The only time a mob will have this set is if they're colourblind, so it's fine to null this out. - eyes.dark_view = (cblind_properties && cblind_properties["darkview"]) ? initial(eyes.dark_view) : eyes.dark_view //If the mob's species has its own colourblindness dark view parameter, set the mob's dark_view back to normal. - H.update_client_colour() + ..() + M.update_client_colour() //Handle the deactivation of the colourblindness on the mob. /datum/dna/gene/disability/deaf name="Deafness" @@ -160,7 +144,7 @@ block=DEAFBLOCK /datum/dna/gene/disability/deaf/activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) + ..() M.EarDeaf(1) /datum/dna/gene/disability/nearsighted diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm index 63992e16a5f..f74d0c7d2a0 100644 --- a/code/game/dna/genes/gene.dm +++ b/code/game/dna/genes/gene.dm @@ -26,9 +26,6 @@ // Chance of the gene to cause adverse effects when active var/instability=0 - // Whether the gene needs to be updated regardless of whether the mob has it or not. Useful for colour vision modifiers. - var/update=0 - /* * Is the gene active in this mob's DNA? */ diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm index aa333a865b5..fb3012cd274 100644 --- a/code/game/gamemodes/changeling/powers/humanform.dm +++ b/code/game/gamemodes/changeling/powers/humanform.dm @@ -26,11 +26,11 @@ to_chat(user, "We transform our appearance.") user.dna.SetSEState(MONKEYBLOCK,0,1) genemutcheck(user,MONKEYBLOCK,null,MUTCHK_FORCED) - user.real_name = chosen_dna.real_name - if(ishuman(user)) - user.set_species(chosen_dna.species) user.dna = chosen_dna.Clone() - domutcheck(user, null, MUTCHK_FORCED) + user.real_name = chosen_dna.real_name + if(istype(user)) + user.set_species(chosen_dna.species) + domutcheck(user,null,MUTCHK_FORCED) user.flavor_text = "" user.dna.UpdateSE() user.dna.UpdateUI() diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index 7316d635acf..9901768f1e5 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -23,16 +23,13 @@ var/datum/dna/DNA = changeling.GetDNA(user.dna.real_name) user.dna = DNA ? DNA.Clone() : user.dna - H.visible_message("[H] transforms!") changeling.geneticdamage = 30 to_chat(H, "Our genes cry out!") var/list/implants = list() //Try to preserve implants. for(var/obj/item/weapon/implant/W in H) implants += W - - user.dna.SetSEState(MONKEYBLOCK,1,1) - genemutcheck(user,MONKEYBLOCK,null,MUTCHK_FORCED) + H.monkeyize() changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null) feedback_add_details("changeling_powers","LF") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index 5ca928c77c7..b7c8abefd1d 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -14,10 +14,10 @@ if(!chosen_dna) return + user.dna = chosen_dna.Clone() user.real_name = chosen_dna.real_name if(ishuman(user)) user.set_species(chosen_dna.species) - user.dna = chosen_dna.Clone() domutcheck(user, null, MUTCHK_FORCED) //Ensures species that get powers by the species proc handle_dna keep them user.flavor_text = "" user.dna.UpdateSE() diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index e55d99c4c9e..c785c511304 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -116,8 +116,6 @@ if(G.block in blocks_assigned) warning("DNA2: Gene [G.name] trying to use already-assigned block [G.block] (used by [english_list(blocks_assigned[G.block])])") dna_genes.Add(G) - if(G.flags & GENE_EYE_DEPENDENT) - eye_dependent_genes.Add(G) var/list/assignedToBlock[0] if(blocks_assigned[G.block]) assignedToBlock=blocks_assigned[G.block] diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index f7b793b6033..4f9e357cd61 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -453,6 +453,7 @@ occupantData["intOrgan"] = intOrganData occupantData["blind"] = (H.disabilities & BLIND) + occupantData["colourblind"] = (H.disabilities & COLOURBLIND) occupantData["nearsighted"] = (H.disabilities & NEARSIGHTED) data["occupant"] = occupantData @@ -639,6 +640,8 @@ dat += "" if(occupant.disabilities & BLIND) dat += "Cataracts detected.
" + if(occupant.disabilities & COLOURBLIND) + dat += "Photoreceptor abnormalities detected.
" if(occupant.disabilities & NEARSIGHTED) dat += "Retinal misalignment detected.
" else diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 7806982a627..d8f17ac4335 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -54,8 +54,8 @@ return var/mob/living/carbon/human/H = M //mob has protective eyewear - if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES))) - to_chat(user, "You're going to need to remove that [(H.head && H.head.flags & HEADCOVERSEYES) ? "helmet" : (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) ? "mask": "glasses"] first.") + if(istype(H) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES))) + to_chat(user, "You're going to need to remove that [(H.head && H.head.flags & HEADCOVERSEYES) ? "helmet" : (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) ? "mask" : "glasses"] first.") return if(M == user) //they're using it on themselves @@ -70,12 +70,13 @@ user.visible_message("[user] directs [src] to [M]'s eyes.", \ "You direct [src] to [M]'s eyes.") - if(istype(M, /mob/living/carbon/human)) //robots and aliens are unaffected - if(M.stat == DEAD || M.disabilities & BLIND) //mob is dead or fully blind - to_chat(user, "[M] pupils does not react to the light!") - else if(XRAY in M.mutations) //mob has X-RAY vision - to_chat(user, "[M] pupils give an eerie glow!") - else //they're okay! + if(istype(H)) //robots and aliens are unaffected + var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) + if(M.stat == DEAD || !eyes || M.disabilities & BLIND) //mob is dead or fully blind + to_chat(user, "[M]'s pupils are unresponsive to the light!") + else if((XRAY in M.mutations) || (eyes.colourblind_darkview && eyes.colourblind_darkview == eyes.dark_view)) //The mob's either got the X-RAY vision or has a tapetum lucidum (extreme nightvision). + to_chat(user, "[M]'s pupils glow eerily!") + else //they're okay! if(M.flash_eyes(visual = 1)) to_chat(user, "[M]'s pupils narrow.") else diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 8a2bec6a7ef..fda5f7bedfb 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -2020,6 +2020,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts return 1 /datum/preferences/proc/copy_to(mob/living/carbon/human/character) + var/datum/species/S = all_species[species] + character.change_species(species) // Yell at me if this causes everything to melt if(be_random_name) real_name = random_name(gender,species) @@ -2169,13 +2171,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(disabilities & DISABILITY_FLAG_COLOURBLIND) character.dna.SetSEState(COLOURBLINDBLOCK,1,1) - character.disabilities |= COLOURBLIND if(disabilities & DISABILITY_FLAG_MUTE) character.dna.SetSEState(MUTEBLOCK,1,1) character.disabilities |= MUTE - character.species.handle_dna(character) + S.handle_dna(character) if(character.dna.dirtySE) character.dna.UpdateSE() diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 0108d693c18..c4c705829b4 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -114,18 +114,8 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes/tajaran //Tajara monkey-forms are uniquely colourblind and have excellent darksight, which is why they need the same organ as the Tajara. + "eyes" = /obj/item/organ/internal/eyes/tajaran/farwa //Tajara monkey-forms are uniquely colourblind and have excellent darksight, which is why they need a subtype of their greater-form's organ.. ) - default_genes = list(COLOURBLIND) - -/datum/species/monkey/tajaran/handle_dna(var/mob/living/carbon/C, var/remove) - if(!remove) - C.dna.SetSEState(COLOURBLINDBLOCK,1,1) - genemutcheck(C,COLOURBLINDBLOCK,null,MUTCHK_FORCED) - else - C.dna.SetSEState(COLOURBLINDBLOCK,0,1) - genemutcheck(C,COLOURBLINDBLOCK,null,MUTCHK_FORCED) - ..() /datum/species/monkey/vulpkanin @@ -148,18 +138,8 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, - "eyes" = /obj/item/organ/internal/eyes/vulpkanin //Vulpkanin monkey-forms are uniquely colourblind and have excellent darksight, which is why they need the same organ as the Vulpkanin. + "eyes" = /obj/item/organ/internal/eyes/vulpkanin/wolpin //Vulpkanin monkey-forms are uniquely colourblind and have excellent darksight, which is why they need a subtype of their greater-form's organ.. ) - default_genes = list(COLOURBLIND) - -/datum/species/monkey/vulpkanin/handle_dna(var/mob/living/carbon/C, var/remove) - if(!remove) - C.dna.SetSEState(COLOURBLINDBLOCK,1,1) - genemutcheck(C,COLOURBLINDBLOCK,null,MUTCHK_FORCED) - else - C.dna.SetSEState(COLOURBLINDBLOCK,0,1) - genemutcheck(C,COLOURBLINDBLOCK,null,MUTCHK_FORCED) - ..() /datum/species/monkey/skrell diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 73c557c9c58..7ac64189ce8 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -588,8 +588,8 @@ It'll return null if the organ doesn't correspond, so include null checks when u /datum/species/proc/get_resultant_darksight(mob/living/carbon/human/H) //Returns default value of 2 if the mob doesn't have eyes, otherwise it grabs the eyes darksight. var/resultant_darksight = 2 var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) - if(eyes && eyes.dark_view) - resultant_darksight = eyes.dark_view + if(eyes) + resultant_darksight = eyes.get_dark_view() return resultant_darksight /datum/species/proc/update_sight(mob/living/carbon/human/H) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index e07fb765ce7..93c79aeebfc 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -25,20 +25,21 @@ /mob/proc/get_screen_colour() /mob/proc/update_client_colour(var/time = 10) //Update the mob's client.color with an animation the specified time in length. - if(!client) + if(!client) //No client_colour without client. If the player logs back in they'll be back through here anyway. return - client.colour_transition(get_screen_colour(), time = time) + client.colour_transition(get_screen_colour(), time = time) //Get the colour matrix we're going to transition to depending on relevance (magic glasses first, eyes second). /mob/living/carbon/human/get_screen_colour() //Fetch the colour matrix from wherever (e.g. eyes) so it can be compared to client.color. . = ..() if(.) return . + var/obj/item/clothing/glasses/worn_glasses = glasses var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) if(istype(worn_glasses) && worn_glasses.color_view) //Check to see if they got those magic glasses and they're augmenting the colour of what the wearer sees. If they're not, color_view should be null. return worn_glasses.color_view - else if(eyes && eyes.colourmatrix) //If they're not, check to see if their eyes got one of them there colour matrices. - return eyes.colourmatrix + else if(eyes) //If they're not, check to see if their eyes got one of them there colour matrices. Will be null if eyes are robotic/the mob isn't colourblind and they have no default colour matrix. + return eyes.get_colourmatrix() /proc/isloyal(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them for(var/obj/item/weapon/implant/loyalty/L in A) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 2233c617b6e..bccd7990de9 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -483,7 +483,7 @@ close_spawn_windows() check_prefs_are_sane() - var/mob/living/carbon/human/new_character = new(loc, client.prefs.species) + var/mob/living/carbon/human/new_character = new(loc) new_character.lastarea = get_area(loc) if(ticker.random_players || appearance_isbanned(new_character)) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index a484324560d..8adc505102b 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -1,6 +1,7 @@ /mob/living/carbon/human/proc/monkeyize() var/mob/H = src H.dna.SetSEState(MONKEYBLOCK,1) + domutcheck(H, null) /mob/new_player/AIize() spawning = 1 diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm index 24ae966cd14..a61537f1985 100644 --- a/code/modules/surgery/organs/helpers.dm +++ b/code/modules/surgery/organs/helpers.dm @@ -13,6 +13,7 @@ /mob/living/carbon/get_int_organ(typepath) return (locate(typepath) in internal_organs) + /mob/living/carbon/get_organs_zone(zone, var/subzones = 0) var/list/returnorg = list() if(subzones) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 514d836bfc3..c6a81e04481 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -344,30 +344,40 @@ slot = "eyes" var/list/eye_colour = list(0,0,0) var/list/colourmatrix = null - var/list/colourblind_special = list("colour_matrix" = null, "darkview" = null) //Special colourblindness parameters. + var/list/colourblind_matrix = null //Special colourblindness parameters. + var/colourblind_darkview = null + var/dependent_disabilities = null //Gets set by eye-dependent disabilities such as colourblindness so the eyes can transfer the disability during transplantation. var/dark_view = 2 //Default dark_view for Humans. var/weld_proof = null //If set, the eyes will not take damage during welding. eg. IPC optical sensors do not take damage when they weld things while all other eyes will. /obj/item/organ/internal/eyes/proc/update_colour() dna.write_eyes_attributes(src) +/obj/item/organ/internal/eyes/proc/get_colourmatrix() //Returns a colour matrix if the eyes are organic. + return !robotic && owner.disabilities & COLOURBLIND ? (colourblind_matrix ? colourblind_matrix : MATRIX_GREYSCALE) : colourmatrix //Returns special colourmatrix if colourblind and it exists and greyscale if it doesn't, otherwise returns current velue. + +/obj/item/organ/internal/eyes/proc/get_dark_view() //Returns dark_view (if the eyes are organic) for see_invisible handling in species.dm to be autoprocessed by life(). + return !robotic && colourblind_darkview && owner.disabilities & COLOURBLIND ? colourblind_darkview : dark_view //Returns special darkview value if colourblind and it exists, otherwise returns current velue. + /obj/item/organ/internal/eyes/insert(mob/living/carbon/human/M, special = 0) ..() if(istype(M) && eye_colour) M.update_body() //Apply our eye colour to the target. - for(var/datum/dna/gene/G in eye_dependent_genes) //Handle the application of the eye-dependent genes from the eye to the new host mob if the genes are active. - if(dna && dna.GetSEState(G.block)) //If the eye-dependent gene in the eye's DNA is active, activate it on the human and genemutcheck to apply its effects. - M.dna.SetSEState(G.block,1,1) - genemutcheck(M,G.block,null,MUTCHK_FORCED) + if(!(M.disabilities & COLOURBLIND) && (dependent_disabilities & COLOURBLIND)) //If the eyes are colourblind and we're not, carry over the gene. + dependent_disabilities &= ~COLOURBLIND + M.dna.SetSEState(COLOURBLINDBLOCK,1,1) + genemutcheck(M,COLOURBLINDBLOCK,null,MUTCHK_FORCED) + else + M.update_client_colour() //If we're here, that means the mob acquired the colourblindness gene while they didn't have eyes. Better handle it. /obj/item/organ/internal/eyes/remove(mob/living/carbon/human/M, special = 0) - for(var/datum/dna/gene/G in eye_dependent_genes) //Handle the removal of the eye-dependent genes from the eye to the new host mob if the genes are active. - if(G.type in M.active_genes) //If there's an active eye-dependent gene on the mob, turn it off. - dna = M.dna.Clone() //Preserve the eye-dependent genes by ensuring the genome on the eyes remains intact. - M.dna.SetSEState(G.block,0,1) - genemutcheck(M,G.block,null,MUTCHK_FORCED) - .=..() + if(!special && (M.disabilities & COLOURBLIND)) //If special is set, that means these eyes are getting deleted (i.e. during set_species()) + if(!(dependent_disabilities & COLOURBLIND)) //We only want to change COLOURBLINDBLOCK and such it the eyes are being surgically removed. + dependent_disabilities |= COLOURBLIND + M.dna.SetSEState(COLOURBLINDBLOCK,0,1) + genemutcheck(M,COLOURBLINDBLOCK,null,MUTCHK_FORCED) + . = ..() /obj/item/organ/internal/eyes/surgeryize() if(!owner) diff --git a/code/modules/surgery/organs/subtypes/tajaran.dm b/code/modules/surgery/organs/subtypes/tajaran.dm index 7feacd4fbc4..746abd6e601 100644 --- a/code/modules/surgery/organs/subtypes/tajaran.dm +++ b/code/modules/surgery/organs/subtypes/tajaran.dm @@ -6,4 +6,11 @@ unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/ name = "tajaran eyeballs" species = "Tajaran" - colourblind_special = list("colour_matrix" = MATRIX_TAJ_CBLIND, "darkview" = 8) //The colour matrix and darksight parameters that the mob will recieve when they get the disability. + colourblind_matrix = MATRIX_TAJ_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. + colourblind_darkview = 8 + +/obj/item/organ/internal/eyes/tajaran/farwa //Being the lesser form of Tajara, Farwas have an utterly incurable version of their colourblindness. + name = "farwa eyeballs" + species = "Farwa" + colourmatrix = MATRIX_TAJ_CBLIND + dark_view = 8 diff --git a/code/modules/surgery/organs/subtypes/vulpkanin.dm b/code/modules/surgery/organs/subtypes/vulpkanin.dm index 27172e50215..af3d9deab09 100644 --- a/code/modules/surgery/organs/subtypes/vulpkanin.dm +++ b/code/modules/surgery/organs/subtypes/vulpkanin.dm @@ -6,4 +6,11 @@ unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/ name = "vulpkanin eyeballs" species = "Vulpkanin" - colourblind_special = list("colour_matrix" = MATRIX_VULP_CBLIND, "darkview" = 8) //The colour matrix and darksight parameters that the mob will recieve when they get the disability. + colourblind_matrix = MATRIX_VULP_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. + colourblind_darkview = 8 + +/obj/item/organ/internal/eyes/vulpkanin/wolpin //Being the lesser form of Vulpkanin, Wolpins have an utterly incurable version of their colourblindness. + name = "wolpin eyeballs" + species = "Wolpin" + colourmatrix = MATRIX_VULP_CBLIND + dark_view = 8 diff --git a/nano/templates/adv_med.tmpl b/nano/templates/adv_med.tmpl index 51b74a12fda..e88db47456a 100644 --- a/nano/templates/adv_med.tmpl +++ b/nano/templates/adv_med.tmpl @@ -52,10 +52,13 @@ Used In File(s): \code\game\machinery\adv_med.dm Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
{{/if}} {{if data.occupant.blind}} - Pupils unresponsive.
+ Cataracts detected.
+ {{/if}} + {{if data.occupant.colourblind}} + Photoreceptor abnormalities detected.
{{/if}} {{if data.occupant.nearsighted}} - Retinal misalignment detected
+ Retinal misalignment detected.
{{/if}}
From c27454497a315cdec9d16cfd9fbaff94016cd843 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Thu, 26 Jan 2017 20:47:16 +0400 Subject: [PATCH 009/122] increased playercount delay --- code/modules/events/event_container.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index af407b4a25e..18862df22e5 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -103,12 +103,10 @@ var/list/event_last_fired = list() playercount_modifier = 0.9 if(36 to 50) playercount_modifier = 0.8 - if(50 to 70) + if(50 to 80) playercount_modifier = 0.7 - if(70 to 100) + if(80 to 10000) playercount_modifier = 0.6 - if(100 to 50000) - playercount_modifier = 0.5 playercount_modifier = playercount_modifier * delay_modifier From 8be26937983c45883a06427fc6756dece48fdb15 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Fri, 27 Jan 2017 19:15:38 -0500 Subject: [PATCH 010/122] Minor Tweaks & Fixes - Updated the flashlight eye-shine check with the new get_dark_view() helper proc - Removed a useless check on the handle_dna() for monkeys - Increases reliability of the monkeyize() proc and fixes issues where calling it wouldn't turn a mob into a monkey on the spot. - Increases readability/maintainability of the get_colourmatrix() and get_dark_view() procs. --- .../gamemodes/changeling/powers/lesserform.dm | 3 +-- code/game/objects/items/devices/flashlight.dm | 2 +- .../mob/living/carbon/human/species/monkey.dm | 5 ++--- code/modules/mob/transform_procs.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 18 ++++++++++++------ 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index 9901768f1e5..8ba1e53cb10 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -21,8 +21,7 @@ to_chat(H, "We cannot perform this ability in this form!") return - var/datum/dna/DNA = changeling.GetDNA(user.dna.real_name) - user.dna = DNA ? DNA.Clone() : user.dna + user.dna = user.dna.Clone() H.visible_message("[H] transforms!") changeling.geneticdamage = 30 to_chat(H, "Our genes cry out!") diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index d8f17ac4335..216c37e7a51 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -74,7 +74,7 @@ var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) if(M.stat == DEAD || !eyes || M.disabilities & BLIND) //mob is dead or fully blind to_chat(user, "[M]'s pupils are unresponsive to the light!") - else if((XRAY in M.mutations) || (eyes.colourblind_darkview && eyes.colourblind_darkview == eyes.dark_view)) //The mob's either got the X-RAY vision or has a tapetum lucidum (extreme nightvision). + else if((XRAY in M.mutations) || (eyes.colourblind_darkview && eyes.colourblind_darkview == eyes.get_dark_view())) //The mob's either got the X-RAY vision or has a tapetum lucidum (extreme nightvision, i.e. Vulp/Tajara with COLOURBLIND & their monkey forms). to_chat(user, "[M]'s pupils glow eerily!") else //they're okay! if(M.flash_eyes(visual = 1)) diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index c4c705829b4..6e29d658cfe 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -54,9 +54,8 @@ ..() /datum/species/monkey/handle_dna(var/mob/living/carbon/human/H) - if(!is_type_in_list(/datum/dna/gene/monkey, H.active_genes)) //Only activate the monkey gene if it isn't already. - H.dna.SetSEState(MONKEYBLOCK,1,1) - genemutcheck(H,MONKEYBLOCK,null,MUTCHK_FORCED) + H.dna.SetSEState(MONKEYBLOCK,1) + genemutcheck(H,MONKEYBLOCK,null,MUTCHK_FORCED) /datum/species/monkey/handle_can_equip(obj/item/I, slot, disable_warning = 0, mob/living/carbon/human/user) switch(slot) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 8adc505102b..f7fb545d495 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -1,7 +1,7 @@ /mob/living/carbon/human/proc/monkeyize() var/mob/H = src H.dna.SetSEState(MONKEYBLOCK,1) - domutcheck(H, null) + genemutcheck(H,MONKEYBLOCK,null,MUTCHK_FORCED) /mob/new_player/AIize() spawning = 1 diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index c6a81e04481..b951b8c0774 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -344,7 +344,7 @@ slot = "eyes" var/list/eye_colour = list(0,0,0) var/list/colourmatrix = null - var/list/colourblind_matrix = null //Special colourblindness parameters. + var/list/colourblind_matrix = MATRIX_GREYSCALE //Special colourblindness parameters. By default, it's black-and-white. var/colourblind_darkview = null var/dependent_disabilities = null //Gets set by eye-dependent disabilities such as colourblindness so the eyes can transfer the disability during transplantation. var/dark_view = 2 //Default dark_view for Humans. @@ -353,11 +353,17 @@ /obj/item/organ/internal/eyes/proc/update_colour() dna.write_eyes_attributes(src) -/obj/item/organ/internal/eyes/proc/get_colourmatrix() //Returns a colour matrix if the eyes are organic. - return !robotic && owner.disabilities & COLOURBLIND ? (colourblind_matrix ? colourblind_matrix : MATRIX_GREYSCALE) : colourmatrix //Returns special colourmatrix if colourblind and it exists and greyscale if it doesn't, otherwise returns current velue. +/obj/item/organ/internal/eyes/proc/get_colourmatrix() //Returns a special colour matrix if the eyes are organic and the mob is colourblind, otherwise it uses the current one. + if(!robotic && owner.disabilities & COLOURBLIND) + return colourblind_matrix + else + return colourmatrix /obj/item/organ/internal/eyes/proc/get_dark_view() //Returns dark_view (if the eyes are organic) for see_invisible handling in species.dm to be autoprocessed by life(). - return !robotic && colourblind_darkview && owner.disabilities & COLOURBLIND ? colourblind_darkview : dark_view //Returns special darkview value if colourblind and it exists, otherwise returns current velue. + if(!robotic && colourblind_darkview && owner.disabilities & COLOURBLIND) //Returns special darkview value if colourblind and it exists, otherwise reuse current. + return colourblind_darkview + else + return dark_view /obj/item/organ/internal/eyes/insert(mob/living/carbon/human/M, special = 0) ..() @@ -366,7 +372,7 @@ if(!(M.disabilities & COLOURBLIND) && (dependent_disabilities & COLOURBLIND)) //If the eyes are colourblind and we're not, carry over the gene. dependent_disabilities &= ~COLOURBLIND - M.dna.SetSEState(COLOURBLINDBLOCK,1,1) + M.dna.SetSEState(COLOURBLINDBLOCK,1) genemutcheck(M,COLOURBLINDBLOCK,null,MUTCHK_FORCED) else M.update_client_colour() //If we're here, that means the mob acquired the colourblindness gene while they didn't have eyes. Better handle it. @@ -375,7 +381,7 @@ if(!special && (M.disabilities & COLOURBLIND)) //If special is set, that means these eyes are getting deleted (i.e. during set_species()) if(!(dependent_disabilities & COLOURBLIND)) //We only want to change COLOURBLINDBLOCK and such it the eyes are being surgically removed. dependent_disabilities |= COLOURBLIND - M.dna.SetSEState(COLOURBLINDBLOCK,0,1) + M.dna.SetSEState(COLOURBLINDBLOCK,0) genemutcheck(M,COLOURBLINDBLOCK,null,MUTCHK_FORCED) . = ..() From 3d893dae715c4f5beeea1a9e45f2460e41dcfe00 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 28 Jan 2017 21:18:57 -0800 Subject: [PATCH 011/122] Tiger !. change, round two --- .../simple_animal/hostile/terror_spiders/terror_spiders.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index b9bcb3964df..b441ea966ee 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -256,8 +256,8 @@ var/global/list/ts_spiderling_list = list() return ..() /mob/living/simple_animal/hostile/poison/terror_spider/Life() - ..() - if(stat == DEAD) + . = ..() + if(!.) // if mob is dead if(prob(2)) // 2% chance every cycle to decompose visible_message("\The dead body of the [src] decomposes!") From 23cd0f55630de4b87c286f795bef3707f27df93b Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 28 Jan 2017 21:34:31 -0800 Subject: [PATCH 012/122] Tiger !. change, round 3 --- .../hostile/terror_spiders/purple.dm | 17 +++++++++-------- .../hostile/terror_spiders/queen.dm | 6 +++--- .../hostile/terror_spiders/terror_spiders.dm | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm index 14515567f4a..ac60323cccf 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm @@ -42,14 +42,15 @@ /mob/living/simple_animal/hostile/poison/terror_spider/purple/Life() - ..() - if(!degenerate && spider_myqueen) - if(dcheck_counter >= 10) - dcheck_counter = 0 - purple_distance_check() - else - dcheck_counter++ - + . = ..() + if(.) // if mob is NOT dead + if(!degenerate && spider_myqueen) + if(dcheck_counter >= 10) + dcheck_counter = 0 + purple_distance_check() + else + dcheck_counter++ + return . /mob/living/simple_animal/hostile/poison/terror_spider/purple/proc/purple_distance_check() if(spider_myqueen) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm index 874be829e29..3ba54c42e4e 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm @@ -61,8 +61,8 @@ /mob/living/simple_animal/hostile/poison/terror_spider/queen/Life() - ..() - if(stat != DEAD) + . = ..() + if(.) // if mob is NOT dead if(ckey && canlay < 12 && hasnested) // max 12 eggs worth stored at any one time, realistically that's tons. if(world.time > (spider_lastspawn + spider_spawnfrequency)) canlay++ @@ -73,7 +73,7 @@ to_chat(src, "You have [canlay] eggs available to lay. You won't grow any more eggs until you lay some of your existing ones.") else to_chat(src, "You have [canlay] eggs available to lay.") - + return . /mob/living/simple_animal/hostile/poison/terror_spider/queen/death(gibbed) if(!hasdied) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index b441ea966ee..ba86dcaa5e5 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -277,7 +277,7 @@ var/global/list/ts_spiderling_list = list() regen_points -= regen_points_per_hp if(prob(5)) CheckFaction() - + return . From 792ea8951e69ce48668c327b2b8f0f2fbb0fd2a8 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 29 Jan 2017 17:45:10 -0800 Subject: [PATCH 013/122] eliminates return . --- .../mob/living/simple_animal/hostile/terror_spiders/purple.dm | 1 - .../mob/living/simple_animal/hostile/terror_spiders/queen.dm | 1 - .../simple_animal/hostile/terror_spiders/terror_spiders.dm | 1 - 3 files changed, 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm index ac60323cccf..6dc44caffb9 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm @@ -50,7 +50,6 @@ purple_distance_check() else dcheck_counter++ - return . /mob/living/simple_animal/hostile/poison/terror_spider/purple/proc/purple_distance_check() if(spider_myqueen) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm index 3ba54c42e4e..a7efaf998f9 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm @@ -73,7 +73,6 @@ to_chat(src, "You have [canlay] eggs available to lay. You won't grow any more eggs until you lay some of your existing ones.") else to_chat(src, "You have [canlay] eggs available to lay.") - return . /mob/living/simple_animal/hostile/poison/terror_spider/queen/death(gibbed) if(!hasdied) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index ba86dcaa5e5..10e4405998e 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -277,7 +277,6 @@ var/global/list/ts_spiderling_list = list() regen_points -= regen_points_per_hp if(prob(5)) CheckFaction() - return . From 2d784b3b598f37da3d9caa2b29dc56a163de8b0d Mon Sep 17 00:00:00 2001 From: fludd12 Date: Mon, 30 Jan 2017 21:40:34 -0500 Subject: [PATCH 014/122] Fixes the weird files finally --- code/modules/client/preference/preferences.dm | 7 +++++++ code/modules/mob/living/carbon/human/human_defines.dm | 1 + code/modules/mob/living/carbon/human/say.dm | 5 ++++- goon/browserassets/css/browserOutput.css | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index a558bad3dec..3f86110346d 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -282,6 +282,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "Species: [species]
" if(species == "Vox") dat += "N2 Tank: [speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
" + if(species == "Grey") + dat += "Voice: [speciesprefs ? "Wingdings" : "Normal"]
" dat += "Secondary Language: [language]
" dat += "Blood Type: [b_type]
" if(species in list("Human", "Drask", "Vox")) @@ -1331,6 +1333,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts b_skin = 0 alt_head = "None" //No alt heads on species that don't have them. + speciesprefs = 0 //My Vox tank shouldn't change how my future Grey talks. body_accessory = null //no vulptail on humans damnit @@ -2035,6 +2038,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.add_language(language) + if(species == "Grey") + if(speciesprefs) + character.speech_span = "wingdings" + character.real_name = real_name character.dna.real_name = real_name character.name = character.real_name diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 0d30c5c8265..1216c3bda1b 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -43,6 +43,7 @@ var/global/default_martial_art = new/datum/martial_art var/icon/lying_icon = null var/voice = "" //Instead of new say code calling GetVoice() over and over and over, we're just going to ask this variable, which gets updated in Life() + var/speech_span var/speech_problem_flag = 0 diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 26ca4af83e8..f066a2e6b9d 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -105,6 +105,7 @@ /mob/living/carbon/human/handle_speech_problems(var/message, var/verb) var/list/returns[3] var/speech_problem_flag = 0 + var/span = speech_span if(silent || (disabilities & MUTE)) message = "" @@ -143,8 +144,10 @@ verb = "yells loudly" if((COMIC in mutations) || (locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs)) - message = "[message]" + span = "sans" + if(span) + message = "[message]" returns[1] = message returns[2] = verb returns[3] = speech_problem_flag diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css index c7204d36577..71ec2b97028 100644 --- a/goon/browserassets/css/browserOutput.css +++ b/goon/browserassets/css/browserOutput.css @@ -299,6 +299,7 @@ h1.alert, h2.alert {color: #000000;} .confirm {color: #00af3b;} .rose {color: #ff5050;} .sans {font-family: 'Comic Sans MS', cursive, sans-serif;} +.wingdings {font-family: Wingdings, Webdings;} .ancient {color: #008B8B; font-stye: italic;} .newscaster {color: #800000;} .mod {color: #735638; font-weight: bold;} From fe9f547da65cd441d5bec0db4c3f0071798c4dc0 Mon Sep 17 00:00:00 2001 From: fludd12 Date: Fri, 3 Feb 2017 22:05:16 -0500 Subject: [PATCH 015/122] Moves spans to mind --- code/datums/mind.dm | 3 ++- code/modules/client/preference/preferences.dm | 8 +++++--- code/modules/mob/living/carbon/human/human_defines.dm | 1 - code/modules/mob/living/carbon/human/say.dm | 2 +- code/modules/mob/new_player/new_player.dm | 1 + 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index fcf1ded97cc..619bc5c6045 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -54,6 +54,7 @@ var/has_been_rev = 0//Tracks if this mind has been a rev or not var/miming = 0 // Mime's vow of silence + var/speech_span // What span any body this mind has talks in. var/datum/faction/faction //associated faction var/datum/changeling/changeling //changeling holder var/datum/vampire/vampire //vampire holder @@ -1324,7 +1325,7 @@ var/explanation = "Summon [ticker.mode.cultdat.entity_name] via the use of the appropriate rune. It will only work if nine cultists stand on and around it." to_chat(current, "Objective #1: [explanation]") current.memory += "Objective #1: [explanation]
" - + var/mob/living/carbon/human/H = current if(istype(H)) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 3f86110346d..20cdd45d20a 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -2022,6 +2022,11 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts ShowChoices(user) return 1 +/datum/preferences/proc/copy_to_mind(datum/mind/M) + if(species == "Grey") + if(speciesprefs) + M.speech_span = "wingdings" + /datum/preferences/proc/copy_to(mob/living/carbon/human/character) var/datum/species/S = all_species[species] character.change_species(species) // Yell at me if this causes everything to melt @@ -2038,9 +2043,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.add_language(language) - if(species == "Grey") - if(speciesprefs) - character.speech_span = "wingdings" character.real_name = real_name character.dna.real_name = real_name diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 1216c3bda1b..0d30c5c8265 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -43,7 +43,6 @@ var/global/default_martial_art = new/datum/martial_art var/icon/lying_icon = null var/voice = "" //Instead of new say code calling GetVoice() over and over and over, we're just going to ask this variable, which gets updated in Life() - var/speech_span var/speech_problem_flag = 0 diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index f066a2e6b9d..cac5ec6952c 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -105,7 +105,7 @@ /mob/living/carbon/human/handle_speech_problems(var/message, var/verb) var/list/returns[3] var/speech_problem_flag = 0 - var/span = speech_span + var/span = mind.speech_span if(silent || (disabilities & MUTE)) message = "" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index bccd7990de9..d18bad69475 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -506,6 +506,7 @@ new_character.real_name = pick(diona_names) //I hate this being here of all places but unfortunately dna is based on real_name! new_character.rename_self("diona") mind.original = new_character + client.prefs.copy_to_mind(mind) mind.transfer_to(new_character) //won't transfer key since the mind is not active From 18b806df862426f1e53f850072eda2e099fd509c Mon Sep 17 00:00:00 2001 From: fludd12 Date: Fri, 3 Feb 2017 22:36:06 -0500 Subject: [PATCH 016/122] Don't blame me this was Krausus' idea --- code/modules/client/preference/preferences.dm | 5 ----- code/modules/mob/living/carbon/human/species/station.dm | 5 +++++ code/modules/mob/new_player/new_player.dm | 1 - 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 20cdd45d20a..c0f97c074f8 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -2022,11 +2022,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts ShowChoices(user) return 1 -/datum/preferences/proc/copy_to_mind(datum/mind/M) - if(species == "Grey") - if(speciesprefs) - M.speech_span = "wingdings" - /datum/preferences/proc/copy_to(mob/living/carbon/human/character) var/datum/species/S = all_species[species] character.change_species(species) // Yell at me if this causes everything to melt diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 5bde6ce8e5b..1c55b10a921 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -722,6 +722,11 @@ genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) ..() +/datum/species/grey/equip(var/mob/living/carbon/human/H) + var/speech_pref = H.client.prefs.speciesprefs + if(speech_pref) + H.mind.speech_span = "wingdings" + /datum/species/diona name = "Diona" name_plural = "Dionaea" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index d18bad69475..bccd7990de9 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -506,7 +506,6 @@ new_character.real_name = pick(diona_names) //I hate this being here of all places but unfortunately dna is based on real_name! new_character.rename_self("diona") mind.original = new_character - client.prefs.copy_to_mind(mind) mind.transfer_to(new_character) //won't transfer key since the mind is not active From 129a57bd9b925f4389ec2e71bb94400204f9f2e3 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 13 Jan 2017 16:57:16 -0800 Subject: [PATCH 017/122] Goonlights Ports Goon Lighting from /vg/station. Summary - This adds smooth edges to all lighting in order to increase the aesthetic appeal of the lighting system. It works by using a matrix to change the appearance of the lighting overlay sprite, which has been changed to be a base for the matrix to modify. Ported from /vg/station with the help of @PJB3005. This lighting system is a hybrid between Mloc's lighting rewrite and Tobba's Goonlights. Notable changes: - Darksight now matters on mobs. The lighting overlays are not alpha=255 when they are completely dark, meaning you can still see the floor- assuming you can view the turf at all, because it retains the luminousity setting. - This means Tajaran have 100% night vision again as they are intended to. Humans can see in a 3x3 square centered around themselves. - No, I'm not changing this, if it's even possible. This is how BYOND's lighting is meant to work. If you have any complaints about game balance, please feel free to make a pull request to change see_in_dark values, which will be seperately evaluated. - The lighting controller now runs at world.tick_lag, to emulate the realtime function of StonedMC. So far with my testing, this hasn't caused any noticable performance decreases- the lighting system is obviously more expensive than our previous iteration, however, it's not the next ZAS ;) Technical Details: - /atom/movable/lighting_overlay/proc/get_clamped_lum has been removed, succeeded by /turf/proc/get_lumcount. They behave identically. - Turf lighting is actually controlled by four "corner" datums, which feed information into the overlay. - The way opacity is factored into the system has changed. Anything that doesn't use set_opacity is not going to work to block light. - /area/lighting_use_dynamic has been renamed to /area/dynamic_lighting, for consistency with /turf/dynamic_lighting. - Lighting is no longer seperately initialized for away missions. It is handled in ChangeTurf() as it should be. Known & Unfixable issues: - There is a 5-10 second delay from starting the round to the lights turning on. Attribute it to "the powernet being spun up" if you would like to- but it's actually just how long it takes the lighting system to update every single turf on the map. - When you walk with a light on you, the light will actually jump ahead of you before you visually get to the tile. This is because of the movement gliding on mobs, realtime lighting actually goes faster than the glide takes to complete, so it appears that your lights are moving faster than you. Thank you krausy~ Animated Goonlights This adds an animate() call to the update_overlays() proc. This makes it so that any light changes will smoothly transition between the changes instead of instantly changing their appearance. Also fixes a few issues pointed out on Github. Change lighting animation (turns out the old one totally breaks if you toggle a light quickly, whoopsies) Kill LIGHTING_INSTANT_UPDATES isturf --- code/__DEFINES/lighting.dm | 39 ++- code/__HELPERS/game.dm | 17 ++ code/controllers/Processes/lighting.dm | 93 +++++- code/controllers/verbs.dm | 5 +- code/game/area/Space Station 13 areas.dm | 28 +- code/game/area/areas.dm | 2 +- code/game/atoms_movable.dm | 6 + code/game/dna/genes/goon_powers.dm | 7 +- code/game/gamemodes/vampire/vampire.dm | 8 +- code/game/gamemodes/vampire/vampire_powers.dm | 3 +- code/game/objects/structures/curtains.dm | 2 +- code/game/objects/structures/mineral_doors.dm | 10 +- code/game/objects/structures/spirit_board.dm | 7 +- code/game/turfs/turf.dm | 31 +- .../awaymissions/mission_code/clownplanet.dm | 4 +- code/modules/awaymissions/zlevel.dm | 7 - code/modules/awaymissions/zvis.dm | 2 +- code/modules/lighting/light_source.dm | 257 ---------------- code/modules/lighting/lighting_area.dm | 9 + code/modules/lighting/lighting_atom.dm | 41 ++- code/modules/lighting/lighting_corner.dm | 125 ++++++++ code/modules/lighting/lighting_overlay.dm | 125 ++++---- code/modules/lighting/lighting_process.dm | 35 --- code/modules/lighting/lighting_setup.dm | 16 + code/modules/lighting/lighting_source.dm | 283 ++++++++++++++++++ code/modules/lighting/lighting_system.dm | 25 -- code/modules/lighting/lighting_turf.dm | 102 ++++++- code/modules/lighting/~lighting_undefs.dm | 8 +- .../living/simple_animal/posessed_object.dm | 2 +- code/modules/power/supermatter/wall.dm | 2 +- icons/effects/lighting_overlay.dmi | Bin 343 -> 0 bytes icons/effects/lighting_overlay.png | Bin 0 -> 1480 bytes paradise.dme | 8 +- 33 files changed, 811 insertions(+), 498 deletions(-) delete mode 100644 code/modules/lighting/light_source.dm create mode 100644 code/modules/lighting/lighting_area.dm create mode 100644 code/modules/lighting/lighting_corner.dm delete mode 100644 code/modules/lighting/lighting_process.dm create mode 100644 code/modules/lighting/lighting_setup.dm create mode 100644 code/modules/lighting/lighting_source.dm delete mode 100644 code/modules/lighting/lighting_system.dm delete mode 100644 icons/effects/lighting_overlay.dmi create mode 100644 icons/effects/lighting_overlay.png diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 7fbec83455a..c18fb516f4b 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -1,10 +1,43 @@ -#define LIGHTING_INTERVAL 5 // frequency, in 1/10ths of a second, of the lighting process - #define LIGHTING_FALLOFF 1 // type of falloff to use for lighting; 1 for circular, 2 for square #define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources #define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone #define LIGHTING_LAYER 10 // drawing layer for lighting overlays -#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects +#define LIGHTING_ICON 'icons/effects/lighting_overlay.png' // icon used for lighting shading effects #define LIGHTING_ROUND_VALUE (1 / 128) //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. + +#define LIGHTING_SOFT_THRESHOLD 0.05 // If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting overlays. + +// If I were you I'd leave this alone. +#define LIGHTING_BASE_MATRIX \ + list \ + ( \ + LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ + LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ + LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ + LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ + 0, 0, 0, 1 \ + ) \ + +// Helpers so we can (more easily) control the colour matrices. +#define CL_MATRIX_RR 1 +#define CL_MATRIX_RG 2 +#define CL_MATRIX_RB 3 +#define CL_MATRIX_RA 4 +#define CL_MATRIX_GR 5 +#define CL_MATRIX_GG 6 +#define CL_MATRIX_GB 7 +#define CL_MATRIX_GA 8 +#define CL_MATRIX_BR 9 +#define CL_MATRIX_BG 10 +#define CL_MATRIX_BB 11 +#define CL_MATRIX_BA 12 +#define CL_MATRIX_AR 13 +#define CL_MATRIX_AG 14 +#define CL_MATRIX_AB 15 +#define CL_MATRIX_AA 16 +#define CL_MATRIX_CR 17 +#define CL_MATRIX_CG 18 +#define CL_MATRIX_CB 19 +#define CL_MATRIX_CA 20 \ No newline at end of file diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 1ada9f5100d..c6f0e9bf1c9 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -412,6 +412,23 @@ return 0 return 1 + +/proc/GetRedPart(const/hexa) + return hex2num(copytext(hexa, 2, 4)) + +/proc/GetGreenPart(const/hexa) + return hex2num(copytext(hexa, 4, 6)) + +/proc/GetBluePart(const/hexa) + return hex2num(copytext(hexa, 6, 8)) + +/proc/GetHexColors(const/hexa) + return list( + GetRedPart(hexa), + GetGreenPart(hexa), + GetBluePart(hexa), + ) + /proc/MinutesToTicks(var/minutes as num) return minutes * 60 * 10 diff --git a/code/controllers/Processes/lighting.dm b/code/controllers/Processes/lighting.dm index 7d463abbd7f..15b134ecf44 100644 --- a/code/controllers/Processes/lighting.dm +++ b/code/controllers/Processes/lighting.dm @@ -1,18 +1,91 @@ -var/global/datum/controller/process/lighting/lighting_controller +// Solves problems with lighting updates lagging shit +// Max constraints on number of updates per doWork(): +#define MAX_LIGHT_UPDATES_PER_WORK 100 +#define MAX_CORNER_UPDATES_PER_WORK 1000 +#define MAX_OVERLAY_UPDATES_PER_WORK 2000 +/var/lighting_overlays_initialised = FALSE + +/var/list/lighting_update_lights = list() // List of lighting sources queued for update. +/var/list/lighting_update_corners = list() // List of lighting corners queued for update. +/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update. + +/var/list/lighting_update_lights_old = list() // List of lighting sources currently being updated. +/var/list/lighting_update_corners_old = list() // List of lighting corners currently being updated. +/var/list/lighting_update_overlays_old = list() // List of lighting overlays currently being updated. + + +/datum/controller/process/lighting /datum/controller/process/lighting/setup() name = "lighting" - schedule_interval = LIGHTING_INTERVAL - start_delay = 1 - lighting_controller = src - create_lighting_overlays() + schedule_interval = world.tick_lag // run as fast as you possibly can + create_all_lighting_overlays() + lighting_overlays_initialised = TRUE + // Pre-process lighting once before the round starts. Wait 30 seconds so the away mission has time to load. spawn(300) - doWork() + doWork(1) -/datum/controller/process/lighting/statProcess() - ..() - stat(null, "[last_light_count] lights, [last_overlay_count] overlays") +/datum/controller/process/lighting/doWork(roundstart) + // Counters + var/light_updates = 0 + var/corner_updates = 0 + var/overlay_updates = 0 -// Lighting process code located in modules\lighting\lighting_process.dm \ No newline at end of file + lighting_update_lights_old = lighting_update_lights //We use a different list so any additions to the update lists during a delay from scheck() don't cause things to be cut from the list without being updated. + lighting_update_lights = list() + for(var/datum/light_source/L in lighting_update_lights_old) + if(light_updates >= MAX_LIGHT_UPDATES_PER_WORK && !roundstart) + lighting_update_lights += L + continue // DON'T break, we're adding stuff back into the update queue. + + if(L.check() || L.destroyed || L.force_update) + L.remove_lum() + if(!L.destroyed) + L.apply_lum() + + else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. + L.smart_vis_update() + + L.vis_update = FALSE + L.force_update = FALSE + L.needs_update = FALSE + + light_updates++ + + SCHECK + + lighting_update_corners_old = lighting_update_corners //Same as above. + lighting_update_corners = list() + for(var/A in lighting_update_corners_old) + if(corner_updates >= MAX_CORNER_UPDATES_PER_WORK && !roundstart) + lighting_update_corners += A + continue // DON'T break, we're adding stuff back into the update queue. + + var/datum/lighting_corner/C = A + + C.update_overlays() + + C.needs_update = FALSE + + corner_updates++ + + SCHECK + + lighting_update_overlays_old = lighting_update_overlays //Same as above. + lighting_update_overlays = list() + + for(var/atom/movable/lighting_overlay/O in lighting_update_overlays_old) + if(overlay_updates >= MAX_OVERLAY_UPDATES_PER_WORK && !roundstart) + lighting_update_overlays += O + continue // DON'T break, we're adding stuff back into the update queue. + + O.update_overlay() + O.needs_update = 0 + overlay_updates++ + SCHECK + +#undef MAX_LIGHT_UPDATES_PER_WORK +#undef MAX_CORNER_UPDATES_PER_WORK +#undef MAX_OVERLAY_UPDATES_PER_WORK diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 027101df146..fe8d1cbb133 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -17,7 +17,7 @@ message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") return -/client/proc/debug_controller(controller in list("Master","failsafe","Ticker","Air","Lighting","Jobs","Sun","Radio","Configuration","pAI", "Cameras","Garbage", "Transfer Controller","Event","Alarm","Scheduler","Nano","Vote","Diseases","Fires","Mob","NPC AI","Shuttle","Timer","Weather","Space","Mob Hunt Server")) +/client/proc/debug_controller(controller in list("Master","failsafe","Ticker","Air","Jobs","Sun","Radio","Configuration","pAI", "Cameras","Garbage", "Transfer Controller","Event","Alarm","Scheduler","Nano","Vote","Diseases","Fires","Mob","NPC AI","Shuttle","Timer","Weather","Space","Mob Hunt Server")) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" @@ -36,9 +36,6 @@ if("Air") debug_variables(air_master) feedback_add_details("admin_verb","DAir") - if("Lighting") - debug_variables(lighting_controller) - feedback_add_details("admin_verb","DLighting") if("Jobs") debug_variables(job_master) feedback_add_details("admin_verb","DJobs") diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index e1077773daa..66568a11a4a 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -107,14 +107,14 @@ var/list/ghostteleportlocs = list() name = "\improper Admin Room" icon_state = "start" requires_power = 0 - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/adminconstruction name = "\improper Admin Testing Area" icon_state = "start" requires_power = 0 - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/space icon_state = "space" @@ -467,7 +467,7 @@ var/list/ghostteleportlocs = list() icon_state = "start" requires_power = 0 luminosity = 1 - lighting_use_dynamic = 0 + dynamic_lighting = 0 has_gravity = 1 // === end remove @@ -483,7 +483,7 @@ var/list/ghostteleportlocs = list() name = "\improper Centcom" icon_state = "centcom" requires_power = 0 - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/centcom/control name = "\improper Centcom Control" @@ -564,7 +564,7 @@ var/list/ghostteleportlocs = list() name = "\improper Thunderdome" icon_state = "thunder" requires_power = 0 - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/tdome/arena_source @@ -649,7 +649,7 @@ var/list/ghostteleportlocs = list() icon_state = "yellow" requires_power = 0 has_gravity = 1 - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/wizard_station name = "\improper Wizard's Den" @@ -672,7 +672,7 @@ var/list/ghostteleportlocs = list() name = "\improper Vox Base" icon_state = "yellow" requires_power = 0 - lighting_use_dynamic = 0 + dynamic_lighting = 0 no_teleportlocs = 1 /area/vox_station/transit @@ -1229,7 +1229,7 @@ var/list/ghostteleportlocs = list() /area/holodeck name = "\improper Holodeck" icon_state = "Holodeck" - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/holodeck/alphadeck name = "\improper Holodeck Alpha" @@ -1366,7 +1366,7 @@ var/list/ghostteleportlocs = list() /area/solar requires_power = 0 - lighting_use_dynamic = 0 + dynamic_lighting = 0 auxport name = "\improper Fore Port Solar Array" @@ -2281,25 +2281,25 @@ area/security/podbay name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/turret_protected/AIsatextFS name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/turret_protected/AIsatextAS name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/turret_protected/AIsatextAP name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 - lighting_use_dynamic = 0 + dynamic_lighting = 0 /area/turret_protected/NewAIMain name = "\improper AI Main New" @@ -2476,7 +2476,7 @@ area/security/podbay name = "Beach" icon_state = "beach" luminosity = 1 - lighting_use_dynamic = 0 + dynamic_lighting = 0 requires_power = 0 ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg') diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 7caaf090914..5f960237381 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -29,7 +29,7 @@ if(type == /area) // override defaults for space. TODO: make space areas of type /area/space rather than /area requires_power = 1 always_unpowered = 1 - lighting_use_dynamic = 1 + dynamic_lighting = 1 power_light = 0 power_equip = 0 power_environ = 0 diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f64b914f3eb..b8673b497d5 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -32,7 +32,13 @@ /atom/movable/Destroy() for(var/atom/movable/AM in contents) qdel(AM) + var/turf/un_opaque + if(opacity && isturf(loc)) + un_opaque = loc + loc = null + if(un_opaque) + un_opaque.recalc_atom_opacity() if(pulledby) if(pulledby.pulling == src) pulledby.pulling = null diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 5654fe2fc72..0e8415a15e3 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -57,12 +57,7 @@ var/turf/simulated/T = get_turf(M) if(!istype(T)) return - var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T - var/light_available - if(L) - light_available = L.get_clamped_lum()*10 - else - light_available = 5 + var/light_available = T.get_lumcount() * 10 if(light_available <= 2) M.alpha = round(M.alpha * 0.8) else diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index f37f846104a..f3dc8e4e41a 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -416,12 +416,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha owner.alpha = 255 return var/turf/simulated/T = get_turf(owner) - var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T - var/light_available - if(L) - light_available = L.get_clamped_lum(0.5) * 10 - else - light_available = 10 + var/light_available = T.get_lumcount(0.5) * 10 if(!istype(T)) return 0 @@ -429,6 +424,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha if(!iscloaking) owner.alpha = 255 return 0 + if(light_available <= 2) owner.alpha = round((255 * 0.15)) return 1 diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 023fef59a7b..c38c50ad40a 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -479,8 +479,7 @@ if(T.y > world.maxy-outer_tele_radius || T.y < outer_tele_radius) continue - var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T - var/lightingcount = L.get_clamped_lum(0.5) * 10 + var/lightingcount = T.get_lumcount(0.5) * 10 // LIGHTING CHECK if(lightingcount > max_lum) diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index 9d7bbc96e1b..104fac7fd69 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -27,7 +27,7 @@ ..() /obj/structure/curtain/proc/toggle() - opacity = !opacity + set_opacity(!opacity) if(opacity) icon_state = "closed" layer = SHOWER_CLOSED_LAYER diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index b9af7b2d032..824759b35cb 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -191,7 +191,7 @@ Close() ..() - opacity = 0 + set_opacity(0) /obj/structure/mineral_door/transparent/plasma mineralType = "plasma" @@ -228,7 +228,7 @@ flick("[mineralType]opening",src) sleep(10) density = 0 - opacity = 0 + set_opacity(0) state = 1 update_icon() isSwitchingStates = 0 @@ -239,7 +239,7 @@ flick("[mineralType]closing",src) sleep(10) density = 1 - opacity = 1 + set_opacity(1) state = 0 update_icon() isSwitchingStates = 0 @@ -265,7 +265,7 @@ flick("[mineralType]opening",src) sleep(10) density = 0 - opacity = 0 + set_opacity(0) state = 1 update_icon() isSwitchingStates = 0 @@ -280,7 +280,7 @@ flick("[mineralType]closing",src) sleep(10) density = 1 - opacity = 1 + set_opacity(1) state = 0 update_icon() isSwitchingStates = 0 diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm index 25fe7f4a134..253f93dc7ae 100644 --- a/code/game/objects/structures/spirit_board.dm +++ b/code/game/objects/structures/spirit_board.dm @@ -55,11 +55,10 @@ //lighting check var/light_amount = 0 var/turf/T = get_turf(src) - var/atom/movable/lighting_overlay/LO = locate(/atom/movable/lighting_overlay) in T - if(LO) - light_amount = LO.get_clamped_lum(0.5)*10 + if(T) + light_amount = T.get_lumcount(0.5) * 10 else - light_amount = 10 + light_amount = 10 if(light_amount > 2) to_chat(M, "It's too bright here to use [src.name]!") diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index ba5ced7723c..69b0df22ae3 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -24,8 +24,6 @@ var/PathNode/PNode = null //associated PathNode in the A* algorithm - var/dynamic_lighting = 1 - flags = 0 var/image/obscured //camerachunks @@ -161,10 +159,11 @@ return src var/old_opacity = opacity var/old_dynamic_lighting = dynamic_lighting - var/list/old_affecting_lights = affecting_lights + var/old_affecting_lights = affecting_lights var/old_lighting_overlay = lighting_overlay var/old_blueprint_data = blueprint_data var/old_obscured = obscured + var/old_corners = corners BeforeChange() if(air_master) @@ -178,16 +177,19 @@ for(var/turf/space/S in range(W,1)) S.update_starlight() - lighting_overlay = old_lighting_overlay + recalc_atom_opacity() - affecting_lights = old_affecting_lights - if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting)) - reconsider_lights() - if(dynamic_lighting != old_dynamic_lighting) - if(dynamic_lighting) - lighting_build_overlays() - else - lighting_clear_overlays() + if(lighting_overlays_initialised) + lighting_overlay = old_lighting_overlay + affecting_lights = old_affecting_lights + corners = old_corners + if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting)) + reconsider_lights() + if(dynamic_lighting != old_dynamic_lighting) + if(dynamic_lighting) + lighting_build_overlay() + else + lighting_clear_overlay() obscured = old_obscured @@ -384,11 +386,6 @@ if(ticker) cameranet.updateVisibility(src) -/turf/proc/get_lumcount() //Gets the lighting level of a given turf. - if(lighting_overlay) - return lighting_overlay.get_clamped_lum() - return 1 - /turf/attackby(obj/item/C, mob/user, params) if(can_lay_cable() && istype(C, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = C diff --git a/code/modules/awaymissions/mission_code/clownplanet.dm b/code/modules/awaymissions/mission_code/clownplanet.dm index 359037ada0a..8d64d3074d2 100644 --- a/code/modules/awaymissions/mission_code/clownplanet.dm +++ b/code/modules/awaymissions/mission_code/clownplanet.dm @@ -4,10 +4,10 @@ name = "\improper Clown Planet" icon_state = "honk" luminosity = 1 - lighting_use_dynamic = 0 + dynamic_lighting = 0 requires_power = 0 report_alerts = 0 - + /area/awaymission/clownplanet/miningtown name = "\improper Clown Planet - Bananium-o-Rama" icon_state = "away1" diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index f5b951eb627..d340fc6a651 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -13,13 +13,6 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away air_master.setup_allturfs(turfs) log_debug("\tTook [stop_watch(subtimer)]s") - subtimer = start_watch() - log_debug("Initializing lighting") - for(var/turf/T in turfs) - if(T.dynamic_lighting) - T.lighting_build_overlays() - log_debug("\tTook [stop_watch(subtimer)]s") - subtimer = start_watch() log_debug("Smoothing tiles") for(var/turf/T in smoothTurfs) diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index 06d60f3389f..735dd307ddb 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -1,7 +1,7 @@ /area/awaymission/upperlevel name = "Open Space" color = "#888" - lighting_use_dynamic = 0 + dynamic_lighting = 0 requires_power = 0 // Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is diff --git a/code/modules/lighting/light_source.dm b/code/modules/lighting/light_source.dm deleted file mode 100644 index fd92e6675f1..00000000000 --- a/code/modules/lighting/light_source.dm +++ /dev/null @@ -1,257 +0,0 @@ -/datum/light_source - var/atom/top_atom - var/atom/source_atom - - var/turf/source_turf - var/light_power - var/light_range - var/light_color // string, decomposed by parse_light_color() - - var/lum_r - var/lum_g - var/lum_b - - var/tmp/applied_lum_r - var/tmp/applied_lum_g - var/tmp/applied_lum_b - - var/list/effect_str - var/list/effect_turf - - var/applied - - var/vis_update //Whetever we should smartly recalculate visibility. and then only update tiles that became (in) visible to us - var/needs_update - var/destroyed - var/force_update - -/datum/light_source/New(atom/owner, atom/top) - source_atom = owner - if(!source_atom.light_sources) source_atom.light_sources = list() - source_atom.light_sources += src - top_atom = top - if(top_atom != source_atom) - if(!top.light_sources) top.light_sources = list() - top_atom.light_sources += src - - source_turf = top_atom - light_power = source_atom.light_power - light_range = source_atom.light_range - light_color = source_atom.light_color - - parse_light_color() - - effect_str = list() - effect_turf = list() - - update() - - return ..() - -/datum/light_source/proc/destroy() - destroyed = 1 - force_update() - if(source_atom && source_atom.light_sources) source_atom.light_sources -= src - if(top_atom && top_atom.light_sources) top_atom.light_sources -= src - -/datum/light_source/proc/update(atom/new_top_atom) - if(new_top_atom && new_top_atom != top_atom) - if(top_atom != source_atom) top_atom.light_sources -= src - top_atom = new_top_atom - if(top_atom != source_atom) - if(!top_atom.light_sources) top_atom.light_sources = list() - top_atom.light_sources += src - - if(!needs_update) //Incase we're already updating either way. - lighting_update_lights += src - needs_update = 1 - -/datum/light_source/proc/force_update() - force_update = 1 - if(!needs_update) //Incase we're already updating either way. - needs_update = 1 - lighting_update_lights += src - -/datum/light_source/proc/vis_update() - if(!needs_update) - needs_update = 1 - lighting_update_lights += src - - vis_update = 1 - -/datum/light_source/proc/check() - if(!source_atom || !light_range || !light_power) - destroy() - return 1 - - if(!top_atom) - top_atom = source_atom - . = 1 - - if(istype(top_atom, /turf)) - if(source_turf != top_atom) - source_turf = top_atom - . = 1 - else if(top_atom.loc != source_turf) - source_turf = top_atom.loc - . = 1 - - if(source_atom.light_power != light_power) - light_power = source_atom.light_power - . = 1 - - if(source_atom.light_range != light_range) - light_range = source_atom.light_range - . = 1 - - if(light_range && light_power && !applied) - . = 1 - - if(source_atom.light_color != light_color) - light_color = source_atom.light_color - parse_light_color() - . = 1 - -/datum/light_source/proc/parse_light_color() - if(light_color) - lum_r = color2R(light_color) / 255 - lum_g = color2G(light_color) / 255 - lum_b = color2B(light_color) / 255 - else - lum_r = 1 - lum_g = 1 - lum_b = 1 - -#if LIGHTING_FALLOFF == 1 //circular - #define LUM_DISTANCE(swapvar, O, T) swapvar = (O.x - T.x)**2 + (O.y - T.y)**2 + LIGHTING_HEIGHT - #if LIGHTING_LAMBERTIAN == 1 - #define LUM_ATTENUATION(swapvar) swapvar = CLAMP01((1 - CLAMP01(sqrt(swapvar) / max(1,light_range))) * (1 / sqrt(swapvar + 1))) - #else - #define LUM_ATTENUATION(swapvar) swapvar = 1 - CLAMP01(sqrt(swapvar) / max(1,light_range)) - #endif -#elif LIGHTING_FALLOFF == 2 //square - #define LUM_DISTANCE(swapvar, O, T) swapvar = abs(O.x - T.x) + abs(O.y - T.y) + LIGHTING_HEIGHT - #if LIGHTING_LAMBERTIAN == 1 - #define LUM_ATTENUATION(swapvar) swapvar = CLAMP01((1 - CLAMP01(swapvar / max(1,light_range))) * (1 / sqrt(swapvar**2 + 1))) - #else - #define LUM_ATTENUATION(swapvar) swapvar = CLAMP01(swapvar / max(1,light_range)) - #endif -#endif - -#define LUM_FALLOFF(swapvar, O, T) \ - LUM_DISTANCE(swapvar, O, T); \ - LUM_ATTENUATION(swapvar); - -/datum/light_source/proc/apply_lum() - applied = 1 - - // Cache the applied lum counts. - applied_lum_r = lum_r - applied_lum_g = lum_g - applied_lum_b = lum_b - - if(istype(source_turf)) - FOR_DVIEW(var/turf/T, light_range, source_turf, INVISIBILITY_LIGHTING) - if(T.lighting_overlay) - var/strength - LUM_FALLOFF(strength, T, source_turf) - strength *= light_power - - if(!strength) //Don't add turfs that aren't affected to the affected turfs. - continue - - strength = round(strength, LIGHTING_ROUND_VALUE) //Screw sinking points. - - effect_str += strength - - T.lighting_overlay.update_lumcount( - lum_r * strength, - lum_g * strength, - lum_b * strength - ) - - else - effect_str += 0 - - if(!T.affecting_lights) - T.affecting_lights = list() - - T.affecting_lights += src - effect_turf += T - END_FOR_DVIEW - -/datum/light_source/proc/remove_lum() - applied = 0 - var/i = 1 - for(var/turf/T in effect_turf) - if(T.affecting_lights) - T.affecting_lights -= src - - if(T.lighting_overlay) - var/str = effect_str[i] - T.lighting_overlay.update_lumcount(-str * applied_lum_r, -str * applied_lum_g, -str * applied_lum_b) - - i++ - - effect_str.Cut() - effect_turf.Cut() - -/datum/light_source/proc/forget_turf(turf/T) - var/idx = effect_turf.Find(T) - effect_turf.Cut(idx, idx + 1) - effect_str.Cut(idx, idx + 1) - -//Smartly updates the lighting, only removes lum from and adds lum to turfs that actually got changed. -//This is for lights that need to reconsider due to nearby opacity changes. -//Stupid dumb copy pasta because BYOND and speed. -/datum/light_source/proc/smart_vis_update() - var/list/view[0] - FOR_DVIEW(var/turf/T, light_range, source_turf, INVISIBILITY_LIGHTING) - view += T //Filter out turfs. - END_FOR_DVIEW - //This is the part where we calculate new turfs (if any) - var/list/new_turfs = view - effect_turf //This will result with all the tiles that are added. - for(var/turf/T in new_turfs) - if(T.lighting_overlay) - LUM_FALLOFF(., T, source_turf) - . *= light_power - - if(!.) //Don't add turfs that aren't affected to the affected turfs. - continue - - . = round(., LIGHTING_ROUND_VALUE) - - effect_str += . - - T.lighting_overlay.update_lumcount( - lum_r * ., - lum_g * ., - lum_b * . - ) - - else - effect_str += 0 - - if(!T.affecting_lights) - T.affecting_lights = list() - - T.affecting_lights += src - effect_turf += T - - var/list/old_turfs = effect_turf - view - for(var/turf/T in old_turfs) - //Insert not-so-huge copy paste from remove_lum(). - var/idx = effect_turf.Find(T) //Get the index, luckily Find() is cheap in small lists like this. (with small I mean under a couple thousand len) - if(T.affecting_lights) - T.affecting_lights -= src - - if(T.lighting_overlay) - var/str = effect_str[idx] - T.lighting_overlay.update_lumcount(-str * lum_r, -str * lum_g, -str * lum_b) - - effect_turf.Cut(idx, idx + 1) - effect_str.Cut(idx, idx + 1) - -#undef LUM_FALLOFF -#undef LUM_DISTANCE -#undef LUM_ATTENUATION \ No newline at end of file diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm new file mode 100644 index 00000000000..92923e6b0d5 --- /dev/null +++ b/code/modules/lighting/lighting_area.dm @@ -0,0 +1,9 @@ +/area + luminosity = TRUE + var/dynamic_lighting = TRUE + +/area/New() + . = ..() + + if(dynamic_lighting) + luminosity = FALSE \ No newline at end of file diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 92500ecc1d9..679f6fb86ef 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -1,19 +1,30 @@ /atom var/light_power = 1 // intensity of the light var/light_range = 0 // range in tiles of the light - var/light_color // RGB string representing the colour of the light + var/light_color // Hexadecimal RGB string representing the colour of the light var/datum/light_source/light var/list/light_sources -/atom/proc/set_light(l_range, l_power, l_color) - if(l_power != null) light_power = l_power - if(l_range != null) light_range = l_range - if(l_color != null) light_color = l_color +// Nonsensical value for l_color default, so we can detect if it gets set to null. +#define NONSENSICAL_VALUE -99999 +/atom/proc/set_light(l_range, l_power, l_color = NONSENSICAL_VALUE) + if(l_power != null) + light_power = l_power + + if(l_range != null) + light_range = l_range + + if(l_color != NONSENSICAL_VALUE) + light_color = l_color update_light() +#undef NONSENSICAL_VALUE + /atom/proc/update_light() + set waitfor = FALSE + if(!light_power || !light_range) if(light) light.destroy() @@ -31,9 +42,14 @@ /atom/New() . = ..() + if(light_power && light_range) update_light() + if(opacity && isturf(loc)) + var/turf/T = loc + T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guranteed to be on afterwards anyways. + /atom/Destroy() if(light) light.destroy() @@ -62,11 +78,22 @@ new_loc.reconsider_lights() /atom/proc/set_opacity(new_opacity) - var/old_opacity = opacity + if(new_opacity == opacity) + return + opacity = new_opacity var/turf/T = loc - if(old_opacity != new_opacity && istype(T)) + if(!isturf(T)) + return + + if(new_opacity == TRUE) + T.has_opaque_atom = TRUE T.reconsider_lights() + else + var/old_has_opaque_atom = T.has_opaque_atom + T.recalc_atom_opacity() + if(old_has_opaque_atom != T.has_opaque_atom) + T.reconsider_lights() /obj/item/equipped() . = ..() diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm new file mode 100644 index 00000000000..a464f5af2d0 --- /dev/null +++ b/code/modules/lighting/lighting_corner.dm @@ -0,0 +1,125 @@ +/var/list/datum/lighting_corner/all_lighting_corners = list() +/var/datum/lighting_corner/dummy/dummy_lighting_corner = new +// Because we can control each corner of every lighting overlay. +// And corners get shared between multiple turfs (unless you're on the corners of the map, then 1 corner doesn't). +// For the record: these should never ever ever be deleted, even if the turf doesn't have dynamic lighting. + +// This list is what the code that assigns corners listens to, the order in this list is the order in which corners are added to the /turf/corners list. +/var/list/LIGHTING_CORNER_DIAGONAL = list(NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST) + +/datum/lighting_corner + var/list/turf/masters = list() + var/list/datum/light_source/affecting = list() // Light sources affecting us. + var/active = FALSE // TRUE if one of our masters has dynamic lighting. + + var/x = 0 + var/y = 0 + var/z = 0 + + var/lum_r = 0 + var/lum_g = 0 + var/lum_b = 0 + + var/needs_update = FALSE + + var/cache_r = LIGHTING_SOFT_THRESHOLD + var/cache_g = LIGHTING_SOFT_THRESHOLD + var/cache_b = LIGHTING_SOFT_THRESHOLD + var/cache_mx = 0 + + var/update_gen = 0 + +/datum/lighting_corner/New(var/turf/new_turf, var/diagonal) + . = ..() + + all_lighting_corners += src + + masters[new_turf] = turn(diagonal, 180) + z = new_turf.z + + var/vertical = diagonal & ~(diagonal - 1) // The horizontal directions (4 and 8) are bigger than the vertical ones (1 and 2), so we can reliably say the lsb is the horizontal direction. + var/horizontal = diagonal & ~vertical // Now that we know the horizontal one we can get the vertical one. + + x = new_turf.x + (horizontal == EAST ? 0.5 : -0.5) + y = new_turf.y + (vertical == NORTH ? 0.5 : -0.5) + + // My initial plan was to make this loop through a list of all the dirs (horizontal, vertical, diagonal). + // Issue being that the only way I could think of doing it was very messy, slow and honestly overengineered. + // So we'll have this hardcode instead. + var/turf/T + var/i + + // Diagonal one is easy. + T = get_step(new_turf, diagonal) + if (T) // In case we're on the map's border. + if (!T.corners) + T.corners = list(null, null, null, null) + + masters[T] = diagonal + i = LIGHTING_CORNER_DIAGONAL.Find(turn(diagonal, 180)) + T.corners[i] = src + + // Now the horizontal one. + T = get_step(new_turf, horizontal) + if (T) // Ditto. + if (!T.corners) + T.corners = list(null, null, null, null) + + masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. + i = LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) + T.corners[i] = src + + // And finally the vertical one. + T = get_step(new_turf, vertical) + if (T) + if (!T.corners) + T.corners = list(null, null, null, null) + + masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. + i = LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) + T.corners[i] = src + + update_active() + +/datum/lighting_corner/proc/update_active() + active = FALSE + for (var/turf/T in masters) + if (T.lighting_overlay) + active = TRUE + +// God that was a mess, now to do the rest of the corner code! Hooray! +/datum/lighting_corner/proc/update_lumcount(var/delta_r, var/delta_g, var/delta_b) + lum_r += delta_r + lum_g += delta_g + lum_b += delta_b + + if (!needs_update) + needs_update = TRUE + lighting_update_corners += src + +/datum/lighting_corner/proc/update_overlays() + + // Cache these values a head of time so 4 individual lighting overlays don't all calculate them individually. + var/mx = max(lum_r, lum_g, lum_b) // Scale it so 1 is the strongest lum, if it is above 1. + . = 1 // factor + if (mx > 1) + . = 1 / mx + + else if (mx < LIGHTING_SOFT_THRESHOLD) + . = 0 // 0 means soft lighting. + + cache_r = lum_r * . || LIGHTING_SOFT_THRESHOLD + cache_g = lum_g * . || LIGHTING_SOFT_THRESHOLD + cache_b = lum_b * . || LIGHTING_SOFT_THRESHOLD + cache_mx = mx + + for (var/TT in masters) + var/turf/T = TT + if (T.lighting_overlay) + if (!T.lighting_overlay.needs_update) + T.lighting_overlay.needs_update = TRUE + lighting_update_overlays += T.lighting_overlay + + +/datum/lighting_corner/dummy/New() + return diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 24854085c1a..7c2e1a55842 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -1,3 +1,4 @@ +var/list/all_lighting_overlays = list() // Global list of lighting overlays. /atom/movable/lighting_overlay name = "" mouse_opacity = 0 @@ -6,90 +7,75 @@ icon = LIGHTING_ICON layer = LIGHTING_LAYER invisibility = INVISIBILITY_LIGHTING - color = "#000000" + color = LIGHTING_BASE_MATRIX icon_state = "light1" auto_init = 0 // doesn't need special init + blend_mode = BLEND_MULTIPLY - var/lum_r - var/lum_g - var/lum_b + var/lum_r = 0 + var/lum_g = 0 + var/lum_b = 0 - var/needs_update + var/needs_update = FALSE -/atom/movable/lighting_overlay/New() +/atom/movable/lighting_overlay/New(var/atom/loc, var/no_update = FALSE) . = ..() verbs.Cut() + global.all_lighting_overlays += src var/turf/T = loc //If this runtimes atleast we'll know what's creating overlays outside of turfs. + T.lighting_overlay = src T.luminosity = 0 - -/atom/movable/lighting_overlay/proc/get_clamped_lum(var/minlum = 0, var/maxlum = 1) - var/lum = max(lum_r, lum_g, lum_b) - if(lum <= minlum) - return 0 - else if(lum >= maxlum) - return 1 - else - return (lum - minlum) / (maxlum - minlum) - -/atom/movable/lighting_overlay/proc/update_lumcount(delta_r, delta_g, delta_b) - if(!delta_r && !delta_g && !delta_b) //Nothing is being changed all together. + if(no_update) return - - var/should_update = 0 - - if(!needs_update) //If this isn't true, we're already updating anyways. - if(max(lum_r, lum_g, lum_b) < 1) //Any change that could happen WILL change appearance. - should_update = 1 - - else if(max(lum_r + delta_r, lum_g + delta_g, lum_b + delta_b) < 1) //The change would bring us under 1 max lum, again, guaranteed to change appearance. - should_update = 1 - - else //We need to make sure that the colour ratios won't change in this code block. - var/mx1 = max(lum_r, lum_g, lum_b) - var/mx2 = max(lum_r + delta_r, lum_g + delta_g, lum_b + delta_b) - - if(lum_r / mx1 != (lum_r + delta_r) / mx2 || lum_g / mx1 != (lum_g + delta_g) / mx2 || lum_b / mx1 != (lum_b + delta_b) / mx2) //Stuff would change. - should_update = 1 - - lum_r = max(lum_r + delta_r, 0) //Lum shouldn't drop below 1 - lum_g = max(lum_g + delta_g, 0) - lum_b = max(lum_b + delta_b, 0) - - if(!needs_update && should_update) - needs_update = 1 - lighting_update_overlays += src + update_overlay() /atom/movable/lighting_overlay/proc/update_overlay() + set waitfor = FALSE var/turf/T = loc - if(istype(T)) //Incase we're not on a turf, pool ourselves, something happened. - if(lum_r == lum_g && lum_r == lum_b) //greyscale - blend_mode = BLEND_OVERLAY - if(lum_r <= 0) - T.luminosity = 0 - color = "#000000" - alpha = 255 - else - T.luminosity = 1 - color = "#000000" - alpha = (1 - min(lum_r, 1)) * 255 + if(!istype(T)) + if(loc) + log_debug("A lighting overlay realised its loc was NOT a turf (actual loc: [loc][loc ? ", " + loc.type : "null"]) in update_overlay() and got qdel'ed!") else - alpha = 255 - var/mx = max(lum_r, lum_g, lum_b) - . = 1 // factor - if(mx > 1) - . = 1/mx - blend_mode = BLEND_MULTIPLY - color = rgb(lum_r * 255 * ., lum_g * 255 * ., lum_b * 255 * .) - if(color != "#000000") - T.luminosity = 1 - else //No light, set the turf's luminosity to 0 to remove it from view() - T.luminosity = 0 - else - //warning("A lighting overlay realised its loc was NOT a turf (actual loc: [loc][loc ? ", " + loc.type : "null"]) in update_overlay() and got qdel'ed!") //fucking bullshit bugs means this spams when shuttles move, feel free to fix - log_debug("A lighting overlay realised its loc was NOT a turf (actual loc: [loc][loc ? ", " + loc.type : "null"]) in update_overlay() and got qdel'ed!") + log_debug("A lighting overlay realised it was in nullspace in update_overlay() and got pooled!") qdel(src) + return + + // To the future coder who sees this and thinks + // "Why didn't he just use a loop?" + // Well my man, it's because the loop performed like shit. + // And there's no way to improve it because + // without a loop you can make the list all at once which is the fastest you're gonna get. + // Oh it's also shorter line wise. + // Including with these comments. + + // See LIGHTING_CORNER_DIAGONAL in lighting_corner.dm for why these values are what they are. + // No I seriously cannot think of a more efficient method, fuck off Comic. + var/datum/lighting_corner/cr = T.corners[3] || dummy_lighting_corner + var/datum/lighting_corner/cg = T.corners[2] || dummy_lighting_corner + var/datum/lighting_corner/cb = T.corners[4] || dummy_lighting_corner + var/datum/lighting_corner/ca = T.corners[1] || dummy_lighting_corner + + var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx) + + var/list/new_matrix = list( + cr.cache_r, cr.cache_g, cr.cache_b, 0, + cg.cache_r, cg.cache_g, cg.cache_b, 0, + cb.cache_r, cb.cache_g, cb.cache_b, 0, + ca.cache_r, ca.cache_g, ca.cache_b, 0, + 0, 0, 0, 1 + ) + var/lum = max > LIGHTING_SOFT_THRESHOLD + + if(lum) + luminosity = 1 + animate(src, color = new_matrix, time = 5) + else + animate(src, color = new_matrix, time = 5) + animate(luminosity = 0, time = 0) + + /atom/movable/lighting_overlay/singularity_act() return @@ -98,10 +84,13 @@ return /atom/movable/lighting_overlay/Destroy() - lighting_update_overlays -= src + global.all_lighting_overlays -= src + global.lighting_update_overlays -= src + global.lighting_update_overlays_old -= src var/turf/T = loc if(istype(T)) T.lighting_overlay = null + T.luminosity = 1 return ..() diff --git a/code/modules/lighting/lighting_process.dm b/code/modules/lighting/lighting_process.dm deleted file mode 100644 index 916920393ba..00000000000 --- a/code/modules/lighting/lighting_process.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/controller/process/lighting - var/last_light_count = 0 - var/last_overlay_count = 0 - -/datum/controller/process/lighting/doWork() - var/list/lighting_update_lights_old = lighting_update_lights //We use a different list so any additions to the update lists during a delay from SCHECK don't cause things to be cut from the list without being updated. - last_light_count = lighting_update_lights.len - lighting_update_lights = null //Nulling it first because of http://www.byond.com/forum/?post=1854520 - lighting_update_lights = list() - - for(var/datum/light_source/L in lighting_update_lights_old) - if(L.destroyed || L.check() || L.force_update) - L.remove_lum() - if(!L.destroyed) - L.apply_lum() - - else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() - - L.vis_update = 0 - L.force_update = 0 - L.needs_update = 0 - - SCHECK - - var/list/lighting_update_overlays_old = lighting_update_overlays //Same as above. - last_overlay_count = lighting_update_overlays.len - lighting_update_overlays = null //Same as above - lighting_update_overlays = list() - - for(var/atom/movable/lighting_overlay/O in lighting_update_overlays_old) - O.update_overlay() - O.needs_update = 0 - - SCHECK diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm new file mode 100644 index 00000000000..981de658649 --- /dev/null +++ b/code/modules/lighting/lighting_setup.dm @@ -0,0 +1,16 @@ +/proc/create_all_lighting_overlays() + for(var/zlevel = 1 to world.maxz) + create_lighting_overlays_zlevel(zlevel) + +/proc/create_lighting_overlays_zlevel(var/zlevel) + ASSERT(zlevel) + + for(var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))) + if(!T.dynamic_lighting) + continue + + var/area/A = T.loc + if(!A.dynamic_lighting) + continue + + new /atom/movable/lighting_overlay(T, TRUE) diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm new file mode 100644 index 00000000000..c26522dc5a7 --- /dev/null +++ b/code/modules/lighting/lighting_source.dm @@ -0,0 +1,283 @@ +// This is where the fun begins. +// These are the main datums that emit light. + +/datum/light_source + var/atom/top_atom // The atom we're emitting light from(for example a mob if we're from a flashlight that's being held). + var/atom/source_atom // The atom that we belong to. + + var/turf/source_turf // The turf under the above. + var/light_power // Intensity of the emitter light. + var/light_range // The range of the emitted light. + var/light_color // The colour of the light, string, decomposed by parse_light_color() + + // Variables for keeping track of the colour. + var/lum_r + var/lum_g + var/lum_b + + // The lumcount values used to apply the light. + var/tmp/applied_lum_r + var/tmp/applied_lum_g + var/tmp/applied_lum_b + + var/list/datum/lighting_corner/effect_str // List used to store how much we're affecting corners. + var/list/turf/affecting_turfs + + var/applied = FALSE // Whether we have applied our light yet or not. + + var/vis_update // Whether we should smartly recalculate visibility. and then only update tiles that became(in)visible to us. + var/needs_update // Whether we are queued for an update. + var/destroyed // Whether we are destroyed and need to stop emitting light. + var/force_update + +/datum/light_source/New(var/atom/owner, var/atom/top) + source_atom = owner // Set our new owner. + if(!source_atom.light_sources) + source_atom.light_sources = list() + + source_atom.light_sources += src // Add us to the lights of our owner. + top_atom = top + if(top_atom != source_atom) + if(!top.light_sources) + top.light_sources = list() + + top_atom.light_sources += src + + source_turf = top_atom + light_power = source_atom.light_power + light_range = source_atom.light_range + light_color = source_atom.light_color + + parse_light_color() + + effect_str = list() + affecting_turfs = list() + + update() + + return ..() + +// Kill ourselves. +/datum/light_source/proc/destroy() + destroyed = TRUE + force_update() + if(source_atom) + source_atom.light_sources -= src + + if(top_atom) + top_atom.light_sources -= src + +// Call it dirty, I don't care. +// This is here so there's no performance loss on non-instant updates from the fact that the engine can also do instant updates. +// If you're wondering what's with the "BYOND" argument: BYOND won't let me have a() macro that has no arguments :|. +#define effect_update(BYOND) \ + if(!needs_update) \ + { \ + lighting_update_lights += src; \ + needs_update = TRUE; \ + } + +// This proc will cause the light source to update the top atom, and add itself to the update queue. +/datum/light_source/proc/update(var/atom/new_top_atom) + // This top atom is different. + if(new_top_atom && new_top_atom != top_atom) + if(top_atom != source_atom) // Remove ourselves from the light sources of that top atom. + top_atom.light_sources -= src + + top_atom = new_top_atom + + if(top_atom != source_atom) + if(!top_atom.light_sources) + top_atom.light_sources = list() + + top_atom.light_sources += src // Add ourselves to the light sources of our new top atom. + + effect_update(null) + +// Will force an update without checking if it's actually needed. +/datum/light_source/proc/force_update() + force_update = 1 + + effect_update(null) + +// Will cause the light source to recalculate turfs that were removed or added to visibility only. +/datum/light_source/proc/vis_update() + vis_update = 1 + + effect_update(null) + +// Will check if we actually need to update, and update any variables that may need to be updated. +/datum/light_source/proc/check() + if(!source_atom || !light_range || !light_power) + destroy() + return 1 + + if(!top_atom) + top_atom = source_atom + . = 1 + + if(isturf(top_atom)) + if(source_turf != top_atom) + source_turf = top_atom + . = 1 + else if(top_atom.loc != source_turf) + source_turf = top_atom.loc + . = 1 + + if(source_atom.light_power != light_power) + light_power = source_atom.light_power + . = 1 + + if(source_atom.light_range != light_range) + light_range = source_atom.light_range + . = 1 + + if(light_range && light_power && !applied) + . = 1 + + if(source_atom.light_color != light_color) + light_color = source_atom.light_color + parse_light_color() + . = 1 + +// Decompile the hexadecimal colour into lumcounts of each perspective. +/datum/light_source/proc/parse_light_color() + if(light_color) + lum_r = GetRedPart (light_color) / 255 + lum_g = GetGreenPart(light_color) / 255 + lum_b = GetBluePart (light_color) / 255 + else + lum_r = 1 + lum_g = 1 + lum_b = 1 + +// Macro that applies light to a new corner. +// It is a macro in the interest of speed, yet not having to copy paste it. +// If you're wondering what's with the backslashes, the backslashes cause BYOND to not automatically end the line. +// As such this all gets counted as a single line. +// The braces and semicolons are there to be able to do this on a single line. + +#define APPLY_CORNER(C) \ + . = LUM_FALLOFF(C, source_turf); \ + \ + . *= light_power; \ + \ + effect_str[C] = .; \ + \ + C.update_lumcount \ + ( \ + . * applied_lum_r, \ + . * applied_lum_g, \ + . * applied_lum_b \ + ); + +// I don't need to explain what this does, do I? +#define REMOVE_CORNER(C) \ + . = -effect_str[C]; \ + C.update_lumcount \ + ( \ + . * applied_lum_r, \ + . * applied_lum_g, \ + . * applied_lum_b \ + ); + +// This is the define used to calculate falloff. +#define LUM_FALLOFF(C, T)(1 - CLAMP01(sqrt((C.x - T.x) ** 2 +(C.y - T.y) ** 2 + LIGHTING_HEIGHT) / max(1, light_range))) + +/datum/light_source/proc/apply_lum() + var/static/update_gen = 1 + applied = 1 + + // Keep track of the last applied lum values so that the lighting can be reversed + applied_lum_r = lum_r + applied_lum_g = lum_g + applied_lum_b = lum_b + + FOR_DVIEW(var/turf/T, light_range, source_turf, INVISIBILITY_LIGHTING) + if(!T.lighting_corners_initialised) + T.generate_missing_corners() + + for(var/datum/lighting_corner/C in T.get_corners()) + if(C.update_gen == update_gen) + continue + + C.update_gen = update_gen + C.affecting += src + + if(!C.active) + effect_str[C] = 0 + continue + + APPLY_CORNER(C) + + if(!T.affecting_lights) + T.affecting_lights = list() + + T.affecting_lights += src + affecting_turfs += T + + update_gen++ + +/datum/light_source/proc/remove_lum() + applied = FALSE + + for(var/turf/T in affecting_turfs) + if(!T.affecting_lights) + T.affecting_lights = list() + else + T.affecting_lights -= src + + affecting_turfs.Cut() + + for(var/datum/lighting_corner/C in effect_str) + REMOVE_CORNER(C) + + C.affecting -= src + + effect_str.Cut() + +/datum/light_source/proc/recalc_corner(var/datum/lighting_corner/C) + if(effect_str.Find(C)) // Already have one. + REMOVE_CORNER(C) + + APPLY_CORNER(C) + +/datum/light_source/proc/smart_vis_update() + var/list/datum/lighting_corner/corners = list() + var/list/turf/turfs = list() + FOR_DVIEW(var/turf/T, light_range, source_turf, 0) + if(!T.lighting_corners_initialised) + T.generate_missing_corners() + corners |= T.get_corners() + turfs += T + + var/list/L = turfs - affecting_turfs // New turfs, add us to the affecting lights of them. + affecting_turfs += L + for(var/turf/T in L) + if(!T.affecting_lights) + T.affecting_lights = list(src) + else + T.affecting_lights += src + + L = affecting_turfs - turfs // Now-gone turfs, remove us from the affecting lights. + affecting_turfs -= L + for(var/turf/T in L) + T.affecting_lights -= src + + for(var/datum/lighting_corner/C in corners - effect_str) // New corners + C.affecting += src + if(!C.active) + effect_str[C] = 0 + continue + + APPLY_CORNER(C) + + for(var/datum/lighting_corner/C in effect_str - corners) // Old, now gone, corners. + REMOVE_CORNER(C) + C.affecting -= src + effect_str -= C + +#undef effect_update +#undef LUM_FALLOFF +#undef REMOVE_CORNER +#undef APPLY_CORNER diff --git a/code/modules/lighting/lighting_system.dm b/code/modules/lighting/lighting_system.dm deleted file mode 100644 index bdad6316395..00000000000 --- a/code/modules/lighting/lighting_system.dm +++ /dev/null @@ -1,25 +0,0 @@ -/var/list/lighting_update_lights = list() -/var/list/lighting_update_overlays = list() - -/area/var/lighting_use_dynamic = 1 - -// duplicates lots of code, but this proc needs to be as fast as possible. -/proc/create_lighting_overlays(zlevel = 0) - var/area/A - if(zlevel == 0) // populate all zlevels - for(var/turf/T in world) - if(T.dynamic_lighting) - A = T.loc - if(A.lighting_use_dynamic) - var/atom/movable/lighting_overlay/O = new(T) - T.lighting_overlay = O - - else - for(var/x = 1; x <= world.maxx; x++) - for(var/y = 1; y <= world.maxy; y++) - var/turf/T = locate(x, y, zlevel) - if(T.dynamic_lighting) - A = T.loc - if(A.lighting_use_dynamic) - var/atom/movable/lighting_overlay/O = new(T) - T.lighting_overlay = O \ No newline at end of file diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 53d9ab0455c..ddb934aed61 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -1,26 +1,102 @@ /turf - var/list/affecting_lights - var/atom/movable/lighting_overlay/lighting_overlay + var/dynamic_lighting = TRUE + luminosity = 1 + var/tmp/lighting_corners_initialised = FALSE + + var/tmp/list/datum/light_source/affecting_lights // List of light sources affecting this turf. + var/tmp/atom/movable/lighting_overlay/lighting_overlay // Our lighting overlay. + var/tmp/list/datum/lighting_corner/corners + var/tmp/has_opaque_atom = FALSE // Not to be confused with opacity, this will be TRUE if there's any opaque atom on the tile. + +/turf/New() + . = ..() + + if(opacity) + has_opaque_atom = TRUE + +// Causes any affecting light sources to be queued for a visibility update, for example a door got opened. /turf/proc/reconsider_lights() for(var/datum/light_source/L in affecting_lights) L.vis_update() -/turf/proc/lighting_clear_overlays() +/turf/proc/lighting_clear_overlay() if(lighting_overlay) qdel(lighting_overlay) -/turf/proc/lighting_build_overlays() + for(var/datum/lighting_corner/C in corners) + C.update_active() + +// Builds a lighting overlay for us, but only if our area is dynamic. +/turf/proc/lighting_build_overlay() if(lighting_overlay) return var/area/A = loc - if(A.lighting_use_dynamic) - var/atom/movable/lighting_overlay/O = new(src) - lighting_overlay = O - // forcibly refresh lighting on this tile - // must make light forget tile or it wil remain - // convinced that it is already lighting it - for(var/datum/light_source/L in affecting_lights) - L.forget_turf(src) - L.vis_update() \ No newline at end of file + if(A.dynamic_lighting) + if(!lighting_corners_initialised) + generate_missing_corners() + + new /atom/movable/lighting_overlay(src) + + for(var/datum/lighting_corner/C in corners) + if(!C.active) // We would activate the corner, calculate the lighting for it. + for(var/L in C.affecting) + var/datum/light_source/S = L + S.recalc_corner(C) + + C.active = TRUE + +// Used to get a scaled lumcount. +/turf/proc/get_lumcount(var/minlum = 0, var/maxlum = 1) + if(!lighting_overlay) + return 1 + + var/totallums = 0 + for(var/datum/lighting_corner/L in corners) + totallums += max(L.lum_r, L.lum_g, L.lum_b) + + totallums /= 4 // 4 corners, max channel selected, return the average + + totallums =(totallums - minlum) /(maxlum - minlum) + + return CLAMP01(totallums) + +// Can't think of a good name, this proc will recalculate the has_opaque_atom variable. +/turf/proc/recalc_atom_opacity() + has_opaque_atom = FALSE + for(var/atom/A in src.contents + src) // Loop through every movable atom on our tile PLUS ourselves (we matter too...) + if(A.opacity) + has_opaque_atom = TRUE + +// If an opaque movable atom moves around we need to potentially update visibility. +/turf/Entered(var/atom/movable/Obj, var/atom/OldLoc) + . = ..() + + if(Obj && Obj.opacity) + has_opaque_atom = TRUE // Make sure to do this before reconsider_lights(), incase we're on instant updates. Guaranteed to be on in this case. + reconsider_lights() + +/turf/Exited(var/atom/movable/Obj, var/atom/newloc) + . = ..() + + if(Obj && Obj.opacity) + recalc_atom_opacity() // Make sure to do this before reconsider_lights(), incase we're on instant updates. + reconsider_lights() + +/turf/proc/get_corners() + if(has_opaque_atom) + return null // Since this proc gets used in a for loop, null won't be looped though. + + return corners + +/turf/proc/generate_missing_corners() + lighting_corners_initialised = TRUE + if(!corners) + corners = list(null, null, null, null) + + for(var/i = 1 to 4) + if(corners[i]) // Already have a corner on this direction. + continue + + corners[i] = new /datum/lighting_corner(src, LIGHTING_CORNER_DIAGONAL[i]) diff --git a/code/modules/lighting/~lighting_undefs.dm b/code/modules/lighting/~lighting_undefs.dm index 09100322b8a..2de3f9dbe26 100644 --- a/code/modules/lighting/~lighting_undefs.dm +++ b/code/modules/lighting/~lighting_undefs.dm @@ -1,9 +1,7 @@ -#undef LIGHTING_INTERVAL - #undef LIGHTING_FALLOFF #undef LIGHTING_LAMBERTIAN #undef LIGHTING_HEIGHT -#undef LIGHTING_RESOLUTION -#undef LIGHTING_LAYER -#undef LIGHTING_ICON \ No newline at end of file +#undef LIGHTING_ICON + +#undef LIGHTING_BASE_MATRIX diff --git a/code/modules/mob/living/simple_animal/posessed_object.dm b/code/modules/mob/living/simple_animal/posessed_object.dm index 70ea452381d..1473bd5990a 100644 --- a/code/modules/mob/living/simple_animal/posessed_object.dm +++ b/code/modules/mob/living/simple_animal/posessed_object.dm @@ -103,7 +103,7 @@ dir = possessed_item.dir color = possessed_item.color overlays = possessed_item.overlays - opacity = possessed_item.opacity + set_opacity(possessed_item.opacity) visible_message("[src] rises into the air and begins to float!") // Inform those around us that shit's gettin' spooky. animate_ghostly_presence(src, -1, 20, 1) diff --git a/code/modules/power/supermatter/wall.dm b/code/modules/power/supermatter/wall.dm index e8997dee07c..afadcb23a46 100644 --- a/code/modules/power/supermatter/wall.dm +++ b/code/modules/power/supermatter/wall.dm @@ -49,7 +49,7 @@ icon_state = "smatter" temperature = T20C+80 density = 1 - opacity = 1 + set_opacity(1) blocks_air = 1 spawn(2) diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi deleted file mode 100644 index a5bee534b3d7b84ebea980f30a17928e59d45c54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^2|(M5>u zb$SmDFfy#+2=v)-;Uvh8NW&Hj9u{oJD8zyJ38|NQOa z|M-u;{hjmky?xmq8}>77#ec@IUtGUa@plf}ajk^;9)r~m<`{nLsNF2OdGx_rY3A96 zWwR9@KGZP&dj?k!_@MxP`89$47XoiqfPb^<8{l_T-46&HRgVq^@fTWi|u4@}5K=9BMP`7XFfwUSsJI_mEWW(PCeh02& zNn|@X0Zjqdt-wdi7E1uvIVX_Dg_zyjxLsR=04I?4)&vMoe@{5NZ|_WYuexV8bdMw_ z&@_QA0ZbqPZ4k(UySG5!=(=I=@@j&;6`0+l<|&{l_`4(sME8`S0Kk+83glVQJ(ocO zgw_Q7g1fb#04kw5DB*&Sq{JmqVAgR4YfH&VwI zYSle5C?OFFa1Vs-P4 zXaf5TCA8^OIRy$ZfTMH3Id(`;0M{oRQ6a0nnn6DWZw0pHIYOQO{TB!C=9 zTLKlqmF*74#$&b#?*-3-r*GJ505g{WM~@J`AxAr~0ShX4KLp0_3qGL>e&9&E;C;iX z-D50?+%U|ZnOjNN23#K{z)g7YNAQCZ*;xVZ5IMN!+HC9|Y74&Y60i*?vEU^!2%q4_ zD)=aPh21}FL*Lt+z;XWUgYXr~0IqNl3VK2`+F=;5gy-I3)xhkE$9y^Qd}G-~rq=C~%w;0NlD`C$y3P7zx59flY=S zvDRK|e!?$kRjfClT@`z|psa^u_)hdgOK@lp?6n~^f#y*H9t87rV-1~fTxZ_rA8US0 zXw`fKps}s4QM*4<0_eK48YZA!@W6iM1lakE;JctYTC>19WTNhEopcxcHuhB5wIn*O z0|HxnVpU6`Yy1HFhXA^7E0FL?@=R~*eDBIUV7Sxc-{H^D_=E6gPB5ncI7HBW<*6y0 z0@gHvJOyxc=6bLY>hpLVXZLBJYaTNh@x-Z(3B*$q=oEoKqk!_jbMR@r8QUdbf}1;^ zTodk9*F$BUa5`kV?(vqJI&U3aZzX{1fP}z+ati22*AyUpTmsyL=$zn!U&-}IJ)dfl z5SX_Zg7*M+FOlrp`2aDE-9KZ31z!_rl<=3PP!nMHt_h4w01ps=^XwkaaUHAce80dA zw^|FrYZ47(_bGv(``1_k?ypf3P`w1uJ>L@-9Ot#`Io<%z^+;V$HNo*JnsvXoz`OCr zO4x!wMpeNv%onEcLZ1|Q0d=2%Q-E(ulz>3JFb;J;_+m{c-}G2{u6K5>^W6gz2*8+{ z0Q?sm9V-()!|ov>3D+Jd@cFhnZf~$DfhEyZ0Ua3y_o_-e1g^AOZg6M!EA|C}FMX8o zCDkqouD8JEHvvn2a%}qk@#-F*A*>I48$GxTgVjpFX7`e?w%}hty};lUZUXohQ}<=U z?)l+>7YR!A`nCy4SbeJjr|xgm*~ z0>LZw1qdj!X#?W(6zLP(pGLUAt-yv`&ua6rd%;WKTOX!&&jPP++HrpG-lDE=>5qS= iJ#V4J*JlhL?0*5J6wAQ~73C2C0000 Date: Sun, 5 Feb 2017 20:36:04 +0100 Subject: [PATCH 018/122] Prevent signing own blood contract, prevent megafauna from healing on station, prevent hierophant teleports from going to Central Command --- code/modules/mining/lavaland/necropolis_chests.dm | 4 ++++ .../mob/living/simple_animal/hostile/megafauna/megafauna.dm | 3 ++- code/modules/shuttle/supply.dm | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 649a868077d..1a5866a5e4a 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -344,6 +344,10 @@ to_chat(user, "[choice] is already dead!") used = FALSE return + else if(choice == user) + user << "You feel like writing your own name into a cursed death warrant would be unwise." + used = FALSE + return else var/mob/living/L = choice diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 11d6b68aeec..bd916532519 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -95,7 +95,8 @@ visible_message( "[src] devours [L]!", "You feast on [L], restoring your health!") - adjustBruteLoss(-L.maxHealth/2) + if(!is_station_level(z) && !client) //NPC monsters won't heal while on station + adjustBruteLoss(-L.maxHealth/2) L.gib() /mob/living/simple_animal/hostile/megafauna/ex_act(severity, target) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index f7b5a36e1a9..afa7bdc3cd1 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -246,7 +246,8 @@ /obj/machinery/teleport/station, /obj/machinery/teleport/hub, /obj/machinery/telepad, - /obj/machinery/clonepod + /obj/machinery/clonepod, + /obj/effect/hierophant ) if(A) if(is_type_in_list(A, blacklist)) From 72aec0f9f1f85d368db8dff4a868be25ab5a7a2b Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 6 Feb 2017 01:02:03 +0100 Subject: [PATCH 019/122] Add shared storage and godeye items, split Lavaland loot files --- code/modules/clothing/glasses/glasses.dm | 25 + .../mining/lavaland/loot/ashdragon_loot.dm | 215 +++++++ .../mining/lavaland/loot/bubblegum_loot.dm | 81 +++ .../lavaland/{ => loot}/colossus_loot.dm | 0 .../mining/lavaland/loot/hierophant_loot.dm | 188 ++++++ .../mining/lavaland/loot/legion_loot.dm | 52 ++ .../mining/lavaland/loot/tendril_loot.dm | 105 ++++ .../mining/lavaland/necropolis_chests.dm | 558 +----------------- icons/mob/eyes.dmi | Bin 13074 -> 14211 bytes icons/obj/clothing/glasses.dmi | Bin 9199 -> 11393 bytes paradise.dme | 7 +- 11 files changed, 675 insertions(+), 556 deletions(-) create mode 100644 code/modules/mining/lavaland/loot/ashdragon_loot.dm create mode 100644 code/modules/mining/lavaland/loot/bubblegum_loot.dm rename code/modules/mining/lavaland/{ => loot}/colossus_loot.dm (100%) create mode 100644 code/modules/mining/lavaland/loot/hierophant_loot.dm create mode 100644 code/modules/mining/lavaland/loot/legion_loot.dm create mode 100644 code/modules/mining/lavaland/loot/tendril_loot.dm diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 4fde338ba54..adc7d61e76e 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -498,3 +498,28 @@ name = "gar glasses" icon_state = "gar" item_state = "gar" + +/obj/item/clothing/glasses/godeye + name = "eye of god" + desc = "A strange eye, said to have been torn from an omniscient creature that used to roam the wastes." + icon_state = "godeye" + item_state = "godeye" + vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS + darkness_view = 8 + scan_reagents = 1 + flags = NODROP + invis_view = SEE_INVISIBLE_MINIMUM + +/obj/item/clothing/glasses/godeye/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + if(istype(W, src) && W != src && W.loc == user) + if(W.icon_state == "godeye") + W.icon_state = "doublegodeye" + W.item_state = "doublegodeye" + W.desc = "A pair of strange eyes, said to have been torn from an omniscient creature that used to roam the wastes. There's no real reason to have two, but that isn't stopping you." + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.update_inv_wear_mask() + else + user << "The eye winks at you and vanishes into the abyss, you feel really unlucky." + qdel(src) + ..() \ No newline at end of file diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm new file mode 100644 index 00000000000..27a703b7443 --- /dev/null +++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm @@ -0,0 +1,215 @@ +/obj/structure/closet/crate/necropolis/dragon + name = "dragon chest" + +/obj/structure/closet/crate/necropolis/dragon/New() + ..() + var/loot = rand(1,4) + switch(loot) + if(1) + new /obj/item/weapon/melee/ghost_sword(src) + if(2) + new /obj/item/weapon/lava_staff(src) + if(3) + new /obj/item/weapon/spellbook/oneuse/sacredflame(src) + new /obj/item/weapon/gun/magic/wand/fireball(src) + if(4) + new /obj/item/weapon/dragons_blood(src) + +// Spectral Blade + +/obj/item/weapon/melee/ghost_sword + name = "spectral blade" + desc = "A rusted and dulled blade. It doesn't look like it'd do much damage. It glows weakly." + icon_state = "spectral" + item_state = "spectral" + flags = CONDUCT + sharp = 1 + edge = 1 + w_class = 4 + force = 1 + throwforce = 1 + hitsound = 'sound/effects/ghost2.ogg' + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended") + var/summon_cooldown = 0 + var/list/mob/dead/observer/spirits + +/obj/item/weapon/melee/ghost_sword/New() + ..() + spirits = list() + processing_objects.Add(src) + poi_list |= src + +/obj/item/weapon/melee/ghost_sword/Destroy() + for(var/mob/dead/observer/G in spirits) + G.invisibility = initial(G.invisibility) + spirits.Cut() + processing_objects.Remove(src) + poi_list -= src + . = ..() + +/obj/item/weapon/melee/ghost_sword/attack_self(mob/user) + if(summon_cooldown > world.time) + to_chat(user, "You just recently called out for aid. You don't want to annoy the spirits.") + return + to_chat(user, "You call out for aid, attempting to summon spirits to your side.") + + notify_ghosts("[user] is raising their [src], calling for your help!", enter_link="(Click to help)", source = user, action = NOTIFY_FOLLOW) + + summon_cooldown = world.time + 600 + +/obj/item/weapon/melee/ghost_sword/Topic(href, href_list) + if(href_list["follow"]) + var/mob/dead/observer/ghost = usr + if(istype(ghost)) + ghost.ManualFollow(src) + +/obj/item/weapon/melee/ghost_sword/process() + ghost_check() + +/obj/item/weapon/melee/ghost_sword/proc/ghost_check() + var/ghost_counter = 0 + var/turf/T = get_turf(src) + var/list/contents = T.GetAllContents() + var/mob/dead/observer/current_spirits = list() + + for(var/mob/dead/observer/O in player_list) + if(is_type_in_list(O.following, contents)) + ghost_counter++ + O.invisibility = 0 + current_spirits |= O + + for(var/mob/dead/observer/G in spirits - current_spirits) + G.invisibility = initial(G.invisibility) + + spirits = current_spirits + + return ghost_counter + +/obj/item/weapon/melee/ghost_sword/attack(mob/living/target, mob/living/carbon/human/user) + force = 0 + var/ghost_counter = ghost_check() + + force = Clamp((ghost_counter * 4), 0, 75) + user.visible_message("[user] strikes with the force of [ghost_counter] vengeful spirits!") + ..() + +/obj/item/weapon/melee/ghost_sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type) + var/ghost_counter = ghost_check() + final_block_chance += Clamp((ghost_counter * 5), 0, 75) + owner.visible_message("[owner] is protected by a ring of [ghost_counter] ghosts!") + return ..() + +// Blood + +/obj/item/weapon/dragons_blood + name = "bottle of dragons blood" + desc = "You're not actually going to drink this, are you?" + icon = 'icons/obj/wizard.dmi' + icon_state = "vial" + +/obj/item/weapon/dragons_blood/attack_self(mob/living/carbon/human/user) + if(!istype(user)) + return + + var/mob/living/carbon/human/H = user + var/random = rand(1,3) + + switch(random) + if(1) + to_chat(user, "Your flesh begins to melt! Miraculously, you seem fine otherwise.") + H.set_species("Skeleton") + if(2) + to_chat(user, "Power courses through you! You can now shift your form at will.") + if(user.mind) + var/obj/effect/proc_holder/spell/targeted/shapeshift/dragon/D = new + user.mind.AddSpell(D) + if(3) + to_chat(user, "You feel like you could walk straight through lava now.") + H.weather_immunities |= "lava" + + playsound(user.loc,'sound/items/drink.ogg', rand(10,50), 1) + qdel(src) + +/datum/disease/transformation/dragon + name = "dragon transformation" + cure_text = "nothing" + cures = list("adminordrazine") + agent = "dragon's blood" + desc = "What do dragons have to do with Space Station 13?" + stage_prob = 20 + severity = BIOHAZARD + visibility_flags = 0 + stage1 = list("Your bones ache.") + stage2 = list("Your skin feels scaley.") + stage3 = list("You have an overwhelming urge to terrorize some peasants.", "Your teeth feel sharper.") + stage4 = list("Your blood burns.") + stage5 = list("You're a fucking dragon. However, any previous allegiances you held still apply. It'd be incredibly rude to eat your still human friends for no reason.") + new_form = /mob/living/simple_animal/hostile/megafauna/dragon/lesser + +//Lava Staff + +/obj/item/weapon/lava_staff + name = "staff of lava" + desc = "The ability to fill the emergency shuttle with lava. What more could you want out of life?" + icon_state = "staffofstorms" + item_state = "staffofstorms" + icon = 'icons/obj/guns/magic.dmi' + slot_flags = SLOT_BACK + item_state = "staffofstorms" + w_class = 4 + force = 25 + damtype = BURN + hitsound = 'sound/weapons/sear.ogg' + var/turf_type = /turf/unsimulated/floor/lava // /turf/simulated/floor/plating/lava/smooth once Lavaland turfs are added + var/transform_string = "lava" + var/reset_turf_type = /turf/simulated/floor/plating/airless/asteroid // /turf/simulated/floor/plating/asteroid/basalt once Lavaland turfs are added + var/reset_string = "basalt" + var/create_cooldown = 100 + var/create_delay = 30 + var/reset_cooldown = 50 + var/timer = 0 + var/banned_turfs + +/obj/item/weapon/lava_staff/New() + . = ..() + banned_turfs = typecacheof(list(/turf/space/transit, /turf/unsimulated)) + +/obj/item/weapon/lava_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + ..() + if(timer > world.time) + return + + if(is_type_in_typecache(target, banned_turfs)) + return + + if(target in view(user.client.view, get_turf(user))) + + var/turf/simulated/T = get_turf(target) + if(!istype(T)) + return + if(!istype(T, turf_type)) + var/obj/effect/overlay/temp/lavastaff/L = new /obj/effect/overlay/temp/lavastaff(T) + L.alpha = 0 + animate(L, alpha = 255, time = create_delay) + user.visible_message("[user] points [src] at [T]!") + timer = world.time + create_delay + 1 + if(do_after(user, create_delay, target = T)) + user.visible_message("[user] turns \the [T] into [transform_string]!") + message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (JMP).") + log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).") + T.ChangeTurf(turf_type) + timer = world.time + create_cooldown + qdel(L) + else + timer = world.time + qdel(L) + return + else + user.visible_message("[user] turns \the [T] into [reset_string]!") + T.ChangeTurf(reset_turf_type) + timer = world.time + reset_cooldown + playsound(T,'sound/magic/Fireball.ogg', 200, 1) + +/obj/effect/overlay/temp/lavastaff + icon_state = "lavastaff_warn" + duration = 50 \ No newline at end of file diff --git a/code/modules/mining/lavaland/loot/bubblegum_loot.dm b/code/modules/mining/lavaland/loot/bubblegum_loot.dm new file mode 100644 index 00000000000..fbc5ec2d945 --- /dev/null +++ b/code/modules/mining/lavaland/loot/bubblegum_loot.dm @@ -0,0 +1,81 @@ +/obj/structure/closet/crate/necropolis/bubblegum + name = "bubblegum chest" + +/obj/structure/closet/crate/necropolis/bubblegum/New() + ..() + var/loot = rand(1,3) + switch(loot) + if(1) + new /obj/item/mayhem(src) + if(2) + new /obj/item/blood_contract(src) + if(3) + new /obj/item/weapon/gun/magic/staff/spellblade(src) + +// Mayhem + +/obj/item/mayhem + name = "mayhem in a bottle" + desc = "A magically infused bottle of blood, the scent of which will drive anyone nearby into a murderous frenzy." + icon = 'icons/obj/wizard.dmi' + icon_state = "vial" + +/obj/item/mayhem/attack_self(mob/user) + for(var/mob/living/carbon/human/H in range(7,user)) + spawn() + var/obj/effect/mine/pickup/bloodbath/B = new(H) + B.mineEffect(H) + to_chat(user, "You shatter the bottle!") + playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) + qdel(src) + +// Blood Contract + +/obj/item/blood_contract + name = "blood contract" + icon = 'icons/obj/wizard.dmi' + icon_state = "scroll2" + color = "#FF0000" + desc = "Mark your target for death." + var/used = FALSE + +/obj/item/blood_contract/attack_self(mob/user) + if(used) + return + + used = TRUE + var/choice = input(user,"Who do you want dead?","Choose Your Victim") as null|anything in player_list + + if(!choice) + used = FALSE + return + else if(!isliving(choice)) + to_chat(user, "[choice] is already dead!") + used = FALSE + return + else if(choice == user) + user << "You feel like writing your own name into a cursed death warrant would be unwise." + used = FALSE + return + else + var/mob/living/L = choice + + message_admins("[key_name_admin(L)] has been marked for death by [key_name_admin(user)].") + log_admin("[key_name(L)] has been marked for death by [key_name(user)].") + + var/datum/objective/survive/survive = new + survive.owner = L.mind + L.mind.objectives += survive + to_chat(L, "You've been marked for death! Don't let the demons get you!") + L.color = "#FF0000" + spawn() + var/obj/effect/mine/pickup/bloodbath/B = new(L) + B.mineEffect(L) + + for(var/mob/living/carbon/human/H in player_list) + if(H == L) + continue + to_chat(H, "You have an overwhelming desire to kill [L]. They have been marked red! Go kill them!") + H.put_in_hands(new /obj/item/weapon/kitchen/knife/butcher(H)) + + qdel(src) \ No newline at end of file diff --git a/code/modules/mining/lavaland/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm similarity index 100% rename from code/modules/mining/lavaland/colossus_loot.dm rename to code/modules/mining/lavaland/loot/colossus_loot.dm diff --git a/code/modules/mining/lavaland/loot/hierophant_loot.dm b/code/modules/mining/lavaland/loot/hierophant_loot.dm new file mode 100644 index 00000000000..f06fd25d428 --- /dev/null +++ b/code/modules/mining/lavaland/loot/hierophant_loot.dm @@ -0,0 +1,188 @@ +/obj/item/weapon/hierophant_staff + name = "Hierophant's staff" + desc = "A large club with intense magic power infused into it." + icon_state = "hierophant_staff" + item_state = "hierophant_staff" + icon = 'icons/obj/guns/magic.dmi' + slot_flags = SLOT_BACK + w_class = 4 + force = 20 + hitsound = "swing_hit" + //hitsound = 'sound/weapons/sonic_jackhammer.ogg' + actions_types = list(/datum/action/item_action/vortex_recall, /datum/action/item_action/toggle_unfriendly_fire) + var/cooldown_time = 20 //how long the cooldown between non-melee ranged attacks is + var/chaser_cooldown = 101 //how long the cooldown between firing chasers at mobs is + var/chaser_timer = 0 //what our current chaser cooldown is + var/timer = 0 //what our current cooldown is + var/blast_range = 3 //how long the cardinal blast's walls are + var/obj/effect/hierophant/rune //the associated rune we teleport to + var/teleporting = FALSE //if we ARE teleporting + var/friendly_fire_check = FALSE //if the blasts we make will consider our faction against the faction of hit targets + +/obj/item/weapon/hierophant_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + ..() + var/turf/T = get_turf(target) + if(!T || timer > world.time) + return + timer = world.time + CLICK_CD_MELEE //by default, melee attacks only cause melee blasts, and have an accordingly short cooldown + if(proximity_flag) + spawn(0) + aoe_burst(T, user) + add_logs(user, target, "fired 3x3 blast at", src) + else + if(ismineralturf(target) && get_dist(user, target) < 6) //target is minerals, we can hit it(even if we can't see it) + spawn(0) + cardinal_blasts(T, user) + timer = world.time + cooldown_time + else if(target in view(5, get_turf(user))) //if the target is in view, hit it + timer = world.time + cooldown_time + if(isliving(target) && chaser_timer <= world.time) //living and chasers off cooldown? fire one! + chaser_timer = world.time + chaser_cooldown + new /obj/effect/overlay/temp/hierophant/chaser(get_turf(user), user, target, 1.5, friendly_fire_check) + add_logs(user, target, "fired a chaser at", src) + else + spawn(0) + cardinal_blasts(T, user) //otherwise, just do cardinal blast + add_logs(user, target, "fired cardinal blast at", src) + else + to_chat(user, "That target is out of range!") //too far away + +/obj/item/weapon/hierophant_staff/ui_action_click(mob/user, actiontype) + if(actiontype == /datum/action/item_action/toggle_unfriendly_fire) //toggle friendly fire... + friendly_fire_check = !friendly_fire_check + to_chat(user, "You toggle friendly fire [friendly_fire_check ? "off":"on"]!") + return + if(user.get_active_hand() != src && user.get_inactive_hand() != src) //you need to hold the staff to teleport + to_chat(user, "You need to hold the staff in your hands to [rune ? "teleport with it" : "create a rune"]!") + return + if(!rune) + if(isturf(user.loc)) + user.visible_message("[user] holds [src] carefully in front of them, moving it in a strange pattern...", \ + "You start creating a hierophant rune to teleport to...") + timer = world.time + 51 + if(do_after(user, 50, target = user)) + var/turf/T = get_turf(user) + playsound(T,'sound/magic/Blind.ogg', 200, 1, -4) + new /obj/effect/overlay/temp/hierophant/telegraph/teleport(T, user) + var/obj/effect/hierophant/H = new/obj/effect/hierophant(T) + rune = H + user.update_action_buttons_icon() + user.visible_message("[user] creates a strange rune beneath them!", \ + "You create a hierophant rune, which you can teleport yourself and any allies to at any time!\n\ + You can remove the rune to place a new one by striking it with the staff.") + else + timer = world.time + else + to_chat(user, "You need to be on solid ground to produce a rune!") + return + if(get_dist(user, rune) <= 2) //rune too close abort + to_chat(user, "You are too close to the rune to teleport to it!") + return + if(is_blocked_turf(get_turf(rune))) + to_chat(user, "The rune is blocked by something, preventing teleportation!") + return + teleporting = TRUE //start channel + user.update_action_buttons_icon() + user.visible_message("[user] starts to glow faintly...") + timer = world.time + 50 + if(do_after(user, 40, target = user) && rune) + var/turf/T = get_turf(rune) + var/turf/source = get_turf(user) + if(is_blocked_turf(T)) + teleporting = FALSE + to_chat(user, "The rune is blocked by something, preventing teleportation!") + user.update_action_buttons_icon() + return + new /obj/effect/overlay/temp/hierophant/telegraph(T, user) + new /obj/effect/overlay/temp/hierophant/telegraph(source, user) + playsound(T,'sound/magic/blink.ogg', 200, 1) + //playsound(T,'sound/magic/Wand_Teleport.ogg', 200, 1) + playsound(source,'sound/magic/blink.ogg', 200, 1) + //playsound(source,'sound/machines/AirlockOpen.ogg', 200, 1) + if(!do_after(user, 3, target = user) || !rune) //no walking away shitlord + teleporting = FALSE + if(user) + user.update_action_buttons_icon() + return + if(is_blocked_turf(T)) + teleporting = FALSE + to_chat(user, "The rune is blocked by something, preventing teleportation!") + user.update_action_buttons_icon() + return + add_logs(user, rune, "teleported self from ([source.x],[source.y],[source.z]) to") + new /obj/effect/overlay/temp/hierophant/telegraph/teleport(T, user) + new /obj/effect/overlay/temp/hierophant/telegraph/teleport(source, user) + for(var/t in RANGE_TURFS(1, T)) + var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE) //blasts produced will not hurt allies + B.damage = 30 + for(var/t in RANGE_TURFS(1, source)) + var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE) //but absolutely will hurt enemies + B.damage = 30 + for(var/mob/living/L in range(1, source)) + spawn(0) + teleport_mob(source, L, T, user) //regardless, take all mobs near us along + sleep(6) //at this point the blasts detonate + else + timer = world.time + teleporting = FALSE + if(user) + user.update_action_buttons_icon() + +/obj/item/weapon/hierophant_staff/proc/teleport_mob(turf/source, mob/M, turf/target, mob/user) + var/turf/turf_to_teleport_to = get_step(target, get_dir(source, M)) //get position relative to caster + if(!turf_to_teleport_to || is_blocked_turf(turf_to_teleport_to)) + return + animate(M, alpha = 0, time = 2, easing = EASE_OUT) //fade out + sleep(1) + if(!M) + return + M.visible_message("[M] fades out!") + sleep(2) + if(!M) + return + M.forceMove(turf_to_teleport_to) + sleep(1) + if(!M) + return + animate(M, alpha = 255, time = 2, easing = EASE_IN) //fade IN + sleep(1) + if(!M) + return + M.visible_message("[M] fades in!") + if(user != M) + add_logs(user, M, "teleported", null, "from ([source.x],[source.y],[source.z])") + +/obj/item/weapon/hierophant_staff/proc/cardinal_blasts(turf/T, mob/living/user) //fire cardinal cross blasts with a delay + if(!T) + return + new /obj/effect/overlay/temp/hierophant/telegraph/cardinal(T, user) + playsound(T,'sound/magic/blink.ogg', 200, 1) + //playsound(T,'sound/effects/bin_close.ogg', 200, 1) + sleep(2) + new /obj/effect/overlay/temp/hierophant/blast(T, user, friendly_fire_check) + for(var/d in cardinal) + spawn(0) + blast_wall(T, d, user) + +/obj/item/weapon/hierophant_staff/proc/blast_wall(turf/T, dir, mob/living/user) //make a wall of blasts blast_range tiles long + if(!T) + return + var/range = blast_range + var/turf/previousturf = T + var/turf/J = get_step(previousturf, dir) + for(var/i in 1 to range) + if(!J) + return + new /obj/effect/overlay/temp/hierophant/blast(J, user, friendly_fire_check) + previousturf = J + J = get_step(previousturf, dir) + +/obj/item/weapon/hierophant_staff/proc/aoe_burst(turf/T, mob/living/user) //make a 3x3 blast around a target + if(!T) + return + new /obj/effect/overlay/temp/hierophant/telegraph(T, user) + playsound(T,'sound/magic/blink.ogg', 200, 1) + //playsound(T,'sound/effects/bin_close.ogg', 200, 1) + sleep(2) + for(var/t in RANGE_TURFS(1, T)) + new /obj/effect/overlay/temp/hierophant/blast(t, user, friendly_fire_check) \ No newline at end of file diff --git a/code/modules/mining/lavaland/loot/legion_loot.dm b/code/modules/mining/lavaland/loot/legion_loot.dm new file mode 100644 index 00000000000..49e64f3349e --- /dev/null +++ b/code/modules/mining/lavaland/loot/legion_loot.dm @@ -0,0 +1,52 @@ +/obj/item/weapon/staff/storm + name = "staff of storms" + desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it." + icon_state = "staffofstorms" + item_state = "staffofstorms" + icon = 'icons/obj/guns/magic.dmi' + slot_flags = SLOT_BACK + item_state = "staffofstorms" + w_class = 4 + force = 25 + damtype = BURN + hitsound = 'sound/weapons/sear.ogg' + var/storm_type = /datum/weather/ash_storm + var/storm_cooldown = 0 + +/obj/item/weapon/staff/storm/attack_self(mob/user) + if(storm_cooldown > world.time) + to_chat(user, "The staff is still recharging!") + return + + var/area/user_area = get_area(user) + var/datum/weather/A + var/z_level_name = space_manager.levels_by_name[user.z] + for(var/V in weather_master.existing_weather) + var/datum/weather/W = V + if(W.target_z == z_level_name && W.area_type == user_area.type) + A = W + break + if(A) + + if(A.stage != END_STAGE) + if(A.stage == WIND_DOWN_STAGE) + to_chat(user, "The storm is already ending! It would be a waste to use the staff now.") + return + user.visible_message("[user] holds [src] skywards as an orange beam travels into the sky!", \ + "You hold [src] skyward, dispelling the storm!") + playsound(user, 'sound/magic/Staff_Change.ogg', 200, 0) + A.wind_down() + return + else + A = new storm_type + A.name = "staff storm" + A.area_type = user_area.type + A.target_z = z_level_name + A.telegraph_duration = 100 + A.end_duration = 100 + + user.visible_message("[user] holds [src] skywards as red lightning crackles into the sky!", \ + "You hold [src] skyward, calling down a terrible storm!") + playsound(user, 'sound/magic/Staff_Change.ogg', 200, 0) + A.telegraph() + storm_cooldown = world.time + 200 \ No newline at end of file diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm new file mode 100644 index 00000000000..39b2a0c7228 --- /dev/null +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -0,0 +1,105 @@ +//Shared Bag + +//Internal +/obj/item/weapon/storage/backpack/shared + name = "paradox bag" + desc = "Somehow, it's in two places at once." + max_combined_w_class = 60 + max_w_class = 3 + +//External +/obj/item/device/shared_storage + name = "paradox bag" + desc = "Somehow, it's in two places at once." + icon = 'icons/obj/storage.dmi' + icon_state = "cultpack" + slot_flags = SLOT_BACK + var/obj/item/weapon/storage/backpack/shared/bag + +/obj/item/device/shared_storage/red + name = "paradox bag" + desc = "Somehow, it's in two places at once." + +/obj/item/device/shared_storage/red/New() + ..() + if(!bag) + var/obj/item/weapon/storage/backpack/shared/S = new(src) + var/obj/item/device/shared_storage/blue = new(loc) + + bag = S + blue.bag = S + +/obj/item/device/shared_storage/attackby(obj/item/W, mob/user, params) + if(bag) + bag.forceMove(user) + bag.attackby(W, user, params) + +/obj/item/device/shared_storage/attack_hand(mob/living/carbon/user) + if(!iscarbon(user)) + return + if(loc == user && user.back && user.back == src) + if(bag) + bag.forceMove(user) + bag.attack_hand(user) + else + ..() + +/obj/item/device/shared_storage/MouseDrop(atom/over_object) + if(iscarbon(usr)) + var/mob/M = usr + + if(!over_object) + return + + if (istype(usr.loc, /obj/mecha)) + return + + if(!M.restrained() && !M.stat) + playsound(loc, "rustle", 50, 1, -5) + + if(istype(over_object, /obj/screen/inventory/hand)) + if(!M.unEquip(src)) + return + M.put_in_active_hand(src) + + add_fingerprint(usr) + + +//Potion of Flight + +/obj/item/weapon/reagent_containers/glass/bottle/potion + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "potionflask" + +/obj/item/weapon/reagent_containers/glass/bottle/potion/flight + name = "strange elixir" + desc = "A flask with an almost-holy aura emitting from it. The label on the bottle says: 'erqo'hyy tvi'rf lbh jv'atf'." + list_reagents = list("flightpotion" = 5) + +/obj/item/weapon/reagent_containers/glass/bottle/potion/update_icon() + if(reagents.total_volume) + icon_state = "potionflask" + else + icon_state = "potionflask_empty" + +/datum/reagent/flightpotion + name = "Flight Potion" + id = "flightpotion" + description = "Strange mutagenic compound of unknown origins." + reagent_state = LIQUID + color = "#FFEBEB" + +/datum/reagent/flightpotion/reaction_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1) + if(ishuman(M) && M.stat != DEAD) + var/mob/living/carbon/human/H = M + if(H.species.name != "Human" || reac_volume < 5) // implying xenohumans are holy + if(method == INGEST && show_message) + to_chat(H, "You feel nothing but a terrible aftertaste.") + return ..() + + to_chat(H, "A terrible pain travels down your back as wings burst out!") + H.set_species("Angel") + playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1) + H.adjustBruteLoss(20) + H.emote("scream") + ..() \ No newline at end of file diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 1a5866a5e4a..f492ad715e2 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -13,7 +13,7 @@ /obj/structure/closet/crate/necropolis/tendril/New() ..() // uncomment me once these items are being implemented - /*var/loot = rand(1,25) + var/loot = rand(1,25) switch(loot) if(1) new /obj/item/device/shared_storage/red(src) @@ -36,7 +36,7 @@ if(9) new /obj/item/organ/brain/alien(src) if(10) - new /obj/item/organ/heart/cursed(src) + new /obj/item/organ/heart/cursed(src)/* if(11) new /obj/item/ship_in_a_bottle(src) if(12) @@ -67,556 +67,4 @@ new /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/hell(src) new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor(src) if(25) - new /obj/item/weapon/spellbook/oneuse/summonitem(src)*/ - -///Bosses - -//Dragon - -/obj/structure/closet/crate/necropolis/dragon - name = "dragon chest" - -/obj/structure/closet/crate/necropolis/dragon/New() - ..() - var/loot = rand(1,4) - switch(loot) - if(1) - new /obj/item/weapon/melee/ghost_sword(src) - if(2) - new /obj/item/weapon/lava_staff(src) - if(3) - new /obj/item/weapon/spellbook/oneuse/sacredflame(src) - new /obj/item/weapon/gun/magic/wand/fireball(src) - if(4) - new /obj/item/weapon/dragons_blood(src) - -/obj/item/weapon/melee/ghost_sword - name = "spectral blade" - desc = "A rusted and dulled blade. It doesn't look like it'd do much damage. It glows weakly." - icon_state = "spectral" - item_state = "spectral" - flags = CONDUCT - sharp = 1 - edge = 1 - w_class = 4 - force = 1 - throwforce = 1 - hitsound = 'sound/effects/ghost2.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended") - var/summon_cooldown = 0 - var/list/mob/dead/observer/spirits - -/obj/item/weapon/melee/ghost_sword/New() - ..() - spirits = list() - processing_objects.Add(src) - poi_list |= src - -/obj/item/weapon/melee/ghost_sword/Destroy() - for(var/mob/dead/observer/G in spirits) - G.invisibility = initial(G.invisibility) - spirits.Cut() - processing_objects.Remove(src) - poi_list -= src - . = ..() - -/obj/item/weapon/melee/ghost_sword/attack_self(mob/user) - if(summon_cooldown > world.time) - to_chat(user, "You just recently called out for aid. You don't want to annoy the spirits.") - return - to_chat(user, "You call out for aid, attempting to summon spirits to your side.") - - notify_ghosts("[user] is raising their [src], calling for your help!", enter_link="(Click to help)", source = user, action = NOTIFY_FOLLOW) - - summon_cooldown = world.time + 600 - -/obj/item/weapon/melee/ghost_sword/Topic(href, href_list) - if(href_list["follow"]) - var/mob/dead/observer/ghost = usr - if(istype(ghost)) - ghost.ManualFollow(src) - -/obj/item/weapon/melee/ghost_sword/process() - ghost_check() - -/obj/item/weapon/melee/ghost_sword/proc/ghost_check() - var/ghost_counter = 0 - var/turf/T = get_turf(src) - var/list/contents = T.GetAllContents() - var/mob/dead/observer/current_spirits = list() - - for(var/mob/dead/observer/O in player_list) - if(is_type_in_list(O.following, contents)) - ghost_counter++ - O.invisibility = 0 - current_spirits |= O - - for(var/mob/dead/observer/G in spirits - current_spirits) - G.invisibility = initial(G.invisibility) - - spirits = current_spirits - - return ghost_counter - -/obj/item/weapon/melee/ghost_sword/attack(mob/living/target, mob/living/carbon/human/user) - force = 0 - var/ghost_counter = ghost_check() - - force = Clamp((ghost_counter * 4), 0, 75) - user.visible_message("[user] strikes with the force of [ghost_counter] vengeful spirits!") - ..() - -/obj/item/weapon/melee/ghost_sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type) - var/ghost_counter = ghost_check() - final_block_chance += Clamp((ghost_counter * 5), 0, 75) - owner.visible_message("[owner] is protected by a ring of [ghost_counter] ghosts!") - return ..() - -// Blood - -/obj/item/weapon/dragons_blood - name = "bottle of dragons blood" - desc = "You're not actually going to drink this, are you?" - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - -/obj/item/weapon/dragons_blood/attack_self(mob/living/carbon/human/user) - if(!istype(user)) - return - - var/mob/living/carbon/human/H = user - var/random = rand(1,3) - - switch(random) - if(1) - to_chat(user, "Your flesh begins to melt! Miraculously, you seem fine otherwise.") - H.set_species("Skeleton") - if(2) - to_chat(user, "Power courses through you! You can now shift your form at will.") - if(user.mind) - var/obj/effect/proc_holder/spell/targeted/shapeshift/dragon/D = new - user.mind.AddSpell(D) - if(3) - to_chat(user, "You feel like you could walk straight through lava now.") - H.weather_immunities |= "lava" - - playsound(user.loc,'sound/items/drink.ogg', rand(10,50), 1) - qdel(src) - -/datum/disease/transformation/dragon - name = "dragon transformation" - cure_text = "nothing" - cures = list("adminordrazine") - agent = "dragon's blood" - desc = "What do dragons have to do with Space Station 13?" - stage_prob = 20 - severity = BIOHAZARD - visibility_flags = 0 - stage1 = list("Your bones ache.") - stage2 = list("Your skin feels scaley.") - stage3 = list("You have an overwhelming urge to terrorize some peasants.", "Your teeth feel sharper.") - stage4 = list("Your blood burns.") - stage5 = list("You're a fucking dragon. However, any previous allegiances you held still apply. It'd be incredibly rude to eat your still human friends for no reason.") - new_form = /mob/living/simple_animal/hostile/megafauna/dragon/lesser - -//Lava Staff - -/obj/item/weapon/lava_staff - name = "staff of lava" - desc = "The ability to fill the emergency shuttle with lava. What more could you want out of life?" - icon_state = "staffofstorms" - item_state = "staffofstorms" - icon = 'icons/obj/guns/magic.dmi' - slot_flags = SLOT_BACK - item_state = "staffofstorms" - w_class = 4 - force = 25 - damtype = BURN - hitsound = 'sound/weapons/sear.ogg' - var/turf_type = /turf/unsimulated/floor/lava // /turf/simulated/floor/plating/lava/smooth once Lavaland turfs are added - var/transform_string = "lava" - var/reset_turf_type = /turf/simulated/floor/plating/airless/asteroid // /turf/simulated/floor/plating/asteroid/basalt once Lavaland turfs are added - var/reset_string = "basalt" - var/create_cooldown = 100 - var/create_delay = 30 - var/reset_cooldown = 50 - var/timer = 0 - var/banned_turfs - -/obj/item/weapon/lava_staff/New() - . = ..() - banned_turfs = typecacheof(list(/turf/space/transit, /turf/unsimulated)) - -/obj/item/weapon/lava_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - ..() - if(timer > world.time) - return - - if(is_type_in_typecache(target, banned_turfs)) - return - - if(target in view(user.client.view, get_turf(user))) - - var/turf/simulated/T = get_turf(target) - if(!istype(T)) - return - if(!istype(T, turf_type)) - var/obj/effect/overlay/temp/lavastaff/L = new /obj/effect/overlay/temp/lavastaff(T) - L.alpha = 0 - animate(L, alpha = 255, time = create_delay) - user.visible_message("[user] points [src] at [T]!") - timer = world.time + create_delay + 1 - if(do_after(user, create_delay, target = T)) - user.visible_message("[user] turns \the [T] into [transform_string]!") - message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (JMP).") - log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).") - T.ChangeTurf(turf_type) - timer = world.time + create_cooldown - qdel(L) - else - timer = world.time - qdel(L) - return - else - user.visible_message("[user] turns \the [T] into [reset_string]!") - T.ChangeTurf(reset_turf_type) - timer = world.time + reset_cooldown - playsound(T,'sound/magic/Fireball.ogg', 200, 1) - -/obj/effect/overlay/temp/lavastaff - icon_state = "lavastaff_warn" - duration = 50 - -// Bubblegum - -/obj/structure/closet/crate/necropolis/bubblegum - name = "bubblegum chest" - -/obj/structure/closet/crate/necropolis/bubblegum/New() - ..() - var/loot = rand(1,3) - switch(loot) - if(1) - new /obj/item/mayhem(src) - if(2) - new /obj/item/blood_contract(src) - if(3) - new /obj/item/weapon/gun/magic/staff/spellblade(src) - -// Mayhem - -/obj/item/mayhem - name = "mayhem in a bottle" - desc = "A magically infused bottle of blood, the scent of which will drive anyone nearby into a murderous frenzy." - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - -/obj/item/mayhem/attack_self(mob/user) - for(var/mob/living/carbon/human/H in range(7,user)) - spawn() - var/obj/effect/mine/pickup/bloodbath/B = new(H) - B.mineEffect(H) - to_chat(user, "You shatter the bottle!") - playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) - qdel(src) - -// Blood Contract - -/obj/item/blood_contract - name = "blood contract" - icon = 'icons/obj/wizard.dmi' - icon_state = "scroll2" - color = "#FF0000" - desc = "Mark your target for death." - var/used = FALSE - -/obj/item/blood_contract/attack_self(mob/user) - if(used) - return - - used = TRUE - var/choice = input(user,"Who do you want dead?","Choose Your Victim") as null|anything in player_list - - if(!choice) - used = FALSE - return - else if(!isliving(choice)) - to_chat(user, "[choice] is already dead!") - used = FALSE - return - else if(choice == user) - user << "You feel like writing your own name into a cursed death warrant would be unwise." - used = FALSE - return - else - var/mob/living/L = choice - - message_admins("[key_name_admin(L)] has been marked for death by [key_name_admin(user)].") - log_admin("[key_name(L)] has been marked for death by [key_name(user)].") - - var/datum/objective/survive/survive = new - survive.owner = L.mind - L.mind.objectives += survive - to_chat(L, "You've been marked for death! Don't let the demons get you!") - L.color = "#FF0000" - spawn() - var/obj/effect/mine/pickup/bloodbath/B = new(L) - B.mineEffect(L) - - for(var/mob/living/carbon/human/H in player_list) - if(H == L) - continue - to_chat(H, "You have an overwhelming desire to kill [L]. They have been marked red! Go kill them!") - H.put_in_hands(new /obj/item/weapon/kitchen/knife/butcher(H)) - - qdel(src) - -// Legion - -// Staff of Storms - -/obj/item/weapon/staff/storm - name = "staff of storms" - desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it." - icon_state = "staffofstorms" - item_state = "staffofstorms" - icon = 'icons/obj/guns/magic.dmi' - slot_flags = SLOT_BACK - item_state = "staffofstorms" - w_class = 4 - force = 25 - damtype = BURN - hitsound = 'sound/weapons/sear.ogg' - var/storm_type = /datum/weather/ash_storm - var/storm_cooldown = 0 - -/obj/item/weapon/staff/storm/attack_self(mob/user) - if(storm_cooldown > world.time) - to_chat(user, "The staff is still recharging!") - return - - var/area/user_area = get_area(user) - var/datum/weather/A - var/z_level_name = space_manager.levels_by_name[user.z] - for(var/V in weather_master.existing_weather) - var/datum/weather/W = V - if(W.target_z == z_level_name && W.area_type == user_area.type) - A = W - break - if(A) - - if(A.stage != END_STAGE) - if(A.stage == WIND_DOWN_STAGE) - to_chat(user, "The storm is already ending! It would be a waste to use the staff now.") - return - user.visible_message("[user] holds [src] skywards as an orange beam travels into the sky!", \ - "You hold [src] skyward, dispelling the storm!") - playsound(user, 'sound/magic/Staff_Change.ogg', 200, 0) - A.wind_down() - return - else - A = new storm_type - A.name = "staff storm" - A.area_type = user_area.type - A.target_z = z_level_name - A.telegraph_duration = 100 - A.end_duration = 100 - - user.visible_message("[user] holds [src] skywards as red lightning crackles into the sky!", \ - "You hold [src] skyward, calling down a terrible storm!") - playsound(user, 'sound/magic/Staff_Change.ogg', 200, 0) - A.telegraph() - storm_cooldown = world.time + 200 - -// Hierophant - -//Hierophant - -/obj/item/weapon/hierophant_staff - name = "Hierophant's staff" - desc = "A large club with intense magic power infused into it." - icon_state = "hierophant_staff" - item_state = "hierophant_staff" - icon = 'icons/obj/guns/magic.dmi' - slot_flags = SLOT_BACK - w_class = 4 - force = 20 - hitsound = "swing_hit" - //hitsound = 'sound/weapons/sonic_jackhammer.ogg' - actions_types = list(/datum/action/item_action/vortex_recall, /datum/action/item_action/toggle_unfriendly_fire) - var/cooldown_time = 20 //how long the cooldown between non-melee ranged attacks is - var/chaser_cooldown = 101 //how long the cooldown between firing chasers at mobs is - var/chaser_timer = 0 //what our current chaser cooldown is - var/timer = 0 //what our current cooldown is - var/blast_range = 3 //how long the cardinal blast's walls are - var/obj/effect/hierophant/rune //the associated rune we teleport to - var/teleporting = FALSE //if we ARE teleporting - var/friendly_fire_check = FALSE //if the blasts we make will consider our faction against the faction of hit targets - -/obj/item/weapon/hierophant_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - ..() - var/turf/T = get_turf(target) - if(!T || timer > world.time) - return - timer = world.time + CLICK_CD_MELEE //by default, melee attacks only cause melee blasts, and have an accordingly short cooldown - if(proximity_flag) - spawn(0) - aoe_burst(T, user) - add_logs(user, target, "fired 3x3 blast at", src) - else - if(ismineralturf(target) && get_dist(user, target) < 6) //target is minerals, we can hit it(even if we can't see it) - spawn(0) - cardinal_blasts(T, user) - timer = world.time + cooldown_time - else if(target in view(5, get_turf(user))) //if the target is in view, hit it - timer = world.time + cooldown_time - if(isliving(target) && chaser_timer <= world.time) //living and chasers off cooldown? fire one! - chaser_timer = world.time + chaser_cooldown - new /obj/effect/overlay/temp/hierophant/chaser(get_turf(user), user, target, 1.5, friendly_fire_check) - add_logs(user, target, "fired a chaser at", src) - else - spawn(0) - cardinal_blasts(T, user) //otherwise, just do cardinal blast - add_logs(user, target, "fired cardinal blast at", src) - else - to_chat(user, "That target is out of range!") //too far away - -/obj/item/weapon/hierophant_staff/ui_action_click(mob/user, actiontype) - if(actiontype == /datum/action/item_action/toggle_unfriendly_fire) //toggle friendly fire... - friendly_fire_check = !friendly_fire_check - to_chat(user, "You toggle friendly fire [friendly_fire_check ? "off":"on"]!") - return - if(user.get_active_hand() != src && user.get_inactive_hand() != src) //you need to hold the staff to teleport - to_chat(user, "You need to hold the staff in your hands to [rune ? "teleport with it" : "create a rune"]!") - return - if(!rune) - if(isturf(user.loc)) - user.visible_message("[user] holds [src] carefully in front of them, moving it in a strange pattern...", \ - "You start creating a hierophant rune to teleport to...") - timer = world.time + 51 - if(do_after(user, 50, target = user)) - var/turf/T = get_turf(user) - playsound(T,'sound/magic/Blind.ogg', 200, 1, -4) - new /obj/effect/overlay/temp/hierophant/telegraph/teleport(T, user) - var/obj/effect/hierophant/H = new/obj/effect/hierophant(T) - rune = H - user.update_action_buttons_icon() - user.visible_message("[user] creates a strange rune beneath them!", \ - "You create a hierophant rune, which you can teleport yourself and any allies to at any time!\n\ - You can remove the rune to place a new one by striking it with the staff.") - else - timer = world.time - else - to_chat(user, "You need to be on solid ground to produce a rune!") - return - if(get_dist(user, rune) <= 2) //rune too close abort - to_chat(user, "You are too close to the rune to teleport to it!") - return - if(is_blocked_turf(get_turf(rune))) - to_chat(user, "The rune is blocked by something, preventing teleportation!") - return - teleporting = TRUE //start channel - user.update_action_buttons_icon() - user.visible_message("[user] starts to glow faintly...") - timer = world.time + 50 - if(do_after(user, 40, target = user) && rune) - var/turf/T = get_turf(rune) - var/turf/source = get_turf(user) - if(is_blocked_turf(T)) - teleporting = FALSE - to_chat(user, "The rune is blocked by something, preventing teleportation!") - user.update_action_buttons_icon() - return - new /obj/effect/overlay/temp/hierophant/telegraph(T, user) - new /obj/effect/overlay/temp/hierophant/telegraph(source, user) - playsound(T,'sound/magic/blink.ogg', 200, 1) - //playsound(T,'sound/magic/Wand_Teleport.ogg', 200, 1) - playsound(source,'sound/magic/blink.ogg', 200, 1) - //playsound(source,'sound/machines/AirlockOpen.ogg', 200, 1) - if(!do_after(user, 3, target = user) || !rune) //no walking away shitlord - teleporting = FALSE - if(user) - user.update_action_buttons_icon() - return - if(is_blocked_turf(T)) - teleporting = FALSE - to_chat(user, "The rune is blocked by something, preventing teleportation!") - user.update_action_buttons_icon() - return - add_logs(user, rune, "teleported self from ([source.x],[source.y],[source.z]) to") - new /obj/effect/overlay/temp/hierophant/telegraph/teleport(T, user) - new /obj/effect/overlay/temp/hierophant/telegraph/teleport(source, user) - for(var/t in RANGE_TURFS(1, T)) - var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE) //blasts produced will not hurt allies - B.damage = 30 - for(var/t in RANGE_TURFS(1, source)) - var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE) //but absolutely will hurt enemies - B.damage = 30 - for(var/mob/living/L in range(1, source)) - spawn(0) - teleport_mob(source, L, T, user) //regardless, take all mobs near us along - sleep(6) //at this point the blasts detonate - else - timer = world.time - teleporting = FALSE - if(user) - user.update_action_buttons_icon() - -/obj/item/weapon/hierophant_staff/proc/teleport_mob(turf/source, mob/M, turf/target, mob/user) - var/turf/turf_to_teleport_to = get_step(target, get_dir(source, M)) //get position relative to caster - if(!turf_to_teleport_to || is_blocked_turf(turf_to_teleport_to)) - return - animate(M, alpha = 0, time = 2, easing = EASE_OUT) //fade out - sleep(1) - if(!M) - return - M.visible_message("[M] fades out!") - sleep(2) - if(!M) - return - M.forceMove(turf_to_teleport_to) - sleep(1) - if(!M) - return - animate(M, alpha = 255, time = 2, easing = EASE_IN) //fade IN - sleep(1) - if(!M) - return - M.visible_message("[M] fades in!") - if(user != M) - add_logs(user, M, "teleported", null, "from ([source.x],[source.y],[source.z])") - -/obj/item/weapon/hierophant_staff/proc/cardinal_blasts(turf/T, mob/living/user) //fire cardinal cross blasts with a delay - if(!T) - return - new /obj/effect/overlay/temp/hierophant/telegraph/cardinal(T, user) - playsound(T,'sound/magic/blink.ogg', 200, 1) - //playsound(T,'sound/effects/bin_close.ogg', 200, 1) - sleep(2) - new /obj/effect/overlay/temp/hierophant/blast(T, user, friendly_fire_check) - for(var/d in cardinal) - spawn(0) - blast_wall(T, d, user) - -/obj/item/weapon/hierophant_staff/proc/blast_wall(turf/T, dir, mob/living/user) //make a wall of blasts blast_range tiles long - if(!T) - return - var/range = blast_range - var/turf/previousturf = T - var/turf/J = get_step(previousturf, dir) - for(var/i in 1 to range) - if(!J) - return - new /obj/effect/overlay/temp/hierophant/blast(J, user, friendly_fire_check) - previousturf = J - J = get_step(previousturf, dir) - -/obj/item/weapon/hierophant_staff/proc/aoe_burst(turf/T, mob/living/user) //make a 3x3 blast around a target - if(!T) - return - new /obj/effect/overlay/temp/hierophant/telegraph(T, user) - playsound(T,'sound/magic/blink.ogg', 200, 1) - //playsound(T,'sound/effects/bin_close.ogg', 200, 1) - sleep(2) - for(var/t in RANGE_TURFS(1, T)) - new /obj/effect/overlay/temp/hierophant/blast(t, user, friendly_fire_check) \ No newline at end of file + new /obj/item/weapon/spellbook/oneuse/summonitem(src)*/ \ No newline at end of file diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index f74ebda9d342b5eea3e21f0ea7df2211fcbe87d5..97966c61dac067efaa4fe461ed8ac03ba5987280 100644 GIT binary patch literal 14211 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 diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 938d810a61273d8a815d9b9f1dfb9528f9290c1f..fd2947d7d69906fd6332027e8f65a5aa5ae278d7 100644 GIT binary patch literal 11393 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 P31f9-?I)E==3)N>;$5!@ literal 9199 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 diff --git a/paradise.dme b/paradise.dme index 9776de13d69..e048b75e41a 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1451,8 +1451,13 @@ #include "code\modules\mining\laborcamp\laborshuttle.dm" #include "code\modules\mining\laborcamp\laborstacker.dm" #include "code\modules\mining\lavaland\ash_flora.dm" -#include "code\modules\mining\lavaland\colossus_loot.dm" #include "code\modules\mining\lavaland\necropolis_chests.dm" +#include "code\modules\mining\lavaland\loot\ashdragon_loot.dm" +#include "code\modules\mining\lavaland\loot\bubblegum_loot.dm" +#include "code\modules\mining\lavaland\loot\colossus_loot.dm" +#include "code\modules\mining\lavaland\loot\hierophant_loot.dm" +#include "code\modules\mining\lavaland\loot\legion_loot.dm" +#include "code\modules\mining\lavaland\loot\tendril_loot.dm" #include "code\modules\mob\abilities.dm" #include "code\modules\mob\death.dm" #include "code\modules\mob\emote.dm" From dbe1284214a4714635756c405e61f1d6f4a70f75 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 6 Feb 2017 01:42:32 +0100 Subject: [PATCH 020/122] Adds ship in a bottle/lavaland boat, paranormal ERT spacesuits, update the sord --- code/__DEFINES/combat.dm | 1 + code/__DEFINES/reagents.dm | 3 + code/game/objects/items/weapons/weaponry.dm | 14 ++-- code/game/verbs/suicide.dm | 4 + .../clothing/spacesuits/miscellaneous.dm | 45 ++++++++++- .../mining/lavaland/loot/ashdragon_loot.dm | 2 + .../mining/lavaland/loot/colossus_loot.dm | 2 + .../mining/lavaland/loot/tendril_loot.dm | 72 +++++++++++++++++- .../mining/lavaland/necropolis_chests.dm | 47 ++++++------ code/modules/reagents/chemistry/reagents.dm | 4 - icons/mob/head.dmi | Bin 265006 -> 266856 bytes icons/mob/suit.dmi | Bin 491281 -> 493001 bytes icons/obj/clothing/hats.dmi | Bin 121335 -> 122119 bytes icons/obj/clothing/suits.dmi | Bin 162623 -> 163293 bytes icons/obj/vehicles.dmi | Bin 50091 -> 50800 bytes 15 files changed, 155 insertions(+), 39 deletions(-) create mode 100644 code/__DEFINES/reagents.dm diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 39074c65664..0bd2b82b42a 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -24,6 +24,7 @@ #define FIRELOSS 2 #define TOXLOSS 4 #define OXYLOSS 8 +#define SHAME 16 //Bitflags defining which status effects could be or are inflicted on a mob #define CANSTUN 1 diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm new file mode 100644 index 00000000000..3e81a67b1b2 --- /dev/null +++ b/code/__DEFINES/reagents.dm @@ -0,0 +1,3 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 \ No newline at end of file diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index b9c946c6210..fd8f9bdf97e 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -23,18 +23,14 @@ slot_flags = SLOT_BELT force = 2 throwforce = 1 - sharp = 1 - edge = 1 w_class = 3 + hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - suicide_act(mob/user) - to_chat(viewers(user), "[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide.") - return(BRUTELOSS) - -/obj/item/weapon/sord/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - return ..() +/obj/item/weapon/sord/suicide_act(mob/user) + user.visible_message("[user] is trying to impale themself with [src]! It might be a suicide attempt if it weren't so shitty.", \ + "You try to impale yourself with [src], but it's USELESS...") + return SHAME /obj/item/weapon/claymore name = "claymore" diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 31c8c322596..896bd2b850d 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -77,6 +77,10 @@ if(held_item) var/damagetype = held_item.suicide_act(src) if(damagetype) + if(damagetype & SHAME) + adjustStaminaLoss(200) + suiciding = 0 + return do_suicide(damagetype, held_item) return diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 4d7e1011686..0a6779fd807 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -207,4 +207,47 @@ armor = list(melee = 20, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100) max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 - strip_delay = 130 \ No newline at end of file + strip_delay = 130 + +/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal + name = "paranormal response unit helmet" + desc = "A helmet worn by those who deal with paranormal threats for a living." + icon_state = "hardsuit0-prt" + item_state = "hardsuit0-prt" + item_color = "knight_grey" + max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT + actions_types = list() + burn_state = FIRE_PROOF + +/obj/item/clothing/suit/space/hardsuit/ert/paranormal + name = "paranormal response team suit" + desc = "Powerful wards are built into this hardsuit, protecting the user from all manner of paranormal threats." + icon_state = "knight_grey" + item_state = "knight_grey" + max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + burn_state = FIRE_PROOF + +/obj/item/clothing/suit/space/hardsuit/ert/paranormal/New() + ..() + new /obj/item/weapon/nullrod(src) + +/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor + name = "inquisitor's hardsuit" + icon_state = "hardsuit-inq" + item_state = "hardsuit-inq" + +/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor + name = "inquisitor's helmet" + icon_state = "hardsuit0-inq" + item_state = "hardsuit0-inq" + +/obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker + name = "champion's hardsuit" + desc = "Voices echo from the hardsuit, driving the user insane." + icon_state = "hardsuit-beserker" + item_state = "hardsuit-beserker" +/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/beserker + name = "champion's helmet" + desc = "Peering into the eyes of the helmet is enough to seal damnation." + icon_state = "hardsuit0-beserker" + item_state = "hardsuit0-beserker" \ No newline at end of file diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm index 27a703b7443..4565039d52e 100644 --- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm +++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm @@ -160,6 +160,8 @@ force = 25 damtype = BURN hitsound = 'sound/weapons/sear.ogg' + burn_state = LAVA_PROOF | FIRE_PROOF + unacidable = 1 var/turf_type = /turf/unsimulated/floor/lava // /turf/simulated/floor/plating/lava/smooth once Lavaland turfs are added var/transform_string = "lava" var/reset_turf_type = /turf/simulated/floor/plating/airless/asteroid // /turf/simulated/floor/plating/asteroid/basalt once Lavaland turfs are added diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index 1928ff0f342..fc950b429d2 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -10,6 +10,7 @@ luminosity = 8 max_n_of_items = INFINITY unacidable = 1 + burn_state = LAVA_PROOF | FIRE_PROOF pixel_y = -4 use_power = 0 var/memory_saved = FALSE @@ -98,6 +99,7 @@ luminosity = 8 use_power = 0 density = 1 + burn_state = LAVA_PROOF | FIRE_PROOF unacidable = 1 var/activation_method = "touch" var/activation_damage_type = null diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 39b2a0c7228..e489b35ad62 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -65,7 +65,7 @@ add_fingerprint(usr) -//Potion of Flight +//Potion of Flight: as we do not have the "Angel" species this currently does not work. /obj/item/weapon/reagent_containers/glass/bottle/potion icon = 'icons/obj/lavaland/artefacts.dmi' @@ -90,6 +90,7 @@ color = "#FFEBEB" /datum/reagent/flightpotion/reaction_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1) + return // This item currently does not work as we do not have the angel species. if(ishuman(M) && M.stat != DEAD) var/mob/living/carbon/human/H = M if(H.species.name != "Human" || reac_volume < 5) // implying xenohumans are holy @@ -102,4 +103,71 @@ playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1) H.adjustBruteLoss(20) H.emote("scream") - ..() \ No newline at end of file + ..() + +//Boat + +/obj/vehicle/lavaboat + name = "lava boat" + desc = "A boat used for traversing lava." + icon_state = "goliath_boat" + icon = 'icons/obj/lavaland/dragonboat.dmi' + keytype = /obj/item/weapon/oar + burn_state = LAVA_PROOF | FIRE_PROOF + +/obj/vehicle/lavaboat/relaymove(mob/user, direction) + var/turf/next = get_step(src, direction) + var/turf/current = get_turf(src) + + if(istype(next, /turf/unsimulated/floor/lava) || istype(current, /turf/unsimulated/floor/lava)) //We can move from land to lava, or lava to land, but not from land to land + ..() + else + to_chat(user, "Boats don't go on land!") + return 0 + +/obj/item/weapon/oar + name = "oar" + icon = 'icons/obj/vehicles.dmi' + icon_state = "oar" + item_state = "rods" + desc = "Not to be confused with the kind Research hassles you for." + force = 12 + w_class = 3 + burn_state = LAVA_PROOF | FIRE_PROOF + +/datum/crafting_recipe/oar + name = "goliath bone oar" + result = /obj/item/weapon/oar + reqs = list(/obj/item/stack/sheet/bone = 2) + time = 15 + category = CAT_PRIMAL + +/datum/crafting_recipe/boat + name = "goliath hide boat" + result = /obj/vehicle/lavaboat + reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3) + time = 50 + category = CAT_PRIMAL + +//Dragon Boat + +/obj/item/ship_in_a_bottle + name = "ship in a bottle" + desc = "A tiny ship inside a bottle." + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "ship_bottle" + +/obj/item/ship_in_a_bottle/attack_self(mob/user) + user << "You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out." + playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) + new /obj/vehicle/lavaboat/dragon(get_turf(src)) + qdel(src) + +/obj/vehicle/lavaboat/dragon + name = "mysterious boat" + desc = "This boat moves where you will it, without the need for an oar." + keytype = null + icon_state = "dragon_boat" + generic_pixel_y = 2 + generic_pixel_x = 1 + vehicle_move_delay = 1 \ No newline at end of file diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index f492ad715e2..309c7c9f75c 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -6,6 +6,8 @@ icon_state = "necrocrate" icon_opened = "necrocrateopen" icon_closed = "necrocrate" + burn_state = LAVA_PROOF | FIRE_PROOF + unacidable = 1 /obj/structure/closet/crate/necropolis/tendril desc = "It's watching you suspiciously." @@ -18,53 +20,52 @@ if(1) new /obj/item/device/shared_storage/red(src) if(2) - new /obj/item/clothing/suit/space/hardsuit/cult(src) + new /obj/item/clothing/head/helmet/space/cult(src) + new /obj/item/clothing/suit/space/cult(src) if(3) - new /obj/item/device/soulstone/anybody(src) + new /obj/item/device/soulstone(src) if(4) new /obj/item/weapon/katana/cursed(src) if(5) new /obj/item/clothing/glasses/godeye(src) if(6) - new /obj/item/weapon/reagent_containers/glass/bottle/potion/flight(src) - if(7) new /obj/item/weapon/pickaxe/diamond(src) - if(8) + if(7) new /obj/item/clothing/head/culthood(src) - new /obj/item/clothing/suit/cultrobes(src) + new /obj/item/clothing/suit/hooded/cultrobes(src) new /obj/item/weapon/bedsheet/cult(src) + if(8) + new /obj/item/organ/internal/brain/xeno(src) if(9) - new /obj/item/organ/brain/alien(src) + new /obj/item/organ/internal/heart/cursed(src) if(10) - new /obj/item/organ/heart/cursed(src)/* - if(11) new /obj/item/ship_in_a_bottle(src) - if(12) + if(11) new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker(src) - if(13) + if(12) new /obj/item/weapon/sord(src) - if(14) + if(13) new /obj/item/weapon/nullrod/scythe/talking(src) - if(15) + if(14) new /obj/item/weapon/nullrod/armblade(src) + if(15) + new /obj/item/weapon/guardiancreator(src)/* if(16) - new /obj/item/weapon/guardiancreator(src) - if(17) new /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs(src) - if(18) + if(17) new /obj/item/device/warp_cube/red(src) - if(19) + if(18) new /obj/item/device/wisp_lantern(src) - if(20) + if(19) new /obj/item/device/immortality_talisman(src) - if(21) + if(20) new /obj/item/weapon/gun/magic/hook(src) - if(22) + if(21) new /obj/item/voodoo(src) - if(23) + if(22) new /obj/item/weapon/grenade/clusterbuster/inferno(src) - if(24) + if(23) new /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/hell(src) new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor(src) - if(25) + if(24) new /obj/item/weapon/spellbook/oneuse/summonitem(src)*/ \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 0f6e202ba07..db77f30e76b 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -1,7 +1,3 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 - /datum/reagent var/name = "Reagent" var/id = "reagent" diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 90b7453a33e24b18c15808ca88a1d5f5b39a6d24..5e98830a965e01ae94fa49877972badccc33c93e 100644 GIT binary patch delta 18283 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 ZHU)Rf-5v)lfk)~vc)I$ztaD0e0sy9}wTb`$ delta 16702 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 diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 8db229893de0971e923ab209b5fe54e50c0a0567..b78f78449222b16cb2d6376e1f16fcc66d296998 100644 GIT binary patch delta 17820 zcmY(q1ymf-(k?o9@Bo3}5(2?pgNFnsxH|-Q2@Z|BB)9~L-~@LkxVyW%yUo1j{Qtf8 zytSsMyLa2}y{qc0`l|Xnl&mk3{M%bN(eE_WfIw-)VYQNnNyF z5jK7O6DMNK1vENqlGtTz7_)6Bj8ImB$iuAH6v9sj7c*TwtXcNF#YzDNf=tV;9$sFR zi9B;%9qUU^N71HxHuEq%JQ{sLCg1zL>s+V8kX-w^lQQHQs7JI`R1Yh5W_zS=A>4;z+6^blQ zqz)(P-abc!9{Ux%FTa|Wflq1+`aLut&ahlo=);g19(w^QOS`w;K7;$3vb!;UBp(<>PcknIhrauaX|h{i8~)|Kbs+O`!xW_zpW zAjo*tKUS?`hV8lZ*|Zwhz`o1PgTg~%=I*}G#lEQS;xFYcS(tVNs>4%KOZ@guyy^Vr z>*^z9r4Ip8uRk;vv1`}_#wWQ3qT!Ovf1{uxG2W0s&TGajzp9#BbAMw1Ve~R_#MSZs zuv;h`mv2Pzm(H-3Leuo{Kp43Fn&kV1Vovi8w}M|m)}220KW+Acy_!?r`} z-5b8(JlvYWTZ!{wp!;8UJC3nT68>e}XYWv3jnBCkkXJ|z+050=l>CiAW&`_&c4LJl z!tZLM@d`0TV=5JQDZkz&N_j+09gbdjv3|y-Z)i+fZ!h&gi4MY!-XK0d6{g1~43^gx z`GDcdfK`-8$nwJB8lD-|i57LToRi=nTG~%islD1^o5e=6uipC`VGS0>ZS32ZhuD86 zof&i2<$Y-~Ea*PK{XP*=2T&+$+4=S*>;lE&kOF_tswhCS*k$B4@se=)_mnA&e{PFQ zZPFwWT#;D5mf;RnHAy|3NJybicrwrWMX%~J_s&{IZ9VefX6S_%*TGk1dDLIVsdj(r z%I<3wXik$?WG#qsrI%BOUL|>L!rSIL80jegYwe);bXg03A9?9#&JU~`^l*n#od_sI zh+wsph+gdUz}Gn(YdYOsV5f-An~dR(hZ+q;m>q}K{T8N(p!-IpVfB+)ELARUC^2Nv zK=p^vgnKS_(IbA86Z&_`L#>WKhdzVervj7;X$HNoQZ4A;veow(xbjNI)tcQW znYet%)ud{?)@5vbZ(RYmBlZy_#ugGisk^FV8QzS~3?`|51uS~OOJ9myrqo*ybRltd zKmB8s%Fov+F2+_m#i-fJ?>;WT4YIa`588{OyyQtWP(gXgCM^u7SFi5+ke_cyN|c>t zhGrxDiK0emT(7+vJ~P9N$<;MtG(L#$o6*LkW1+vnylH7_V}N8_*A>E z?V1^TF|69M!S10y`mmhKR6_@I4lo&Ql^j(n;5(2A=h;IwE7bR_Oj1KM=neF=zawg< zS;_1>uU`1tG`wak6N>+$74cm~$U@2{4$(k)Sa$vq*j#wU--C)GIP5lFGbl;+O0=$R zGmg2OMY!D4sY?611rzf&_w`s|2KkFh1iS?|n#XxrbCo6fo!|H2OXbc~S>*y+$XIQ7 zQ9lCSz3NAkvsw3baJizpUKgI{{9uo_gNSo^{C>zp_i28AM2_&mZI52r(&aw~tqAK=Y7q!Ozl^&sH^g z9g+-xs5K*J+E$A)LQ_g7)A)FFkds|Uc&!IrJ`7-G={(kEwu)S;)?Oyq^mB_zeoaNL zNt7J0Zv2a$IKiU72a&%rb0g=|D@;D)`_s3nUch52&&}==83|X1BPDxB^V>&hJBIr- zS0EXQIICk<@{hxi0^R!rA*=f!<6I$KON03Z>WvJaFYFtZqVg2dqh)bgCp(PpWKL9V zW_NN(z^r2leS73la@m7JK@}pCv&SPbahlk}Nj8;%m4&7eFV1Ig+0*s(_F3;po~j@p z1zuOFAazVh^|v*?xoxc>S>)ILE48ug?d`XhLb6)%U9hj1P>-{{gP#AmJ1~^?RZB!T znb&rKmZ+hYsBqu{4=xDcf(R~1;DTIhiHagG3UFe_7Rp?}YL%&i3RSOVXqbYf%imHN zDZSCzrHmYRM8L7>v2D=7vE8$CbU8eBJh3$t)lsr^=*Bt9TgXP}?^XEp(sMSj;_Wvi zysBP(Ehz?k__y_~B6b-%JL(Lm(#Q2bhaNmKJqwSOZyuJNBNXqpg-!%)X4!P>9N=E3 zr2}vf1DpJRn>}6WWf#6?a1d2hRl}YE^TemV*f4IRcnyW`uB}=HHhE0s5o;Zx=wrsI zU(Gf87AEo#1f0L9*a-Ud@R`^?&08wtOzyxrO|Ltr-4-ksxdN_V-WQ)x$olvbjR3_LbZ1{)r=01-DZ*1W8m1*23Ei+`RtPtm zH1krspg`K9?&0SS5&b&9k{`|@Quajc+*=BdKNgt~*<2_fnvK=ajMsdkAa0l^FD`%l zJ#LOrW09nC*L85YHv#dRoKz)ESEiHaPh$Fl8)3$uv$&}HYKlMS?BOUR^Ez_W-V(4B zb8+G7@9$4|qLz&5ET<2S>-!QQ^<<)gmb1HSVcHb=ziti+j^ACbl4WfP!h!O z$5I54dM*;t4Ujg9Gr0E4R`4uCfq&h8dkAg$w}hs!`oi~H)lyIGpQi=TX&^7Kv3st& z`1|=*8os7ZPEI01W*^$}{&fTUBtXj@Ha51#HK#3v@1Aa`^~I01T4_s_?)6gshcX&3 zKC`25@-tc}0IO}^aM!!wi9e0Wrf*=gM6>C_)81I_Pla)gguL7;{OaB=6vEQDMI*Nd z@}UkLBsdU1J!~$+Y2i7@)IykPxApP^Ai*Wh1c6XOq(6$O!b5(%_az;l0k9F|ms&e{+(KPLu1c(aLkPjMVzfs3huN@8k{8^rxJ-M( zh6Lw_DC$Oi%srxm3lUtoXE>Edfrt|0L{U)a)7xN_B;B1zVIfme~Zwa|)wlVq!udwF|a3wzkoTkdw+W zCEV4|K$)RxxfM{1I9e%vt2#?5I zvJ?OMmHS+T&1hUteW=m_n+!g;^a4^eD1*EnU`j5Rg;i|8Eq{l>a>4SjoVp>v>X?BN z{||=39zxnQigJXFDe|xT)ReFM7%Q=5BK=Miky20y|C2|a+JlGBbwlgq>y&cCRFqQt zxJvXqg&U$ktlREQ;E;iHx-^3}oMY{IWh&aj`#@!gkc`wHdlQ$?`m?2tsWJY^Z`;7E zY`9eUsKPYHPrI_{9?75kp$KK zUn9r(kP428a`5CnMg8c%A`5u~Fj%C)NWvc+o=@q(k$HJIao|JE3KM4OkYw`?E{~9U zfyLv&!tWf<5t^!)7J`%I`|vXMI{SwqUq)t@PH{$#g7P4#7UpFe)2VK>+bAq zv*BTcQRy%xL3K-Xo^=fskCtwsC->F;U|EV%SZu7Mx3}QuwS<>=&l;-T;6lG>$J-C| z_p{lgCwJH2HhK(Dcxdozh>W@1yWX;{0kcGkNG{rdImQnS3XvGErK<Yc!&_!M4+$ zmtb-h^Xl=gEk_t%8cZ4WMZA!uJ3AvxMnBRxm=3 z>{;L3b~{K>2N+rGeUsni;FrJwPA@2;j1;%YL{FpFcBQaF9D{@}MuJSKr$c*3C@4^} zGXY40FY@dng5nVHG4=W;v&l1p%TAZz+Qy>&Ph-LoGURYTl+PPLZ_mVJPN{r@-qkgq z;x7m5d|;O9FXeS@wR!~Gn)^lc5()KdNZnZt zLCThoPtdl(kYPFir1T{xrp83{YcF2T1S^LY;Rpb}qh+g8L~(P%q$XsjgqbfHJHt$8 zNDrjiQsZQrew;SB}mm)V?x*rfAHR`XD$-t}|M9W*}x=ik6vH9u6T9*~>094{s3 zMFdkI{5^rS9P!FZU$5og9$U*b)1qPjRrsb6;59V5d!~Xz{5tkoVZ+&sQlVX^ij!Mp zr+c1RdHQ(4_x7#F)xL@b0rY8G3C708FDWRn(}$4b`w-KIrY}eyUT_-7)8fg|;;nCN zeEk*`gm_5w5 zRZC4xjYCdOK1z6qJ?L$EZ&pbJ>S}*rYAM)pDJdyM(|#-IXLyb6L1$P`vf;VDO(z369jnq9< z?%i4s3m4npq7vAKx0eH))XU!kz`IJSN&B3&&4^9UAjMDc zh!DAbkG6)47>n^~^pVZw?Z6FV^a}}4VHw1gxo}{X$tiaXT1`aR7acDJIbOY(S@ycj z0?fRH?-Ax45+r&TJcnA_$!-P5E+`xwqBccfWPR2>VtozIFmcEVw$#W<5 zMHgID^o<0x@u(8NadcpsVU3v?FCcXXbK$f1Js&`XO_8I0YdV8AW?t;hk6v9}-Rmo; zls}vp_vHS@%G$boeTzxH^k9(PWbQq-6Wqr<_is9stPdsn+e#JaMag|5;Rk~G`rGa9 zka{GuJMR>JXcVo_tHV7^z~fmqgdq zP7Zg*L-Exu$J4JDik7oa``-7lZW1!EeZTR?2g0a}5zQ*w@Px!vEJ#>ox3T*NCfeL+ ze^4Jms8dZXbyTmXtp?0;)$cp-jM=BZ`!zqDvrSXMfb#Ga^33dJVQfymN{)%d8988Y zog~QOz7hmXOK>y6%WT_P-R!-4pr&lfon>^4sLi=5=~E4yN@=+A;D}L-H5_Dm_r=?} z&<#*!t>0rcK}UNnI{%EQau}xGd0s9c%QZY@>L1+n`I&;FcevE}x|lZg#WO%gMPbwd zOLkRNRdfyhnL66qifU@XVB^rBlvztAzcX^&TYC1}iScoG={Se&K_Wf5S@hQ|h9}F- zy+cE4#|8?Z9y>WZ2akx@`%ZJYoTbMmrylX8bprN9^UeswXvG2kWc+Z|7Ae6a`+@Bw9@CZ$<_diGa`l9QKExLTS* zC^)+@wrpRdm1dykeGyL5mr(pkioj`<7^)$VUxrE7%+!g9nBC99UFRPIbNv0}P-!f> zAI|lL@F)~WA3GDVyK1ud0k^R97#b4NU+xY&7;}bV+N}gyVs}2ed5;wno_YQxJTVB% z0QetVNQsGwn`947n;8GjVxn9ymV#~!*u-YH$d_Z3KyZ(dbk?tr(6*izpE&dP@87gN z1Nx(*qYoNcXPQg|RkgL~GmbgEW+N3}ohqq9IDsA}b3xAo+xe!2rm?Sj4K^}!$sVgR zXOs=eW{NHmkHW5)xdw=H7M@s&N!6{ZOT$;>=Jz&QO|sO~{fX=C8Xo69WbZei>vEOEzaO`ExU8qjA{ z1$Hb7THOrDL*8`;5LHAK54y-@rWB{dX&-P34x_0}GupdO*I5OpmkoOVb-aW2_72W~ zn&SYX8M%3IZd%jbUZK6}b#jBC3_X18jmc`E{p4a0<{uF*4&uEFyY^xaUWRgvEFamd z%ZI1Gwv+ivd`_D$N?M_wQ^{|cEiEkpF(V@?iD=@SFOBMIYH*Ok!oqI}34c;bcZM^> zL0rncx2q*V!6NnR`vN}z-IQ0z)zi=jO-dp#+GsPbcUXguA?5$o$*IU@J9aT*-r}ke zl0CckK{o-(Q7P%OR)x0Wp$ioYE$;Vis*IS78(j(cC6Ax?&~nY@4P4Xj0M1w7%23f7 ziPK=tn&2)>cpvI_zpY_FS${S!_Z4i6A1w!wama;OOj*xEoheQ-<&S23Z7wpCKHL_ZbVOX#sr2p^5GLMeu~jU^t1Ftysc=b4_P{A9ec_jI(bv7*FVv; z6k?-sO`R~%243*deohUK7tm&djhg+jzeNTFd`V}iCF0M<_he-WCXghfV^rbHKV%WgpU2%@QR$MR2a@lt2?fnkbsg$%LOlm>tVj^b zy)?e(4KUDR7o;Nax)Ea+2R*!`e_lWEH6J~5C$k#zpF=K;WouSFCO3mG1INiMEpX;C z3;?@_aRu&*rer{cEnVqxt*}XZ5$9XT3r=GHb1QpNCk!SYVTrM_C>{NU)o8{+i;tC+ z@aXy(R7aEfL^<5r#~x$a)LyNabZQw@qA0(Q*X086&RERvSzkkDspbl^qUqT+7##Ay?T$>6DW#W|)KUMx1{}+s& z$TU$>VL-&p%q(NJ3+@M-w}Vk0CFt(``B?jwh6a_}@2;Wf;d6rinAfa__LraMbEV*3 zA+bG@v8s1e?tQaA(XW+v%q_DRtyxttSox>ynAt>f^TqOy(>--^wJjYk=d;S8! z2M}NRytKFV!*tn`S-@o|8E-8?0U3VmJ_!T~q$Nz=p7B z?1+33@wn0Q8}PfbySZ(F?$$case|IJ+!vq+hC$1~*&o2ExT}#^j?o8*h>TRy)s31~ zUui}9Jr*WvLK*PxL>T?|SiVhdO$`IPWiW!1`kM3d(dnh?*6iofIUb(|8$S6gti-$S ztdWv-l8?<}=1`o{*0!RnafTHW^O(iAeFh?pvG>qJ_w_RWE-vzlKDBk9Aw${mqGXTJ zbk97EerrI1ltwV!!Nv-KYa$(N(;Hl{d6ZKaRS=6+$eWq^S4O#?o{mT`^*qVwU8sbpC8&p*~)z(Vg zi@59WA?SXBjZ$b{(?dvwSz!8P#IO14&liC$s=|w^-hi!218fS`wkGy+!g(k1oq->G zUi64m>IO_9-P%!Mu?N*Hw8+JMUvT3bk$cUoK+MP`mE|e31*j8Dv*FtkO!`8ccZTT~ zv>lEY`J-0sc`vIbSH5r{+!_Xil!HIP9! z#Y7#y$Lq1|YOE>s{bp??`0D9tKUClx6 zC@C_g%K9>0VS05j>Vf@y)y#Ay%h&23c$zV+qwDtTxa54eM=~c+o6!PkIq;#J<=E{` zm%#u*f-YANFq(^v=4@eSbGF?IeqG*jr1eo!vPc1oHyfk{)Arr)12uq)c8V*3h&Ux4v$u=XTV5e1z#dw#v;4 zvOc0L0&V-P9Kgm^iTS(rz?F;-4i0R~9y?@1mtGO5kooydM{^TO;@l3GPm2fEpp-VD zczC$EdorY*f9`5M|v z6M?A?P0$$OeFJGZh^lOBvIhyr5k|sO0nVViZVm9c`H*xurK-Uo4VGyF-_i;yt`1N$ zLK&@ilW4@Pd8dr%y$7crm`D{}_Op~Ize$+We@^+K4=+B^9YVK-0$O~vZF}I-!xj3N zEkJ@Q;^}QV2f~OnR}b{i4TZRx`D* zY8hqpkw=r%1D>w5b#oUEcv`%-LiT^~JKtZnlw9r%rcS(jIw);zF}U~7FD=!OVM<6y zpwp^FfaCo4X$Z#cXf*5g>(xwW@ZNa~a9rZNZqux5OqpwK@;CPwbh!M((9x9>c`Y1j z_tT#GCsvaH$_C;^2ktsYd0oPmBVp+#4G?`nf5%nFRdnFyF8WFL*MABtLJv+ni2((0ru@<>l~X|Xu!WAp4C2s zM|ksy$g{!F2glW{A5!npyze_qQs&ACf43}0aGX4}^ke_~RDi*)#;nP%CEx>b_`xcw z^aX7lE{EVh0d{U4d1rjKpTe2fi0PHqu7Y&e`3DRtLxjJ!cG{Q;TM zwEViXyWq(i!v(v4V+Czo?`s@c&#A>zT_AzF{ZbtImls1cK5Z%mxIxX}qa^5}>uR85 z8UfjV|B}Cvn_+ARIYsIi=`_wQRiJgTDZFvz`2_702QHW} z7#37+Yk1uNeR>2!!)S*~C|yAqoy$HRr+kctHQ1qu2Ast$DRE80kVDT(&;hF1d+b_G8T*NQ6XrP;p)ZU%z$^ zLkhVkd-3oGVfxXB``@rnMjpvKm{~sPi<#4YC%{3tFHu=ePEOdb2x=ACu8;QKL(jOH7X07KC-zjieQN+ibxEDZQt#qg#!##0%?@ma6Kasv zU0!-}aQ&V$JK$8fa5`7C zDe$oVLpa*hU}a|Ft62-T0{rG6V+$73Kxc#Z9Y>6?r)lcEPfm8WXioX=Mk9&~^iDIk zg(nhvSVPD#OjrObKgApcr*U<=ENo}6daV&O6g!iN@?uWq5pYE=i zH>IUdkLA0i6vS_T;~<JiBGDz|yw>OTI)g=`yI_hJvSAC=6$?hTjOe3O4pBopmzg%e9TB@yBe^+HUDJnCp406K(FzJaE&w z=pV+~$>MwxaosTl@e3hZ=`}eb%L@xM`IE>=KKW6c2;hnFy;zx_M>_?)NP{jYg8P(v zUJuQqT|v?xvhR%YBl+oVpp74f|JkUSw(U;_qWP5~ib;j(1{fYtD6E5C{V1y+#J%U^ zYqI9W)ZDkPHwZNS}CA9HwGlkgnewCWz*A~54`6{?_b7vkxO*!Lhiu6M3 zn%)3Nn9>(gQAVxwsZ&O;5iwik8FnDcd|AX*OAP*7`F0sTq)KZmX%ztlM196axuv=Y zybARiP(dZFGAL$C3J=f<^0;YTr=gZ7g(YKtFF$^D_Ps}xY`d}iB_huvy?R~s=8F_t zNXTvRL}c=O!mV(_L%hD_O#vbtC)p>~>XQhSywCIl_6Pg>4*QezdRJN=2s~KYNdmj* z(6g{jtNNYxenxcR#t2}Vys$paNp1X&2-z#E5`JXt> z1MnQdb^ticXP_H1f%H}j3vmBK=hm5Lw(=teBm^+7GeK= zqW0cv4+B7eGF|R)?ev%xH+w}*u<2}Sll$NC)qbUoG_w)%ZnJNiH`ANr)NK(5!9Y`J z&wE^lr3BPMGaYYwcr%F#2~E(sOc7+SUyz$yW&$NG2_|UvEK+bW7XH!_Xi%4w62si^8c&4O2g(sIsEyqcFBV^uC$eY zwS4oy{-3SeGRbL*`X95wu1gZTJyrDU^(|Mq)-?jK1;20wAM;opG-hM31oUL?063vk zerMWokmMtmm6h!PgOuQXb5ql`d20mNY3ud8_4mX?8r4?Dw6wIKDZ>`xOZYRh9tG7A zPrMT;C2|D$CTgUjbo&{3`=Oi#l+6|`>45CJ{c)D@FvF@7w~c82qOScBt>~Hx^&E@< z<9~^@KmQi1)%l91y{*EJgmn}FBDP)3_h~JwGRmS*3=r4FE#tP_bi<%(d|=p)wIqUI zbBu{eCX`i7rKIEp9XNq9l0!n=-LTK>7<)dwNhYIH)kkP?LiBt|Mi#v}rSb<{-WE+2 zCcuq1A{UQY1Wj3~8SklL*Jqt_vuc@8plsTR*G#4f9bX-r?+EVr00zLm67sk?E#-j2 z7wj6+mXG33$LmHRuODj+MnB}E=8JSdgrBfP|X$_%w@^!w# zW`m7-b$5f#3mG@Y-AxPZYxj4W23J3DV|SfifJB(6udi>L$=%%@pTnvj+Yx=~Py$GS z1%Sm1h=Rj0@*cLiqwFa+$vO!Ku>HYEWf>VXv*91~i{9Htp7iwew^OOF6WwoTtIP&Z zCTRMO8G-!!cRj9CoDiw&KEjI!7b^DCdoX_)B-sTfZ6qQl&H0ua70@p4TWJsR=!@2m z3R(bjy)NniNxD%eEd)a3_gqXM;)^>X3Bwf&-e(mJIp=wFU7v8j+<5n?e`8EYVXYP~ zOI?od+JezK@#;p9MimAMC642$h7%=NT>yaP1=-U3<Dx|A5u36YSm*t?sn^t@|`{XWrS_1*eP0a#CZ*|=YBls?|FW(1<;#G_k`dD$TBxx^%8uBU<__0EF>rsMtt z|8xY+H2PPK%~QonYKmOe$o?jYWBE8r6Wkz&TJcsMLC#>moY2Ml&?!-X%Xua zG^4f29>+-A2X1+P3_f|anY?obU@^87Q27*B*&!m;Orhu}FJZ~vmtVK0zfrZ%w(dAT zwe%GbU4z%?L}#vEPg2K!_W)}TBWque(9(RR8sMi0SAOkO$rYH+vV*%mbn zlKcz|{%9vq2NfyalkpI6^$zcmw`=`i)U3HualfEI-QAt9Vp$8IdyZtOE(~;ZB4;)4 zL`c+creN-hidnDmb#Zvo<=Nk(6y9aFq6(jck;V?0iFweN^5_!{8fshm zmQ4slG(F;Hf%*7is97Fy^6#em0BeI~=QAwvr%unk|CE$G3lgMhz@NK>cOK7vu|~qO zsk3LIz^*ie?&8Elk?6u;E!hvn&*OAhB>TkNFUw1`_0GIbx8(DJCs7>88;gfxsadsh zTudF2*J;19tJSfDFc9aOjQxDcWNont`BwM&7^ul?>|eCp zv}xMTf&J^k?-x90MAHL@vS1wxnZx#N8lGhaYOf(Z?W4~^vIm<_!y>747BMUSfxZHcY&Q9|FbvU=e59l!;n%rQH_%^WeUHzr~aAjE$fa5 zfJ+PnHAN+@NHCq;g<)n2`N;ZYPW)Wbp{ec!=AB})m{g7NO#dy{KAF+?2{$b`#~pS! zu3V?*xY-}+kxeshjd!8HAbOACS9)9oJ6ryM%p|5uHR#>!UayykG$4bEL1YD=CP3n> zjc1B_boZ9b=nUhd7QB$r_QBRbay!7=QdC$N&~7MdV^h5UT15#X;cOn?v*+S^65-ZJ zI>G9pNAhX_f)yLFSG6>$n3vun0^RtToSSL#xt9(z)7^!~z`unz|INK*+Z~F_69&fQ zVk>N2deG6;@260CT)ncqNzVZKG9IMh(X!stUcPq7ZQa-!zB2o?*LvM))Zr{J{wG;I zRS7=pF8({pAsrhvbr*uy`&S5PkY6f-?#u!Pl{qUTM^f>)6!3-Eckf3o5?-Zz*MSsk zZi}tEP@3SK21tN8fYXp{pH$#+ZXwmAdzjQC>%~QMc}LMmw}-z51;3f;UGsD<^-$~k zq;?({#&l2wQI;SRiRu8dqW|R+rUDEX5p+F1q#K@{a+`fJZ@KT_l`<(;Rh{1dMb>-! z<>9Vd^Nr#5LC%0}A(N(h9Oai?w(NR0S|*}0M91J$qB7`L!#T(G2XtV-kDCx9zobO{ zngj!Rt8N!#wjD#~9@cU5`y0&g<#-m-IR(atc^xIN$_v@yPxicrcXr1lX42DrWSkD% zu0}vxo>rdqHmlgnz}LgxYEKn?QDWb>87Fr8znDIJWf!B^TRfGiIu_lZd7YAobqZ_h zH}^X_HQNG-aslVM;R^uC?26bH^AhHf`1l^APy7~x!uBeCNSr>Kh{w34)`Z*(mO7?^ zyB%=HEnQNsAI2_-?br4SEcykQ2fcsa-LMnxWVOrnFzd7i^=SF0P>GKo7QaXdW`J+m zX0ZOyHK-x9|C3`QzSM1i*nxSzF!l_+*X(k7cD*qd6EubDbjOm{>mC?nCw2HH?!9W>GV#5>k|Zj#5b2kX`V}``T7zfCl5}&BWBy zDuE|#iQ5-<>DB&hKSIbeA~p;-V4|V@D^ElTT7oU32y=e{jUF+(@y9%qV)~!tgwfr8 zTBTcCTQAiBD427SK~voF5h}hSL-@whH*zE0C25MFyvh3#%(xV0^e8P&Ir`6gV?;3= zYsH=;V5o;sD#{^>z0{tFZ_f*bD@g8}!$TkoUB36;rqFR6mSZ)8Mum>};eHRUcRJ$Q z(}%EbW~jS(__S%Ts{X<0O7c(M%#Z+yESdAq=#9XMXjwTVn`4D^dG;eSkaw3%1g5fg zOQ!PyB6uaX_~g{`N2vd=?i_{dJyGiEC6_-F4jOZj!(~p~~Uk z98az;S0TP1E=tYHhD0DXPjkXKXLvfkJ-mU&N;ddk;Lq>nV)rfv;I25Ra&UO2E<_!; zJ5OV=KuZ920{BlyI@J(3tGdN`Hq@CeD5({elfSR~3+XLqVP=O37|2#o@%m}69X%eG zVxKq?1WFw)6XNC#n9Vkimcrp}==aW#6klYgnf^d#lc)wO1)oclBq*I#P6kK(Cn=O93GVZ`6tCbn5=^Qb_y5f4OGI|Q zYz)nSUH{2w=N!>ob715s(igm9{4XjJ1OiPJDam=>Rc>4ebgf0HrF~`iIB%J@oSqbA zARyns{S(5Z|98j#{|*=Bi(jmS#0DkAyM#cPeq4)h$d}44#)YXVwO+5oY`Zz%Cf~2s zk9T7#SzQo_H|ZN=sU<#*hP)hPnq-%5;%71rq<&qxZ`sWoYu9pSb=oIO|BXeX<;|){to6L%$D)3L%?L>=Z zXr)5a0%PyMT#9w7=?z@PS}!?|j-Y;_$EP~s4c)!ki0k@s`|n9fC85O;RaKXt9mCea zeuA&j@h8}M6ga-7943wgmNF@q>e zq{1hv*Eu?0CK3TNaQkB)=zrM7nz5Hzb0mp)h(r<0MMZ;^Iv=#tILOn&UExSBP%SON z+8uaE6agoAMypc{%pK?d&8is2TcCN^?`fu1QdU}>Q$~-xYzM4Fg|y}NFnsL`Ffp?R zOH!fbj}Nh}c(@1y_g{#zKAZCsYY1TCD9q6``XEC1NmNv6bAf4VN-zg~esK|G_FF=b zoOO;YJcZYu{QN?JetReXkG0D{fV_c-xN#adGUMa4hBGC44oN>gZ49UZY2Du%97`@I z@MTZ4NQ4m~DeJ~-EO%IVZB@#59!7+B z!b`t9yX)eLb^HBjK-~rYSA{=tHTU~9gB7`PTyMzmf14RiKIZV<+al}>C9_?n(QVaz zqkA%j_!Z22r0TQk9djxkXFD|E%G2JFKeT zFf;3Ek+XhSv8w)ORb3cU>BFP*Kf=zyyj zkBe;(M2oD;Z07WOTb_763X+%ZHD~F!ER;D8nf)2+hd{c%2qk94O5@=8=u^4&Ux#{K@K-jsZdlnRUgQLU z-m@gjj%`M3q%&gyjjl)Ix>-GjY;9(d9m~yL-?Oqp7ZFg(t!G$NH8k3_oYcc|MJ{TY zl77&bE9vP4>ovMk-L#2q?(7(WWn0fTWwSUC$hG^y$lmdt+pU66Vq@ecVeRKi((}4~ zo$xQIiCMNfW_C(T}KL-EV<}2T;A`n1iGVsH~BSb+(xyqDfQ)m$z zsB561Wq{98!wv*RiCqbY?yLHX3FB^kyJHQ=CWdCxUjK8itF@osrWROPj;g9c&8SeV z9(8*^fR8Y17O5hnp)u38$26n6k_Eml+_!_ad9rZuB6j;_!CA6!xFO5G1tlf$jQ-$& zb{tEo?zdLVRt4C%b+Ks=N)e}r0sLI(9(DrItx=}8(ekRP*`V!MoKT*y$4i*u)gF}T zrVr#bh2tlgv|tCUb4Lv4nq#PtgGxLRAqnh8H@1#Z662ujwAnyoY4a;?YoJPt>1PqS zze$)FKIea7OQ-0BIXD3CiFNxAUdYanjaP?Q`arLE3kj>XkA((k>Pz0JnR=|W7mMD+79*agR=ZB{&EeyFpO8^0+UoxFy)bBOWBE=Lg$1(J-URFqplzSNji)k71AK!y`RSmnFv8oXkK{oRK4K4&v%`d@&TJPW^-dzTDFnd3`L z5-(UYun;Q4Ysqi6(FLQa|qq{)^UnW8)XSv@gCn>u0ShySBfjpgUwUIXT)c@gX#@@|K z75J*BV`X*L_9~BI;^OjrDa5r_63?d_LFEU;Z~IVZwBcAD(pCTf2t#wVkkcg*ua>xO z4WFFnJLyLbi8)_0^Ie_TLm=8S%>|v^#_#@1KnbNhZQCS5gMUqG`8R|}aEZds5uzk& zQC^2?8Ilu3fK3VS8G)B%1cmij16)T~0H1V8DRM_KkUR-UVu9Cu!zCb%#SifQyoe-*CeM1!DsmaR)jYldKvxp^-T{ zTh=2=C+70C4R21$1Jl01A&=KCNahctf+TmMuL65cY1YrETJkFc59Vb=;Z~qTxqhWL z5H-yg8N|rzMu8La)I5KyXbw)rNYhj3z1)b%MMA8&>=Wp1kaUCJldxYT>P^7zdaT%g--UjtpCP*x3uP{LQg;+v9ndW8AZrF+q!?Om~D*oQ+~UX`F~IDochq3=D<$8L=H}HRox`M(thzM z_eN5W9R(anB=>)u^1SnMV?#&*EfDZK9gaylBVHDPn`Qzbc>w=36QOICB4uuO<+e`* zA<15%izMLJrPgoy7XFkMPof|^tEJY7uF4rIA&yT^KxqF<;C3;ac?^O2ldM;v)_PYI zfBJ|j*}aajpK0N$=wcF(55_SYd7`2c! zzFBE$g@kRtu8v|pKEqyA`49m`8Er9nnb&soNm$PYO(V4uCuY*s9_S@NzVR@MCtCK2 zkTCxbD%Q!iO#GozbGru(+TgxL2xzlXd^O4rDz^=x?2)4wF1EtRJQDw92!NLwB+Vso z=(kbB&qAe(Yn&qeK&uH2O8wx-adWcoKD=wvgvI5LF)hk%`04x2teE)yJ<&Mm2_~MA zzqm-8ajn-iJOhn#+Dxly?#gZT#GhxF?P4dkv)|r>X0vV0y?R~5l{-EjbSSezp>!|k zNH&zewm-0aGLpD)MhsLqF5BpS@BGU3yIW^tYMn6p@u?o-okMjQ_W$#jc`pkP#e%wu z3p?Jw+=95v!`v@HLDJy+mxo$BjVbqAv4VJ3f(jWwvOG{&_>ijuNtRfzyfG^2E)xHr!iE(k=o6Jaf8zAB zU5dq)9c@x zZFu^PL15P_L6h|RO&3D@HGW5BWffNa%uAHqQ1i3V;n%xK?_1Ijv;nKf$ztai8A3m6 z+womA&<(2=V*s|%7iaSzB`1M!ulchIcvGgmba<7X64QR?&U%Iuyc;8ewd&?)%sE#C zY#*L7Gp+|Fd0=8!kEsu-zhpXhOTU~A3&W}%E|983%$;BE5U|nwplIh5sSPzbN*U$V zQ^Upbs51sfk7|8<(Yi+UzVT}2>PMGt zXKX1hn4*Z(UU?+X?fm$3c(`xiqUv2)e^NIeeGDutOY04nUA}&P!jHD_#go=K-b-dL zH9g9%#I|kEeAC*b54V+!1K6YLzs=$lVz|Q6syXY8<+BHFf^|_ko$FQh8nDHGY=-noZB*t4tV@t=9YuU+@vhwx%7kUIc@* z`fS;4TTtx%@8{G1f42Rvyf6NDT~gAE!0K!AahL0DkV+_pb!z|Y9j-=jb!|9S#Q+4J M?5=(;>zopr0P*t?;{X5v delta 16049 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 diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index e9a095118717009194bb1932159cb77bbf96a1f7..d26322740f3b3355597fc83ef86642299527388c 100644 GIT binary patch delta 10661 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 OpQ5aqOog<0$o~OD;tK`< delta 9871 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 delta 11720 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 K4c2Rm;Qt4q{|BW2 diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index 63515f5b2e5e16b83c8bb898fc7dd11c277406a9..2f528c44c7776c7f16129dff6e95f28742b89636 100644 GIT binary patch delta 9669 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%0D`N6fUFzsm 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 From ee3417f19ad9e0d8ee180d376b77e37cb1fc0dab Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 6 Feb 2017 01:42:59 +0100 Subject: [PATCH 021/122] Update chance --- code/modules/mining/lavaland/necropolis_chests.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 309c7c9f75c..0c296edbe0b 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -15,7 +15,7 @@ /obj/structure/closet/crate/necropolis/tendril/New() ..() // uncomment me once these items are being implemented - var/loot = rand(1,25) + var/loot = rand(1,24) switch(loot) if(1) new /obj/item/device/shared_storage/red(src) From cd865ac1f2e749f8aefeea22e7abee13161604c0 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Mon, 6 Feb 2017 18:56:23 +0400 Subject: [PATCH 022/122] revert immovable rod announcement change --- code/modules/events/immovable_rod.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index bb474e38593..72718f2243a 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -11,7 +11,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 announceWhen = 5 /datum/event/immovable_rod/announce() - event_announcement.Announce("Unidentified object inbound. Brace for impact.", "Collision Alert") + event_announcement.Announce("What the fuck was that?!", "General Alert") /datum/event/immovable_rod/start() var/startside = pick(cardinal) From bbe7663e21fd6d52e2d3e5880ff6ffbfda910d09 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Mon, 6 Feb 2017 20:22:08 +0400 Subject: [PATCH 023/122] fixed enter_link --- code/modules/events/immovable_rod.dm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index 72718f2243a..2dc2c8a17dd 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -35,12 +35,18 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 z_original = z destination = end notify_ghosts("\A [src] is inbound!", - enter_link="(Click to follow)", + enter_link="(Click to follow)", source=src, action=NOTIFY_FOLLOW) poi_list |= src if(end && end.z==z_original) walk_towards(src, destination, 1) +/obj/effect/immovablerod/Topic(href, href_list) + if(href_list["follow"]) + var/mob/dead/observer/ghost = usr + if(istype(ghost)) + ghost.ManualFollow(src) + /obj/effect/immovablerod/Destroy() poi_list.Remove(src) return ..() From 2a23862c6a430298e5943a98ce122acfd69f2e68 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 6 Feb 2017 18:39:03 +0100 Subject: [PATCH 024/122] Kinetic accelerator update, other fixes --- code/game/gamemodes/wizard/rightandwrong.dm | 6 +- .../game/objects/effects/spawners/lootdrop.dm | 2 +- code/modules/clothing/spacesuits/ert.dm | 24 +- .../clothing/spacesuits/miscellaneous.dm | 45 +--- code/modules/mining/equipment_locker.dm | 1 - .../mining/lavaland/necropolis_chests.dm | 10 +- code/modules/projectiles/ammunition/energy.dm | 12 - .../guns/energy/kinetic_accelerator.dm | 234 ++++++++++++++++++ .../projectiles/guns/energy/special.dm | 135 ---------- .../modules/projectiles/projectile/special.dm | 56 ----- .../research/designs/mining_designs.dm | 20 -- icons/mob/head.dmi | Bin 266856 -> 266913 bytes icons/obj/clothing/hats.dmi | Bin 122119 -> 123619 bytes paradise.dme | 1 + 14 files changed, 269 insertions(+), 277 deletions(-) create mode 100644 code/modules/projectiles/guns/energy/kinetic_accelerator.dm diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index a8e449e1175..7145a414d7e 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -1,7 +1,7 @@ /mob/proc/rightandwrong(var/summon_type) //0 = Summon Guns, 1 = Summon Magic - var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","arg","uzi","turret","pulsecarbine","decloner","mindflayer","hyperkinetic","advplasmacutter","wormhole","wt550","grenadelauncher","medibeam") + var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","arg","uzi","turret","pulsecarbine","decloner","mindflayer","kinetic","advplasmacutter","wormhole","wt550","grenadelauncher","medibeam") var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffhealing", "armor", "scrying", "staffdoor", "special","voodoo","special") var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos","necromantic") @@ -76,8 +76,8 @@ new /obj/item/weapon/gun/energy/decloner(get_turf(H)) if("mindflayer") new /obj/item/weapon/gun/energy/mindflayer(get_turf(H)) - if("hyperkinetic") - new /obj/item/weapon/gun/energy/kinetic_accelerator/hyper(get_turf(H)) + if("kinetic") + new /obj/item/weapon/gun/energy/kinetic_accelerator(get_turf(H)) if("advplasmacutter") new /obj/item/weapon/gun/energy/plasmacutter/adv(get_turf(H)) if("wormhole") diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 546db62032c..b9804e7d9a5 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -194,6 +194,6 @@ /obj/item/weapon/stock_parts/scanning_module = 1, /obj/item/weapon/spacecash/c200 = 1, /obj/item/weapon/airlock_electronics = 1, - /obj/item/weapon/gun/energy/kinetic_accelerator/super = 1, + /obj/item/weapon/gun/energy/kinetic_accelerator = 1, /obj/item/pizzabox = 3, ) diff --git a/code/modules/clothing/spacesuits/ert.dm b/code/modules/clothing/spacesuits/ert.dm index d5c4d5626bb..2b16a611594 100644 --- a/code/modules/clothing/spacesuits/ert.dm +++ b/code/modules/clothing/spacesuits/ert.dm @@ -101,6 +101,7 @@ desc = "A suit worn by the janitorial of a Nanotrasen Emergency Response Team. Has purple highlights. Armoured, space ready, and fire resistant." icon_state = "ert_janitor" +//Paranormal /obj/item/clothing/head/helmet/space/rig/ert/paranormal name = "paranormal response unit helmet" desc = "A helmet worn by those who deal with paranormal threats for a living." @@ -117,7 +118,28 @@ max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT sprite_sheets = null - /obj/item/clothing/suit/space/rig/ert/paranormal/New() ..() new /obj/item/weapon/nullrod(src) + +/obj/item/clothing/suit/space/rig/ert/paranormal/inquisitor + name = "inquisitor's hardsuit" + icon_state = "hardsuit-inq" + item_state = "hardsuit-inq" + +/obj/item/clothing/head/helmet/space/rig/ert/paranormal/inquisitor + name = "inquisitor's helmet" + icon_state = "hardsuit0-inq" + item_state = "hardsuit0-inq" + +/obj/item/clothing/suit/space/rig/ert/paranormal/beserker + name = "champion's hardsuit" + desc = "Voices echo from the hardsuit, driving the user insane." + icon_state = "hardsuit-beserker" + item_state = "hardsuit-beserker" + +/obj/item/clothing/head/helmet/space/rig/ert/paranormal/beserker + name = "champion's helmet" + desc = "Peering into the eyes of the helmet is enough to seal damnation." + icon_state = "hardsuit0-beserker" + item_state = "hardsuit0-beserker" \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 0a6779fd807..4d7e1011686 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -207,47 +207,4 @@ armor = list(melee = 20, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100) max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 - strip_delay = 130 - -/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal - name = "paranormal response unit helmet" - desc = "A helmet worn by those who deal with paranormal threats for a living." - icon_state = "hardsuit0-prt" - item_state = "hardsuit0-prt" - item_color = "knight_grey" - max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT - actions_types = list() - burn_state = FIRE_PROOF - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal - name = "paranormal response team suit" - desc = "Powerful wards are built into this hardsuit, protecting the user from all manner of paranormal threats." - icon_state = "knight_grey" - item_state = "knight_grey" - max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT - burn_state = FIRE_PROOF - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/New() - ..() - new /obj/item/weapon/nullrod(src) - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - name = "inquisitor's hardsuit" - icon_state = "hardsuit-inq" - item_state = "hardsuit-inq" - -/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor - name = "inquisitor's helmet" - icon_state = "hardsuit0-inq" - item_state = "hardsuit0-inq" - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker - name = "champion's hardsuit" - desc = "Voices echo from the hardsuit, driving the user insane." - icon_state = "hardsuit-beserker" - item_state = "hardsuit-beserker" -/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/beserker - name = "champion's helmet" - desc = "Peering into the eyes of the helmet is enough to seal damnation." - icon_state = "hardsuit0-beserker" - item_state = "hardsuit0-beserker" \ No newline at end of file + strip_delay = 130 \ No newline at end of file diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 712fca9592a..4e8274dac1e 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -342,7 +342,6 @@ new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000), new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000), new /datum/data/mining_equipment("Super Resonator", /obj/item/weapon/resonator/upgraded, 2500), - new /datum/data/mining_equipment("Super Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator/super, 3000), new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500), ) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 0c296edbe0b..61da8dc4d46 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -41,7 +41,8 @@ if(10) new /obj/item/ship_in_a_bottle(src) if(11) - new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker(src) + new /obj/item/clothing/head/helmet/space/rig/ert/paranormal/beserker(src) + new /obj/item/clothing/suit/space/rig/ert/paranormal/beserker(src) if(12) new /obj/item/weapon/sord(src) if(13) @@ -49,9 +50,9 @@ if(14) new /obj/item/weapon/nullrod/armblade(src) if(15) - new /obj/item/weapon/guardiancreator(src)/* + new /obj/item/weapon/guardiancreator(src) if(16) - new /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs(src) + new /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs(src)/* if(17) new /obj/item/device/warp_cube/red(src) if(18) @@ -66,6 +67,7 @@ new /obj/item/weapon/grenade/clusterbuster/inferno(src) if(23) new /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/hell(src) - new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor(src) + new /obj/item/clothing/head/helmet/space/rig/ert/paranormal/inquisitor(src) + new /obj/item/clothing/suit/space/rig/ert/paranormal/inquisitor(src) if(24) new /obj/item/weapon/spellbook/oneuse/summonitem(src)*/ \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index 93e5d5f2bb4..d98f53ef74c 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -118,18 +118,6 @@ projectile_type = /obj/item/projectile/meteor select_name = "goddamn meteor" -/obj/item/ammo_casing/energy/kinetic - projectile_type = /obj/item/projectile/kinetic - select_name = "kinetic" - e_cost = 5000 - fire_sound = 'sound/weapons/Kenetic_accel.ogg' // fine spelling there chap - -/obj/item/ammo_casing/energy/kinetic/super - projectile_type = /obj/item/projectile/kinetic/super - -/obj/item/ammo_casing/energy/kinetic/hyper - projectile_type = /obj/item/projectile/kinetic/hyper - /obj/item/ammo_casing/energy/disabler projectile_type = /obj/item/projectile/beam/disabler select_name = "disable" diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm new file mode 100644 index 00000000000..af1f6593982 --- /dev/null +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -0,0 +1,234 @@ +/obj/item/weapon/gun/energy/kinetic_accelerator + name = "proto-kinetic accelerator" + desc = "A self recharging, " + icon_state = "kineticgun" + item_state = "kineticgun" + ammo_type = list(/obj/item/ammo_casing/energy/kinetic) + cell_type = /obj/item/weapon/stock_parts/cell/emproof + needs_permit = 0 + unique_rename = 1 + origin_tech = "combat=3;powerstorage=3;engineering=3" + weapon_weight = WEAPON_LIGHT + can_flashlight = 1 + flight_x_offset = 15 + flight_y_offset = 9 + var/overheat_time = 16 + var/holds_charge = FALSE + var/unique_frequency = FALSE // modified by KA modkits + var/overheat = FALSE + + var/list/max_mod_capacity = 2 + var/list/modkits = list() + + +/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user) + if(istype(A, /obj/item/weapon/crowbar)) + if(modkits.len) + user << "You pry the modifications out." + for(var/obj/item/modkit/M in modkits) + M.forceMove(get_turf(user)) + else + user << "There are no modifications currently installed." + else if(istype(A, /obj/item/modkit)) + var/obj/item/modkit/MK = A + var/current_mod_capacity = 0 + for(var/obj/item/modkit/M in modkits) + current_mod_capacity += M.cost + if((current_mod_capacity + MK.cost) > max_mod_capacity) + user << "You don't have room to install this modkit. Use a crowbar to remove existing modkits." + return + else + user << "You install the modkit." + MK.install(src) + else + ..() + + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/item/projectile/kinetic/K) + for(var/obj/item/modkit/M in src) + M.modify_projectile(K) + +/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg + holds_charge = TRUE + unique_frequency = TRUE + +/obj/item/weapon/gun/energy/kinetic_accelerator/hyper/cyborg + holds_charge = TRUE + unique_frequency = TRUE + +/obj/item/weapon/gun/energy/kinetic_accelerator/New() + . = ..() + if(!holds_charge) + empty() + +/obj/item/weapon/gun/energy/kinetic_accelerator/shoot_live_shot() + . = ..() + attempt_reload() + +/obj/item/weapon/gun/energy/kinetic_accelerator/equipped(mob/user) + . = ..() + if(!can_shoot()) + attempt_reload() + +/obj/item/weapon/gun/energy/kinetic_accelerator/dropped() + . = ..() + if(!holds_charge) + // Put it on a delay because moving item from slot to hand + // calls dropped(). + sleep(1) + if(!ismob(loc)) + empty() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty() + power_supply.use(500) + update_icon() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload() + if(overheat) + return + overheat = TRUE + + var/carried = 0 + if(!unique_frequency) + for(var/obj/item/weapon/gun/energy/kinetic_accelerator/K in \ + loc.GetAllContents()) + + carried++ + + carried = max(carried, 1) + else + carried = 1 + + addtimer(src, "reload", overheat_time * carried) + +/obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity) + return + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/reload() + power_supply.give(500) + if(!suppressed) + playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) + else + loc << "[src] silently charges up." + update_icon() + overheat = FALSE + +/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() + cut_overlays() + if(!can_shoot()) + add_overlay("kineticgun_empty") + + if(F && can_flashlight) + var/iconF = "flight" + if(F.on) + iconF = "flight_on" + add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) + + + + + + + + + + +//Casing + + +/obj/item/ammo_casing/energy/kinetic + projectile_type = /obj/item/projectile/kinetic + select_name = "kinetic" + e_cost = 500 + fire_sound = 'sound/weapons/Kenetic_accel.ogg' // fine spelling there chap + +/obj/item/ammo_casing/energy/kinetic/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") + ..() + if(loc && istype(loc, /obj/item/weapon/gun/energy/kinetic_accelerator)) + var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = loc + KA.modify_projectile(BB) + +/obj/item/ammo_casing/energy/kinetic/hyper + projectile_type = /obj/item/projectile/kinetic/hyper + + + +//Projectiles + +/obj/item/projectile/kinetic + name = "kinetic force" + icon_state = null + damage = 10 + damage_type = BRUTE + flag = "bomb" + range = 3 + var/damage_multiplier = 4 + +/obj/item/projectile/kinetic/super + damage = 11 + range = 4 + +/obj/item/projectile/kinetic/New() + var/turf/proj_turf = get_turf(src) + if(!istype(proj_turf, /turf)) + return + var/datum/gas_mixture/environment = proj_turf.return_air() + var/pressure = environment.return_pressure() + if(pressure < 50) + name = "full strength [name]" + damage *= damage_multiplier + ..() + +/obj/item/projectile/kinetic/on_range() + PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, loc) + ..() + +/obj/item/projectile/kinetic/on_hit(atom/target) + var/turf/target_turf= get_turf(target) + if(istype(target_turf, /turf/closed/mineral)) + var/turf/closed/mineral/M = target_turf + M.gets_drilled(firer) + PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, target_turf) + . = ..() + + +//AoE + +/obj/item/projectile/kinetic/hyper + name = "kinetic explosion" + damage = 10 + range = 3 + +/obj/item/projectile/kinetic/hyper/proc/aoe_blast(atom/target) + var/turf/target_turf = get_turf(target) + if(!target_turf) + target_turf = get_turf(src) + PoolOrNew(/obj/effect/overlay/temp/explosion/fast, target_turf) + for(var/T in RANGE_TURFS(1, target_turf) - target_turf) + if(istype(T, /turf/closed/mineral)) + var/turf/closed/mineral/M = T + M.gets_drilled(firer) + +/obj/item/projectile/kinetic/hyper/on_range() + aoe_blast() + ..() + +/obj/item/projectile/kinetic/hyper/on_hit(atom/target) + aoe_blast(target) + . = ..() + +//Modkits + +/obj/item/modkit + name = "modification kit" + desc = "An upgrade for kinetic accelerators.." + icon = 'icons/obj/objects.dmi' + icon_state = "modkit" + origin_tech = "programming=2;materials=2;magnets=4" + var/cost = 2 + +/obj/item/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + return + +/obj/item/modkit/proc/modify_projectile(/obj/item/projectile/kinetic/K) + 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 a648831cd8b..5818a0ee7a2 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -84,141 +84,6 @@ ammo_type = list(/obj/item/ammo_casing/energy/mindflayer) ammo_x_offset = 2 -/obj/item/weapon/gun/energy/kinetic_accelerator - name = "proto-kinetic accelerator" - desc = "In the year 2544, only a year after the discovery of a potentially \ - world-changing substance, now colloquially referred to as plasma, the \ - Nanotrasen-UEG mining conglomerate introduced a prototype of a gun-like \ - device intended for quick, effective mining of plasma in the low \ - pressures of the solar system. Included in this presentation were \ - demonstrations of the gun being fired at collections of rocks contained \ - in vacuumed environments, obliterating them instantly while maintaining \ - the structure of the ores buried within them. Additionally, volunteers \ - were called from the crowd to have the gun used on them, only proving that \ - the gun caused little harm to objects in standard pressure. \n\ - An official from an unnamed, now long dissipated company observed this \ - presentation and offered to share their self-recharger cells, powered \ - by the user's bioelectrical field, another new and unknown technology. \ - They warned that the cells were incredibly experimental and several times \ - had injured workers, but the scientists as Nanotrasen were unable to resist \ - the money-saving potential of self recharging cells. Upon accepting this \ - offer, it took only a matter of days to prove the volatility of these cells, \ - as they exploded left and right whenever inserted into the prototype devices, \ - only throwing more money in the bin. \n\ - Whenever the Nanotrasen scientists were on the edge of giving up, a \ - breakthrough was made by head researcher Miles Parks McCollum, who \ - demonstrated that the cells could be stabilized when exposed to radium \ - then cooled with cryostylane. After this discovery, the low pressure gun, \ - now named the Kinetic Accelerator, was hastily completed and made compatible \ - with the self-recharging cells. As a result of poor testing, the currently \ - used guns lose their charge when not in use, and when two Kinetic Accelerators \ - come in proximity of one another, they will interfere with each other. Despite \ - this, the shoddy guns still see use in the mining of plasma to this day." - icon_state = "kineticgun" - item_state = "kineticgun" - ammo_type = list(/obj/item/ammo_casing/energy/kinetic) - cell_type = /obj/item/weapon/stock_parts/cell/emproof - // Apparently these are safe to carry? I'm sure goliaths would disagree. - needs_permit = 0 - unique_rename = 1 - origin_tech = "combat=3;powerstorage=3;engineering=3" - weapon_weight = WEAPON_LIGHT - can_flashlight = 1 - flight_x_offset = 15 - flight_y_offset = 9 - var/overheat_time = 16 - var/holds_charge = FALSE - var/unique_frequency = FALSE // modified by KA modkits - var/overheat = FALSE - -/obj/item/weapon/gun/energy/kinetic_accelerator/super - name = "super-kinetic accelerator" - desc = "An upgraded, superior version of the proto-kinetic accelerator." - icon_state = "kineticgun_u" - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/super) - overheat_time = 15 - origin_tech = "combat=3;powerstorage=2" - -/obj/item/weapon/gun/energy/kinetic_accelerator/hyper - name = "hyper-kinetic accelerator" - desc = "An upgraded, even more superior version of the proto-kinetic accelerator." - icon_state = "kineticgun_h" - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/hyper) - overheat_time = 14 - origin_tech = "combat=4;powerstorage=3" - -/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg - holds_charge = TRUE - unique_frequency = TRUE - -/obj/item/weapon/gun/energy/kinetic_accelerator/hyper/cyborg - holds_charge = TRUE - unique_frequency = TRUE - -/obj/item/weapon/gun/energy/kinetic_accelerator/New() - . = ..() - if(!holds_charge) - empty() - -/obj/item/weapon/gun/energy/kinetic_accelerator/shoot_live_shot() - . = ..() - attempt_reload() - -/obj/item/weapon/gun/energy/kinetic_accelerator/equipped(mob/user) - . = ..() - if(!can_shoot()) - attempt_reload() - -/obj/item/weapon/gun/energy/kinetic_accelerator/dropped() - . = ..() - if(!holds_charge) - // Put it on a delay because moving item from slot to hand - // calls dropped(). - spawn(1) - if(!ismob(loc)) - empty() - -/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty() - power_supply.use(5000) - update_icon() - -/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload() - if(overheat) - return - overheat = TRUE - - var/carried = 0 - if(!unique_frequency) - for(var/obj/item/weapon/gun/energy/kinetic_accelerator/K in \ - loc.GetAllContents()) - - carried++ - - carried = max(carried, 1) - else - carried = 1 - - spawn(overheat_time * carried) - reload() - overheat = FALSE - -/obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity) - return - -/obj/item/weapon/gun/energy/kinetic_accelerator/proc/reload() - power_supply.give(5000) - if(!suppressed) - playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) - else if(ismob(loc)) - to_chat(loc, "[src] silently charges up.") - update_icon() - -/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() - if(!can_shoot()) - icon_state = "[initial(icon_state)]_empty" - else - icon_state = initial(icon_state) - /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow name = "mini energy crossbow" desc = "A weapon favored by syndicate stealth specialists." diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index b1cdef1f73c..83a4ec0650c 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -201,62 +201,6 @@ playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) -/obj/item/projectile/kinetic - name = "kinetic force" - icon_state = null - damage = 10 - damage_type = BRUTE - flag = "bomb" - range = 3 - var/splash = 0 - -/obj/item/projectile/kinetic/super - damage = 11 - range = 4 - -/obj/item/projectile/kinetic/hyper - damage = 12 - range = 5 - splash = 1 - -obj/item/projectile/kinetic/New() - var/turf/proj_turf = get_turf(src) - if(!istype(proj_turf, /turf)) - return - var/datum/gas_mixture/environment = proj_turf.return_air() - var/pressure = environment.return_pressure() - if(pressure < 50) - name = "full strength kinetic force" - damage *= 4 - ..() - -/obj/item/projectile/kinetic/on_range() - new /obj/effect/kinetic_blast(loc) - ..() - -/obj/item/projectile/kinetic/on_hit(atom/target) - . = ..() - var/turf/target_turf= get_turf(target) - if(istype(target_turf, /turf/simulated/mineral)) - var/turf/simulated/mineral/M = target_turf - M.gets_drilled(firer) - new /obj/effect/kinetic_blast(target_turf) - if(splash) - for(var/turf/T in range(splash, target_turf)) - if(istype(T, /turf/simulated/mineral)) - var/turf/simulated/mineral/M = T - M.gets_drilled(firer) - -/obj/effect/kinetic_blast - name = "kinetic explosion" - icon = 'icons/obj/projectiles.dmi' - icon_state = "kinetic_blast" - layer = 4.1 - -/obj/effect/kinetic_blast/New() - spawn(4) - qdel(src) - /obj/item/projectile/beam/wormhole name = "bluespace beam" icon_state = "spark" diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index 2b7d911f2b1..0ee8c58aa7e 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -64,26 +64,6 @@ build_path = /obj/item/weapon/pickaxe/drill/jackhammer category = list("Mining") -/datum/design/superaccelerator - name = "Super-Kinetic Accelerator" - desc = "An upgraded version of the proto-kinetic accelerator, with superior damage, speed and range." - id = "superaccelerator" - req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_URANIUM = 2000) - build_path = /obj/item/weapon/gun/energy/kinetic_accelerator/super - category = list("Mining") - -/datum/design/hyperaccelerator - name = "Hyper-Kinetic Accelerator" - desc = "An upgraded version of the proto-kinetic accelerator, with even more superior damage, speed and range." - id = "hyperaccelerator" - req_tech = list("materials" = 6, "powerstorage" = 6, "engineering" = 5, "magnets" = 6, "combat" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) - build_path = /obj/item/weapon/gun/energy/kinetic_accelerator/hyper - category = list("Mining") - /datum/design/superresonator name = "Upgraded Resonator" desc = "An upgraded version of the resonator that allows more fields to be active at once." diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 5e98830a965e01ae94fa49877972badccc33c93e..3cc7374f53004d1ad01ee071a3d3b3a24eaa59cd 100644 GIT binary patch delta 15175 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 delta 15017 zcmZX*2|QG98#jKK?1W?w(ION{S+Z}bBuYqOl&$QP-ON#Tg(OWPYh+)Nof%6}_9go= zmSi_$AG7|C-|u;z|NDO4>+_lA%vtVpuI>I_-|L>t9ImC$TyIX(jh3JJ$ts|!Nrx@f z2oA&q(l)C}G}xIR{l`?E@3Dunutl=4(LpczY8Ez_S38*4Yri3~Me0^hOqoqqaOz1@ zf5jtt`=p$l@h^gbzJ9px#-tz;iBwKY3{UfG3|sYJZ*5_j_q5zUy@tiW4+w_Q(b02D z{n;NI?pc?Xi~iX+-?4Q-6yj7XZv~K)qL#w!PiR(gZlLa{M@oYy{;p$BrWqTyUm3B= z@tCMu4+6>Z4xgoV#XjvuJsFXuzj0$~$4$31N_#QPK2^DjGa)AECl;gq{Py*08wrhN zxT_@|y+4&-x3owsXb0OMi=(2W_1xVxCgrjvC`0ievUs%GUEuF6=HJ!b56xfv;a)Y$ zr|o*DEPY~rEoud)wUT?ectoNn=MSP*GO8jQ1}i~{vsaJR)&|s^a{i2_%o`;Ume0Lo zl3%sx;x89D^#)PEyn$+M>orG`M@m1)rBO>%`)HZOSXKBBo)OVYIcT?WCi>Z_7vH&w zRgy5r48wNjKdI6!CO_0&@5{rVFAKaVN(}#CQE7rL5uvc3(+G=wg)H3LT!bysa7q{2 zMOwkPJ8ohny-jAJxGOnSe#5gdgt!+qRUSp?_3Pbo=ap%+uno7Wl?lwmr`Rr2-i}cJ zG}^44CFW@DJLULHaBtNIxk@+cgOd+k^vf?|> zvqcFR1s)9g!14LUZx(~N6W6S)Ks6*`mWlm@G8gSZ^--E?kmA6=K*PAf&6_d)KK&Bx z*5zIE)KkV9;UhLd99ZNwM;f@Pf2RE;beC2jWtW+iwPkaDmv#^z7k4cnKm~p9S9oC_ zTj6AUoR?RdnNCwvlRzTD0D2g#++{>|VO|qYTuu0t6pn~InyLGw3~g!rg!*Kn>Ox0n zX95cK#h#ppa zT+>C-c}E}F6CM{0NuedF)ZSPiS^R+1PqCarA__M-KE9eO9;}l z7ig-k|N17$BL95Y;sM4Xo%Wxr|L-CE*5C=rpE4tH1-kx%XknKhzRPiDDiw5qLDf~0 z;D!g5%-DMb_iM~JsbKIwV`zwk416Wxt$mo~TK)Dv2HjTO$8~w1#NH`BAGRNkp>538 zKhG2ou6Unu!^nsi*Fcih(be@L?mXS8pJQDcFNcX-eXix~TyXJJnAjEP<8dccUWSAK z_ZkoQE?v6xCN=dnlrsS(Y*C#WGWgG()B7t7kmbocgP`%!X!)s|H*b1E*J7TPM{Nli zSPG_nROP3X)X?J^)`NG;*SZ9sFU?qa{n=R_%quQdPkI0TFK&JO>C>mp+ljZHT&uuee5 z`}2V4z~G>MaIhM%wBP85o9@72NQtGJrlN95B=d$%*C^^~R~lpH+>QIDv#NmAvu-ng zjSC{+tru^JK;J!r#%k?Cj+}s|=u##1o2|pLf&%Vn!U&Go%|)hw>B0%` zev1eSMkf9C<%G9QsoxZ%?OPy)9y31*i{bj5k7od&>Ee5XLu&~4YSM3}klYrOfzvdc z*z&Sk_i@&#JJx1-Sq(NWJ@cIJdxG{n#O3?%{8Ueir|E&A@O$uh)rcc=(5!LOxjqut zTRd41PqXub^Gj5h!sX$4%*|j5JC-hkrt43vx1h_*=LC$xah;fPi$EOy&l_2hQ}5m} z_GOs6PVFkqQPbicP0%&keNGQiYC*tsap7aC{wp=`?uLNh9r;L}~o`C9y(p$Lv*~Ol6|m zaxK`$a4`Z0c((3ZtcFu}hcLSK%<-eAGbN6ANCz{8%r;KUujAM}X=ctVFfG$rQgEkjyEf(z01?OI|2iovQa!8XXarKK5mM zi%ttzaeOR!_AIOME|jC+piq*f(hrZdqgLvNF5j&?ZF2vBw&F-RIz-=EyB zV-GibI~#QS_R*G>R2emu6Gz{@dzWE|lFbdn7h04KxB5l4)()87xWV%E>sL=2WnTuQ z18x8OOc5=xWOxG5I< z^=77DC9`aR+SP4j&O96n4t3}o6QIjHpURRCdEItRDgn4(V>9}Nb9;pVIb|D3#cNJ4 zQa;Q=n^vpO6cW`bG@Y>&vbx@IE1hCvAtTvz1#+SV_`2y;sycWD)DLop4lgSe1l=T6&~8q|*}a_sRtTBz*H6v#PYU`<;|#&amY zdMGCFYw7$lBD5xRk#9~kwL!WJZDvgHLSoJS24<--Fo>@~J{S`~kh9)c>}~~@FGk>{ z>6hNjXaNh#cdVj&X6ZQg($AIrW3y*_L5Siotr{>4inMLK_RV%$A62X}+6Saf=@NK; z^u-$z^95$tugoImakM*s%tW>CX^k+Fwx#2js$FhV92xMMW`3(M77Y#O1fD2goc`v&IcF{)iB6p2yzH3))$_!+WN;KJxv2Y|+PS zaO6SGIcaIg)z5~^16kN0Tx0(JgU~(O`MCBAERd{YSK=6K_3zTOXl9 zvL5#4gx}NHRDA1m_IB#h#fXbdqQ{RPmypU&d25M}4VU{WX~)dNyS%FuBCe!_q23%8 z9pTb&iSJy$_uJssCC{l(ffx4iKVmkOA})^l4UbLu_|ZSq#0O5bwfK!C%7@{=<=vGY zqSlntM13UQXSTlKQw))~wqN%ELI}L`xJ#?l)2WST;()l4?LcezRVeKq;+tyIJMbPP zsxo+;j5|k`gxplsX-Vb-1I}=f78>r!GRw(V2R#5~gS+X%)QZc&7pcAx|NZP>Wt`dzSLA)`B_%`StxHA!um`bq`+krgR{53{C zj7i!ntL7NxvF^LBm-{&o_z`bl$1bdYG{u(Ig0ZgHqqgAWEUH3o)oqJ?So_Is%8Lp|_jRI{B<^vKRJL`67%Ocy% z)U4&FS9kxg6LLRXg4sx4HKBn+zt6o_OgpYYlCZ=SR}NDlt7{=B|x-b|Bc)f}uU2u+a@f z&)rOw&ff}Dhm%O@76E!R=M~?@fg*sqsY;xy?3ROGJ!3cs&-UpOpon)V7y+xsGe(`e zki&viC7{3K+o&68PMNgi(}3+>g|C~5Yvt3%*R;WhAG5o@dB=LcQwb`s<5ch@3p?MK zHy)0Oih6R{^(Y62zFt_}u7?AMaRqiEM^M|}RF3}sja@dbtzTw##)>FeYoS05;{n-R zYUj4&Y+vRn(S5P2&yUFUrsNb++2qil1zqZy#LQ3S7^yEaeMkw2J5EGvDp zFbD11t-9||s1vGMlDE83{PfWCFNxk=-`zYcPPQ$k!w@+s>Kj;#IzedT_Zsoz6zHyr z6NccyLvm0jAKAO_q@J1@hi<&XJXA$ooNu*2gtJ@G&A3j+;yVk(xMW`bTokQ{Zcp3Z z2z1em95UmWMC z$_Ucqcl_<^Z7w)u*xvfYvSB}zs^>T{Vy63hx<0#fi^LTOVf_%%B`t~H`aJhB_7_C; z{1nxgEMtm1D)ORw1gX@~S?ab0+vusp3h&xImf#M^)0BP1`Ta!~D@eJ7A>FPehYXYx z0&9)PzRYDZPZ~vA^n6SnR>%i@aS6AA)xZxti>8;@W9|*9jxZG!5CQY~-uQKa7r*Lp zzOve=?pwuGm5O65%z0$I*#}a-YXx8AN==<6`|yOfbF)yZ%Aze%ZGd2_Zwz*7vVbApB6Ixn^bY@|vvvGboR@)-hy!E25WPh4t(X$>EN@ ze(`BVmykHdbU~1IyIehNZFVBD2R}98f)PIGz|wL!-<^`qC`2DOvRUB1Wp(ViHb_h1 zZF2c|wgmq5K4uyP8C*=TJ^km2ht=-9nVFf)oSY-ozpjj#Mbfk=S5er%FhOyUTDupN zO@;F{gn$0*&avlUf1)i>K~mcRvD|MN&#W?m5?q9dfi4)Om2^UZ<~2@tg5rF(z~@fB?k!NE5b>vpQwKHMElq`=YQ_MC}>s^>VcbWm9Lrq*)-cp_|AD|vXlJtrGR)u~B zQxDQh*FXr7yIoxCSq}r!JGVC3XG+jTIOy(=6+tev{jR2Ylowdd(Yk3D#2t{VuW*vn zm8+kn(L{vH?IxnoNsD;w;osdk%^RdQb}dDnZGRRRD9t!-k@;hI+j@#yb+ zzD}Etmc=f|44bY2<*~q4j1{V^4-8b(I**}9j@#%Ei5B2zLOQ!z8EI~Xe9w~EdK5&Lo zq&bJy+r?3<0~s6S@}nB8c9t`Sy6dXF8G}#mrSdU%SQx%9JC`rt=2D(i^NMgdDld0dasFjo{-P_=eob)F{Z4Tsa4aU-VflMqde|0z+Nk-(O z$J86%ew-Wmdq1v|P*|er{QDd?L@D<5nE+Z24rhRqCr<*B#%Y(Ygo$2pez){HKhcmA znDJCLv9T%neE0xg#VX=o^p`z#(VJL8at-n3{nWH|CaAiO3vmks2!0!Wq5Lcu1v-c~ zB&pvIAV&|gKRiRMT#skH69MBD%#FafL=+!GF`N}QVQVWicf!tGR> zqW>%{(WmfM5ZTfib4Hjv=32h|{$RYPxk8_2v|Tyo#`NmIN%5(h6DOb3Uyr*Qj9=r5 zWJqri)+@VotL-6C52~h?pY39r5ukyFPxE3b%Y_#d05}QU(9^!>$b^4(4RcCj;&g^Z zo)K2jcK9sRIcSTvBXNyA%NyXarBXSvp6Oijj$ix1DL1rVHuA^-IV2B}-JbQ=xw-jb zvW_uL%5}1CC#91^C-h?|DgiaKLE6<|?OB1@7_t(}(yw7A#|E?eXLz7|H3rYLEOPJzuxtuP2ee^X|+I8fy*- zrTB1sPyn}yR=W=A(ksLk3aat)P-t~rGi0)`FSZsDz1JMWo7%=7tTvs6EwvG8wL6|A z^Kve*zapTs%AvW`80rrWT7Udv*|x6od7vnqkN}qg$qS2|`~Dl-_v*{3a_^xE?W76Y zweWK;J5=~B&c&!4tX?4wOuV)n61I^nNiJV5Ur{N1ZQ@7Yp^mFMmne>zj|3JR&O>nq=3fUIxx$ zXLNa2XnQ1YghCMh2hm&%EL=?)3mw|^`_juxA?<7Rl(#aw3cp^PKf`~bMahLlXdh2` zZ(%(5y&Mrp7*-J%l-%>+D$r3DM1O*MP4d=3%^r})#2B~LJ^j=t^E)E_gz!bD9aSB( zLqb`Un~xRHabVt%g7^yIl1A`m1pekK#Bi9!NgPKh@8H!NHU#omXB`MOR(=f*cN8G~=V$r77CTKIKx{bf+v5ZW46WZf zX#RUc{!(fmk0dTRPMeO7;OB70MoeBOk9k&@EnU@Tmrip!TGwO z%P!q~zpsF_&TowyVH0;gTI@CE7`&+)fp9Zu1THsnLu5@!!(Y>)9uTnJn%4Hx++vS9(EQ4!SdVYW^{aU+WSqj zk1HD4O4bI=v3sp)3N`(TRv)+l;$s8?{*EYG$8?lGuHiG|ME6xjv_HAK1n1HY$2zsl zd-xHp`fE)ucHA^P`Q7px$I)w#g8^U2CHRlED9MCCq-FZ<c0^ocIy& z_P^9Ic*q?aoTnc)S`C}d)GZ%*WN~*wJ(!j*9%{INrcKmH>G?2Y?-OK`xeq%fSb1mr z<;e8h$gs%ptZx_L`T>o@gmS<4CHHr=qeRItS#dS#m_{4u3SycIUI?+t5$4a%9$$SnxQ$yr8T#h`_grHYb0}49sQ8@l<=gY0vIn!A4F8?E?!?= z^k+po02iFXI;SBE*Dh&o=>!5HAMqMC%gq!*we=!Bosg?3!7 zSvM};%e07B6orx4SQgYNsW$3?^3O8ak~)-4KFksj1ug0#d8(l9My?AxRUB zW;7`M{P1X}F*ZF4#;AX3hInIR<11=Id(Ur`2=y^wL}PKUcs8^z$FfZ>X%&gTkCS{YC3JlmsmOr$+w84Vvj?2!L8*s0yWlZD9PaLUa zZp(A6a~wI!1Z#%7I8z(+FQO93M<;8JSbyRud9^hozLg99OKh68b>N~epeST39fXU97SBK@)84{yMPD) z@U+FIy{?c+Jwp534VO0&e+h%-hF^xI--oz1Wen+@F!}5vb>*)g3bYJg-FS(-&|s+r&iMU zsn2WZzpxcP5+-q)I-V>g8+>7$z)`1en7*GGP1Cqd-iu2V-Or(Va6Qg?ph`MuHLzKC zSa7jB0{r=FX159NRG)U-jr?@c_7ADU$@XCYxj2w~(6Q;Uw&@hSMmG(T8Esb|Y+pXjs$tGupDVDJwHWQ{SP^Lm)GM`sc6i`-Ul9)7kpZ zm%>o9sv(SYY8e_~N~f04CXTyjLv4*SOGvI>9vQXU6R4mk1yz66MISr> zPk@qgOCL&(`5`!4{H_(G>-=B{VsPe$RYM;L4v7?M3 z{W;RFQU}|5)!C!^Pg>b3j9Z4(i8x?sBIAvQQ!gFRMW%+ceTM;Cpmh96%*uz6)n5xv zA0?ccP*V3_o{>0z{O7O1($15UgAkA2D|gO2|LOhhsjr*HMn*mYPED|$`MXN6>B8MV zTM9<~PEA3T-U!4g!LXn@h&>;xtdzZiSlOpNq14z9|2|n?HN3iOPe@zlQ;ZCLGV*of zTeJpJ%k|b}w1C2`JdimA1DTV2RZ%EOr9B}j@zsWPR>G$sD=aNw_{O1?(`Aa}FufhW z^m70;5l#gwQh(rjy?m=)%9_>W@x@>|2^qPg2Z80M!==f)h+?L~5iKU5 zeoEG{=fewz(gymJZpR01#E-Cw4ah*KLo!0(>$J>b5o(CKD0poM~@!eZ=6fN8T8=W6K;r5 zyEyk3s}v|K*Z@QCKg#4^4R%5Xg`NQCUma}=nV`tqUh`NC+z&06>_JNMPPX1o(MOnc zes52&-2js*xqH*(UvuS3gO!VC@&DG%$d^E)zMNF|15TKwz=Fq)^)=n{|Q?0wXZE#sro*{*{!b%6q zQ!xxfEqknLE%|i;(R8GE@DP;#9M{+-rT6h{87)I|K&Eu&tGD`NU%kD#=fqv#S4>yn zzOiUc1$vIvw(rhZ7e0I>CDX1#5*e%YshAu3jmlI45LE$o?XB#WY-zz=7yH}6Qnche z+AvA3ORefFlZ=a#qhk!6g-vv_f}<@dPGr1GP(jbp{QW4kmD9Y^z95DS^MCwYH7p`B zy2-pa!H@Wj5vZp9RmvMa=}RfoT^`-3-(r=YiIFKov>yeu?nNHW%E}coe(fIlMNhhnJ0Yh!*8tX#LsdI8y+oQDj#A;#OncyooS0dHb!dcE^V6O(FquDkCV#jF<7ggghbu_ zOZWDVw+NRiNd_~0EI$%^TGxMG2roSn?0yp}NLy>@Ht7og zVWIk2evK;nO3yv4)NwS5MFw;ijAS|=2%i#c5grMtChue1IS3vF1@DR|vcGbS)w&7q z75=cl|jRrEH1p{&t#l4-f>= zkuz;O3!Zrk0*Y?2hc@U+?Z@i^{0&>IY1Ep&w^wH97LQ$)9tlzExrh=E_V&I++*=M^ zA}D|3YuXc0{nm%SID1a^&Oj)63|3O3bI+w|v+MlYG+4m|^|D(B#rRuB)8!hj>!bK; zPa7bSN+>Q3jaf!LNag6saP}GDXA-MXQkmIba-Mdvs>ePm`?H?oD5T)>myQ0()gwr+ z=Iq?VRu^iveq|HYF8YKZ@j94EZ*edBCMrYaj_2=r)stQRo8eJWOSQjF?P9`>E*L(O zT~vpGHg6SXCC^TNe*PlKzmjWFcbQ zYQG`q%ihgZ*sj9tf-4CMw|CMdV;}H!4lg8HbT-$gTW_}d%}jRI=TWVrAT}b5DP3zT zLz`o-ac_p_{$BN$B${kTGJZq=xqqHU0gZ39IrFsa=eDf7Xg(JM7%|%=7p9nFW zIgz2FOE_I@Zi#3T-0JKT@$4aUx)amSSsr(nk_Nx&pV3EfdWPrp(a0ma5N9Hg}tLgCN{|;N?#5GCB)p%)N#<57X6g7 zmn%8hGAb_q84K3I_$Dh)v*23y$AgzO&H$I-Q}#!k^Q3i^+#?{bz7v-~|M0wT#eG4~ z2bQEC4Drs@u>vxObbzqOWMo;{MQFu?ZO1#mH{}+T2lMGg4|9x?$sYiSfw`k~=y?v8!_ExowL)Ig2jHHOM)u5=3Tus-`F>Jd0ijdw{C;tQp#)_o5KnG45KBJRWZ0IB zcMQkHmQSp=DDzPLbGQBdgRFxCx*RwJ(J8f5jRXkSs)v|S=u+E=02lYTCDu2;#BZa} zU0B}ygmRss7_IXdDH*xuz{Lr8G#sSn%)7JCcLy?s306X^rCRyr5S003ig=rx@z+0` znMswuq)wmJeh2;)tvDM}U8bl)@tkm*>oC?Rw`VUZa$^u|3HnHp&1X&P-1x>)JKR`G zQrW$!X>5*QE`;)lOsn57ffksFP!r6SaQpq&t07k+-W+Sa{!E_vtb~MfaszjhQV@%f zpE=_UJGR)#0f0IJfzZYUh|B;~U>Z`xZp+DatAZ_{*obsN<6===`nsFu7n|ip83mcu zNu|4bvbB$WAi`TQ#i(LpU5620ARjC#gZS#6;XzA-HN$tl+Tvxi|O^`OL?;wRzlP(8sAIuq!9wjn0OYM~dpJ4h~trXO;t{k6Zq zkST(8(T#F>Sr-h1%LFu|-bCGUsu;U$MpxUBZlrf8_KZCtk`hG01NXxjqtqNuqAcQP z^ZwZfyj46_ zLU+U-j04$xd`K#D7=~?SDs&sysb?oX|7_l?7OKCk_j#b^cYff}1M1v}5h&{HgBa5_ zX}=C=jhlkZUPhYG_+QYTG=@i4&(*WSWFU?&G78 z4_=l;M{6ihEvnN`=}@m&Sxq71jCTf)tp$OFy{|QsSF1E@;z)T?!6&|*u42iTod?}g z2u!AJn8y`vZ%O;SDQ=0cv4utHm|u!gpecf5-e(^n9ps6*oLy2r{LAgSf{mQoU2y8P zhMHglc(zyj>{jKx`m+Vw^p(ZCP79l&sHDUMg27BaufKh! zLaNLfz7tV@jkC=E3X15!6C~EE8kXICsa?@#i1O~0F>ej>oLc3QPm>&}B}<7W}*YU7G%)i3P)06vB3H)As< zMeQEBjY}~;;CYmQ7l<>V1G2x2hXq|MZdo7vbfvA!b67+Hktd*zh?26q==k1f@>0*) z%i!W}|DfyRF7}kZ2P(9BuZee=H%Vnv4{7%+a=N$xTVYM3(X+JDZ4yg-UNMcd+@hGT z;V*Ov8B;d3xb|z0wEXxdMd4k1>znAo)ZGoQi0LXO(UBmNZcy=Qoq+eqJ-Y6LHm`~A zkzwm-gChmfyOaWF3)dq)9ZyS%|fq7B226S%&kEzTsPI3J&51_aqTI-BUxjUhDnxTdbMtN*;MC|2CY!( z*&@p1huH6`aA6z4_0`0F0?MbB&z{P{Pun%7rlP?0g-*@uVVisC<KS;Pkpq|0z}JplUP;Ra2yFy7<%yc8z%;9crcmkO?@zI$hjbrQsfB~XF7sj)(Fr^& zu*EB{)*cw82)+LJn1^PS<$I$DY^c?C5nGSso_C$=iFBRI=2vufn@InW7a0*153lY# z@gO;YbNu_qa9_6_G1rz}+WBjm_B_zqN~g`ume_F-PEPKsWJP($_jMsl+5GDdQjRu3 z$F5gBRrIRr;1p|oJmO4AomG1|6oKDcV7oG*p5Nj-f}n@07&jTdr+LLM+~z`C&}(OM zPT7KfnGrGGqsaZBM=6&LU9C1F7@w3)salU>t@ENoY?Brqktn*4=LhsZuA>Eo>FF{B zE@8m1Hsd>fsA;AnSB_5(`zqa)?gf(T-MJb+T?3HIK>t`M+4b5rayD|YuPqWr4VRfg)0-^`B8f!0m?sm)uPt& zWu@D-)F$-i(r~uSq^?&|hw*|^fHkim8kOGRmw&MCzRMFoDd^IHlsz3bvgS)t@%W~S zD7n5eeFJ0j0c3Rx)w$!9%Wi$FPMq|FaU3-8iQsbLK5;BJa<=>FpWvEO^>jqTkq{p- zq;%`v=+Z^X{k%Gyp57nf8phzxwktCatKLIZgWI6%T%vx@vuO_}cHS#ykp5SFMi$w* z3m4t)A=TVd+vSOlQ`c4Ra_lsA1T=ao4UF&V$8=Qo9R{}umG0?O$@Ag!9a<0c-d5zY zFD>{ass9WFJO^HUyPesCJYB+MtT%lYg;HTXA`GsUcRIkyx}W5}1rco=DCP5#%(On+ z-&Z>TV2h;fWVk!OxgW12^^nsBT5s1L{0h#jwp-!+yfk^Qn? z6zbV##ilUsi zp*;=S8D;++#>_xi=6}*)9D#ppIa~inDopWI@c!?}%{ohU|B92c|5sO=fn4Ms^1pMU zmhOH}w7qA4*wf}?FKg|z1ptQ5!)_|-B>NGEMB1fG;9;XX!N*lGW$3~`?drppwe?ql zra^`PC-RYgo+c!)Uwl8e@;eby-@dI6;=fQ!;;PcWjqMZAbj}H2;pDpI+4Ldk{{Y$| zr|5vE#*`nwMWMM{3dkVeLoe^cBd{aDDC4%SCp=Gc+HHcBCkXF|01x5bf8_4s%i$2Q z{}&uE+Tlfh%MZLI&fonK^T0rGLr7h~FIKdOY0mL_GU@Xh9~TjaKuyQrd&jA92Caf) zC~r!dXjRHk=ob4Bo^*)%`Vh}(Jy?U)h^Rj@U z&HbZ5ZaB2+lPTnk-1$iG$whlj$Jk~?WvBE~Ez0@l73&6+HNOgh)_ph6M(jj}#u3!+ z)N02n`|Ll<6%G|2Y*+y!WW*&LW)H@_SSEmdO*r0Ny{<+5xJ5qs9x`#nEMYbX@;cN< z>_*RJFbADbp1Wpn_~(@=A0X|e0v=JYQRju}AkOz+#A6wsIW@z2X5eV%vKG&&qBh>=fhz) zAY{rby(SpEZn+THW{KNC6$p;p7dw*SOg>Uh-@`94E)W-b6S2B-?+4-~#S@M1Yb%!f zuTdqoIJ#M9AO+90UzqSbh)Q5CN}&@YT$jG-=LG!(PQ2@VS?cqyS@ZIJ%+5FKO31!C z^^yQ^A~G(MW~BIzew4*FV{7HMDs7Pu&;kKf&FcD{>;VOt_fK)J(@zrH5ifaxE#h9= zMvd`B(WZ?$iu5Yh!U8)O8LL=jouddHmzUxL=iO&1p)<+J5u%ruy5PN@HT>430q!m9?Ax)Gfht5+SLoF7$G4OSYSx`cfB#$_%(vQF@zO=!Y)3h{42 z1ZgH~d$0%))k;+81G{IGpBFW|`c*h$N*|Qp5>`dN^enwFbhYChn)&2v{mA8QeP+b_ z`bUkshmX>mcYbA_aY!VQG-LJtn!^Rbx@Y-<|5G*g%h>v!BQ4u2-&8oPPkO}0ZxPBC zE_?MsVo>nz+L~F{?TorA7C!vnx|g~$_SPnVu^x(%5&vIJ=&cYer+~ve@UQgeM4_5j mU@C`Mq#o6~0z1LqM1xhGG*GF(-lPIRazp>NUWtzF%l{7!_jVKj diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index d26322740f3b3355597fc83ef86642299527388c..f09805df40bf061dcd53251006a483c4c6df2998 100644 GIT binary patch literal 123619 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

RT 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

){z)%SYsIK5%PFnZ{a zXl=6bMCyqix~$B+*p^tmqf@$0Toajk;@?q;NA30$v0~0&l&&V8#_PO|tVVV)0=rM# z^;l8Yw<+%sFJ?C`A3AZ#t)5IoSEn1jU)I;K2@=U3L%%zR)lIF^&1VhJk3Wh45j3~j zk4N)ZELzTOw0yl%`8yRDyK#nz0G|^&Sni8~Y}aiF0~oCz2w5yqQ?Ep-Sz-VF;5aUP z3mTblVuMg8Tnx$&6?p4^D0^aePkP-0li#hEzq_NG4DFn2;4#Vm41?r*R~i%;vx-yWUOM@<<}x|yYJ94GLpP`}d#&DEpjQgDTty^z( z;%3*MoD$3C$-ZG*w;NMA;vN+cQN-lMC#NO879R2Fu`k!vlWRN<+O#W)!FjTOpM(fg zYvhcjA1raC+7Z_akn3fEupMG|Cl#=3m@&KO>2DDcfBeE#UdD&=jI8T?O!)KUwEBwk zS{dTbzS4a$|NXKUBvDo2hQK%b)@WNa@iZTtpBi}?6GN^)`wVpIM+OF0pPe?O*uh68 zc>%#BFruG}l0SM{kEK-&q61bI(hCuX4*J(#&zuU&FWBjGyghwi%^$_iO4jt}s*Z*R zN8mT36kO%qmkP018m%Ldkt5{*o-%v;z*w)bbGc0j%47O=)Y(wvY1G>N9?bi3%Jr|$ zFmntq%}dhHZw32yDr`qUZa{7b5dXq+(ZSnY$r=9a;=U4qTDCV?TIY=Ke|uS0MuwS# zgCm?k@Z1<3AJc`wbU<{u6R#PQ+i`U$>H}?fm8msMS3s=I)ff!qzXnT}n3<=yy&F@9 zM6xvH=gBrfV&qRZdvsfyrNA7L85WwzuUsiK|D4e0`!@{TsLOTue698M|GcJPKd z?bTqntqBce$uT@@=)zqho+U!X!&v^XxpoHzzD}}VKY}EF7`H+XQt-ivGHVp%bFH|=1J8~w*~wgOpxD*{>UisH{c{cb7#v{-WbLyC3Vfw?#&C|qMJ<+ejyJJ%i;Sm z-<5p~Ug;=GA=Cxh-;IbYLe#$+^_-!ifDsSmjbwW^0K__7*fCd^$_a(0x3{aTuW#(_ z?lxJ7T8MTk06&Gex;hzfSnRrE2|iMI<3phJbjka(4hraN z{-3pwB}9VxEMY_?2ze%!n`ZsQ!u(45Rg@GdE6YMwV81c^{ohX?T%Ia#q)uQu4mOz= z!oNy@zE&@HnU$XY28o1}R6g%XZhD}r?O$WD_*_@>IquB_Zk74|)4Lvk-bK{Ul_BEOT`hm#<^!GUXd@Ff0Vhsp9;Y}Wxmu6zvE~RC zRYA%qs{;6+jG0^j2G0>5v-^ZSxjEnMbUDf69m4~FQeL~1pJZXQN^$Poqbi-ZY8o1D zKHQ9!!BdH4X~i5IM7am=1H(Fg+V4dW<)1%?TdxjYFM0+JI;085-qiJRnGcXwgBiIs zYdOj81Z`eL^)O1qXBRztMZV7$Vhlcnhja7u=k@4v7rogQcvU|2IX+(X0HzEmG0A1>!Zn98ICXRx z%IRPW?x)rq2+~jPj2~69b~I1X!#f*zWJ3chNT-rJ1M)cyEhK;;@0El1UE_d~>;z1G zL=od<2n6KjuN@d49t6|Mfz7uQGB-E(!71uBnVC&yMco$F&pR#IW7lY}uErDdT=Hwa zVv|g|!_-GLnn6$Oe59uD9IpSZW!k2cotuXT%u8x|ii$x`3=LJl+-YE7a7GmaXbI>! zICMY(2?xX zJR13#^(7XfA8E^G9gc{c6wNk6AE!Z2gZkFwLD*ww7FykBB3 z+v&jyCus!JD(B84uP~0TSza&r2x4$I|N`p=@9_dw@$HsKgvJ4zn+ zlBXCmB zg?sDpHkNe`NcNfk-or{wmM+Kf?`;0)F(bo`NhBPJwHXG>Se>hW3c%z6r@-#P0a?@P zj?Vr7bmaH%@N+lR9z`oVnzM<&>iwLQl;mD}X?r)*U4@&Li<|p{sS|<9x!5P3YP&Hg z{n_b9pd*n6{7q*4x(5@fIVJ^JWows~kuFrCMS3f zNfaEju-D%=!s{Sqkv&_)Ls>>yHE4kK4C-ot{_h#`z+v?mMhtv9RsEJczjTl!Q z0q;fPht-A?%`?F4ykV#Au}XX|8|`wNG{s;hD7!uIae2ky3$*K18jKa|@2dB~Ge?7; zVJbs}R*ApyVy-PVk?fsicN$gcEHk}mT|7K0IpyVNKLhda9vvB?V&nCe1r7?Rg|5wS zZ0#mAG~NfA4xyS;`dBTJwf60DE9^6p=!cHA3VeV2K-Taei4NZUh0Ex3@+miqwA1KT z{bR0Xexadx$_hlmaZA_Gd~pIS1Z2`=`ud^ha@SZAN-RrN{MDh2#^@5^E1`uPnHaqqvPUK?DA8njt;gPzs4Hfx%rw=Bh7zw zZEN)raSQK!iGlIK+>pO8v$q&fW21GWha9or@c((4I}>fWnkE!LdhFBVXM7~wgTCd- zxusk848*z~j$swf_wvaoN9+q+n#-an8{G?1)n?REQD@%Ex@`6$aNyimzM^{%thBO< zvCHPCqfajQ;a2=MT;P7pa%1>>dn|Hz5y=Krq<)Nj#w&2vGES%Q;s!=!ll- zeX*)_dK>EB@3!w2Uv7|i$FTn1KVHC^4zvAV-?R9s_3Z(!nV4sqj0LG8}z1DAfl2s7zejkhO< zokuyp*EMoGdLv?hRB?A0{N9u1At+ndH!Yg)EC49etNHlBijPXqj)VBze@{+)8vqU>|2o&3S(P; zee!E6w49s+w1f~U@FO^9)B`V3INgAV>D)%|PNI^hZim`ZuHZ!2@^4F!7L`%K|1L-k zYymQ+JTWqQpr}~ATHmsIvCwBLqMGKIu;oN~1%dNy>hpb6th6(vVVSB6b#dk-4~%Z7 z34THv-y}aGY^$#$3)2Y*Np`AJW0qLuhp217EKhb9u3YJSkQ%`z8+W#xGh=TBZLiUh z9{;pxCglgLvS1k{+qV$}iVvIc;^JcP9rYeyBIUnz%VMg`Ds`P|dt6$`ly9%T0AuZv zmXBPpQ5Oq;7_|>&Uc82iLCyPsrg+D^~+Z7d`!6a(x!m0u)wxK*W)k-^E%fZ zY4PmfanvaMs2Hjq9NfU@b?lZONQ6my)MyS(jXc4RRuh}|KJi{_JT-_KMQ)b$aDy#T zoRDeGy7TXv(pD>{x;0({c=OxyKqLF*z zaez9VG$M_cN7V*_P5nx5B3DRgs4GaM0*rQ%Y#T0#AbP`q7)+-C{3*VU6&QKp)m(z? zURA10#+`$6$VHGVamix_qOi0PV@8@KLay6IZfNst_&|k*cfbgpA*2x-3FSMdUVl7%jIP;s5LL3f& zkS8adMwwU26Qgggd;^bjHmS8ou;i+c0kh!j8e-ll;NUHj;~~G$+sBw?l{SaDc<*`> zDc?gI17bQ9*R-mgG$5`7?|a~gri%-X_ZQE3A+o zdZRNJ;@Q5y)pFzAAqL2(w3;DymsPxO5SZGKK!{RU5U|qJ`T*gfCYBrpCEUFcrBgfx zt8y@o4}@=zBR75ASn%uSgO|gN`j&a1D86{(pTopAa93lxaag0T2MfNi@ODFk(h%F!o8q;bgtEQlV&fZ>2&|uVzyG)?OpvSxl$dgA%Nb4fd zhk?@=;6WZQHrKGS%4QBp6?;h@Z+7#zF*KB1Kv2-Q-ctye4?*?@dUkeg6BCnM=U=iT zhdZY-S7~=*w0=Y=WIuHA<~R;Wo%TZ$F+!tpiu&fJ_#BxZLJJ6Z;EX*Q3M>6QT=!}{ z`MVSrt#vuuqt74l;(5s!eEtmuz@Wa@*49P@f>jsH8FIT#WQ~T%)z;I_lCKdtMS+#) z_XRV-sc#V>-=N?}US4M25~rpKJ|~CQ&d%;B*z@aSwI2pm+GI6%%N6m{((V13wkGoQ zKDuseXZJ0imK5I*q;j#x4)TG6zHt1WuU>y+1hp8jZfY8s#|Q_zq*G##=y|K1KLd_D zz;^}=f6oCy5c!hcUl41N9f-$%`4@(@Q&<^DFF6VWf>NuGoXc=_GLEucQTX`$W!F8P z4Z-CRf8CllVXqFK;U$HzRM41RI-_Ic3xz%r{8Z&Bst=omihVC*cHDG@e{|r%m{Bj_ z!>sj+SAbX2?~q|5y#JnM&!T3kIid) zZykmp2Crk4kk0E~GJt7C;Y#q@XhUYBD(uEjRTC3t#au3GCDbjk5 z>E_@mMfLnylq&mF>VWm~y`6y-aq$v-ueCzfqc1lfe!9Z1_kA@b`bE%HaPV(Qs=gle z&;Rw&qc7jw)Vsq(&#L|NDeeblatVVOa;Mfm_O|oWjcreS-|>4n-%IVEuEvB=@hX`l zogO}TZ!w|$wBptb9|_<`G)lPp`X(?~K&btoSA)2umq~z*-44_QCTO64`d=bu8FfLX z@{_64M6DKlCH>lM&o`^OPh0z$-r+QjR6dUxp>)azUj@MmZ9g6TqM~U zClt8Xx4(HuQ8*|H$MW1FA+$4)g!+*ua_!5IiCq#K?o4E^$&cX&=6x%`c|x|=Ybn;K z%ymiqz7xZ`Gok>aIa(*30eSfr?SR-e`A;D=9o>#73=p=JTMu0OE0sxDu7Bnq6B9#{ zAbDRi20;ci(sH*IZBX5XcVFXeXu7z+(Lvrw7@Mdb#u=wDmnd@AU4qIPul{-F9X5HV z7}s%heJc#Pj*7=6<&&?ha1s;wuMm!$zYO*N#}_~_s!IAVR6K+^e&@?jv-MSEky&4f zaE{h#*lSyOt4jGU3`RLC**wckmU2%>|89+~++Zyxc9_TwnvQ@|oz-ZWtwHGRMc$pG(?ewy=)1!PF30CvfTRcU1b~aWDJT#aAO_B_U zBL|Rhx$-T3+CGFyeE%KzOF{L#8n|Y5;8{6)HezsnUNC{8Sn!Y^Fge-yHuqtI$?yxr zTHxu%FvMEB=ZYSeKIKS=E-(a;7Zh-6URSZR%)cEm7z;Br9Je9>_e(^N^G|(4=bZ#| z=iI{PIcrQVfX}Q5`t>E-<+zKc9abWFEx_C8SQ=Sc`UMytSJJsBtiak35C?nqY|e@R zY%?J!Rg9sVRXnC>xm%&<*b8%-wA1fhmk(~AQ|d<0yEx?c@0r{@G#-IbG#3=_WXeB3 zN#4;enucjfPs1Xtw@P|A=`YJ^a?z#{qxGb)G(l&aHT($PCjF#j(;O zf^?5;wnAPCN+tU>R||5eM{+>H?Z(o)QXFU|+m7%y4o+Ps7Z-aI5Q97&W!tR?C9J_} z`uyyU$2Ju_D4t`76}q5PHZK{petC+LSGT-c`97uc^s{p}3WaO8dmUaRL0(;2T52!{ ztgb^rDrl|1*RRC@{g+qdeQMnO-jOG8U+NdHUzZN_L#>%nPt2&Bwr9~R=TI;BbE{mb zOaiDOvQi&>m^J?}Iuz7i4$E#B*q@1m->*Cg{#`l)-71kjiKdMoBU|7;m$F^1sm;zC zNFSE|E(jvPN(;)xZz?EDRY5U8DjxSL>#H*&9BkpLzvO6yWG#yFe(7x)pKgpZTG$5X zu!#?`YFMv$u{rlXshX*c9D1?Yzg*vk!jC(7mM7DjU&yR`%sw9l@kcDUXk70nY zF^ZmprV?w9;hLK}GbbC>qcMG?N{GpMDS~egX~vv2Zdfb(YdchH?f4$sU;iXMj&>OR z9?Qk1DT4Wu1My8z)H+;eu;fvcPHuVNXL*HisJH^dDtDlk{5woB9>(m!zqYrQx{S6u zMIHAm9F-365Ga08Z%7?>W1KgVP1T}w_@Wx(zUH>US*m3Yj$YwLOopX#pEu%9N^I3o zb&Cn&B_fLhgK=*jt9*D64)2pGC6o-a(l1_LzfYwS=6tgFPHvd16*6?<{QK585qh5iH;ws|rnukjEPMLFb}d9m z_*%UpymSgO?#gpTv!Ey9|P_Hhz1ex~@!pWv~tl9L|?%@%cW zl~n^@0DaIF&9eiFb3&jRLj;F+U;L|QcPmfr%An@+y11B?KxN{gNJCOwZ!GdOOjhm_ z6u(~Gu&g02@?>(;fu^A)>qNwHTDeeV>z~UtE=+h|A)eF?G@exfNP(-*?TWcc-)o-!V}kYaWI3xB}tg?K8WE+@z5zbxJ4*PYxo2qGWs9;Rp z=xU=F_!A$-F(ndoVo|xWM^W%`a|Itp;8yTvL~7zddZb|}o+@f_C!O%{{Q>&u9bHvLemw-x8pM06OCTD#5JS;Y`dW zOaj6?_UzGO{TSb+`C#k4o;K+9b@;$i!IRX)W-p0@)a8R_iugNj%eNt+x!*s9v~4`G(DC(`0Rx;nl-sqdMuU-AA^g{8?Jd7 zfjWQUgGIE2#$$iCp=LemTX)oOuDhz~UeBucYr~NB8=mh`F(*s&UdN2C*O9Cp>8L0o z=YzV~fvr7M-&yscJrOea-ygcO-7CU`?c#rbF$NWjwZpAo_u#@~#IzoxJTpI7wLgO< z+H1kA?7siBsE|;^feMXk_T@h3`+*9;Zbq%6_F6dJ_m#-h&o}EkEmQkiKg;>50T?p! zY+`%2Bb-?~fjRVjs9uGScn6?5U}x-X<9h!M9lfKCa3Y#Vk`(9V*`fn%PDEF%ZCS%N z?o7bc94EFuZVD}GDEbd(m%~W(*u6Hoo6p)m*tsedA-iCUEB;Tx&d>BT-=2{Z^NHBt zvnHoN>FI6aHvg*zZ0pYPx7q^I3dD(d4vpEN=aRgg1xw{*sG#n{&aiugEk!U}CF8 zgUrmx=)FnND=bHD`C=uTS(H+FI1Q>_js95rn2K`&IkG7k66F1#@g7m@ol}v4)%tpY3 z3C+P2#>l|N4m2_l@B2TsvkhfY+NoXc!OdWl_i1Gi<7mnb>RFIxIH0otJ6}Rzi8UI2 z65Cpq0-xUh=L3+TysA+w#;d_5`?=TP4B6%h}NUwX{Rs zxX@yxUtu?+zWmIT7!L_&+33WYjS^pH2 z9;r`6_q}`aIiS_&phXGy5V}^ z7ot(NQ??>1Je>MYI=$BoG43zFI4Kr29sn zbj6J_`Vw|Zn;=ZSXJ2dd#iE4}L&}W<7yM$0>GS!ww)AEa*x=MxheNzF*Ah0a^=CwUQZv)e?>^%i5Rxi@bK*S z@jcBPmdO)~Sn!`umZJ`Ag?0zfSg$cKMRpDhxFw+;lt7yW;m=xj>5y*1@$AY6A^Wtf z8LRM(ylD)C(@y9%oIOW}=Pq}6k~vXzPb57WJ`WMNUlqSAwn`>4O{6fdMrzZzxV@y| z(hGgPaDK6Nq3#|a!#|jL4;NIRsoi2&Hor4~frHgF@O0N1aOWcA?&Ux0uf7G^4VEzboLqzVLU#s&Y32!#| zgKzi$J%##aEiD*Y8D@i>YDcSRbS2cew zUSROE42xvr5)sjnB241%R1op0)ks>JU40!n?(j!UDvqfi(>=G&-{9kW55g4Y2utZ; zbnJ!n*gCI8xj=I-bY~M4g-F-MOf=8V+x9C#7HUkKu(X zJeL`=_vZ=x_XTSwPMp5F@RB?~&z8P(+WEYNP9V+9K_Oc^QhuO2&A+sj(;gX{ME*vM zYz&7+FqQ4geu8Nu^oZ*C^d7XxTH=9Tiu@pe09=xOzeQ=i?8++n>^VWqn)ez>>7k%z zoZoyCxZIHDrBJiT$ITaGWYYaQqqK_IbNlUeqPE+Vn)U@!pQR;kYUW?r@#f2t$m(hM z`nxgdl_>G9e>a0V4stAkjK!Pke+Y|=Ra2y;X_um-*DK<+p|ibS^DME@7vhiG7KAX#BF?1Dc^_lu2N)6o)Zsv_s6ScyTP;LX(kDNdBTZF^RPMQ7 zy@xzn9K!{aAEvd(9Y5)LLUaVr6d!}C!j(`9E}gum`@)|0%7|hDdAKOpg*xUm3T-A& zEP?)8i*6T1nRPZuKYS2%s&S%qF7}Sk&lkv@($cuzamsE|f9;HC)tc_mz(_l*YP=Kv zM$lK;c>uoA2Y>yuF#LD)MR~~bQ*m(KF9FFK z`k?+3V&V3~2UzUo*r|o~qP|}pbg)U(cXwyplpYqD=h&A zW)C>tD360TH)E(@a6^Kbn#E}Kf89T7`$T6PQB)IsKioZsNy%Z8PB@doYN}(Bx&n3jnS~){!$uRB@Un%R84QZzm1Q1wMw^UkNEcg^@6B2yW*x7!qz|4Q>^|b(1&PqtZ0(`Oz2^{ERYnG)gESCzr1$#4Pxx` z?C;8-CelZ5N&1X=?%Qwrdp&6&XtMYwe0@|YPICj<-cO$8jZb8K+VcClUm$*u0#!+2 za%X|)HPQHYdHIC|bE0S_`UETQcSL{fT4=MyeBT6&S4t|WhJgQgfo{o#a48K77wK$) z{&eOTU$+xxl?o5k(t;$Mq8D?yR0ma5#a%a_8lTJ$6JCf9KCG-j{&-qAcJ*m~50lyC zFj!wR!#=s?ker!$ zDl04RMhWf*#W)O@ZLGE@kyvz4o?tdzf#ZcR$GX`z8!1&|x4h z6@%?*jVOA?J8wUIYAveb;e$%4_t14jz7Fj1anf-THcXBDbdy5%xT}?7sAm0T%*kK> z_@fR-o2(Z@Ds6h4MJ!hmPIE7^!cs5tTJe z>&iuG zU7Z`>7A6s^>5SCmN^zR5Iko$6?BCK&TXE?Vh_j$?o5O&4y5BI=DbaL(25kH;Wut7 zZIVQUf66V(51*cPRg^%SSJhNj{&k6I%y)VWv@}@AGl%HnVqv;M`;H{1B%RRlTe2J$ zTd3a^NI5D2M~&0+stROF+>y282w}Aj?;%5_3<7iM+1MgL$OO=g&Z7B&0n$N8#QSND z3nvp3Q;_$by@SJF(7-%=d=yzjkKElQKrfJIhs?zho9cKTk6u7;VMb>%ete-A7g{UF zi2!0it@2jPTS_Cu6z}7a&H0||@khplBc712`brGwtrM+LeQnB__$x=o2xJr#ez4Pc z{H)MWkoJ8R8*0JDqSB-mWQjSYM%CF?eP(0|vM7EIbgD4umJaYAJc_$sc)Ndd0JHM( zz-fBRlbMCZ7-tJV`a5wW!TwP=byJ<~k#P^eF*KmicUe{Enr|bDx+`(#-N+)RFUJK2 zc3PuRGe9wb9`}__7J6KueQoo_9z#V-C1ua%hGN|)$L=@=&g?@ExAoLDX_*VRN}x1` zZ!X6KKiI);V@GEEBLYP!$?nwb9V3_5jTf0@lsCOUgnzQ`94ws-$pmj|CYf3W2-bVf`tv|(jt#O`PJISS!njRMnrMCv`nqTF=+?GzO zL~8p5xw)NgBdJKCrjQp=4S5>f&<*8Cw!MUOK&rLUp7gF~-Km5FB;_d9A{vC`Kf4z!`zb z(b=nBF|NI3pkb>;Gc7otZ&)FxRR*}II6<&*S+~remrYJ|S-?`i)Dtg@@iWoJ0ae)Y zaF?GEelQb9oDf>NdoU}N7BKC0dE>hy6VQ_dz0d*C>B9&LhB;uwzB&5s@D+ zrof)|bqw0IS&Q6k6$C=W{nYZO`8j6i=|-`AEWb?xV1(AAW8B624C?@?=-pX=FAtVH zg>w_J-(k{ozn2eGF2WWB{X^iz``L3e&Q9X#eg5!xFb5HY!Dz*s6A;T9@`Ioa&N6f! zArUvEJa2GjezB?a-L5^Aeist5muqeGvN9=8dhD_8>y#O%#-!Ja?Yd@Wn-V+LTu8yL zAwr%1RafiozP|ITdm^mP*}GQ}Ek-9R0&u^yyGtfIev|#42xJcm^?zR$b})0Kh{Q#A zVn))5Lhs(G$m}SpEgzJs!bLXNZov=gqgl5G3fL|F1wGHu%*F!59N8Sp`XT4t|0%SN zb9Hk|Z5&*=38UqgZ~6xz{RjH&=l_47l0W?qg!*Xc9#0!Y@IMeLzfA6T#{as|%GWDo zh5w?f|0le4e^twciinP-mvfMq-nD@gPy0(kHiU_!5PS2hG^$4j%|+q?cf|I46U9S- z13JJqAqfHBt^`$*T_!p61jxw=EkR)Ob@tN(v9`??q9DQfnp7hw11G4k6{!UKO4f4hy%|O?e;A?0zhFyK&W_*rcbk@ui^NE{{@C(En&Dmr02f8(#7kS z+8~hPx~1135dDA}GL~{9eak-%AEnS0-whQOrVaWJYD#iTL}VuxP$a`qWnC@j@tmBU z0oX2;Nso)|3h}di7$C@Kqgkn@;$@@jT+dFdwdhBrs{AP~uuCO{5U~JLJXfDIFgW-a zqEgT{OGGTy+dr$-`hmn0FN^c?=Ct~Q1q67foBWGC3UvANDl1o+jGOXKa^S|77X_+) zK+?QNIy%<>VyC}Q0J}`=y#*=0tD`wHvCnoRB&-HJ&_A%M|HQtIwl;YNx6R$41KB}A z^bQ@sOj#L+Un8int;JR`=l{9#*&V}XnMuF=gWB-|L@ zUjghc^q4`XDpUBCo4X<;i%k3djcl47=?0xWY3I4$LI+F?3=b?VxxxLPMFTP+zH^9M zQ)-nLU%ISwMgQru_O5AW?eX!)PoJs$`S>E~l{ptK;hu(PF%pwFawjAfZcO>;71zjC zx}~xq!76)m3!q^4OYOew*hz_8A#$tP2EP~!_yi);o-8C<|9bYys5~(#N!`wF-8N8T z`iwSWG*91ZQ72hO>nS03X?9tJIO3Y4mC9?6K^lp&um1K|x81oK9^Xj7cNqbQ-+45f zq#r=8-&Jxh=TNnp=ua(?7fHsxTWfg~p&7fxJ>TsNe*4ZDDPH;?=eY*sN1B?J*u%9e zSFX4xA~Q0A)<$w;5)y8OQKF?`!(k)V7Z%6t{s6Py_c1PX6KJzL+`?&UCi1UINWzT@ zd|qRzr$iJ8f9k7{fOk*$AU;0+v=D!q4AbIoV_g+>7Nhu)Q=zk$tDPzUZ0MOoHg)C% z=7>;$Iv8v2R^*Mm`!IjO-Nd{aBU2O!4vjT`+GFB90EQcgD9 zbFAp?v8B=Nxwle!o9BPOR_+~X3RILp#;v=y96s;&Xp9v^PEGcfzU;U_O?}QHy^VTa zPE1--a_IMO&8Ie~1wLNh=&xUu0jdK+_BJO=gI8@{Q&&k`tIo+G4+8sEK$N4VuD+k- zm$Q3cB0Z+U7efAHY}2MNx1ymp@!8X7p;LCtRe|_hUUz{k4*nc6wFIyrW0$19Lovl$ zB_MVWFgTKJ!#@Yo*;vm`KkxwLL$Q%yUa6Z?zk`&CD4y|8Rar5cFs-zM^PYUW@P}-6Macf` z3kHNeF>oGCRh?ez0H|CGVn0U74KKDr_I_1=$t9^lEXg))m&vWjsD$aprG7mrkA6i$ z|BZ_C$@Ojm;RRN%$x=+0gFEd*#2NY+^O7%yJ$>6O(9Hi@sHyq>wlGi#RfQ3jw}3tN zyrMFzPU4OK_yQ=OGf6ErU@vG>a:hID@_3OzyI{FzTykr-aqVOOgYe)6tgH6qQ z&#T4N3ap)z#cCFNbY8bOc?G6t?eK+B;>FwyqcG4{{g;KG5wjraK1^8bYfT$4-M)?851RjF(Fg4`e>J9K5pQ1P*^TUU6i>S-w zjQ*ZDqTOnSVF$6B_+bSpn7Z_(bGvM0qq8lZdJAv}o(nQ5@)RbkLA(8&a+oxqPFKll zepTMp0zUl|Z$w{6qf%s;Wmqs&^&MJ4yXh(GS)WR7AMC~!Hg=N=CO}M;q?$B#!{T-X zN(tFVJIPpLu|MxxzPsy&Y=3>d8R3ZTrwf5K$~Ol3v{8jAxUiECi&;qz;Zlvfi=<cCzBVt2qohN{%}JJD}OX$Du|Dhl=T@ z*tVo%&JV7;gWcO>Q&Wu>FK&VktgrwGlP7C6?=)Y{)xH-W#VFRohugDzO}#8_C@5R_ zs#^Z19%9c`vX)GPH*dXm#GObB@|6xvhdZ*FeVGGzaY0M7Wo1GdT~0BDdTNWV}}-S`C~dC>a4 z(gaatDTp#xpmwwjHyZh-2Ea^7Nilifx)~VZM%uaeFwt;HmhroOq*8{C+@hj`1-4yg zmlC2mu@3MC4{yAzb7{tRHVN9_^z7!)8P+v+X( z4whLEL2>K$ZTF*d#4TrdOeG=RXO*etG(_LJi0no_?8>Y9lPr-t5|>q>6ri`fvv19_ zFJ9cc&VKyQbpQclq{!|M!U{F+!-?X~82}77^?a|2hH?>vN-%@dxVogd2O#5(QsuuEG;MIwbQV&QgP>yxs?+U3Q8TKT@gA)Bj4h@@%?e_L{;OH?_sd@M~O@oRm%nn+2VmrFxnG;?*;Osasgw0DZE5 zFK=$2Bnm*iA`#_6LP9)MaQIo90`Q7S-tOzjIgMqnznx!fJY>N1{xLFg+XXR~wmY*P zts!DHGhWm`P#hhzlMmXkCJ5pwAzioi245-l&h@>VJkt6ijM;h3_B1Li%&l0EfmC^(sK~6XH9o>tgX!k(Y=M1Q z!eCyTtnO0f(mU0VFwD>AtT&+!Q-9nD`BChb*>OmVNU4_H zV@OVgx=0P>T+Kjps))kh@-z#h5tbVnEb_d07jN8qtN~AD4p4+FMMyi z%pHdz7f!XcT;j>Scjue`?i75hKz#l6`Iq6#`7^JL><~VZ6h5+`VXWRt-95j+UAbW? z92td7;Qn-%!&Fq&hOaEG!JlJ^KxYitWE5$-&!nLujVxUWM!B?ng|o|qf5@}t+Pj~7>BR+6|j80*)D0gSJlK3S{Ma=gwz|vZ0 zlM-i=FLYuSFP-15%#h+R!)3oC64bh&SY-IJeCor84~p5Y zKacrHV%0wf)M#0|N;Xo~9Zkfai?*$pIGFzJ(eg*9B$|gXv0TiM6G8~RQF(fA*K_Xa z=I`7&(N>_UW9L|SC-qX=e(dCCG%l8T+P0#mTi)c=2T{$G+zOV`Ni8&_dZ!%up&&xc zhVcp~Ev5ZW8Ji3AHgePvo)qJd3#0juSiU?yJs8>-K5Ofm3PkPLappp6N_zI|$HhHn zaGq-OYQFsZeAhrJV@)ULH*Y4XZY;g7{&#TPJ1N#LF&4U3A!A-J2U8oqQ_%Lu)BN5E zn0&(-#oihe7`~qMn5gun*EYF!>C%Eklk2VstIXF%3{Dj-*-H&5@LAV!7JjwHSmEG3LtZpZmtIjdV=i)Jl+i@Wr z83Nn|OHMJlTTn%V)vNVF{|w{ZjeGdTf&cLWphC4xPCH0dKe#bpLE_2gXS&mV#jmw` zX6xLVwwJy7Vi4L+-m{#o(L^UJTh|bgwLfW__8z@cclMBA_e7i(`F7FG29{|*h33Q8yfBHhwm0*VRg?UDkTlJ$BN z-Au+`f~?Pl(M0Z74yhiBT9*D25RevMcgOKd|9YkgSeuFOs>uDkTG>|Vvy z9JDgC%P;hLTD?LM62XyQgZ}4;vqG=LJ-BG@q!;08%ujs)@dAIcJN#k_Jli9{LgsZ) zWAo^HJdle?2t>q|;Yr$e={pXI7M-?V9u58WJd8|&wpn75qIv8=Cy&n()E3QcU*~uO zW>Az(w0O&^(%Me*(lo^3a3{dL`0j=mgLP4(<>rHUS&yaZcEn^UC0pUjgQDb)Jw^M3 zJc5cZC9w3#a?4NbV@QD{%8~;}oh=d+8%;V10@RJ&?hY$_1z{b}4EA531hkZ21G5y9 z-pEA~ts)GN5PUukTm@=Ht3Mf%mut6@(YA-t->vzkxUb@<6=~7+5uyL|MSi|I+r=$0 z;(0n^;qv+-M5;tg^kqg}Ek($LKLziVxGU89Ztdb&Z~jHLBDcFL@@RuT!a$2g7+Qb9 zL8?Dm#*ng7n?se8U+Bl&p1jEQ=aq0jOZ5x153&6ez*-2@ZVpC4Jk5w@Dsx-f!}z)kVAei^yZ=>H&L~OzrGF#J2)k&D(k}$wL~l<;6SHQMZ(MgP;pD zi0UVNfyu2Gp`l&2B;HwTIZ~>!rR6F-y{Em!QlwF2+S-pyKDTzrDl=ema(={9v3ry& zNN>NMprQ0tP)33g^Ajfz8AiM_`{!>9xqYODcsB;mg~O)>0AC>Dm~fqGWAx_5Pw7YP z4oYmutzWT(&9v3t1F$W8ldXqO1H@vtT#nlU9%!HJv0W7TY`pue;8T3JBDr`aQMn;~ zwH6bA>|sbz($VQ}zxFNjf;n1RS(R$BhJrO2BeJS!66~A^*@S( zUl0TZGlIlzLuxGGjsRoAj3MtIlGGPW5*-8uao`yh)ZSTFzLHxSs!g81>%U+SIO;PZ zuw#9B`C7D;VOOxBG~%p@mEH-CGXwj>E%x$gSnQtP@On|+cbNivO%H6s>y)!y>!E}u zfSowdxAjr!tb5+I^tV*ue;^J(QFQbm_wJBK(V^`?CJzv{&Ep&7TpI&CSp7^M&+DR^_SdekzgC9a~a3 zwx_k^#b!1y!~XjTcYHEHfpCRXb=aDC*g{o91wB8(I+l`P_tvH9Kmq@F8ea0sG&PAy%b4p}`{(r*Dc3yvRf@50JtA93uy*s<&-QNb`o?__sgoT#d4F{2t^R?-a!i)S z?1^1`dGeQcq5#`4DvRaRe4kh-{uZE{37ds>T~OAnEvJulYn~KP{yRV%1E}&oUQn^| z&uf6Y1Gx<{;FvNtGvjt#e*>0xZ(UvaK!wQV^kIpa4YuAP8@KUu)MRIW| z-l7l5%1d^Z0Npy&rQ+U$55-*|w&ol6KKI)pl82N7Og0n;b4_0NaB1$Lp{9ngqe9pO9U!X-k>E{is6@#c)t`|TZQL*2 z_bZ?4r;|k%T_9A7+_j#ve1=sl*0kIZxP#{oShcGPDSg}Oc*{+Wg zY^feFNnNCk^G-P|mE9U|_!c(~@7*AE=A4Lk!;UQAo^5Uur|RmCdv+YuJdEGBuUBl5 zU{Z>8+aQXD)+s;9E_m+#KC$OznLZmxb^)@YrYq+qrqJF_RP}D*)^ew1*&-km-`E)- z+f|u1wVyA(!)%2&)er9$BK1_d`}P#8H$v1%xmgP0G&Ki8Z?eAbCD+H-h9?E>-8DPr zQ9m#mwZaamI9ok=^8_)UqHh=WdGm%bOigPfaOTb1axMcc@^}N5mWO=tXhq{IsZAkc zc0rieC07GP0Ju>ZqmHQ5f41Jl0R4X8q4xhstr&SGM~T9W&;Wgsl`Uz|FTv~EICQ4o z=GrN4_-LtJ)h^FX!N;f7IeqH7@gXwFZIS8a%a6xU~2S2Z9lne?BFP7lYN@nF>g+w8HkrK3U2V08;D zWT9#Wbkx+4BDHrQAPrPKB%N$uN`VI~TM^Gs?pJ*ZFvyuyUgj%e$gd=EHqWgu7hl{B zV$)U~Jq{XFRn^!o$67tqIwhQlolaq#2rd^7CAZl+tUsbp^CbsN25{DKT2FHVh1bcB zXc2W=R@J%jyIT$P8*}{lR0wJXGtXC)`D)(ppI3MMTF?x-$K@#oQ0WYba&el|v&_mR z{!R+K2_s0Y>6Ntj70^13w`qf_tNQF`bO68~BT1Q?E)Kr!pv#6tPQ6z@yZW#}gsb|d zTpV3VYYjH8WCIhFaWxe&dz~@DDKy{xU(yFTMyh6ARkfDn-F6Sqcx8-idzA(P*B~ov zD2QqV>NvX%1NJQ#q>ywND-%;%Rh638V;c=JS&-wlYLHJ%V!)5_dywoS^4yKF6xZL6 zQksiv4181;n`N{pt@>As$aX&1=yzcd+gQF3_hsN#{;oV`oYfo>mn*cU@7}$w;v*yT z*a3d4;OYGPpV1ky@fqgXERTZ2*xB^8u1_*u;eCVA=kGcK=dA~fkRtBa3k4oPOd>B=>8vD6 z{Peh9T}5484uozN_Rmy9bLbrt6&^>tt4+=5EtLDb6C_XUN3_~(SbBPkyj)WxR(wdD zk)HRKy81oFEMyTV5t9wS$*Eoz21JoJzdj9wq|-DtQE{`f?%;B(B_s_0 zrxfYqd+tRwhC8zZo$6OzY^AT~>{=(|iBs_YAeOkZ5ap8)jD&&C>FrX;e!*;zY=%Sj zR{=eXdFs;0O_G_O-d>@-YuqQSL=Yf~oOtF1%xyqnm^1GE-3p;Eq+LBz-tOD)WK90J z_X=y|&z|)MKV}(ZMyyrqaNrUC%Iq}F$nSaWqAU7wg+_I1qC8cz!=XM(2JYWoIX7)v z$*EMdk>TUdt*GjbJ@Pf}wIvTptfl*AQk2dg9OP>x@F~=81Ua&mDLVodJ>vlDno{8nb1{F(e0H;z#+1+(jyNWeJQy z_BUX77F=m^#HPm=#7-t#Snz9h$S=~ReH8?w6AGG^ss6hM-+yBYj6g8xOYee$4oxJE zcX)`#2)8>v?J^Ek zgg4b7deO}`&B{?VqMa)y@>jsxN;tAk=`zMZL~M`Jq zYSr`4{sUh#W`i4BTLbcP%z1ElsD7-Qy!(WXdNC93Dn@9ZgXw+=SA1|Y{ZdTC7YzbD zyoJMylRF9=WlaMzd8^NCptmsj{>O9xQGuvrzkkR>fxkzE=Xe_9y8z3MM#$QqawA87 z44Cfy2fzt=!uALVOp*z!@yvpUori$=(w*W9+imA0k4h?GSor?rXO_h& z+A|OOW2DcRv7tF5p00D>H!`)eDB0DmJCE9-cb@)II6c()TR8jpc=GZ6Y=lZew zZnvPDzd7A#x>hL=dlYmY`V;t&%=9^BhfoFBvKi0x zPMIE8E;pyHIQc965Y_8*eyU~A^*(KEZax5y8-t7I>FF;jv`(<1jrp=XVv5vQfZGu` z)*n8hA5^ghsF4m5z(4azMK@LWDO%K0cZ_iZ^$e^IfDwYiS02AQ6!V1Xi*r@$!b;f9 zC9+8CY3a&g?xp56=uXlsi1ItXmCfXPf(+Sp1$d>sODSk{+xu4uo8j%Jc2#59@W$2& zy$ayCdi=AF+Wb-0CB@eCVwEiMmo97hIXAOjI+^Y7#D&U#a>I-RMu4_gVxHr{4&{dS zU#%i#;&+T+^BH|Uhssc<%ITAae)y+s##PF@Ny7XIa%0N!#7TpP*;D29#>>9ht;PLG zm56%)Z-GY}pez!cQ~$uSuXZW4!!%#|Uoh!;M;u%bDdM0LW>9IsJ;8OAP`ck!BFQ;* zPszB9?LQZX3`dKv3DN>Jez_2s{f6)}0&Bjf+{xURZvwX~{uHQGR(CFW}fi-2F?I6|AdDmeyO;N)|13f$f{2NbHHprEmdiQ%ib zL_0mL|AC6k#Xisz1Hc4u6b3vLzywVX0yDZce6vris#s}|oas0=Z8=X)38e?3>Aa(% z=V#IamhXuA@ei*3YfF?QMOW9pjh+V*bF}sO2k2djQUy51zcxt)^EvIIt`O()$a@L0#6!`V(;0}DsWy60j zva;Ne!TW7olNQ^&So`+UKf4mykT<8|=RAwn0C;YhJS}-E%VE7zwaUu}4zRl|b?o?I z`(Ea~AK`*FKI-BP-80x%6=YDbRDV^xt$A(((`1{A6Z5VE`Pvh`dc16b;)dc$2oS61 zF(;DEhy8iJ<7bRJ5**Gbtu}ig&d*O8&_aDt zk)Nquz@lDEA|)-&#LiAHC^%yw224y}7+C%nK%~F?xjUQ0V91!p1f68+r&lOg+a*O5 z^~Mgn!St)G%{J>jq$FMgRLBJoV!{Jk>ijwR)RjXZtBwiUamVi-DQEG-1I1S<>d@Z@ zbC*kfUNY%3UiSt&=t&O2n5RdKmO~O@_sAEG*M;;HwR#<11br{2#~-@7I34tKdO4%8 zImPESvul(JSsUO3{MY%zTl$2Jq;T64_rrRHE{Gdlp4(W$+}+}~&el8nu>?Z`vscIy z?P5~)?WL5AZ2J88_umq8O_d}dA5kpNn-^(*hCclp%6!YvFHza15ZNXP_hU>)lP0I2 z=q^^t`C=^vBH87YkACyF;gQ_4H)ag_k?BpvTfU9THn{)xtS#$ji!Hb84*WLaI7IoI ze*Xv9nN4O`d~jevm{Tn@1zS8XPR766t^49y>E+5BS>OYIN&^Pw;b95TGUS2gVkNhm z=fuI`OOB1yqRp;Vr}fIVw(NdOUt<4rLc|)2GDsJ4%s(~vwaTflm%ii+&?z|0xo=*S zV@<-nxWRj7;a;oY;=SGl;BVFyVP$R?*7xr1|I~k>&%*jYLpoUsIg%>>^IrgolUwqZ z>;Fpl{QrgY{NE%Lf>G4|_p>@H{NGM$ao30zOya>Zw%#LU(YN(*W`}#_kl0l&AnjXhVOq4TMHLgbEzn-S2i&->#K4CKfdby9|m0Y##{Cc{w2I-(rzpN z1@h&X=gG`9eYZhd(4)s04TqJ&=zjS5kq{lGXXwlM9d@w9l#4;i!Reg&7pL=VDw*9e zH<$ISW(f&gHo>EtUo?+6>fY5@BXl5Dg^0gT)f*OBT>c5|czwMlc+_X$(=#NtKAwx}BSsFqm4Mhp_=V;sYcQR=*IZ@{?gQ65bv-y<$MZW!!N1cU+9`%1HgFIzzWa%R9E{-Cagu zIVHk2A2eom!kba7%0LL>tCvzXeB1E(u|Xsth_~M!NXT2q4_!MI4>D*I)sAjedFj7dReaMFA=>dm|7Jen z&T6aQqEbXyxL*C5s_^c0tmgo07-@<2a7VIvTm|pRT>AW{Trn*nAzkO{84m;K7patbWWi$74+v;!`?P`?h4Q5nRs3 z3F7zUIUh7M&B$*VsYb4EKKT65-`)8Y67m_$*g!{8a15OC6$s-?YHVKk1l)`pQ7RJ; zEv4wgD3pYGl-}t?V3xPFFoh(o(z8HreVKkPinx?vP$jHbl{8M;3}qCE-R_s`aX-iJ zv$d@jpZH|7-NS-l+w&pexM_qCJub41d2%;jFBT3f@7HYIz`=QK;XG(E!H4VTG?Tb4 zsXE8%6)pJgI19(s%!h98LZ%P-@YU(dGvSv#3I&43vvz&89xjSHo)_`iKq$(yGnnHdL5*Xt7B8Mdcu?31l; zOC4534Bh=}Y~0>YdH)XCVa_w-m(QRrsf}#d>~!_W-1tp?Xde5G42K>{){-L5 z+r5aGDL2DKAP{QsifCbn$qjJe9UNX%olBYLyDISxT~F(f4bE#d8Ic@qdZh)@t4m*? zjB>wv)7Slync|h|G1$dgLJJ9i}JXPO}!?ZM8y;teNSyX<$}z#b-mPl7gW!_$(V!;rsX>L8Z_; zOb>yFM)sYGB`s~AJ~-HOOJ&-5)C%9Y{Mq1c`3=LUxjn3(<88T5kM6eQ%`cQRXh>gE zxnmQaPhUz*R_GMffezTSPoPve=W3;uu##+9)#V~7c|fr=nOIP8z$qg|khyJV)@|YM z#F2=WIwFWY|2>rtkH);)1s$>CYL(P1J|A}F$Az6-y3B`er&xM7ppKyLbEAn{ir`X5 zHA1JZ{`Y%d6su>^DPq1=-XAVA0_uBh{q?8>GIwXbiC!$MW)DPngB@ zWQ&8GWRi`aAArVFT{sp6&F3ns@kQUI?MiiPO54ewvLoIhWo~CS`T}z$pJ8tMoe9*f z%6g{Ntt$+W`gRc&o`eNR1m+T@@F1AFzQ~9#oK{~P4Y?-KdejrctLO4K7?`pt%05}r z=YMJ^(=FQIl2r#qKf_N&i8Ns#>q#;?bpdBmJGBU z4YHzUn-IC$JsD9s#i3A<4}+3_{-%Ef3Sw2nV@_mcIjxw3PD_tI>_c~s?*Dl0dlDn9$$ETG0|YOe$d9ZqSM1{@C%v)B zo#@(pwFsMY*i*`_CJ9!Nwv3L)dGmK<#iHfkjb+d{IQmEPeN)0$T79$J zEmbCCNAZja|IwlP`~@m} zS{0>yL9pg+X}dOGHfCIqvT3!0%viJDY+4oFG&c|y^`a-i4^Dq-T)!~H)oVSf#eXK? zOa|TJBdS`ad-0^{%|}TwaE$Al^T+L%Ib%l7bK0)wC*odY1XQ*K98to%*Ch$u`WoxS zSO)Xq(jHmUAe4n2Sa=$gt&Knh3fN<|kO(V_=a_5CVdz)BYo=WNJZboCx6sao zuZ)E5z3uDEMj|I|A|@F7B=xKHDef>e%)BH1{erxEQ3bn_9=^*jRJ|`ms;MJ>x6Sgsqm8-6uP1r1|MZ~y*}T+{(u&>{ z@GswRA@k;`;A=UE(`6#mP>_GuzdTme&!-}KblPEGJH*DSrpOiv8jn3p`Rdyxsv(T_H%UHK`sldizaT=A*nB8b01VG$aevMsat!;vD7X z0X@zg|Ho);U$J-I>1p}9Ks&d?fIV4mkHl#xmU{!?t${?W0QSC@DS^Ah*DNFzRHGxK zZE3eaH=5GoIN<<~2m+J`U0pzSC0@F8C$z$V2k{P5yu=1XoC)zK^<}XLn$;Uznd9~m z$oyTBg)K>LZ=qSf8`ofy$(_;{t`GaqEDYxEyaD`?BDifwE~ zwPmZhruZ@(RH{oRI^a7@Z#U^{*3=-bJ}0~o2CWIE%0fl?*$!QWQ_;^dUxsDuh4)6; ze6!Lt&4?fE7vFrb{4v2pOgcwp7jBt;^Rz}#B!*KFe|MFY{n-tHUw2Icr$tCNK`$L$ z=PxT4+1;mb&lgrfS3~03F@!tO&GA4(F^A0(M9`uSaWd6e1_Q|u~m=8S<@SR=4;&9_muf)BJI2_(oqswY8 zzS+SV{plb)i9i+(-8M7NIID-w_6h42?)|uY_x%#-=oHC*akJAQ{75ibGIh&O90N;V zRm?tzJ*$PhTp^3TtDGGA$H66^OFdh@hv81k33+XJf=?u=mD`68pJ8j+`Fp1HX1tj(k5WtB? zz;D+!H#>JSb@%)G)&|w~pzt|oU;#f`O&)jTqmhg~TlC!bT}BD}dhwN%TGn@L4)> z?fbO`VMZ$BY-@hvN?SU2s6Q!58mh}+&V>)D16PZqk8J>FvUq35ae z&A8KE#qbj^ubF-D%!@&IVTj!Q{0kf9J}t~X%BJhMVIw2UI1y}HzO$Z0Fs;Z&^9KqbQi03y|L<|Imp9~y9r%+R&8{yNoIl`Ny`}mwc zoZw;RIg4Bg8xQ$R95Y|P!4xpm;IyDEVK_crK_`4_q|R{F&UET4rqI4Z`7)WP27B^O3h8#(2jhpS``ym?;EOYg$kLldSTNI7jjpMX0A(3U}Gd ze|!~Q^bMABv$nB8cPowa5?wx1obNx5Trb(&EJm=-WF(1okdm~~66~E}Vgvo#_Y~;l?}v+HQd4a6d-6d9 zj~dzp-z~Tu)&>D}`&6rNnL{4byU~Q7o8L$~)sY#c{l}zHiXQT1ehFBGVhr*6QPte$ zQ0L$f?=otQa~O0+6h^0b$V^k5f-OBFaEKl=zINrjh)&HSL>)@q#( z3KJ?N*Z5#BcS|jke1B)93E$dZEw~jd+ZGsB@)jfGxKtwW*qZ~Q2M@)$ zO&?V8CsI|o`mee|>OT8O^8B-#i(P&=ouI3|{{q@A{Inf^>IM~GgeUc{K?;wKc9w+d zwiP4x0PT(!8o$n7-=*$CLUa~wvb$;2?uJ>+17)l!-`+>{EcSCOKDEN)5Gor2O$?$s z4h7a}EaKuPv>&v6Eq_*+K8`&e+3aSslN*`%c&y?$_v-07546a`ny%qS)iI%Lv30AH z@a>GN9Vn)=faY#M%(CPMhCIRbLHYXnTM&xT`BigT8_DB!;r_d-?2=iIQkOk7dXZOY zA2jWb@38h%`^@@D^f=wi;cO0zKS}Wx?2jRX%$8wAHW!bA6#X zte?sI?-YL(%)f~=mBSbpDqN|5BU0>svtvBO}vl zLZ*l*`=2Ws&PO26-D9Bdc6@bJ9p)Mn(YqdYS2c;8s*o!FQJR8*`Y(C_Ilh#3qmBXX zY)0X7Eth~ymceU7p5-sabm<$dq<7dT8+~cJyEM7g_l3I{UL7tt%OK;eiVas<0|`W* z-?vO=i!FE-2};m6|JjO~j#J6y=L1`%{0D@dO$QTqh8dmpcciJVkf4)Yc{ByZJWa=` zvOw;$5;9vFdT*c+SRsMpYv5Njtl#nRmUez@eWP{7@%r28D3~?gm$ww?W^DelIW7<7 z<8_iG%{OO_d>blS1o9H|?223Fb;4t2F#gp3)ls3iFfH%uEiwD#R?q=O6$3qGrHV`u ztVokKFNH?0tEv@?28v%-P;WkX>doWjQdKr}na3Z2S@Tv_pt+Ois%w+Uo**8_2sDKM zEoHS!JnF}j9?V6Jt2F8G+HsuO)$Kt=sV^_)UE2ui368&??g_^0gwZC0gf2xmrCHVe zQy^|H&|8u8(Fk+*pJ=>{WT!+}_LI!*0@{JC5=p9?DrC(2*T&c_5}Ff(k~9VJnfLfUAlK({aNy>-;Xbz+_;tPzIoa8%U5y<`Zzt`rbiPt-@R(7I{*GZmt`gj;AWK*M}2EcQ|B_b z_aTGtlY}NL?dQf~@J<0c85h>F4(X4yQON+tB3L%utJ4yh#mcJ|H^ z5X-5a<;aqLgSL=~;z(-cllByoY#9uz69T+e6_%1kZMC)Sng`!xH}IlMGSg;W2PlQl z?pvBG^TRit{Hh0HnJZ!(A>MYJbODPL`fm9AKF7BQ=#Oun_h4T|pHyaD1h9X({Z_Jl zRpg^TMtTs#GncT^UbU|bV}D6Inb3JQl?lGP%WYPRgD(00sBvVr#rPhrC&+g5A$O ziX!E`vrS!QqKp;lb_4auk1prrf^XlvF;^Go;u=|5lKimfP*CMLZ2w8lBy4>}GrW2Z z;oDT7t?m<$u$0IGxl`mN^GgWihP>DLr{)U3c8A-~T@Cd&T*X$1*hc4GwbeTXPMSP; z5N5m=MpX!{#hD7PU-xlpbU=hq?LD2Wvqr#<@lb`YCB)wM39{b$REWjAh3i{A8$r&D zP9X|PE+{2q@Q=Y&2$T%Kj7&_lX1fKZen`zh)m)*8GNqgz&b}6B?E=+urJe0=6dKfa z&}+qqlx^xcQgc3KCFab>yX|Naea;mUKJ-QD_~N`-dMm7Ckc?FNwOE=7)cY zm;y93k`es}{#~07vQIl*_jd3G8({fsLTT|0YyQ6OzK{ppqaGF$2@qE8Iv|}Y7rz{2 zCdz*8ezTf=)-1>2DnU2VF&>}Kn8)f0B7W{RbykAEV*0~HJw8T3n*T_>s11yI_LeQ? z;-vu>bVNd+85+%@O}ws$(+rGSVW#9LKk(V;Tq9bv*kf?Q!l&v{ZT*6>av$XW3Tx^@ zANGRFLdJz((;g2BA5HIwd1(3{uUf!3dQFFt*&3Wx9`rSZph{@j79BC(*WfwoOF9lb zfMjkgj{5=`oBdv3*_yPv(RRC|2CIOFPbj2J)%YyP*(>NcxT1oXB|MHmrRR zGwA!7Z3{|8X^$w6T{57SV7>*`mzc+<488G*=AZq~w4VTJ?y9X#H zWO-HzTwQ-}?nMr=K9>Z$X9wg2ivUrwSA}BV(9;iR*IG>B)(7ENcNf)j-?WkLpHpHFnN>d2 z_k|g^e0IVhuHYPp+5TlYN z%$z!r_~5dyj`cSvVm>5)NnGUeMQ!j`nfS=;vCgAEO}H&odTmu$xG8B`yciL{_A4c( zhol2CgXW`8!1^?)HnASB^|Ut~m~EDe=ak=&yw_IYxT#ZYs5zQl1beF4_KiPP^beOEfc7XFZ4f zw3$>j8Fd4lbSwP*J3qXyQv80?URphF?Con;;})cj<@gVDQA1!X01ciqV0!9$L}PdL zTp?lLnfWX3k3~kns7TOyyB(M#CcLRCy?@oo*JnAH1(($*SqqC_uiYEz#q^d4$-ZAx;w5l> zHt8AQ*O&A5ew;h5rmJeXyH`*H+uQ@*Mw6chW~*x#aMtg7YTlI;1x;EXO7;rOVZooU z%l4|fu&C^aii7J>{S?J-{U>~V1Hiwieg&(=%iuQZzJyMFyzL@*`UZS34CXOe2mTtL zQs;7=mXNE|$1tY~^Q>Iqd`K{3?~oiDwn&rt!*C9*Z(2m)eNM%jWJq&~jJTMd`23}3M8BOG;s}<; zuNe*<*b>gvE|+*CJ7vxT)XWZgpLG;t{0SV9J&{v$ljo82eD|S({i)5k;5a%JZ^)(_ zxTCy>ik6$U)HpvDtyawRe=MK*SO$5S^5Nm>*iiXtp2>ElrB0GW$*24BeYO{=(;1SW zN>BLpiPUy;^bfVDyzgLEu(}C&z1=KHz}>Pz_gEqX7WI$!zLY5BIQj6@yBFLwME+Rc zHI{B;^g796>dDs}`4L%crabNjKUnE&XwUWzw%&cT_@#TEQMWB}!A$8RY4k>xfY_R5 z{*)iP`O{J0U>_F$X9)(X9rEZO+MGm~cqp={w7vpqU+DYxDX0F+0@&7|WQ^d8iz_xX zUht44=Mp@qqgmIFUpVrDLUNBgRf1>!T|C3-!xZ{96ErVYYT!$r;CG#&Ss z@Gzt)w&X=%qJbAEYy<|nx~yjtUSyyoQ+*lhEWUwm1ua<$U$Q6|i_32=|s0IB#($ zIW*NpHfGU_^%L1~PbCQ%H=;&RAi)d-ZlJ`HLjn15V&(U|z@zhCwcrO=omSuH&|*;R zR?BD6)FQ(<@)2d#fW5uL-rhoL`~1lR$j$ z@vHv$r+2&MeRXp_{OuK3zORWz7#VWhjY3O*D0#Dq(H_1ovdyllqDcC~_)$qoLQ)dt z6Tg?Di%%mjLrr~!S!)o%FYxg6_s0+F=j5IQzv?*vDgHMqD&65~BeHbs#}DimU~if< ztpv}ZH0vC86-eO==Ung-!BbH4CJZ1ptb;XXAFYpv%8rG~)1@lonDYz>2=ex2FOh3k zS+CT8?$U%`@xK8UsrymvD2&n!Pz#RM&$k=kkEJn}NuKK`@Cnnr|@W!(!AE-|cj~f4^WhAJ)T;T%q&l z8^Yts)+Xwx7FGw<(!hJ?d5W}qC(yjzGR0+dY=XXrIsL!x!+O>))U>jJ$6zS4GUsX$ zmH!1BJKynF%W9R*XqoH5(dXw!z4+3Qlz8mw_(G|qYia=Bj)6ghhoXY{vG4B@-;2Pe z0S^O+ec%@*JhO{MuXv7|g3G(592jrnglEQc613GLUr6*DdpRL!EShz~-TvO573oe? zI<)FPuA}z*rN7|sH11cgzLonJCSn)`zw$U#r9nF%RLi(El#O$N73!01w-13-dVSG< zD(|P&$ok}g0aX2ti3~yNV=r5FNC`;-Co&CX0EG=$;tQRW*zL=;WVG~XKxPQJf{8~I z&pR1XynyizZOIoYswYO75RhE9y3eH6j+a(Z5gR?jEysORn>c82S4<+e7RVWeL99$T(>_QB_v*wUe|tzYd^22KOHekFab81 zl;71(7pYILe;x=}@H9AiQgS|L_(cY5{4$Jx_qU<3OQk3m-3Nq%qm!Ns;SJ9y>h1OKB9IgPpsH388_G+?|r z=)q|o{FWm4$H5KAnMOq!ZKdejWU`7=sjHhol+Rq;g`eVJA7|@}Q;CQ!2s+WP9kv9t ziK7Jjz3=0zk0+eXL!5m6Wt=ssby2Qt<>06`f|T#t>uPV0NJ;sisVTa#vC8HUAQ@6! zjr+MPEWNHyg8N zQ999sTVZQoZwKm6GA1>Xc|ESgqD2J-(GLP1hX0eO4fC}cR}8&%8}wcgGsbXVyZFHQp}EqZHkF%}^`&+5s`i{&HvE_<=og47FZ&oxjv$TI zlv9h;Y;=qz`ts=L;>oHVRJx7_Tj5nj6)gk>V)F4b2z$6CY2( z%*?Em;)(5|z!exhQ5C5Vdw9q z_5~eBI!N}FvpM?6h@sxUP9V42M3RS{cni3fjW^C@q zF>?A0S(U5mwWuWbSH2(G2wRD4Hr;cSl*HJ`rzhYWUn%^}cBzsa6{%?KEPx`}^mp81 zcx{@eO%45E$>C&ckS0^T>5;)#+HRK1`s8LJ51$J;rv;S zlv+0#Lkg&i$0S&NDBR8=#gg07c#-xW&!+H8D)-I)xX`etoxcavm*byw_2w+myXnWf zz*U9@(hkRI4m+YiYKt{_4p`z%mXbgy$!lA(=6f>f*Aw zFrHIHFTl@xOIkJQtx!8pm_amWRf{uRQt@221-7nDzWfE<&(cOsE@AtD@+*@HH5OTA z$FY#y!m;1GND4vzpChCec#aP>!hHujpE}_Gg~9~|J9v0vxx$$`k#(3a%$t8=w%Qz? zXOqwo3mhpZBnpfWpUu%|6>-lNSYbCR1d{W932|k#l=_%vlPjsca)+z^@!Yeu?TqRL zD-U`xd0Qt(lW9*zID}J3q+f`7@Z-7RZGuWcL5=dUv2#Xn+fx;CK@(~e6eIM1sj2?= zZx?dYrR-M?Tpmj}5uOMC>p`)#d^MK&q%uFDgD-~H#afr$xc3riw}90c^puzG!U)Na z=SZbDyzthjI$nuOG@LC~S6eaCk<;;ECz zoc)eLcvsm>Dn6 zl#hs?w`dHJeAR+z@zD`TKuMtqa}u*w>3QT=IT`tL3kiZH?l_z<@>E1i`NF1*)HCeP ztFlE&NOV%`8bW2PV!E^E;+MbDw38XZz#z(hx5fo&^75k7(@SngUKm37L{B*$g{l}( zJH{ilT9`HA7Jz7 z>eBY@+CmNRo;sR$T^7@)q7|G8oPSb|HdOa0UQty^gAB{0V*ibmskr zs^zzSSR-!Zt>|Mp-#~e}%?Ghev{9W$iEN@(jpT+%5Q>uY=R>$kGSeRoX5txha|2RJ z#l|oUVs`ew9qofj=;?+&Y%|2f8Z&b|d1aA~vDC8WA5`AIfB)w#J^c-%-RjZ<0D27o zI0o`2-Pi2$aux|YvB8{v=9}d2u7B(HmhPZ)rz`Ty`(fnU`I}*t806mf_yL6LtWH(= zSBdOmnC~e5ko9lqvGRo{<+Af*XTQ49siX!m7?7i_ffnoG~kHD+pvgErrZ?VeE zaQ2-0>_Avj!6bjU9bFzJ!b6*7vbB4AcX-R=U9jd&5*|jAAxeKNjho1@8a^?esLpT%GXDW-i#=&q<{VJl9d1y2Z?bMD=l7H3NtJ`@*uS@_)z% zz$&3)AJE#f`({t$aU$yC3Dj1n?DNb!&3qZ5MqUV4y}_5B&?rr9g@B67d(ST})>{v& z?ohc9$1j|K+S3^!6A^%S)S0pUqxxsLgw={^hP1y&iNC5U9hxVNjkd&kq96<=>Qk{s z@SK#5qzcxndG~lv=okS~Y1z_B@How_DM<~+xVe0=t-iWLz~^S+wdV^qU1(>iTqoDa z9Qh*DMh>F2yM7=ef0%z6vrQ>uST|y6AXK5M47*V6v`&eJ~W;d!cSwFwv42r;TC@) zkRE^eeR%%|7uYa~4=()BXNP8l1Y=Bid99bveQrKr2K~N0EpBe5aMdJ^&^8)M&W6xe z*TxeG39)~Oh!Fc7b;R;7CxY3hm{}WeJ8%e1FYl<5q(s8lqA{r54pzjvJFm zWKL`jjPr9h0b~AumJH@xQ2v+lyg4H9`)s9UZilPX-r`?BIB+9h%)GD!_=*p8*h@-!uGDszfoNcy@|8|68k}5 z$yWp$o9f;?^>so{e>r8*?(0&)cbbi05Jg}ap1;mt*E!8{#gpo}v#qd0q~`LPtQ0K8 zdpiUnO_y2eQl(T5f4s3sS-Db%_!G~`i8cN_Jd+;^n*nMfH>RL_csaG-kev3W&*RpF z+c=((}_ObRSk%?&%c`o>?PLTjW9?{W5<0BO+t8GF&b?RY@HlM zhcyW(#caOfEDk}nQBWvxura;O62qnvO0Zv8Kz9L@VNy?s{L&dY15}hfCU^x%wV5Ar zHhq6D@WW5rRpoDLq%N$N3;WhSc>8(*|hB5FdeKO&1X?xlqoy=iXq{-mxg8vuD#lqP&|VC&@JQdm?KDF6pNyzSHPeU9IBm&pY_ z*KP4|ucjhW^zbJ@z{ZRCceRU(yU$17Ma}ko<-=d!8ko&iWAs+YfcHC^za*-P&C4kW zcTBiQZL#xASqWEv~7lk&j;kFNTSn=sb+lYVQ&5 z=#O;g|H2&2L((ptF(3z^)>;ln*ozTTa79{(*HRn0bGwtjn%cE&X0-6+ZKZcs*C#55 z*vwpAe1TFeYchUQ&U;<@NU>xQ4REDLUW=}h%f*)wi`plOm^2_$nxiE!wY>Z`%HNXJ z;AeA8OX4tK;|MGk9(e`3tb5k?Z1R`;qNcwu+B9Z;S;Vo*3sVV9w6fIuxjc~4p1EuRVA8I8xHwIWXo78fPI@}w3Pav3%aR-8E7eR`nax!h&UQO=c6J&7RV?3= zlZDwYY)$5ZhLD?-1FHq}7^GJ9ZKRnGaV~vIFYhWaLc>9i&&Z~*E~p&*?XAVet7&7Z z*(QlLR>izC4KYMnJQzaB_nR?rJn#HPFZSqyW{1cf^W$bf0=#^`ZT#r~x_VPIpwh@a zElvuP)?(N9pJz$GPqGpV+v4Fl6(bQD?D|Jf*@C>gzkaF2Zn?~Quco3W@s*?m2eWx$ zduJyU3VqVBb4gnpyLruebdylPP#0lEyse=4^)BVz;0SCoH|`DY^R^DNizG1DwgN|+ zcQLM3&HlQ5N8af{neFY}+{_QNxl>#Aog4j+HAw|DQ9N^%`V1jozeb|Zqcc6QgxxnB zH1R;}fYEWDl5NQRa}LlU2!q60Rr|-?em>U2dAzZH_H1Gl51SQmnBLgSmoH@`rNKBg z=XCmF$4W;>2V;>~3p=tS%9rDNJDSNdEDHu7G{JHI!RWPPu%T=KU&?#a0-1reZ1Ta>JZ$#_I0PNnln7DX$OZk0%8zSA}EXLyG_;c)b4gE$VeTg z{&dv$mxOIwr1yao@l7MY!zI>d;Q<0KGIDwa|3M~}M@29_g1^LGtnOqkX!e}$ZJ{@mY z0yRTcv{U*dI(w?015A{nb4@EL?w$^FUwiAPoTycPnn?e(gIm57@5kI<|DHa!WtDpo z@FypSKA@sq^iYRgo?;vv+{xy02c;(eKMWDH&^3y>j~S)^L)FMR)0g`Hn-}u`l!BrR zHIUtClC-l6iA;V@!S}~b*FoHySIG*Y{(opH)R9Q=7$Qo_TqzheUwFT^dA%Me4e-er zk(`>yx84<>m;E2+3z+!drKS;gHU!XjmUrv-dndnY3({_2Bl z)BA!zKi9MNO` z%he54*&WSZ*}r|5g|0f^MRd*H^*1tWf2`>#?Aabl3{^_!zg{?fQk#)zx(IS=5E`pG zDozSR{e=n^U5N$#D;o*V=0^)CP!Zt1Jcc|u;K7H-*@^%0IUD={o=MG0;#ry}BLCno zj|&0Nw$E^>mkVZuw+;@1+S)|WgGqsZ*?x`wSf+1vxVx^y`@h|@%|fdcc}oDJpxfP^A_$SqWx3Ld&^jn0G{{)nnakCD5A?(SNoQJ{JFd*$Qh zZ8)N)y&!@;ny$hYdcx-il@DKvcz5U0>u^I8&T$%aQ_x-(-oEMnFVYUc)oE0DSXDGc zsF`1E4kWtSTJj@+a0e^JI&sHjeFIy?u*`Fs6amt>>DD$3M}_ zb6;=7kryA=X}h@IHf@F)^unUxaMpg%|u$DGp9j z5o%wl9Ib8|-|;vcR`73R7x|3}`Tp%y-)d1i)kXzcgX zFO7((Lb1yzbD^J^tu8i8b@!t!L1wTw4AHbMJ%W#Kc;ECpxy^*l8kVqmeFOl~VCP)aK%7K}$sm01m@MPvIgxdRK znBcm?4T>u}kG!DsCMw{m{;~a-f2_Fh8K8TzQ>E|VQnH~Ot)gKrTx~}$imb7|u}Fx7 zUSd-sTc{epf8pzDDn`+AO)AQ-jY*0B`-X$i*~KLff`EH@dv5{(pnE-3xwuzDQ-0(d zV}i$V7AfSIj}l*OE8133fh8-ZAi)w7?pRFzu7 zc<`1J($80u*FnRUX`3hs8ZI({d!y+LGI%cs3x)+;U$I27S~Qi#|Jr04^1Zy2*#({x z6sCa9q)-B??!6L{^=v{i)RAjM$V*ijdNmwg_+@%W8zPaLW1@6^roCVbMTW70?<69eIQ zYd`ak4h+<#c^sW#cz^(Q4f;&B<*0KBfy>kvC-{SFDwKCh4|;YZjeZn<;)?=Rdy?p^ zN##-Tf8WZS?aIR8mOA`6KuVqOvLENmvx`X^DpgRZjf}s3*i*$d^l{M@Em&J=&vzx| z_~8B5CMf>kI_atTz=Z(2jRakO`nPWZ>FMbW?TwAIttaV@ozC-)=ao&Xgsc$2$+|Xq zZf;Kh^!Hf0z-iu9n@s>;KzVvt>_-l5=4HbcrSgrmUn(GcCl@>kzEta~(%#BE+&;{V zAIV`{ga2qLxizoil2q6}1M+pv!huHR7CY+0UQee8d>Bd)*$X1NL(*?#*(K6AKTbIK z!*FSS?-!v@S5cHv+RCz&1|3)sQDmYQTUbiVW77@0Ch5A*?7Zz~C?ibRjzUjL(a2Gg zl95404@Lqt=*3L@Rg#f`V54&w{L~w{wg5TmslB$r&xcNq5FC$^FH>(ML*s$m8!rVh zMNH(wDwTLKI7P#9@{GDts2eU^DhSxTdrloNI)f=~{g2JQ!ssJi#h3181K+(a^ zM~qy7k2M8gTL)x7B%{aVfrw${4d|}{j>dNq{ozX+5&mW)Iq<8Lh(rehen@@cz@sY{ z!3wLfk~y7x?92Vq3aZB4YQ~Ode{|rch8_ja+NZDS?35gv(;G)0oCHd2xGzVeOM7By z?7o@PGy?48kC9jZ^rV{=zK)7te{tZ@1VpQ?4sQ*Qb-@tC{>Z*f38S-PEeP}Oql*%4%; zCWpuk)QnZ-;r$dU*>kRt65kM-o+ZUTBQAZYdY zoOZ|q^oyOH9W4aPCnF;VzF&&TtOWEbSD9uT2<@i0mEll*`f15E6e*^zH zL_U+oyewQcM9W)95W`CI-F-3Iph+g$k;-q*Jb-s%4sck2Bde;)H}@k@(u19Jl??{bhV!P;)!C)hJ71cU<7IkW?yjO~vR^Vwcx zpdkJlnWfcB?D*uCe!9v;^|KqIk!8-#Z zhjV<6d`b&fT6T8!>FJ-ROen~2DqFgT5pULx2lcB*%CN#Q>G@4xa4o7f?~;?_ll}Vp z$QPaE6*$-x*t|;_F#!*phieny6ZF|@n`;gh;^B)q85i$rZ%V@L@-T3}t1rd^7SYe> z6Q5aXqF~&d?oJP71NyOVc9zK_qZD5jEoH$YYH02};w4vPyi=$Q|= zb#GrM$L2#DVWoA19bp*S2F{^J6E%+hFJe~9#{G2b&shPxQ$oahW?TL&^O?QQ7li`4 zmnKx*g;n7CBc#{MN>NufK&d!$bQtAcP3m+3;^T9_=g*Zmg-jbGR{C*w3= z9Xmj}+Rv+PG1J7>ACF47Z!DALTYoGaJ$;?)9u_W@u#CGqA213BGYM<0r|3p)o&A`mBG~q(Hm|pGX_OOz@U#7VHq$0Z!*X_1JPZOaRj@1|X+#_H?_p zwe$JAKA~hef3wREZMuWzb8Io!R6;O>VwjS#+7_9Qw>5a|uhjbw#A$yI$$XtST8ye* zr781>y+;GM>G*GGX@%UkS#27;Iuf$70uvL_85kJa+eOc>ulvoobtTmG^_M4h*^~c{ zT(#fTz@-40?ldc#NkX!}!#}i$QIPe}8I_>6Z)p4)b*ubpTzKti^1}?IEM^Gsd5^%3 z=;*I_%O@y1o?W(QbTHfwS3Sqae<34fM2#dRWj|}pOEF?`zWsJaC?)OS+Y_gT-#D>9 zvviOs*K-?5Nt|Xpzn|K9+#QuP#O~w{tv91`md*P=>r&UNWFT~(eSZ$v9M=PDogT1J z_+HN}jm~uo$J)sgx!S8SQ(z&qMFUCVzyjvO;M5>a&i9I%i3=1F z$AjOJ`3DhQqm$@7a+O7fN=r{%HhcwREh^tc&`{O^gVLsh+%Rgww_AXo!)aN8IVmYA z91tlK`H7csHEcvO&bO*!AgKqhJUlHW#yF3i04smU^n#ChKPZ~cEi1F0?Gi;vYGNb% zwrmqe^Va(#qCjNUyTeb_pNh*0fKiyP!fM(*T#fXt^-A%IBxP^wz;>oZ=k2AwX2TB# zIB#+aqIw6$-XY;;^#+&)Gwli=-|yZgs!-ScZK$yQ0{sq{6Btf=w29-@DE!*PahECW zTT&K~5G9-k@}rC;IR-O*-Cu<>G-L0n_<4C>m8?s9Q?O+Df4!Zn-hw|`)NQs{5@>9C zw*YkBfT-W25mP2l5xCCXbAp(~Bcf#;D9(;*v>^J-fX-a}YE`c3*4A%?gt5#GFJ({+ zvdOX;2jj7F)k^#N4j9nLN`oYEg8Io_V*(a5R9rp8mOhRFK5ub=dnKT6{fIcqwDx+T zxma^LHo4F=CYKn>7GN9@fH_DZFZqPtZNl>=FFzlZ^osb0Gi5jV0J*%glhhybJxv*O zB-NKjQlFmHF^ZV*;lE-5Hp6a>$}XKWNe6Di&)$AYVidY{-#MrfW_Z%jbo7+C&QL!< z<1ADC{d#)x#dQzCXs!i>GTxaTW3YR)H#`n%ncqm$=hJh{ zrx&kb5W)1PB_f2Mq0NS>Ciw-)w6yWm^{BmynzMPiQMGmtpgWI)Cw^A**A#ab2neJW z^*@d(L|1m|TkcjoqF>EqJVeFOAfD_xSJR9I5iVcn)%{cBvx4^;jUQEDa71ggKG z!h@>0NDqcwPh})h#{Hbi3$5+XpOnLXHue?B0*OTI+H2hsYQHyJ^u_A#(gF1WuhE^j zjNfw%yo$WfnWn5S7BM#`IceVFcgN2VMmP#ZV(VM8c8|vEL6!!rG*;cdkYaIpKHn~0 z=KL+4xj@O4fYkP#pe7wu7ijNv)R7zA%vIDfV8Op^{=&TwQy}HL#1It` z^S~t@xWua0=o##CJW71-$KZRuMH~;?tgZn3p0+QE@p}Ehvz6~`h#S6xlQ^0XUE!2_ zQg(N44(;*I)?Ih!3R?neUDCz~e~;o@eZ zBjtOsIa6ONBWeAFmBkC;(cPRO_FG}pvs2c2JPOeW0)wcD+vwhRaJn@dgK}0&JA#zO*sj9N9WLL&RJXEgRK${k0 zj&AD7d*>bfjtuu)ipKfsJ!@Uv^OCZXuND@h&3fEC+=HW?k_Y$opciwNA+axo1H!^E zsHs==!Zb?Cd$(y6tepvz%i{tA6iC4t?FL+!gB;9#PxUxiD1ly2Hl(qRx zD~&L`E-2|J0baY?PBFdb>4Wn3@87vi`@-c8F|hyQy*1qLg&%FDXlnrdE9cep^|mP= zv%FrqZ{GecS`3QyEGMRybb%< zo8&RT+jUOANkC6a_HH(!Hjl3fRC!>_&>73c5!Tcs@GcB@rz`LSV+x5?blmvcB}qXs zpk}w4!_fUeT9 zw$psoRVbSCEDn7xODZW@BZSYT%*0L#5s`M7WEu(EyOA1dp0(j4l2Nu`Cn|KEFs`oCcQNtD0 zHmyA$bx`xirPFrHtqA~1VnS|hc1Vq<0WBH17>Cx?(b1R?*ZAdJS8{3jUx)$9YVu8* zFYi&^BMS7J)w~I(>FQKzI7rR)UMgx5qscBBVs2e05N1`4UxBe2;M#HIud?*6w0kKz z#8|W-jS+qKBU=#kg|;H z(!H$3w)d2(o=W`~gO#OpWd=i}ybO5_J2)*Nz^J)kYZzHPThMgu?TeeE&{D~yKT~_F zv!k~3ZAsd`ZhJ3MjmP`%ne)X3FC}z}6^Ba?T>JnmuI6%ZLnwva7*8FpLSxQO6zN3k z-rw74><9q$gO{a$id3>4yf#8f`-VB7BWv&*fvhjP4r;gE)nQLzh$T;f040C0*9O`m z_j4IrG@YFH>iYw0qj(wou!f+=@{D_UViM@%aOGxoOQ>(7r^%~GH{A&n+;!YMie|EQ zhyF8|5ctU5pB*E(m?epxr-8J*w4B(Cx-(!PnOEjVQrZZiw7?2gaDw{`D^89@U|UGo zWWKzow6t_d3FE-q`yM%Tkg7A`g(sC*mnI|W~KgOT&C4lX{RzKSiAEVw^$#eqN1GQ(^n!n z8=K6b!LfmvU&Q%Qq*}Jb#0^@r{w)`gJEX7J*~dW6{3e=?&~&jjr8rB3AV`}9I=Vsh zRIq`Rj3pR3{`ZCn@^|p=e!kObxZKQLv-oc8Dv(Ddf3<7{;8#%4!?9!TbQC?_PZeqed@?6G?pGhUwO=Bg&Qw zeo#7vI&EnhS{r{PoL2}d1NvPz81=bqkp3b%-(|b^0dMXO|NAQj4vsYtQ2sJHlqj(< zTRzNI*;L%(esefOX8+452+7yiSLb2q6Yz_XjcrEBU-O8LY&{rHe7zgvvY9f~&KGr?5Y{fSvJ>q2e($s*Lrm4_SfdH{4Aon3hV zW69t5mwQg0o`9(1xP#o6SR2*1O@wrpwo>=bYR@!igk0ct_4mR?Soac+emCByl#V@1 z5&^CeVGF!hO`wm$XV9ycys5xMFm{9ptO|CR*-_$TcMCIFFHmw{r54xFNSUN-eomaM zz+A@GEZC;5rK+$AVKA(PEp9PZ)mx5}*x;P)c-_MvNdSEf1^;`ikpdBaHisXAEwc9w z(;DZ;vm6tqC*Y*l@4jN<;o)T%>ZPzSvarn*qLY1Jz(0Ap6a{r;v}t_0RY$qoe5`LZ zBy8sC2aCCs?*6YrwEO*HKQZgn!?}Qjz-p->Y3&J4$`Ilb8`*ml<3wXhaOFZG*<_^% zLfoZ3ArxsI9k0)hL4Xg9tqSBRL=ADu%uSS>kwf$5F)lPcdU`C}`C1U|bMml~2WsZ|*u9*=3%LHYv z*VjdVy`v2VqJGK3o>Y13T5|LBFSe@}U>|B@6a1LneXGM32bx!}g1t&aW{v+D{bHS8jiZP8fHd#;ot)#j`&;^= zFdn7qv!XYj3ff6Zgj}}Ui}GnT2pm+-limx9IJRF^fb6Dl%HEV*cX5z|O%6MFWL@bn z{+tJuVztsr8I4)FGg(Az>&arB@k#s1=_I)_P!tK;j@sc7Mr@OQWez%~%i`{odDD{o z4S4_eZwVu0-t21_TqphhuZO^y1Tdjm0Nuayz(FP!(5U};n4lc`!uUTA2|pA|W7YiE z1%wd=>aWps{#^@PH(C0>U-dmw@_*hS-i^5cr1;-&AWZzfUp^&vHGswBbk6blfP1f_ zpMeqHY9Nz(QFsic!0)a9epS=35fHdH1T{50D$4fav($f17w}w04TDaf9_+bnfRc7t zkT=MQ3nAKeSl^TRng|9&vq*&~G*1o=&@`}$Ig`rw8)swg>+Q{d*Qg47{ri>18WM;O z+*Z2iBwNZElCfk8rI2tX*2=4HFnS<>iNbKs_fQ zXjE%6Q<$=g*7M$P^P9rt)>INwQeu#B>@0xVq zOa#x*&y%3B0+VagZ8>viuTL|$F3yOsBC`6+RhQz;gkq59In^2!3R?S zI;HYpWl+vwY;;&*-WtA}GlQ`Z8f*Gv;8A0DZS;oK>Q!#)eK$@Vnl@Vj(q!pR7k-D8 zO>RpFK+=9;+Y`u!Vj`&*G1^OGn_O(a2DJlPseo_PN70AB`REm z{7}T}%orI3#r{_F8MaDp16%K%)WlA*W5V3wT@&Q`6USG)>mq+dIDzsKe85 zn|;%6x4<3${d=GKb5iav7iMyC)T1XWjth%8U*APj@MRmec{tx3>Hf1~02Bg>bdOIH z=oI^c(4J$1(ghqz#DG3)Tx)UN>pN~*Tdg95b!8W0VXq$@$QWh@2;Z&Wk1yI&3crEZ zKPTn&b^w@~$m^v(G!uSMpc%kwlSkeiGR<`7*H>3RudS88HmrLt^@QZ#mA%k8a7$Tl zmKYz+Tas8P_dyGBPVRrNJBlPV3XqZ=OXNQT=2@V5Fpo^{1i zselTPNf0ZZYKETnB-oOlWXWsr0@}n> zF0x$;sppG3PuX;T{6_ftrhG!k7uv0gXtyg}?v0av?q^iF3-o(T`?+Ukp4&K{EdjP- z>IR7S1w}>3>)YFXgYmQk(nEI?*kN|JnHd>6b!HKjj_(5^#OH43Y?!HP3OV z=bx*n;4O<0Gd+LCv$b>5O-Tb~k(3~SJ6)LNMmko#OK*h(BRO=I@FgWB3qVdkySlP_ z(*ook_@6mc87gu|eIFO`{QP;t{rmcc*s?oQaI=@*y`8IvEv)vKv3qv{1vn+BYJ@Gg zak6|TACQk4cY`xmh%HULrdw}e(%3m)!Zv)Z(&*74qeHxg1nhwHWwvOjO812tJ;Y=L z+1Zt^A|f}nw+37{`ywnJ`vwLsR|MAZNl6)gCa-@;q<@w;Br~2RHZght}E)V;rY)4TAkV+sjAJ}KQ&YIHi^;s_{Ia-WBceF) z{pH%hbZB{bxzy-G*$=S11_8CG7pGRaW`%xJm6GmYTH&S4=;Rlr?K!yCj>C9jjD!BA z#Hg6R?WY|929~Id3RV!h*iE(^B%so7B$bOT`GWxyF#L=a{6>4T#C(86ICai<2_PpP z2i!Zn2hZoXJ^Q1{wL94U-A-kHNr;ITw&$FMUcCwc`tOkcvd6C@)Az z_;npQI*Vef=6yQVhQn-mblYM*tYC(8{|| zi-Av0P3dxOF+9k~Hl)7pq<~-bY`y6kPyf)wR7{~h>b11Ui&LqH_Xa6_}>m_8k`Vrobkspm1s$T5t#8!#%ydy&kMfBAqif!~ns14=^>i zEEa_y6Cmo4?Hcq#ABw9Uchem~PR`bYG9`zg^jB+N_A)CM&_VvU4;lpE#CN_*xW6)^wtLgz>67(Vf+Z1FF=By`_Y=K7hul6)v-rDcY=~*wSzTFj^yt+A zvGM$B3XnoYJOOn3D=Ux#^vMJJ>$}EB5I`T>1q|jf*7u9Ech|dv0h1BHXsw1N7HT$> zAU9A}QW9=?vCI2t$??nk>|a#W#LL^_opX=&5o`%4^ z?J>fLNk~^Wrf-hGhd`^oPw$h4hD?*g%6y9}6G+69T{awL8R%(Dt`OMr^1~wr#r6Jd zCFRD(hMAdx-)<2E0Y^neJsa5&7floho44Yrov`plri7d3kMa}D(msc+gNvS#deR;0 zdFMt>jxdAt(Y3<8?<MFh8s&9vd4I6cI_x&Q{UW(~EkVoSYmS zA8)!w6b=Z4p%am<%f~qo98)8D@g(f(s_Ll_H{ojs6vlkzZ2+yoflM?ShmxNY0{2~N zt=)3`3`|p^*VF1TaL46l=SpuFM69Fx)7fnpTGy`wJ&+My_&cFOg)r}8SOzjZ-_~)q zI>>mg=*2$Xvuo=sFHj&90##~h;riTvwsw$yZY}3aC8TX<3|?nF;dGp`$GaFyD4Jr{~G?!?AAyuzGmihaVZ)`IeS8c(uc)9?+n&cZuJi z4Uge>)pxubzKu!8wUDy=`6Fa&aR~Yw1yaQ!A$Q-mE7yVt7;zzK zqe_bznVF@Pn&MkC;>CR8pYf@wr_C}u?u2jHT6KzakAPPBmYO=4ZW(*|j<~(vl|f1> zrinp9B72~&9?&RFX9%|dqW{Pb9{CD`mW#6N;K9N7E-o+bJzZRY0_4h}$BOp$mkbO$ z9mcgf;nC64M+yb8=N%p3UsF?wFyBJ4x7+rkTh+St{W;0vsUPWCNut;QohxsFRYX(6 z8X}C^dyvzI3;DZlKH?RhFTmL(PiFczg>=2VRQBSwBX z|3%6{v(9~Wx|W^DpmMP$e%inYWqvkLfA);`61W|gRpHRa$>{QpPErW1!E#1d&h!FB z#_N*ml*(yI%#w2A7g=nU!)t7ID|JW#a^E?Dt{lZ(p*@i@lvGN=)vG{_5c&`-s@ zb%e$5GjTs1G2fIkE_EEacG z57GqdlY(u)AL?rEm}w^2GDB_TZrxnCixU&~iHK+3huGTM4h{XT``}ozP+?7?Gy2!U zY+K!}HX0;xN-uphU*t|g_R3=rU(gM+u0BZu!@;HeRDJO(x`YI9z>5FzlTvDf8Eb%{`*C)1<{fS{2iW{St_@ABrsZzzTL$dM4ju?b%o*4Sor!m zcf@$#+s6Xl14|>I%2Ci#erUbFK0uz<(;c)I3HECE{GqVsOMSv$1{JzD4JG`_@QF z1_PBW1KT*DRXC6cT|cI>gm`)eD{_p z1i%X%SEC0;;*bQNW<-@47?z5VSxU153vLi>+7DG7DX+P>(j0@Cn`KFd(?-wA>_^R` z8eVPud2Jeo{rZO6?=MxQB5Y*jBVZQEz9i3K=1UGfy!#pw5~Aqw$<_*X7(mZvYq8MF#IzjyCb&^)r<~Sfa>Ypj`JsWoLZU`$@0q&sYNBSvEbHDU=RDDHQ zTmgRQg89w0N4AC+Ik=|kp=4d+CSod2&)JJ6+7LMwkC{S0F#Y30PP5{gnmiNt|G+z}V!hT28&gnW`=JBB0uI|;k7RzE z^RxjS_UX}vk7_YP$Wdm^U?#&cN5HIGXc6&qK^E1Lc*T?ZL^<@5YWHd zq=p0KlWM)w$w^Fg@~o1z;2%X(#rmGcM#fFI>qGhFx`JBpn|eefz@=cswWv8BhKw*ICT?3$+$TyMQq37q;0r4&!%autm$@>u7-YVi_QqUQ^bD2l@wDm#rgL=r#P7eDZ!A_%v4@ zhmsQtQwBCH>5WGXY~>5ak1pXKns6L>^+TxJX~-A;K3d`^kcY!HZ?OQPq=10Hhy@Su z)d2@3RZYzq>I)a|208D0A-;dh z#!-$i7(gzM00Igj5dx>H;6s!bK%hd>X?0^t=kGx6%8|lbKRzC1scz4^uhmw3jf{-! z#b@r7-zed>rl_hKU$g-J&^xmRe^^Z5r&8CsWk5h{tEWBm-3(H!6Y9zIb9lltY) zsimxp3ote|H%%qU3$p>ON2?MSJ77u6EAq6W2AiC8*3e)i{d#fvh$PVDeoO&bZdNNg zQt$VNaSp|~A1(`P`j#(9JJ+fu{Gpqau}@GGIYkJ5Je);ZzxbP9q3>xv4k1BU5u5MnfiSM^>&~jsC~LUo*?+MCkl+ z4Uq*Pi{xSt&j3A4oUSs>^7)2CC4PsI^-~CnB*qPd?rIDebKBGrNQlJ{en$B~RezIfRyOEX6Gcf^LQQ?P_V*WD58 zncKM8i*jyY9^X;>gM$9;$B&5WY7StSn3L4>RTc zYRv5?E7g5WhMoOW5eCTM*sZ=C{FA#75<+%=z(UltX4J)yO(rbs8;7LqW%i(clwNKY zzymA6WGULzF>LFD?q&JRw}0UQCUv^EZ$qj(A0h!uvP>0m>&JhXl@@?+njSAUj5aEz za!O_19Hqf0)nw21wzJ2k(aqtZGHQE1$wcoUO{J%xZ|G$Fq31G&@n`0uX z4jcfizfkNe%omUZK8=3_Y_CJ$*NSU4r`wgs`^B)kJFlg<7{J<=OmE4fvR0VCae>CL zo{+F=|0&tPXAt`z_Wv^;!hRoxiF>w_tq7kqA)g0!beNC&5&i(+6{U_48x^p%Y@C<3 zZ%Wy)jhLyeHFdYE2uCsv_|e%J1E0Q$T~&@KXfOaKIOk0nK)QVv_tAWA;@lCyEo#49 z?&3yC0Q6yi%vq%D0~7H^i1_$^7~UpMa=W7cJ9Z)_5(0%v02-ZlWRc`vQ!jeE*|H;r zZHZg%=?X0OK={_UxyqQ6br(OlF4=?ftLBdQ9w!)VLwJ<$?(bX&wj&w`#2Oy;364&C zLq{|cT(DA|9oyMYi8TH7-=z)=`_|u}^^ZrB9w$9BYPD)p63+JBw=gs<1BTpw0^!5m z!(y`K>>8MglEsW)=R$G44*6(fW5R5u;6q~CQ&RB&sk`l_k1i|7x7Dw0_uTJzb)6Z| zQD&Z9GdIv0kWk9t! zRI)jof~5VzqKyhNP;m+fT=xMr0(^0&HoR*3domxa(JZlS=I>Wrdxl4oCNHoa-0|}D zQ$Qg9kD}du1Srl2n*(DjK0hejJLu0n9T3XXpu(0fWSJeQh_y0d1j`Da{9NKQ@?&fCuO?!BM=ATqixJ`Cp`q0Ek_84#nmqF{1>8p79- z$KN$Xkd<%5O^$Kv#v6kfDI)G~5{E0Jme@u*2a002Phz01TW{~&xzjwDAuR+Dmoi_! z1x1M)w$c-)vQuq8w=T_gW2DBb*8_xv=lr>@y;JTy1e%(trL0; zZ12uSB-wXJKzI8mPnOPN7mg9Mr&VBd_pnBkfp`e(rQ* z^6ST-6Xsq8c1ANqcfDf~<5Y&11h7;?nwy&qsvSNS8`e!taT!!gI5?CP#b~kYShzgm zA0Ut)@PCs4!Q8mNPR_)Ov!o3>VM{)7mFY;6bp5+$?U+Q!TB|VY4 zB&*G|eP4jiFHgkhHY_)6J4t=5t9vhgj73yb^pyhibFMy*5{>QnLt-0lguLpOpMLAq zw{LQ;&0gk#%V|F9g}SxnhT`jMjmU6_YKZ%uH~ePILVz5_&V;;m0@|eZCYe+2g!=F= z&e~)FB@B-thlgu}UFY)3n9lS4Ir`06U;o(3Lo>T~=bfceDnx#lsa0*(a74$aWI2Hk z$^5prh|`UpOg(EZqA=zwbANh{Bm2txY)1ja)j1R+Lx-cid)X^A3xN2$rV+qkSAL|^ zw_~X2hXXpYnX_u91^8?6#{Y~K$82F>iWrGWEa*Lne@SIOb`W$`SxfpwT8GUym=3P1 zqe?GTwbgqb2Mh6zRHnqowgN>fTxd~C_h{xWuJK5oTAVJ2jGPRQ+e06OCAXRUZMGLI zfiEIL)UxCzFRW6Dw8|QR=_Ss>#!wanSU5T_wh&xb&USF%fmF@9C0k4yXK6!ph1mY~ zKW%9h_+)2d*u~k~**6-W(h^bWcimI>44;<1l`}ctG=P(X~AEB&Iio|QY!Y8xqf!XN9A~vz4~xoH^5l2-)qr*15WK4VB+Ib z-!$7W^v6hdp=Q5pX(!=LmzF^(yIX2#(4!;n(t)&!0Y(q|%Ls1MCr|?)Mh-pXB~rgOKxDWX_?;1q!)4TQGV#U**pI ztv{t9-vh7>EKi=?RP84Aa*239jsmn#>iJCfbA>@ z-L4ZGtEnG(T;E_opW!IxoJS}p<9zoWckv3&y>stQbH2*>FzZb3&+oJ&je3dF_&07i zA1p}jC^3N&gQj;)E>8jJT;6ps>V#Tg26rMwE4{}F;d+0Lj_!>NzczOzmBcin9bTWO zBnkRF7#*YQe)eqB>S)NuE8{@*<)z`9rIi&KS52YTFfz;bKlb++UQ%o5Xxr7TQ#)zA zyh*w*rQnGpzL^wR=ZgDgG=3$`I<=&NP_vwiO?Q_MFL>zvL&THRmKG@zE-K1Iiz&jU zNwV7^8HQi^PdhE9nf7z`46+;CZLt&&$2NVfTwTiY{;N~B6V6zmiMzA26IoXF^86gQ zwIoWvJHE!m0rl9{(?e`&xz0ZIQ>)z`r(vnCwiaYgDk>`80`W^*8?XP14ZxP7E-%eq zBssVOwOixR`?ig>?%x`@08zID$YwxD;exY1XMd#)bocZc{zS8?%+0xK1wc9 z&a41A&p=n$g-MnU`dwW7n5PLoyX=oz42y)#l+4_@-2e3ByeL24s=P5j|CaOn4LFI>b1LX(Avcc4zelFy%4{v#>!z?`qkHl;BM&WeNsN@Qy6 z#*G`m_NJ@5+p1ign>$9_@|!0(r5%PjN-Xda$MvZ{M;}McAe*FpFz0ghqN0LMkE7-m zGZ=(Y1G~oQA=)&S{jk5Rf=ywCXqK740{G*?s7xo~pscV1%?|A1+M1k`(~FnOds!ts z>GeBr#pkQ(*6Hxn5*h{7q<{K9upal9d#6f^X$ITY?C?h4I>XWDs=4CyP-oi${P9K? zDeDBTDK5gZwBTmrg{Afgoo%iqgK1Qm7Ch+zS330rq3<~ry|j$ zVZ!wH0zWrdW1~#^biF8eHppA7zrz{0*ex-f+8N;~Ds{fMYXlWEj9=(vW%0c9pv!_I ztFB<0EmgJkx5F`MA2*5pyEUF2?CePn&A(jeMjwa&{eI<+j`5Rh51|yTbz?I-o0n9< ziH?kX$R?k(*8$=s?cw@u;=N-Wk7V*|37nIEG0 zk73HRNB>u;h)4~%LN!&|`rog!V6X^mX&4wp>c^-FCV8oPxZMpRBwZ@5+oMSLyV%t1 zWO`{q0$d7QJO}SBJCeC!(piMhR@T>tPsbU*XQp;x9wY)RH~TE9Q6)hSGp>Is}tgAbt8AG+nzTKUPuUlP|V1L8Uyjwid)1 z=F7{=(%G7q_nG<+0Wgwrn7l0IR=HbQULFTLf+weH-8M7zXQE}|r;hLGk{7=+cYRF~vbjkT z{&{idE9(y2KIT*8h-@IvSh%nST}ri(P{{7cVJi6!j$E2h51fS1uH*AAAscwL&-6AE zZ_~kQrD2P49;<*rl%H7L@~*nHo8NN~;seG{CYT5h_}p30o= zb!lU(l0LX&YWqqxi9#zRf>4A6{HZ^9o(#&wEJ*dQ$6xP^VEi| zD^z!)rJ15knK;=A>I~%VT=||-QAIrz%+3s)+1h%H&8>i>i~k{gC#ILptusEY#&(U1|9l_lb&P*3Okn`s)pC;ba&sPmkSwYZ z@jUvagK*>26}k{Z-fs`op5x8Kn`U8Q5lm0Jy=bu$rZu@Dz|z8hH#p%G5hHf?eG!xv zy`$UQ>{GQa&ogqkIwE3witzSAX4))BOdJr*6G;yJO{RU%e+8vX{vTR^;|a5v4}VBw z*&_KNJ9F-@z$zE(v&PoZcCtEF+FGOY7Sgo%>n*xoj8>qUX}#gwvuNl2aq3E>?tI!E0pn$z9(PUqpN`BY>?jB z;5T$WZ@FRl)jrjYO6j7_hQ{?>NSuySUU4ySjR)q8OjcG_dHMM*on=a~7ckC{YQ9NB zF{KB^$4It1%#CXQ*Cg%jlc-Dg4AiI0R>NAC(h6(kg*0xQM~CLzh%*X?@3|+;f)dB5 zcJuD1@n0_f@dMV6&e*kKO2yi)2IpT~l`u_A!XoubxVN^zGw!!)@$iQR|8B+k=?b^S zq|*$1WmQb8+UZp@zzcLB-cr=W5ERNPK5F{P+W9%1WM5uRXkLMrj!shoZ6xIJ6?AleH{^sDwV1fS~gAuR!)^?Ntq=2C5 z`+NU6@w5)Z3`3iiWJ5z)ut21*y?gn13NeKJ@CWDg9l>K-md{kvb74ee>m|Fs-;-(k zy@OtSKj5+PW@5pM_tWdpbadsXGd0a@w^o`nUJT4d^^JVk83?1d{&Vg#ZCPKrLJD34 z=U72W=>n>%)JIKAb$)!xz50`wNCT9jKhgQy1&YQeen#&DR=Nh z_+!^Q^)>ua59&``8Qt`pmq7-Rt?{2mz2lqtL*gb9r0aqQAC2@T4R`(M(2nt6Oj4i0 zjhCd+B-jc@u2z~iMEk#@G4CG+W9Rd+svlAD@4Nw*99|9(&Ju0@(>&HC7xwm1Z4B1B zT6O2Y<1@6^lap&r$X$#|EY5}51Ka{q>$cnd=??1#kkwq*MZT_w0+0pCs)_wV18da! zH^irJfoqmhn|JIw1bBjh6ZC9lMwWu8S3ol!;SgXq=&bp22Oc^fJ3OMXb3y*fZ;_I% z0eMYYEiJ55=E-to^!@&0@YcT0n85%ZtF50XsoTDt(E$63U-)8dl@H%5N2x%s+MILs zu*-J12Z54xRe`y=Y=F>i6qAc}@uQjTl?M51t;RgSK|cnd>fn`3iq(hpxydg)s{ZLY zjNV%iZ){XmH%-RfbvhDhY=l{_lh_ekxmBV5-r1N_Mg6o0IPJy=XDY(4oD{+tJyk*o z;Kc$Q=dCVxW|hxxV@^Ey-ATv-iNE}-NWt#)S-viZ4$ang{e{cG?>%S~%X{ZRMMU`5 z7?VDE9RCIjMU9J17mk7?ljj7L!V#G>1y9!kN?1GqdPl! zbya;>yB9Tu#KxIg`#W!q_KDdH#B$Ht0Kg%2gO2xA7s@O6+Yi^DYU$m$t25;Y6QSf$Y;4%3SlClH|{X56c?cN zR64`wW;6DA&2>|1hsJXHN$Yogv(v4acFUSB$rveE?dbY~^(kBD&UUr*lWX@X9@&>* z7nmKFNu~Af&wo*cz4a5yd7Z>EvI%!`a-y~5YJXcel3p!yQOea7HF%-6pqGkie24z0 zo-;CzKrgI!3Jdry&%2Hrnhri#4dN6MN)q?InDBGFO~?BwRm7cwDm%q$I3M%|z%p*S zUKD`27fNzZ$}0aTltIjkmtMe5W>#G6jlT$^f7#?~$I=&9uYvs(kP_E2Vx#A<{fw~8 zgNc+RQ-DAjyb`n2AFt3?aoe9ON=8p*DLQ~=jTQQM8V3tdp5MCz^Q%vRk#0)APTz~u z*3{6>C8=hAR_bsfMTCe>j>xY6L|=?3HiY@Z3bC(Is2h%ghvfZoOf9u;mg9T7z2Es` zpJx%`6xByNzijL12tPP*&??e14+yRC(;V_O4f=MfZS8kmV{R!dHWgsu28M>fB&h|Y3l`42Q(i&NuJ#0DbGIRMh9jAL$Cvp*BjNi$ znpuw-M^^+njOum3|B0V-`DWw{%h<#pJzg_N68C-0>IUKoE0SOfK zpl|Qo%}Uu#ap;k$^sO6x+z?=^8^6RVA3dx`WLE(RVv&R(Nyu&bN#5nz^Ml#m*v;eU zt%H-!pkZpo2~}PqZeDAW2(_@hYsz~R-_^EDK;UCKD1b3^pM3;*{3hiuz$xN{+@+<3 zfI9Z-;?!(gYn5nF&rfsY9*#xdk9G{+<;`unHz4+a?p=MP54&v!%sC*nT`^wh8zi(6 zAZi5+Bap#=`}$Qb((#kRT zT!5);z^A1IuwxU@?o}8P*@4+#+r{0K7L?m|I6KetL55Nxci>Bsw#=&l7CAXGZqt3Q zYH65z&87m&VVjCiqC-HkTvQuSv2kVK$jFn`=kJF9m-2%jM{DwQjHxX@mL{3REm_RF z5~vBrd@f$P2I!9u&e4((g0QeeuSlmz3rO#ta%pySz85;!1>KAv@T{dM8&!O-@=}k8 zhxe6(^|*DE7tuTSSZ-N`-}ooH7O^lfu8)OA7}^C7t9v3bG|rs|5Bk@6<4#X*y4t@b z#CiXNRJ?{yD=%na#0w_BvmFqxesdQewd+1dvGt%jgg9*p%vavctl}#6kU^sW&9`^d zRXht;Z+Lwk7~pJt)?#$}h>SWyJ+>ebC7c=l#r_I@^z8z+vinHu{?d zpNg7#s)KMt7c)q4&5NksX#U_hx!g1K4Khv_`4;73wl$&vO&*6?S$zYyRrurS<9%7@ zHh0VIsfSHWz4t<<+dOL-ViJl^aylvB=R=Yi2qF3VI6o(AkuA99B%czFE}bR&2&WTe zH<%HSm|3VoWX)Xq^6&2QKycjxbUQhw2yuXli>Oc@_lG6(PUpnxn-Mgz!pmpYXV>HO z8@NJ94kj;1InR>#eV<7btkM*#UZ*AfDl>($1}l1l6f$aUZ)?sEmeHRZ>c|$@!}ER@ zWYr0M`X+22p2E5*Qq9&-i*M-s$N8xq#e#J_pEY)v=Wh2Sd_lXl+0-SEavJbAb-B&V zpF6}h`_*Kh>UHl|ME)nk=>uy_U((Y#-I}qVb8aVREF47 zBa-KBa%S7l@7viZMUYy=`{sTF&UJ#-`RapJaIyjM|CKEM-z81`f2D!1zwrM#CkxWW z9Rq3%69+^_k^osdj!uPDe1=$+$!d3ei{mUH-ltsYuP+H)-izlCA3k(B;eX}FJQ2a& z6ijq?qSBULqAvUZ>?hjs$V8hGjZ7jV!r#d|(ZzBmp@Eo#`c8#_V!uKg=>B{a`H8Ee1QzhE3jxjo`I0cCR)`gl86IlUVMG~;5Jqxp{THaa*stw!fN z5^;ebr{+#$qo8=hr^`e?9n&6>xJ~U3OoB4Y%PApX*QcnYWP8upRo7O((EzdQ5C@At zi(3E*HIFAP0{|yp-g84zz5`ZbELm2nnZTi&dCC9xYQOqQ<@IYypkrtU3qQ!{z;Rg4 ziK?ff#chgvs^Kyln%;W2-@Ee2m#ufUn3esMjln+X5~GMTOHYKc*Se7|wS@S9LqRF7 zG1%RF#ODKY{})aXj`a=ZXD=`I{n?-xg{RPPyTt~DKEa@6+xb1#DF%e{Bl4a^=rbc9 z-n7-dblwli$OSRs@SO5S`lcKp?Z3UFOy) zk(fC+@J6q;Z{A<{rM>+-U) z1i+1Q&==d&-Q7lnRI5Mu-HN%qA!WCD;LMOnC=zJAtGE(6o>jFJC6_-lfiYbq)YG-bC_C z6lfjX1z?dxxR8$Z0TpVMYTLoc{0P7R^gzBQgXn}$I=x+he{Wh;Vq)T2QZ?Xq9gjwy zVov@ky|b`5!t9H$F8a^5Um7CT7m3Y0vF_i_!Udf-=T8>fbqgAx*PsT*v1tX1N{dhZjTw3r()i@hmH1FroK8rPR!aMCe-jA>rW91>a(zRLjbwR;^yXW zvCcg5OgQ!;jjx27@zSF53^nrm^RJoOB+Ipj&)xS#TerCls#UvI=m}p2LzR=qcKl$x zGZq$ptt}y}B-@{dv0X4y#IKNV=wo+5tc3ly`7(PpWsf9Jf8ST$(O)~~1$g5Mmpk=c z(Z15sy44ODi=9wY)J?#a0@)SFr&8DPhz@qwC^6>N*xtsQuCy9>euM)1#M^`U%P>8) z4o*TwMBM=5<PVcuSHey=IX01oVN~V5Lv~G)p!hEmpy|mCdWu72Oy+VWMoyTypW?M&H98^gC zu+9EdR7$sE=GB!a^FFVCO$v=wkVu)d$KppC91mXXBh0X^NbWP|jcumBtaI+e+wj8{ zJZ>j8=Eqg|7?ip=lg+-|n>UY!hA`;EY#$?MHB9vF!}UhS80*ML|j9#BnBF4(pF1rRD=+)hDBIkM!J zot+IpZ02p0qx3fLD)^2<$uQFMC%Za-(-ja+>I|KfcIYncbLgF8HPEwK{rk0*gwf{U zM#k$6WbAu!Q6%%bmMbI_63}icsYW>mJ!d2dt2=(|u=1%iyV(!Jr1-i#9b2vn>ZJ|^ zsWy$h_wLKGcecmGkV3J16%{8D(T{B>h5q7)I&UT@&CegdwYRcL#-vth4h*WJK;|Y+T%vGm-S_*)F1#pmUOzAQ^OPk3jL~(P66C)% z85CdZsS#;nPdbAnwhk*M4@ySq_2{`${jmW7a>xRxfBsgtqDDW$$i=06$zwa8yb$B( z3;4i_OHeS`#*0nHd6C%oy5}#*$JqIM4=(ybxGNgPgHLZA^49w~FKQQo4lWJVPCTAB zKxuAoOFP)O3}_+t%!}~q#q6F4#m7Td-fI03v)fp$?=`s?4E}E(G1&;P`3PUnud`#v6-rIvS$+*w)i0G(cuhVr9J}6ER~G86yXP%0&jt(p zsM0>1R1e|e;wAgO-aWPLYux?nWb<;6=ftFX@8crx?N&l?UkR)@Sd?da(Kzn$Jxc6= z-vcz|gS(7R{J!{8<}^=*uG2nw!1JXKp};D%Lkv0w*&@=QOw5NyTbi4j;D~Zidk?0@ zPNKAszFYsKc7^1QP7h5a5Ey&{0yP7lG^c`i{W*hyjZ^Cyx77#_FAt~TT0RmllY4lW zbs=eM@ELbNEfla^3b|~MgRN2IeUStlP-Ad*M5e#@dsi3`X1dN_d0-D^`*pc#z0eoO zFwaAl)6*!t%68Lc(^6GK-Oojf&$9*)RzO454dfV(=pTZPrV+8nk-x|g{gr(`&m<~k zNIzJpdOy(54CQ^9C)UL2C`;y`Bz$zP?H!P6fT z3UmE44f-L}2pVucZ*gdK^}ts4=BeXL4&6U(e;k+PvMKYp#0ETP%|^4=fz`%!`cZ2q z7SzQE2Dd63e){ZePAmn!_XBZLV}XsYtnxdp4C?%4T+aBtX{1T2Q-};sY=~=XEc2u| z^+Y4w@iZ$dt4o(M($)5!P0;7uy^Kb8v3*23;X`L6ipaQB)m81|BzgIh?;9KMTek|< zVKs}mGZ1Go<;7G^ebgr9CFf6HIOO4DIxo!i2ceFXy4`LE-XXufl*fYYKk^*rb*CV6Bvg)#- zDn3yeg+}`TH|I8{G><@V-gDlom+0{R=f4}%_AZg?rE8i?7z~+o3``6QWi(4i+Y}UK zk1^w$m11L&CkG1=ktEXF0_Bo8f({E3v7KILw=z%$cZ{)z&YJcm?7tVS&SPT)uUu-- zUGlixQIdS{8&2opr~TV-9i}|`AS(}Fz8TEUS@WB1Ecp4+>J@+4jq0*Af4&*<^In78 z({vvTyM^rMO-1`ScCHXc>X)DD(YTOC&Z>XYonh8KK0+EA$|lOB5YKZ0l8AdFTT8aj z-RBI>c13PBl^)q|uHBd7p6BV;OwTDF!*pG{ruL=^jK^K5ba@Nww6+ zXVRD=WY|~3a+yBEf4^Y4%Y(ZS%2HwY{(ZggDc+8x04UoA5{hHLe}83U#0YYHr~Kp; zRaC0LJkU}L6T6lcp$<%pikN2 zp-nWZj7GOP+JQ#i@AYevP8xzNEQ*Tq9UL37*Z(upn2?lCM!9t#KdV0Bko4;v(oQDY zzk|%uH*eow>rl%oKZc7pGC|cz3a@sR#T}Xy4~ldLm&m_!OpussvCpiut`k<8OdOc> zUYv9MTwLFWlS2LdF)s%=4R1-DTaw`(9Ck9bK4u*VxVl2PAH9PB(Irk(?df*vo^{71 z)7`tRH23b!BeE1u^>0-O2?>RcSrsvgc{yNwhUY(8Y*2Y8XG^4hS}mCh@C!`PEg(O+ zby%JvZum=3-&O)D*;A-_vqRatCG$v+b~mG(Iy0$3EXAtJt^1wO3(M^6^Re<8#nZ~PN9XJ@U-7f`44Vak1s&ZqVo+|mDem0* zOy|UBhoBp1 zGp~rITC+B9K8t8aF(I0RZVWHy-YT@8Jw$$AB^u!OO+90P4qhw^c!*x-Sbq+W#?^C2 zcg6@|H5NxNFfgK1IIo!3$)KGfRp9B}(ll?3(C$F03O8EF;!TtKCYx#M`N|EwtCDG? z*&04aydTTVMDCf@>G<4C-^e1_v#WC$>T=%tR9pPA;Ef~Z^zLGZ_+gC}Hp|>Gkq?bC zC5Ugjf5;KqP9jCx3|YwtnQ!PUqji-}o*uMpB$?xl-4Mh+bP>zd6Ys6f-gO+W8>v`TJ>aCJN*I z)F+8!w0A-1wsL12o|6$1XL%#{;^JJ=j^VH^l7Iz2)r4J#=aFM%{sH`jc<4P?x+;Vd z)mZKE=WJp>y$bf-1k3~+kAoo^5;6(z7rW`zBMX;s73dgaomq;n#nDkbHy)1@il=ou zx4#M=TGAqZE66vN+t=;WyajfqBF}_tMhs5J1W5!q0%S@x48Y^NrF~$Nm)^k}`4xoF zNsFiV@pziHJm_Qg%dkz`OfT6X1=p?Yv`uDq{zhPIWhyjn{wx?K#>Z3t_2ko^!(#*B z$63xyKEIxmY-b8Q*MH^a>d(FMlEHazjdCa)5V*C7lr7(?IiEf@4$d|_J@q^9fjtu! z7pJ75DKlverG{AoqX$I^35ct!>q9m+n45CvvUcOG$4ehU$_dLCq|v5p`Gj;u!YdnD~cKC=6I-D8~Y;z+`z3k7_0E(9*qG5=L)_$mwF4 zHOKc1r_xZ@>G*{N#)jBjQ>YtwI2W7Bz6ycR4lBq=zQt@n$gWmu-?(B+~$BuO){Ay;Ez;R;CyEzfzfRW<5+4e8L{ z4;(czuBLP&^YzBiQa{`ybGb!jP#- z;yh*nYT6r3JR`Q+gXvgUyIbQiJalGaBkdRBCjwzBhRD|{;D_APv;65TTcAT|#dHjZEr6T1kvaJa>{eUxO~kXT z)?!x6=EY$%jeEl7tB%CmPs;X6s&%ASjRO z5jpx8)P_z`qcBN}no)>vO36^7l;2tsUxH;?QmzMIz5czv-q5q7XE{HAP8=vPZ*NMM zbW^o57E^A8k!mYFNopCx+AVJO=03PfL2;Ycs;AbqYpVSo1w{_;iN71e)(gu7c-@Oj zESB=0RF{bFW)PFa(ZD?O;UK;{|1dA8l|r&Fl;Ru`A|oTWw7IEZXnVgQT}P&Bi!Rj5 z!+5eR;`!+<#>PhAoJ%fcaHuCn^oF$JxHn~W6qj%0hfr71Bda{u;l*S+tLgl*V8aHm z-y7y~7^2g!vp3n2xQrhh``QZ>{yQ{nkg;9mF|JUP`|lq;@*rNgsQUZqvsT~l;=+}T zHW~g-Bf9Wx#KS*y;j>-6%Vf7m-XXzaKua#IHY9Xm;7mGO=WaRO)`hx28CU25{i?~} zPf4IwY_6Mb#LALdtR2EgPeaJH6MJeYQpi&Q@>pxW-#7*@DFu!W($I(3%UjDZ%PS%~ zT4ZVxNw3Ll?K_|YFqsF>lPT(x4$5y1i~s8Namxa=!rC{fV7Q^*hcENfuwV}ijP2UhZ+_LGFNE1#$5IljxL)VsG2 zFOj=uhu?R};RWO@hDtQf^hc+L5N$Tmo3D{1(Qv@q7 z7CG`+;&JSr(C)X3y&Oi6Datjq8lx#@;Ym?CCyr{&V#4;TK$nkCTpGnZzJR?BNToEk zaph-xRRX)2mBol4m!eg`Eg`pE5hT=G&Cg)oE8e$rLZ@D$LdaWgQUrvMOWkCa$z?J7 zpO0{KZZZdxOSwGzKVSS`5B=L>Zzj4vO;mK>(e`O$)mWk1`H}ZtF}#xbr~6IFcA9U0 zwyg)p<_CfWQxmmZQLNl(qWK_rgMq6STc0X~(cdko(0@mYY{1*#^X1ShIYXK*?Hf)) zsC_XmQc0_WdL5l$ukEc12){K!nLqL-BzYb?W6q2!{goTvc4?3E!1G*AG^iF*Oq_Xt z^D2?~`Z9{26~tORiQV5A$kMPI2?Ubh#&Hd*L6Ki-F)2woZ<6=QF(V&_4b@>{n1DHE z4?H}(;Pm^rxGDsNHXnZ=XrMrjfYXNr8z%me0$ch@bj2`ypz_~G~4hI+z){KRqc?+J?7 zk5{kBU>D;E&=7rkLr>7(4Pix=Wm?8%TJMns>#aLR#uZ3yvGohL&1s8-XcVUBq2Q1m zFxt`vmKDTJV2+uKrt!@B-p%1ZH?I=ol=V9kE*VvL8K+Cuc6UUC60v6}l$zYSIl}-50-`=?)mt-_+hrREPcYtS%mEVk-GRyhzKa1=7&jK#2)gFf|5U|2< zku|$Rk*VsMaRg1d@YilV{(j5UHX1XU{+j>ZaFSpyCiO+o{ure4_xv`Jd&Rc$aez>gU2LWrWZ0CrxT+GqXr8vwncf}_wG-dtz8Zd&0%}?aKN_@ zziAU|P^m*F_Ih_Rs0rUWdIczgWbfP8^4cnFMNK56gM0(0|6mV0@6eso4SF z+>x;PAa@mSvXg28`=`aXGp?_v-i*mj=}J>UBz{qv4HO8G^z;-e_=frIvO>N?>xbi{ zg5ic#U9F7I2$DRr2S|a_6!b{f4*w> zdY8yAiy6NSSDt<^c{31;h6i78o;KA4p0;&8ZtyMMx>BAz$uZw5-wZdijqlSlvAX$o zTV!mcs&j{Y3S1;V5`rX(QNyi6sTrw-EbmUDmvgYJqV6XzAMsl85U|B8cucdO@egmi zZ!%`O5Z}%$?+stJl~qs+gZjmn9q8-myt+;@@jfe5^7=S>Q1CXbz089QqA9D(wHu<@ z3fG&Dx7CR+*EnBX@CGH3m(U>^z^KS!VZ-u%EzN{3L`zm~mZPERe(%<=d))(jjEV<* z<3FF=BJgCZc`Ql+yi#pZ(mL;WsUt!(*vdZB@!%5(#-{g){0<}8C-O6!axteXxk3B8 zZZ_CjDz9!k$hR=t4C1)@LZ@HqC%YF@YK1gnH=n<{pg5nk0c(4!i8BPI9lVgxlFlw= zth6{z#XK?F33sCQ1CSk1X-cV4qOYzds~xj`@4n|kUxbi2=|V=sV6HbqVSgVKaavTG zfD!pf+>L_jx~g}=!v4OBESyds`?rJtFf-u$+uZsZKehkgN?{++V+-5|fOBw_N+b7~^a ztf3hfl310VwE8he3}H0qhjw1|=&2@{rsTGVqNNC*+cooRgi04GPW>kN+!)c+B+<=2 zun4Z)#PRl6gk>bx=qshgVMj#t7_kTkoBSmGecQvT>?b}1VZ+$O;!63rlT^#n*-?3B zj>O;b4IEV@m++(WISiN3StdGX`B3r520~K*AvVKSu+sVm?x0vpS(h2}Vn-MkANuTO zOp`@H?yo#r2*JU@L6h`hlj(11HOhK1pF9n#!&Bm)e`XZ>KeL`hZOQ9+@Io6ps~5@H z-ZKcEp7Dy>J$4_b$;|rT3K0yxd{1MSBB}4WmhrDu)^x@&_45|gPmeH)M`AZ; zyC+LheHyY-?1`;!PL>9>T6K8mi2pi|L`%Aw)+hd=Rwi|t(z^#(; z3`x5RV>0oZBvp+!(W4JP%4G*voCoWVOPuznHoZLmcHwr3rHH+73#6DHs2T#HdR3P$ z+(kdn`rJ-YMDb`1{&{nH`=7Rsz3Ii7sf3P-=|!mE`PS&lcKm62=_=DapV#i0DqgNI z4(HgSUs=udY*Hw|bFgkH;wNdrFCuccdc`XZp4rg`FV6U)2dk0V_p$Wk4)iV0m zcdArZ0goc=V??1r&w6TB&^Kowq}``M0UJ8H9L7EafF z_X8~7{wM{xpJkm;^h4G`DzT=Xbf2~lSF0-G6dU1;3jpI3E<&6JjYw#pKjUZV z*FSi>HvJhcRtLah2Z{%&0zCPb@4d;}zWZ=tP*&dgp^+i$;q6WMs@)i|qog|MC|wwhoZ>^+|DnLQ2J z_@pOBh_b;r5|iFtWMHe^Wc!;`aZ3h1G0j1+CBqZ;+314E)Iu3z{e2=wFnJ><{ek7! zGx9xQ%ymM=lr@~-fq+0_KtKRB5)Neh`c-xyZ_#?de*e4isT9rDEn=^!hvmg*?87ts z-VLUQ+ZkeZZL0WJ-G zFW=a=X7TdSQb1?KSlDg?!dW6WEAqn~iu(3dpu=!%J0E_$Ij3}$WqY5vu(+{=NU)SQ z98alAgM#OKB*b{t_%_FEG?N+$B!_Rue#MGpub5j#el&;JWFt{@T8*mcDpYx7*1iK@ z5I}_!;lI+zcK)3 z1;CdAH3zbGcEx86bbe7fWF9ktw&5yh`$N|F{7jDBKpJYS_=H!q4TT)1pV-0C*)Z-0 zZ*5bD$`M_q$YR9xa$(pz3luS5Jm1r2h`~ESW^G{0U2uS$miCpQ;e7xmP1x{zxkN3X zLqw&#J5|-yTk?OUh8oeDdFzFn54Egzmn@P~WHN;xz|JhvUNj)x!SU5bA`L3bhQUrU z%O6_)@>b7=X`*jH19FyquH<4ub?8Ohb{+`Uu0G$|9r_XQp+Hs8NXJa4Z#jgo?c}Vv zOlerd`kj3l-Ro1a^5sy{h2~Il^g=_H{;BZ3-@zlz3ZvKF4lZ?p@RxT3PH`}8w>LV6 z?oNVV@*SUTEDQ@>x&#fb?>Vd=G$3PeB=Mlg-()Fk+t|y#OxQm4gEqGC%pbA0w--W_ zv|xxiZi!bhc9f~ywoV9L;AjVACICE3_Cka4SCQAyBr7YcchgO7{@A*sod?{8)m%?F za{+$jkRPg&HNK>|?Oj{#2LLvZHPCiO-#WBIk|`xWSYfRVRMgr}YU8+JeC!zT+j8eQ=#vywxc{V?xjccv8mIe+pw zGK0+pZ{YbLskg+QV`20Hfwl67)|zA26L^V=k2AH*saRttvGo&i{mzql8*6v{Jht{d}i`uc~IN1M-u2{bh5aOU%ablC#p$4$~LuOXSLM0~<*L zc?S`fvM{?a?B9l#@67A}jMCv^_U2tdqs}&3P{V_0ujpY&Sb9bEuA)PGe8tHL@*3(( z^IR26(>(}KiiVLk&$~}91IxERWo4wK2!Jfh`#qB=6Dz$)(`IdjFL#p_|7XBaP#*<_ zW)C<$g}Y$f6YL~?H~(c5gZ+Gt5eeRo^_9h{PXWP#XOI# z%)orCU2*IN${M-pZ5)&KcWh4^>CJlX+B&tkcOm8S*7kN&%Q@Ae!5zO@Wy4iT(iUK4 z9HkZXx4#n0!f$rpm=AxO+ix+lX#JH{OrtqU{e6)x=Cyf;=7QFv-M4{t!2pc;oS1k; zCcwwXhdMu3Gct+>)m(rJ1rWljt9r~lQp(tb-x}9#ffxL4)=(k+?zJUu5e&1m{qURg zS=rPPy7w?#93KjGu3x%05zA)u{A`KI>!syDh5yaXxu~UY|19irG+J`&wuy)CC_t!f z$7Y-?EnpDo)W{q{lL-HGxdO=%Mqgqc`}@Wfjb+TV4!T}{_;oMP zThptwfv2skjl#xEkIgOW4DS1dkl&BMHwHWR!0g7 zzON9D;P)~7MYsUEXsPJE{cU$~55g5po>(xd9eDQ|LZIBDHFmF(zUk=t4V-(8DhN{% zHGyBjxM``LtI46jHE=G&Q+HLmW|l2~Y}akJiSR#+)feqUQg6_0lCcWx9~cfPUVtd_Apf!YS8S!k&w8(iM+=6U>jzur9 znLWL6hL=TRXW$G7egOy+a^@d5mnZh0)1}H+{yc8p41?}qpBN&2>!ycUz?-JNFRx9p z{->E`l%{y`SOF zkz4jPq!N!RWdE<83*Io8q6!ef{qN37jWD>S`~L#SV)5GxD; O{}g23$P`N%2mT+;@5%H4 literal 122119 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 Date: Mon, 6 Feb 2017 19:55:37 +0100 Subject: [PATCH 025/122] Add meat hook, warp cube, wisp lantern, rename flashlight variable on weapons, add layer/inventory definitions --- code/__DEFINES/inventory.dm | 7 + code/__DEFINES/layers.dm | 73 ++++ code/game/asteroid.dm | 2 +- .../shadowling/shadowling_abilities.dm | 4 +- code/game/objects/effects/overlays.dm | 12 + .../objects/items/robot/robot_upgrades.dm | 19 - code/game/objects/items/weapons/powerfist.dm | 2 +- code/modules/mining/abandonedcrates.dm | 2 +- code/modules/mining/equipment_locker.dm | 12 +- .../mining/lavaland/loot/tendril_loot.dm | 157 +++++++- code/modules/projectiles/gun.dm | 34 +- code/modules/projectiles/guns/energy.dm | 13 +- .../guns/energy/kinetic_accelerator.dm | 378 +++++++++++++----- .../projectiles/guns/energy/nuclear.dm | 4 +- .../projectiles/guns/energy/special.dm | 3 + code/modules/projectiles/projectile.dm | 5 +- code/modules/projectiles/projectile/beams.dm | 4 +- .../projectiles/projectile/reusable.dm | 4 +- .../designs/mechfabricator_designs.dm | 10 - .../research/designs/mining_designs.dm | 62 ++- icons/effects/96x96.dmi | Bin 314419 -> 371132 bytes icons/effects/beam.dmi | Bin 7054 -> 7365 bytes icons/obj/guns/magic.dmi | Bin 10596 -> 11629 bytes icons/obj/lighting.dmi | Bin 56005 -> 59954 bytes icons/obj/objects.dmi | Bin 145911 -> 146103 bytes paradise.dme | 3 + 26 files changed, 639 insertions(+), 171 deletions(-) create mode 100644 code/__DEFINES/inventory.dm create mode 100644 code/__DEFINES/layers.dm diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm new file mode 100644 index 00000000000..83db83c329c --- /dev/null +++ b/code/__DEFINES/inventory.dm @@ -0,0 +1,7 @@ +//ITEM INVENTORY WEIGHT, FOR w_class +#define WEIGHT_CLASS_TINY 1 //Usually items smaller then a human hand, ex: Playing Cards, Lighter, Scalpel, Coins/Money +#define WEIGHT_CLASS_SMALL 2 //Pockets can hold small and tiny items, ex: Flashlight, Multitool, Grenades, GPS Device +#define WEIGHT_CLASS_NORMAL 3 //Standard backpacks can carry tiny, small & normal items, ex: Fire extinguisher, Stunbaton, Gas Mask, Metal Sheets +#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in an inventory, ex: Defibrillator, Backpack, Space Suits +#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons +#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe \ No newline at end of file diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm new file mode 100644 index 00000000000..fa040bf866b --- /dev/null +++ b/code/__DEFINES/layers.dm @@ -0,0 +1,73 @@ +//Defines for atom layers and planes +//KEEP THESE IN A NICE ACSCENDING ORDER, PLEASE + +#define CLICKCATCHER_PLANE -99 + +#define PLANE_SPACE -95 +#define PLANE_SPACE_PARALLAX -90 + +#define GAME_PLANE 0 +//#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define +#define MID_TURF_LAYER 2.02 +#define HIGH_TURF_LAYER 2.03 +#define ABOVE_OPEN_TURF_LAYER 2.04 +#define CLOSED_TURF_LAYER 2.05 +#define ABOVE_NORMAL_TURF_LAYER 2.08 +#define LATTICE_LAYER 2.2 +#define DISPOSAL_PIPE_LAYER 2.3 +#define GAS_PIPE_LAYER 2.35 +#define WIRE_LAYER 2.4 +#define WIRE_TERMINAL_LAYER 2.45 +#define LOW_OBJ_LAYER 2.5 + +#define BELOW_OPEN_DOOR_LAYER 2.6 +#define OPEN_DOOR_LAYER 2.7 +#define PROJECTILE_HIT_THRESHHOLD_LAYER 2.75 //projectiles won't hit objects at or below this layer if possible +#define TABLE_LAYER 2.8 +#define BELOW_OBJ_LAYER 2.9 +#define LOW_ITEM_LAYER 2.95 +//#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define +#define CLOSED_DOOR_LAYER 3.1 +#define CLOSED_FIREDOOR_LAYER 3.11 +#define ABOVE_OBJ_LAYER 3.2 +#define ABOVE_WINDOW_LAYER 3.3 +#define SIGN_LAYER 3.4 +#define NOT_HIGH_OBJ_LAYER 3.5 +#define HIGH_OBJ_LAYER 3.6 + +#define BELOW_MOB_LAYER 3.7 +#define LYING_MOB_LAYER 3.8 +//#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define +#define ABOVE_MOB_LAYER 4.1 +#define WALL_OBJ_LAYER 4.25 +#define EDGED_TURF_LAYER 4.3 +#define ON_EDGED_TURF_LAYER 4.35 +#define LARGE_MOB_LAYER 4.4 +#define ABOVE_ALL_MOB_LAYER 4.5 + +#define SPACEVINE_LAYER 4.8 +#define SPACEVINE_MOB_LAYER 4.9 +//#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define +#define RIPPLE_LAYER 5.1 + +#define GHOST_LAYER 6 +#define AREA_LAYER 10 +#define MASSIVE_OBJ_LAYER 11 +#define POINT_LAYER 12 + +#define LIGHTING_PLANE 15 +#define LIGHTING_LAYER 15 + +//HUD layer defines + +#define FULLSCREEN_PLANE 18 +#define FLASH_LAYER 18 +#define FULLSCREEN_LAYER 18.1 +#define UI_DAMAGE_LAYER 18.2 +#define BLIND_LAYER 18.3 +#define CRIT_LAYER 18.4 + +#define HUD_PLANE 19 +#define HUD_LAYER 19 +#define ABOVE_HUD_PLANE 20 +#define ABOVE_HUD_LAYER 20 diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index c78037a73b4..77c3179adf5 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -88,7 +88,7 @@ var/global/max_secret_rooms = 6 theme = "cavein" walltypes = list(/turf/simulated/mineral/random/high_chance=1) floortypes = list(/turf/simulated/floor/plating/airless/asteroid, /turf/simulated/floor/beach/sand) - treasureitems = list(/obj/mecha/working/ripley/mining=1, /obj/item/weapon/pickaxe/drill/diamonddrill=2,/obj/item/weapon/gun/energy/kinetic_accelerator/hyper=1, + treasureitems = list(/obj/mecha/working/ripley/mining=1, /obj/item/weapon/pickaxe/drill/diamonddrill=2, /obj/item/weapon/resonator/upgraded=1, /obj/item/weapon/pickaxe/drill/jackhammer=5) fluffitems = list(/obj/effect/decal/cleanable/blood=3,/obj/effect/decal/remains/human=1,/obj/item/clothing/under/overalls=1, /obj/item/weapon/reagent_containers/food/snacks/grown/chili=1,/obj/item/weapon/tank/oxygen/red=2) diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index fbfbbb12527..b04a3012fc3 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -84,8 +84,8 @@ P.visible_message("[P]'s light fades and turns off.") else if(istype(I, /obj/item/weapon/gun)) var/obj/item/weapon/gun/G = I - if(G.F) - var/obj/item/device/flashlight/F = G.F + if(G.gun_light) + var/obj/item/device/flashlight/F = G.gun_light if(F.on) G.toggle_gunlight() G.visible_message("[G]'s light fades and turns off.") diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 140c013b270..0bb6278c0bc 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -113,6 +113,18 @@ layer = 4.1 duration = 4 +/obj/effect/overlay/temp/explosion + name = "explosion" + icon = 'icons/effects/96x96.dmi' + icon_state = "explosion" + pixel_x = -32 + pixel_y = -32 + duration = 8 + +/obj/effect/overlay/temp/explosion/fast + icon_state = "explosionfast" + duration = 4 + /obj/effect/overlay/temp/decoy desc = "It's a decoy!" duration = 15 diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index bd6f3acfdee..40cc65da34a 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -196,25 +196,6 @@ return 1 -/obj/item/borg/upgrade/hyperka - name = "mining cyborg hyper-kinetic accelerator" - desc = "A satchel of holding replacement for mining cyborg's ore satchel module." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = /obj/item/weapon/robot_module/miner - -/obj/item/borg/upgrade/hyperka/action(mob/living/silicon/robot/R) - if(..()) - return - - for(var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules) - qdel(H) - - R.module.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/hyper/cyborg(R.module) - R.module.rebuild() - - return 1 - /obj/item/borg/upgrade/syndicate name = "illegal equipment module" desc = "Unlocks the hidden, deadlier functions of a cyborg" diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index eefd3b7d0f6..0167ab589be 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -87,7 +87,7 @@ target.apply_damage(force * fisto_setting, BRUTE) target.visible_message("[user]'s powerfist lets out a loud hiss as they punch [target.name]!", \ "You cry out in pain as [user]'s punch flings you backwards!") - new/obj/effect/kinetic_blast(target.loc) + new /obj/effect/overlay/temp/kinetic_blast(target.loc) playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1) playsound(loc, 'sound/weapons/genhit2.ogg', 50, 1) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index db641754240..c7212fe5a15 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -63,7 +63,7 @@ if(57 to 58) new /obj/item/toy/syndicateballoon(src) if(59 to 60) - new /obj/item/weapon/gun/energy/kinetic_accelerator/hyper(src) + new /obj/item/borg/upgrade/modkit/aoe/mobs(src) new /obj/item/clothing/suit/space(src) new /obj/item/clothing/head/helmet/space(src) if(61 to 62) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 4e8274dac1e..56ca8ba9ff9 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -313,7 +313,7 @@ anchored = 1.0 var/obj/item/weapon/card/id/inserted_id var/list/prize_list = list( - new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack, 50), + new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack, 50), new /datum/data/mining_equipment("Teporone MediPen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/teporone, 50), new /datum/data/mining_equipment("MediPen Bundle", /obj/item/weapon/storage/box/autoinjector/utility, 200), new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 100), @@ -327,7 +327,7 @@ new /datum/data/mining_equipment("Drone Melee Upgrade", /obj/item/device/mine_bot_ugprade, 400), new /datum/data/mining_equipment("Drone Health Upgrade",/obj/item/device/mine_bot_ugprade/health, 400), new /datum/data/mining_equipment("Drone Ranged Upgrade",/obj/item/device/mine_bot_ugprade/cooldown, 600), - new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/weapon/twohanded/required/mining_hammer, 750), + new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/weapon/twohanded/required/mining_hammer, 750), new /datum/data/mining_equipment("Drone AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000), new /datum/data/mining_equipment("GAR mesons", /obj/item/clothing/glasses/meson/gar, 500), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), @@ -342,6 +342,14 @@ new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000), new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000), new /datum/data/mining_equipment("Super Resonator", /obj/item/weapon/resonator/upgraded, 2500), + new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100), + new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150), + new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250), + new /datum/data/mining_equipment("KA Hyper Chassis", /obj/item/borg/upgrade/modkit/chassis_mod/orange, 300), + new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 1000), + new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000), + new /datum/data/mining_equipment("KA Cooldown Decrease",/obj/item/borg/upgrade/modkit/cooldown, 1000), + new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000), new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500), ) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index e489b35ad62..757c8dfc1d4 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -90,8 +90,8 @@ color = "#FFEBEB" /datum/reagent/flightpotion/reaction_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1) - return // This item currently does not work as we do not have the angel species. - if(ishuman(M) && M.stat != DEAD) + to_chat(M, "This item is currently non-functional.") + /*if(ishuman(M) && M.stat != DEAD) var/mob/living/carbon/human/H = M if(H.species.name != "Human" || reac_volume < 5) // implying xenohumans are holy if(method == INGEST && show_message) @@ -103,7 +103,7 @@ playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1) H.adjustBruteLoss(20) H.emote("scream") - ..() + ..()*/ //Boat @@ -158,7 +158,7 @@ icon_state = "ship_bottle" /obj/item/ship_in_a_bottle/attack_self(mob/user) - user << "You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out." + to_chat(user, "You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out.") playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) new /obj/vehicle/lavaboat/dragon(get_turf(src)) qdel(src) @@ -170,4 +170,151 @@ icon_state = "dragon_boat" generic_pixel_y = 2 generic_pixel_x = 1 - vehicle_move_delay = 1 \ No newline at end of file + vehicle_move_delay = 1 + +// Wisp Lantern +/obj/item/device/wisp_lantern + name = "spooky lantern" + desc = "This lantern gives off no light, but is home to a friendly wisp." + icon = 'icons/obj/lighting.dmi' + icon_state = "lantern-blue" + var/obj/effect/wisp/wisp + +/obj/item/device/wisp_lantern/attack_self(mob/user) + if(!wisp) + to_chat(user, "The wisp has gone missing!") + return + if(wisp.loc == src) + to_chat(user, "You release the wisp. It begins to bob around your head.") + user.sight |= SEE_MOBS + icon_state = "lantern" + wisp.orbit(user, 20) + feedback_add_details("wisp_lantern","F") // freed + + else + to_chat(user, "You return the wisp to the lantern.") + + if(wisp.orbiting) + var/atom/A = wisp.orbiting.orbiting + if(isliving(A)) + var/mob/living/M = A + M.sight &= ~SEE_MOBS + to_chat(M, "Your vision returns to normal.") + + wisp.stop_orbit() + wisp.loc = src + icon_state = "lantern-blue" + feedback_add_details("wisp_lantern","R") // returned + +/obj/item/device/wisp_lantern/New() + ..() + wisp = new(src) + +/obj/item/device/wisp_lantern/Destroy() + if(wisp) + if(wisp.loc == src) + qdel(wisp) + else + wisp.visible_message("[wisp] has a sad feeling for a moment, then it passes.") + ..() + +/obj/effect/wisp + name = "friendly wisp" + desc = "Happy to light your way." + icon = 'icons/obj/lighting.dmi' + icon_state = "orb" + luminosity = 7 + layer = ABOVE_ALL_MOB_LAYER + +//Red/Blue Cubes + +/obj/item/device/warp_cube + name = "blue cube" + desc = "A mysterious blue cube." + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "blue_cube" + var/obj/item/device/warp_cube/linked + +/obj/item/device/warp_cube/Destroy() + if(linked) + linked.linked = null + linked = null + return ..() + +/obj/item/device/warp_cube/attack_self(mob/user) + if(!linked) + to_chat(user, "[src] fizzles uselessly.") + return + + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() + smoke.set_up(1, 0, user.loc) + smoke.start() + + user.forceMove(get_turf(linked)) + feedback_add_details("warp_cube","[src.type]") + + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() + smoke.set_up(1, 0, user.loc) + smoke.start() + +/obj/item/device/warp_cube/red + name = "red cube" + desc = "A mysterious red cube." + icon_state = "red_cube" + +/obj/item/device/warp_cube/red/New() + ..() + if(!linked) + var/obj/item/device/warp_cube/blue = new(src.loc) + linked = blue + blue.linked = src + +//Meat Hook + +/obj/item/weapon/gun/magic/hook + name = "meat hook" + desc = "Mid or feed." + ammo_type = /obj/item/ammo_casing/magic/hook + icon_state = "hook" + item_state = "chain" + fire_sound = 'sound/weapons/batonextend.ogg' + max_charges = 1 + flags = NOBLUDGEON + force = 18 + +/obj/item/ammo_casing/magic/hook + name = "hook" + desc = "a hook." + projectile_type = /obj/item/projectile/hook + caliber = "hook" + icon_state = "hook" + +/obj/item/projectile/hook + name = "hook" + icon_state = "hook" + icon = 'icons/obj/lavaland/artefacts.dmi' + pass_flags = PASSTABLE + damage = 25 + armour_penetration = 100 + damage_type = BRUTE + hitsound = 'sound/effects/splat.ogg' + weaken = 3 + var/chain + +/obj/item/projectile/hook/fire(setAngle) + if(firer) + chain = firer.Beam(src, icon_state = "chain", time = INFINITY, maxdistance = INFINITY) + ..() + //TODO: root the firer until the chain returns + +/obj/item/projectile/hook/on_hit(atom/target) + . = ..() + if(isliving(target)) + var/mob/living/L = target + if(!L.anchored) + L.visible_message("[L] is snagged by [firer]'s hook!") + L.forceMove(get_turf(firer)) + +/obj/item/projectile/hook/Destroy() + qdel(chain) + return ..() \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 6cafcce56c3..22d45c51015 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -45,7 +45,7 @@ lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/guns_righthand.dmi' - var/obj/item/device/flashlight/F = null + var/obj/item/device/flashlight/gun_light = null var/can_flashlight = 0 var/list/upgrades = list() @@ -63,7 +63,7 @@ /obj/item/weapon/gun/New() ..() - if(F) + if(gun_light) verbs += /obj/item/weapon/gun/proc/toggle_gunlight build_zooming() @@ -241,27 +241,27 @@ obj/item/weapon/gun/proc/newshot() if(istype(I, /obj/item/device/flashlight/seclite)) var/obj/item/device/flashlight/seclite/S = I if(can_flashlight) - if(!F) + if(!gun_light) if(!user.unEquip(I)) return to_chat(user, "You click [S] into place on [src].") if(S.on) set_light(0) - F = S + gun_light = S I.loc = src update_icon() - update_gunlight(user) + update_gun_light(user) var/datum/action/A = new /datum/action/item_action/toggle_gunlight(src) if(loc == user) A.Grant(user) if(istype(I, /obj/item/weapon/screwdriver)) - if(F && can_flashlight) + if(gun_light && can_flashlight) for(var/obj/item/device/flashlight/seclite/S in src) to_chat(user, "You unscrew the seclite from [src].") - F = null + gun_light = null S.loc = get_turf(user) - update_gunlight(user) + update_gun_light(user) S.update_brightness(user) update_icon() for(var/datum/action/item_action/toggle_gunlight/TGL in actions) @@ -273,26 +273,26 @@ obj/item/weapon/gun/proc/newshot() ..() /obj/item/weapon/gun/proc/toggle_gunlight() - set name = "Toggle Gunlight" + set name = "Toggle gun_light" set category = "Object" set desc = "Click to toggle your weapon's attached flashlight." - if(!F) + if(!gun_light) return var/mob/living/carbon/human/user = usr if(!isturf(user.loc)) to_chat(user, "You cannot turn the light on while in this [user.loc]!") - F.on = !F.on - to_chat(user, "You toggle the gunlight [F.on ? "on":"off"].") + gun_light.on = !gun_light.on + to_chat(user, "You toggle the gun_light [gun_light.on ? "on":"off"].") playsound(user, 'sound/weapons/empty.ogg', 100, 1) - update_gunlight(user) + update_gun_light(user) -/obj/item/weapon/gun/proc/update_gunlight(mob/user = null) - if(F) - if(F.on) - set_light(F.brightness_on) +/obj/item/weapon/gun/proc/update_gun_light(mob/user = null) + if(gun_light) + if(gun_light.on) + set_light(gun_light.brightness_on) else set_light(0) update_icon() diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 2d87a32be2b..4d94f96f4a2 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -30,6 +30,12 @@ else power_supply = new(src) power_supply.give(power_supply.maxcharge) + update_ammo_types() + if(selfcharge) + processing_objects.Add(src) + update_icon() + +/obj/item/weapon/gun/energy/proc/update_ammo_types() var/obj/item/ammo_casing/energy/shot for(var/i = 1, i <= ammo_type.len, i++) var/shottype = ammo_type[i] @@ -38,9 +44,6 @@ shot = ammo_type[select] fire_sound = shot.fire_sound fire_delay = shot.delay - if(selfcharge) - processing_objects.Add(src) - update_icon() /obj/item/weapon/gun/energy/Destroy() if(selfcharge) @@ -129,9 +132,9 @@ overlays += image(icon = icon, icon_state = iconState, pixel_x = ammo_x_offset * (i -1)) else overlays += image(icon = icon, icon_state = "[icon_state]_[modifystate ? "[shot.select_name]_" : ""]charge[ratio]") - if(F && can_flashlight) + if(gun_light && can_flashlight) var/iconF = "flight" - if(F.on) + if(gun_light.on) iconF = "flight_on" overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) if(itemState) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index af1f6593982..326df69b73b 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/energy/kinetic_accelerator name = "proto-kinetic accelerator" - desc = "A self recharging, " + desc = "A self recharging, ranged mining tool that does increased damage in low pressure. Capable of holding up to six slots worth of mod kits." icon_state = "kineticgun" item_state = "kineticgun" ammo_type = list(/obj/item/ammo_casing/energy/kinetic) @@ -17,44 +17,55 @@ var/unique_frequency = FALSE // modified by KA modkits var/overheat = FALSE - var/list/max_mod_capacity = 2 + var/max_mod_capacity = 100 var/list/modkits = list() + var/empty_state = "kineticgun_empty" + +/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user) + ..() + if(max_mod_capacity) + to_chat(user, "[get_remaining_mod_capacity()]% mod capacity remaining.") + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + to_chat(user, "There is a [M.name] mod installed, using [M.cost]% capacity.") /obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user) if(istype(A, /obj/item/weapon/crowbar)) if(modkits.len) - user << "You pry the modifications out." - for(var/obj/item/modkit/M in modkits) - M.forceMove(get_turf(user)) + to_chat(user, "You pry the modifications out.") + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + for(var/obj/item/borg/upgrade/modkit/M in modkits) + M.uninstall(src) else - user << "There are no modifications currently installed." - else if(istype(A, /obj/item/modkit)) - var/obj/item/modkit/MK = A - var/current_mod_capacity = 0 - for(var/obj/item/modkit/M in modkits) - current_mod_capacity += M.cost - if((current_mod_capacity + MK.cost) > max_mod_capacity) - user << "You don't have room to install this modkit. Use a crowbar to remove existing modkits." - return - else - user << "You install the modkit." - MK.install(src) + to_chat(user, "There are no modifications currently installed.") + else if(istype(A, /obj/item/borg/upgrade/modkit)) + var/obj/item/borg/upgrade/modkit/MK = A + MK.install(src, user) else ..() +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity() + var/current_capacity_used = 0 + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + current_capacity_used += M.cost + return max_mod_capacity - current_capacity_used + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_modkits() + . = list() + for(var/A in modkits) + . += A /obj/item/weapon/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/item/projectile/kinetic/K) - for(var/obj/item/modkit/M in src) + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A M.modify_projectile(K) /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg holds_charge = TRUE unique_frequency = TRUE - -/obj/item/weapon/gun/energy/kinetic_accelerator/hyper/cyborg - holds_charge = TRUE - unique_frequency = TRUE + max_mod_capacity = 80 /obj/item/weapon/gun/energy/kinetic_accelerator/New() . = ..() @@ -75,9 +86,12 @@ if(!holds_charge) // Put it on a delay because moving item from slot to hand // calls dropped(). - sleep(1) - if(!ismob(loc)) - empty() + spawn(2) + empty_if_not_held() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty_if_not_held() + if(!ismob(loc)) + empty() /obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty() power_supply.use(500) @@ -99,7 +113,8 @@ else carried = 1 - addtimer(src, "reload", overheat_time * carried) + spawn(overheat_time * carried) + reload() /obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity) return @@ -107,35 +122,25 @@ /obj/item/weapon/gun/energy/kinetic_accelerator/proc/reload() power_supply.give(500) if(!suppressed) - playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) + playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) else - loc << "[src] silently charges up." + to_chat(loc, "[src] silently charges up.") update_icon() overheat = FALSE /obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() - cut_overlays() - if(!can_shoot()) - add_overlay("kineticgun_empty") + overlays.Cut() + if(empty_state && !can_shoot()) + overlays += empty_state - if(F && can_flashlight) + if(gun_light && can_flashlight) var/iconF = "flight" - if(F.on) + if(gun_light.on) iconF = "flight_on" - add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) - - - - - - - - + overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) //Casing - - /obj/item/ammo_casing/energy/kinetic projectile_type = /obj/item/projectile/kinetic select_name = "kinetic" @@ -148,87 +153,262 @@ var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = loc KA.modify_projectile(BB) -/obj/item/ammo_casing/energy/kinetic/hyper - projectile_type = /obj/item/projectile/kinetic/hyper - + var/turf/proj_turf = get_turf(BB) + if(!isturf(proj_turf)) + return + var/datum/gas_mixture/environment = proj_turf.return_air() + var/pressure = environment.return_pressure() + if(pressure > 50) + BB.name = "weakened [BB.name]" + var/obj/item/projectile/kinetic/K = BB + K.damage *= K.pressure_decrease //Projectiles - /obj/item/projectile/kinetic name = "kinetic force" icon_state = null - damage = 10 + damage = 40 damage_type = BRUTE flag = "bomb" range = 3 - var/damage_multiplier = 4 + log_override = TRUE -/obj/item/projectile/kinetic/super - damage = 11 - range = 4 - -/obj/item/projectile/kinetic/New() - var/turf/proj_turf = get_turf(src) - if(!istype(proj_turf, /turf)) - return - var/datum/gas_mixture/environment = proj_turf.return_air() - var/pressure = environment.return_pressure() - if(pressure < 50) - name = "full strength [name]" - damage *= damage_multiplier - ..() + var/pressure_decrease = 0.25 + var/turf_aoe = FALSE + var/mob_aoe = 0 + var/list/hit_overlays = list() /obj/item/projectile/kinetic/on_range() - PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, loc) + strike_thing() ..() /obj/item/projectile/kinetic/on_hit(atom/target) - var/turf/target_turf= get_turf(target) - if(istype(target_turf, /turf/closed/mineral)) - var/turf/closed/mineral/M = target_turf - M.gets_drilled(firer) - PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, target_turf) + strike_thing(target) . = ..() - -//AoE - -/obj/item/projectile/kinetic/hyper - name = "kinetic explosion" - damage = 10 - range = 3 - -/obj/item/projectile/kinetic/hyper/proc/aoe_blast(atom/target) +/obj/item/projectile/kinetic/proc/strike_thing(atom/target) var/turf/target_turf = get_turf(target) if(!target_turf) target_turf = get_turf(src) - PoolOrNew(/obj/effect/overlay/temp/explosion/fast, target_turf) - for(var/T in RANGE_TURFS(1, target_turf) - target_turf) - if(istype(T, /turf/closed/mineral)) - var/turf/closed/mineral/M = T - M.gets_drilled(firer) + if(ismineralturf(target_turf)) + var/turf/simulated/mineral/M = target_turf + M.gets_drilled(firer) + var/obj/effect/overlay/temp/kinetic_blast/K = new /obj/effect/overlay/temp/kinetic_blast(target_turf) + K.color = color + for(var/type in hit_overlays) + new type(target_turf) + if(turf_aoe) + for(var/T in RANGE_TURFS(1, target_turf) - target_turf) + if(ismineralturf(T)) + var/turf/simulated/mineral/M = T + M.gets_drilled(firer) + if(mob_aoe) + for(var/mob/living/L in range(1, target_turf) - firer - target) + var/armor = L.run_armor_check(def_zone, flag, "", "", armour_penetration) + L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor) + to_chat(L, "You're struck by a [name]!") -/obj/item/projectile/kinetic/hyper/on_range() - aoe_blast() - ..() - -/obj/item/projectile/kinetic/hyper/on_hit(atom/target) - aoe_blast(target) - . = ..() //Modkits - -/obj/item/modkit +/obj/item/borg/upgrade/modkit name = "modification kit" - desc = "An upgrade for kinetic accelerators.." + desc = "An upgrade for kinetic accelerators." icon = 'icons/obj/objects.dmi' icon_state = "modkit" origin_tech = "programming=2;materials=2;magnets=4" - var/cost = 2 + require_module = 1 + module_type = /obj/item/weapon/robot_module/miner + var/denied_type = null + var/maximum_of_type = 1 + var/cost = 30 + var/modifier = 1 //For use in any mod kit that has numerical modifiers -/obj/item/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA) - return +/obj/item/borg/upgrade/modkit/examine(mob/user) + ..() + to_chat(user, "Occupies [cost]% of mod capacity.") -/obj/item/modkit/proc/modify_projectile(/obj/item/projectile/kinetic/K) - return \ No newline at end of file +/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user) + if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user)) + install(A, user) + else + ..() + +/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R) + if(..()) + return + + for(var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules) + return install(H, usr) + +/obj/item/borg/upgrade/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = TRUE + if(denied_type) + var/number_of_denied = 0 + for(var/A in KA.get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + if(istype(M, denied_type)) + number_of_denied++ + if(number_of_denied >= maximum_of_type) + . = FALSE + break + if(KA.get_remaining_mod_capacity() >= cost) + if(.) + to_chat(user, "You install the modkit.") + playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + user.unEquip(src) + forceMove(KA) + KA.modkits += src + else + to_chat(user, "The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits.") + else + to_chat(user, "You don't have room([KA.get_remaining_mod_capacity()]% remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.") + . = FALSE + + + +/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + forceMove(get_turf(KA)) + KA.modkits -= src + +/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K) + + +//Range +/obj/item/borg/upgrade/modkit/range + name = "range increase" + desc = "Increases the range of a kinetic accelerator when installed." + modifier = 1 + cost = 24 //so you can fit four plus a tracer cosmetic + +/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/item/projectile/kinetic/K) + K.range += modifier + + +//Damage +/obj/item/borg/upgrade/modkit/damage + name = "damage increase" + desc = "Increases the damage of kinetic accelerator when installed." + modifier = 10 + +/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K) + K.damage += modifier + + +//Cooldown +/obj/item/borg/upgrade/modkit/cooldown + name = "cooldown decrease" + desc = "Decreases the cooldown of a kinetic accelerator." + modifier = 2.5 + +/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + KA.overheat_time -= modifier + +/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.overheat_time += modifier + ..() + + +//AoE blasts +/obj/item/borg/upgrade/modkit/aoe + modifier = 0 + +/obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/item/projectile/kinetic/K) + K.name = "kinetic explosion" + if(!K.turf_aoe && !K.mob_aoe) + K.hit_overlays += /obj/effect/overlay/temp/explosion/fast + K.mob_aoe += modifier + +/obj/item/borg/upgrade/modkit/aoe/turfs + name = "mining explosion" + desc = "Causes the kinetic accelerator to destroy rock in an AoE." + denied_type = /obj/item/borg/upgrade/modkit/aoe/turfs + +/obj/item/borg/upgrade/modkit/aoe/turfs/modify_projectile(obj/item/projectile/kinetic/K) + ..() + K.turf_aoe = TRUE + +/obj/item/borg/upgrade/modkit/aoe/turfs/andmobs + name = "offensive mining explosion" + desc = "Causes the kinetic accelerator to destroy rock and damage mobs in an AoE." + maximum_of_type = 3 + modifier = 0.25 + +/obj/item/borg/upgrade/modkit/aoe/mobs + name = "offensive explosion" + desc = "Causes the kinetic accelerator to damage mobs in an AoE." + modifier = 0.2 + + +//Indoors +/obj/item/borg/upgrade/modkit/indoors + name = "decrease pressure penalty" + desc = "Increases the damage a kinetic accelerator does in a high pressure environment." + modifier = 2 + denied_type = /obj/item/borg/upgrade/modkit/indoors + maximum_of_type = 2 + cost = 40 + +/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K) + K.pressure_decrease *= modifier + + +//Trigger Guard +/obj/item/borg/upgrade/modkit/trigger_guard + name = "modified trigger guard" + desc = "Allows creatures normally incapable of firing guns to operate the weapon when installed." + cost = 20 + denied_type = /obj/item/borg/upgrade/modkit/trigger_guard + +/obj/item/borg/upgrade/modkit/trigger_guard/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + KA.trigger_guard = TRIGGER_GUARD_ALLOW_ALL + +/obj/item/borg/upgrade/modkit/trigger_guard/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.trigger_guard = TRIGGER_GUARD_NORMAL + ..() + + +//Cosmetic + +/obj/item/borg/upgrade/modkit/chassis_mod + name = "super chassis" + desc = "Makes your KA yellow. All the fun of having a more powerful KA without actually having a more powerful KA." + cost = 10 + denied_type = /obj/item/borg/upgrade/modkit/chassis_mod + var/chassis_icon = "kineticgun_u" + +/obj/item/borg/upgrade/modkit/chassis_mod/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + KA.icon_state = chassis_icon + +/obj/item/borg/upgrade/modkit/chassis_mod/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.icon_state = initial(KA.icon_state) + ..() + +/obj/item/borg/upgrade/modkit/chassis_mod/orange + name = "hyper chassis" + desc = "Makes your KA orange. All the fun of having explosive blasts without actually having explosive blasts." + chassis_icon = "kineticgun_h" + +/obj/item/borg/upgrade/modkit/tracer + name = "white tracer bolts" + desc = "Causes kinetic accelerator bolts to have a white tracer trail and explosion." + cost = 4 + denied_type = /obj/item/borg/upgrade/modkit/tracer + var/bolt_color = "#FFFFFF" + +/obj/item/borg/upgrade/modkit/tracer/modify_projectile(obj/item/projectile/kinetic/K) + K.icon_state = "ka_tracer" + K.color = bolt_color + +/obj/item/borg/upgrade/modkit/tracer/adjustable + name = "adjustable tracer bolts" + desc = "Causes kinetic accelerator bolts to have a adjustably-colored tracer trail and explosion. Use in-hand to change color." + +/obj/item/borg/upgrade/modkit/tracer/adjustable/attack_self(mob/user) + bolt_color = input(user,"Choose Color") as color diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 8d920a7e736..ef184bd8d5b 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -37,14 +37,14 @@ can_flashlight = 0 // Can't attach or detach the flashlight, and override it's icon update /obj/item/weapon/gun/energy/gun/mini/New() - F = new /obj/item/device/flashlight/seclite(src) + gun_light = new /obj/item/device/flashlight/seclite(src) ..() power_supply.maxcharge = 6000 power_supply.charge = 6000 /obj/item/weapon/gun/energy/gun/mini/update_icon() ..() - if(F && F.on) + if(gun_light && gun_light.on) overlays += "mini-light" /obj/item/weapon/gun/energy/gun/hos diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 5818a0ee7a2..12eb34e8c54 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -99,6 +99,9 @@ overheat_time = 20 holds_charge = TRUE unique_frequency = TRUE + can_flashlight = 0 + max_mod_capacity = 0 + empty_state = null /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/ninja name = "energy dart thrower" diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 7b0bcda17d0..4a3afd18684 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -52,7 +52,7 @@ var/forcedodge = 0 //to pass through everything var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all. - var/log = 1 //whether print to admin attack logs or just keep it in the diary + var/log_override = FALSE //whether print to admin attack logs or just keep it in the diary /obj/item/projectile/New() permutated = list() @@ -90,7 +90,8 @@ for(var/datum/reagent/R in reagents.reagent_list) reagent_note += R.id + " (" reagent_note += num2text(R.volume) + ") " - add_logs(firer, L, "shot", src, reagent_note, print_attack_log = log) + if(!log_override && firer && original) + add_logs(firer, L, "shot", src, reagent_note) return L.apply_effects(stun, weaken, paralyze, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter) /obj/item/projectile/proc/vol_by_damage() diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 872ee7c3f26..6cddc1c1b91 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -20,7 +20,7 @@ name = "practice laser" damage = 0 nodamage = 1 - log = 0 + log_override = TRUE /obj/item/projectile/beam/scatter name = "laser pellet" @@ -75,7 +75,7 @@ damage_type = STAMINA flag = "laser" var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag) - log = 0 + log_override = TRUE /obj/item/projectile/beam/lasertag/on_hit(atom/target, blocked = 0) . = ..() diff --git a/code/modules/projectiles/projectile/reusable.dm b/code/modules/projectiles/projectile/reusable.dm index 17aaad71a2a..cb0ee34ad75 100644 --- a/code/modules/projectiles/projectile/reusable.dm +++ b/code/modules/projectiles/projectile/reusable.dm @@ -37,7 +37,7 @@ var/obj/item/weapon/pen/pen = null edge = 0 embed = 0 - log = 0//it won't log even when there's a pen inside, but since the damage will be so low, I don't think there's any point in making it any more complex + log_override = TRUE//it won't log even when there's a pen inside, but since the damage will be so low, I don't think there's any point in making it any more complex /obj/item/projectile/bullet/reusable/foam_dart/handle_drop() if(dropped) @@ -65,4 +65,4 @@ icon_state = "foamdart_riot" ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot stamina = 25 - log = 1 + log_override = FALSE diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 702afa68f2f..ff5708576cf 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1038,16 +1038,6 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") -/datum/design/borg_upgrade_hyperka - name = "Cyborg Upgrade (Hyper-Kinetic Accelerator)" - id = "borg_upgrade_hyperka" - req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4) - build_type = MECHFAB //Reqs same as human Hyper KA - materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) - build_path = /obj/item/borg/upgrade/hyperka - construction_time = 120 - category = list("Cyborg Upgrade Modules") - /datum/design/borg_syndicate_module name = "Cyborg Upgrade (Illegal Modules)" id = "borg_syndicate_module" diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index 0ee8c58aa7e..aa3014e2825 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -72,4 +72,64 @@ build_type = PROTOLATHE materials = list(MAT_METAL = 4000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_URANIUM = 2000) build_path = /obj/item/weapon/resonator/upgraded - category = list("Mining") \ No newline at end of file + category = list("Mining") + +/datum/design/trigger_guard_mod + name = "Kinetic Accelerator Trigger Guard Mod" + desc = "A device which allows kinetic accelerators to be wielded by any organism." + id = "triggermod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/trigger_guard + category = list("Mining") + +/datum/design/damage_mod + name = "Kinetic Accelerator Damage Mod" + desc = "A device which allows kinetic accelerators to deal more damage." + id = "damagemod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/damage + category = list("Mining", "Cyborg Upgrade Modules") + +/datum/design/cooldown_mod + name = "Kinetic Accelerator Cooldown Mod" + desc = "A device which decreases the cooldown of a Kinetic Accelerator." + id = "cooldownmod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/cooldown + category = list("Mining", "Cyborg Upgrade Modules") + +/datum/design/range_mod + name = "Kinetic Accelerator Range Mod" + desc = "A device which allows kinetic accelerators to fire at a further range." + id = "rangemod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/range + category = list("Mining", "Cyborg Upgrade Modules") + +/datum/design/superaccelerator + name = "Kinetic Accelerator Pressure Mod" + desc = "A modification kit which allows Kinetic Accelerators to do more damage while indoors." + id = "indoormod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_URANIUM = 2000) + build_path = /obj/item/borg/upgrade/modkit/indoors + category = list("Mining", "Cyborg Upgrade Modules") + +/datum/design/hyperaccelerator + name = "Kinetic Accelerator Mining AoE Mod" + desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock." + id = "hypermod" + req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) + build_path = /obj/item/borg/upgrade/modkit/aoe/turfs + category = list("Mining", "Cyborg Upgrade Modules") \ No newline at end of file diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 01729aa70afef3d9357254df291c3fea7fd09747..9111297a2669ed0a201899659c18fa6edb511907 100644 GIT binary patch literal 371132 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