From 481135177c08af72568b030aab208c0be21997bd Mon Sep 17 00:00:00 2001 From: PatchouliKnowledge Date: Sat, 11 Oct 2014 20:38:42 +0300 Subject: [PATCH 1/8] Lots of mecha changes and additions. - Added constructible Phazon parts and circuits to R&D machines - Added a Phazon construction path - Nerfed the Phazon greatly > equip slots down to 3 from 4 > step_in up to 2 from 1 > toxin punch damage greatly nerfed (from ~80 tox damage to ~20 per hit) > research levels required increased (materials 7, bluespace 6, power 6, emp 6, data 5) > research levels from parts reduced - Fluffed out the Phazon in general (sounds, descriptions) - Grammar fixes to mecha construction process - added a bunch of missing periods and articles - Changed Durand construction to require a super capacitor and phasic scanner instead of advanced ones - Buffed the exosuit extinguisher (now has 1000 water instead of 200) - Buffed the exosuit plasma generator (now consumes fuel at half the speed and doesn't burn through masses of plasma in minutes) - Moved the cable layer tool from medical_tools.dm to tools.dm (why even) - Buffed Ripley's default armour (brute from 20% to 40%, bomb protection 80% instead of none) - All Ripley variants now have the same lights_power 7 (from Default Ripley's 6, and Death Ripley's 60 which basically created a fully lit square around it) - The default Ripley can now be augmented with goliath armour plates, up to 70% brute protection (plates drop if Ripley is killed) - Goliath-plated Ripleys get a different sprite and examine-description --- code/game/mecha/combat/combat.dm | 24 +- code/game/mecha/combat/phazon.dm | 31 +- .../mecha/equipment/tools/medical_tools.dm | 152 ---- code/game/mecha/equipment/tools/tools.dm | 157 +++- code/game/mecha/mech_fabricator.dm | 16 +- code/game/mecha/mecha.dm | 8 +- code/game/mecha/mecha_construction_paths.dm | 674 +++++++++++++----- code/game/mecha/mecha_parts.dm | 31 +- code/game/mecha/working/ripley.dm | 109 ++- .../simple_animal/hostile/mining_mobs.dm | 25 +- .../modules/research/designs/mecha_designs.dm | 27 + icons/mecha/mech_construct.dmi | Bin 30405 -> 31464 bytes icons/mecha/mech_construction.dmi | Bin 14408 -> 17297 bytes icons/mecha/mecha.dmi | Bin 138647 -> 142034 bytes 14 files changed, 875 insertions(+), 379 deletions(-) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 7ebf0183f41..dfa65b1abb3 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -26,7 +26,7 @@ if(istype(target, /mob/living)) var/mob/living/M = target if(src.occupant.a_intent == "harm") - playsound(src, 'sound/weapons/punch4.ogg', 50, 1) +// playsound(src, 'sound/weapons/punch4.ogg', 50, 1) if(damtype == "brute") step_away(M,src,15) /* @@ -48,14 +48,19 @@ if("brute") H.Paralyse(1) update |= temp.take_damage(rand(force/2, force), 0) + playsound(src, 'sound/weapons/punch4.ogg', 50, 1) if("fire") update |= temp.take_damage(0, rand(force/2, force)) + playsound(src, 'sound/items/Welder.ogg', 50, 1) if("tox") + playsound(src, 'sound/effects/spray2.ogg', 50, 1) if(H.reagents) - if(H.reagents.get_reagent_amount("carpotoxin") + force < force*2) - H.reagents.add_reagent("carpotoxin", force) +// if(H.reagents.get_reagent_amount("carpotoxin") + force < force*2) //Carpotoxin in mech tools? I don't even +// H.reagents.add_reagent("carpotoxin", force) if(H.reagents.get_reagent_amount("cryptobiolin") + force < force*2) - H.reagents.add_reagent("cryptobiolin", force) + H.reagents.add_reagent("cryptobiolin", force/2) + if(H.reagents.get_reagent_amount("toxin") + force < force*2) + H.reagents.add_reagent("toxin", force/2.5) else return if(update) H.update_damage_overlays(0) @@ -66,14 +71,19 @@ if("brute") M.Paralyse(1) M.take_overall_damage(rand(force/2, force)) + playsound(src, 'sound/weapons/punch4.ogg', 50, 1) if("fire") M.take_overall_damage(0, rand(force/2, force)) + playsound(src, 'sound/items/Welder.ogg', 50, 1) if("tox") + playsound(src, 'sound/effects/spray2.ogg', 50, 1) if(M.reagents) - if(M.reagents.get_reagent_amount("carpotoxin") + force < force*2) - M.reagents.add_reagent("carpotoxin", force) +// if(M.reagents.get_reagent_amount("carpotoxin") + force < force*2) +// M.reagents.add_reagent("carpotoxin", force) if(M.reagents.get_reagent_amount("cryptobiolin") + force < force*2) - M.reagents.add_reagent("cryptobiolin", force) + M.reagents.add_reagent("cryptobiolin", force/2) + if(M.reagents.get_reagent_amount("toxin") + force < force*2) + M.reagents.add_reagent("toxin", force/2.5) else return M.updatehealth() diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 465a1b7a06e..5bf6dacd661 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -1,9 +1,9 @@ /obj/mecha/combat/phazon - desc = "An exosuit which can only be described as 'WTF?'." + desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials." name = "\improper Phazon" icon_state = "phazon" - step_in = 1 - dir_in = 1 //Facing North. + step_in = 2 + dir_in = 2 //Facing South. step_energy_drain = 3 health = 200 deflect_chance = 30 @@ -17,9 +17,9 @@ force = 15 var/phasing = 0 var/phasing_energy_drain = 200 - max_equip = 4 - + max_equip = 3 +/* //The Phazon spawned with an RCD and a Gravcatapult normally, but now that it's buildable we can't have that anymore now, can we /obj/mecha/combat/phazon/New() ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd @@ -41,6 +41,7 @@ else . = ..() return +*/ /obj/mecha/combat/phazon/click_action(atom/target,mob/user) if(phasing) @@ -51,20 +52,26 @@ /obj/mecha/combat/phazon/verb/switch_damtype() set category = "Exosuit Interface" - set name = "Change melee damage type" + set name = "Reconfigure arm microtool arrays" set src = usr.loc set popup_menu = 0 if(usr!=src.occupant) return - var/new_damtype = alert(src.occupant,"Melee Damage Type",null,"Brute","Fire","Toxic") + var/new_damtype = alert(src.occupant,"Arm tool selection",null,"Fists","Torch","Toxic injector") switch(new_damtype) - if("Brute") + if("Fists") damtype = "brute" - if("Fire") + if("Torch") damtype = "fire" - if("Toxic") + if("Toxic injector") damtype = "tox" - src.occupant_message("Melee damage type switched to [new_damtype ]") + if (new_damtype == "Fists") + src.occupant_message("Your exosuit's hands form into fists.") + if (new_damtype == "Torch") + src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.") + if (new_damtype == "Toxic injector") + src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") + playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) return /obj/mecha/combat/phazon/get_commands() @@ -72,7 +79,7 @@
Special
"} diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 4cfc457473d..8b98ccf7021 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -233,164 +233,12 @@ M.AdjustStunned(-4) M.AdjustWeakened(-4) M.AdjustStunned(-4) - M.Paralyse(2) - M.Weaken(2) - M.Stun(2) if(M.reagents.get_reagent_amount("inaprovaline") < 5) M.reagents.add_reagent("inaprovaline", 5) S.chassis.use_power(S.energy_drain) S.update_equip_info() return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer - name = "cable layer" - desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path." - icon_state = "mecha_wire" - var/datum/event/event - var/turf/old_turf - var/obj/structure/cable/last_piece - var/obj/item/stack/cable_coil/cable - var/max_cable = 1000 - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New() - cable = new(src) - cable.amount = 0 - ..() - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/can_attach(obj/mecha/working/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/attach() - ..() - event = chassis.events.addEvent("onMove",src,"layCable") - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/detach() - chassis.events.clearEvent("onMove",event) - return ..() - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/destroy() - chassis.events.clearEvent("onMove",event) - return ..() - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/action(var/obj/item/stack/cable_coil/target) - if(!action_checks(target)) - return - var/result = load_cable(target) - var/message - if(isnull(result)) - message = "Unable to load [target] - no cable found." - else if(!result) - message = "Reel is full." - else - message = "[result] meters of cable successfully loaded." - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - occupant_message(message) - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/Topic(href,href_list) - ..() - if(href_list["toggle"]) - set_ready_state(!equip_ready) - occupant_message("[src] [equip_ready?"dea":"a"]ctivated.") - log_message("[equip_ready?"Dea":"A"]ctivated.") - return - if(href_list["cut"]) - if(cable && cable.amount) - var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) - m = min(m, cable.amount) - if(m) - use_cable(m) - var/obj/item/stack/cable_coil/CC = new (get_turf(chassis)) - CC.amount = m - else - occupant_message("There's no more cable on the reel.") - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info() - var/output = ..() - if(output) - return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC) - if(istype(CC) && CC.amount) - var/cur_amount = cable? cable.amount : 0 - var/to_load = max(max_cable - cur_amount,0) - if(to_load) - to_load = min(CC.amount, to_load) - if(!cable) - cable = new(src) - cable.amount = 0 - cable.amount += to_load - CC.use(to_load) - return to_load - else - return 0 - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount) - if(!cable || cable.amount<1) - set_ready_state(1) - occupant_message("Cable depleted, [src] deactivated.") - log_message("Cable depleted, [src] deactivated.") - return - if(cable.amount < amount) - occupant_message("No enough cable to finish the task.") - return - cable.use(amount) - update_equip_info() - return 1 - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/reset() - last_piece = null - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/dismantleFloor(var/turf/new_turf) - if(istype(new_turf, /turf/simulated/floor)) - var/turf/simulated/floor/T = new_turf - if(!T.is_plating()) - if(!T.broken && !T.burnt) - new T.floor_tile.type(T) - T.make_plating() - return !new_turf.intact - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/layCable(var/turf/new_turf) - if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) - return reset() - var/fdirn = turn(chassis.dir,180) - for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already - if(LC.d1 == fdirn || LC.d2 == fdirn) - return reset() - if(!use_cable(1)) - return reset() - var/obj/structure/cable/NC = new(new_turf) - NC.cableColor("red") - NC.d1 = 0 - NC.d2 = fdirn - NC.updateicon() - - var/datum/powernet/PN - if(last_piece && last_piece.d2 != chassis.dir) - last_piece.d1 = min(last_piece.d2, chassis.dir) - last_piece.d2 = max(last_piece.d2, chassis.dir) - last_piece.updateicon() - PN = last_piece.powernet - - if(!PN) - PN = new() - powernets += PN - NC.powernet = PN - PN.cables += NC - NC.mergeConnectedNetworks(NC.d2) - - //NC.mergeConnectedNetworksOnTurf() - last_piece = NC - return 1 - /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun name = "exosuit syringe gun" desc = "Equipment for medical exosuits. A chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur." diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 70051b606d6..ec759eae359 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -214,8 +214,8 @@ range = MELEE|RANGED /obj/item/mecha_parts/mecha_equipment/tool/extinguisher/New() - create_reagents(200) - reagents.add_reagent("water", 200) + create_reagents(1000) + reagents.add_reagent("water", 1000) ..() return @@ -226,7 +226,7 @@ if(do_after_cooldown(target)) if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1) var/obj/o = target - o.reagents.trans_to(src, 200) + o.reagents.trans_to(src, 1000) occupant_message("Extinguisher refilled.") playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6) else @@ -379,6 +379,153 @@ return "[..()] \[D|C|A\]" +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer + name = "cable layer" + desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path." + icon_state = "mecha_wire" + var/datum/event/event + var/turf/old_turf + var/obj/structure/cable/last_piece + var/obj/item/stack/cable_coil/cable + var/max_cable = 1000 + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New() + cable = new(src) + cable.amount = 0 + ..() + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/can_attach(obj/mecha/working/M) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/attach() + ..() + event = chassis.events.addEvent("onMove",src,"layCable") + return + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/detach() + chassis.events.clearEvent("onMove",event) + return ..() + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/destroy() + chassis.events.clearEvent("onMove",event) + return ..() + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/action(var/obj/item/stack/cable_coil/target) + if(!action_checks(target)) + return + var/result = load_cable(target) + var/message + if(isnull(result)) + message = "Unable to load [target] - no cable found." + else if(!result) + message = "Reel is full." + else + message = "[result] meters of cable successfully loaded." + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + occupant_message(message) + return + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/Topic(href,href_list) + ..() + if(href_list["toggle"]) + set_ready_state(!equip_ready) + occupant_message("[src] [equip_ready?"dea":"a"]ctivated.") + log_message("[equip_ready?"Dea":"A"]ctivated.") + return + if(href_list["cut"]) + if(cable && cable.amount) + var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) + m = min(m, cable.amount) + if(m) + use_cable(m) + var/obj/item/stack/cable_coil/CC = new (get_turf(chassis)) + CC.amount = m + else + occupant_message("There's no more cable on the reel.") + return + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info() + var/output = ..() + if(output) + return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" + return + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC) + if(istype(CC) && CC.amount) + var/cur_amount = cable? cable.amount : 0 + var/to_load = max(max_cable - cur_amount,0) + if(to_load) + to_load = min(CC.amount, to_load) + if(!cable) + cable = new(src) + cable.amount = 0 + cable.amount += to_load + CC.use(to_load) + return to_load + else + return 0 + return + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount) + if(!cable || cable.amount<1) + set_ready_state(1) + occupant_message("Cable depleted, [src] deactivated.") + log_message("Cable depleted, [src] deactivated.") + return + if(cable.amount < amount) + occupant_message("No enough cable to finish the task.") + return + cable.use(amount) + update_equip_info() + return 1 + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/reset() + last_piece = null + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/dismantleFloor(var/turf/new_turf) + if(istype(new_turf, /turf/simulated/floor)) + var/turf/simulated/floor/T = new_turf + if(!T.is_plating()) + if(!T.broken && !T.burnt) + new T.floor_tile.type(T) + T.make_plating() + return !new_turf.intact + +/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/layCable(var/turf/new_turf) + if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) + return reset() + var/fdirn = turn(chassis.dir,180) + for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already + if(LC.d1 == fdirn || LC.d2 == fdirn) + return reset() + if(!use_cable(1)) + return reset() + var/obj/structure/cable/NC = new(new_turf) + NC.cableColor("red") + NC.d1 = 0 + NC.d2 = fdirn + NC.updateicon() + + var/datum/powernet/PN + if(last_piece && last_piece.d2 != chassis.dir) + last_piece.d1 = min(last_piece.d2, chassis.dir) + last_piece.d2 = max(last_piece.d2, chassis.dir) + last_piece.updateicon() + PN = last_piece.powernet + + if(!PN) + PN = new() + powernets += PN + NC.powernet = PN + PN.cables += NC + NC.mergeConnectedNetworks(NC.d2) + + //NC.mergeConnectedNetworksOnTurf() + last_piece = NC + return 1 /obj/item/mecha_parts/mecha_equipment/teleporter @@ -869,8 +1016,8 @@ var/coeff = 100 var/obj/item/stack/sheet/fuel var/max_fuel = 150000 - var/fuel_per_cycle_idle = 100 - var/fuel_per_cycle_active = 500 + var/fuel_per_cycle_idle = 25 + var/fuel_per_cycle_active = 200 var/power_per_cycle = 20 reliability = 1000 diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 0447d2cd81e..48222dd1db1 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -49,6 +49,7 @@ ), "Ripley"=list( /obj/item/mecha_parts/chassis/ripley, + /obj/item/mecha_parts/chassis/firefighter, /obj/item/mecha_parts/part/ripley_torso, /obj/item/mecha_parts/part/ripley_left_arm, /obj/item/mecha_parts/part/ripley_right_arm, @@ -93,7 +94,17 @@ /obj/item/mecha_parts/part/honker_right_arm, /obj/item/mecha_parts/part/honker_left_leg, /obj/item/mecha_parts/part/honker_right_leg - ), + ), + "Phazon"=list( + /obj/item/mecha_parts/chassis/phazon, + /obj/item/mecha_parts/part/phazon_torso, + /obj/item/mecha_parts/part/phazon_head, + /obj/item/mecha_parts/part/phazon_left_arm, + /obj/item/mecha_parts/part/phazon_right_arm, + /obj/item/mecha_parts/part/phazon_left_leg, + /obj/item/mecha_parts/part/phazon_right_leg, + /obj/item/mecha_parts/part/phazon_armor + ), "Exosuit Equipment"=list( /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp, /obj/item/mecha_parts/mecha_equipment/tool/drill, @@ -101,8 +112,7 @@ /obj/item/mecha_parts/mecha_equipment/tool/cable_layer, /obj/item/mecha_parts/mecha_equipment/tool/sleeper, /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun, - /obj/item/mecha_parts/chassis/firefighter, - ///obj/item/mecha_parts/mecha_equipment/repair_droid, + /obj/item/mecha_parts/mecha_equipment/repair_droid, /obj/item/mecha_parts/mecha_equipment/generator, ///obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser, diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 1096f5d5533..1ee9b6435b6 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -480,6 +480,7 @@ /obj/mecha/attack_alien(mob/user as mob) src.log_message("Attack by alien. Attacker - [user].",1) + user.changeNext_move(CLICK_CD_MELEE) //Now stompy alien killer mechs are actually scary to aliens! if(!prob(src.deflect_chance)) src.take_damage(15) src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) @@ -662,6 +663,9 @@ user << "[src]-MMI interface initialization failed." return + if(istype(W, /obj/item/asteroid/goliath_hide)) + return + if(istype(W, /obj/item/mecha_parts/mecha_equipment)) var/obj/item/mecha_parts/mecha_equipment/E = W spawn() @@ -784,8 +788,6 @@ */ return - - /* /obj/mecha/attack_ai(var/mob/living/silicon/ai/user as mob) if(!istype(user, /mob/living/silicon/ai)) @@ -797,6 +799,8 @@ return */ + + ///////////////////////////////////// //////// Atmospheric stuff //////// ///////////////////////////////////// diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index a26c10644b4..5ff59260334 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -76,7 +76,7 @@ ) /datum/construction/mecha/ripley_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder]") holder.overlays += used_atom.icon_state+"+o" qdel(used_atom) return 1 @@ -113,35 +113,35 @@ //4 list("key"=/obj/item/weapon/weldingtool, "backkey"=/obj/item/weapon/wrench, - "desc"="Internal armor is wrenched"), + "desc"="Internal armor is wrenched."), //5 list("key"=/obj/item/weapon/wrench, "backkey"=/obj/item/weapon/crowbar, - "desc"="Internal armor is installed"), + "desc"="Internal armor is installed."), //6 list("key"=/obj/item/stack/sheet/metal, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Peripherals control module is secured"), + "desc"="Peripherals control module is secured."), //7 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Peripherals control module is installed"), + "desc"="Peripherals control module is installed."), //8 list("key"=/obj/item/weapon/circuitboard/mecha/ripley/peripherals, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Central control module is secured"), + "desc"="Central control module is secured."), //9 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Central control module is installed"), + "desc"="Central control module is installed."), //10 list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is adjusted"), + "desc"="The wiring is adjusted."), //11 list("key"=/obj/item/weapon/wirecutters, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is added"), + "desc"="The wiring is added."), //12 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/weapon/screwdriver, @@ -165,50 +165,50 @@ //TODO: better messages. switch(index) if(14) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "ripley1" if(13) if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "ripley2" else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "ripley0" if(12) if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "ripley3" else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "ripley1" if(11) if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "ripley4" else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "ripley2" if(10) if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) holder.icon_state = "ripley5" else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "ripley3" if(9) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "ripley6" else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) holder.icon_state = "ripley4" if(8) if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) holder.icon_state = "ripley7" else @@ -219,51 +219,51 @@ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "ripley8" else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) holder.icon_state = "ripley6" if(6) if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") holder.icon_state = "ripley9" else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") holder.icon_state = "ripley7" if(5) if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") holder.icon_state = "ripley10" else - user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) MS.amount = 5 holder.icon_state = "ripley8" if(4) if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") holder.icon_state = "ripley11" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") holder.icon_state = "ripley9" if(3) if(diff==FORWARD) - user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") + user.visible_message("[user] installs the external reinforced armor layer to the [holder].", "You install the external reinforced armor layer to the [holder].") holder.icon_state = "ripley12" else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") holder.icon_state = "ripley10" if(2) if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") holder.icon_state = "ripley13" else - user.visible_message("[user] pries external armor layer from [holder].", "You pry external armor layer from [holder].") + user.visible_message("[user] pries external armor layer from the [holder].", "You pry external armor layer from the [holder].") var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 holder.icon_state = "ripley11" if(1) if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + user.visible_message("[user] welds the external armor layer to the [holder].", "You weld the external armor layer to the [holder].") else user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") holder.icon_state = "ripley12" @@ -286,7 +286,7 @@ ) /datum/construction/mecha/gygax_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder]") holder.overlays += used_atom.icon_state+"+o" qdel(used_atom) return 1 @@ -322,59 +322,59 @@ //4 list("key"=/obj/item/weapon/weldingtool, "backkey"=/obj/item/weapon/wrench, - "desc"="Internal armor is wrenched"), + "desc"="Internal armor is wrenched."), //5 list("key"=/obj/item/weapon/wrench, "backkey"=/obj/item/weapon/crowbar, - "desc"="Internal armor is installed"), + "desc"="Internal armor is installed."), //6 list("key"=/obj/item/stack/sheet/metal, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Advanced capacitor is secured"), + "desc"="Advanced capacitor is secured."), //7 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Advanced capacitor is installed"), + "desc"="Advanced capacitor is installed."), //8 list("key"=/obj/item/weapon/stock_parts/capacitor/adv, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Advanced scanner module is secured"), + "desc"="Advanced scanner module is secured."), //9 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Advanced scanner module is installed"), + "desc"="Advanced scanner module is installed."), //10 list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Scanning module is secured"), + "desc"="Scanning module is secured."), //11 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Scanning module is installed"), + "desc"="Scanning module is installed."), //12 list("key"=/obj/item/weapon/circuitboard/mecha/gygax/targeting, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Peripherals control module is secured"), + "desc"="Peripherals control module is secured."), //13 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Peripherals control module is installed"), + "desc"="Peripherals control module is installed."), //14 list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Central control module is secured"), + "desc"="Central control module is secured."), //15 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Central control module is installed"), + "desc"="Central control module is installed."), //16 list("key"=/obj/item/weapon/circuitboard/mecha/gygax/main, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is adjusted"), + "desc"="The wiring is adjusted."), //17 list("key"=/obj/item/weapon/wirecutters, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is added"), + "desc"="The wiring is added."), //18 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/weapon/screwdriver, @@ -398,50 +398,50 @@ //TODO: better messages. switch(index) if(20) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "gygax1" if(19) if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "gygax2" else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "gygax0" if(18) if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "gygax3" else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "gygax1" if(17) if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "gygax4" else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "gygax2" if(16) if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) holder.icon_state = "gygax5" else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "gygax3" if(15) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "gygax6" else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/weapon/circuitboard/mecha/gygax/main(get_turf(holder)) holder.icon_state = "gygax4" if(14) if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) holder.icon_state = "gygax7" else @@ -452,12 +452,12 @@ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "gygax8" else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) holder.icon_state = "gygax6" if(12) if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") qdel(used_atom) holder.icon_state = "gygax9" else @@ -468,12 +468,12 @@ user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") holder.icon_state = "gygax10" else - user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + user.visible_message("[user] removes the weapon control module from the [holder].", "You remove the weapon control module from the [holder].") new /obj/item/weapon/circuitboard/mecha/gygax/targeting(get_turf(holder)) holder.icon_state = "gygax8" if(10) if(diff==FORWARD) - user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + user.visible_message("[user] installs advanced scanner module to the [holder].", "You install advanced scanner module to the [holder].") qdel(used_atom) holder.icon_state = "gygax11" else @@ -484,12 +484,12 @@ user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") holder.icon_state = "gygax12" else - user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") + user.visible_message("[user] removes the advanced scanner module from the [holder].", "You remove the advanced scanner module from the [holder].") new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) holder.icon_state = "gygax10" if(8) if(diff==FORWARD) - user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + user.visible_message("[user] installs advanced capacitor to the [holder].", "You install advanced capacitor to the [holder].") qdel(used_atom) holder.icon_state = "gygax13" else @@ -500,51 +500,51 @@ user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") holder.icon_state = "gygax14" else - user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") + user.visible_message("[user] removes the advanced capacitor from the [holder].", "You remove the advanced capacitor from the [holder].") new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) holder.icon_state = "gygax12" if(6) if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") holder.icon_state = "gygax15" else user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") holder.icon_state = "gygax13" if(5) if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") holder.icon_state = "gygax16" else - user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) MS.amount = 5 holder.icon_state = "gygax14" if(4) if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") holder.icon_state = "gygax17" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") holder.icon_state = "gygax15" if(3) if(diff==FORWARD) - user.visible_message("[user] installs Gygax Armor Plates to [holder].", "You install Gygax Armor Plates to [holder].") + user.visible_message("[user] installs Gygax Armor Plates to the [holder].", "You install Gygax Armor Plates to the [holder].") qdel(used_atom) holder.icon_state = "gygax18" else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") holder.icon_state = "gygax16" if(2) if(diff==FORWARD) user.visible_message("[user] secures Gygax Armor Plates.", "You secure Gygax Armor Plates.") holder.icon_state = "gygax19" else - user.visible_message("[user] pries Gygax Armor Plates from [holder].", "You pry Gygax Armor Plates from [holder].") + user.visible_message("[user] pries Gygax Armor Plates from the [holder].", "You pry Gygax Armor Plates from the [holder].") new /obj/item/mecha_parts/part/gygax_armor(get_turf(holder)) holder.icon_state = "gygax17" if(1) if(diff==FORWARD) - user.visible_message("[user] welds Gygax Armor Plates to [holder].", "You weld Gygax Armor Plates to [holder].") + user.visible_message("[user] welds Gygax Armor Plates to the [holder].", "You weld Gygax Armor Plates to the [holder].") else user.visible_message("[user] unfastens Gygax Armor Plates.", "You unfasten Gygax Armor Plates.") holder.icon_state = "gygax18" @@ -565,7 +565,7 @@ ) /datum/construction/mecha/firefighter_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder]") holder.overlays += used_atom.icon_state+"+o" qdel(used_atom) return 1 @@ -605,36 +605,36 @@ //5 list("key"=/obj/item/weapon/weldingtool, "backkey"=/obj/item/weapon/wrench, - "desc"="Internal armor is wrenched"), + "desc"="Internal armor is wrenched."), //6 list("key"=/obj/item/weapon/wrench, "backkey"=/obj/item/weapon/crowbar, - "desc"="Internal armor is installed"), + "desc"="Internal armor is installed."), //7 list("key"=/obj/item/stack/sheet/plasteel, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Peripherals control module is secured"), + "desc"="Peripherals control module is secured."), //8 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Peripherals control module is installed"), + "desc"="Peripherals control module is installed."), //9 list("key"=/obj/item/weapon/circuitboard/mecha/ripley/peripherals, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Central control module is secured"), + "desc"="Central control module is secured."), //10 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Central control module is installed"), + "desc"="Central control module is installed."), //11 list("key"=/obj/item/weapon/circuitboard/mecha/ripley/main, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is adjusted"), + "desc"="The wiring is adjusted."), //12 list("key"=/obj/item/weapon/wirecutters, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is added"), + "desc"="The wiring is added."), //13 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/weapon/screwdriver, @@ -658,50 +658,50 @@ //TODO: better messages. switch(index) if(15) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "fireripley1" if(14) if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "fireripley2" else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "fireripley0" if(13) if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "fireripley3" else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "fireripley1" if(12) if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "fireripley4" else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "fireripley2" if(11) if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) holder.icon_state = "fireripley5" else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "fireripley3" if(10) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "fireripley6" else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder)) holder.icon_state = "fireripley4" if(9) if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) holder.icon_state = "fireripley7" else @@ -712,12 +712,12 @@ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "fireripley8" else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder)) holder.icon_state = "fireripley6" if(7) if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") holder.icon_state = "fireripley9" else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") @@ -725,48 +725,48 @@ if(6) if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") holder.icon_state = "fireripley10" else - user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 holder.icon_state = "fireripley8" if(5) if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") holder.icon_state = "fireripley11" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") holder.icon_state = "fireripley9" if(4) if(diff==FORWARD) - user.visible_message("[user] starts to install the external armor layer to [holder].", "You start to install the external armor layer to [holder].") + user.visible_message("[user] starts to install the external armor layer to the [holder].", "You start to install the external armor layer to the [holder].") holder.icon_state = "fireripley12" else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") holder.icon_state = "fireripley10" if(3) if(diff==FORWARD) - user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") + user.visible_message("[user] installs the external reinforced armor layer to the [holder].", "You install the external reinforced armor layer to the [holder].") holder.icon_state = "fireripley13" else - user.visible_message("[user] removes the external armor from [holder].", "You remove the external armor from [holder].") + user.visible_message("[user] removes the external armor from the [holder].", "You remove the external armor from the [holder].") var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 holder.icon_state = "fireripley11" if(2) if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") holder.icon_state = "fireripley14" else - user.visible_message("[user] pries external armor layer from [holder].", "You pry external armor layer from [holder].") + user.visible_message("[user] pries external armor layer from the [holder].", "You pry external armor layer from the [holder].") var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 holder.icon_state = "fireripley12" if(1) if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + user.visible_message("[user] welds the external armor layer to the [holder].", "You weld the external armor layer to the [holder].") else user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") holder.icon_state = "fireripley13" @@ -792,7 +792,7 @@ return check_all_steps(used_atom,user) /datum/construction/mecha/honker_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder]") holder.overlays += used_atom.icon_state+"+o" qdel(used_atom) return 1 @@ -834,19 +834,19 @@ //TODO: better messages. switch(step) if(10) - user.visible_message("[user] installs the central control module into [holder].", "You install the central control module into [holder].") + user.visible_message("[user] installs the central control module into the [holder].", "You install the central control module into the [holder].") qdel(used_atom) if(8) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) if(6) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") qdel(used_atom) if(4) - user.visible_message("[user] puts clown wig and mask on [holder].", "You put clown wig and mask on [holder].") + user.visible_message("[user] puts clown wig and mask on the [holder].", "You put clown wig and mask on the [holder].") qdel(used_atom) if(2) - user.visible_message("[user] puts clown boots on [holder].", "You put clown boots on [holder].") + user.visible_message("[user] puts clown boots on the [holder].", "You put clown boots on the [holder].") qdel(used_atom) return 1 @@ -865,7 +865,7 @@ ) /datum/construction/mecha/durand_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder]") holder.overlays += used_atom.icon_state+"+o" qdel(used_atom) return 1 @@ -900,59 +900,59 @@ //4 list("key"=/obj/item/weapon/weldingtool, "backkey"=/obj/item/weapon/wrench, - "desc"="Internal armor is wrenched"), + "desc"="Internal armor is wrenched."), //5 list("key"=/obj/item/weapon/wrench, "backkey"=/obj/item/weapon/crowbar, - "desc"="Internal armor is installed"), + "desc"="Internal armor is installed."), //6 list("key"=/obj/item/stack/sheet/metal, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Advanced capacitor is secured"), + "desc"="Super capacitor is secured."), //7 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Advanced capacitor is installed"), + "desc"="Super capacitor is installed."), //8 - list("key"=/obj/item/weapon/stock_parts/capacitor/adv, + list("key"=/obj/item/weapon/stock_parts/capacitor/super, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Advanced scanner module is secured"), + "desc"="Phasic scanner module is secured."), //9 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Advanced scanner module is installed"), + "desc"="Phasic scanner module is installed."), //10 - list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, + list("key"=/obj/item/weapon/stock_parts/scanning_module/phasic, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Scanning module is secured"), + "desc"="Scanning module is secured."), //11 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Scanning module is installed"), + "desc"="Scanning module is installed."), //12 list("key"=/obj/item/weapon/circuitboard/mecha/durand/targeting, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Peripherals control module is secured"), + "desc"="Peripherals control module is secured."), //13 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Peripherals control module is installed"), + "desc"="Peripherals control module is installed."), //14 list("key"=/obj/item/weapon/circuitboard/mecha/durand/peripherals, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Central control module is secured"), + "desc"="Central control module is secured."), //15 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Central control module is installed"), + "desc"="Central control module is installed."), //16 list("key"=/obj/item/weapon/circuitboard/mecha/durand/main, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is adjusted"), + "desc"="The wiring is adjusted."), //17 list("key"=/obj/item/weapon/wirecutters, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is added"), + "desc"="The wiring is added."), //18 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/weapon/screwdriver, @@ -977,50 +977,50 @@ //TODO: better messages. switch(index) if(20) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "durand1" if(19) if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "durand2" else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "durand0" if(18) if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "durand3" else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "durand1" if(17) if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "durand4" else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "durand2" if(16) if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) holder.icon_state = "durand5" else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "durand3" if(15) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "durand6" else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/weapon/circuitboard/mecha/durand/main(get_turf(holder)) holder.icon_state = "durand4" if(14) if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) holder.icon_state = "durand7" else @@ -1031,12 +1031,12 @@ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "durand8" else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/weapon/circuitboard/mecha/durand/peripherals(get_turf(holder)) holder.icon_state = "durand6" if(12) if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") qdel(used_atom) holder.icon_state = "durand9" else @@ -1047,12 +1047,12 @@ user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") holder.icon_state = "durand10" else - user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + user.visible_message("[user] removes the weapon control module from the [holder].", "You remove the weapon control module from the [holder].") new /obj/item/weapon/circuitboard/mecha/durand/targeting(get_turf(holder)) holder.icon_state = "durand8" if(10) if(diff==FORWARD) - user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + user.visible_message("[user] installs phasic scanner module to the [holder].", "You install phasic scanner module to the [holder].") qdel(used_atom) holder.icon_state = "durand11" else @@ -1060,70 +1060,70 @@ holder.icon_state = "durand9" if(9) if(diff==FORWARD) - user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + user.visible_message("[user] secures the phasic scanner module.", "You secure the phasic scanner module.") holder.icon_state = "durand12" else - user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") - new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) + user.visible_message("[user] removes the phasic scanner module from the [holder].", "You remove the phasic scanner module from the [holder].") + new /obj/item/weapon/stock_parts/scanning_module/phasic(get_turf(holder)) holder.icon_state = "durand10" if(8) if(diff==FORWARD) - user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + user.visible_message("[user] installs super capacitor to the [holder].", "You install super capacitor to the [holder].") qdel(used_atom) holder.icon_state = "durand13" else - user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") + user.visible_message("[user] unfastens the phasic scanner module.", "You unfasten the phasic scanner module.") holder.icon_state = "durand11" if(7) if(diff==FORWARD) - user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + user.visible_message("[user] secures the super capacitor.", "You secure the super capacitor.") holder.icon_state = "durand14" else - user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") - new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) + user.visible_message("[user] removes the super capacitor from the [holder].", "You remove the super capacitor from the [holder].") + new /obj/item/weapon/stock_parts/capacitor/super(get_turf(holder)) holder.icon_state = "durand12" if(6) if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") holder.icon_state = "durand15" else - user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") + user.visible_message("[user] unfastens the super capacitor.", "You unfasten the super capacitor.") holder.icon_state = "durand13" if(5) if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") holder.icon_state = "durand16" else - user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) MS.amount = 5 holder.icon_state = "durand14" if(4) if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") holder.icon_state = "durand17" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") holder.icon_state = "durand15" if(3) if(diff==FORWARD) - user.visible_message("[user] installs Durand Armor Plates to [holder].", "You install Durand Armor Plates to [holder].") + user.visible_message("[user] installs Durand Armor Plates to the [holder].", "You install Durand Armor Plates to the [holder].") qdel(used_atom) holder.icon_state = "durand18" else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") holder.icon_state = "durand16" if(2) if(diff==FORWARD) user.visible_message("[user] secures Durand Armor Plates.", "You secure Durand Armor Plates.") holder.icon_state = "durand19" else - user.visible_message("[user] pries Durand Armor Plates from [holder].", "You pry Durand Armor Plates from [holder].") + user.visible_message("[user] pries Durand Armor Plates from the [holder].", "You pry Durand Armor Plates from the [holder].") new /obj/item/mecha_parts/part/durand_armor(get_turf(holder)) holder.icon_state = "durand17" if(1) if(diff==FORWARD) - user.visible_message("[user] welds Durand Armor Plates to [holder].", "You weld Durand Armor Plates to [holder].") + user.visible_message("[user] welds Durand Armor Plates to the [holder].", "You weld Durand Armor Plates to the [holder].") else user.visible_message("[user] unfastens Durand Armor Plates.", "You unfasten Durand Armor Plates.") holder.icon_state = "durand18" @@ -1134,6 +1134,7 @@ feedback_inc("mecha_durand_created",1) return +//PHAZON /datum/construction/mecha/phazon_chassis result = "/obj/mecha/combat/phazon" @@ -1146,7 +1147,7 @@ ) /datum/construction/mecha/phazon_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder]") holder.overlays += used_atom.icon_state+"+o" qdel(used_atom) return 1 @@ -1154,8 +1155,303 @@ /datum/construction/mecha/phazon_chassis/action(atom/used_atom,mob/user as mob) return check_all_steps(used_atom,user) +/datum/construction/mecha/phazon_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/phazon(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "phazon0" + const_holder.density = 1 + del src + return + +/datum/construction/reversible/mecha/phazon + result = "/obj/mecha/combat/phazon" + steps = list( + //1 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=/obj/item/weapon/wrench, + "desc"="External armor is wrenched."), + //2 + list("key"=/obj/item/weapon/wrench, + "backkey"=/obj/item/weapon/crowbar, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/mecha_parts/part/phazon_armor, + "backkey"=/obj/item/weapon/weldingtool, + "desc"="Phase armor is welded."), + //4 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=/obj/item/weapon/wrench, + "desc"="Phase armor is wrenched."), + //5 + list("key"=/obj/item/weapon/wrench, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Phase armor is installed."), + //6 + list("key"=/obj/item/stack/sheet/plasteel, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The bluespace crystal is engaged."), + //7 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/wirecutters, + "desc"="The bluespace crystal is connected."), + //8 + list("key"=/obj/item/stack/cable_coil, + "backkey"=/obj/item/weapon/crowbar, + "desc"="The bluespace crystal is installed."), + //9 + list("key"=/obj/item/bluespace_crystal, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Super capacitor is secured."), + //10 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Super capacitor is installed."), + //11 + list("key"=/obj/item/weapon/stock_parts/capacitor/super, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Phasic scanner module is secured."), + //12 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Phasic scanner module is installed."), + //13 + list("key"=/obj/item/weapon/stock_parts/scanning_module/phasic, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Scanning module is secured."), + //14 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Scanning module is installed."), + //15 + list("key"=/obj/item/weapon/circuitboard/mecha/phazon/targeting, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Peripherals control module is secured."), + //16 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Peripherals control module is installed"), + //17 + list("key"=/obj/item/weapon/circuitboard/mecha/phazon/peripherals, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Central control module is secured."), + //18 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Central control module is installed."), + //19 + list("key"=/obj/item/weapon/circuitboard/mecha/phazon/main, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The wiring is adjusted."), + //20 + list("key"=/obj/item/weapon/wirecutters, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The wiring is added."), + //21 + list("key"=/obj/item/stack/cable_coil, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The hydraulic systems are active."), + //22 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/wrench, + "desc"="The hydraulic systems are connected."), + //23 + list("key"=/obj/item/weapon/wrench, + "desc"="The hydraulic systems are disconnected.") + ) +/datum/construction/reversible/mecha/phazon/action(atom/used_atom,mob/user as mob) + return check_step(used_atom,user) + +/datum/construction/reversible/mecha/phazon/custom_action(index, diff, atom/used_atom, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(index) + if(23) + user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") + holder.icon_state = "phazon1" + if(22) + if(diff==FORWARD) + user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") + holder.icon_state = "phazon2" + else + user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") + holder.icon_state = "phazon0" + if(21) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") + holder.icon_state = "phazon3" + else + user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") + holder.icon_state = "phazon1" + if(20) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") + holder.icon_state = "phazon4" + else + user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "phazon2" + if(19) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") + qdel(used_atom) + holder.icon_state = "phazon5" + else + user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") + holder.icon_state = "phazon3" + if(18) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "phazon6" + else + user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") + new /obj/item/weapon/circuitboard/mecha/phazon/main(get_turf(holder)) + holder.icon_state = "phazon4" + if(17) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") + qdel(used_atom) + holder.icon_state = "phazon7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "phazon5" + if(16) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "phazon8" + else + user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") + new /obj/item/weapon/circuitboard/mecha/phazon/peripherals(get_turf(holder)) + holder.icon_state = "phazon6" + if(15) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") + qdel(used_atom) + holder.icon_state = "phazon9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "phazon7" + if(14) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "phazon10" + else + user.visible_message("[user] removes the weapon control module from the [holder].", "You remove the weapon control module from the [holder].") + new /obj/item/weapon/circuitboard/mecha/phazon/targeting(get_turf(holder)) + holder.icon_state = "phazon8" + if(13) + if(diff==FORWARD) + user.visible_message("[user] installs phasic scanner module to the [holder].", "You install phasic scanner module to the [holder].") + qdel(used_atom) + holder.icon_state = "phazon11" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "phazon9" + if(12) + if(diff==FORWARD) + user.visible_message("[user] secures the phasic scanner module.", "You secure the phasic scanner module.") + holder.icon_state = "phazon12" + else + user.visible_message("[user] removes the phasic scanner module from the [holder].", "You remove the phasic scanner module from the [holder].") + new /obj/item/weapon/stock_parts/scanning_module/phasic(get_turf(holder)) + holder.icon_state = "phazon10" + if(11) + if(diff==FORWARD) + user.visible_message("[user] installs super capacitor to the [holder].", "You install super capacitor to the [holder].") + qdel(used_atom) + holder.icon_state = "phazon13" + else + user.visible_message("[user] unfastens the phasic scanner module.", "You unfasten the phasic scanner module.") + holder.icon_state = "phazon11" + if(10) + if(diff==FORWARD) + user.visible_message("[user] secures the super capacitor.", "You secure the super capacitor.") + holder.icon_state = "phazon14" + else + user.visible_message("[user] removes the super capacitor from the [holder].", "You remove the super capacitor from the [holder].") + new /obj/item/weapon/stock_parts/capacitor/super(get_turf(holder)) + holder.icon_state = "phazon12" + if(9) + if(diff==FORWARD) + user.visible_message("[user] installs the bluespace crystal.", "You install the bluespace crystal.") + qdel(used_atom) + holder.icon_state = "phazon15" + else + user.visible_message("[user] unsecures the super capacitor from the [holder].", "You unsecure the super capacitor from the [holder].") + holder.icon_state = "phazon13" + if(8) + if(diff==FORWARD) + user.visible_message("[user] connects the bluespace crystal.", "You connect the bluespace crystal.") + holder.icon_state = "phazon16" + else + user.visible_message("[user] removes the bluespace crystal from the [holder].", "You remove the bluespace crystal from the [holder].") + new /obj/item/bluespace_crystal(get_turf(holder)) + holder.icon_state = "phazon14" + if(7) + if(diff==FORWARD) + user.visible_message("[user] engages the bluespace crystal.", "You engage the bluespace crystal.") + holder.icon_state = "phazon17" + else + user.visible_message("[user] disconnects the bluespace crystal from the [holder].", "You disconnect the bluespace crystal from the [holder].") + holder.icon_state = "phazon15" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs the phase armor layer to the [holder].", "You install the phase armor layer to the [holder].") + holder.icon_state = "phazon18" + else + user.visible_message("[user] disengages the bluespace crystal.", "You disengage the bluespace crystal.") + holder.icon_state = "phazon16" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures the phase armor layer.", "You secure the phase armor layer.") + holder.icon_state = "phazon19" + else + user.visible_message("[user] pries the phase armor layer from the [holder].", "You pry the phase armor layer from the [holder].") + var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "phazon17" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds the phase armor layer to the [holder].", "You weld the phase armor layer to the [holder].") + holder.icon_state = "phazon20" + else + user.visible_message("[user] unfastens the phase armor layer.", "You unfasten the phase armor layer.") + holder.icon_state = "phazon18" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs Phazon Armor Plates to the [holder].", "You install Phazon Armor Plates to the [holder].") + qdel(used_atom) + holder.icon_state = "phazon21" + else + user.visible_message("[user] cuts phase armor layer from the [holder].", "You cut the phase armor layer from the [holder].") + holder.icon_state = "phazon19" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures Phazon Armor Plates.", "You secure Phazon Armor Plates.") + holder.icon_state = "phazon22" + else + user.visible_message("[user] pries Phazon Armor Plates from the [holder].", "You pry Phazon Armor Plates from the [holder].") + new /obj/item/mecha_parts/part/phazon_armor(get_turf(holder)) + holder.icon_state = "phazon20" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds Phazon Armor Plates to the [holder].", "You weld Phazon Armor Plates to the [holder].") + else + user.visible_message("[user] unfastens Phazon Armor Plates.", "You unfasten Phazon Armor Plates.") + holder.icon_state = "phazon21" + return 1 + +/datum/construction/reversible/mecha/phazon/spawn_result() + ..() + feedback_inc("mecha_phazon_created",1) + return + +//ODYSSEUS /datum/construction/mecha/odysseus_chassis steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso),//1 @@ -1167,7 +1463,7 @@ ) /datum/construction/mecha/odysseus_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder]") holder.overlays += used_atom.icon_state+"+o" qdel(used_atom) return 1 @@ -1203,35 +1499,35 @@ //4 list("key"=/obj/item/weapon/weldingtool, "backkey"=/obj/item/weapon/wrench, - "desc"="Internal armor is wrenched"), + "desc"="Internal armor is wrenched."), //5 list("key"=/obj/item/weapon/wrench, "backkey"=/obj/item/weapon/crowbar, - "desc"="Internal armor is installed"), + "desc"="Internal armor is installed."), //6 list("key"=/obj/item/stack/sheet/metal, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Peripherals control module is secured"), + "desc"="Peripherals control module is secured."), //7 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Peripherals control module is installed"), + "desc"="Peripherals control module is installed."), //8 list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, "backkey"=/obj/item/weapon/screwdriver, - "desc"="Central control module is secured"), + "desc"="Central control module is secured."), //9 list("key"=/obj/item/weapon/screwdriver, "backkey"=/obj/item/weapon/crowbar, - "desc"="Central control module is installed"), + "desc"="Central control module is installed."), //10 list("key"=/obj/item/weapon/circuitboard/mecha/odysseus/main, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is adjusted"), + "desc"="The wiring is adjusted."), //11 list("key"=/obj/item/weapon/wirecutters, "backkey"=/obj/item/weapon/screwdriver, - "desc"="The wiring is added"), + "desc"="The wiring is added."), //12 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/weapon/screwdriver, @@ -1255,50 +1551,50 @@ //TODO: better messages. switch(index) if(14) - user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "odysseus1" if(13) if(diff==FORWARD) - user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "odysseus2" else - user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "odysseus0" if(12) if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "odysseus3" else - user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "odysseus1" if(11) if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "odysseus4" else - user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "odysseus2" if(10) if(diff==FORWARD) - user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) holder.icon_state = "odysseus5" else - user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "odysseus3" if(9) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "odysseus6" else - user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/weapon/circuitboard/mecha/odysseus/main(get_turf(holder)) holder.icon_state = "odysseus4" if(8) if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) holder.icon_state = "odysseus7" else @@ -1309,52 +1605,52 @@ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "odysseus8" else - user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/weapon/circuitboard/mecha/odysseus/peripherals(get_turf(holder)) holder.icon_state = "odysseus6" if(6) if(diff==FORWARD) - user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") holder.icon_state = "odysseus9" else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") holder.icon_state = "odysseus7" if(5) if(diff==FORWARD) - user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") holder.icon_state = "odysseus10" else - user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) MS.amount = 5 holder.icon_state = "odysseus8" if(4) if(diff==FORWARD) - user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") holder.icon_state = "odysseus11" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") holder.icon_state = "odysseus9" if(3) if(diff==FORWARD) - user.visible_message("[user] installs [used_atom] layer to [holder].", "You install external reinforced armor layer to [holder].") + user.visible_message("[user] installs [used_atom] layer to the [holder].", "You install the external reinforced armor layer to the [holder].") holder.icon_state = "odysseus12" else - user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") holder.icon_state = "odysseus10" if(2) if(diff==FORWARD) - user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") holder.icon_state = "odysseus13" else var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 - user.visible_message("[user] pries [MS] from [holder].", "You pry [MS] from [holder].") + user.visible_message("[user] pries [MS] from the [holder].", "You pry [MS] from the [holder].") holder.icon_state = "odysseus11" if(1) if(diff==FORWARD) - user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + user.visible_message("[user] welds the external armor layer to the [holder].", "You weld the external armor layer to the [holder].") holder.icon_state = "odysseus14" else user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index e360a94d5c5..068d175c06e 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -296,7 +296,7 @@ /obj/item/mecha_parts/chassis/phazon name = "\improper Phazon chassis" - origin_tech = "materials=7" + origin_tech = "materials=6" /obj/item/mecha_parts/chassis/phazon/New() ..() @@ -304,20 +304,23 @@ /obj/item/mecha_parts/part/phazon_torso name="\improper Phazon torso" + desc="A Phazon torso part. The socket for the bluespace core that powers the exosuit's unique phase drives is located in the middle." icon_state = "phazon_harness" construction_time = 300 construction_cost = list("metal"=35000,"glass"=10000,"plasma"=20000) - origin_tech = "programming=5;materials=7;bluespace=6;powerstorage=6" + origin_tech = "programming=5;materials=6;bluespace=5;powerstorage=5" /obj/item/mecha_parts/part/phazon_head name="\improper Phazon head" + desc="A Phazon head. Its sensors are carefully calibrated to provide vision and data even when the exosuit is phasing." icon_state = "phazon_head" construction_time = 200 construction_cost = list("metal"=15000,"glass"=5000,"plasma"=10000) - origin_tech = "programming=4;materials=5;magnets=6" + origin_tech = "programming=4;materials=5;magnets=5" /obj/item/mecha_parts/part/phazon_left_arm name="\improper Phazon left arm" + desc="A Phazon left arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." icon_state = "phazon_l_arm" construction_time = 200 construction_cost = list("metal"=20000,"plasma"=10000) @@ -325,6 +328,7 @@ /obj/item/mecha_parts/part/phazon_right_arm name="\improper Phazon right arm" + desc="A Phazon right arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." icon_state = "phazon_r_arm" construction_time = 200 construction_cost = list("metal"=20000,"plasma"=10000) @@ -332,6 +336,7 @@ /obj/item/mecha_parts/part/phazon_left_leg name="\improper Phazon left leg" + desc="A Phazon left leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." icon_state = "phazon_l_leg" construction_time = 200 construction_cost = list("metal"=20000,"plasma"=10000) @@ -339,11 +344,19 @@ /obj/item/mecha_parts/part/phazon_right_leg name="\improper Phazon right leg" + desc="A Phazon right leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." icon_state = "phazon_r_leg" construction_time = 200 construction_cost = list("metal"=20000,"plasma"=10000) origin_tech = "materials=5;bluespace=3;magnets=3" +/obj/item/mecha_parts/part/phazon_armor + name="Phazon armor" + desc="Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties." + icon_state = "phazon_armor" + construction_time = 300 + construction_cost = list("metal"=45000,"plasma"=30000) + origin_tech = "materials=6;bluespace=5;magnets=5" ///////// Odysseus @@ -494,4 +507,16 @@ name = "circuit board (Odysseus Central Control module)" icon_state = "mainboard" +/obj/item/weapon/circuitboard/mecha/phazon + origin_tech = "programming=5" +/obj/item/weapon/circuitboard/mecha/phazon/peripherals + name = "circuit board (Phazon Peripherals Control module)" + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/phazon/targeting + name = "circuit board (Phazon Weapon Control and Targeting module)" + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/phazon/main + name = "circuit board (Phazon Central Control module)" \ No newline at end of file diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 73c06025803..e90531788ad 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -1,10 +1,13 @@ /obj/mecha/working/ripley - desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world." + desc = "Autonomous Power Loader Unit. This newer model is refitted with powerful armour against the dangers of the EVA mining process." name = "\improper APLU \"Ripley\"" icon_state = "ripley" - step_in = 6 + step_in = 5 max_temperature = 20000 health = 200 + lights_power = 7 + deflect_chance = 15 + damage_absorption = list("brute"=0.6,"bomb"=0.2) wreckage = /obj/structure/mecha_wreckage/ripley var/list/cargo = new var/cargo_capacity = 15 @@ -16,19 +19,117 @@ */ /obj/mecha/working/ripley/Destroy() + while(src.damage_absorption.["brute"] < 0.6) + new /obj/item/asteroid/goliath_hide(src.loc) + src.damage_absorption.["brute"] = src.damage_absorption.["brute"] + 0.1 //If a goliath-plated ripley gets killed, all the plates drop for(var/atom/movable/A in src.cargo) A.loc = loc step_rand(A) cargo.Cut() ..() +/obj/mecha/working/ripley/go_out() + if(!src.occupant) return + var/atom/movable/mob_container + if(ishuman(occupant)) + mob_container = src.occupant + if(occupant.hud_used && last_user_hud) + occupant.hud_used.show_hud(HUD_STYLE_STANDARD) + else if(istype(occupant, /mob/living/carbon/brain)) + var/mob/living/carbon/brain/brain = occupant + mob_container = brain.container + else + return + if(mob_container.forceMove(src.loc))//ejecting mob container + src.log_message("[mob_container] moved out.") + occupant.reset_view() + src.occupant << browse(null, "window=exosuit") + if(istype(mob_container, /obj/item/device/mmi)) + var/obj/item/device/mmi/mmi = mob_container + if(mmi.brainmob) + occupant.loc = mmi + mmi.mecha = null + src.occupant.canmove = 0 + src.verbs += /obj/mecha/verb/eject + src.occupant = null + src.icon_state = initial(icon_state)+"-open" + if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open") + else if (src.damage_absorption.["brute"] == 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open") + src.dir = dir_in + return + +/obj/mecha/working/ripley/moved_inside(var/mob/living/carbon/human/H as mob) + if(H && H.client && H in range(1)) + H.reset_view(src) + H.stop_pulling() + H.forceMove(src) + if(H.hud_used) + last_user_hud = H.hud_used.hud_shown + H.hud_used.show_hud(HUD_STYLE_REDUCED) + src.occupant = H + src.add_fingerprint(H) + src.forceMove(src.loc) + src.log_append_to_last("[H] moved in as pilot.") + src.icon_state = initial(icon_state) + if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") + else if (src.damage_absorption.["brute"] == 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") + dir = dir_in + playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) + if(!hasInternalDamage()) + src.occupant << sound('sound/mecha/nominal.ogg',volume=50) + return 1 + else + return 0 + +/obj/mecha/working/ripley/mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc as obj,mob/user as mob) + if(mmi_as_oc && user in range(1)) + if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client) + user << "Consciousness matrix not detected." + return 0 + else if(mmi_as_oc.brainmob.stat) + user << "Beta-rhythm below acceptable level." + return 0 + if(!user.unEquip(mmi_as_oc)) + user << "\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]" + return + var/mob/brainmob = mmi_as_oc.brainmob + brainmob.reset_view(src) + occupant = brainmob + brainmob.loc = src //should allow relaymove + brainmob.canmove = 1 + mmi_as_oc.loc = src + mmi_as_oc.mecha = src + src.verbs -= /obj/mecha/verb/eject + src.icon_state = initial(icon_state) + if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") + else if (src.damage_absorption.["brute"] == 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") + dir = dir_in + src.log_message("[mmi_as_oc] moved in as pilot.") + if(!hasInternalDamage()) + src.occupant << sound('sound/mecha/nominal.ogg',volume=50) + return 1 + else + return 0 + /obj/mecha/working/ripley/firefighter desc = "Standart APLU chassis was refitted with additional thermal protection and cistern." name = "\improper APLU \"Firefighter\"" icon_state = "firefighter" max_temperature = 65000 health = 250 - lights_power = 8 + lights_power = 7 damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5) wreckage = /obj/structure/mecha_wreckage/ripley/firefighter @@ -38,7 +139,7 @@ icon_state = "deathripley" step_in = 3 opacity=0 - lights_power = 60 + lights_power = 7 wreckage = /obj/structure/mecha_wreckage/ripley/deathripley step_energy_drain = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 5a36143768c..c80ad4fd0df 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -423,11 +423,32 @@ if(proximity_flag) if(istype(target, /obj/item/clothing/suit/space/hardsuit/mining) || istype(target, /obj/item/clothing/head/helmet/space/hardsuit/mining)) var/obj/item/clothing/C = target - var/current_armor = C.armor + var/list/current_armor = C.armor if(current_armor.["melee"] < 80) current_armor.["melee"] = min(current_armor.["melee"] + 10, 80) user << "You strengthen [target], improving its resistance against melee attacks." qdel(src) else user << "You can't improve [C] any further." - return + return + if(istype(target, /obj/mecha/working/ripley)) + var/obj/mecha/D = target + var/list/damage_absorption = D.damage_absorption + if(damage_absorption.["brute"] > 0.3) + damage_absorption.["brute"] = max(damage_absorption.["brute"] - 0.1, 0.3) + user << "You strengthen [target], improving its resistance against melee attacks." + qdel(src) + if(D.icon_state == "ripley-open") + D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open") + D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates." + else + user << "You can't add armour onto the mech while someone is inside!" + if(damage_absorption.["brute"] == 0.3) + if(D.icon_state == "ripley-open") + D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open") + D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter." + else + user << "You can't add armour onto the mech while someone is inside!" + else + user << "You can't improve [D] any further." + return \ No newline at end of file diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index f50c4b9b256..82a242fa775 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -119,6 +119,33 @@ datum/design/honker_targ materials = list("$glass" = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting +datum/design/phazon_main + name = "Exosuit Design (\"Phazon\" Central Control module)" + desc = "Allows for the construction of a \"Phazon\" Central Control module." + id = "phazon_main" + req_tech = list("programming" = 5, "materials" = 7, "powerstorage" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/phazon/main + +datum/design/phazon_peri + name = "Exosuit Design (\"Phazon\" Peripherals Control module)" + desc = "Allows for the construction of a \"Phazon\" Peripheral Control module." + id = "phazon_peri" + req_tech = list("programming" = 5, "bluespace" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/phazon/peripherals + +datum/design/phazon_targ + name = "Exosuit Design (\"Phazon\" Weapons & Targeting Control module)" + desc = "Allows for the construction of a \"Phazon\" Weapons & Targeting Control module." + id = "phazon_targ" + req_tech = list("programming" = 5, "magnets" = 6) + build_type = IMPRINTER + materials = list("$glass" = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/mecha/phazon/targeting + //////////////////////////////////////// /////////// Mecha Equpment ///////////// //////////////////////////////////////// diff --git a/icons/mecha/mech_construct.dmi b/icons/mecha/mech_construct.dmi index bdce08c80223e427d6627d9fca7652f3a2b23770..bf8ba802916aacc80cdff0c3fc85ce8ed6758358 100644 GIT binary patch delta 10936 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 U%~n-KfPjCWBo!pe#0>ra52C^)5C8xG delta 9871 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 diff --git a/icons/mecha/mech_construction.dmi b/icons/mecha/mech_construction.dmi index d0a145caff5f1b044d2860a00fbcdd3a1910191d..664aab343be6d846b4ebf2645b692067f647e4fc 100644 GIT binary patch literal 17297 zcmZsC2Ut_h@^=8~Ri#N+x^(FT2t`FeDFV_7h!myQ&_f4BKtTcNMFc^LAiabh>AguH z^iJr6KnP!a@4f%_e9x1d`hi_X=x1&4S*Iji<%yAE$Qy=ev9>KLfpO3&`>io zGhJO>Z*LzZB_%&UKM)9{udlDEsVyrj>*(lcKtkd-%E-ZS*V@|J!;Q_z$cX6=IrdOruNXs$H&XdOGrrc)vH%FHa0FUE(!_?F)=X@A3oI4(J?VG zH8C*(0+p1Nm4$`H)YQ~eRaK*-qy7E;_tVmdgAYY+ZC5q2L`^El?6FELt@^idi%bA`t+$b=$5#+q><^%M~@!expU_l0Emi; zYHn^uB9Woa097@hyn+|T_IW?5MoA0OZH^78fdwSj>FEiLWL%*-`400x6;tKa&h zEcO2V`?a;T=THz73KbR>wzRZNNlB5B18F}4hige6hf7}91>L@VJ4lmH^A%JtyhhUg zTG`b5-J3jv@7G@ju4Uh3l&ic1f6RN?kQ1e3i5~*r!#B_TbA=t!qtaWXO=8k}51#Is z-NnnB!27w50YGJa#vVUYEdmTpydT3IOwcSv;mi-4ht56t46$pcqIS$Eh;68noL6-*Q>uytPr zs)INcZ;WUB+;4I4_$))4Jc1tMnfvxx@sp7u@8F)bxm!WvVH6IA;6m%?e|JPU`;N5!T&< zYKn0*kfp0t#`I(5Y_;%Ej@{u8;W&PK)6|9~MKeZ+u`0RLl%fUox9Zy1&V&Tu)MvPlDIYwE|EH1LoiYObSC|imMo2%}UyBkH!{FcJFnhEzq(3=lFYTo(y z5j>=Q^Wju2b3*EO`j*poWD8UQlx>-MVV0;R`=X-9rqV)82l@<3;9TGyzQh~Y2mo*a zG#{!O`ep9T$3a=)!CVJf#LdrdXy$Uq+<5q)hCBV1fDLERtNuU%h|9`1{}aSnK+8_n zTvf}7PtuD-@wXg?Kbrr<&7X6mrrB_JSeZ ze0?3x$mv1>Nx*MWvzV6z?$ETX*=`)!GXsihuVN)ythDQ!s||Bw6-N$Lf>n39LiPigVBHHOZH?=V+ZUl13G5N;EOWRU^F-Qq z{I);c9M2Vs;m!T~S`3(lOgqwn_F zhtAl!OFET&6W{iB(2mk_X8Kic>yGFG%P$$Yz2*2i>!O=mU75EpqVp=?b)&<4UM|kG z6DBo{x5EuYJ3+uwqjlL*oahOp4DN&6Q3y<>DKGj_u``>Pv!`1CYMIUaDWN=H-f<{& zWr!gdOOs=giVl>U{Hc2Ou{e>ZX=qcCq;zY?97?HhBmY5k(U|Yg2b~-M*`|Y6EYg$} zk6LP#r-P@b8*q%?n-{@eIbA$(r2D`=7S&F{c>_%=-5tADagRowav$d8jBE{-drI728T!o9Q)%$D z!`$OfoAd<|{A1~A65zeqn7xjp6dywfSUB5|ar(uJsoHUp=@eBttE zBS$VZUY>Q}e}MY1aWw>;&Ez0)@x1N|Bf5Rb zKk3_Bm*h_gYv7J}W;x7eB&CGA+Q->!AJv!Mj-ThUb& zOX~nAHbLLa;jTz&c9Ad_3Pvsf;I={7erhmu(QE@FGCuy9!mq`OT&sn~>ibjOI#kN` ziwT#>y<%VqP`~24l@sJI$$?mh*$H}Yt~22qWXpsExqa0mkq6F;%%26lOKzYN?Xx!O ztZ7R+wZl`*;T-gkaeA62=U)H1w+e2LHr(clk6(D>Y7_st*(pArdNDN|h--#BR9?}l z@>na2hY_TuwJAv5T@Bp82ssb?eJ+prK}+2(^n;3ea*L&RyZ$%lo8JGgV9w5C>>cb` zD{Jy}+fs7UJJj_pXO&Qkt^m@?4)1o&8y5k z>g?)PP`^=KEqsAxSEt9>ptVDE^_>}gsoVl7E#lt(9G+2@_Y05I^|7IRfjAb^Mi2oPEYr8!ex29 zlgQuG?f$L|bfijW6(3ryPszzi+6naag6oq}yjMX$_TSd`&Oi0guK&DS>kgb{U(%_X zj+~yV``e5%?glW@>%k^n^$4$h-XgW{9Y^IG61^S)(L+bZJz9ZUFCWm!39BEQ1iG5e zZSoJg1hQUzZCG(G$dRg;tQ{Q=n8tIu3+^_+(Z(_6xR`>J0mi|uog)H%hs{22b$S!h zw_ua<1y%*&S+}+29Y}~(h*DW~~pmTpkX%4cL{D*Cy5dZy^h)p;deZkX(uNO>#<;rP$w9!b7rQQ5CFMXFUDeaca>g02o1x2#A=q6V55;6U z59KG`pJ30~%Z|>;Hg1Nmj|>)Pn0NE%L=|MbomH=nVWA8CE=ZQ4HcN)8YqT2n|c&UCgZAH;8{b?7ySvh(Z5;C_x{e! ztHZ;UtSj*<>l=%0^tGV(G80qjkZhRRXg>47Ah@9WNw{%>Ib&BW@F8i+J=eL)`1;PN zu)Kyo_0V6HL!37{6Q$`v=9g@kHERr=wlG%lvBQ>#wV01TvO=qi%OS6cH#CjYYbG=qYw>IDV;~e-@(2 zETk&kzGXn-IgWTU#7DcEllI!(ZQ$uHNWAyYq3CMG?t-P*TQ5lA1#12ydV~=o^Aq~= z<>Tgd2R`eMkAk$$zQ;l`VIA9nzNsB6-^Nf%qu4y9Z@cR+j^BPKpQ2mH?e=Xx#xk&3 z^CZ$pnj^Nl+_|Z&x#bKH>9lINe*3fDx4l=SOVE&))nr#<@Ove>}p>}h_S8>w5& zo6>Q)MYqpsAA+%Agy}9ho1LGmocasz=CnhvGnKzZv0CJ=qncb_HCUBWm#lQJW6_;v z1J4|#8jefwtF#Dym7WW8I{w^uey(VH9e$<#0vJ?JB704!CZ}xmeE>2?t>h3q&uo}e zZn%v_mm1$6-)m&>(e?pu`z|uK_bI-2=CrX|LeUl}E3^ID^JRPsdJJnqTvDH{&RVQ8IJJ*RQ@IA{VA z6mdMQ!G0sy5O;M8aeXD?uI)pKxaAr#S2DL)yHBUKTL9`g@N#aZGz@vKZ!2pd%M)|3 z`FN8gdw3jg{8?J%Km%WG0)4$vX-uib)@;%5 zG-ux=tHLC24*xgn@821FIxfV#MDkUA>|&ziZk{Kt32f&btNt_wXyU1Uw8)OSOkhLK zz1#nN*m5%lKz_aG#Tm)Dq#F9%^0sUDeA0YE6MMj(x{2*Bf0rVb-;qW6I`2==MtL%8 zK$p*^$=C(Snb2%JfoGb|PX-0z@!5l0*VHqB>P3tun|MzqQqM)y%iF-j@x%}b^g6}VeVE=kpnaOn>mWUvz5k-cl~>*^=lX+X z#hm8QoDB_je`DjCXvlAtbVg%#_*xNrOh7e)g=Xel>-u#hTprlW($Z=KKRo?7xV}p~ z3$}Ktx8rTH^QhZ#|3pdSN@kqaU*{xz%OZ{zFlHc9y5Iw(&^ zcEpGqAxWHNy`q#V!$8CBU9`fqFZ?#U07Ss1_4|7#tZyHT38f zw>#x?p5;iWzn{juuI;$o@vhRa<#em!2PJ%`g!IwKMz3W_Lljdgx zl+$+$=Km-+l>Y=r%yw2(Qw-~VuLQ?*gKaH6Ep@#-4lA>F+iSY7&PHFQ5>E8*X+VnO z6OG^aky;d2n%Mf(-Y10N_~m_{N*&_iLY(Jxnq?! z!S>!+LC+z@Q%-D@huLoWj-V*?QZrm=mf`Ajl!ta@{Lk6Xe_1LC0Z>Ao|9VD1HX_HC z@hlGbbo}MgypNE#Q19NzUYfygs5)Xv*6||)hd3mJw3*jIU$!Bm*EPzOw}HK}tT7ro zmiqI;?H$v3hR@??QIzXL`)wh~f$lLc5LLpnHu^quwRSPxcQM2?KM%Et6RfVfnM?{F z3`J8g?E+y$3rTUnlRpxX*HNR_Z{t|lmHz%@EPQdKdwnMC_}mf?zU-=gw6cD=HIT?g ze)ap~dEe@L*n?uo6-KtP+G+#FrWEk-{9}Q}m&W^_Y~cx&-0%d9Z1b}g1K4rI#oDLX z<%h=xY|_x~xW?(KO9DBHn@5y}g@DQxew|FYA#tgYuo5J*B93tgyo?dlkpgw=9~(Cp z2Z}Vo$`Uz2o(M6$kA#cHy4hcG>cN|rc zBTFvi==Wj4A%H#gs{T(ztvBx0u&zfwMlc~Aw)|+`X?Awhph#yF;JtcV4|qym^1OhP ztC*vx=k_Llu~xjWA66t2b_4CcD4LL-vkU-sD7owU&?1~hZJv|N1$o?baL`y)a2l-h z!`*6D84pvAhARCT)@|Po>Lx!nR&*aejNJWi;gsX#tV^CK+K2EeTrPhXe$l7+3@RT%4w3yaGjGJs&Y*x7!MQ@h`R@ftH04Cp02Thc`*zgV;fNSaO5vrEsFJ} zb!(}QJ5wyW?W{4=tIG~*SJsTmlEZyZ4)NNA+krR&ka&5bbXrh6YeffV7+U|+#?;kj zrD2;J9iAs-B#ZJ0+^`KG;e2qyAUE@UBXR&w(yet;c^%J?cPj^2hGA{rVW)N*0nEu; z-A;Ex0=ag6L4GcPs-$5;mR!nevw!J^*z1-dH=CTcV`qM4k5vQj{P@(B9ED|B1G$5) z4CuWfbg~B4zIO6B^_SH~ow#D1?`oG|$m$&|r_9EA?keeNf6YJTv;nK z-HAlgkAtj_A}&_VDvr%No`}yJ!99j+LQhRXpZ}{|X_)q9kq*0j!0Lpc@3tdzXhBi9 z{SP)cMcBT0-tEDwq2aB%@!st0^}4p(9B>W~it9pvIQGVGHyUi@Ha}r1Cp2zd?6uO6 zTb}N!xC%owr{79El8ep3b(Q~+u11ZYsf)Bk2^t)c1N(X^2Yb}T-CV-Yl8aXpc71m9 zuK<@lEN>a!s(Ma)q{NbI3s2-U_)qa0whB3$i-_b;97|ECnl*2ILaQ*k_geX?G;}n| z9f>)5M8ELN2w>06{o!W1V-QNh57jKd((@1KdL$hgH;=TOWe#>6?K(4un!d3vYm}kG zCiW3UM`aJ51KSc#%1jUe>moL9AyD_&eDlpish><4h} z{r%A4OdteB)%k3nsrVv(Ra?*Uor2q^4#F^xVd#1{6Ub|U+T1Uc1bgWfkOljcf$XYV zi=t#^zF#C}@j<2%Y-yH{Qw@Ig`a3lQbU8a5yr6Ww99MpMCnzGQ#|IpA*nEi@4nC_c z-&7^Kx{^Ou8UpuuLCv!p03Km~aF$Q^22mimJ=X6m^0 zi8G%>f~@BFN*)}rRVZc`3{6-jN9J@YU0r(BYqWwi`oPQC*|07pCFpBQnn0czk?$Do z<}y}PHWag#YKew~F!?&e(8v(lkldpt*h=F_kn*OgNC`;~jwVpn_~97ymMh z9e&KK;Es9V44&x#f9p)=^}jU|W)N!89A){(pNayp=*gU`dX3A3FM~CQ-4wh~9e3oK zvEnD8V(MWW2R3q3ie9R08>^VH21;!YaH9%AhYnGbT(b{&ogmw0QDJq<7CbzYxt#<7VHW<3Kwk@@U@8o|$W=bjdl)*AquW!)Qa651>B(r$<3q*w)Eb^~O+k zkElC}EoXIUHa+*weXtUGl4oPkf5#~(Nu^0{SE-q3>A|yGQe~6a&mqBhUT2N^|MJ?< zxmJb_AIswQbIvkM`&)S~pD)UhwI2>w2DYxZ`f;G&RFVY(XF6Mc$K(>=86N`d^l~T~ zwp`RmX}`AdiqV0C#Ex~D7yUNB9J^yXL4kf>IBBUb{<7>&_J(4Mci4tlmJ$RdJPf`y zn5D3{d_YeaP3-Ho@AW;LpB`(82>mN|CB#@7>|x9`rAZ>Ob=J@@mvyMsiIb@BJ=jM+ za_?WjN{qynFE%$}iQikCn^NZBiF_ zhJV%IVoNwJ;IKgZy2p(V&ZoFdb=4sclSghHldyza(GvuWo@R9Iu%7P^Z&e@Le&GdR zKLFf@qKxUuTDdNXF*N=|g`^0$Ql)rahLu{DK(r6Ih!ZX5_dYh&L4t)2cA7~9l1 zw$Oqp;_}WR`Su-&8860=Ghv8_O$C%3l6{YfzJ?LY}R9@6wlnh69aJ(w`x?1#WwQ+}~BYyRi5?r*gT13C#Haw&| zYlzdBtGyZ}@e%|T@*Nqx@eI*gx;hmH6|R#M@@?R2ISlvezJ^n~bNAbn6tSANLgeNk z@13QG2l1so?ky3gl)ArZ`}%cXk5YSH*=03-+-<*zs@s*v2#PcgWf49sFLix5Elc6n z>ve2k<{e={J5T5O1m`&s-{ED^->=*2!`<&wfR7z5m#?iCeMsyIj%*T@kL(;Vn*My+ zOKo>0dg-2!xQfAFUSSs4koZuCk&-Nk7w&^1xuGFz%}+W<2Q0QJ-mxW;LL<=Y=Lw3) zxwn5qHA2ci0$fA1F3Wem>s%t#t%oZ z88)Q8Y5$iqV0iQ{_7mRG!HRyt2sXI>T94ND@hmt<`P(xx-g(+T166{LHh67Yn_>hp zc-Qx}YkeLoBEG}ix49oPP`cw~xskxsbq5h&J0+$#7m>Jj&W^W9<;%TfH(8g0rsqsx z2WtB%jWdVDKUw4vj=zpTzf&--Wbcj#$ph5oFMInVu|EdrMJv2>Vsus@(XM|_9R#95It<3)YcOLCoLx@ z!yYJEemC46dCsImIU=Vt-)LT9u3u+VSAZ%;J)Ad~|2L=}gcuqTLG-7Jb-KmV$kqe0 zh`B#(JdflOx791Y)x!^h7WN{AVbm4fYdGtMA5kI5PuFhVE!C7)k!PfRQo2^lFn)~+&ss<#z_uxcTGer_V-Ma}fh zN8ExqySV(t1%rYRSUHp!xb+FJEDjv87MGfec@KbR#)1vmiKO86OEBY^nd!S~b1-ER zBj+?qq6syeR*fjEEnulty`ugp(e=QiO;K$O*0Pl-@ zGW{T}iGvdQTm+UODC}UYWPIEx=*wwIlW5(yqB7ySqM|)v$hV>_Vf4467M;IQi1U@E z8Ft5qU&1KPxMonlfEn#ND?Ql!Z5(strBo~(Ys3|6SB&gAx1Kge$hGEe#Roz_MTM!) z^csCGRT1^4rC(u^nKIU-e?irbl@;-b`K7*rfzNiks?Cf~5)48QbU#~$D|<7jo%BuK zn)(?}Dj){6`xHdKpf=N6I-|OMK*GYyNqro1k7H1*s@|LtBD5_7nOnz8cnKwk$SMv* zC?z)imzd=Sgl%>6#Vx*F%~DB!Se1`gt)^DQ2})29Kxg=8N2i8tz9?m zxN8e~)P24M(Gc`Ne;WHIj&*h()CH&B@|TOTvWgZY7Kv%9r(z-)n-OJ;5r3MRTS82b zFZo?7q>o0H7fK8yXN*-@>X`3m5(77Ej+rZYTQvI-{~q*GzF`w8Y7=SYPrTwqPDD?o zHj4f9@hkT8sQ#bHx8ZR=v3I{Oz8vVpCGRd>%FcG8p;a;a`=@0&Xzbg>M1r)2-4dAc zDV^gP(Wf=3IH$@U8?q76vs3NV)*)ZjP#Sdu@i-@WC^3>is*R_iR(ifAXsz!(Y|`Uf zkAtJ3eYr(Dzz!IlDKnwujQ23h*5IJ>hT;j*3 zCt~4=evs8{+T%rJd@glCA*#RffJ9)fTR36p<@oHFw)YEQTKDLe&=<$X?i7~a%cn(_ zUR2F>?7f0S0((*9=zj-dlwH^EpzmdS7I3qs-&)kHjT4VwPY!=NeJ)I(9=;@)y2VUJ zB*lc2?@2i}?qYKZPAJf=(X!RcUs-^e6-sc8dYlx$cul40&Bk70#KJvQ^G|fAHE``7 zm4x_EF(-f9Ibp;=w@~@PCY-v%Ka|Be4V~rC*UU*>-IF;HVS$!dgXwuc$gI_g9-kU? z{}aIe1JBPxc+3@JmRp2N$Rjpc%e>nPe%mZWpY}pR-$*|`-aWc>Oc{Jr!=-Y<=s_w6 zvTw^$Rt^0kHSq0fCCe@i)XDbe`nS}uM^YOLHqxRpE`pp*<{eo>L>8yyq7K0#r|>za zhd~zM$UECe7OWeAQ$6&!G@eWO{F6UMr~sj1S(2RChic4PV{-9>v)@6DOazpcA8NL< zUE}iQm0y3*cE!Dee%dA#C?;L-2pNq=uL&8aM3J7pP@?+qjrU)Q&_qTT@Rigj4g72L z>fQBs!l^B#G-Z_A5h5~mx7AtS(tJn@OFws0KXsUk- z_jEZ+KNlr0elxmkzfrWPJVQNi#4lmK;IZHyWlz(rL)l*jOmUKwoX(fV5N8(UIL?a| zj(PWX3-Q)Z7g;(AFo^aY9d+BGm+d69n}SB8qSvO_DKl;t(R7&Uc^(;P`Q7RFR%)ha zw6Y0qe10E+#QEJB?(R44@)%->ZF}!M>6mTX(8EIQ`>afppl?W5(C9vIUHJ8f&X>g3 zf()XB;?=w0FR=t|ui1k0M@noBt-8laE3A^8w0iq>XIDj`bI-kB(<${SU*{p7EDTi*7)Z-eYY}d zUk=OdVLD&$5PPd(hMf+?nND+JTm^TO)drJJ3eVr_(WLp>rDrAsdpJ<)VXc+e^kwI!DESYrenGPh7+?^bvAXns_}M_m%2~E{ORSE zpJ|ZgX#g)*yT)NN_S3UfXgH2v0&XGSQ<7(V$IYoz zMBBIjU876C>zqD>ZI)f*2w!V(6V;_SPLDbS zEvCGjpP^6#U&-2F;mNXMe0W12VhEuh9?+dtSor#dz%}QUY*dCO&E>DQJne3_v)5tj zsqf@>#|dLZdHt6D@$j$g#F*>mMp*OA)sD*hR;ISbA(#m z*!<(V@p)Cq%k1QwvGkP&dejB4LUPh}D#_R(LT9s}U=N2wNXT>bA1-5s;c=HM_{6=&3Cu`*^+(I%9k5U;%wb)!#rd$O9JbDe5!I(8gD{Ad|O*Ba;A1b z%qpnWPm3w(?4GXpJ+xgyH!EPOvmCA@AOvK@RZ2*pczr)gRgNiXV74jcp2+N3yB#tBfpW`*cT>;ANp( zNcE>fR`2!4iJUOj@*Tm14R@uFIm^5o6|c_kMF84%KlBMdTvRYO41RRVFxkChJ9%IG zntE!_J1kqYfg_{)^aRtin3}dFt(2V;{y7r+SvV((tSuTILKsYRuZ_`R&i$jQ(G{O9 z^2fVER|O70q-&SOwD+t}Gg}QUO<6#=!41Xrw^;h(o@3*xVBec{*L^u5_?)T6@SA!o z$tyoBI+DA1{V+gCM}=O8S5Kk1_D@pRhnB{c`!PF+)8fmBR;KkLKh5ND?+sgJ=WDmC z*_^A{I#^VMe$ev|C}&`+nlOW(KRy*MYPv3q0Uww+Hc-@EE%LK^j?*gX{P3X8lSrYv zuJvlq&Gtra6C#xF_45x~IH9gpb=-rzd$3j-_A_=t4hsv=%+TLAhjb5{9dTOG*BAsM zo;6NLmQeyg7v?6iU}D%Lhr&cNA2|6XBm3fyYNq?_y4@D2*te6al@2(cHf3YKz^qRdF5`0iZ}D4B%vere6N-rs zT7ZWC?PRuIVgxIPDUJ+s`@8QA`QSJL_f%BMB^ZiqC-7jHP{f{R2BW*dsktVcEn% z@*AD8DI0Z3@Y0sSPw4I4|J7I-3(Xj)1TL=02BC-e_#;AUb16X*AX7BFQ=5@40--cw(q0vIRcJC*^NMxVL=6Z{Z@?{n_!cf%}^tF;O^orXNnL5g9-Y z?A)En5VA#LhGzOQY^!HntePhC$3GBg7@t$*w8OM&C==?j>#hwqeJnk=*QErgqMh(E zgyW~xufH-p`(t5ho_Qzm_+l5*Dj9e+`18x7GDY;CniuRjFOkYYNWB13Lu*X~EeD$0 z1!<+6eHR zCrq1N@f@I#VRi$3MQKoX+243?%L}XKNqk~jM@4(r z^uu`tllvAAbMr>O5Pr-d?0hB+jADnAOi2r8X`G zBx$p@J@K@4&tw5U%P}#9QVf9J$xlbKp)U zIa!j8_{amM=V(7PYfct+d@mcvGR&Y<0n3MZ!4}N9=bh+E($S(457||;qgxKlYr63x zvcu0y?=?K|f|5nEiO!A*xo>Gg*;MbkT6dmtHF=iRe&gp*QYuHpj%GP+g29#?Eb6WH zQKwmdLTc6TRR3P>#P)a|SrWLv6FyebJ^)y!d@E{Z>YSkBAb&8t$}7w;q`iR=nRX+C zc_{T7tAX{|!K3At%hKPqqb}zvDllU2uXHao&F)*wKPO7(G>}7|;GrVY4pLc=y;Go7 zNM9%r#k}ceMp3jc`u3H>V*EkwYg<3pzvY$)q+yF780)4sZ)MM?r%1u4Q*bxk zhUofMuS12E&Hct%ut|qvc6cyvRJGr&$j*e zYQpDw^&$z8`zCLJ-Ynza@HvwBTlRl$DaH%JKg%@lW5lu=k*eFLT6)_)-{Zt@9}njz z+;RN2`ahE&(S~R|a(qMp3 zbd>fia=q#E#<>@-OCB`E{(%=3*AKI?|JNd%$et5Ki4o9$j9GOh5JzVRw3ipzb=A{?x5sqmsmlTgGw zMF(_anvM6}n4f$#pE` z0Qik?13^+0lpH6&hiKzF!tu|J)e9;YRpWQDBSk*{yfAd%Co_gL?tt+}Kk#h|;(uoF zq1DiTPH zB0eKOlX|#-J|7cRb++$u+BQ#g2koOpOKcrZi#5h{2Z}RT`|uv?*!M)fh6iywZa97T z!ag=tC(EcfioA!{C*{}A7W~{~S19H2KWDw*uo9?m|2tXP6|O=??h(gYV53>*f4*)z zwyk1^%+B1xg(JFM*^nP+Zndg6WUzLv?S(?C9w@2v4qs`HJa6EhR!`(r0VQngH%0i> z?Kk5tvgWLovvNJcF4e|VNop&zCbJGY@99pm%koU$wn&|xmQ8j#KUIF;;(UbEE4ZB&!j~yHlnw6?do)KL1^)Ut{zryuq^mP;%plAUZf;`j*4)i#1q;4B zB|e*Cb+&15s;*}~->XM54rN!UwVy;hCr1+Smb}dHBgpuTrojW#)0XDVUZg|-VC^(A zT*cq5g$4+uYRdw~C5h#B4ia93ukLOeHB&^1`sIQ@lpOfh2YhB&Xb@X=rHo;}c+Qnc zbWjqr7uTxpJ)^eyYZHi!Nm<0>hxc!^{-XGNODX18;@(93Lo}>~r*bZeD;ouZ?ru|d*bu3WRCGXjvD62rmvKwoOY9AbIg~om%L@ijs0m6RN2wXg|XKTjFVHihrs|pP;<5u@;hB|Rqm{H?;edJ}H zXrn0Ni8*+qoVNI{HCYu1vCip6wdzMOSHdhUu;%p*=7B_n?w4omv0dT2SPP3yac%24 zn;RAEJ?(FNYO1^(h-FHqEvFYj2Q(+`9bA?;!q-DpG3UEd?V`(Fs zKNLaf&J{^;K=f%*QRRoiFZM>qy#t$A2m_M9sF*DpE@nBeY`7Qo_sB$;=d&9Cl5b5^ zx0$Hu_Sr+yfs48nrr%@-9lWXPBeX5`y8_JyV-_O;aS7H4(v| z8_{cAa$RZ>97S{QkbINJdWl_r@D>WuKrOjZ#|7{sq$fOJ6khg^h#GM#4KbJV6;xE! ziGdZq!Mwe11Jq=>v?%U-m%-**~u8X>dpAZTNm4#v8zRijOkbys0oy(C)(T42pW!Ch7ORUQ|%Z1r=mh$bFkTn3p z4qKhg*z)jl$$y#+5`-dyEUnOhFu0<-XKeZ?7G8KQUSzf-QW!!!H zhEdthU-yM{WY$;!)NSh)MbPHuk(P7Bz<3_MO&LZytatw{Kb`a`1AVKq!*k6yy*Wuo94+lNB7xxDhlG9}(Y5hW;!d=JETxsv6F<@V}s@(7F z|LcfB%ZSo!U^a3LlJiXrQY=~h4jKr1UU4MmnZ}6R8_74%GuL#DapiBg-I%;;wVAye zJPh4x$iU9W#{1xuqlH80p^YEc?UwUi+{|h^(AG49rgFaXL7ab7yR`VCV z6zq(`lP*oKVrVF9w-XFJ)nbS>e1?Vm^E$(s{P1~V7kl2XZz)j0+$7Jx%l3Xb&wy^} zJcXK(bU+2>ZdozQ__-hY-KXwspdaCXTTws)rXN zba;eKX}#0~9N);$_<7ZL(>Dp22h>DGp?Vi~uqo{xSkIeSNx2dAsg)O-FOuf+@Ni%x zil>38kv|Z23|?M%;-#)J9q)bJ1iQY3X`}Bd$Fpl4Ocq!4%>Qr8M)weJd62=$T8?RY z#C(FUvLGk#;dp-%>A!J_)P^X>yNs8$;i0odDYDrxJbc#nn$D9D521yPbFC7iJkW$i zs(@)~^w zeeX9cMY z*ql~$3-sN&Utu_S>mlkz#$d@#)9eq!9&_)wrYKjBx>t1#bDJ^{bKe*|Zsrbog{}|W z9(oqVH3)#~<&zN7-HyH+17^j~G1P;L*q~|f{AK!r2*^}NI z$bypkDZB}j4Qy4<&|IKGwiE4|;e`=^I^}CsClVv2*&neFUJO3oK&N@H_GT?9XJZoJ zQR{8MtXP&+Y?`awKy-cen>#R`)WCV?UXk=NUWE|qyCK9j=_}K8%f@uydf6rt7H zmjy0Q;LOMqn$|I2OmU|~JfA1Q1Lupi+cfpu2m**9x=m?`qrS)@LunD;wtMo~ZtF2| z?{tzyuW}o?>gKOpg&_vQBH~GpaymJY;smd#w%4jduA3eq{eW}1klto@>>tb_^(sCA z^9}&s5^zpas1ySHcTTwo-U-t16+>nJiJ0NqfO~g(yeC&w?r}#W+h5y$IQS*;#P1I? zkD?3JEe_U*U-;t%Tj9qx-H_G~i+#*r1A?fYD=CwF=irPmOiWZwa>7S*#;G~sx9_+6 zIQl41H-uTR;<=8JLrrBMGNihkg{Mj6K;N{Lt;msiKhYbDP2ZwO%g63IFGVb3y}Evx zwK5gfb+poq`}*m_Ua+Lu>h+p6aJ0hZS06=loo(HtJvxXzf6HQd#tH0b`U z)h7-nH15xwTZK|&{M9Con+kwX(c^fz6D*628(Sd^l-#|GMre#kax8}QM{O%@-$i$D zoT!|VKB5h9ChlQiHWe2@rC%Q0#j3aGzv$*9gXa3-J9AgA?coQwH65tm4wLp_OkI1l zE`$zJjgy}cReR`D{9E!S`#y@Na)>kz~TM`ZP zAp(Cz6SQ$ede9N56(tw8g6{oOCyImtfpD66#Gx3eL%{xO@8(_~HfilDC!2`Lc_M|YGvF>DaZT~u_GQw>KgbSg2UFZE$!%>pf=6Rapu zvu?73MeBx`)^tppdqhN{d#lOrB8Ne{f{O@&*pUMHW|1XmOZ2$LJau50e_Mp&dpCji2I|M7p3O~k5r`q#6F6HE~I#I4&iYZm>E10$2pH4#6K!^A7Fr}1_3JK^Z1K; gp6*Gkgg&k&7dM89jOusg3<&*q$(v;K}zTeB?P1jNU@?IO%z0>2@-lJ zLIk7<7)nBb&|3&Cfe>=y`~Bzo&UydqN;dmEyR$nxvu$SXq}($%;^h+IVq#+AH8H+@ zpNWY%mhp8t$;x<>=;X}L#KdBD&&=AOt*wp!6yL;YQ8hI+BO@cGJ282@XPM|Kfq{W% zM9nhNF2%;iK79Dl!ongnG)zZFCpo@=Y=nf*6&4oS+1b%mR35%iV~XL6@nO1o^X9#K_f%9=*MgXTs7P3gi@$vN5~_JE z_l~;i`7;|}ASu?})ANz6tSlQFn}>&|t*u?1t?nON4ZYhYj*d>|<`zmyO4imkhK9!8 z{^4e3cR`?=Iy$=A+S>Pk5{4?G0RaIPRu8nb^&dU*vaq-p8~Y?RHPy$*HzXv~!NK9d zg9lDd&YqrLCMG7v#>V#c5B>c7^!0B?$7F|vg@uHK$jT~sczC$Fy88S3YiVgECnuv^ z@7%t9+uYpT-u{8Ty*&`90|J5MGI12LGy;C$49H%a>A7QSmaoQ26RH)c>N35WgNj*Hx|a4gr>q5hh*et|vJm3JNM( zTDo=*AASD*0StEW^Yb?_Fw)f2(v2~?rmlZYT~AKuj;lwoqQ0eqo@HogsH3B!veAQJ zu`>+CDJkhW1l}`p)I58ESLdG6vtOQ{zt%)WJ=4(8_4b1$Kg$k*)h;XsN;;UP=ryDK9UlGcid?NzKj8(dl%4e*W?CaTE&m z?Af!0g@yYuy0LytR#sMYUMAC9XI_C+V`5^QoSfdgd84kWYkC(fCnqN$ATT{ejb})Q zIrP4{71Pbd@kfkF#vN&GA9~v}#69?NVCdrj2oqEI`%iECA#pd)CStbE-bR)LZIy0( z$Tb|P|4h8u@%f`IkBh@}>u8^+pH<|*Xx4cpyxDa!FoZ+gFte|8OzWX`Wrv2ts|Sdu z7e1`?Yw}Fj)K04LztrS`s!wgoL`Z-A_`QF_#UbEjCP{+l&o}8@MYHpMsqypna||F{s6x?6I4XN*_<&%2E2rb*oY7BhQGt`!w8_Y=XlM7?w25 zRSp)!n;0d%I_qv?0L4z_EL54z{?}*g?-{-*0lp~TH8buNsMPf;g55&rAr%R zo6_vu269fZBCvEn8nJpVcHi;d?3ThQKFl3WN2%Gs#DvbS(;4O5=1qZ`D;=}1kYOc> zRfbO~brNd{PyM;S+b-81lWj`H`zJ3sLnrIqogyA)f6{raozgFpGA5IPlSx^SN!gG| z*^@~j=e-#J^uqp;T?D_0U7i9?u7#a0^0UvQ&gXt}mToZc)v`|N8Jv;j2fFlXwcH1e zYj;8~8l>##S$LqT*{8%Za-)``>a)Fv|tS+VlGW z*-q~U=lAqqhbNL4?97M551E)Gm`rZ#S%<&hz@@okyCWn5dFt5(%YS~7PsR%N{LH9l zGJd|gopIlyp`|WpWiiY@q-DDT2C=Hkh5(E>KfDS%V|7VbB?b3>YI?$Ka{H`WT}M{f zhtd0M+F}KgrS$P=yvBJK_Dr@nO%hNO{j;z~2r3hMd^;1Bc~sTYP3f_G38W#PL?xH= zpXFke&#wk!aNt&>$|v7ID2w;iSJ}^thF^kQ37gS6{&k_6g$JMh8A)UX+y?kz-ZeQX zg)emoSe%^+d25Z8$9Q6bpdK2LZAFi`;^SxHIo7Y9hX_?cTxjs+TSupn=a~MgVQer_ zqZawv-k9-}tINWgf)>iqFUBUJvF?MDk9mhx%!LXx?~Vv`jlgN)zFXrpA?du;XQYxR zsxrj^mKJ&Dy8%owXnjIUo4^A$un^+1sOFD(t79Xr-ETMa z4pLuHUnE*kwY0%#=^d-I<)zh7T@nAws(%a)wR0dme-`va4b2(I~Mj< z?_iI)lr4+q7gu1mUDL9dC6nDZDx~A2kg2S0tDxKe(JjA?{vz#z2j&Wq!s+nVCC^{%aO*wG!LT0Q&|6R^M9YAaoiqLx zD7fxNX1*E0%g8#}izhuTk7TrxOcV>RUbPsq09G_{cEU8J+HDk3&Kf*>dr3t^G{;Km zprfcR>or@MytrP)von~o`zZ}wUt&(uZc&49d#MAUkMV2Dm6*N1MEqodUQ7x8eRU8> zOun5YOnXIP?x@$aQ_j%ITD6y;dJh>DJ9&kQ4fGx!JI9<9mub|@C=E8RVd*@_!(U4B z;1lFl`}oF$Hw zl7tP^5$hAcbZ}d889w>$2|&_{@cKA^2kzFjYIGp@5?@V*P84RmA!I2~V|L+Uyn$1& z&cL2KS*FU2j`I^PsI(2_s8|cy9Ed%=)IA(1L?iNUC2zR|u_sr#Ul7y)hK0nj+RQ5yMjHGd7Rdp7XX0U!)xpV)2@ zS`m_r3rtu$mb={q^$-JocC)-7)zh$!&1JjX`zdji0u2=gjqpV*59n#j{8q+RAqZABI$=82Q#DS z3O`Z&-3Jl}qchgZy=hGT^_&7QvqW563b3RD()m-|%2n}Sx`6_%>=35GFXu2E5l4qE zj&SPn`?}a3=0ym{=>A08M{P;`P z{d?-W=UBoi@PC@qrBWzmWp1aN?_Z0w`o!WaXMXn+%qmP}`OT{BkpI|5VYZDTlKPL) z=$KZGUm(y0WGok4^0zq~GPcU@Ye!MvtM?kz!kzn})9Y~qro$06yjqF|Oa0fEn^pVQ zUV?OIX*HQKUS3jn&hpy|Ur4$k&Bt#iZTL;~VuhmdLdp80aruezs;Tc&u8Mum5c-}; z0f2h^4vnfQN-0tapOA#G)YE49n9rvk@Nl7};xd2uv?6ioUmxV-BFf&& z;&Q^&)V|6sY>*<8z&dk1e;#M}>nOGEyR(mK9XiUrk%?2o&gYz`@&5+0NK?s-0RS{r zB%pQqw=Sfjr$R==J{D*qzv&&OgiKvvWEHbHR=iM^7Kca67iP@Vy+N=4&Pt)0ciyDICUi+%kLw&N?m-{m4VsyIZf zr~WZ{?mxB5dB3Pe%bCBZ?8o%tw7FMN&)2cbOA}}mKd()5hz0BGqN1Ck znsfOK34DDoEV7j;%APcEqEb=Q>UB%xPi-m%wmx%(AG%{Sy_1=#yE;8Z+DXPmX(NuS znpCS-c9u#zyRPBrZSDbR+VtZ`(8G?zl?mY=j@x>>?eAvRuvkT9*x{$AucOxe?oeLM z-76K^N_wyrlQdRR>buoe!!*)U(Lek1nD>Z^+*K3Rc1cS8QPBjc4Q_GVv_ZSrx5D3U z)3j~3wB3aizk4ZEKVa9*&TkjXMRS1wTkY+!og8P=1O!5!(XLZr-{1$q!WR(2wnIN} zSO4-VOoJ?QR$|hf_sZO=JF+Y9%b6b_ToI9xA~NB}bH6{eoBr_1FKh4oZ6K#tFLCr? zRVZ;pL}8#ke}S-$ujyOZ_6(<~ZfH1cX z-jdB{@UIKh)dWV(cC4?@XnPdKF_$dq6ugf98}hJg>-5%hRIdU-q?Ly=JSLoaqcwY_ zWG(VnIt3%jtb60ni`ai~`iuBL5f}J>D20@<2VR@_(XhP}QhO=p*0Ye9c-!CD9nWbF=)6`#5r<*hWs~pU@{@@Uo!jK^IhVg9pCs2)a+YDtd(|UcI?~lv8qvQk}JSL)huwb z%!}w3(W@itRu)wjFY&i<)GuxQel-o(A74#ATPO7#(RFG zp1rWReX(3wxnYYe(t%uN41|<%S zAM9;ET`krF=%|{D-b_flTUZy!>=0g_qz0_7iX|OztNF|do%87dk&m$Nr&2m|XnFW2 zV2IE_UuH9b`Q|IaEYs^j=h(wB1y>6?kM(wk%6L=f^y_}`ThA0ez;;1FsfAm?fvP)- z+Vm{?P~{njet@4>(c|NgV8{S)vC?`*hzE4V%hS?aP`kg@bT2YbUe2umRo^BNV&XpH z##X!C&_KVgK?VoiKFKjt@CZeY+FB#jvn(D@VX-l20duU8LLVYRa=G|R<^^>x#b3uP z0(`(HrkZW-GM?NjDng0_zvYy^K)jc;O9Y}f$w4aA=*c(7u>~7c*2xa+Hsr=L;FV-O z=QiGn^ywWT=g$=9h*`Fn2Hz@;^630A#rFKL#koXoAupGhsImbNI6gW+et7Bl6n>e1 z#W;ZLGPd`q87Zv`J*Mb?nv43h9Vd+raDAj`9@A=zCiU~=)84mNo44#AtfbXYaL?w# zCBGeF&$JHz5zBq+BJhkh3{Vb_t!2<-WKCNYZM2iQK>Wqjl|)nSY@d7WJ3IH<)qcsD zbv~sZnSB_fDYp&-ZUM+Ft$Q_ITkaC_y_vYZPgn34<$H_be7U!XbHDX@GwKuu2Ehr* zlO4YeWb#cy5&9gUmxytCo9xZ-oPxz0`+qY~q}^k=-F5rUz!|nZ?iQWbj~|L8lj$9j zQQO=UwS|HsP6YTM@#@69(7fU^r+`9@N$BOtbOfo|8z2Bu(bd)A6*uMeJryINrowQ5 z=n@W&x(Yk%l!%qFx`{2+g6d1;OH`F#$7PP~dG!_OhLecVVq9AK?LoCC9crwUIa z#Z;SX?o8;mpWzq0B*s3%?Sp+cf1BC!*Nkn{=O{*Mvoh8=TSgiTNQ1_(d8?@KAQV!# zT7Q0)XsL0v|I~TRvE_%sK7|&8;c}Co1PiO*ao3FOiNxragLI-?4O9F~cIR%Nh7uu< z;=VhD=yWeMRT|ZwY00b1G-z<7SB2!|briV z3cdbKJ^I2iIKdrnsFke8lPi60c6p$`wJo)abCKUYgJCzn+_^e)`Jf8L;`2i!|M6#e z7dFMwEl1XKYJYBgo1^zE$9UKhi~`K~2H(^qPrs8sm0fnd(m3y<#?$waQ`yyy2`y=qA|MDwgrZrZ{i z@i6HlC2aH2(A}}}LWeI?dPo~s+~!9pQlZkxp>@$bD@$hlt~1JfqoD4|8fHN-YiEzw zgtUh3FUfqv5vX}}*aMKxQW{d}_1j5|ljGyVQv@1%q zIS~1#&;6BsZtDLcUGGg7)$r!1Ix;ZEQ7&C68**aKYBo%iU6y_IQGZb}27%G=eh5Em zT$8FVYvhD*A=~7~$6`r&q~;2KYSmW&lqpcIRL7HQ==2o3rWPi!0|Q7Hwi$m{unt0NF5Ks78LWmM8>}P zSCJtY9pd_7Z*Q2$IO^mcx7yJqUTXELPo(C`fWj@Dk0zpJm7TcXTq7&1QPDO#cC{!G zbyA>q%c7(D?`u(6yPsV3K|1T0fTx04pGl2rj$EU|AZmO$-dvgJ38bwjx%$ZrF;!pL6zQ!1MH6N zCpUu|iUm>A71rz0OA8@`z}Kk)3(eX+uKckhuRXubEL9;2I=P&oX=R@}Lv@xR%6-&B zcKK@vaja@FPPM_ow$|YsY$^jfwYaG{ys3FjtZ`eh5-!{r@_9xO^vnJU*M927ps)p> zS37eIA#KfVeO0ukQNn(mAWTJ#O$d>+2YZFGQMa!~QbIRO`yk3T8u^qUixUlq=n45p z5nz1bm99#1qlz}Nra3qs@F0Rtn>)df5Ho{?7EIo3MBRd~#!&Y7*z4C{x0n=CUuqNA zIF2aCpS}Q4&Q7UM1BiFYzBzjR&Yk(5oFheorw9>X-61lGw%(n-Als(_sS>q2;%W`< zl(IV8-!(0BYpz)Zjwmn1w>eOG?v=hnG~qvIP+_(D%n zd_lvAhC)3{Di12_CkOJTW(NFMCE=p|bH0o&A-8vf;O#x$ht4FLQ?Ml-VSPK0t<947 zebxR_c`Up#VCZ`Wad7;TeB0g(SAFEhq|I3M?T5?<&iI>&J+p-WuO-qzXc~DllHEb! ztwP$JVuR${GC_|!D$761N)XpX52M+_M~=6zW$SjXiPl<^HvXG5zlQA>AvzQ*=TOM< z=I@AnOws_BvL{0<{?g9a7yi3;hGJUY+SpgD!Az0prJVU)<{J!gX(7Z%N*?#}Js6Yk zdm;Y)%T%2_(8C5MW(56JvgfJQ0wwefb)|77nIHG54mm#9Kl-w2r?UiT3vOwZxQJ*$ z=6xuyimN;ngbT{Pb*p-j2a;G?>~E@-K0{cz;4gV?~Zm zT_f%sQ=^H&N0ET(7!=*U;FptqfX(ia05P=7y2#j9# z_qcoV$+SISD;*I4MrE!4{|c!8QvgoJ_#XTp0xH)pAn5pJGpsV8&D95tk15#O+vD9$ zXk|1I1IFJph(M!ZP{xR0@;ekVUtUVwTPiVX`XxqDvPr{4@RV|S#bIlsh@0U61$e8` zNq5}D0@15yA$P5nw%Bho`&A?0`raocT;q>k+W=fJApC(Axs?4bNo68stx>@-^DA9W zS9e-~fQj(LC8*7qXT6fi!Z|uPH1$;Z;5c7EE*@w}V&Vt5KTX65`})E67P3)|!&|0} zOOeH{CpA8R3$m|H7ZhN|7Nu;p?|#kAz0cOzvlr%rAMM6qrnb5&hGB|~ zdTgb-h$5Yu+?uEE>@+quaPIMyso4wUYIF+1L&R4F#eE`mIxwEuwl@jB zVEQ2j{A4j!g|b>R*m`JlN8R~}+xyPW&4=5xg8&Ew@`ukQEM4l({fpdMAJuQQ^7ZT$ zT3sxU4S*9wE1UmN`U2EJT)EO_qFIzhu)1>uTj9m12jK@wH!7Zdr0!JCon$9A3^oNS z_BYOriXK<8TQ_M$zv9B0-w$W_8C-+ql@a2RJj?2%RN~HeNVq%U2gcb~^?0??weu*K zPSe<8O+g)hHDpcI5W$79V!aoXtpB9jBA_3C6o~m_)EMM>Nn7E4wCsA+Pa;YYxy2{u zbqaQmUit*3p&ls2CQR8-yoq$=z^K6KwE8#j7{oZZVx)~0_F4CHJLa)HN`dGB49wBX zu^gAw2rQXl-q~ge-DGb#&KbZxg%bBTmU2W<$A(7?SycE>Cv=ut=yM~)rM%k<65Pvj zbKTw-%&+<8uDOEo9|dF6S=24ze$CxpTWas^c-1Za6r6(dfaOfVPGOfRk%U-B)1Vl{ zWPqDD(X`T?8$r8*pwny+!5?k~_|2L@9#^?XmXkyVB(!fD5*E@G8uTitkdqpcG4jiX zixpS!1%MoxTAQ~yA6Qn7sY8iFn%{4s-!SveZhPi*@=o9DeY-SNEn4oVah-m2LMUi8 zpqa#;)}Tw5$wNJ$|2-6m%9E;N7e;EfRQ9!Q0ynY^w@wAcPoC_Tnm6>$eEr9$6V&UJ zE%s$<$OiKo^HQ{Tt!e%8MT=%#`duwbV@h)MP;%Su8QYmJ4!_UjWgswr<2TQ#yw@9- z2?{V1Et`6B^IW4bj9DuvuZj6}rRWf+p13QA%lXx{YNk{ba?O7lT3s#w;qY}l0rQt4 z!8s@u-jzk!pF|eF7rNTwOaNY+yj{Jw&7K-DY4TW@aZT6Sn~--dc=B)h4-meUmm|`U z52gcAKUUAxjJ7IJ8<*+@Vo4-p_hM{#1S|5+ua3W5I=}ly4N7)~3p4lA7<7O^+_wt< z?aNn*C@{8YghEq8unTwh4MN%|Z~6XI|A5pJsGaL61eW8QzZ`-p)ASQBs`cbf|D+*nnl(U&HTJE&u8F}k2;MLWxN~%NbTDxGNZ#3=i|J0BD zYhM0>Um%>@e=GV`Et7bYIpk-<@D^?cB39_jIXiL`+Id%Z0No#T1Y28+Db;#|wf@g3 zjlqlxwxPL#0S!gJotG*?(6JKnO~Yek;;6tJ#sGi%_0Eo-MedTyFO==9%5wArj69}6 zbXUm95i=DYy_kOr#phnAws%bR4L{dT$ROeijJQV`z6qhc9~odF;9%~YXjQJ8SMLK# zxx;^sZ2g>hcu6>5;N_?h`?(pVDE%WX16F^8Xk%bCOQ8T=ombM1EksCg{RXIg&*2Mx z+wnKJxccIwAq!ul4hBbd%5S-3w%(vvAg*ls%3$XFC_%aRm5jmfB;bqvC`K8gl#Md& zR88!_Lv*Fexu<~sWks6}y_4!C74uU;%)$*sZ zvNN`~K8=oN=UQ1kl0}x3e6xjE+?~)Hya76nZMMw$DN@Llv``?Yw!cuz@=&up_MExw z%^-Q=Kh~eYd2%G6ELZ$y1ifS3=iQI@*qHg9V_bqY?lP=3`OP<73=^*(SJyDru`<7G zn8E0DslHU6L{E>dFEevRzPh$vcijZT@tL$%%t_iPX2kR+dk3W`J*o)xc8l&C>cQ^| zlcIj9sUc_{`fzGbO&*2efG;6EKLJSJu2x=6{h2T^w8!=*VIqsVp*u<22W%jy*-oaZ zVBOmp@>yCGX-sf1mUB1s2(HnRK-jt;a6_DPKbY|(p8U4!4+3`8qX8f2dl}7ue|}MR>rB>cWU{chOX00uS{|nD-0y=`W?Y7Zj2$gOD6+nt*Kvj zY(|$ED(c)+J^r9jWk*=zZ*qS={7Vf43IPy6e+yL)-ma$`)?uznhHsKc@0y~{E>!Pf%iU_hKY zlSE8!laPdAK6~HNZnprO0i1s;;yt4=i)YD2QqKmpy`6PaHzj$axOfw0LKw$Rn|a(Qk2Zvg=q zl5~*o*Wvt{4th)fN3)Ce%q{D@0lim1h_qEG6*zSdRHn*3GL5dUN7T z3n87`f}>o^o=dY$86v37+SB-a84zfnhODv)AZc|y?83jDUFaDoovJckS4VBGt4net z$GDbT*Th?=D`PI8HW`z^e3cP_BawoLnR_Su8-tbx#6Ld>4R7O7g?^ir%zks~oS&G~ zofB_Rw=iLw?2URCj%20vGU0S%7y%=$hQOJKv}9^26?F+3vu?Ev(R7-L}rC;zQ`Kpo3%A=jwjy2)FYk0)$ttX>&KTk z;0|GqZ3cBr^wz#^e8LrN(xRqhwTq?o&48!@5^3lQaVX0&L zXU{zKg22+sCcmmKT6pE-f@onJ@;2LUoh)f>VD!}p1Rez>k!HyOE+HisTKG7zEQQWx zO=a%I0SS!mkeOZnB5$(NJNJ3}(A*zE^#U5tyfv`8Cri;S(>P1ye$p9~x!|ZRylK^h zL^@5(#A&N9HSHbZ)8J!A_AC3>=$hUuku|k)YJ&)6|JuL z6nGl7xkU*>&ob0HN!hRcr&d%VPCKb5z)}rgbX;Q2CTU_Gy{^xT#;`s+#|v=zB2S49 zR0QTX;Myo*M(^&Ukx}_)0gT8VJTp~gPE)fRI~nJszCcs>oS4QoI{tXwD@Zxu)_rc< zo28J?kkG-9jLZP+L~97FN$+ku>^B6@<|BE7*ip?AKsbXSH`T+D)hsRM&1hUEm^^jW z)2bU;nwgo&P|3_;UJ|_fX~C7aV)<&8hc^^v9Mo)^c(}uJS|X_Xx$CNOGoI4hMi+6x zxO!eACVA&dd}}#!`}s-69@!eSw25nU_^SD5_Oe*cDvUVC<-JjV@<$h&`u%RH{l&Jn z-0`;F%YLraQqb>@8PI`YX-vxlnKZETwLllt&Pmh|eNA|V>r@?$aqQw>vi{W%kI zxm70`4xguLY<8Sh65IGYHqt+Yx^)#5jl8HGuJuq8+$JJA>%TU^65w_Do0Q$n@0njf zk%1LIE3Gzah49n1a5#ll1TNaqxmOD73hH#ynvE?51+mpaVa$D=hJ@x0wD&7?ujdbz z$O(peN>zR<{Ye-u0Z!xNNLQXI<0_k9h)JEd+!9cjmf~aOkqa$#CL1P`HpI1Tlyph! z2sV?)UuIM@OzjC|x6wc<^rc$BK_tFfAvisANt_p|>7!Nd3ootvML%x8gkO0aJ2HuwJ{4SC&e7)rSBrj@UxLv8L zAs(#dCX(^p9@9!9fBVOu^4ql$A@x11@xQ8X6V+ApSdYsceQ}kmmSEKhwaUOvO zT46W|jV+*3u+F{2`Pzp(yF*-ewhUWIq-rD;m?>n(*I%=Tc@>S$0MBsb(oBHLl*>eET%e_s?8L%1Pu^ z|9=l&e`YgM)T5bw&dZ#ex>4)@+4ZlZH~NS9+?178C+baNMhrl<9)1n$Q4(mJgmZiI zFMU+^FLlibG_G6YzWWW|5(B4h#9%u``2Gg?dgXN?OG(wr-RAFS5Dc#z2h?Z%_Uov< z6KRtx?^<&$AqNnHhK(lig$$y3)Bw5c9x8x7!=X!=ovK$kNep!eUnK3Ff8$`;a(|cX zK5sMj)m7u}Y>Du~n=9DwAFy?aQ_xqyj6n3`z9LgFwuvMCa076>m2BTRgeB@duVpMw zr)M$r(}$V*8JG?w+wGR0;SWS1Ip1>`wWU)gFg}bB zU}t~^aYK!Wb8tK=4V~_%kO6sxhx`=l)5w&b)U94g$Rz_*qD{}&j<54JJw^Q-SXIwt zbwD7)^)(4^^LK!Hk1)gDkG6&orw0b6bw1Am?(^QFO;1g=-yb6<5X+`r;Zff+Nq%hP zisjBu!OgkMh^~gdoX7fqU*&O`&AwrKU<#F~N|;jj@SiAaJGZHs73NXOaJ1R%qv0nKVbfJJ!$e=rf%3 zHpuwR&zrS`#10^k?el)iV#nOHzQ7qW7m#?CD;19-0zZ1{ex^`NCU@qJjG}D9)q0Bt zNn+|LS+@!ZH~h|AOa`Gt#wGRnqEnZK=BKte$kPo-tMMk3owvfeyn^br2G&G=4;258 zO)aS_gIdRV)bnTg_z6mUb@L-x=}!lclYZQD+Lcqtbq~bQzq- zjh-WO(T|vXC{O0d(Wpuab2qxvR-0!-_wU!`F?)@M+#pC0at^x)K{s^b9*+Q;Yj$WH zz{D;p+4t^SA2Lz#9P|P_1`TE|cgg?*?mi9R0GMnI+h!1!`LMS&2snM@9L^9)!0Evz z_c)q>L%HjtoAf^Ca_7noS|4qaZx;w`I_3(bfexc*r@6A`Fcwljk?{o^Kd;KdS)cCs zBnB`kLq6n^AVm%&NbwYDvkhpnH@X--_patrXR?8_a9Q4nz(h3NgbO_guN15 zd$`xta=<PxoPQaP-)oszZM&GNPH|0dZbrVSY3d14@l1>Zf0bnx;AMEj}sT;YZ3QIr16gG zm=Bj{PgZhO8s50T$(@YT`$aOg*Ieh*&oJufaD|-;*8U^Nhl_SNW)h)%)r}DHq2ORe z2t2LlD^DK_!h+ILNC-VeB0U36m3E#yDSqLDxZ%y^ty3FHEc(gG-pQx=w6xdJD*wD!%~jWjrp9N|?D>)9KUzBV#Q zj1aQ3eTC>9w=lhgxr^r3j@Hnx@NHbzN}5`jx%XvhHj!DI^9EB5Z1wE#Ii~!VVq2Bh zd)v|r*S@Sp)DJl62I@W;Y%4nnXFyB01pYw~yHvL3E*`5IhYq_=r3ES0lf9d|?_{}l zKI`}(t;(fxwXj|kQX3dQ2>!Na)LzDtmPMa_EZ0>qf{(`=G{gY|TV4~y&XYFtu|Vvm z+U)(=GOP7Yz@yT9nOF1d(>5BRU17?}&o>iMRM3l=Vv~Of2T=sbN_QFGo?k+A%Lwk* z4CMUk>pR0pXK3<^{i{Nc}2j?@2Z zfYB*^<@z}zrqlpI1JQI2Q($?B$bqyhk57ND?T0)&I=lh2i4&Jp+J@>(b9K>P7W1f*Shfd5gn=#~&Hk&z5`P znvxQw*Q~twSmU$4f;l~?2Q5Sq+5BRtqx8Kg9Xp;@y{iz9qvPau(x92Eu>U#d&2j!; zMa$S5DC2(d*fq-vfH+#=i{pON6*UYSrr0ru`EqZ1F~J`Cph6kC8C;dQ+U5%LO~7TL z-eEc`RI@ra?Vkj{E^BZfoL0fHEIU+Ji3W@Q+TV%7*U*?Q`v_P!wlz1!Haocsvg-~v zumwYw_Ui$geO3}1;Fq1CkRbWced%xBPCj&>hgmMk)$tZ4r^`mlxd=6DV4 z;N8E)H8OC1`i0!Fut~+yXY@6w{66Feo(Zh=**_+r z`;++rI+2vB0}6?HZ-_@rU?46(>Fw!!z;3`bN-yc%>S+RKnJ})Ov0 z&~fpJJoV;-<4RdE0vpF6DyeEg=%rZ0Ra(CCqkM>hPpR?sjB z5sg(Agf@c#3@oZR5rbyHP|;LU5ZXF2zzrFP1JNv*vFPoO@e6k`)l=Z@=oI3qUq5~m z@DaWR9<_oq^N)T?N&Fe>k%5^dh>JvzedH8yO*RDo_=iI+8n*M#Q92Fv9<@o9GW!Ty z9tVJaN@bSkNZrxmd3kr%R1bV6p8*S;YLk8aLBmGozJQm_5%r`V8kKeLHTHi!Uclvy zRdXM7BaAT)69HSL*YQ^VMw+h)93JBIf!saL<`r=iRdafGfF^t8yIpjpjCnt3+4@&r zPV`V&7Eq1K2xq{2{_2%>s1Ae|5cUsMhcC2~ptyO{FNzTij3#~H4vNyH*e2T z@9AMqeXSkRjr-Za;3c@Sml1nUV#MCL7_oP8s1YOjUW3l`9m)aJTtOBr>F}M^{I-AI zj)`*rmE!Y}s~)2Cfuy9uFT>TGuB?}ILmqiQ{qcXrOp|IvE}YPQM7*(?f4-@JTosr7 zUZkRE^2`llQaG*iTwJR)LGA2Qu4piqH`!)LJBg zxD*63+yy!)E zsbE&nQIoeGGyjh&P?)i1xJ0*$aZf-CKYymKOSr`1JzZdTvd+ciIps=$f$PV4ueOm%8NW{A9*v zJ2R+qKT|~;y>-g)4Iq}lslLT8k%n%8vt{X8(~6cpyx7jjB!ZV{T-Hk81irYWyRv;P zZaz1F|A;0mMNL#|xqiGQ_}ik*mGi8tN!tOZ=2%cKZ;@oyJTb7A~_I>9T zYfOh8YW--atsrnn5vZ%WbyaM%Zy@=2#qo;^?;zQiBrEafKa_&9n&x}ohZ1DA4fA{N z;`^nMaO4N($!y%y*iYg6<#d1pI?5%TKoUe1^V8&yPBTvbaGf1DNF*C|Yv0w4I^efpfu75#a&H zH!DScVK0-($2&R|b93CTAWy~$PPLxfc%@XDas6=O+NRzY*Dqkj#fuZw(o+7p%^aLm2~ zH`%)~hLqR%(p^+YD z{=@rz@6TE+hPij{oOAYbc0A8M*^Pu_lY}X3P`$slo~OK(hlRVHtEZidGYsbYHZQZ^ zIZTc!YI>iFvw?x6@E^i-+?I~!f@n}1-+K9HO3pj}pbG&xyj6EcLgF+G=3Iitn$%_X z^beN!W!`1iR|=kR!YSopuNDQzhw@cKM$sav?uIgVl=;I6t&OZWKiE{3i2)kd#5CR})(i>JHXjsaA?p$rGiWW^=20l&Q)( zsunRu2+Ce{yHuFXXFCcqu~J0|?COSZ!fdiP{0EeHIz$K0*|gX%X*8S^4p-lzKRc$C zrY-%}cJNRgY`YVcILLhLwE@`Kutk8ydE zan&rDapIMZx%ss&L`Zx!mixTYEuIm*sM$RJY{`0aF!CTqEs*lNVx#Jv4ujg04ps#- zq-ocr!)Kk!!LF06rQ=;`FG_fKoeABXG3Ny5mnwf1&20={(BFS5G|%p_%Sv$<-wkTN z`#qY(@kHvBOyFll_j=T2MffOI?I;#j-w|ZO^k>3r?XnS3h)A_Mdc|rOs2~2;ysfjW zY551&$nPA9>bu6{(T$I%o7&2>C?#{aBg@UQY%*1?!;lr$&zV<_2}SlIxtqlM!?8-g zN!2mlvB{#piIrR3j4S?=nz1Eudxqs_!(MV(kmv5?WHwx#a$&)M&vJAAN{Z<;Kj;LK zz1-G1CQZ7!V2jsbr9F__H23xELHY&_n^bu%x}v_KFE8?239IoZ=cp~PGDA1C4=W9h zGaP3}d=Gv*z^!9D&o6l4Wov#6yp+E%bgkV5wrIHV?7aYp^#JEl*SiC#<=n@4o-J#3 zpo;F_N5Q`KrDGjOJyE7!pUcsmp9;{V0ll~LJeBbGy}71mNX15pQiZrjtGk4n)I@jU1=3vT;^K&0Z|`uS*! zR@vBOI9kT=CdLIh)mfae9hzZ=!XonAA`hir@!MZGHrfjh3JP`9!t_f)#!T4`uTN6* zT&}p-j;NTOg6aY`sE2BUaqU}U)qhkrpID^+POjtb%&+y0z1;gePpd0)>(75CsuV0I zdxp91Z?RlUa5ApAoP3)OGC$k#ZnPEPdc5*2SE6a2=ro2*(TH(^WNY!?gMz=X z=lE<$Z%c3dx2O0e4o#3Oxaius78=kQ-GTgK+vI&~J*+6D`eAu`!={P|{i5Cd+$4V@ zf<7Xzs|&C1q#`=CT&*D$Mk>j;%WFsCJsyzguM8)f$4;@Udbp{`{f9#2!LK$c1^HSBG zRx~)#WTl`11-02&pfE-IB6#K6TuTu<00eVYwzA%Wx$Kw0Cet#a#*MVzty<-W@0Y@- zTLsfC@-pLIc$D5hg~6nc)}_+NC_2A%KYPu$o0t0_cCD<2c4615#!_&xr6QmZ@v@+m z@;lRizH0g`lkkD;MoZlbM=AH1-rx0p>3Sv^;X%-=Q}sWa_^^!GfthAU>bNbbZlgWl zvo5Xp>Vru$TFhpx7PIv1k=_|60{vJ^>z1tV)#Y-2=`=!+-{s06Yaxwjm5ZO^3xKGu zO}MpL#GBb<^&s@~pP$H4%@xzerqitlvt$;UI!$lgb7=()RA3>IYJ4{CO8185#X?Yt zW6;C+^aE^ITm3j~ong*UhTyl^V~isK?5>-iUJvY+#ci$9BSq^^p~17FKELaX@xiK1 zpOunAO)K!Vr>dlH?U4U2U?J>z>Wx0aXCxTKzUsg=`k{z@HTkPZ%+-Ldf^jNr>|wMO z2@MQpL+k;AA?YNmBwJx0zIux0RXmx54Cu9fh}ANgZA9l)x$s48w8Mr99J2lpz!Zs( z)c57ZSD3qKd##qiB$MG7ucnJ=B$w*(ibDJi{wJEvQ+M!kC^<@eQ0J8^pYo4v{>MQnO87Y+?L_B^^n9ZaUz3I$Rs)4tTMG( ztsA3n_O9<)fjj0#O7eeZ?)5cf0ac(o)2iZI&7m(`HrVTbGHgGxqSH#8v(7h?&-t4^ z({AX;7buvf9KU&+5vG^E{e+`Qn3VaBbfM0SiU;+&m7eKyWgC(weN!@`ER8LPaLxUe zU*VN}r!3=dBlo_XZAMgf1iN&pMS`1K5OeXTgN)i}#kg%Bo?DsK4dWzQ29n?zuPGUM zeU8t0&zyYV7p1f?to?w!GBi$z;kZrV!S5H4b^%$Qc49on9)5A0*3Zd;`TA^G&GV`e z=eXcAsvr_Qy#-%7)};@h?8aOa-M#s}cCoh9eg9t#!%t`_;Etn9yJ-ONp~)Ge^KqlP zZZlK(4*zwKX^0{fM`t_zB85qKAp}^UlU9RUeFZTWNbbq3KP+nNYVj8U^jIlV5DogT zVD@sh6l&)9o7pe1Dg93X-|w#{n|GyLy_bDziKM!0*u77jHL}`(r?>v7qC2c^&ROnY zx}sfD=Js&KH?vny2ta`Pq=BvD+MmMJd-aAu&$>;mRhVEH)p{>*UyNJNz6iUB>uk$C zfJpX?=_yQh`{K8dM{I6lyD)^6Hv7*03(1{&qKy$|o>{FFaS>s~VrDT7+}#rTd$M;U z&w63P)}=6>ttMzuwy+?Uo*SR<&PiWzJT)#&BBtg3ZC_EM)>Bzw>rbZ!n5#>TpX=nfJehm zU=^gF#WH>7MBl(rKhr2n(|<&l0x&|KUo+CmmnX4`d`P@nYVpj;rOp4}{aU`IiC#(R zOQY(}L{r!F1dO)$8{$NYbLG7gSO^caM2ZuvX?Ir&!rrR%AxkW580Xh&Tdmb8swg71 zyA8vRQ;+?cqdI{Fsc2AsmiqH?*R$Vf6vPiZ61|scZ1EeP3>-R!$Vz?@ar+p!SV5eZ zuBU1wZNhdR8upG4xXm@2s1BMh)v$1_p8|`4O^TaQ^$(#T;Xi3$X#1*Ye;>>KE9s-$ z)^|98y^R`S!9Cd0d#22>Pi1TOIqA{jL zX@@e?1Qr-Z7Q6sc;pVZzVa7&mfR12;F(s(h-BKrWq;JoSwH<#NLo2aWUv)d zOz0z++eKy56sPye7ppf;H>=cHoq($-KeI3Z?0+mNUZ2PTt7Pi+UhDEA7@MH5`QP6# zR5Glloy<&|U{vrbU-C)BDBE&(6-^x1H^;Lsin!f$uq1ri3be%^f=_{ z@_b4JxPNE(<}&zL#Axf5D465qwwgQ_8>Gp$e9vwfLs&xA#qBGMAzX2Krno|MDlFM= zAU+l^d{+xX@aX|PQ*7zlRtc1nBLHSW(}f~E#!h8J=3Up;qZvKT+3wAdMc-{dA=u^9 z-isCfN6dvdAB0--f2!DRO5BI;ZPU|K<-)jUKHGmu)b|M~KFjD++VMf?VO3$16ZDc1 zSaChjp9H?oa#n}gqWy8;gd4>j&uYm1a9T4wC$YE6aQ&IUo`fj~2mLXD%{d!|QRts_ zgjR-k|F*g@=t>H{8~(%VK>S%*f>D+*WFrf&eG|4|#Drp`2(DzRZDwg<<7gLsWzRUw zie)@X*7_`Zl#1g0(Nn9t{|>nya`DLUw8CO~gJbY1iePho5^A=<$-ZbK5ot2~5eQn51b9~0;CF0cj3FScV5e*z&%z1?!)0&cZ2qrYewvdC&Dk^ zkvg4@5cbgtbgo4OuMhe}AfkxxwHuf7(Z}mwfe&|&LZ_sCk`vB3J$;n?7g4_mrC~5; z*faS@+Bsy{e=n1$o(~dWX&1C&Yj8e3U1O7e`>EqEAH_TsR&UMK{vi31NSsnWGTJ8! zm;%l?beq}o#HYLxru6%7L9>JmC zG;#3JtIA2}aEnaILJwpj*VBEYIt}1KFO0T%Q&WhmpJ|UW>u>E0p7u(5nj&;vjQPQ*jqnmCkL%a@prDD0^P(NPXVVSRTU1 zuE@8+KE(*XS3KysteCwgqz`{1c6Yy)AQ{3A+1nat=@)UO42Lm+{jNZ$Q}!$+{aIm31iIx5^MP*@QLW7&PGVII2uE*CFK3xi?QXI}s4$tHw8Kpzg4;d41qI_b3Xga!mT5vCdbHfUBmdVX;cJ`yR!tVZN8KYBV0nx}IR zz=cN0M>56o@X0>$zS^xNwG)d8*xV@22$l%1GlJxNf{_YW@ov*83kRBP=#eN+!ItOQ zp^Du8ITj%lLQ0;FB2V``tE7+{!9l0*+!`+Ud%@%s{+cY1=daKL?62lk2$$Rh7J4%{ zW*m3!5bF-!2d0*bt`#*<)*XZJJ?)&`UBBixHl-%aXFE3_YGdYSjPqNN${hURtqHQY zFUKp>E2m}S8lMRM0Z{Et5E6b3W-TQ6L>5A;Sp{E-xU{fNG#|#xK6f#LsaMFJtm zqmBoEl4+SZ@AYyn_QM3I*MgVMZ%ttgt~i^}PAOqux9Q^#yfZzo4x2`*|4rtl8RmA^ zei--StBB5c0qR+>2-N|;BWJC}(07uP#4f}E1pFe_vrkIYpGo*x{WHXjQuLFW#_nMo z)ZvHGR-GZwhAp2l@((=03h8)CQ&aUmly5}VNALn*(^|x05TPG>Ox&Chk1#74^z5^~ zzk=n0r$x7*AT8D5y_O9AyHYtgBi<|~4%O+W-X!&Uqx3QUw|C*ag1l|?@YO^V#v>;PD5%pS3 zu;WL!)chHX1+m=BaE4f_U^wy{%_4I1CM~9v2l~mv$HcF4nVGd#E)Nn87_(u=T6^PX ztm^>i>1C9`{SM-o=GT|~tJkh5yYk*ZJXhT~U4!LIGtcS0WE!?g{|~ol1H682lYOh$ zwBngXyrQOHAVE>Ky|Ltur#7hti9h3MC*pmw_0Y!6Ot3+^|m?@ z{Ij$V+cUC~fLZWo4XXyO?q}7*yFqmTjHGf-dA$U`vUd2sttxgaoH@@5wXBINyi9|n z9=K3uDw0tK`wJ>OkJxF5bkEIED42ZdiIrj`9*}QL@9w#zC&y`(Li`b=u0gxT-LtC= zk=apvXPYv|+Y(Go=%CcJ&t*$F4;CoE9!bf9728T$xzaT&ef?zYhs%Otc-7Gw*ral0 zP7e|lESjHEVcnGn4k)c`6Yl6kDk%N%9ePfYC|>6TZQIo#{AwE(O&@=gh$LI@nyI9zxsd! zP^bZ%g8MZo+r-_piqS=a9s&g)3O%`WZe8OcXuivqkLT`qIlyv!T071@@0`)v#0{Ngo z^M_Mno{RhbcKz&rS75|{x9WcG%AirxSj_8STOJ^>n9rTzr1azZabHwCvQ~E^S8wfY z)o~f_v5(N!;ev$2`;~5w0yRlqwdp-z0TpykU?G=lmN{EWpue6lHJ|+9pWqD6!PHka z0$e|oHrUrI7pA?)re>Y)9d?I7CRdNro`?)gp5xU`?uGsOjxG0~u|j$ip9kB^e0L-A zdy04*zPs{OAoNWsNN)G0dnjLXBV((?7uQg}g=jU$G~$Q~f@1N@bF_V`rJ^DB$eCDh zBD8hD%ijvJdQ118cUae)#r{@Tyu+#B%&HN40Tb>R1Skb?&7shFy9GrDbP{+V7^4#_ zQVyWchc$LEg#qqb^3)&AV}7yhe_^Z6 z*XXI@f>aE!aX%w9L_CoNv%Ob9o=hCkN=^85Gt#5|zxMJvpOmZSTU9N=eG%cTSg~y> zh0ShMtzK8R*cNu8rK(2Aa9{ld1XBv{YFp^y z)H_xIGOZAp>tY*Ls1cLpjUxd^9}k(dy_1zM$O1^-Dde+-81_!I$2`5ILj_D-rU7=H zx0I%37lAqj+^Lyend%0pys&PE2NZT!VswBnX5&ddk(~9V{M0|)_Qxo>;SmGCWLL7l z!lUDl89&ndp7r^>dZIXiQ=h2}gSi5Fs^$iPAM=C}GjV}l#TNFv!g@U;A%MzC=s@jN z@Q?EF#x6i#G%Y=h2UhDedru5_1Q^>&oOhN)vuvGWSg5(O{Vd>c)j^^)0#dr!Qs86u z(~F(Kj<_B%s4F~kbR!usr7W$aDH#mhQ`b%%R18|y8IRMjKiel4ke|I+1qCj({Rzk)js!5w%Rlx}4SKrQwwT+Y|p3KV)EeAu9ov(5VzV)RjM@b!4;1zqnp90ql{HMluD=9`0s@)s0km9(v&B4N8x7zvr ziP~_j{}VzmsLwTv$h#f(9eM3aCmH%zKEZ2XDMmsz^lB_1v|iWrM;mW)#!6z~Fa$2G zqEUX`c}C$0v%*j#4VQ5BrYA#%r*WF_pyMwnDFKhz?fU_nVe~sm`3}QrxY=&()+pXb z`iUjZXMgSqqyW#P-XJ%}DhrTUJ|rkt(3su)5k%GDch}Qx?H+!=rI)Dg#$k)q;@RE1 znx?r_JHyojEtd|fR+0(kxd~fTEUVCO9k;U@iv`Qs+S?Ox6Mo5+Y?cKHT$MA_;oUt`Gw-69ho9l( zo=^6X>!ZFW6~k7L&5wRYZ05Sw1P(067t%tvw9vrmx%oD~6vru(7^nXJ>VJTPrCi7V zpPUTyU^khH{e_nPU5o_3BVV{ODG)mU)9uISeut35sc6B@k%KlwG+6ToaiU4smi5PL zC&9hoM@tQ&rF?f-q{^o#9Q{ujc=4(V?*2g*no$I#cgacbN-(3&lYom=)F8R1Ig5_p_<})}|4*f(8Eef3 z$HAI^;LCHMC{31PqRiZ-m}=VR&`UNH-8L@iRQzJ0I&2k`7}tC8!{0wCnl;U~(EX*7 z!Q9SR?I!yfph@`pHs9ud!UAHlCAA;O*nkUILDjFjtrb=Pi0)^3)v`WVb-kH3e8e?< z&*165?Lq?oPZmMv|6SfUC~0xNH)J-Y^iGW>%vm7DgwGGt)b@I3d(v<89`Xu)asu)i zS2%g^#oIU(#qIqs!4S9Qs~mG-%8co!Z|*1HWo(CMRMi&}P7WTs;S+i4&_6bDNxIf*dhXQ{J9*Y|6kU#WttIlA#CI8LumxOAETS@HaxvpP+h z;G5QAAOtd}H-e{oJfiRpo{4om?IKDu2|^QjxZUDE&n(6)Je z-w(uX;jS`IkzC?9AcXbRA#W({k}huxSDG*M{6_zKmF;&sT?B-zRmT5d1rkHYE)qP( zNr-`uzb!e4UebMqlY~!1UYNi$6cFx4K$k#3hoMPdsD5PSZ7-atUjca12u@LY11F30 z3pxX;VA&%>J=xt;-}Cp6z6J8Ey>*NzqcLMaKG4y(Nc|)OEm>j970X8VvTeLxw7K8; z{*HzIGPfejZKE8$9-wivvHUh-8!2}|6^h2 zXOJU`tcAeU;2Z|4oftT;T=1>LR`7#OwFk`J8kyvc$335Rd~vQq4D(AYKd? zKz}uPs9`gN&0Vx*@-TJk#^U`0&W0<%PUE_$@xn}VH7){l{Uv#51WB?SW^k@Y+Z$Hp znu-Ba?5gqC;x8)NMn|K_46HA2%%tcPdE|mTPWNC%9QDWm78}a{;HU`l^5z=EZnwx*~>~Y5aD}?IXXn8ng=(&@Fyi~6!;3M z{ye%Svo{9vL0!GM?J+mJ;7gTF`L^6Qzg5b|<-Pl-+nG2xjz)3v=`kB>8|8ECxeQzc z3pJ4sB@AEVDB8u^F6bpptT_OA^>BRj_wP8~1=ldXG4PJ*g5FJVUFq}yL0B*7e5)5h zN7h+4L|FW8^Nv{_qd%IpS?^#nE55+<Dz2SH#K5!*x zYuGc6sorn>GZnW~UQ)H{W6`r9%f5^0Um%86tw1gXl>7_i`|)MUDPvP{R~Cz8r>KMH zDl?#G(dBu|T}iD$Jo5Lk z4`iTuIb*K=s$#hgKWpB}2oB&OP=n8gqG(#8+fS&0+R2QG+`FdRy(Ta3&&-E`G^5<%ujz)i zX2q%&C-N~}`UWRkT!GQ&SRk5Sau%UO{_T(9)DLnsb45oL6TF6IR=&wO(C0=-$>`?f z#u*zR@XwGxdf)PO_Vv~dzPo1%NjPxdj1TvEC`uLh$z$H{l(l9D z>34<<`dYNUyRmit#vHKZqmv^c=t=tiZsQ)&CFbxHyHfk_p3g#%?#zPF!LZ4iCNEF+ z^F5A*UFoyEb0q7x7j+9C(a}+C?2=g<$y-u7Ys5;YX-3Rwuyka`G`&wCDm6@H`Hcl< zUWYdkkUz%9?YK2bGw&Dw(TK18?V4avU|NK2rYtujJv97l31ItC8+@v*DCz6p`Te(D zIVjJVQtEKkqeAK82(Tji+a6td!fbgrR0Ndr7mj}uYn*3qh()aV_y?^lLsiWFS2bvX zz^mcRgi3U*Ge#boC?JqITQ$yAYWg!pcc73UZu)|4d94V`T!Ocb(MpeRk~PiHRk(0{ z_dNopNxP!aA`SYSM$cAqWP#N7r{#4VZA%ZJAs&l_u3O8Im!4MF+WUWJj)tU^(8(GOJAmq|?W z(`=U`RVG)iOYGmAY-e0dv$XnS7y&f{D>mvKmen2Ly9fNr8Go)QVOPHzGSMFOCu#24 zM(d?e;MJb&ThzsWeX?|hb44t+An)5W|GRw-(njAB(~iALH+bfq9Z2+Xv>Wg^i7j`a z{Wo$kIb5=@(?2mBTnF-Nr7hMA- z_ofqXaNJ5)2#;_N@dP0?*@NVGWJCg6TZLolY2PDr35U(%hH(IL+0Yc@(1r38AQ}?)k#_ld*MqN9_JAVqU|R=96r-EHoit5h=XLowYHnVZgG>^)mm9tmR*$?$ksbikyS26ZKP=g#m)J^W{$0#?4}>wt)S}by2u8HopP@HWnpho~{j93-lC2Yh)P1Y+Dd+ygYBA{m@d4hQ5cF4-s?3*5T)M`!h>pr@V;my^Nqxk z!LZq^YIHZS3KBm2aKXlQ=RIO8>EnzlL~_-4mDP`leS=@-gp5(0{MKg~t*p|{%LP0`-2>(_WHg)#%ra^}-Mv;$bDO$3@G-W$nkl6w!SC$; z`s@W~he!poI_yIz!!Y$sIK3(hn%D(}9 zAcsx(;)GhRNr0&lqBB*(eU4@%8p%^@hjJTT|+Wb z0`DL>{WSL8{tBZDOF~Fgf2lA*Y5w-l)h^6X`Lu*wItBJlUP*A#M{_Y;Bz5B&!xzlC z!=xn-r}n_()~$pYjDJIWOZ6QW-Diqd{KLr18^ZvMlX>GXrEp~Ckn;6-u^nuy2ETui z8;3R}y~&b+rUk}cRs0_@=o-2?56G&p|3lJ;N6Cll-p!!Y+~ir$taRV!#QXYwL?Ep( zi|P({LG$LL=@0I&Jf~lBo@^Cv*(Xh7YZ(Nn4@w69wj-7g0z(Kd#q8pD>h+d%At1Y#8M0@80M*)N4>uU;U=jXjpG(iXx zW>D5mf9UyBU%+7@oOr9u&;76Un|@7d^y2WzlIA6?xZHUDa79x58M5^^zr^zr*6kDN zW*xc^hgnOqFsK{;?Oe?Ej4v$g{ZDMxc(qM`d~$QFhQQcf#EHba@86Z3U6}72(7Q;b zAk1|>^%*!zBl|46EKeb&4}-4ZE`a$zIe#!20H~zY8-g%ywSAY*r)@^+xWY#gcVRF> z!s}iFX4`XE8z6REGoB;knP~a16|UNxmk@FBftph=37xFgzAsFsRz}e-^PZ>F zn06>AG+$yNzOA(BlvZ;+LxlBy*2yi`inu6NUFEFDywrTvPp|;UVqE5W>fr(hd>9+f zHA4%!JEPaWn5;OOks3>`SWc+{vbI4|0D=5p_oVN_Hr8Uha#dl435_^R5n3tujiM6` zv^EuPk1Wj9q>WH0l&J@qf_Ck37m-z1LX{#@H~AeZ7QqCTc)ffsuNxav`CJct_}1dI zyWO%a(k@LDnKH7-NSa`JRoD9NtR@0z4X{Q39lR{hf+>8gw*RUP`a-I1pP6}rny zy$w37t?))c$bnk%NeUFIa5ixYVZ5?ORQj@*2aEZ|0o{^k<4cE2h2m|BbpOsRZmzUH zC~&JPWFg`!8qP8!jk8~Cjsf8KLQMdT8n-8;3eGwN$vUa7G-K%7y>RWlyUwQQm5BpR@!)`KujQq$7u=xb36XeJ&qq@V{8P_uxc zedq6q1&ZUp!j(S&ajU_f@Lw=1iB9lIB0f&wYrD%(+LGByJREIvsb2C>Q)~n+*H{Oh zW5ardb5A>&I^|lSNQZ)0{MMeV4c&^?q+{323MRC=7ea*Ms*=O-J3eZRmh5zLEBscky7lknH5_PEOY0C}{vxK`u(ipHK{a%I zik_ImhWEBaJ>XVdN>dK;#*jOce(FmP?(?4cFikw=PuE=cy@aPZ%CQq7ZOs_7CX7?u zQAtV~6@dnine1o+&wF5~LXc8BN!4Y|MqUcY9AR@51*%E#nAh9;Y zF41;`9PqFSyyfG!){dCRxfQoBx$1Q{jlXY*s#x+vRj`um1Z`5C==&jK4s=xKmHH1Q z>h1MgIEVseom-scKJvclyGvHguh>?GrTj8W(<9+Z?Xm}}3P<>?H&#Va7tm!qL%72b zd%P{^ou$`4=jZ5)TnB`@W0i592@DuD8yb@M75nhE&2RO}g4^F0|9^~T#losD`QakA z^u;1LFB#)pDe%$NFFw^WN{T3jRD3aA%25PgZF5QEy78u9z9j2CZOZQ2pZAsPvb64< zCZhWexzBwB7sOY3{crOseg8cg-**(7X_Xu$e+(&+>of;bgHsJWLrO@_Cu#K};>?<@>_2q)9?iSAclXh0}>f^h-b$IeD({qkwM1*RLN7+SdV# zDsgpqr1Dfcyz;+D_nrF)%3C9Dj>&ypzN2y5-1)(uS(8M?41XRc>lHCl3Pcn z`Qu3VSu!TKXHWLyZGRUs^G+ASU+YEQf>#WHd>Vsi3!c#uz8Im1EvSGD z&SIxC$e=5p`Vr)o~30A!qye2>O4MLo}9)+aUxTYEmOg5P47Ya9EK*s|b)01n4 z``zQkySnUp=tV%TP)dNdFI!rT7hi8v{0~Vnx^6Ko(N&fMp=EGel0?Px&Rm2>BE;vO zakef(ssW|ZYqu3dHtksOhqGI#s%VVF{)Ju=zoyQ#+ZnPaw3cM~s4om;k!{mcAb)DO zeIQAkcJ8z6#{MrX_Wk6_btX45;iJd7geuky9FM(Yu;;H2H#m!Q*pGm=5`ySy!|TH| zK$=wqM{7Vu0(1tgnRZdDKRw_?4m1N!TaZ@P7J)kf64%5%Ixnxqgz%{0TOeC2D#NJ$ zpqjKi!0d(_v`<1C#P{v;2V~z6{u0J>tesT=yzq7Z08sMl6azsU?thu+XmASRTBQcZ zU8-io9VnZ`CcIZuuI1AQA3J~u4LrhIVP{t7~q*Bz&RD*Z_O9LF%lxsbpYh(k3?Dx?2Q9u>fU~YK!;5j z7>cP^|KAfs7J}4y6CV7+*kr<|1~dx1RIKS=L~LWovK3!FX5336k%WPtX9}wF6^~8B F{vUI54z&OP delta 10767 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 Mq@h@P|9Qaw0qx7YHvj+t From 6c649997e4920bb82e039d2498af49e8a1b8e17f Mon Sep 17 00:00:00 2001 From: PatchouliKnowledge Date: Sat, 11 Oct 2014 21:31:31 +0300 Subject: [PATCH 2/8] Fixes duplicate Ripley proc code, moves messages to switch() in Phazon damtype change code --- code/game/mecha/combat/phazon.dm | 15 ++-- code/game/mecha/working/ripley.dm | 110 ++++++------------------------ 2 files changed, 30 insertions(+), 95 deletions(-) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 5bf6dacd661..dd0a7348c3f 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -61,16 +61,19 @@ switch(new_damtype) if("Fists") damtype = "brute" + src.occupant_message("Your exosuit's hands form into fists.") if("Torch") damtype = "fire" + src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.") if("Toxic injector") damtype = "tox" - if (new_damtype == "Fists") - src.occupant_message("Your exosuit's hands form into fists.") - if (new_damtype == "Torch") - src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.") - if (new_damtype == "Toxic injector") - src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") + src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") +// if (new_damtype == "Fists") +// src.occupant_message("Your exosuit's hands form into fists.") +// if (new_damtype == "Torch") +// src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.") +// if (new_damtype == "Toxic injector") +// src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) return diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index e90531788ad..0b74b55d837 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -29,99 +29,31 @@ ..() /obj/mecha/working/ripley/go_out() - if(!src.occupant) return - var/atom/movable/mob_container - if(ishuman(occupant)) - mob_container = src.occupant - if(occupant.hud_used && last_user_hud) - occupant.hud_used.show_hud(HUD_STYLE_STANDARD) - else if(istype(occupant, /mob/living/carbon/brain)) - var/mob/living/carbon/brain/brain = occupant - mob_container = brain.container - else - return - if(mob_container.forceMove(src.loc))//ejecting mob container - src.log_message("[mob_container] moved out.") - occupant.reset_view() - src.occupant << browse(null, "window=exosuit") - if(istype(mob_container, /obj/item/device/mmi)) - var/obj/item/device/mmi/mmi = mob_container - if(mmi.brainmob) - occupant.loc = mmi - mmi.mecha = null - src.occupant.canmove = 0 - src.verbs += /obj/mecha/verb/eject - src.occupant = null - src.icon_state = initial(icon_state)+"-open" - if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open") - else if (src.damage_absorption.["brute"] == 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open") - src.dir = dir_in - return + ..() + if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open") + else if (src.damage_absorption.["brute"] == 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open") /obj/mecha/working/ripley/moved_inside(var/mob/living/carbon/human/H as mob) - if(H && H.client && H in range(1)) - H.reset_view(src) - H.stop_pulling() - H.forceMove(src) - if(H.hud_used) - last_user_hud = H.hud_used.hud_shown - H.hud_used.show_hud(HUD_STYLE_REDUCED) - src.occupant = H - src.add_fingerprint(H) - src.forceMove(src.loc) - src.log_append_to_last("[H] moved in as pilot.") - src.icon_state = initial(icon_state) - if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") - else if (src.damage_absorption.["brute"] == 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") - dir = dir_in - playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - if(!hasInternalDamage()) - src.occupant << sound('sound/mecha/nominal.ogg',volume=50) - return 1 - else - return 0 + ..() + if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") + else if (src.damage_absorption.["brute"] == 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") /obj/mecha/working/ripley/mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc as obj,mob/user as mob) - if(mmi_as_oc && user in range(1)) - if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client) - user << "Consciousness matrix not detected." - return 0 - else if(mmi_as_oc.brainmob.stat) - user << "Beta-rhythm below acceptable level." - return 0 - if(!user.unEquip(mmi_as_oc)) - user << "\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]" - return - var/mob/brainmob = mmi_as_oc.brainmob - brainmob.reset_view(src) - occupant = brainmob - brainmob.loc = src //should allow relaymove - brainmob.canmove = 1 - mmi_as_oc.loc = src - mmi_as_oc.mecha = src - src.verbs -= /obj/mecha/verb/eject - src.icon_state = initial(icon_state) - if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") - else if (src.damage_absorption.["brute"] == 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") - dir = dir_in - src.log_message("[mmi_as_oc] moved in as pilot.") - if(!hasInternalDamage()) - src.occupant << sound('sound/mecha/nominal.ogg',volume=50) - return 1 - else - return 0 + ..() + if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") + else if (src.damage_absorption.["brute"] == 0.3) + src.overlays = null + src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") /obj/mecha/working/ripley/firefighter desc = "Standart APLU chassis was refitted with additional thermal protection and cistern." From d31ed2583b94c4ea0916d1f2cd8bce07f3ad4728 Mon Sep 17 00:00:00 2001 From: PatchouliKnowledge Date: Sat, 11 Oct 2014 21:42:54 +0300 Subject: [PATCH 3/8] Removes comments from combat.dm and phazon.dm --- code/game/mecha/combat/combat.dm | 154 ------------------------------- code/game/mecha/combat/phazon.dm | 31 ------- 2 files changed, 185 deletions(-) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index dfa65b1abb3..65b49cca717 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -5,20 +5,9 @@ var/list/destroyable_obj = list(/obj/mecha, /obj/structure/window, /obj/structure/grille, /turf/simulated/wall) internal_damage_threshold = 50 maint_access = 0 - //add_req_access = 0 - //operation_req_access = list(access_hos) damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8) var/am = "d3c2fbcadca903a41161ccc9df9cf948" -/* -/obj/mecha/combat/range_action(target as obj|mob|turf) - if(internal_damage&MECHA_INT_CONTROL_LOST) - target = pick(view(3,target)) - if(selected_weapon) - selected_weapon.fire(target) - return -*/ - /obj/mecha/combat/melee_action(target as obj|mob|turf) if(internal_damage&MECHA_INT_CONTROL_LOST) target = safepick(oview(1,src)) @@ -26,21 +15,10 @@ if(istype(target, /mob/living)) var/mob/living/M = target if(src.occupant.a_intent == "harm") -// playsound(src, 'sound/weapons/punch4.ogg', 50, 1) if(damtype == "brute") step_away(M,src,15) - /* - if(M.stat>1) - M.gib() - melee_can_hit = 0 - if(do_after(melee_cooldown)) - melee_can_hit = 1 - return - */ if(istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target - // if (M.health <= 0) return - var/obj/item/organ/limb/temp = H.get_organ(pick("chest", "chest", "chest", "head")) if(temp) var/update = 0 @@ -55,8 +33,6 @@ if("tox") playsound(src, 'sound/effects/spray2.ogg', 50, 1) if(H.reagents) -// if(H.reagents.get_reagent_amount("carpotoxin") + force < force*2) //Carpotoxin in mech tools? I don't even -// H.reagents.add_reagent("carpotoxin", force) if(H.reagents.get_reagent_amount("cryptobiolin") + force < force*2) H.reagents.add_reagent("cryptobiolin", force/2) if(H.reagents.get_reagent_amount("toxin") + force < force*2) @@ -78,8 +54,6 @@ if("tox") playsound(src, 'sound/effects/spray2.ogg', 50, 1) if(M.reagents) -// if(M.reagents.get_reagent_amount("carpotoxin") + force < force*2) -// M.reagents.add_reagent("carpotoxin", force) if(M.reagents.get_reagent_amount("cryptobiolin") + force < force*2) M.reagents.add_reagent("cryptobiolin", force/2) if(M.reagents.get_reagent_amount("toxin") + force < force*2) @@ -119,134 +93,6 @@ break return -/* -/obj/mecha/combat/proc/mega_shake(target) - if(!istype(target, /obj) && !istype(target, /mob)) return - if(istype(target, /mob)) - var/mob/M = target - M.Dizzy(3) - M.adjustBruteLoss(1) - M.updatehealth() - for (var/mob/V in viewers(src)) - V.show_message("[src.name] shakes [M] like a rag doll.") - return -*/ - -/* - if(energy>0 && can_move) - if(step(src,direction)) - can_move = 0 - spawn(step_in) can_move = 1 - if(overload) - energy = energy-2 - health-- - else - energy-- - return 1 - - return 0 -*/ -/* -/obj/mecha/combat/hear_talk(mob/M as mob, text) - ..() - if(am && M==occupant) - if(findtext(text,"")) - sam() - return - -/obj/mecha/combat/proc/sam() - if(am) - var/window = {" - - - - - -
-
- - -
-
- - - "} - occupant << browse(window, "window=sam;size=800x600;") - onclose(occupant, "sam", src) - return -*/ /obj/mecha/combat/moved_inside(var/mob/living/carbon/human/H as mob) if(..()) if(H.client) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index dd0a7348c3f..d1e4cb1c2e0 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -12,37 +12,12 @@ infra_luminosity = 3 wreckage = /obj/structure/mecha_wreckage/phazon add_req_access = 1 - //operation_req_access = list() internal_damage_threshold = 25 force = 15 var/phasing = 0 var/phasing_energy_drain = 200 max_equip = 3 -/* //The Phazon spawned with an RCD and a Gravcatapult normally, but now that it's buildable we can't have that anymore now, can we -/obj/mecha/combat/phazon/New() - ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/gravcatapult - ME.attach(src) - return - -/obj/mecha/combat/phazon/Bump(var/atom/obstacle) - if(phasing && get_charge()>=phasing_energy_drain) - spawn() - if(can_move) - can_move = 0 - flick("phazon-phase", src) - src.loc = get_step(src,src.dir) - src.use_power(phasing_energy_drain) - sleep(step_in*3) - can_move = 1 - else - . = ..() - return -*/ - /obj/mecha/combat/phazon/click_action(atom/target,mob/user) if(phasing) src.occupant_message("Unable to interact with objects while phasing") @@ -68,12 +43,6 @@ if("Toxic injector") damtype = "tox" src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") -// if (new_damtype == "Fists") -// src.occupant_message("Your exosuit's hands form into fists.") -// if (new_damtype == "Torch") -// src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.") -// if (new_damtype == "Toxic injector") -// src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) return From 8b9881a682c0a95f5c316f38ea16d3fed029ad42 Mon Sep 17 00:00:00 2001 From: PatchouliKnowledge Date: Sat, 11 Oct 2014 22:37:37 +0300 Subject: [PATCH 4/8] I accidentally the phasing --- code/game/mecha/combat/phazon.dm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index d1e4cb1c2e0..4260976a41a 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -18,6 +18,20 @@ var/phasing_energy_drain = 200 max_equip = 3 +/obj/mecha/combat/phazon/Bump(var/atom/obstacle) + if(phasing && get_charge()>=phasing_energy_drain) + spawn() + if(can_move) + can_move = 0 + flick("phazon-phase", src) + src.loc = get_step(src,src.dir) + src.use_power(phasing_energy_drain) + sleep(step_in*3) + can_move = 1 + else + . = ..() + return + /obj/mecha/combat/phazon/click_action(atom/target,mob/user) if(phasing) src.occupant_message("Unable to interact with objects while phasing") From 9ee688198f0061ac08643e1254b3faf277148b36 Mon Sep 17 00:00:00 2001 From: PatchouliKnowledge Date: Tue, 14 Oct 2014 18:37:01 +0300 Subject: [PATCH 5/8] Fixes the bug with Gygax/Durand armour welding sprites looping infinitely --- icons/mecha/mech_construction.dmi | Bin 17297 -> 17290 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mecha/mech_construction.dmi b/icons/mecha/mech_construction.dmi index 664aab343be6d846b4ebf2645b692067f647e4fc..393cead765e3731282be06f1d38e659e1bd2b912 100644 GIT binary patch delta 585 zcmV-P0=E5;hXIO*0kF;j0acUF0xf^SD5O>lU|ah1rQR8aCem{zhQt8*m}KsE?hH7N zp4Ts%ZM1sbgde)B^5PghMf1C97<}ewowXOUI1DnK@3UGisyeB4dpg=T`{Zjn3WGE+ ztM-NpgI$@tYdQamDGrM{Y{p@84qI^8lEdyf?194`$?~!qNDqn>p-2;oRH1)J7mAdj z25c^24`7iB-s=#5!bAVkNSu$Fzvm$fCr0WKm+Luqd(USd>_HIt4zuJbW=5 zN5^^?^GPDJgLJHiw4r^3>sdF@BSb$Mkaa?Iq5)YeL=PH}^+LR<8IUzI)KXmUn=$A%8k9DU X*4x$P&*>kW^l~#N5&_AxGX-8gc2E)5 delta 568 zcmV-80>}M|hXIj?0kF;j0bG;M0xf?63aJ$X*p@zhsdt9KR(j6VkQgu@lg$0jof#bl zkISdkI#@if{I{eivwR;s1k;o?`?|cHIe&sOmSGqVG|CUa@dT+<{Wm*VRsyMPnMU}KzdN52t}GuqzZpUx=^GH z)njAce4Ff|y1AW=RC9&jpFdwF9Vt>$h$R)-VVBe_hh++fWeSI73WsG1hh++fWeSH| zOE~OJIP6W=nHJJxWNPCUj!u{F?ehF^aSYZL(R&)izBXBru-UUL&YxxRtSpNsW?7fH z;XGOvXVS7bmzKrZv@FhN$Ay2BxT|v78OOyck=G9F;+5DnIxsdHAB$)ox77{23ad~T>pF2(QmW1h{KMK zJJyxQby+6Ik|(iQLt?dt#BL3VSIu1{V}M+w1_pxpu{RD) From 45cea71165c6a43dd7741b231bf57bf217efb395 Mon Sep 17 00:00:00 2001 From: PatchouliKnowledge Date: Thu, 16 Oct 2014 23:47:05 +0300 Subject: [PATCH 6/8] I think this needs a changelog --- html/changelogs/Patchi-mechs-phazons.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 html/changelogs/Patchi-mechs-phazons.yml diff --git a/html/changelogs/Patchi-mechs-phazons.yml b/html/changelogs/Patchi-mechs-phazons.yml new file mode 100644 index 00000000000..7990ef7ea6d --- /dev/null +++ b/html/changelogs/Patchi-mechs-phazons.yml @@ -0,0 +1,14 @@ +author: Patchouli Knowledge +delete-after: true +changes: + - rscadd: "In light of the recent achievements of the Robotics department, new and upgraded exosuit schematics were delivered to SS13 exosuit fabricators as a reward from CentComm. + - rscadd: "The countless hours of research, experimentation, and reverse-engineering of wrecks from the mining asteroid have paid off - the Research team has rediscovered the process of building Phazon exosuits. The parts and circuits have been made available in the exofabs and circuit printers." + - rscadd: "The APLU Ripley exosuit has been refitted with asteroid mining purposes in mind. Its armour plating will provide extra protection against the brute attacks of asteroid alien lifeforms, and protect from gibtonite explosions. The leg servos were upgraded to provide faster movement." + - rscadd: "There are rumours of some creative shaft miners discovering a way of augmenting APLU Ripley armour with trophy hides from goliath-type asteroid lifeforms..." + - tweak: "Durand construction routines now require a phasic scanner module and a super capacitor to match Nanotrasen industry standards." + - tweak: "The exosuit fire extinguisher now boasts a larger watertank, and carries a whole 1000u of water from the old 200u tank." + - tweak: "The exosuit plasma converter's efficiency has been vastly improved upon, and its fuel consumption has been cut to nearly half of old values." + - bugfix: "The exosuit sleeper interiors have been refitted to allow the occupants more freedom of movement, and the occupants may now eject at will. + - bugfix: "The armour plating on all exosuits was fitted with reactive deflection systems specifically designed to stop the rapid slashes from xenomorph threats." + - bugfix: "The Firefighter Ripley chassis were moved from the Exosuit Equipment section to the APLU Ripley section of exofab menus." + - spellcheck: "Fixed some minor errors in the exosuit construction message syntax." \ No newline at end of file From 433abe79d112afa4a75e0e9dfd00091451a76362 Mon Sep 17 00:00:00 2001 From: PatchouliKnowledge Date: Fri, 17 Oct 2014 23:43:20 +0300 Subject: [PATCH 7/8] A less gimmicky way of removing the attack message from goliath plates --- code/game/mecha/mecha.dm | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 1ee9b6435b6..556ad39f389 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -654,7 +654,7 @@ ////// AttackBy ////// ////////////////////// -/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/mecha/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/device/mmi)) if(mmi_move_inside(W,user)) @@ -663,9 +663,6 @@ user << "[src]-MMI interface initialization failed." return - if(istype(W, /obj/item/asteroid/goliath_hide)) - return - if(istype(W, /obj/item/mecha_parts/mecha_equipment)) var/obj/item/mecha_parts/mecha_equipment/E = W spawn() @@ -768,7 +765,7 @@ user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src]") return - else + else if(!(W.flags&NOBLUDGEON)) call((proc_res["dynattackby"]||src), "dynattackby")(W,user) /* src.log_message("Attacked by [W]. Attacker - [user]") From bb190861bfdf7bfbbc1a681da79ccd1059196455 Mon Sep 17 00:00:00 2001 From: PatchouliKnowledge Date: Sat, 18 Oct 2014 00:03:01 +0300 Subject: [PATCH 8/8] Goliath plates are now NOBLUDGEON --- code/modules/mob/living/simple_animal/hostile/mining_mobs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index c80ad4fd0df..7fb8c527436 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -416,6 +416,7 @@ desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." icon = 'icons/obj/items.dmi' icon_state = "goliath_hide" + flags = NOBLUDGEON w_class = 3 layer = 4