mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
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:
@@ -18,6 +18,28 @@
|
||||
var/list/body_standing = list( )
|
||||
var/list/body_lying = list( )
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter
|
||||
name = "alien hunter"
|
||||
|
||||
health = 150
|
||||
toxloss = 50
|
||||
max_plasma = 150
|
||||
icon_state = "alien_s"
|
||||
|
||||
/mob/living/carbon/alien/humanoid/sentinel
|
||||
name = "alien sentinel"
|
||||
|
||||
health = 125
|
||||
toxloss = 100
|
||||
max_plasma = 250
|
||||
icon_state = "alien_s"
|
||||
|
||||
/mob/living/carbon/alien/humanoid/drone
|
||||
name = "alien drone"
|
||||
|
||||
health = 100
|
||||
icon_state = "alien_s"
|
||||
|
||||
/mob/living/carbon/alien/humanoid/queen
|
||||
name = "alien queen"
|
||||
|
||||
|
||||
@@ -849,12 +849,13 @@ var/showadminmessages = 1
|
||||
removed_paths += dirty_path
|
||||
else if (!ispath(path, /obj) && !ispath(path, /turf) && !ispath(path, /mob))
|
||||
removed_paths += dirty_path
|
||||
else if (ispath(path, /obj/item/weapon/gun/energy/pulse_rifle))
|
||||
else if (ispath(path, /obj/item/weapon/gun/energy/pulse_rifle) && !(src.rank in list("Coder", "Host")))
|
||||
removed_paths += dirty_path
|
||||
else if (ispath(path, /obj/bhole) && !(src.rank in list("Coder", "Host")))
|
||||
removed_paths += dirty_path
|
||||
else if (ispath(path, /mob) && !(src.rank in list("Shit Guy", "Coder", "Host")))
|
||||
removed_paths += dirty_path
|
||||
|
||||
else
|
||||
paths += path
|
||||
|
||||
|
||||
@@ -252,9 +252,18 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
|
||||
alert("There are no available spots to spawn the xeno. Aborting command.")
|
||||
return
|
||||
|
||||
var/CASTE = alert(src, "Please choose which caste to spawn.",,"Hunter","Sentinel","Drone")
|
||||
|
||||
var/obj/landmark/spawn_here = pick(xeno_list)
|
||||
var/mob/living/carbon/alien/humanoid/new_xeno = new(spawn_here.loc)
|
||||
new_xeno.plasma = 250
|
||||
|
||||
var/mob/new_xeno
|
||||
switch(CASTE)
|
||||
if("Hunter")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter (spawn_here.loc)
|
||||
if("Sentinel")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (spawn_here.loc)
|
||||
if("Drone")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone (spawn_here.loc)
|
||||
|
||||
var/list/candidates = list() // Picks a random ghost for the role. Mostly a copy of alien burst code. Doesn't spawn the one using the command.
|
||||
for(var/mob/dead/observer/G in world)
|
||||
@@ -264,19 +273,26 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
|
||||
if(candidates.len)
|
||||
var/mob/dead/observer/G = pick(candidates)
|
||||
message_admins("\blue [key_name_admin(usr)] has spawned [G.key] as a filthy xeno.", 1)
|
||||
new_xeno.client = G.client
|
||||
|
||||
new_xeno.mind = new//Mind initialize stuff.
|
||||
new_xeno.mind.current = new_xeno
|
||||
new_xeno.mind.assigned_role = "Alien"
|
||||
new_xeno.mind.special_role = CASTE
|
||||
new_xeno.mind.key = G.key
|
||||
if(G.client)
|
||||
G.client.mob = new_xeno
|
||||
|
||||
del(G)
|
||||
else
|
||||
alert("There are no available ghosts to throw into the xeno. Aborting command.")
|
||||
del(new_xeno)
|
||||
return
|
||||
|
||||
/*Current project. Currently trying to get preferences save to work for characteristics. That and randomized characteristics.
|
||||
Will probably check for admin status at some point or with possible other spawn options other than Assistant.
|
||||
Re-spawning traitors or traitor targets is more tricky.
|
||||
/*
|
||||
If a guy was gibbed and you want to revive him, this is a good way to do so.
|
||||
Works kind of like entering the game with a new character. Character receives a new mind.
|
||||
They spawn as an assistant but there is no announcement. /N */
|
||||
Since gibbed traitors retain their mind through their ghost, I might add some functionality to bring them back.
|
||||
/N */
|
||||
/client/proc/respawn_character()
|
||||
set category = "Special Verbs"
|
||||
set name = "Respawn Character"
|
||||
@@ -284,26 +300,55 @@ They spawn as an assistant but there is no announcement. /N */
|
||||
if(!src.authenticated || !src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/input = input(usr, "Please specify which key/client will be respawned. That person will not retain their traitor/other status when respawned.", "What?", "")
|
||||
var/input = input(src, "Please specify which key will be respawned. Make sure their key is properly capitalized. That person will not retain their traitor/other status when respawned.", "Key", "")
|
||||
if(!input)
|
||||
return
|
||||
var/GKEY = input
|
||||
var/GNAME = "none"
|
||||
var/mob/dead/observer/GDEL //To properly delete the mob later on.
|
||||
var/GNAME //To auto-copy the mob's name.
|
||||
var/GDEL //To properly delete the mob later on.
|
||||
var/GKEY = "null"//To later check if a person was found or not.
|
||||
for(var/mob/dead/observer/G in world)
|
||||
if(G.key==input||GKEY)
|
||||
GDEL = G
|
||||
if(G.client)
|
||||
if(G.key==input)
|
||||
GNAME = G.real_name
|
||||
else
|
||||
alert("There is no such key in the game or the person is not currently a ghost. Aborting command.")
|
||||
GDEL = G
|
||||
GKEY = input
|
||||
goto NEXT//Stops processing once it finds a match.
|
||||
|
||||
NEXT
|
||||
|
||||
if(GKEY == "null")
|
||||
alert("There is no active key like that in the game or the person is not currently a ghost. Aborting command.")
|
||||
return
|
||||
|
||||
var/new_character_gender = MALE //to determine character's gender for few of the other procs.
|
||||
var/mob/living/carbon/human/new_character = new(src)
|
||||
var/new_character_gender = MALE //to determine character's gender for few of the other lines.
|
||||
// if(!preferences.preferences.savefile_load(GDEL, 0))
|
||||
// if(alert("Please specify the character's gender.",,"Male","Female")=="Female")
|
||||
// new_character_gender = FEMALE
|
||||
|
||||
if(alert("Please specify the character's gender.",,"Male","Female")=="Female")
|
||||
new_character_gender = FEMALE
|
||||
// else
|
||||
// GDEL.preferences.preferences.savefile_load()
|
||||
// GDEL.preferences.preferences.copy_to(new_character)
|
||||
|
||||
var/RANK
|
||||
var/list/JOBLIST
|
||||
JOBLIST = list("Virologist","Chief Medical Officer","Research Director","Chief Engineer","Chief Engineer","Cargo Technician","Quartermaster","Lawyer","Librarian","Botanist","Roboticist","Chef","Barman","Atmospheric Technician","Head of Personnel","Head of Security","Scientist","Warden","Security Officer","Captain","Medical Doctor","Detective","Assistant","Station Engineer","Mime","Clown","Janitor","Chemist","Geneticist","Chaplain")
|
||||
|
||||
TRYAGAIN
|
||||
|
||||
var/input2 = input(src, "Please specify which job the character will be respawned as. Start with a capital, such as Assistant or Research Director. Leaving the box as blank will default to Assistant.", "Rank", "")
|
||||
if(!input2)
|
||||
RANK = "Assistant"
|
||||
else
|
||||
if(JOBLIST.Find(input2)==0)
|
||||
src << "That job is not valid. Check your spelling or leave the box as blank."
|
||||
goto TRYAGAIN
|
||||
else
|
||||
RANK = input2
|
||||
|
||||
var/spawn_here = pick(latejoin)//"JoinLate" is a landmark which is deleted on round start. So, latejoin has to be used instead.
|
||||
var/mob/living/carbon/human/new_character = new(src)
|
||||
new_character.gender = new_character_gender
|
||||
|
||||
// var/datum/preferences/preferences
|
||||
@@ -322,16 +367,17 @@ They spawn as an assistant but there is no announcement. /N */
|
||||
new_character.real_name = GNAME
|
||||
message_admins("\blue [key_name_admin(usr)] has respawned [GKEY] as [new_character.name].", 1) //Here so it doesn't null client if an admin re-spawns themselves.
|
||||
new_character.key = GKEY
|
||||
// preferences.copy_to(new_character)
|
||||
// preferences.copy_to(new_character)//Can't copy preferences as they are created on round start. Or loaded.
|
||||
new_character.dna.ready_dna(new_character)
|
||||
// new_character:ManifestLateSpawn()
|
||||
// new_character:ManifestLateSpawn()//That announces the character on all the systems.
|
||||
new_character.mind = new
|
||||
new_character.mind.key = GKEY
|
||||
new_character.mind.current = new_character
|
||||
new_character.mind.assigned_role = "Assistant"
|
||||
new_character.Equip_Rank("Assistant", joined_late=1)
|
||||
new_character.mind.assigned_role = RANK
|
||||
new_character.Equip_Rank(RANK, joined_late=1)
|
||||
del(GDEL)
|
||||
|
||||
|
||||
/client/proc/cmd_admin_add_freeform_ai_law()
|
||||
set category = "Fun"
|
||||
set name = "Add Custom AI law"
|
||||
|
||||
@@ -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.
|
||||
|
||||
69
code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
Normal file
69
code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
Normal file
@@ -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."
|
||||
248
code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
Normal file
248
code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
Normal file
@@ -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
|
||||
206
code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
Normal file
206
code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
Normal file
@@ -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,15 +86,31 @@
|
||||
|
||||
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
|
||||
//grow!! but not if metroid or dead
|
||||
|
||||
@@ -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)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 28 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
11823
maps/tgstation.2.0.0.dmm
11823
maps/tgstation.2.0.0.dmm
File diff suppressed because it is too large
Load Diff
@@ -84,9 +84,11 @@
|
||||
#define FILE_DIR "code/modules/mob/living/carbon"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/alien"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid/caste"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/alien/larva"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/beast"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/human"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/human/Vampire"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/monkey"
|
||||
#define FILE_DIR "code/modules/mob/living/silicon"
|
||||
#define FILE_DIR "code/modules/mob/living/silicon/ai"
|
||||
@@ -610,6 +612,9 @@
|
||||
#include "code\modules\mob\living\carbon\alien\humanoid\life_new.dm"
|
||||
#include "code\modules\mob\living\carbon\alien\humanoid\login.dm"
|
||||
#include "code\modules\mob\living\carbon\alien\humanoid\queen.dm"
|
||||
#include "code\modules\mob\living\carbon\alien\humanoid\caste\drone.dm"
|
||||
#include "code\modules\mob\living\carbon\alien\humanoid\caste\hunter.dm"
|
||||
#include "code\modules\mob\living\carbon\alien\humanoid\caste\sentinel.dm"
|
||||
#include "code\modules\mob\living\carbon\alien\larva\death.dm"
|
||||
#include "code\modules\mob\living\carbon\alien\larva\emote.dm"
|
||||
#include "code\modules\mob\living\carbon\alien\larva\hud.dm"
|
||||
|
||||
Reference in New Issue
Block a user