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/carbon"
#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/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/PDA"
#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/implants"
#define FILE_DIR "code/game/objects/radio"
@@ -153,6 +151,7 @@
#define FILE_DIR "code/unused/mining"
#define FILE_DIR "code/unused/optics"
#define FILE_DIR "code/unused/pda2"
#define FILE_DIR "code/unused/powerarmor"
#define FILE_DIR "code/unused/spacecraft"
#define FILE_DIR "code/WorkInProgress"
#define FILE_DIR "code/WorkInProgress/Apples"
@@ -315,15 +314,10 @@
#include "code\defines\mob\living\silicon\pai.dm"
#include "code\defines\mob\living\silicon\robot.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\clothing.dm"
#include "code\defines\obj\computer.dm"
#include "code\defines\obj\decal.dm"
#include "code\defines\obj\door.dm"
#include "code\defines\obj\hydro.dm"
#include "code\defines\obj\machinery.dm"
#include "code\defines\obj\radio.dm"
@@ -545,6 +539,7 @@
#include "code\game\machinery\doors\firedoor.dm"
#include "code\game\machinery\doors\poddoor.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\embedded_controller\access_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\closets\bombsuit.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\gimmick.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\tk_grab.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\cameras.dm"
#include "code\game\objects\items\weapons\cards_ids.dm"
@@ -792,6 +787,7 @@
#include "code\modules\assembly\timer.dm"
#include "code\modules\chemical\Chemistry-Holder.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-Recipes.dm"
#include "code\modules\chemical\Chemistry-Tools.dm"
@@ -840,6 +836,7 @@
#include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\flufftext\TextFilters.dm"
#include "code\modules\food\food.dm"
#include "code\modules\food\meat.dm"
#include "code\modules\food\recipes_microwave.dm"
#include "code\modules\mining\datum_processing_recipe.dm"
#include "code\modules\mining\machine_input_output_plates.dm"
@@ -856,6 +853,7 @@
#include "code\modules\mob\login.dm"
#include "code\modules\mob\logout.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_grab.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_internal.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\cable.dm"
#include "code\modules\power\cell.dm"
@@ -1081,6 +1084,7 @@
#include "code\WorkInProgress\AI_Visibility.dm"
#include "code\WorkInProgress\buildmode.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\tajara_transformation.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
@@ -1091,6 +1095,8 @@
#include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Mini\pipe_heater.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\policetape.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
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)
return 0
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
var/datum/gas_mixture/GM = new
@@ -39,11 +29,6 @@ turf
return GM
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/sum = oxygen + carbon_dioxide + nitrogen + toxins

View File

@@ -103,72 +103,11 @@
/obj/organ/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/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
name = "human torso"
species = "human"
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()
..()
@@ -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/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
name = "alien arms"
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
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
name = "human legs"
species = "human"
@@ -241,47 +163,9 @@ the mob is also allowed to move without any sort of restriction. For instance, i
/obj/organ/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
name = "human head"
species = "human"
var/obj/item/clothing/mask/wear_mask = null//Carbon
/obj/organ/head/alien
name = "alien head"

View File

@@ -305,7 +305,7 @@ proc/airborne_can_reach(turf/source, turf/target)
stage = 4
activate(var/mob/living/carbon/mob,var/multiplier)
mob << "\red You feel something tearing its way out of your stomach..."
mob.toxloss += 10
mob.adjustToxLoss(10)
mob.updatehealth()
if(prob(40))
if(mob.client)
@@ -340,7 +340,7 @@ proc/airborne_can_reach(turf/source, turf/target)
stage = 3
maxm = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.toxloss += (2*multiplier)
mob.adjustToxLoss((2*multiplier))
/datum/disease2/effect/greater/drowsness
name = "Automated sleeping syndrome"
@@ -425,7 +425,7 @@ proc/airborne_can_reach(turf/source, turf/target)
name = "Toxification syndrome"
stage = 4
activate(var/mob/living/carbon/mob,var/multiplier)
mob.toxloss += 15
mob.adjustToxLoss(15)
/datum/disease2/effect/greater/sleepy
name = "Resting syndrome"
@@ -437,7 +437,7 @@ proc/airborne_can_reach(turf/source, turf/target)
name = "Lazy mind syndrome"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.brainloss = 50
mob.setBrainLoss(50)
/datum/disease2/effect/greater/suicide
name = "Suicidal syndrome"
@@ -446,7 +446,7 @@ proc/airborne_can_reach(turf/source, turf/target)
mob.suiciding = 1
//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>"
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()
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
@@ -462,7 +462,7 @@ proc/airborne_can_reach(turf/source, turf/target)
name = "Lazy mind syndrome"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.brainloss = 20
mob.setBrainLoss(20)
/datum/disease2/effect/lesser/deaf
name = "Hard of hearing syndrome"

View File

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

View File

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

View File

@@ -14,11 +14,13 @@
..()
switch(stage)
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."
cure()
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."
cure()
return
@@ -35,11 +37,13 @@
if(prob(1))
affected_mob << "\red Mucus runs down the back of your throat."
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."
cure()
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."
cure()
return

View File

@@ -15,7 +15,13 @@
..()
switch(stage)
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."
stage--
return
@@ -34,7 +40,13 @@
affected_mob.updatehealth()
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."
stage--
return
@@ -51,9 +63,4 @@
if(prob(20))
affected_mob.adjustToxLoss(1)
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

View File

@@ -30,11 +30,13 @@
switch(stage)
if(1)
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."
cure()
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."
cure()
return
@@ -46,11 +48,13 @@
affected_mob << "\red You feel angry."
if(2)
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."
cure()
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."
cure()
return
@@ -65,11 +69,13 @@
affected_mob << "\red Your stomach churns."
if(3)
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."
cure()
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."
cure()
return
@@ -84,11 +90,13 @@
if(4)
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."
cure()
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."
cure()
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"
deny_shuttle = 0 //for admins not allowing it to be called.
departed = 0
sound_siren = 1 //if siren should go off
// call the shuttle
// if not called before, set the endtime to T+600 seconds
// otherwise if outgoing, switch to incoming
@@ -34,6 +34,13 @@ datum/shuttle_controller
else
settimeleft(SHUTTLEARRIVETIME*coeff)
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()
if(direction == 1)
@@ -45,6 +52,11 @@ datum/shuttle_controller
world << sound('shuttlerecalled.ogg')
setdirection(-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
@@ -83,6 +95,11 @@ datum/shuttle_controller
var/timeleft = timeleft()
if(timeleft > 1e5) // midnight rollover protection
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)
if(0)
if(timeleft>timelimit)

View File

@@ -28,9 +28,13 @@
return null
proc/return_air()
if(loc)
return loc.return_air()
else
return null
// Convenience proc to see if a container is open for chemistry handling
// returns true if open
// false if closed

View File

@@ -14,3 +14,8 @@
var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie
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
// 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
// if adult: if 10: reproduces
var/powerlevel = 0 // 1-10 controls how much electricity they are generating

View File

@@ -10,8 +10,8 @@
var/welded = 0
var/wall_mounted = 0 //never solid (You can always pass over it)
flags = FPRINT
var/health = 100 //Might be a bit much, dono can always change later //Nerfed -Pete
var/lastbang //
var/health = 100
var/lastbang
var/lasttry = 0
layer = 2.98
@@ -79,202 +79,6 @@
density = 0
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
name = "Tool Closet"
desc = "A bulky (yet mobile) closet. Contains tools."
@@ -374,93 +178,6 @@
// 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
name = "Administrative Supply Closet"
@@ -780,6 +497,9 @@
icon_off = "fridge1"
req_access = list(access_heads_vault)
/obj/structure/closet/secure_closet/personal/patient
name = "patient's closet"
/obj/structure/closet/secure_closet/wall
name = "wall locker"
req_access = list(access_security)

View File

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

View File

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

View File

@@ -562,7 +562,7 @@
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/peripherals") //TEMPORARY due to lack of circuitboard printer
cost = 40
cost = 30
containertype = "/obj/structure/closet/crate/secure"
containername = "APLU \"Ripley\" Circuit Crate"
access = access_robotics
@@ -584,6 +584,18 @@
access = access_medical
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
name = "Robotics Assembly Crate"
contains = list("/obj/item/device/assembly/prox_sensor",

View File

@@ -50,8 +50,6 @@
/atom/proc/attack_metroid(mob/user as mob)
return
/atom/proc/hand_h(mob/user as mob) //human (hand) - restrained
return
@@ -88,6 +86,30 @@
O << text("\red <B>[] has been hit by [] with []</B>", src, user, W)
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)
if(isnull(M)) return

View File

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

View File

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

View File

@@ -273,7 +273,7 @@
if (!disk_rescued && station_was_nuked && !herp)
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>"
else if (!disk_rescued && station_was_nuked && herp)
@@ -283,7 +283,7 @@
else if (!disk_rescued && !station_was_nuked && derp && !herp)
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!"
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 << "<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 )
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>"
else if (!disk_rescued && is_operatives_are_dead())
feedback_set_details("round_end_result","loss - evacuation - disk not secured")
world << "<FONT size = 3><B>Crew Victory</B></FONT>"
world << "<B>The Research Staff has stopped the [syndicate_name()] Operatives!</B>"
world << "<FONT size = 3><B>Syndicate Minor Victory!</B></FONT>"
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)
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!"
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."
w_class = 1.0
flags = FPRINT | TABLEPASS | ONBELT
var/flush = null
origin_tech = "bluespace=4;materials=4"
var/imprinted = "empty"
//////////////////////////////Capturing////////////////////////////////////////////////////////
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.
@@ -22,14 +22,25 @@
transfer_soul("VICTIM", M, user)
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)
if (!in_range(src, user))
return
user.machine = src
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 += {"<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")
onclose(user, "aicard")
return
@@ -37,15 +48,50 @@
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).
switch(choice)
if("VICTIM")
var/mob/living/carbon/human/T = target
var/obj/item/device/soulstone/C = src
if(C.imprinted != "empty")
U << "\red <b>Capture failed!</b>: \black The soul stone has already been imprinted with [C.imprinted]'s mind!"
else
if (T.stat == 0)
U << "\red <b>Capture failed!</b>: \black Kill or maim the victim first!"
else
if(T.ckey == null)
if(T.client == null)
U << "\red <b>Capture failed!</b>: \black The soul has already fled it's mortal frame."
else
if(C.contents.len)
@@ -61,22 +107,38 @@
animation.master = T
flick("dust-h", animation)
del(animation)
T.nodamage = 1 //So they won't suffocate inside the stone
T.canmove = 0//Can't move out of the soul stone
T.loc = C//Throw "soul" into the stone.
T.stat = 0//Revive the victim as a "soul"
T.mutantrace = "trappedsoul" //To prevent suicide/maybe some other special effects later on
T.setToxLoss(0)
T.setOxyLoss(0)
T.setCloneLoss(0)
T.SetParalysis(0)
T.SetStunned(0)
T.SetWeakened(0)
T.radiation = 0
T.heal_overall_damage(T.getBruteLoss(), T.getFireLoss())
T.cancel_camera()
T.nodamage = 1 //So they won't suffocate inside the stone
var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade( T.loc )
S.loc = C //put shade in stone
S.nodamage = 1 //So they won't die inside the stone somehow
S.canmove = 0//Can't move out of the soul stone
S.name = "Shade of [T.name]"
if (T.client)
T.client.mob = S
S.cancel_camera()
C.icon_state = "soulstone2"
T << "Your soul has been captured!"
C.name = "Soul Stone: [S.name]"
S << "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs."
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"
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 has been recaptured and stored within the soul stone."
return

View File

@@ -28,10 +28,13 @@
dat += "<HR>"
dat += "<B>Artefacts:</B><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 += "<A href='byond://?src=\ref[src];spell_choice=14'>Staff of Change</A><BR>"
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")
onclose(user, "radio")
return
@@ -106,6 +109,10 @@
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.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")
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
@@ -160,7 +167,11 @@
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.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()
if(usr in A.contents)
src.uses = src.max_uses

View File

@@ -69,7 +69,7 @@
while(!accepted)
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")
B.icon_state = "koran"
B.item_state = "koran"
@@ -80,9 +80,6 @@
if("Scrapbook")
B.icon_state = "scrapbook"
B.item_state = "scrapbook"
if("Daederic Scroll")
B.icon_state = "daederic_scroll"
B.item_state = "daederic"
if("Creeper")
B.icon_state = "creeper"
B.item_state = "syringe_kit"

View File

@@ -78,6 +78,7 @@
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/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/shoes/black(H), H.slot_shoes)
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)
M.adjustOxyLoss(-amount)
else
M.oxyloss = 0
M.adjustOxyLoss(-12)
M.updatehealth()
M.AdjustParalysis(-4)
M.AdjustWeakened(-4)

View File

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

View File

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

View File

@@ -258,6 +258,9 @@
O << "The screen bursts into static."
..()
/obj/machinery/camera/emp_proof/emp_act(severity)
return
/obj/machinery/camera/ex_act(severity)
if(src.invuln)
return
@@ -356,11 +359,13 @@
O.show_message(text("\red [] has deactivated []!", user, src), 1)
playsound(src.loc, 'Wirecutter.ogg', 100, 1)
icon_state = "camera1"
add_hiddenprint(user)
else
for(var/mob/O in viewers(user, null))
O.show_message(text("\red [] has reactivated []!", user, src), 1)
playsound(src.loc, 'Wirecutter.ogg', 100, 1)
icon_state = "camera"
add_hiddenprint(user)
// now disconnect anyone using the camera
//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?

View File

@@ -400,7 +400,6 @@
emergency_shuttle.fake_recall = rand(300,500)
if(ticker.mode.name == "blob")
if(ticker.mode:declared)
user << "Under directive 7-10, [station_name()] is quarantined until further notice."
return

View File

@@ -348,7 +348,7 @@ obj/item/weapon/circuitboard/rdserver
"/obj/item/weapon/stock_parts/subspace/filter" = 1)
/obj/item/weapon/circuitboard/telecomms/broadcaster
name = "Circuit Board (Bus Mainframe)"
name = "Circuit Board (Subspace Broadcaster)"
build_path = "/obj/machinery/telecomms/broadcaster"
board_type = "machine"
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/amplifier" = 1,
"/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
mining
name = "Mining Airlock"
icon = 'Doormining.dmi'
doortype = 18
atmos
name = "Atmospherics Airlock"
icon = 'Dooratmo.dmi'
doortype = 19
New()
..()
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)
if(p_open || operating) return
if(ismob(AM))

View File

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

View File

@@ -1,9 +1,10 @@
//cael - added this for the lockdown computer
/obj/machinery/door/poddoor/Topic(href, href_list)
if(href_list["close"])
close()
if(href_list["open"])
open()
/obj/machinery/door/poddoor
name = "Podlock"
desc = "A type of powerful blast door."
icon = 'rapid_pdoor.dmi'
icon_state = "pdoor1"
var/id = 1.0
var/networkTag = ""
/obj/machinery/door/poddoor/Bumped(atom/AM)
if(!density)
@@ -271,3 +272,106 @@
sleep(10)
src.operating = 0
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)
if(!air_master) return 0
@@ -148,3 +159,80 @@
else if (src.density)
flick(text("[]deny", src.base_state), src)
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
attack_hand(mob/M as mob)
if(isrobot(M) || isAI(M))
return
if(busy)
M << "\red Someone's already washing something here."
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=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=soulstone'>Kal om neth</A> - Summons a soul stone<BR>"
usr << browse(dat, "window=id_com;size=350x200")
return
@@ -104,6 +105,8 @@
if("armor")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "armor"
if("soulstone")
new /obj/item/device/soulstone(get_turf(usr))
src.uses--
supply()
return

View File

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

View File

@@ -1247,8 +1247,8 @@
if(hasInternalDamage(intdamflag))
output += dam_reports[tflag]
output += "<br />"
/* if(return_pressure() > WARNING_HIGH_PRESSURE)
output += "<font color='red'><b>DANGEROUSLY HIGH CABIN PRESSURE</b></font><br />"*/
if(return_pressure() > WARNING_HIGH_PRESSURE)
output += "<font color='red'><b>DANGEROUSLY HIGH CABIN PRESSURE</b></font><br />"
return output
@@ -1257,7 +1257,7 @@
var/cell_charge = get_charge()
var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None"
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()]
[integrity<30?"<font color='red'><b>DAMAGE LEVEL CRITICAL</b></font><br>":null]
<b>Integrity: </b> [integrity]%<br>
@@ -1265,6 +1265,7 @@
<b>Air source: </b>[use_internal_tank?"Internal Airtank":"Environment"]<br>
<b>Airtank pressure: </b>[tank_pressure]kPa<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>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]

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)

View File

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

View File

@@ -25,7 +25,17 @@
relaymove(var/mob/user, direction)
if(can_move)
can_move = 0
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)
return

View File

@@ -69,6 +69,33 @@ obj/structure/door_assembly
glass = 1
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
name = "Medical Airlock Assembly"
icon_state = "door_as_med1"

View File

@@ -419,3 +419,24 @@ THERMAL GLASSES
icon_state = "engspace_helmet_clear"
usr << "You toggle the reflective tint off."
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
else
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.Stun(1)
M.Weaken(1)
@@ -172,7 +172,7 @@ STUN BATON
R.cell.charge -= 20
else
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.Stun(10)
M.Weaken(10)

View File

@@ -18,17 +18,19 @@ RACK PARTS
del(src)
/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)
return
// WOODEN TABLE PARTS
/obj/item/weapon/table_parts/wood/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/wrench))
new /obj/item/stack/sheet/wood( src.loc )
//SN src = null
del(src)
else
..()
/obj/item/weapon/table_parts/wood/attack_self(mob/user as mob)
new /obj/structure/table/woodentable( user.loc )

View File

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

View File

@@ -20,7 +20,7 @@
/obj/item/stack/examine()
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
/obj/item/stack/proc/use(var/amount)
@@ -204,6 +204,12 @@
del(oldsrc)
if (istype(O,/obj/item))
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
spawn( 0 )
src.interact(usr)

View File

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

View File

@@ -3,6 +3,15 @@
name = "shuttle"
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
name = "engine"
density = 1

View File

@@ -142,6 +142,7 @@
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
W.levelupdate()
air_master.tiles_to_update += W
return W
/turf/proc/ReplaceWithPlating()
@@ -158,6 +159,7 @@
W.opacity = 1
W.sd_SetOpacity(0)
W.levelupdate()
air_master.tiles_to_update += W
return W
/turf/proc/ReplaceWithEngineFloor()
@@ -170,6 +172,7 @@
E.dir = old_dir
E.icon_state = "engine"
E.levelupdate()
air_master.tiles_to_update += E
return E
/turf/simulated/Entered(atom/A, atom/OL)
@@ -231,6 +234,7 @@
var/old_dir = dir
var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
S.dir = old_dir
air_master.tiles_to_update += S
return S
/turf/proc/ReplaceWithLattice()
@@ -238,6 +242,7 @@
var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
S.dir = old_dir
new /obj/structure/lattice( locate(src.x, src.y, src.z) )
air_master.tiles_to_update += S
return S
/turf/proc/ReplaceWithWall()
@@ -247,6 +252,7 @@
S.opacity = 0
S.sd_NewOpacity(1)
levelupdate()
air_master.tiles_to_update += S
return S
/turf/proc/ReplaceWithRWall()
@@ -256,6 +262,7 @@
S.opacity = 0
S.sd_NewOpacity(1)
levelupdate()
air_master.tiles_to_update += S
return S
/turf/simulated/wall/New()

View File

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

View File

@@ -1496,7 +1496,7 @@
for(var/mob/living/carbon/human/H in world)
if(H.client)
H << "\red <B>You suddenly feel stupid.</B>"
H.brainloss = 60
H.setBrainLoss(60)
message_admins("[key_name_admin(usr)] made everybody retarded")
else
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/cmd_modify_object_variables --Merged with view variables
verbs += /client/proc/cmd_modify_ticker_variables
verbs += /client/proc/toggleadminhelpsound
// Admin helpers
verbs += /client/proc/toggle_view_range

View File

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

View File

@@ -22,6 +22,14 @@
see_face = 0.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
name = "security RIG helmet"
icon_state = "rig-security"
@@ -48,10 +56,16 @@
/obj/item/clothing/suit/space/rig/engspace_suit
name = "engineering space suit"
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
icon_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
name = "security RIG suit"
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
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/storage/wcoat
name = "waistcoat"
desc = "The height of class."
@@ -14,7 +13,6 @@
item_state = "wcoat"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/suit/storage/apron
name = "apron"
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
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
name = "Chef's apron"
name = "chef's apron"
desc = "An apron used by a high class chef. Has a few pockets for nic-naks."
icon_state = "chef"
item_state = "chef"
@@ -36,29 +33,25 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list (/obj/item/weapon/kitchenknife,/obj/item/weapon/butch)
/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."
icon_state = "apronchef"
item_state = "apronchef"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/suit/hazardvest
name = "hazard vest"
desc = "A high-visibility vest used in work zones."
icon_state = "hazard"
item_state = "hazard"
/obj/item/clothing/suit/suspenders
name = "suspenders"
desc = "They suspend the illusion of the mime's play."
icon = 'belts.dmi'
icon_state = "suspenders"
/obj/item/clothing/suit/syndicatefake
name = "red space suit replica"
icon_state = "syndicate"
@@ -69,7 +62,6 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/storage/captunic
name = "captain's parade tunic"
desc = "Worn by a Captain to show their class."
@@ -78,7 +70,6 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
/obj/item/clothing/suit/nun
name = "nun robe"
desc = "Maximum piety in this star system."
@@ -101,49 +92,49 @@
item_state = "chaplain_hoodie"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
/obj/item/clothing/suit/hastur
name = "Hastur's Robes"
name = "Hastur's robes"
desc = "Robes not meant to be worn by man"
icon_state = "hastur"
item_state = "hastur"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/imperium_monk
name = "Imperium monk"
name = "imperium monk robes"
desc = "A set of strange robes."
icon_state = "imperium_monk"
item_state = "imperium_monk"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/chickensuit
name = "Chicken Suit"
name = "chicken suit"
desc = "Bwak!"
icon_state = "chickensuit"
item_state = "chickensuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HEAD
flags_inv = HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/monkeysuit
name = "Monkey Suit"
name = "monkey suit"
desc = "A suit that looks like a primate"
icon_state = "monkeysuit"
item_state = "monkeysuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/holidaypriest
name = "Holiday Priest"
name = "holiday priest"
desc = "This is a nice holiday my son."
icon_state = "holidaypriest"
item_state = "holidaypriest"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
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**************************/
/obj/machinery/mineral/processing_unit_console
name = "Produciton machine console"
name = "production machine console"
icon = 'mining_machines.dmi'
icon_state = "console"
density = 1
anchored = 1
var/id = ""
var/obj/machinery/mineral/processing_unit/machine = null
var/machinedir = EAST
/obj/machinery/mineral/processing_unit_console/New()
..()
spawn(7)
/**
src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, EAST))
src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
if (machine)
machine.CONSOLE = src
else
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)

View File

@@ -1,28 +1,19 @@
/**********************Mineral stacking unit console**************************/
/obj/machinery/mineral/stacking_unit_console
name = "Stacking machine console"
name = "stacking machine console"
icon = 'mining_machines.dmi'
icon_state = "console"
density = 1
anchored = 1
var/id = ""
var/obj/machinery/mineral/stacking_machine/machine = null
var/machinedir = SOUTHEAST
/obj/machinery/mineral/stacking_unit_console/New()
..()
spawn(7)
/**
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
src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
if (machine)
machine.CONSOLE = src
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)
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)
death()
else if(src.health < config.health_threshold_crit)
if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!src.rejuv) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.adjustOxyLoss(1)
if(src.stat != 2) src.stat = 1
Paralyse(5)

View File

@@ -92,13 +92,16 @@
if(src.resting)
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)
death()
else if(src.health < config.health_threshold_crit)
if(src.health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!src.rejuv) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
if(!src.reagents.has_reagent("inaprovaline")) src.adjustOxyLoss(1)
if(src.stat != 2) src.stat = 1
Paralyse(5)

View File

@@ -58,7 +58,9 @@
tally += 2
if (istype(src, /mob/living/carbon/alien/humanoid/sentinel))
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
/mob/living/carbon/alien/humanoid/Stat()
@@ -121,7 +123,7 @@
ear_damage += 15
ear_deaf += 60
bruteloss += b_loss
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)
updatehealth()
@@ -224,7 +226,7 @@
if ((M.client && !( M.blinded )))
M.show_message(text("\red [] has been hit by []", src, O), 1)
if (health > 0)
bruteloss += (istype(O, /obj/effect/meteor/small) ? 10 : 25)
adjustFireLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
adjustFireLoss(30)
updatehealth()
@@ -472,7 +474,7 @@
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
bruteloss += rand(1, 3)
adjustBruteLoss(rand(1, 3))
updatehealth()
return
@@ -501,7 +503,7 @@
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[M.name] has bit [src]!</B>"), 1)
bruteloss += rand(1, 3)
adjustBruteLoss(rand(1, 3))
updatehealth()
return
@@ -526,7 +528,7 @@
else
damage = rand(5, 35)
bruteloss += damage
adjustBruteLoss(damage)
if(M.powerlevel > 0)
var/stunprob = 10
@@ -566,6 +568,16 @@
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)
if (!ticker)
M << "You cannot attack people before the game has started."
@@ -672,7 +684,7 @@
for(var/mob/O in viewers(M, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has weakened []!</B>", M, src), 1, "\red You hear someone fall.", 2)
bruteloss += damage
adjustBruteLoss(damage)
updatehealth()
else
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))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
bruteloss += damage
adjustBruteLoss(damage)
updatehealth()
else
M << "\green <B>[name] is too injured for that.</B>"

View File

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

View File

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

View File

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

View File

@@ -271,7 +271,7 @@
if (prob(10))//Instant Chad Ore!
stuttering = max(10, stuttering)
if (brainloss >= 60 && stat != 2)
if (getBrainLoss() >= 60 && stat != 2)
if (prob(7))
switch(pick(1,2,3))
if(1)
@@ -648,7 +648,7 @@
//Account for massive pressure differences. Done by Polymorph
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(prob(25))
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.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(prob(30))
if(getOxyLoss()>0) oxyloss = max(getOxyLoss()-1, 0)
if(getToxLoss()>0) adjustToxLoss(-1)
if(getFireLoss()>0) adjustFireLoss(-1)
if(cloneloss>0) cloneloss = max(cloneloss-1,0)
if(getBruteLoss()>0) bruteloss = max(getBruteLoss()-1,0)
adjustOxyLoss(-1)
adjustToxLoss(-1)
adjustFireLoss(-1)
adjustCloneLoss(-1)
adjustBruteLoss(-1)
if (src.stat == DEAD)

View File

@@ -174,7 +174,7 @@
if(3.0)
b_loss += 30
bruteloss += b_loss
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)
updatehealth()
@@ -214,7 +214,7 @@
if ((M.client && !( M.blinded )))
M.show_message(text("\red [] has been hit by []", src, O), 1)
if (health > 0)
bruteloss += (istype(O, /obj/effect/meteor/small) ? 10 : 25)
adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
adjustFireLoss(30)
updatehealth()
@@ -341,13 +341,24 @@
else
damage = rand(1, 3)
bruteloss += damage
adjustBruteLoss(damage)
updatehealth()
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)
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 )))
O.show_message(text("\red <B>[] has [attack_verb]ed []!</B>", M, src), 1)
bruteloss += damage
adjustBruteLoss(damage)
updatehealth()
else
if(M.type != /mob/living/carbon/human/tajaran)
@@ -575,7 +586,7 @@
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has wounded [name]!</B>", M), 1)
bruteloss += damage
adjustBruteLoss(damage)
updatehealth()
else
playsound(loc, 'slashmiss.ogg', 25, 1, -1)
@@ -638,7 +649,7 @@
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has disarmed [name]!</B>", M), 1)
bruteloss += damage
adjustBruteLoss(damage)
updatehealth()
return

View File

@@ -71,24 +71,15 @@
"A sharp, deep pain bathes every inch of your body!")]"
if(istype(M, /mob/living/carbon))
Victim.cloneloss += rand(1,10)
Victim.adjustCloneLoss(rand(1,10))
Victim.adjustToxLoss(rand(1,2))
if(Victim.health <= 0)
Victim.adjustToxLoss(rand(2,4))
if(getToxLoss() > 0)
adjustToxLoss(-10)
if(getOxyLoss() > 0)
oxyloss = max(0, getOxyLoss()-10)
if(getBruteLoss() > 0)
bruteloss = max(0, getBruteLoss()-10)
if(getFireLoss() > 0)
adjustOxyLoss(-10)
adjustBruteLoss(-10)
adjustFireLoss(-10)
if(getCloneLoss() > 0)
adjustCloneLoss(-10)
if(Victim)
@@ -96,12 +87,6 @@
if(Metroid.Victim == M && Metroid != src)
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)
if(nutrition >= lastnut + 50)
if(prob(80))

View File

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

View File

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

View File

@@ -1,14 +1,14 @@
/mob/living/verb/succumb()
set hidden = 1
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 << "\blue You have given up life and succumbed to death."
/mob/living/proc/updatehealth()
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
src.health = 100
src.stat = 0
@@ -142,25 +142,25 @@
// heal ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/heal_organ_damage(var/brute, var/burn)
bruteloss = max(0, getBruteLoss()-brute)
adjustBruteLoss(-brute)
adjustFireLoss(-burn)
src.updatehealth()
// damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/take_organ_damage(var/brute, var/burn)
bruteloss += brute
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()
// heal MANY external organs, in random order
/mob/living/proc/heal_overall_damage(var/brute, var/burn)
bruteloss = max(0, getBruteLoss()-brute)
adjustBruteLoss(-brute)
adjustFireLoss(-burn)
src.updatehealth()
// damage MANY external organs, in random order
/mob/living/proc/take_overall_damage(var/brute, var/burn)
bruteloss += brute
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()

View File

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

View File

@@ -252,7 +252,7 @@
/mob/living/silicon/ai/blob_act()
if (stat != 2)
bruteloss += 60
adjustBruteLoss(60)
updatehealth()
return 1
return 0
@@ -328,7 +328,7 @@
M.show_message(text("\red [] has been hit by []", src, O), 1)
//Foreach goto(19)
if (health > 0)
bruteloss += 30
adjustBruteLoss(30)
if ((O.icon_state == "flaming"))
adjustFireLoss(40)
updatehealth()
@@ -364,7 +364,7 @@
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
if(prob(8))
flick("noise", flash)
bruteloss += damage
adjustBruteLoss(damage)
updatehealth()
else
playsound(loc, 'slashmiss.ogg', 25, 1, -1)
@@ -382,6 +382,19 @@
M << "\red <b>ERROR</b>: \black Remote access channel disabled."
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)
usr:cameraFollow = null
if (!C)

View File

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

View File

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

View File

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

View File

@@ -27,7 +27,7 @@
return 1
/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)
return 2

View File

@@ -1103,27 +1103,38 @@ 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
return 0
/mob/proc/Stun(amount)
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
/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
if(canstun)
stunned = max(amount,0)
return
/mob/proc/AdjustStunned(amount)
if(canstun)
stunned = max(stunned + amount,0)
return
/mob/proc/Weaken(amount)
if(canweaken)
weakened = max(max(weakened,amount),0)
return
/mob/proc/SetWeakened(amount)
if(canweaken)
weakened = max(amount,0)
return
/mob/proc/AdjustWeakened(amount)
if(canweaken)
weakened = max(weakened + amount,0)
return

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/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
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.*/
@@ -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/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!
var/grav_delay = 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

View File

@@ -207,7 +207,7 @@
s_click(hud1)
return
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
for(var/mob/N in viewers(user, null))
if(N.client)

View File

@@ -29,7 +29,6 @@
alt_name = " (died as [src.real_name])"
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>"
for (var/mob/M in world)
@@ -60,7 +59,7 @@
return "stammers, \"[text]\"";
if (src.slurring)
return "slurrs, \"[text]\"";
if (src.brainloss >= 60)
if (src.getBrainLoss() >= 60)
return "gibbers, \"[text]\"";
if (ending == "?")
return "asks, \"[text]\"";

View File

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

View File

@@ -38,7 +38,8 @@
var/max_co2 = 5
var/min_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
var/melee_damage_lower = 0
@@ -46,7 +47,6 @@
var/attacktext = "attacks"
var/attack_sound = null
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()
..()
@@ -197,14 +197,26 @@
return "[emote], \"[text]\""
return "says, \"[text]\"";
/mob/living/simple_animal/emote(var/act,var/m_type=1,var/message = null)
if(act == "me")
for (var/mob/O in viewers(src, null))
O.show_message("<B>[src]</B> [message]")
else if(act)
/mob/living/simple_animal/emote(var/act)
if(act)
for (var/mob/O in viewers(src, null))
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)
..()

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
for(var/name in organs)
del(organs[name])
if(client)
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // stop the jams for AIs
return ..()
/mob/living/carbon/AIize()

View File

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

View File

@@ -2,20 +2,24 @@
name = "Emitter"
desc = "A heavy duty industrial laser"
icon = 'singularity.dmi'
icon_state = "Emitter"
icon_state = "emitter"
anchored = 0
density = 1
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
idle_power_usage = 10
active_power_usage = 300
var
active = 0
fire_delay = 100
last_shot = 0
shot_number = 0
state = 0
locked = 0
verb/rotate()
set name = "Rotate"
set category = "Object"
@@ -35,9 +39,9 @@
update_icon()
if (active && !(stat & (NOPOWER|BROKEN)))
icon_state = "Emitter +a"
icon_state = "emitter_+a"
else
icon_state = "Emitter"
icon_state = "emitter"
attack_hand(mob/user as mob)
@@ -56,15 +60,15 @@
src.use_power = 2
update_icon()
else
user << "The controls are locked!"
user << "\red The controls are locked!"
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
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)
if(prob(1)&&prob(1))
if((severity == 1)&&prob(1)&&prob(1))
if(src.active)
src.active = 0
src.use_power = 1
@@ -87,7 +91,7 @@
src.shot_number = 0
use_power(1000)
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)
if(prob(35))
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)
if(istype(W, /obj/item/weapon/wrench))
if(active)
user << "Turn off the [src] first."
@@ -123,27 +128,26 @@
playsound(src.loc, 'Ratchet.ogg', 75, 1)
user.visible_message("[user.name] secures [src.name] to the floor.", \
"You secure the external reinforcing bolts to the floor.", \
"You hear ratchet")
"You hear a ratchet")
src.anchored = 1
if(1)
state = 0
playsound(src.loc, 'Ratchet.ogg', 75, 1)
user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \
"You undo the external reinforcing bolts.", \
"You hear ratchet")
"You hear a ratchet")
src.anchored = 0
if(2)
user << "\red The [src.name] needs to be unwelded from the floor."
return
else if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
if(active)
user << "Turn off the [src] first."
return
switch(state)
if(0)
user << "\red The [src.name] needs to be wrenched to the floor."
return
if(1)
if (W:remove_fuel(0,user))
W:welding = 2
@@ -156,8 +160,7 @@
user << "You weld the [src] to the floor."
W:welding = 1
else
user << "\blue You need more welding fuel to complete this task."
return
user << "\red You need more welding fuel to complete this task."
if(2)
if (W:remove_fuel(0,user))
W:welding = 2
@@ -170,16 +173,31 @@
user << "You cut the [src] free from the floor."
W:welding = 1
else
user << "\blue You need more welding fuel to complete this task."
user << "\red You need more welding fuel to complete this task."
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))
if(emagged)
user << "\red The lock seems to be broken"
return
if(src.allowed(user))
if(active)
src.locked = !src.locked
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
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
user << "\red Access denied."
return
else
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
@@ -187,3 +205,4 @@
power_change()
..()
update_icon()
return

View File

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

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