mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-23 20:16:19 +01:00
@@ -96,8 +96,8 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
..()
|
||||
if(stat == CONSCIOUS)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
Attach(hit_atom)
|
||||
throwing = 0
|
||||
GoIdle(30,100) //stunned for a few seconds - allows throwing them to be useful for positioning but not as an offensive action (unless you're setting up a trap)
|
||||
|
||||
/obj/item/clothing/mask/facehugger/proc/Attach(M as mob)
|
||||
|
||||
@@ -124,12 +124,14 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
L.visible_message("\red \b [src] leaps at [L]'s face!")
|
||||
|
||||
/* Tentatively removed since huggers can't be thrown anymore
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.head && H.head.flags & HEADCOVERSMOUTH)
|
||||
H.visible_message("\red \b [src] smashes against [H]'s [H.head]!")
|
||||
Die()
|
||||
return
|
||||
*/
|
||||
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/target = L
|
||||
@@ -191,7 +193,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
return
|
||||
|
||||
/obj/item/clothing/mask/facehugger/proc/GoIdle()
|
||||
/obj/item/clothing/mask/facehugger/proc/GoIdle(var/min_time=MIN_ACTIVE_TIME, var/max_time=MAX_ACTIVE_TIME)
|
||||
if(stat == DEAD || stat == UNCONSCIOUS)
|
||||
return
|
||||
|
||||
@@ -200,7 +202,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
stat = UNCONSCIOUS
|
||||
icon_state = "[initial(icon_state)]_inactive"
|
||||
|
||||
spawn(rand(MIN_ACTIVE_TIME,MAX_ACTIVE_TIME))
|
||||
spawn(rand(min_time,max_time))
|
||||
GoActive()
|
||||
return
|
||||
|
||||
|
||||
@@ -59,12 +59,12 @@
|
||||
set category = "Abilities"
|
||||
|
||||
if (get_dist(src,M) <= 1)
|
||||
src << "\green You need to be closer."
|
||||
src << "<span class='alium'>You need to be closer.</span>"
|
||||
return
|
||||
|
||||
var/datum/organ/internal/xenos/plasmavessel/I = M.internal_organs_by_name["plasma vessel"]
|
||||
if(!istype(I))
|
||||
src << "\green Their plasma vessel is missing."
|
||||
src << "<span class='alium'>Their plasma vessel is missing.</span>"
|
||||
return
|
||||
|
||||
var/amount = input("Amount:", "Transfer Plasma to [M]") as num
|
||||
@@ -72,8 +72,8 @@
|
||||
amount = abs(round(amount))
|
||||
if(check_alien_ability(amount,0,"plasma vessel"))
|
||||
M.gain_plasma(amount)
|
||||
M << "\green [src] has transfered [amount] plasma to you."
|
||||
src << "\green You have transferred [amount] plasma to [M]"
|
||||
M << "<span class='alium'>[src] has transfered [amount] plasma to you.</span>"
|
||||
src << "<span class='alium'>You have transferred [amount] plasma to [M].</span>"
|
||||
return
|
||||
|
||||
// Queen verbs.
|
||||
@@ -93,8 +93,7 @@
|
||||
return
|
||||
|
||||
if(check_alien_ability(75,1,"egg sac"))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\green <B>[src] has laid an egg!</B>"), 1)
|
||||
visible_message("<span class='alium'><B>[src] has laid an egg!</B></span>")
|
||||
new /obj/effect/alien/egg(loc)
|
||||
|
||||
return
|
||||
@@ -110,9 +109,7 @@
|
||||
return
|
||||
|
||||
if(check_alien_ability(500))
|
||||
src << "\green You begin to evolve!"
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\green <B>[src] begins to twist and contort!</B>"), 1)
|
||||
visible_message("<span class='alium'><B>[src] begins to twist and contort!</B></span>", "<span class='alium'>You begin to evolve!</span>")
|
||||
src.set_species("Xenomorph Queen")
|
||||
|
||||
return
|
||||
@@ -123,8 +120,7 @@
|
||||
set category = "Abilities"
|
||||
|
||||
if(check_alien_ability(50,1,"resin spinner"))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\green <B>[src] has planted some alien weeds!</B>"), 1)
|
||||
visible_message("<span class='alium'><B>[src] has planted some alien weeds!</B></span>")
|
||||
new /obj/effect/alien/weeds/node(loc)
|
||||
return
|
||||
|
||||
@@ -134,14 +130,14 @@
|
||||
set category = "Abilities"
|
||||
|
||||
if(!O in oview(1))
|
||||
src << "\green [O] is too far away."
|
||||
src << "<span class='alium'>[O] is too far away.</span>"
|
||||
return
|
||||
|
||||
// OBJ CHECK
|
||||
if(isobj(O))
|
||||
var/obj/I = O
|
||||
if(I.unacidable) //So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid.
|
||||
src << "\green You cannot dissolve this object."
|
||||
src << "<span class='alium'>You cannot dissolve this object.</span>"
|
||||
return
|
||||
|
||||
// TURF CHECK
|
||||
@@ -149,18 +145,18 @@
|
||||
var/turf/T = O
|
||||
// R WALL
|
||||
if(istype(T, /turf/simulated/wall/r_wall))
|
||||
src << "\green You cannot dissolve this object."
|
||||
src << "<span class='alium'>You cannot dissolve this object.</span>"
|
||||
return
|
||||
// R FLOOR
|
||||
if(istype(T, /turf/simulated/floor/engine))
|
||||
src << "\green You cannot dissolve this object."
|
||||
src << "<span class='alium'>You cannot dissolve this object.</span>"
|
||||
return
|
||||
else// Not a type we can acid.
|
||||
return
|
||||
|
||||
if(check_alien_ability(200,0,"acid gland"))
|
||||
new /obj/effect/alien/acid(get_turf(O), O)
|
||||
visible_message("\green <B>[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!</B>")
|
||||
visible_message("<span class='alium'><B>[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!</B></span>")
|
||||
|
||||
return
|
||||
|
||||
@@ -176,11 +172,7 @@
|
||||
src << "You cannot spit neurotoxin in your current state."
|
||||
return
|
||||
|
||||
src << "\green You spit neurotoxin at [target]."
|
||||
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !(O.blinded )))
|
||||
O << "\red [src] spits neurotoxin at [target]!"
|
||||
visible_message("<span class='warning'>[src] spits neurotoxin at [target]!</span>", "<span class='alium'>You spit neurotoxin at [target].</span>")
|
||||
|
||||
//I'm not motivated enough to revise this. Prjectile code in general needs update.
|
||||
// Maybe change this to use throw_at? ~ Z
|
||||
@@ -218,9 +210,7 @@
|
||||
if(!check_alien_ability(75,1,"resin spinner"))
|
||||
return
|
||||
|
||||
src << "\green You shape a [choice]."
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[src] vomits up a thick purple substance and begins to shape it!</B>"), 1)
|
||||
visible_message("<span class='warning'><B>[src] vomits up a thick purple substance and begins to shape it!</B></span>", "<span class='alium'>You shape a [choice].</span>")
|
||||
switch(choice)
|
||||
if("resin door")
|
||||
new /obj/structure/mineral_door/resin(loc)
|
||||
|
||||
@@ -86,17 +86,46 @@
|
||||
if(!environment) return
|
||||
|
||||
if(environment.gas["phoron"] > 0 || locate(/obj/effect/alien/weeds) in T)
|
||||
if(H.health >= H.maxHealth - H.getCloneLoss())
|
||||
if(!regenerate(H))
|
||||
var/datum/organ/internal/xenos/plasmavessel/P = H.internal_organs_by_name["plasma vessel"]
|
||||
P.stored_plasma += weeds_plasma_rate
|
||||
P.stored_plasma = min(max(P.stored_plasma,0),P.max_plasma)
|
||||
else
|
||||
H.adjustBruteLoss(-weeds_heal_rate)
|
||||
H.adjustFireLoss(-weeds_heal_rate)
|
||||
H.adjustOxyLoss(-weeds_heal_rate)
|
||||
H.adjustToxLoss(-weeds_heal_rate)
|
||||
..()
|
||||
|
||||
/datum/species/xenos/proc/regenerate(var/mob/living/carbon/human/H)
|
||||
var/heal_rate = weeds_heal_rate
|
||||
var/mend_prob = 10
|
||||
if (!H.resting)
|
||||
heal_rate = weeds_heal_rate / 3
|
||||
mend_prob = 1
|
||||
|
||||
//first heal damages
|
||||
if (H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss())
|
||||
H.adjustBruteLoss(-heal_rate)
|
||||
H.adjustFireLoss(-heal_rate)
|
||||
H.adjustOxyLoss(-heal_rate)
|
||||
H.adjustToxLoss(-heal_rate)
|
||||
if (prob(5))
|
||||
H << "<span class='alium'>You feel a soothing sensation come over you...</span>"
|
||||
return 1
|
||||
|
||||
//next internal organs
|
||||
for(var/datum/organ/internal/I in H.internal_organs)
|
||||
if(I.damage > 0)
|
||||
I.damage = max(I.damage - heal_rate, 0)
|
||||
if (prob(5))
|
||||
H << "<span class='alium'>You feel a soothing sensation within your [I.parent_organ]...</span>"
|
||||
return 1
|
||||
|
||||
//next mend broken bones, approx 10 ticks each
|
||||
for(var/datum/organ/external/E in H.bad_external_organs)
|
||||
if (E.status & ORGAN_BROKEN)
|
||||
if (prob(mend_prob))
|
||||
if (E.mend_fracture())
|
||||
H << "<span class='alium'>You feel something mend itself inside your [E.display_name].</span>"
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/datum/species/xenos/handle_login_special(var/mob/living/carbon/human/H)
|
||||
H.AddInfectionImages()
|
||||
@@ -110,7 +139,7 @@
|
||||
name = "Xenomorph Drone"
|
||||
caste_name = "drone"
|
||||
weeds_plasma_rate = 15
|
||||
slowdown = 2
|
||||
slowdown = 1
|
||||
tail = "xenos_drone_tail"
|
||||
rarity_value = 5
|
||||
|
||||
@@ -149,7 +178,7 @@
|
||||
name = "Xenomorph Hunter"
|
||||
weeds_plasma_rate = 5
|
||||
caste_name = "hunter"
|
||||
slowdown = -1
|
||||
slowdown = -2
|
||||
total_health = 150
|
||||
tail = "xenos_hunter_tail"
|
||||
|
||||
@@ -177,7 +206,7 @@
|
||||
name = "Xenomorph Sentinel"
|
||||
weeds_plasma_rate = 10
|
||||
caste_name = "sentinel"
|
||||
slowdown = 1
|
||||
slowdown = 0
|
||||
total_health = 125
|
||||
tail = "xenos_sentinel_tail"
|
||||
|
||||
@@ -209,7 +238,7 @@
|
||||
weeds_heal_rate = 5
|
||||
weeds_plasma_rate = 20
|
||||
caste_name = "queen"
|
||||
slowdown = 5
|
||||
slowdown = 4
|
||||
tail = "xenos_queen_tail"
|
||||
rarity_value = 10
|
||||
|
||||
|
||||
Reference in New Issue
Block a user