Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Псионика!!! #5195

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
d12b4ff
Basic
Microvolnovka19 Nov 24, 2024
d406401
Почти доделано(?)
Microvolnovka19 Nov 24, 2024
0adfc9c
Merge branch 'Fluffy-Frontier:master' into psyonics
Microvolnovka19 Nov 24, 2024
aab3c50
Добавить мед описание
Microvolnovka19 Nov 24, 2024
3de6d01
Иконка
Microvolnovka19 Nov 24, 2024
e5f5035
Мелкие правки
Microvolnovka19 Nov 25, 2024
138c440
Поменять название чтобы тест не ругался
Microvolnovka19 Nov 25, 2024
a209a46
Поднять повторяющиеся проки выше на уровень
Microvolnovka19 Dec 7, 2024
afbd361
Merge branch 'master' into psyonics
Microvolnovka19 Dec 7, 2024
ec9c4b6
Update tgstation.dme
Microvolnovka19 Dec 7, 2024
7c6ac64
Update tgstation.dme
Microvolnovka19 Dec 7, 2024
d2c9ec5
Японский истребитель...
Microvolnovka19 Dec 7, 2024
d62d142
Шапочка из фольги теперь защищает от школы внушения
Microvolnovka19 Dec 7, 2024
d318c01
Новый спелл
Microvolnovka19 Dec 7, 2024
caf8866
Merge branch 'master' into pr/5195
Iajret Dec 12, 2024
1d0f4d2
Patch №1
Microvolnovka19 Dec 13, 2024
6acc14b
Merge branch 'psyonics' of https://github.com/Microvolnovka19/FluffyS…
Microvolnovka19 Dec 13, 2024
047302a
Patch №2
Microvolnovka19 Dec 16, 2024
3924da0
Merge branch 'master' into pr/5195
Iajret Dec 19, 2024
7e82900
Update redaction.dm
Iajret Dec 19, 2024
55738eb
Лицензии
Microvolnovka19 Dec 22, 2024
6296ee4
fix
Microvolnovka19 Dec 22, 2024
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
321 changes: 321 additions & 0 deletions tff_modular/modules/psyonics/code/_psyonics.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,321 @@
// Тут хранятся некрасивые базовые классы и прочее. Не смотрите сюда.

// Спеллы для призвания предмета
/datum/action/cooldown/spell/conjure_item/psyonic
delete_old = FALSE
delete_on_failure = TRUE
requires_hands = TRUE
// Сколько маны стоит кастануть спелл
var/mana_cost = 10
// Некоторые спеллы могут отнимать стамину
var/stamina_cost = 0
// Что написать жертве
var/target_msg
// Сила способности
var/cast_power = 0
// Вторичная школа. Может дать особые эффекты при комбинациях
var/secondary_school = 0
// Псионические способности (в основном) не блокируются, но выводят особенные сообщения тем, кто это может
antimagic_flags = MAGIC_RESISTANCE_MIND
spell_requirements = NONE
cooldown_reduction_per_rank = 0 SECONDS

/datum/action/cooldown/spell/conjure_item/psyonic/New(Target, power, additional_school)
. = ..()
cast_power = power
secondary_school = additional_school

// Проверяем достаточно ли маны
/datum/action/cooldown/spell/conjure_item/psyonic/proc/check_for_mana()
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
Microvolnovka19 marked this conversation as resolved.
Show resolved Hide resolved
return TRUE
else
return FALSE

// Сосём ману у псионика
/datum/action/cooldown/spell/conjure_item/psyonic/proc/drain_mana(forced = FALSE)
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
caster.adjustStaminaLoss(stamina_cost, forced = TRUE)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
quirk_holder.mana_level -= mana_cost
return TRUE
else if (forced)
quirk_holder.mana_level = 0
return TRUE
else
return FALSE

/datum/action/cooldown/spell/conjure_item/psyonic/can_cast_spell(feedback)
. = ..()
if(!.)
return FALSE

if(!check_for_mana())
return FALSE
else
return TRUE

/datum/action/cooldown/spell/conjure_item/psyonic/cast(atom/cast_on)
drain_mana()
return ..()

// Для спеллов которые применяются на себя тыком кнопки a.k.a. выдача генов
/datum/action/cooldown/spell/psyonic
// Сколько маны стоит кастануть спелл
var/mana_cost = 10
// Некоторые спеллы могут отнимать стамину
var/stamina_cost = 0
// Сила способности
var/cast_power = 0
// Вторичная школа. Может дать особые эффекты при комбинациях
var/secondary_school = 0
// Псионические способности (в основном) не блокируются, но выводят особенные сообщения тем, кто это может
antimagic_flags = MAGIC_RESISTANCE_MIND

school = SCHOOL_UNSET
invocation_type = INVOCATION_NONE
spell_requirements = NONE
cooldown_reduction_per_rank = 0 SECONDS

/datum/action/cooldown/spell/psyonic/New(Target, power, additional_school)
. = ..()
cast_power = power
secondary_school = additional_school

// Проверяем достаточно ли маны
/datum/action/cooldown/spell/psyonic/proc/check_for_mana()
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
return TRUE
else
return FALSE

// Сосём ману у псионика
/datum/action/cooldown/spell/psyonic/proc/drain_mana(forced = FALSE)
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
caster.adjustStaminaLoss(stamina_cost, forced = TRUE)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
quirk_holder.mana_level -= mana_cost
return TRUE
else if (forced)
quirk_holder.mana_level = 0
return TRUE
else
return FALSE

/datum/action/cooldown/spell/psyonic/can_cast_spell(feedback)
. = ..()
if(!.)
return FALSE

if(!check_for_mana())
return FALSE
else
return TRUE

// Спеллы для пострелушек
/datum/action/cooldown/spell/pointed/projectile/psyonic
// Сколько маны стоит кастануть спелл
var/mana_cost = 10
// Некоторые спеллы могут отнимать стамину
var/stamina_cost = 0
// Что написать жертве
var/target_msg
// Сила способности
var/cast_power = 0
// Вторичная школа. Может дать особые эффекты при комбинациях
var/secondary_school = 0
// Псионические способности (в основном) не блокируются, но выводят особенные сообщения тем, кто это может
antimagic_flags = MAGIC_RESISTANCE_MIND

school = SCHOOL_UNSET
invocation_type = INVOCATION_NONE
spell_requirements = NONE
cooldown_reduction_per_rank = 0 SECONDS

/datum/action/cooldown/spell/pointed/projectile/psyonic/New(Target, power, additional_school)
. = ..()
cast_power = power
secondary_school = additional_school

// Проверяем достаточно ли маны
/datum/action/cooldown/spell/pointed/projectile/psyonic/proc/check_for_mana()
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
return TRUE
else
return FALSE

// Сосём ману у псионика
/datum/action/cooldown/spell/pointed/projectile/psyonic/proc/drain_mana(forced = FALSE)
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
caster.adjustStaminaLoss(stamina_cost, forced = TRUE)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
quirk_holder.mana_level -= mana_cost
return TRUE
else if (forced)
quirk_holder.mana_level = 0
return TRUE
else
return FALSE

/datum/action/cooldown/spell/pointed/projectile/psyonic/can_cast_spell(feedback)
. = ..()
if(!.)
return FALSE

if(!check_for_mana())
return FALSE
else
return TRUE

// Направленные спеллы a.k.a. псионик выбирают цель на дистанции
/datum/action/cooldown/spell/pointed/psyonic
// Сколько маны стоит кастануть спелл
var/mana_cost = 10
// Некоторые спеллы могут отнимать стамину
var/stamina_cost = 0
// Что написать жертве
var/target_msg
// Сила способности
var/cast_power = 0
// Вторичная школа. Может дать особые эффекты при комбинациях
var/secondary_school = 0
// Псионические способности (в основном) не блокируются, но выводят особенные сообщения тем, кто это может
antimagic_flags = MAGIC_RESISTANCE_MIND
school = SCHOOL_UNSET
invocation_type = INVOCATION_NONE
spell_requirements = NONE
cooldown_reduction_per_rank = 0 SECONDS

/datum/action/cooldown/spell/pointed/psyonic/New(Target, power, additional_school)
. = ..()
cast_power = power
secondary_school = additional_school

// Проверяем достаточно ли маны
/datum/action/cooldown/spell/pointed/psyonic/proc/check_for_mana()
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
return TRUE
else
return FALSE

// Сосём ману у псионика
/datum/action/cooldown/spell/pointed/psyonic/proc/drain_mana(forced = FALSE)
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
caster.adjustStaminaLoss(stamina_cost, forced = TRUE)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
quirk_holder.mana_level -= mana_cost
return TRUE
else if (forced)
quirk_holder.mana_level = 0
return TRUE
else
return FALSE

/datum/action/cooldown/spell/pointed/psyonic/can_cast_spell(feedback)
. = ..()
if(!.)
return FALSE

if(!check_for_mana())
return FALSE
else
return TRUE

// Спеллы которыми надо каснуться чего либо
/datum/action/cooldown/spell/touch/psyonic
// Сколько маны стоит кастануть спелл
var/mana_cost = 10
// Некоторые спеллы могут отнимать стамину
var/stamina_cost = 0
// Что написать жертве
var/target_msg
// Сила способности
var/cast_power = 0
// Вторичная школа. Может дать особые эффекты при комбинациях
var/secondary_school = 0
// Псионические способности (в основном) не блокируются, но выводят особенные сообщения тем, кто это может
antimagic_flags = MAGIC_RESISTANCE_MIND
school = SCHOOL_UNSET
invocation_type = INVOCATION_NONE
spell_requirements = NONE

/datum/action/cooldown/spell/touch/psyonic/New(Target, power, additional_school)
. = ..()
cast_power = power
secondary_school = additional_school

// Проверяем достаточно ли маны
/datum/action/cooldown/spell/touch/psyonic/proc/check_for_mana()
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
return TRUE
else
return FALSE

// Сосём ману у псионика
/datum/action/cooldown/spell/touch/psyonic/proc/drain_mana(forced = FALSE)
var/mob/living/carbon/human/caster = owner
var/datum/quirk/psyonic/quirk_holder = caster.get_quirk(/datum/quirk/psyonic)
caster.adjustStaminaLoss(stamina_cost, forced = TRUE)
if(quirk_holder && (quirk_holder.mana_level - mana_cost) >= 0)
quirk_holder.mana_level -= mana_cost
return TRUE
else if (forced)
quirk_holder.mana_level = 0
return TRUE
else
return FALSE

/datum/action/cooldown/spell/touch/psyonic/can_cast_spell(feedback)
. = ..()
if(!.)
return FALSE

if(!check_for_mana())
return FALSE
else
return TRUE

/datum/action/cooldown/spell/touch/psyonic/create_hand(mob/living/carbon/cast_on)
. = ..()
if(!.)
return .
var/obj/item/bodypart/transfer_limb = cast_on.get_active_hand()
if(IS_ROBOTIC_LIMB(transfer_limb))
to_chat(cast_on, span_notice("You fail to channel your psyonic powers through your inorganic hand."))
return FALSE

return TRUE

/particles/droplets/psyonic
icon = 'icons/effects/particles/generic.dmi'
icon_state = list("dot"=2,"drop"=1)
width = 32
height = 36
count = 20
spawning = 0.2
lifespan = 1.5 SECONDS
fade = 0.5 SECONDS
color = "#00a2ff"
position = generator(GEN_BOX, list(-9,-9,0), list(9,18,0), NORMAL_RAND)
scale = generator(GEN_VECTOR, list(0.9,0.9), list(1.1,1.1), NORMAL_RAND)
gravity = list(0, 0.95)

// Проверка на то, есть ли квирк псионики у хумана
/mob/living/carbon/human/proc/ispsyonic()
if(has_quirk(/datum/quirk/psyonic))
return TRUE
return FALSE
Loading
Loading