mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 04:27:35 +01:00
[Ready for code review] Moves alien verbs to spells (#20002)
* Moves alien verbs to spells * lol * Standardization, polish, making alien plasma huds more consistant * The very cursed way of handling touch spells * logging + more polish * snakecase + documentation * finishing touches * oops, ty henri Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * sprites from TGstation * sprites, again * oops * farie's review part 1 * farie's review p2, signals * Erics PR compat * farie's review 3 * that too * the shawnshank redemption * boink * removes larva transfer plasma * you want a sprite cranberry? * TM fix 1 * FUCK I BROKE LOGGING * bam * final touches --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
This commit is contained in:
@@ -40,7 +40,7 @@
|
||||
RETURN_TYPE(/list/obj/item/organ/internal)
|
||||
return list(
|
||||
/obj/item/organ/internal/brain/xeno,
|
||||
/obj/item/organ/internal/xenos/hivenode,
|
||||
/obj/item/organ/internal/alien/hivenode,
|
||||
/obj/item/organ/internal/ears
|
||||
)
|
||||
|
||||
@@ -220,14 +220,19 @@ Des: Removes all infected images from the alien.
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/canBeHandcuffed()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/alien/proc/updatePlasmaDisplay()
|
||||
if(hud_used) //clientless aliens
|
||||
hud_used.alien_plasma_display.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'> <font face='Small Fonts' color='magenta'>[getPlasma()]</font></div>"
|
||||
hud_used.alien_plasma_display.maptext_x = -3
|
||||
/* Although this is on the carbon level, we only want this proc'ing for aliens that do have this hud. Only humanoid aliens do at the moment, so we have a check
|
||||
and carry the owner just to make sure*/
|
||||
/mob/living/carbon/proc/update_plasma_display(mob/owner)
|
||||
for(var/datum/action/spell_action/action in actions)
|
||||
action.UpdateButtonIcon()
|
||||
if(!hud_used || !isalien(owner)) //clientless aliens or non aliens
|
||||
return
|
||||
hud_used.alien_plasma_display.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'> <font face='Small Fonts' color='magenta'>[get_plasma()]</font></div>"
|
||||
hud_used.alien_plasma_display.maptext_x = -3
|
||||
|
||||
/mob/living/carbon/alien/larva/updatePlasmaDisplay()
|
||||
/mob/living/carbon/alien/larva/update_plasma_display()
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/can_use_vents()
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
|
||||
/*Code for aliens attacking aliens. Because aliens act on a hivemind, I don't see them as very aggressive with each other.
|
||||
As such, they can either help or harm other aliens. Help works like the human help command while harm is a simple nibble.
|
||||
In all, this is a lot like the monkey code. /N
|
||||
In all, this is a lot like the monkey code.
|
||||
This code could certainly use with a touch of TLC, but it functions alright. Bit odd aliens attacking other aliens are like, full logged though
|
||||
*/
|
||||
/mob/living/carbon/alien/attack_alien(mob/living/carbon/alien/M)
|
||||
if(isturf(loc) && istype(loc.loc, /area/start))
|
||||
to_chat(M, "No attacking people at spawn, you jackass.")
|
||||
return
|
||||
|
||||
switch(M.a_intent)
|
||||
if(INTENT_HELP)
|
||||
AdjustSleeping(-10 SECONDS)
|
||||
@@ -39,7 +39,7 @@ In all, this is a lot like the monkey code. /N
|
||||
|
||||
/mob/living/carbon/alien/attack_hand(mob/living/carbon/human/M)
|
||||
if(..()) //to allow surgery to return properly.
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
switch(M.a_intent)
|
||||
if(INTENT_HELP)
|
||||
@@ -53,8 +53,8 @@ In all, this is a lot like the monkey code. /N
|
||||
M.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
|
||||
if(INTENT_DISARM)
|
||||
M.do_attack_animation(src, ATTACK_EFFECT_DISARM)
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/alien/attack_animal(mob/living/simple_animal/M)
|
||||
. = ..()
|
||||
@@ -75,9 +75,9 @@ In all, this is a lot like the monkey code. /N
|
||||
adjustStaminaLoss(damage)
|
||||
|
||||
/mob/living/carbon/alien/acid_act(acidpwr, acid_volume)
|
||||
return 0 //aliens are immune to acid.
|
||||
return FALSE //aliens are immune to acid.
|
||||
|
||||
/mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M)
|
||||
/mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M) // This is very RNG based, maybe come back to this later - GDN
|
||||
if(..()) //successful slime attack
|
||||
var/damage = rand(5, 35)
|
||||
if(M.is_adult)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/Toxins_pp = (breath.toxins / breath.total_moles()) * breath_pressure
|
||||
|
||||
if(Toxins_pp > tox_detect_threshold) // Detect toxins in air
|
||||
adjustPlasma(breath.toxins*250)
|
||||
add_plasma(breath.toxins * 250)
|
||||
throw_alert("alien_tox", /obj/screen/alert/alien_tox)
|
||||
|
||||
toxins_used = breath.toxins
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/mob/living/carbon/alien/Login()
|
||||
..()
|
||||
AddInfectionImages()
|
||||
update_plasma_display(src)
|
||||
return
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
/*NOTES:
|
||||
These are general powers. Specific powers are stored under the appropriate alien creature type.
|
||||
*/
|
||||
|
||||
/*Alien spit now works like a taser shot. It won't home in on the target but will act the same once it does hit.
|
||||
Doesn't work on other aliens/AI.*/
|
||||
|
||||
|
||||
/mob/living/carbon/proc/powerc(X, Y)//Y is optional, checks for weed planting. X can be null.
|
||||
if(stat)
|
||||
to_chat(src, "<span class='noticealien'>You must be conscious to do this.</span>")
|
||||
return 0
|
||||
else if(X && getPlasma() < X)
|
||||
to_chat(src, "<span class='noticealien'>Not enough plasma stored.</span>")
|
||||
return 0
|
||||
else if(Y && (!isturf(src.loc) || isspaceturf(src.loc)))
|
||||
to_chat(src, "<span class='noticealien'>You can't place that here!</span>")
|
||||
return 0
|
||||
else return 1
|
||||
|
||||
/mob/living/carbon/alien/humanoid/verb/plant()
|
||||
set name = "Plant Weeds (50)"
|
||||
set desc = "Plants some alien weeds"
|
||||
set category = "Alien"
|
||||
|
||||
if(locate(/obj/structure/alien/weeds/node) in get_turf(src))
|
||||
to_chat(src, "<span class='noticealien'>There's already a weed node here.</span>")
|
||||
return
|
||||
|
||||
if(powerc(50,1))
|
||||
for(var/obj/structure/alien/resin in get_turf(src))
|
||||
to_chat(src, "<span class='danger'>There is already a resin construction here.</span>")
|
||||
return
|
||||
adjustPlasma(-50)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("<span class='alertalien'>[src] has planted some alien weeds!</span>"), 1)
|
||||
for(var/obj/structure/alien/weeds/W in get_turf(src))
|
||||
qdel(W)
|
||||
new /obj/structure/alien/weeds/node(loc)
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/humanoid/verb/whisp(mob/M as mob in oview())
|
||||
set name = "Whisper (10)"
|
||||
set desc = "Whisper to someone"
|
||||
set category = "Alien"
|
||||
|
||||
if(powerc(10))
|
||||
adjustPlasma(-10)
|
||||
var/msg = sanitize(input("Message:", "Alien Whisper") as text|null)
|
||||
if(msg)
|
||||
log_say("(AWHISPER to [key_name(M)]) [msg]", src)
|
||||
to_chat(M, "<span class='noticealien'>You hear a strange, alien voice in your head...<span class='noticealien'>[msg]")
|
||||
to_chat(src, "<span class='noticealien'>You said: [msg] to [M]</span>")
|
||||
for(var/mob/dead/observer/G in GLOB.player_list)
|
||||
G.show_message("<i>Alien message from <b>[src]</b> ([ghost_follow_link(src, ghost=G)]) to <b>[M]</b> ([ghost_follow_link(M, ghost=G)]): [msg]</i>")
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/humanoid/verb/transfer_plasma(mob/living/carbon/alien/M as mob in oview())
|
||||
set name = "Transfer Plasma"
|
||||
set desc = "Transfer Plasma to another alien"
|
||||
set category = "Alien"
|
||||
|
||||
if(isalien(M))
|
||||
var/amount = input("Amount:", "Transfer Plasma to [M]") as num
|
||||
if(amount)
|
||||
amount = abs(round(amount))
|
||||
if(powerc(amount))
|
||||
if(get_dist(src,M) <= 1)
|
||||
M.adjustPlasma(amount)
|
||||
adjustPlasma(-amount)
|
||||
to_chat(M, "<span class='noticealien'>[src] has transfered [amount] plasma to you.</span>")
|
||||
to_chat(src, {"<span class='noticealien'>You have trasferred [amount] plasma to [M]</span>"})
|
||||
else
|
||||
to_chat(src, "<span class='noticealien'>You need to be closer.</span>")
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/proc/corrosive_acid(atom/target) //If they right click to corrode, an error will flash if its an invalid target./N
|
||||
set name = "Corrossive Acid (200)"
|
||||
set desc = "Drench an object in acid, destroying it over time."
|
||||
set category = "Alien"
|
||||
|
||||
if(powerc(200))
|
||||
if(target in oview(1))
|
||||
if(target.acid_act(200, 100))
|
||||
visible_message("<span class='alertalien'>[src] vomits globs of vile stuff all over [target]. It begins to sizzle and melt under the bubbling mess of acid!</span>")
|
||||
adjustPlasma(-200)
|
||||
else
|
||||
to_chat(src, "<span class='noticealien'>You cannot dissolve this object.</span>")
|
||||
else
|
||||
to_chat(src, "<span class='noticealien'>[target] is too far away.</span>")
|
||||
|
||||
/mob/living/carbon/alien/humanoid/proc/neurotoxin() // ok
|
||||
set name = "Spit Neurotoxin (50)"
|
||||
set desc = "Spits neurotoxin at someone, paralyzing them for a short time."
|
||||
set category = "Alien"
|
||||
var/obj/item/organ/internal/xenos/neurotoxin/organ = locate() in internal_organs
|
||||
|
||||
if(powerc(50) && !organ.neurotoxin_cooldown)
|
||||
adjustPlasma(-50)
|
||||
visible_message("<span class='danger'>[src] spits neurotoxin!</span>", "<span class='alertalien'>You spit neurotoxin.</span>")
|
||||
organ.neurotoxin_cooldown = TRUE
|
||||
addtimer(VARSET_CALLBACK(organ, neurotoxin_cooldown, FALSE), organ.neurotoxin_cooldown_time)
|
||||
|
||||
var/turf/T = loc
|
||||
var/turf/U = get_step(src, dir) // Get the tile infront of the move, based on their direction
|
||||
if(!isturf(U) || !isturf(T))
|
||||
return
|
||||
|
||||
var/obj/item/projectile/bullet/neurotoxin/A = new /obj/item/projectile/bullet/neurotoxin(usr.loc)
|
||||
A.current = U
|
||||
A.firer = src
|
||||
A.firer_source_atom = src
|
||||
A.yo = U.y - T.y
|
||||
A.xo = U.x - T.x
|
||||
A.fire()
|
||||
A.newtonian_move(get_dir(U, T))
|
||||
newtonian_move(get_dir(U, T))
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/humanoid/proc/resin() // -- TLE
|
||||
set name = "Secrete Resin"
|
||||
set desc = "Secrete tough malleable resin."
|
||||
set category = "Alien"
|
||||
|
||||
var/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/choice = show_radial_menu(src, src, resin_buildings, src, radius = 40)
|
||||
if(powerc(55, TRUE))
|
||||
var/built = FALSE
|
||||
if(locate(/obj/structure/alien/resin) in get_turf(src))
|
||||
to_chat(src, "<span class='danger'>There is already a resin construction here.</span>")
|
||||
return
|
||||
adjustPlasma(-55)
|
||||
|
||||
switch(choice)
|
||||
if("Resin Wall (55)")
|
||||
new /obj/structure/alien/resin/wall(loc)
|
||||
built = TRUE
|
||||
if("Resin Nest (55)")
|
||||
new /obj/structure/bed/nest(loc)
|
||||
built = TRUE
|
||||
if("Resin Door (80)")
|
||||
if(powerc(25, TRUE))
|
||||
var/obj/structure/alien/resin/door/door = new(loc)
|
||||
door.dir = dir
|
||||
adjustPlasma(-25)
|
||||
built = TRUE
|
||||
else
|
||||
to_chat(src, "<span class='noticealien'>Not enough plasma stored.</span>")
|
||||
adjustPlasma(55)
|
||||
if(built)
|
||||
visible_message("<span class='alertalien'>[src] vomits up a thick purple substance and shapes it!</span>")
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/humanoid/verb/regurgitate()
|
||||
set name = "Regurgitate"
|
||||
set desc = "Empties the contents of your stomach"
|
||||
set category = "Alien"
|
||||
|
||||
if(powerc())
|
||||
if(LAZYLEN(stomach_contents))
|
||||
for(var/mob/M in src)
|
||||
LAZYREMOVE(stomach_contents, M)
|
||||
M.forceMove(drop_location())
|
||||
visible_message("<span class='alertalien'><B>[src] hurls out the contents of [p_their()] stomach!</span>")
|
||||
|
||||
/mob/living/carbon/proc/getPlasma()
|
||||
var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)
|
||||
if(!vessel) return 0
|
||||
return vessel.stored_plasma
|
||||
|
||||
|
||||
/mob/living/carbon/proc/adjustPlasma(amount)
|
||||
var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)
|
||||
if(!vessel) return
|
||||
vessel.stored_plasma = max(vessel.stored_plasma + amount,0)
|
||||
vessel.stored_plasma = min(vessel.stored_plasma, vessel.max_plasma) //upper limit of max_plasma, lower limit of 0
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/alien/adjustPlasma(amount)
|
||||
. = ..()
|
||||
updatePlasmaDisplay()
|
||||
|
||||
/mob/living/carbon/proc/usePlasma(amount)
|
||||
if(getPlasma() >= amount)
|
||||
adjustPlasma(-amount)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
@@ -10,42 +10,17 @@
|
||||
if(src.name == "alien drone")
|
||||
src.name = "alien drone ([rand(1, 1000)])"
|
||||
src.real_name = src.name
|
||||
AddSpell(new /obj/effect/proc_holder/spell/alien_spell/evolve_queen)
|
||||
|
||||
/mob/living/carbon/alien/humanoid/drone/get_caste_organs()
|
||||
. = ..()
|
||||
. += list(
|
||||
/obj/item/organ/internal/xenos/plasmavessel/drone,
|
||||
/obj/item/organ/internal/xenos/acidgland,
|
||||
/obj/item/organ/internal/xenos/resinspinner,
|
||||
/obj/item/organ/internal/alien/plasmavessel/drone,
|
||||
/obj/item/organ/internal/alien/acidgland,
|
||||
/obj/item/organ/internal/alien/resinspinner,
|
||||
)
|
||||
|
||||
|
||||
//Drones use the same base as generic humanoids.
|
||||
//Drone verbs
|
||||
|
||||
/mob/living/carbon/alien/humanoid/drone/verb/evolve() // -- TLE
|
||||
set name = "Evolve (500)"
|
||||
set desc = "Produce an interal egg sac capable of spawning children. Only one queen can exist at a time."
|
||||
set category = "Alien"
|
||||
|
||||
if(powerc(500))
|
||||
// Queen check
|
||||
var/no_queen = TRUE
|
||||
for(var/mob/living/carbon/alien/humanoid/queen/Q in GLOB.alive_mob_list)
|
||||
if(!Q.key && Q.get_int_organ(/obj/item/organ/internal/brain/))
|
||||
continue
|
||||
no_queen = FALSE
|
||||
|
||||
if(no_queen)
|
||||
adjustPlasma(-500)
|
||||
to_chat(src, "<span class='noticealien'>You begin to evolve!</span>")
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("<span class='alertalien'>[src] begins to twist and contort!</span>"), 1)
|
||||
var/mob/living/carbon/alien/humanoid/queen/new_xeno = new(loc)
|
||||
mind.transfer_to(new_xeno)
|
||||
new_xeno.mind.name = new_xeno.name
|
||||
SSblackbox.record_feedback("tally", "alien_growth", 1, "queen")
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(src, "<span class='notice'>We already have an alive queen.</span>")
|
||||
return
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter/get_caste_organs()
|
||||
. = ..()
|
||||
. += /obj/item/organ/internal/xenos/plasmavessel/hunter
|
||||
. += /obj/item/organ/internal/alien/plasmavessel/hunter
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter/handle_environment()
|
||||
if(m_intent == MOVE_INTENT_RUN || IS_HORIZONTAL(src))
|
||||
..()
|
||||
else
|
||||
adjustPlasma(-heal_rate)
|
||||
add_plasma(-heal_rate)
|
||||
|
||||
|
||||
//Hunter verbs
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
/mob/living/carbon/alien/humanoid/sentinel/get_caste_organs()
|
||||
. = ..()
|
||||
. += list(
|
||||
/obj/item/organ/internal/xenos/plasmavessel,
|
||||
/obj/item/organ/internal/xenos/acidgland,
|
||||
/obj/item/organ/internal/xenos/neurotoxin,
|
||||
/obj/item/organ/internal/alien/plasmavessel,
|
||||
/obj/item/organ/internal/alien/acidgland,
|
||||
/obj/item/organ/internal/alien/neurotoxin,
|
||||
)
|
||||
|
||||
@@ -51,25 +51,9 @@
|
||||
/mob/living/carbon/alien/humanoid/empress/get_caste_organs()
|
||||
. = ..()
|
||||
. += list(
|
||||
/obj/item/organ/internal/xenos/plasmavessel/queen,
|
||||
/obj/item/organ/internal/xenos/acidgland,
|
||||
/obj/item/organ/internal/xenos/eggsac,
|
||||
/obj/item/organ/internal/xenos/resinspinner,
|
||||
/obj/item/organ/internal/xenos/neurotoxin,
|
||||
/obj/item/organ/internal/alien/plasmavessel/queen,
|
||||
/obj/item/organ/internal/alien/acidgland,
|
||||
/obj/item/organ/internal/alien/eggsac,
|
||||
/obj/item/organ/internal/alien/resinspinner,
|
||||
/obj/item/organ/internal/alien/neurotoxin,
|
||||
)
|
||||
|
||||
/mob/living/carbon/alien/humanoid/empress/verb/lay_egg()
|
||||
set name = "Lay Egg (250)"
|
||||
set desc = "Lay an egg to produce huggers to impregnate prey with."
|
||||
set category = "Alien"
|
||||
|
||||
if(locate(/obj/structure/alien/egg) in get_turf(src))
|
||||
to_chat(src, "<span class='noticealien'>There's already an egg here.</span>")
|
||||
return
|
||||
|
||||
if(powerc(250,1))//Can't plant eggs on spess tiles. That's silly.
|
||||
adjustPlasma(-250)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("<span class=notice'><B>[src] has laid an egg!</B></span>"), 1)
|
||||
new /obj/structure/alien/egg(loc)
|
||||
return
|
||||
|
||||
@@ -19,13 +19,14 @@
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
//This is fine right now, if we're adding organ specific damage this needs to be updated
|
||||
/mob/living/carbon/alien/humanoid/New()
|
||||
/mob/living/carbon/alien/humanoid/Initialize(mapload)
|
||||
if(name == "alien")
|
||||
name = text("alien ([rand(1, 1000)])")
|
||||
real_name = name
|
||||
add_language("Xenomorph")
|
||||
add_language("Hivemind")
|
||||
..()
|
||||
AddSpell(new /obj/effect/proc_holder/spell/alien_spell/regurgitate)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/footstep, FOOTSTEP_MOB_CLAW, 0.5, -11)
|
||||
|
||||
/mob/living/carbon/alien/humanoid/Process_Spacemove(check_drift = 0)
|
||||
|
||||
@@ -56,6 +56,6 @@
|
||||
visible_message("<span class='danger'>[M] has attempted to disarm [src]!</span>")
|
||||
|
||||
/mob/living/carbon/alien/humanoid/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect)
|
||||
if(!no_effect && !visual_effect_icon)
|
||||
if(!no_effect && !visual_effect_icon && !get_active_hand())
|
||||
visual_effect_icon = ATTACK_EFFECT_CLAW
|
||||
..()
|
||||
|
||||
@@ -12,6 +12,15 @@
|
||||
l_store = null
|
||||
update_inv_pockets()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/put_in_hands(obj/item/I)
|
||||
if(!I)
|
||||
return FALSE
|
||||
if(put_in_active_hand(I))
|
||||
return TRUE
|
||||
if(put_in_inactive_hand(I))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/alien/humanoid/attack_ui(slot_id)
|
||||
var/obj/item/W = get_active_hand()
|
||||
if(W)
|
||||
|
||||
@@ -34,35 +34,17 @@
|
||||
/mob/living/carbon/alien/humanoid/queen/get_caste_organs()
|
||||
. = ..()
|
||||
. += list(
|
||||
/obj/item/organ/internal/xenos/plasmavessel/queen,
|
||||
/obj/item/organ/internal/xenos/acidgland,
|
||||
/obj/item/organ/internal/xenos/eggsac,
|
||||
/obj/item/organ/internal/xenos/resinspinner,
|
||||
/obj/item/organ/internal/xenos/neurotoxin,
|
||||
/obj/item/organ/internal/alien/plasmavessel/queen,
|
||||
/obj/item/organ/internal/alien/acidgland,
|
||||
/obj/item/organ/internal/alien/eggsac,
|
||||
/obj/item/organ/internal/alien/resinspinner,
|
||||
/obj/item/organ/internal/alien/neurotoxin,
|
||||
)
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/queen/can_inject(mob/user, error_msg, target_zone, penetrate_thick)
|
||||
return FALSE
|
||||
|
||||
//Queen verbs
|
||||
/mob/living/carbon/alien/humanoid/queen/verb/lay_egg()
|
||||
|
||||
set name = "Lay Egg (75)"
|
||||
set desc = "Lay an egg to produce huggers to impregnate prey with."
|
||||
set category = "Alien"
|
||||
if(locate(/obj/structure/alien/egg) in get_turf(src))
|
||||
to_chat(src, "<span class='noticealien'>There's already an egg here.</span>")
|
||||
return
|
||||
|
||||
if(powerc(75,1))//Can't plant eggs on spess tiles. That's silly.
|
||||
adjustPlasma(-75)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("<span class='alertalien'>[src] has laid an egg!</span>"), 1)
|
||||
new /obj/structure/alien/egg(loc)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/queen/large
|
||||
icon = 'icons/mob/alienlarge.dmi'
|
||||
icon_state = "queen_s"
|
||||
|
||||
@@ -24,18 +24,18 @@
|
||||
regenerate_icons()
|
||||
add_language("Xenomorph")
|
||||
add_language("Hivemind")
|
||||
AddSpell(new /obj/effect/proc_holder/spell/alien_spell/evolve_larva)
|
||||
|
||||
/mob/living/carbon/alien/larva/get_caste_organs()
|
||||
. = ..()
|
||||
. += /obj/item/organ/internal/xenos/plasmavessel/larva
|
||||
. += /obj/item/organ/internal/alien/plasmavessel/larva
|
||||
|
||||
|
||||
//This needs to be fixed
|
||||
/mob/living/carbon/alien/larva/Stat()
|
||||
..()
|
||||
stat(null, "Progress: [amount_grown]/[max_grown]")
|
||||
|
||||
/mob/living/carbon/alien/larva/adjustPlasma(amount)
|
||||
/mob/living/carbon/alien/larva/add_plasma(amount)
|
||||
if(stat != DEAD && amount > 0)
|
||||
amount_grown = min(amount_grown + 1, max_grown)
|
||||
..(amount)
|
||||
@@ -43,30 +43,24 @@
|
||||
/mob/living/carbon/alien/larva/ex_act(severity)
|
||||
..()
|
||||
|
||||
var/b_loss = null
|
||||
var/f_loss = null
|
||||
var/brute_loss = null
|
||||
var/fire_loss = null
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
gib()
|
||||
return
|
||||
|
||||
if(2.0)
|
||||
|
||||
b_loss += 60
|
||||
|
||||
f_loss += 60
|
||||
|
||||
brute_loss += 60
|
||||
fire_loss += 60
|
||||
AdjustEarDamage(30, 120)
|
||||
|
||||
if(3.0)
|
||||
b_loss += 30
|
||||
brute_loss += 30
|
||||
if(prob(50))
|
||||
Paralyse(2 SECONDS)
|
||||
AdjustEarDamage(15, 60)
|
||||
|
||||
adjustBruteLoss(b_loss)
|
||||
adjustFireLoss(f_loss)
|
||||
|
||||
adjustBruteLoss(brute_loss)
|
||||
adjustFireLoss(fire_loss)
|
||||
updatehealth()
|
||||
|
||||
//can't equip anything
|
||||
@@ -74,7 +68,7 @@
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/larva/restrained()
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/alien/larva/var/temperature_resistance = T0C+75
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/mob/living/carbon/alien/larva/verb/hide()
|
||||
set name = "Hide"
|
||||
set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
|
||||
@@ -14,42 +13,3 @@
|
||||
layer = MOB_LAYER
|
||||
visible_message("[src] slowly peeks up from the ground...", "<span class=notice'>You have stopped hiding.</span>")
|
||||
|
||||
/mob/living/carbon/alien/larva/verb/evolve()
|
||||
set name = "Evolve"
|
||||
set desc = "Evolve into a fully grown Alien."
|
||||
set category = "Alien"
|
||||
|
||||
if(stat != CONSCIOUS)
|
||||
return
|
||||
|
||||
if(handcuffed || legcuffed)
|
||||
to_chat(src, "<span class='warning'>You cannot evolve when you are cuffed.</span>")
|
||||
|
||||
if(amount_grown >= max_grown) //TODO ~Carn
|
||||
//green is impossible to read, so i made these blue and changed the formatting slightly
|
||||
to_chat(src, "<span class='boldnotice'>You are growing into a beautiful alien! It is time to choose a caste.</span>")
|
||||
to_chat(src, "<span class='notice'>There are three to choose from:</span>")
|
||||
to_chat(src, "<B>Hunters</B> <span class='notice'>are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves.</span>")
|
||||
to_chat(src, "<B>Sentinels</B> <span class='notice'>are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters.</span>")
|
||||
to_chat(src, "<B>Drones</B> <span class='notice'>are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen.</span>")
|
||||
var/alien_caste = alert(src, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone")
|
||||
|
||||
var/mob/living/carbon/alien/humanoid/new_xeno
|
||||
switch(alien_caste)
|
||||
if("Hunter")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter(loc)
|
||||
if("Sentinel")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(loc)
|
||||
if("Drone")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone(loc)
|
||||
if(mind)
|
||||
mind.transfer_to(new_xeno)
|
||||
else
|
||||
new_xeno.key = key
|
||||
SSblackbox.record_feedback("tally", "alien_growth", 1, "[lowertext(alien_caste)]")
|
||||
new_xeno.mind.name = new_xeno.name
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You are not fully grown.</span>")
|
||||
return
|
||||
|
||||
@@ -1051,7 +1051,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
|
||||
/mob/living/carbon/Stat()
|
||||
..()
|
||||
if(statpanel("Status"))
|
||||
var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)
|
||||
var/obj/item/organ/internal/alien/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/alien/plasmavessel)
|
||||
if(vessel)
|
||||
stat(null, "Plasma Stored: [vessel.stored_plasma]/[vessel.max_plasma]")
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
if(R.id == "plasma" || R.id == "plasma_dust")
|
||||
H.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
|
||||
H.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
|
||||
H.adjustPlasma(20)
|
||||
H.add_plasma(20)
|
||||
H.reagents.remove_reagent(R.id, REAGENTS_METABOLISM)
|
||||
return FALSE //Handling reagent removal on our own. Prevents plasma from dealing toxin damage to Plasmamen.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user