mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-24 00:21:52 +00:00
* Refactors `UnarmedAttack` so we don't have like 4 Unarmed Attack signals, kills two more snowflake species procs * Update chameleon.dm * Update _species.dm * Modular --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
80 lines
2.9 KiB
Plaintext
80 lines
2.9 KiB
Plaintext
//Chameleon causes the owner to slowly become transparent when not moving.
|
|
/datum/mutation/human/chameleon
|
|
name = "Chameleon"
|
|
desc = "A genome that causes the holder's skin to become transparent over time."
|
|
quality = POSITIVE
|
|
difficulty = 16
|
|
text_gain_indication = "<span class='notice'>You feel one with your surroundings.</span>"
|
|
text_lose_indication = "<span class='notice'>You feel oddly exposed.</span>"
|
|
instability = 25
|
|
power_coeff = 1
|
|
|
|
/datum/mutation/human/chameleon/on_acquiring(mob/living/carbon/human/owner)
|
|
if(..())
|
|
return
|
|
/// SKYRAT EDIT BEGIN
|
|
if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN))
|
|
return
|
|
ADD_TRAIT(owner, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION)
|
|
/// SKYRAT EDIT END
|
|
owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
|
|
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
|
|
RegisterSignal(owner, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_attack_hand))
|
|
|
|
/datum/mutation/human/chameleon/on_life(seconds_per_tick, times_fired)
|
|
/// SKYRAT EDIT BEGIN
|
|
if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN))
|
|
owner.alpha = max(owner.alpha - (12.5 * (GET_MUTATION_POWER(src)) * seconds_per_tick), 0)
|
|
/// SKYRAT EDIT END
|
|
|
|
/**
|
|
* Resets the alpha of the host to the chameleon default if they move.
|
|
*
|
|
* Arguments:
|
|
* - [source][/atom/movable]: The source of the signal. Presumably the host mob.
|
|
* - [old_loc][/atom]: The location the host mob used to be in.
|
|
* - move_dir: The direction the host mob moved in.
|
|
* - forced: Whether the movement was caused by a forceMove or moveToNullspace.
|
|
* - [old_locs][/list/atom]: The locations the host mob used to be in.
|
|
*/
|
|
/datum/mutation/human/chameleon/proc/on_move(atom/movable/source, atom/old_loc, move_dir, forced, list/atom/old_locs)
|
|
SIGNAL_HANDLER
|
|
|
|
/// SKYRAT EDIT BEGIN
|
|
if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN))
|
|
owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
|
|
else
|
|
owner.alpha = 255
|
|
/// SKYRAT EDIT END
|
|
|
|
/**
|
|
* Resets the alpha of the host if they click on something nearby.
|
|
*
|
|
* Arguments:
|
|
* - [source][/mob/living/carbon/human]: The host mob that just clicked on something.
|
|
* - [target][/atom]: The thing the host mob clicked on.
|
|
* - proximity: Whether the host mob can physically reach the thing that they clicked on.
|
|
* - [modifiers][/list]: The set of click modifiers associated with this attack chain call.
|
|
*/
|
|
/datum/mutation/human/chameleon/proc/on_attack_hand(mob/living/carbon/human/source, atom/target, proximity, list/modifiers)
|
|
SIGNAL_HANDLER
|
|
|
|
if(!proximity) //stops tk from breaking chameleon
|
|
return
|
|
|
|
/// SKYRAT EDIT BEGIN
|
|
if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN))
|
|
owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
|
|
else
|
|
owner.alpha = 255
|
|
/// SKYRAT EDIT END
|
|
|
|
/datum/mutation/human/chameleon/on_losing(mob/living/carbon/human/owner)
|
|
if(..())
|
|
return
|
|
owner.alpha = 255
|
|
UnregisterSignal(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_UNARMED_ATTACK))
|
|
/// SKYRAT EDIT BEGIN
|
|
REMOVE_TRAIT(owner, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION)
|
|
/// SKYRAT EDIT END
|