[Ready] New Cosmic Heretic Path DLC (#73915)

## About The Pull Request
This PR adds a new Cosmic Heretic.

![promo1](https://user-images.githubusercontent.com/25363960/224495697-5a398430-54b3-4473-bdf7-a041abb09596.PNG)

![promo2](https://user-images.githubusercontent.com/25363960/224495702-245b0a0b-7dc1-428f-b3b8-d7ef9c66f9ee.PNG)

![promo3](https://user-images.githubusercontent.com/25363960/224495707-d2ba034c-fc4f-4548-a782-78fe37311b37.PNG)

![promo4](https://user-images.githubusercontent.com/25363960/224495710-e9887cfd-cccd-4be4-9270-023b8dd98915.PNG)

![promo5](https://user-images.githubusercontent.com/25363960/224515282-2e9dceb7-e9f1-4136-9338-d370dd11b919.PNG)

Main Paths:
- Eternal Gate: Opens up the Path of Cosmos to you. Allows you to
transmute a sheet of plasma and a knife into an Cosmic Blade. You can
only create two at a time.
- Grasp of Cosmos: Your Mansus Grasp will give people a star mark
(cosmic ring) and create a cosmic field where you stand.
- Cosmic Runes: Grants you Cosmic Runes, a spell that creates two runes
linked with eachother for easy teleportation. Only the entity activating
the rune will get transported, and it can be used by anyone without a
star mark.
- Mark of Cosmos: Your Mansus Grasp now applies the Mark of Cosmos. The
mark is triggered from an attack with your Cosmic Blade. When triggered,
the victim transport back to the Cosmic Diamond, which is the location
your mark was applied to them. After getting transported they will be
paralyzed for 2 seconds.
- Star Touch: Grants you Star Touch, a spell that will give people a
star mark (cosmic ring) and create a cosmic field where you stand.
People that already have a star mark will be forced to sleep for 4
seconds. When the victim is hit it also creates a beam that deals a bit
of fire damage and damages the cells. The beam lasts a minute, until the
beam is obstructed or until a new target has been found. Can remove
Cosmig Runes and teleport you to your Star Gazer when used in hand.
- Star Blast: Fires a projectile that moves very slowly and create a
cosmic field on impact. Anyone hit by the projectile will recieve burn
damage, a knockdown and a star mark.
- Cosmic Blade: our blade now deals damage to peoples cells through
cosmic radiation.
- Cosmic Expansion: Grants you Cosmic Expansion, a spell that creates a
3x3 area of cosmic fields around you. Nearby beings will also receive a
star mark.
- Creators's Gift: The ascension ritual of the Path of Cosmos. Bring 3
corpses with bluespacedust in their body to a transmutation rune to
complete the ritual. When completed, you become the owner of a Star
Gazer. You will be able to command the Star Gazer with Alt+click. You
can also give it commands through speech. The Star Gazer is a strong mob
that can even break down reinforced walls. Star Touch can now teleport
you to your Star Gazer when Star Touch is used in hand."

Side Paths:
- Ash-Cosmic: Fire Fish: Allows you to transmute a pool of ash, eyes,
and a sheet of plasma into a Fire Shark. Fire Sharks are fast and strong
in groups, but are bad at combat.
- Ash-Cosmic: Curse of The Stars: Allows you to transmute a bluespace
crystal, a pool of ash, and a liver to cast a Curse of The Stars on a
crew member. While cursed, the victim will recieve a star mark that
lasts for at least 3 minutes. This star mark makes it so that the crew
member cannot enter cosmic carpet fields. The victim will also recieve a
cosmic carpet trail for at least 3 minutes.
- Ash-Cosmic: Eldritch Coin: Allows you to transmute a sheet of plasma,
a diamond and eyes to create an Eldritch Coin. The coin will heals when
landing on heads and damages when landing on tails. The coin will heal
for more, but only for heretics.

Extra ability information:
- Star Mark: This is a status effect that prevents people from walking
into cosmic fields.
- Cosmig Fields: Only block entities marked with a star mark,
projectiles or throwing items will still work. Lasts only 30 seconds and
5 seconds for the Cosmig Trail trait.

Some things I wanted to mention:
- Why the Star Gazer is balanced: It has 3000 health and can kill people
pretty fast, but at the same time, anyone can space the Star Gazer and
lead it away from the heretic if they do not pay attention.
- The Cosmic Heretics balancing has been carefully considered. It is
relatively weak in group situations but strong in one to one combat.
- Balance changes can also be made after the PR gets merged need be, or
it can be test merged first.
## Why It's Good For The Game
New heretic path means more choice and a different play style.
## Changelog
🆑
add: Adds new Cosmic Heretic.
soundadd: Adds Cosmic Heretic sounds.
imageadd: Adds Cosmic Heretic sprites.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
This commit is contained in:
Comxy
2023-04-08 15:44:14 +02:00
committed by GitHub
parent 49abf3166f
commit 73ba9046df
48 changed files with 1407 additions and 19 deletions
@@ -0,0 +1,55 @@
/mob/living/basic/fire_shark
name = "fire shark"
desc = "It is a eldritch dwarf space shark, also known as a fire shark."
icon = 'icons/mob/nonhuman-player/eldritch_mobs.dmi'
icon_state = "fire_shark"
icon_living = "fire_shark"
pass_flags = PASSTABLE | PASSMOB
combat_mode = TRUE
mob_biotypes = MOB_ORGANIC | MOB_BEAST
basic_mob_flags = DEL_ON_DEATH
unsuitable_atmos_damage = 0
unsuitable_cold_damage = 0
unsuitable_heat_damage = 0
speed = -0.5
health = 16
maxHealth = 16
melee_damage_lower = 8
melee_damage_upper = 8
attack_sound = 'sound/weapons/bite.ogg'
attack_vis_effect = ATTACK_EFFECT_BITE
obj_damage = 0
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
damage_coeff = list(BRUTE = 1, BURN = 0.2, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
faction = list(FACTION_HERETIC)
mob_size = MOB_SIZE_TINY
speak_emote = list("screams")
basic_mob_flags = DEL_ON_DEATH
death_message = "implodes into itself."
ai_controller = /datum/ai_controller/basic_controller/fire_shark
/mob/living/basic/fire_shark/Initialize(mapload)
. = ..()
AddElement(/datum/element/death_drops, list(/obj/effect/gibspawner/human))
AddElement(/datum/element/death_gases, /datum/gas/plasma, 40)
AddElement(/datum/element/simple_flying)
AddElement(/datum/element/venomous, /datum/reagent/phlogiston, 5)
AddComponent(/datum/component/swarming)
AddComponent(/datum/component/regenerator, regeneration_delay = 2 SECONDS, outline_colour = COLOR_DARK_RED)
ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
/datum/ai_controller/basic_controller/fire_shark
blackboard = list(
BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(),
)
ai_movement = /datum/ai_movement/basic_avoidance
idle_behavior = /datum/idle_behavior/idle_random_walk
planning_subtrees = list(
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree/average_speed,
)
@@ -0,0 +1,118 @@
/mob/living/basic/star_gazer
name = "Star Gazer"
desc = "A creature that has been tasked to watch over the stars."
icon = 'icons/mob/nonhuman-player/96x96eldritch_mobs.dmi'
icon_state = "star_gazer"
icon_living = "star_gazer"
pixel_x = -32
base_pixel_x = -32
basic_mob_flags = DEL_ON_DEATH
mob_biotypes = MOB_HUMANOID
faction = list(FACTION_HERETIC)
response_help_continuous = "passes through"
response_help_simple = "pass through"
speed = -0.2
maxHealth = 3500
health = 3500
obj_damage = 400
melee_damage_lower = 35
melee_damage_upper = 35
combat_mode = TRUE
sentience_type = SENTIENCE_BOSS
attack_verb_continuous = "ravages"
attack_verb_simple = "ravage"
attack_vis_effect = ATTACK_EFFECT_SLASH
attack_sound = 'sound/weapons/bladeslice.ogg'
speak_emote = list("growls")
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
death_sound = 'sound/magic/cosmic_expansion.ogg'
unsuitable_atmos_damage = 0
unsuitable_cold_damage = 0
unsuitable_heat_damage = 0
gold_core_spawnable = NO_SPAWN
slowed_by_drag = FALSE
move_force = MOVE_FORCE_OVERPOWERING
move_resist = MOVE_FORCE_OVERPOWERING
pull_force = MOVE_FORCE_OVERPOWERING
mob_size = MOB_SIZE_HUGE
layer = LARGE_MOB_LAYER
plane = GAME_PLANE_UPPER_FOV_HIDDEN
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
ai_controller = /datum/ai_controller/basic_controller/star_gazer
/mob/living/basic/star_gazer/Initialize(mapload)
. = ..()
AddElement(/datum/element/death_drops, list(/obj/effect/temp_visual/cosmic_domain))
AddElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE)
AddElement(/datum/element/wall_smasher, ENVIRONMENT_SMASH_RWALLS)
AddElement(/datum/element/simple_flying)
AddElement(/datum/element/effect_trail/cosmic_trail)
ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_LAVA_IMMUNE, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_ASHSTORM_IMMUNE, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_NO_TELEPORT, MEGAFAUNA_TRAIT)
ADD_TRAIT(src, TRAIT_MARTIAL_ARTS_IMMUNE, MEGAFAUNA_TRAIT)
ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT)
set_light(4, l_color = "#dcaa5b")
/datum/ai_controller/basic_controller/star_gazer
blackboard = list(
BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/star_gazer(),
BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/not_friends/attack_closed_turfs(),
)
ai_movement = /datum/ai_movement/basic_avoidance
idle_behavior = /datum/idle_behavior/idle_random_walk
planning_subtrees = list(
/datum/ai_planning_subtree/attack_obstacle_in_path/pet_target/star_gazer,
/datum/ai_planning_subtree/pet_planning,
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/attack_obstacle_in_path/star_gazer,
/datum/ai_planning_subtree/basic_melee_attack_subtree/star_gazer,
)
/datum/targetting_datum/basic/star_gazer
stat_attack = HARD_CRIT
/datum/ai_planning_subtree/basic_melee_attack_subtree/star_gazer
melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/star_gazer
/datum/ai_behavior/basic_melee_attack/star_gazer
action_cooldown = 0.6 SECONDS
/datum/ai_behavior/basic_melee_attack/star_gazer/perform(delta_time, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key)
. = ..()
var/datum/weakref/weak_target = controller.blackboard[target_key]
var/atom/target = weak_target?.resolve()
var/mob/living/living_pawn = controller.pawn
if(!isliving(target))
return
var/mob/living/living_target = target
living_target.apply_status_effect(/datum/status_effect/star_mark)
living_target.apply_damage_type(damage = 5, damagetype = CLONE)
if(living_target.pulledby != living_pawn)
if(living_pawn.Adjacent(living_target) && isturf(living_target.loc) && living_target.stat == SOFT_CRIT)
living_target.grabbedby(living_pawn)
/datum/ai_planning_subtree/attack_obstacle_in_path/star_gazer
attack_behaviour = /datum/ai_behavior/attack_obstructions/star_gazer
/datum/ai_planning_subtree/attack_obstacle_in_path/pet_target/star_gazer
attack_behaviour = /datum/ai_behavior/attack_obstructions/star_gazer
/datum/ai_behavior/attack_obstructions/star_gazer
action_cooldown = 0.4 SECONDS
can_attack_turfs = TRUE
can_attack_dense_objects = TRUE
/datum/pet_command/point_targetting/attack/star_gazer
speech_commands = list("attack", "sic", "kill", "slash them")
command_feedback = "stares!"
pointed_reaction = "stares intensely!"
refuse_reaction = "..."
attack_behaviour = /datum/ai_behavior/basic_melee_attack/star_gazer