-
Notifications
You must be signed in to change notification settings - Fork 275
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
187 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters