diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 580a7172ba3..b102ef80167 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -32,7 +32,6 @@ var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!" var/bio_fluff_string = "Your scarabs fail to mutate. This shouldn't happen! Submit a bug report!" - /mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies ..() if(summoner) @@ -118,6 +117,7 @@ for(var/mob/M in mob_list) if(M == src.summoner) M << "[src]: [input]" + src << "[src]: [input]" /mob/living/proc/guardian_comm() set name = "Communicate" @@ -128,7 +128,7 @@ for(var/mob/living/simple_animal/hostile/guardian/M in mob_list) if(M.summoner == src) M << "[src]: [input]" - + src << "[src]: [input]" //////////////////////////TYPES OF GUARDIANS @@ -138,11 +138,11 @@ /mob/living/simple_animal/hostile/guardian/fire a_intent = "help" - melee_damage_lower = 15 - melee_damage_upper = 15 + melee_damage_lower = 10 + melee_damage_upper = 10 attack_sound = 'sound/items/Welder.ogg' attacktext = "sears" - damage_transfer = 0.6 + damage_transfer = 0.7 range = 10 playstyle_string = "As a fire type, you have only light damage resistance, but will ignite any enemy you bump into." environment_smash = 1 @@ -155,7 +155,7 @@ if(istype(AM, /mob/living/)) var/mob/living/M = AM if(AM != src.summoner) - M.adjust_fire_stacks(20) + M.adjust_fire_stacks(10) M.IgniteMob() //Standard @@ -163,7 +163,7 @@ /mob/living/simple_animal/hostile/guardian/punch melee_damage_lower = 25 melee_damage_upper = 25 - damage_transfer = 0.4 + damage_transfer = 0.5 playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls." environment_smash = 2 magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated." @@ -183,26 +183,23 @@ /mob/living/simple_animal/hostile/guardian/punch/AttackingTarget() ..() - src.say("[src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]\ - [src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]") - playsound(loc, src.attack_sound, 50, 1, 1) - playsound(loc, src.attack_sound, 50, 1, 1) - playsound(loc, src.attack_sound, 50, 1, 1) - playsound(loc, src.attack_sound, 50, 1, 1) - playsound(loc, src.attack_sound, 50, 1, 1) - playsound(loc, src.attack_sound, 50, 1, 1) - playsound(loc, src.attack_sound, 50, 1, 1) - playsound(loc, src.attack_sound, 50, 1, 1) - playsound(loc, src.attack_sound, 50, 1, 1) + if(istype(target, /mob/living)) + src.say("[src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]\ + [src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]") + playsound(loc, src.attack_sound, 50, 1, 1) + playsound(loc, src.attack_sound, 50, 1, 1) + playsound(loc, src.attack_sound, 50, 1, 1) + playsound(loc, src.attack_sound, 50, 1, 1) + //Fast Standard. Does less damage, has less resistance, but moves faster, has higher range /mob/living/simple_animal/hostile/guardian/fast - melee_damage_lower = 25 - melee_damage_upper = 25 - damage_transfer = 0.6 + melee_damage_lower = 20 + melee_damage_upper = 20 + damage_transfer = 0.7 speed = -1 range = 15 attacktext = "slices" @@ -247,6 +244,7 @@ /mob/living/simple_animal/hostile/guardian/healer a_intent = "help" friendly = "heals" + speed = 1 melee_damage_lower = 0 melee_damage_upper = 0 playstyle_string = "As a healer type, you are incapable of attacking, but can mend any wound simply by touching a target." @@ -256,6 +254,9 @@ /mob/living/simple_animal/hostile/guardian/healer/AttackingTarget() ..() + if(src.loc == summoner) + src << "You must be manifested to heal!" + return if(iscarbon(target)) var/mob/living/carbon/C = target C.adjustBruteLoss(-5) @@ -263,21 +264,26 @@ C.adjustOxyLoss(-5) C.adjustToxLoss(-5) +/obj/item/projectile/guardian + name = "crystal spray" + icon_state = "guardian" + damage = 4 + damage_type = BRUTE + /mob/living/simple_animal/hostile/guardian/ranged a_intent = "help" melee_damage_lower = 10 melee_damage_upper = 10 damage_transfer = 1.2 - projectiletype = /obj/item/projectile/neurotox - ranged_cooldown_cap = 1 - projectilesound = 'sound/weapons/pierce.ogg' + projectiletype = /obj/item/projectile/guardian + ranged_cooldown_cap = 0 + projectilesound = 'sound/effects/hit_on_shattered_glass.ogg' ranged = 1 - rapid = 1 range = 13 - playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying neurotoxin." + playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed." magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat." tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Nanoswarm online." - bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of spitting neurotoxin." + bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of spraying shards of crystal." /mob/living/simple_animal/hostile/guardian/bluespace @@ -313,6 +319,9 @@ var/bomb_cooldown = 0 /mob/living/simple_animal/hostile/guardian/bomb/ShiftClickOn(atom/movable/A) + if(src.loc == summoner) + src << "You must be manifested to create bombs!" + return if(istype(A, /obj/)) if(bomb_cooldown <= world.time && !stat) var/obj/item/weapon/guardian_bomb/B = new /obj/item/weapon/guardian_bomb(get_turf(A)) @@ -334,6 +343,8 @@ /obj/item/weapon/guardian_bomb/proc/disguise(var/obj/A) A.loc = src stored_obj = A + anchored = A.anchored + density = A.density appearance = A.appearance spawn(600) stored_obj.loc = get_turf(src.loc) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index c51fc8e17b1..1f24ed85e1c 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -35,6 +35,8 @@ /mob/living/simple_animal/hostile/Life() . = ..() + if(ranged) + ranged_cooldown-- if(!.) //dead walk(src, 0) //stops walking return 0 @@ -42,8 +44,6 @@ /mob/living/simple_animal/hostile/handle_automated_action() if(AIStatus == AI_OFF) return 0 - if(ranged) - ranged_cooldown-- var/list/possible_targets = ListTargets() //we look around for potential targets and make it a list for later use. if(environment_smash) @@ -315,4 +315,4 @@ . = 0 /mob/living/simple_animal/hostile/proc/AIShouldSleep(var/list/possible_targets) - return !FindTarget(possible_targets, 1) \ No newline at end of file + return !FindTarget(possible_targets, 1) diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index cc0325cdfae..72ef46c7163 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ