mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 03:27:05 +01: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:
@@ -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++
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user