Divided aliens into castes: drones, hunters, and sentinels. Modified their sprites and abilities to reflect this. Aliens now have a mind variable when not admin-spawned.

Spawning generic alien humanoids is still possible but not recommended.
Alien procs changed to reflect alien castes.
Updated respawn character proc. Should now work right and factor in jobs if specified.
Added Neo's PALADIN core module to AI upload.
Pulse rifles are not spawnable by admins below coder rank.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@770 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
noisomehollow@lycos.com
2011-01-04 07:46:17 +00:00
parent 9d26c0ff56
commit 45d92d09ff
16 changed files with 6587 additions and 6192 deletions
@@ -1,73 +1,9 @@
/*NOTES:
These are being worked on.
These are general powers. Specific powers are stored under the appropriate alien creature type.
*/
/mob/living/carbon/alien/humanoid/verb/invis()
set name = "Invisibility (50)"
set desc = "Makes you invisible for 15 seconds"
set category = "Alien"
if(src.stat)
src << "\green You must be conscious to do this"
return
if(src.toxloss >= 50)
src.toxloss -= 50
src.alien_invis = 1.0
src << "\green You are now invisible."
for(var/mob/O in viewers(src, null))
O.show_message(text("\green <B>[src] fades into the surroundings!</B>"), 1)
spawn(150)
src.alien_invis = 0.0
src << "\green You are no longer invisible."
else
src << "\green Not enough plasma stored"
return
/*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/alien/humanoid/verb/spit(mob/target as mob in oview())
set name = "Spit Neurotoxin (50)"
set desc = "Spits neurotoxin at someone, paralyzing them for a short time."
set category = "Alien"
if(src.stat)
src << "\green You must be conscious to do this."
return
if(istype(target, /mob/living/carbon/alien))
src << "\green Your allies are not a valid target."
return
if(src.toxloss >= 50)
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]!"
src.toxloss -= 50
var/turf/T = usr.loc
var/turf/U = (istype(target, /atom/movable) ? target.loc : target)
if(!U || !T)
return
while(U && !istype(U,/turf))
U = U.loc
if(!istype(T, /turf))
return
if (U == T)
usr.bullet_act(PROJECTILE_DART)
return
if(!istype(U, /turf))
return
var/obj/bullet/neurodart/A = new /obj/bullet/neurodart(usr.loc)
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
A.process()
else
src << "\green Not enough plasma stored."
return
/mob/living/carbon/alien/humanoid/verb/plant()
set name = "Plant Weeds (100)"
@@ -165,116 +101,6 @@ Doesn't work on other aliens/AI.*/
src << "\green You need to be closer."
return
/mob/living/carbon/alien/humanoid/verb/evolve() // -- TLE
set name = "Evolve (500)"
set desc = "Produce an interal egg sac capable of spawning children"
set category = "Alien"
if(src.stat)
src << "\green You must be conscious to do this."
return
if(!src.toxloss)
src << "\green You don't have any plasma."
return
if(src.toxloss >= 500)
src.toxloss -= 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)
var/mob/living/carbon/alien/humanoid/queen/Q = new (src.loc)
Q.key = src.key
del(src)
else
src << "\green Not enough plasma."
/mob/living/carbon/alien/humanoid/verb/resinwall() // -- TLE
set name = "Shape Resin Wall (100)"
set desc = "Produce a wall of resin that blocks entry and line of sight"
set category = "Alien"
if(src.stat)
src << "\green You must be conscious to do this."
return
if(!src.toxloss)
src << "\green You don't have any plasma."
if(src.toxloss >= 100)
src.toxloss -= 100
src << "\green You begin to shape a wall of resin."
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)
//var/obj/alien/resin/R = new(src.loc)
new /obj/alien/resin(src.loc)
else
src << "\green Not enough plasma."
/mob/living/carbon/alien/humanoid/proc/ventcrawl() // -- TLE
set name = "Crawl through Vent"
set desc = "Enter an air vent and appear at a random one"
set category = "Alien"
// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
// return
if(src.stat)
src << "\green You must be conscious to do this."
return
var/vent_found = 0
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
if(!v.welded)
vent_found = v
if(!vent_found)
src << "\green You must be standing on or beside an open air vent to enter it."
return
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
if(temp_vent.loc == src.loc)
continue
if(temp_vent.welded)
continue
vents.Add(temp_vent)
var/list/choices = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents)
if(vent.loc.z != src.loc.z)
continue
if(vent.welded)
continue
var/atom/a = get_turf_loc(vent)
choices.Add(a.loc)
var/turf/startloc = src.loc
var/obj/selection = input("Select a destination.", "Duct System") in choices
var/selection_position = choices.Find(selection)
if(src.loc != startloc)
src << "\green You need to remain still while entering a vent."
return
var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection_position]
if(target_vent)
for(var/mob/O in viewers(src, null))
O.show_message(text("<B>[src] scrambles into the ventillation ducts!</B>"), 1)
var/list/huggers = list()
for(var/obj/alien/facehugger/F in view(3, src))
if(istype(F, /obj/alien/facehugger))
huggers.Add(F)
src.loc = vent_found
for(var/obj/alien/facehugger/F in huggers)
F.loc = vent_found
var/travel_time = get_dist(src.loc, target_vent.loc)
spawn(round(travel_time/2))//give sound warning to anyone near the target vent
if(!target_vent.welded)
for(var/mob/O in hearers(target_vent, null))
O.show_message("You hear something crawling trough the ventilation pipes.")
spawn(travel_time)
if(target_vent.welded)//the vent can be welded while alien scrolled through the list or travelled.
target_vent = vent_found //travel back. No additional time required.
src << "\red The vent you were heading to appears to be welded."
src.loc = target_vent.loc
for(var/obj/alien/facehugger/F in huggers)
F.loc = src.loc
/*Xenos now have a proc and a verb for drenching stuff in acid. I couldn't get them to work right when combined so this was the next best solution.
The first proc defines the acid throw function while the other two work in the game itself. Probably a good idea to revise this later.
@@ -330,4 +156,4 @@ I kind of like the right click only--the window version can get a little confusi
src << "\green Cannot destroy this object."
return
else
O.acid()
O.acid()
@@ -0,0 +1,69 @@
/mob/living/carbon/alien/humanoid/drone/New()
spawn (1)
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
src.verbs -= /mob/living/carbon/alien/humanoid/verb/call_to
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
src.stand_icon = new /icon('alien.dmi', "aliend_s")
src.lying_icon = new /icon('alien.dmi', "aliend_l")
src.icon = src.stand_icon
if(src.name == "alien drone") src.name = text("alien drone ([rand(1, 1000)])")
src.real_name = src.name
src << "\blue Your icons have been generated!"
update_clothing()
//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"
set category = "Alien"
if(src.stat)
src << "\green You must be conscious to do this."
return
if(!src.toxloss)
src << "\green You don't have any plasma."
return
if(src.toxloss >= 500)
src.toxloss -= 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)
var/mob/living/carbon/alien/humanoid/queen/Q = new (src.loc)
Q.mind = new//Mind initialize stuff.
Q.mind.current = Q
Q.mind.assigned_role = "Alien"
Q.mind.special_role = "Queen"
Q.mind.key = src.key
if(src.client)
src.client.mob = Q
del(src)
else
src << "\green Not enough plasma."
/mob/living/carbon/alien/humanoid/drone/verb/resinwall() // -- TLE
set name = "Shape Resin Wall (100)"
set desc = "Produce a wall of resin that blocks entry and line of sight"
set category = "Alien"
if(src.stat)
src << "\green You must be conscious to do this."
return
if(!src.toxloss)
src << "\green You don't have any plasma."
if(src.toxloss >= 100)
src.toxloss -= 100
src << "\green You begin to shape a wall of resin."
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)
//var/obj/alien/resin/R = new(src.loc)
new /obj/alien/resin(src.loc)
else
src << "\green Not enough plasma."
@@ -0,0 +1,248 @@
/mob/living/carbon/alien/humanoid/hunter/New()
spawn (1)
src.verbs -= /mob/living/carbon/alien/humanoid/verb/corrode
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
src.stand_icon = new /icon('alien.dmi', "alienh_s")
src.lying_icon = new /icon('alien.dmi', "alienh_l")
src.icon = src.stand_icon
if(src.name == "alien hunter") src.name = text("alien hunter ([rand(1, 1000)])")
src.real_name = src.name
src << "\blue Your icons have been generated!"
update_clothing()
/mob/living/carbon/alien/humanoid/hunter
updatehealth()
if (src.nodamage == 0)
//oxyloss is only used for suicide
//toxloss isn't used for aliens, its actually used as alien powers!!
src.health = 150 - src.oxyloss - src.fireloss - src.bruteloss
else
src.health = 150
src.stat = 0
handle_regular_hud_updates()
if (src.stat == 2 || src.mutations & 4)
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
src.see_invisible = 2
else if (src.stat != 2)
src.sight |= SEE_MOBS
src.sight |= SEE_TURFS
src.sight &= ~SEE_OBJS
src.see_in_dark = 5
src.see_invisible = 2
if (src.sleep) src.sleep.icon_state = text("sleep[]", src.sleeping)
if (src.rest) src.rest.icon_state = text("rest[]", src.resting)
if (src.healths)
if (src.stat != 2)
switch(health)
if(150 to INFINITY)
src.healths.icon_state = "health0"
if(100 to 150)
src.healths.icon_state = "health1"
if(50 to 100)
src.healths.icon_state = "health2"
if(25 to 50)
src.healths.icon_state = "health3"
if(0 to 25)
src.healths.icon_state = "health4"
else
src.healths.icon_state = "health5"
else
src.healths.icon_state = "health6"
handle_environment()
//If there are alien weeds on the ground then heal if needed or give some toxins
if(locate(/obj/alien/weeds) in loc)
if(health >= 150)
toxloss += 5
if(toxloss > max_plasma)
toxloss = max_plasma
else
bruteloss -= 5
fireloss -= 5
handle_regular_status_updates()
health = 150 - (oxyloss + fireloss + bruteloss)
if(oxyloss > 50) paralysis = max(paralysis, 3)
if(src.sleeping)
src.paralysis = max(src.paralysis, 3)
if (prob(10) && health) spawn(0) emote("snore")
src.sleeping--
if(src.resting)
src.weakened = max(src.weakened, 5)
if(health < -100 || src.brain_op_stage == 4.0)
death()
else if(src.health < 0)
if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!src.rejuv) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
if(src.stat != 2) src.stat = 1
src.paralysis = max(src.paralysis, 5)
if (src.stat != 2) //Alive.
if (src.paralysis || src.stunned || src.weakened) //Stunned etc.
if (src.stunned > 0)
src.stunned--
src.stat = 0
if (src.weakened > 0)
src.weakened--
src.lying = 1
src.stat = 0
if (src.paralysis > 0)
src.paralysis--
src.blinded = 1
src.lying = 1
src.stat = 1
var/h = src.hand
src.hand = 0
drop_item()
src.hand = 1
drop_item()
src.hand = h
else //Not stunned.
src.lying = 0
src.stat = 0
else //Dead.
src.lying = 1
src.blinded = 1
src.stat = 2
if (src.stuttering) src.stuttering--
if (src.eye_blind)
src.eye_blind--
src.blinded = 1
if (src.ear_deaf > 0) src.ear_deaf--
if (src.ear_damage < 25)
src.ear_damage -= 0.05
src.ear_damage = max(src.ear_damage, 0)
src.density = !( src.lying )
if ((src.sdisabilities & 1))
src.blinded = 1
if ((src.sdisabilities & 4))
src.ear_deaf = 1
if (src.eye_blurry > 0)
src.eye_blurry--
src.eye_blurry = max(0, src.eye_blurry)
if (src.druggy > 0)
src.druggy--
src.druggy = max(0, src.druggy)
return 1
//Hunter verbs
/mob/living/carbon/alien/humanoid/hunter/verb/invis()
set name = "Invisibility (50)"
set desc = "Makes you invisible for 15 seconds"
set category = "Alien"
if(src.stat)
src << "\green You must be conscious to do this"
return
if(src.toxloss >= 50)
src.toxloss -= 50
src.alien_invis = 1.0
src << "\green You are now invisible."
for(var/mob/O in viewers(src, null))
O.show_message(text("\green <B>[src] fades into the surroundings!</B>"), 1)
spawn(150)
src.alien_invis = 0.0
src << "\green You are no longer invisible."
else
src << "\green Not enough plasma stored"
return
/mob/living/carbon/alien/humanoid/hunter/verb/ventcrawl() // -- TLE
set name = "Crawl through Vent"
set desc = "Enter an air vent and appear at a random one"
set category = "Alien"
// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
// return
if(src.stat)
src << "\green You must be conscious to do this."
return
var/vent_found = 0
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
if(!v.welded)
vent_found = v
if(!vent_found)
src << "\green You must be standing on or beside an open air vent to enter it."
return
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
if(temp_vent.loc == src.loc)
continue
if(temp_vent.welded)
continue
vents.Add(temp_vent)
var/list/choices = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents)
if(vent.loc.z != src.loc.z)
continue
if(vent.welded)
continue
var/atom/a = get_turf_loc(vent)
choices.Add(a.loc)
var/turf/startloc = src.loc
var/obj/selection = input("Select a destination.", "Duct System") in choices
var/selection_position = choices.Find(selection)
if(src.loc != startloc)
src << "\green You need to remain still while entering a vent."
return
var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection_position]
if(target_vent)
for(var/mob/O in viewers(src, null))
O.show_message(text("<B>[src] scrambles into the ventillation ducts!</B>"), 1)
var/list/huggers = list()
for(var/obj/alien/facehugger/F in view(3, src))
if(istype(F, /obj/alien/facehugger))
huggers.Add(F)
src.loc = vent_found
for(var/obj/alien/facehugger/F in huggers)
F.loc = vent_found
var/travel_time = get_dist(src.loc, target_vent.loc)
spawn(round(travel_time/2))//give sound warning to anyone near the target vent
if(!target_vent.welded)
for(var/mob/O in hearers(target_vent, null))
O.show_message("You hear something crawling trough the ventilation pipes.")
spawn(travel_time)
if(target_vent.welded)//the vent can be welded while alien scrolled through the list or travelled.
target_vent = vent_found //travel back. No additional time required.
src << "\red The vent you were heading to appears to be welded."
src.loc = target_vent.loc
for(var/obj/alien/facehugger/F in huggers)
F.loc = src.loc
@@ -0,0 +1,206 @@
/mob/living/carbon/alien/humanoid/sentinel/New()
spawn (1)
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
src.stand_icon = new /icon('alien.dmi', "aliens_s")
src.lying_icon = new /icon('alien.dmi', "aliens_l")
src.icon = src.stand_icon
if(src.name == "alien sentinel") src.name = text("alien sentinel ([rand(1, 1000)])")
src.real_name = src.name
src << "\blue Your icons have been generated!"
update_clothing()
/mob/living/carbon/alien/humanoid/sentinel
updatehealth()
if (src.nodamage == 0)
//oxyloss is only used for suicide
//toxloss isn't used for aliens, its actually used as alien powers!!
src.health = 125 - src.oxyloss - src.fireloss - src.bruteloss
else
src.health = 125
src.stat = 0
handle_regular_hud_updates()
if (src.stat == 2 || src.mutations & 4)
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
src.see_invisible = 2
else if (src.stat != 2)
src.sight |= SEE_MOBS
src.sight &= SEE_TURFS
src.sight &= ~SEE_OBJS
src.see_in_dark = 7
src.see_invisible = 3
if (src.sleep) src.sleep.icon_state = text("sleep[]", src.sleeping)
if (src.rest) src.rest.icon_state = text("rest[]", src.resting)
if (src.healths)
if (src.stat != 2)
switch(health)
if(125 to INFINITY)
src.healths.icon_state = "health0"
if(100 to 125)
src.healths.icon_state = "health1"
if(75 to 100)
src.healths.icon_state = "health2"
if(25 to 75)
src.healths.icon_state = "health3"
if(0 to 25)
src.healths.icon_state = "health4"
else
src.healths.icon_state = "health5"
else
src.healths.icon_state = "health6"
handle_environment()
//If there are alien weeds on the ground then heal if needed or give some toxins
if(locate(/obj/alien/weeds) in loc)
if(health >= 125)
toxloss += 10
if(toxloss > max_plasma)
toxloss = max_plasma
else
bruteloss -= 10
fireloss -= 10
handle_regular_status_updates()
health = 150 - (oxyloss + fireloss + bruteloss)
if(oxyloss > 50) paralysis = max(paralysis, 3)
if(src.sleeping)
src.paralysis = max(src.paralysis, 3)
if (prob(10) && health) spawn(0) emote("snore")
src.sleeping--
if(src.resting)
src.weakened = max(src.weakened, 5)
if(health < -100 || src.brain_op_stage == 4.0)
death()
else if(src.health < 0)
if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!src.rejuv) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
if(src.stat != 2) src.stat = 1
src.paralysis = max(src.paralysis, 5)
if (src.stat != 2) //Alive.
if (src.paralysis || src.stunned || src.weakened) //Stunned etc.
if (src.stunned > 0)
src.stunned--
src.stat = 0
if (src.weakened > 0)
src.weakened--
src.lying = 1
src.stat = 0
if (src.paralysis > 0)
src.paralysis--
src.blinded = 1
src.lying = 1
src.stat = 1
var/h = src.hand
src.hand = 0
drop_item()
src.hand = 1
drop_item()
src.hand = h
else //Not stunned.
src.lying = 0
src.stat = 0
else //Dead.
src.lying = 1
src.blinded = 1
src.stat = 2
if (src.stuttering) src.stuttering--
if (src.eye_blind)
src.eye_blind--
src.blinded = 1
if (src.ear_deaf > 0) src.ear_deaf--
if (src.ear_damage < 25)
src.ear_damage -= 0.05
src.ear_damage = max(src.ear_damage, 0)
src.density = !( src.lying )
if ((src.sdisabilities & 1))
src.blinded = 1
if ((src.sdisabilities & 4))
src.ear_deaf = 1
if (src.eye_blurry > 0)
src.eye_blurry--
src.eye_blurry = max(0, src.eye_blurry)
if (src.druggy > 0)
src.druggy--
src.druggy = max(0, src.druggy)
return 1
//Sentinel verbs
/mob/living/carbon/alien/humanoid/sentinel/verb/spit(mob/target as mob in oview())
set name = "Spit Neurotoxin (50)"
set desc = "Spits neurotoxin at someone, paralyzing them for a short time."
set category = "Alien"
if(src.stat)
src << "\green You must be conscious to do this."
return
if(istype(target, /mob/living/carbon/alien))
src << "\green Your allies are not a valid target."
return
if(src.toxloss >= 50)
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]!"
src.toxloss -= 50
var/turf/T = usr.loc
var/turf/U = (istype(target, /atom/movable) ? target.loc : target)
if(!U || !T)
return
while(U && !istype(U,/turf))
U = U.loc
if(!istype(T, /turf))
return
if (U == T)
usr.bullet_act(PROJECTILE_DART)
return
if(!istype(U, /turf))
return
var/obj/bullet/neurodart/A = new /obj/bullet/neurodart(usr.loc)
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
A.process()
else
src << "\green Not enough plasma stored."
return
@@ -1,64 +1,6 @@
/*
Maybe you could combine elements from the Blob mode into a new Alien mode since Blob rarely seems to get much
play these days, is hard as fuck to actually win, and gets more use as a random event these days.
The main Alien's objective is to corrupt, infest, whatever you want to call it to a certain % of the station.
Give it an ability which, every so often allows it to drop a bunch of slime which infests floors and walls. The
main alien would be poor at actually killing anyone, but very difficult to bring down - maybe it is immune to
brute and toxic damage, and fire kills it but takes a long exposure time to do so. Suffocation/exposure would
be the only reliable way to off it.
Like the Wizard, the Alien can select from a few abilities, though they center around building things in the
slime rather than being straight up attacks or spells. For instance, it might be able to build tunnels which
take it instantly from one slime patch to another, or pods which huff poison gas at anyone that gets too close.
It can only build in areas it slimed, and the abilities have long cooldowns. The structures can also be destroyed
by anyone determined enough.
Anyone who stays in the slime for too long will end up becoming a mutant which serves the main alien. This would
give the alien an incentive to try and incapacitate or find incapacitated people to drag back into its
territory to gain more slaves. The mutants are basically just monkeys - crippled with only a few equipment
slots, but share some of the alien's durability.
To get rid of the slime, you can weld it, taze/laser it, set it on fire, blow it up or get the janitor
to clean it up, or just beat the shit out of it (which takes ages).
[11:32] <&Rick> nah dont let it wear clothing
[11:32] <&Rick> but have alien items that replace suit functions
[11:32] <&Rick> like an item that lets them walk around in space with no penalty
[11:32] <&Nannek> yeah cool
[11:33] <&Nannek> thinking making it breathe plasma or would that make the aliens life too hard
[11:33] <&Rick> hmm
[11:33] <&Rick> maybe breathing plasma benefit it
[11:33] <&Rick> but not required
[11:33] <&Nannek> yeah makes them stronger/faster or something
[11:33] <&Rick> like have stamina or something that recharges when the alien is breathing plasma
[11:33] <&Nannek> which in turn lets it uses special alien abilities
[11:34] <&Rick> if theres something the alien should be able to wear
[11:34] <&Rick> is a full human skin body suit
[11:34] <&Nannek> oh
[11:34] <&Rick> make it so you can skin dead people
[11:34] <&Nannek> that could be fun
[11:34] <&Rick> 8)
[11:34] <&Rick> but no clothing even if wearing a human suit
[11:34] <&Nannek> then they can pretend to be the human for a limited time before the suit rips apart
[11:35] <&Rick> yeah
[11:35] <&Nannek> thinking not letting aliens understand humans and vice versa
[11:35] <&Rick> that would be hilarious
[11:35] <&Rick> have a universal translator item
[11:35] <&Rick> so if the alien loses it
[11:35] <&Rick> they lose being able to communicate
[11:35] <&Nannek> kk
This is all very silly and I will probably remove it in the future. /N
*/
//This is fine right now, if we're adding organ specific damage this needs to be updated
/mob/living/carbon/alien/humanoid/New()
spawn (1)
src.verbs += /mob/living/carbon/alien/humanoid/proc/ventcrawl // Give only normal aliens ventcrawling -- TLE
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target //So aliens propely get two acid verbs. /N
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
@@ -113,6 +55,10 @@ This is all very silly and I will probably remove it in the future. /N
var/tally = 0
if (istype(src, /mob/living/carbon/alien/humanoid/queen))
tally += 5
if (istype(src, /mob/living/carbon/alien/humanoid/drone))
tally += 2
if (istype(src, /mob/living/carbon/alien/humanoid/sentinel))
tally += 1
return tally
//This needs to be fixed
@@ -275,13 +275,13 @@
//If there are alien weeds on the ground then heal if needed or give some toxins
if(locate(/obj/alien/weeds) in loc)
if(health >= 100)
toxloss += 5
toxloss += 15
if(toxloss > max_plasma)
toxloss = max_plasma
else
bruteloss -= 5
fireloss -= 5
bruteloss -= 15
fireloss -= 15
@@ -1,6 +1,7 @@
/mob/living/carbon/alien/humanoid/queen/New()
spawn (1)
src.verbs -= /mob/living/carbon/alien/humanoid/proc/ventcrawl // Queens lose the ability to ventcrawl -- TLE
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
src.verbs += /mob/living/carbon/alien/humanoid/sentinel/verb/spit
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
@@ -159,15 +160,6 @@
return 1
//Queen verbs
/mob/living/carbon/alien/humanoid/queen/verb/lay_egg()
@@ -86,17 +86,33 @@
handle_mutations_and_radiation()
if(src.amount_grown >= 200)
src << "\green You are growing into a beautiful alien!"
var/mob/living/carbon/alien/humanoid/H = new /mob/living/carbon/alien/humanoid( src.loc )
H.toxloss = src.toxloss
if(src.amount_grown == 200)
src << "\green You are growing into a beautiful alien! It is time to choose a caste."
src << "\green There are three to choose from:"
src << "\green <B>Hunters</B> 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."
src << "\green <B>Sentinels</B> 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."
src << "\green <B>Drones</B> 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."
var/CASTE = alert(src, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone")
var/mob/H
switch(CASTE)
if("Hunter")
H = new /mob/living/carbon/alien/humanoid/hunter (src.loc)
if("Sentinel")
H = new /mob/living/carbon/alien/humanoid/sentinel (src.loc)
if("Drone")
H = new /mob/living/carbon/alien/humanoid/drone (src.loc)
H.mind = new//Mind initialize stuff.
H.mind.current = src
H.mind.assigned_role = "Alien"
H.mind.special_role = CASTE
H.mind.key = src.key
if(src.client)
src.client.mob = H
spawn(10)
del(src)
return
del(src)
return
//grow!! but not if metroid or dead
if(!istype(src,/mob/living/carbon/alien/larva/metroid) && src.health>-100)
src.amount_grown++
+20 -3
View File
@@ -231,14 +231,31 @@
// flick("h2alien", animation)
// sleep(48)
// del(animation)
var/mob/living/carbon/alien/humanoid/O = new /mob/living/carbon/alien/humanoid( src.loc )
O.name = "alien"
var/CASTE = pick("Hunter","Sentinel","Drone")
var/mob/O
switch(CASTE)
if("Hunter")
O = new /mob/living/carbon/alien/humanoid/hunter (src.loc)
if("Sentinel")
O = new /mob/living/carbon/alien/humanoid/sentinel (src.loc)
if("Drone")
O = new /mob/living/carbon/alien/humanoid/drone (src.loc)
O.dna = src.dna
src.dna = null
O.dna.uni_identity = "00600200A00E0110148FC01300B009"
O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8"
if (src.client)
O.mind = new//Mind initialize stuff.
O.mind.current = O
O.mind.assigned_role = "Alien"
O.mind.special_role = CASTE
O.mind.key = src.key
if(src.client)
src.client.mob = O
O.loc = src.loc
O << "<B>You are now an alien.</B>"
del(src)