Merge branch 'master' of git://github.com/Baystation12/Baystation12

This commit is contained in:
unknown
2012-05-18 09:03:51 +03:00
155 changed files with 11531 additions and 10729 deletions

View File

@@ -159,6 +159,7 @@
#define FILE_DIR "code/unused/powerarmor" #define FILE_DIR "code/unused/powerarmor"
#define FILE_DIR "code/unused/spacecraft" #define FILE_DIR "code/unused/spacecraft"
#define FILE_DIR "code/WorkInProgress" #define FILE_DIR "code/WorkInProgress"
#define FILE_DIR "code/WorkInProgress/animusstation"
#define FILE_DIR "code/WorkInProgress/Apples" #define FILE_DIR "code/WorkInProgress/Apples"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust"
@@ -643,6 +644,7 @@
#include "code\game\objects\toys.dm" #include "code\game\objects\toys.dm"
#include "code\game\objects\transfer_valve.dm" #include "code\game\objects\transfer_valve.dm"
#include "code\game\objects\washing_machine.dm" #include "code\game\objects\washing_machine.dm"
#include "code\game\objects\watercloset.dm"
#include "code\game\objects\weapons.dm" #include "code\game\objects\weapons.dm"
#include "code\game\objects\window.dm" #include "code\game\objects\window.dm"
#include "code\game\objects\alien\acid.dm" #include "code\game\objects\alien\acid.dm"
@@ -1138,6 +1140,7 @@
#include "code\WorkInProgress\AI_Visibility.dm" #include "code\WorkInProgress\AI_Visibility.dm"
#include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\buildmode.dm"
#include "code\WorkInProgress\explosion_particles.dm" #include "code\WorkInProgress\explosion_particles.dm"
#include "code\WorkInProgress\animusstation\atm.dm"
#include "code\WorkInProgress\Cael_Aislinn\Rust\core_field.dm" #include "code\WorkInProgress\Cael_Aislinn\Rust\core_field.dm"
#include "code\WorkInProgress\Cael_Aislinn\Rust\core_gen.dm" #include "code\WorkInProgress\Cael_Aislinn\Rust\core_gen.dm"
#include "code\WorkInProgress\Cael_Aislinn\Rust\core_monitor.dm" #include "code\WorkInProgress\Cael_Aislinn\Rust\core_monitor.dm"
@@ -1158,7 +1161,6 @@
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\whisper.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\whisper.dm"
#include "code\WorkInProgress\Chinsky\ashtray.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm"
#include "code\WorkInProgress\Mini\ATM.dm"
#include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Mini\pipe_heater.dm" #include "code\WorkInProgress\Mini\pipe_heater.dm"
#include "code\WorkInProgress\Mloc\Shortcuts.dm" #include "code\WorkInProgress\Mloc\Shortcuts.dm"

View File

@@ -26,6 +26,10 @@ obj/machinery/atmospherics/tvalve
icon_state = "tvalve[state]" icon_state = "tvalve[state]"
New() New()
initialize_directions()
..()
proc/initialize_directions()
switch(dir) switch(dir)
if(NORTH) if(NORTH)
initialize_directions = SOUTH|NORTH|EAST initialize_directions = SOUTH|NORTH|EAST
@@ -35,7 +39,6 @@ obj/machinery/atmospherics/tvalve
initialize_directions = WEST|EAST|SOUTH initialize_directions = WEST|EAST|SOUTH
if(WEST) if(WEST)
initialize_directions = EAST|WEST|NORTH initialize_directions = EAST|WEST|NORTH
..()
network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node1) if(reference == node1)
@@ -339,7 +342,7 @@ obj/machinery/atmospherics/tvalve
obj/machinery/atmospherics/tvalve/mirrored obj/machinery/atmospherics/tvalve/mirrored
icon_state = "tvalvem0" icon_state = "tvalvem0"
New() initialize_directions()
switch(dir) switch(dir)
if(NORTH) if(NORTH)
initialize_directions = SOUTH|NORTH|WEST initialize_directions = SOUTH|NORTH|WEST
@@ -349,7 +352,6 @@ obj/machinery/atmospherics/tvalve/mirrored
initialize_directions = WEST|EAST|NORTH initialize_directions = WEST|EAST|NORTH
if(WEST) if(WEST)
initialize_directions = EAST|WEST|SOUTH initialize_directions = EAST|WEST|SOUTH
..()
initialize() initialize()
var/node1_dir var/node1_dir

View File

@@ -42,6 +42,7 @@ obj/machinery/atmospherics/unary/oxygen_generator
air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen) air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen)
air_contents.oxygen += added_oxygen air_contents.oxygen += added_oxygen
air_contents.update_values()
if(network) if(network)
network.update = 1 network.update = 1

View File

@@ -124,6 +124,7 @@
//Remix the resulting gases //Remix the resulting gases
filtered_out.update_values() filtered_out.update_values()
removed.update_values()
air_contents.merge(filtered_out) air_contents.merge(filtered_out)
loc.assume_air(removed) loc.assume_air(removed)

View File

@@ -44,11 +44,9 @@ datum/pipe_network
proc/merge(datum/pipe_network/giver) proc/merge(datum/pipe_network/giver)
if(giver==src) return 0 if(giver==src) return 0
normal_members -= giver.normal_members normal_members |= giver.normal_members
normal_members += giver.normal_members
line_members -= giver.line_members line_members |= giver.line_members
line_members += giver.line_members
for(var/obj/machinery/atmospherics/normal_member in giver.normal_members) for(var/obj/machinery/atmospherics/normal_member in giver.normal_members)
normal_member.reassign_network(giver, src) normal_member.reassign_network(giver, src)
@@ -139,6 +137,7 @@ datum/pipe_network
gas.trace_gases += corresponding gas.trace_gases += corresponding
corresponding.moles = trace_gas.moles*gas.volume/air_transient.volume corresponding.moles = trace_gas.moles*gas.volume/air_transient.volume
gas.update_values()
air_transient.update_values() air_transient.update_values()
return 1 return 1

View File

@@ -50,6 +50,7 @@ datum/pipeline
member.air_temporary.trace_gases += corresponding member.air_temporary.trace_gases += corresponding
corresponding.moles = trace_gas.moles*member.volume/air.volume corresponding.moles = trace_gas.moles*member.volume/air.volume
member.air_temporary.update_values()
proc/build_pipeline(obj/machinery/atmospherics/pipe/base) proc/build_pipeline(obj/machinery/atmospherics/pipe/base)
air = new air = new

View File

@@ -341,6 +341,8 @@ obj/machinery/atmospherics/pipe
New() New()
initialize_directions = dir initialize_directions = dir
if(air_temporary)
air_temporary.update_values()
..() ..()
process() process()

View File

@@ -19,6 +19,12 @@ datum
var/list/space_borders var/list/space_borders
var/length_space_border = 0 var/length_space_border = 0
Del()
spawn(5)
message_admins("WARNING! Airgroup deleted! Stacktrace is in a runtime, give it to Sky.")
CRASH("Fuck. Something deleted an airgroup. Here's your stack trace.")
..()
proc/suspend_group_processing() proc/suspend_group_processing()
//Purpose: Suspends processing of the group, breaks it into individual tiles. //Purpose: Suspends processing of the group, breaks it into individual tiles.
//Called by: Any check where the airgroup is determined to break. //Called by: Any check where the airgroup is determined to break.

View File

@@ -891,6 +891,9 @@ datum
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
var/self_heat_capacity = heat_capacity_archived() var/self_heat_capacity = heat_capacity_archived()
var/sharer_heat_capacity = sharer.heat_capacity_archived() var/sharer_heat_capacity = sharer.heat_capacity_archived()
if(!group_multiplier)
message_admins("Error! The gas mixture (ref \ref[src]) has no group multiplier!")
return
if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
var/heat = conduction_coefficient*delta_temperature* \ var/heat = conduction_coefficient*delta_temperature* \
@@ -903,13 +906,14 @@ datum
var/delta_temperature = (temperature - model.temperature) var/delta_temperature = (temperature - model.temperature)
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
var/self_heat_capacity = heat_capacity()//_archived() var/self_heat_capacity = heat_capacity()//_archived()
if(!group_multiplier)
message_admins("Error! The gas mixture (ref \ref[src]) has no group multiplier!")
return
if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
var/heat = conduction_coefficient*delta_temperature* \ var/heat = conduction_coefficient*delta_temperature* \
(self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity))
ASSERT(self_heat_capacity != 0) // Trying to solve a runtime error - Abi79
ASSERT(group_multiplier != 0)
if(border_multiplier) if(border_multiplier)
temperature -= heat*border_multiplier/(self_heat_capacity*group_multiplier) temperature -= heat*border_multiplier/(self_heat_capacity*group_multiplier)
else else

View File

@@ -104,6 +104,7 @@ datum
var/current_cycle = 0 var/current_cycle = 0
var/update_delay = 5 //How long between check should it try to process atmos again. var/update_delay = 5 //How long between check should it try to process atmos again.
var/failed_ticks = 0 //How many ticks have runtimed?
/* process() /* process()
@@ -211,9 +212,17 @@ datum
set background = 1 set background = 1
while(1) while(1)
if(kill_air) if(!kill_air)
return 1
current_cycle++ current_cycle++
var/success = tick() //Changed so that a runtime does not crash the ticker.
if(!success) //Runtimed.
failed_ticks++
if(failed_ticks > 20)
world << "<font size='4' color='red'>ERROR IN ATMOS TICKER. Killing air simulation!</font>"
kill_air = 1
sleep(max(5,update_delay*tick_multiplier))
proc/tick()
if(groups_to_rebuild.len > 0) //If there are groups to rebuild, do so. if(groups_to_rebuild.len > 0) //If there are groups to rebuild, do so.
spawn process_rebuild_select_groups() spawn process_rebuild_select_groups()
@@ -223,10 +232,16 @@ datum
tiles_to_update = list() tiles_to_update = list()
for(var/datum/air_group/AG in air_groups) //Processing groups for(var/datum/air_group/AG in air_groups) //Processing groups
spawn
if(AG) // Because of runtime errors on syphoning. if(AG) // Because of runtime errors on syphoning.
spawn AG.process_group() AG.process_group()
for(var/turf/simulated/T in active_singletons) //Processing Singletons for(var/turf/simulated/T in active_singletons) //Processing Singletons
spawn T.process_cell() spawn
if(istype(T))
T.process_cell()
else
active_singletons.Remove(T)
for(var/turf/simulated/hot_potato in active_super_conductivity) //Process superconduction for(var/turf/simulated/hot_potato in active_super_conductivity) //Process superconduction
spawn hot_potato.super_conduct() spawn hot_potato.super_conduct()
@@ -238,9 +253,11 @@ datum
if(current_cycle%10==5) //Check for groups of tiles to resume group processing every 10 cycles if(current_cycle%10==5) //Check for groups of tiles to resume group processing every 10 cycles
for(var/datum/air_group/AG in air_groups) for(var/datum/air_group/AG in air_groups)
spawn
if(AG) // Because of runtime errors on syphoning. if(AG) // Because of runtime errors on syphoning.
spawn AG.check_regroup() AG.check_regroup()
sleep(max(5,update_delay*tick_multiplier)) return 1
proc/process_rebuild_select_groups() proc/process_rebuild_select_groups()
//Purpose: This gets called to recalculate and rebuild group geometry //Purpose: This gets called to recalculate and rebuild group geometry

View File

@@ -369,6 +369,7 @@ var/datum/cameranet/cameranet = new()
return 0 return 0
/mob/living/silicon/ai/switchCamera(var/obj/machinery/camera/C) /mob/living/silicon/ai/switchCamera(var/obj/machinery/camera/C)
if(C && isturf(C.loc))
eyeobj.loc = C.loc eyeobj.loc = C.loc
cameranet.visibility(eyeobj) cameranet.visibility(eyeobj)
return return

View File

@@ -4,7 +4,7 @@
voice_name = "tajaran" voice_name = "tajaran"
icon = 'tajaran.dmi' icon = 'tajaran.dmi'
icon_state = "m-none" icon_state = "m-none"
var/list/tajspeak_letters var/list/tajspeak_letters = list("~","*","-")
// //
universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans
taj_talk_understand = 1 taj_talk_understand = 1
@@ -12,8 +12,6 @@
examine_text = "one of the cat-like Tajarans." examine_text = "one of the cat-like Tajarans."
/mob/living/carbon/human/tajaran/New() /mob/living/carbon/human/tajaran/New()
tajspeak_letters = new/list("~","*","-")
var/g = "m" var/g = "m"
if (gender == FEMALE) if (gender == FEMALE)
g = "f" g = "f"

View File

@@ -26,6 +26,10 @@ log transactions
del I del I
/obj/machinery/atm/attack_hand(mob/user as mob) /obj/machinery/atm/attack_hand(mob/user as mob)
if(istype(user, /mob/living/silicon))
user << "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005."
return
var/obj/item/weapon/card/id/user_id = src.scan_user(user) var/obj/item/weapon/card/id/user_id = src.scan_user(user)
if(..()) if(..())
return return

View File

@@ -71,11 +71,107 @@ A list of items and costs is stored under the datum of every game mode, alongsid
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=[path_text];cost=[cost]'>[name]</A> ([cost])<BR>" src.menu_message += "<A href='byond://?src=\ref[src];buy_item=[path_text];cost=[cost]'>[name]</A> ([cost])<BR>"
category_items++ category_items++
// src.menu_message += "<A href='byond://?src=\ref[src];buy_item=random'>Random Item (??)</A><br>"
src.menu_message += "<HR>" src.menu_message += "<HR>"
return return
Topic(href, href_list) Topic(href, href_list)
if (href_list["buy_item"]) if (href_list["buy_item"])
/* if(href_list["buy_item"] == "random")
var/list/randomItems = list()
//Sorry for all the ifs, but it makes it 1000 times easier for other people/servers to add or remove items from this list
//Add only items the player can afford:
if(uses > 19)
randomItems.Add("/obj/item/weapon/circuitboard/teleporter") //Teleporter Circuit Board (costs 20, for nuke ops)
if(uses > 9)
randomItems.Add("/obj/item/toy/syndicateballoon")//Syndicate Balloon
randomItems.Add("/obj/item/weapon/storage/syndie_kit/imp_uplink") //Uplink Implanter
randomItems.Add("/obj/item/weapon/storage/box/syndicate") //Syndicate bundle
//if(uses > 8) //Nothing... yet.
//if(uses > 7) //Nothing... yet.
if(uses > 6)
randomItems.Add("/obj/item/weapon/aiModule/syndicate") //Hacked AI Upload Module
randomItems.Add("/obj/item/device/radio/beacon/syndicate") //Singularity Beacon
if(uses > 5)
randomItems.Add("/obj/item/weapon/gun/projectile") //Revolver
if(uses > 4)
randomItems.Add("/obj/item/weapon/gun/energy/crossbow") //Energy Crossbow
randomItems.Add("/obj/item/device/powersink") //Powersink
if(uses > 3)
randomItems.Add("/obj/item/weapon/melee/energy/sword") //Energy Sword
randomItems.Add("/obj/item/clothing/mask/gas/voice") //Voice Changer
randomItems.Add("/obj/item/device/chameleon") //Chameleon Projector
if(uses > 2)
randomItems.Add("/obj/item/weapon/storage/emp_kit") //EMP Grenades
randomItems.Add("/obj/item/weapon/pen/paralysis") //Paralysis Pen
randomItems.Add("/obj/item/weapon/cartridge/syndicate") //Detomatix Cartridge
randomItems.Add("/obj/item/clothing/under/chameleon") //Chameleon Jumpsuit
randomItems.Add("/obj/item/weapon/card/id/syndicate") //Agent ID Card
randomItems.Add("/obj/item/weapon/card/emag") //Cryptographic Sequencer
randomItems.Add("/obj/item/weapon/storage/syndie_kit/space") //Syndicate Space Suit
randomItems.Add("/obj/item/device/encryptionkey/binary") //Binary Translator Key
randomItems.Add("/obj/item/weapon/storage/syndie_kit/imp_freedom") //Freedom Implant
randomItems.Add("/obj/item/clothing/glasses/thermal") //Thermal Imaging Goggles
if(uses > 1)
/*
var/list/usrItems = usr.get_contents() //Checks to see if the user has a revolver before giving ammo
var/hasRevolver = 0
for(var/obj/I in usrItems) //Only add revolver ammo if the user has a gun that can shoot it
if(istype(I,/obj/item/weapon/gun/projectile))
hasRevolver = 1
if(hasRevolver) randomItems.Add("/obj/item/ammo_magazine/a357") //Revolver ammo
*/
randomItems.Add("/obj/item/ammo_magazine/a357") //Revolver ammo
randomItems.Add("/obj/item/clothing/shoes/syndigaloshes") //No-Slip Syndicate Shoes
randomItems.Add("/obj/item/weapon/plastique") //C4
if(uses > 0)
randomItems.Add("/obj/item/weapon/soap/syndie") //Syndicate Soap
randomItems.Add("/obj/item/weapon/storage/toolbox/syndicate") //Syndicate Toolbox
if(!randomItems)
del(randomItems)
return 0
else
href_list["buy_item"] = pick(randomItems)
switch(href_list["buy_item"]) //Ok, this gets a little messy, sorry.
if("/obj/item/weapon/circuitboard/teleporter")
uses -= 20
if("/obj/item/toy/syndicateballoon" , "/obj/item/weapon/storage/syndie_kit/imp_uplink" , "/obj/item/weapon/storage/box/syndicate")
uses -= 10
if("/obj/item/weapon/aiModule/syndicate" , "/obj/item/device/radio/beacon/syndicate")
uses -= 7
if("/obj/item/weapon/gun/projectile")
uses -= 6
if("/obj/item/weapon/gun/energy/crossbow" , "/obj/item/device/powersink")
uses -= 5
if("/obj/item/weapon/melee/energy/sword" , "/obj/item/clothing/mask/gas/voice" , "/obj/item/device/chameleon")
uses -= 4
if("/obj/item/weapon/storage/emp_kit" , "/obj/item/weapon/pen/paralysis" , "/obj/item/weapon/cartridge/syndicate" , "/obj/item/clothing/under/chameleon" , \
"/obj/item/weapon/card/id/syndicate" , "/obj/item/weapon/card/emag" , "/obj/item/weapon/storage/syndie_kit/space" , "/obj/item/device/encryptionkey/binary" , \
"/obj/item/weapon/storage/syndie_kit/imp_freedom" , "/obj/item/clothing/glasses/thermal")
uses -= 3
if("/obj/item/ammo_magazine/a357" , "/obj/item/clothing/shoes/syndigaloshes" , "/obj/item/weapon/plastique")
uses -= 2
if("/obj/item/weapon/soap/syndie" , "/obj/item/weapon/storage/toolbox/syndicate")
uses -= 1
del(randomItems)
return 1
*/
if(text2num(href_list["cost"]) > uses) // Not enough crystals for the item if(text2num(href_list["cost"]) > uses) // Not enough crystals for the item
return 0 return 0

View File

@@ -22,7 +22,7 @@
/obj/item/tape/engineering /obj/item/tape/engineering
name = "engineering tape" name = "engineering tape"
desc = "A length of engineering tape. Better not cross it." desc = "A length of engineering tape. Better not cross it."
req_one_access = list(access_engine,access_atmospherics) req_access = list(access_engine,access_atmospherics)
icon_base = "engineering" icon_base = "engineering"
/obj/item/taperoll/attack_self(mob/user as mob) /obj/item/taperoll/attack_self(mob/user as mob)
@@ -73,7 +73,7 @@
var/turf/T = get_turf(A) var/turf/T = get_turf(A)
var/obj/item/tape/P = new tape_type(T.x,T.y,T.z) var/obj/item/tape/P = new tape_type(T.x,T.y,T.z)
P.loc = locate(T.x,T.y,T.z) P.loc = locate(T.x,T.y,T.z)
P.icon_state = "door" P.icon_state = "[src.icon_base]_door"
P.layer = 3.2 P.layer = 3.2
user << "\blue You finish placing the [src]." user << "\blue You finish placing the [src]."

View File

@@ -249,7 +249,7 @@
new /obj/item/device/flashlight/pen(src) new /obj/item/device/flashlight/pen(src)
new /obj/item/clothing/gloves/latex(src) new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/suit/bio_suit/cmo(src) new /obj/item/clothing/suit/bio_suit/cmo(src)
new /obj/item/clothing/head/bio_hood/general(src) new /obj/item/clothing/head/bio_hood/cmo(src)
new /obj/item/clothing/suit/storage/labcoat/cmo(src) new /obj/item/clothing/suit/storage/labcoat/cmo(src)
new /obj/item/clothing/suit/storage/labcoat/cmoalt(src) new /obj/item/clothing/suit/storage/labcoat/cmoalt(src)
new /obj/item/clothing/shoes/brown(src) new /obj/item/clothing/shoes/brown(src)
@@ -432,6 +432,7 @@
new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/clothing/shoes/brown(src) new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/under/det(src) new /obj/item/clothing/under/det(src)
new /obj/item/weapon/camera_film(src)
/obj/item/wardrobe/officer /obj/item/wardrobe/officer
name = "\improper Security Officer Wardrobe" name = "\improper Security Officer Wardrobe"
@@ -538,7 +539,7 @@
new /obj/item/device/pda/quartermaster(src) new /obj/item/device/pda/quartermaster(src)
new /obj/item/device/radio/headset/headset_cargo(src) new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/under/rank/cargo(src) new /obj/item/clothing/under/rank/cargotech(src)
/obj/item/wardrobe/mining /obj/item/wardrobe/mining
name = "\improper Shaft Miner Wardrobe" name = "\improper Shaft Miner Wardrobe"

View File

@@ -380,6 +380,7 @@
return "I couldn't find [name]'s PDA." return "I couldn't find [name]'s PDA."
// send message // send message
if(!istype(eliza.speaker.loc.loc, /obj/item/device/pda))//Looking if we are in a PDA
pda.tnote += "<i><b>&larr; From [eliza.callsign]:</b></i><br>[object]<br>" pda.tnote += "<i><b>&larr; From [eliza.callsign]:</b></i><br>[object]<br>"
if(prob(15) && eliza.speaker) //Give the AI a chance of intercepting the message if(prob(15) && eliza.speaker) //Give the AI a chance of intercepting the message
@@ -396,7 +397,14 @@
pda.overlays = null pda.overlays = null
pda.overlays += image('pda.dmi', "pda-r") pda.overlays += image('pda.dmi', "pda-r")
else
var/list/href_list = list()
href_list["src"] = "\ref[eliza.speaker.loc.loc]"
href_list["choice"] = "Message"
href_list["target"] = "\ref[pda]"
href_list["pAI_mess"] = "\"[object]\" \[Via pAI Unit\]"
var/obj/item/device/pda/pda_im_in = eliza.speaker.loc.loc
pda_im_in.Topic("src=\ref[eliza.speaker.loc.loc];choice=Message;target=\ref[pda];pAI_mess=\"[object] \[Via pAI Unit\]",href_list)
return "Told [name], [object]." return "Told [name], [object]."
/datum/text_parser/keyword/yes /datum/text_parser/keyword/yes

View File

@@ -0,0 +1,165 @@
/*
TODO:
give money an actual use (QM stuff, vending machines)
send money to people (might be worth attaching money to custom database thing for this, instead of being in the ID)
log transactions
*/
/obj/machinery/atm
name = "\improper NanoTrasen Automatic Teller Machine"
desc = "For all your monetary needs!"
icon = 'terminals.dmi'
icon_state = "atm"
anchored = 1
use_power = 1
idle_power_usage = 10
var
obj/item/weapon/card/id/card
obj/item/weapon/spacecash/cashes = list()
inserted = 0
accepted = 0
pincode = 0
attackby(var/obj/A, var/mob/user)
if(istype(A,/obj/item/weapon/spacecash))
cashes += A
user.drop_item()
A.loc = src
inserted += A:worth
return
if(istype(A,/obj/item/weapon/coin))
if(istype(A,/obj/item/weapon/coin/iron))
cashes += A
user.drop_item()
A.loc = src
inserted += 1
return
if(istype(A,/obj/item/weapon/coin/silver))
cashes += A
user.drop_item()
A.loc = src
inserted += 10
return
if(istype(A,/obj/item/weapon/coin/gold))
cashes += A
user.drop_item()
A.loc = src
inserted += 50
return
if(istype(A,/obj/item/weapon/coin/plasma))
cashes += A
user.drop_item()
A.loc = src
inserted += 2
return
if(istype(A,/obj/item/weapon/coin/diamond))
cashes += A
user.drop_item()
A.loc = src
inserted += 300
return
user << "You insert your [A.name] in ATM"
..()
attack_hand(var/mob/user)
if(istype(user, /mob/living/silicon))
user << "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005."
return
if(!(stat && NOPOWER) && ishuman(user))
var/dat
user.machine = src
if(!accepted)
if(scan(user))
pincode = input(usr,"Enter a pin-code") as num
if(card.checkaccess(pincode,usr))
accepted = 1
// usr << sound('nya.mp3')
else
dat = null
dat += "<h1>NanoTrasen Automatic Teller Machine</h1><br/>"
dat += "For all your monetary needs!<br/><br/>"
dat += "Welcome, [card.registered_name]. You have [card.money] credits deposited.<br>"
dat += "Current inserted item value: [inserted] credits.<br><br>"
dat += "Please, select action<br>"
dat += "<a href=\"?src=\ref[src]&with=1\">Withdraw Physical Credits</a><br/>"
dat += "<a href=\"?src=\ref[src]&eca=1\">Eject Inserted Items</a><br/>"
dat += "<a href=\"?src=\ref[src]&ins=1\">Convert Inserted Items to Credits</a><br/>"
dat += "<a href=\"?src=\ref[src]&lock=1\">Lock ATM</a><br/>"
user << browse(dat,"window=atm")
onclose(user,"close")
proc
withdraw(var/mob/user)
if(accepted)
var/amount = input("How much would you like to withdraw?", "Amount", 0) in list(1,10,20,50,100,200,500,1000, 0)
if(amount == 0)
return
if(card.money >= amount)
card.money -= amount
switch(amount)
if(1)
new /obj/item/weapon/spacecash(loc)
if(10)
new /obj/item/weapon/spacecash/c10(loc)
if(20)
new /obj/item/weapon/spacecash/c20(loc)
if(50)
new /obj/item/weapon/spacecash/c50(loc)
if(100)
new /obj/item/weapon/spacecash/c100(loc)
if(200)
new /obj/item/weapon/spacecash/c200(loc)
if(500)
new /obj/item/weapon/spacecash/c500(loc)
if(1000)
new /obj/item/weapon/spacecash/c1000(loc)
else
user << "\red Error: Insufficient funds."
return
scan(var/mob/user)
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
if(H.wear_id)
if(istype(H.wear_id, /obj/item/weapon/card/id))
card = H.wear_id
return 1
if(istype(H.wear_id,/obj/item/device/pda))
var/obj/item/device/pda/P = H.wear_id
if(istype(P.id,/obj/item/weapon/card/id))
card = P.id
return 1
return 0
return 0
insert()
if(accepted)
card.money += inserted
inserted = 0
Topic(href,href_list)
if (usr.machine==src && get_dist(src, usr) <= 1 || istype(usr, /mob/living/silicon/ai))
if(href_list["eca"])
if(accepted)
for(var/obj/item/weapon/spacecash/M in cashes)
M.loc = loc
inserted = 0
if(!cashes)
cashes = null
if(href_list["with"] && card)
withdraw(usr)
if(href_list["ins"] && card)
if(accepted)
card.money += inserted
inserted = 0
if(href_list["lock"])
card = null
accepted = 0
usr.machine = null
usr << browse(null,"window=atm")
src.updateUsrDialog()
else
usr.machine = null
usr << browse(null,"window=atm")

View File

@@ -485,8 +485,8 @@ proc/process_ghost_teleport_locs()
//PRISON //PRISON
/area/prison /area/prison
name = "Prison Wing" name = "Prison Station"
icon_state = "security" icon_state = "brig"
/area/prison/arrival_airlock /area/prison/arrival_airlock
name = "Prison Station Airlock" name = "Prison Station Airlock"
@@ -1058,6 +1058,10 @@ proc/process_ghost_teleport_locs()
name = "Brig" name = "Brig"
icon_state = "brig" icon_state = "brig"
/area/security/prison
name = "Prison Wing"
icon_state = "security"
/area/security/warden /area/security/warden
name = "Warden" name = "Warden"
icon_state = "Warden" icon_state = "Warden"

View File

@@ -88,7 +88,7 @@
/obj/structure/bedsheetbin /obj/structure/bedsheetbin
name = "linen bin" name = "linen bin"
desc = "A bin for containing bedsheets. It looks rather cosy." desc = "A small wire mesh bin full of extra bedsheets and cleaning supplies for the beds. Smells of lilacs and has a faint undertone of disinfectant."
icon = 'items.dmi' icon = 'items.dmi'
icon_state = "bedbin" icon_state = "bedbin"
var/amount = 23.0 var/amount = 23.0
@@ -232,7 +232,7 @@
var/mob/living/carbon/monkey/target = null var/mob/living/carbon/monkey/target = null
/obj/effect/sign/securearea /obj/effect/sign/securearea
desc = "A warning sign which reads 'SECURE AREA'" desc = "A large yellow warning sign which reads 'SECURE AREA', it appears to have been painted onto the wall like that."
name = "SECURE AREA" name = "SECURE AREA"
icon = 'decals.dmi' icon = 'decals.dmi'
icon_state = "securearea" icon_state = "securearea"
@@ -250,7 +250,7 @@
density = 0 density = 0
/obj/effect/sign/biohazard /obj/effect/sign/biohazard
desc = "A warning sign which reads 'BIOHAZARD'" desc = "A warning sign which reads 'BIOHAZARD', you think it'd be a good idea to ensure you have a properly sealed hazardsuit on."
name = "BIOHAZARD" name = "BIOHAZARD"
icon = 'decals.dmi' icon = 'decals.dmi'
icon_state = "bio" icon_state = "bio"
@@ -259,7 +259,7 @@
density = 0 density = 0
/obj/effect/sign/electricshock /obj/effect/sign/electricshock
desc = "A warning sign which reads 'HIGH VOLTAGE'" desc = "A warning sign which reads 'HIGH VOLTAGE', it looks like it'd be a wise decision to stay away from here."
name = "HIGH VOLTAGE" name = "HIGH VOLTAGE"
icon = 'decals.dmi' icon = 'decals.dmi'
icon_state = "shock" icon_state = "shock"
@@ -813,6 +813,7 @@
density = 1 density = 1
anchored = 1.0 anchored = 1.0
layer = 2.8 layer = 2.8
var/dented = 0
New() New()
..() ..()

View File

@@ -620,16 +620,16 @@
/obj/item/seeds/harebell /obj/item/seeds/harebell
name = "pack of harebell seeds" name = "pack of harebell seeds"
desc = "These seeds grow into pretty little flowers." desc = "These seeds grow into pretty little flowers."
icon_state = "seed" icon_state = "seed-harebell"
mypath = "/obj/item/seeds/harebell" mypath = "/obj/item/seeds/harebell"
species = "harebell" species = "harebell"
plantname = "Harebells" plantname = "Harebells"
productname = "" productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/harebell"
lifespan = 100 lifespan = 100
endurance = 20 endurance = 20
maturation = 7 maturation = 7
production = 1 production = 1
yield = -1 yield = 2
potency = 1 potency = 1
oneharvest = 1 oneharvest = 1
growthstages = 4 growthstages = 4
@@ -1058,6 +1058,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/poppy /obj/item/weapon/reagent_containers/food/snacks/grown/poppy
seed = "/obj/item/seeds/poppyseed" seed = "/obj/item/seeds/poppyseed"
name = "poppy" name = "poppy"
desc = "Long-used as a symbol of rest, peace, and death."
icon_state = "poppy" icon_state = "poppy"
potency = 30 potency = 30
New() New()
@@ -1066,6 +1067,16 @@
reagents.add_reagent("bicaridine", 1+round((potency / 10), 1)) reagents.add_reagent("bicaridine", 1+round((potency / 10), 1))
bitesize = 1+round(reagents.total_volume / 3, 1) bitesize = 1+round(reagents.total_volume / 3, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/harebell
seed = "obj/item/seeds/harebellseed"
name = "harebell"
desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten<65>d not thy breath.\""
icon_state = "harebell"
potency = 1
New()
..()
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
bitesize = 1+round(reagents.total_volume / 3, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/potato /obj/item/weapon/reagent_containers/food/snacks/grown/potato
seed = "/obj/item/seeds/potatoseed" seed = "/obj/item/seeds/potatoseed"
@@ -1668,6 +1679,9 @@
reagents = R reagents = R
R.my_atom = src R.my_atom = src
/obj/item/weapon/grown/proc/changePotency(newValue) //-QualityVan
potency = newValue
/obj/item/weapon/grown/log /obj/item/weapon/grown/log
name = "tower-cap log" name = "tower-cap log"
desc = "It's better than bad, it's good!" desc = "It's better than bad, it's good!"

View File

@@ -225,38 +225,6 @@
idle_power_usage = 10 idle_power_usage = 10
active_power_usage = 400 active_power_usage = 400
/obj/machinery/door_control
name = "remote door-control"
desc = "It controls doors, remotely."
icon = 'stationobjs.dmi'
icon_state = "doorctrl0"
desc = "A remote control-switch for a door."
var/id = null
var/range = 10
var/normaldoorcontrol = 0
var/desiredstate = 0 // Zero is closed, 1 is open.
var/specialfunctions = 1
/*
Bitflag, 1= open
2= idscan,
4= bolts
8= shock
16= door safties
*/
var/exposedwires = 0
var/wires = 3
/*
Bitflag, 1=checkID
2=Network Access
*/
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/driver_button /obj/machinery/driver_button
name = "mass driver button" name = "mass driver button"
icon = 'objects.dmi' icon = 'objects.dmi'

View File

@@ -76,6 +76,8 @@
name = "Arts and Crafts supplies" name = "Arts and Crafts supplies"
contains = list("/obj/item/weapon/storage/crayonbox", contains = list("/obj/item/weapon/storage/crayonbox",
"/obj/item/weapon/camera_test", "/obj/item/weapon/camera_test",
"/obj/item/weapon/camera_film",
"/obj/item/weapon/camera_film",
"/obj/item/weapon/storage/photo_album", "/obj/item/weapon/storage/photo_album",
"/obj/item/weapon/packageWrap", "/obj/item/weapon/packageWrap",
"/obj/item/weapon/reagent_containers/glass/paint/red", "/obj/item/weapon/reagent_containers/glass/paint/red",
@@ -756,7 +758,8 @@
containername = "Secruity Barriers crate" containername = "Secruity Barriers crate"
group = "Security" group = "Security"
/datum/supply_packs/hats/ /datum/supply_packs/randomised
var/num_contained = 3 //number of items picked to be contained in a randomised crate
contains = list("/obj/item/clothing/head/collectable/chef", contains = list("/obj/item/clothing/head/collectable/chef",
"/obj/item/clothing/head/collectable/paper", "/obj/item/clothing/head/collectable/paper",
"/obj/item/clothing/head/collectable/tophat", "/obj/item/clothing/head/collectable/tophat",
@@ -783,30 +786,22 @@
"/obj/item/clothing/head/collectable/petehat") "/obj/item/clothing/head/collectable/petehat")
name = "Collectable hat crate!" name = "Collectable hat crate!"
cost = 200 cost = 200
containertype = "/obj/structure/closet/crate/hat" containertype = "/obj/structure/closet/crate"
containername = "Collectable hats crate! Brought to you by Bass.inc!" containername = "Collectable hats crate! Brought to you by Bass.inc!"
group = "Clothing"
/datum/supply_packs/hats/New() /datum/supply_packs/randomised/New()
var/list/tempContains = list() var/list/tempContains = list()
for(var/i = 0,i<min(3,contains.len),i++) for(var/i = 0,i<num_contained,i++)
tempContains += pick(contains) tempContains += pick(contains)
contains = tempContains contains = tempContains
..() ..()
/datum/supply_packs/contraband /datum/supply_packs/randomised/contraband
num_contained = 5
contains = list("/obj/item/weapon/contraband/poster","/obj/item/weapon/cigpacket/dromedaryco") //We randomly pick 5 items from this list through the constructor, look below contains = list("/obj/item/weapon/contraband/poster","/obj/item/weapon/cigpacket/dromedaryco") //We randomly pick 5 items from this list through the constructor, look below
name = "Contraband crate" name = "Contraband crate"
cost = 30 cost = 30
containertype = "/obj/structure/closet/crate/contraband" containertype = "/obj/structure/closet/crate"
containername = "Contraband crate" containername = "Contraband crate"
contraband = 1 contraband = 1
group = "NanoTrasen Contraband Storage"
/datum/supply_packs/contraband/New()
var/list/tempContains = list()
for(var/i = 0,i<5,i++)
tempContains += pick(contains)
src.contains = tempContains
..()

View File

@@ -159,7 +159,7 @@
ammo = 30 ammo = 30
/obj/item/weapon/spacecash /obj/item/weapon/spacecash
name = "space cash" name = "stack of credits"
desc = "It's worth 1 credit." desc = "It's worth 1 credit."
gender = PLURAL gender = PLURAL
icon = 'items.dmi' icon = 'items.dmi'
@@ -175,6 +175,7 @@
var/access = list() var/access = list()
access = access_crate_cash access = access_crate_cash
var/worth = 1 var/worth = 1
var/amount = 1
/obj/item/weapon/spacecash/c10 /obj/item/weapon/spacecash/c10
icon_state = "spacecash10" icon_state = "spacecash10"
@@ -211,6 +212,51 @@
access = access_crate_cash access = access_crate_cash
desc = "It's worth 1000 credits." desc = "It's worth 1000 credits."
worth = 1000 worth = 1000
/obj/item/weapon/spacecash/attack_self(var/mob/user)
var/dat = "<HEAD><TITLE>Space cash stack</TITLE></HEAD>"
dat += "Credit amount - [worth * amount]<br>"
dat += "<a href='?src=\ref[src];takemoney=1'>Take amount</a><br>"
user << browse(dat,"window=money")
/obj/item/weapon/spacecash/Topic(href, href_list)
if(href_list["takemoney"])
var/a = 1
a = input(usr,"How much you want take?") as num
if((a > src.amount) || (a < 0))
usr << "\red You don't have that many credits."
return
src.amount -= a
var/obj/item/weapon/spacecash/S
if(a <= 0)
return
switch(src.worth)
if(1)
S = new /obj/item/weapon/spacecash(get_turf(src))
if(10)
S = new /obj/item/weapon/spacecash/c10(get_turf(src))
if(20)
S = new /obj/item/weapon/spacecash/c20(get_turf(src))
if(50)
S = new /obj/item/weapon/spacecash/c50(get_turf(src))
if(100)
S = new /obj/item/weapon/spacecash/c100(get_turf(src))
if(200)
S = new /obj/item/weapon/spacecash/c200(get_turf(src))
if(500)
S = new /obj/item/weapon/spacecash/c500(get_turf(src))
if(1000)
S = new /obj/item/weapon/spacecash/c1000(get_turf(src))
S.amount = a
if(src.amount == 0)
del(src)
/obj/item/weapon/spacecash/attackby(var/obj/I, var/mob/user)
if(!I)
return
if(istype(I,src))
src.amount += I:amount
user << "You add [I:amount] credits to stack."
del(I)
/obj/item/device/mass_spectrometer /obj/item/device/mass_spectrometer
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample." desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
@@ -573,11 +619,12 @@
item_state = "card-id" item_state = "card-id"
var/access = list() var/access = list()
var/registered_name = null // The name registered_name on the card var/registered_name = null // The name registered_name on the card
var/pin = 0
var/money = 0
var/assignment = null var/assignment = null
var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit
var/dorm = 0 // determines if this ID has claimed a dorm already var/dorm = 0 // determines if this ID has claimed a dorm already
var/obj/item/weapon/credit_card/card
var/blood_type = "\[UNSET\]" var/blood_type = "\[UNSET\]"
var/dna_hash = "\[UNSET\]" var/dna_hash = "\[UNSET\]"
var/fingerprint_hash = "\[UNSET\]" var/fingerprint_hash = "\[UNSET\]"
@@ -741,7 +788,7 @@
/obj/item/weapon/extinguisher /obj/item/weapon/extinguisher
name = "fire extinguisher" name = "fire extinguisher"
desc = "Contains water for fighting fires." desc = "A traditional red fire extinguisher."
icon = 'items.dmi' icon = 'items.dmi'
icon_state = "fire_extinguisher0" icon_state = "fire_extinguisher0"
var/last_use = 1.0 var/last_use = 1.0
@@ -760,6 +807,7 @@
name = "fire extinguisher" name = "fire extinguisher"
desc = "A light and compact fibreglass-framed model fire extinguisher." desc = "A light and compact fibreglass-framed model fire extinguisher."
icon_state = "miniFE0" icon_state = "miniFE0"
hitsound = null //it is much lighter, after all.
flags = FPRINT | USEDELAY | TABLEPASS flags = FPRINT | USEDELAY | TABLEPASS
throwforce = 5 throwforce = 5
w_class = 2.0 w_class = 2.0
@@ -861,6 +909,10 @@
/obj/item/weapon/handcuffs/cyborg /obj/item/weapon/handcuffs/cyborg
dispenser = 1 dispenser = 1
/obj/item/weapon/handcuffs/cable
name = "cable restraints"
desc = "Looks like some cables tied together. Could be used to tie something up."
icon_state = "cuff_red"
/obj/item/weapon/locator /obj/item/weapon/locator
name = "locator" name = "locator"
@@ -1511,6 +1563,7 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
desc = "You can drill using this item. You dig?" desc = "You can drill using this item. You dig?"
icon = 'surgery.dmi' icon = 'surgery.dmi'
icon_state = "drill" icon_state = "drill"
hitsound = 'circsawhit.ogg'
flags = FPRINT | TABLEPASS | CONDUCT flags = FPRINT | TABLEPASS | CONDUCT
force = 15.0 force = 15.0
w_class = 1.0 w_class = 1.0
@@ -1521,6 +1574,7 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
desc = "For heavy duty cutting." desc = "For heavy duty cutting."
icon = 'surgery.dmi' icon = 'surgery.dmi'
icon_state = "saw3" icon_state = "saw3"
hitsound = 'circsawhit.ogg'
flags = FPRINT | TABLEPASS | CONDUCT flags = FPRINT | TABLEPASS | CONDUCT
force = 15.0 force = 15.0
w_class = 1.0 w_class = 1.0

View File

@@ -838,6 +838,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
var/list/names = list() var/list/names = list()
var/list/creatures = list() var/list/creatures = list()
var/list/namecounts = list() var/list/namecounts = list()
for(var/mob/M in mobs) for(var/mob/M in mobs)
var/name = M.name var/name = M.name
if (name in names) if (name in names)
@@ -846,13 +847,16 @@ Turf and target are seperate in case you want to teleport some distance from a t
else else
names.Add(name) names.Add(name)
namecounts[name] = 1 namecounts[name] = 1
if (M.real_name && M.real_name != M.name) if (M.real_name && M.real_name != M.name)
name += " \[[M.original_name? M.original_name : M.real_name]\]" name += " \[[M.original_name? M.original_name : M.real_name]\]"
if (M.stat == 2) if (M.stat == 2)
if(istype(M, /mob/dead/observer/)) if(istype(M, /mob/dead/observer/))
name += " \[ghost\]" name += " \[ghost\]"
else else
name += " \[dead\]" name += " \[dead\]"
creatures[name] = M creatures[name] = M
return creatures return creatures

View File

@@ -179,19 +179,16 @@ proc/countJob(rank)
del(W) del(W)
return equipped return equipped
/proc/AutoUpdateAI(obj/subject) /proc/AutoUpdateAI(obj/subject) // Needed for AI's to not have to click on every computer after every change.
/*
if (subject!=null) if (subject!=null)
for(var/mob/living/silicon/ai/M in world) for(var/mob/living/silicon/ai/M in world)
if ((M.client && M.machine == subject)) if ((M.client && M.machine == subject))
subject.attack_ai(M) subject.attack_ai(M)
*/
/proc/AutoUpdateTK(obj/subject) /proc/AutoUpdateTK(obj/subject) // Commented where used due to lag.
/* if (subject!=null) if (subject!=null)
for(var/obj/item/tk_grab/T in world) for(var/obj/item/tk_grab/T in world)
if (T.host) if (T.host)
var/mob/M = T.host var/mob/M = T.host
if(M.client && M.machine == subject) if(M.client && M.machine == subject)
subject.attack_hand(M) subject.attack_hand(M)
*/

View File

@@ -3,18 +3,24 @@
Announce() Announce()
for (var/obj/machinery/power/apc/temp_apc in world) for (var/obj/machinery/power/apc/temp_apc in world)
if(istype(get_area(temp_apc), /area/security/prison))
temp_apc.overload_lighting()
if(istype(get_area(temp_apc), /area/security/brig)) if(istype(get_area(temp_apc), /area/security/brig))
temp_apc.overload_lighting() temp_apc.overload_lighting()
// for (var/obj/machinery/computer/prison_shuttle/temp_shuttle in world) // for (var/obj/machinery/computer/prison_shuttle/temp_shuttle in world)
// temp_shuttle.prison_break() // temp_shuttle.prison_break()
for (var/obj/structure/closet/secure_closet/security/temp_closet in world) for (var/obj/structure/closet/secure_closet/brig/temp_closet in world)
if(istype(get_area(temp_closet), /area/security/brig)) if(istype(get_area(temp_closet), /area/security/prison))
temp_closet.locked = 0 temp_closet.locked = 0
temp_closet.icon_state = temp_closet.icon_closed temp_closet.icon_state = temp_closet.icon_closed
for (var/obj/machinery/door/airlock/security/temp_airlock in world) for (var/obj/machinery/door/airlock/security/temp_airlock in world)
if(istype(get_area(temp_airlock), /area/security/prison))
temp_airlock.prison_open()
if(istype(get_area(temp_airlock), /area/security/brig)) if(istype(get_area(temp_airlock), /area/security/brig))
temp_airlock.prison_open() temp_airlock.prison_open()
for (var/obj/machinery/door/airlock/glass/glass_security/temp_glassairlock in world) for (var/obj/machinery/door/airlock/glass/glass_security/temp_glassairlock in world)
if(istype(get_area(temp_glassairlock), /area/security/prison))
temp_glassairlock.prison_open()
if(istype(get_area(temp_glassairlock), /area/security/brig)) if(istype(get_area(temp_glassairlock), /area/security/brig))
temp_glassairlock.prison_open() temp_glassairlock.prison_open()
for (var/obj/machinery/door_timer/temp_timer in world) for (var/obj/machinery/door_timer/temp_timer in world)

View File

@@ -403,7 +403,7 @@
del(usr) del(usr)
return return
/*
/client/proc/changeling_greater_form() // Oh shit, it's on now. /client/proc/changeling_greater_form() // Oh shit, it's on now.
set category = "Changeling" set category = "Changeling"
@@ -429,7 +429,7 @@
flick("h2monkey", animation) flick("h2monkey", animation)
sleep(48) sleep(48)
//animation = null //animation = null
var/mob/living/carbon/human/tajaran/Emissary/O = new /mob/living/carbon/human/tajaran/Emissary( src ) var/mob/living/carbon/human/O = new /mob/living/carbon/human( src )//Removed Emissary shit -Sieve{R}
del(animation) del(animation)
O.real_name = usr.real_name O.real_name = usr.real_name
@@ -495,7 +495,7 @@
new_objective.owner = O.mind new_objective.owner = O.mind
O.mind.objectives += new_objective O.mind.objectives += new_objective
spawn(0) /* spawn(0)
while(emergency_shuttle.online == 0) while(emergency_shuttle.online == 0)
sleep(10) sleep(10)
command_alert("Authorization codes recieved, confirming hostile entity terminated. The emergancy shuttle is now departing.") command_alert("Authorization codes recieved, confirming hostile entity terminated. The emergancy shuttle is now departing.")
@@ -512,8 +512,8 @@
sleep(10) sleep(10)
if((locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/shuttle/escape/centcom)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/evac)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/control) ) ) if((locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/shuttle/escape/centcom)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/evac)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/control) ) )
command_alert("What the fu- Shoot it! SHOOT IT! CENTRAL COMMAND TRANSMITTING DIST- *static* Nevermind previous transmission, Nanotrasen. We're all good here. Subject contained. Standing down alert status.") command_alert("What the fu- Shoot it! SHOOT IT! CENTRAL COMMAND TRANSMITTING DIST- *static* Nevermind previous transmission, Nanotrasen. We're all good here. Subject contained. Standing down alert status.")
Tarjan shit, not recoding this -Sieve{R}*/
*/
/client/proc/changeling_fakedeath() /client/proc/changeling_fakedeath()
set category = "Changeling" set category = "Changeling"
set name = "Regenerative Stasis (20)" set name = "Regenerative Stasis (20)"

View File

@@ -41,14 +41,14 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
verbpath = /client/proc/changeling_lesser_form verbpath = /client/proc/changeling_lesser_form
/*
/obj/effect/proc_holder/power/changeling_greater_form /obj/effect/proc_holder/power/changeling_greater_form
name = "Greater Form" name = "Greater Form"
desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance." desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance."
genomecost = 250 genomecost = 250
// verbpath = /client/proc/changeling_greater_form verbpath = /client/proc/changeling_greater_form
*/
/obj/effect/proc_holder/power/fakedeath /obj/effect/proc_holder/power/fakedeath
name = "Fake Death" name = "Fake Death"
desc = "We fake our death while we heal." desc = "We fake our death while we heal."
@@ -92,7 +92,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
/obj/effect/proc_holder/power/silence_sting /obj/effect/proc_holder/power/silence_sting
name = "Silence Sting" name = "Silence Sting"
desc = "We silently sting a human, completely silencing them for a short time." desc = "We silently sting a human, completely silencing them for a short time."
helptext = "Does not provide a warning to a victim that they&apos;ve been stung, until they try to speak and can&apos;t." // Man, fuck javascript. &apos; == ' helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and can not."
genomecost = 2 genomecost = 2
allowduringlesserform = 1 allowduringlesserform = 1
@@ -190,7 +190,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
/obj/effect/proc_holder/power/LSDSting /obj/effect/proc_holder/power/LSDSting
name = "Hallucination Sting" name = "Hallucination Sting"
desc = "We evolve the ability to sting a target with a powerful hallunicationary chemical." desc = "We evolve the ability to sting a target with a powerful hallunicationary chemical."
helptext = "The target does not notice they&apos;ve been stung. The effect occurs after 30 to 60 seconds." helptext = "The target does not notice they have been stung. The effect occurs after 30 to 60 seconds."
genomecost = 3 genomecost = 3
verbpath = /client/proc/changeling_lsdsting verbpath = /client/proc/changeling_lsdsting

View File

@@ -45,7 +45,6 @@ Stealth and Camouflage Items;
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes; /obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
/obj/item/weapon/card/id/syndicate:3:Agent ID card; /obj/item/weapon/card/id/syndicate:3:Agent ID card;
/obj/item/clothing/mask/gas/voice:4:Voice Changer; /obj/item/clothing/mask/gas/voice:4:Voice Changer;
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
/obj/item/device/chameleon:4:Chameleon-Projector; /obj/item/device/chameleon:4:Chameleon-Projector;
/obj/item/weapon/stamperaser:1:Stamp Remover and Forger; /obj/item/weapon/stamperaser:1:Stamp Remover and Forger;
Whitespace:Seperator; Whitespace:Seperator;
@@ -56,11 +55,12 @@ Devices and Tools;
/obj/item/device/encryptionkey/traitor:3:Traitor Radio Key; /obj/item/device/encryptionkey/traitor:3:Traitor Radio Key;
/obj/item/device/encryptionkey/binary:3:Binary Translator Key; /obj/item/device/encryptionkey/binary:3:Binary Translator Key;
/obj/item/weapon/storage/syndie_kit/space:3:Space Suit; /obj/item/weapon/storage/syndie_kit/space:3:Space Suit;
/obj/item/clothing/glasses/thermal:3:Thermal Imaging Glasses;
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module; /obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
/obj/item/weapon/plastique:2:C-4 (Destroys walls); /obj/item/weapon/plastique:2:C-4 (Destroys walls);
/obj/item/weapon/syndie/c4explosive:4:Low Power Explosive Charge, with Detonator; /obj/item/weapon/syndie/c4explosive:4:Low Power Explosive Charge, with Detonator;
/obj/item/device/powersink:5:Powersink (DANGER!); /obj/item/device/powersink:5:Powersink (DANGER!);
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!); /obj/item/device/radio/beacon/syndicate:7:Singularity Beacon (DANGER!);
/obj/item/weapon/circuitboard/teleporter:10:Teleporter Circuit Board; /obj/item/weapon/circuitboard/teleporter:10:Teleporter Circuit Board;
Whitespace:Seperator; Whitespace:Seperator;
Implants; Implants;
@@ -70,8 +70,7 @@ Implants;
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals); /obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
Whitespace:Seperator; Whitespace:Seperator;
Badassery; Badassery;
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon); /obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
Whitespace:Seperator;"}
// Items removed from above: // Items removed from above:
/* /*

View File

@@ -94,7 +94,7 @@
traitor.objectives += block_objective traitor.objectives += block_objective
else else
for(var/datum/objective/o in SelectObjectives((traitor.current:wear_id ? traitor.current:wear_id:assignment : traitor.assigned_role), traitor)) for(var/datum/objective/o in SelectObjectives((istype(traitor.current:wear_id, /obj/item/weapon/card/id) ? traitor.current:wear_id:assignment : traitor.assigned_role), traitor))
o.owner = traitor o.owner = traitor
traitor.objectives += o traitor.objectives += o
return return
@@ -238,7 +238,7 @@
if (!R && traitor_mob.w_uniform && istype(traitor_mob.belt, /obj/item/device/radio)) if (!R && traitor_mob.w_uniform && istype(traitor_mob.belt, /obj/item/device/radio))
R = traitor_mob.belt R = traitor_mob.belt
loc = "on your belt" loc = "on your belt"
if (!R && istype(traitor_mob.l_ear, /obj/item/device/radio) || prob(10)) if (!R && istype(traitor_mob.l_ear, /obj/item/device/radio))
R = traitor_mob.l_ear R = traitor_mob.l_ear
loc = "on your head" loc = "on your head"
if (!R && istype(traitor_mob.r_ear, /obj/item/device/radio)) if (!R && istype(traitor_mob.r_ear, /obj/item/device/radio))

View File

@@ -82,28 +82,29 @@
/obj/var/list/req_access = null /obj/var/list/req_access = null
/obj/var/req_access_txt = "0" /obj/var/req_access_txt = "0"
/obj/var/list/req_one_access = null
/obj/var/req_one_access_txt = "0" /obj/var/list/req_combined_access = null
/obj/var/req_combined_access_txt = "0"
/obj/New() /obj/New()
//NOTE: If a room requires more than one access (IE: Morgue + medbay) set the req_acesss_txt to "5;6" if it requires 5 and 6 //NOTE: If a room requires more than one access (IE: Morgue + medbay) set the req_acesss_txt to "5;6" if it requires 5 and 6
if(src.req_access_txt) if(req_access_txt)
var/list/req_access_str = dd_text2list(req_access_txt,";") var/list/req_access_str = dd_text2list(req_access_txt,";")
if(!req_access) if(!req_access)
req_access = list() req_access = list()
for(var/x in req_access_str) for(var/x in req_access_str)
var/n = text2num(x) var/n = text2num(x)
if(n) if(n)
req_access += n req_access |= n
if(src.req_one_access_txt) if(req_combined_access_txt)
var/list/req_one_access_str = dd_text2list(req_one_access_txt,";") var/list/req_access_str = dd_text2list(req_combined_access_txt,";")
if(!req_one_access) if(!req_combined_access)
req_one_access = list() req_combined_access = list()
for(var/x in req_one_access_str) for(var/x in req_access_str)
var/n = text2num(x) var/n = text2num(x)
if(n) if(n)
req_one_access += n req_combined_access |= n
..() ..()
@@ -133,40 +134,47 @@
var/obj/item/device/pda/pda = I var/obj/item/device/pda/pda = I
I = pda.id I = pda.id
if(!src.req_access && !src.req_one_access) //no requirements if(!req_access) //no requirements
return 1 return 1
if(!istype(src.req_access, /list)) //something's very wrong if(!istype(req_access, /list)) //something's very wrong
return 1 return 1
if(!req_access.len) //no requirements
var/list/L = src.req_access if(!req_combined_access || !islist(req_combined_access) || !req_combined_access.len)
if(!L.len && (!src.req_one_access || !src.req_one_access.len)) //no requirements
return 1 return 1
if(!I || !istype(I, /obj/item/weapon/card/id) || !I.access) //not ID or no access if(!I || !istype(I, /obj/item/weapon/card/id) || !I.access) //not ID or no access
return 0 return 0
if(src.req_one_access && src.req_one_access.len) for(var/req in req_access)
for(var/req in src.req_one_access)
if(req in I.access) //has an access from the single access list if(req in I.access) //has an access from the single access list
return 1 return 1
for(var/req in src.req_access) if(req_combined_access && req_combined_access.len)
if(!(req in I.access)) //doesn't have this access - Leave like this DMTG for(var/req in req_combined_access)
if(!req in I.access)
return 0 return 0
return 1 return 1
return 0
/obj/proc/check_access_list(var/list/L) /obj/proc/check_access_list(var/list/L)
if(!src.req_access && !src.req_one_access) return 1 if(!req_access)
if(!istype(src.req_access, /list)) return 1 return 1
if(!src.req_access.len && (!src.req_one_access || !src.req_one_access.len)) return 1 if(!istype(req_access, /list))
if(!L) return 0 return 1
if(!istype(L, /list)) return 0 if(!req_access.len)
if(src.req_one_access && src.req_one_access.len) if(!req_combined_access || !islist(req_combined_access) || !req_combined_access.len)
for(var/req in src.req_one_access) return 1
if(!L)
return 0
if(!istype(L, /list))
return 0
for(var/req in req_access)
if(req in L) //has an access from the single access list if(req in L) //has an access from the single access list
return 1 return 1
for(var/req in src.req_access) if(req_combined_access && req_combined_access.len)
if(!(req in L)) //doesn't have this access - Leave like this DMTG for(var/req in req_combined_access)
if(!req in L)
return 0 return 0
return 1 return 1
return 0
/proc/get_access(job) /proc/get_access(job)
@@ -207,9 +215,9 @@
access_tox, access_tox_storage, access_chemistry, access_medical, access_genetics, access_engine, access_tox, access_tox_storage, access_chemistry, access_medical, access_genetics, access_engine,
access_emergency_storage, access_change_ids, access_ai_upload, access_eva, access_heads, access_emergency_storage, access_change_ids, access_ai_upload, access_eva, access_heads,
access_all_personal_lockers, access_tech_storage, access_maint_tunnels, access_bar, access_janitor, access_all_personal_lockers, access_tech_storage, access_maint_tunnels, access_bar, access_janitor,
access_crematorium, access_kitchen, access_robotics, access_cargo, access_cargo_bot, access_hydroponics, access_lawyer, access_crematorium, access_kitchen, access_robotics, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
access_theatre, access_research, access_mining, access_heads_vault, access_mining_station, access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_hop, access_RC_announce, access_keycard_auth) access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth)
if("Atmospheric Technician") if("Atmospheric Technician")
return list(access_atmospherics, access_maint_tunnels, access_emergency_storage) return list(access_atmospherics, access_maint_tunnels, access_emergency_storage)
if("Bartender") if("Bartender")
@@ -231,7 +239,7 @@
if("Shaft Miner") if("Shaft Miner")
return list(access_mining, access_mint, access_mining_station) return list(access_mining, access_mint, access_mining_station)
if("Quartermaster") if("Quartermaster")
return list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining) return list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
if("Chief Engineer") if("Chief Engineer")
return list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, return list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,

View File

@@ -122,7 +122,7 @@
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
if(!H) return 0 if(!H) return 0
H.equip_if_possible(new /obj/item/device/radio/headset/headset_cargo(H), H.slot_ears) H.equip_if_possible(new /obj/item/device/radio/headset/headset_cargo(H), H.slot_ears)
H.equip_if_possible(new /obj/item/clothing/under/rank/cargo(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/clothing/under/rank/cargotech(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes) H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/quartermaster(H), H.slot_belt) H.equip_if_possible(new /obj/item/device/pda/quartermaster(H), H.slot_belt)
return 1 return 1
@@ -146,6 +146,7 @@
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (H), H.slot_back) if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (H), H.slot_back)
if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back) if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back)
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_eng(H), H.slot_back) if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_eng(H), H.slot_back)
H.equip_if_possible(new /obj/item/device/pda/shaftminer(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/under/rank/miner(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/clothing/under/rank/miner(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes) H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
if(H.backbag == 1) if(H.backbag == 1)

View File

@@ -119,7 +119,7 @@
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_norm(H), H.slot_back) if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_norm(H), H.slot_back)
H.equip_if_possible(new /obj/item/clothing/under/rank/roboticist(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/clothing/under/rank/roboticist(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes) H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_belt) H.equip_if_possible(new /obj/item/device/pda/roboticist(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat(H), H.slot_wear_suit) H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves) H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(H), H.slot_l_hand) H.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(H), H.slot_l_hand)

View File

@@ -93,7 +93,7 @@
faction = "Station" faction = "Station"
total_positions = 1 total_positions = 1
spawn_positions = 1 spawn_positions = 1
supervisors = "the chief medical officer" supervisors = "the chief medical officer and research director"
selection_color = "#ffeef0" selection_color = "#ffeef0"

View File

@@ -304,6 +304,11 @@ var/global/datum/controller/occupations/job_master
C.assignment = title C.assignment = title
C.name = "[C.registered_name]'s ID Card ([C.assignment])" C.name = "[C.registered_name]'s ID Card ([C.assignment])"
C.access = get_access(rank) C.access = get_access(rank)
C.pin = rand(1000,9999)
C.money = 10 * rand(50,200)
H << "<b>\blue Your station account has [C.money] credits. The pin-code is [C.pin].</b>"
if(H.mind)
H.mind.memory += "Your pin-code is - [C.pin]<br>"
H.equip_if_possible(C, H.slot_wear_id) H.equip_if_possible(C, H.slot_wear_id)
if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store)) if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store))
H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears) H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears)

View File

@@ -175,7 +175,10 @@ obj/machinery/access_button
icon_state = "access_button_off" icon_state = "access_button_off"
attack_hand(mob/user) attack_hand(mob/user)
if(radio_connection) if(!allowed(user))
user << "\red Access Denied"
else if(radio_connection)
var/datum/signal/signal = new var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.data["tag"] = master_tag signal.data["tag"] = master_tag

View File

@@ -23,6 +23,8 @@ var/global/list/autolathe_recipes = list( \
new /obj/item/weapon/kitchenknife(), \ new /obj/item/weapon/kitchenknife(), \
new /obj/item/weapon/scalpel(), \ new /obj/item/weapon/scalpel(), \
new /obj/item/weapon/circular_saw(), \ new /obj/item/weapon/circular_saw(), \
new /obj/item/weapon/reagent_containers/glass/beaker(), \
new /obj/item/weapon/reagent_containers/glass/large(), \
new /obj/item/ammo_casing/shotgun/blank(), \ new /obj/item/ammo_casing/shotgun/blank(), \
new /obj/item/ammo_casing/shotgun/beanbag(), \ new /obj/item/ammo_casing/shotgun/beanbag(), \
new /obj/item/ammo_magazine/c38(), \ new /obj/item/ammo_magazine/c38(), \

View File

@@ -7,7 +7,8 @@
var/active = 0 var/active = 0
var/list/holographic_items = list() var/list/holographic_items = list()
var/damaged = 0 var/damaged = 0
var/last_change = 0
var/safety = 1
attack_ai(var/mob/user as mob) attack_ai(var/mob/user as mob)
return src.attack_hand(user) return src.attack_hand(user)
@@ -34,7 +35,11 @@
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>" dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
if(emagged) if(!safety)
if(issilicon(user) && (emagged))
dat += "<font color=red>ERROR: SAFETY PROTOCOLS UNRESPONSIVE</font><BR>"
else if(issilicon(user) && (!emagged))
dat += "<A href='?src=\ref[src];AIrelock=1'>(<font color=red>Enable Safety Protocols?</font>)</A><BR>"
dat += "<A href='?src=\ref[src];burntest=1'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>" dat += "<A href='?src=\ref[src];burntest=1'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>" dat += "Ensure the holodeck is empty before testing.<BR>"
dat += "<BR>" dat += "<BR>"
@@ -42,12 +47,11 @@
dat += "Ensure the holodeck is empty before testing.<BR>" dat += "Ensure the holodeck is empty before testing.<BR>"
dat += "<BR>" dat += "<BR>"
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>" dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
else else if(safety)
if(issilicon(user)) if(issilicon(user))
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>" dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Disable Safety Protocols?</font>)</A><BR>"
dat += "<BR>" dat += "<BR>"
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>" dat += "Safety Protocols are <font color=green> ENABLED </font><BR>"
user << browse(dat, "window=computer;size=400x500") user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer") onclose(user, "computer")
@@ -100,7 +104,13 @@
else if(href_list["AIoverride"]) else if(href_list["AIoverride"])
if(!issilicon(usr)) return if(!issilicon(usr)) return
emagged = 1 safety = 0
log_admin("[usr] ([usr.ckey]) disabled Holodeck Safeties.")
message_admins("[usr] ([usr.ckey]) disabled Holodeck Safeties.")
else if(href_list["AIrelock"])
if(!issilicon(usr)) return
safety = 1
src.add_fingerprint(usr) src.add_fingerprint(usr)
src.updateUsrDialog() src.updateUsrDialog()
@@ -140,8 +150,11 @@
if(istype(D, /obj/item/weapon/card/emag) && !emagged) if(istype(D, /obj/item/weapon/card/emag) && !emagged)
playsound(src.loc, 'sparks4.ogg', 75, 1) playsound(src.loc, 'sparks4.ogg', 75, 1)
emagged = 1 emagged = 1
safety = 0
user << "\blue You vastly increase projector power and override the safety and security protocols." user << "\blue You vastly increase projector power and override the safety and security protocols."
user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintence and do not use the simulator." user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintence and do not use the simulator."
log_admin("[user] ([user.ckey]) emagged Holodeck Safeties.")
message_admins("[user] ([user.ckey]) emagged Holodeck Safeties.")
src.updateUsrDialog() src.updateUsrDialog()
return return
@@ -233,6 +246,15 @@
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A) /obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
if(world.time < (last_change + 25))
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating projetion apparatus.")
last_change = world.time
return
last_change = world.time
active = 1 active = 1
for(var/item in holographic_items) for(var/item in holographic_items)
@@ -330,7 +352,64 @@
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W var/obj/item/weapon/grab/G = W
if(G.state<2) if(G.state<2)
user << "\red You need a better grip to do that!" if(ishuman(G.affecting))
var/mob/living/carbon/human/H = G.affecting
var/datum/organ/external/affecting = H.get_organ("head")
//Fucking hacky, but whatever.
var/obj/machinery/computer/HolodeckControl/HC = locate() in world
if(istype(HC) && HC.safety) //If the computer exists, and the safety is active...
if(prob(25))
add_blood(G.affecting)
H.halloss += rand(10, 15)
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] with enough force to engage \the [src]'s safeties!",\
"\red You smash \the [H]'s head on \the [src] with enough force to engage \the [src]'s safeties!",\
"\red You hear a whine as \the [src]'s engage.")
else
H.halloss += rand(5, 10)
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src]!",\
"\red You smash \the [H]'s head on \the [src]!",\
"\red You hear a whine as \the [src]'s is hit by something dense.")
H.UpdateDamageIcon()
H.updatehealth()
playsound(src.loc, 'tablehit1.ogg', 50, 1, -3)
else //Lets do REAL DAMAGE, YEAH!
G.affecting.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been smashed on a table by [G.assailant.name] ([G.assailant.ckey])</font>")
G.assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Smashed [G.affecting.name] ([G.affecting.ckey]) on a table.</font>")
log_admin("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
message_admins("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
log_attack("<font color='red'>[G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.</font>")
if(prob(25))
add_blood(G.affecting)
affecting.take_damage(rand(10,15), 0)
H.Weaken(2)
if(prob(20)) // One chance in 20 to DENT THE TABLE
affecting.take_damage(rand(0,5), 0) //Extra damage
if(dented)
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] with enough force to further deform \the [src]!\nYou wish you could unhear that sound.",\
"\red You smash \the [H]'s head on \the [src] with enough force to leave another dent!\n[prob(50)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
else
dented = 1
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] so hard it left a dent!\nYou wish you could unhear that sound.",\
"\red You smash \the [H]'s head on \the [src] with enough force to leave a dent!\n[prob(5)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
else if(prob(50))
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
"\red You hear the nauseating crunch of bone and gristle on solid metal, the noise echoing through the room.")
else
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
"\red You hear the nauseating crunch of bone and gristle on solid metal and the gurgling gasp of someone who is trying to breathe through their own blood.")
else
affecting.take_damage(rand(5,10), 0)
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src]!",\
"\red You smash \the [H]'s head on \the [src]!",\
"\red You hear the nauseating crunch of bone and gristle on solid metal.")
H.UpdateDamageIcon()
H.updatehealth()
playsound(src.loc, 'tablehit1.ogg', 50, 1, -3)
return return
G.affecting.loc = src.loc G.affecting.loc = src.loc
G.affecting.Weaken(5) G.affecting.Weaken(5)

View File

@@ -42,12 +42,13 @@
dat += "<A HREF='?src=\ref[user];mach_close=op'>Close</A><br><br>" //| <A HREF='?src=\ref[user];update=1'>Update</A>" dat += "<A HREF='?src=\ref[user];mach_close=op'>Close</A><br><br>" //| <A HREF='?src=\ref[user];update=1'>Update</A>"
if(src.table && (src.table.check_victim())) if(src.table && (src.table.check_victim()))
src.victim = src.table.victim src.victim = src.table.victim
if(istype(victim))
dat += {" dat += {"
<B>Patient Information:</B><BR> <B>Patient Information:</B><BR>
<BR> <BR>
<B>Name:</B> [src.victim.real_name]<BR> <B>Name:</B> [src.victim.real_name]<BR>
<B>Age:</B> [src.victim.age]<BR> <B>Age:</B> [src.victim.age]<BR>
<B>Blood Type:</B> [src.victim.dna.b_type]<BR> <B>Blood Type:</B> [(victim.dna? victim.dna.b_type : "ERROR")]<BR>
<BR> <BR>
<B>Health:</B> [src.victim.health]<BR> <B>Health:</B> [src.victim.health]<BR>
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR> <B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
@@ -55,6 +56,19 @@
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR> <B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR> <B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR> <B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
"}
else if(istype(victim, /mob/living))
dat += {"
<B>Patient Information:</B><BR>
<BR>
<B>Name:</B> [src.victim.real_name]<BR>
<B>Age:</B> [src.victim.age]<BR>
<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.getFireLoss()]<BR>
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
"} "}
else else
src.victim = null src.victim = null

View File

@@ -257,7 +257,7 @@
if(istype(P, /obj/item/weapon/circuitboard) && !circuit) if(istype(P, /obj/item/weapon/circuitboard) && !circuit)
var/obj/item/weapon/circuitboard/B = P var/obj/item/weapon/circuitboard/B = P
if(B.board_type == "computer") if(B.board_type == "computer")
if(B.build_path != "") if(B.build_path != "" && !isnull(B.build_path))
playsound(src.loc, 'Deconstruct.ogg', 50, 1) playsound(src.loc, 'Deconstruct.ogg', 50, 1)
user << "\blue You place the circuit board inside the frame." user << "\blue You place the circuit board inside the frame."
src.icon_state = "1" src.icon_state = "1"
@@ -324,7 +324,8 @@
if(istype(P, /obj/item/weapon/screwdriver)) if(istype(P, /obj/item/weapon/screwdriver))
playsound(src.loc, 'Screwdriver.ogg', 50, 1) playsound(src.loc, 'Screwdriver.ogg', 50, 1)
user << "\blue You connect the monitor." user << "\blue You connect the monitor."
var/B = new src.circuit.build_path ( src.loc ) if(circuit && circuit.build_path)
var/B = new circuit.build_path (loc)
if(circuit.powernet) B:powernet = circuit.powernet if(circuit.powernet) B:powernet = circuit.powernet
if(circuit.id) B:id = circuit.id if(circuit.id) B:id = circuit.id
if(circuit.records) B:records = circuit.records if(circuit.records) B:records = circuit.records

View File

@@ -59,7 +59,7 @@
if (I && istype(I)) if (I && istype(I))
if(src.check_access(I)) if(src.check_access(I))
authenticated = 1 authenticated = 1
if(20 in I.access) if((access_hop in I.access) || (access_captain in I.access))
authenticated = 2 authenticated = 2
if("logout") if("logout")
authenticated = 0 authenticated = 0
@@ -71,7 +71,7 @@
var/obj/item/device/pda/pda = I var/obj/item/device/pda/pda = I
I = pda.id I = pda.id
if (I && istype(I)) if (I && istype(I))
if(access_captain in I.access) if((access_hop in I.access) || (access_captain in I.access))
var/old_level = security_level var/old_level = security_level
if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN

View File

@@ -16,7 +16,7 @@
//only load blast doors for map-defined departments for the moment //only load blast doors for map-defined departments for the moment
switch(department) switch(department)
if("SinguloEngineering-Antiqua") if("Engineering")
connectedDoorIds.Add("Engineering Primary Access") connectedDoorIds.Add("Engineering Primary Access")
connectedDoorIds.Add("Engineering Secondary Access") connectedDoorIds.Add("Engineering Secondary Access")
connectedDoorIds.Add("Fore Maintenance Access") connectedDoorIds.Add("Fore Maintenance Access")
@@ -34,7 +34,7 @@
connectedDoorIds.Add("Central aft shell access") connectedDoorIds.Add("Central aft shell access")
connectedDoorIds.Add("Port aft shell access") connectedDoorIds.Add("Port aft shell access")
connectedDoorIds.Add("Starboard aft shell access") connectedDoorIds.Add("Starboard aft shell access")
if("Medbay-Exodus") if("Medbay")
connectedDoorIds.Add("Genetics Outer Shutters") connectedDoorIds.Add("Genetics Outer Shutters")
connectedDoorIds.Add("Genetics Inner Shutters") connectedDoorIds.Add("Genetics Inner Shutters")
connectedDoorIds.Add("Chemistry Outer Shutters") connectedDoorIds.Add("Chemistry Outer Shutters")

View File

@@ -86,6 +86,8 @@
background = "'background-color:#CD853F;'" background = "'background-color:#CD853F;'"
if("Released") if("Released")
background = "'background-color:#3BB9FF;'" background = "'background-color:#3BB9FF;'"
if("Deceased")
background = "'background-color:#CD853F;'"
if("None") if("None")
background = "'background-color:#00FF7F;'" background = "'background-color:#00FF7F;'"
if("") if("")
@@ -171,6 +173,8 @@
background = "'background-color:#CD853F;'" background = "'background-color:#CD853F;'"
if("Released") if("Released")
background = "'background-color:#3BB9FF;'" background = "'background-color:#3BB9FF;'"
if("Deceased")
background = "'background-color:#CD853F;'"
if("None") if("None")
background = "'background-color:#00FF7F;'" background = "'background-color:#00FF7F;'"
if("") if("")
@@ -472,6 +476,7 @@ What a mess.*/
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=incarcerated'>Incarcerated</a></li>" temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=incarcerated'>Incarcerated</a></li>"
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=parolled'>Parolled</a></li>" temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=parolled'>Parolled</a></li>"
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=released'>Released</a></li>" temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=released'>Released</a></li>"
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=deceased'>Deceased</a></li>"
temp += "</ul>" temp += "</ul>"
if("rank") if("rank")
var/list/L = list( "Head of Personnel", "Captain", "AI" ) var/list/L = list( "Head of Personnel", "Captain", "AI" )
@@ -525,6 +530,8 @@ What a mess.*/
active2.fields["criminal"] = "Parolled" active2.fields["criminal"] = "Parolled"
if("released") if("released")
active2.fields["criminal"] = "Released" active2.fields["criminal"] = "Released"
if("deceased")
active2.fields["criminal"] = "Deceased"
if ("Delete Record (Security) Execute") if ("Delete Record (Security) Execute")
if (active2) if (active2)

View File

@@ -1,3 +1,35 @@
/obj/machinery/door_control
name = "remote door-control"
desc = "It controls doors, remotely."
icon = 'stationobjs.dmi'
icon_state = "doorctrl0"
desc = "A remote control-switch for a door."
var/id = null
var/range = 10
var/normaldoorcontrol = 0
var/desiredstate = 0 // Zero is closed, 1 is open.
var/specialfunctions = 1
/*
Bitflag, 1= open
2= idscan,
4= bolts
8= shock
16= door safties
*/
var/exposedwires = 0
var/wires = 3
/*
Bitflag, 1=checkID
2=Network Access
*/
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/door_control/attack_ai(mob/user as mob) /obj/machinery/door_control/attack_ai(mob/user as mob)
if(wires & 2) if(wires & 2)
return src.attack_hand(user) return src.attack_hand(user)
@@ -31,6 +63,7 @@
return return
if(!allowed(user) && (wires & 1)) if(!allowed(user) && (wires & 1))
user << "\red Access Denied"
flick("doorctrl-denied",src) flick("doorctrl-denied",src)
return return
@@ -49,8 +82,8 @@
if(specialfunctions & IDSCAN) if(specialfunctions & IDSCAN)
D.aiDisabledIdScanner = 1 D.aiDisabledIdScanner = 1
if(specialfunctions & BOLTS) if(specialfunctions & BOLTS)
spawn(5)
D.locked = 1 D.locked = 1
D.update_icon()
if(specialfunctions & SHOCK) if(specialfunctions & SHOCK)
D.secondsElectrified = -1 D.secondsElectrified = -1
@@ -63,8 +96,8 @@
if(specialfunctions & IDSCAN) if(specialfunctions & IDSCAN)
D.aiDisabledIdScanner = 0 D.aiDisabledIdScanner = 0
if(specialfunctions & BOLTS) if(specialfunctions & BOLTS)
spawn(5)
D.locked = 0 D.locked = 0
D.update_icon()
if(specialfunctions & SHOCK) if(specialfunctions & SHOCK)
D.secondsElectrified = 0 D.secondsElectrified = 0

View File

@@ -141,7 +141,7 @@
dat += "<a href='?src=\ref[src];timing=1'>Activate Timer and close door</a><br/>" dat += "<a href='?src=\ref[src];timing=1'>Activate Timer and close door</a><br/>"
dat += "Time Left: [(minute ? text("[minute]:") : null)][second] <br/>" dat += "Time Left: [(minute ? text("[minute]:") : null)][second] <br/>"
dat += "<a href='?src=\ref[src];tp=-600'>-</a> <a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a><br/> <A href='?src=\ref[src];tp=600'>+</a><br/>" dat += "<a href='?src=\ref[src];tp=-600'>-</a> <a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a> <A href='?src=\ref[src];tp=600'>+</a><br/>"
for(var/obj/machinery/flasher/F in targets) for(var/obj/machinery/flasher/F in targets)
if(F.last_flash && (F.last_flash + 150) > world.time) if(F.last_flash && (F.last_flash + 150) > world.time)

View File

@@ -820,7 +820,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
var/t_amount = 0 var/t_amount = 0
while ( t_amount < (yield * parent.yieldmod )) while ( t_amount < (yield * parent.yieldmod ))
var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new produce(user.loc, potency) // User gets a consumable var/obj/item/weapon/grown/t_prod = new produce(user.loc, potency) // User gets a consumable -QualityVan
t_prod.seed = mypath t_prod.seed = mypath
t_prod.species = species t_prod.species = species
t_prod.lifespan = lifespan t_prod.lifespan = lifespan
@@ -828,7 +828,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
t_prod.maturation = maturation t_prod.maturation = maturation
t_prod.production = production t_prod.production = production
t_prod.yield = yield t_prod.yield = yield
t_prod.potency = potency t_prod.changePotency(potency) // -QualityVan
t_prod.plant_type = plant_type t_prod.plant_type = plant_type
t_amount++ t_amount++
@@ -840,7 +840,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
var/t_amount = 0 var/t_amount = 0
while ( t_amount < (yield * parent.yieldmod )) while ( t_amount < (yield * parent.yieldmod ))
var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new produce(user.loc, potency) // User gets a consumable var/obj/item/weapon/grown/t_prod = new produce(user.loc, potency) // User gets a consumable -QualityVan
t_prod.seed = mypath t_prod.seed = mypath
t_prod.species = species t_prod.species = species
t_prod.lifespan = lifespan t_prod.lifespan = lifespan
@@ -848,7 +848,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
t_prod.maturation = maturation t_prod.maturation = maturation
t_prod.production = production t_prod.production = production
t_prod.yield = yield t_prod.yield = yield
t_prod.potency = potency t_prod.changePotency(potency) // -QualityVan
t_prod.plant_type = plant_type t_prod.plant_type = plant_type
t_amount++ t_amount++

View File

@@ -677,10 +677,6 @@ var/list/obj/machinery/newscaster/allCasters = list() //list that will contain r
var/scribble="" var/scribble=""
var/scribble_page = null var/scribble_page = null
/*obj/item/weapon/newspaper/attack_hand(mob/user as mob)
..()
world << "derp"*/
obj/item/weapon/newspaper/attack_self(mob/user as mob) obj/item/weapon/newspaper/attack_self(mob/user as mob)
if(ishuman(user)) if(ishuman(user))
var/mob/living/carbon/human/human_user = user var/mob/living/carbon/human/human_user = user

View File

@@ -59,9 +59,9 @@ datum/controller/game_controller
setupgenetics() setupgenetics()
for(var/i = 0, i < max_secret_rooms, i++) // for(var/i = 0, i < max_secret_rooms, i++)
make_mining_asteroid_secret() // make_mining_asteroid_secret()
// Because energy cutlasses, facehuggers, and empty rooms are silly. FOR NOW. - Erthilo
syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round. syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round.
syndicate_code_response = generate_code_phrase() syndicate_code_response = generate_code_phrase()

View File

@@ -32,7 +32,7 @@
A.yo = targloc.y - curloc.y A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x A.xo = targloc.x - curloc.x
chassis.use_power(energy_drain) chassis.use_power(energy_drain)
A.process() A.fired()
chassis.log_message("Fired from [src.name], targeting [target].") chassis.log_message("Fired from [src.name], targeting [target].")
do_after_cooldown() do_after_cooldown()
return return
@@ -215,7 +215,7 @@
A.yo = targloc.y - curloc.y A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x A.xo = targloc.x - curloc.x
set_ready_state(0) set_ready_state(0)
A.process() A.fired()
log_message("Fired from [src.name], targeting [target].") log_message("Fired from [src.name], targeting [target].")
do_after_cooldown() do_after_cooldown()
return return
@@ -256,7 +256,7 @@
A.current = curloc A.current = curloc
A.yo = targloc.y - curloc.y A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x A.xo = targloc.x - curloc.x
A.process() A.fired()
sleep(2) sleep(2)
set_ready_state(0) set_ready_state(0)
log_message("Fired from [src.name], targeting [target].") log_message("Fired from [src.name], targeting [target].")

View File

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

View File

@@ -13,7 +13,7 @@
New() New()
..() ..()
sleep(2) sleep(2)
new /obj/item/clothing/under/rank/cargo(src) new /obj/item/clothing/under/rank/cargotech(src)
new /obj/item/clothing/shoes/brown(src) new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/headset_cargo(src) new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/clothing/gloves/black(src) new /obj/item/clothing/gloves/black(src)

View File

@@ -16,7 +16,8 @@
new /obj/item/clothing/under/rank/hydroponics(src) new /obj/item/clothing/under/rank/hydroponics(src)
new /obj/item/clothing/suit/storage/apron(src) new /obj/item/clothing/suit/storage/apron(src)
new /obj/item/clothing/under/rank/hydroponics(src) new /obj/item/clothing/under/rank/hydroponics(src)
new /obj/item/clothing/head/helmet/greenbandana(src)
new /obj/item/device/analyzer/plant_analyzer(src) new /obj/item/device/analyzer/plant_analyzer(src)
new /obj/item/clothing/head/helmet/greenbandana(src)
new /obj/item/weapon/minihoe(src)
new /obj/item/weapon/hatchet(src) new /obj/item/weapon/hatchet(src)
return return

View File

@@ -72,6 +72,20 @@
new /obj/item/device/pda/medical(src) new /obj/item/device/pda/medical(src)
new /obj/item/weapon/storage/firstaid/regular(src) new /obj/item/weapon/storage/firstaid/regular(src)
new /obj/item/device/flashlight/pen(src) new /obj/item/device/flashlight/pen(src)
switch(pick(list("blue", "green", "purple")))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/purple(src)
switch(pick(list("blue", "green", "purple")))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/weapon/cartridge/medical(src) new /obj/item/weapon/cartridge/medical(src)
new /obj/item/device/radio/headset/headset_med(src) new /obj/item/device/radio/headset/headset_med(src)
return return

View File

@@ -144,9 +144,9 @@
new /obj/item/device/pda/security(src) new /obj/item/device/pda/security(src)
new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/storage/belt/security(src) new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/flashbang(src)
new /obj/item/weapon/pepperspray(src)
new /obj/item/device/flash(src) new /obj/item/device/flash(src)
new /obj/item/weapon/pepperspray(src)
new /obj/item/weapon/flashbang(src)
new /obj/item/weapon/melee/baton(src) new /obj/item/weapon/melee/baton(src)
new /obj/item/clothing/glasses/sunglasses/sechud(src) new /obj/item/clothing/glasses/sunglasses/sechud(src)
return return

View File

@@ -110,6 +110,9 @@
default_cartridge = /obj/item/weapon/cartridge/quartermaster default_cartridge = /obj/item/weapon/cartridge/quartermaster
icon_state = "pda-q" icon_state = "pda-q"
/obj/item/device/pda/shaftminer
icon_state = "pda-miner"
/obj/item/device/pda/syndicate /obj/item/device/pda/syndicate
default_cartridge = /obj/item/weapon/cartridge/syndicate default_cartridge = /obj/item/weapon/cartridge/syndicate
icon_state = "pda-syn" icon_state = "pda-syn"
@@ -129,6 +132,11 @@
//default_cartridge = /obj/item/weapon/cartridge/botanist //default_cartridge = /obj/item/weapon/cartridge/botanist
icon_state = "pda-hydro" icon_state = "pda-hydro"
/obj/item/device/pda/roboticist
icon_state = "pda-robot"
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition with a transparent case."
note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Turbo Edition!"
/obj/item/device/pda/librarian /obj/item/device/pda/librarian
icon_state = "pda-libb" icon_state = "pda-libb"
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader." desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader."
@@ -500,11 +508,15 @@
U << browse(null, "window=pda") U << browse(null, "window=pda")
return return
if("Message") if("Message")
var/t = input(U, "Please enter message", name, null) as text var/t
if(!href_list["pAI_mess"])
t = input(U, "Please enter message", name, null) as text
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN) t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
else
t = href_list["pAI_mess"]
if (!t) if (!t)
return return
if (!in_range(src, U) && loc != U) if (!in_range(src, U) && loc != U && !href_list["pAI_mess"])
return return
var/obj/item/device/pda/P = locate(href_list["target"]) var/obj/item/device/pda/P = locate(href_list["target"])
@@ -697,7 +709,7 @@
honkamt-- honkamt--
playsound(loc, 'bikehorn.ogg', 30, 1) playsound(loc, 'bikehorn.ogg', 30, 1)
if(U.machine == src)//Final safety. if(U.machine == src && !href_list["pAI_mess"])//Final safety.
attack_self(U)//It auto-closes the menu prior if the user is not in range and so on. attack_self(U)//It auto-closes the menu prior if the user is not in range and so on.
else else
U.machine = null U.machine = null

View File

@@ -411,13 +411,14 @@ steam.start() -- spawns the effect
var/obj/R = new /obj() var/obj/R = new /obj()
R.reagents = new/datum/reagents(500) R.reagents = new/datum/reagents(500)
R.reagents.my_atom = R R.reagents.my_atom = R
if(reagents)
reagents.trans_to(R, reagents.total_volume/divisor) reagents.trans_to(R, reagents.total_volume/divisor)
for(var/atom/A in view(1, src)) for(var/atom/A in view(1, src))
if(reagents.has_reagent("radium")||reagents.has_reagent("uranium")||reagents.has_reagent("carbon")||reagents.has_reagent("thermite"))//Prevents unholy radium spam by reducing the number of 'greenglows' down to something reasonable -Sieve if(reagents.has_reagent("radium")||reagents.has_reagent("uranium")||reagents.has_reagent("carbon")||reagents.has_reagent("thermite"))//Prevents unholy radium spam by reducing the number of 'greenglows' down to something reasonable -Sieve
if(prob(5)) if(prob(5))
R.reagents.reaction(A) R.reagents.reaction(A)
del(R) del(R)
else else if(R && R.reagents)
R.reagents.reaction(A) R.reagents.reaction(A)
del(R) del(R)
return return
@@ -1033,7 +1034,8 @@ steam.start() -- spawns the effect
user << "\blue You hit the metal foam to no effect." user << "\blue You hit the metal foam to no effect."
CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
if(air_group) return 0 if(!istype(mover))
return 0
return !density return !density

View File

@@ -63,6 +63,9 @@
O.place = "handcuff" O.place = "handcuff"
M.requests += O M.requests += O
spawn( 0 ) spawn( 0 )
if(istype(src, /obj/item/weapon/handcuffs/cable))
playsound(src.loc, 'cablecuff.ogg', 30, 1, -2)
else
playsound(src.loc, 'handcuffs.ogg', 30, 1, -2) playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
O.process() O.process()
return return
@@ -77,6 +80,9 @@
O.place = "handcuff" O.place = "handcuff"
M.requests += O M.requests += O
spawn( 0 ) spawn( 0 )
if(istype(src, /obj/item/weapon/handcuffs/cable))
playsound(src.loc, 'cablecuff.ogg', 30, 1, -2)
else
playsound(src.loc, 'handcuffs.ogg', 30, 1, -2) playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
O.process() O.process()
return return
@@ -372,7 +378,7 @@
if(M:brain_op_stage == 4.0) if(M:brain_op_stage == 4.0)
for(var/mob/O in viewers(M, null)) for(var/mob/O in viewers(M, null))
if(O == (user || M)) if(O == user || O == M)
continue continue
if(M == user) if(M == user)
O.show_message(text("\red [user] inserts [src] into his head!"), 1) O.show_message(text("\red [user] inserts [src] into his head!"), 1)

View File

@@ -38,7 +38,7 @@
/obj/item/weapon/camera_test /obj/item/weapon/camera_test
name = "camera" name = "camera"
icon = 'items.dmi' icon = 'items.dmi'
desc = "A one use - polaroid camera. 10 photos left." desc = "A polaroid camera. It has 30 photos left."
icon_state = "camera" icon_state = "camera"
item_state = "electropack" item_state = "electropack"
w_class = 2.0 w_class = 2.0
@@ -47,6 +47,7 @@
throwforce = 5 throwforce = 5
throw_speed = 4 throw_speed = 4
throw_range = 10 throw_range = 10
var/pictures_max = 30
var/pictures_left = 30 var/pictures_left = 30
var/can_use = 1 var/can_use = 1
@@ -60,6 +61,13 @@
var/icon/img //Big photo image var/icon/img //Big photo image
var/scribble //Scribble on the back. var/scribble //Scribble on the back.
/obj/item/weapon/camera_film
name = "film cartridge"
icon = 'items.dmi'
desc = "A camera film cartridge. Insert it into a camera to reload it."
icon_state = "film"
item_state = "electropack"
w_class = 1.0
/obj/item/weapon/photo/attack_self(var/mob/user as mob) /obj/item/weapon/photo/attack_self(var/mob/user as mob)
..() ..()
@@ -145,9 +153,11 @@
if (can_use) if (can_use)
can_use = 0 can_use = 0
icon_state = "camera_off" icon_state = "camera_off"
usr << "\red You turn the camera off."
else else
can_use = 1 can_use = 1
icon_state = "camera" icon_state = "camera"
usr << "\blue You turn the camera on."
/obj/item/weapon/camera_test/proc/get_mobs(turf/the_turf as turf) /obj/item/weapon/camera_test/proc/get_mobs(turf/the_turf as turf)
var/mob_detail var/mob_detail
@@ -209,7 +219,7 @@
playsound(src.loc, pick('polaroid1.ogg','polaroid2.ogg'), 75, 1, -3) playsound(src.loc, pick('polaroid1.ogg','polaroid2.ogg'), 75, 1, -3)
pictures_left-- pictures_left--
src.desc = "A one use - polaroid camera. [pictures_left] photos left." src.desc = "A polaroid camera. It has [pictures_left] photos left."
user << "\blue [pictures_left] photos left." user << "\blue [pictures_left] photos left."
can_use = 0 can_use = 0
icon_state = "camera_off" icon_state = "camera_off"
@@ -217,4 +227,16 @@
can_use = 1 can_use = 1
icon_state = "camera" icon_state = "camera"
/obj/item/weapon/camera_test/attackby(A as obj, mob/user as mob)
if (istype(A, /obj/item/weapon/camera_film))
if (src.pictures_left >= pictures_max)
user << "\blue It's already full!"
return 1
else
del(A)
src.pictures_left = src.pictures_max
src.desc = "A polaroid camera. It has [pictures_left] photos left."
user << text("\blue You reload the camera film!",)
user.update_clothing()
return 1
return

View File

@@ -107,6 +107,12 @@ FINGERPRINT CARD
else else
..() ..()
/obj/item/weapon/card/id/proc/checkaccess(p,var/mob/user)
if(p == pin)
user << "\green Access granted"
return 1
user << "\red Access denied"
return 0
// FINGERPRINT HOLDER // FINGERPRINT HOLDER

View File

@@ -97,6 +97,10 @@ Craftables (Cob pipes, potato batteries, pumpkinheads)
usr << "All the leaves have fallen off the nettle from violent whacking." usr << "All the leaves have fallen off the nettle from violent whacking."
del(src) del(src)
/obj/item/weapon/grown/nettle/changePotency(newValue) //-QualityVan
potency = newValue
force = round((5+potency/5), 1)
// Deathnettle // Deathnettle
@@ -137,6 +141,10 @@ Craftables (Cob pipes, potato batteries, pumpkinheads)
usr << "All the leaves have fallen off the deathnettle from violent whacking." usr << "All the leaves have fallen off the deathnettle from violent whacking."
del(src) del(src)
/obj/item/weapon/grown/deathnettle/changePotency(newValue) //-QualityVan
potency = newValue
force = round((5+potency/2.5), 1)
//Crafting //Crafting
/obj/item/weapon/corncob/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/item/weapon/corncob/attackby(obj/item/weapon/W as obj, mob/user as mob)

View File

@@ -164,10 +164,10 @@ KNIFE
playsound(M, 'trayhit2.ogg', 50, 1) //sound playin' playsound(M, 'trayhit2.ogg', 50, 1) //sound playin'
return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3 return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3
var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later. var/mob/living/carbon/human/H = M // Let's have this ready for later.
if(!(user.zone_sel.selecting == ("eyes" || "head"))) //////////////hitting anything else other than the eyes if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head") //hitting anything else other than the eyes
if(prob(33)) if(prob(33))
src.add_blood(H) src.add_blood(H)
var/turf/location = H.loc var/turf/location = H.loc

View File

@@ -27,18 +27,17 @@ MEDICAL
return 1 return 1
var/stoppedblood = 0 var/stoppedblood = 0
if(ishuman(M)) if(hasorgans(M))
var/mob/living/carbon/human/H = M var/datum/organ/external/affecting = M:get_organ("chest")
var/datum/organ/external/affecting = H.get_organ("chest")
if(istype(user, /mob/living/carbon/human)) if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/user2 = user var/mob/living/carbon/human/user2 = user
affecting = H.get_organ(check_zone(user2.zone_sel.selecting)) affecting = M:get_organ(check_zone(user2.zone_sel.selecting))
else else
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0) if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
affecting = H.get_organ("head") affecting = M:get_organ("head")
if(affecting.destroyed && !affecting.gauzed) if(affecting.destroyed && !affecting.gauzed)
user.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does [user.gender == MALE? "his" : "her"] best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.") user.visible_message("\red You do your best to stop the bleeding from [M]'s stump.", "\red [user] does [user.gender == MALE? "his" : "her"] best to stem [M]'s bleeding from [M.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
affecting.gauzed = 1 affecting.gauzed = 1
use(1) use(1)
return return
@@ -69,7 +68,7 @@ MEDICAL
if (user && stoppedblood) if (user && stoppedblood)
if (M != user) if (M != user)
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.") user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
else else
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.") user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
else if(user) else if(user)
@@ -146,18 +145,17 @@ MEDICAL
return 1 return 1
var/stoppedblood = 0 var/stoppedblood = 0
if(ishuman(M)) if(hasorgans(M))
var/mob/living/carbon/human/H = M var/datum/organ/external/affecting = M:get_organ("chest")
var/datum/organ/external/affecting = H.get_organ("chest")
if(istype(user, /mob/living/carbon/human)) if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/user2 = user var/mob/living/carbon/human/user2 = user
affecting = H.get_organ(check_zone(user2.zone_sel.selecting)) affecting = M:get_organ(check_zone(user2.zone_sel.selecting))
else else
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0) if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
affecting = H.get_organ("head") affecting = M:get_organ("head")
if(affecting.destroyed && !affecting.gauzed) if(affecting.destroyed && !affecting.gauzed)
H.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does their best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.") M.visible_message("\red You do your best to stop the bleeding from [M]'s stump.", "\red [user] does their best to stem [M]'s bleeding from [M.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
affecting.gauzed = 1 affecting.gauzed = 1
use(1) use(1)
return return
@@ -179,7 +177,7 @@ MEDICAL
if (user && stoppedblood) if (user && stoppedblood)
if (M != user) if (M != user)
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.") user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
else else
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.") user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
else if(user) else if(user)

View File

@@ -1,4 +1,6 @@
/obj/item/robot_parts/l_arm/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) /obj/item/robot_parts/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
var/limbloc = null
if(!istype(M)) if(!istype(M))
return ..() return ..()
@@ -8,7 +10,18 @@
if(!istype(M, /mob/living/carbon/human)) if(!istype(M, /mob/living/carbon/human))
return ..() return ..()
if(user.zone_sel.selecting == "l_arm") if((user.zone_sel.selecting == "l_arm") && (istype(src, /obj/item/robot_parts/l_arm)))
limbloc = "l_hand"
else if((user.zone_sel.selecting == "r_arm") && (istype(src, /obj/item/robot_parts/r_arm)))
limbloc = "r_hand"
else if((user.zone_sel.selecting == "r_leg") && (istype(src, /obj/item/robot_parts/r_leg)))
limbloc = "r_foot"
else if((user.zone_sel.selecting == "l_leg") && (istype(src, /obj/item/robot_parts/l_leg)))
limbloc = "l_foot"
else
user << "\red That doesn't fit there!"
return ..()
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
var/datum/organ/external/S = H.organs[user.zone_sel.selecting] var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
if(S.destroyed) if(S.destroyed)
@@ -17,12 +30,12 @@
return 0 return 0
if(M != user) if(M != user)
M.visible_message( \ M.visible_message( \
"\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \ "\red [user] is beginning to attach \the [src] where [H]'s [S.display_name] used to be.", \
"\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].") "\red [user] begins to attach \the [src] where your [S.display_name] used to be.")
else else
M.visible_message( \ M.visible_message( \
"\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \ "\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \
"\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].") "\red You begin to attach \the [src] where your [S.display_name] used to be.")
if(do_mob(user, H, 100)) if(do_mob(user, H, 100))
if(M != user) if(M != user)
@@ -42,196 +55,14 @@
S.attachable = 0 S.attachable = 0
S.destroyed = 0 S.destroyed = 0
S.robot = 1 S.robot = 1
var/datum/organ/external/T = H.organs["l_hand"] var/datum/organ/external/T = H.organs[limbloc]
T.attachable = 0 T.attachable = 0
T.destroyed = 0 T.destroyed = 0
T.broken = 0 T.broken = 0
T.robot = 1 T.robot = 1
user.drop_item() del(src)
M.update_body() M.update_body()
M.updatehealth() M.updatehealth()
M.UpdateDamageIcon() M.UpdateDamageIcon()
return 1 return 1
else
user << "\red That doesn't fit there!."
return ..()
/obj/item/robot_parts/r_arm/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
if(!istype(M))
return ..()
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/stool/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66))))
return ..()
if(!istype(M, /mob/living/carbon/human))
return ..()
if(user.zone_sel.selecting == "r_arm")
var/mob/living/carbon/human/H = M
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
if(S.destroyed)
if(!S.attachable)
user << "\red The wound is not ready for a replacement!"
return 0
if(M != user)
M.visible_message( \
"\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \
"\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].")
else
M.visible_message( \
"\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \
"\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].")
if(do_mob(user, H, 100))
if(M != user)
M.visible_message( \
"\red [user] finishes attaching [H]'s new [S.display_name].", \
"\red [user] finishes attaching your new [S.display_name].")
else
M.visible_message( \
"\red [user] finishes attaching \his new [S.display_name].", \
"\red You finish attaching your new [S.display_name].")
if(H == user && prob(25))
user << "\red You mess up!"
S.take_damage(15)
S.broken = 0
S.attachable = 0
S.destroyed = 0
S.robot = 1
var/datum/organ/external/T = H.organs["r_hand"]
T.attachable = 0
T.destroyed = 0
T.broken = 0
T.robot = 1
user.drop_item()
M.update_body()
M.updatehealth()
M.UpdateDamageIcon()
return 1
else
user << "\red That doesn't fit there!."
return ..()
/obj/item/robot_parts/l_leg/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
if(!istype(M))
return ..()
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/stool/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66))))
return ..()
if(!istype(M, /mob/living/carbon/human))
return ..()
if(user.zone_sel.selecting == "l_leg")
var/mob/living/carbon/human/H = M
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
if(S.destroyed)
if(!S.attachable)
user << "\red The wound is not ready for a replacement!"
return 0
if(M != user)
M.visible_message( \
"\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \
"\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].")
else
M.visible_message( \
"\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \
"\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].")
if(do_mob(user, H, 100))
if(M != user)
M.visible_message( \
"\red [user] finishes attaching [H]'s new [S.display_name].", \
"\red [user] finishes attaching your new [S.display_name].")
else
M.visible_message( \
"\red [user] finishes attaching \his new [S.display_name].", \
"\red You finish attaching your new [S.display_name].")
if(H == user && prob(25))
user << "\red You mess up!"
S.take_damage(15)
S.broken = 0
S.attachable = 0
S.destroyed = 0
S.robot = 1
var/datum/organ/external/T = H.organs["l_foot"]
T.attachable = 0
T.destroyed = 0
T.broken = 0
T.robot = 1
user.drop_item()
M.update_body()
M.updatehealth()
M.UpdateDamageIcon()
return 1
else
user << "\red That doesn't fit there!."
return ..()
/obj/item/robot_parts/r_leg/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
if(!istype(M))
return ..()
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/stool/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66))))
return ..()
if(!istype(M, /mob/living/carbon/human))
return ..()
if(user.zone_sel.selecting == "r_leg")
var/mob/living/carbon/human/H = M
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
if(S.destroyed)
if(!S.attachable)
user << "\red The wound is not ready for a replacement!"
return 0
if(M != user)
M.visible_message( \
"\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \
"\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].")
else
M.visible_message( \
"\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \
"\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].")
if(do_mob(user, H, 100))
if(M != user)
M.visible_message( \
"\red [user] finishes attaching [H]'s new [S.display_name].", \
"\red [user] finishes attaching your new [S.display_name].")
else
M.visible_message( \
"\red [user] finishes attaching \his new [S.display_name].", \
"\red You finish attaching your new [S.display_name].")
if(H == user && prob(25))
user << "\red You mess up!"
S.take_damage(15)
S.broken = 0
S.attachable = 0
S.destroyed = 0
S.robot = 1
var/datum/organ/external/T = H.organs["r_foot"]
T.attachable = 0
T.destroyed = 0
T.broken = 0
T.robot = 1
user.drop_item()
M.update_body()
M.updatehealth()
M.UpdateDamageIcon()
return 1
else
user << "\red That doesn't fit there!."
return ..()

View File

@@ -16,6 +16,14 @@ RACK PARTS
new /obj/item/stack/sheet/metal( src.loc ) new /obj/item/stack/sheet/metal( src.loc )
//SN src = null //SN src = null
del(src) del(src)
if (istype(W, /obj/item/stack/rods))
if (W:amount >= 4)
new /obj/item/weapon/table_parts/reinforced( user.loc )
user << "\blue You reinforce the [name]."
W:use(4)
del(src)
else if (W:amount < 4)
user << "\red You need at least four rods to do this."
/obj/item/weapon/table_parts/attack_self(mob/user as mob) /obj/item/weapon/table_parts/attack_self(mob/user as mob)
var/obj/structure/table/T = new /obj/structure/table( user.loc ) var/obj/structure/table/T = new /obj/structure/table( user.loc )
@@ -29,8 +37,6 @@ RACK PARTS
new /obj/item/stack/sheet/wood( src.loc ) new /obj/item/stack/sheet/wood( src.loc )
//SN src = null //SN src = null
del(src) del(src)
else
..()
/obj/item/weapon/table_parts/wood/attack_self(mob/user as mob) /obj/item/weapon/table_parts/wood/attack_self(mob/user as mob)
new /obj/structure/table/woodentable( user.loc ) new /obj/structure/table/woodentable( user.loc )
@@ -40,9 +46,9 @@ RACK PARTS
// REINFORCED TABLE PARTS // REINFORCED TABLE PARTS
/obj/item/weapon/table_parts/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/item/weapon/table_parts/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/wrench)) if (istype(W, /obj/item/weapon/wrench))
new /obj/item/stack/sheet/plasteel( src.loc ) new /obj/item/stack/sheet/metal( src.loc )
new /obj/item/stack/rods( src.loc )
//SN src = null //SN src = null
del(src) del(src)

View File

@@ -263,6 +263,9 @@ WELDINGTOOOL
attack(mob/M as mob, mob/user as mob) attack(mob/M as mob, mob/user as mob)
if(hasorgans(M)) if(hasorgans(M))
var/datum/organ/external/S = M:organs[user.zone_sel.selecting] var/datum/organ/external/S = M:organs[user.zone_sel.selecting]
if(S)
message_admins("It appears [M] has \"null\" where there should be a [user.zone_sel.selecting]. Check into this, and tell SkyMarshal: \"[M.type]\"")
return ..()
if(!S.robot || user.a_intent != "help") if(!S.robot || user.a_intent != "help")
return ..() return ..()
if(S.brute_dam) if(S.brute_dam)
@@ -321,3 +324,14 @@ WELDINGTOOOL
New() New()
if(prob(50)) if(prob(50))
icon_state = "cutters-y" icon_state = "cutters-y"
/obj/item/weapon/wirecutters/attack(mob/M as mob, mob/user as mob)
if((M.handcuffed) && (istype(M:handcuffed, /obj/item/weapon/handcuffs/cable)))
M.visible_message("You cut \the [M]'s restraints with \the [src]!",\
"\The [usr] cuts \the [M]'s restraints with \the [src]!",\
"You hear cable being cut.")
M.handcuffed = null
M.update_clothing()
return
else
..()

View File

@@ -9,7 +9,7 @@
src.attack_ai(usr) src.attack_ai(usr)
// check for TK users // check for TK users
AutoUpdateTK(src) //AutoUpdateTK(src)
if (istype(usr, /mob/living/carbon/human)) if (istype(usr, /mob/living/carbon/human))
if(istype(usr.l_hand, /obj/item/tk_grab) || istype(usr.r_hand, /obj/item/tk_grab/)) if(istype(usr.l_hand, /obj/item/tk_grab) || istype(usr.r_hand, /obj/item/tk_grab/))
if(!(usr in nearby)) if(!(usr in nearby))

View File

@@ -6,7 +6,6 @@
var/code = "electronic" var/code = "electronic"
origin_tech = "bluespace=1" origin_tech = "bluespace=1"
/obj/item/device/radio/beacon/hear_talk() /obj/item/device/radio/beacon/hear_talk()
return return
@@ -32,3 +31,19 @@
proc/digest_delay() proc/digest_delay()
spawn(600) spawn(600)
del(src) del(src)
// SINGULO BEACON SPAWNER
/obj/item/device/radio/beacon/syndicate
name = "suspicious beacon"
desc = "A label on it reads: <i>Activate to have a singularity beacon teleported to your location</i>."
origin_tech = "bluespace=1;syndicate=7"
/obj/item/device/radio/beacon/syndicate/attack_self(mob/user as mob)
if(user)
user << "\blue Locked In"
new /obj/machinery/singularity_beacon/syndicate( user.loc )
playsound(src, 'pop.ogg', 100, 1, 1)
del(src)
return

View File

@@ -83,6 +83,9 @@ SHARDS
if("full (2 sheets)") if("full (2 sheets)")
if(!src) return 1 if(!src) return 1
if(src.loc != user) return 1 if(src.loc != user) return 1
if(src.amount < 2)
user << "\red You need more glass to do that."
return 1
if(locate(/obj/structure/window) in user.loc) if(locate(/obj/structure/window) in user.loc)
user << "\red There is a window in the way." user << "\red There is a window in the way."
return 1 return 1
@@ -142,6 +145,9 @@ SHARDS
if("full (2 sheets)") if("full (2 sheets)")
if(!src) return 1 if(!src) return 1
if(src.loc != user) return 1 if(src.loc != user) return 1
if(src.amount < 2)
user << "\red You need more glass to do that."
return 1
if(locate(/obj/structure/window) in user.loc) if(locate(/obj/structure/window) in user.loc)
user << "\red There is a window in the way." user << "\red There is a window in the way."
return 1 return 1

View File

@@ -103,7 +103,6 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
// /datum/stack_recipe/New(title, result_type, req_amount, res_amount, max_res_amount, time, one_per_turf, on_floor = 0) // /datum/stack_recipe/New(title, result_type, req_amount, res_amount, max_res_amount, time, one_per_turf, on_floor = 0)
var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts/reinforced, 2), \
new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, one_per_turf = 1), \ new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, one_per_turf = 1), \
) )

View File

@@ -151,6 +151,18 @@
icon_state = "down" icon_state = "down"
anchored = 0 anchored = 0
/obj/item/roller
name = "roller bed"
desc = "A collapsed roller bed that can be carried around."
icon = 'rollerbed.dmi'
icon_state = "folded"
w_class = 4.0 // Can't be put in backpacks. Oh well.
attack_self(mob/user)
var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
R.add_fingerprint(user)
del(src)
//obj/structure/stool/bed/roller/Move() //obj/structure/stool/bed/roller/Move()
/obj/structure/stool/bed/Move() /obj/structure/stool/bed/Move()
..() ..()
@@ -181,7 +193,20 @@
buckled_mob.pixel_y = 0 buckled_mob.pixel_y = 0
buckled_mob.anchored = 0 buckled_mob.anchored = 0
buckled_mob.buckled = null buckled_mob.buckled = null
buckled_mob = null
density = 0 density = 0
icon_state = "down" icon_state = "down"
..() ..()
return return
/obj/structure/stool/bed/roller/MouseDrop(over_object, src_location, over_location)
..()
if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
if(!ishuman(usr)) return
if(buckled_mob) return 0
visible_message("[usr] collapses \the [src.name]")
new/obj/item/roller(get_turf(src))
spawn(0)
del(src)
return

View File

@@ -149,6 +149,7 @@
"/obj/item/weapon/melee/baton", "/obj/item/weapon/melee/baton",
"/obj/item/weapon/melee/classic_baton", "/obj/item/weapon/melee/classic_baton",
"/obj/item/weapon/camera_test", "/obj/item/weapon/camera_test",
"/obj/item/weapon/camera_film",
"/obj/item/weapon/cigpacket", "/obj/item/weapon/cigpacket",
"/obj/item/weapon/zippo", "/obj/item/weapon/zippo",
"/obj/item/device/taperecorder", "/obj/item/device/taperecorder",

View File

@@ -63,7 +63,7 @@
if(istype(W,/obj/item/weapon/evidencebag) && src.loc != user) if(istype(W,/obj/item/weapon/evidencebag) && src.loc != user)
return return
if(src.contents.len >= 2) if(src.contents.len >= 2)
user << "You have nowhere to place that" user << "\red There's nowhere to place that!"
return return
user.u_equip(W) user.u_equip(W)
W.loc = src W.loc = src
@@ -84,42 +84,62 @@
if (src.loc == user) if (src.loc == user)
if (user.s_active) if (user.s_active)
user.s_active.close(user) user.s_active.close(user)
view_inv(user) src.show_to(user)
orient2hud(user)
else else
..() ..()
for(var/mob/M in range(1)) for(var/mob/M in range(1))
if (M.s_active == src) if (M.s_active == src)
src.close(M) src.close(M)
src.orient2hud(user)
src.add_fingerprint(user) src.add_fingerprint(user)
return return
/obj/item/clothing/suit/storage/proc/orient2hud(mob/user as mob) /obj/item/clothing/suit/storage/proc/orient2hud(mob/user as mob)
if (src == user.l_hand) if (src == user.l_hand)
src.orient_objs(3, 5, 3, 3) src.orient_objs(3, 4, 3, 3)
else if (src == user.r_hand) else if (src == user.r_hand)
src.orient_objs(1, 5, 1, 3) src.orient_objs(1, 4, 1, 3)
else if (istype(user,/mob/living/carbon/human) && src == user:wear_suit) else if (istype(user,/mob/living/carbon/human) && src == user:wear_suit)
src.orient_objs(1, 3, 3, 3) src.orient_objs(1, 3, 2, 3)
else else
src.orient_objs(4, 4, 4, 2) src.orient_objs(4, 3, 4, 2)
return return
/obj/item/clothing/suit/storage/proc/orient_objs(tx, ty, mx, my) /obj/item/clothing/suit/storage/proc/orient_objs(tx, ty, mx, my)
var/cx = tx var/cx = tx
var/cy = ty var/cy = ty
src.boxes.screen_loc = text("[],[] to [],[]", tx, ty, mx, my) src.boxes.screen_loc = "[tx],[ty] to [mx],[my]"
for(var/obj/O in src.contents) for(var/obj/O in src.contents)
O.screen_loc = text("[],[]", cx, cy) O.screen_loc = "[cx],[cy]"
O.layer = 20 O.layer = 20
cx++ cx++
if (cx > mx) if (cx > mx)
cx = tx cx = tx
cy-- cy--
//Foreach goto(56) src.closer.screen_loc = "[mx+1],[my]"
src.closer.screen_loc = text("[],[]", mx+1, my)
return return
/obj/item/clothing/suit/storage/proc/show_to(mob/user as mob)
for(var/obj/item/weapon/mousetrap/MT in src)
if(MT.armed)
for(var/mob/O in viewers(user, null))
if(O == user)
user.show_message(text("\red <B>You reach into the [src.name], but there was a live mousetrap in there!</B>"), 1)
else
user.show_message(text("\red <B>[user] reaches into the [src.name] and sets off a hidden mousetrap!</B>"), 1)
MT.loc = user.loc
MT.triggered(user, user.hand ? "l_hand" : "r_hand")
MT.layer = OBJ_LAYER
return
user.client.screen -= src.boxes
user.client.screen -= src.closer
user.client.screen -= src.contents
user.client.screen += src.boxes
user.client.screen += src.closer
user.client.screen += src.contents
user.s_active = src
return
/*/obj/item/clothing/suit/storage/New() /*/obj/item/clothing/suit/storage/New()
src.boxes = new /obj/screen/storage( ) src.boxes = new /obj/screen/storage( )

View File

@@ -29,6 +29,7 @@
icon_opened = "trashcartopen" icon_opened = "trashcartopen"
icon_closed = "trashcart" icon_closed = "trashcart"
/*these aren't needed anymore
/obj/structure/closet/crate/hat /obj/structure/closet/crate/hat
desc = "A crate filled with Valuable Collector's Hats!." desc = "A crate filled with Valuable Collector's Hats!."
name = "Hat Crate" name = "Hat Crate"
@@ -39,15 +40,6 @@
icon_closed = "crate" icon_closed = "crate"
/obj/structure/closet/crate/contraband /obj/structure/closet/crate/contraband
name = "Contraband crate"
desc = "A random assortment of items manufactured by providers NOT listed under Nanotrasen's whitelist."
icon = 'storage.dmi'
icon_state = "crate"
density = 1
icon_opened = "crateopen"
icon_closed = "crate"
/obj/structure/closet/crate/poster
name = "Poster crate" name = "Poster crate"
desc = "A random assortment of posters manufactured by providers NOT listed under Nanotrasen's whitelist." desc = "A random assortment of posters manufactured by providers NOT listed under Nanotrasen's whitelist."
icon = 'storage.dmi' icon = 'storage.dmi'
@@ -55,15 +47,7 @@
density = 1 density = 1
icon_opened = "crateopen" icon_opened = "crateopen"
icon_closed = "crate" icon_closed = "crate"
*/
/obj/structure/closet/crate/cigarettes
name = "DromedaryCo cigarettes crate"
desc = "A crate of cigarettes manufactured by the notorious DromedaryCo company."
icon = 'storage.dmi'
icon_state = "crate"
density = 1
icon_opened = "crateopen"
icon_closed = "crate"
/obj/structure/closet/crate/medical /obj/structure/closet/crate/medical
desc = "A medical crate." desc = "A medical crate."

View File

@@ -316,7 +316,7 @@
/obj/item/weapon/storage/box/syndicate/New() /obj/item/weapon/storage/box/syndicate/New()
..() ..()
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "freedom" = 1))) switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "freedom" = 1, "hacker" = 1, "lordsingulo" = 1)))
if ("bloodyspai") if ("bloodyspai")
new /obj/item/clothing/under/chameleon(src) new /obj/item/clothing/under/chameleon(src)
new /obj/item/clothing/mask/gas/voice(src) new /obj/item/clothing/mask/gas/voice(src)
@@ -352,6 +352,19 @@
U.imp = new /obj/item/weapon/implant/uplink(U) U.imp = new /obj/item/weapon/implant/uplink(U)
return return
if ("hacker")
new /obj/item/weapon/aiModule/syndicate(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/device/encryptionkey/binary(src)
return
if ("lordsingulo")
new /obj/item/device/radio/beacon/syndicate(src)
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/weapon/card/emag(src)
return
/obj/item/weapon/storage/dice/New() /obj/item/weapon/storage/dice/New()
new /obj/item/weapon/dice( src ) new /obj/item/weapon/dice( src )
new /obj/item/weapon/dice/d20( src ) new /obj/item/weapon/dice/d20( src )

View File

@@ -149,7 +149,47 @@ TABLE AND RACK OBJECT INTERATIONS
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W var/obj/item/weapon/grab/G = W
if(G.state<2) if(G.state<2)
user << "\red You need a better grip to do that!" if(ishuman(G.affecting))
G.affecting.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been smashed on a table by [G.assailant.name] ([G.assailant.ckey])</font>")
G.assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Smashed [G.affecting.name] ([G.affecting.ckey]) on a table.</font>")
log_admin("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
message_admins("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
log_attack("<font color='red'>[G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.</font>")
var/mob/living/carbon/human/H = G.affecting
var/datum/organ/external/affecting = H.get_organ("head")
if(prob(25))
add_blood(G.affecting)
affecting.take_damage(rand(10,15), 0)
H.Weaken(2)
if(prob(20)) // One chance in 20 to DENT THE TABLE
affecting.take_damage(rand(0,5), 0) //Extra damage
if(dented)
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] with enough force to further deform \the [src]!\nYou wish you could unhear that sound.",\
"\red You smash \the [H]'s head on \the [src] with enough force to leave another dent!\n[prob(50)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
else
dented = 1
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] so hard it left a dent!\nYou wish you could unhear that sound.",\
"\red You smash \the [H]'s head on \the [src] with enough force to leave a dent!\n[prob(5)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
else if(prob(50))
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
"\red You hear the nauseating crunch of bone and gristle on solid metal, the noise echoing through the room.")
else
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
"\red You hear the nauseating crunch of bone and gristle on solid metal and the gurgling gasp of someone who is trying to breathe through their own blood.")
else
affecting.take_damage(rand(5,10), 0)
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src]!",\
"\red You smash \the [H]'s head on \the [src]!",\
"\red You hear the nauseating crunch of bone and gristle on solid metal.")
H.UpdateDamageIcon()
H.updatehealth()
playsound(src.loc, 'tablehit1.ogg', 50, 1, -3)
return return
G.affecting.loc = src.loc G.affecting.loc = src.loc
G.affecting.Weaken(5) G.affecting.Weaken(5)

View File

@@ -0,0 +1,72 @@
//todo: flushing, flushing heads, showers actually cleaning people
/obj/structure/toilet
name = "toilet"
desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean."
icon = 'watercloset.dmi'
icon_state = "toilet0"
density = 0
anchored = 1
var/open = 0
/obj/structure/toilet/New()
open = round(rand(0, 1))
update_icon()
/obj/structure/toilet/attack_hand()
open = !open
update_icon()
/obj/structure/toilet/update_icon()
icon_state = "toilet[open]"
/obj/structure/urinal
name = "urinal"
desc = "The HU-452, an experimental urinal."
icon = 'watercloset.dmi'
icon_state = "urinal"
density = 0
anchored = 1
/obj/structure/shower
name = "shower"
desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division."
icon = 'watercloset.dmi'
icon_state = "shower"
density = 0
anchored = 1
var/on = 0
var/mist = 0 //needs a var so we can make it linger~
//add heat controls? when emagged, you can freeze to death in it?
/obj/structure/shower/attack_hand()
on = !on
update_icon()
/obj/structure/shower/update_icon()
overlays = null
if(on)
overlays += image('watercloset.dmi', src, "water", MOB_LAYER + 1, dir)
spawn(50)
if(src && on)
overlays += image('watercloset.dmi', src, "mist", MOB_LAYER + 1, dir)
mist = 1
else if(mist)
overlays += image('watercloset.dmi', src, "mist", MOB_LAYER + 1, dir)
spawn(100)
if(src && !on)
overlays = null
/obj/item/weapon/bikehorn/rubberducky
name = "rubber ducky"
desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl
icon = 'watercloset.dmi'
icon_state = "rubberducky"
item_state = "rubberducky"

View File

@@ -1,4 +1,3 @@
/obj/structure/shuttle /obj/structure/shuttle
name = "shuttle" name = "shuttle"
icon = 'shuttle.dmi' icon = 'shuttle.dmi'
@@ -11,6 +10,9 @@
opacity = 0 opacity = 0
anchored = 1 anchored = 1
CanPass(atom/movable/mover, turf/target, height, air_group)
if(!height || air_group) return 0
else return ..()
/obj/structure/shuttle/engine /obj/structure/shuttle/engine
name = "engine" name = "engine"

View File

@@ -12,7 +12,6 @@
s["host"] = host ? host : null s["host"] = host ? host : null
s["players"] = list() s["players"] = list()
s["admins"] = 0 s["admins"] = 0
var/admins = 0
var/n = 0 var/n = 0
for(var/client/C) for(var/client/C)
@@ -30,6 +29,5 @@
s["end"] = "#end" s["end"] = "#end"
// 7 + s["players"] + 1 = index of s["revinfo"] // 7 + s["players"] + 1 = index of s["revinfo"]
s["admins"] = admins
return list2params(s) return list2params(s)

View File

@@ -353,6 +353,7 @@ obj/machinery/computer/forensic_scanning
scan_data = null scan_data = null
updateDialog() updateDialog()
return return
if(scanning)
scan_process = 0 scan_process = 0
scan_name = scanning.name scan_name = scanning.name
scan_data = "<u>[scanning]</u><br><br>" scan_data = "<u>[scanning]</u><br><br>"
@@ -467,7 +468,7 @@ obj/machinery/computer/forensic_scanning
if(!blood[main_blood]) if(!blood[main_blood])
blood[main_blood] = atom_blood_DNA[blood] blood[main_blood] = atom_blood_DNA[blood]
return 1 return 1
var/list/templist[2] var/list/templist[3]
templist[1] = atom_suit_fibers templist[1] = atom_suit_fibers
templist[2] = atom_blood_DNA templist[2] = atom_blood_DNA
templist[3] = atom_name templist[3] = atom_name

View File

@@ -2267,8 +2267,7 @@ var/global/BSACooldown = 0
if("maint_access_engiebrig") if("maint_access_engiebrig")
for(var/obj/machinery/door/airlock/maintenance/M in world) for(var/obj/machinery/door/airlock/maintenance/M in world)
if (access_maint_tunnels in M.req_access) if (access_maint_tunnels in M.req_access)
M.req_access = list() M.req_access = list(access_brig,access_engine)
M.req_one_access = list(access_brig,access_engine)
message_admins("[key_name_admin(usr)] made all maint doors engineering and brig access-only.") message_admins("[key_name_admin(usr)] made all maint doors engineering and brig access-only.")
if("infinite_sec") if("infinite_sec")
var/datum/job/J = job_master.GetJob("Security Officer") var/datum/job/J = job_master.GetJob("Security Officer")
@@ -2729,17 +2728,12 @@ var/global/BSACooldown = 0
dat += "<center><B>Voting</B></center><hr>\n" dat += "<center><B>Voting</B></center><hr>\n"
if(lvl > 0) if(lvl > 0)
// if(lvl >= 2 )
dat += {" dat += {"
<A href='?src=\ref[src];votekill=1'>Abort Vote</A><br> <A href='?src=\ref[src];votekill=1'>Abort Vote</A><br>
<A href='?src=\ref[src];vmode=1'>Start Vote</A><br> <A href='?src=\ref[src];vmode=1'>Start Vote</A><br>
<A href='?src=\ref[src];voteres=1'>Toggle Voting</A><br> <A href='?src=\ref[src];voteres=1'>Toggle Voting</A><br>
"} "}
// if(lvl >= 3 )
// if(lvl >= 5)
// if(lvl == 6 )
usr << browse(dat, "window=admin2;size=210x160") usr << browse(dat, "window=admin2;size=210x160")
return return
@@ -2751,11 +2745,11 @@ var/global/BSACooldown = 0
/obj/admins/proc/vmode() /obj/admins/proc/vmode()
set category = "Server" set category = "Server"
set name = "Start Vote" set hidden = 1 // It doesn't have a cancel button, so it shouldn't be autocompleted. Should be started via Voting() instead
set desc="Starts vote"
if (!usr.client.holder) if (!usr.client.holder)
return return
var/confirm = alert("What vote would you like to start?", "Vote", "Restart", "Custom Vote", "Change Game Mode", "Cancel")
var/confirm = alert("What vote would you like to start?", "Vote", "Restart", "Custom Vote", "Change Game Mode")
switch(confirm) switch(confirm)
if("Cancel") if("Cancel")
return return

View File

@@ -210,6 +210,7 @@
verbs += /obj/admins/proc/adspawn //toggle admin item spawning verbs += /obj/admins/proc/adspawn //toggle admin item spawning
verbs += /client/proc/debug_variables verbs += /client/proc/debug_variables
verbs += /client/proc/cmd_modify_ticker_variables verbs += /client/proc/cmd_modify_ticker_variables
verbs += /client/proc/cmd_modify_ref_variables
verbs += /client/proc/Debug2 //debug toggle switch verbs += /client/proc/Debug2 //debug toggle switch
verbs += /client/proc/toggle_view_range verbs += /client/proc/toggle_view_range
verbs += /client/proc/Getmob verbs += /client/proc/Getmob
@@ -291,7 +292,8 @@
verbs += /client/proc/only_one verbs += /client/proc/only_one
verbs += /client/proc/deadmin_self verbs += /client/proc/deadmin_self
verbs += /client/proc/giveruntimelog //used by coders to retrieve runtime logs verbs += /client/proc/giveruntimelog //used by coders to retrieve runtime logs
verbs += /client/proc/cinematic //used by coders to retrieve runtime logs verbs += /client/proc/cinematic //show a cinematic sequence
verbs += /client/proc/startSinglo //Used to prevent the station from losing power while testing stuff out.
verbs += /client/proc/enable_debug_verbs verbs += /client/proc/enable_debug_verbs
verbs += /client/proc/kill_air verbs += /client/proc/kill_air
verbs += /client/proc/callprocgen verbs += /client/proc/callprocgen
@@ -432,6 +434,7 @@
verbs -= /client/proc/radioalert verbs -= /client/proc/radioalert
verbs -= /client/proc/rnd_check_designs verbs -= /client/proc/rnd_check_designs
verbs -= /client/proc/CarbonCopy verbs -= /client/proc/CarbonCopy
verbs -= /client/proc/cmd_modify_ref_variables
verbs -= /proc/possess verbs -= /proc/possess
verbs -= /proc/release verbs -= /proc/release
//verbs -= /client/proc/give_spell --Merged with view variables //verbs -= /client/proc/give_spell --Merged with view variables

View File

@@ -95,20 +95,24 @@
else else
alert("Admin jumping disabled") alert("Admin jumping disabled")
/client/proc/Getmob(var/mob/M) /client/proc/Getmob(var/mob/M in world)
set category = "Admin" set category = "Admin"
set name = "Get Mob" set name = "Get Mob"
set desc = "Mob to teleport" set desc = "Mob to teleport"
if(!src.holder) if(!src.holder)
src << "Only administrators may use this command." src << "Only administrators may use this command."
return return
if(config.allow_admin_jump) if(config.allow_admin_jump)
if(!M || !istype(M)) if(!M || !istype(M))
var/mobs = getmobs() var/mobs = getmobs()
var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in mobs var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in mobs
M = mobs[selection] if(!selection)
if(!istype(M))
return return
M = mobs[selection]
var/mob/A = src.mob var/mob/A = src.mob
var/turf/T = get_turf(A) var/turf/T = get_turf(A)
if(T && isturf(T)) if(T && isturf(T))

View File

@@ -461,7 +461,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
set name = "Del-All" set name = "Del-All"
// to prevent REALLY stupid deletions // to prevent REALLY stupid deletions
var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human) var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/dead, /mob/dead/observer, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai)
var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in typesof(/obj) + typesof(/mob) - blocked var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in typesof(/obj) + typesof(/mob) - blocked
if(hsbitem) if(hsbitem)
for(var/atom/O in world) for(var/atom/O in world)
@@ -897,11 +897,15 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.update_clothing() M.update_clothing()
log_admin("[key_name(usr)] changed the equipment of [key_name(M)] to [dresscode].") log_admin("[key_name(usr)] changed the equipment of [key_name(M)] to [dresscode].")
message_admins("\blue [key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode]..", 1) message_admins("\blue [key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode].", 1)
return return
/client/proc/startSinglo() /client/proc/startSinglo()
set category = "Debug"
set name = "Start Singularity"
set desc = "Sets up the singularity and all machines to get power flowing through the station"
if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes") if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes")
return return

View File

@@ -11,6 +11,17 @@ var/list/forbidden_varedit_object_types = list(
src.modify_variables(O) src.modify_variables(O)
//feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_modify_ref_variables(var/target as text)
set category = "Debug"
set name = "Edit Variables (Reference)"
set desc="(target) Edit a target item's variables"
var/obj/I = locate(target)
if(!I)
usr << "ERROR: Object could not be located!"
return
src.modify_variables(I)
//feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_modify_ticker_variables() /client/proc/cmd_modify_ticker_variables()
set category = "Debug" set category = "Debug"
set name = "Edit Ticker Variables" set name = "Edit Ticker Variables"

View File

@@ -102,7 +102,9 @@ datum
reagent_state = LIQUID reagent_state = LIQUID
color = "#C80000" // rgb: 200, 0, 0 color = "#C80000" // rgb: 200, 0, 0
on_mob_life(var/mob/living/M) on_mob_life(var/mob/living/M)
if(istype(M, /mob/living/carbon/human) && blood_incompatible(data["blood_type"],M.dna.b_type)) if(!data || !data["blood_type"])
..()
else if(istype(M, /mob/living/carbon/human) && blood_incompatible(data["blood_type"],M.dna.b_type))
M.adjustToxLoss(rand(0.5,1.5)) M.adjustToxLoss(rand(0.5,1.5))
M.adjustOxyLoss(rand(1,1.5)) M.adjustOxyLoss(rand(1,1.5))
..() ..()
@@ -694,10 +696,11 @@ datum
id = "sugar" id = "sugar"
description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
reagent_state = SOLID reagent_state = SOLID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#808080" // rgb: 128, 128, 128 color = "#808080" // rgb: 128, 128, 128
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
M:nutrition += 1 M:nutrition += nutriment_factor
..() ..()
return return
@@ -2234,7 +2237,6 @@ datum
M:nutrition += nutriment_factor M:nutrition += nutriment_factor
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
if(M:getOxyLoss() && prob(30)) M:adjustOxyLoss(-1) if(M:getOxyLoss() && prob(30)) M:adjustOxyLoss(-1)
M:nutrition++
..() ..()
return return
@@ -2250,7 +2252,6 @@ datum
M:nutrition += nutriment_factor M:nutrition += nutriment_factor
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
if(M:getFireLoss() && prob(20)) M:heal_organ_damage(0,1) if(M:getFireLoss() && prob(20)) M:heal_organ_damage(0,1)
M:nutrition++
..() ..()
return return
@@ -2266,7 +2267,6 @@ datum
M:nutrition += nutriment_factor M:nutrition += nutriment_factor
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
if(M:getToxLoss() && prob(20)) M:adjustToxLoss(-1) if(M:getToxLoss() && prob(20)) M:adjustToxLoss(-1)
M:nutrition++
..() ..()
return return
@@ -2418,12 +2418,13 @@ datum
id = "milk" id = "milk"
description = "An opaque white liquid produced by the mammary glands of mammals." description = "An opaque white liquid produced by the mammary glands of mammals."
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1.5 * REAGENTS_METABOLISM
color = "#DFDFDF" // rgb: 223, 223, 223 color = "#DFDFDF" // rgb: 223, 223, 223
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0) if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0)
M:nutrition++
..() ..()
return return
@@ -2432,12 +2433,13 @@ datum
id = "soymilk" id = "soymilk"
description = "An opaque white liquid made from soybeans." description = "An opaque white liquid made from soybeans."
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1.2 * REAGENTS_METABOLISM
color = "#DFDFC7" // rgb: 223, 223, 199 color = "#DFDFC7" // rgb: 223, 223, 199
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0) if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0)
M:nutrition++
..() ..()
return return
@@ -2541,13 +2543,14 @@ datum
id = "cola" id = "cola"
description = "A refreshing beverage." description = "A refreshing beverage."
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#100800" // rgb: 16, 8, 0 color = "#100800" // rgb: 16, 8, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
M:drowsyness = max(0,M:drowsyness-5) M:drowsyness = max(0,M:drowsyness-5)
if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = max(310, M.bodytemperature-5) M.bodytemperature = max(310, M.bodytemperature-5)
M:nutrition += 1 M:nutrition += nutriment_factor
..() ..()
return return
@@ -2556,6 +2559,7 @@ datum
id = "nuka_cola" id = "nuka_cola"
description = "Cola, cola never changes." description = "Cola, cola never changes."
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#100800" // rgb: 16, 8, 0 color = "#100800" // rgb: 16, 8, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
@@ -2567,7 +2571,7 @@ datum
M:sleeping = max(0,M.sleeping-2) M:sleeping = max(0,M.sleeping-2)
if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = max(310, M.bodytemperature-5) M.bodytemperature = max(310, M.bodytemperature-5)
M:nutrition += 1 M:nutrition += nutriment_factor
..() ..()
return return
@@ -2576,6 +2580,7 @@ datum
id = "spacemountainwind" id = "spacemountainwind"
description = "Blows right through you like a space wind." description = "Blows right through you like a space wind."
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#102000" // rgb: 16, 32, 0 color = "#102000" // rgb: 16, 32, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
@@ -2585,7 +2590,7 @@ datum
if (M.bodytemperature > 310) if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-5) M.bodytemperature = max(310, M.bodytemperature-5)
M.make_jittery(1) M.make_jittery(1)
M:nutrition += 1 M:nutrition += nutriment_factor
..() ..()
return return
@@ -2594,13 +2599,14 @@ datum
id = "dr_gibb" id = "dr_gibb"
description = "A delicious blend of 42 different flavours" description = "A delicious blend of 42 different flavours"
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#102000" // rgb: 16, 32, 0 color = "#102000" // rgb: 16, 32, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
M:drowsyness = max(0,M:drowsyness-6) M:drowsyness = max(0,M:drowsyness-6)
if (M.bodytemperature > 310) if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-5) //310 is the normal bodytemp. 310.055 M.bodytemperature = max(310, M.bodytemperature-5) //310 is the normal bodytemp. 310.055
M:nutrition += 1 M:nutrition += nutriment_factor
..() ..()
return return
@@ -2609,12 +2615,13 @@ datum
id = "space_up" id = "space_up"
description = "Tastes like a hull breach in your mouth." description = "Tastes like a hull breach in your mouth."
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#202800" // rgb: 32, 40, 0 color = "#202800" // rgb: 32, 40, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
if (M.bodytemperature > 310) if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-8) //310 is the normal bodytemp. 310.055 M.bodytemperature = max(310, M.bodytemperature-8) //310 is the normal bodytemp. 310.055
M:nutrition += 1 M:nutrition += nutriment_factor
..() ..()
return return
@@ -2623,12 +2630,13 @@ datum
description = "A tangy substance made of 0.5% natural citrus!" description = "A tangy substance made of 0.5% natural citrus!"
id = "lemon_lime" id = "lemon_lime"
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#878F00" // rgb: 135, 40, 0 color = "#878F00" // rgb: 135, 40, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
if (M.bodytemperature > 310) if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-8) //310 is the normal bodytemp. 310.055 M.bodytemperature = max(310, M.bodytemperature-8) //310 is the normal bodytemp. 310.055
M:nutrition += 1 M:nutrition += nutriment_factor
..() ..()
return return
@@ -2662,6 +2670,7 @@ datum
id = "ethanol" id = "ethanol"
description = "A well-known alcohol with a variety of applications." description = "A well-known alcohol with a variety of applications."
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 0 //So alcohol can fill you up! If they want to.
color = "#404030" // rgb: 64, 64, 48 color = "#404030" // rgb: 64, 64, 48
var var
dizzy_adj = 3 dizzy_adj = 3
@@ -2673,6 +2682,7 @@ datum
pass_out = 325 //amount absorbed after which mob starts passing out pass_out = 325 //amount absorbed after which mob starts passing out
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!src.data) data = 1 if(!src.data) data = 1
src.data++ src.data++
@@ -2704,13 +2714,13 @@ datum
name = "Beer" name = "Beer"
id = "beer" id = "beer"
description = "An alcoholic beverage made from malted grains, hops, yeast, and water." description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
nutriment_factor = 2 * REAGENTS_METABOLISM
color = "#664300" // rgb: 102, 67, 0 color = "#664300" // rgb: 102, 67, 0
// slur_start = 25 //amount absorbed after which mob starts slurring // slur_start = 25 //amount absorbed after which mob starts slurring
// confused_start = 40 //amount absorbed after which mob starts confusing directions //This is quite silly - Erthilo // confused_start = 40 //amount absorbed after which mob starts confusing directions //This is quite silly - Erthilo
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
..() ..()
M:jitteriness = max(M:jitteriness-3,0) M:jitteriness = max(M:jitteriness-3,0)
M:nutrition += 2
return return
whiskey whiskey
@@ -2799,13 +2809,13 @@ datum
color = "#102000" // rgb: 16, 32, 0 color = "#102000" // rgb: 16, 32, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
M:drowsyness = max(0,M:drowsyness-7) M:drowsyness = max(0,M:drowsyness-7)
if(!M:sleeping_willingly) if(!M:sleeping_willingly)
M:sleeping = max(0,M.sleeping-2) M:sleeping = max(0,M.sleeping-2)
if (M.bodytemperature > 310) if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-5) M.bodytemperature = max(310, M.bodytemperature-5)
M.make_jittery(1) M.make_jittery(1)
M:nutrition += 1
return return
@@ -2949,9 +2959,11 @@ datum
id = "doctorsdelight" id = "doctorsdelight"
description = "A gulp a day keeps the MediBot away. That's probably for the best." description = "A gulp a day keeps the MediBot away. That's probably for the best."
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#664300" // rgb: 102, 67, 0 color = "#664300" // rgb: 102, 67, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
if(M:getOxyLoss() && prob(50)) M:adjustOxyLoss(-2) if(M:getOxyLoss() && prob(50)) M:adjustOxyLoss(-2)
if(M:getBruteLoss() && prob(60)) M:heal_organ_damage(2,0) if(M:getBruteLoss() && prob(60)) M:heal_organ_damage(2,0)
@@ -3113,6 +3125,7 @@ datum
color = "#664300" // rgb: 102, 67, 0 color = "#664300" // rgb: 102, 67, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
..()
if (M.bodytemperature < 360) if (M.bodytemperature < 360)
M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055 M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055
return return
@@ -3146,6 +3159,7 @@ datum
color = "#664300" // rgb: 102, 67, 0 color = "#664300" // rgb: 102, 67, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
..()
if (M.bodytemperature < 270) if (M.bodytemperature < 270)
M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055 M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055
return return
@@ -3193,6 +3207,7 @@ datum
color = "#664300" // rgb: 102, 67, 0 color = "#664300" // rgb: 102, 67, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
..()
M.stunned = 4 M.stunned = 4
return return
@@ -3204,6 +3219,7 @@ datum
color = "#2E2E61" // rgb: 46, 46, 97 color = "#2E2E61" // rgb: 46, 46, 97
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
..()
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
M:adjustOxyLoss(0.5) M:adjustOxyLoss(0.5)
M:adjustOxyLoss(0.5) M:adjustOxyLoss(0.5)
@@ -3233,15 +3249,8 @@ datum
color = "#2E6671" // rgb: 46, 102, 113 color = "#2E6671" // rgb: 46, 102, 113
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
M.dizziness +=5
if(data >= 55 && data <115)
if (!M.slurring) M.slurring = 1
M.slurring += 5
else if(data >= 115 && prob(33))
M.confused = max(M:confused+15,15)
..() ..()
M.dizziness +=5
return return
irishcarbomb irishcarbomb
@@ -3252,15 +3261,8 @@ datum
color = "#2E6671" // rgb: 46, 102, 113 color = "#2E6671" // rgb: 46, 102, 113
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
M.dizziness +=5
if(data >= 55 && data <115)
if (!M.slurring) M.slurring = 1
M.slurring += 5
else if(data >= 115 && prob(33))
M.confused = max(M:confused+15,15)
..() ..()
M.dizziness +=5
return return
syndicatebomb syndicatebomb
@@ -3350,10 +3352,12 @@ datum
id = "soy_latte" id = "soy_latte"
description = "A nice and tasty beverage while you are reading your hippie books." description = "A nice and tasty beverage while you are reading your hippie books."
reagent_state = LIQUID reagent_state = LIQUID
color = "#664300" // rgb: 102, 67, 0 color = "#664300" // rgb: 102, 67, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
..() ..()
M:nutrition += nutriment_factor
M.dizziness = max(0,M.dizziness-5) M.dizziness = max(0,M.dizziness-5)
M:drowsyness = max(0,M:drowsyness-3) M:drowsyness = max(0,M:drowsyness-3)
M:sleeping = 0 M:sleeping = 0
@@ -3361,7 +3365,6 @@ datum
M.bodytemperature = min(310, M.bodytemperature+5) M.bodytemperature = min(310, M.bodytemperature+5)
M.make_jittery(5) M.make_jittery(5)
if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0) if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0)
M:nutrition++
..() ..()
return return
@@ -3370,10 +3373,10 @@ datum
id = "cafe_latte" id = "cafe_latte"
description = "A nice, strong and tasty beverage while you are reading." description = "A nice, strong and tasty beverage while you are reading."
reagent_state = LIQUID reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#664300" // rgb: 102, 67, 0 color = "#664300" // rgb: 102, 67, 0
on_mob_life(var/mob/living/M as mob) on_mob_life(var/mob/living/M as mob)
..()
M.dizziness = max(0,M.dizziness-5) M.dizziness = max(0,M.dizziness-5)
M:drowsyness = max(0,M:drowsyness-3) M:drowsyness = max(0,M:drowsyness-3)
M:sleeping = 0 M:sleeping = 0
@@ -3381,8 +3384,6 @@ datum
M.bodytemperature = min(310, M.bodytemperature+5) M.bodytemperature = min(310, M.bodytemperature+5)
M.make_jittery(5) M.make_jittery(5)
if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0) if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0)
M:nutrition++
..()
return return
hippies_delight hippies_delight

View File

@@ -616,10 +616,26 @@
for(var/mob/living/carbon/M in D.loc) for(var/mob/living/carbon/M in D.loc)
if(!istype(M,/mob/living/carbon)) continue if(!istype(M,/mob/living/carbon)) continue
if(M == user) continue if(M == user) continue
//Syring gune attack logging by Yvarov
var/R
for(var/datum/reagent/A in D.reagents.reagent_list)
R += A.id + " ("
R += num2text(A.volume) + "),"
if (istype(M, /mob))
M.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
log_attack("<font color='red'>[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])</font>")
log_admin("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).")
message_admins("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).")
else
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
log_attack("<font color='red'>UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R])</font>")
log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R]).")
message_admins("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R]).")
D.reagents.trans_to(M, 15) D.reagents.trans_to(M, 15)
M.take_organ_damage(5) M.take_organ_damage(5)
for(var/mob/O in viewers(world.view, D)) for(var/mob/O in viewers(world.view, D))
O.show_message(text("\red [] was hit by the syringe!", M), 1) O.show_message(text("\red [] is hit by the syringe!", M.name), 1)
del(D) del(D)
if(D) if(D)
@@ -1936,6 +1952,8 @@
icon = 'chemical.dmi' icon = 'chemical.dmi'
icon_state = "beaker0" icon_state = "beaker0"
item_state = "beaker" item_state = "beaker"
m_amt = 0
g_amt = 500
pickup(mob/user) pickup(mob/user)
on_reagent_change(user) on_reagent_change(user)
@@ -2015,6 +2033,8 @@
icon = 'chemical.dmi' icon = 'chemical.dmi'
icon_state = "beakerlarge" icon_state = "beakerlarge"
item_state = "beaker" item_state = "beaker"
m_amt = 0
g_amt = 5000
volume = 100 volume = 100
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100) possible_transfer_amounts = list(5,10,15,25,30,50,100)

View File

@@ -116,6 +116,7 @@
item_state = "syndicate" item_state = "syndicate"
see_face = 0.0 see_face = 0.0
flags = FPRINT | TABLEPASS | BLOCKHAIR flags = FPRINT | TABLEPASS | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
/obj/item/clothing/head/chaplain_hood /obj/item/clothing/head/chaplain_hood
name = "chaplain's hood" name = "chaplain's hood"
@@ -142,4 +143,5 @@
item_state = "cardborg_h" item_state = "cardborg_h"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
see_face = 0.0 see_face = 0.0
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES flags_inv = HIDEMASK|HIDEEARS|HIDEEYES

View File

@@ -32,8 +32,6 @@
item_state = "thunderdome" item_state = "thunderdome"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0) armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
/obj/item/clothing/head/helmet/welding /obj/item/clothing/head/helmet/welding
name = "welding helmet" name = "welding helmet"
desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye." desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."

View File

@@ -273,7 +273,7 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
/obj/item/clothing/under/rank/medical /obj/item/clothing/under/rank/medical
desc = "It's made of a special fiber that provides minor protection against biohazards. it has a cross on the chest denoting that the wearer is trained medical personnel." desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel."
name = "medical doctor's jumpsuit" name = "medical doctor's jumpsuit"
icon_state = "medical" icon_state = "medical"
item_state = "w_suit" item_state = "w_suit"
@@ -281,12 +281,32 @@
permeability_coefficient = 0.50 permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
//SKRUBS
/obj/item/clothing/under/rank/medical/blue
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
color = "scrubsblue"
/obj/item/clothing/under/rank/medical/green
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
color = "scrubsgreen"
/obj/item/clothing/under/rank/medical/purple
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
color = "scrubspurple"
/obj/item/clothing/under/rank/chief_medical_officer /obj/item/clothing/under/rank/chief_medical_officer
desc = "It's a jumpsuit worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." desc = "It's a jumpsuit worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
name = "chief medical officer's jumpsuit" name = "chief medical officer's jumpsuit"
icon_state = "medical" icon_state = "cmo"
item_state = "w_suit" item_state = "w_suit"
color = "medical" color = "cmo"
permeability_coefficient = 0.50 permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 10, rad = 0) armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 10, rad = 0)
@@ -301,17 +321,17 @@
/obj/item/clothing/under/rank/cargo /obj/item/clothing/under/rank/cargo
name = "quartermaster's jumpsuit" name = "quartermaster's jumpsuit"
desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by heavy lifting." desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
icon_state = "lightbrown" icon_state = "qm"
item_state = "lb_suit" item_state = "lb_suit"
color = "cargo" color = "qm"
/obj/item/clothing/under/rank/cargotech /obj/item/clothing/under/rank/cargotech
name = "cargotech's jumpsuit" name = "cargo technician's jumpsuit"
desc = "<i>'Shooooorts! They're comfy and easy to wear!'</i>" desc = "Shooooorts! They're comfy and easy to wear!"
icon_state = "cargotech" icon_state = "cargotech"
item_state = "cargotech" item_state = "lb_suit"
color = "cargotech" color = "cargo"
/obj/item/clothing/under/rank/mailman /obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit" name = "mailman's jumpsuit"
@@ -532,6 +552,7 @@
armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100) armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
// Cheerleader outfits or something // Cheerleader outfits or something
/obj/item/clothing/under/cheerleader /obj/item/clothing/under/cheerleader
name = "cheerleader uniform" name = "cheerleader uniform"
desc = "Looks breezy." desc = "Looks breezy."
@@ -552,6 +573,7 @@
/obj/item/clothing/under/cheerleader/white /obj/item/clothing/under/cheerleader/white
icon_state = "white_cheer" icon_state = "white_cheer"
color = "white_cheer" color = "white_cheer"
//End of cheerleaders //End of cheerleaders
/obj/item/clothing/under/captainmal /obj/item/clothing/under/captainmal

View File

@@ -62,6 +62,9 @@
/obj/item/clothing/suit/bio_suit/cmo /obj/item/clothing/suit/bio_suit/cmo
icon_state = "bio_cmo" icon_state = "bio_cmo"
/obj/item/clothing/head/bio_hood/cmo
icon_state = "bio_cmo"
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit /obj/item/clothing/suit/bio_suit/plaguedoctorsuit
name = "Plague doctor suit" name = "Plague doctor suit"

View File

@@ -1,14 +1,14 @@
/obj/item/clothing/head/bomb_hood /obj/item/clothing/head/bomb_hood
name = "bomb hood" name = "bomb hood"
desc = "Use in case of bomb." desc = "A hood that protect from explosions. Also provides moderate protection."
icon_state = "bombsuit" icon_state = "bombsuit"
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) armor = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
/obj/item/clothing/suit/bomb_suit /obj/item/clothing/suit/bomb_suit
name = "bomb suit" name = "bomb suit"
desc = "A suit designed for safety when handling explosives." desc = "A suit used for safely disposing explosives. Also provides moderate protection."
icon_state = "bombsuit" icon_state = "bombsuit"
item_state = "bombsuit" item_state = "bombsuit"
w_class = 4//bulky item w_class = 4//bulky item
@@ -17,8 +17,8 @@
heat_transfer_coefficient = 0.30 heat_transfer_coefficient = 0.30
flags = FPRINT | TABLEPASS flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 2 slowdown = 3.5 //To compensate for the extra armour.
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) armor = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEJUMPSUIT flags_inv = HIDEJUMPSUIT

View File

@@ -15,14 +15,14 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/suit/bluetag /obj/item/clothing/suit/bluetag
name = "blue laser tag armour" name = "blue laser tag armour"
desc = "Blue Pride, Station Wide" desc = "Blue Pride, Station Wide"
icon_state = "bluetag" icon_state = "bluetag"
item_state = "bluetag" item_state = "bluetag"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list (/obj/item/weapon/gun/energy/laser/bluetag)
/obj/item/clothing/suit/redtag /obj/item/clothing/suit/redtag
name = "red laser tag armour" name = "red laser tag armour"
@@ -30,6 +30,7 @@
icon_state = "redtag" icon_state = "redtag"
item_state = "redtag" item_state = "redtag"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list (/obj/item/weapon/gun/energy/laser/redtag)
/obj/item/clothing/suit/storage/apron /obj/item/clothing/suit/storage/apron

View File

@@ -46,6 +46,12 @@
icon_state = "steve_johnson_1" icon_state = "steve_johnson_1"
item_state = "steve_johnson_1" item_state = "steve_johnson_1"
/obj/item/fluff/david_fanning_1 //sicktrigger: David Fanning
name = "golden scalpel"
desc = "A fine surgical cutting tool covered in thin gold leaf. Does not seem able to cut anything."
icon_state = "david_fanning_1"
item_state = "david_fanning_1"
////////////////////////////////// //////////////////////////////////
////////// Usable Items ////////// ////////// Usable Items //////////
////////////////////////////////// //////////////////////////////////
@@ -118,13 +124,19 @@
icon_state = "orangecamera" icon_state = "orangecamera"
pictures_left = 30 pictures_left = 30
/obj/item/weapon/card/id/fluff/lifetime //fastler: Fastler Greay; it seemed like something multiple people would have /obj/item/weapon/card/id/fluff/lifetime //fastler: Fastler Greay; it seemed like something multiple people would have
name = "Lifetime ID Card" name = "Lifetime ID Card"
desc = "A modified ID card given only to those people who have devoted their lives to the better interests of NanoTrasen. It sparkles blue." desc = "A modified ID card given only to those people who have devoted their lives to the better interests of NanoTrasen. It sparkles blue."
icon = 'custom_items.dmi' icon = 'custom_items.dmi'
icon_state = "lifetimeid" icon_state = "lifetimeid"
/obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask //lexusjjss: Lexus Langg & Zachary Tomlinson
name = "shiny flask"
desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
icon = 'custom_items.dmi'
icon_state = "shinyflask"
volume = 50
////////////////////////////////// //////////////////////////////////
//////////// Clothing //////////// //////////// Clothing ////////////
////////////////////////////////// //////////////////////////////////
@@ -176,6 +188,13 @@
icon = 'custom_items.dmi' icon = 'custom_items.dmi'
icon_state = "taryn_kifer_1" icon_state = "taryn_kifer_1"
/obj/item/clothing/head/fluff/enos_adlai_1 //roaper: Enos Adlai
name = "comfy cap"
desc = "Because when you're the toughest Mother Hubbard on the station, nobody's criticizing your fashion sense."
icon = 'custom_items.dmi'
icon_state = "enos_adlai_1"
flags = FPRINT|TABLEPASS
//////////// Suits //////////// //////////// Suits ////////////
/obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber /obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber

View File

@@ -29,25 +29,7 @@
handle_regular_hud_updates() handle_regular_hud_updates()
if (src.stat == 2 || src.mutations & XRAY) ..() //-Yvarov
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
src.see_invisible = 2
else if (src.stat != 2)
src.sight |= SEE_MOBS
src.sight |= SEE_TURFS
src.sight &= ~SEE_OBJS
src.see_in_dark = 5
src.see_invisible = 2
if (src.sleep)
src.sleep.icon_state = text("sleep[]", src.sleeping > 0 ? 1 : 0)
src.sleep.overlays = null
if(src.sleeping_willingly)
src.sleep.overlays += icon(src.sleep.icon, "sleep_willing")
if (src.rest) src.rest.icon_state = text("rest[]", src.resting)
if (src.healths) if (src.healths)
if (src.stat != 2) if (src.stat != 2)
@@ -86,7 +68,7 @@
if(src.sleeping) if(src.sleeping)
Paralyse(3) Paralyse(3)
if (prob(10) && health) spawn(0) emote("snore") //if (prob(10) && health) spawn(0) emote("snore") Invalid Emote
if(!src.sleeping_willingly) if(!src.sleeping_willingly)
src.sleeping-- src.sleeping--

View File

@@ -29,25 +29,7 @@
handle_regular_hud_updates() handle_regular_hud_updates()
if (src.stat == 2 || src.mutations & XRAY) ..() //-Yvarov
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
src.see_invisible = 2
else if (src.stat != 2)
src.sight |= SEE_MOBS
src.sight &= SEE_TURFS
src.sight &= ~SEE_OBJS
src.see_in_dark = 7
src.see_invisible = 3
if (src.sleep)
src.sleep.icon_state = text("sleep[]", src.sleeping > 0 ? 1 : 0)
src.sleep.overlays = null
if(src.sleeping_willingly)
src.sleep.overlays += icon(src.sleep.icon, "sleep_willing")
if (src.rest) src.rest.icon_state = text("rest[]", src.resting)
if (src.healths) if (src.healths)
if (src.stat != 2) if (src.stat != 2)
@@ -87,7 +69,7 @@
if(src.sleeping) if(src.sleeping)
Paralyse(3) Paralyse(3)
if (prob(10) && health) spawn(0) emote("snore") //if (prob(10) && health) spawn(0) emote("snore") Invalid Emote
if(!src.sleeping_willingly) if(!src.sleeping_willingly)
src.sleeping-- src.sleeping--

View File

@@ -404,7 +404,7 @@
if(src.sleeping) if(src.sleeping)
Paralyse(3) Paralyse(3)
if (prob(10) && health) spawn(0) emote("snore") //if (prob(10) && health) emote("snore") //Invalid emote for aliens, but it might be worth making sleep noticeable somehow -Yvarov
if(!src.sleeping_willingly) if(!src.sleeping_willingly)
src.sleeping-- src.sleeping--

View File

@@ -32,25 +32,7 @@
handle_regular_hud_updates() handle_regular_hud_updates()
if (src.stat == 2 || src.mutations & XRAY) ..() //-Yvarov
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
src.see_invisible = 2
else if (src.stat != 2)
src.sight |= SEE_MOBS
src.sight |= SEE_TURFS
src.sight &= ~SEE_OBJS
src.see_in_dark = 8
src.see_invisible = 2
if (src.sleep)
src.sleep.icon_state = text("sleep[]", src.sleeping > 0 ? 1 : 0)
src.sleep.overlays = null
if(src.sleeping_willingly)
src.sleep.overlays += icon(src.sleep.icon, "sleep_willing")
if (src.rest) src.rest.icon_state = text("rest[]", src.resting)
if (src.healths) if (src.healths)
if (src.stat != 2) if (src.stat != 2)
@@ -88,7 +70,7 @@
if(src.sleeping) if(src.sleeping)
Paralyse(3) Paralyse(3)
if (prob(10) && health) spawn(0) emote("snore") //if (prob(10) && health) spawn(0) emote("snore") Invalid Emote
if(!src.sleeping_willingly) if(!src.sleeping_willingly)
src.sleeping-- src.sleeping--

View File

@@ -327,7 +327,7 @@
if(sleeping) if(sleeping)
Paralyse(3) Paralyse(3)
if (prob(10) && health) spawn(0) emote("snore") //if (prob(10) && health) spawn(0) emote("snore") Invalid Emote
if(!src.sleeping_willingly) if(!src.sleeping_willingly)
src.sleeping-- src.sleeping--

View File

@@ -116,7 +116,10 @@
//handcuffed? //handcuffed?
if (src.handcuffed) if (src.handcuffed)
msg += "[t_He] [t_is] \icon[src.handcuffed] handcuffed!\n" if(istype(src.handcuffed, /obj/item/weapon/handcuffs/cable))
msg += "<span class='warning'>[t_He] [t_is] \icon[src.handcuffed] restrained with cable!</span>\n"
else
msg += "<span class='warning'>[t_He] [t_is] \icon[src.handcuffed] handcuffed!</span>\n"
//belt //belt
if (src.belt) if (src.belt)

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