mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 11:37:40 +01:00
Reworks xenomorphs (#23054)
* reworks xenomorphs * part 2 electric boogaloo * more tweaks * more tweaks * lints * Update code/modules/mob/living/carbon/alien/alien_death.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/modules/surgery/organs/subtypes/xenos.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/datums/spells/alien_spells/transfer_plasma.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * reviews * sprite fix * high priority fix * reverts most alien nerfs --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
This commit is contained in:
+8
-4
@@ -14,8 +14,9 @@
|
||||
var/origin_oldloc = null
|
||||
var/static_beam = FALSE
|
||||
var/beam_type = /obj/effect/ebeam //must be subtype
|
||||
var/beamcolor
|
||||
|
||||
/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3)
|
||||
/datum/beam/New(beam_origin, beam_target,beam_icon = 'icons/effects/beam.dmi', beam_icon_state = "b_beam", time = 50, maxdistance = 10, btype = /obj/effect/ebeam, beam_sleep_time = 3, beam_color)
|
||||
endtime = world.time+time
|
||||
origin = beam_origin
|
||||
origin_oldloc = get_turf(origin)
|
||||
@@ -29,6 +30,7 @@
|
||||
icon = beam_icon
|
||||
icon_state = beam_icon_state
|
||||
beam_type = btype
|
||||
beamcolor = beam_color
|
||||
|
||||
/datum/beam/proc/Start()
|
||||
Draw()
|
||||
@@ -77,10 +79,12 @@
|
||||
//cropped by a transparent box of length-N pixel size
|
||||
if(N+32>length)
|
||||
var/icon/II = new(icon, icon_state)
|
||||
II.DrawBox(null,1,(length-N),32,32)
|
||||
II.DrawBox(null, 1, (length-N), 32, 32)
|
||||
X.icon = II
|
||||
else
|
||||
X.icon = base_icon
|
||||
if(beamcolor)
|
||||
X.color = beamcolor
|
||||
X.transform = rot_matrix
|
||||
|
||||
//Calculate pixel offsets (If necessary)
|
||||
@@ -163,7 +167,7 @@
|
||||
var/armor = L.run_armor_check(limb_to_hit, LASER)
|
||||
L.apply_damage(damage, BURN, limb_to_hit, armor)
|
||||
|
||||
/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3)
|
||||
var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time)
|
||||
/atom/proc/Beam(atom/BeamTarget, icon_state="b_beam", icon='icons/effects/beam.dmi', time = 5 SECONDS, maxdistance = 10, beam_type = /obj/effect/ebeam, beam_sleep_time = 3, beam_color)
|
||||
var/datum/beam/newbeam = new(src, BeamTarget, icon, icon_state, time, maxdistance, beam_type, beam_sleep_time, beam_color)
|
||||
INVOKE_ASYNC(newbeam, TYPE_PROC_REF(/datum/beam, Start))
|
||||
return newbeam
|
||||
|
||||
@@ -20,8 +20,7 @@ Updates the spell's actions on use as well, so they know when they can or can't
|
||||
/obj/effect/proc_holder/spell/alien_spell
|
||||
action_background_icon_state = "bg_alien"
|
||||
clothes_req = FALSE
|
||||
/// Extremely fast cooldown, only present so the cooldown system doesn't explode
|
||||
base_cooldown = 1
|
||||
base_cooldown = 0
|
||||
create_attack_logs = FALSE
|
||||
/// Every alien spell creates only logs, no attack messages on someone placing weeds, but you DO get attack messages on neurotoxin and corrosive acid
|
||||
create_custom_logs = TRUE
|
||||
|
||||
@@ -8,14 +8,18 @@
|
||||
return new /datum/spell_targeting/self
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/build_resin/cast(list/targets, mob/living/carbon/user)
|
||||
var/static/list/resin_buildings = list("Resin Wall (55)" = image(icon = 'icons/obj/smooth_structures/alien/resin_wall.dmi', icon_state = "resin_wall-0"),
|
||||
"Resin Nest (55)" = image(icon = 'icons/mob/alien.dmi', icon_state = "nest"),
|
||||
"Resin door (80)" = image(icon = 'icons/obj/smooth_structures/alien/resin_door.dmi', icon_state = "resin"))
|
||||
var/static/list/resin_buildings = list("Resin Wall" = image(icon = 'icons/obj/smooth_structures/alien/resin_wall.dmi', icon_state = "resin_wall-0"),
|
||||
"Resin Nest" = image(icon = 'icons/mob/alien.dmi', icon_state = "nest"),
|
||||
"Resin Door" = image(icon = 'icons/obj/smooth_structures/alien/resin_door.dmi', icon_state = "resin"),
|
||||
"Revival Nest" = image(icon = 'icons/mob/alien.dmi', icon_state = "placeholder_rejuv_nest"))
|
||||
var/choice = show_radial_menu(user, user, resin_buildings, src, radius = 40)
|
||||
var/turf/turf_to_spawn_at = user.loc
|
||||
if(!choice)
|
||||
revert_cast(user)
|
||||
return
|
||||
if(!do_mob(user, user, 3 SECONDS))
|
||||
revert_cast()
|
||||
return
|
||||
if(isspaceturf(turf_to_spawn_at))
|
||||
to_chat(user, "<span class='alertalien'>You cannot build the [choice] while in space!</span>")
|
||||
revert_cast(user)
|
||||
@@ -27,15 +31,52 @@
|
||||
return
|
||||
visible_message("<span class='alertalien'>[user] vomits up a thick purple substance and shapes it!</span>")
|
||||
switch(choice)
|
||||
if("Resin Wall (55)")
|
||||
if("Resin Wall")
|
||||
new /obj/structure/alien/resin/wall(turf_to_spawn_at)
|
||||
if("Resin Nest (55)")
|
||||
if("Resin Nest")
|
||||
new /obj/structure/bed/nest(turf_to_spawn_at)
|
||||
if("Resin door (80)")
|
||||
var/plasma_current = user.get_plasma()
|
||||
if(plasma_current >= 25)
|
||||
new /obj/structure/alien/resin/door(turf_to_spawn_at)
|
||||
user.add_plasma(-25)
|
||||
return
|
||||
to_chat(user, "<span class='danger'>You don't have enough plasma to place a door down.</span>")
|
||||
revert_cast(user)
|
||||
if("Resin Door")
|
||||
new /obj/structure/alien/resin/door(turf_to_spawn_at)
|
||||
if("Revival Nest")
|
||||
new /obj/structure/bed/revival_nest(turf_to_spawn_at)
|
||||
|
||||
/obj/effect/proc_holder/spell/touch/alien_spell/consume_resin
|
||||
name = "Consume resin structures"
|
||||
desc = "Allows you to rip and tear straight through resin structures."
|
||||
action_icon_state = "alien_resin"
|
||||
hand_path = "/obj/item/melee/touch_attack/alien/consume_resin"
|
||||
plasma_cost = 10
|
||||
base_cooldown = 5 SECONDS
|
||||
|
||||
/obj/item/melee/touch_attack/alien/consume_resin
|
||||
name = "Resin consumption"
|
||||
desc = "The hunger..."
|
||||
icon_state = "alien_acid"
|
||||
|
||||
/obj/item/melee/touch_attack/alien/consume_resin/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
if(target == user)
|
||||
to_chat(user, "<span class='noticealien'>You stop trying to consume resin.</span>")
|
||||
..()
|
||||
return
|
||||
if(!proximity || !iscarbon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
|
||||
return
|
||||
if(istype(target, /obj/structure/alien/weeds))
|
||||
qdel(target)
|
||||
if(istype(target, /obj/structure/alien/weeds/node))
|
||||
user.add_plasma(50)
|
||||
user.visible_message("<span class='alertalien'>[user] rips and tears into [target] with their teeth!</span>", "<span class='alertalien'>You viciously rip apart and consume [target]!</span>")
|
||||
return
|
||||
if(!plasma_check(10, user))
|
||||
to_chat(user, "<span class='noticealien'>You don't have enough plasma to perform this action!</span>")
|
||||
return
|
||||
var/static/list/resin_objects = list(/obj/structure/alien/resin, /obj/structure/alien/egg, /obj/structure/bed/nest, /obj/structure/bed/revival_nest)
|
||||
for(var/resin_type in resin_objects)
|
||||
if(!istype(target, resin_type))
|
||||
continue
|
||||
user.visible_message("<span class='alertalien'>[user] rips and tears into [target] with their teeth!</span>")
|
||||
if(!do_after(user, 3 SECONDS, target = target))
|
||||
return
|
||||
to_chat(user, "<span class='alertalien'>You viciously rip apart and consume [target]!</span>")
|
||||
user.add_plasma(-10)
|
||||
qdel(target)
|
||||
..()
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
hand_path = "/obj/item/melee/touch_attack/alien/corrosive_acid"
|
||||
action_icon_state = "alien_acid"
|
||||
plasma_cost = 200
|
||||
base_cooldown = 15 SECONDS
|
||||
|
||||
/obj/item/melee/touch_attack/alien/corrosive_acid
|
||||
name = "Corrosive acid"
|
||||
@@ -30,3 +31,45 @@
|
||||
else
|
||||
to_chat(user, "<span class='noticealien'>You cannot dissolve this object.</span>")
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/touch/alien_spell/burning_touch
|
||||
name = "Blazing touch"
|
||||
desc = "Boil acid within your hand to burn through anything you touch with it, deals a lot of damage to aliens and destroys resin structures instantly."
|
||||
hand_path = "/obj/item/melee/touch_attack/alien/burning_touch"
|
||||
action_icon_state = "alien_acid"
|
||||
plasma_cost = 100
|
||||
base_cooldown = 10 SECONDS
|
||||
|
||||
/obj/item/melee/touch_attack/alien/burning_touch
|
||||
name = "Blazing touch"
|
||||
desc = "The air warps around your hand, somehow the heat doesn't hurt."
|
||||
icon_state = "alien_acid"
|
||||
|
||||
/obj/item/melee/touch_attack/alien/burning_touch/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
if(target == user)
|
||||
to_chat(user, "<span class='noticealien'>You cool down your boiled aid.</span>")
|
||||
..()
|
||||
return
|
||||
if(!proximity || !iscarbon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
|
||||
return
|
||||
if(!plasma_check(100, user))
|
||||
to_chat(user, "<span class='noticealien'>You don't have enough plasma to perform this action!</span>")
|
||||
return
|
||||
if(isliving(target))
|
||||
var/mob/living/guy_to_burn = target
|
||||
add_attack_logs(user, target, "Applied blazing touch") // Want this logged
|
||||
guy_to_burn.adjustFireLoss(60)
|
||||
guy_to_burn.adjust_fire_stacks(3)
|
||||
guy_to_burn.IgniteMob()
|
||||
user.visible_message("<span class='alertalien'>[user] touches [target] and a fireball erupts on contact!</span>")
|
||||
user.add_plasma(-100)
|
||||
..()
|
||||
else
|
||||
var/static/list/resin_objects = list(/obj/structure/alien/resin, /obj/structure/alien/egg, /obj/structure/bed/nest, /obj/structure/bed/revival_nest)
|
||||
for(var/resin_type in resin_objects)
|
||||
if(!istype(target, resin_type))
|
||||
continue
|
||||
user.visible_message("<span class='alertalien'>[user] touches [target] and burns right through it!</span>")
|
||||
user.add_plasma(-100)
|
||||
qdel(target)
|
||||
..()
|
||||
|
||||
@@ -5,3 +5,35 @@
|
||||
weed_type = /obj/structure/alien/egg
|
||||
weed_name = "alien egg"
|
||||
action_icon_state = "alien_egg"
|
||||
requires_do_after = FALSE
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/combust_facehuggers
|
||||
name = "Combust facehuggers and eggs"
|
||||
desc = "Take over the programming of facehuggers and eggs, sending out a shockwave which causes them to combust."
|
||||
plasma_cost = 25
|
||||
action_icon_state = "alien_egg"
|
||||
base_cooldown = 3 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/combust_facehuggers/create_new_targeting()
|
||||
return new /datum/spell_targeting/clicked_atom
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/combust_facehuggers/cast(list/targets, mob/living/carbon/user)
|
||||
var/obj/target = targets[1]
|
||||
var/turf/T = user.loc
|
||||
if(!istype(T) || !istype(target))
|
||||
revert_cast()
|
||||
return FALSE
|
||||
|
||||
if(!istype(target, /obj/item/clothing/mask/facehugger) && !istype(target, /obj/structure/alien/egg))
|
||||
revert_cast()
|
||||
return FALSE
|
||||
|
||||
target.color = "#c72623"
|
||||
addtimer(CALLBACK(src, PROC_REF(blow_it_up), target, user), 3 SECONDS)
|
||||
to_chat(user, "<span class='noticealien'>[target] will explode in 3 seconds!</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/combust_facehuggers/proc/blow_it_up(obj/target, mob/user)
|
||||
add_attack_logs(user, target, "Caused it to explode")
|
||||
explosion(get_turf(target), 0, 2, 3, 3, cause = user)
|
||||
to_chat(user, "<span class='noticealien'>[target] has detonated!</span>")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/effect/proc_holder/spell/alien_spell/neurotoxin
|
||||
name = "Neurotoxin spit"
|
||||
desc = "This ability allows you to fire some neurotoxin. Knocks down anyone you hit, applies a small amount of stamina damage as well."
|
||||
base_cooldown = 5 SECONDS
|
||||
base_cooldown = 3 SECONDS
|
||||
plasma_cost = 50
|
||||
selection_activated_message = "<span class='notice'><B>Your prepare some neurotoxin!</B></span>"
|
||||
selection_deactivated_message = "<span class='notice'><B>You swallow your prepared neurotoxin.</B></span>"
|
||||
@@ -34,3 +34,9 @@
|
||||
user.newtonian_move(get_dir(U, T))
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/neurotoxin/death_to_xenos
|
||||
name = "Neurotoxin spit"
|
||||
desc = "This ability allows you to fire some neurotoxin. Knocks aliens down."
|
||||
neurotoxin_type = /obj/item/projectile/bullet/anti_alien_toxin
|
||||
base_cooldown = 2 SECONDS
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
name = "Plant weeds"
|
||||
desc = "Allows you to plant some alien weeds on the floor below you. Does not work while in space."
|
||||
plasma_cost = 50
|
||||
var/weed_type = /obj/structure/alien/weeds/node
|
||||
var/atom/weed_type = /obj/structure/alien/weeds/node
|
||||
var/weed_name = "alien weed node"
|
||||
action_icon_state = "alien_plant"
|
||||
var/requires_do_after = TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/plant_weeds/create_new_targeting()
|
||||
return new /datum/spell_targeting/self
|
||||
@@ -26,5 +27,10 @@
|
||||
revert_cast()
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>Vines burst from the back of [user], quickly scurring to the ground and swarm onto [user.loc].</span>", "<span class='warning'>You begin infesting [user.loc] with [initial(weed_type.name)].</span>")
|
||||
if(requires_do_after && !do_mob(user, user, 2 SECONDS))
|
||||
revert_cast()
|
||||
return
|
||||
|
||||
user.visible_message("<span class='alertalien'>[user] has planted \a [weed_name]!</span>")
|
||||
new weed_type(T)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/effect/proc_holder/spell/alien_spell/evolve_queen
|
||||
name = "Evolve into an alien queen"
|
||||
desc = "Evolve into an alien queen."
|
||||
plasma_cost = 500
|
||||
plasma_cost = 300
|
||||
action_icon_state = "alien_evolve_drone"
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/evolve_queen/create_new_targeting()
|
||||
@@ -17,8 +17,7 @@
|
||||
// If there is no queen, that means we can evolve
|
||||
to_chat(user, "<span class='noticealien'>You begin to evolve!</span>")
|
||||
user.visible_message("<span class='alertalien'>[user] begins to twist and contort!</span>")
|
||||
var/turf/userloc = user.loc
|
||||
var/mob/living/carbon/alien/humanoid/queen/new_xeno = new(userloc)
|
||||
var/mob/living/carbon/alien/humanoid/queen/new_xeno = new(get_turf(user))
|
||||
user.mind.transfer_to(new_xeno)
|
||||
new_xeno.mind.name = new_xeno.name
|
||||
SSblackbox.record_feedback("tally", "alien_growth", 1, "queen")
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
/obj/effect/proc_holder/spell/alien_spell/regurgitate/cast(list/targets, mob/living/carbon/user)
|
||||
for(var/mob/M in user.stomach_contents)
|
||||
var/turf/output_loc = user.loc
|
||||
if(!istype(output_loc))
|
||||
return
|
||||
user.stomach_contents -= M
|
||||
M.forceMove(output_loc)
|
||||
visible_message("<span class='alertalien'><B>[user] hurls out the contents of [p_their()] stomach!</span>")
|
||||
return
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/obj/effect/proc_holder/spell/alien_spell/tail_lash
|
||||
name = "Tail lash"
|
||||
desc = "Knocks down anyone around you."
|
||||
action_icon_state = "tailsweep"
|
||||
base_cooldown = 10 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/tail_lash/create_new_targeting()
|
||||
return new /datum/spell_targeting/self
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/tail_lash/cast(list/targets, mob/user)
|
||||
var/turf/T = user.loc
|
||||
var/cast_resolved = FALSE
|
||||
if(!istype(T))
|
||||
revert_cast()
|
||||
return
|
||||
for(var/mob/living/to_knock_down in orange(1, user))
|
||||
if(to_knock_down.KnockDown(10 SECONDS))
|
||||
cast_resolved = TRUE
|
||||
to_knock_down.visible_message("<span class='noticealien'>[user] sweeps [to_knock_down] off their feet!</span>")
|
||||
if(!cast_resolved)
|
||||
revert_cast()
|
||||
|
||||
return cast_resolved
|
||||
@@ -1,28 +1,55 @@
|
||||
/obj/effect/proc_holder/spell/touch/alien_spell/transfer_plasma
|
||||
/obj/effect/proc_holder/spell/alien_spell/transfer_plasma
|
||||
name = "Transfer Plasma"
|
||||
desc = "Transfers 50 plasma to a nearby alien"
|
||||
hand_path = "/obj/item/melee/touch_attack/alien/transfer_plasma"
|
||||
action_icon_state = "alien_transfer"
|
||||
plasma_cost = 50
|
||||
|
||||
/obj/item/melee/touch_attack/alien/transfer_plasma
|
||||
name = "plasma transfer"
|
||||
desc = "Transfers 50 plasma to another alien."
|
||||
icon_state = "alien_transfer"
|
||||
/obj/effect/proc_holder/spell/alien_spell/transfer_plasma/create_new_targeting()
|
||||
return new /datum/spell_targeting/clicked_atom
|
||||
|
||||
/obj/item/melee/touch_attack/alien/transfer_plasma/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
if(target == user)
|
||||
to_chat(user, "<span class='noticealien'>You withdraw your readied plasma.</span>")
|
||||
..()
|
||||
/obj/effect/proc_holder/spell/alien_spell/transfer_plasma/cast(list/targets, mob/living/carbon/user)
|
||||
var/mob/living/carbon/alien/target = targets[1]
|
||||
var/turf/T = user.loc
|
||||
if(!istype(T) || !istype(target))
|
||||
revert_cast()
|
||||
return FALSE
|
||||
|
||||
user.Beam(target, icon_state = "sendbeam", time = 2 SECONDS, beam_color = "#f180bd")
|
||||
target.add_plasma(50)
|
||||
to_chat(user, "<span class='noticealien'>You have transfered 50 plasma to [target].</span>")
|
||||
to_chat(target, "<span class='noticealien'>[user] has transfered 50 plasma to you!</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/syphon_plasma
|
||||
name = "Syphon plasma"
|
||||
desc = "Syphons 150 plasma from a nearby alien."
|
||||
action_icon_state = "alien_transfer"
|
||||
plasma_cost = 0
|
||||
base_cooldown = 10 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/syphon_plasma/create_new_targeting()
|
||||
return new /datum/spell_targeting/clicked_atom
|
||||
|
||||
/obj/effect/proc_holder/spell/alien_spell/syphon_plasma/cast(list/targets, mob/living/carbon/user)
|
||||
var/mob/living/carbon/alien/target = targets[1]
|
||||
var/turf/T = user.loc
|
||||
if(!istype(T) || !istype(target))
|
||||
revert_cast()
|
||||
return FALSE
|
||||
|
||||
user.Beam(target, icon_state = "drainbeam", time = 2 SECONDS, beam_color = "#f180bd")
|
||||
var/obj/item/organ/internal/alien/plasmavessel/vessel = target.get_int_organ(/obj/item/organ/internal/alien/plasmavessel)
|
||||
if(!vessel)
|
||||
return
|
||||
if(!proximity || !isalien(target) || !iscarbon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
|
||||
return
|
||||
if(!plasma_check(50, user))
|
||||
to_chat(user, "<span class='noticealien'>You don't have enough plasma to perform this action!</span>")
|
||||
return
|
||||
user.add_plasma(-50)
|
||||
var/mob/living/carbon/transfering_to = target
|
||||
transfering_to.add_plasma(50)
|
||||
to_chat(user, "<span class='noticealien'>You have transfered 50 plasma to [transfering_to].</span>")
|
||||
to_chat(transfering_to, "<span class='noticealien'>[user] has transfered 50 plasma to you!</span>")
|
||||
..()
|
||||
var/plasma_syphoned
|
||||
if(vessel.stored_plasma < 150)
|
||||
user.add_plasma(vessel.stored_plasma)
|
||||
plasma_syphoned = vessel.stored_plasma
|
||||
vessel.stored_plasma = 0
|
||||
else
|
||||
user.add_plasma(150)
|
||||
plasma_syphoned = 50
|
||||
vessel.stored_plasma = vessel.stored_plasma - 150
|
||||
to_chat(user, "<span class='noticealien'>You have syphoned [plasma_syphoned] plasma from [target].</span>")
|
||||
to_chat(target, "<span class='noticealien'>[user] has syphoned [plasma_syphoned] from you!</span>")
|
||||
return TRUE
|
||||
|
||||
Reference in New Issue
Block a user