Merge branch 'master' of github.com:Baystation12/Baystation12 into Airlocks

This commit is contained in:
SkyMarshal
2012-04-04 19:58:59 -07:00
134 changed files with 13083 additions and 12643 deletions

View File

@@ -22,7 +22,6 @@
#define FILE_DIR "code/defines/mob/living" #define FILE_DIR "code/defines/mob/living"
#define FILE_DIR "code/defines/mob/living/carbon" #define FILE_DIR "code/defines/mob/living/carbon"
#define FILE_DIR "code/defines/mob/living/silicon" #define FILE_DIR "code/defines/mob/living/silicon"
#define FILE_DIR "code/defines/mob/simple_animal"
#define FILE_DIR "code/defines/obj" #define FILE_DIR "code/defines/obj"
#define FILE_DIR "code/defines/procs" #define FILE_DIR "code/defines/procs"
#define FILE_DIR "code/defines/sd_procs" #define FILE_DIR "code/defines/sd_procs"
@@ -73,7 +72,6 @@
#define FILE_DIR "code/game/objects/devices" #define FILE_DIR "code/game/objects/devices"
#define FILE_DIR "code/game/objects/devices/PDA" #define FILE_DIR "code/game/objects/devices/PDA"
#define FILE_DIR "code/game/objects/items" #define FILE_DIR "code/game/objects/items"
#define FILE_DIR "code/game/objects/items/clothing"
#define FILE_DIR "code/game/objects/items/weapons" #define FILE_DIR "code/game/objects/items/weapons"
#define FILE_DIR "code/game/objects/items/weapons/implants" #define FILE_DIR "code/game/objects/items/weapons/implants"
#define FILE_DIR "code/game/objects/radio" #define FILE_DIR "code/game/objects/radio"
@@ -153,6 +151,7 @@
#define FILE_DIR "code/unused/mining" #define FILE_DIR "code/unused/mining"
#define FILE_DIR "code/unused/optics" #define FILE_DIR "code/unused/optics"
#define FILE_DIR "code/unused/pda2" #define FILE_DIR "code/unused/pda2"
#define FILE_DIR "code/unused/powerarmor"
#define FILE_DIR "code/unused/spacecraft" #define FILE_DIR "code/unused/spacecraft"
#define FILE_DIR "code/WorkInProgress" #define FILE_DIR "code/WorkInProgress"
#define FILE_DIR "code/WorkInProgress/Apples" #define FILE_DIR "code/WorkInProgress/Apples"
@@ -315,15 +314,10 @@
#include "code\defines\mob\living\silicon\pai.dm" #include "code\defines\mob\living\silicon\pai.dm"
#include "code\defines\mob\living\silicon\robot.dm" #include "code\defines\mob\living\silicon\robot.dm"
#include "code\defines\mob\living\silicon\silicon.dm" #include "code\defines\mob\living\silicon\silicon.dm"
#include "code\defines\mob\simple_animal\cat.dm"
#include "code\defines\mob\simple_animal\corgi.dm"
#include "code\defines\mob\simple_animal\crab.dm"
#include "code\defines\mob\simple_animal\life.dm"
#include "code\defines\obj\closet.dm" #include "code\defines\obj\closet.dm"
#include "code\defines\obj\clothing.dm" #include "code\defines\obj\clothing.dm"
#include "code\defines\obj\computer.dm" #include "code\defines\obj\computer.dm"
#include "code\defines\obj\decal.dm" #include "code\defines\obj\decal.dm"
#include "code\defines\obj\door.dm"
#include "code\defines\obj\hydro.dm" #include "code\defines\obj\hydro.dm"
#include "code\defines\obj\machinery.dm" #include "code\defines\obj\machinery.dm"
#include "code\defines\obj\radio.dm" #include "code\defines\obj\radio.dm"
@@ -545,6 +539,7 @@
#include "code\game\machinery\doors\firedoor.dm" #include "code\game\machinery\doors\firedoor.dm"
#include "code\game\machinery\doors\poddoor.dm" #include "code\game\machinery\doors\poddoor.dm"
#include "code\game\machinery\doors\shutters.dm" #include "code\game\machinery\doors\shutters.dm"
#include "code\game\machinery\doors\unpowered.dm"
#include "code\game\machinery\doors\windowdoor.dm" #include "code\game\machinery\doors\windowdoor.dm"
#include "code\game\machinery\embedded_controller\access_controller.dm" #include "code\game\machinery\embedded_controller\access_controller.dm"
#include "code\game\machinery\embedded_controller\airlock_controller.dm" #include "code\game\machinery\embedded_controller\airlock_controller.dm"
@@ -631,6 +626,8 @@
#include "code\game\objects\alien\weeds.dm" #include "code\game\objects\alien\weeds.dm"
#include "code\game\objects\closets\bombsuit.dm" #include "code\game\objects\closets\bombsuit.dm"
#include "code\game\objects\closets\emergency.dm" #include "code\game\objects\closets\emergency.dm"
#include "code\game\objects\closets\extinguisher.dm"
#include "code\game\objects\closets\fireaxe.dm"
#include "code\game\objects\closets\firecloset.dm" #include "code\game\objects\closets\firecloset.dm"
#include "code\game\objects\closets\gimmick.dm" #include "code\game\objects\closets\gimmick.dm"
#include "code\game\objects\closets\gmcloset.dm" #include "code\game\objects\closets\gmcloset.dm"
@@ -678,8 +675,6 @@
#include "code\game\objects\items\shock_kit.dm" #include "code\game\objects\items\shock_kit.dm"
#include "code\game\objects\items\tk_grab.dm" #include "code\game\objects\items\tk_grab.dm"
#include "code\game\objects\items\trash.dm" #include "code\game\objects\items\trash.dm"
#include "code\game\objects\items\clothing\powerarmor.dm"
#include "code\game\objects\items\clothing\powerarmorcomponents.dm"
#include "code\game\objects\items\weapons\AI_modules.dm" #include "code\game\objects\items\weapons\AI_modules.dm"
#include "code\game\objects\items\weapons\cameras.dm" #include "code\game\objects\items\weapons\cameras.dm"
#include "code\game\objects\items\weapons\cards_ids.dm" #include "code\game\objects\items\weapons\cards_ids.dm"
@@ -792,6 +787,7 @@
#include "code\modules\assembly\timer.dm" #include "code\modules\assembly\timer.dm"
#include "code\modules\chemical\Chemistry-Holder.dm" #include "code\modules\chemical\Chemistry-Holder.dm"
#include "code\modules\chemical\Chemistry-Machinery.dm" #include "code\modules\chemical\Chemistry-Machinery.dm"
#include "code\modules\chemical\Chemistry-Readme.dm"
#include "code\modules\chemical\Chemistry-Reagents.dm" #include "code\modules\chemical\Chemistry-Reagents.dm"
#include "code\modules\chemical\Chemistry-Recipes.dm" #include "code\modules\chemical\Chemistry-Recipes.dm"
#include "code\modules\chemical\Chemistry-Tools.dm" #include "code\modules\chemical\Chemistry-Tools.dm"
@@ -840,6 +836,7 @@
#include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\flufftext\TextFilters.dm" #include "code\modules\flufftext\TextFilters.dm"
#include "code\modules\food\food.dm" #include "code\modules\food\food.dm"
#include "code\modules\food\meat.dm"
#include "code\modules\food\recipes_microwave.dm" #include "code\modules\food\recipes_microwave.dm"
#include "code\modules\mining\datum_processing_recipe.dm" #include "code\modules\mining\datum_processing_recipe.dm"
#include "code\modules\mining\machine_input_output_plates.dm" #include "code\modules\mining\machine_input_output_plates.dm"
@@ -856,6 +853,7 @@
#include "code\modules\mob\login.dm" #include "code\modules\mob\login.dm"
#include "code\modules\mob\logout.dm" #include "code\modules\mob\logout.dm"
#include "code\modules\mob\mob.dm" #include "code\modules\mob\mob.dm"
#include "code\modules\mob\mob_cleanup.dm"
#include "code\modules\mob\mob_defines.dm" #include "code\modules\mob\mob_defines.dm"
#include "code\modules\mob\mob_grab.dm" #include "code\modules\mob\mob_grab.dm"
#include "code\modules\mob\mob_helpers.dm" #include "code\modules\mob\mob_helpers.dm"
@@ -990,6 +988,11 @@
#include "code\modules\mob\organ\organ_external.dm" #include "code\modules\mob\organ\organ_external.dm"
#include "code\modules\mob\organ\organ_internal.dm" #include "code\modules\mob\organ\organ_internal.dm"
#include "code\modules\mob\organ\pain.dm" #include "code\modules\mob\organ\pain.dm"
#include "code\modules\mob\simple_animal\cat.dm"
#include "code\modules\mob\simple_animal\corgi.dm"
#include "code\modules\mob\simple_animal\crab.dm"
#include "code\modules\mob\simple_animal\life.dm"
#include "code\modules\mob\simple_animal\shade.dm"
#include "code\modules\power\apc.dm" #include "code\modules\power\apc.dm"
#include "code\modules\power\cable.dm" #include "code\modules\power\cable.dm"
#include "code\modules\power\cell.dm" #include "code\modules\power\cell.dm"
@@ -1081,6 +1084,7 @@
#include "code\WorkInProgress\AI_Visibility.dm" #include "code\WorkInProgress\AI_Visibility.dm"
#include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\buildmode.dm"
#include "code\WorkInProgress\explosion_particles.dm" #include "code\WorkInProgress\explosion_particles.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\examine.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\say.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\say.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajara_transformation.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\tajara_transformation.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
@@ -1091,6 +1095,8 @@
#include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Mini\pipe_heater.dm" #include "code\WorkInProgress\Mini\pipe_heater.dm"
#include "code\WorkInProgress\Mloc\Shortcuts.dm" #include "code\WorkInProgress\Mloc\Shortcuts.dm"
#include "code\WorkInProgress\organs\implants.dm"
#include "code\WorkInProgress\organs\organs.dm"
#include "code\WorkInProgress\Ported\head.dm" #include "code\WorkInProgress\Ported\head.dm"
#include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\Ported\policetape.dm"
#include "code\WorkInProgress\Ported\Abi79\uplink_kits.dm" #include "code\WorkInProgress\Ported\Abi79\uplink_kits.dm"

View File

@@ -12,20 +12,10 @@ atom/movable/proc/experience_pressure_difference(pressure_difference, direction)
turf turf
assume_air(datum/gas_mixture/giver) //use this for machines to adjust air assume_air(datum/gas_mixture/giver) //use this for machines to adjust air
//First, ensure there is no movable shuttle or what not on tile that is taking over
// var/obj/movable/floor/movable_on_me = locate(/obj/movable/floor) in src
// if(istype(movable_on_me))
// return movable_on_me.assume_air(giver)
del(giver) del(giver)
return 0 return 0
return_air() return_air()
//First, ensure there is no movable shuttle or what not on tile that is taking over
// var/obj/movable/floor/movable_on_me = locate(/obj/movable/floor) in src
// if(istype(movable_on_me))
// return movable_on_me.return_air()
//Create gas mixture to hold data for passing //Create gas mixture to hold data for passing
var/datum/gas_mixture/GM = new var/datum/gas_mixture/GM = new
@@ -39,11 +29,6 @@ turf
return GM return GM
remove_air(amount as num) remove_air(amount as num)
//First, ensure there is no movable shuttle or what not on tile that is taking over
// var/obj/movable/floor/movable_on_me = locate(/obj/movable/floor) in src
// if(istype(movable_on_me))
// return movable_on_me.remove_air(amount)
var/datum/gas_mixture/GM = new var/datum/gas_mixture/GM = new
var/sum = oxygen + carbon_dioxide + nitrogen + toxins var/sum = oxygen + carbon_dioxide + nitrogen + toxins

View File

@@ -103,72 +103,11 @@
/obj/organ/torso /obj/organ/torso
name = "torso" name = "torso"
var/maxHealth = 50 //right now, the mob's (only humans for now) health depends only on it. Will be fixed later var/maxHealth = 50 //right now, the mob's (only humans for now) health depends only on it. Will be fixed later
var/ear_damage = null//Carbon
var/cloneloss = 0//Carbon
var/nodamage = 0
// flags = NOREACT //uncomment this out later
var/viruses = list() // replaces var/datum/disease/virus
var/list/resistances = list()
var/datum/disease/virus = null
var/emote_allowed = 1
var/sdisabilities = 0//Carbon
var/disabilities = 0//Carbon
var/monkeyizing = null//Carbon
var/lying = 0.0
var/resting = 0.0//Carbon
var/sleeping = 0.0//Carbon
var/oxyloss = 0.0//Living
var/toxloss = 0.0//Living
var/fireloss = 0.0//Living
var/bruteloss = 0.0//Living
var/timeofdeath = 0.0//Living
var/rejuv = null
var/antitoxs = null
var/plasma = null
var/cpr_time = 1.0//Carbon
var/health = 100//Living
var/bodytemperature = 310.055 //98.7 F
var/bhunger = 0//Carbon
var/nutrition = 400.0//Carbon
var/overeatduration = 0 // How long this guy is overeating //Carbon
var/paralysis = 0.0
var/stunned = 0.0
var/weakened = 0.0
var/losebreath = 0.0//Carbon
var/obj/item/weapon/storage/s_active = null//Carbon
var/inertia_dir = 0
var/datum/dna/dna = null//Carbon
var/radiation = 0.0//Carbon
var/mutations = 0//Carbon
//telekinesis = 1
//firemut = 2
//xray = 4
//hulk = 8
//clumsy = 16
//obese = 32
//husk = 64
/*For ninjas and others. This variable is checked when a mob moves and I guess it was supposed to allow the mob to move
through dense areas, such as walls. Setting density to 0 does the same thing. The difference here is that
the mob is also allowed to move without any sort of restriction. For instance, in space or out of holder objects.*/
//0 is off, 1 is normal, 2 is for ninjas.
var/incorporeal_move = 0
//The last mob/living/carbon to push/drag/grab this mob (mostly used by Metroids friend recognition)
var/mob/living/carbon/LAssailant = null
/obj/organ/torso/human /obj/organ/torso/human
name = "human torso" name = "human torso"
species = "human" species = "human"
maxHealth = 100 maxHealth = 100
var/underwear = 1//Human
var/obj/item/weapon/back = null//Human/Monkey
var/obj/item/weapon/tank/internal = null//Human/Monkey
var/alien_egg_flag = 0//Have you been infected?
var/last_special = 0
New() New()
..() ..()
@@ -196,14 +135,6 @@ the mob is also allowed to move without any sort of restriction. For instance, i
var/minDamage = 5 //punching damage var/minDamage = 5 //punching damage
var/maxDamage = 5 var/maxDamage = 5
var/atom/movable/pulling = null
var/hand = null
var/obj/item/weapon/handcuffs/handcuffed = null//Living
var/obj/item/l_hand = null//Living
var/obj/item/r_hand = null//Living
var/in_throw_mode = 0
// var/strangleDelay = 1 //The code is a bit too complicated for that right now
/obj/organ/limb/arms/alien /obj/organ/limb/arms/alien
name = "alien arms" name = "alien arms"
species = "alien" species = "alien"
@@ -220,15 +151,6 @@ the mob is also allowed to move without any sort of restriction. For instance, i
/obj/organ/limb/legs /obj/organ/limb/legs
name = "legs" name = "legs"
var/moveRunDelay = 1 //not sure about how that works
var/moveWalkDelay = 7
//var/knockdownResist = 0
var/next_move = null
var/prev_move = null
var/canmove = 1.0
var/obj/structure/stool/buckled = null//Living
var/footstep = 1
/obj/organ/limb/legs/human /obj/organ/limb/legs/human
name = "human legs" name = "human legs"
species = "human" species = "human"
@@ -241,47 +163,9 @@ the mob is also allowed to move without any sort of restriction. For instance, i
/obj/organ/head /obj/organ/head
name = "head" name = "head"
var/stuttering = null//Carbon
var/druggy = 0//Carbon
var/confused = 0//Carbon
var/drowsyness = 0.0//Carbon
var/dizziness = 0//Carbon
var/is_dizzy = 0
var/is_jittery = 0
var/jitteriness = 0//Carbon
var/r_epil = 0
var/r_ch_cou = 0
var/r_Tourette = 0//Carbon
var/miming = null //checks if the guy is a mime//Human
var/silent = null //Can't talk. Value goes down every life proc.//Human
var/voice_name = "unidentifiable voice"
var/voice_message = null // When you are not understood by others (replaced with just screeches, hisses, chimpers etc.)
var/say_message = null // When you are understood by others. Currently only used by aliens and monkeys in their say_quote procs
var/coughedtime = null
var/job = null//Living
var/const/blindness = 1//Carbon
var/const/deafness = 2//Carbon
var/const/muteness = 4//Carbon
var/brainloss = 0//Carbon
var/robot_talk_understand = 0
var/alien_talk_understand = 0
var/taj_talk_understand = 0
var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE
var/ear_deaf = null//Carbon
var/eye_blind = null//Carbon
var/eye_blurry = null//Carbon
var/eye_stat = null//Living, potentially Carbon
var/blinded = null
var/shakecamera = 0
//Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button
var/obj/proc_holder/spell/list/spell_list = list()
/obj/organ/head/human /obj/organ/head/human
name = "human head" name = "human head"
species = "human" species = "human"
var/obj/item/clothing/mask/wear_mask = null//Carbon
/obj/organ/head/alien /obj/organ/head/alien
name = "alien head" name = "alien head"

View File

@@ -305,7 +305,7 @@ proc/airborne_can_reach(turf/source, turf/target)
stage = 4 stage = 4
activate(var/mob/living/carbon/mob,var/multiplier) activate(var/mob/living/carbon/mob,var/multiplier)
mob << "\red You feel something tearing its way out of your stomach..." mob << "\red You feel something tearing its way out of your stomach..."
mob.toxloss += 10 mob.adjustToxLoss(10)
mob.updatehealth() mob.updatehealth()
if(prob(40)) if(prob(40))
if(mob.client) if(mob.client)
@@ -340,7 +340,7 @@ proc/airborne_can_reach(turf/source, turf/target)
stage = 3 stage = 3
maxm = 3 maxm = 3
activate(var/mob/living/carbon/mob,var/multiplier) activate(var/mob/living/carbon/mob,var/multiplier)
mob.toxloss += (2*multiplier) mob.adjustToxLoss((2*multiplier))
/datum/disease2/effect/greater/drowsness /datum/disease2/effect/greater/drowsness
name = "Automated sleeping syndrome" name = "Automated sleeping syndrome"
@@ -425,7 +425,7 @@ proc/airborne_can_reach(turf/source, turf/target)
name = "Toxification syndrome" name = "Toxification syndrome"
stage = 4 stage = 4
activate(var/mob/living/carbon/mob,var/multiplier) activate(var/mob/living/carbon/mob,var/multiplier)
mob.toxloss += 15 mob.adjustToxLoss(15)
/datum/disease2/effect/greater/sleepy /datum/disease2/effect/greater/sleepy
name = "Resting syndrome" name = "Resting syndrome"
@@ -437,7 +437,7 @@ proc/airborne_can_reach(turf/source, turf/target)
name = "Lazy mind syndrome" name = "Lazy mind syndrome"
stage = 3 stage = 3
activate(var/mob/living/carbon/mob,var/multiplier) activate(var/mob/living/carbon/mob,var/multiplier)
mob.brainloss = 50 mob.setBrainLoss(50)
/datum/disease2/effect/greater/suicide /datum/disease2/effect/greater/suicide
name = "Suicidal syndrome" name = "Suicidal syndrome"
@@ -446,7 +446,7 @@ proc/airborne_can_reach(turf/source, turf/target)
mob.suiciding = 1 mob.suiciding = 1
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
viewers(mob) << "\red <b>[mob.name] is holding \his breath. It looks like \he's trying to commit suicide.</b>" viewers(mob) << "\red <b>[mob.name] is holding \his breath. It looks like \he's trying to commit suicide.</b>"
mob.oxyloss = max(175 - mob.toxloss - mob.fireloss - mob.bruteloss, mob.oxyloss) mob.adjustOxyLoss(175 - mob.getToxLoss() - mob.getFireLoss() - mob.getBruteLoss() - mob.getOxyLoss())
mob.updatehealth() mob.updatehealth()
spawn(200) //in case they get revived by cryo chamber or something stupid like that, let them suicide again in 20 seconds spawn(200) //in case they get revived by cryo chamber or something stupid like that, let them suicide again in 20 seconds
mob.suiciding = 0 mob.suiciding = 0
@@ -462,7 +462,7 @@ proc/airborne_can_reach(turf/source, turf/target)
name = "Lazy mind syndrome" name = "Lazy mind syndrome"
stage = 3 stage = 3
activate(var/mob/living/carbon/mob,var/multiplier) activate(var/mob/living/carbon/mob,var/multiplier)
mob.brainloss = 20 mob.setBrainLoss(20)
/datum/disease2/effect/lesser/deaf /datum/disease2/effect/lesser/deaf
name = "Hard of hearing syndrome" name = "Hard of hearing syndrome"

View File

@@ -36,7 +36,7 @@
if(M.virus2) if(M.virus2)
M.virus2.cure_added(resistance) M.virus2.cure_added(resistance)
else if(works == 1) else if(works == 1)
M.toxloss += 60 M.adjustToxLoss(60)
else if(works == 2) else if(works == 2)
M.gib() M.gib()
else if(works == 3) else if(works == 3)

View File

@@ -23,15 +23,15 @@
if(prob(2)) if(prob(2))
affected_mob << "\red Your don't feel like yourself." affected_mob << "\red Your don't feel like yourself."
if(prob(5)) if(prob(5))
affected_mob.brainloss +=1 affected_mob.adjustBrainLoss(1)
affected_mob.updatehealth() affected_mob.updatehealth()
if(3) if(3)
if(prob(2)) if(prob(2))
affected_mob.emote("stare") affected_mob.emote("stare")
if(prob(2)) if(prob(2))
affected_mob.emote("drool") affected_mob.emote("drool")
if(prob(10) && affected_mob.brainloss<=98)//shouldn't retard you to death now if(prob(10) && affected_mob.getBrainLoss()<=98)//shouldn't retard you to death now
affected_mob.brainloss += 2 affected_mob.adjustBrainLoss(2)
affected_mob.updatehealth() affected_mob.updatehealth()
if(prob(2)) if(prob(2))
affected_mob << "\red Your try to remember something important...but can't." affected_mob << "\red Your try to remember something important...but can't."
@@ -50,8 +50,8 @@
affected_mob.updatehealth() affected_mob.updatehealth()
if(prob(2)) if(prob(2))
affected_mob << "\red Your head hurts." */ affected_mob << "\red Your head hurts." */
if(prob(15) && affected_mob.brainloss<=98) //shouldn't retard you to death now if(prob(15) && affected_mob.getBrainLoss()<=98) //shouldn't retard you to death now
affected_mob.brainloss +=3 affected_mob.adjustBrainLoss(3)
affected_mob.updatehealth() affected_mob.updatehealth()
if(prob(2)) if(prob(2))
affected_mob << "\red Strange buzzing fills your head, removing all thoughts." affected_mob << "\red Strange buzzing fills your head, removing all thoughts."

View File

@@ -14,11 +14,13 @@
..() ..()
switch(stage) switch(stage)
if(2) if(2)
if(affected_mob.sleeping && prob(40)) /*
if(affected_mob.sleeping && prob(40)) //removed until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
if(affected_mob.lying && prob(10)) */
if(affected_mob.lying && prob(40)) //changed FROM prob(10) until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
@@ -35,11 +37,13 @@
if(prob(1)) if(prob(1))
affected_mob << "\red Mucus runs down the back of your throat." affected_mob << "\red Mucus runs down the back of your throat."
if(3) if(3)
if(affected_mob.sleeping && prob(25)) /*
if(affected_mob.sleeping && prob(25)) //removed until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
if(affected_mob.lying && prob(5)) */
if(affected_mob.lying && prob(25)) //changed FROM prob(5) until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return

View File

@@ -15,7 +15,13 @@
..() ..()
switch(stage) switch(stage)
if(2) if(2)
if(affected_mob.sleeping && prob(20)) /*
if(affected_mob.sleeping && prob(20)) //removed until sleeping is fixed --Blaank
affected_mob << "\blue You feel better."
stage--
return
*/
if(affected_mob.lying && prob(20)) //added until sleeping is fixed --Blaank
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
stage-- stage--
return return
@@ -34,7 +40,13 @@
affected_mob.updatehealth() affected_mob.updatehealth()
if(3) if(3)
if(affected_mob.sleeping && prob(15)) /*
if(affected_mob.sleeping && prob(15)) //removed until sleeping is fixed
affected_mob << "\blue You feel better."
stage--
return
*/
if(affected_mob.lying && prob(15)) //added until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
stage-- stage--
return return
@@ -51,9 +63,4 @@
if(prob(20)) if(prob(20))
affected_mob.adjustToxLoss(1) affected_mob.adjustToxLoss(1)
affected_mob.updatehealth() affected_mob.updatehealth()
if(prob(25))
affected_mob << "\red The world around you feels surreal"
if(prob(50))
affected_mob.hallucination += 100
shake_camera(affected_mob,20)
return return

View File

@@ -30,11 +30,13 @@
switch(stage) switch(stage)
if(1) if(1)
if(restcure) if(restcure)
if(affected_mob.sleeping && prob(30)) /*
if(affected_mob.sleeping && prob(30)) //removed until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
if(affected_mob.lying && prob(20)) */
if(affected_mob.lying && prob(30)) //changed FROM prob(20) until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
@@ -46,11 +48,13 @@
affected_mob << "\red You feel angry." affected_mob << "\red You feel angry."
if(2) if(2)
if(restcure) if(restcure)
if(affected_mob.sleeping && prob(20)) /*
if(affected_mob.sleeping && prob(20)) //removed until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
if(affected_mob.lying && prob(10)) */
if(affected_mob.lying && prob(20)) //changed FROM prob(10) until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
@@ -65,11 +69,13 @@
affected_mob << "\red Your stomach churns." affected_mob << "\red Your stomach churns."
if(3) if(3)
if(restcure) if(restcure)
if(affected_mob.sleeping && prob(20)) /*
if(affected_mob.sleeping && prob(20)) //removed until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
if(affected_mob.lying && prob(10)) */
if(affected_mob.lying && prob(20)) //changed FROM prob(10) until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
@@ -84,11 +90,13 @@
if(4) if(4)
if(restcure) if(restcure)
if(affected_mob.sleeping && prob(10)) /*
if(affected_mob.sleeping && prob(10)) //removed until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return
if(affected_mob.lying && prob(5)) */
if(affected_mob.lying && prob(5)) //changed FROM prob(5) until sleeping is fixed
affected_mob << "\blue You feel better." affected_mob << "\blue You feel better."
cure() cure()
return return

View File

@@ -20,7 +20,7 @@ datum/shuttle_controller
fake_recall = 0 //Used in rounds to prevent "ON NOES, IT MUST [INSERT ROUND] BECAUSE SHUTTLE CAN'T BE CALLED" fake_recall = 0 //Used in rounds to prevent "ON NOES, IT MUST [INSERT ROUND] BECAUSE SHUTTLE CAN'T BE CALLED"
deny_shuttle = 0 //for admins not allowing it to be called. deny_shuttle = 0 //for admins not allowing it to be called.
departed = 0 departed = 0
sound_siren = 1 //if siren should go off
// call the shuttle // call the shuttle
// if not called before, set the endtime to T+600 seconds // if not called before, set the endtime to T+600 seconds
// otherwise if outgoing, switch to incoming // otherwise if outgoing, switch to incoming
@@ -34,6 +34,13 @@ datum/shuttle_controller
else else
settimeleft(SHUTTLEARRIVETIME*coeff) settimeleft(SHUTTLEARRIVETIME*coeff)
online = 1 online = 1
//turning on the red lights in hallways and siren
for(var/area/A in world)
if(istype(A, /area/hallway))
A.readyalert()
sound_siren = 1
proc/recall() proc/recall()
if(direction == 1) if(direction == 1)
@@ -45,6 +52,11 @@ datum/shuttle_controller
world << sound('shuttlerecalled.ogg') world << sound('shuttlerecalled.ogg')
setdirection(-1) setdirection(-1)
online = 1 online = 1
//turning off the red lights in hallways and siren
for(var/area/A in world)
if(istype(A, /area/hallway))
A.readyreset()
sound_siren = 0
// returns the time (in seconds) before shuttle arrival // returns the time (in seconds) before shuttle arrival
@@ -83,6 +95,11 @@ datum/shuttle_controller
var/timeleft = timeleft() var/timeleft = timeleft()
if(timeleft > 1e5) // midnight rollover protection if(timeleft > 1e5) // midnight rollover protection
timeleft = 0 timeleft = 0
if (sound_siren && (direction == 1)) //playing siren every 90 seconds
sound_siren = 0
world << sound('siren.ogg')
spawn(900)
sound_siren = 1
switch(location) switch(location)
if(0) if(0)
if(timeleft>timelimit) if(timeleft>timelimit)

View File

@@ -28,7 +28,11 @@
return null return null
proc/return_air() proc/return_air()
return null if(loc)
return loc.return_air()
else
return null
// Convenience proc to see if a container is open for chemistry handling // Convenience proc to see if a container is open for chemistry handling

View File

@@ -14,3 +14,8 @@
var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie
var/has_fine_manipulation = 0 var/has_fine_manipulation = 0
var/move_delay_add = 0 // movement delay to add
canstun = 0
canweaken = 0 // aliens cannot be stunned or knocked down. Massive buff!

View File

@@ -19,6 +19,11 @@
see_in_dark = 8 see_in_dark = 8
// canstun and canweaken don't affect metroids because they ignore stun and weakened variables
// for the sake of cleanliness, though, here they are.
canstun = 0
canweaken = 0
var/amount_grown = 0// controls how long the metroid has been overfed, if 10, grows into an adult var/amount_grown = 0// controls how long the metroid has been overfed, if 10, grows into an adult
// if adult: if 10: reproduces // if adult: if 10: reproduces
var/powerlevel = 0 // 1-10 controls how much electricity they are generating var/powerlevel = 0 // 1-10 controls how much electricity they are generating

View File

@@ -10,8 +10,8 @@
var/welded = 0 var/welded = 0
var/wall_mounted = 0 //never solid (You can always pass over it) var/wall_mounted = 0 //never solid (You can always pass over it)
flags = FPRINT flags = FPRINT
var/health = 100 //Might be a bit much, dono can always change later //Nerfed -Pete var/health = 100
var/lastbang // var/lastbang
var/lasttry = 0 var/lasttry = 0
layer = 2.98 layer = 2.98
@@ -79,202 +79,6 @@
density = 0 density = 0
wall_mounted = 1 wall_mounted = 1
/obj/structure/closet/fireaxecabinet
name = "Fire Axe Cabinet"
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe."
var/obj/item/weapon/fireaxe/fireaxe = new/obj/item/weapon/fireaxe
icon_state = "fireaxe1000"
icon_closed = "fireaxe1000"
icon_opened = "fireaxe1100"
anchored = 1
density = 0
var/localopened = 0 //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri
opened = 1
var/hitstaken = 0
var/locked = 1
var/smashed = 0
attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
//..() //That's very useful, Erro
var/hasaxe = 0 //gonna come in handy later~
if(fireaxe)
hasaxe = 1
if (isrobot(usr) || src.locked)
if(istype(O, /obj/item/device/multitool))
user << "\red Resetting circuitry..."
playsound(user, 'lockreset.ogg', 50, 1)
sleep(50) // Sleeping time~
src.locked = 0
user << "\blue You disable the locking modules."
update_icon()
return
if(istype(O, /obj/item/weapon))
var/obj/item/weapon/W = O
if(src.smashed)
return
else
playsound(user, 'Glasshit.ogg', 100, 1) //We don't want this playing every time
if(W.force < 15)
user << "\blue The cabinet's protective glass glances off the hit."
else
src.hitstaken++
if(src.hitstaken == 4)
playsound(user, 'Glassbr3.ogg', 100, 1) //Break cabinet, receive goodies. Cabinet's fucked for life after that.
src.smashed = 1
src.locked = 0
src.localopened = 1
update_icon()
return
if (istype(O, /obj/item/weapon/fireaxe) && src.localopened)
if(!fireaxe)
if(O.wielded)
user << "\red Unwield the axe first."
return
fireaxe = O
user.drop_item(O)
src.contents += O
user << "\blue You place the fire axe back in the [src.name]."
update_icon()
else
if(src.smashed)
return
else
localopened = !localopened
if(localopened)
icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
if(src.smashed)
return
if(istype(O, /obj/item/device/multitool))
if(localopened)
localopened = 0
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
return
else
user << "\red Resetting circuitry..."
sleep(50)
src.locked = 1
user << "\blue You re-enable the locking modules."
playsound(user, 'lockenable.ogg', 50, 1)
return
else
localopened = !localopened
if(localopened)
icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
attack_hand(mob/user as mob)
var/hasaxe = 0
if(fireaxe)
hasaxe = 1
if(src.locked)
user <<"\red The cabinet won't budge!"
return
if(localopened)
if(fireaxe)
user.put_in_hand(fireaxe)
fireaxe = null
user << "\blue You take the fire axe from the [name]."
src.add_fingerprint(user)
update_icon()
else
if(src.smashed)
return
else
localopened = !localopened
if(localopened)
src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
localopened = !localopened //I'm pretty sure we don't need an if(src.smashed) in here. In case I'm wrong and it fucks up teh cabinet, **MARKER**. -Agouri
if(localopened)
src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri
set name = "Open/Close"
set category = "Object"
if (isrobot(usr) || src.locked || src.smashed)
if(src.locked)
usr << "\red The cabinet won't budge!"
else if(src.smashed)
usr << "\blue The protective glass is broken!"
return
localopened = !localopened
update_icon()
verb/remove_fire_axe()
set name = "Remove Fire Axe"
set category = "Object"
if (isrobot(usr))
return
if (localopened)
if(fireaxe)
usr.put_in_hand(fireaxe)
fireaxe = null
usr << "\blue You take the Fire axe from the [name]."
else
usr << "\blue The [src.name] is empty."
else
usr << "\blue The [src.name] is closed."
update_icon()
attack_paw(mob/user as mob)
attack_hand(user)
return
attack_ai(mob/user as mob)
if(src.smashed)
user << "\red The security of the cabinet is compromised."
return
else
locked = !locked
if(locked)
user << "\red Cabinet locked."
else
user << "\blue Cabinet unlocked."
return
update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers
var/hasaxe = 0
if(fireaxe)
hasaxe = 1
icon_state = text("fireaxe[][][][]",hasaxe,src.localopened,src.hitstaken,src.smashed)
open()
return
close()
return
/obj/structure/closet/toolcloset /obj/structure/closet/toolcloset
name = "Tool Closet" name = "Tool Closet"
desc = "A bulky (yet mobile) closet. Contains tools." desc = "A bulky (yet mobile) closet. Contains tools."
@@ -374,93 +178,6 @@
// Inserting the gimmick clothing stuff here for generic items, IE Tacticool stuff // Inserting the gimmick clothing stuff here for generic items, IE Tacticool stuff
/obj/structure/closet/extinguisher
name = "Extinguisher closet"
desc = "A small wall mounted cabinet designed to hold a fire extinguisher."
icon_state = "extinguisher10"
icon_opened = "extinguisher11"
icon_closed = "extinguisher10"
opened = 1
anchored = 1
density = 0
var/obj/item/weapon/extinguisher/EXTINGUISHER = new/obj/item/weapon/extinguisher
var/localopened = 1
open()
return
close()
return
attackby(var/obj/item/O as obj, var/mob/user as mob)
if (isrobot(usr))
return
if (istype(O, /obj/item/weapon/extinguisher))
if(!EXTINGUISHER)
user.drop_item(O)
src.contents += O
EXTINGUISHER = O
user << "\blue You place the extinguisher in the [src.name]."
else
localopened = !localopened
else
localopened = !localopened
update_icon()
attack_hand(mob/user as mob)
if(localopened)
if(EXTINGUISHER)
user.put_in_hand(EXTINGUISHER)
EXTINGUISHER = null
user << "\blue You take the extinguisher from the [name]."
else
localopened = !localopened
else
localopened = !localopened
update_icon()
verb/toggle_openness() //nice name, huh? HUH?!
set name = "Open/Close"
set category = "Object"
if (isrobot(usr))
return
localopened = !localopened
update_icon()
verb/remove_extinguisher()
set name = "Remove Extinguisher"
set category = "Object"
if (isrobot(usr))
return
if (localopened)
if(EXTINGUISHER)
usr.put_in_hand(EXTINGUISHER)
EXTINGUISHER = null
usr << "\blue You take the extinguisher from the [name]."
else
usr << "\blue The [name] is empty."
else
usr << "\blue The [name] is closed."
update_icon()
attack_paw(mob/user as mob)
attack_hand(user)
return
attack_ai(mob/user as mob)
return
update_icon()
var/hasextinguisher = 0
if(EXTINGUISHER)
hasextinguisher = 1
icon_state = text("extinguisher[][]",hasextinguisher,src.localopened)
/obj/structure/closet/gimmick /obj/structure/closet/gimmick
name = "Administrative Supply Closet" name = "Administrative Supply Closet"
@@ -780,6 +497,9 @@
icon_off = "fridge1" icon_off = "fridge1"
req_access = list(access_heads_vault) req_access = list(access_heads_vault)
/obj/structure/closet/secure_closet/personal/patient
name = "patient's closet"
/obj/structure/closet/secure_closet/wall /obj/structure/closet/secure_closet/wall
name = "wall locker" name = "wall locker"
req_access = list(access_security) req_access = list(access_security)

View File

@@ -114,7 +114,7 @@
/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch /obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch
name = "Master Air Control" name = "Master Air Control"
desc = "Emergancy global overrides for the entire atmospherics system."
/obj/machinery/computer/dna /obj/machinery/computer/dna
name = "DNA operations computer" name = "DNA operations computer"

View File

@@ -27,7 +27,6 @@
var/g_amount = 0.0 var/g_amount = 0.0
var/operating = 0.0 var/operating = 0.0
var/opened = 0.0 var/opened = 0.0
//var/temp = null
anchored = 1.0 anchored = 1.0
var/list/L = list() var/list/L = list()
var/list/LL = list() var/list/LL = list()

View File

@@ -562,7 +562,7 @@
contains = list("/obj/item/weapon/book/manual/ripley_build_and_repair", contains = list("/obj/item/weapon/book/manual/ripley_build_and_repair",
"/obj/item/weapon/circuitboard/mecha/ripley/main", //TEMPORARY due to lack of circuitboard printer "/obj/item/weapon/circuitboard/mecha/ripley/main", //TEMPORARY due to lack of circuitboard printer
"/obj/item/weapon/circuitboard/mecha/ripley/peripherals") //TEMPORARY due to lack of circuitboard printer "/obj/item/weapon/circuitboard/mecha/ripley/peripherals") //TEMPORARY due to lack of circuitboard printer
cost = 40 cost = 30
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "APLU \"Ripley\" Circuit Crate" containername = "APLU \"Ripley\" Circuit Crate"
access = access_robotics access = access_robotics
@@ -584,6 +584,18 @@
access = access_medical access = access_medical
group = "Medical / Science" group = "Medical / Science"
/datum/supply_packs/mecha_odysseus
name = "Circuit Crate (\"Odysseus\")"
contains = list(
"/obj/item/weapon/circuitboard/mecha/odysseus/peripherals", //TEMPORARY due to lack of circuitboard printer
"/obj/item/weapon/circuitboard/mecha/odysseus/main" //TEMPORARY due to lack of circuitboard printer
)
cost = 25
containertype = "/obj/structure/closet/crate/secure"
containername = "\"Odysseus\" Circuit Crate"
access = access_robotics
group = "Robotics"
/datum/supply_packs/robotics /datum/supply_packs/robotics
name = "Robotics Assembly Crate" name = "Robotics Assembly Crate"
contains = list("/obj/item/device/assembly/prox_sensor", contains = list("/obj/item/device/assembly/prox_sensor",

View File

@@ -50,8 +50,6 @@
/atom/proc/attack_metroid(mob/user as mob) /atom/proc/attack_metroid(mob/user as mob)
return return
/atom/proc/hand_h(mob/user as mob) //human (hand) - restrained /atom/proc/hand_h(mob/user as mob) //human (hand) - restrained
return return
@@ -88,6 +86,30 @@
O << text("\red <B>[] has been hit by [] with []</B>", src, user, W) O << text("\red <B>[] has been hit by [] with []</B>", src, user, W)
return return
/atom/proc/add_hiddenprint(mob/living/M as mob)
if(isnull(M)) return
if(isnull(M.key)) return
if (!( src.flags ) & 256)
return
if (ishuman(M))
var/mob/living/carbon/human/H = M
if (!istype(H.dna, /datum/dna))
return 0
if (H.gloves)
if(src.fingerprintslast != H.key)
src.fingerprintshidden += text("\[[time_stamp()]\] (Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
src.fingerprintslast = H.key
return 0
if (!( src.fingerprints ))
if(src.fingerprintslast != H.key)
src.fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []",H.real_name, H.key)
src.fingerprintslast = H.key
return 1
else
if(src.fingerprintslast != M.key)
src.fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []",M.real_name, M.key)
src.fingerprintslast = M.key
return
/atom/proc/add_fingerprint(mob/living/M as mob) /atom/proc/add_fingerprint(mob/living/M as mob)
if(isnull(M)) return if(isnull(M)) return

View File

@@ -886,9 +886,9 @@
if (src.connected) //Is something connected? if (src.connected) //Is something connected?
var/mob/occupant = src.connected.occupant var/mob/occupant = src.connected.occupant
dat = "<font color='blue'><B>Occupant Statistics:</B></FONT><BR>" //Blah obvious dat = "<font color='blue'><B>Occupant Statistics:</B></FONT><BR>" //Blah obvious
if (occupant) //is there REALLY someone in there? if(occupant && occupant.dna) //is there REALLY someone in there?
if(occupant.mutations & HUSK) if(occupant.mutations2 & NOCLONE)
dat += "The occupant's DNA structure is of an unknown configuration, please insert a subject with a standard DNA structure.<BR><BR>" //NOPE. -Pete dat += "The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure.<BR><BR>" //NOPE. -Pete
dat += text("<A href='?src=\ref[];buffermenu=1'>View/Edit/Transfer Buffer</A><BR><BR>", src) dat += text("<A href='?src=\ref[];buffermenu=1'>View/Edit/Transfer Buffer</A><BR><BR>", src)
dat += text("<A href='?src=\ref[];radset=1'>Radiation Emitter Settings</A><BR><BR>", src) dat += text("<A href='?src=\ref[];radset=1'>Radiation Emitter Settings</A><BR><BR>", src)
else else

View File

@@ -42,7 +42,7 @@ var
message_admins("Blob spawned and expanding, report created") message_admins("Blob spawned and expanding, report created")
if(ticker && ticker.minds && ticker.minds.len) if(ticker && ticker.minds && ticker.minds.len)
var/player_based_cores = round(ticker.minds.len, players_per_core) var/player_based_cores = round(ticker.minds.len/players_per_core, 1)
if(player_based_cores > cores_to_spawn) if(player_based_cores > cores_to_spawn)
cores_to_spawn = player_based_cores cores_to_spawn = player_based_cores
@@ -73,7 +73,7 @@ var
if(!blobs.len) return if(!blobs.len) return
expanding = 1 expanding = 1
for(var/i = 1 to 10) for(var/i = 1 to 5)
sleep(-1) sleep(-1)
if(!blobs.len) break if(!blobs.len) break
var/obj/effect/blob/B = pick(blobs) var/obj/effect/blob/B = pick(blobs)
@@ -98,8 +98,8 @@ var
aiPlayer << "Laws Updated: [law]" aiPlayer << "Laws Updated: [law]"
stage = -1 stage = -1
// next stage 1-4 minutes later // next stage 1 minute later
spawn(600*rand(1,4)) spawn(600)
stage = 1 stage = 1
return return

View File

@@ -273,7 +273,7 @@
if (!disk_rescued && station_was_nuked && !herp) if (!disk_rescued && station_was_nuked && !herp)
feedback_set_details("round_end_result","win - syndicate nuke") feedback_set_details("round_end_result","win - syndicate nuke")
world << "<FONT size = 3><B>Syndicate Victory!</B></FONT>" world << "<FONT size = 3><B>Syndicate Major Victory!</B></FONT>"
world << "<B>[syndicate_name()] operatives have destroyed [station_name()]!</B>" world << "<B>[syndicate_name()] operatives have destroyed [station_name()]!</B>"
else if (!disk_rescued && station_was_nuked && herp) else if (!disk_rescued && station_was_nuked && herp)
@@ -283,7 +283,7 @@
else if (!disk_rescued && !station_was_nuked && derp && !herp) else if (!disk_rescued && !station_was_nuked && derp && !herp)
feedback_set_details("round_end_result","halfwin - blew wrong station") feedback_set_details("round_end_result","halfwin - blew wrong station")
world << "<FONT size = 3><B>Neutral Victory</B></FONT>" world << "<FONT size = 3><B>Crew Minor Victory</B></FONT>"
world << "<B>[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()].</B> Next time, don't lose the disk!" world << "<B>[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()].</B> Next time, don't lose the disk!"
else if (!disk_rescued && !station_was_nuked && derp && herp) else if (!disk_rescued && !station_was_nuked && derp && herp)
@@ -291,19 +291,24 @@
world << "<FONT size = 3><B>[syndicate_name()] operatives have earned Darwin Award!</B></FONT>" world << "<FONT size = 3><B>[syndicate_name()] operatives have earned Darwin Award!</B></FONT>"
world << "<B>[syndicate_name()] operatives blew up something that wasn't [station_name()] and got caught in the explosion.</B> Next time, don't lose the disk!" world << "<B>[syndicate_name()] operatives blew up something that wasn't [station_name()] and got caught in the explosion.</B> Next time, don't lose the disk!"
else if ( disk_rescued && is_operatives_are_dead())
feedback_set_details("round_end_result","loss - evacuation - disk secured - syndi team dead")
world << "<FONT size = 3><B>Crew Major Victory!</B></FONT>"
world << "<B>The Research Staff has saved the disc and killed the [syndicate_name()] Operatives</B>"
else if ( disk_rescued ) else if ( disk_rescued )
feedback_set_details("round_end_result","loss - evacuation - disk secured") feedback_set_details("round_end_result","loss - evacuation - disk secured")
world << "<FONT size = 3><B>Crew Victory</B></FONT>" world << "<FONT size = 3><B>Crew Major Victory</B></FONT>"
world << "<B>The Research Staff has saved the disc and stopped the [syndicate_name()] Operatives!</B>" world << "<B>The Research Staff has saved the disc and stopped the [syndicate_name()] Operatives!</B>"
else if (!disk_rescued && is_operatives_are_dead()) else if (!disk_rescued && is_operatives_are_dead())
feedback_set_details("round_end_result","loss - evacuation - disk not secured") feedback_set_details("round_end_result","loss - evacuation - disk not secured")
world << "<FONT size = 3><B>Crew Victory</B></FONT>" world << "<FONT size = 3><B>Syndicate Minor Victory!</B></FONT>"
world << "<B>The Research Staff has stopped the [syndicate_name()] Operatives!</B>" world << "<B>The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name()] Operatives!</B>"
else if (!disk_rescued && crew_evacuated) else if (!disk_rescued && crew_evacuated)
feedback_set_details("round_end_result","halfwin - detonation averted") feedback_set_details("round_end_result","halfwin - detonation averted")
world << "<FONT size = 3><B>Neutral Victory</B></FONT>" world << "<FONT size = 3><B>Syndicate Minor Victory!</B></FONT>"
world << "<B>[syndicate_name()] operatives recovered the abandoned authentication disk but detonation of [station_name()] was averted.</B> Next time, don't lose the disk!" world << "<B>[syndicate_name()] operatives recovered the abandoned authentication disk but detonation of [station_name()] was averted.</B> Next time, don't lose the disk!"
else if (!disk_rescued && !crew_evacuated) else if (!disk_rescued && !crew_evacuated)

View File

@@ -6,10 +6,10 @@
desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power." desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power."
w_class = 1.0 w_class = 1.0
flags = FPRINT | TABLEPASS | ONBELT flags = FPRINT | TABLEPASS | ONBELT
var/flush = null
origin_tech = "bluespace=4;materials=4" origin_tech = "bluespace=4;materials=4"
var/imprinted = "empty"
//////////////////////////////Capturing////////////////////////////////////////////////////////
attack(mob/living/carbon/human/M as mob, mob/user as mob) attack(mob/living/carbon/human/M as mob, mob/user as mob)
if(!istype(M, /mob/living/carbon/human))//If target is not a human. if(!istype(M, /mob/living/carbon/human))//If target is not a human.
@@ -22,14 +22,25 @@
transfer_soul("VICTIM", M, user) transfer_soul("VICTIM", M, user)
return return
/*attack(mob/living/simple_animal/shade/M as mob, mob/user as mob)//APPARENTLY THEY NEED THEIR OWN SPECIAL SNOWFLAKE CODE IN THE LIVING ANIMAL DEFINES
if(!istype(M, /mob/living/simple_animal/shade))//If target is not a shade
return ..()
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>")
transfer_soul("SHADE", M, user)
return*/
///////////////////Options for using captured souls///////////////////////////////////////
attack_self(mob/user) attack_self(mob/user)
if (!in_range(src, user)) if (!in_range(src, user))
return return
user.machine = src user.machine = src
var/dat = "<TT><B>Soul Stone</B><BR>" var/dat = "<TT><B>Soul Stone</B><BR>"
for(var/mob/living/carbon/human/A in src) for(var/mob/living/simple_animal/shade/A in src)
dat += "Captured Soul: [A.name]<br>" dat += "Captured Soul: [A.name]<br>"
dat += {"<A href='byond://?src=\ref[src];choice=Summon'>Summon Shade</A>"}
dat += "<br>"
dat += {"<a href='byond://?src=\ref[src];choice=Close'> Close</a>"}
user << browse(dat, "window=aicard") user << browse(dat, "window=aicard")
onclose(user, "aicard") onclose(user, "aicard")
return return
@@ -37,46 +48,97 @@
Topic(href, href_list)
var/mob/U = usr
if (!in_range(src, U)||U.machine!=src)
U << browse(null, "window=aicard")
U.machine = null
return
add_fingerprint(U)
U.machine = src
switch(href_list["choice"])//Now we switch based on choice.
if ("Close")
U << browse(null, "window=aicard")
U.machine = null
return
if ("Summon")
for(var/mob/living/simple_animal/shade/A in src)
A.nodamage = 0
A.canmove = 1
A << "<b>You have been released from your prison, but you are still bound to [U.name]'s will. Help them suceed in their goals at all costs.</b>"
A.loc = U.loc
A.cancel_camera()
src.icon_state = "soulstone"
attack_self(U)
////////////////////////////Proc for moving soul in and out off stone//////////////////////////////////////
/obj/item/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob). /obj/item/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob).
switch(choice) switch(choice)
if("VICTIM") if("VICTIM")
var/mob/living/carbon/human/T = target var/mob/living/carbon/human/T = target
var/obj/item/device/soulstone/C = src var/obj/item/device/soulstone/C = src
if (T.stat == 0) if(C.imprinted != "empty")
U << "\red <b>Capture failed!</b>: \black Kill or maim the victim first!" U << "\red <b>Capture failed!</b>: \black The soul stone has already been imprinted with [C.imprinted]'s mind!"
else else
if(T.ckey == null) if (T.stat == 0)
U << "\red <b>Capture failed!</b>: \black The soul has already fled it's mortal frame." U << "\red <b>Capture failed!</b>: \black Kill or maim the victim first!"
else else
if(C.contents.len) if(T.client == null)
U << "\red <b>Capture failed!</b>: \black The soul stone is full! Use or free an existing soul to make room." U << "\red <b>Capture failed!</b>: \black The soul has already fled it's mortal frame."
else else
for(var/obj/item/W in T) if(C.contents.len)
T.drop_from_slot(W) U << "\red <b>Capture failed!</b>: \black The soul stone is full! Use or free an existing soul to make room."
new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton else
T.invisibility = 101 for(var/obj/item/W in T)
var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc ) T.drop_from_slot(W)
animation.icon_state = "blank" new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
animation.icon = 'mob.dmi' T.invisibility = 101
animation.master = T var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc )
flick("dust-h", animation) animation.icon_state = "blank"
del(animation) animation.icon = 'mob.dmi'
T.nodamage = 1 //So they won't suffocate inside the stone animation.master = T
T.canmove = 0//Can't move out of the soul stone flick("dust-h", animation)
T.loc = C//Throw "soul" into the stone. del(animation)
T.stat = 0//Revive the victim as a "soul" var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade( T.loc )
T.mutantrace = "trappedsoul" //To prevent suicide/maybe some other special effects later on S.loc = C //put shade in stone
T.setToxLoss(0) S.nodamage = 1 //So they won't die inside the stone somehow
T.setOxyLoss(0) S.canmove = 0//Can't move out of the soul stone
T.setCloneLoss(0) S.name = "Shade of [T.name]"
T.SetParalysis(0) if (T.client)
T.SetStunned(0) T.client.mob = S
T.SetWeakened(0) S.cancel_camera()
T.radiation = 0 C.icon_state = "soulstone2"
T.heal_overall_damage(T.getBruteLoss(), T.getFireLoss()) C.name = "Soul Stone: [S.name]"
T.cancel_camera() S << "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs."
T.nodamage = 1 //So they won't suffocate inside the stone U << "\blue <b>Capture successful!</b>: \black [T.name]'s soul has been ripped from their body and stored within the soul stone."
S << "The soulstone has been imprinted with [S.name]'s mind, it will no longer react to other souls."
C.imprinted = "[S.name]"
del T
if("SHADE")
var/mob/living/simple_animal/shade/T = target
var/obj/item/device/soulstone/C = src
if (T.alive == 0)
U << "\red <b>Capture failed!</b>: \black The shade has already been banished!"
else
if(C.contents.len)
U << "\red <b>Capture failed!</b>: \black The soul stone is full! Use or free an existing soul to make room."
else
if(T.name != C.imprinted)
U << "\red <b>Capture failed!</b>: \black The soul stone has already been imprinted with [C.imprinted]'s mind!"
else
T.loc = C //put shade in stone
T.nodamage = 1
T.canmove = 0
T.health = T.max_health
C.icon_state = "soulstone2" C.icon_state = "soulstone2"
T << "Your soul has been captured!" T << "Your soul has been recaptured by the soul stone, it's arcane energies reknitting your ethereal form"
U << "\blue <b>Capture successful!</b>: \black [T.name]'s soul has been ripped from their body and stored within the soul stone." U << "\blue <b>Capture successful!</b>: \black [T.name]'s has been recaptured and stored within the soul stone."
return return

View File

@@ -28,10 +28,13 @@
dat += "<HR>" dat += "<HR>"
dat += "<B>Artefacts:</B><BR>" dat += "<B>Artefacts:</B><BR>"
dat += "Powerful items imbued with eldritch magics. Summoning one will count towards your maximum number of spells.<BR>" dat += "Powerful items imbued with eldritch magics. Summoning one will count towards your maximum number of spells.<BR>"
dat += "It is recommended that only experienced wizards attempt to wield such artefacts.<BR>"
dat += "<HR>" dat += "<HR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=14'>Staff of Change</A><BR>" dat += "<A href='byond://?src=\ref[src];spell_choice=14'>Staff of Change</A><BR>"
dat += "<HR>" dat += "<HR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=15'>Re-memorize Spells</A><BR>" dat += "<A href='byond://?src=\ref[src];spell_choice=15'>Six Soul Stone Shards</A><BR>"
dat += "<HR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=16'>Re-memorize Spells</A><BR>"
user << browse(dat, "window=radio") user << browse(dat, "window=radio")
onclose(user, "radio") onclose(user, "radio")
return return
@@ -106,6 +109,10 @@
new /obj/item/weapon/gun/energy/staff(get_turf(usr)) new /obj/item/weapon/gun/energy/staff(get_turf(usr))
src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
src.max_uses-- src.max_uses--
if ("15")
new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr))
src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying"
src.max_uses--
else if(spell_type == "object") else if(spell_type == "object")
var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock") var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock")
var/already_knows = 0 var/already_knows = 0
@@ -160,7 +167,11 @@
new /obj/item/weapon/gun/energy/staff(get_turf(usr)) new /obj/item/weapon/gun/energy/staff(get_turf(usr))
src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
src.max_uses-- src.max_uses--
if (href_list["spell_choice"] == "15") if ("15")
new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr))
src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying"
src.max_uses--
if (href_list["spell_choice"] == "16")
var/area/wizard_station/A = locate() var/area/wizard_station/A = locate()
if(usr in A.contents) if(usr in A.contents)
src.uses = src.max_uses src.uses = src.max_uses

View File

@@ -69,7 +69,7 @@
while(!accepted) while(!accepted)
if(!B) break // prevents possible runtime errors if(!B) break // prevents possible runtime errors
switch(input(H,"Which bible style would you like?") in list("Bible", "Koran", "Scrapbook", "Daederic Scroll", "Creeper", "White Bible", "Holy Light", "Athiest", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon")) switch(input(H,"Which bible style would you like?") in list("Bible", "Koran", "Scrapbook", "Creeper", "White Bible", "Holy Light", "Athiest", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon"))
if("Koran") if("Koran")
B.icon_state = "koran" B.icon_state = "koran"
B.item_state = "koran" B.item_state = "koran"
@@ -80,9 +80,6 @@
if("Scrapbook") if("Scrapbook")
B.icon_state = "scrapbook" B.icon_state = "scrapbook"
B.item_state = "scrapbook" B.item_state = "scrapbook"
if("Daederic Scroll")
B.icon_state = "daederic_scroll"
B.item_state = "daederic"
if("Creeper") if("Creeper")
B.icon_state = "creeper" B.icon_state = "creeper"
B.item_state = "syringe_kit" B.item_state = "syringe_kit"

View File

@@ -78,6 +78,7 @@
if(!H) return 0 if(!H) return 0
H.equip_if_possible(new /obj/item/device/radio/headset/headset_eng(H), H.slot_ears) H.equip_if_possible(new /obj/item/device/radio/headset/headset_eng(H), H.slot_ears)
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back) H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
H.equip_if_possible(new /obj/item/weapon/storage/box/engineer(H.back), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/clothing/under/rank/atmospheric_technician(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/clothing/under/rank/atmospheric_technician(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes) H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_belt) H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_belt)

View File

@@ -244,7 +244,7 @@
var/amount = max(0.15, 1) var/amount = max(0.15, 1)
M.adjustOxyLoss(-amount) M.adjustOxyLoss(-amount)
else else
M.oxyloss = 0 M.adjustOxyLoss(-12)
M.updatehealth() M.updatehealth()
M.AdjustParalysis(-4) M.AdjustParalysis(-4)
M.AdjustWeakened(-4) M.AdjustWeakened(-4)

View File

@@ -222,7 +222,7 @@
onclose(user, "AAlarmwires") onclose(user, "AAlarmwires")
if(!shorted) if(!shorted)
user << browse(return_text(),"window=air_alarm") user << browse(return_text(user),"window=air_alarm")
onclose(user, "air_alarm") onclose(user, "air_alarm")
refresh_all() refresh_all()
@@ -472,8 +472,8 @@
return 1 return 1
/obj/machinery/alarm/proc/return_text() /obj/machinery/alarm/proc/return_text(mob/user)
if(!(istype(usr, /mob/living/silicon)) && locked) if(!(istype(user, /mob/living/silicon)) && locked)
return "<html><head><title>[src]</title></head><body>[return_status()]<hr><i>(Swipe ID card to unlock interface)</i></body></html>" return "<html><head><title>[src]</title></head><body>[return_status()]<hr><i>(Swipe ID card to unlock interface)</i></body></html>"
else else
return "<html><head><title>[src]</title></head><body>[return_status()]<hr>[return_controls()]</body></html>" return "<html><head><title>[src]</title></head><body>[return_status()]<hr>[return_controls()]</body></html>"

View File

@@ -153,7 +153,7 @@
return 0 return 0
/obj/machinery/portable_atmospherics/canister/blob_act() /obj/machinery/portable_atmospherics/canister/blob_act()
src.health -= 1 src.health -= 200
healthcheck() healthcheck()
return return

View File

@@ -258,6 +258,9 @@
O << "The screen bursts into static." O << "The screen bursts into static."
..() ..()
/obj/machinery/camera/emp_proof/emp_act(severity)
return
/obj/machinery/camera/ex_act(severity) /obj/machinery/camera/ex_act(severity)
if(src.invuln) if(src.invuln)
return return
@@ -356,11 +359,13 @@
O.show_message(text("\red [] has deactivated []!", user, src), 1) O.show_message(text("\red [] has deactivated []!", user, src), 1)
playsound(src.loc, 'Wirecutter.ogg', 100, 1) playsound(src.loc, 'Wirecutter.ogg', 100, 1)
icon_state = "camera1" icon_state = "camera1"
add_hiddenprint(user)
else else
for(var/mob/O in viewers(user, null)) for(var/mob/O in viewers(user, null))
O.show_message(text("\red [] has reactivated []!", user, src), 1) O.show_message(text("\red [] has reactivated []!", user, src), 1)
playsound(src.loc, 'Wirecutter.ogg', 100, 1) playsound(src.loc, 'Wirecutter.ogg', 100, 1)
icon_state = "camera" icon_state = "camera"
add_hiddenprint(user)
// now disconnect anyone using the camera // now disconnect anyone using the camera
//Apparently, this will disconnect anyone even if the camera was re-activated. //Apparently, this will disconnect anyone even if the camera was re-activated.
//I guess that doesn't matter since they can't use it anyway? //I guess that doesn't matter since they can't use it anyway?

View File

@@ -400,9 +400,8 @@
emergency_shuttle.fake_recall = rand(300,500) emergency_shuttle.fake_recall = rand(300,500)
if(ticker.mode.name == "blob") if(ticker.mode.name == "blob")
if(ticker.mode:declared) user << "Under directive 7-10, [station_name()] is quarantined until further notice."
user << "Under directive 7-10, [station_name()] is quarantined until further notice." return
return
emergency_shuttle.incall() emergency_shuttle.incall()
log_game("[key_name(user)] has called the shuttle.") log_game("[key_name(user)] has called the shuttle.")

View File

@@ -348,7 +348,7 @@ obj/item/weapon/circuitboard/rdserver
"/obj/item/weapon/stock_parts/subspace/filter" = 1) "/obj/item/weapon/stock_parts/subspace/filter" = 1)
/obj/item/weapon/circuitboard/telecomms/broadcaster /obj/item/weapon/circuitboard/telecomms/broadcaster
name = "Circuit Board (Bus Mainframe)" name = "Circuit Board (Subspace Broadcaster)"
build_path = "/obj/machinery/telecomms/broadcaster" build_path = "/obj/machinery/telecomms/broadcaster"
board_type = "machine" board_type = "machine"
origin_tech = "programming=4;engineering=4;bluespace=2" origin_tech = "programming=4;engineering=4;bluespace=2"
@@ -361,3 +361,7 @@ obj/item/weapon/circuitboard/rdserver
"/obj/item/weapon/stock_parts/subspace/transmitter" = 1, "/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
"/obj/item/weapon/stock_parts/subspace/amplifier" = 1, "/obj/item/weapon/stock_parts/subspace/amplifier" = 1,
"/obj/item/weapon/stock_parts/micro_laser/high" = 4) "/obj/item/weapon/stock_parts/micro_laser/high" = 4)

View File

@@ -238,6 +238,18 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
doortype = 13 doortype = 13
mining
name = "Mining Airlock"
icon = 'Doormining.dmi'
doortype = 18
atmos
name = "Atmospherics Airlock"
icon = 'Dooratmo.dmi'
doortype = 19
New() New()
..() ..()
if (src.closeOtherId != null) if (src.closeOtherId != null)

View File

@@ -1,3 +1,21 @@
/obj/machinery/door
name = "Door"
desc = "It opens and closes."
icon = 'doorint.dmi'
icon_state = "door1"
opacity = 1
density = 1
layer = 2.7
anchored = 1
var/secondsElectrified = 0
var/visible = 1
var/p_open = 0
var/operating = 0
var/autoclose = 0
var/glass = 0
var/forcecrush = 0
var/holdopen = 0
/obj/machinery/door/Bumped(atom/AM) /obj/machinery/door/Bumped(atom/AM)
if(p_open || operating) return if(p_open || operating) return
if(ismob(AM)) if(ismob(AM))

View File

@@ -1,73 +1,95 @@
/var/const/OPEN = 1 /var/const/OPEN = 1
/var/const/CLOSED = 2 /var/const/CLOSED = 2
/obj/machinery/door/firedoor/Bumped(atom/AM)
if(p_open || operating) /obj/machinery/door/firedoor
return name = "Firelock"
if(!density) desc = "Apply crowbar"
return ..() icon = 'Doorfire.dmi'
else icon_state = "door_open"
var/blocked = 0
opacity = 0
density = 0
var/nextstate = null
Bumped(atom/AM)
if(p_open || operating) return
if(!density) return ..()
return 0 return 0
/obj/machinery/door/firedoor/power_change() power_change()
if( powered(ENVIRON) ) if(powered(ENVIRON))
stat &= ~NOPOWER stat &= ~NOPOWER
else else
stat |= NOPOWER stat |= NOPOWER
return
/obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
src.add_fingerprint(user) attackby(obj/item/weapon/C as obj, mob/user as mob)
if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density)) src.add_fingerprint(user)
var/obj/item/weapon/weldingtool/W = C if(operating) return//Already doing something.
if(W.remove_fuel(0, user)) if(istype(C, /obj/item/weapon/weldingtool))
src.blocked = !src.blocked var/obj/item/weapon/weldingtool/W = C
user << text("\red You [blocked?"welded":"unwelded"] the [src]") if(W.remove_fuel(0, user))
update_icon() src.blocked = !src.blocked
return user << text("\red You [blocked?"welded":"unwelded"] the [src]")
if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/fireaxe) && C.wielded == 1) ) update_icon()
if (!src.blocked && !src.operating) return
if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/fireaxe) && C.wielded == 1))
if(blocked || operating) return
if(src.density) if(src.density)
spawn( 0 ) spawn(0)
src.operating = 1 open()
animate("opening")
sleep(15)
layer = 2.7
src.density = 0
update_icon()
src.sd_SetOpacity(0)
src.operating = 0
return return
else //close it up again else //close it up again
spawn( 0 ) spawn(0)
src.operating = 1 close()
animate("closing")
src.density = 1
layer = 3.1
sleep(15)
update_icon()
src.sd_SetOpacity(1)
src.operating = 0
return return
return
/obj/machinery/door/firedoor/process()
if(src.operating)
return return
if(src.nextstate)
if(src.nextstate == OPEN && src.density)
spawn()
src.open()
else if(src.nextstate == CLOSED && !src.density)
spawn()
src.close()
src.nextstate = null
process()
if(operating || stat & NOPOWER || !nextstate) return
switch(nextstate)
if(OPEN)
spawn()
open()
if(CLOSED)
spawn()
close()
nextstate = null
return
animate(animation)
switch(animation)
if("opening")
flick("door_opening", src)
if("closing")
flick("door_closing", src)
return
update_icon()
overlays = null
if(density)
icon_state = "door_closed"
if(blocked)
overlays += "welded"
else
icon_state = "door_open"
if(blocked)
overlays += "welded_open"
return
//border_only fire doors are special when it comes to air groups
/obj/machinery/door/firedoor/border_only /obj/machinery/door/firedoor/border_only
CanPass(atom/movable/mover, turf/target, height=0, air_group=0) CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group) if(air_group)
var/direction = get_dir(src,target) var/direction = get_dir(src,target)
@@ -78,9 +100,9 @@
return (dir != direction) return (dir != direction)
else else
return 0 return 0
return 1 return 1
update_nearby_tiles(need_rebuild) update_nearby_tiles(need_rebuild)
if(!air_master) return 0 if(!air_master) return 0
@@ -98,9 +120,7 @@
air_master.groups_to_rebuild += destination.parent air_master.groups_to_rebuild += destination.parent
else else
air_master.tiles_to_update += destination air_master.tiles_to_update += destination
else else
if(istype(source)) air_master.tiles_to_update += source if(istype(source)) air_master.tiles_to_update += source
if(istype(destination)) air_master.tiles_to_update += destination if(istype(destination)) air_master.tiles_to_update += destination
return 1 return 1

View File

@@ -1,9 +1,10 @@
//cael - added this for the lockdown computer /obj/machinery/door/poddoor
/obj/machinery/door/poddoor/Topic(href, href_list) name = "Podlock"
if(href_list["close"]) desc = "A type of powerful blast door."
close() icon = 'rapid_pdoor.dmi'
if(href_list["open"]) icon_state = "pdoor1"
open() var/id = 1.0
var/networkTag = ""
/obj/machinery/door/poddoor/Bumped(atom/AM) /obj/machinery/door/poddoor/Bumped(atom/AM)
if(!density) if(!density)
@@ -271,3 +272,106 @@
sleep(10) sleep(10)
src.operating = 0 src.operating = 0
return return
/obj/machinery/door/poddoor/two_tile_hor
var/obj/machinery/door/poddoor/filler_object/f1
var/obj/machinery/door/poddoor/filler_object/f2
icon = '1x2blast_hor.dmi'
New()
..()
f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
f2 = new/obj/machinery/door/poddoor/filler_object (get_step(src,EAST))
f1.density = density
f2.density = density
f1.sd_SetOpacity(opacity)
f2.sd_SetOpacity(opacity)
Del()
del f1
del f2
..()
/obj/machinery/door/poddoor/two_tile_ver
var/obj/machinery/door/poddoor/filler_object/f1
var/obj/machinery/door/poddoor/filler_object/f2
icon = '1x2blast_vert.dmi'
New()
..()
f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
f2 = new/obj/machinery/door/poddoor/filler_object (get_step(src,NORTH))
f1.density = density
f2.density = density
f1.sd_SetOpacity(opacity)
f2.sd_SetOpacity(opacity)
Del()
del f1
del f2
..()
/obj/machinery/door/poddoor/four_tile_hor
var/obj/machinery/door/poddoor/filler_object/f1
var/obj/machinery/door/poddoor/filler_object/f2
var/obj/machinery/door/poddoor/filler_object/f3
var/obj/machinery/door/poddoor/filler_object/f4
icon = '1x4blast_hor.dmi'
New()
..()
f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,EAST))
f3 = new/obj/machinery/door/poddoor/filler_object (get_step(f2,EAST))
f4 = new/obj/machinery/door/poddoor/filler_object (get_step(f3,EAST))
f1.density = density
f2.density = density
f3.density = density
f4.density = density
f1.sd_SetOpacity(opacity)
f2.sd_SetOpacity(opacity)
f4.sd_SetOpacity(opacity)
f3.sd_SetOpacity(opacity)
Del()
del f1
del f2
del f3
del f4
..()
/obj/machinery/door/poddoor/four_tile_ver
var/obj/machinery/door/poddoor/filler_object/f1
var/obj/machinery/door/poddoor/filler_object/f2
var/obj/machinery/door/poddoor/filler_object/f3
var/obj/machinery/door/poddoor/filler_object/f4
icon = '1x4blast_vert.dmi'
New()
..()
f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,NORTH))
f3 = new/obj/machinery/door/poddoor/filler_object (get_step(f2,NORTH))
f4 = new/obj/machinery/door/poddoor/filler_object (get_step(f3,NORTH))
f1.density = density
f2.density = density
f3.density = density
f4.density = density
f1.sd_SetOpacity(opacity)
f2.sd_SetOpacity(opacity)
f4.sd_SetOpacity(opacity)
f3.sd_SetOpacity(opacity)
Del()
del f1
del f2
del f3
del f4
..()
/obj/machinery/door/poddoor/filler_object
name = ""
icon_state = ""

View File

@@ -0,0 +1,24 @@
/obj/machinery/door/unpowered
autoclose = 0
Bumped(atom/AM)
if(src.locked) return
..()
return
attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)) return
if(src.locked) return
..()
return
/obj/machinery/door/unpowered/shuttle
icon = 'shuttle.dmi'
name = "door"
icon_state = "door1"
opacity = 1
density = 1

View File

@@ -1,3 +1,14 @@
/obj/machinery/door/window
name = "interior door"
desc = "A door made from a window, yet it can not break nor be depowered."
icon = 'windoor.dmi'
icon_state = "left"
var/base_state = "left"
visible = 0.0
flags = ON_BORDER
opacity = 0
/obj/machinery/door/window/update_nearby_tiles(need_rebuild) /obj/machinery/door/window/update_nearby_tiles(need_rebuild)
if(!air_master) return 0 if(!air_master) return 0
@@ -148,3 +159,80 @@
else if (src.density) else if (src.density)
flick(text("[]deny", src.base_state), src) flick(text("[]deny", src.base_state), src)
return return
/obj/machinery/door/window/brigdoor
name = "Brig Door"
icon = 'windoor.dmi'
icon_state = "leftsecure"
base_state = "leftsecure"
req_access = list(access_security)
var/id = null
/obj/machinery/door/window/northleft
dir = NORTH
/obj/machinery/door/window/eastleft
dir = EAST
/obj/machinery/door/window/westleft
dir = WEST
/obj/machinery/door/window/southleft
dir = SOUTH
/obj/machinery/door/window/northright
dir = NORTH
icon_state = "right"
base_state = "right"
/obj/machinery/door/window/eastright
dir = EAST
icon_state = "right"
base_state = "right"
/obj/machinery/door/window/westright
dir = WEST
icon_state = "right"
base_state = "right"
/obj/machinery/door/window/southright
dir = SOUTH
icon_state = "right"
base_state = "right"
/obj/machinery/door/window/brigdoor/northleft
dir = NORTH
/obj/machinery/door/window/brigdoor/eastleft
dir = EAST
/obj/machinery/door/window/brigdoor/westleft
dir = WEST
/obj/machinery/door/window/brigdoor/southleft
dir = SOUTH
/obj/machinery/door/window/brigdoor/northright
dir = NORTH
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/eastright
dir = EAST
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/westright
dir = WEST
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/southright
dir = SOUTH
icon_state = "rightsecure"
base_state = "rightsecure"

View File

@@ -13,6 +13,9 @@
verbs += /obj/machinery/sink/proc/mode_pour verbs += /obj/machinery/sink/proc/mode_pour
attack_hand(mob/M as mob) attack_hand(mob/M as mob)
if(isrobot(M) || isAI(M))
return
if(busy) if(busy)
M << "\red Someone's already washing something here." M << "\red Someone's already washing something here."
return return

View File

@@ -72,6 +72,7 @@
dat += "<A href='?src=\ref[src];rune=communicate'>O bidai nabora se'sma!</A> - Allows you to coordinate with others of your cult.<BR>" dat += "<A href='?src=\ref[src];rune=communicate'>O bidai nabora se'sma!</A> - Allows you to coordinate with others of your cult.<BR>"
dat += "<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>" dat += "<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>"
dat += "<A href='?src=\ref[src];rune=armor'>Sa tatha najin</A> - Allows you to summon armoured robes and an unholy blade<BR>" dat += "<A href='?src=\ref[src];rune=armor'>Sa tatha najin</A> - Allows you to summon armoured robes and an unholy blade<BR>"
dat += "<A href='?src=\ref[src];rune=soulstone'>Kal om neth</A> - Summons a soul stone<BR>"
usr << browse(dat, "window=id_com;size=350x200") usr << browse(dat, "window=id_com;size=350x200")
return return
@@ -104,6 +105,8 @@
if("armor") if("armor")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr)) var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "armor" T.imbue = "armor"
if("soulstone")
new /obj/item/device/soulstone(get_turf(usr))
src.uses-- src.uses--
supply() supply()
return return

View File

@@ -79,7 +79,6 @@ datum/controller/game_controller
if(!processing) if(!processing)
return 0 return 0
//world << "Processing"
controllernum = "yes" controllernum = "yes"
spawn (100) controllernum = "no" spawn (100) controllernum = "no"
@@ -114,7 +113,6 @@ datum/controller/game_controller
sleep(1) sleep(1)
for(var/obj/object in processing_objects) for(var/obj/object in processing_objects)
// spawn(0)Still need to test the spawn ticker
object.process() object.process()
for(var/datum/pipe_network/network in pipe_networks) for(var/datum/pipe_network/network in pipe_networks)

View File

@@ -1247,8 +1247,8 @@
if(hasInternalDamage(intdamflag)) if(hasInternalDamage(intdamflag))
output += dam_reports[tflag] output += dam_reports[tflag]
output += "<br />" output += "<br />"
/* if(return_pressure() > WARNING_HIGH_PRESSURE) if(return_pressure() > WARNING_HIGH_PRESSURE)
output += "<font color='red'><b>DANGEROUSLY HIGH CABIN PRESSURE</b></font><br />"*/ output += "<font color='red'><b>DANGEROUSLY HIGH CABIN PRESSURE</b></font><br />"
return output return output
@@ -1257,7 +1257,7 @@
var/cell_charge = get_charge() var/cell_charge = get_charge()
var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None" var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None"
var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown" var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown"
// var/cabin_pressure = round(return_pressure(),0.01) var/cabin_pressure = round(return_pressure(),0.01)
var/output = {"[report_internal_damage()] var/output = {"[report_internal_damage()]
[integrity<30?"<font color='red'><b>DAMAGE LEVEL CRITICAL</b></font><br>":null] [integrity<30?"<font color='red'><b>DAMAGE LEVEL CRITICAL</b></font><br>":null]
<b>Integrity: </b> [integrity]%<br> <b>Integrity: </b> [integrity]%<br>
@@ -1265,6 +1265,7 @@
<b>Air source: </b>[use_internal_tank?"Internal Airtank":"Environment"]<br> <b>Air source: </b>[use_internal_tank?"Internal Airtank":"Environment"]<br>
<b>Airtank pressure: </b>[tank_pressure]kPa<br> <b>Airtank pressure: </b>[tank_pressure]kPa<br>
<b>Airtank temperature: </b>[tank_temperature]&deg;K|[tank_temperature - T0C]&deg;C<br> <b>Airtank temperature: </b>[tank_temperature]&deg;K|[tank_temperature - T0C]&deg;C<br>
<b>Cabin pressure: </b>[cabin_pressure>WARNING_HIGH_PRESSURE ? "<font color='red'>[cabin_pressure]</font>": cabin_pressure]kPa<br>
<b>Cabin temperature: </b> [return_temperature()]&deg;K|[return_temperature() - T0C]&deg;C<br> <b>Cabin temperature: </b> [return_temperature()]&deg;K|[return_temperature() - T0C]&deg;C<br>
<b>Lights: </b>[lights?"on":"off"]<br> <b>Lights: </b>[lights?"on":"off"]<br>
[src.dna?"<b>DNA-locked:</b><br> <span style='font-size:10px;letter-spacing:-1px;'>[src.dna]</span> \[<a href='?src=\ref[src];reset_dna=1'>Reset</a>\]<br>":null] [src.dna?"<b>DNA-locked:</b><br> <span style='font-size:10px;letter-spacing:-1px;'>[src.dna]</span> \[<a href='?src=\ref[src];reset_dna=1'>Reset</a>\]<br>":null]

View File

@@ -0,0 +1,87 @@
/obj/structure/closet/extinguisher
name = "extinguisher closet"
desc = "A small wall mounted cabinet designed to hold a fire extinguisher."
icon_state = "extinguisher10"
icon_opened = "extinguisher11"
icon_closed = "extinguisher10"
opened = 1
anchored = 1
density = 0
var/obj/item/weapon/extinguisher/EXTINGUISHER = new/obj/item/weapon/extinguisher
var/localopened = 1
open()
return
close()
return
attackby(var/obj/item/O as obj, var/mob/user as mob)
if (isrobot(usr))
return
if (istype(O, /obj/item/weapon/extinguisher))
if(!EXTINGUISHER)
user.drop_item(O)
src.contents += O
EXTINGUISHER = O
user << "\blue You place the extinguisher in the [src.name]."
else
localopened = !localopened
else
localopened = !localopened
update_icon()
attack_hand(mob/user as mob)
if(localopened)
if(EXTINGUISHER)
user.put_in_hand(EXTINGUISHER)
EXTINGUISHER = null
user << "\blue You take the extinguisher from the [name]."
else
localopened = !localopened
else
localopened = !localopened
update_icon()
verb/toggle_openness() //nice name, huh? HUH?!
set name = "Open/Close"
set category = "Object"
if (isrobot(usr))
return
localopened = !localopened
update_icon()
verb/remove_extinguisher()
set name = "Remove Extinguisher"
set category = "Object"
if (isrobot(usr))
return
if (localopened)
if(EXTINGUISHER)
usr.put_in_hand(EXTINGUISHER)
EXTINGUISHER = null
usr << "\blue You take the extinguisher from the [name]."
else
usr << "\blue The [name] is empty."
else
usr << "\blue The [name] is closed."
update_icon()
attack_paw(mob/user as mob)
attack_hand(user)
return
attack_ai(mob/user as mob)
return
update_icon()
var/hasextinguisher = 0
if(EXTINGUISHER)
hasextinguisher = 1
icon_state = text("extinguisher[][]",hasextinguisher,src.localopened)

View File

@@ -0,0 +1,198 @@
//I still dont think this should be a closet but whatever
/obj/structure/closet/fireaxecabinet
name = "Fire Axe Cabinet"
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if."
var/obj/item/weapon/fireaxe/fireaxe = new/obj/item/weapon/fireaxe
icon_state = "fireaxe1000"
icon_closed = "fireaxe1000"
icon_opened = "fireaxe1100"
anchored = 1
density = 0
var/localopened = 0 //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri
opened = 1
var/hitstaken = 0
var/locked = 1
var/smashed = 0
attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
//..() //That's very useful, Erro
var/hasaxe = 0 //gonna come in handy later~
if(fireaxe)
hasaxe = 1
if (isrobot(usr) || src.locked)
if(istype(O, /obj/item/device/multitool))
user << "\red Resetting circuitry..."
playsound(user, 'lockreset.ogg', 50, 1)
sleep(50) // Sleeping time~
src.locked = 0
user << "\blue You disable the locking modules."
update_icon()
return
else if(istype(O, /obj/item/weapon))
var/obj/item/weapon/W = O
if(src.smashed || src.localopened)
if(localopened)
localopened = 0
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
return
else
playsound(user, 'Glasshit.ogg', 100, 1) //We don't want this playing every time
if(W.force < 15)
user << "\blue The cabinet's protective glass glances off the hit."
else
src.hitstaken++
if(src.hitstaken == 4)
playsound(user, 'Glassbr3.ogg', 100, 1) //Break cabinet, receive goodies. Cabinet's fucked for life after that.
src.smashed = 1
src.locked = 0
src.localopened = 1
update_icon()
return
if (istype(O, /obj/item/weapon/fireaxe) && src.localopened)
if(!fireaxe)
if(O.wielded)
user << "\red Unwield the axe first."
return
fireaxe = O
user.drop_item(O)
src.contents += O
user << "\blue You place the fire axe back in the [src.name]."
update_icon()
else
if(src.smashed)
return
else
localopened = !localopened
if(localopened)
icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
if(src.smashed)
return
if(istype(O, /obj/item/device/multitool))
if(localopened)
localopened = 0
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
return
else
user << "\red Resetting circuitry..."
sleep(50)
src.locked = 1
user << "\blue You re-enable the locking modules."
playsound(user, 'lockenable.ogg', 50, 1)
return
else
localopened = !localopened
if(localopened)
icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
attack_hand(mob/user as mob)
var/hasaxe = 0
if(fireaxe)
hasaxe = 1
if(src.locked)
user <<"\red The cabinet won't budge!"
return
if(localopened)
if(fireaxe)
user.put_in_hand(fireaxe)
fireaxe = null
user << "\blue You take the fire axe from the [name]."
src.add_fingerprint(user)
update_icon()
else
if(src.smashed)
return
else
localopened = !localopened
if(localopened)
src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
localopened = !localopened //I'm pretty sure we don't need an if(src.smashed) in here. In case I'm wrong and it fucks up teh cabinet, **MARKER**. -Agouri
if(localopened)
src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
else
src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
spawn(10) update_icon()
verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri
set name = "Open/Close"
set category = "Object"
if (isrobot(usr) || src.locked || src.smashed)
if(src.locked)
usr << "\red The cabinet won't budge!"
else if(src.smashed)
usr << "\blue The protective glass is broken!"
return
localopened = !localopened
update_icon()
verb/remove_fire_axe()
set name = "Remove Fire Axe"
set category = "Object"
if (isrobot(usr))
return
if (localopened)
if(fireaxe)
usr.put_in_hand(fireaxe)
fireaxe = null
usr << "\blue You take the Fire axe from the [name]."
else
usr << "\blue The [src.name] is empty."
else
usr << "\blue The [src.name] is closed."
update_icon()
attack_paw(mob/user as mob)
attack_hand(user)
return
attack_ai(mob/user as mob)
if(src.smashed)
user << "\red The security of the cabinet is compromised."
return
else
locked = !locked
if(locked)
user << "\red Cabinet locked."
else
user << "\blue Cabinet unlocked."
return
update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers
var/hasaxe = 0
if(fireaxe)
hasaxe = 1
icon_state = text("fireaxe[][][][]",hasaxe,src.localopened,src.hitstaken,src.smashed)
open()
return
close()
return

View File

@@ -78,4 +78,4 @@
new /obj/item/weapon/spacecash/c200(src) new /obj/item/weapon/spacecash/c200(src)
new /obj/item/weapon/spacecash/c200(src) new /obj/item/weapon/spacecash/c200(src)
new /obj/item/weapon/spacecash/c200(src) new /obj/item/weapon/spacecash/c200(src)
new /obj/item/weapon/spacecash/c200(src)

View File

@@ -16,6 +16,7 @@
..() ..()
contents = list() contents = list()
spawn(4) spawn(4)
new /obj/item/clothing/suit/patientgown( src )
new /obj/item/clothing/under/color/white( src ) new /obj/item/clothing/under/color/white( src )
new /obj/item/clothing/shoes/white( src ) new /obj/item/clothing/shoes/white( src )
return return

View File

@@ -25,7 +25,17 @@
relaymove(var/mob/user, direction) relaymove(var/mob/user, direction)
if(can_move) if(can_move)
can_move = 0 can_move = 0
spawn(10) can_move = 1 switch(usr.bodytemperature)
if(300 to INFINITY)
spawn(10) can_move = 1
if(295 to 300)
spawn(13) can_move = 1
if(280 to 295)
spawn(16) can_move = 1
if(260 to 280)
spawn(20) can_move = 1
else
spawn(25) can_move = 1
step(src,direction) step(src,direction)
return return

View File

@@ -69,6 +69,33 @@ obj/structure/door_assembly
glass = 1 glass = 1
icon_state = "door_as_geng1" icon_state = "door_as_geng1"
door_assembly_min
name = "Mining Airlock Assembly"
icon_state = "door_as_min1"
airlock_type = /obj/machinery/door/airlock/mining
anchored = 1
density = 1
state = 1
glass = 0
door_assembly_atmo
name = "Atmospherics Airlock Assembly"
icon_state = "door_as_atmo1"
airlock_type = /obj/machinery/door/airlock/atmos
anchored = 1
density = 1
state = 1
glass = 0
/* door_assembly_research
name = "Research Airlock Assembly"
icon_state = "door_as_res1"
airlock_type = /obj/machinery/door/airlock/research
anchored = 1
density = 1
state = 1
glass = 0*/
door_assembly_med door_assembly_med
name = "Medical Airlock Assembly" name = "Medical Airlock Assembly"
icon_state = "door_as_med1" icon_state = "door_as_med1"

View File

@@ -419,3 +419,24 @@ THERMAL GLASSES
icon_state = "engspace_helmet_clear" icon_state = "engspace_helmet_clear"
usr << "You toggle the reflective tint off." usr << "You toggle the reflective tint off."
usr.update_clothing() usr.update_clothing()
/obj/item/clothing/head/helmet/space/rig/cespace_helmet/attack_self()
toggle()
/obj/item/clothing/head/helmet/space/rig/cespace_helmet/verb/toggle()
set category = "Object"
set name = "Toggle Helmet Visor"
if(src.up)
src.up = !src.up
src.see_face = !src.see_face
src.flags |= HEADCOVERSEYES
icon_state = "cespace_helmet"
usr << "You toggle the reflective tint on."
else
src.up = !src.up
src.see_face = !src.see_face
src.flags &= ~HEADCOVERSEYES
icon_state = "cespace_helmet_clear"
usr << "You toggle the reflective tint off."
usr.update_clothing()

View File

@@ -161,7 +161,7 @@ STUN BATON
R.cell.charge -= 20 R.cell.charge -= 20
else else
charges-- charges--
if (M.stuttering < 1 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/) if (M.stuttering < 1 && (!(M.mutations & HULK) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
M.stuttering = 1 M.stuttering = 1
M.Stun(1) M.Stun(1)
M.Weaken(1) M.Weaken(1)
@@ -172,7 +172,7 @@ STUN BATON
R.cell.charge -= 20 R.cell.charge -= 20
else else
charges-- charges--
if (M.stuttering < 10 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/) if (M.stuttering < 10 && (!(M.mutations & HULK) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
M.stuttering = 10 M.stuttering = 10
M.Stun(10) M.Stun(10)
M.Weaken(10) M.Weaken(10)

View File

@@ -18,17 +18,19 @@ RACK PARTS
del(src) del(src)
/obj/item/weapon/table_parts/attack_self(mob/user as mob) /obj/item/weapon/table_parts/attack_self(mob/user as mob)
new /obj/structure/table( user.loc ) var/obj/structure/table/T = new /obj/structure/table( user.loc )
T.add_fingerprint(usr)
del(src) del(src)
return return
// WOODEN TABLE PARTS // WOODEN TABLE PARTS
/obj/item/weapon/table_parts/wood/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/item/weapon/table_parts/wood/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/wrench)) if (istype(W, /obj/item/weapon/wrench))
new /obj/item/stack/sheet/wood( src.loc ) new /obj/item/stack/sheet/wood( src.loc )
//SN src = null //SN src = null
del(src) del(src)
else
..()
/obj/item/weapon/table_parts/wood/attack_self(mob/user as mob) /obj/item/weapon/table_parts/wood/attack_self(mob/user as mob)
new /obj/structure/table/woodentable( user.loc ) new /obj/structure/table/woodentable( user.loc )

View File

@@ -50,8 +50,9 @@ FLOOR TILES
usr << "\blue Assembling grille..." usr << "\blue Assembling grille..."
if (!do_after(usr, 10)) if (!do_after(usr, 10))
return return
new /obj/structure/grille( usr.loc ) var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc )
usr << "\blue You assemble a grille" usr << "\blue You assemble a grille"
F.add_fingerprint(usr)
use(2) use(2)
return return

View File

@@ -20,7 +20,7 @@
/obj/item/stack/examine() /obj/item/stack/examine()
set src in view(1) set src in view(1)
..() ..()
usr << text("There are [] []\s left on the stack.", src.amount, src.singular_name) usr << "There are [src.amount] [src.singular_name]\s in the stack."
return return
/obj/item/stack/proc/use(var/amount) /obj/item/stack/proc/use(var/amount)
@@ -204,6 +204,12 @@
del(oldsrc) del(oldsrc)
if (istype(O,/obj/item)) if (istype(O,/obj/item))
usr.put_in_hand(O) usr.put_in_hand(O)
O.add_fingerprint(usr)
//BubbleWrap - so newly formed boxes are empty
if ( istype(O, /obj/item/weapon/storage) )
for (var/obj/item/I in O)
del(I)
//BubbleWrap END
if (src && usr.machine==src) //do not reopen closed window if (src && usr.machine==src) //do not reopen closed window
spawn( 0 ) spawn( 0 )
src.interact(usr) src.interact(usr)

View File

@@ -189,9 +189,9 @@
if ( istype(W,/obj/item/clothing/suit/syndicatefake ) ) if ( istype(W,/obj/item/clothing/suit/syndicatefake ) )
user << "This item does not fit." user << "This item does not fit."
return return
if ( istype(W,/obj/item/clothing/suit/powered ) ) // if ( istype(W,/obj/item/clothing/suit/powered ) )
user << "This item does not fit." // user << "This item does not fit."
return // return
if ( istype(W,/obj/item/clothing/suit/cyborg_suit ) ) if ( istype(W,/obj/item/clothing/suit/cyborg_suit ) )
user << "This item does not fit." user << "This item does not fit."
return return
@@ -213,9 +213,9 @@
if ( istype(W,/obj/item/clothing/head/syndicatefake ) ) if ( istype(W,/obj/item/clothing/head/syndicatefake ) )
user << "This item does not fit." user << "This item does not fit."
return return
if ( istype(W,/obj/item/clothing/head/powered ) ) // if ( istype(W,/obj/item/clothing/head/powered ) )
user << "This item does not fit." // user << "This item does not fit."
return // return
if ( istype(W,/obj/item/clothing/head/helmet ) ) if ( istype(W,/obj/item/clothing/head/helmet ) )
user << "This item does not fit." user << "This item does not fit."
return return

View File

@@ -3,6 +3,15 @@
name = "shuttle" name = "shuttle"
icon = 'shuttle.dmi' icon = 'shuttle.dmi'
/obj/structure/shuttle/window
name = "shuttle window"
icon = 'podwindows.dmi'
icon_state = "1"
density = 1
opacity = 0
anchored = 1
/obj/structure/shuttle/engine /obj/structure/shuttle/engine
name = "engine" name = "engine"
density = 1 density = 1

View File

@@ -142,6 +142,7 @@
W.sd_SetOpacity(0) W.sd_SetOpacity(0)
//This is probably gonna make lighting go a bit wonky in bombed areas, but sd_SetOpacity was the primary reason bombs have been so laggy. --NEO //This is probably gonna make lighting go a bit wonky in bombed areas, but sd_SetOpacity was the primary reason bombs have been so laggy. --NEO
W.levelupdate() W.levelupdate()
air_master.tiles_to_update += W
return W return W
/turf/proc/ReplaceWithPlating() /turf/proc/ReplaceWithPlating()
@@ -158,6 +159,7 @@
W.opacity = 1 W.opacity = 1
W.sd_SetOpacity(0) W.sd_SetOpacity(0)
W.levelupdate() W.levelupdate()
air_master.tiles_to_update += W
return W return W
/turf/proc/ReplaceWithEngineFloor() /turf/proc/ReplaceWithEngineFloor()
@@ -170,6 +172,7 @@
E.dir = old_dir E.dir = old_dir
E.icon_state = "engine" E.icon_state = "engine"
E.levelupdate() E.levelupdate()
air_master.tiles_to_update += E
return E return E
/turf/simulated/Entered(atom/A, atom/OL) /turf/simulated/Entered(atom/A, atom/OL)
@@ -231,6 +234,7 @@
var/old_dir = dir var/old_dir = dir
var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
S.dir = old_dir S.dir = old_dir
air_master.tiles_to_update += S
return S return S
/turf/proc/ReplaceWithLattice() /turf/proc/ReplaceWithLattice()
@@ -238,6 +242,7 @@
var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
S.dir = old_dir S.dir = old_dir
new /obj/structure/lattice( locate(src.x, src.y, src.z) ) new /obj/structure/lattice( locate(src.x, src.y, src.z) )
air_master.tiles_to_update += S
return S return S
/turf/proc/ReplaceWithWall() /turf/proc/ReplaceWithWall()
@@ -247,6 +252,7 @@
S.opacity = 0 S.opacity = 0
S.sd_NewOpacity(1) S.sd_NewOpacity(1)
levelupdate() levelupdate()
air_master.tiles_to_update += S
return S return S
/turf/proc/ReplaceWithRWall() /turf/proc/ReplaceWithRWall()
@@ -256,6 +262,7 @@
S.opacity = 0 S.opacity = 0
S.sd_NewOpacity(1) S.sd_NewOpacity(1)
levelupdate() levelupdate()
air_master.tiles_to_update += S
return S return S
/turf/simulated/wall/New() /turf/simulated/wall/New()

View File

@@ -32,15 +32,13 @@
if(alien_egg_flag) if(alien_egg_flag)
src << "The alien inside you forces you to breathe, preventing you from suiciding." src << "The alien inside you forces you to breathe, preventing you from suiciding."
return return
if(mutantrace == "trappedsoul")
src << "You are already dead, your soul trapped and contained!"
return
if(confirm == "Yes") if(confirm == "Yes")
message_admins("[ckey] has suicided.", 1) message_admins("[ckey] has suicided.", 1)
suiciding = 1 suiciding = 1
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
viewers(src) << "\red <b>[src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide.</b>" viewers(src) << "\red <b>[src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide.</b>"
oxyloss = max(175 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss()) adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth() updatehealth()
/mob/living/carbon/brain/verb/suicide() /mob/living/carbon/brain/verb/suicide()
@@ -63,10 +61,9 @@
if(confirm == "Yes") if(confirm == "Yes")
message_admins("[ckey] has suicided.", 1) message_admins("[ckey] has suicided.", 1)
suiciding = 1 suiciding = 1
viewers(loc) << "\red <b>[src]'s brain is growing dull and lifeless. It looks like it's trying to commit suicide. Somehow.</b>" viewers(loc) << "\red <b>[src]'s brain is growing dull and lifeless. It looks like it's lost the will to live.</b>"
oxyloss = max(175 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss()) spawn(50)
updatehealth() death(0)
spawn(200)
suiciding = 0 suiciding = 0
/mob/living/carbon/monkey/verb/suicide() /mob/living/carbon/monkey/verb/suicide()
@@ -91,7 +88,7 @@
suiciding = 1 suiciding = 1
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
viewers(src) << "\red <b>[src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide.</b>" viewers(src) << "\red <b>[src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide.</b>"
oxyloss = max(175 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss()) adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth() updatehealth()
/mob/living/silicon/ai/verb/suicide() /mob/living/silicon/ai/verb/suicide()
@@ -112,7 +109,7 @@
suiciding = 1 suiciding = 1
viewers(src) << "\red <b>[src] is powering down. It looks like \he's trying to commit suicide.</b>" viewers(src) << "\red <b>[src] is powering down. It looks like \he's trying to commit suicide.</b>"
//put em at -175 //put em at -175
oxyloss = max(175 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss()) adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth() updatehealth()
/mob/living/silicon/robot/verb/suicide() /mob/living/silicon/robot/verb/suicide()
@@ -133,7 +130,7 @@
suiciding = 1 suiciding = 1
viewers(src) << "\red <b>[src] is powering down. It looks like \he's trying to commit suicide.</b>" viewers(src) << "\red <b>[src] is powering down. It looks like \he's trying to commit suicide.</b>"
//put em at -175 //put em at -175
oxyloss = max(475 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss()) adjustOxyLoss(max(475 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth() updatehealth()
/mob/living/silicon/pai/verb/suicide() /mob/living/silicon/pai/verb/suicide()
@@ -170,7 +167,7 @@
suiciding = 1 suiciding = 1
viewers(src) << "\red <b>[src] is thrashing wildly! It looks like \he's trying to commit suicide.</b>" viewers(src) << "\red <b>[src] is thrashing wildly! It looks like \he's trying to commit suicide.</b>"
//put em at -175 //put em at -175
oxyloss = max(100 - getFireLoss() - getBruteLoss(), getOxyLoss()) adjustOxyLoss(max(100 - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth() updatehealth()

View File

@@ -1496,7 +1496,7 @@
for(var/mob/living/carbon/human/H in world) for(var/mob/living/carbon/human/H in world)
if(H.client) if(H.client)
H << "\red <B>You suddenly feel stupid.</B>" H << "\red <B>You suddenly feel stupid.</B>"
H.brainloss = 60 H.setBrainLoss(60)
message_admins("[key_name_admin(usr)] made everybody retarded") message_admins("[key_name_admin(usr)] made everybody retarded")
else else
alert("You cannot perform this action. You must be of a higher administrative rank!") alert("You cannot perform this action. You must be of a higher administrative rank!")

View File

@@ -67,6 +67,7 @@
verbs += /client/proc/debug_variables verbs += /client/proc/debug_variables
//verbs += /client/proc/cmd_modify_object_variables --Merged with view variables //verbs += /client/proc/cmd_modify_object_variables --Merged with view variables
verbs += /client/proc/cmd_modify_ticker_variables verbs += /client/proc/cmd_modify_ticker_variables
verbs += /client/proc/toggleadminhelpsound
// Admin helpers // Admin helpers
verbs += /client/proc/toggle_view_range verbs += /client/proc/toggle_view_range

View File

@@ -437,7 +437,7 @@ datum
M:drowsyness = max(M:drowsyness, 20) M:drowsyness = max(M:drowsyness, 20)
if(25 to INFINITY) if(25 to INFINITY)
M.sleeping = 1 M.sleeping = 1
M.oxyloss = 0 M.adjustOxyLoss(-M.getOxyLoss())
M.SetWeakened(0) M.SetWeakened(0)
M.SetStunned(0) M.SetStunned(0)
M.SetParalysis(0) M.SetParalysis(0)
@@ -1353,7 +1353,7 @@ datum
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom ///This can even heal dead people. if(!M) M = holder.my_atom ///This can even heal dead people.
M.cloneloss = 0 M.setCloneLoss(0)
M.setOxyLoss(0) M.setOxyLoss(0)
M.radiation = 0 M.radiation = 0
M.heal_organ_damage(5,5) M.heal_organ_damage(5,5)
@@ -1380,7 +1380,7 @@ datum
holder.remove_reagent("carpotoxin", 5) holder.remove_reagent("carpotoxin", 5)
if(holder.has_reagent("zombiepowder")) if(holder.has_reagent("zombiepowder"))
holder.remove_reagent("zombiepowder", 5) holder.remove_reagent("zombiepowder", 5)
M.brainloss = 0 M.setBrainLoss(0)
M.disabilities = 0 M.disabilities = 0
M.eye_blurry = 0 M.eye_blurry = 0
M.eye_blind = 0 M.eye_blind = 0

View File

@@ -22,6 +22,14 @@
see_face = 0.0 see_face = 0.0
var/up = 0 var/up = 0
/obj/item/clothing/head/helmet/space/rig/cespace_helmet
name = "chief engineer's space helmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding and a visor that can be toggled on and off."
icon_state = "cespace_helmet"
item_state = "cespace_helmet"
see_face = 0.0
var/up = 0
/obj/item/clothing/head/helmet/space/rig/security /obj/item/clothing/head/helmet/space/rig/security
name = "security RIG helmet" name = "security RIG helmet"
icon_state = "rig-security" icon_state = "rig-security"
@@ -48,10 +56,16 @@
/obj/item/clothing/suit/space/rig/engspace_suit /obj/item/clothing/suit/space/rig/engspace_suit
name = "engineering space suit" name = "engineering space suit"
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
icon_state = "engspace_suit" icon_state = "engspace_suit"
item_state = "engspace_suit" item_state = "engspace_suit"
/obj/item/clothing/suit/space/rig/cespace_suit
name = "chief engineer's space suit"
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation and fire shielding, and Chief Engineer colours."
icon_state = "cespace_suit"
item_state = "cespace_suit"
protective_temperature = 10000
/obj/item/clothing/suit/space/rig/security /obj/item/clothing/suit/space/rig/security
name = "security RIG suit" name = "security RIG suit"
desc = "A suit specially designed for security to offer minor protection from environmental hazards, and greater protection from human hazards" desc = "A suit specially designed for security to offer minor protection from environmental hazards, and greater protection from human hazards"

View File

@@ -6,7 +6,6 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/storage/wcoat /obj/item/clothing/suit/storage/wcoat
name = "waistcoat" name = "waistcoat"
desc = "The height of class." desc = "The height of class."
@@ -14,7 +13,6 @@
item_state = "wcoat" item_state = "wcoat"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/suit/storage/apron /obj/item/clothing/suit/storage/apron
name = "apron" name = "apron"
desc = "A basic blue apron. It has a large pocket you can store things in." desc = "A basic blue apron. It has a large pocket you can store things in."
@@ -23,9 +21,8 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list (/obj/item/weapon/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/nutrient,/obj/item/weapon/minihoe) allowed = list (/obj/item/weapon/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/nutrient,/obj/item/weapon/minihoe)
/obj/item/clothing/suit/storage/chef /obj/item/clothing/suit/storage/chef
name = "Chef's apron" name = "chef's apron"
desc = "An apron used by a high class chef. Has a few pockets for nic-naks." desc = "An apron used by a high class chef. Has a few pockets for nic-naks."
icon_state = "chef" icon_state = "chef"
item_state = "chef" item_state = "chef"
@@ -36,29 +33,25 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list (/obj/item/weapon/kitchenknife,/obj/item/weapon/butch) allowed = list (/obj/item/weapon/kitchenknife,/obj/item/weapon/butch)
/obj/item/clothing/suit/storage/chef/classic /obj/item/clothing/suit/storage/chef/classic
name = "A classic chef's apron." name = "classic chef's apron"
desc = "A basic, dull, white chef's apron." desc = "A basic, dull, white chef's apron."
icon_state = "apronchef" icon_state = "apronchef"
item_state = "apronchef" item_state = "apronchef"
body_parts_covered = UPPER_TORSO|LOWER_TORSO body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/suit/hazardvest /obj/item/clothing/suit/hazardvest
name = "hazard vest" name = "hazard vest"
desc = "A high-visibility vest used in work zones." desc = "A high-visibility vest used in work zones."
icon_state = "hazard" icon_state = "hazard"
item_state = "hazard" item_state = "hazard"
/obj/item/clothing/suit/suspenders /obj/item/clothing/suit/suspenders
name = "suspenders" name = "suspenders"
desc = "They suspend the illusion of the mime's play." desc = "They suspend the illusion of the mime's play."
icon = 'belts.dmi' icon = 'belts.dmi'
icon_state = "suspenders" icon_state = "suspenders"
/obj/item/clothing/suit/syndicatefake /obj/item/clothing/suit/syndicatefake
name = "red space suit replica" name = "red space suit replica"
icon_state = "syndicate" icon_state = "syndicate"
@@ -69,7 +62,6 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/storage/captunic /obj/item/clothing/suit/storage/captunic
name = "captain's parade tunic" name = "captain's parade tunic"
desc = "Worn by a Captain to show their class." desc = "Worn by a Captain to show their class."
@@ -78,7 +70,6 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT flags_inv = HIDEJUMPSUIT
/obj/item/clothing/suit/nun /obj/item/clothing/suit/nun
name = "nun robe" name = "nun robe"
desc = "Maximum piety in this star system." desc = "Maximum piety in this star system."
@@ -101,49 +92,49 @@
item_state = "chaplain_hoodie" item_state = "chaplain_hoodie"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
/obj/item/clothing/suit/hastur /obj/item/clothing/suit/hastur
name = "Hastur's Robes" name = "Hastur's robes"
desc = "Robes not meant to be worn by man" desc = "Robes not meant to be worn by man"
icon_state = "hastur" icon_state = "hastur"
item_state = "hastur" item_state = "hastur"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/imperium_monk /obj/item/clothing/suit/imperium_monk
name = "Imperium monk" name = "imperium monk robes"
desc = "A set of strange robes." desc = "A set of strange robes."
icon_state = "imperium_monk" icon_state = "imperium_monk"
item_state = "imperium_monk" item_state = "imperium_monk"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDESHOES|HIDEJUMPSUIT flags_inv = HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/chickensuit /obj/item/clothing/suit/chickensuit
name = "Chicken Suit" name = "chicken suit"
desc = "Bwak!" desc = "Bwak!"
icon_state = "chickensuit" icon_state = "chickensuit"
item_state = "chickensuit" item_state = "chickensuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HEAD body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HEAD
flags_inv = HIDESHOES|HIDEJUMPSUIT flags_inv = HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/monkeysuit /obj/item/clothing/suit/monkeysuit
name = "Monkey Suit" name = "monkey suit"
desc = "A suit that looks like a primate" desc = "A suit that looks like a primate"
icon_state = "monkeysuit" icon_state = "monkeysuit"
item_state = "monkeysuit" item_state = "monkeysuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/holidaypriest /obj/item/clothing/suit/holidaypriest
name = "Holiday Priest" name = "holiday priest"
desc = "This is a nice holiday my son." desc = "This is a nice holiday my son."
icon_state = "holidaypriest" icon_state = "holidaypriest"
item_state = "holidaypriest" item_state = "holidaypriest"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/patientgown
name = "patient gown"
desc = "A sterile gown for patient wear."
icon_state = "patientgown"
item_state = "patientgown"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS

23
code/modules/food/meat.dm Normal file
View File

@@ -0,0 +1,23 @@
/obj/item/weapon/reagent_containers/food/snacks/meat
name = "meat"
desc = "A slab of meat"
icon_state = "meat"
health = 180
New()
..()
reagents.add_reagent("nutriment", 3)
src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
name = "synthetic meat"
desc = "A synthetic slab of flesh."
/obj/item/weapon/reagent_containers/food/snacks/meat/human
name = "-meat"
var/subjectname = ""
var/subjectjob = null
/obj/item/weapon/reagent_containers/food/snacks/meat/monkey
//same as plain meat

View File

@@ -1,33 +1,23 @@
/**********************Mineral processing unit console**************************/ /**********************Mineral processing unit console**************************/
/obj/machinery/mineral/processing_unit_console /obj/machinery/mineral/processing_unit_console
name = "Produciton machine console" name = "production machine console"
icon = 'mining_machines.dmi' icon = 'mining_machines.dmi'
icon_state = "console" icon_state = "console"
density = 1 density = 1
anchored = 1 anchored = 1
var/id = "" var/id = ""
var/obj/machinery/mineral/processing_unit/machine = null var/obj/machinery/mineral/processing_unit/machine = null
var/machinedir = EAST
/obj/machinery/mineral/processing_unit_console/New() /obj/machinery/mineral/processing_unit_console/New()
..() ..()
spawn(7) spawn(7)
/** src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, EAST))
if (machine) if (machine)
machine.CONSOLE = src machine.CONSOLE = src
else else
del(src) del(src)
*/
//Commented out for being horrible for mappers. -Fastler
for(var/obj/machinery/mineral/processing_unit/M in world)
if(M.id == src.id)
src.machine = M
if (machine)
machine.CONSOLE = src
else
del(src)
/obj/machinery/mineral/processing_unit_console/attack_hand(user as mob) /obj/machinery/mineral/processing_unit_console/attack_hand(user as mob)

View File

@@ -1,28 +1,19 @@
/**********************Mineral stacking unit console**************************/ /**********************Mineral stacking unit console**************************/
/obj/machinery/mineral/stacking_unit_console /obj/machinery/mineral/stacking_unit_console
name = "Stacking machine console" name = "stacking machine console"
icon = 'mining_machines.dmi' icon = 'mining_machines.dmi'
icon_state = "console" icon_state = "console"
density = 1 density = 1
anchored = 1 anchored = 1
var/id = "" var/id = ""
var/obj/machinery/mineral/stacking_machine/machine = null var/obj/machinery/mineral/stacking_machine/machine = null
var/machinedir = SOUTHEAST
/obj/machinery/mineral/stacking_unit_console/New() /obj/machinery/mineral/stacking_unit_console/New()
..() ..()
spawn(7) spawn(7)
/** src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, SOUTHEAST))
if (machine)
machine.CONSOLE = src
else
del(src)
*/
//Commented out for being horrible for mappers. -Fastler
for(var/obj/machinery/mineral/stacking_machine/M in world)
if(M.id == src.id)
src.machine = M
if (machine) if (machine)
machine.CONSOLE = src machine.CONSOLE = src
else else

View File

@@ -1,14 +0,0 @@
/mob/observer/Login()
..()
if (!src.start)
src.start = 1
var/A = locate(/area/start)
var/list/L = list( )
for(var/turf/T in A)
L += T
src.loc = pick(L)
src.client.screen = null
if (!isturf(src.loc))
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
return

View File

@@ -1,170 +0,0 @@
/mob/observer/New(mob/corpse)
set invisibility = 10
..()
if(corpse)
src.corpse = corpse
src.loc = get_turf(corpse.loc)
src.real_name = corpse.real_name
src.name = corpse.real_name
src.sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS
src.see_invisible = 10
src.see_in_dark = 100
src.verbs += /mob/observer/proc/dead_tele
src.verbs += /mob/observer/proc/reenter_corpse
/mob/proc/ghostize()
set name = "Ghost"
set desc = "You cannot be revived as a ghost"
if(src.client)
src.client.mob = new/mob/observer(src)
return
/mob/observer/Move(NewLoc, direct)
if(NewLoc)
src.loc = NewLoc
return
if((direct & NORTH) && src.y < world.maxy)
src.y++
if((direct & SOUTH) && src.y > 1)
src.y--
if((direct & EAST) && src.x < world.maxx)
src.x++
if((direct & WEST) && src.x > 1)
src.x--
/mob/observer/examine()
if(usr) usr << src.desc
/mob/observer/can_use_hands() return 0
/mob/observer/is_active() return 0
/mob/observer/Stat()
..()
statpanel("Status")
if (src.client.statpanel == "Status")
if(ticker && ticker.mode)
if (ticker.timeleft)
stat(null, "ETA-[ticker.timeleft / 600 % 60]:[ticker.timeleft / 100 % 6][ticker.timeleft / 100 % 10]")
if(ticker.mode.name == "Corporate Restructuring" && ticker.target)
var/icon = ticker.target.name
var/icon2 = ticker.target.real_name
var/area = get_area(ticker.target)
stat(null, text("Target: [icon2] (as [icon]) is in [area]"))
if(ticker.mode.name == "AI malfunction" && ticker.processing)
stat(null, text("Time until all [station_name()]'s systems are taken over: [(ticker.AIwin - ticker.AItime) / 600 % 60]:[(ticker.AIwin - ticker.AItime) / 100 % 6][(ticker.AIwin - ticker.AItime) / 10 % 10]"))
if (ticker.mode.name == "ctf")
stat(null, text("Red Team - [ticker.red_score]"))
stat(null, text("Green Team - [ticker.green_score]"))
/mob/observer/proc/reenter_corpse()
set category = "Special Verbs"
set name = "Re-enter Corpse"
if(!corpse)
alert("You don't have a corpse!")
return
if(corpse.stat == 2)
alert("Your body is dead!")
return
if(src.client && src.client.holder && src.client.holder.state == 2)
var/rank = src.client.holder.rank
src.client.clear_admin_verbs()
src.client.holder.state = 1
src.client.update_admins(rank)
src.client.mob = corpse
del(src)
/mob/observer/proc/dead_tele()
set category = "Special Verbs"
set name = "Teleport"
set desc= "Teleport"
if((usr.stat != 2) || !istype(usr, /mob/observer))
usr << "Not when you're not dead!"
return
var/A
usr.verbs -= /mob/observer/proc/dead_tele
spawn(50)
usr.verbs += /mob/observer/proc/dead_tele
A = input("Area to jump to", "BOOYEA", A) in list("Engine","Hallways","Toxins","Storage","Maintenance","Crew Quarters","Medical","Security","Chapel","Bridge")
switch (A)
if ("Engine")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/engine) && !istype(B, /area/engine/combustion) && !istype(B, /area/engine/engine_walls))
L += B
A = pick(L)
if ("Hallways")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/hallway))
L += B
A = pick(L)
if ("Toxins")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/toxins) && !istype(B, /area/toxins/test_chamber))
L += B
A = pick(L)
if ("Storage")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/storage))
L += B
A = pick(L)
if ("Maintenance")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/maintenance))
L += B
A = pick(L)
if ("Crew Quarters")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/crew_quarters))
L += B
A = pick(L)
if ("Medical")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/medical))
L += B
A = pick(L)
if ("Security")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/security))
L += B
A = pick(L)
if ("Chapel")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/chapel))
L += B
A = pick(L)
if ("Bridge")
var/list/L = list()
for(var/area/B in world)
if(istype(B, /area/bridge))
L += B
A = pick(L)
var/list/L = list()
for(var/turf/T in A)
if(!T.density)
var/clear = 1
for(var/obj/O in T)
if(O.density)
clear = 0
break
if(clear)
L+=T
usr.loc = pick(L)

View File

@@ -1,30 +0,0 @@
/mob/observer/say_understands(var/other)
return 1
/mob/observer/say(var/message)
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
if (!message)
return
world.log_say("Ghost/[src.key] : [message]")
if (src.muted)
return
. = src.say_dead(message)
for (var/mob/M in hearers(null, null))
if (!M.stat)
if(M.job == "Chaplain")
if (prob (49))
M.show_message("<span class='game'><i>You hear muffled speech... but nothing is there...</i></span>", 2)
else
M.show_message("<span class='game'><i>[stutter(message)]</i></span>", 2)
else
if (prob(50))
return
else if (prob (95))
M.show_message("<span class='game'><i>You hear muffled speech... but nothing is there...</i></span>", 2)
else
M.show_message("<span class='game'><i>[stutter(message)]</i></span>", 2)

View File

@@ -91,13 +91,16 @@
if(src.resting) if(src.resting)
Weaken(5) Weaken(5)
if(move_delay_add > 0)
move_delay_add = max(0, move_delay_add - rand(1, 2))
if(health < config.health_threshold_dead || src.brain_op_stage == 4.0) if(health < config.health_threshold_dead || src.brain_op_stage == 4.0)
death() death()
else if(src.health < config.health_threshold_crit) else if(src.health < config.health_threshold_crit)
if(src.health <= 20 && prob(1)) spawn(0) emote("gasp") if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!src.rejuv) src.oxyloss++ //if(!src.rejuv) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++ if(!src.reagents.has_reagent("inaprovaline")) src.adjustOxyLoss(1)
if(src.stat != 2) src.stat = 1 if(src.stat != 2) src.stat = 1
Paralyse(5) Paralyse(5)

View File

@@ -92,13 +92,16 @@
if(src.resting) if(src.resting)
Weaken(5) Weaken(5)
if(move_delay_add > 0)
move_delay_add = max(0, move_delay_add - rand(1, 2))
if(health < config.health_threshold_dead || src.brain_op_stage == 4.0) if(health < config.health_threshold_dead || src.brain_op_stage == 4.0)
death() death()
else if(src.health < config.health_threshold_crit) else if(src.health < config.health_threshold_crit)
if(src.health <= 20 && prob(1)) spawn(0) emote("gasp") if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!src.rejuv) src.oxyloss++ //if(!src.rejuv) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++ if(!src.reagents.has_reagent("inaprovaline")) src.adjustOxyLoss(1)
if(src.stat != 2) src.stat = 1 if(src.stat != 2) src.stat = 1
Paralyse(5) Paralyse(5)

View File

@@ -58,7 +58,9 @@
tally += 2 tally += 2
if (istype(src, /mob/living/carbon/alien/humanoid/sentinel)) if (istype(src, /mob/living/carbon/alien/humanoid/sentinel))
tally += 1 tally += 1
return tally if (istype(src, /mob/living/carbon/alien/humanoid/hunter))
tally = -1 // hunters go supersuperfast
return tally + move_delay_add
//This needs to be fixed //This needs to be fixed
/mob/living/carbon/alien/humanoid/Stat() /mob/living/carbon/alien/humanoid/Stat()
@@ -121,7 +123,7 @@
ear_damage += 15 ear_damage += 15
ear_deaf += 60 ear_deaf += 60
bruteloss += b_loss adjustBruteLoss(b_loss)
adjustFireLoss(f_loss) adjustFireLoss(f_loss)
updatehealth() updatehealth()
@@ -224,7 +226,7 @@
if ((M.client && !( M.blinded ))) if ((M.client && !( M.blinded )))
M.show_message(text("\red [] has been hit by []", src, O), 1) M.show_message(text("\red [] has been hit by []", src, O), 1)
if (health > 0) if (health > 0)
bruteloss += (istype(O, /obj/effect/meteor/small) ? 10 : 25) adjustFireLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
adjustFireLoss(30) adjustFireLoss(30)
updatehealth() updatehealth()
@@ -472,7 +474,7 @@
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1) O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
bruteloss += rand(1, 3) adjustBruteLoss(rand(1, 3))
updatehealth() updatehealth()
return return
@@ -501,7 +503,7 @@
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[M.name] has bit [src]!</B>"), 1) O.show_message(text("\red <B>[M.name] has bit [src]!</B>"), 1)
bruteloss += rand(1, 3) adjustBruteLoss(rand(1, 3))
updatehealth() updatehealth()
return return
@@ -526,7 +528,7 @@
else else
damage = rand(5, 35) damage = rand(5, 35)
bruteloss += damage adjustBruteLoss(damage)
if(M.powerlevel > 0) if(M.powerlevel > 0)
var/stunprob = 10 var/stunprob = 10
@@ -566,6 +568,16 @@
return return
/mob/living/carbon/alien/humanoid/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
else
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[M]</B> [M.attacktext] [src]!", 1)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
adjustBruteLoss(damage)
updatehealth()
/mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M as mob) /mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M as mob)
if (!ticker) if (!ticker)
M << "You cannot attack people before the game has started." M << "You cannot attack people before the game has started."
@@ -672,7 +684,7 @@
for(var/mob/O in viewers(M, null)) for(var/mob/O in viewers(M, null))
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has weakened []!</B>", M, src), 1, "\red You hear someone fall.", 2) O.show_message(text("\red <B>[] has weakened []!</B>", M, src), 1, "\red You hear someone fall.", 2)
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
else else
if(M.type != /mob/living/carbon/human/tajaran) if(M.type != /mob/living/carbon/human/tajaran)
@@ -741,7 +753,7 @@ In all, this is a lot like the monkey code. /N
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1) O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
else else
M << "\green <B>[name] is too injured for that.</B>" M << "\green <B>[name] is too injured for that.</B>"

View File

@@ -407,13 +407,16 @@
if(src.resting) if(src.resting)
Weaken(5) Weaken(5)
if(move_delay_add > 0)
move_delay_add = max(0, move_delay_add - rand(1, 2))
if(health < config.health_threshold_dead || src.brain_op_stage == 4.0) if(health < config.health_threshold_dead || src.brain_op_stage == 4.0)
death() death()
else if(src.health < config.health_threshold_crit) else if(src.health < config.health_threshold_crit)
if(src.health <= 20 && prob(1)) spawn(0) emote("gasp") if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!src.rejuv) src.oxyloss++ //if(!src.rejuv) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++ if(!src.reagents.has_reagent("inaprovaline")) src.adjustOxyLoss(1)
if(src.stat != 2) src.stat = 1 if(src.stat != 2) src.stat = 1
Paralyse(5) Paralyse(5)
@@ -585,5 +588,5 @@
continue continue
if(air_master.current_cycle%3==1) if(air_master.current_cycle%3==1)
if(!M.nodamage) if(!M.nodamage)
M.bruteloss += 5 M.adjustBruteLoss(5)
src.nutrition += 10 src.nutrition += 10

View File

@@ -75,7 +75,7 @@
if(health >= 250) if(health >= 250)
adjustToxLoss(20) adjustToxLoss(20)
else else
bruteloss -= 5 adjustBruteLoss(-5)
adjustFireLoss(-5) adjustFireLoss(-5)
handle_regular_status_updates() handle_regular_status_updates()
@@ -99,7 +99,7 @@
if(src.health <= 20 && prob(1)) spawn(0) emote("gasp") if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!src.rejuv) src.oxyloss++ //if(!src.rejuv) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++ if(!src.reagents.has_reagent("inaprovaline")) src.adjustOxyLoss(1)
if(src.stat != 2) src.stat = 1 if(src.stat != 2) src.stat = 1
Paralyse(5) Paralyse(5)

View File

@@ -274,7 +274,7 @@
if(health >= 25) if(health >= 25)
adjustToxLoss(5) adjustToxLoss(5)
else else
bruteloss -= 5 adjustBruteLoss(-5)
adjustFireLoss(-5) adjustFireLoss(-5)
return return
@@ -332,13 +332,16 @@
if(resting) if(resting)
Weaken(5) Weaken(5)
if(move_delay_add > 0)
move_delay_add = max(0, move_delay_add - rand(1, 2))
if(health < config.health_threshold_dead || brain_op_stage == 4.0) if(health < config.health_threshold_dead || brain_op_stage == 4.0)
death() death()
else if(health < config.health_threshold_crit) else if(health < config.health_threshold_crit)
if(health <= 20 && prob(1)) spawn(0) emote("gasp") if(health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!rejuv) oxyloss++ //if(!rejuv) oxyloss++
if(!reagents.has_reagent("inaprovaline")) oxyloss++ if(!reagents.has_reagent("inaprovaline")) adjustOxyLoss(1)
if(stat != 2) stat = 1 if(stat != 2) stat = 1
Paralyse(5) Paralyse(5)
@@ -514,5 +517,5 @@
continue continue
if(air_master.current_cycle%3==1) if(air_master.current_cycle%3==1)
if(!M.nodamage) if(!M.nodamage)
M.bruteloss += 5 M.adjustBruteLoss(5)
nutrition += 10 nutrition += 10

View File

@@ -271,7 +271,7 @@
if (prob(10))//Instant Chad Ore! if (prob(10))//Instant Chad Ore!
stuttering = max(10, stuttering) stuttering = max(10, stuttering)
if (brainloss >= 60 && stat != 2) if (getBrainLoss() >= 60 && stat != 2)
if (prob(7)) if (prob(7))
switch(pick(1,2,3)) switch(pick(1,2,3))
if(1) if(1)
@@ -648,7 +648,7 @@
//Account for massive pressure differences. Done by Polymorph //Account for massive pressure differences. Done by Polymorph
var/pressure = environment.return_pressure() var/pressure = environment.return_pressure()
if(!istype(wear_suit, /obj/item/clothing/suit/space)&&!istype(wear_suit, /obj/item/clothing/suit/armor/captain)) if(!istype(wear_suit, /obj/item/clothing/suit/space))
/*if(pressure < 20) /*if(pressure < 20)
if(prob(25)) if(prob(25))
src << "You feel the splittle on your lips and the fluid on your eyes boiling away, the capillteries in your skin breaking." src << "You feel the splittle on your lips and the fluid on your eyes boiling away, the capillteries in your skin breaking."

View File

@@ -414,16 +414,16 @@
// if(src.health <= 20 && prob(1)) spawn(0) emote("gasp") // if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!src.rejuv) src.oxyloss++ //if(!src.rejuv) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss+=10 if(!src.reagents.has_reagent("inaprovaline")) src.adjustOxyLoss(10)
if(src.stat != DEAD) src.stat = UNCONSCIOUS if(src.stat != DEAD) src.stat = UNCONSCIOUS
if(prob(30)) if(prob(30))
if(getOxyLoss()>0) oxyloss = max(getOxyLoss()-1, 0) adjustOxyLoss(-1)
if(getToxLoss()>0) adjustToxLoss(-1) adjustToxLoss(-1)
if(getFireLoss()>0) adjustFireLoss(-1) adjustFireLoss(-1)
if(cloneloss>0) cloneloss = max(cloneloss-1,0) adjustCloneLoss(-1)
if(getBruteLoss()>0) bruteloss = max(getBruteLoss()-1,0) adjustBruteLoss(-1)
if (src.stat == DEAD) if (src.stat == DEAD)

View File

@@ -174,7 +174,7 @@
if(3.0) if(3.0)
b_loss += 30 b_loss += 30
bruteloss += b_loss adjustBruteLoss(b_loss)
adjustFireLoss(f_loss) adjustFireLoss(f_loss)
updatehealth() updatehealth()
@@ -214,7 +214,7 @@
if ((M.client && !( M.blinded ))) if ((M.client && !( M.blinded )))
M.show_message(text("\red [] has been hit by []", src, O), 1) M.show_message(text("\red [] has been hit by []", src, O), 1)
if (health > 0) if (health > 0)
bruteloss += (istype(O, /obj/effect/meteor/small) ? 10 : 25) adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
adjustFireLoss(30) adjustFireLoss(30)
updatehealth() updatehealth()
@@ -341,13 +341,24 @@
else else
damage = rand(1, 3) damage = rand(1, 3)
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
return return
/mob/living/carbon/metroid/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
else
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[M]</B> [M.attacktext] [src]!", 1)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
adjustBruteLoss(damage)
updatehealth()
/mob/living/carbon/metroid/attack_paw(mob/living/carbon/monkey/M as mob) /mob/living/carbon/metroid/attack_paw(mob/living/carbon/monkey/M as mob)
if(!(istype(M, /mob/living/carbon/monkey))) return//Fix for aliens receiving double messages when attacking other aliens. if(!(istype(M, /mob/living/carbon/monkey))) return//Fix for aliens receiving double messages when attacking other aliens.
@@ -531,7 +542,7 @@
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has [attack_verb]ed []!</B>", M, src), 1) O.show_message(text("\red <B>[] has [attack_verb]ed []!</B>", M, src), 1)
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
else else
if(M.type != /mob/living/carbon/human/tajaran) if(M.type != /mob/living/carbon/human/tajaran)
@@ -575,7 +586,7 @@
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has wounded [name]!</B>", M), 1) O.show_message(text("\red <B>[] has wounded [name]!</B>", M), 1)
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
else else
playsound(loc, 'slashmiss.ogg', 25, 1, -1) playsound(loc, 'slashmiss.ogg', 25, 1, -1)
@@ -638,7 +649,7 @@
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has disarmed [name]!</B>", M), 1) O.show_message(text("\red <B>[] has disarmed [name]!</B>", M), 1)
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
return return

View File

@@ -71,37 +71,22 @@
"A sharp, deep pain bathes every inch of your body!")]" "A sharp, deep pain bathes every inch of your body!")]"
if(istype(M, /mob/living/carbon)) if(istype(M, /mob/living/carbon))
Victim.cloneloss += rand(1,10) Victim.adjustCloneLoss(rand(1,10))
Victim.adjustToxLoss(rand(1,2)) Victim.adjustToxLoss(rand(1,2))
if(Victim.health <= 0) if(Victim.health <= 0)
Victim.adjustToxLoss(rand(2,4)) Victim.adjustToxLoss(rand(2,4))
if(getToxLoss() > 0) adjustToxLoss(-10)
adjustToxLoss(-10) adjustOxyLoss(-10)
adjustBruteLoss(-10)
if(getOxyLoss() > 0) adjustFireLoss(-10)
oxyloss = max(0, getOxyLoss()-10) adjustCloneLoss(-10)
if(getBruteLoss() > 0)
bruteloss = max(0, getBruteLoss()-10)
if(getFireLoss() > 0)
adjustFireLoss(-10)
if(getCloneLoss() > 0)
adjustCloneLoss(-10)
if(Victim) if(Victim)
for(var/mob/living/carbon/metroid/Metroid in view(1,M)) for(var/mob/living/carbon/metroid/Metroid in view(1,M))
if(Metroid.Victim == M && Metroid != src) if(Metroid.Victim == M && Metroid != src)
Metroid.Feedstop() Metroid.Feedstop()
if(getToxLoss()<0) adjustToxLoss(0)
if(getOxyLoss()<0) adjustOxyLoss(0)
if(getBruteLoss()<0) adjustBruteLoss(0)
if(getFireLoss()<0) adjustFireLoss(0)
if(getCloneLoss()<0) adjustCloneLoss(0)
nutrition += rand(10,25) nutrition += rand(10,25)
if(nutrition >= lastnut + 50) if(nutrition >= lastnut + 50)
if(prob(80)) if(prob(80))

View File

@@ -129,7 +129,7 @@
M.show_message(text("\red [] has been hit by []", src, O), 1) M.show_message(text("\red [] has been hit by []", src, O), 1)
if (health > 0) if (health > 0)
var/shielded = 0 var/shielded = 0
bruteloss += 30 adjustBruteLoss(30)
if ((O.icon_state == "flaming" && !( shielded ))) if ((O.icon_state == "flaming" && !( shielded )))
adjustFireLoss(40) adjustFireLoss(40)
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
@@ -144,7 +144,7 @@
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1) O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
var/damage = rand(1, 5) var/damage = rand(1, 5)
if (mutations & HULK) damage += 10 if (mutations & HULK) damage += 10
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
for(var/datum/disease/D in M.viruses) for(var/datum/disease/D in M.viruses)
@@ -167,7 +167,7 @@
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[M.name] has bit [name]!</B>", 1) O.show_message("\red <B>[M.name] has bit [name]!</B>", 1)
var/damage = rand(1, 5) var/damage = rand(1, 5)
bruteloss += damage adjustBruteLoss(damage)
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
for(var/datum/disease/D in M.viruses) for(var/datum/disease/D in M.viruses)
if(istype(D, /datum/disease/jungle_fever)) if(istype(D, /datum/disease/jungle_fever))
@@ -240,7 +240,7 @@
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has knocked out [name]!</B>", M), 1) O.show_message(text("\red <B>[] has knocked out [name]!</B>", M), 1)
return return
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
react_to_attack(M) react_to_attack(M)
else else
@@ -323,7 +323,7 @@
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has slashed [name]!</B>", M), 1) O.show_message(text("\red <B>[] has slashed [name]!</B>", M), 1)
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
react_to_attack(M) react_to_attack(M)
else else
@@ -365,11 +365,20 @@
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded ))) if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has disarmed [name]!</B>", M), 1) O.show_message(text("\red <B>[] has disarmed [name]!</B>", M), 1)
bruteloss += damage adjustBruteLoss(damage)
react_to_attack(M) react_to_attack(M)
updatehealth() updatehealth()
return return
/mob/living/carbon/monkey/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
else
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[M]</B> [M.attacktext] [src]!", 1)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
adjustBruteLoss(damage)
updatehealth()
/mob/living/carbon/monkey/attack_metroid(mob/living/carbon/metroid/M as mob) /mob/living/carbon/monkey/attack_metroid(mob/living/carbon/metroid/M as mob)
@@ -392,7 +401,7 @@
else else
damage = rand(5, 35) damage = rand(5, 35)
bruteloss += damage adjustBruteLoss(damage)
if(M.powerlevel > 0) if(M.powerlevel > 0)
var/stunprob = 10 var/stunprob = 10
@@ -647,7 +656,7 @@
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
if(2.0) if(2.0)
if (stat != 2) if (stat != 2)
bruteloss += 60 adjustBruteLoss(60)
adjustFireLoss(60) adjustFireLoss(60)
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
if(3.0) if(3.0)

View File

@@ -21,7 +21,7 @@
if(OXY) if(OXY)
adjustOxyLoss(damage/(blocked+1)) adjustOxyLoss(damage/(blocked+1))
if(CLONE) if(CLONE)
cloneloss += (damage/(blocked+1)) adjustCloneLoss(damage/(blocked+1))
UpdateDamageIcon() UpdateDamageIcon()
updatehealth() updatehealth()
return 1 return 1
@@ -50,7 +50,8 @@
if(IRRADIATE) if(IRRADIATE)
radiation += max((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor radiation += max((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor
if(STUTTER) if(STUTTER)
stuttering = max(stuttering,(effect/(blocked+1))) if(canstun) // stun is usually associated with stutter
stuttering = max(stuttering,(effect/(blocked+1)))
if(SLUR) if(SLUR)
slurring = max(slurring, (effect/(blocked+1))) slurring = max(slurring, (effect/(blocked+1)))
if(EYE_BLUR) if(EYE_BLUR)

View File

@@ -1,14 +1,14 @@
/mob/living/verb/succumb() /mob/living/verb/succumb()
set hidden = 1 set hidden = 1
if ((src.health < 0 && src.health > -95.0)) if ((src.health < 0 && src.health > -95.0))
src.oxyloss += src.health + 200 src.adjustOxyLoss(src.health + 200)
src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss()
src << "\blue You have given up life and succumbed to death." src << "\blue You have given up life and succumbed to death."
/mob/living/proc/updatehealth() /mob/living/proc/updatehealth()
if(!src.nodamage) if(!src.nodamage)
src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() - src.cloneloss - src.halloss src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() - src.getCloneLoss() -src.halloss
else else
src.health = 100 src.health = 100
src.stat = 0 src.stat = 0
@@ -142,25 +142,25 @@
// heal ONE external organ, organ gets randomly selected from damaged ones. // heal ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/heal_organ_damage(var/brute, var/burn) /mob/living/proc/heal_organ_damage(var/brute, var/burn)
bruteloss = max(0, getBruteLoss()-brute) adjustBruteLoss(-brute)
adjustFireLoss(-burn) adjustFireLoss(-burn)
src.updatehealth() src.updatehealth()
// damage ONE external organ, organ gets randomly selected from damaged ones. // damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/take_organ_damage(var/brute, var/burn) /mob/living/proc/take_organ_damage(var/brute, var/burn)
bruteloss += brute adjustBruteLoss(brute)
adjustFireLoss(burn) adjustFireLoss(burn)
src.updatehealth() src.updatehealth()
// heal MANY external organs, in random order // heal MANY external organs, in random order
/mob/living/proc/heal_overall_damage(var/brute, var/burn) /mob/living/proc/heal_overall_damage(var/brute, var/burn)
bruteloss = max(0, getBruteLoss()-brute) adjustBruteLoss(-brute)
adjustFireLoss(-burn) adjustFireLoss(-burn)
src.updatehealth() src.updatehealth()
// damage MANY external organs, in random order // damage MANY external organs, in random order
/mob/living/proc/take_overall_damage(var/brute, var/burn) /mob/living/proc/take_overall_damage(var/brute, var/burn)
bruteloss += brute adjustBruteLoss(brute)
adjustFireLoss(burn) adjustFireLoss(burn)
src.updatehealth() src.updatehealth()

View File

@@ -71,7 +71,7 @@
var/message_range = null var/message_range = null
var/message_mode = null var/message_mode = null
if (brainloss >= 60 && prob(50)) if (getBrainLoss() >= 60 && prob(50))
if (ishuman(src)) if (ishuman(src))
message_mode = "headset" message_mode = "headset"
// Special message handling // Special message handling
@@ -160,7 +160,7 @@
message = capitalize(message) //capitalize the first letter of what they actually say message = capitalize(message) //capitalize the first letter of what they actually say
// :downs: // :downs:
if (brainloss >= 60) if (getBrainLoss() >= 60)
message = dd_replacetext(message, " am ", " ") message = dd_replacetext(message, " am ", " ")
message = dd_replacetext(message, " is ", " ") message = dd_replacetext(message, " is ", " ")
message = dd_replacetext(message, " are ", " ") message = dd_replacetext(message, " are ", " ")

View File

@@ -252,7 +252,7 @@
/mob/living/silicon/ai/blob_act() /mob/living/silicon/ai/blob_act()
if (stat != 2) if (stat != 2)
bruteloss += 60 adjustBruteLoss(60)
updatehealth() updatehealth()
return 1 return 1
return 0 return 0
@@ -328,7 +328,7 @@
M.show_message(text("\red [] has been hit by []", src, O), 1) M.show_message(text("\red [] has been hit by []", src, O), 1)
//Foreach goto(19) //Foreach goto(19)
if (health > 0) if (health > 0)
bruteloss += 30 adjustBruteLoss(30)
if ((O.icon_state == "flaming")) if ((O.icon_state == "flaming"))
adjustFireLoss(40) adjustFireLoss(40)
updatehealth() updatehealth()
@@ -364,7 +364,7 @@
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1) O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
if(prob(8)) if(prob(8))
flick("noise", flash) flick("noise", flash)
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
else else
playsound(loc, 'slashmiss.ogg', 25, 1, -1) playsound(loc, 'slashmiss.ogg', 25, 1, -1)
@@ -382,6 +382,19 @@
M << "\red <b>ERROR</b>: \black Remote access channel disabled." M << "\red <b>ERROR</b>: \black Remote access channel disabled."
return return
/mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
else
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[M]</B> [M.attacktext] [src]!", 1)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
adjustBruteLoss(damage)
updatehealth()
/mob/living/silicon/ai/proc/switchCamera(var/obj/machinery/camera/C) /mob/living/silicon/ai/proc/switchCamera(var/obj/machinery/camera/C)
usr:cameraFollow = null usr:cameraFollow = null
if (!C) if (!C)

View File

@@ -82,7 +82,7 @@
spawn(1) spawn(1)
while (src.getOxyLoss()>0 && stat!=2) while (src.getOxyLoss()>0 && stat!=2)
sleep(50) sleep(50)
src.oxyloss-=1 src.adjustOxyLoss(-1)
src.oxyloss = 0 src.oxyloss = 0
return return
else if (src:aiRestorePowerRoutine==3) else if (src:aiRestorePowerRoutine==3)
@@ -91,8 +91,7 @@
spawn(1) spawn(1)
while (src.getOxyLoss()>0 && stat!=2) while (src.getOxyLoss()>0 && stat!=2)
sleep(50) sleep(50)
src.oxyloss-=1 src.adjustOxyLoss(-1)
src.oxyloss = 0
return return
else else

View File

@@ -41,7 +41,7 @@
/mob/living/silicon/pai/blob_act() /mob/living/silicon/pai/blob_act()
if (src.stat != 2) if (src.stat != 2)
src.bruteloss += 60 src.adjustBruteLoss(60)
src.updatehealth() src.updatehealth()
return 1 return 1
return 0 return 0
@@ -138,7 +138,7 @@
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1) O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
if(prob(8)) if(prob(8))
flick("noise", src.flash) flick("noise", src.flash)
src.bruteloss += damage src.adjustBruteLoss(damage)
src.updatehealth() src.updatehealth()
else else
playsound(src.loc, 'slashmiss.ogg', 25, 1, -1) playsound(src.loc, 'slashmiss.ogg', 25, 1, -1)

View File

@@ -175,7 +175,7 @@
/mob/living/silicon/robot/blob_act() /mob/living/silicon/robot/blob_act()
if (stat != 2) if (stat != 2)
bruteloss += 60 adjustBruteLoss(60)
updatehealth() updatehealth()
return 1 return 1
return 0 return 0
@@ -243,7 +243,7 @@
M.show_message(text("\red [src] has been hit by [O]"), 1) M.show_message(text("\red [src] has been hit by [O]"), 1)
//Foreach goto(19) //Foreach goto(19)
if (health > 0) if (health > 0)
bruteloss += 30 adjustBruteLoss(30)
if ((O.icon_state == "flaming")) if ((O.icon_state == "flaming"))
adjustFireLoss(40) adjustFireLoss(40)
updatehealth() updatehealth()
@@ -354,7 +354,7 @@
user << "There are no dents to fix here!" user << "There are no dents to fix here!"
return return
else if (W:remove_fuel(0)) else if (W:remove_fuel(0))
bruteloss -= 30 adjustBruteLoss(-30)
if(getBruteLoss() < 0) bruteloss = 0 if(getBruteLoss() < 0) bruteloss = 0
updatehealth() updatehealth()
add_fingerprint(user) add_fingerprint(user)
@@ -539,7 +539,7 @@
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1) O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
if(prob(8)) if(prob(8))
flick("noise", flash) flick("noise", flash)
bruteloss += damage adjustBruteLoss(damage)
updatehealth() updatehealth()
else else
playsound(loc, 'slashmiss.ogg', 25, 1, -1) playsound(loc, 'slashmiss.ogg', 25, 1, -1)
@@ -587,7 +587,7 @@
damage = rand(5, 35) damage = rand(5, 35)
damage = round(damage / 2) // borgs recieve half damage damage = round(damage / 2) // borgs recieve half damage
bruteloss += damage adjustBruteLoss(damage)
if(M.powerlevel > 0) if(M.powerlevel > 0)
@@ -617,13 +617,24 @@
s.start() s.start()
if (prob(stunprob) && M.powerlevel >= 8) if (prob(stunprob) && M.powerlevel >= 8)
bruteloss += M.powerlevel * rand(6,10) adjustBruteLoss(M.powerlevel * rand(6,10))
updatehealth() updatehealth()
return return
/mob/living/silicon/robot/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
else
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[M]</B> [M.attacktext] [src]!", 1)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
adjustBruteLoss(damage)
updatehealth()
/mob/living/silicon/robot/attack_hand(mob/user) /mob/living/silicon/robot/attack_hand(mob/user)
add_fingerprint(user) add_fingerprint(user)

View File

@@ -27,7 +27,7 @@
return 1 return 1
/mob/living/silicon/bullet_act(var/obj/item/projectile/Proj) /mob/living/silicon/bullet_act(var/obj/item/projectile/Proj)
if(!Proj.nodamage) bruteloss += Proj.damage if(!Proj.nodamage) adjustBruteLoss(Proj.damage)
Proj.on_hit(src,2) Proj.on_hit(src,2)
return 2 return 2

View File

@@ -1103,28 +1103,39 @@ note dizziness decrements automatically in the mob's Life() proc.
/mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check /mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check
return 0 return 0
/mob/proc/Stun(amount) /mob/proc/Stun(amount)
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun if(canstun)
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
else
if(istype(src, /mob/living/carbon/alien)) // add some movement delay
var/mob/living/carbon/alien/Alien = src
Alien.move_delay_add = min(Alien.move_delay_add + round(amount / 5), 10) // a maximum delay of 10
return return
/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" /mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
stunned = max(amount,0) if(canstun)
stunned = max(amount,0)
return return
/mob/proc/AdjustStunned(amount) /mob/proc/AdjustStunned(amount)
stunned = max(stunned + amount,0) if(canstun)
stunned = max(stunned + amount,0)
return return
/mob/proc/Weaken(amount) /mob/proc/Weaken(amount)
weakened = max(max(weakened,amount),0) if(canweaken)
weakened = max(max(weakened,amount),0)
return return
/mob/proc/SetWeakened(amount) /mob/proc/SetWeakened(amount)
weakened = max(amount,0) if(canweaken)
weakened = max(amount,0)
return return
/mob/proc/AdjustWeakened(amount) /mob/proc/AdjustWeakened(amount)
weakened = max(weakened + amount,0) if(canweaken)
weakened = max(weakened + amount,0)
return return
/mob/proc/Paralyse(amount) /mob/proc/Paralyse(amount)

View File

@@ -0,0 +1,194 @@
//Methods that need to be cleaned.
/* INFORMATION
Put (mob/proc)s here that are in dire need of a code cleanup.
*/
// This proc has some procs that should be extracted from it. I believe we can develop some helper procs from it - Rockdtben
/mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1)
// world << "Contract_disease called by [src] with virus [virus]"
if(stat >=2) return
if(virus.type in resistances)
if(prob(99.9)) return
resistances.Remove(virus.type)//the resistance is futile
for(var/datum/disease/D in viruses)
if(istype(D, virus.type))
return // two viruses of the same kind can't infect a body at once!!
if(force_species_check)
var/fail = 1
for(var/name in virus.affected_species)
var/mob_type = text2path("/mob/living/carbon/[lowertext(name)]")
if(mob_type && istype(src, mob_type))
fail = 0
break
if(fail) return
if(skip_this == 1)
//if(src.virus) < -- this used to replace the current disease. Not anymore!
//src.virus.cure(0)
var/datum/disease/v = new virus.type
viruses += v
v.affected_mob = src
v.strain_data = v.strain_data.Copy()
v.holder = src
if(prob(5))
v.carrier = 1
return
//if(virus) //
//return //
/*
var/list/clothing_areas = list()
var/list/covers = list(UPPER_TORSO,LOWER_TORSO,LEGS,FEET,ARMS,HANDS)
for(var/Covers in covers)
clothing_areas[Covers] = list()
for(var/obj/item/clothing/Clothing in src)
if(Clothing)
for(var/Covers in covers)
if(Clothing&Covers)
clothing_areas[Covers] += Clothing
*/
if(prob(15/virus.permeability_mod)) return //the power of immunity compels this disease!
var/obj/item/clothing/Cl = null
var/passed = 1
//chances to target this zone
var/head_ch
var/body_ch
var/hands_ch
var/feet_ch
switch(virus.spread_type)
if(CONTACT_HANDS)
head_ch = 0
body_ch = 0
hands_ch = 100
feet_ch = 0
if(CONTACT_FEET)
head_ch = 0
body_ch = 0
hands_ch = 0
feet_ch = 100
else
head_ch = 100
body_ch = 100
hands_ch = 25
feet_ch = 25
var/target_zone = pick(head_ch;1,body_ch;2,hands_ch;3,feet_ch;4)//1 - head, 2 - body, 3 - hands, 4- feet
if(istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
switch(target_zone)
if(1)
if(isobj(H.head))
Cl = H.head
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Head pass [passed]"
if(passed && isobj(H.wear_mask))
Cl = H.wear_mask
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Mask pass [passed]"
if(2)//arms and legs included
if(isobj(H.wear_suit))
Cl = H.wear_suit
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Suit pass [passed]"
if(passed && isobj(H.slot_w_uniform))
Cl = H.slot_w_uniform
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Uniform pass [passed]"
if(3)
if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&HANDS)
Cl = H.wear_suit
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Suit pass [passed]"
if(passed && isobj(H.gloves))
Cl = H.gloves
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Gloves pass [passed]"
if(4)
if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&FEET)
Cl = H.wear_suit
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Suit pass [passed]"
if(passed && isobj(H.shoes))
Cl = H.shoes
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Shoes pass [passed]"
else
src << "Something strange's going on, something's wrong."
/*if("feet")
if(H.shoes && istype(H.shoes, /obj/item/clothing/))
Cl = H.shoes
passed = prob(Cl.permeability_coefficient*100)
//
world << "Shoes pass [passed]"
*/ //
else if(istype(src, /mob/living/carbon/monkey))
var/mob/living/carbon/monkey/M = src
switch(target_zone)
if(1)
if(M.wear_mask && isobj(M.wear_mask))
Cl = M.wear_mask
passed = prob(Cl.permeability_coefficient*100+virus.permeability_mod)
//world << "Mask pass [passed]"
if(passed && virus.spread_type == AIRBORNE && internals)
passed = (prob(50*virus.permeability_mod))
if(passed)
//world << "Infection in the mob [src]. YAY"
/*
var/score = 0
if(istype(src, /mob/living/carbon/human))
if(src:gloves) score += 5
if(istype(src:wear_suit, /obj/item/clothing/suit/space)) score += 10
if(istype(src:wear_suit, /obj/item/clothing/suit/bio_suit)) score += 10
if(istype(src:head, /obj/item/clothing/head/helmet/space)) score += 5
if(istype(src:head, /obj/item/clothing/head/bio_hood)) score += 5
if(wear_mask)
score += 5
if((istype(src:wear_mask, /obj/item/clothing/mask) || istype(src:wear_mask, /obj/item/clothing/mask/surgical)) && !internal)
score += 5
if(internal)
score += 5
if(score > 20)
return
else if(score == 20 && prob(95))
return
else if(score >= 15 && prob(75))
return
else if(score >= 10 && prob(55))
return
else if(score >= 5 && prob(35))
return
else if(prob(15))
return
else*/
var/datum/disease/v = new virus.type
viruses += v
v.affected_mob = src
v.strain_data = v.strain_data.Copy()
v.holder = src
if(prob(5))
v.carrier = 1
return
return

View File

@@ -257,15 +257,6 @@
var/halloss = 0 var/halloss = 0
var/hallucination = 0 var/hallucination = 0
// TG Porting Variables
var/canstun = 1 // determines if this mob can be stunned by things
var/canweaken = 1 // determines if this mob can be weakened/knocked down by things
var/nopush = 0 //Can they be shoved?
var/area/lastarea = null
var/digitalcamo = 0 // Can they be tracked by the AI?
/*For ninjas and others. This variable is checked when a mob moves and I guess it was supposed to allow the mob to move /*For ninjas and others. This variable is checked when a mob moves and I guess it was supposed to allow the mob to move
through dense areas, such as walls. Setting density to 0 does the same thing. The difference here is that through dense areas, such as walls. Setting density to 0 does the same thing. The difference here is that
the mob is also allowed to move without any sort of restriction. For instance, in space or out of holder objects.*/ the mob is also allowed to move without any sort of restriction. For instance, in space or out of holder objects.*/
@@ -279,198 +270,22 @@ the mob is also allowed to move without any sort of restriction. For instance, i
var/UI = 'screen1_old.dmi' // For changing the UI from preferences var/UI = 'screen1_old.dmi' // For changing the UI from preferences
// var/obj/effect/organstructure/organStructure = null //for dem organs // var/obj/effect/organstructure/organStructure = null //for dem organs
var/list/organs = list( ) //List of organs.
var/canstun = 1 // determines if this mob can be stunned by things
var/canweaken = 1 // determines if this mob can be weakened/knocked down by things
var/nopush = 0 //Can they be shoved?
var/area/lastarea = null
var/digitalcamo = 0 // Can they be tracked by the AI?
var/list/organs = list( ) //List of organs.
var/list/organs2 = list()
//Singularity wants you! //Singularity wants you!
var/grav_delay = 0 var/grav_delay = 0
var/being_strangled = 0 var/being_strangled = 0
/mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1)
// world << "Contract_disease called by [src] with virus [virus]"
if(stat >=2) return
if(virus.type in resistances)
if(prob(99.9)) return
resistances.Remove(virus.type)//the resistance is futile
for(var/datum/disease/D in viruses)
if(istype(D, virus.type))
return // two viruses of the same kind can't infect a body at once!!
if(force_species_check)
var/fail = 1
for(var/name in virus.affected_species)
var/mob_type = text2path("/mob/living/carbon/[lowertext(name)]")
if(mob_type && istype(src, mob_type))
fail = 0
break
if(fail) return
if(skip_this == 1)
//if(src.virus) < -- this used to replace the current disease. Not anymore!
//src.virus.cure(0)
var/datum/disease/v = new virus.type
viruses += v
v.affected_mob = src
v.strain_data = v.strain_data.Copy()
v.holder = src
if(prob(5))
v.carrier = 1
return
//if(virus) //
//return //
/*
var/list/clothing_areas = list()
var/list/covers = list(UPPER_TORSO,LOWER_TORSO,LEGS,FEET,ARMS,HANDS)
for(var/Covers in covers)
clothing_areas[Covers] = list()
for(var/obj/item/clothing/Clothing in src)
if(Clothing)
for(var/Covers in covers)
if(Clothing&Covers)
clothing_areas[Covers] += Clothing
*/
if(prob(15/virus.permeability_mod)) return //the power of immunity compels this disease!
var/obj/item/clothing/Cl = null
var/passed = 1
//chances to target this zone
var/head_ch
var/body_ch
var/hands_ch
var/feet_ch
switch(virus.spread_type)
if(CONTACT_HANDS)
head_ch = 0
body_ch = 0
hands_ch = 100
feet_ch = 0
if(CONTACT_FEET)
head_ch = 0
body_ch = 0
hands_ch = 0
feet_ch = 100
else
head_ch = 100
body_ch = 100
hands_ch = 25
feet_ch = 25
var/target_zone = pick(head_ch;1,body_ch;2,hands_ch;3,feet_ch;4)//1 - head, 2 - body, 3 - hands, 4- feet
if(istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
switch(target_zone)
if(1)
if(isobj(H.head))
Cl = H.head
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Head pass [passed]"
if(passed && isobj(H.wear_mask))
Cl = H.wear_mask
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Mask pass [passed]"
if(2)//arms and legs included
if(isobj(H.wear_suit))
Cl = H.wear_suit
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Suit pass [passed]"
if(passed && isobj(H.slot_w_uniform))
Cl = H.slot_w_uniform
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Uniform pass [passed]"
if(3)
if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&HANDS)
Cl = H.wear_suit
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Suit pass [passed]"
if(passed && isobj(H.gloves))
Cl = H.gloves
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Gloves pass [passed]"
if(4)
if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&FEET)
Cl = H.wear_suit
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Suit pass [passed]"
if(passed && isobj(H.shoes))
Cl = H.shoes
passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
// world << "Shoes pass [passed]"
else
src << "Something strange's going on, something's wrong."
/*if("feet")
if(H.shoes && istype(H.shoes, /obj/item/clothing/))
Cl = H.shoes
passed = prob(Cl.permeability_coefficient*100)
//
world << "Shoes pass [passed]"
*/ //
else if(istype(src, /mob/living/carbon/monkey))
var/mob/living/carbon/monkey/M = src
switch(target_zone)
if(1)
if(M.wear_mask && isobj(M.wear_mask))
Cl = M.wear_mask
passed = prob(Cl.permeability_coefficient*100+virus.permeability_mod)
//world << "Mask pass [passed]"
if(passed && virus.spread_type == AIRBORNE && internals)
passed = (prob(50*virus.permeability_mod))
if(passed)
//world << "Infection in the mob [src]. YAY"
/*
var/score = 0
if(istype(src, /mob/living/carbon/human))
if(src:gloves) score += 5
if(istype(src:wear_suit, /obj/item/clothing/suit/space)) score += 10
if(istype(src:wear_suit, /obj/item/clothing/suit/bio_suit)) score += 10
if(istype(src:head, /obj/item/clothing/head/helmet/space)) score += 5
if(istype(src:head, /obj/item/clothing/head/bio_hood)) score += 5
if(wear_mask)
score += 5
if((istype(src:wear_mask, /obj/item/clothing/mask) || istype(src:wear_mask, /obj/item/clothing/mask/surgical)) && !internal)
score += 5
if(internal)
score += 5
if(score > 20)
return
else if(score == 20 && prob(95))
return
else if(score >= 15 && prob(75))
return
else if(score >= 10 && prob(55))
return
else if(score >= 5 && prob(35))
return
else if(prob(15))
return
else*/
var/datum/disease/v = new virus.type
viruses += v
v.affected_mob = src
v.strain_data = v.strain_data.Copy()
v.holder = src
if(prob(5))
v.carrier = 1
return
return
// ++++ROCKDTBEN++++ MOB PROCS // ++++ROCKDTBEN++++ MOB PROCS

View File

@@ -207,7 +207,7 @@
s_click(hud1) s_click(hud1)
return return
if(M == assailant && state >= 2) if(M == assailant && state >= 2)
if( ( ishuman(user) /*&& (user.mutations & FAT)*/ && ismonkey(affecting) ) || ( isalien(user) && iscarbon(affecting) ) ) if( ( ishuman(user) && (user.mutations & FAT) && ismonkey(affecting) ) || ( isalien(user) && iscarbon(affecting) ) )
var/mob/living/carbon/attacker = user var/mob/living/carbon/attacker = user
for(var/mob/N in viewers(user, null)) for(var/mob/N in viewers(user, null))
if(N.client) if(N.client)

View File

@@ -29,7 +29,6 @@
alt_name = " (died as [src.real_name])" alt_name = " (died as [src.real_name])"
message = src.say_quote(message) message = src.say_quote(message)
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>[name]</span>[alt_name] <span class='message'>[message]</span></span>" var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>[name]</span>[alt_name] <span class='message'>[message]</span></span>"
for (var/mob/M in world) for (var/mob/M in world)
@@ -60,7 +59,7 @@
return "stammers, \"[text]\""; return "stammers, \"[text]\"";
if (src.slurring) if (src.slurring)
return "slurrs, \"[text]\""; return "slurrs, \"[text]\"";
if (src.brainloss >= 60) if (src.getBrainLoss() >= 60)
return "gibbers, \"[text]\""; return "gibbers, \"[text]\"";
if (ending == "?") if (ending == "?")
return "asks, \"[text]\""; return "asks, \"[text]\"";

View File

@@ -15,6 +15,7 @@
response_disarm = "gently pushes aside the" response_disarm = "gently pushes aside the"
response_harm = "stomps the" response_harm = "stomps the"
stop_automated_movement = 1 stop_automated_movement = 1
friendly = "pinches"
/mob/living/simple_animal/crab/Life() /mob/living/simple_animal/crab/Life()
..() ..()

View File

@@ -38,7 +38,8 @@
var/max_co2 = 5 var/max_co2 = 5
var/min_n2 = 0 var/min_n2 = 0
var/max_n2 = 0 var/max_n2 = 0
var/unsuitable_atoms_damage = 2 //This damage is taken when atmos doesn't fit all the requirements above. var/unsuitable_atoms_damage = 2 //This damage is taken when atmos doesn't fit all the requirements above
//LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly //LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly
var/melee_damage_lower = 0 var/melee_damage_lower = 0
@@ -46,7 +47,6 @@
var/attacktext = "attacks" var/attacktext = "attacks"
var/attack_sound = null var/attack_sound = null
var/friendly = "nuzzles" //If the mob does no damage with it's attack var/friendly = "nuzzles" //If the mob does no damage with it's attack
var/wall_smash = 0 //if they can smash walls
/mob/living/simple_animal/New() /mob/living/simple_animal/New()
..() ..()
@@ -197,14 +197,26 @@
return "[emote], \"[text]\"" return "[emote], \"[text]\""
return "says, \"[text]\""; return "says, \"[text]\"";
/mob/living/simple_animal/emote(var/act,var/m_type=1,var/message = null) /mob/living/simple_animal/emote(var/act)
if(act == "me") if(act)
for (var/mob/O in viewers(src, null))
O.show_message("<B>[src]</B> [message]")
else if(act)
for (var/mob/O in viewers(src, null)) for (var/mob/O in viewers(src, null))
O.show_message("<B>[src]</B> [act].") O.show_message("<B>[src]</B> [act].")
/mob/living/simple_animal/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
else
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[M]</B> [M.attacktext] [src]!", 1)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
health -= damage
/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
if(!Proj) return
src.health -= Proj.damage
return 0
/mob/living/simple_animal/attack_hand(mob/living/carbon/human/M as mob) /mob/living/simple_animal/attack_hand(mob/living/carbon/human/M as mob)
..() ..()

View File

@@ -0,0 +1,46 @@
/mob/living/simple_animal/shade
name = "Shade"
desc = "A bound spirit"
icon = 'mob.dmi'
icon_state = "shade"
icon_living = "shade"
icon_dead = "shade_dead"
max_health = 50
health = 50
speak_emote = list("hisses")
emote_hear = list("wails","screeches")
response_help = "puts their hand through"
response_disarm = "flails at"
response_harm = "punches the"
melee_damage_lower = 5
melee_damage_upper = 15
attacktext = "drains the life from"
minbodytemp = 0
maxbodytemp = 4000
min_oxy = 0
max_co2 = 0
max_tox = 0
/mob/living/simple_animal/shade/Life()
..()
if (stat == 2)
new /obj/item/weapon/ectoplasm (src.loc)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red [src] lets out a contented sigh as their form unwinds. ")
del src
/mob/living/simple_animal/shade/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
if(istype(O, /obj/item/device/soulstone))
O.transfer_soul("SHADE", src, user)
else
if(O.force)
health -= O.force
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
else
usr << "\red This weapon is ineffective, it does no damage."
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red [user] gently taps [src] with the [O]. ")

View File

@@ -53,6 +53,9 @@
return return
for(var/name in organs) for(var/name in organs)
del(organs[name]) del(organs[name])
if(client)
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // stop the jams for AIs
return ..() return ..()
/mob/living/carbon/AIize() /mob/living/carbon/AIize()

View File

@@ -780,11 +780,11 @@
return 0 return 0
var/mob/living/carbon/human/H = user var/mob/living/carbon/human/H = user
if (istype(H)) if (istype(H))
if(H.brainloss >= 60) if(H.getBrainLoss() >= 60)
for(var/mob/M in viewers(src, null)) for(var/mob/M in viewers(src, null))
M << "\red [H] stares cluelessly at [src] and drools." M << "\red [H] stares cluelessly at [src] and drools."
return 0 return 0
else if(prob(H.brainloss)) else if(prob(H.getBrainLoss()))
user << "\red You momentarily forget how to use [src]." user << "\red You momentarily forget how to use [src]."
return 0 return 0
return 1 return 1

View File

@@ -2,20 +2,24 @@
name = "Emitter" name = "Emitter"
desc = "A heavy duty industrial laser" desc = "A heavy duty industrial laser"
icon = 'singularity.dmi' icon = 'singularity.dmi'
icon_state = "Emitter" icon_state = "emitter"
anchored = 0 anchored = 0
density = 1 density = 1
req_access = list(access_engine) req_access = list(access_engine)
var/active = 0
var/fire_delay = 100
var/last_shot = 0
var/shot_number = 0
var/state = 0
var/locked = 0
use_power = 1 use_power = 1
idle_power_usage = 10 idle_power_usage = 10
active_power_usage = 300 active_power_usage = 300
var
active = 0
fire_delay = 100
last_shot = 0
shot_number = 0
state = 0
locked = 0
verb/rotate() verb/rotate()
set name = "Rotate" set name = "Rotate"
set category = "Object" set category = "Object"
@@ -35,9 +39,9 @@
update_icon() update_icon()
if (active && !(stat & (NOPOWER|BROKEN))) if (active && !(stat & (NOPOWER|BROKEN)))
icon_state = "Emitter +a" icon_state = "emitter_+a"
else else
icon_state = "Emitter" icon_state = "emitter"
attack_hand(mob/user as mob) attack_hand(mob/user as mob)
@@ -56,15 +60,15 @@
src.use_power = 2 src.use_power = 2
update_icon() update_icon()
else else
user << "The controls are locked!" user << "\red The controls are locked!"
else else
user << "The [src] needs to be firmly secured to the floor first." user << "\red The [src] needs to be firmly secured to the floor first."
return 1 return 1
emp_act()//Emitters are hardened but still might have issues emp_act(var/severity)//Emitters are hardened but still might have issues
use_power(50) use_power(50)
if(prob(1)&&prob(1)) if((severity == 1)&&prob(1)&&prob(1))
if(src.active) if(src.active)
src.active = 0 src.active = 0
src.use_power = 1 src.use_power = 1
@@ -87,7 +91,7 @@
src.shot_number = 0 src.shot_number = 0
use_power(1000) use_power(1000)
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc ) var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
A.icon_state = "u_laser" A.icon_state = "emitter"
playsound(src.loc, 'emitter.ogg', 25, 1) playsound(src.loc, 'emitter.ogg', 25, 1)
if(prob(35)) if(prob(35))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
@@ -113,6 +117,7 @@
attackby(obj/item/W, mob/user) attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/wrench)) if(istype(W, /obj/item/weapon/wrench))
if(active) if(active)
user << "Turn off the [src] first." user << "Turn off the [src] first."
@@ -123,27 +128,26 @@
playsound(src.loc, 'Ratchet.ogg', 75, 1) playsound(src.loc, 'Ratchet.ogg', 75, 1)
user.visible_message("[user.name] secures [src.name] to the floor.", \ user.visible_message("[user.name] secures [src.name] to the floor.", \
"You secure the external reinforcing bolts to the floor.", \ "You secure the external reinforcing bolts to the floor.", \
"You hear ratchet") "You hear a ratchet")
src.anchored = 1 src.anchored = 1
if(1) if(1)
state = 0 state = 0
playsound(src.loc, 'Ratchet.ogg', 75, 1) playsound(src.loc, 'Ratchet.ogg', 75, 1)
user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \ user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \
"You undo the external reinforcing bolts.", \ "You undo the external reinforcing bolts.", \
"You hear ratchet") "You hear a ratchet")
src.anchored = 0 src.anchored = 0
if(2) if(2)
user << "\red The [src.name] needs to be unwelded from the floor." user << "\red The [src.name] needs to be unwelded from the floor."
return return
else if(istype(W, /obj/item/weapon/weldingtool) && W:welding) if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
if(active) if(active)
user << "Turn off the [src] first." user << "Turn off the [src] first."
return return
switch(state) switch(state)
if(0) if(0)
user << "\red The [src.name] needs to be wrenched to the floor." user << "\red The [src.name] needs to be wrenched to the floor."
return
if(1) if(1)
if (W:remove_fuel(0,user)) if (W:remove_fuel(0,user))
W:welding = 2 W:welding = 2
@@ -156,8 +160,7 @@
user << "You weld the [src] to the floor." user << "You weld the [src] to the floor."
W:welding = 1 W:welding = 1
else else
user << "\blue You need more welding fuel to complete this task." user << "\red You need more welding fuel to complete this task."
return
if(2) if(2)
if (W:remove_fuel(0,user)) if (W:remove_fuel(0,user))
W:welding = 2 W:welding = 2
@@ -170,20 +173,36 @@
user << "You cut the [src] free from the floor." user << "You cut the [src] free from the floor."
W:welding = 1 W:welding = 1
else else
user << "\blue You need more welding fuel to complete this task." user << "\red You need more welding fuel to complete this task."
return return
else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (src.allowed(user)) if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))
src.locked = !src.locked if(emagged)
user << "Controls are now [src.locked ? "locked." : "unlocked."]" user << "\red The lock seems to be broken"
return
if(src.allowed(user))
if(active)
src.locked = !src.locked
user << "The controls are now [src.locked ? "locked." : "unlocked."]"
else
src.locked = 0 //just in case it somehow gets locked
user << "\red The controls can only be locked when the [src] is online"
else else
user << "\red Access denied." user << "\red Access denied."
return
else
..()
return return
if(istype(W, /obj/item/weapon/card/emag) && !emagged)
locked = 0
emagged = 1
user.visible_message("[user.name] emags the [src.name].","\red You short out the lock.")
return
..()
return
power_change() power_change()
..() ..()
update_icon() update_icon()
return

View File

@@ -67,7 +67,7 @@ PE|PE|PE
examine() examine()
set src in usr set src in oview(1)
switch(src.construction_state) switch(src.construction_state)
if(0) if(0)
src.desc = text("Part of a Particle Accelerator, looks like its not attached to the flooring") src.desc = text("Part of a Particle Accelerator, looks like its not attached to the flooring")
@@ -89,6 +89,35 @@ PE|PE|PE
return return
ex_act(severity)
switch(severity)
if(1.0)
del(src)
return
if(2.0)
if (prob(50))
del(src)
return
if(3.0)
if (prob(25))
del(src)
return
else
return
blob_act()
if(prob(50))
del(src)
return
meteorhit()
if(prob(50))
del(src)
return
proc proc
update_state() update_state()
if(master) if(master)
@@ -161,15 +190,16 @@ PE|PE|PE
if(temp_state == src.construction_state)//Nothing changed if(temp_state == src.construction_state)//Nothing changed
return 0 return 0
else else
if(src.construction_state >= 3)//Was taken apart, update state
update_state()
src.construction_state = temp_state src.construction_state = temp_state
if(src.construction_state < 3)//Was taken apart, update state
update_state()
update_icon() update_icon()
return 1 return 1
return 0 return 0
/obj/machinery/particle_accelerator/
/obj/machinery/particle_accelerator
name = "Particle Accelerator" name = "Particle Accelerator"
desc = "Part of a Particle Accelerator." desc = "Part of a Particle Accelerator."
icon = 'particle_accelerator.dmi' icon = 'particle_accelerator.dmi'
@@ -217,6 +247,34 @@ PE|PE|PE
..() ..()
return return
ex_act(severity)
switch(severity)
if(1.0)
del(src)
return
if(2.0)
if (prob(50))
del(src)
return
if(3.0)
if (prob(25))
del(src)
return
else
return
blob_act()
if(prob(50))
del(src)
return
meteorhit()
if(prob(50))
del(src)
return
proc proc
update_state() update_state()
@@ -266,7 +324,7 @@ PE|PE|PE
if(temp_state == src.construction_state)//Nothing changed if(temp_state == src.construction_state)//Nothing changed
return 0 return 0
else else
if(src.construction_state >= 3)//Was taken apart, update state if(src.construction_state < 3)//Was taken apart, update state
update_state() update_state()
if(use_power) if(use_power)
use_power = 0 use_power = 0

Some files were not shown because too many files have changed in this diff Show More