From 4297e186ca64912c25efd0f8104e431dcfb612d0 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 30 Mar 2019 16:47:18 -0400 Subject: [PATCH] Conflict Resolution --- .../simple_mob/subtypes/animal/sif/savik.dm | 56 +--- .../simple_mob/subtypes/animal/sif/shantak.dm | 74 +---- .../simple_mob/subtypes/animal/space/carp.dm | 133 +-------- .../mechanical/mecha/adv_dark_gygax.dm | 268 +----------------- .../subtypes/mechanical/mecha/durand.dm | 58 +--- .../subtypes/mechanical/mecha/hoverpod.dm | 31 +- vorestation.dme | 4 - 7 files changed, 6 insertions(+), 618 deletions(-) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm index cf4467389c6..abc8811372f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm @@ -1,56 +1,3 @@ -<<<<<<< HEAD -// Saviks are dangerous, angry creatures that hit hard, and will berserk if losing a fight. - -/mob/living/simple_mob/animal/sif/savik - name = "savik" - tt_desc = "S Pistris tellus" //landshark - player_msg = "You have the ability to berserk at will, which will grant strong physical bonuses for \ - a short period of time, however it will tire you and you will be much weaker for awhile after it expires." - - faction = "savik" - - icon_state = "savik" - icon_living = "savik" - icon_dead = "savik_dead" - icon = 'icons/jungle.dmi' - - maxHealth = 125 - health = 125 - - movement_cooldown = 0.5 SECONDS - - melee_damage_lower = 15 - melee_damage_upper = 35 - attack_armor_pen = 15 - attack_sharp = TRUE - attack_edge = TRUE - melee_attack_delay = 1 SECOND - attacktext = list("mauled") - - say_list_type = /datum/say_list/savik - ai_holder_type = /datum/ai_holder/simple_mob/savik - -/datum/say_list/savik - speak = list("Hruuugh!","Hrunnph") - emote_see = list("paws the ground","shakes its mane","stomps") - emote_hear = list("snuffles") - -/mob/living/simple_mob/animal/sif/savik/handle_special() - if((get_AI_stance() in list(STANCE_APPROACH, STANCE_FIGHT)) && !is_AI_busy() && isturf(loc)) - if(health <= (maxHealth * 0.5)) // At half health, and fighting someone currently. - berserk() - -/datum/ai_holder/simple_mob/savik - mauling = TRUE - -// So players can use it too. -/mob/living/simple_mob/animal/sif/savik/verb/berserk() - set name = "Berserk" - set desc = "Enrage and become vastly stronger for a period of time, however you will be weaker afterwards." - set category = "Abilities" - - add_modifier(/datum/modifier/berserk, 30 SECONDS) -======= // Saviks are dangerous, angry creatures that hit hard, and will berserk if losing a fight. /datum/category_item/catalogue/fauna/savik @@ -119,5 +66,4 @@ set desc = "Enrage and become vastly stronger for a period of time, however you will be weaker afterwards." set category = "Abilities" - add_modifier(/datum/modifier/berserk, 30 SECONDS) ->>>>>>> 1afbe8d... Explorer Update - Cataloguers (#6016) + add_modifier(/datum/modifier/berserk, 30 SECONDS) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm index 40df314e709..881615138e0 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm @@ -1,74 +1,3 @@ -<<<<<<< HEAD -// Shantaks are essentially sif wolves. - -/mob/living/simple_mob/animal/sif/shantak - name = "shantak" - desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \ - Don't be fooled by its beauty though." - tt_desc = "S Choeros shantak" - - faction = "shantak" - - icon_state = "shantak" - icon_living = "shantak" - icon_dead = "shantak_dead" - icon = 'icons/jungle.dmi' - - maxHealth = 75 - - movement_cooldown = 5 - - melee_damage_lower = 6 - melee_damage_upper = 14 - base_attack_cooldown = 1 SECOND - melee_attack_delay = 0.5 SECONDS - attack_armor_pen = 5 - attack_sharp = TRUE - attack_edge = TRUE - attacktext = list("gouged") - - say_list_type = /datum/say_list/shantak - -/datum/say_list/shantak - speak = list("Shuhn.","Shrunnph?","Shunpf.") - emote_see = list("scratches the ground", "shakes out its mane", "clinks gently as it moves") - - -// The pack leader. -// Will command other shantaks to follow it. -/mob/living/simple_mob/animal/sif/shantak/leader - name = "big shantak" - desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \ - This one seems bigger than the others, and has a commanding presence." - icon_scale = 1.5 - maxHealth = 125 - player_msg = "You have the ability to command other shantaks to follow you." - -/mob/living/simple_mob/animal/sif/shantak/leader/verb/rally_pack() - set name = "Rally Pack" - set desc = "Commands your fellow packmembers to follow you, the leader." - set category = "Abilities" - - for(var/mob/living/simple_mob/animal/sif/shantak/S in hearers(7, src)) - if(istype(S, /mob/living/simple_mob/animal/sif/shantak/leader)) // Leaders won't follow other leaders. Also avoids trying to follow ourselves. - continue - if(!S.ai_holder) - continue - if(S.faction != src.faction) - continue - var/datum/ai_holder/AI = S.ai_holder - AI.set_follow(src) - -// Variant that automatically commands nearby allies to follow it when created. -// Suggested to spawn last so it can rally up all the shantaks easily before hunting for tasty explorers. -/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/Initialize() - rally_pack() - return ..() - - -// These ones only retaliate. Used for a PoI. -/mob/living/simple_mob/animal/sif/shantak/retaliate -======= // Shantaks are essentially sif wolves. /datum/category_item/catalogue/fauna/shantak @@ -165,6 +94,5 @@ // These ones only retaliate. Used for a PoI. -/mob/living/simple_mob/animal/sif/shantak/retaliate ->>>>>>> 1afbe8d... Explorer Update - Cataloguers (#6016) +/mob/living/simple_mob/animal/sif/shantak/retaliate ai_holder_type = /datum/ai_holder/simple_mob/retaliate \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm index 5733089a591..ddd852f7793 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm @@ -1,133 +1,3 @@ -<<<<<<< HEAD -// Space carp show up as a random event to wreck hapless people in space or near windows. -// They generally fit the archetype of 'fast but fragile'. -// This is compensated by being in groups (usually). -/mob/living/simple_mob/animal/space/carp - name = "space carp" - desc = "A ferocious, fang-bearing creature that resembles a fish." - icon_state = "carp" - icon_living = "carp" - icon_dead = "carp_dead" - icon_gib = "carp_gib" - - faction = "carp" - maxHealth = 25 - health = 25 - movement_cooldown = 0 // Carp go fast - hovering = TRUE - - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" - - melee_damage_lower = 7 // About 14 DPS. - melee_damage_upper = 7 - base_attack_cooldown = 10 // One attack a second. - attack_sharp = TRUE - attack_sound = 'sound/weapons/bite.ogg' - attacktext = list("bitten") - - meat_amount = 1 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat - - ai_holder_type = /datum/ai_holder/simple_mob/melee - - var/knockdown_chance = 15 - -/mob/living/simple_mob/animal/space/carp/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - if(prob(knockdown_chance)) - L.Weaken(3) - L.visible_message(span("danger", "\The [src] knocks down \the [L]!")) - -// Subtypes. - -// Won't wander away. -/mob/living/simple_mob/animal/space/carp/event - ai_holder_type = /datum/ai_holder/simple_mob/event - - -/mob/living/simple_mob/animal/space/carp/large - name = "elder carp" - desc = "An older, more matured carp. Few survive to this age due to their aggressiveness." - icon = 'icons/mob/64x32.dmi' - icon_state = "shark" - icon_living = "shark" - icon_dead = "shark_dead" - - maxHealth = 50 - health = 50 - movement_cooldown = 5 // Slower than the younger carp. - mob_size = MOB_LARGE - - pixel_x = -16 - default_pixel_x = -16 - - meat_amount = 3 - - -/mob/living/simple_mob/animal/space/carp/large/huge - name = "great white carp" - desc = "A very rare breed of carp- and a very aggressive one." - icon = 'icons/mob/64x64.dmi' - icon_dead = "megacarp_dead" - icon_living = "megacarp" - icon_state = "megacarp" - - maxHealth = 230 - health = 230 - movement_cooldown = 10 - - melee_damage_lower = 15 // About 20 DPS. - melee_damage_upper = 25 - - pixel_y = -16 - default_pixel_y = -16 - - meat_amount = 10 - - -/mob/living/simple_mob/animal/space/carp/holographic - name = "holographic carp" - desc = "An obviously holographic, but still ferocious looking carp." - // Might be worth using a filter similar to AI holograms in the future. - icon = 'icons/mob/AI.dmi' - icon_state = "holo4" - icon_living = "holo4" - icon_dead = "holo4" - alpha = 127 - icon_gib = null - meat_amount = 0 - meat_type = null - - mob_class = MOB_CLASS_PHOTONIC // Xeno-taser won't work on this as its not a 'real' carp. - -/mob/living/simple_mob/animal/space/carp/holographic/Initialize() - set_light(2) // Hologram lighting. - return ..() - -// Presumably the holodeck emag code requires this. -// Pass TRUE to make safe. Pass FALSE to make unsafe. -/mob/living/simple_mob/animal/space/carp/holographic/proc/set_safety(safe) - if(!isnull(get_AI_stance())) // Will return null if lacking an AI holder or a player is controlling it w/o autopilot var. - ai_holder.hostile = !safe // Inverted so safe = TRUE means hostility = FALSE. - ai_holder.forget_everything() // Reset state so it'll stop chewing on its target. - -// Called on death. -/mob/living/simple_mob/animal/space/carp/holographic/proc/derez() - visible_message(span("notice", "\The [src] fades away!")) - qdel(src) - -/mob/living/simple_mob/animal/space/carp/holographic/gib() - derez() // Holograms can't gib. - -/mob/living/simple_mob/animal/space/carp/holographic/death() - ..() - derez() - - -======= // Space carp show up as a random event to wreck hapless people in space or near windows. // They generally fit the archetype of 'fast but fragile'. // This is compensated by being in groups (usually). @@ -280,5 +150,4 @@ ..() derez() - ->>>>>>> 1afbe8d... Explorer Update - Cataloguers (#6016) + diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm index 91836b5dbb7..2f9420bf64b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm @@ -1,268 +1,3 @@ -<<<<<<< HEAD -// Stronger than a regular Dark Gygax, this one has three special attacks, based on intents. -// First special attack launches three arcing rockets at the current target. -// Second special attack fires a projectile that creates a short-lived microsingularity that pulls in everything nearby. Magboots can protect from this. -// Third special attack creates a dangerous electric field that causes escalating electric damage, before emitting a tesla shock and blinding anyone looking at the mecha. -// The AI will choose one every ten seconds. -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced - name = "advanced dark gygax" - desc = "An experimental exosuit that utilizes advanced materials to allow for greater protection while still being lightweight and fast. \ - It also is armed with an array of next-generation weaponry." - icon_state = "darkgygax_adv" - wreckage = /obj/structure/loot_pile/mecha/gygax/dark/adv - icon_scale = 1.5 - movement_shake_radius = 14 - - maxHealth = 450 - deflect_chance = 25 - has_repair_droid = TRUE - armor = list( - "melee" = 50, - "bullet" = 50, - "laser" = 50, - "energy" = 30, - "bomb" = 30, - "bio" = 100, - "rad" = 100 - ) - - special_attack_min_range = 1 - special_attack_max_range = 7 - special_attack_cooldown = 10 SECONDS - projectiletype = /obj/item/projectile/force_missile - projectilesound = 'sound/weapons/wave.ogg' - var/obj/effect/overlay/energy_ball/energy_ball = null - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/Destroy() - if(energy_ball) - energy_ball.stop_orbit() - qdel(energy_ball) - return ..() - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/do_special_attack(atom/A) - . = TRUE // So we don't fire a laser as well. - switch(a_intent) - if(I_DISARM) // Side gun - electric_defense(A) - if(I_HURT) // Rockets - launch_rockets(A) - if(I_GRAB) // Micro-singulo - launch_microsingularity(A) - -#define ELECTRIC_ZAP_POWER 20000 - -// Charges a tesla shot, while emitting a dangerous electric field. The exosuit is immune to electric damage while this is ongoing. -// It also briefly blinds anyone looking directly at the mech without flash protection. -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/electric_defense(atom/target) - set waitfor = FALSE - - // Temporary immunity to shock to avoid killing themselves with their own attack. - var/old_shock_resist = shock_resist - shock_resist = 1 - - // Make the energy ball. This is purely visual since the tesla ball is hyper-deadly. - energy_ball = new(loc) - energy_ball.adjust_scale(0.5) - energy_ball.orbit(src, 32, TRUE, 1 SECOND) - - visible_message(span("warning", "\The [src] creates \an [energy_ball] around itself!")) - - playsound(src.loc, 'sound/effects/lightning_chargeup.ogg', 100, 1, extrarange = 30) - - // Shock nearby things that aren't ourselves. - for(var/i = 1 to 10) - energy_ball.adjust_scale(0.5 + (i/10)) - energy_ball.set_light(i/2, i/2, "#0000FF") - for(var/thing in range(3, src)) - // This is stupid because mechs are stupid and not mobs. - if(isliving(thing)) - var/mob/living/L = thing - - if(L == src) - continue - if(L.stat) - continue // Otherwise it can get pretty laggy if there's loads of corpses around. - L.inflict_shock_damage(i * 2) - if(L && L.has_AI()) // Some mobs delete themselves when dying. - L.ai_holder.react_to_attack(src) - - else if(istype(thing, /obj/mecha)) - var/obj/mecha/M = thing - M.take_damage(i * 2, "energy") // Mechs don't have a concept for siemens so energy armor check is the best alternative. - - sleep(1 SECOND) - - // Shoot a tesla bolt, and flashes people who are looking at the mecha without sufficent eye protection. - visible_message(span("warning", "\The [energy_ball] explodes in a flash of light, sending a shock everywhere!")) - playsound(src.loc, 'sound/effects/lightningbolt.ogg', 100, 1, extrarange = 30) - tesla_zap(src.loc, 5, ELECTRIC_ZAP_POWER, FALSE) - for(var/mob/living/L in viewers(src)) - if(L == src) - continue - var/dir_towards_us = get_dir(L, src) - if(L.dir && L.dir & dir_towards_us) - to_chat(L, span("danger", "The flash of light blinds you briefly.")) - L.flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = TRUE) - - // Get rid of our energy ball. - energy_ball.stop_orbit() - qdel(energy_ball) - - sleep(1 SECOND) - // Resist resistance to old value. - shock_resist = old_shock_resist // Not using initial() in case the value gets modified by an admin or something. - -#undef ELECTRIC_ZAP_POWER - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/launch_rockets(atom/target) - set waitfor = FALSE - - // Telegraph our next move. - Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY) - visible_message(span("warning", "\The [src] deploys a missile rack!")) - playsound(src, 'sound/effects/turret/move1.wav', 50, 1) - sleep(0.5 SECONDS) - - for(var/i = 1 to 3) - if(target) // Might get deleted in the meantime. - var/turf/T = get_turf(target) - if(T) - visible_message(span("warning", "\The [src] fires a rocket into the air!")) - playsound(src, 'sound/weapons/rpg.ogg', 70, 1) - face_atom(T) - var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc) - rocket.old_style_target(T, src) - rocket.fire() - sleep(1 SECOND) - - visible_message(span("warning", "\The [src] retracts the missile rack.")) - playsound(src, 'sound/effects/turret/move2.wav', 50, 1) - -// Arcing rocket projectile that produces a weak explosion when it lands. -// Shouldn't punch holes in the floor, but will still hurt. -/obj/item/projectile/arc/explosive_rocket - name = "rocket" - icon_state = "mortar" - -/obj/item/projectile/arc/explosive_rocket/on_impact(turf/T) - new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently. - explosion(T, 0, 0, 2, adminlog = FALSE) - -/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/launch_microsingularity(atom/target) - var/turf/T = get_turf(target) - visible_message(span("warning", "\The [src] fires an energetic sphere into the air!")) - playsound(src, 'sound/weapons/Laser.ogg', 50, 1) - face_atom(T) - var/obj/item/projectile/arc/microsingulo/sphere = new(loc) - sphere.old_style_target(T, src) - sphere.fire() - -/obj/item/projectile/arc/microsingulo - name = "micro singularity" - icon_state = "bluespace" - -/obj/item/projectile/arc/microsingulo/on_impact(turf/T) - new /obj/effect/temporary_effect/pulse/microsingulo(T) - - -/obj/effect/temporary_effect/pulse/microsingulo - name = "micro singularity" - desc = "It's sucking everything in!" - icon = 'icons/obj/objects.dmi' - icon_state = "bhole3" - light_range = 4 - light_power = 5 - light_color = "#2ECCFA" - pulses_remaining = 10 - pulse_delay = 0.5 SECONDS - var/pull_radius = 3 - var/pull_strength = STAGE_THREE - -/obj/effect/temporary_effect/pulse/microsingulo/on_pulse() - for(var/atom/A in range(pull_radius, src)) - A.singularity_pull(src, pull_strength) - - -// The Advanced Dark Gygax's AI. -// The mob has three special attacks, based on the current intent. -// This AI choose the appropiate intent for the situation, and tries to ensure it doesn't kill itself by firing missiles at its feet. -/datum/ai_holder/simple_mob/intentional/adv_dark_gygax - conserve_ammo = TRUE // Might help avoid 'I shoot the wall forever' cheese. - var/closest_desired_distance = 1 // Otherwise run up to them to be able to potentially shock or punch them. - - var/electric_defense_radius = 3 // How big to assume electric defense's area is. - var/microsingulo_radius = 3 // Same but for microsingulo pull. - var/rocket_explosive_radius = 2 // Explosion radius for the rockets. - - var/electric_defense_threshold = 2 // How many non-targeted people are needed in close proximity before electric defense is viable. - var/microsingulo_threshold = 2 // Similar to above, but uses an area around the target. - -// Used to control the mob's positioning based on which special attack it has done. -// Note that the intent will not change again until the next special attack is about to happen. -/datum/ai_holder/simple_mob/intentional/adv_dark_gygax/on_engagement(atom/A) - // Make the AI backpeddle if using an AoE special attack. - var/list/risky_intents = list(I_GRAB, I_HURT) // Mini-singulo and missiles. - if(holder.a_intent in risky_intents) - var/closest_distance = 1 - switch(holder.a_intent) // Plus one just in case. - if(I_HURT) - closest_distance = rocket_explosive_radius + 1 - if(I_GRAB) - closest_distance = microsingulo_radius + 1 - - if(get_dist(holder, A) <= closest_distance) - holder.IMove(get_step_away(holder, A, closest_distance)) - - // Otherwise get up close and personal. - else if(get_dist(holder, A) > closest_desired_distance) - holder.IMove(get_step_towards(holder, A)) - -// Changes the mob's intent, which controls which special attack is used. -// I_DISARM causes Electric Defense, I_GRAB causes Micro-Singularity, and I_HURT causes Missile Barrage. -/datum/ai_holder/simple_mob/intentional/adv_dark_gygax/pre_special_attack(atom/A) - if(isliving(A)) - var/mob/living/target = A - - // If we're surrounded, Electric Defense will quickly fix that. - var/tally = 0 - var/list/potential_targets = list_targets() // Returns list of mobs and certain objects like mechs and turrets. - for(var/atom/movable/AM in potential_targets) - if(get_dist(holder, AM) > electric_defense_radius) - continue - if(!can_attack(AM)) - continue - tally++ - - // Should we shock them? - if(tally >= electric_defense_threshold || get_dist(target, holder) <= electric_defense_radius) - holder.a_intent = I_DISARM - return - - // Otherwise they're a fair distance away and we're not getting mobbed up close. - // See if we should use missiles or microsingulo. - tally = 0 // Let's recycle the var. - for(var/atom/movable/AM in potential_targets) - if(get_dist(target, AM) > microsingulo_radius) // Deliberately tests distance between target and nearby targets and not the holder. - continue - if(!can_attack(AM)) - continue - if(AM.anchored) // Microsingulo doesn't do anything to anchored things. - tally-- - else - tally++ - - // Lots of people means minisingulo would be more useful. - if(tally >= microsingulo_threshold) - holder.a_intent = I_GRAB - else // Otherwise use rockets. - holder.a_intent = I_HURT - - else - if(get_dist(holder, A) >= rocket_explosive_radius + 1) - holder.a_intent = I_HURT // Fire rockets if it's an obj/turf. - else - holder.a_intent = I_DISARM // Electricity might not work but it's safe up close. -======= // Stronger than a regular Dark Gygax, this one has three special attacks, based on intents. // First special attack launches three arcing rockets at the current target. // Second special attack fires a projectile that creates a short-lived microsingularity that pulls in everything nearby. Magboots can protect from this. @@ -610,5 +345,4 @@ if(get_dist(holder, A) >= rocket_explosive_radius + 1) holder.a_intent = I_HURT // Fire rockets if it's an obj/turf. else - holder.a_intent = I_DISARM // Electricity might not work but it's safe up close. ->>>>>>> 1afbe8d... Explorer Update - Cataloguers (#6016) + holder.a_intent = I_DISARM // Electricity might not work but it's safe up close. diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm index df8740a3c18..198bc1bd7dc 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm @@ -1,58 +1,3 @@ -<<<<<<< HEAD -// Durands are slow, tanky, beefy, and hit really hard. -// They can also root themselves to become even tankier. -// The AI doesn't do this currently. - -/mob/living/simple_mob/mechanical/mecha/combat/durand - name = "durand" - desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War." - icon_state = "durand" - movement_cooldown = 10 - wreckage = /obj/structure/loot_pile/mecha/durand - - maxHealth = 400 - deflect_chance = 20 - armor = list( - "melee" = 50, - "bullet" = 35, - "laser" = 15, - "energy" = 10, - "bomb" = 20, - "bio" = 100, - "rad" = 100 - ) - melee_damage_lower = 40 - melee_damage_upper = 40 - base_attack_cooldown = 2 SECONDS - projectiletype = /obj/item/projectile/beam/heavylaser - - var/defense_mode = FALSE - var/defense_deflect = 35 - -/mob/living/simple_mob/mechanical/mecha/combat/durand/proc/set_defense_mode(new_mode) - defense_mode = new_mode - deflect_chance = defense_mode ? defense_deflect : initial(deflect_chance) - to_chat(src, span("notice", "You [defense_mode ? "en" : "dis"]able defense mode.")) - -/mob/living/simple_mob/mechanical/mecha/combat/durand/SelfMove(turf/n, direct) - if(defense_mode) - to_chat(src, span("warning", "You are in defense mode, you cannot move.")) - return FALSE - return ..() - -// So players can toggle it too. -/mob/living/simple_mob/mechanical/mecha/combat/durand/verb/toggle_defense_mode() - set name = "Toggle Defense Mode" - set desc = "Toggles a special mode which makes you immobile and much more resilient." - set category = "Abilities" - - set_defense_mode(!defense_mode) - -// Variant that starts in defense mode, perhaps for PoIs. -/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/Initialize() - set_defense_mode(TRUE) - return ..() -======= // Durands are slow, tanky, beefy, and hit really hard. // They can also root themselves to become even tankier. // The AI doesn't do this currently. @@ -119,5 +64,4 @@ // Variant that starts in defense mode, perhaps for PoIs. /mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/Initialize() set_defense_mode(TRUE) - return ..() ->>>>>>> 1afbe8d... Explorer Update - Cataloguers (#6016) + return ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm index 1edba2d485c..d113835654e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm @@ -1,31 +1,3 @@ -<<<<<<< HEAD -// Ranged, and capable of flight. -/mob/living/simple_mob/mechanical/mecha/hoverpod - name = "hover pod" - desc = "Stubby and round, this space-capable craft is an ancient favorite. It has a jury-rigged welder-laser." - icon_state = "engineering_pod" - movement_sound = 'sound/machines/hiss.ogg' - wreckage = /obj/structure/loot_pile/mecha/hoverpod - - maxHealth = 150 - hovering = TRUE // Can fly. - - projectiletype = /obj/item/projectile/beam - base_attack_cooldown = 2 SECONDS - - var/datum/effect/effect/system/ion_trail_follow/ion_trail - -/mob/living/simple_mob/mechanical/mecha/hoverpod/manned - pilot_type = /mob/living/simple_mob/humanoid/merc/ranged - -/mob/living/simple_mob/mechanical/mecha/hoverpod/Initialize() - ion_trail = new /datum/effect/effect/system/ion_trail_follow() - ion_trail.set_up(src) - ion_trail.start() - return ..() - -/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0) -======= // Ranged, and capable of flight. /datum/category_item/catalogue/technology/hoverpod @@ -65,6 +37,5 @@ ion_trail.start() return ..() -/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0) ->>>>>>> 1afbe8d... Explorer Update - Cataloguers (#6016) +/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0) return TRUE \ No newline at end of file diff --git a/vorestation.dme b/vorestation.dme index 51c524fb15f..e33b381e8b8 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1522,15 +1522,11 @@ #include "code\modules\blob2\overmind\types.dm" #include "code\modules\busy_space\air_traffic.dm" #include "code\modules\busy_space\loremaster.dm" -<<<<<<< HEAD:vorestation.dme #include "code\modules\busy_space_vr\organizations.dm" -======= -#include "code\modules\busy_space\organizations.dm" #include "code\modules\catalogue\atoms.dm" #include "code\modules\catalogue\catalogue_data.dm" #include "code\modules\catalogue\cataloguer.dm" #include "code\modules\catalogue\cataloguer_visuals.dm" ->>>>>>> 1afbe8d... Explorer Update - Cataloguers (#6016):polaris.dme #include "code\modules\client\client defines.dm" #include "code\modules\client\client procs.dm" #include "code\modules\client\movement.dm"