Merge branch 'master' of git://github.com/Abi79/tgstation13-git

Conflicts:
	baystation12.dme
	code/defines/mob/mob.dm
	code/defines/obj/vending.dm
	code/game/atom_procs.dm
	code/game/dna.dm
	code/game/machinery/computer/aifixer.dm
	code/game/vote.dm
	code/modules/chemical/Chemistry-Machinery.dm
	code/modules/chemical/Chemistry-Reagents.dm
	code/modules/mob/living/carbon/metroid/life.dm
	html/changelog.html
	icons/obj/stationobjs.dmi
	interface/skin.dmf
	maps/tgstation.2.0.8.dmm
This commit is contained in:
Miniature
2011-12-03 19:28:10 +10:30
179 changed files with 8711 additions and 8146 deletions

View File

@@ -125,6 +125,7 @@
#define FILE_DIR "code/modules/projectiles/guns/energy"
#define FILE_DIR "code/modules/projectiles/guns/projectile"
#define FILE_DIR "code/modules/projectiles/projectile"
#define FILE_DIR "code/modules/recycling"
#define FILE_DIR "code/modules/research"
#define FILE_DIR "code/unused"
#define FILE_DIR "code/unused/beast"
@@ -138,7 +139,6 @@
#define FILE_DIR "code/WorkInProgress"
#define FILE_DIR "code/WorkInProgress/mapload"
#define FILE_DIR "code/WorkInProgress/organs"
#define FILE_DIR "code/WorkInProgress/recycling"
#define FILE_DIR "code/WorkInProgress/virus2"
#define FILE_DIR "code/WorkInProgress/virus2/Disease2"
#define FILE_DIR "html"
@@ -433,6 +433,7 @@
#include "code\game\machinery\igniter.dm"
#include "code\game\machinery\lightswitch.dm"
#include "code\game\machinery\machinery.dm"
#include "code\game\machinery\magnet.dm"
#include "code\game\machinery\morgue.dm"
#include "code\game\machinery\navbeacon.dm"
#include "code\game\machinery\OpTable.dm"
@@ -548,6 +549,7 @@
#include "code\game\objects\noticeboard.dm"
#include "code\game\objects\object_procs.dm"
#include "code\game\objects\portals.dm"
#include "code\game\objects\shooting_range.dm"
#include "code\game\objects\sign_decals.dm"
#include "code\game\objects\stool.dm"
#include "code\game\objects\structures.dm"
@@ -949,6 +951,10 @@
#include "code\modules\projectiles\projectile\bullets.dm"
#include "code\modules\projectiles\projectile\energy.dm"
#include "code\modules\projectiles\projectile\special.dm"
#include "code\modules\recycling\conveyor.dm"
#include "code\modules\recycling\disposal-construction.dm"
#include "code\modules\recycling\disposal.dm"
#include "code\modules\recycling\sortingmachinery.dm"
#include "code\modules\research\circuitprinter.dm"
#include "code\modules\research\designs.dm"
#include "code\modules\research\destructive_analyzer.dm"
@@ -964,10 +970,6 @@
#include "code\WorkInProgress\explosion_particles.dm"
#include "code\WorkInProgress\mapload\dmm_suite.dm"
#include "code\WorkInProgress\mapload\reader.dm"
#include "code\WorkInProgress\recycling\conveyor.dm"
#include "code\WorkInProgress\recycling\disposal-construction.dm"
#include "code\WorkInProgress\recycling\disposal.dm"
#include "code\WorkInProgress\recycling\sortingmachinery.dm"
#include "code\WorkInProgress\virus2\Prob.dm"
#include "code\WorkInProgress\virus2\Disease2\analyser.dm"
#include "code\WorkInProgress\virus2\Disease2\base.dm"

View File

@@ -288,7 +288,7 @@
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 attempting to bite off \his tongue. It looks like \he's trying to commit suicide.</b>"
mob.oxyloss = max(175 - mob.getToxLoss() - mob.fireloss - mob.getBruteLoss(), mob.getOxyLoss())
mob.oxyloss = max(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

View File

@@ -6,7 +6,7 @@
spread_type = SPECIAL
affected_species = list("Monkey", "Human")
curable = 0
desc = "Monkies with this disease will bite humans, causing humans to spontaneously mutate into a monkey."
desc = "monkeys with this disease will bite humans, causing humans to spontaneously mutate into a monkey."
severity = "Medium"
//stage_prob = 100
agent = "Kongey Vibrion M-909"

View File

@@ -147,6 +147,20 @@
summon_type = list("/obj/effect/critter/spesscarp/elite")
/obj/effect/proc_holder/spell/aoe_turf/conjure/creature
name = "Summon Creature Swarm"
desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth"
school = "conjuration"
charge_max = 1200
clothes_req = 0
invocation = "IA IA"
invocation_type = "shout"
summon_amt = 10
range = 3
summon_type = list("/obj/effect/critter/creature")
/obj/effect/proc_holder/spell/targeted/trigger/blind
name = "Blind"
desc = "This spell temporarily blinds a single person and does not require wizard garb."

View File

@@ -19,6 +19,9 @@
var/bruteloss = 0.0//Living
var/oxyloss = 0.0//Living
var/toxloss = 0.0//Living
var/fireloss = 0.0//Living
var/cloneloss = 0//Carbon
var/brainloss = 0//Carbon
var/obj/screen/pain = null
var/obj/screen/flash = null
@@ -92,7 +95,7 @@
var/canmove = 1.0
var/eye_stat = null//Living, potentially Carbon
var/fireloss = 0.0//Living
var/timeofdeath = 0.0//Living
var/cpr_time = 1.0//Carbon
@@ -128,7 +131,7 @@
var/r_epil = 0
var/r_ch_cou = 0
var/r_Tourette = 0//Carbon
var/cloneloss = 0//Carbon
var/seer = 0 //for cult//Carbon, probably Human
var/miming = null //checks if the guy is a mime//Human
@@ -162,7 +165,7 @@
var/const/blindness = 1//Carbon
var/const/deafness = 2//Carbon
var/const/muteness = 4//Carbon
var/brainloss = 0//Carbon
var/datum/dna/dna = null//Carbon
var/radiation = 0.0//Carbon
@@ -438,71 +441,38 @@ the mob is also allowed to move without any sort of restriction. For instance, i
/mob/proc/getBruteLoss()
return bruteloss
/mob/proc/adjustBruteLoss(var/amount)
bruteloss = max(bruteloss + amount, 0)
/mob/proc/getOxyLoss()
return oxyloss
/mob/proc/adjustOxyLoss(var/amount)
oxyloss = max(oxyloss + amount, 0)
/mob/proc/getToxLoss()
return toxloss
/mob/proc/adjustToxLoss(var/amount)
toxloss = max(toxloss + amount, 0)
/mob/proc/getFireLoss()
return fireloss
/mob/proc/adjustFireLoss(var/amount)
fireloss = max(fireloss + amount, 0)
/mob/proc/getCloneLoss()
return cloneloss
/mob/proc/adjustToxLoss(var/amount)
toxloss = max(toxloss + amount, 0)
// Standard for setting hasn't been agreed upon yet.
/*
/mob/proc/setBruteLoss(var/T)
bruteloss = T
/mob/proc/setOxyLoss(var/T)
oxyloss = T
/mob/proc/setFireLoss(var/T)
fireloss = T
/mob/proc/setCloneLoss(var/T)
cloneloss = T
*/
/mob/proc/adjustCloneLoss(var/amount)
cloneloss = max(cloneloss + amount, 0)
/mob/proc/getBrainLoss()
return brainloss
/mob/proc/adjustBrainLoss(var/amount)
brainloss = max(brainloss + amount, 0)
// ++++ROCKDTBEN++++ MOB PROCS //END

View File

@@ -144,6 +144,7 @@
usr.drop_item()
item_to_add.loc = src
src.inventory_head = item_to_add
update_clothing()
if(inventory_head && inventory_head.type == /obj/item/clothing/head/caphat)
name = "Captain "+real_name
@@ -171,6 +172,7 @@
usr.drop_item()
item_to_add.loc = src
src.inventory_back = item_to_add
update_clothing()
show_inv(usr)
else

View File

@@ -1029,6 +1029,7 @@
g_amt = 3750
origin_tech = "materials=1"
/obj/item/stack/sheet/rglass
name = "reinforced glass"
desc = "Glass which seems to have rods or something stuck in them."
@@ -1038,6 +1039,15 @@
m_amt = 1875
origin_tech = "materials=2"
/obj/item/stack/sheet/rglass/cyborg
name = "reinforced glass"
desc = "Glass which seems to have rods or something stuck in them."
singular_name = "reinforced glass sheet"
icon_state = "sheet-rglass"
g_amt = 0
m_amt = 0
/obj/item/stack/sheet/metal
name = "metal"
desc = "Sheets made out off metal. It has been dubbed Metal Sheets."
@@ -1048,6 +1058,15 @@
flags = FPRINT | TABLEPASS | CONDUCT
origin_tech = "materials=1"
/obj/item/stack/sheet/metal/cyborg
name = "metal"
desc = "Sheets made out off metal. It has been dubbed Metal Sheets."
singular_name = "metal sheet"
icon_state = "sheet-metal"
m_amt = 0
throwforce = 14.0
flags = FPRINT | TABLEPASS | CONDUCT
/obj/item/stack/sheet/r_metal
name = "reinforced metal"
singular_name = "reinforced metal sheet"

View File

@@ -10,7 +10,8 @@
var/welded = 0
var/wall_mounted = 0 //never solid (You can always pass over it)
flags = FPRINT
var/health = 200//Might be a bit much, dono can always change later
var/health = 100 //Might be a bit much, dono can always change later //Nerfed -Pete
var/lastbang //
/obj/structure/closet/acloset
name = "Strange closet"
@@ -277,7 +278,7 @@
/obj/structure/closet/jcloset
name = "Custodial Closet"
desc = "A bulky (yet mobile) closet. Comes with janitor's clothes and biohazard gear."
desc = "A bulky (yet mobile) closet. Comes with janitor's clothes and gear."
/obj/structure/closet/lawcloset
name = "Legal Closet"
@@ -581,25 +582,25 @@
/obj/structure/secure_closet
/obj/structure/closet/secure_closet
desc = "An immobile card-locked storage closet."
name = "Security Locker"
icon = 'closet.dmi'
icon_state = "secure1"
density = 1
var/opened = 0
opened = 0
var/locked = 1
var/broken = 0
var/large = 1
var/icon_closed = "secure"
icon_closed = "secure"
var/icon_locked = "secure1"
var/icon_opened = "secureopen"
icon_opened = "secureopen"
var/icon_broken = "securebroken"
var/icon_off = "secureoff"
var/wall_mounted = 0 //never solid (You can always pass over it)
var/health = 300
wall_mounted = 0 //never solid (You can always pass over it)
health = 200
/obj/structure/secure_closet/medical_wall
/obj/structure/closet/secure_closet/medical_wall
name = "First Aid Closet"
desc = "A wall mounted closet which --should-- contain medical supplies."
icon_state = "medical_wall_locked"
@@ -613,21 +614,21 @@
wall_mounted = 1
req_access = list(access_medical)
/obj/structure/secure_closet/personal
/obj/structure/closet/secure_closet/personal
desc = "The first card swiped gains control."
name = "Personal Closet"
/obj/structure/secure_closet/personal/patient
/obj/structure/closet/secure_closet/personal/patient
name = "Patient's closet"
/obj/structure/secure_closet/kitchen
/obj/structure/closet/secure_closet/kitchen
name = "Kitchen Cabinet"
req_access = list(access_kitchen)
/obj/structure/secure_closet/kitchen/mining
/obj/structure/closet/secure_closet/kitchen/mining
req_access = list()
/obj/structure/secure_closet/meat
/obj/structure/closet/secure_closet/meat
name = "Meat Fridge"
icon_state = "fridge1"
icon_closed = "fridge"
@@ -636,7 +637,7 @@
icon_broken = "fridgebroken"
icon_off = "fridge1"
/obj/structure/secure_closet/fridge
/obj/structure/closet/secure_closet/fridge
name = "Refrigerator"
icon_state = "fridge1"
icon_closed = "fridge"
@@ -645,7 +646,7 @@
icon_broken = "fridgebroken"
icon_off = "fridge1"
/obj/structure/secure_closet/money_freezer
/obj/structure/closet/secure_closet/money_freezer
name = "Freezer"
icon_state = "fridge1"
icon_closed = "fridge"
@@ -655,7 +656,7 @@
icon_off = "fridge1"
req_access = list(access_heads_vault)
/obj/structure/secure_closet/wall
/obj/structure/closet/secure_closet/wall
name = "wall locker"
req_access = list(access_security)
icon_state = "wall-locker1"

View File

@@ -267,10 +267,18 @@
/obj/effect/decal/cleanable/egg_smudge
name = "Smashed egg"
desc = ""
desc = "Seems like this one won't hatch"
density = 0
anchored = 1
layer = 2
icon = 'tomatodecal.dmi'
random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
/obj/effect/decal/cleanable/pie_smudge //honk
name = "Smashed pie"
desc = "Pie cream from a cream pie"
density = 0
anchored = 1
layer = 2
icon = 'tomatodecal.dmi'
random_icon_states = list("smashed_pie")

View File

@@ -12,6 +12,15 @@
desc = "A backpack and trophy rack, useful for both carrying extra gear and proudly declaring your insanity "
icon_state = "cultpack"
/obj/item/weapon/storage/trashbag
name = "trash bag"
desc = "for picking up all those pens"
icon_state = "trashbag"
item_state = "trashbag"
w_class = 4.0
storage_slots = 20
max_w_class = 1
max_combined_w_class = 20
/*
/obj/item/weapon/storage/lbe
name = "Load Bearing Equipment"

View File

@@ -11,7 +11,7 @@
"/obj/item/weapon/pen/paralysis",
"/obj/item/weapon/chem_grenade/incendiary")
cost = 20
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Special Ops crate"
hidden = 1
@@ -113,14 +113,14 @@
"/obj/item/weapon/reagent_containers/food/snacks/grown/banana",
"/obj/item/weapon/reagent_containers/food/snacks/grown/banana")
cost = 5
containertype = "/obj/structure/crate/freezer"
containertype = "/obj/structure/closet/crate/freezer"
containername = "Food crate"
/datum/supply_packs/monkey
name = "Monkey crate"
contains = list ("/obj/item/weapon/monkeycube_box")
cost = 20
containertype = "/obj/structure/crate/freezer"
containertype = "/obj/structure/closet/crate/freezer"
containername = "Monkey crate"
/*
@@ -130,7 +130,7 @@
"/obj/item/ammo_casing/shotgun/beanbag",
"/obj/item/ammo_casing/shotgun/beanbag")
cost = 25
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Shotgun crate"
//APPARENTLY OP?
*/
@@ -148,7 +148,7 @@
"/obj/item/ammo_casing/shotgun/beanbag",
"/obj/item/ammo_casing/shotgun/beanbag")
cost = 10
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Beanbag shells"
/datum/supply_packs/party
@@ -164,7 +164,7 @@
"/obj/item/weapon/reagent_containers/food/drinks/beer",
"/obj/item/weapon/reagent_containers/food/drinks/beer")
cost = 20
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Party equipment"
/datum/supply_packs/internals
@@ -176,7 +176,7 @@
"/obj/item/weapon/tank/air",
"/obj/item/weapon/tank/air")
cost = 10
containertype = "/obj/structure/crate/internals"
containertype = "/obj/structure/closet/crate/internals"
containername = "Internals crate"
/datum/supply_packs/evacuation
@@ -196,7 +196,7 @@
"/obj/item/clothing/mask/gas",
"/obj/item/clothing/mask/gas")
cost = 35
containertype = "/obj/structure/crate/internals"
containertype = "/obj/structure/closet/crate/internals"
containername = "Emergency Crate"
/datum/supply_packs/janitor
@@ -214,7 +214,7 @@
"/obj/item/weapon/chem_grenade/cleaner",
"/obj/structure/mopbucket")
cost = 10
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Janitorial supplies"
/obj/item/weapon/storage/lightbox/tubes
@@ -230,7 +230,7 @@
"/obj/item/weapon/storage/lightbox/bulbs",
"/obj/item/weapon/storage/lightbox/bulbs")
cost = 5
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Replacement lights"
/datum/supply_packs/costume
@@ -248,7 +248,7 @@
"/obj/item/clothing/suit/suspenders",
"/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing")
cost = 10
containertype = "/obj/structure/crate/secure"
containertype = "/obj/structure/closet/crate/secure"
containername = "Standard Costumes"
access = access_theatre
@@ -259,14 +259,14 @@
"/obj/item/clothing/shoes/sandal",
"/obj/item/clothing/head/wizard/fake")
cost = 20
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Wizard costume crate"
/datum/supply_packs/mule
name = "MULEbot Crate"
contains = list("/obj/machinery/bot/mulebot")
cost = 20
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "MULEbot Crate"
/datum/supply_packs/hydroponics // -- Skie
@@ -280,7 +280,7 @@
"/obj/item/clothing/gloves/botanic_leather",
"/obj/item/clothing/suit/apron") // Updated with new things
cost = 10
containertype = /obj/structure/crate/hydroponics
containertype = /obj/structure/closet/crate/hydroponics
containername = "Hydroponics crate"
access = access_hydroponics
@@ -298,7 +298,7 @@
"/obj/item/seeds/chantermycelium",
"/obj/item/seeds/potatoseed")
cost = 10
containertype = /obj/structure/crate/hydroponics
containertype = /obj/structure/closet/crate/hydroponics
containername = "Seeds crate"
access = access_hydroponics
@@ -315,7 +315,7 @@
"/obj/item/seeds/bananaseed",
"/obj/item/seeds/eggyseed")
cost = 15
containertype = /obj/structure/crate/hydroponics
containertype = /obj/structure/closet/crate/hydroponics
containername = "Exotic Seeds crate"
access = access_hydroponics
@@ -330,7 +330,7 @@
"/obj/item/weapon/reagent_containers/glass/bottle/stoxin",
"/obj/item/weapon/storage/syringes")
cost = 10
containertype = "/obj/structure/crate/medical"
containertype = "/obj/structure/closet/crate/medical"
containername = "Medical crate"
@@ -347,7 +347,7 @@
"/obj/item/weapon/storage/syringes",
"/obj/item/weapon/storage/beakerbox")
cost = 20
containertype = "/obj/structure/crate/secure/weapon"
containertype = "/obj/structure/closet/crate/secure/weapon"
containername = "Virus crate"
access = access_cmo
@@ -356,7 +356,7 @@
contains = list("/obj/item/stack/sheet/metal")
amount = 50
cost = 10
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Metal sheets crate"
/datum/supply_packs/glass50
@@ -364,7 +364,7 @@
contains = list("/obj/item/stack/sheet/glass")
amount = 50
cost = 10
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Glass sheets crate"
/datum/supply_packs/electrical
@@ -378,7 +378,7 @@
"/obj/item/weapon/cell/high",
"/obj/item/weapon/cell/high")
cost = 15
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Electrical maintenance crate"
/datum/supply_packs/mechanical
@@ -393,7 +393,7 @@
"/obj/item/clothing/head/helmet/welding",
"/obj/item/clothing/head/helmet/hardhat")
cost = 10
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Mechanical maintenance crate"
/datum/supply_packs/waterfueltank
@@ -401,7 +401,7 @@
contains = list("/obj/structure/reagent_dispensers/watertank",
"/obj/structure/reagent_dispensers/fueltank")
cost = 15
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "Water/Fuel tank crate"
/datum/supply_packs/engine
@@ -409,7 +409,7 @@
contains = list("/obj/machinery/emitter",
"/obj/machinery/emitter",)
cost = 10
containertype = "/obj/structure/crate/secure"
containertype = "/obj/structure/closet/crate/secure"
containername = "Emitter crate"
access = access_heads
@@ -449,7 +449,7 @@
"/obj/item/mecha_parts/circuitboard/ripley/peripherals", //TEMPORARY due to lack of circuitboard printer
"/obj/item/mecha_parts/circuitboard/ripley/main") //TEMPORARY due to lack of circuitboard printer
cost = 40
containertype = "/obj/structure/crate/secure"
containertype = "/obj/structure/closet/crate/secure"
containername = "APLU \"Ripley\" Circuit Crate"
access = access_robotics
@@ -466,7 +466,7 @@
"/obj/item/weapon/cell/high",
"/obj/item/weapon/cell/high")
cost = 10
containertype = "/obj/structure/crate/secure/gear"
containertype = "/obj/structure/closet/crate/secure/gear"
containername = "Robotics Assembly"
access = access_robotics
@@ -485,7 +485,7 @@
"/obj/item/device/assembly/timer",
"/obj/item/device/assembly/timer")
cost = 10
containertype = "/obj/structure/crate/secure/plasma"
containertype = "/obj/structure/closet/crate/secure/plasma"
containername = "Plasma assembly crate"
access = access_tox
@@ -500,7 +500,7 @@
"/obj/item/weapon/storage/flashbang_kit",
"/obj/item/weapon/storage/flashbang_kit")
cost = 30
containertype = "/obj/structure/crate/secure/weapon"
containertype = "/obj/structure/closet/crate/secure/weapon"
containername = "Weapons crate"
access = access_security
@@ -514,7 +514,7 @@
"/obj/item/weapon/chem_grenade/incendiary",
"/obj/item/weapon/chem_grenade/incendiary")
cost = 25
containertype = "/obj/structure/crate/secure/weapon"
containertype = "/obj/structure/closet/crate/secure/weapon"
containername = "Experimental weapons crate"
access = access_heads
@@ -525,7 +525,7 @@
"/obj/item/clothing/suit/armor/vest",
"/obj/item/clothing/suit/armor/vest")
cost = 15
containertype = "/obj/structure/crate/secure"
containertype = "/obj/structure/closet/crate/secure"
containername = "Armor crate"
access = access_security
@@ -550,7 +550,7 @@
"/obj/item/clothing/head/helmet/riot",
"/obj/item/clothing/suit/armor/riot")
cost = 60
containertype = "/obj/structure/crate/secure"
containertype = "/obj/structure/closet/crate/secure"
containername = "Riot gear crate"
access = access_armory
@@ -558,7 +558,7 @@
name = "Loyalty implant crate"
contains = list ("/obj/item/weapon/storage/lockbox/loyalty")
cost = 60
containertype = "/obj/structure/crate/secure"
containertype = "/obj/structure/closet/crate/secure"
containername = "Loyalty implant crate"
access = access_armory
@@ -569,7 +569,7 @@
"/obj/item/weapon/gun/projectile/shotgun/combat2",
"/obj/item/weapon/gun/projectile/shotgun/combat2")
cost = 50
containertype = "/obj/structure/crate/secure"
containertype = "/obj/structure/closet/crate/secure"
containername = "Ballistic gear crate"
access = access_armory
@@ -580,7 +580,7 @@
"/obj/item/weapon/gun/energy/gun",
"/obj/item/weapon/gun/energy/gun")
cost = 50
containertype = "/obj/structure/crate/secure"
containertype = "/obj/structure/closet/crate/secure"
containername = "Experimental energy gear crate"
access = access_armory
@@ -591,7 +591,7 @@
"/obj/item/clothing/head/helmet/riot",
"/obj/item/clothing/suit/armor/riot")
cost = 35
containertype = "/obj/structure/crate/secure"
containertype = "/obj/structure/closet/crate/secure"
containername = "Experimental armor crate"
access = access_armory
@@ -602,7 +602,7 @@
"/obj/machinery/deployable/barrier",
"/obj/machinery/deployable/barrier")
cost = 20
containertype = "/obj/structure/crate/secure/gear"
containertype = "/obj/structure/closet/crate/secure/gear"
containername = "Secruity Barriers crate"
/datum/supply_packs/hats/
@@ -632,7 +632,7 @@
"/obj/item/clothing/head/collectable/petehat")
name = "Collectable Hat Crate!"
cost = 200
containertype = "/obj/structure/crate/hat"
containertype = "/obj/structure/closet/crate/hat"
containername = "Collectable Hats Crate! Brought to you by Bass.inc!"
/datum/supply_packs/hats/New()

View File

@@ -319,3 +319,70 @@
attack_paw(mob/user as mob)
return attack_hand(user)
/obj/item/toy/waterflower
name = "Water Flower"
desc = "A seemingly innocent sunflower...with a twist."
icon = 'harvest.dmi'
icon_state = "sunflower"
item_state = "sunflower"
var/empty = 0
flags = USEDELAY
/obj/item/toy/waterflower/New()
var/datum/reagents/R = new/datum/reagents(10)
reagents = R
R.my_atom = src
R.add_reagent("water", 10)
/obj/item/toy/waterflower/attack(mob/living/carbon/human/M as mob, mob/user as mob)
return
/obj/item/toy/waterflower/afterattack(atom/A as mob|obj, mob/user as mob)
if (istype(A, /obj/item/weapon/storage/backpack ))
return
else if (locate (/obj/structure/table, src.loc))
return
else if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1)
A.reagents.trans_to(src, 10)
user << "\blue You refill your flower!"
return
else if (src.reagents.total_volume < 1)
src.empty = 1
user << "\blue Your flower has run dry!"
return
else
src.empty = 0
var/obj/effect/decal/D = new/obj/effect/decal/(get_turf(src))
D.name = "water"
D.icon = 'chemical.dmi'
D.icon_state = "chempuff"
D.create_reagents(5)
src.reagents.trans_to(D, 1)
playsound(src.loc, 'spray3.ogg', 50, 1, -6)
spawn(0)
for(var/i=0, i<1, i++)
step_towards(D,A)
D.reagents.reaction(get_turf(D))
for(var/atom/T in get_turf(D))
D.reagents.reaction(T)
if(ismob(T) && T:client)
T:client << "\red [user] has sprayed you with water!"
sleep(4)
del(D)
return
/obj/item/toy/waterflower/examine()
set src in usr
usr << text("\icon[] [] units of water left!", src, src.reagents.total_volume)
..()
return

View File

@@ -41,7 +41,7 @@
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
icon_state = "boozeomat" //////////////18 drink entities below, plus the glasses, in case someone wants to edit the number of bottles
product_paths = "/obj/item/weapon/reagent_containers/food/drinks/bottle/gin;/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey;/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla;/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka;/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth;/obj/item/weapon/reagent_containers/food/drinks/bottle/rum;/obj/item/weapon/reagent_containers/food/drinks/bottle/wine;/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac;/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua;/obj/item/weapon/reagent_containers/food/drinks/beer;/obj/item/weapon/reagent_containers/food/drinks/ale;/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice;/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice;/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice;/obj/item/weapon/reagent_containers/food/drinks/bottle/cream;/obj/item/weapon/reagent_containers/food/drinks/tonic;/obj/item/weapon/reagent_containers/food/drinks/cola;/obj/item/weapon/reagent_containers/food/drinks/sodawater;/obj/item/weapon/reagent_containers/food/drinks/drinkingglass;/obj/item/weapon/reagent_containers/food/drinks/ice"
product_amounts = "5;5;5;5;5;5;5;5;5;6;6;4;4;4;4;8;8;8;30;10"
product_amounts = "5;5;5;5;5;5;5;5;5;6;6;4;4;4;4;8;8;15;30;10"
vend_delay = 15
product_hidden = "/obj/item/weapon/reagent_containers/food/drinks/tea"
product_hideamt = "10"
@@ -204,7 +204,7 @@
desc = "A kitchen and restaurant equipment vendor"
icon_state = "dinnerware"
product_paths = "/obj/item/weapon/tray;/obj/item/weapon/kitchen/utensil/fork;/obj/item/weapon/kitchenknife;/obj/item/weapon/reagent_containers/food/drinks/drinkingglass;/obj/item/clothing/suit/chef/classic"
product_amounts = "6;4;2;15;2"
product_amounts = "8;6;3;8;2"
//product_amounts = "8;5;4" Old totals
product_hidden = "/obj/item/weapon/kitchen/utensil/spoon;/obj/item/weapon/kitchen/utensil/knife;/obj/item/weapon/kitchen/rollingpin;/obj/item/weapon/butch"
product_hideamt = "2;2;2;2"

View File

@@ -548,6 +548,8 @@
w_class = 2.0
throw_speed = 2
throw_range = 5
m_amt = 50
g_amt = 20
flags = TABLEPASS|USEDELAY|FPRINT|CONDUCT
item_state = "coil_red"
@@ -782,7 +784,7 @@
throwforce = 3.0
throw_speed = 1
throw_range = 5
w_class = 3.0
w_class = 2.0
flags = FPRINT | TABLEPASS
@@ -937,7 +939,7 @@
icon = 'shards.dmi'
icon_state = "large"
desc = "Could probably be used as ... a throwing weapon?"
w_class = 3.0
w_class = 1.0
force = 5.0
throwforce = 15.0
item_state = "shard-glass"

View File

@@ -139,13 +139,13 @@ proc/sql_report_death(var/mob/living/carbon/human/H)
lakey = dd_replacetext(H.lastattacker:key, "'", "''")
var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
var/coord = "[H.x], [H.y], [H.z]"
//world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, getBruteLoss(), fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.fireloss], [H.brainloss], [H.getOxyLoss()])"
//world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])"
var/DBConnection/dbcon = new()
dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
if(!dbcon.IsConnected())
log_game("SQL ERROR during death reporting. Failed to connect.")
else
var/DBQuery/query = dbcon.NewQuery("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.fireloss], [H.brainloss], [H.getOxyLoss()], '[coord]')")
var/DBQuery/query = dbcon.NewQuery("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during death reporting. Error : \[[err]\]\n")
@@ -176,13 +176,13 @@ proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H)
lakey = dd_replacetext(H.lastattacker:key, "'", "''")
var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
var/coord = "[H.x], [H.y], [H.z]"
//world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.fireloss], [H.brainloss], [H.getOxyLoss()])"
//world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])"
var/DBConnection/dbcon = new()
dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
if(!dbcon.IsConnected())
log_game("SQL ERROR during death reporting. Failed to connect.")
else
var/DBQuery/query = dbcon.NewQuery("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.fireloss], [H.brainloss], [H.getOxyLoss()], '[coord]')")
var/DBQuery/query = dbcon.NewQuery("INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during death reporting. Error : \[[err]\]\n")

View File

@@ -238,12 +238,14 @@
return
if(using_new_click_proc) //TODO ERRORAGE (see message below)
return DblClickNew()
return DblClick()
return DblClick(location, control, params)
var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblClickNew() proc is being tested)
/atom/proc/DblClickNew()
// TODO DOOHL: Intergrate params to new proc. Saved for another time because var/valid_place is a fucking brainfuck
//Spamclick server-overloading prevention delay... THING
if (world.time <= usr:lastDblClick+1)
return
@@ -530,7 +532,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
if ( !animal.restrained() )
attack_animal(animal)
/atom/DblClick() //TODO: DEFERRED: REWRITE
/atom/DblClick(location, control, params) //TODO: DEFERRED: REWRITE
// world << "checking if this shit gets called at all"
@@ -732,7 +734,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
if (t5)
src.attackby(W, usr)
if (W)
W.afterattack(src, usr, (t5 ? 1 : 0))
W.afterattack(src, usr, (t5 ? 1 : 0), params)
else
// ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND -------
@@ -782,7 +784,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
// ------- IT SHOULD NEVER GET TO HERE, DUE TO THE ISTYPE(SRC, /OBJ/SCREEN) FROM PREVIOUS IF-S - I TESTED IT WITH A DEBUG OUTPUT AND I COULDN'T GET THIST TO SHOW UP. -------
src.attackby(W, usr)
if (W)
W.afterattack(src, usr)
W.afterattack(src, usr,, params)
else
// ------- YOU ARE NOT RESTRAINED, AND ARE CLICKING A HUD OBJECT -------
if (istype(usr, /mob/living/carbon/human))
@@ -893,7 +895,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
"\blue You place your palms on yourself and heal.", \
)
C.oxyloss = max(0, C.oxyloss-25)
C.adjustOxyLoss(-25)
C.adjustToxLoss(-25)
if(istype(C, /mob/living/carbon/human))
@@ -904,7 +906,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
H.UpdateDamageIcon()
else
C.heal_organ_damage(25, 25)
C.cloneloss = max(0, C.cloneloss-25)
C.adjustCloneLoss(-25)
C.stunned = max(0, C.stunned-5)
C.paralysis = max(0, C.paralysis-5)
C.stuttering = max(0, C.stuttering-5)

View File

@@ -91,7 +91,7 @@ On the map:
1443 for atmospherics - distribution loop/mixed air tank
1445 for bot nav beacons
1447 for mulebot, secbot and ed209 control
1449 for airlock controls, electropack
1449 for airlock controls, electropack, magnets
1451 for toxin lab access
1453 for engineering access
1455 for AI access
@@ -126,6 +126,7 @@ var/const/RADIO_NAVBEACONS = "5"
var/const/RADIO_AIRLOCK = "6"
var/const/RADIO_SECBOT = "7"
var/const/RADIO_MULEBOT = "8"
var/const/RADIO_MAGNETS = "9"
var/global/datum/controller/radio/radio_controller
@@ -258,10 +259,13 @@ datum/signal
var/transmission_method = 0
//0 = wire
//1 = radio transmission
//2 = subspace transmission
var/data = list()
var/encryption
var/frequency = 0
proc/copy_from(datum/signal/model)
source = model.source
transmission_method = model.transmission_method

View File

@@ -391,9 +391,9 @@
C.occupant = O
connected = null
O.name = text("monkey ([])",copytext(md5(M.real_name), 2, 6))
O.take_overall_damage(M.getBruteLoss() + 40, M.fireloss)
O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss())
O.adjustToxLoss(M.getToxLoss() + 20)
O.oxyloss += M.getOxyLoss()
O.adjustOxyLoss(M.getOxyLoss())
O.stat = M.stat
O.a_intent = "hurt"
for (var/obj/item/weapon/implant/I in implants)
@@ -466,9 +466,9 @@
O.real_name = randomname
i++
updateappearance(O,O.dna.uni_identity)
O.take_overall_damage(M.getBruteLoss(), M.fireloss)
O.take_overall_damage(M.getBruteLoss(), M.getFireLoss())
O.adjustToxLoss(M.getToxLoss())
O.oxyloss += M.getOxyLoss()
O.adjustOxyLoss(M.getOxyLoss())
O.stat = M.stat
for (var/obj/item/weapon/implant/I in implants)
I.loc = O
@@ -483,6 +483,18 @@
/////////////////////////// DNA MACHINES
/obj/machinery/dna_scannernew/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/clonescanner(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
component_parts += new /obj/item/weapon/cable_coil(src)
component_parts += new /obj/item/weapon/cable_coil(src)
RefreshParts()
/obj/machinery/dna_scannernew/allow_drop()
return 0
@@ -569,8 +581,12 @@
/obj/machinery/dna_scannernew/proc/go_out()
if ((!( src.occupant ) || src.locked))
return
for(var/obj/O in src)
O.loc = src.loc
/*
// it's like this was -just- here to break constructed dna scanners -Pete
// if that's not the case, slap my shit and uncomment this.
// for(var/obj/O in src)
// O.loc = src.loc
*/
//Foreach goto(30)
if (src.occupant.client)
src.occupant.client.eye = src.occupant.client.mob
@@ -966,7 +982,7 @@
src.temphtml += text("Data: <font color='blue'>[]</FONT><BR>", src.buffer1)
src.temphtml += text("By: <font color='blue'>[]</FONT><BR>", src.buffer1owner)
src.temphtml += text("Label: <font color='blue'>[]</FONT><BR>", src.buffer1label)
if (src.connected.occupant) src.temphtml += text("Save : <A href='?src=\ref[];b1addui=1'>UI</A> - <A href='?src=\ref[];b1adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b1addse=1'>SE</A><BR>", src, src, src)
if (src.connected.occupant && !(src.connected.occupant.mutations & HUSK)) src.temphtml += text("Save : <A href='?src=\ref[];b1addui=1'>UI</A> - <A href='?src=\ref[];b1adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b1addse=1'>SE</A><BR>", src, src, src)
if (src.buffer1) src.temphtml += text("Transfer to: <A href='?src=\ref[];b1transfer=1'>Occupant</A> - <A href='?src=\ref[];b1injector=1'>Injector</A><BR>", src, src)
//if (src.buffer1) src.temphtml += text("<A href='?src=\ref[];b1iso=1'>Isolate Block</A><BR>", src)
if (src.buffer1) src.temphtml += "Disk: <A href='?src=\ref[src];save_disk=1'>Save To</a> | <A href='?src=\ref[src];load_disk=1'>Load From</a><br>"
@@ -980,7 +996,7 @@
src.temphtml += text("Data: <font color='blue'>[]</FONT><BR>", src.buffer2)
src.temphtml += text("By: <font color='blue'>[]</FONT><BR>", src.buffer2owner)
src.temphtml += text("Label: <font color='blue'>[]</FONT><BR>", src.buffer2label)
if (src.connected.occupant) src.temphtml += text("Save : <A href='?src=\ref[];b2addui=1'>UI</A> - <A href='?src=\ref[];b2adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b2addse=1'>SE</A><BR>", src, src, src)
if (src.connected.occupant && !(src.connected.occupant.mutations & HUSK)) src.temphtml += text("Save : <A href='?src=\ref[];b2addui=1'>UI</A> - <A href='?src=\ref[];b2adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b2addse=1'>SE</A><BR>", src, src, src)
if (src.buffer2) src.temphtml += text("Transfer to: <A href='?src=\ref[];b2transfer=1'>Occupant</A> - <A href='?src=\ref[];b2injector=1'>Injector</A><BR>", src, src)
//if (src.buffer2) src.temphtml += text("<A href='?src=\ref[];b2iso=1'>Isolate Block</A><BR>", src)
if (src.buffer2) src.temphtml += "Disk: <A href='?src=\ref[src];save_disk=2'>Save To</a> | <A href='?src=\ref[src];load_disk=2'>Load From</a><br>"
@@ -994,7 +1010,7 @@
src.temphtml += text("Data: <font color='blue'>[]</FONT><BR>", src.buffer3)
src.temphtml += text("By: <font color='blue'>[]</FONT><BR>", src.buffer3owner)
src.temphtml += text("Label: <font color='blue'>[]</FONT><BR>", src.buffer3label)
if (src.connected.occupant) src.temphtml += text("Save : <A href='?src=\ref[];b3addui=1'>UI</A> - <A href='?src=\ref[];b3adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b3addse=1'>SE</A><BR>", src, src, src)
if (src.connected.occupant && !(src.connected.occupant.mutations & HUSK)) src.temphtml += text("Save : <A href='?src=\ref[];b3addui=1'>UI</A> - <A href='?src=\ref[];b3adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b3addse=1'>SE</A><BR>", src, src, src)
if (src.buffer3) src.temphtml += text("Transfer to: <A href='?src=\ref[];b3transfer=1'>Occupant</A> - <A href='?src=\ref[];b3injector=1'>Injector</A><BR>", src, src)
//if (src.buffer3) src.temphtml += text("<A href='?src=\ref[];b3iso=1'>Isolate Block</A><BR>", src)
if (src.buffer3) src.temphtml += "Disk: <A href='?src=\ref[src];save_disk=3'>Save To</a> | <A href='?src=\ref[src];load_disk=3'>Load From</a><br>"
@@ -1119,7 +1135,7 @@
src.buffer3label = sanitize(input("New Label:","Edit Label","Infos here"))
dopage(src,"buffermenu")
if (href_list["b1transfer"])
if (!src.connected.occupant)
if (!src.connected.occupant || src.connected.occupant.mutations & HUSK)
return
if (src.buffer1type == "ui")
if (src.buffer1iue)
@@ -1134,7 +1150,7 @@
src.connected.occupant.radiation += rand(20,50)
src.delete = 0
if (href_list["b2transfer"])
if (!src.connected.occupant)
if (!src.connected.occupant || src.connected.occupant.mutations & HUSK)
return
if (src.buffer2type == "ui")
if (src.buffer2iue)
@@ -1149,7 +1165,7 @@
src.connected.occupant.radiation += rand(20,50)
src.delete = 0
if (href_list["b3transfer"])
if (!src.connected.occupant)
if (!src.connected.occupant || src.connected.occupant.mutations & HUSK)
return
if (src.buffer3type == "ui")
if (src.buffer3iue)
@@ -1174,7 +1190,7 @@
src.temphtml = "Injector created."
src.delete = 0
src.injectorready = 0
spawn(1200)
spawn(300)
src.injectorready = 1
else
src.temphtml = "Replicator not ready yet."
@@ -1190,7 +1206,7 @@
src.temphtml = "Injector created."
src.delete = 0
src.injectorready = 0
spawn(1200)
spawn(300)
src.injectorready = 1
else
src.temphtml = "Replicator not ready yet."
@@ -1206,7 +1222,7 @@
src.temphtml = "Injector created."
src.delete = 0
src.injectorready = 0
spawn(1200)
spawn(300)
src.injectorready = 1
else
src.temphtml = "Replicator not ready yet."

View File

@@ -77,7 +77,7 @@
var/datum/objective/absorb/absorb_objective = new
absorb_objective.owner = changeling
absorb_objective.gen_amount_goal(8,12)
absorb_objective.gen_amount_goal(6,8)
changeling.objectives += absorb_objective
switch(rand(1,100))

View File

@@ -235,7 +235,7 @@
O.toxloss = usr.getToxLoss()
O.bruteloss = usr.getBruteLoss()
O.oxyloss = usr.getOxyLoss()
O.fireloss = usr.fireloss
O.fireloss = usr.getFireLoss()
O.stat = usr.stat
O.a_intent = "hurt"
for (var/obj/item/weapon/implant/I in implants)
@@ -330,7 +330,7 @@
O.toxloss = usr.getToxLoss()
O.bruteloss = usr.getBruteLoss()
O.oxyloss = usr.getOxyLoss()
O.fireloss = usr.fireloss
O.fireloss = usr.getFireLoss()
O.stat = usr.stat
for (var/obj/item/weapon/implant/I in implants)
I.loc = O
@@ -374,6 +374,7 @@
usr.toxloss = 0
//usr.bruteloss = 0
usr.oxyloss = 0
usr.cloneloss = 0
usr.paralysis = 0
usr.stunned = 0
usr.weakened = 0

View File

@@ -262,7 +262,7 @@
temp_apc.overload_lighting()
// for (var/obj/machinery/computer/prison_shuttle/temp_shuttle in world)
// temp_shuttle.prison_break()
for (var/obj/structure/secure_closet/security/temp_closet in world)
for (var/obj/structure/closet/secure_closet/security/temp_closet in world)
if(istype(get_area(temp_closet), /area/security/brig))
temp_closet.locked = 0
temp_closet.icon_state = temp_closet.icon_closed

View File

@@ -133,7 +133,7 @@ ________________________________________________________________________________
A += s_acost
else
if(prob(s_delay))//Suit delay is used as probability. May change later.
U.bruteloss += k_damage//Default damage done, usually 1.
U.adjustBruteLoss(k_damage)//Default damage done, usually 1.
A = k_cost//kamikaze cost.
cell.charge-=A
if(cell.charge<=0)
@@ -289,7 +289,7 @@ ________________________________________________________________________________
dat += "<h4>Nutrition Status: [U.nutrition]</h4>"
dat += "Oxygen loss: [U.getOxyLoss()]"
dat += " | Toxin levels: [U.getToxLoss()]<br>"
dat += "Burn severity: [U.fireloss]"
dat += "Burn severity: [U.getFireLoss()]"
dat += " | Brute trauma: [U.getBruteLoss()]<br>"
dat += "Radiation Level: [U.radiation] rad<br>"
dat += "Body Temperature: [U.bodytemperature-T0C]&deg;C ([U.bodytemperature*1.8-459.67]&deg;F)<br>"
@@ -690,7 +690,7 @@ ________________________________________________________________________________
spawn(0)
display_spideros()//To refresh the screen and let this finish.
while (A.stat != 2)
A.oxyloss += 2
A.adjustOxyLoss(2)
A.updatehealth()
sleep(10)
killai()

View File

@@ -21,6 +21,8 @@ var/global/datum/controller/gameticker/ticker
var/Bible_item_state // item_state the chaplain has chosen for his bible
var/Bible_name // name of the bible
var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
var/pregame_timeleft = 0

View File

@@ -172,7 +172,7 @@
if(rev_mind in revolutionaries)
revolutionaries -= rev_mind
rev_mind.special_role = null
rev_mind.current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel, and you cannot remember a thing!</B></FONT>"
rev_mind.current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...</B></FONT>"
update_rev_icons_removed(rev_mind)
for(var/mob/living/M in view(rev_mind.current))
M << "[rev_mind.current] looks like they just remembered their real allegiance!"

View File

@@ -10,12 +10,12 @@
New()
..()
initialize_directions = NORTH
initialize_directions = dir
initialize()
if(node) return
var/node_connect = NORTH
var/node_connect = dir
for(var/obj/machinery/atmospherics/target in get_step(src,node_connect))
if(target.initialize_directions & get_dir(target,src))

View File

@@ -64,7 +64,7 @@
dat += text("[]\t-Brute Damage %: []</FONT><BR>", (occupant.getBruteLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getBruteLoss())
dat += text("[]\t-Respiratory Damage %: []</FONT><BR>", (occupant.getOxyLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getOxyLoss())
dat += text("[]\t-Toxin Content %: []</FONT><BR>", (occupant.getToxLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getToxLoss())
dat += text("[]\t-Burn Severity %: []</FONT><BR>", (occupant.fireloss < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.fireloss)
dat += text("[]\t-Burn Severity %: []</FONT><BR>", (occupant.getFireLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getFireLoss())
dat += text("<HR>Paralysis Summary %: [] ([] seconds left!)<BR>", occupant.paralysis, round(occupant.paralysis / 4))
dat += text("Inaprovaline units: [] units<BR>", occupant.reagents.get_reagent_amount("inaprovaline"))
dat += text("Soporific: [] units<BR>", occupant.reagents.get_reagent_amount("stoxin"))
@@ -234,7 +234,7 @@
if (M.health > 0)
if (M.getOxyLoss() >= 10)
var/amount = max(0.15, 1)
M.oxyloss -= amount
M.adjustOxyLoss(-amount)
else
M.oxyloss = 0
M.updatehealth()
@@ -334,7 +334,7 @@
user << text("[]\t -Brute Damage %: []", (src.occupant.getBruteLoss() < 60 ? "\blue " : "\red "), src.occupant.getBruteLoss())
user << text("[]\t -Respiratory Damage %: []", (src.occupant.getOxyLoss() < 60 ? "\blue " : "\red "), src.occupant.getOxyLoss())
user << text("[]\t -Toxin Content %: []", (src.occupant.getToxLoss() < 60 ? "\blue " : "\red "), src.occupant.getToxLoss())
user << text("[]\t -Burn Severity %: []", (src.occupant.fireloss < 60 ? "\blue " : "\red "), src.occupant.fireloss)
user << text("[]\t -Burn Severity %: []", (src.occupant.getFireLoss() < 60 ? "\blue " : "\red "), src.occupant.getFireLoss())
user << "\blue Expected time till occupant can safely awake: (note: If health is below 20% these times are inaccurate)"
user << text("\blue \t [] second\s (if around 1 or 2 the sleeper is keeping them asleep.)", src.occupant.paralysis / 5)
else

View File

@@ -256,6 +256,8 @@ var/global/list/autolathe_recipes = list( \
new /obj/item/device/radio(), \
new /obj/item/device/assembly/infra(), \
new /obj/item/device/assembly/timer(), \
new /obj/item/weapon/light/tube(), \
new /obj/item/weapon/light/bulb(), \
)
var/global/list/autolathe_recipes_hidden = list( \

View File

@@ -339,7 +339,7 @@
if((C.getOxyLoss() >= (15 + heal_threshold)) && (!C.reagents.has_reagent(src.treatment_oxy)))
return 1
if((C.fireloss >= heal_threshold) && (!C.reagents.has_reagent(src.treatment_fire)))
if((C.getFireLoss() >= heal_threshold) && (!C.reagents.has_reagent(src.treatment_fire)))
return 1
if((C.getToxLoss() >= heal_threshold) && (!C.reagents.has_reagent(src.treatment_tox)))
@@ -399,7 +399,7 @@
if(!C.reagents.has_reagent(src.treatment_oxy))
reagent_id = src.treatment_oxy
if (!reagent_id && (C.fireloss >= heal_threshold))
if (!reagent_id && (C.getFireLoss() >= heal_threshold))
if(!C.reagents.has_reagent(src.treatment_fire))
reagent_id = src.treatment_fire

View File

@@ -468,7 +468,7 @@
// called to load a crate
/obj/machinery/bot/mulebot/proc/load(var/atom/movable/C)
if((wires & wire_loadcheck) && !istype(C,/obj/structure/crate))
if((wires & wire_loadcheck) && !istype(C,/obj/structure/closet/crate))
src.visible_message("[src] makes a sighing buzz.", "You hear an electronic buzzing sound.")
playsound(src.loc, 'buzz-sigh.ogg', 50, 0)
return // if not emagged, only allow crates to be loaded
@@ -478,7 +478,7 @@
mode = 1
// if a create, close before loading
var/obj/structure/crate/crate = C
var/obj/structure/closet/crate/crate = C
if(istype(crate))
crate.close()
@@ -742,7 +742,7 @@
AM = A
break
else // otherwise, look for crates only
AM = locate(/obj/structure/crate) in get_step(loc,loaddir)
AM = locate(/obj/structure/closet/crate) in get_step(loc,loaddir)
if(AM)
load(AM)
// whatever happened, check to see if we return home

View File

@@ -415,7 +415,7 @@
if (!src.implanted)
return "ERROR"
else
src.healthstring = "[round(src.implanted:getOxyLoss())] - [round(src.implanted:fireloss)] - [round(src.implanted:getToxLoss())] - [round(src.implanted:getBruteLoss())]"
src.healthstring = "[round(src.implanted:getOxyLoss())] - [round(src.implanted:getFireLoss())] - [round(src.implanted:getToxLoss())] - [round(src.implanted:getBruteLoss())]"
if (!src.healthstring)
src.healthstring = "ERROR"
return src.healthstring
@@ -452,12 +452,12 @@
src.icon_state = "pod_1"
//Get the clone body ready
src.occupant.rejuv = 10
src.occupant.cloneloss += 190 //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite
src.occupant.brainloss += 90
src.occupant.adjustCloneLoss(190) //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite
src.occupant.adjustBrainLoss(90)
src.occupant.paralysis += 4
//Here let's calculate their health so the pod doesn't immediately eject them!!!
src.occupant.health = (src.occupant.getBruteLoss() + src.occupant.getToxLoss() + src.occupant.getOxyLoss() + src.occupant.cloneloss)
src.occupant.health = (src.occupant.getBruteLoss() + src.occupant.getToxLoss() + src.occupant.getOxyLoss() + src.occupant.getCloneLoss())
src.occupant << "\blue <b>Clone generation process initiated.</b>"
src.occupant << "\blue This will take a moment, please hold."
@@ -544,17 +544,17 @@
src.occupant.paralysis = 4
//Slowly get that clone healed and finished.
src.occupant.cloneloss = max(src.occupant.cloneloss-2, 0)
src.occupant.adjustCloneLoss(-2)
//Premature clones may have brain damage.
src.occupant.brainloss = max(src.occupant.brainloss-1, 0)
src.occupant.adjustBrainLoss(-1)
//So clones don't die of oxyloss in a running pod.
if (src.occupant.reagents.get_reagent_amount("inaprovaline") < 30)
src.occupant.reagents.add_reagent("inaprovaline", 60)
//Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!!
src.occupant.oxyloss = max(src.occupant.getOxyLoss()-4, 0)
src.occupant.adjustOxyLoss(-4)
use_power(7500) //This might need tweaking.
return
@@ -630,14 +630,20 @@
src.mess = 0
gibs(src.loc)
src.icon_state = "pod_0"
/*
for(var/obj/O in src)
O.loc = src.loc
*/
return
if (!(src.occupant))
return
/*
for(var/obj/O in src)
O.loc = src.loc
*/
if (src.occupant.client)
src.occupant.client.eye = src.occupant.client.mob

View File

@@ -38,7 +38,7 @@
<B>Health:</B> [src.victim.health]<BR>
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
<B>Fire Damage:</B> [src.victim.fireloss]<BR>
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
<B>Patient Status:</B> [src.victim.stat ? "Non-responsive" : "Stable"]<BR>
"}

View File

@@ -122,10 +122,10 @@
src.active = 1
src.overlays += image('computer.dmi', "ai-fixer-on")
while (src.occupant.health < 100)
src.occupant.oxyloss = max (src.occupant.getOxyLoss()-1, 0)
src.occupant.fireloss = max (src.occupant.fireloss-1, 0)
src.occupant.adjustOxyLoss(-1)
src.occupant.adjustFireLoss(-1)
src.occupant.adjustToxLoss(-1)
src.occupant.bruteloss = max (src.occupant.getBruteLoss()-1, 0)
src.occupant.adjustBruteLoss(-1)
src.occupant.updatehealth()
if (src.occupant.health >= 0 && src.occupant.stat == 2)
src.occupant.stat = 0

View File

@@ -63,7 +63,7 @@
var/mob/living/carbon/human/H = C.loc
var/dam1 = round(H.getOxyLoss(),1)
var/dam2 = round(H.getToxLoss(),1)
var/dam3 = round(H.fireloss,1)
var/dam3 = round(H.getFireLoss(),1)
var/dam4 = round(H.getBruteLoss(),1)
switch(C.sensor_mode)
if(1)

View File

@@ -20,11 +20,11 @@
New()
..()
build_icon()
initialize_directions = SOUTH
initialize_directions = dir
initialize()
if(node) return
var/node_connect = SOUTH
var/node_connect = dir
for(var/obj/machinery/atmospherics/target in get_step(src,node_connect))
if(target.initialize_directions & get_dir(target,src))
node = target
@@ -90,7 +90,7 @@
<B>Current cell temperature:</B> [temp_text]K<BR>
<B>Cryo status:</B> [ src.on ? "<A href='?src=\ref[src];start=1'>Off</A> <B>On</B>" : "<B>Off</B> <A href='?src=\ref[src];start=1'>On</A>"]<BR>
[beaker_text]<BR><BR>
<B>Current occupant:</B> [src.occupant ? "<BR>Name: [src.occupant]<BR>Health: [health_text]<BR>Oxygen deprivation: [round(src.occupant.getOxyLoss(),0.1)]<BR>Brute damage: [round(src.occupant.getBruteLoss(),0.1)]<BR>Fire damage: [round(src.occupant.fireloss,0.1)]<BR>Toxin damage: [round(src.occupant.getToxLoss(),0.1)]<BR>Body temperature: [src.occupant.bodytemperature]" : "<FONT color=red>None</FONT>"]<BR>
<B>Current occupant:</B> [src.occupant ? "<BR>Name: [src.occupant]<BR>Health: [health_text]<BR>Oxygen deprivation: [round(src.occupant.getOxyLoss(),0.1)]<BR>Brute damage: [round(src.occupant.getBruteLoss(),0.1)]<BR>Fire damage: [round(src.occupant.getFireLoss(),0.1)]<BR>Toxin damage: [round(src.occupant.getToxLoss(),0.1)]<BR>Body temperature: [src.occupant.bodytemperature]" : "<FONT color=red>None</FONT>"]<BR>
"}
user.machine = src
@@ -168,15 +168,15 @@
occupant.sleeping = max(5, (1/occupant.bodytemperature)*2000)
occupant.paralysis = max(5, (1/occupant.bodytemperature)*3000)
if(air_contents.oxygen > 2)
if(occupant.getOxyLoss()) occupant.oxyloss = max(0, occupant.getOxyLoss() - 1)
if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1)
else
occupant.oxyloss -= 1
occupant.adjustOxyLoss(-1)
//severe damage should heal waaay slower without proper chemicals
if(occupant.bodytemperature < 225)
if (occupant.getToxLoss())
occupant.adjustToxLoss(max(-1, -20/occupant.getToxLoss()))
var/heal_brute = occupant.getBruteLoss() ? min(1, 20/occupant.getBruteLoss()) : 0
var/heal_fire = occupant.fireloss ? min(1, 20/occupant.fireloss) : 0
var/heal_fire = occupant.getFireLoss() ? min(1, 20/occupant.getFireLoss()) : 0
occupant.heal_organ_damage(heal_brute,heal_fire)
if(beaker && (next_trans == 0))
beaker:reagents.trans_to(occupant, 1, 10)

View File

@@ -600,7 +600,7 @@ About the new airlock wires panel:
if (ishuman(user) && prob(40) && src.density)
var/mob/living/carbon/human/H = user
if(H.brainloss >= 60)
if(H.getBrainLoss() >= 60)
playsound(src.loc, 'bang.ogg', 25, 1)
if(!istype(H.head, /obj/item/clothing/head/helmet))
for(var/mob/M in viewers(src, null))

View File

@@ -18,7 +18,7 @@
return ..(user)
var/mob/living/carbon/human/H = user
if(H.brainloss >= 60)
if(H.getBrainLoss() >= 60)
return
var/t1 = text("<B>Access control</B><br>\n")

View File

@@ -37,7 +37,7 @@
if(F.id == src.id)
targets += F
for(var/obj/structure/secure_closet/brig/C in world)
for(var/obj/structure/closet/secure_closet/brig/C in world)
if(C.id == src.id)
targets += C
@@ -81,7 +81,7 @@
spawn(0)
door.close()
for(var/obj/structure/secure_closet/brig/C in targets)
for(var/obj/structure/closet/secure_closet/brig/C in targets)
if(C.broken) continue
if(C.opened && !C.close()) continue
C.locked = 1
@@ -97,7 +97,7 @@
spawn(0)
door.open()
for(var/obj/structure/secure_closet/brig/C in targets)
for(var/obj/structure/closet/secure_closet/brig/C in targets)
if(C.broken) continue
if(C.opened) continue
C.locked = 0

View File

@@ -155,7 +155,7 @@
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
/obj/structure/crate/juice
/obj/structure/closet/crate/juice
New()
..()
new/obj/machinery/juicer(src)

View File

@@ -186,11 +186,11 @@ Class Procs:
return 1
*/
if (ishuman(user))
if(user.brainloss >= 60)
if(user.getBrainLoss() >= 60)
for(var/mob/M in viewers(src, null))
M << "\red [user] stares cluelessly at [src] and drools."
return 1
else if(prob(user.brainloss))
else if(prob(user.getBrainLoss()))
user << "\red You momentarily forget how to use [src]."
return 1

View File

@@ -0,0 +1,425 @@
// Magnetic attractor, creates variable magnetic fields and attraction.
// Can also be used to emit electron/proton beams to create a center of magnetism on another tile
// tl;dr: it's magnets lol
// This was created for firing ranges, but I suppose this could have other applications - Doohl
/obj/machinery/magnetic_module
icon = 'objects.dmi'
icon_state = "floor_magnet-f"
name = "Electromagnetic Generator"
desc = "A device that uses station power to create points of magnetic energy."
level = 1 // underfloor
layer = 2.5
anchored = 1
use_power = 1
idle_power_usage = 50
var/freq = 1449 // radio frequency
var/electricity_level = 1 // intensity of the magnetic pull
var/magnetic_field = 1 // the range of magnetic attraction
var/code = 0 // frequency code, they should be different unless you have a group of magnets working together or something
var/turf/center // the center of magnetic attraction
var/on = 0
var/pulling = 0
// x, y modifiers to the center turf; (0, 0) is centered on the magnet, whereas (1, -1) is one tile right, one tile down
var/center_x = 0
var/center_y = 0
var/max_dist = 20 // absolute value of center_x,y cannot exceed this integer
New()
..()
var/turf/T = loc
hide(T.intact)
center = T
spawn(10) // must wait for map loading to finish
if(radio_controller)
radio_controller.add_object(src, freq, RADIO_MAGNETS)
spawn()
magnetic_process()
// update the invisibility and icon
hide(var/intact)
invisibility = intact ? 101 : 0
updateicon()
// update the icon_state
proc/updateicon()
var/state="floor_magnet"
var/onstate=""
if(!on)
onstate="0"
if(invisibility)
icon_state = "[state][onstate]-f" // if invisible, set icon to faded version
// in case of being revealed by T-scanner
else
icon_state = "[state][onstate]"
receive_signal(datum/signal/signal)
var/command = signal.data["command"]
var/modifier = signal.data["modifier"]
var/signal_code = signal.data["code"]
if(command && (signal_code == code))
Cmd(command, modifier)
proc/Cmd(var/command, var/modifier)
if(command)
switch(command)
if("set-electriclevel")
if(modifier) electricity_level = modifier
if("set-magneticfield")
if(modifier) magnetic_field = modifier
if("add-elec")
electricity_level++
if(electricity_level > 12)
electricity_level = 12
if("sub-elec")
electricity_level--
if(electricity_level <= 0)
electricity_level = 1
if("add-mag")
magnetic_field++
if(magnetic_field > 4)
magnetic_field = 4
if("sub-mag")
magnetic_field--
if(magnetic_field <= 0)
magnetic_field = 1
if("set-x")
if(modifier) center_x = modifier
if("set-y")
if(modifier) center_y = modifier
if("N") // NORTH
center_y++
if("S") // SOUTH
center_y--
if("E") // EAST
center_x++
if("W") // WEST
center_x--
if("C") // CENTER
center_x = 0
center_y = 0
if("R") // RANDOM
center_x = rand(-max_dist, max_dist)
center_y = rand(-max_dist, max_dist)
if("set-code")
if(modifier) code = modifier
if("toggle-power")
on = !on
if(on)
spawn()
magnetic_process()
process()
..()
if(stat & NOPOWER)
on = 0
// Sanity checks:
if(electricity_level <= 0)
electricity_level = 1
if(magnetic_field <= 0)
magnetic_field = 1
// Limitations:
if(abs(center_x) > max_dist)
center_x = max_dist
if(abs(center_y) > max_dist)
center_y = max_dist
if(magnetic_field > 4)
magnetic_field = 4
if(electricity_level > 12)
electricity_level = 12
// Update power usage:
if(on)
use_power = 2
active_power_usage = electricity_level*15
else
use_power = 0
// Overload conditions:
/* // Eeeehhh kinda stupid
if(on)
if(electricity_level > 11)
if(prob(electricity_level))
explosion(loc, 0, 1, 2, 3) // ooo dat shit EXPLODES son
spawn(2)
del(src)
*/
updateicon()
proc/magnetic_process() // proc that actually does the pulling
if(pulling) return
while(on)
pulling = 1
center = locate(x+center_x, y+center_y, z)
if(center)
for(var/obj/M in orange(magnetic_field, center))
if(!M.anchored && (M.flags & CONDUCT))
step_towards(M, center)
for(var/mob/living/silicon/S in orange(magnetic_field, center))
if(istype(S, /mob/living/silicon/ai)) continue
step_towards(S, center)
use_power(electricity_level * 5)
sleep(13 - electricity_level)
pulling = 0
/obj/machinery/magnetic_controller
name = "Magnetic Control Console"
icon = 'airlock_machines.dmi' // uses an airlock machine icon, THINK GREEN HELP THE ENVIRONMENT - RECYCLING!
icon_state = "airlock_control_standby"
density = 1
anchored = 1.0
use_power = 1
idle_power_usage = 45
var/frequency = 1449
var/code = 0
var/list/magnets = list()
var/title = "Magnetic Control Console"
var/autolink = 0 // if set to 1, can't probe for other magnets!
var/pathpos = 1 // position in the path
var/path = "NULL" // text path of the magnet
var/speed = 1 // lowest = 1, highest = 10
var/list/rpath = list() // real path of the magnet, used in iterator
var/moving = 0 // 1 if scheduled to loop
var/looping = 0 // 1 if looping
var/datum/radio_frequency/radio_connection
New()
..()
if(autolink)
for(var/obj/machinery/magnetic_module/M in world)
if(M.freq == frequency && M.code == code)
magnets.Add(M)
spawn(45) // must wait for map loading to finish
if(radio_controller)
radio_connection = radio_controller.add_object(src, frequency, RADIO_MAGNETS)
if(path) // check for default path
filter_path() // renders rpath
process()
..()
if(magnets.len == 0 && autolink)
for(var/obj/machinery/magnetic_module/M in world)
if(M.freq == frequency && M.code == code)
magnets.Add(M)
attack_ai(mob/user as mob)
return src.attack_hand(user)
attack_hand(mob/user as mob)
if(stat & (BROKEN|NOPOWER))
return
user.machine = src
var/dat = "<B>Magnetic Control Console</B><BR><BR>"
if(!autolink)
dat += {"
Frequency: <a href='?src=\ref[src];operation=setfreq'>[frequency]</a><br>
Code: <a href='?src=\ref[src];operation=setfreq'>[code]</a><br>
<a href='?src=\ref[src];operation=probe'>Probe Generators</a><br>
"}
if(magnets.len >= 1)
dat += "Magnets confirmed: <br>"
var/i = 0
for(var/obj/machinery/magnetic_module/M in magnets)
i++
dat += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< \[[i]\] (<a href='?src=\ref[src];radio-op=togglepower'>[M.on ? "On":"Off"]</a>) | Electricity level: <a href='?src=\ref[src];radio-op=minuselec'>-</a> [M.electricity_level] <a href='?src=\ref[src];radio-op=pluselec'>+</a>; Magnetic field: <a href='?src=\ref[src];radio-op=minusmag'>-</a> [M.magnetic_field] <a href='?src=\ref[src];radio-op=plusmag'>+</a><br>"
dat += "<br>Speed: <a href='?src=\ref[src];operation=minusspeed'>-</a> [speed] <a href='?src=\ref[src];operation=plusspeed'>+</a><br>"
dat += "Path: {<a href='?src=\ref[src];operation=setpath'>[path]</a>}<br>"
dat += "Moving: <a href='?src=\ref[src];operation=togglemoving'>[moving ? "Enabled":"Disabled"]</a>"
user << browse(dat, "window=magnet;size=400x500")
onclose(user, "magnet")
Topic(href, href_list)
if(stat & (BROKEN|NOPOWER))
return
usr.machine = src
src.add_fingerprint(usr)
if(href_list["radio-op"])
// Prepare signal beforehand, because this is a radio operation
var/datum/signal/signal = new
signal.transmission_method = 1 // radio transmission
signal.source = src
signal.frequency = frequency
signal.data["code"] = code
// Apply any necessary commands
switch(href_list["radio-op"])
if("togglepower")
signal.data["command"] = "toggle-power"
if("minuselec")
signal.data["command"] = "sub-elec"
if("pluselec")
signal.data["command"] = "add-elec"
if("minusmag")
signal.data["command"] = "sub-mag"
if("plusmag")
signal.data["command"] = "add-mag"
// Broadcast the signal
radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS)
spawn(1)
updateUsrDialog() // pretty sure this increases responsiveness
if(href_list["operation"])
switch(href_list["operation"])
if("plusspeed")
speed ++
if(speed > 10)
speed = 10
if("minusspeed")
speed --
if(speed <= 0)
speed = 1
if("setpath")
var/newpath = input(usr, "Please define a new path!",,path) as text|null
if(newpath && newpath != "")
moving = 0 // stop moving
path = newpath
pathpos = 1 // reset position
filter_path() // renders rpath
if("togglemoving")
moving = !moving
if(moving)
spawn() MagnetMove()
updateUsrDialog()
proc/MagnetMove()
if(looping) return
while(moving && rpath.len >= 1)
if(stat & (BROKEN|NOPOWER))
break
looping = 1
// Prepare the radio signal
var/datum/signal/signal = new
signal.transmission_method = 1 // radio transmission
signal.source = src
signal.frequency = frequency
signal.data["code"] = code
if(pathpos > rpath.len) // if the position is greater than the length, we just loop through the list!
pathpos = 1
var/nextmove = uppertext(rpath[pathpos]) // makes it un-case-sensitive
if(!(nextmove in list("N","S","E","W","C","R")))
// N, S, E, W are directional
// C is center
// R is random (in magnetic field's bounds)
del(signal)
break // break the loop if the character located is invalid
signal.data["command"] = nextmove
pathpos++ // increase iterator
// Broadcast the signal
spawn()
radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS)
if(speed == 10)
sleep(1)
else
sleep(12-speed)
looping = 0
proc/filter_path()
// Generates the rpath variable using the path string, think of this as "string2list"
// Doesn't use params2list() because of the akward way it stacks entities
rpath = list() // clear rpath
var/maximum_character = min( 50, length(path) ) // chooses the maximum length of the iterator. 50 max length
for(var/i=1, i<=maximum_character, i++) // iterates through all characters in path
var/nextchar = copytext(path, i, i+1) // find next character
if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore
rpath += copytext(path, i, i+1) // else, add to list
// there doesn't HAVE to be separators but it makes paths syntatically visible

View File

@@ -322,7 +322,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
continue // if threat level < 4, keep going
else if (istype(C, /mob/living/carbon/monkey) || istype(C, /mob/living/silicon))
continue // Don't target monkies or borgs/AIs you dumb shit
continue // Don't target monkeys or borgs/AIs you dumb shit
var/dst = get_dist(src, C) // if it's too far away, why bother?
if (dst > 12)

View File

@@ -458,11 +458,11 @@
/* for(var/mob/M as mob in src.loc) //does not work for some reason.
if(istype(M,/mob/living/carbon))
M.bruteloss += 100
M.adjustBruteLoss(100)
M.updatehealth()
M << "\red <B>You feel as the very atoms of your body divide!</B>"
else
M.bruteloss += 50
M.adjustBruteLoss(50)
M.updatehealth()
M << "\red <B>Strong energy field detected. Damage from field dampened.</B>"
*/

View File

@@ -210,7 +210,7 @@
else
tmploc = locate(tx, ty, destination.z)
if(tx == destturf.x && ty == destturf.y && (istype(destination.loc, /obj/structure/closet) || istype(destination.loc, /obj/structure/secure_closet)))
if(tx == destturf.x && ty == destturf.y && (istype(destination.loc, /obj/structure/closet) || istype(destination.loc, /obj/structure/closet/secure_closet)))
tmploc = destination.loc
if(tmploc==null)

View File

@@ -141,7 +141,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
if(istype(user.wear_mask, /obj/item/clothing/mask/muzzle) || user.ear_deaf)
user << "You need to be able to both speak and hear to use runes."
return
if(!word1 || !word2 || !word3 || prob(usr.brainloss))
if(!word1 || !word2 || !word3 || prob(usr.getBrainLoss()))
return fizzle()
// if(!src.visibility)
// src.visibility=1

View File

@@ -717,7 +717,7 @@ var/list/sacrificed = list()
cultist.handcuffed || \
istype(cultist.wear_mask, /obj/item/clothing/mask/muzzle) || \
(istype(cultist.loc, /obj/structure/closet)&&cultist.loc:welded) || \
(istype(cultist.loc, /obj/structure/secure_closet)&&cultist.loc:locked) || \
(istype(cultist.loc, /obj/structure/closet/secure_closet)&&cultist.loc:locked) || \
(istype(cultist.loc, /obj/machinery/dna_scannernew)&&cultist.loc:locked) \
))
user << "\red The [cultist] is already free."
@@ -730,7 +730,7 @@ var/list/sacrificed = list()
cultist.u_equip(cultist.wear_mask)
if(istype(cultist.loc, /obj/structure/closet)&&cultist.loc:welded)
cultist.loc:welded = 0
if(istype(cultist.loc, /obj/structure/secure_closet)&&cultist.loc:locked)
if(istype(cultist.loc, /obj/structure/closet/secure_closet)&&cultist.loc:locked)
cultist.loc:locked = 0
if(istype(cultist.loc, /obj/machinery/dna_scannernew)&&cultist.loc:locked)
cultist.loc:locked = 0

View File

@@ -129,7 +129,7 @@
if(istype(target, /mob))
var/mob/M = target
M.make_dizzy(3)
M.bruteloss += 1
M.adjustBruteLoss(1)
M.updatehealth()
for (var/mob/V in viewers(src))
V.show_message("[src.name] shakes [M] like a rag doll.")

View File

@@ -50,7 +50,7 @@
if(M.stat>1) return
if(chassis.occupant.a_intent == "hurt")
M.take_overall_damage(dam_force)
M.oxyloss += round(dam_force/2)
M.adjustOxyLoss(round(dam_force/2))
M.updatehealth()
chassis.occupant_message("\red You squeese [target] with [src.name]. Something cracks.")
chassis.visible_message("\red [chassis] squeeses [target].")
@@ -78,6 +78,7 @@
chassis.occupant_message("<font color='red'><b>You start to drill [target]</b></font>")
chassis.use_power(energy_drain)
var/T = chassis.loc
var/C = target.loc //why are these backwards? we may never know -Pete
if(do_after_cooldown(target))
if(T == chassis.loc && src == chassis.selected)
if(istype(target, /turf/simulated/wall/r_wall))
@@ -93,7 +94,7 @@
for(var/obj/item/weapon/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
ore.Move(ore_box)
else
else if(target.loc == C)
chassis.log_message("Drilled through [target]")
target.ex_act(2)
return 1

View File

@@ -1295,7 +1295,7 @@
O.laws = AI.laws
O.stat = AI.stat
O.oxyloss = AI.getOxyLoss()
O.fireloss = AI.fireloss
O.fireloss = AI.getFireLoss()
O.bruteloss = AI.getBruteLoss()
O.toxloss = AI.toxloss
O.updatehealth()
@@ -1313,7 +1313,7 @@
AI.control_disabled = 0
AI.laws = O.laws
AI.oxyloss = O.getOxyLoss()
AI.fireloss = O.fireloss
AI.fireloss = O.getFireLoss()
AI.bruteloss = O.getBruteLoss()
AI.toxloss = O.toxloss
AI.updatehealth()

View File

@@ -6,7 +6,7 @@
return (!density)
/obj/structure/closet/proc/can_open()
if (src.welded)
if(src.welded)
return 0
return 1
@@ -14,28 +14,23 @@
for(var/obj/structure/closet/closet in get_turf(src))
if(closet != src)
return 0
for(var/obj/structure/secure_closet/closet in get_turf(src))
return 0
return 1
/obj/structure/closet/proc/dump_contents()
for (var/obj/item/I in src)
for(var/obj/item/I in src)
I.loc = src.loc
for (var/obj/effect/overlay/o in src) //REMOVE THIS
o.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
if(M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
/obj/structure/closet/proc/open()
if (src.opened)
if(src.opened)
return 0
if (!src.can_open())
if(!src.can_open())
return 0
src.dump_contents()
@@ -47,26 +42,22 @@
return 1
/obj/structure/closet/proc/close()
if (!src.opened)
if(!src.opened)
return 0
if (!src.can_close())
if(!src.can_close())
return 0
for (var/obj/item/I in src.loc)
if (!I.anchored)
for(var/obj/item/I in src.loc)
if(!I.anchored)
I.loc = src
for (var/obj/effect/overlay/o in src.loc) //REMOVE THIS
if (!o.anchored)
o.loc = src
for (var/mob/M in src.loc)
if (istype (M, /mob/dead/observer))
for(var/mob/M in src.loc)
if(istype (M, /mob/dead/observer))
continue
if (M.buckled)
if(M.buckled)
continue
if (M.client)
if(M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
@@ -78,27 +69,27 @@
return 1
/obj/structure/closet/proc/toggle()
if (src.opened)
if(src.opened)
return src.close()
return src.open()
// this should probably use dump_contents()
/obj/structure/closet/ex_act(severity)
switch(severity)
if (1)
for (var/atom/movable/A as mob|obj in src)
if(1)
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
if (2)
if (prob(50))
if(2)
if(prob(50))
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
if (3)
if (prob(5))
for (var/atom/movable/A as mob|obj in src)
if(3)
if(prob(5))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
@@ -107,7 +98,7 @@
health -= Proj.damage
..()
if(health <= 0)
for (var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
del(src)
@@ -115,18 +106,18 @@
// this should probably use dump_contents()
/obj/structure/closet/blob_act()
if (prob(75))
if(prob(75))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
del(src)
/obj/structure/closet/meteorhit(obj/O as obj)
if (O.icon_state == "flaming")
if(O.icon_state == "flaming")
src.dump_contents()
del(src)
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/packageWrap))
if(istype(W, /obj/item/weapon/packageWrap))
var/obj/item/weapon/packageWrap/O = W
if (O.amount > 3)
var/obj/effect/bigDelivery/P = new /obj/effect/bigDelivery(get_turf(src.loc))
@@ -135,16 +126,16 @@
src.welded = 1
src.loc = P
O.amount -= 3
else if (src.opened)
if (istype(W, /obj/item/weapon/grab))
else if(src.opened)
if(istype(W, /obj/item/weapon/grab))
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
if (istype(W, /obj/item/weapon/weldingtool) && W:welding)
if (!W:remove_fuel(0,user))
if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
if(!W:remove_fuel(0,user))
user << "\blue You need more welding fuel to complete this task."
return
new /obj/item/stack/sheet/metal(src.loc)
for (var/mob/M in viewers(src))
for(var/mob/M in viewers(src))
M.show_message("\red [src] has been cut apart by [user.name] with the weldingtool.", 3, "\red You hear welding.", 2)
del(src)
return
@@ -154,11 +145,11 @@
usr.drop_item()
if (W)
if(W)
W.loc = src.loc
else if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
if (!W:remove_fuel(0,user))
if(!W:remove_fuel(0,user))
user << "\blue You need more welding fuel to complete this task."
return
src.welded =! src.welded
@@ -169,32 +160,29 @@
return
/obj/structure/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
if (!user.can_use_hands())
if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis)
return
if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
if((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
return
if (user.loc==null) // just in case someone manages to get a closet into the blue light dimension, as unlikely as that seems
if(user.loc==null) // just in case someone manages to get a closet into the blue light dimension, as unlikely as that seems
return
if (!istype(user.loc, /turf)) // are you in a container/closet/pod/etc?
if(!istype(user.loc, /turf)) // are you in a container/closet/pod/etc?
return
if(!src.opened)
return
if(istype(O, /obj/structure/secure_closet) || istype(O, /obj/structure/closet))
return
if(isrobot(user))
if(istype(O, /obj/structure/closet))
return
step_towards(O, src.loc)
user.show_viewers(text("\red [] stuffs [] into []!", user, O, src))
if(user != O)
user.show_viewers(text("\red [] stuffs [] into []!", user, O, src))
src.add_fingerprint(user)
return
/obj/structure/closet
var/lastbang = 0
/obj/structure/closet/relaymove(mob/user as mob)
if (user.stat)
if(user.stat)
return
if (!src.open())
if(!src.open())
user << "\blue It won't budge!"
if(!lastbang)
lastbang = 1
@@ -217,5 +205,5 @@
/obj/structure/closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
if (!src.toggle())
if(!src.toggle())
usr << "\blue It won't budge!"

View File

@@ -1,10 +1,7 @@
/obj/structure/closet/jcloset/New()
..()
sleep(2)
new /obj/item/clothing/suit/bio_suit/janitor(src)
new /obj/item/clothing/head/bio_hood/janitor(src)
new /obj/item/clothing/under/rank/janitor(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/device/flashlight(src)
new /obj/item/clothing/shoes/galoshes(src)
new /obj/item/weapon/caution(src)

View File

@@ -1,4 +1,4 @@
/obj/structure/secure_closet/kitchen/New()
/obj/structure/closet/secure_closet/kitchen/New()
..()
sleep(2)
/*new /obj/item/clothing/head/chefhat(src)
@@ -38,7 +38,7 @@
new /obj/item/weapon/kitchen/utensil/spoon(src)
new /obj/item/weapon/kitchen/rollingpin(src)*/
/obj/structure/secure_closet/meat/New()
/obj/structure/closet/secure_closet/meat/New()
..()
sleep(2)
new /obj/item/kitchen/egg_box(src)
@@ -48,7 +48,7 @@
new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src)
new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src)
/obj/structure/secure_closet/fridge/New()
/obj/structure/closet/secure_closet/fridge/New()
..()
sleep(2)
new /obj/item/weapon/reagent_containers/food/drinks/milk(src)
@@ -62,7 +62,7 @@
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
/obj/structure/secure_closet/money_freezer/New()
/obj/structure/closet/secure_closet/money_freezer/New()
..()
sleep(2)
new /obj/item/weapon/spacecash/c1000(src)

View File

@@ -1,4 +1,4 @@
/obj/structure/secure_closet/bar
/obj/structure/closet/secure_closet/bar
name = "Booze"
req_access = list(access_bar)

View File

@@ -1,4 +1,4 @@
/obj/structure/secure_closet/engineering_chief
/obj/structure/closet/secure_closet/engineering_chief
name = "Chief Engineer's Locker"
req_access = list(access_ce)
@@ -22,7 +22,7 @@
/obj/structure/secure_closet/engineering_electrical
/obj/structure/closet/secure_closet/engineering_electrical
name = "Electrical Supplies"
req_access = list(access_engine)
@@ -42,7 +42,7 @@
/obj/structure/secure_closet/engineering_welding
/obj/structure/closet/secure_closet/engineering_welding
name = "Welding Supplies"
req_access = list(access_engine)
@@ -60,7 +60,7 @@
/obj/structure/secure_closet/engineering_personal
/obj/structure/closet/secure_closet/engineering_personal
name = "Engineer's Locker"
req_access = list(access_engine)

View File

@@ -1,4 +1,4 @@
/obj/structure/secure_closet/medical1
/obj/structure/closet/secure_closet/medical1
name = "Medicine Closet"
desc = "Filled with medical junk."
icon_state = "medical1"
@@ -26,7 +26,7 @@
/obj/structure/secure_closet/medical2
/obj/structure/closet/secure_closet/medical2
name = "Anesthetic"
desc = "Used to knock people out."
icon_state = "medical1"
@@ -51,7 +51,7 @@
/obj/structure/secure_closet/medical3
/obj/structure/closet/secure_closet/medical3
name = "Medical Doctor's Locker"
req_access = list(access_medical)
@@ -71,7 +71,7 @@
/obj/structure/secure_closet/CMO
/obj/structure/closet/secure_closet/CMO
name = "Chief Medical Officer"
req_access = list(access_cmo)
@@ -90,7 +90,7 @@
/obj/structure/secure_closet/animal
/obj/structure/closet/secure_closet/animal
name = "Animal Control"
req_access = list(access_medical)
@@ -106,7 +106,7 @@
/obj/structure/secure_closet/chemical
/obj/structure/closet/secure_closet/chemical
name = "Chemical Closet"
desc = "Store dangerous chemicals in here."
icon_state = "medical1"

View File

@@ -1,14 +1,14 @@
/obj/structure/secure_closet/personal/var/registered = null
/obj/structure/secure_closet/personal/req_access = list(access_all_personal_lockers)
/obj/structure/closet/secure_closet/personal/var/registered = null
/obj/structure/closet/secure_closet/personal/req_access = list(access_all_personal_lockers)
/obj/structure/secure_closet/personal/New()
/obj/structure/closet/secure_closet/personal/New()
..()
spawn(2)
new /obj/item/weapon/storage/backpack( src )
new /obj/item/device/radio/headset( src )
return
/obj/structure/secure_closet/personal/patient/New()
/obj/structure/closet/secure_closet/personal/patient/New()
..()
contents = list()
spawn(4)
@@ -16,7 +16,7 @@
new /obj/item/clothing/shoes/white( src )
return
/obj/structure/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (src.opened)
if (istype(W, /obj/item/weapon/grab))
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet

View File

@@ -1,4 +1,4 @@
/obj/structure/secure_closet/scientist
/obj/structure/closet/secure_closet/scientist
name = "Scientist Locker"
req_access = list(access_tox_storage)
@@ -16,7 +16,7 @@
/obj/structure/secure_closet/RD
/obj/structure/closet/secure_closet/RD
name = "Research Director"
req_access = list(access_rd)

View File

@@ -1,88 +1,10 @@
/obj/structure/secure_closet/alter_health()
return get_turf(src)
/obj/structure/secure_closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0) || wall_mounted) return 1
return src.opened
/obj/structure/secure_closet/proc/can_close()
for(var/obj/structure/closet/closet in get_turf(src))
return 0
for(var/obj/structure/secure_closet/closet in get_turf(src))
if(closet != src)
return 0
return 1
/obj/structure/secure_closet/proc/can_open()
if (src.locked)
/obj/structure/closet/secure_closet/can_open()
..()
if(src.locked)
return 0
return 1
/obj/structure/secure_closet/proc/dump_contents()
for (var/obj/item/I in src)
I.loc = src.loc
for (var/obj/effect/overlay/o in src) //REMOVE THIS
o.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
/obj/structure/secure_closet/proc/open()
if (src.opened)
return 0
if (!src.can_open())
return 0
src.dump_contents()
src.icon_state = src.icon_opened
src.opened = 1
playsound(src.loc, 'click.ogg', 15, 1, -3)
return 1
/obj/structure/secure_closet/proc/close()
if (!src.opened)
return 0
if (!src.can_close())
return 0
for (var/obj/item/I in src.loc)
if (!I.anchored)
I.loc = src
for (var/obj/effect/overlay/o in src.loc) //REMOVE THIS
if (!o.anchored)
o.loc = src
for (var/mob/M in src.loc)
if (M.buckled)
continue
if (M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
M.loc = src
if(broken)
src.icon_state = src.icon_off
else
src.icon_state = src.icon_closed
src.opened = 0
playsound(src.loc, 'click.ogg', 15, 1, -3)
return 1
/obj/structure/secure_closet/proc/toggle()
if (src.opened)
return src.close()
return src.open()
/obj/structure/secure_closet/emp_act(severity)
/obj/structure/closet/secure_closet/emp_act(severity)
for(var/obj/O in src)
O.emp_act(severity)
if(!broken)
@@ -96,69 +18,20 @@
src.req_access += pick(get_all_accesses())
..()
/obj/structure/secure_closet/ex_act(severity)
switch(severity)
if (1)
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
if (2)
if (prob(50))
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
if (3)
if (prob(5))
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
/obj/structure/secure_closet/blob_act()
if (prob(75))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
del(src)
/obj/structure/secure_closet/meteorhit(obj/O as obj)
if (O.icon_state == "flaming")
for(var/obj/item/I in src)
I.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
src.icon_state = src.icon_broken
del(src)
return
return
/obj/structure/secure_closet/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
if(health <= 0)
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
del(src)
return
/obj/structure/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (src.opened)
if (istype(W, /obj/item/weapon/grab))
if (src.large)
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(src.opened)
if(istype(W, /obj/item/weapon/grab))
if(src.large)
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
else
user << "The locker is too small to stuff [W] into!"
user.drop_item()
if (W)
if(W)
W.loc = src.loc
else if(src.broken)
user << "\red It appears to be broken."
return
else if( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
broken = 1
locked = 0
desc = "It appears to be broken."
@@ -177,7 +50,7 @@
else if(src.allowed(user))
src.locked = !src.locked
for(var/mob/O in viewers(user, 3))
if ((O.client && !( O.blinded )))
if((O.client && !( O.blinded )))
O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user)
if(src.locked)
src.icon_state = src.icon_locked
@@ -188,88 +61,32 @@
user << "\red Access Denied"
return
/obj/structure/secure_closet
var/lastbang
/obj/structure/secure_closet/relaymove(mob/user as mob)
if (user.stat)
/obj/structure/closet/secure_closet/relaymove(mob/user as mob)
if(user.stat)
return
if (!( src.locked ))
if(!(src.locked))
for(var/obj/item/I in src)
I.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
if(M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
src.icon_state = src.icon_opened
src.opened = 1
else
user << "\blue It's welded shut!"
if (world.time > lastbang+5)
if(world.time > lastbang+5)
lastbang = world.time
for(var/mob/M in hearers(src, null))
M << text("<FONT size=[]>BANG, bang!</FONT>", max(0, 5 - get_dist(src, M)))
return
/obj/structure/secure_closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
if ((user.restrained() || user.stat))
return
if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
return
if(!src.opened)
return
if(istype(O, /obj/structure/secure_closet) || istype(O, /obj/structure/closet))
return
step_towards(O, src.loc)
if (user != O)
for(var/mob/B in viewers(user, 3))
if ((B.client && !( B.blinded )))
B << text("\red [] stuffs [] into []!", user, O, src)
src.add_fingerprint(user)
return
/*
/obj/structure/secure_closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
if (!src.opened && !src.locked)
if(!src.can_open())
return
//open it
for(var/obj/item/I in src)
I.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
src.icon_state = src.icon_opened
playsound(src.loc, 'click.ogg', 15, 1, -3)
src.opened = 1
else if(src.opened)
if(!src.can_close())
return
//close it
for(var/obj/item/I in src.loc)
if (!( I.anchored ))
I.loc = src
for(var/mob/M in src.loc)
if (M.buckled)
continue
if (M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
M.loc = src
src.icon_state = src.icon_closed
playsound(src.loc, 'click.ogg', 15, 1, -3)
src.opened = 0
else
return src.attackby(null, user)
return*/
/obj/structure/secure_closet/attack_hand(mob/user as mob)
/obj/structure/closet/secure_closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
if (!src.toggle())
if(!src.toggle())
return src.attackby(null, user)
/obj/structure/secure_closet/attack_paw(mob/user as mob)
/obj/structure/closet/secure_closet/attack_paw(mob/user as mob)
return src.attack_hand(user)

View File

@@ -1,4 +1,4 @@
/obj/structure/secure_closet/captains
/obj/structure/closet/secure_closet/captains
name = "Captain's Closet"
req_access = list(access_captain)
@@ -20,7 +20,7 @@
/obj/structure/secure_closet/hop
/obj/structure/closet/secure_closet/hop
name = "Head of Personnel"
req_access = list(access_hop)
@@ -42,7 +42,7 @@
/obj/structure/secure_closet/hos
/obj/structure/closet/secure_closet/hos
name = "Head Of Security"
req_access = list(access_hos)
@@ -66,7 +66,7 @@
/obj/structure/secure_closet/warden
/obj/structure/closet/secure_closet/warden
name = "Warden's Locker"
req_access = list(access_armory)
@@ -87,7 +87,7 @@
/obj/structure/secure_closet/security
/obj/structure/closet/secure_closet/security
name = "Security Locker"
req_access = list(access_security)
@@ -108,7 +108,7 @@
/obj/structure/secure_closet/detective
/obj/structure/closet/secure_closet/detective
name = "Detective"
req_access = list(access_forensics_lockers)
icon_state = "cabinetdetective"
@@ -137,7 +137,7 @@
/obj/structure/secure_closet/injection
/obj/structure/closet/secure_closet/injection
name = "Lethal Injections"
req_access = list(access_hos)
@@ -151,7 +151,7 @@
/obj/structure/secure_closet/brig
/obj/structure/closet/secure_closet/brig
name = "Brig Locker"
req_access = list(access_brig)
anchored = 1
@@ -164,7 +164,7 @@
/obj/structure/secure_closet/courtroom
/obj/structure/closet/secure_closet/courtroom
name = "Courtroom Locker"
req_access = list(access_court)

View File

@@ -655,15 +655,16 @@
id = I
else
var/obj/item/weapon/card/I = user.equipped()
if(id)//Get id and replace it.
user.drop_item()
I.loc = src
user.put_in_hand(id)
id = I
else//Insert id.
user.drop_item()
I.loc = src
id = I
if (istype(I, /obj/item/weapon/card/id) && I:registered)
if(id)//Get id and replace it.
user.drop_item()
I.loc = src
user.put_in_hand(id)
id = I
else//Insert id.
user.drop_item()
I.loc = src
id = I
return
// access to status display signals
@@ -721,7 +722,7 @@
user.show_message("\blue Analyzing Results for [C]:")
user.show_message("\blue \t Overall Status: [C.stat > 1 ? "dead" : "[C.health]% healthy"]", 1)
user.show_message("\blue \t Damage Specifics: [C.getOxyLoss() > 50 ? "\red" : "\blue"][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "\red" : "\blue"][C.getToxLoss()]-[C.fireloss > 50 ? "\red" : "\blue"][C.fireloss]-[C.getBruteLoss() > 50 ? "\red" : "\blue"][C.getBruteLoss()]", 1)
user.show_message("\blue \t Damage Specifics: [C.getOxyLoss() > 50 ? "\red" : "\blue"][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "\red" : "\blue"][C.getToxLoss()]-[C.getFireLoss() > 50 ? "\red" : "\blue"][C.getFireLoss()]-[C.getBruteLoss() > 50 ? "\red" : "\blue"][C.getBruteLoss()]", 1)
user.show_message("\blue \t Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\blue \t Body Temperature: [C.bodytemperature-T0C]&deg;C ([C.bodytemperature*1.8-459.67]&deg;F)", 1)
for(var/datum/disease/D in C.viruses)

View File

@@ -506,7 +506,7 @@ Code:
menu += "Calculating navigation path"
if(7)
menu += "Unable to locate destination"
var/obj/structure/crate/C = QC.botstatus["load"]
var/obj/structure/closet/crate/C = QC.botstatus["load"]
menu += "<BR>Current Load: [ !C ? "<i>none</i>" : "[C.name] (<A href='byond://?src=\ref[QC];op=unload'><i>unload</i></A>)" ]<BR>"
menu += "Destination: [!QC.botstatus["dest"] ? "<i>none</i>" : QC.botstatus["dest"] ] (<A href='byond://?src=\ref[QC];op=setdest'><i>set</i></A>)<BR>"
menu += "Power: [QC.botstatus["powr"]]%<BR>"

View File

@@ -103,7 +103,7 @@
A.suiciding = 1
A << "Your core files are being wiped!"
while (A.stat != 2)
A.oxyloss += 2
A.adjustOxyLoss(2)
A.updatehealth()
sleep(10)
flush = 0

View File

@@ -31,7 +31,7 @@
/obj/item/device/flashlight/attack(mob/M as mob, mob/user as mob)
src.add_fingerprint(user)
if(src.on && user.zone_sel.selecting == "eyes")
if ((user.mutations & CLUMSY || user.brainloss >= 60) && prob(50))//too dumb to use flashlight properly
if ((user.mutations & CLUMSY || user.getBrainLoss() >= 60) && prob(50))//too dumb to use flashlight properly
return ..()//just hit them in the head
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")//don't have dexterity

View File

@@ -180,7 +180,7 @@ MASS SPECTROMETER
origin_tech = "magnets=1;biotech=1"
/obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
if ((user.mutations & CLUMSY || user.brainloss >= 60) && prob(50))
if ((user.mutations & CLUMSY || user.getBrainLoss() >= 60) && prob(50))
user << text("\red You try to analyze the floor's vitals!")
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [user] has analyzed the floor's vitals!"), 1)
@@ -195,31 +195,31 @@ MASS SPECTROMETER
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1)
//Foreach goto(67)
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.fireloss + M.getBruteLoss())))
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
if((M.reagents && M.reagents.has_reagent("zombiepowder")) || (M.changeling && M.changeling.changeling_fakedeath))
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.fireloss > 50 ? "\red[M.fireloss]" : M.fireloss, M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
else
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health))), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.fireloss > 50 ? "\red[M.fireloss]" : M.fireloss, M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)", 1)
if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder")))
user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.fireloss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
else
user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.fireloss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
if (M.cloneloss)
user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
if (M.getCloneLoss())
user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1)
for(var/datum/disease/D in M.viruses)
if(!D.hidden[SCANNER])
user.show_message(text("\red <b>Warning: [D.form] Detected</b>\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
user.show_message(text("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1)
if (M.brainloss >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
user.show_message(text("\red Subject is brain dead."), 1)
else if (M.brainloss >= 60)
else if (M.getBrainLoss() >= 60)
user.show_message(text("\red Severe brain damage detected. Subject likely to have mental retardation."), 1)
else if (M.brainloss >= 10)
else if (M.getBrainLoss() >= 10)
user.show_message(text("\red Significant brain damage detected. Subject may have had a concussion."), 1)
src.add_fingerprint(user)
return

View File

@@ -22,7 +22,7 @@
if (M.stuttering)
src.storedinfo += "[M.name] stammers, \"[msg]\""
return
if (M.brainloss >= 60)
if (M.getBrainLoss() >= 60)
src.storedinfo += "[M.name] gibbers, \"[msg]\""
return
if (ending == "?")

View File

@@ -307,7 +307,7 @@ steam.start() -- spawns the effect
if (M.internal != null && M.wear_mask && (M.wear_mask.flags & MASKINTERNALS))
else
M.drop_item()
M.oxyloss += 1
M.adjustOxyLoss(1)
if (M.coughedtime != 1)
M.coughedtime = 1
M.emote("cough")
@@ -331,7 +331,7 @@ steam.start() -- spawns the effect
return
else
M.drop_item()
M.oxyloss += 1
M.adjustOxyLoss(1)
if (M.coughedtime != 1)
M.coughedtime = 1
M.emote("cough")

View File

@@ -319,7 +319,7 @@ mob/proc/flash_weak_pain()
switch(src.damtype)
if("brute")
if(istype(src, /mob/living/carbon/metroid))
M.bruteloss += power
M.adjustBrainLoss(power)
else
@@ -376,7 +376,7 @@ mob/proc/flash_weak_pain()
M << "\red You stab yourself in the eye."
M.sdisabilities |= 1
M.weakened += 4
M.bruteloss += 10
M.adjustBruteLoss(10)
*/
if(M != user)
for(var/mob/O in (viewers(M) - user - M))

View File

@@ -79,7 +79,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/robot
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15)
possible_transfer_amounts = list(5,10,15,25,30,50,100)
flags = FPRINT | TABLEPASS | OPENCONTAINER
volume = 60
var

View File

@@ -2,7 +2,7 @@
/obj/item/trash
icon = 'trash.dmi'
w_class = 1.0
desc = "It's \a trash"
desc = "This is rubbish."
raisins
name = "4no raisins"
icon_state= "4no_raisins"
@@ -50,35 +50,16 @@
/obj/item/trash/attack(mob/M as mob, mob/living/user as mob)
return
/obj/item/trash/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/trashbag))
var/obj/item/weapon/trashbag/S = W
if (S.mode == 1)
for (var/obj/item/trash/O in locate(src.x,src.y,src.z))
if (S.contents.len < S.capacity)
S.contents += O;
else
user << "\blue The bag is full."
break
user << "\blue You pick up all trash."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The bag is full."
S.update_icon()
return
/obj/item/weapon/trashbag
icon = 'trash.dmi'
icon_state = "trashbag0"
item_state = "trashbag"
name = "Trash bag"
desc = "A heavy-duty, no fun allowed trash bag."
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/capacity = 25; //the number of trash it can carry.
flags = FPRINT | TABLEPASS | ONBELT
w_class = 1
w_class = 2.0
/obj/item/weapon/trashbag/update_icon()
if(contents.len == 0)
@@ -89,12 +70,39 @@
icon_state = "trashbag2"
else icon_state = "trashbag3"
/obj/item/weapon/trashbag/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/trashbag/attackby(obj/item/W as obj, mob/living/user as mob)
..()
if (istype(W, /obj/item/trash))
var/obj/item/trash/O = W
src.contents += O;
return
if (contents.len < capacity)
if (istype(W, /obj/item))
if (W.w_class <= 2)
var/obj/item/O = W
src.contents += O
else
user << "\blue The bag is full!"
/obj/item/weapon/trashbag/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)
if(istype(target, /obj/item))
var/obj/item/W = target
if(W.w_class <= 2)
if(mode == 1)
if(contents.len < capacity) //slightly redundant, but it makes it prettier in the chatbox. -Pete
user << "\blue You pick up all the trash."
for(var/obj/item/O in get_turf(W))
if(contents.len < capacity)
if(O.w_class <= 2)
contents += O;
else
user << "\blue The bag is full!"
break
else
user << "\blue The bag is full!"
else
if(contents.len < capacity)
contents += W;
else
user << "\blue The bag is full!"
update_icon()
return
/obj/item/weapon/trashbag/verb/toggle_mode()
set name = "Switch Bag Method"
@@ -104,5 +112,5 @@
switch (mode)
if(1)
usr << "The bag now picks up all trash in a tile at once."
if(0)
usr << "The bag now picks up one trash at a time."
else
usr << "The bag now picks up one piece of trash at a time."

View File

@@ -390,7 +390,7 @@ AI MODULES
/obj/item/weapon/aiModule/corp
name = "'Corporate' Core AI Module"
desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = null //Adminbus only for now, need to determine how the players take to this. --NEO
origin_tech = "programming=3;materials=4"
/obj/item/weapon/aiModule/corp/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)

View File

@@ -129,23 +129,6 @@ ZIPPO
else if(istype(W, /obj/item/weapon/match) && (W:lit > 0))
light("\red [user] lights their [name] with their [W]. How poor can you get?")
else if (istype(W, /obj/item/weapon/trashbag))
var/obj/item/weapon/trashbag/S = W
if (S.mode == 1)
for (var/obj/item/clothing/mask/cigarette/C in locate(src.x,src.y,src.z))
if (S.contents.len < S.capacity)
S.contents += C;
else
user << "\blue The bag is full."
break
user << "\blue You pick up all trash."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The bag is full."
S.update_icon()
return
@@ -291,27 +274,6 @@ ZIPPO
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/trashbag))
var/obj/item/weapon/trashbag/S = W
if (S.mode == 1)
for (var/obj/item/weapon/cigpacket/CP in locate(src.x,src.y,src.z))
if (S.contents.len < S.capacity)
S.contents += CP;
else
user << "\blue The bag is full."
break
user << "\blue You pick up all trash."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The bag is full."
S.update_icon()
return
/////////
//ZIPPO//

View File

@@ -22,31 +22,33 @@
/obj/item/weapon/dnainjector/proc/inject(mob/M as mob)
M.radiation += rand(20,50)
if (dnatype == "ui")
if (!block) //isolated block?
if (ue) //unique enzymes? yes
M.dna.uni_identity = dna
updateappearance(M, M.dna.uni_identity)
M.real_name = ue
M.name = ue
uses--
else //unique enzymes? no
M.dna.uni_identity = dna
if (!(M.mutations & HUSK)) // prevents husks from having their DNA changed
if (dnatype == "ui")
if (!block) //isolated block?
if (ue) //unique enzymes? yes
M.dna.uni_identity = dna
updateappearance(M, M.dna.uni_identity)
M.real_name = ue
M.name = ue
uses--
else //unique enzymes? no
M.dna.uni_identity = dna
updateappearance(M, M.dna.uni_identity)
uses--
else
M.dna.uni_identity = setblock(M.dna.uni_identity,block,dna,3)
updateappearance(M, M.dna.uni_identity)
uses--
else
M.dna.uni_identity = setblock(M.dna.uni_identity,block,dna,3)
updateappearance(M, M.dna.uni_identity)
uses--
if (dnatype == "se")
if (!block) //isolated block?
M.dna.struc_enzymes = dna
domutcheck(M, null)
uses--
else
M.dna.struc_enzymes = setblock(M.dna.struc_enzymes,block,dna,3)
domutcheck(M, null,1)
uses--
if (dnatype == "se")
if (!block) //isolated block?
M.dna.struc_enzymes = dna
domutcheck(M, null)
uses--
else
M.dna.struc_enzymes = setblock(M.dna.struc_enzymes,block,dna,3)
domutcheck(M, null,1)
uses--
spawn(0)//this prevents the collapse of space-time continuum
del(src)

View File

@@ -178,6 +178,21 @@ MOP
reagents = R
R.my_atom = src
obj/item/weapon/mop/proc/clean(turf/simulated/A as turf)
src.reagents.reaction(A,1,10)
A.clean_blood()
for(var/obj/effect/rune/R in A)
del(R)
for(var/obj/effect/decal/cleanable/R in A)
del(R)
for(var/obj/effect/overlay/R in A)
del(R)
/obj/effect/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/mop))
return
..()
/obj/item/weapon/mop/afterattack(atom/A, mob/user as mob)
if (src.reagents.total_volume < 1 || mopcount >= 5)
user << "\blue Your mop is dry!"
@@ -185,25 +200,17 @@ MOP
if (istype(A, /turf/simulated))
for(var/mob/O in viewers(user, null))
O.show_message(text("\red <B>[] begins to clean []</B>", user, A), 1)
O.show_message("\red <B>[user] begins to clean \the [A]</B>", 1)
sleep(40)
clean(A)
user << "\blue You have finished mopping!"
src.reagents.reaction(A,1,10)
A.clean_blood()
for(var/obj/effect/rune/R in A)
del(R)
for(var/obj/effect/decal/cleanable/crayon/R in A)
del(R)
mopcount++
else if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/decal/cleanable/xenoblood) || istype(A, /obj/effect/rune) || istype(A,/obj/effect/decal/cleanable/crayon) || istype(A,/obj/effect/decal/cleanable/vomit) )
else if (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune))
for(var/mob/O in viewers(user, null))
O.show_message(text("\red <B>[user] begins to clean [A]</B>"), 1)
sleep(20)
if(A)
user << "\blue You have finished mopping!"
var/turf/U = A.loc
src.reagents.reaction(U)
if(A) del(A)
O.show_message("\red <B>[user] begins to clean \the [get_turf(A)]</B>", 1)
sleep(40)
clean(get_turf(A))
user << "\blue You have finished mopping!"
mopcount++
if(mopcount >= 5) //Okay this stuff is an ugly hack and i feel bad about it.

View File

@@ -253,7 +253,7 @@ CIRCULAR SAW
if(!istype(M))
return ..()
if(M.mutations & HUSK) return ..()
//if(M.mutations & HUSK) return ..()
if((user.mutations & CLUMSY) && prob(50))
M = user

View File

@@ -132,6 +132,6 @@
"/obj/item/weapon/wrapping_paper",
"/obj/item/weapon/wrapping_paper")
cost = 20
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "New Year Celebration crate"
*/

View File

@@ -3,6 +3,7 @@
desc = "Talk through this."
icon_state = "intercom"
anchored = 1
w_class = 4.0
var/number = 0
var/anyai = 1
var/mob/living/silicon/ai/ai = list()

View File

@@ -1,48 +0,0 @@
/obj/item/device/Nradio
icon = 'radio.dmi'
name = "station bounced radio"
suffix = "\[3\]"
icon_state = "walkietalkie"
item_state = "walkietalkie"
flags = 450//FFFF what does this even mean likely conduct+onbelt+someothershit
throw_speed = 2
throw_range = 9
w_class = 2
g_amt = 25
m_amt = 75
var
//General things
frequency = 1459 //Default freq
broadcasting = 0 //Mike
listening = 1 //Speaker
secured = 0 //Can you see our wires
freerange = 0 // 0 - Sanitize frequencies, 1 - Full range
datum/radio_frequency/radio_connection = null
list/datum/radio_frequency/secure_radio_connections = new
//Internal things
obj/item/weapon/syndicate_uplink/uplink = null //If we have an uplink one of our freqs will activate it
wires = WIRE_RECEIVE | WIRE_TRANSMIT //Active wires
list/channels = list() //see communications.dm for full list. First channes is a "default" for :h
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
last_transmission //What is this
obj/item/device/radio/patch_link = null //What is this
var/const
WIRE_TRANSMIT = 1 //sends a signal, like to set off a bomb or electrocute someone, or talk
WIRE_RECEIVE = 2 //we can hear things
TRANSMISSION_DELAY = 5 // only 2/second/radio antispam protection
FREQ_LISTENING = 1
proc
set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)

View File

@@ -17,7 +17,7 @@
freerange = 0 // 0 - Sanitize frequencies, 1 - Full range
list/channels = list() //see communications.dm for full list. First channes is a "default" for :h
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
flags = 450
flags = 450 // hello i'm a fucking idiot why is this 450?? CODE GODS PLEASE EXPLAIN~
throw_speed = 2
throw_range = 9
w_class = 2

View File

@@ -1,164 +0,0 @@
/obj/item/device/radio/signaler
name = "Remote Signaling Device"
desc = "Used to remotely activate devices."
icon = 'new_assemblies.dmi'
icon_state = "signaller"
item_state = "signaler"
var/code = 30
w_class = 1
frequency = 1457
var/delay = 0
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isscrewdriver(W))
b_stat = !b_stat
if(b_stat)
user.show_message("\blue The [src.name] can now be attached!")
else
user.show_message("\blue The [src.name] is ready!")
return
else
..()
return
/obj/item/device/radio/signaler/attack_self(mob/user as mob, flag1)
user.machine = src
interact(user,flag1)
/obj/item/device/radio/signaler/interact(mob/user as mob, flag1)
var/t1
if ((src.b_stat && !( flag1 )))
t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? text("<A href='?src=\ref[];wires=4'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=4'>Mend Wire</A>", src)), (src.wires & 2 ? text("<A href='?src=\ref[];wires=2'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=2'>Mend Wire</A>", src)), (src.wires & 1 ? text("<A href='?src=\ref[];wires=1'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=1'>Mend Wire</A>", src)))
else
t1 = "-------"
var/dat = {"
<TT>
Speaker: [src.listening ? "<A href='byond://?src=\ref[src];listen=0'>Engaged</A>" : "<A href='byond://?src=\ref[src];listen=1'>Disengaged</A>"]<BR>
<A href='byond://?src=\ref[src];send=1'>Send Signal</A><BR>
<B>Frequency/Code</B> for signaler:<BR>
Frequency:
<A href='byond://?src=\ref[src];freq=-10'>-</A>
<A href='byond://?src=\ref[src];freq=-2'>-</A>
[format_frequency(src.frequency)]
<A href='byond://?src=\ref[src];freq=2'>+</A>
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
Code:
<A href='byond://?src=\ref[src];code=-5'>-</A>
<A href='byond://?src=\ref[src];code=-1'>-</A>
[src.code]
<A href='byond://?src=\ref[src];code=1'>+</A>
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
[t1]
</TT>"}
user << browse(dat, "window=radio")
onclose(user, "radio")
return
/obj/item/device/radio/signaler/hear_talk()
return
/obj/item/device/radio/signaler/send_hear()
return
/obj/item/device/radio/signaler/receive_signal(datum/signal/signal)
if(!signal || (signal.encryption != code)) return 0
if (!( src.wires & 2 ))
return
for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
return
/obj/item/device/radio/signaler/proc/send_signal(message="ACTIVATE")
if(last_transmission && world.time < (last_transmission + TRANSMISSION_DELAY))
return
last_transmission = world.time
if (!( src.wires & 4 ))
return
if((usr)&&(ismob(usr)))
var/time = time2text(world.realtime,"hh:mm:ss")
lastsignalers.Add("[time] <B>:</B> [usr.key] used [src] @ location ([src.loc.x],[src.loc.y],[src.loc.z]) <B>:</B> [format_frequency(frequency)]/[code]")
var/datum/signal/signal = new
signal.source = src
signal.encryption = code
signal.data["message"] = message
radio_connection.post_signal(src, signal)
return
/obj/item/device/radio/signaler/Topic(href, href_list)
//..()
if (usr.stat)
return
if (usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))
usr.machine = src
if (href_list["freq"])
..()
return
else
if (href_list["code"])
src.code += text2num(href_list["code"])
src.code = round(src.code)
src.code = min(100, src.code)
src.code = max(1, src.code)
else
if (href_list["send"])
spawn( 0 )
src.send_signal("ACTIVATE")
return
else
if (href_list["listen"])
src.listening = text2num(href_list["listen"])
else
if (href_list["wires"])
var/t1 = text2num(href_list["wires"])
if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
return
if ((!( src.b_stat ) && !( src.master )))
return
if (t1 & 1)
if (src.wires & 1)
src.wires &= 65534
else
src.wires |= 1
else
if (t1 & 2)
if (src.wires & 2)
src.wires &= 65533
else
src.wires |= 2
else
if (t1 & 4)
if (src.wires & 4)
src.wires &= 65531
else
src.wires |= 4
src.add_fingerprint(usr)
if (!src.master)
if (istype(src.loc, /mob))
attack_self(src.loc)
else
for(var/mob/M in viewers(1, src))
if (M.client)
src.attack_self(M)
else
if (istype(src.master.loc, /mob))
src.attack_self(src.master.loc)
else
for(var/mob/M in viewers(1, src.master))
if (M.client)
src.attack_self(M)
else
usr << browse(null, "window=radio")
return
return

View File

@@ -4,7 +4,7 @@
var/obj/screen/close/closer = null
var/icon_locking = "secureb"
var/icon_sparking = "securespark"
var/icon_open = "secure0"
var/icon_opened = "secure0"
var/locked = 1
var/code = ""
var/l_code = null
@@ -216,7 +216,7 @@
else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1))
src.locked = 0
src.overlays = null
overlays += image('storage.dmi', icon_open)
overlays += image('storage.dmi', icon_opened)
src.code = null
else
src.code = "ERROR"

View File

@@ -2,7 +2,7 @@
name = "secure safe"
icon = 'storage.dmi'
icon_state = "safe"
icon_open = "safe0"
icon_opened = "safe0"
icon_locking = "safeb"
icon_sparking = "safespark"
flags = FPRINT | TABLEPASS

View File

@@ -0,0 +1,251 @@
// TARGET STAKE
// TARGET
// Basically they are for the firing range
/obj/structure/target_stake
name = "target stake"
desc = "A thin platform with negatively-magnetized wheels."
icon = 'objects.dmi'
icon_state = "target_stake"
density = 1
flags = CONDUCT
var/obj/item/target/pinned_target // the current pinned target
Move()
..()
// Move the pinned target along with the stake
if(pinned_target in view(3, src))
pinned_target.loc = loc
else // Sanity check: if the pinned target can't be found in immediate view
pinned_target = null
density = 1
attackby(obj/item/W as obj, mob/user as mob)
// Putting objects on the stake. Most importantly, targets
if(pinned_target)
return // get rid of that pinned target first!
if(istype(W, /obj/item/target))
density = 0
W.density = 1
user.drop_item(src)
W.loc = loc
W.layer = 3.1
pinned_target = W
user << "You slide the target into the stake."
user.drop_item(src)
W.loc = loc
return
attack_hand(mob/user as mob)
// taking pinned targets off!
if(pinned_target)
density = 1
pinned_target.density = 0
pinned_target.layer = OBJ_LAYER
pinned_target.loc = user.loc
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hand(pinned_target)
user << "You take the target out of the stake."
else
pinned_target.loc = get_turf_loc(user)
user << "You take the target out of the stake."
pinned_target = null
// Targets, the things that actually get shot!
/obj/item/target
name = "shooting target"
desc = "A shooting target."
icon = 'objects.dmi'
icon_state = "target_h"
density = 0
var/hp = 1800
var/icon/virtualIcon
var/list/bulletholes = list()
Del()
// if a target is deleted and associated with a stake, force stake to forget
for(var/obj/structure/target_stake/T in view(3,src))
if(T.pinned_target == src)
T.pinned_target = null
T.density = 1
break
..() // delete target
Move()
..()
// After target moves, check for nearby stakes. If associated, move to target
for(var/obj/structure/target_stake/M in view(3,src))
if(M.density == 0 && M.pinned_target == src)
M.loc = loc
// This may seem a little counter-intuitive but I assure you that's for a purpose.
// Stakes are the ones that carry targets, yes, but in the stake code we set
// a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing
// the stake now, we have to push the target.
attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/weldingtool))
if(W:welding == 1)
overlays = null
usr << "You slice off [src]'s uneven chunks of aluminum and scorch marks."
return
attack_hand(mob/user as mob)
// taking pinned targets off!
var/obj/structure/target_stake/stake
for(var/obj/structure/target_stake/T in view(3,src))
if(T.pinned_target == src)
stake = T
break
if(stake)
if(stake.pinned_target)
stake.density = 1
density = 0
layer = OBJ_LAYER
loc = user.loc
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hand(src)
user << "You take the target out of the stake."
else
src.loc = get_turf_loc(user)
user << "You take the target out of the stake."
stake.pinned_target = null
return
else
..()
syndicate
icon_state = "target_s"
desc = "A shooting target that looks like a syndicate scum."
hp = 2600 // i guess syndie targets are sturdier?
alien
icon_state = "target_q"
desc = "A shooting target that looks like a xenomorphic alien."
hp = 2350 // alium onest too kinda
/obj/item/target/bullet_act(var/obj/item/projectile/Proj)
var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!"
var/p_y = Proj.p_y + pick(0,0,0,0,0,-1,1)
var/decaltype = 1 // 1 - scorch, 2 - bullet
if(istype(/obj/item/projectile/bullet, Proj))
decaltype = 2
virtualIcon = new(icon, icon_state)
if( virtualIcon.GetPixel(p_x, p_y) ) // if the located pixel isn't blank (null)
hp -= Proj.damage
if(hp <= 0)
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
O << "\red [src] breaks into tiny pieces and collapses!"
del(src)
// Create a temporary object to represent the damage
var/obj/bmark = new
bmark.pixel_x = p_x
bmark.pixel_y = p_y
bmark.icon = 'effects.dmi'
bmark.layer = 3.5
bmark.icon_state = "scorch"
if(decaltype == 1)
// Energy weapons are hot. they scorch!
// offset correction
bmark.pixel_x--
bmark.pixel_y--
if(Proj.damage >= 20)
bmark.icon_state = "scorch"
bmark.dir = pick(NORTH,SOUTH,EAST,WEST) // random scorch design
else
bmark.icon_state = "light_scorch"
else
// Bullets are hard. They make dents!
bmark.icon_state = "dent"
if(Proj.damage >= 10 && bulletholes.len <= 35) // maximum of 35 bullet holes
if(decaltype == 2) // bullet
if(prob(Proj.damage+30)) // bullets make holes more commonly!
new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole
else // Lasers!
if(prob(Proj.damage-10)) // lasers make holes less commonly
new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole
// draw bullet holes
for(var/datum/bullethole/B in bulletholes)
virtualIcon.DrawBox(null, B.b1x1, B.b1y, B.b1x2, B.b1y) // horizontal line, left to right
virtualIcon.DrawBox(null, B.b2x, B.b2y1, B.b2x, B.b2y2) // vertical line, top to bottom
overlays += bmark // add the decal
icon = virtualIcon // apply bulletholes over decals
return
return -1 // the bullet/projectile goes through the target! Ie, you missed
// Small memory holder entity for transparent bullet holes
/datum/bullethole
// First box
var/b1x1 = 0
var/b1x2 = 0
var/b1y = 0
// Second box
var/b2x = 0
var/b2y1 = 0
var/b2y2 = 0
New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0)
if(!Target) return
// Randomize the first box
b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4)
b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4)
b1y = pixel_y
if(prob(35))
b1y += rand(-4,4)
// Randomize the second box
b2x = pixel_x
if(prob(35))
b2x += rand(-4,4)
b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
Target.bulletholes.Add(src)

View File

@@ -3,7 +3,7 @@
// if (src.loc != usr)
// return
// if ((istype(usr, /mob/living/carbon/human) || (ticker && ticker.mode.name == "monkey")))
if (ishuman(usr) || ismonkey(usr)) //so monkies can take off their backpacks -- Urist
if (ishuman(usr) || ismonkey(usr)) //so monkeys can take off their backpacks -- Urist
var/mob/M = usr
if (!( istype(over_object, /obj/screen) ))
return ..()
@@ -38,6 +38,8 @@
desc = "A backpack that opens into a localized pocket of Blue Space."
origin_tech = "bluespace=4"
icon_state = "holdingpack"
max_w_class = 4
max_combined_w_class = 28
New()
..()
@@ -50,7 +52,8 @@
if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
user << "\red The Bluespace interfaces of the two devices catastrophically malfunction!"
del(W)
new /obj/machinery/singularity (get_turf(src))
var/obj/machinery/singularity/singulo = new /obj/machinery/singularity (get_turf(src))
singulo.energy = 300 //should make it a bit bigger~
message_admins("[key_name_admin(user)] detonated a bag of holding")
log_game("[key_name(user)] detonated a bag of holding")
del(src)

View File

@@ -57,7 +57,7 @@
playsound(src.loc, "punch", 25, 1, -1)
else
if(ishuman(M) && !istype(M:head, /obj/item/clothing/head/helmet))
M.brainloss += 10
M.adjustBrainLoss(10)
M << "\red You feel dumber."
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] beats [] over the head with []!</B>", user, M, src), 1)

View File

@@ -1,150 +1,148 @@
/obj/structure/crate
/obj/structure/closet/crate
desc = "A crate."
name = "Crate"
icon = 'storage.dmi'
icon_state = "crate"
density = 1
var/openicon = "crateopen"
var/closedicon = "crate"
icon_opened = "crateopen"
icon_closed = "crate"
req_access = null
var/opened = 0
var/locked = 0
opened = 0
flags = FPRINT
m_amt = 7500
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
// mouse_drag_pointer = MOUSE_ACTIVE_POINTER //???
/obj/structure/crate/internals
/obj/structure/closet/crate/internals
desc = "A internals crate."
name = "Internals crate"
icon = 'storage.dmi'
icon_state = "o2crate"
density = 1
openicon = "o2crateopen"
closedicon = "o2crate"
icon_opened = "o2crateopen"
icon_closed = "o2crate"
/obj/structure/crate/trashcart
/obj/structure/closet/crate/trashcart
desc = "A heavy, metal trashcart with wheels."
name = "Trash Cart"
icon = 'storage.dmi'
icon_state = "trashcart"
density = 1
openicon = "trashcartopen"
closedicon = "trashcart"
icon_opened = "trashcartopen"
icon_closed = "trashcart"
/obj/structure/crate/hat
/obj/structure/closet/crate/hat
desc = "A crate filled with Valuable Collector's Hats!."
name = "Hat Crate"
icon = 'storage.dmi'
icon_state = "crate"
density = 1
openicon = "crateopen"
closedicon = "crate"
icon_opened = "crateopen"
icon_closed = "crate"
/obj/structure/crate/medical
/obj/structure/closet/crate/medical
desc = "A medical crate."
name = "Medical crate"
icon = 'storage.dmi'
icon_state = "medicalcrate"
density = 1
openicon = "medicalcrateopen"
closedicon = "medicalcrate"
icon_opened = "medicalcrateopen"
icon_closed = "medicalcrate"
/obj/structure/crate/rcd
/obj/structure/closet/crate/rcd
desc = "A crate for the storage of the RCD."
name = "RCD crate"
icon = 'storage.dmi'
icon_state = "crate"
density = 1
openicon = "crateopen"
closedicon = "crate"
icon_opened = "crateopen"
icon_closed = "crate"
/obj/structure/crate/freezer
/obj/structure/closet/crate/freezer
desc = "A freezer."
name = "Freezer"
icon = 'storage.dmi'
icon_state = "freezer"
density = 1
openicon = "freezeropen"
closedicon = "freezer"
icon_opened = "freezeropen"
icon_closed = "freezer"
/obj/structure/crate/bin
/obj/structure/closet/crate/bin
desc = "A large bin."
name = "Large bin"
icon = 'storage.dmi'
icon_state = "largebin"
density = 1
openicon = "largebinopen"
closedicon = "largebin"
icon_opened = "largebinopen"
icon_closed = "largebin"
/obj/structure/crate/radiation
/obj/structure/closet/crate/radiation
desc = "A crate with a radiation sign on it."
name = "Radioactive gear crate"
icon = 'storage.dmi'
icon_state = "radiation"
density = 1
openicon = "radiationopen"
closedicon = "radiation"
icon_opened = "radiationopen"
icon_closed = "radiation"
/obj/item/clothing/suit/radiation
/obj/structure/crate/secure/weapon
/obj/structure/closet/crate/secure/weapon
desc = "A secure weapons crate."
name = "Weapons crate"
icon = 'storage.dmi'
icon_state = "weaponcrate"
density = 1
openicon = "weaponcrateopen"
closedicon = "weaponcrate"
icon_opened = "weaponcrateopen"
icon_closed = "weaponcrate"
/obj/structure/crate/secure/plasma
/obj/structure/closet/crate/secure/plasma
desc = "A secure plasma crate."
name = "Plasma crate"
icon = 'storage.dmi'
icon_state = "plasmacrate"
density = 1
openicon = "plasmacrateopen"
closedicon = "plasmacrate"
icon_opened = "plasmacrateopen"
icon_closed = "plasmacrate"
/obj/structure/crate/secure/gear
/obj/structure/closet/crate/secure/gear
desc = "A secure gear crate."
name = "Gear crate"
icon = 'storage.dmi'
icon_state = "secgearcrate"
density = 1
openicon = "secgearcrateopen"
closedicon = "secgearcrate"
icon_opened = "secgearcrateopen"
icon_closed = "secgearcrate"
/obj/structure/crate/secure/bin
/obj/structure/closet/crate/secure/bin
desc = "A secure bin."
name = "Secure bin"
icon_state = "largebins"
openicon = "largebinsopen"
closedicon = "largebins"
icon_opened = "largebinsopen"
icon_closed = "largebins"
redlight = "largebinr"
greenlight = "largebing"
sparks = "largebinsparks"
emag = "largebinemag"
/obj/structure/crate/secure
/obj/structure/closet/crate/secure
desc = "A secure crate."
name = "Secure crate"
icon_state = "securecrate"
openicon = "securecrateopen"
closedicon = "securecrate"
icon_opened = "securecrateopen"
icon_closed = "securecrate"
var/redlight = "securecrater"
var/greenlight = "securecrateg"
var/sparks = "securecratesparks"
var/emag = "securecrateemag"
var/broken = 0
locked = 1
var/locked = 1
/obj/structure/crate/hydroponics
/obj/structure/closet/crate/hydroponics
name = "Hydroponics crate"
desc = "All you need to destroy those pesky weeds and pests."
icon = 'storage.dmi'
icon_state = "hydrocrate"
openicon = "hydrocrateopen"
closedicon = "hydrocrate"
icon_opened = "hydrocrateopen"
icon_closed = "hydrocrate"
density = 1
/* New() // This stuff shouldn't be here, it should be in /datum/supply_packs/hydroponics
..()
@@ -158,14 +156,14 @@
new /obj/item/weapon/pestspray(src)
new /obj/item/weapon/pestspray(src) */
/obj/structure/crate/hydroponics/prespawned
/obj/structure/closet/crate/hydroponics/prespawned
//This exists so the prespawned hydro crates spawn with their contents.
/* name = "Hydroponics crate"
desc = "All you need to destroy those pesky weeds and pests."
icon = 'storage.dmi'
icon_state = "hydrocrate"
openicon = "hydrocrateopen"
closedicon = "hydrocrate"
icon_opened = "hydrocrateopen"
icon_closed = "hydrocrate"
density = 1*/
New()
..()
@@ -179,7 +177,7 @@
// new /obj/item/weapon/pestspray(src)
// new /obj/item/weapon/pestspray(src)
/obj/structure/crate/New()
/obj/structure/closet/crate/New()
..()
spawn(1)
if(!opened) // if closed, any item at the crate's loc is put in the contents
@@ -187,7 +185,7 @@
if(I.density || I.anchored || I == src) continue
I.loc = src
/obj/structure/crate/secure/New()
/obj/structure/closet/crate/secure/New()
..()
if(locked)
overlays = null
@@ -196,14 +194,14 @@
overlays = null
overlays += greenlight
/obj/structure/crate/rcd/New()
/obj/structure/closet/crate/rcd/New()
..()
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd(src)
/obj/structure/crate/radiation/New()
/obj/structure/closet/crate/radiation/New()
..()
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
@@ -214,7 +212,7 @@
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
/obj/structure/crate/proc/open()
/obj/structure/closet/crate/open()
playsound(src.loc, 'click.ogg', 15, 1, -3)
for(var/obj/O in src)
@@ -222,34 +220,37 @@
for(var/mob/M in src)
M.loc = get_turf(src)
icon_state = openicon
icon_state = icon_opened
src.opened = 1
/obj/structure/crate/proc/close()
/obj/structure/closet/crate/close()
playsound(src.loc, 'click.ogg', 15, 1, -3)
for(var/obj/O in get_turf(src))
if(O.density || O.anchored || O == src) continue
O.loc = src
icon_state = closedicon
icon_state = icon_closed
src.opened = 0
/obj/structure/crate/attack_hand(mob/user as mob)
if(!locked)
if(opened) close()
else open()
else
user << "\red It's locked."
/obj/structure/closet/crate/attack_hand(mob/user as mob)
if(opened) close()
else open()
return
/obj/structure/crate/secure/attack_hand(mob/user as mob)
if(locked && allowed(user) && !broken)
user << "\blue You unlock the [src]."
src.locked = 0
overlays = null
overlays += greenlight
return ..()
/obj/structure/closet/crate/secure/attack_hand(mob/user as mob)
if(locked && !broken)
if (allowed(user))
user << "\blue You unlock the [src]."
src.locked = 0
overlays = null
overlays += greenlight
return
else
user << "\red It's locked."
return
else
..()
/obj/structure/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/card) && src.allowed(user) && !locked && !opened && !broken)
user << "\red You lock the [src]."
src.locked = 1
@@ -269,10 +270,10 @@
return ..()
/obj/structure/crate/attack_paw(mob/user as mob)
/obj/structure/closet/crate/attack_paw(mob/user as mob)
return attack_hand(user)
/obj/structure/crate/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/packageWrap))
var/obj/item/weapon/packageWrap/O = W
if (O.amount > 3)
@@ -288,7 +289,7 @@
W.loc = src.loc
else return attack_hand(user)
/obj/structure/crate/secure/emp_act(severity)
/obj/structure/closet/crate/secure/emp_act(severity)
for(var/obj/O in src)
O.emp_act(severity)
if(!broken && !opened && prob(50/severity))
@@ -312,7 +313,7 @@
..()
/obj/structure/crate/ex_act(severity)
/obj/structure/closet/crate/ex_act(severity)
switch(severity)
if(1.0)
for(var/obj/O in src.contents)

View File

@@ -150,9 +150,10 @@
user << "\red The [src] is full, make some space."
return
if ( W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage)))
user << "\red The [src] cannot hold [W] as it's a storage item of the same size."
return //To prevent the stacking of the same sized items.
if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage)))
if(!istype(src, /obj/item/weapon/storage/backpack/holding)) //bohs should be able to hold backpacks again. The override for putting a boh in a boh is in backpack.dm.
user << "\red The [src] cannot hold [W] as it's a storage item of the same size."
return //To prevent the stacking of the same sized items.
user.u_equip(W)
W.loc = src

View File

@@ -144,7 +144,7 @@
armed = 0
/*
else if (ismouse(target))
target.bruteloss = 100
target.adjustBruteLoss(100)
*/
/obj/item/weapon/mousetrap/attack_self(mob/user as mob)
@@ -153,7 +153,7 @@
user << "\blue You arm the mousetrap."
else
icon_state = "mousetrap"
if((user.brainloss >= 60 || user.mutations & CLUMSY) && prob(50))
if((user.getBrainLoss() >= 60 || user.mutations & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
@@ -170,7 +170,7 @@
/obj/item/weapon/mousetrap/attack_hand(mob/user as mob)
if(armed)
if((user.brainloss >= 60 || user.mutations & CLUMSY) && prob(50))
if((user.getBrainLoss() >= 60 || user.mutations & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"

View File

@@ -75,20 +75,32 @@ client/verb/Toggle_Soundscape()
if (!A:client) return
//if (A:ear_deaf) return
if (A && A:client && !A:client:ambience_playing && !A:client:no_ambi) // Constant background noises
if (A && A:client && !A:client:ambience_playing && !A:client:no_ambi) // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! - LastyScratch
A:client:ambience_playing = 1
A << sound('shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2)
switch(src.name)
if ("Chapel") sound = pick('ambicha1.ogg','ambicha2.ogg','ambicha3.ogg','ambicha4.ogg')
if ("Morgue") sound = pick('ambimo1.ogg','ambimo2.ogg')
if ("Space") sound = pick('ambispace.ogg')
if ("Morgue") sound = pick('ambimo1.ogg','ambimo2.ogg','ambistat.ogg')
if ("Space") sound = pick('ambispace.ogg','ambistat.ogg',)
if ("Engine Control") sound = pick('ambisin1.ogg','ambisin2.ogg','ambisin3.ogg','ambisin4.ogg')
if ("Atmospherics") sound = pick('ambiatm1.ogg')
if ("Medbay") sound = pick('ambistat.ogg')
if ("Bridge") sound = pick('ambistat.ogg')
if ("Arrival Shuttle Hallway") sound = pick('ambistat.ogg','ambiruntime.ogg')
if ("AI Sat Ext") sound = pick('ambiruntime.ogg','ambimalf.ogg')
if ("AI Satellite") sound = pick('ambimalf.ogg')
if ("AI Satellite Teleporter Room") sound = pick('ambiruntime.ogg','ambimalf.ogg')
if ("Central Primary Hallway") sound = pick('ambiruntime.ogg')
if ("Aft Primary Hallway") sound = pick('ambiruntime.ogg')
if ("AI Upload Foyer") sound = pick('ambimalf.ogg', 'null.ogg', 'null.ogg')
if ("AI Upload Chamber") sound = pick('ambimalf.ogg','null.ogg','null.ogg')
if ("Mine")
sound = pick('ambimine.ogg')
musVolume = 25
else sound = pick('ambigen1.ogg','ambigen3.ogg','ambigen4.ogg','ambigen5.ogg','ambigen6.ogg','ambigen7.ogg','ambigen8.ogg','ambigen9.ogg','ambigen10.ogg','ambigen11.ogg','ambigen12.ogg','ambigen14.ogg')
else
sound = pick('ambigen1.ogg','ambigen3.ogg','ambigen4.ogg','ambigen5.ogg','ambigen6.ogg','ambigen7.ogg','ambigen8.ogg','ambigen9.ogg','ambigen10.ogg','ambigen11.ogg','ambigen12.ogg','ambigen14.ogg')
if (prob(35))
if(A && A:client && !A:client:played)

View File

@@ -146,7 +146,7 @@ var/ordernum=0
var/shuttleat = supply_shuttle_at_station ? SUPPLY_STATION_AREATYPE : SUPPLY_DOCK_AREATYPE
for(var/turf/T in get_area_turfs(shuttleat) )
var/crate = locate(/obj/structure/crate) in T
var/crate = locate(/obj/structure/closet/crate) in T
if (crate)
del(crate)
supply_shuttle_points += SUPPLY_POINTSPERCRATE
@@ -169,7 +169,7 @@ var/ordernum=0
var/pickedloc = 0
var/found = 0
for(var/C in markers)
if (locate(/obj/structure/crate) in get_turf(C)) continue
if (locate(/obj/structure/closet/crate) in get_turf(C)) continue
found = 1
pickedloc = get_turf(C)
if (!found) pickedloc = get_turf(pick(markers))

View File

@@ -25,7 +25,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() - fireloss - getBruteLoss(), getOxyLoss())
oxyloss = max(175 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss())
updatehealth()
/mob/living/carbon/brain/verb/suicide()
@@ -48,7 +48,7 @@
if(confirm == "Yes")
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() - fireloss - getBruteLoss(), getOxyLoss())
oxyloss = max(175 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss())
updatehealth()
spawn(200)
suiciding = 0
@@ -74,7 +74,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() - fireloss - getBruteLoss(), getOxyLoss())
oxyloss = max(175 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss())
updatehealth()
/mob/living/silicon/ai/verb/suicide()
@@ -94,7 +94,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() - fireloss - getBruteLoss(), getOxyLoss())
oxyloss = max(175 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss())
updatehealth()
/mob/living/silicon/robot/verb/suicide()
@@ -114,7 +114,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() - fireloss - getBruteLoss(), getOxyLoss())
oxyloss = max(475 - getToxLoss() - getFireLoss() - getBruteLoss(), getOxyLoss())
updatehealth()
/mob/living/silicon/pai/verb/suicide()
@@ -149,7 +149,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 - fireloss - getBruteLoss(), getOxyLoss())
oxyloss = max(100 - getFireLoss() - getBruteLoss(), getOxyLoss())
updatehealth()

View File

@@ -74,7 +74,7 @@
world << "Result is change to \red [wintext]"
world.save_mode(winner)
if(ticker.current_state != GAME_STATE_PREGAME)
if(ticker && ticker.mode)
world <<"\red <B>World will reboot in 10 seconds</B>"
feedback_set_details("end_error","mode vote - [winner]")

View File

@@ -1969,7 +1969,7 @@
<A href='?src=\ref[src];secretsfun=sec_clothes'>Remove 'internal' clothing</A><BR>
<A href='?src=\ref[src];secretsfun=sec_all_clothes'>Remove ALL clothing</A><BR>
<A href='?src=\ref[src];secretsfun=toxic'>Toxic Air (WARNING: dangerous)</A><BR>
<A href='?src=\ref[src];secretsfun=monkey'>Turn all humans into monkies</A><BR>
<A href='?src=\ref[src];secretsfun=monkey'>Turn all humans into monkeys</A><BR>
<A href='?src=\ref[src];secretsfun=sec_classic1'>Remove firesuits, grilles, and pods</A><BR>
<A href='?src=\ref[src];secretsfun=power'>Make all areas powered</A><BR>
<A href='?src=\ref[src];secretsfun=unpower'>Make all areas unpowered</A><BR>

View File

@@ -132,6 +132,8 @@
verbs += /client/proc/kill_air
verbs += /client/proc/cmd_debug_make_powernets
verbs += /client/proc/enable_mapping_debug
verbs += /client/proc/everyone_random
verbs += /client/proc/only_one // Fateweaver suggested I do this - Doohl
if (holder.level >= 5)//Game Admin********************************************************************
verbs += /obj/admins/proc/view_txt_log
@@ -155,7 +157,6 @@
verbs += /client/proc/cmd_admin_drop_everything
verbs += /client/proc/make_sound
verbs += /client/proc/play_local_sound
verbs += /client/proc/only_one
verbs += /client/proc/send_space_ninja
verbs += /client/proc/restartcontroller //Can call via aproccall --I_hate_easy_things.jpg, Mport --Agouri
verbs += /client/proc/Blobize//I need to remember to move/remove this later

View File

@@ -813,3 +813,35 @@ Traitors and the like can also be revived with the previous role mostly intact.
for(var/t in M.attack_log)
usr << t
/client/proc/everyone_random()
set category = "Fun"
set name = "Make Everyone Random"
set desc = "Make everyone have a random appearance. You can only use this before rounds!"
if (ticker && ticker.mode)
usr << "Nope you can't do this, the game's already started. This only works before rounds!"
return
if(ticker.random_players)
ticker.random_players = 0
message_admins("Admin [key_name_admin(usr)] has disabled \"Everyone is Special\" mode.", 1)
usr << "Disabled."
return
var/notifyplayers = alert(src, "Do you want to notify the players?", "Options", "Yes", "No", "Cancel")
if(notifyplayers == "Cancel")
return
log_admin("Admin [key_name(src)] has forced the players to have random appearances.")
message_admins("Admin [key_name_admin(usr)] has forced the players to have random appearances.", 1)
if(notifyplayers == "Yes")
world << "\blue <b>Admin [usr.key] has forced the players to have completely random identities!"
usr << "<i>Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet</i>."
ticker.random_players = 1

View File

@@ -15,12 +15,20 @@
var
code = 30
frequency = 100
frequency = 1457
delay = 0
airlock_wire = null
datum/radio_frequency/radio_connection
proc
send_signal()
signal()
New()
..()
spawn(40)
set_frequency(frequency)
return
activate()
@@ -30,12 +38,10 @@
process_cooldown()
signal()
return 1
interact(mob/user as mob, flag1)
var/t1 = "-------"
// if ((src.b_stat && !( flag1 )))
// t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? text("<A href='?src=\ref[];wires=4'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=4'>Mend Wire</A>", src)), (src.wires & 2 ? text("<A href='?src=\ref[];wires=2'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=2'>Mend Wire</A>", src)), (src.wires & 1 ? text("<A href='?src=\ref[];wires=1'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=1'>Mend Wire</A>", src)))
@@ -49,7 +55,7 @@
Frequency:
<A href='byond://?src=\ref[src];freq=-10'>-</A>
<A href='byond://?src=\ref[src];freq=-2'>-</A>
[src.frequency]
[format_frequency(src.frequency)]
<A href='byond://?src=\ref[src];freq=2'>+</A>
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
@@ -75,10 +81,10 @@
return
if (href_list["freq"])
src.frequency += text2num(href_list["freq"])
src.frequency = round(src.frequency)
src.frequency = min(100, src.frequency)
src.frequency = max(1, src.frequency)
var/new_frequency = (frequency + text2num(href_list["freq"]))
if(new_frequency < 1200 || new_frequency > 1600)
new_frequency = sanitize_frequency(new_frequency)
set_frequency(new_frequency)
if(href_list["code"])
src.code += text2num(href_list["code"])
@@ -95,14 +101,22 @@
return
proc/signal()//will have to do for now
signal()
var/datum/signal/signal = new
signal.source = src
signal.encryption = code
signal.data["message"] = "ACTIVATE"
radio_connection.post_signal(src, signal)
return
/*
for(var/obj/item/device/assembly/signaler/S in world)
if(!S) continue
if(S == src) continue
if((S.frequency == src.frequency) && (S.code == src.code))
spawn(0)
if(S) S.pulse(0)
return 0
return 0*/
pulse(var/radio = 0)
@@ -112,3 +126,21 @@
else if(holder)
holder.process_activation(src, 1, 0)
return 1
receive_signal(datum/signal/signal)
if(!signal) return 0
if(signal.encryption != code) return 0
if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0
pulse(1)
for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
return
proc/set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
return

View File

@@ -49,7 +49,7 @@
process()
if(timing && (time >= 0))
if(timing && (time > 0))
time--
if(timing && time <= 0)
timing = 0

View File

@@ -351,7 +351,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:adjustToxLoss(3)
M:oxyloss += 3
M:adjustOxyLoss(3)
M:sleeping += 1
..()
return
@@ -812,6 +812,7 @@ datum
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(!..()) return
if(isrobot(M) || isAI(M)) return // Mutagen doesn't do anything to robutts!
src = null
if((method==TOUCH && prob(33)) || method==INGEST)
randmuti(M)
@@ -823,6 +824,7 @@ datum
updateappearance(M,M.dna.uni_identity)
return
on_mob_life(var/mob/living/M as mob)
if(isrobot(M) || isAI(M)) return // Mutagen doesn't do anything to robutts!
if(!M) M = holder.my_atom
M.radiation += 3
..()
@@ -1119,7 +1121,7 @@ datum
if(!M) M = holder.my_atom
if(prob(33))
M.take_organ_damage(1, 0)
M:oxyloss += 3
M:adjustOxyLoss(3)
if(prob(20)) M:emote("gasp")
..()
return
@@ -1165,7 +1167,7 @@ datum
if(M.stat == 2.0)
return //See above, down and around. --Agouri
if(!M) M = holder.my_atom
M:oxyloss = max(M:getOxyLoss()-2, 0)
M:adjustOxyLoss(-2)
if(holder.has_reagent("lexorin"))
holder.remove_reagent("lexorin", 2)
..()
@@ -1199,9 +1201,9 @@ datum
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
if(M:getOxyLoss() && prob(40)) M:oxyloss--
if(M:getOxyLoss() && prob(40)) M:adjustOxyLoss(-1)
if(M:getBruteLoss() && prob(40)) M:heal_organ_damage(1,0)
if(M:fireloss && prob(40)) M:heal_organ_damage(0,1)
if(M:getFireLoss() && prob(40)) M:heal_organ_damage(0,1)
if(M:getToxLoss() && prob(40)) M:adjustToxLoss(-1)
..()
return
@@ -1219,7 +1221,7 @@ datum
M:oxyloss = 0
M:radiation = 0
M:heal_organ_damage(5,5)
if(M:getToxLoss()) M:adjustToxLoss(-5)
M:adjustToxLoss(-5)
if(holder.has_reagent("toxin"))
holder.remove_reagent("toxin", 5)
if(holder.has_reagent("stoxin"))
@@ -1295,7 +1297,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:jitteriness = max(M:jitteriness-5,0)
if(prob(80)) M:brainloss++
if(prob(80)) M:adjustBrainLoss(1)
if(prob(50)) M:drowsyness = max(M:drowsyness, 3)
if(prob(10)) M:emote("drool")
..()
@@ -1326,7 +1328,7 @@ datum
return //See above, down and around. --Agouri
if(!M) M = holder.my_atom
M:radiation = max(M:radiation-7,0)
if(M:getToxLoss()) M:adjustToxLoss(-1)
M:adjustToxLoss(-1)
if(prob(15))
M.take_organ_damage(1, 0)
..()
@@ -1341,7 +1343,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:brainloss = max(M:brainloss-3 , 0)
M:adjustBrainLoss(-3)
..()
return
@@ -1400,10 +1402,10 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
if(M:cloneloss) M:cloneloss = max(0, M:cloneloss-1)
if(M:getOxyLoss()) M:oxyloss = max(0, M:getOxyLoss()-3)
M:adjustCloneLoss(-1)
M:adjustOxyLoss(-3)
M:heal_organ_damage(3,3)
if(M:getToxLoss()) M:adjustToxLoss(-3)
M:adjustToxLoss(-3)
..()
return
@@ -1417,10 +1419,10 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
if(M:cloneloss) M:cloneloss = max(0, M:cloneloss-3)
if(M:getOxyLoss()) M:oxyloss = max(0, M:getOxyLoss()-3)
M:adjustCloneLoss(-3)
M:adjustOxyLoss(-3)
M:heal_organ_damage(3,3)
if(M:getToxLoss()) M:adjustToxLoss(-3)
M:adjustToxLoss(-3)
..()
return
@@ -1457,7 +1459,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:oxyloss += 0.5
M:adjustOxyLoss(0.5)
M:adjustToxLoss(0.5)
M:weakened = max(M:weakened, 10)
M:silent = max(M:silent, 10)
@@ -1694,7 +1696,7 @@ datum
if(prob(40))
M.take_organ_damage(0, 1)
if(prob(80) && istype(M, /mob/living/carbon/metroid))
M.fireloss += rand(5,20)
M.adjustFireLoss(rand(5,20))
M << "\red You feel a terrible chill inside your body!"
..()
return
@@ -1928,7 +1930,7 @@ datum
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!M) M = holder.my_atom
if(M:getOxyLoss() && prob(30)) M:oxyloss--
if(M:getOxyLoss() && prob(30)) M:adjustOxyLoss(-1)
M:nutrition++
..()
return
@@ -1944,7 +1946,7 @@ datum
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!M) M = holder.my_atom
if(M:fireloss && prob(20)) M:heal_organ_damage(0,1)
if(M:getFireLoss() && prob(20)) M:heal_organ_damage(0,1)
M:nutrition++
..()
return
@@ -3030,9 +3032,9 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M:getOxyLoss() && prob(50)) M:oxyloss -= 2
if(M:getOxyLoss() && prob(50)) M:adjustOxyLoss(-2)
if(M:getBruteLoss() && prob(60)) M:heal_organ_damage(2,0)
if(M:fireloss && prob(50)) M:heal_organ_damage(0,2)
if(M:getFireLoss() && prob(50)) M:heal_organ_damage(0,2)
if(M:getToxLoss() && prob(50)) M:adjustToxLoss(-2)
if(M.dizziness !=0) M.dizziness = max(0,M.dizziness-15)
if(M.confused !=0) M.confused = max(0,M.confused - 5)
@@ -3603,7 +3605,7 @@ datum
if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature+5)
M.make_jittery(5)
if(M:bruteloss && prob(20)) M:heal_organ_damage(1,0)
if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0)
M:nutrition++
..()
return
@@ -3623,7 +3625,7 @@ datum
if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature+5)
M.make_jittery(5)
if(M:bruteloss && prob(20)) M:heal_organ_damage(1,0)
if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0)
M:nutrition++
..()
return
@@ -3676,8 +3678,8 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:oxyloss += 0.5
M:getToxLoss() += 0.5
M:adjustOxyLoss(0.5)
M:adjustOxyLoss(0.5)
M:weakened = max(M:weakened, 15)
M:silent = max(M:silent, 15)
if(!data) data = 1

View File

@@ -555,7 +555,7 @@
icon_state = null
w_class = 1
var/amount_per_transfer_from_this = 5
var/possible_transfer_amounts = list(5,10,25)
var/possible_transfer_amounts = list(5,10,15,25,30)
var/volume = 30
verb/set_APTFT() //set amount_per_transfer_from_this
@@ -595,7 +595,7 @@
icon_state = "null"
item_state = "null"
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,25)
possible_transfer_amounts = list(5,10,15,25,30,50)
volume = 50
flags = FPRINT | TABLEPASS | OPENCONTAINER
@@ -604,7 +604,7 @@
/obj/machinery/chem_dispenser/,
/obj/machinery/reagentgrinder,
/obj/structure/table,
/obj/structure/secure_closet,
/obj/structure/closet/secure_closet,
/obj/structure/closet,
/obj/machinery/sink,
/obj/item/weapon/storage,
@@ -1339,27 +1339,6 @@
if (gulp_size < 5) gulp_size = 5
else gulp_size = max(round(reagents.total_volume / 5), 5)
attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/trashbag))
var/obj/item/weapon/trashbag/S = W
if (S.mode == 1)
for (var/obj/item/weapon/reagent_containers/food/drinks/D in locate(src.x,src.y,src.z))
if (S.contents.len < S.capacity)
S.contents += D;
else
user << "\blue The bag is full."
break
user << "\blue You pick up all trash."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The bag is full."
S.update_icon()
return
attack_self(mob/user as mob)
return
@@ -1699,7 +1678,7 @@
item_state = "beaker"
volume = 100
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,30,50)
possible_transfer_amounts = list(5,10,15,25,30,50,100)
flags = FPRINT | TABLEPASS | OPENCONTAINER
@@ -2625,6 +2604,14 @@
..()
reagents.add_reagent("dexalin", 30)
/obj/item/weapon/reagent_containers/pill/bicardine
name = "Bicardine pill"
desc = "Used to treat physical injuries."
icon_state = "pill18"
New()
..()
reagents.add_reagent("bicardine", 30)
//Dispensers
/obj/structure/reagent_dispensers/watertank
name = "watertank"

View File

@@ -14,8 +14,8 @@
vision_flags = SEE_TURFS
/obj/item/clothing/glasses/science
name = "Protective Goggles"
desc = "Protects your eyes against harmful chemicals."
name = "Science Goggles"
desc = "nothing"
icon_state = "purple"
item_state = "glasses"

View File

@@ -162,7 +162,7 @@
var/datum/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"))
else
target:bruteloss += damage
target:adjustBruteLoss(damage)
if(attack_sound)
playsound(loc, attack_sound, 50, 1, -1)

View File

@@ -50,8 +50,8 @@
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/candy_corn
name = "candy corm" //Not a typo
desc = "It's a handful of candy corm. Can be stored in a detective's hat."
name = "candy corn"
desc = "It's a handful of candy corn. Can be stored in a detective's hat."
icon_state = "candy_corn"
New()
..()
@@ -105,6 +105,57 @@
src.name = "frosted donut"
reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/chaosdonut
name = "Chaos Donut"
desc = "Like life, it never quite tastes the same."
icon_state = "donut1"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("sprinkles", 1)
bitesize = 10
var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10)
switch(chaosselect)
if(1)
reagents.add_reagent("nutriment", 3)
if(2)
reagents.add_reagent("capsaicin", 3)
if(3)
reagents.add_reagent("frostoil", 3)
if(4)
reagents.add_reagent("sprinkles", 3)
if(5)
reagents.add_reagent("plasma", 3)
if(6)
reagents.add_reagent("coco", 3)
if(7)
reagents.add_reagent("metroid", 3)
if(8)
reagents.add_reagent("banana", 3)
if(9)
reagents.add_reagent("berryjuice", 3)
if(10)
reagents.add_reagent("tricordrazine", 3)
if(prob(30))
src.icon_state = "donut2"
src.name = "Frosted Chaos Donut"
reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/jellydonut
name = "Jelly Donut"
desc = "You jelly?"
icon_state = "jdonut1"
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sprinkles", 1)
reagents.add_reagent("berryjuice", 5)
bitesize = 5
if(prob(30))
src.icon_state = "jdonut2"
src.name = "Frosted Jelly Donut"
reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/egg
name = "egg"
desc = "An egg!"
@@ -119,6 +170,25 @@
src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.")
del(src)
/obj/item/weapon/reagent_containers/food/snacks/friedegg
name = "Fried egg"
desc = "A fried egg, with a touch of salt and pepper."
icon_state = "friedegg"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("sodiumchloride", 1)
reagents.add_reagent("blackpepper", 1)
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/boiledegg
name = "Boiled egg"
desc = "A hard boiled egg."
icon_state = "egg"
New()
..()
reagents.add_reagent("nutriment", 2)
/obj/item/weapon/reagent_containers/food/snacks/flour
name = "flour"
desc = "Some flour"
@@ -428,6 +498,12 @@
reagents.add_reagent("banana",5)
bitesize = 3
throw_impact(atom/hit_atom)
..()
new/obj/effect/decal/cleanable/pie_smudge(src.loc)
src.visible_message("\red [src.name] splats.","\red You hear a splat.")
del(src)
/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis
name = "Berry Clafoutis"
desc = "No black birds, this is a good sign."
@@ -459,21 +535,6 @@
reagents.add_reagent("nutriment", 6)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/jellydonut
name = "Jelly Donut"
desc = "Oh so gooey on the inside."
icon_state = "jdonut1"
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sprinkles", 1)
reagents.add_reagent("berryjuice", 5)
bitesize = 5
if(prob(30))
src.icon_state = "jdonut2"
src.name = "Frosted Jelly Donut"
reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/soylentgreen
name = "Soylent Green"
desc = "Not made of people. Honest." //Totally people.
@@ -494,22 +555,11 @@
reagents.add_reagent("nutriment", 10)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/humeatpie
name = "Meat-pie"
// var/hname = "" //TODO: need some way to find out that facts for the characters.
// var/job = null
icon_state = "meatpie"
desc = "The best meatpies on station."
trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 10)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/momeatpie
/obj/item/weapon/reagent_containers/food/snacks/meatpie
name = "Meat-pie"
icon_state = "meatpie"
desc = "A delicious meatpie."
desc = "An old barber recipe, very delicious!"
trash = "plate"
New()
..()
@@ -572,24 +622,11 @@
reagents.add_reagent("nutriment", 6)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/chaosdonut
name = "Chaos Donut"
desc = "Like life, it never quite tastes the same."
icon_state = "donut1"
New()
..()
reagents.add_reagent("nutriment", 3)
bitesize = 2
if(prob(30))
src.icon_state = "donut2"
src.name = "Frosted Chaos Donut"
reagents.add_reagent("sprinkles", 3)
reagents.add_reagent(pick("capsaicin", "frostoil", "nutriment"), 3)
/obj/item/weapon/reagent_containers/food/snacks/human/kabob
name = "-kabob"
icon_state = "kabob"
desc = "A delicious kabob"
desc = "A human meat, on a stick."
New()
..()
reagents.add_reagent("nutriment", 8)
@@ -604,7 +641,7 @@
/obj/item/weapon/reagent_containers/food/snacks/monkeykabob
name = "Meat-kabob"
icon_state = "kabob"
desc = "A delicious kabob"
desc = "Delicious meat, on a stick."
New()
..()
reagents.add_reagent("nutriment", 8)
@@ -619,7 +656,7 @@
/obj/item/weapon/reagent_containers/food/snacks/tofukabob
name = "Tofu-kabob"
icon_state = "kabob"
desc = "A delicious kabob"
desc = "Vegan meat, on a stick."
New()
..()
reagents.add_reagent("nutriment", 8)
@@ -644,7 +681,7 @@
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/popcorn
name = "Popcorm" //not a typo
name = "Popcorn"
desc = "Now let's find some cinema."
icon_state = "popcorn"
trash = "popcorn"
@@ -802,7 +839,7 @@
/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff
name = "Spacy Liberty Duff"
desc = "Jello gelatin, if Alfred Hubbard were a confectionist" //TODO
desc = "Jello gelatin, from Alfred Hubbard's cookbook"
icon_state = "spacylibertyduff"
trash = "snack_bowl"
New()
@@ -836,7 +873,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meatballsoup
name = "Meatball soup"
desc = "" //TODO
desc = "You've got balls kid, BALLS!"
icon_state = "meatballsoup"
trash = "snack_bowl"
New()
@@ -857,7 +894,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bloodsoup
name = "Meatball soup"
desc = "So very, very red."
desc = "Smells like copper"
icon_state = "meatballsoup"
New()
..()
@@ -879,7 +916,7 @@
/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup
name = "Vegetable soup"
desc = "" //TODO
desc = "A true vegan meal" //TODO
icon_state = "vegetablesoup"
trash = "snack_bowl"
New()
@@ -890,7 +927,7 @@
/obj/item/weapon/reagent_containers/food/snacks/nettlesoup
name = "Nettle soup"
desc = "" //TODO
desc = "To think, the botanist would've beat you to death with one of these."
icon_state = "nettlesoup"
trash = "snack_bowl"
New()
@@ -902,27 +939,65 @@
/obj/item/weapon/reagent_containers/food/snacks/mysterysoup
name = "Mystery soup"
desc = "A....strange, strange soup."
desc = "The mystery is, why aren't you eating it?"
icon_state = "mysterysoup"
trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 12)
reagents.add_reagent("water", 7)
bitesize = 4
var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10)
switch(mysteryselect)
if(1)
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("capsaicin", 3)
reagents.add_reagent("tomatojuice", 2)
if(2)
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("frostoil", 3)
reagents.add_reagent("tomatojuice", 2)
if(3)
reagents.add_reagent("nutriment", 5)
reagents.add_reagent("water", 5)
reagents.add_reagent("tricordrazine", 5)
if(4)
reagents.add_reagent("nutriment", 5)
reagents.add_reagent("water", 10)
if(5)
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("banana", 10)
if(6)
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("blood", 10)
if(7)
reagents.add_reagent("metroid", 10)
reagents.add_reagent("water", 10)
if(8)
reagents.add_reagent("carbon", 10)
reagents.add_reagent("toxin", 10)
if(9)
reagents.add_reagent("nutriment", 5)
reagents.add_reagent("tomatojuice", 10)
if(10)
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("tomatojuice", 5)
reagents.add_reagent("imidazoline", 5)
bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/wishsoup
name = "Wish Soup"
desc = "I wish this was soup."
icon = 'janitor.dmi'
icon_state = "bucket"
icon_state = "wishsoup"
trash = "snack_bowl"
New()
..()
reagents.add_reagent("water", 20)
reagents.add_reagent("water", 10)
bitesize = 5
if(prob(5))
src.desc = "A wish come true!"
reagents.add_reagent("nutriment", 10)
/obj/item/weapon/reagent_containers/food/snacks/hotchili
name = "Hot Chili"
desc = "" //TODO
desc = "A five alarm Texan Chili!"
icon_state = "hotchili"
trash = "snack_bowl"
New()
@@ -935,7 +1010,7 @@
/obj/item/weapon/reagent_containers/food/snacks/coldchili
name = "Cold Chili"
desc = "" //TODO
desc = "This slush is barely a liquid!"
icon_state = "coldchili"
trash = "snack_bowl"
New()
@@ -1031,10 +1106,10 @@
reagents.add_reagent("capsaicin", 6)
bitesize = 4
/obj/item/weapon/reagent_containers/food/snacks/monkiesdelight
name = "Monkie's Delight"
/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight
name = "monkey's Delight"
desc = "Eeee Eee!"
icon_state = "monkiesdelight"
icon_state = "monkeysdelight"
trash = "tray"
New()
..()
@@ -1072,8 +1147,8 @@
trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 8)
bitesize = 3
reagents.add_reagent("nutriment", 11)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich
name = "Toasted Sandwich"
@@ -1082,8 +1157,18 @@
trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 9)
bitesize = 3
reagents.add_reagent("nutriment", 12)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/grilledcheese
name = "Grilled Cheese Sandwich"
desc = "Goes great with Tomato soup!"
icon_state = "toastedsandwich"
trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 7)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/tomatosoup
name = "Tomato Soup"
@@ -1092,10 +1177,9 @@
trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("nutriment", 5)
reagents.add_reagent("tomatojuice", 10)
reagents.add_reagent("water", 10)
bitesize = 5
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
name = "Roffle Waffles"
@@ -1195,7 +1279,7 @@
/obj/item/weapon/reagent_containers/food/snacks/spesslaw
name = "Spesslaw"
desc = "A lawyers favourate"
desc = "A lawyers favourite"
icon_state = "spesslaw"
New()
..()

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