XCOM alien code by Xerif (Donated by the Foundation project, ss13.org) plus some tweaks of mine added. Of course, I'm going to be enhancing it later.

As it is quite unbalanced and not nearly complete yet, try not to spawn it too much, will you? :33

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2122 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
uporotiy
2011-09-05 04:00:33 +00:00
parent 85c563f00d
commit 713d2b74c5
9 changed files with 272 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
//XCOM alien code
//By Xerif (Donated by the Foundation project, ss13.org)
/mob/living/carbon/alien/humanoid/special
has_fine_manipulation = 1
var/xcom_state
New()
..()
spawn (1)
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
mind = new()
mind.key = key
mind.special_role = "Special Xeno"
name = "[name] ([rand(1, 1000)])"
real_name = name
src.stand_icon = new /icon('xcomalien.dmi', xcom_state)
src.lying_icon = new /icon('xcomalien.dmi', xcom_state)
src.icon = src.stand_icon
remove_special_verbs()
update_clothing()
death(gibbed)
..()
spawn(5)
gib()
Stat()
statpanel("Status")
if (src.client && src.client.holder)
stat(null, "([x], [y], [z])")
stat(null, "Intent: [src.a_intent]")
stat(null, "Move Mode: [src.m_intent]")
if (src.client.statpanel == "Status")
if (src.internal)
if (!src.internal.air_contents)
del(src.internal)
else
stat("Internal Atmosphere Info", src.internal.name)
stat("Tank Pressure", src.internal.air_contents.return_pressure())
stat("Distribution Pressure", src.internal.distribute_pressure)
return
alien_talk()
if(istype(src, /mob/living/carbon/alien/humanoid/special/etheral))
..()
return
if(istype(src, /mob/living/carbon/alien/humanoid/special/sectoid))
..()
return
return
/mob/living/carbon/alien/humanoid/special/proc/xcom_attack()
return
/mob/living/carbon/alien/humanoid/special/proc/remove_special_verbs()
verbs -= /mob/living/carbon/alien/humanoid/verb/plant
verbs -= /mob/living/carbon/alien/humanoid/verb/call_to
verbs -= /mob/living/carbon/alien/humanoid/verb/whisp
verbs -= /mob/living/carbon/alien/humanoid/verb/transfer_plasma
verbs -= /mob/living/carbon/alien/humanoid/verb/corrode
return

View File

@@ -0,0 +1,61 @@
/mob/living/carbon/alien/humanoid/special/chryssalid
name = "Chryssalid"
desc = "The crab-like claws of this creature are a powerful weapon in close combat. The high metabolism and strength of this creature give it speed and dexterity. Instead of killing its victim it impregnates it with an egg and injects a neurotoxin which turns it into a mindless drone. A new Chryssalid will burst from the victim shortly after impregnation. Chryssalids are associated with the Snakeman race. "
xcom_state = "chryssalid"
has_fine_manipulation = 0
New()
..()
var/obj/item/weapon/tank/jetpack/jetpack = new(src)
jetpack.on = !(jetpack.on)
back = jetpack
return
bullet_act(flags)
take_overall_damage(15,0)
return
movement_delay()
return -5
handle_regular_status_updates()
health = 200 - (oxyloss + fireloss + bruteloss)
weakened = 0
stunned = 0
paralysis = 0
if(health < -100 || src.brain_op_stage == 4.0)
death()
else if(src.health < 0)
if(!src.reagents.has_reagent("plasma")) src.oxyloss++
if(src.stat != 2) src.stat = 1
src.paralysis = max(src.paralysis, 5)
if(stat == 2)
lying = 1
src.density = !(src.lying )
return 1
updatehealth()
src.health = 200 - src.oxyloss - src.fireloss - src.bruteloss
xcom_attack(mob/living/carbon/human/target as mob)
if(!ishuman(target))
return
if(target.stat != 2 || !target.client)
target.take_overall_damage(20,0)
target.visible_message(pick(
"\red <b>[src] tears at [target]!</b>",
"\red <b>[src] stabs [target] with it's claws!</b>",
"\red <b>[src] slashes [target] with it's claws!</b>"))
else
if(target.client)
target.client.mob = new/mob/living/carbon/alien/humanoid/special/chryssalid(src.loc)
target.gib()
..()

View File

@@ -0,0 +1,54 @@
/mob/living/carbon/alien/humanoid/special/etheral
name = "Etheral"
desc = "The apparently weak physical abilities of this creature are sustained by its mental powers. We do not understand how these telekinetic powers work, since they seem to defy the laws of physics as we know them. "
xcom_state = "ethereal"
has_fine_manipulation = 0
New()
..()
var/obj/item/weapon/tank/jetpack/jetpack = new(src)
jetpack.on = !(jetpack.on)
back = jetpack
mutations |= 1
spawn(2)
name = "Etheral"
real_name = "Etheral"
return
movement_delay()
return 2
/mob/living/carbon/alien/humanoid/special/etheral/verb/demoralise()
set name = "Psionic Demoralisation"
set desc = "Confuses and disorients all humanoids in a small radius."
set category = "Etheral"
if(stat)
return
visible_message("<b>[src]</b> appears to emit strange throbbing waves.")
for(var/mob/living/carbon/M in view(3, src))
if(M == src)
continue
if(M.confused <= 10)
M.confused = 10
if(M.eye_blurry <= 10)
M.eye_blurry = 10
M.drop_item()
M << "\red <b>SCREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE</b>"
M << "You clutch your head in agony as your vision blurs and you succumb to disorientation."
verbs -= /mob/living/carbon/alien/humanoid/special/etheral/verb/demoralise
spawn(300)
verbs += /mob/living/carbon/alien/humanoid/special/etheral/verb/demoralise
return
/atom/attack_alien(mob/user as mob)
if(istype(user, /mob/living/carbon/alien/humanoid/special/etheral))
attack_ai(user)
return
..()

View File

@@ -0,0 +1,11 @@
/mob/living/carbon/alien/humanoid/special/floater
name = "Floater"
desc = "These aliens are capable or flight through space and shit"
xcom_state = "floater"
New()
..()
var/obj/item/weapon/tank/jetpack/jetpack = new(src)
jetpack.on = !(jetpack.on)
back = jetpack
return

View File

@@ -0,0 +1,4 @@
/mob/living/carbon/alien/humanoid/special/muton
name = "Muton"
desc = "This humanoid creature is physically powerful and intelligent. They have a particular appetite for consuming raw flesh of any kind, which they need for sustenance like earth based carnivores. "
xcom_state = "muton"

View File

@@ -0,0 +1,4 @@
/mob/living/carbon/alien/humanoid/special/sectoid
name = "Sectoid"
desc = "The Sectoid hierarchy ranges from soldiers to leaders with powerful psionic abilities. These psionic powers can be used to demoralise opponents in combat, or even take control of their minds."
xcom_state = "sectoid"

View File

@@ -0,0 +1,59 @@
/mob/living/carbon/alien/humanoid/special/snakeman
name = "Snakeman"
desc = "This race developed in an extremely hostile environment. They are extremely tough and can resist extreme temperature variations. Their mobility depends on a snake-like giant \"foot\" which protects all the vital organs. "
xcom_state = "snake"
movement_delay()
return 4
/mob/living/carbon/alien/humanoid/special/snakeman/verb/lay_egg(mob/living/carbon/human/M as mob)
set name = "Impregnate"
set desc = "Lays an egg on a corpse, allowing the egg to feed."
set category = "Snakeman"
set src = view(0)
if(stat)
return
if(!M)
return
if(!M.client)
src << "This being is missing a brain."
return
visible_message("[src] extends a probiscis and stabs it into [M]")
if (!do_mob(usr, M, 50))
usr << "\red The injection of the egg has been interrupted!"
return
if(M.client)
M.client.mob = new/mob/living/carbon/alien/humanoid/special/snakeman(new/obj/snake_egg(src.loc))
visible_message("[src] injects [M] with an egg.")
visible_message("The egg absorbs [M]")
M.mutations |= HUSK
M.update_body()
M.death()
else
src << "This being is missing a brain."
return
/obj/snake_egg
name = "Egg"
icon = 'alien.dmi'
icon_state = "egg"
density = 1
anchored = 1
New()
..()
spawn(300)
for(var/mob/M in src)
M.loc = src.loc
icon_state = "egg_hatched"
density = 0
return