Skip to content

Commit

Permalink
adds beestation's*** mutations
Browse files Browse the repository at this point in the history
  • Loading branch information
Gboster-0 committed Jan 16, 2025
1 parent e93ffc4 commit 69fe668
Show file tree
Hide file tree
Showing 5 changed files with 187 additions and 0 deletions.
41 changes: 41 additions & 0 deletions monkestation/code/datums/mutations/species/ethereal.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/datum/mutation/human/overload
name = "Overload"
desc = "Allows an Ethereal to overload their skin to cause a bright flash."
quality = POSITIVE
text_gain_indication = span_notice("You feel your skin energetically tingle.")
species_allowed = list(SPECIES_ETHEREAL)
instability = 30
power_path = /datum/action/cooldown/overload

power_coeff = 1
energy_coeff = 1

/datum/mutation/human/overload/modify()
. = ..()
var/datum/action/cooldown/overload/to_modify = .
if(!istype(to_modify))
return

to_modify.distance *= GET_MUTATION_POWER(src)

/datum/action/cooldown/overload
name = "Overload"
desc = "Concentrate to make your skin energize and emit a bright flash."
button_icon = 'icons/mob/actions/actions_minor_antag.dmi'
button_icon_state = "funk"

cooldown_time = 40 SECONDS
check_flags = AB_CHECK_CONSCIOUS

var/distance = 4

/datum/action/cooldown/overload/Activate(mob/living/carbon/cast_on)
. = ..()
var/list/mob/targets = oviewers(distance, get_turf(cast_on))
cast_on.visible_message(span_userdanger("[cast_on] emits a blinding light!"))
for(var/mob/living/carbon/target in targets)
if(target.flash_act(1))
var/target_distance = get_dist(cast_on, target)
target.Paralyze((distance / target_distance) SECONDS)

return TRUE
33 changes: 33 additions & 0 deletions monkestation/code/datums/mutations/species/floran.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/datum/mutation/human/spores
name = "Agaricale Pores" // Pores, not spores. ITS NOT SPORES!!!!!
desc = "An ancient mutation that gives florans the ability to produce spores."
quality = POSITIVE
difficulty = 12
text_gain_indication = span_notice("You feel your pores more sensitively..?")
species_allowed = list(SPECIES_FLORAN)
instability = 30
power_path = /datum/action/cooldown/spores

energy_coeff = 1

/datum/action/cooldown/spores
name = "Release Spores"
desc = "Release your blood in a mist using pores."
button_icon = 'icons/mob/actions/actions_spells.dmi'
button_icon_state = "smoke"

cooldown_time = 1 MINUTE
check_flags = AB_CHECK_CONSCIOUS

/datum/action/cooldown/spores/Activate(mob/living/carbon/cast_on)
. = ..()
var/datum/blood_type/blood = cast_on.get_blood_type()

var/blood_path = isnull(blood) ? /datum/reagent/drug/mushroomhallucinogen : blood.reagent_type
var/amount = min(cast_on.blood_volume, 15) // We dont need to check if its below 15 realistically since you'd be dead, but whatever
var/range = floor(sqrt(amount / 2))

cast_on.blood_volume -= amount
do_chem_smoke(range, amount, owner, get_turf(cast_on), blood_path)
playsound(cast_on, 'sound/effects/smoke.ogg', 50, 1, -3)
return TRUE
44 changes: 44 additions & 0 deletions monkestation/code/datums/mutations/species/moth.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/datum/mutation/human/wings
name = "Strengthened Wings"
desc = "Subject's wing muscle volume rapidly increases, effect only observed in moth subjects."
quality = POSITIVE
difficulty = 12
text_gain_indication = span_notice("You feel your wing muscles expand!")
species_allowed = list(SPECIES_MOTH)
instability = 15

/datum/mutation/human/wings/on_acquiring(mob/living/carbon/human/owner)
if(!owner || !istype(owner)) // Parent checks this, but we want to be safe when doing get_organ_slot
return TRUE

var/obj/item/organ/external/wings/functional/external_wings = owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
if(external_wings && istype(external_wings))
return TRUE // You dont need us

. = ..()
if(.)
return

var/datum/reagent/flightpotion/juice = new()
juice.expose_mob(owner, INJECT, 5)

if(external_wings) // These are the old wings, instead of being dropped onto the ground we store them
external_wings.forceMove(owner)

/datum/mutation/human/wings/on_losing(mob/living/carbon/human/owner)
if(!owner || !istype(owner)) // See above
return TRUE

var/obj/item/organ/external/wings/functional/external_wings = owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
if(!external_wings || !istype(external_wings))
return TRUE // Cheater, you don't get to remove this mutation without having FUNCTIONAL wings

. = ..()
if(.)
return TRUE

external_wings.Remove(owner)

var/obj/item/organ/external/wings/previous_wings = locate(/obj/item/organ/external/wings) in owner
if(previous_wings)
previous_wings.Insert(owner)
65 changes: 65 additions & 0 deletions monkestation/code/datums/mutations/species/oozeling.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/datum/mutation/human/acid_touch
name = "Acidic Hands"
desc = "Allows an Oozeling to metabolize some of their blood into acid, concentrated on their hands."
quality = POSITIVE
difficulty = 16
text_gain_indication = span_notice("You feel power flow through your hands.")
text_lose_indication = span_notice("The energy in your hands subsides.")
power_path = /datum/action/cooldown/spell/touch/acid
species_allowed = list(SPECIES_OOZELING)
instability = 30

synchronizer_coeff = 1
power_coeff = 1
energy_coeff = 1

/datum/mutation/human/acid_touch/modify()
. = ..()
var/datum/action/cooldown/spell/touch/acid/to_modify =.
if(!istype(to_modify)) // null or invalid
return

to_modify.acid_volume *= GET_MUTATION_POWER(src)
to_modify.blood_cost *= GET_MUTATION_SYNCHRONIZER(src)

/datum/action/cooldown/spell/touch/acid
name = "Shock Touch"
desc = "Channel electricity to your hand to shock people with."
button_icon = 'icons/mob/actions/actions_slime.dmi'
button_icon_state = "consume"
sound = 'sound/chemistry/bufferadd.ogg'
cooldown_time = 10 SECONDS
invocation_type = INVOCATION_NONE
spell_requirements = NONE
antimagic_flags = NONE

/// How much acid we put on something
var/acid_volume = 15
/// How much blood it costs for us to use the hand:tm:
var/blood_cost = 20

hand_path = /obj/item/melee/touch_attack/acid
draw_message = span_notice("You secrete acid into your hand.")
drop_message = span_notice("You let the acid in your hand dissipate.")

/datum/action/cooldown/spell/touch/acid/is_valid_target(atom/cast_on)
return isatom(cast_on) // We are not really picky

/datum/action/cooldown/spell/touch/acid/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster)
if(caster.blood_volume < BLOOD_VOLUME_OKAY)
to_chat(caster, span_warning("Your acid is too weakly concentrated to use for dissolving!"))
return FALSE

if(victim.acid_act(50, acid_volume))
caster.visible_message(span_warning("[caster] rubs their hands on [victim], spreading acid all over them!"))
caster.blood_volume = max(caster.blood_volume - blood_cost, 0)
return TRUE

to_chat(caster, span_notice("You cannot dissolve this object."))
return TRUE

/obj/item/melee/touch_attack/acid
name = "\improper acidic hand"
desc = "This is kind of like when you drink acid to replenish your blood, only a lot less safe for others."
icon = 'icons/obj/weapons/hand.dmi'
icon_state = "mansus"
4 changes: 4 additions & 0 deletions tgstation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -6003,6 +6003,10 @@
#include "monkestation\code\datums\mutations\hulk.dm"
#include "monkestation\code\datums\mutations\passive.dm"
#include "monkestation\code\datums\mutations\sight.dm"
#include "monkestation\code\datums\mutations\species\ethereal.dm"
#include "monkestation\code\datums\mutations\species\floran.dm"
#include "monkestation\code\datums\mutations\species\moth.dm"
#include "monkestation\code\datums\mutations\species\oozeling.dm"
#include "monkestation\code\datums\quirks\_quirk.dm"
#include "monkestation\code\datums\quirks\negative_quirks\allergic.dm"
#include "monkestation\code\datums\quirks\negative_quirks\dnr.dm"
Expand Down

0 comments on commit 69fe668

Please sign in to comment.