Skip to content
This repository has been archived by the owner on Aug 21, 2023. It is now read-only.

Mimic Neuromods + Evolution #937

Open
wants to merge 88 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 84 commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
6471fc7
Neuromods
Oricana-16 Sep 1, 2022
420e291
Smuggle Neuromod
Oricana-16 Sep 1, 2022
3c9f91a
Smuggle Neuromod Finish
Oricana-16 Sep 2, 2022
3935469
Experimentor
Oricana-16 Sep 2, 2022
52c39e9
Merge branch 'Monkestation:master' into mimic-neuromods
Oricana-16 Sep 2, 2022
2b2f8b3
Merge branch 'Monkestation:master' into mimic-neuromods
Oricana-16 Sep 3, 2022
ea1a7c8
Examine Text + Mimic Composition
Oricana-16 Sep 3, 2022
125bc45
Merge branch 'mimic-neuromods' of https://github.com/Oricana-16/Monke…
Oricana-16 Sep 3, 2022
f75f1e5
ventcrawl text
Oricana-16 Sep 3, 2022
c3b7127
Mimic Composition + Electrostatic Burst
Oricana-16 Sep 3, 2022
35d00e5
Merge branch 'Monkestation:master' into mimic-neuromods
Oricana-16 Sep 3, 2022
c4c9bf5
Psycho Shock and Kinetic Blast particles
Oricana-16 Sep 3, 2022
5a8aa08
Rarity Tweaks
Oricana-16 Sep 3, 2022
9c7043b
Mimic Surgery + module folder for neuromods
Oricana-16 Sep 3, 2022
6f5e47d
Stalking stat change
Oricana-16 Sep 3, 2022
34e6125
Stalk No Arm Use
Oricana-16 Sep 3, 2022
59fa0bd
Changes hemostat step to hand in surgery
Oricana-16 Sep 3, 2022
c8211b2
Formatting code and Mimic desc text
Oricana-16 Sep 4, 2022
a2e84ee
Files moved + clown neuromod
Oricana-16 Sep 4, 2022
09fd670
clownish effects + icon
Oricana-16 Sep 5, 2022
26b5960
Mimic Composition rework
Oricana-16 Sep 5, 2022
19ec6f4
Mindjack neeuromod
Oricana-16 Sep 5, 2022
e77755a
Biomatter Transfer neuromod
Oricana-16 Sep 6, 2022
c4a6327
Track Neuromod
Oricana-16 Sep 7, 2022
e7df734
started on evolutions + Voltaic Mimic
Oricana-16 Sep 8, 2022
f7c0ce9
Mimic Evolution
Oricana-16 Sep 10, 2022
13c5d97
Shifty Mimic Changes
Oricana-16 Sep 10, 2022
c361848
Voltaic Change + undoing language change
Oricana-16 Sep 10, 2022
6352b0f
Kinetic Mimic
Oricana-16 Sep 11, 2022
8966386
goofy ahh linter
Oricana-16 Sep 11, 2022
b7fc6f5
Actual fix
Oricana-16 Sep 11, 2022
6d867fd
Weapon Transformation Neuromod
Oricana-16 Sep 13, 2022
c8d9963
bad code into good code
Oricana-16 Sep 13, 2022
7bce96c
Weapon Transformation Finishing touches
Oricana-16 Sep 14, 2022
c0d5604
Finally
Oricana-16 Sep 14, 2022
82f675e
Last Check
Oricana-16 Sep 17, 2022
eb12ac7
Evolve Action Icon differentiation
Oricana-16 Sep 17, 2022
f2d31a6
text clarification
Oricana-16 Sep 18, 2022
e93ac1d
Merge branch 'master' into mimic-neuromods
Oricana-16 Sep 21, 2022
de26262
A few ability icons
Oricana-16 Sep 25, 2022
4ab0806
Biomatter Transfer icon
Oricana-16 Oct 1, 2022
f7d4e4b
Max Body Temp on Thermal mimic
Oricana-16 Oct 1, 2022
74cfd1b
Merge branch 'master' into mimic-neuromods
Oricana-16 Nov 11, 2022
c932479
Fixes indentation errors
Oricana-16 Nov 11, 2022
a4ab8da
Fixing conflicts the right way
Oricana-16 Nov 11, 2022
6726a74
whoops another indentation problem
Oricana-16 Nov 11, 2022
4107d94
evolved mimic round end report
Oricana-16 Nov 14, 2022
745a559
Prevents phantom shift from going throuhg walls
Oricana-16 Nov 14, 2022
cdb7ef9
Oracle Mimic
Oricana-16 Nov 15, 2022
4753403
damage tweaks to oracle mimic
Oricana-16 Nov 15, 2022
219dfa3
small neuromod tweaks
Oricana-16 Nov 15, 2022
466f8a3
Neuromod Sprites + small psychoshock tweak
Oricana-16 Nov 21, 2022
911dc87
psychoshock icon, phantom shift particles.
Oricana-16 Nov 21, 2022
d406685
error fix
Oricana-16 Nov 21, 2022
11f90a6
T1 Mimic and T2 Mimic stat changes
Oricana-16 Jan 25, 2023
129294b
Merge branch 'Monkestation:master' into mimic-neuromods
Oricana-16 Feb 1, 2023
e7fa63e
updates for movement refactor
Oricana-16 Feb 1, 2023
930b64f
Evolutions Framework + Transportive
Oricana-16 Feb 1, 2023
4d9e3eb
rat form baby
Oricana-16 Feb 2, 2023
7ccdd98
memetic
Oricana-16 Feb 2, 2023
d9451b8
removes icon while in debug
Oricana-16 Feb 2, 2023
cda3683
memetic mimic tweaks
Oricana-16 Feb 3, 2023
5c43c38
Launching Mimic Part 1
Oricana-16 Feb 4, 2023
fa92d52
Launching Mimic part 2
Oricana-16 Feb 6, 2023
feb5224
Surging + Presnet mimic
Oricana-16 Feb 6, 2023
a5dd5ad
Tesla mimic part 1
Oricana-16 Feb 7, 2023
4223bf6
Tesla Mimic
Oricana-16 Feb 7, 2023
4623978
Grasp + Superthermal
Oricana-16 Feb 8, 2023
47ea9f6
Etheric + Swaps insightful/oracle + other tweaks
Oricana-16 Feb 9, 2023
4d962ca
tweaks
Oricana-16 Feb 12, 2023
09ebf8c
Undoes color var, tweaks launchimg imic
Oricana-16 Feb 14, 2023
6a63d4b
Explosive Mimic
Oricana-16 Feb 14, 2023
5132e3e
Burning Mimic
Oricana-16 Feb 15, 2023
60bab88
Moves clones to the button instead of the mimic
Oricana-16 Feb 15, 2023
35a960b
Plentiful + Necromantic mimic (also a component)
Oricana-16 Feb 16, 2023
451e7fb
Necromantic part 1 + plentiful fix
Oricana-16 Feb 16, 2023
99582e9
Necromantic Mimic Changes
Oricana-16 Feb 17, 2023
0da7791
Necromantic Finish, Banishing Finish
Oricana-16 Feb 17, 2023
e943ae3
Infesting Mimic
Oricana-16 Feb 17, 2023
4586930
Create neuromods.dmi
Oricana-16 Feb 17, 2023
16c5224
changes mimic organ icon to mimic organ
Oricana-16 Feb 17, 2023
6754abb
No Vent crawley while disugised
Oricana-16 Feb 17, 2023
5c971cb
Merge branch 'master' into mimic-expansion
Oricana-16 Feb 17, 2023
8fe0631
removes duplicate definition
Oricana-16 Feb 17, 2023
76d000e
requested changes part 1 part 1
Oricana-16 Feb 18, 2023
d9f6a10
fixes mindjack particles + mimic_comp small nerf
Oricana-16 Feb 18, 2023
d7b2044
makes neuromods not overwrite lol + mindjack tweak
Oricana-16 Feb 18, 2023
020f000
makes divination rarer
Oricana-16 Feb 19, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions beestation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -3719,6 +3719,7 @@
#include "monkestation\code\datums\votesounds.dm"
#include "monkestation\code\datums\announcers\duke_announcer.dm"
#include "monkestation\code\datums\brain_damage\mild.dm"
#include "monkestation\code\datums\components\distance_bound.dm"
#include "monkestation\code\datums\components\hot_ice.dm"
#include "monkestation\code\datums\components\pricetag.dm"
#include "monkestation\code\datums\components\strong_pull.dm"
Expand Down Expand Up @@ -3800,6 +3801,28 @@
#include "monkestation\code\modules\antagonists\living_lube\living_lube_event.dm"
#include "monkestation\code\modules\antagonists\mimic\mimic.dm"
#include "monkestation\code\modules\antagonists\mimic\mimic_antag.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier2\_tier2.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier2\etheric.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier2\greater.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier2\insightful.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier2\kinetic.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier2\memetic.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier2\shifty.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier2\thermal.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier2\voltaic.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\_tier3.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\banishing.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\burning.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\explosive.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\infesting.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\launching.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\necromantic.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\oracle.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\plentiful.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\present.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\surging.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\tesla.dm"
#include "monkestation\code\modules\antagonists\mimic\evolutions\tier3\transportive.dm"
#include "monkestation\code\modules\antagonists\wizard\equipment\spellbook.dm"
#include "monkestation\code\modules\bitmask_smoothing\code\decals.dm"
#include "monkestation\code\modules\bitmask_smoothing\code\floors.dm"
Expand Down Expand Up @@ -3884,6 +3907,24 @@
#include "monkestation\code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\pandora_exploration.dm"
#include "monkestation\code\modules\neuromods\neuromod_items.dm"
#include "monkestation\code\modules\neuromods\surgery.dm"
#include "monkestation\code\modules\neuromods\neuromods\biomatter_transfer.dm"
#include "monkestation\code\modules\neuromods\neuromods\clown.dm"
#include "monkestation\code\modules\neuromods\neuromods\corpseswap.dm"
#include "monkestation\code\modules\neuromods\neuromods\divination.dm"
#include "monkestation\code\modules\neuromods\neuromods\electrostatic_burst.dm"
#include "monkestation\code\modules\neuromods\neuromods\grasp.dm"
#include "monkestation\code\modules\neuromods\neuromods\kinetic_blast.dm"
#include "monkestation\code\modules\neuromods\neuromods\mimic_composition.dm"
#include "monkestation\code\modules\neuromods\neuromods\mindjack.dm"
#include "monkestation\code\modules\neuromods\neuromods\phantom_shift.dm"
#include "monkestation\code\modules\neuromods\neuromods\psychoshock.dm"
#include "monkestation\code\modules\neuromods\neuromods\rat_form.dm"
#include "monkestation\code\modules\neuromods\neuromods\scramble_electronics.dm"
#include "monkestation\code\modules\neuromods\neuromods\smuggle.dm"
#include "monkestation\code\modules\neuromods\neuromods\stalk.dm"
#include "monkestation\code\modules\neuromods\neuromods\superthermal.dm"
#include "monkestation\code\modules\neuromods\neuromods\track.dm"
#include "monkestation\code\modules\neuromods\neuromods\weapon_transformation.dm"
#include "monkestation\code\modules\particles\byond_particles\particle_holder.dm"
#include "monkestation\code\modules\particles\byond_particles\particle_procs.dm"
#include "monkestation\code\modules\particles\byond_particles\particool.dm"
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/DNA.dm
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,8 @@
#define ORGAN_SLOT_BRAIN_ANTIDROP "brain_antidrop"
#define ORGAN_SLOT_BRAIN_ANTISTUN "brain_antistun"
#define ORGAN_SLOT_BRAIN_SURGICAL_IMPLANT "brain_surgical"
//MonkeStation Edit: Neuromods
#define ORGAN_SLOT_BRAIN_NEUROMOD "brain_neuromod"
#define ORGAN_SLOT_TAIL "tail"
#define ORGAN_SLOT_WINGS "wings"
//MonkeStation Edit: Butt Organ
Expand Down
22 changes: 15 additions & 7 deletions code/modules/research/experimentor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_HEAT]'>Burn</A></b>"
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_COLD]'>Freeze</A></b>"
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_OBLITERATE]'>Destroy</A></b></div>"
if(istype(loaded_item,/obj/item/relic))
if(istype(loaded_item,/obj/item/relic) || istype(loaded_item,/obj/item/mimic_organ))
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_DISCOVER]'>Discover</A></b>"
dat += "<b><a href='byond://?src=[REF(src)];function=eject'>Eject</A>"
var/list/listin = techweb_item_boost_check(src)
Expand Down Expand Up @@ -458,12 +458,20 @@
visible_message("<span class='warning'>[exp_on] [a], and [b], the experiment was a failure.</span>")

if(exp == SCANTYPE_DISCOVER)
visible_message("[src] scans the [exp_on], revealing its true nature!")
playsound(src, 'sound/effects/supermatter.ogg', 50, 3, -1)
var/obj/item/relic/R = loaded_item
R.reveal(linked_console.stored_research)
investigate_log("Experimentor has revealed a relic with <span class='danger'>[R.realProc]</span> effect.", INVESTIGATE_EXPERIMENTOR)
ejectItem()
if(istype(loaded_item,/obj/item/mimic_organ))
visible_message("[src] scans the [exp_on], and prints out a neuromod!")
playsound(src, 'sound/effects/supermatter.ogg', 50, 3, -1)
var/obj/item/mimic_organ/organ = loaded_item
organ.roll_neuromod()
investigate_log("Experimentor has printed a neuromod.", INVESTIGATE_EXPERIMENTOR)
loaded_item = null
else
visible_message("[src] scans the [exp_on], revealing its true nature!")
playsound(src, 'sound/effects/supermatter.ogg', 50, 3, -1)
var/obj/item/relic/R = loaded_item
R.reveal(linked_console.stored_research)
investigate_log("Experimentor has revealed a relic with <span class='danger'>[R.realProc]</span> effect.", INVESTIGATE_EXPERIMENTOR)
ejectItem()

//Global reactions
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff) && loaded_item)
Expand Down
50 changes: 50 additions & 0 deletions monkestation/code/datums/components/distance_bound.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/datum/component/distance_bound
dupe_mode = COMPONENT_DUPE_ALLOWED

var/mob/living/target //Who to follow
var/max_dist
var/kill_on_distance
var/kill_on_target_death

/datum/component/distance_bound/Initialize(target, max_dist, kill_on_distance = FALSE, kill_on_target_death = TRUE)
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE

if(!isliving(target))
return COMPONENT_INCOMPATIBLE

src.target = target
src.max_dist = max_dist
src.kill_on_distance = kill_on_distance
src.kill_on_target_death = kill_on_target_death

START_PROCESSING(SSdcs, src)

/datum/component/distance_bound/process(delta_time)
var/mob/living/owner = parent

var/distance = get_dist(owner,target)

if(distance > max_dist)
if(kill_on_distance)
to_chat(owner,"<span class='danger'>You're too far away, your soul tears itself apart!</span>")
owner.death()
qdel(src)
else
owner.forceMove(target.loc)
return

if(QDELETED(target) || target.stat == DEAD)
if(kill_on_target_death)
to_chat(owner,"<span class='danger'>Your link to the world is lost, your soul tears itself apart!</span>")
owner.death()
qdel(src)
return

if(QDELETED(owner) || owner.stat == DEAD)
qdel(src)
return

/datum/component/distance_bound/Destroy()
STOP_PROCESSING(SSdcs, src)
return ..()
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,12 @@

//Give them a special name in the hivemind for being the first one
if(mimic_datum.mimic_team.mimics.len <= 1)
spawned_mimic.real_name = pick("Mimic Leader","Mimic [pick("King","Queen","Monarch")]","The Broodmother","The Original","Mimic Prime")
spawned_mimic.real_name = pick("Mimic Leader","Mimic [pick("King","Queen","Monarch")]","Broodmother","Apex","Mimic Prime")
//The first mimic gets to evolve
qdel(spawned_mimic.evolve_request_action)
var/datum/action/innate/mimic_evolution/evolution = new
evolution.Grant(spawned_mimic)
to_chat(spawned_mimic,"<span class='big bold'>As the first mimic, you get to evolve for free!</span>")
else
spawned_mimic.real_name = pick("Mimic Commander","Mimic Centurion","Mimic General","Mimic Lord","Mimic Legionnaire","Mimic Elder") + " [mimic_datum.mimic_team.mimics.len - 1]" //Unless multiple spawned, then any others get their own names

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/mob/living/simple_animal/hostile/alien_mimic/tier2
maxHealth = 125
health = 125
disguised_move_delay = 0.4 SECONDS
undisguised_move_delay = 0.05 SECONDS
//A full repro cost required to evolve
evolution_cost_mult = 2
absorption_heal = 40
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
/mob/living/simple_animal/hostile/alien_mimic/tier2/etheric
name = "etheric mimic"
real_name = "etheric mimic"
// icon_state = "etheric"
// icon_living = "etheric"
melee_damage = 7
secondary_damage_type = TOX
hivemind_modifier = "etheric"
playstyle_string = "<span class='big bold'>You are an etheric mimic,</span></b> you deal poison damage and can temporarily summon another mimic.</b>"
possible_evolutions = list(
"plentiful - summon 2 clones instead of 1" = /mob/living/simple_animal/hostile/alien_mimic/tier3/plentiful,
"infesting - summon weaker clones that explode into poisonous clouds" = /mob/living/simple_animal/hostile/alien_mimic/tier3/infesting
)

/mob/living/simple_animal/hostile/alien_mimic/tier2/etheric/Initialize(mapload)
. = ..()
var/obj/effect/proc_holder/spell/self/mimic_clone_request/request_clone = new
AddSpell(request_clone)

// Mimic Clone
/mob/living/simple_animal/hostile/alien_mimic/etheric_clone
name = "etheric mimic"
real_name = "etheric mimic"
can_evolve = FALSE
// icon_state = "etheric"
// icon_living = "etheric"
melee_damage = 7
secondary_damage_type = TOX
hivemind_modifier = "etheric"
playstyle_string = "<span class='big bold'>You are an etheric mimic clone,</span></b> you can summon yourself or be summoned temporarily.</b>"
var/mob/living/simple_animal/hostile/alien_mimic/tier2/etheric/origin_mimic
var/summoned = FALSE

/mob/living/simple_animal/hostile/alien_mimic/etheric_clone/Life()
if(origin_mimic.stat == DEAD)
qdel(src)

// Abilities
/obj/effect/proc_holder/spell/self/mimic_clone
name = "Clone"
desc = "Temporarily split into two mimics."
action_icon = 'icons/mob/actions/actions_hive.dmi'
action_icon_state = "warp"
clothes_req = FALSE
action_background_icon_state = "bg_alien"
charge_max = 90 SECONDS
var/mob/living/simple_animal/hostile/alien_mimic/etheric_clone/clone_mimic

/obj/effect/proc_holder/spell/self/mimic_clone/cast(mob/user)
if(!ismimic(user))
revert_cast(user)
return

var/mob/living/simple_animal/hostile/alien_mimic/mimic_user = user

if(mimic_user.disguised)
to_chat(user,"<span class='notice'>You can't clone yourself while disguised!</span>")
revert_cast(user)
return

clone_mimic.forceMove(get_turf(user))
clone_mimic.summoned = FALSE
user.visible_message("<span class='danger'>A second mimic falls out of [user]</span>")

addtimer(CALLBACK(src, .proc/unsummon_mimic, user), 45 SECONDS)

/obj/effect/proc_holder/spell/self/mimic_clone/proc/unsummon_mimic(mob/user)
clone_mimic.forceMove(user)
clone_mimic.visible_message("<span class='danger'>[clone_mimic] disappears into thin air!</span>")
clone_mimic.revive(TRUE)
clone_mimic.grab_ghost()
clone_mimic.summoned = FALSE


/obj/effect/proc_holder/spell/self/mimic_clone_request
name = "Request Clone"
desc = "Request a ghost to become your clone."
action_icon = 'icons/mob/actions/actions_hive.dmi'
action_icon_state = "warp"
clothes_req = FALSE
action_background_icon_state = "bg_alien"
charge_max = 30 SECONDS
//The type of mimic that gets summoned
var/mimic_type = /mob/living/simple_animal/hostile/alien_mimic/etheric_clone
var/mob/living/simple_animal/hostile/alien_mimic/etheric_clone/clone_mimic

/obj/effect/proc_holder/spell/self/mimic_clone_request/cast(mob/user)
if(!ismimic(user))
revert_cast(user)
return

var/mob/living/simple_animal/hostile/alien_mimic/mimic_user = user

var/list/possible_clones = list()
possible_clones = pollGhostCandidates("A mimic ([user.real_name]) is looking for a player to become their clone.")

if(LAZYLEN(possible_clones))
var/mob/dead/observer/picked_clone = pick(possible_clones)

clone_mimic = new mimic_type(user)
clone_mimic.origin_mimic = user
clone_mimic.name = "etheric mimic"
clone_mimic.real_name = user.real_name + "'s clone"
clone_mimic.toggle_ai(AI_OFF)
clone_mimic.mimic_team = mimic_user.mimic_team

clone_mimic.key = picked_clone.key
to_chat(user, "<span class='notice'>You created a clone!</span>")

var/obj/effect/proc_holder/spell/self/mimic_clone/clone = new
user.AddSpell(clone)
clone.clone_mimic = clone_mimic
qdel(src)
else
to_chat(user, "<span class='notice'>You were unable to summon a clone, try again later!</span>")

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/mob/living/simple_animal/hostile/alien_mimic/tier2/greater
name = "greater mimic"
real_name = "greater mimic"
// icon_state = "greater"
// icon_living = "greater"
maxHealth = 175
health = 175
melee_damage = 9
secondary_damage_type = BRUTE
hivemind_modifier = "Greater"
playstyle_string = "<span class='big bold'>You are a greater mimic,</span></b> you deal more damage to both people and objects, though only brute damage, \
have more health, and can disguise as bigger objects.</b>"
possible_evolutions = list(
"launching - launch yourself into people to deal damage" = /mob/living/simple_animal/hostile/alien_mimic/tier3/launching
)

/mob/living/simple_animal/hostile/alien_mimic/tier2/greater/allowed(atom/movable/target_item)
return isitem(target_item) || (get_dist(src,target_item) > 1 && ismachinery(target_item) && !istype(target_item,/obj/machinery/atmospherics)) //dist check so you can still break things
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/mob/living/simple_animal/hostile/alien_mimic/tier2/insightful
name = "insightful mimic"
real_name = "insightful mimic"
// icon_state = "oracle"
// icon_living = "oracle"
hivemind_modifier = "insightful"
melee_damage = 5
playstyle_string = "<span class='big bold'>You are a insightful mimic,</span></b> you can ghost more often and you also deal more damage and can see through walls.<b>"
sight = SEE_THRU
possible_evolutions = list(
"oracle - ghost around to gain information" = /mob/living/simple_animal/hostile/alien_mimic/tier3/oracle
)

/mob/living/simple_animal/hostile/alien_mimic/tier2/insightful/Initialize(mapload)
. = ..()

Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/mob/living/simple_animal/hostile/alien_mimic/tier2/kinetic
name = "kinetic mimic"
real_name = "kinetic mimic"
// icon_state = "kinetic"
// icon_living = "kinetic"
hivemind_modifier = "Kinetic"
melee_damage = 6
secondary_damage_type = BRUTE
playstyle_string = "<span class='big bold'>You are a kinetic mimic,</span></b> you only deal brute damage, and can push things away with your kinetic blast.<b>"
possible_evolutions = list(
"present - force everyone nearby down" = /mob/living/simple_animal/hostile/alien_mimic/tier3/present
)

/mob/living/simple_animal/hostile/alien_mimic/tier2/kinetic/Initialize(mapload)
. = ..()
var/obj/effect/proc_holder/spell/self/mimic_kinetic_blast/kinetic_blast = new
AddSpell(kinetic_blast)

/obj/effect/proc_holder/spell/self/mimic_kinetic_blast
name = "Kinetic Blast"
desc = "Knock everything away."
clothes_req = FALSE
action_background_icon_state = "bg_alien"
charge_max = 45 SECONDS

/obj/effect/proc_holder/spell/self/mimic_kinetic_blast/cast(mob/user)
if(movement_type & VENTCRAWLING)
return

playsound(get_turf(user),'sound/magic/repulse.ogg', 100, 1)
user.add_emitter(/obj/emitter/mimic/kinetic_blast,"kinetic_blast",burst_mode=TRUE)
user.visible_message("<span class='danger'>[user] sends out a wave of dark energy, knocking everything around!</span>","<span class='danger'>You push everything away!</span>")

var/turf/user_turf = get_turf(user)
var/list/thrown_items = list()

for(var/atom/movable/to_throw as mob|obj in orange(7, user_turf))
if(to_throw.anchored || thrown_items[to_throw])
continue
var/throwtarget = get_edge_target_turf(user_turf, get_dir(user_turf, get_step_away(to_throw, user_turf)))
to_throw.safe_throw_at(throwtarget, 10, 1, force = MOVE_FORCE_EXTREMELY_STRONG)
thrown_items[to_throw] = to_throw
Loading