diff --git a/hyperstation/code/mobs/crystal.dm b/hyperstation/code/mobs/crystal.dm index 1a375672d..5dab607ff 100644 --- a/hyperstation/code/mobs/crystal.dm +++ b/hyperstation/code/mobs/crystal.dm @@ -1,5 +1,6 @@ #define REGENERATION_DELAY 60 // After taking damage, how long it takes for automatic regeneration to begin for megacarps (ty robustin!) +//Pellucytes are the basic, weak crystals that only have 1 attack, but can heal themselves /mob/living/simple_animal/hostile/crystal name = "pellucyte" desc = "A floating crystal with orbiting smaller crystals." @@ -31,15 +32,19 @@ minbodytemp = 0 maxbodytemp = 3500 blood_volume = 0 //It's a fucking rock - faction = list("carp") + faction = list("crystal", "weave") movement_type = FLYING pressure_resistance = 500 - gold_core_spawnable = HOSTILE_SPAWN + gold_core_spawnable = NO_SPAWN var/regen_cooldown = 0 //Used for how long it takes before a healing will take place default in 60 seconds var/regen_amount = 1 //How much is healed pre regen cooldown del_on_death = TRUE pixel_x = -8 + //So they will only attack conscious people, leaving them in crit + stat_attack = CONSCIOUS + stat_exclusive = TRUE + /mob/living/simple_animal/hostile/crystal/Life() . = ..() if(regen_amount && regen_cooldown < world.time) @@ -65,3 +70,64 @@ playsound(src, 'sound/creatures/crystal_death.ogg', 100) new /obj/effect/decal/cleanable/glass(src.loc) return ..() + +//Indecytes are slightly stronger, and will use spikes of crystals to attack enemies. +//They are smarter, will search for people in larger radiuses, and seek them out from greater distances. +/mob/living/simple_animal/hostile/crystal/large + name = "indecyte" + desc = "A large resonant crystal thrumming with energy." + icon = 'hyperstation/icons/mob/crystal.dmi' + icon_state = "indecyte" + icon_living = "indecyte" + icon_dead = "indecyte" + emote_taunt = list("sings", "resonates") + attacktext = "punctures" + health = 310 + maxHealth = 310 + obj_damage = 50 + speed = 3 + move_to_delay = 8 + + death_sound = 'sound/creatures/crystal_death.ogg' + deathmessage = "steadily crashes into the ground, fading out of sight..." + + robust_searching = 1 + vision_range = 12 //It can see you before you can see it! (default is 9 for on-screen only) + aggro_vision_range = 12 + + //It prefers to stay at a distance while doing its attacks + ranged = 1 + ranged_cooldown = 30 + minimum_distance = 2 + + +/mob/living/simple_animal/hostile/crystal/large/AttackingTarget() + return OpenFire() + +/mob/living/simple_animal/hostile/crystal/large/OpenFire() + if(ranged_cooldown > world.time) + return FALSE + ranged_cooldown = world.time + ranged_cooldown_time + for(var/i = 1 to 4) + var/turf/T = get_step(get_turf(src), pick(1,2,4,5,6,8,9,10)) + if(T.density) + i -= 1 + continue + var/obj/item/projectile/crystal_slash/P = new(T) + P.starting = T + P.firer = src + P.fired_from = T + P.yo = target.y - T.y + P.xo = target.x - T.x + P.original = target + P.preparePixelProjectile(target, T) + addtimer(CALLBACK (P, .obj/item/projectile/proc/fire), 3) + SLEEP_CHECK_DEATH(3) + playsound(get_turf(src), 'hyperstation/sound/effects/swoosh.ogg', 50, 0, 4) + return + +/mob/living/simple_animal/hostile/crystal/large/death(gibbed) + density = FALSE + animate(src, alpha = 0, time = 5 SECONDS) + QDEL_IN(src, 5 SECONDS) + ..() diff --git a/hyperstation/code/modules/projectiles/hyper_projectiles.dm b/hyperstation/code/modules/projectiles/hyper_projectiles.dm new file mode 100644 index 000000000..74f37ee99 --- /dev/null +++ b/hyperstation/code/modules/projectiles/hyper_projectiles.dm @@ -0,0 +1,23 @@ +/obj/item/projectile/weave + name = "coder skill issue" + //damage_type = WEAVE + armour_penetration = 30 + //flag = "weave" + +//obj/item/projectile/weave/shatter lambent thing later + +/obj/item/projectile/crystal_slash + name = "sharpened crystals" + desc = "A quickly-formed lattice crystal, sharp as a blade." + icon_state = "ice_2" //Make a sprite for this + flag = "bullet" //Set to weave later + armour_penetration = 30 + damage_type = BRUTE + damage = 30 + alpha = 0 + spread = 20 + +/obj/item/projectile/crystal_slash/Initialize() + . = ..() + hitsound = "hyperstation/sound/weapons/rapier[pick(1,2)].ogg" + animate(src, alpha = 255, time = 3) diff --git a/hyperstation/icons/mob/crystal.dmi b/hyperstation/icons/mob/crystal.dmi index cd4d755a8..ab11aceab 100644 Binary files a/hyperstation/icons/mob/crystal.dmi and b/hyperstation/icons/mob/crystal.dmi differ diff --git a/hyperstation/sound/effects/swoosh.ogg b/hyperstation/sound/effects/swoosh.ogg new file mode 100644 index 000000000..01682639b Binary files /dev/null and b/hyperstation/sound/effects/swoosh.ogg differ diff --git a/hyperstation/sound/weapons/rapier1.ogg b/hyperstation/sound/weapons/rapier1.ogg new file mode 100644 index 000000000..875efaf66 Binary files /dev/null and b/hyperstation/sound/weapons/rapier1.ogg differ diff --git a/hyperstation/sound/weapons/rapier2.ogg b/hyperstation/sound/weapons/rapier2.ogg new file mode 100644 index 000000000..8cdb62d51 Binary files /dev/null and b/hyperstation/sound/weapons/rapier2.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 8d42a9056..d1922d476 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3232,6 +3232,7 @@ #include "hyperstation\code\modules\power\reactor\fuel_rods.dm" #include "hyperstation\code\modules\power\reactor\rbmk.dm" #include "hyperstation\code\modules\power\reactor\reactor_cargo.dm" +#include "hyperstation\code\modules\projectiles\hyper_projectiles.dm" #include "hyperstation\code\modules\reagents\chemistry\reagent_containers\pill.dm" #include "hyperstation\code\modules\reagents\chemistry\reagents\alcohol_reagents.dm" #include "hyperstation\code\modules\reagents\chemistry\reagents\drink_reagents.dm"