mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
#Fixed Chaplain hoodie sprite.
#Respawn_character() now properly respawns aliens and monkeys if specified to do so. #Added more options in admin quick panel (for players) to get, send, check if traitor, narrate, and subtle message mob. #Admins can now click an X by admin name, in asay, to jump to that admin. Makes things easier. #Moved admin transform verbs into fun tab. #Removed boom boom shake the room since not even hosts are allowed to use it. #Pierrot's throat now has a 35% chance of being cured by eating bananas. Up from 5. #Fixed AI cards. #ed209 and Beepsky now properly figure in deafness when speaking. Doesn't affect voice files. #Fixed Syndicate PDA not triggering door. #Aliens can no longer magically crawl to the prison station and back. #Aliens can now quickly (5 seconds) break out of cuffs by resisting. No change to buckled. #Facehuggers will now properly set the alien_egg_flag if the target was infected or not. Curing the alien egg should also reset the flag. I think it will be best to get rid of the flag entirely in the future. #Added isalienadult(mob) proc to check for humanoid aliens. #Probably fixed death squad spawning. They pick by key now, instead of mob name. #Spawning xenos now uses the client match method so you can specify who you want to respawn if wanted. #Ninjas now tell admins what their set mission is. If given objectives by admin, it should report them at round end for certain rounds. #Spawning ninjas now uses the same method as respawn character (typing in key/ckey). #Added a ninjify admnin verb. Possible to right click. #Can now resize spiderOS window. #Misc fixes and adjustments. Minor map change to CentCom holding facility. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1685 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -129,7 +129,7 @@ I kind of like the right click only--the window version can get a little confusi
|
||||
// return
|
||||
|
||||
if(powerc())
|
||||
var/vent_found = 0
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/vent_found
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
|
||||
if(!v.welded)
|
||||
vent_found = v
|
||||
@@ -137,52 +137,56 @@ I kind of like the right click only--the window version can get a little confusi
|
||||
src << "\red That vent is welded."
|
||||
if(vent_found)
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
|
||||
if(temp_vent.loc == 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 != loc.z)
|
||||
continue
|
||||
if(vent.welded)
|
||||
continue
|
||||
var/atom/a = get_turf_loc(vent)
|
||||
choices.Add(a.loc)
|
||||
var/turf/startloc = loc
|
||||
var/obj/selection = input("Select a destination.", "Duct System") in choices
|
||||
var/selection_position = choices.Find(selection)
|
||||
if(loc==startloc)
|
||||
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)
|
||||
loc = vent_found
|
||||
if(vent_found.network&&vent_found.network.normal_members.len)
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members)
|
||||
if(temp_vent.loc == 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 != loc.z)
|
||||
continue
|
||||
if(vent.welded)
|
||||
continue
|
||||
var/atom/a = get_turf_loc(vent)
|
||||
choices.Add(a.loc)
|
||||
var/turf/startloc = loc
|
||||
var/obj/selection = input("Select a destination.", "Duct System") in choices
|
||||
var/selection_position = choices.Find(selection)
|
||||
if(loc==startloc)
|
||||
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)
|
||||
loc = vent_found
|
||||
|
||||
for(var/obj/alien/facehugger/F in huggers)
|
||||
F.loc = vent_found
|
||||
var/travel_time = get_dist(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."
|
||||
loc = target_vent.loc
|
||||
for(var/obj/alien/facehugger/F in huggers)
|
||||
F.loc = loc
|
||||
F.loc = vent_found
|
||||
var/travel_time = get_dist(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.",2)
|
||||
|
||||
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."
|
||||
loc = target_vent.loc
|
||||
for(var/obj/alien/facehugger/F in huggers)
|
||||
F.loc = loc
|
||||
|
||||
else
|
||||
src << "\green You need to remain still while entering a vent."
|
||||
else
|
||||
src << "\green You need to remain still while entering a vent."
|
||||
src << "\green This vent is not connected to anything."
|
||||
else
|
||||
src << "\green You must be standing on or beside an open air vent to enter it."
|
||||
return
|
||||
@@ -27,16 +27,10 @@
|
||||
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 (loc)
|
||||
var/mob/living/carbon/alien/humanoid/queen/new_xeno = new (loc)
|
||||
|
||||
Q.mind = new//Mind initialize stuff.
|
||||
Q.mind.current = Q
|
||||
Q.mind.assigned_role = "Alien"
|
||||
Q.mind.special_role = "Queen"
|
||||
Q.mind.key = key
|
||||
|
||||
if(client)
|
||||
client.mob = Q
|
||||
new_xeno.mind_initialize(src, "Queen")
|
||||
new_xeno.key = key
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
//This is fine right now, if we're adding organ specific damage this needs to be updated
|
||||
/mob/living/carbon/alien/humanoid/New()
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
@@ -16,6 +15,12 @@
|
||||
src << "\blue Your icons have been generated!"
|
||||
..()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/proc/mind_initialize(mob/G, alien_caste)
|
||||
mind = new
|
||||
mind.current = src
|
||||
mind.assigned_role = "Alien"
|
||||
mind.special_role = alien_caste
|
||||
mind.key = G.key
|
||||
|
||||
//This is fine, works the same as a human
|
||||
/mob/living/carbon/alien/humanoid/Bump(atom/movable/AM as mob|obj, yes)
|
||||
@@ -240,11 +245,6 @@
|
||||
if (wear_suit)
|
||||
if (emptyHand)
|
||||
wear_suit.DblClick()
|
||||
return
|
||||
if (( istype(W, /obj/alien/skin_suit) ))
|
||||
u_equip(W)
|
||||
head = W
|
||||
return
|
||||
return
|
||||
/* if (!( istype(W, /obj/item/clothing/suit) ))
|
||||
return
|
||||
|
||||
@@ -12,6 +12,12 @@
|
||||
// spawn(1200) grow() Grow after 120 seconds -- TLE Commented out because life.dm has better version -- Urist
|
||||
..()
|
||||
|
||||
/mob/living/carbon/alien/larva/proc/mind_initialize(mob/G, alien_caste)
|
||||
mind = new
|
||||
mind.current = src
|
||||
mind.assigned_role = "Alien"
|
||||
mind.special_role = alien_caste
|
||||
mind.key = G.key
|
||||
|
||||
//This is fine, works the same as a human
|
||||
/mob/living/carbon/alien/larva/Bump(atom/movable/AM as mob|obj, yes)
|
||||
|
||||
@@ -11,10 +11,10 @@
|
||||
set invisibility = 0
|
||||
set background = 1
|
||||
|
||||
if (src.monkeyizing)
|
||||
if (monkeyizing)
|
||||
return
|
||||
|
||||
if (src.stat != 2) //still breathing
|
||||
if (stat != 2) //still breathing
|
||||
|
||||
//First, resolve location and get a breath
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
//blinded get reset each cycle and then get activated later in the
|
||||
//code. Very ugly. I dont care. Moving this stuff here so its easy
|
||||
//to find it.
|
||||
src.blinded = null
|
||||
blinded = null
|
||||
|
||||
//Disease Check
|
||||
handle_virus_updates()
|
||||
@@ -86,83 +86,78 @@
|
||||
|
||||
handle_mutations_and_radiation()
|
||||
|
||||
if(src.amount_grown == 200)
|
||||
if(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/alien_caste = alert(src, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone")
|
||||
|
||||
var/mob/H
|
||||
switch(CASTE)
|
||||
var/mob/living/carbon/alien/humanoid/new_xeno
|
||||
switch(alien_caste)
|
||||
if("Hunter")
|
||||
H = new /mob/living/carbon/alien/humanoid/hunter (src.loc)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter (loc)
|
||||
if("Sentinel")
|
||||
H = new /mob/living/carbon/alien/humanoid/sentinel (src.loc)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (loc)
|
||||
if("Drone")
|
||||
H = new /mob/living/carbon/alien/humanoid/drone (src.loc)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone (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
|
||||
new_xeno.mind_initialize(src, alien_caste)
|
||||
new_xeno.key = key
|
||||
|
||||
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++
|
||||
if(!istype(src,/mob/living/carbon/alien/larva/metroid) && health>-100)
|
||||
amount_grown++
|
||||
|
||||
if (src.radiation)
|
||||
if (src.radiation > 100)
|
||||
src.radiation = 100
|
||||
src.weakened = 10
|
||||
if (radiation)
|
||||
if (radiation > 100)
|
||||
radiation = 100
|
||||
weakened = 10
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
|
||||
if (src.radiation < 0)
|
||||
src.radiation = 0
|
||||
if (radiation < 0)
|
||||
radiation = 0
|
||||
|
||||
switch(src.radiation)
|
||||
switch(radiation)
|
||||
if(1 to 49)
|
||||
src.radiation--
|
||||
radiation--
|
||||
if(prob(25))
|
||||
src.toxloss++
|
||||
src.updatehealth()
|
||||
toxloss++
|
||||
updatehealth()
|
||||
|
||||
if(50 to 74)
|
||||
src.radiation -= 2
|
||||
src.toxloss++
|
||||
radiation -= 2
|
||||
toxloss++
|
||||
if(prob(5))
|
||||
src.radiation -= 5
|
||||
src.weakened = 3
|
||||
radiation -= 5
|
||||
weakened = 3
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
src.updatehealth()
|
||||
updatehealth()
|
||||
|
||||
if(75 to 100)
|
||||
src.radiation -= 3
|
||||
src.toxloss += 3
|
||||
src.updatehealth()
|
||||
radiation -= 3
|
||||
toxloss += 3
|
||||
updatehealth()
|
||||
|
||||
|
||||
breathe()
|
||||
|
||||
if(src.reagents.has_reagent("lexorin")) return
|
||||
if(reagents.has_reagent("lexorin")) return
|
||||
if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/datum/air_group/breath
|
||||
// HACK NEED CHANGING LATER
|
||||
if(src.health < 0)
|
||||
src.losebreath++
|
||||
if(health < 0)
|
||||
losebreath++
|
||||
|
||||
if(losebreath>0) //Suffocating so do not take a breath
|
||||
src.losebreath--
|
||||
losebreath--
|
||||
if (prob(75)) //High chance of gasping for air
|
||||
spawn emote("gasp")
|
||||
if(istype(loc, /obj/))
|
||||
@@ -201,17 +196,17 @@
|
||||
|
||||
get_breath_from_internal(volume_needed)
|
||||
if(internal)
|
||||
if (!contents.Find(src.internal))
|
||||
if (!contents.Find(internal))
|
||||
internal = null
|
||||
if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) )
|
||||
internal = null
|
||||
if(internal)
|
||||
if (src.internals)
|
||||
src.internals.icon_state = "internal1"
|
||||
if (internals)
|
||||
internals.icon_state = "internal1"
|
||||
return internal.remove_air_volume(volume_needed)
|
||||
else
|
||||
if (src.internals)
|
||||
src.internals.icon_state = "internal0"
|
||||
if (internals)
|
||||
internals.icon_state = "internal0"
|
||||
return null
|
||||
|
||||
update_canmove()
|
||||
@@ -219,7 +214,7 @@
|
||||
else canmove = 1
|
||||
|
||||
handle_breath(datum/gas_mixture/breath)
|
||||
if(src.nodamage)
|
||||
if(nodamage)
|
||||
return
|
||||
|
||||
if(!breath || (breath.total_moles() == 0))
|
||||
@@ -246,7 +241,7 @@
|
||||
breath.toxins -= toxins_used
|
||||
breath.oxygen += toxins_used
|
||||
|
||||
if(breath.temperature > (T0C+66) && !(src.mutations & COLD_RESISTANCE)) // Hot air hurts :(
|
||||
if(breath.temperature > (T0C+66) && !(mutations & COLD_RESISTANCE)) // Hot air hurts :(
|
||||
if(prob(20))
|
||||
src << "\red You feel a searing heat in your lungs!"
|
||||
fire_alert = max(fire_alert, 1)
|
||||
@@ -274,25 +269,25 @@
|
||||
|
||||
if(reagents) reagents.metabolize(src)
|
||||
|
||||
if(src.nutrition > 500 && !(src.mutations & FAT))
|
||||
if(prob(5 + round((src.nutrition - 200) / 2)))
|
||||
if(nutrition > 500 && !(mutations & FAT))
|
||||
if(prob(5 + round((nutrition - 200) / 2)))
|
||||
src << "\red You suddenly feel blubbery!"
|
||||
src.mutations |= FAT
|
||||
mutations |= FAT
|
||||
// update_body()
|
||||
if (src.nutrition < 100 && src.mutations & FAT)
|
||||
if(prob(round((50 - src.nutrition) / 100)))
|
||||
if (nutrition < 100 && mutations & FAT)
|
||||
if(prob(round((50 - nutrition) / 100)))
|
||||
src << "\blue You feel fit again!"
|
||||
src.mutations &= ~FAT
|
||||
mutations &= ~FAT
|
||||
// update_body()
|
||||
if (src.nutrition > 0)
|
||||
src.nutrition-= HUNGER_FACTOR
|
||||
if (nutrition > 0)
|
||||
nutrition-= HUNGER_FACTOR
|
||||
|
||||
if (src.drowsyness)
|
||||
src.drowsyness--
|
||||
src.eye_blurry = max(2, src.eye_blurry)
|
||||
if (drowsyness)
|
||||
drowsyness--
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
if (prob(5))
|
||||
src.sleeping = 1
|
||||
src.paralysis = 5
|
||||
sleeping = 1
|
||||
paralysis = 5
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
// decrement dizziness counter, clamped to 0
|
||||
@@ -303,7 +298,7 @@
|
||||
dizziness = max(0, dizziness - 1)
|
||||
jitteriness = max(0, jitteriness - 1)
|
||||
|
||||
src.updatehealth()
|
||||
updatehealth()
|
||||
|
||||
return //TODO: DEFERRED
|
||||
|
||||
@@ -313,153 +308,153 @@
|
||||
|
||||
if(oxyloss > 50) paralysis = max(paralysis, 3)
|
||||
|
||||
if(src.sleeping)
|
||||
src.paralysis = max(src.paralysis, 3)
|
||||
if(sleeping)
|
||||
paralysis = max(paralysis, 3)
|
||||
if (prob(10) && health) spawn(0) emote("snore")
|
||||
src.sleeping--
|
||||
sleeping--
|
||||
|
||||
if(src.resting)
|
||||
src.weakened = max(src.weakened, 5)
|
||||
if(resting)
|
||||
weakened = max(weakened, 5)
|
||||
|
||||
if(health < -100 || src.brain_op_stage == 4.0)
|
||||
if(health < -100 || brain_op_stage == 4.0)
|
||||
death()
|
||||
else if(src.health < 0)
|
||||
if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
|
||||
else if(health < 0)
|
||||
if(health <= 20 && prob(1)) spawn(0) emote("gasp")
|
||||
|
||||
//if(!src.rejuv) src.oxyloss++
|
||||
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
|
||||
//if(!rejuv) oxyloss++
|
||||
if(!reagents.has_reagent("inaprovaline")) oxyloss++
|
||||
|
||||
if(src.stat != 2) src.stat = 1
|
||||
src.paralysis = max(src.paralysis, 5)
|
||||
if(stat != 2) stat = 1
|
||||
paralysis = max(paralysis, 5)
|
||||
|
||||
if (src.stat != 2) //Alive.
|
||||
if (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
|
||||
if (paralysis || stunned || weakened) //Stunned etc.
|
||||
if (stunned > 0)
|
||||
stunned--
|
||||
stat = 0
|
||||
if (weakened > 0)
|
||||
weakened--
|
||||
lying = 1
|
||||
stat = 0
|
||||
if (paralysis > 0)
|
||||
paralysis--
|
||||
blinded = 1
|
||||
lying = 1
|
||||
stat = 1
|
||||
var/h = hand
|
||||
hand = 0
|
||||
drop_item()
|
||||
src.hand = 1
|
||||
hand = 1
|
||||
drop_item()
|
||||
src.hand = h
|
||||
hand = h
|
||||
|
||||
else //Not stunned.
|
||||
src.lying = 0
|
||||
src.stat = 0
|
||||
lying = 0
|
||||
stat = 0
|
||||
|
||||
else //Dead.
|
||||
src.lying = 1
|
||||
src.blinded = 1
|
||||
src.stat = 2
|
||||
lying = 1
|
||||
blinded = 1
|
||||
stat = 2
|
||||
|
||||
if (src.stuttering) src.stuttering--
|
||||
if (stuttering) stuttering--
|
||||
|
||||
if (src.eye_blind)
|
||||
src.eye_blind--
|
||||
src.blinded = 1
|
||||
if (eye_blind)
|
||||
eye_blind--
|
||||
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)
|
||||
if (ear_deaf > 0) ear_deaf--
|
||||
if (ear_damage < 25)
|
||||
ear_damage -= 0.05
|
||||
ear_damage = max(ear_damage, 0)
|
||||
|
||||
src.density = !( src.lying )
|
||||
density = !( lying )
|
||||
|
||||
if ((src.sdisabilities & 1))
|
||||
src.blinded = 1
|
||||
if ((src.sdisabilities & 4))
|
||||
src.ear_deaf = 1
|
||||
if ((sdisabilities & 1))
|
||||
blinded = 1
|
||||
if ((sdisabilities & 4))
|
||||
ear_deaf = 1
|
||||
|
||||
if (src.eye_blurry > 0)
|
||||
src.eye_blurry--
|
||||
src.eye_blurry = max(0, src.eye_blurry)
|
||||
if (eye_blurry > 0)
|
||||
eye_blurry--
|
||||
eye_blurry = max(0, eye_blurry)
|
||||
|
||||
if (src.druggy > 0)
|
||||
src.druggy--
|
||||
src.druggy = max(0, src.druggy)
|
||||
if (druggy > 0)
|
||||
druggy--
|
||||
druggy = max(0, druggy)
|
||||
|
||||
return 1
|
||||
|
||||
handle_regular_hud_updates()
|
||||
|
||||
if (src.stat == 2 || src.mutations & XRAY)
|
||||
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 = 4
|
||||
src.see_invisible = 2
|
||||
if (stat == 2 || mutations & XRAY)
|
||||
sight |= SEE_TURFS
|
||||
sight |= SEE_MOBS
|
||||
sight |= SEE_OBJS
|
||||
see_in_dark = 8
|
||||
see_invisible = 2
|
||||
else if (stat != 2)
|
||||
sight |= SEE_MOBS
|
||||
sight &= ~SEE_TURFS
|
||||
sight &= ~SEE_OBJS
|
||||
see_in_dark = 4
|
||||
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 (sleep) sleep.icon_state = text("sleep[]", sleeping)
|
||||
if (rest) rest.icon_state = text("rest[]", resting)
|
||||
|
||||
if (src.healths)
|
||||
if (src.stat != 2)
|
||||
if (healths)
|
||||
if (stat != 2)
|
||||
switch(health)
|
||||
if(25 to INFINITY)
|
||||
src.healths.icon_state = "health0"
|
||||
healths.icon_state = "health0"
|
||||
if(19 to 25)
|
||||
src.healths.icon_state = "health1"
|
||||
healths.icon_state = "health1"
|
||||
if(13 to 19)
|
||||
src.healths.icon_state = "health2"
|
||||
healths.icon_state = "health2"
|
||||
if(7 to 13)
|
||||
src.healths.icon_state = "health3"
|
||||
healths.icon_state = "health3"
|
||||
if(0 to 7)
|
||||
src.healths.icon_state = "health4"
|
||||
healths.icon_state = "health4"
|
||||
else
|
||||
src.healths.icon_state = "health5"
|
||||
healths.icon_state = "health5"
|
||||
else
|
||||
src.healths.icon_state = "health6"
|
||||
healths.icon_state = "health6"
|
||||
|
||||
if(src.pullin) src.pullin.icon_state = "pull[src.pulling ? 1 : 0]"
|
||||
if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]"
|
||||
|
||||
|
||||
if (src.toxin) src.toxin.icon_state = "tox[src.toxins_alert ? 1 : 0]"
|
||||
if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]"
|
||||
if (src.fire) src.fire.icon_state = "fire[src.fire_alert ? 1 : 0]"
|
||||
if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
|
||||
if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
|
||||
if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]"
|
||||
//NOTE: the alerts dont reset when youre out of danger. dont blame me,
|
||||
//blame the person who coded them. Temporary fix added.
|
||||
|
||||
|
||||
src.client.screen -= src.hud_used.blurry
|
||||
src.client.screen -= src.hud_used.druggy
|
||||
src.client.screen -= src.hud_used.vimpaired
|
||||
client.screen -= hud_used.blurry
|
||||
client.screen -= hud_used.druggy
|
||||
client.screen -= hud_used.vimpaired
|
||||
|
||||
if ((src.blind && src.stat != 2))
|
||||
if ((src.blinded))
|
||||
src.blind.layer = 18
|
||||
if ((blind && stat != 2))
|
||||
if ((blinded))
|
||||
blind.layer = 18
|
||||
else
|
||||
src.blind.layer = 0
|
||||
blind.layer = 0
|
||||
|
||||
if (src.disabilities & 1)
|
||||
src.client.screen += src.hud_used.vimpaired
|
||||
if (disabilities & 1)
|
||||
client.screen += hud_used.vimpaired
|
||||
|
||||
if (src.eye_blurry)
|
||||
src.client.screen += src.hud_used.blurry
|
||||
if (eye_blurry)
|
||||
client.screen += hud_used.blurry
|
||||
|
||||
if (src.druggy)
|
||||
src.client.screen += src.hud_used.druggy
|
||||
if (druggy)
|
||||
client.screen += hud_used.druggy
|
||||
|
||||
if (src.stat != 2)
|
||||
if (src.machine)
|
||||
if (!( src.machine.check_eye(src) ))
|
||||
src.reset_view(null)
|
||||
if (stat != 2)
|
||||
if (machine)
|
||||
if (!( machine.check_eye(src) ))
|
||||
reset_view(null)
|
||||
else
|
||||
if(!client.adminobs)
|
||||
reset_view(null)
|
||||
@@ -470,18 +465,18 @@
|
||||
return
|
||||
|
||||
handle_virus_updates()
|
||||
if(src.bodytemperature > 406 && src.virus)
|
||||
src.virus.cure()
|
||||
if(bodytemperature > 406 && virus)
|
||||
virus.cure()
|
||||
return
|
||||
|
||||
check_if_buckled()
|
||||
if (src.buckled)
|
||||
src.lying = (istype(src.buckled, /obj/stool/bed) ? 1 : 0)
|
||||
if(src.lying)
|
||||
src.drop_item()
|
||||
src.density = 1
|
||||
if (buckled)
|
||||
lying = (istype(buckled, /obj/stool/bed) ? 1 : 0)
|
||||
if(lying)
|
||||
drop_item()
|
||||
density = 1
|
||||
else
|
||||
src.density = !src.lying
|
||||
density = !lying
|
||||
|
||||
handle_stomach()
|
||||
spawn(0)
|
||||
@@ -489,7 +484,7 @@
|
||||
if(M.loc != src)
|
||||
stomach_contents.Remove(M)
|
||||
continue
|
||||
if(istype(M, /mob/living/carbon) && src.stat != 2)
|
||||
if(istype(M, /mob/living/carbon) && stat != 2)
|
||||
if(M.stat == 2)
|
||||
M.death(1)
|
||||
stomach_contents.Remove(M)
|
||||
@@ -498,4 +493,4 @@
|
||||
if(air_master.current_cycle%3==1)
|
||||
if(!M.nodamage)
|
||||
M.bruteloss += 5
|
||||
src.nutrition += 10
|
||||
nutrition += 10
|
||||
|
||||
@@ -6,36 +6,39 @@
|
||||
// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
|
||||
// return
|
||||
if(powerc())
|
||||
var/vent_found = 0
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/vent_found
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
|
||||
if(!v.welded)
|
||||
vent_found = v
|
||||
else
|
||||
src << "\red That vent is welded."
|
||||
if(vent_found)
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
|
||||
if(temp_vent.loc == loc)
|
||||
continue
|
||||
vents.Add(temp_vent)
|
||||
var/list/choices = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents)
|
||||
if(vent.loc.z != loc.z)
|
||||
continue
|
||||
var/atom/a = get_turf_loc(vent)
|
||||
choices.Add(a.loc)
|
||||
var/turf/startloc = loc
|
||||
var/obj/selection = input("Select a destination.", "Duct System") in choices
|
||||
var/selection_position = choices.Find(selection)
|
||||
if(loc==startloc)
|
||||
var/obj/target_vent = vents[selection_position]
|
||||
if(target_vent)
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("<B>[] scrambles into the ventillation ducts!</B>", src)
|
||||
loc = target_vent.loc
|
||||
if(vent_found.network&&vent_found.network.normal_members.len)
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members)
|
||||
if(temp_vent.loc == loc)
|
||||
continue
|
||||
vents.Add(temp_vent)
|
||||
var/list/choices = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents)
|
||||
if(vent.loc.z != loc.z)
|
||||
continue
|
||||
var/atom/a = get_turf_loc(vent)
|
||||
choices.Add(a.loc)
|
||||
var/turf/startloc = loc
|
||||
var/obj/selection = input("Select a destination.", "Duct System") in choices
|
||||
var/selection_position = choices.Find(selection)
|
||||
if(loc==startloc)
|
||||
var/obj/target_vent = vents[selection_position]
|
||||
if(target_vent)
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("<B>[src] scrambles into the ventillation ducts!</B>"), 1)
|
||||
loc = target_vent.loc
|
||||
else
|
||||
src << "\green You need to remain still while entering a vent."
|
||||
else
|
||||
src << "\green You need to remain still while entering a vent."
|
||||
src << "\green This vent is not connected to anything."
|
||||
else
|
||||
src << "\green You must be standing on or beside an air vent to enter it."
|
||||
return
|
||||
|
||||
+34
-14
@@ -42,6 +42,11 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/isalienadult(A)
|
||||
if(istype(A, /mob/living/carbon/alien/humanoid))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/islarva(A)
|
||||
if(istype(A, /mob/living/carbon/alien/larva))
|
||||
return 1
|
||||
@@ -279,9 +284,11 @@ proc/isobserver(A)
|
||||
return copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
|
||||
/proc/ninjaspeak(n)
|
||||
//The difference with stutter is that this proc can stutter more than 1 letter
|
||||
//The issue here is that anything that does not have a space is treated as one word (in many instances). For instance, "LOOKING," is a word, including the comma.
|
||||
//It's fairly easy to fix if dealing with single letters but not so much with compounds of letters./N
|
||||
/*
|
||||
The difference with stutter is that this proc can stutter more than 1 letter
|
||||
The issue here is that anything that does not have a space is treated as one word (in many instances). For instance, "LOOKING," is a word, including the comma.
|
||||
It's fairly easy to fix if dealing with single letters but not so much with compounds of letters./N
|
||||
*/
|
||||
var/te = html_decode(n)
|
||||
var/t = ""
|
||||
n = length(n)
|
||||
@@ -928,17 +935,30 @@ proc/isobserver(A)
|
||||
if(usr:handcuffed && usr:canmove && (usr.last_special <= world.time))
|
||||
usr.next_move = world.time + 100
|
||||
usr.last_special = world.time + 100
|
||||
usr << "\red You attempt to remove your handcuffs. (This will take around 2 minutes and you need to stand still)"
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message(text("\red <B>[] attempts to remove the handcuffs!</B>", usr), 1)
|
||||
spawn(0)
|
||||
if(do_after(usr, 1200))
|
||||
if(!usr:handcuffed) return
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message(text("\red <B>[] manages to remove the handcuffs!</B>", usr), 1)
|
||||
usr << "\blue You successfully remove your handcuffs."
|
||||
usr:handcuffed:loc = usr:loc
|
||||
usr:handcuffed = null
|
||||
if(isalienadult(usr))//Don't want to do a lot of logic gating here.
|
||||
usr << "\green You attempt to break your handcuffs. (This will take around 5 seconds and you need to stand still)"
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message(text("\red <B>[] is trying to break the handcuffs!</B>", usr), 1)
|
||||
spawn(0)
|
||||
if(do_after(usr, 50))
|
||||
if(!usr:handcuffed) return
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message(text("\red <B>[] manages to break the handcuffs!</B>", usr), 1)
|
||||
usr << "\green You successfully break your handcuffs."
|
||||
del(usr:handcuffed)
|
||||
usr:handcuffed = null
|
||||
else
|
||||
usr << "\red You attempt to remove your handcuffs. (This will take around 2 minutes and you need to stand still)"
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message(text("\red <B>[] attempts to remove the handcuffs!</B>", usr), 1)
|
||||
spawn(0)
|
||||
if(do_after(usr, 1200))
|
||||
if(!usr:handcuffed) return
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message(text("\red <B>[] manages to remove the handcuffs!</B>", usr), 1)
|
||||
usr << "\blue You successfully remove your handcuffs."
|
||||
usr:handcuffed:loc = usr:loc
|
||||
usr:handcuffed = null
|
||||
|
||||
if(usr:handcuffed && (usr.last_special <= world.time) && usr:buckled)
|
||||
usr.next_move = world.time + 100
|
||||
|
||||
@@ -40,9 +40,8 @@
|
||||
mind.transfer_to(O)
|
||||
O.a_intent = "hurt"
|
||||
O << "<B>You are now a monkey.</B>"
|
||||
var/prev_body = src
|
||||
src = null //prevent terminating proc due to folowing del()
|
||||
del(prev_body)
|
||||
spawn(0)//To prevent the proc from returning null.
|
||||
del(src)
|
||||
return O
|
||||
|
||||
/mob/new_player/AIize()
|
||||
@@ -174,7 +173,7 @@
|
||||
O.invisibility = 0
|
||||
O.name = "Cyborg"
|
||||
O.real_name = "Cyborg"
|
||||
O.lastKnownIP = client.address
|
||||
O.lastKnownIP = client.address ? client.address : null
|
||||
if (mind)
|
||||
mind.transfer_to(O)
|
||||
if (mind.assigned_role == "Cyborg")
|
||||
@@ -199,7 +198,8 @@
|
||||
O.mmi = new /obj/item/device/mmi(O)
|
||||
O.mmi.transfer_identity(src)//Does not transfer key/client.
|
||||
|
||||
del(src)
|
||||
spawn(0)//To prevent the proc from returning null.
|
||||
del(src)
|
||||
return O
|
||||
|
||||
//human -> alien
|
||||
@@ -215,39 +215,30 @@
|
||||
invisibility = 101
|
||||
for(var/t in organs)
|
||||
del(organs[t])
|
||||
// var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
|
||||
// animation.icon_state = "blank"
|
||||
// animation.icon = 'mob.dmi'
|
||||
// animation.master = src
|
||||
// flick("h2alien", animation)
|
||||
// sleep(48)
|
||||
// del(animation)
|
||||
|
||||
var/CASTE = pick("Hunter","Sentinel","Drone")
|
||||
var/mob/O
|
||||
switch(CASTE)
|
||||
var/alien_caste = pick("Hunter","Sentinel","Drone")
|
||||
var/mob/living/carbon/alien/humanoid/new_xeno
|
||||
switch(alien_caste)
|
||||
if("Hunter")
|
||||
O = new /mob/living/carbon/alien/humanoid/hunter (loc)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter (loc)
|
||||
if("Sentinel")
|
||||
O = new /mob/living/carbon/alien/humanoid/sentinel (loc)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (loc)
|
||||
if("Drone")
|
||||
O = new /mob/living/carbon/alien/humanoid/drone (loc)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone (loc)
|
||||
|
||||
O.dna = dna
|
||||
//Honestly not sure why it's giving them DNA.
|
||||
/*
|
||||
new_xeno.dna = dna
|
||||
dna = null
|
||||
O.dna.uni_identity = "00600200A00E0110148FC01300B009"
|
||||
O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8"
|
||||
new_xeno.dna.uni_identity = "00600200A00E0110148FC01300B009"
|
||||
new_xeno.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8"
|
||||
*/
|
||||
|
||||
O.mind = new//Mind initialize stuff.
|
||||
O.mind.current = O
|
||||
O.mind.assigned_role = "Alien"
|
||||
O.mind.special_role = CASTE
|
||||
O.mind.key = key
|
||||
if(client)
|
||||
client.mob = O
|
||||
new_xeno.mind_initialize(src, alien_caste)
|
||||
new_xeno.key = key
|
||||
|
||||
|
||||
O.loc = loc
|
||||
O << "<B>You are now an alien.</B>"
|
||||
del(src)
|
||||
new_xeno.a_intent = "hurt"
|
||||
new_xeno << "<B>You are now an alien.</B>"
|
||||
spawn(0)//To prevent the proc from returning null.
|
||||
del(src)
|
||||
return
|
||||
Reference in New Issue
Block a user