Merge remote-tracking branch 'upstream/master' into third_times_the_charm_questionmark

Conflicts:
	code/modules/mob/living/carbon/human/species/species.dm
This commit is contained in:
Tigercat2000
2015-11-14 07:01:36 -08:00
17 changed files with 228 additions and 255 deletions
+1 -1
View File
@@ -53,6 +53,7 @@
vision_flags = SEE_TURFS
prescription_upgradable = 1
species_fit = list("Vox")
see_darkness = 0 //don't render darkness while wearing mesons
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
@@ -63,7 +64,6 @@
icon_state = "nvgmeson"
item_state = "glasses"
darkness_view = 8
see_darkness = 0
prescription_upgradable = 0
/obj/item/clothing/glasses/meson/prescription
+7 -1
View File
@@ -45,6 +45,12 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal
/datum/recipe/microwave/donut/sprinkles
reagents = list("sugar" = 5, "sprinkles" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/sprinkles
/datum/recipe/microwave/human/burger
items = list(
@@ -667,7 +673,7 @@ datum/recipe/microwave/slimesandwich
)
result = /obj/item/weapon/reagent_containers/food/snacks/fries
/datum/recipe/microwave/mint
/datum/recipe/microwave/mint_2
reagents = list("sugar" = 5, "frostoil" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/mint
@@ -76,8 +76,6 @@
silent = 0
return 1
handle_statuses()
. = 1
/mob/living/carbon/brain/handle_vision()
-7
View File
@@ -14,13 +14,6 @@ mob/living
qdel(food)
return ..()
/mob/living/carbon/Life()
..()
// Increase germ_level regularly
if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
germ_level++
/mob/living/carbon/blob_act()
if (stat == DEAD)
return
+2 -5
View File
@@ -786,7 +786,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
/mob/living/carbon/human/handle_regular_status_updates()
if(status_flags & GODMODE) return 0
if(status_flags & GODMODE)
return 0
//SSD check, if a logged player is awake put them back to sleep!
if(player_logged && sleeping < 2)
@@ -853,7 +854,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
setHalLoss(99)
if(paralysis)
AdjustParalysis(-1)
blinded = 1
stat = UNCONSCIOUS
if(halloss > 0)
@@ -985,9 +985,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(flying)
animate(src, pixel_y = pixel_y - 5, time = 10, loop = 1, easing = SINE_EASING)
//Other
handle_statuses()
// If you're dirty, your gloves will become dirty, too.
if(gloves && germ_level > gloves.germ_level && prob(10))
gloves.germ_level += 1
@@ -376,18 +376,25 @@
else
H.sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS)
H.see_in_dark = darksight //set their variables to default, modify them later
H.see_invisible = SEE_INVISIBLE_LIVING
if(H.mind && H.mind.vampire)
if(VAMP_VISION in H.mind.vampire.powers && !(VAMP_FULL in H.mind.vampire.powers))
H.sight |= SEE_MOBS
else if(VAMP_FULL in H.mind.vampire.powers)
H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
H.see_in_dark = 8
if(!H.druggy) H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
H.see_invisible = SEE_INVISIBLE_MINIMUM
if(XRAY in H.mutations)
H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
H.see_in_dark = 8
if(!H.druggy) H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
H.see_invisible = SEE_INVISIBLE_MINIMUM
if(H.seer == 1)
var/obj/effect/rune/R = locate() in H.loc
@@ -397,11 +404,7 @@
H.see_invisible = SEE_INVISIBLE_LIVING
H.seer = 0
else if(!H.seer)
H.see_in_dark = darksight
H.see_invisible = SEE_INVISIBLE_LIVING
// This checks how much the mob's eyewear impairs their vision
//This checks how much the mob's eyewear impairs their vision
if(H.tinttotal >= TINT_IMPAIR)
if(tinted_weldhelh)
if(H.tinttotal >= TINT_BLIND)
@@ -413,7 +416,9 @@
if(istype(H.glasses, /obj/item/clothing/glasses))
var/obj/item/clothing/glasses/G = H.glasses
H.sight |= G.vision_flags
H.see_in_dark = G.darkness_view
if(G.darkness_view)
H.see_in_dark = G.darkness_view
if(!G.see_darkness)
H.see_invisible = SEE_INVISIBLE_MINIMUM
@@ -452,13 +457,10 @@
H.see_in_dark = (G.darkness_view ? G.darkness_view : darksight) // Otherwise we keep our darkness view with togglable nightvision.
if(G.vision_flags) // MESONS
H.sight |= G.vision_flags
if(!H.druggy)
H.see_invisible = SEE_INVISIBLE_MINIMUM
if(!G.see_darkness)
H.see_invisible = SEE_INVISIBLE_MINIMUM
/* HUD shit goes here, as long as it doesn't modify sight flags */
// The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl
switch(G.HUDType)
if(SECHUD)
process_sec_hud(H,1)
@@ -467,6 +469,13 @@
if(ANTAGHUD)
process_antag_hud(H)
if(H.vision_type)
H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark, darksight)
H.see_invisible = H.vision_type.see_invisible
if(H.vision_type.light_sensitive)
H.weakeyes = 1
H.sight |= H.vision_type.sight_flags
if(H.see_override) //Override all
H.see_invisible = H.see_override
+5 -1
View File
@@ -13,6 +13,10 @@
handle_wetness()
// Increase germ_level regularly
if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
germ_level++
///////////////
// BREATHING //
@@ -276,7 +280,7 @@
/mob/living/carbon/proc/CheckStamina()
if(staminaloss)
var/total_health = (health - staminaloss)
if(total_health <= config.health_threshold_crit && !stat)
if(total_health <= config.health_threshold_softcrit && !stat)
src << "<span class='notice'>You're too exhausted to keep going...</span>"
Weaken(5)
setStaminaLoss(health - 2)
+44 -5
View File
@@ -54,7 +54,9 @@
update_canmove()
if(client)
handle_regular_hud_updates()
regular_hud_updates() //THIS DOESN'T FUCKING UPDATE SHIT
handle_regular_hud_updates() //IT JUST REMOVES FUCKING HUD IMAGES
/mob/living/proc/handle_breathing()
return
@@ -100,17 +102,54 @@
//this updates all special effects: stunned, sleeping, weakened, druggy, stuttering, etc..
/mob/living/proc/handle_status_effects()
if(paralysis)
paralysis = max(paralysis-1,0)
handle_stunned()
handle_weakened()
handle_stuttering()
handle_silent()
handle_drugged()
handle_slurring()
handle_paralysed()
/mob/living/proc/handle_stunned()
if(stunned)
stunned = max(stunned-1,0)
AdjustStunned(-1)
if(!stunned)
update_icons()
return stunned
/mob/living/proc/handle_weakened()
if(weakened)
weakened = max(weakened-1,0)
weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times
if(!weakened)
update_icons()
return weakened
/mob/living/proc/handle_stuttering()
if(stuttering)
stuttering = max(stuttering-1, 0)
return stuttering
/mob/living/proc/handle_silent()
if(silent)
silent = max(silent-1, 0)
return silent
/mob/living/proc/handle_drugged()
if(druggy)
druggy = max(druggy-1, 0)
return druggy
/mob/living/proc/handle_slurring()
if(slurring)
slurring = max(slurring-1, 0)
return slurring
/mob/living/proc/handle_paralysed() // Currently only used by simple_animal.dm, treated as a special case in other mobs
if(paralysis)
AdjustParalysis(-1)
return paralysis
/mob/living/proc/handle_disabilities()
+127 -157
View File
@@ -1,188 +1,158 @@
/mob/living/silicon/ai/Life()
if (src.stat == 2)
//doesn't call parent because it's a horrible mess
if(stat == DEAD)
return
else //I'm not removing that shitton of tabs, unneeded as they are. -- Urist
//Being dead doesn't mean your temperature never changes
var/turf/T = get_turf(src)
if (src.stat!=0)
src.cameraFollow = null
src.reset_view(null)
src.unset_machine()
var/turf/T = get_turf(src)
if(stat != CONSCIOUS) //ai's fucked
cameraFollow = null
reset_view(null)
unset_machine()
src.updatehealth()
updatehealth()
update_gravity(mob_has_gravity())
update_gravity(mob_has_gravity())
if (health <= config.health_threshold_dead)
death()
return 0
if (src.malfhack)
if (src.malfhack.aidisabled)
src << "\red ERROR: APC access disabled, hack attempt canceled."
src.malfhacking = 0
src.malfhack = null
if(malfhack)
if(malfhack.aidisabled)
src << "<span class='danger'>ERROR: APC access disabled, hack attempt canceled.</span>"
malfhacking = 0
malfhack = null
if(aiRestorePowerRoutine)
adjustOxyLoss(1)
else
adjustOxyLoss(-1)
if (src.health <= config.health_threshold_dead)
death()
return
handle_stunned()
// Handle power damage (oxy)
if(src:aiRestorePowerRoutine != 0)
// Lost power
adjustOxyLoss(1)
else
// Gain Power
adjustOxyLoss(-1)
var/is_blind = 0 //THIS WAS JUST FUCKING 'blind' WHICH CONFLICTED WITH A NORMAL VARIABLE
var/area/my_area = get_area(src)
if(istype(my_area))
if(!my_area.power_equip && !is_type_in_list(loc, list(/obj/item, /obj/mecha)))
is_blind = 1 //HOW THE FUCK DID THAT EVEN COMPILE JESUS CHRIST
// Handle EMP-stun
handle_stunned()
if(!is_blind)
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
//stage = 1
//if (istype(src, /mob/living/silicon/ai)) // Are we not sure what we are?
var/blind = 0
//stage = 2
var/area/loc = null
if (istype(T, /turf))
//stage = 3
loc = T.loc
if (istype(loc, /area))
//stage = 4
if (!loc.power_equip && !is_type_in_list(src.loc,list(/obj/item, /obj/mecha)))
//stage = 5
blind = 1
see_in_dark = 8
see_invisible = SEE_INVISIBLE_LEVEL_TWO
if (!blind) //lol? if(!blind) #if(src.blind.layer) <--something here is clearly wrong :P
//I'll get back to this when I find out how this is -supposed- to work ~Carn //removed this shit since it was confusing as all hell --39kk9t
//stage = 4.5
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
if(see_override)
see_invisible = see_override
if(see_override)
see_invisible = see_override
//Congratulations! You've found a way for AI's to run without using power!
//Todo: Without snowflaking up master_controller procs find a way to make AI use_power but only when APC's clear the area usage the tick prior
// since mobs are in master_controller before machinery. We also have to do it in a manner where we don't reset the entire area's need to update
// the power usage.
//
// We can probably create a new machine that resides inside of the AI contents that uses power using the idle_usage of 1000 and nothing else and
// be fine.
/*
var/area/home = get_area(src)
if(!home) return//something to do with malf fucking things up I guess. <-- aisat is gone. is this still necessary? ~Carn
if(home.powered(EQUIP))
home.use_power(1000, EQUIP)
*/
if(aiRestorePowerRoutine == 2)
src << "Alert cancelled. Power has been restored without our assistance."
aiRestorePowerRoutine = 0
blind.layer = 0
else if(aiRestorePowerRoutine == 3)
src << "Alert cancelled. Power has been restored."
aiRestorePowerRoutine = 0
blind.layer = 0
if (src:aiRestorePowerRoutine==2)
src << "Alert cancelled. Power has been restored without our assistance."
src:aiRestorePowerRoutine = 0
src.blind.layer = 0
return
else if (src:aiRestorePowerRoutine==3)
src << "Alert cancelled. Power has been restored."
src:aiRestorePowerRoutine = 0
src.blind.layer = 0
return
else
return
//stage = 6
else
var/area/current_area = get_area(src)
blind.screen_loc = "1,1 to 15,15"
if(blind.layer != 18)
blind.layer = 18
sight &= ~SEE_TURFS
sight &= ~SEE_MOBS
sight &= ~SEE_OBJS
src.blind.screen_loc = "1,1 to 15,15"
if (src.blind.layer!=18)
src.blind.layer = 18
src.sight = src.sight&~SEE_TURFS
src.sight = src.sight&~SEE_MOBS
src.sight = src.sight&~SEE_OBJS
src.see_in_dark = 0
src.see_invisible = SEE_INVISIBLE_LIVING
see_in_dark = 0
see_invisible = SEE_INVISIBLE_LIVING
if (((!loc.power_equip) || istype(T, /turf/space)) && !is_type_in_list(src.loc,list(/obj/item, /obj/mecha)))
if (src:aiRestorePowerRoutine==0)
src:aiRestorePowerRoutine = 1
if(((!my_area.power_equip) || istype(T, /turf/space)) && !is_type_in_list(loc, list(/obj/item, /obj/mecha)))
if(!aiRestorePowerRoutine)
aiRestorePowerRoutine = 1
src << "You've lost power!"
// world << "DEBUG CODE TIME! [loc] is the area the AI is sucking power from"
if (!is_special_character(src))
src.set_zeroth_law("")
//src.clear_supplied_laws() // Don't reset our laws.
//var/time = time2text(world.realtime,"hh:mm:ss")
//lawchanges.Add("[time] <b>:</b> [src.name]'s noncore laws have been reset due to power failure")
spawn(20)
src << "Backup battery online. Scanners, camera, and radio interface offline. Beginning fault-detection."
sleep(50)
if (loc.power_equip)
src << "<span class='danger'>You have lost power!</span>"
if(!is_special_character(src))
set_zeroth_law("")
spawn(20)
src << "Backup battery online. Scanners, camera, and radio interface offline. Beginning fault-detection."
sleep(50)
my_area = get_area(src)
T = get_turf(src)
if(my_area && my_area.power_equip && !istype(T, /turf/space))
src << "Alert cancelled. Power has been restored without our assistance."
aiRestorePowerRoutine = 0
blind.layer = 0
return
src << "Fault confirmed: missing external power. Shutting down main control system to save power."
sleep(20)
src << "Emergency control system online. Verifying connection to power network."
sleep(50)
T = get_turf(src)
if(istype(T, /turf/space))
src << "Unable to verify! No power connection detected!"
aiRestorePowerRoutine = 2
return
src << "Connection verified. Searching for APC in power network."
sleep(50)
my_area = get_area(src)
T = get_turf(src)
var/obj/machinery/power/apc/theAPC = null
var/PRP
for(PRP = 1, PRP <= 4, PRP++)
for(var/obj/machinery/power/apc/APC in my_area)
if (!(APC.stat & BROKEN))
theAPC = APC
break
if(!theAPC)
switch(PRP)
if(1) src << "Unable to locate APC!"
else src << "Lost connection with the APC!"
aiRestorePowerRoutine = 2
return
if(my_area.power_equip)
if (!istype(T, /turf/space))
src << "Alert cancelled. Power has been restored without our assistance."
src:aiRestorePowerRoutine = 0
src.blind.layer = 0
aiRestorePowerRoutine = 0
blind.layer = 0
return
src << "Fault confirmed: missing external power. Shutting down main control system to save power."
sleep(20)
src << "Emergency control system online. Verifying connection to power network."
sleep(50)
if (istype(T, /turf/space))
src << "Unable to verify! No power connection detected!"
src:aiRestorePowerRoutine = 2
return
src << "Connection verified. Searching for APC in power network."
sleep(50)
var/obj/machinery/power/apc/theAPC = null
/*
for (var/something in loc)
if (istype(something, /obj/machinery/power/apc))
if (!(something:stat & BROKEN))
theAPC = something
break
*/
var/PRP
for (PRP=1, PRP<=4, PRP++)
for (var/obj/machinery/power/apc/APC in current_area)
if (!(APC.stat & BROKEN))
theAPC = APC
break
if (!theAPC)
switch(PRP)
if (1) src << "Unable to locate APC!"
else src << "Lost connection with the APC!"
src:aiRestorePowerRoutine = 2
return
if (loc.power_equip)
if (!istype(T, /turf/space))
src << "Alert cancelled. Power has been restored without our assistance."
src:aiRestorePowerRoutine = 0
src.blind.layer = 0 //This, too, is a fix to issue 603
return
switch(PRP)
if (1) src << "APC located. Optimizing route to APC to avoid needless power waste."
if (2) src << "Best route identified. Hacking offline APC power port."
if (3) src << "Power port upload access confirmed. Loading control program into APC power port software."
if (4)
src << "Transfer complete. Forcing APC to execute program."
sleep(50)
src << "Receiving control information from APC."
sleep(2)
//bring up APC dialog
apc_override = 1
theAPC.attack_ai(src)
apc_override = 0
src:aiRestorePowerRoutine = 3
src << "Here are your current laws:"
src.show_laws()
sleep(50)
theAPC = null
switch(PRP)
if(1) src << "APC located. Optimizing route to APC to avoid needless power waste."
if(2) src << "Best route identified. Hacking offline APC power port."
if(3) src << "Power port upload access confirmed. Loading control program into APC power port software."
if(4)
src << "Transfer complete. Forcing APC to execute program."
sleep(50)
src << "Receiving control information from APC."
sleep(2)
//bring up APC dialog
apc_override = 1
theAPC.attack_ai(src)
apc_override = 0
aiRestorePowerRoutine = 3
src << "Here are your current laws:"
src.show_laws() //WHY THE FUCK IS THIS HERE
sleep(50)
theAPC = null
process_queued_alarms()
regular_hud_updates()
switch(src.sensor_mode)
switch(sensor_mode)
if (SEC_HUD)
process_sec_hud(src,1,src.eyeobj)
process_sec_hud(src, 1, eyeobj)
if (MED_HUD)
process_med_hud(src,1,src.eyeobj)
process_med_hud(src, 1, eyeobj)
/mob/living/silicon/ai/updatehealth()
if(status_flags & GODMODE)
+3 -9
View File
@@ -1,11 +1,9 @@
/mob/living/silicon/pai/Life()
. = ..()
if(.)
regular_hud_updates()
if(src.secHUD == 1)
if(secHUD == 1)
process_sec_hud(src, 1)
if(src.medHUD == 1)
if(medHUD == 1)
process_med_hud(src, 1)
if(silence_time)
if(world.timeofday >= silence_time)
@@ -19,9 +17,6 @@
M.show_message("\red The data cable rapidly retracts back into its spool.", 3, "\red You hear a click and the sound of wire spooling rapidly.", 2)
qdel(src.cable)
handle_statuses()
/mob/living/silicon/pai/updatehealth()
if(status_flags & GODMODE)
health = 100
@@ -29,5 +24,4 @@
else
health = 100 - getBruteLoss() - getFireLoss()
if(health <= 0)
death(0)
death(0)
@@ -244,8 +244,6 @@
if(!client)
return
regular_hud_updates()
switch(sensor_mode)
if(SEC_HUD)
process_sec_hud(src,1)
-43
View File
@@ -1324,49 +1324,6 @@ mob/proc/yank_out_object()
host.ckey = src.ckey
host << "<span class='info'>You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.</span>"
/mob/living/proc/handle_statuses()
handle_stunned()
handle_weakened()
handle_stuttering()
handle_silent()
handle_drugged()
handle_slurring()
/mob/living/proc/handle_stunned()
if(stunned)
AdjustStunned(-1)
return stunned
/mob/living/proc/handle_weakened()
if(weakened)
weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times
return weakened
/mob/living/proc/handle_stuttering()
if(stuttering)
stuttering = max(stuttering-1, 0)
return stuttering
/mob/living/proc/handle_silent()
if(silent)
silent = max(silent-1, 0)
return silent
/mob/living/proc/handle_drugged()
if(druggy)
druggy = max(druggy-1, 0)
return druggy
/mob/living/proc/handle_slurring()
if(slurring)
slurring = max(slurring-1, 0)
return slurring
/mob/living/proc/handle_paralysed() // Currently only used by simple_animal.dm, treated as a special case in other mobs
if(paralysis)
AdjustParalysis(-1)
return paralysis
/mob/proc/assess_threat() //For sec bot threat assessment
return
@@ -448,6 +448,14 @@
src.name = "frosted donut"
reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/donut/sprinkles
name = "frosted donut"
icon_state = "donut2"
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sprinkles", 3)
/obj/item/weapon/reagent_containers/food/snacks/donut/chaos
name = "Chaos Donut"
desc = "Like life, it never quite tastes the same."