Skip to content

Commit

Permalink
bullet spit rework + some QoL and fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
VoiceInYourHead committed Feb 26, 2024
1 parent 7763138 commit 541621e
Show file tree
Hide file tree
Showing 4 changed files with 270 additions and 80 deletions.
10 changes: 5 additions & 5 deletions code/modules/psionics/faculties/coercion.dm
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
return FALSE
. = ..()
if(.)
var/option = input(target, "Choose something!", "Emotion to simulate") in list("Радость", "Грусть", "Страх", "Тревога", "Злость", "Спокойствие")
var/option = input(user, "Choose something!", "Emotion to stimulate") in list("Радость", "Грусть", "Страх", "Тревога", "Злость", "Спокойствие")
if (!option)
return 0
if(user.psi.suppressed)
Expand Down Expand Up @@ -102,22 +102,22 @@
sleep(3 SECONDS)
return 1
if(option == "Страх") //заставляет временно застыть на месте, но не перманентно, в отличии от спазма(можно сделать так, чтобы челик ещё и дрожал при этом)
to_chat(target, SPAN_WARNING("Внезапно, ваше тело цепенеет от одного только взгляда в сторону [user]. Вы дрожите, словно ваш мозг испытывает какой-то подсознательный страх."))
to_chat(target, SPAN_OCCULT("Внезапно, ваше тело цепенеет от одного только взгляда в сторону [user]. Вы дрожите, словно ваш мозг испытывает какой-то подсознательный страх."))
var/cn_rank = user.psi.get_rank(PSI_COERCION)
var/mob/living/carbon/C = target
C.make_dizzy(10)
C.Stun(5 + cn_rank)
return 1
if(option == "Тревога") //вариант для рп, пишет всякое в чат(мб добавить страшные звуки)
var/strange_option = pick("ощущаете чьё-то зловещее присутствие", "сильно потеете", "чувствуете, что за вами что-то наблюдает", "ощущаете странный холод", "чувствуете, как что-то ползает по вам")
to_chat(target, SPAN_WARNING("Вы [strange_option]."))
to_chat(target, SPAN_DANGER("Вы [strange_option]."))
return 1
if(option == "Злость") //вариант для рп, пишет всякое в чат
var/anger_option = pick("к самому себе", "к человеку, что стоит рядом", "к месту, в котором вы находитесь", "к своей жизни", "по отношению к данной ситуации", "к сегодняшнему дню", "к сегодняшней погоде", "к вашей работе", "к тому, что было вчера")
to_chat(target, SPAN_WARNING("Внезапно, вы ощущаете странную злобу [anger_option]."))
to_chat(target, SPAN_DANGER("Внезапно, вы ощущаете странную злобу [anger_option]."))
return 1
if(option == "Спокойствие") //вариант для рп, пишет всякое в чат
to_chat(target, SPAN_WARNING("Вы ощущаете странное умиротворение."))
to_chat(target, SPAN_NOTICE("Вы ощущаете странное умиротворение."))
if(target.psi)
target.psi.stamina = min(target.psi.max_stamina, target.psi.stamina + rand(15,20))
return 1
Expand Down
193 changes: 182 additions & 11 deletions code/modules/psionics/faculties/energistics.dm
Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,8 @@
empulse(target, 1, 2)
return TRUE

/decl/psionic_power/energistics/spit
name = "Bullet Spit"
cost = 20
cooldown = 45
use_ranged = TRUE
min_rank = PSI_RANK_APPRENTICE
use_description = "Выберите голову на красном интенте и нажмите по чему угодно, чтобы запустить из пальца маленькую сферу с сжатой псионической энергией."

//PROJECTILES
/obj/item/projectile/psi
name = "psionic projectile"
icon = 'icons/obj/projectiles.dmi'
Expand All @@ -129,27 +123,203 @@
impact_sounds = list(BULLET_IMPACT_MEAT = SOUNDS_BULLET_MEAT, BULLET_IMPACT_METAL = SOUNDS_BULLET_METAL)

/obj/item/projectile/psi/strong
damage = 15
damage = 25
icon_state = "plasma_bolt"
color = "#c40eed"
var/explosion_power = 50
var/explosion_power = 20
var/explosion_falloff = 10

/obj/item/projectile/psi/strong/on_hit(var/atom/target, var/blocked = 0)
cell_explosion(get_turf(target), explosion_power, explosion_falloff)
..()

/obj/item/projectile/psi/strong_piercing
damage = 40
icon_state = "plasma_bolt"
color = "#c40eed"
var/explosion_power = 20
var/explosion_falloff = 10
var/exploded_inwall = FALSE
var/delay = 4

armor_penetration = 100
penetrating = 2
penetration_modifier = 1.1
var/proximity_detonation = FALSE //should we explode near our target, and not inside of it?
var/exploded = FALSE

/obj/item/projectile/psi/strong_piercing/Bump(atom/A as mob|obj|turf|area, forced=0)
..()
if(exploded)
return

exploded = TRUE
if(istype(A,/obj/effect/shield))
cell_explosion(get_turf(A), explosion_power, explosion_falloff)
qdel(src)
return

sleep(delay)

if(src && !exploded_inwall)
cell_explosion(get_turf(src), explosion_power, explosion_falloff)
qdel(src)

/obj/item/projectile/psi/strong_piercing/Destroy()
if(src && !exploded_inwall && !istype(loc,/atom/movable))
exploded = TRUE
exploded_inwall = TRUE
cell_explosion(get_turf(src), explosion_power, explosion_falloff)
..()
//PROJECTILES


/decl/psionic_power/energistics/spit
name = "Bullet Spit"
cost = 20
cooldown = 45
use_ranged = TRUE
use_melee = TRUE
min_rank = PSI_RANK_APPRENTICE
use_description = "Выберите голову на красном интенте и нажмите по чему угодно, чтобы запустить из пальца маленькую сферу с сжатой псионической энергией."

var/psi_shot = "Standart"

/decl/psionic_power/energistics/spit/invoke(var/mob/living/user, var/mob/living/target)

var/list/options = list(
"Armor Piercing" = image('icons/screen/psi.dmi', "AP"),
"Explosive" = image('icons/screen/psi.dmi', "EXP"),
"Piercing Charges" = image('icons/screen/psi.dmi', "EXPAP"),
"Standart" = image('icons/screen/psi.dmi', "DEF")
)

if(user.zone_sel.selecting != BP_HEAD)
return FALSE
. = ..()
if(.)
user.visible_message("<span class='danger'>[user] изображает пальцами пистолет, делая выстрел!</span>")

var/user_rank = user.psi.get_rank(faculty)
var/obj/item/projectile/pew
var/pew_sound

if(target == user)
var/chosen_option = show_radial_menu(user, user, options, radius = 48, require_near = TRUE)
if (!chosen_option)
return
psi_shot = chosen_option
to_chat(user, "<span class='warning'>Теперь, ты будешь выпускать снаряды типа '[chosen_option]' при использовании псионики.</span>")
return TRUE

user.visible_message("<span class='danger'>[user] изображает пальцами пистолет, делая выстрел!</span>")

if(psi_shot == "Standart")
if(user_rank == PSI_RANK_APPRENTICE)
pew = new /obj/item/projectile/psi(get_turf(user))
pew.name = "small psionic bullet"
pew_sound = 'sound/weapons/guns/ricochet4.ogg'
if(user_rank >= PSI_RANK_MASTER)
pew = new /obj/item/projectile/psi(get_turf(user))
pew.name = "psionic bullet"
pew.damage = 40
pew_sound = 'sound/weapons/guns/ricochet4.ogg'

if(psi_shot == "Armor Piercing")
if(user_rank == PSI_RANK_APPRENTICE)
if(prob(10))
pew = new /obj/item/projectile/psi(get_turf(user))
pew.name = "piercing psionic bullet"
pew.color = "#a70909"
pew.armor_penetration = 80
pew.penetrating = 5
pew.penetration_modifier = 1.1
pew_sound = 'sound/weapons/guns/ricochet4.ogg'
else
pew = new /obj/item/projectile/psi(get_turf(user))
pew.name = "small psionic bullet"
pew_sound = 'sound/weapons/guns/ricochet4.ogg'
to_chat(user, "<span class='warning'>Ты пытаешься сконцентрировать всю энергию в одном маленьком сгустке, дабы создать пробивной снаряд, но что-то мешает тебе...</span>")
if(user_rank == PSI_RANK_OPERANT)
pew = new /obj/item/projectile/psi(get_turf(user))
pew.name = "piercing psionic bullet"
pew.color = "#a70909"
pew.armor_penetration = 80
pew.penetrating = 5
pew.penetration_modifier = 1.1
pew_sound = 'sound/weapons/guns/ricochet4.ogg'
if(user_rank >= PSI_RANK_MASTER)
pew = new /obj/item/projectile/psi(get_turf(user))
pew.name = "piercing psionic bullet"
pew.color = "#a70909"
pew.armor_penetration = 100
pew.penetrating = 6
pew.penetration_modifier = 1.1
pew.damage = 40
pew_sound = 'sound/weapons/guns/ricochet4.ogg'

if(psi_shot == "Explosive")
if(user_rank == PSI_RANK_APPRENTICE)
if(prob(10))
pew = new /obj/item/projectile/psi/strong(get_turf(user))
pew.name = "explosive psionic round"
pew.damage = 10
pew_sound = 'sound/weapons/guns/ricochet4.ogg'
else
to_chat(user, "<span class='danger'>Огромный ком энергии накапливается внутри тебя, готовясь вырваться наружу, но что-то идёт не так...</span>")
cell_explosion(get_turf(user), 10, 5)
if(user_rank >= PSI_RANK_OPERANT)
pew = new /obj/item/projectile/psi/strong(get_turf(user))
pew.name = "explosive psionic round"
pew_sound = 'sound/weapons/guns/ricochet4.ogg'


if(psi_shot == "Piercing Charges")
if(user_rank <= PSI_RANK_OPERANT)
if(prob(10))
pew = new /obj/item/projectile/psi/strong_piercing(get_turf(user))
pew.name = "piercing psionic round"
pew.color = "#a70909"
pew.damage = 20
pew_sound = 'sound/weapons/guns/ricochet4.ogg'
else
pew = new /obj/item/projectile/psi(get_turf(user))
pew.name = "piercing psionic bullet"
pew.color = "#a70909"
pew.armor_penetration = 80
pew.penetrating = 5
pew.penetration_modifier = 1.1
pew_sound = 'sound/weapons/guns/ricochet4.ogg'
to_chat(user, "<span class='warning'>Ты пытаешься сконцентрировать всю энергию в одном маленьком сгустке, дабы создать пробивной снаряд, но что-то мешает тебе...</span>")
cell_explosion(get_turf(user), 15, 5)
if(user_rank == PSI_RANK_MASTER)
if(prob(70))
pew = new /obj/item/projectile/psi/strong_piercing(get_turf(user))
pew.name = "piercing psionic round"
pew.color = "#a70909"
pew.damage = 20
pew_sound = 'sound/weapons/guns/ricochet4.ogg'
else
to_chat(user, "<span class='warning'>Ты пытаешься сконцентрировать всю энергию в одном маленьком сгустке, дабы создать пробивной снаряд, но что-то мешает тебе...</span>")
cell_explosion(get_turf(user), 15, 5)
if(user_rank == PSI_RANK_GRANDMASTER)
pew = new /obj/item/projectile/psi/strong_piercing(get_turf(user))
pew.name = "piercing psionic round"
pew.color = "#a70909"
pew_sound = 'sound/weapons/guns/ricochet4.ogg'

if(istype(pew))
playsound(pew.loc, pew_sound, 25, 1)
pew.original = target
pew.current = target
pew.starting = get_turf(user)
pew.shot_from = user
pew.launch(target, user.zone_sel.selecting, (target.x-user.x), (target.y-user.y))
return TRUE

/* var/user_rank = user.psi.get_rank(faculty)
var/obj/item/projectile/pew
var/pew_sound
user.psi.set_cooldown(cooldown)
sleep(4)
user.psi.spend_power(cost)
Expand Down Expand Up @@ -192,7 +362,8 @@
pew.starting = get_turf(user)
pew.shot_from = user
pew.launch(target, user.zone_sel.selecting, (target.x-user.x), (target.y-user.y))
return TRUE
return TRUE*/


/decl/psionic_power/energistics/storm
name = "Bullet Storm"
Expand Down
Loading

0 comments on commit 541621e

Please sign in to comment.