Merge branch 'master' of https://www.github.com/ZomgPonies/Paradise
@@ -12,3 +12,4 @@
|
||||
=======
|
||||
data/
|
||||
>>>>>>> 16f787a... Virology - NanoUI, gameplay tweaks, bugfixes
|
||||
maps/cyberiad.dmm.backup
|
||||
|
||||
@@ -29,9 +29,16 @@ var/global/wcCommon
|
||||
/area/security/range,
|
||||
/area/prison/cell_block/A,
|
||||
/area/prison/cell_block/B,
|
||||
/area/prison/cell_block/C,
|
||||
/area/security/prison/cell_block/A,
|
||||
/area/security/prison/cell_block/B,
|
||||
/area/security/prison/cell_block/C,
|
||||
/area/security/processing,
|
||||
/area/security/armoury
|
||||
|
||||
/area/security/armoury,
|
||||
/area/security/securearmoury,
|
||||
/area/security/podbay,
|
||||
/area/security/securehallway,
|
||||
/area/security/medbay
|
||||
)
|
||||
|
||||
for(var/A in wsBrigList)
|
||||
|
||||
@@ -31,8 +31,12 @@
|
||||
if(client.buildmode) // comes after object.Click to allow buildmode gui objects to be clicked
|
||||
build_click(src, client.buildmode, params, A)
|
||||
return
|
||||
|
||||
if(control_disabled || stat)
|
||||
return
|
||||
|
||||
if(alienAI) return
|
||||
if(alienAI)
|
||||
return
|
||||
|
||||
var/list/modifiers = params2list(params)
|
||||
if(modifiers["middle"])
|
||||
@@ -48,7 +52,8 @@
|
||||
CtrlClickOn(A)
|
||||
return
|
||||
|
||||
if(control_disabled || stat || world.time <= next_move) return
|
||||
if(world.time <= next_move)
|
||||
return
|
||||
next_move = world.time + 9
|
||||
|
||||
if(aiCamera.in_camera_mode)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
//Crew Monitorting
|
||||
using = new /obj/screen()
|
||||
using.name = "Crew Monitorting"
|
||||
using.name = "Crew Monitoring"
|
||||
using.icon = 'icons/mob/screen_ai.dmi'
|
||||
using.icon_state = "crew_monitor"
|
||||
using.screen_loc = ui_ai_crew_monitor
|
||||
|
||||
@@ -198,13 +198,20 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
/obj/item/weapon/reagent_containers/glass/rag,
|
||||
/obj/item/weapon/grenade/chem_grenade/cleaner,
|
||||
/obj/item/weapon/grenade/chem_grenade/cleaner,
|
||||
/obj/item/weapon/grenade/chem_grenade/cleaner,
|
||||
/obj/structure/mopbucket)
|
||||
/obj/item/weapon/grenade/chem_grenade/cleaner)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Janitorial supplies"
|
||||
group = "Operations"
|
||||
|
||||
/datum/supply_packs/janicart
|
||||
name = "Janitorial Cart and Galoshes crate"
|
||||
contains = list(/obj/structure/janitorialcart,
|
||||
/obj/item/clothing/shoes/galoshes)
|
||||
cost = 10
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "janitorial cart crate"
|
||||
|
||||
/datum/supply_packs/lightbulbs
|
||||
name = "Replacement lights"
|
||||
contains = list(/obj/item/weapon/storage/box/lights/mixed,
|
||||
|
||||
@@ -357,11 +357,11 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/weapon/soap/syndie
|
||||
cost = 1
|
||||
|
||||
/*/datum/uplink_item/stealthy_weapons/detomatix
|
||||
/datum/uplink_item/stealthy_weapons/detomatix
|
||||
name = "Detomatix PDA Cartridge"
|
||||
desc = "When inserted into a personal digital assistant, this cartridge gives you five opportunities to detonate PDAs of crewmembers who have their message feature enabled. The concussive effect from the explosion will knock the recipient out for a short period, and deafen them for longer. It has a chance to detonate your PDA."
|
||||
item = /obj/item/weapon/cartridge/syndicate
|
||||
cost = 6 */
|
||||
cost = 6
|
||||
|
||||
// Commented out until a fix can be found, currently doesn't work with the PDA NanoUI and people keep wasting Telecrystals on it. -- Dave
|
||||
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
throwforce = 0
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
discrete = 1
|
||||
var/cleanspeed = 50 //slower than mop
|
||||
|
||||
/obj/item/weapon/soap/nanotrasen
|
||||
desc = "A Nanotrasen brand bar of soap. Smells of plasma."
|
||||
@@ -66,11 +68,13 @@
|
||||
icon_state = "soapdeluxe"
|
||||
|
||||
/obj/item/weapon/soap/deluxe/New()
|
||||
desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]."
|
||||
desc = "A deluxe Waffle Co. brand bar of soap. Smells of comdoms."
|
||||
cleanspeed = 40 //same speed as mop because deluxe -- captain gets one of these
|
||||
|
||||
/obj/item/weapon/soap/syndie
|
||||
desc = "An untrustworthy bar of soap. Smells of fear."
|
||||
desc = "An untrustworthy bar of soap made of strong chemical agents that dissolve blood faster."
|
||||
icon_state = "soapsyndie"
|
||||
cleanspeed = 10 //much faster than mop so it is useful for traitors who want to clean crime scenes
|
||||
|
||||
/obj/item/weapon/bikehorn
|
||||
name = "bike horn"
|
||||
@@ -204,6 +208,53 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/holosign_creator
|
||||
name = "holographic sign projector"
|
||||
desc = "A handy-dandy hologaphic projector that displays a janitorial sign."
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "signmaker"
|
||||
item_state = "electronic"
|
||||
force = 5
|
||||
w_class = 2
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
origin_tech = "programming=3"
|
||||
var/list/signs = list()
|
||||
var/max_signs = 10
|
||||
|
||||
/obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag)
|
||||
if(flag)
|
||||
var/turf/T = get_turf(target)
|
||||
var/obj/effect/overlay/holograph/H = locate() in T
|
||||
if(H)
|
||||
user << "<span class='notice'>You use [src] to destroy [H].</span>"
|
||||
del(H)
|
||||
else
|
||||
if(signs.len < max_signs)
|
||||
H = new(get_turf(target))
|
||||
signs += H
|
||||
user << "<span class='notice'>You create \a [H] with [src].</span>"
|
||||
else
|
||||
user << "<span class='notice'>[src] is projecting at max capacity!</span>"
|
||||
|
||||
/obj/item/weapon/holosign_creator/attack(mob/living/carbon/human/M, mob/user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/holosign_creator/attack_self(mob/user)
|
||||
if(signs.len)
|
||||
var/list/L = signs.Copy()
|
||||
for(var/sign in L)
|
||||
del(sign)
|
||||
signs -= sign
|
||||
user << "<span class='notice'>You clear all active holograms.</span>"
|
||||
|
||||
/obj/effect/overlay/holograph
|
||||
name = "wet floor sign"
|
||||
desc = "The words flicker as if they mean nothing."
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "holosign"
|
||||
anchored = 1
|
||||
|
||||
/obj/item/weapon/caution
|
||||
desc = "Caution! Wet Floor!"
|
||||
|
||||
@@ -543,39 +543,39 @@ var/list/ghostteleportlocs = list()
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/syndicate_station/southwest
|
||||
name = "\improper south-west of SS13"
|
||||
name = "\improper South-West of SS13"
|
||||
icon_state = "southwest"
|
||||
|
||||
/area/syndicate_station/northwest
|
||||
name = "\improper north-west of SS13"
|
||||
name = "\improper North-West of SS13"
|
||||
icon_state = "northwest"
|
||||
|
||||
/area/syndicate_station/northeast
|
||||
name = "\improper north-east of SS13"
|
||||
name = "\improper North-East of SS13"
|
||||
icon_state = "northeast"
|
||||
|
||||
/area/syndicate_station/southeast
|
||||
name = "\improper south-east of SS13"
|
||||
name = "\improper South-East of SS13"
|
||||
icon_state = "southeast"
|
||||
|
||||
/area/syndicate_station/north
|
||||
name = "\improper north of SS13"
|
||||
name = "\improper North of SS13"
|
||||
icon_state = "north"
|
||||
|
||||
/area/syndicate_station/south
|
||||
name = "\improper south of SS13"
|
||||
name = "\improper South of SS13"
|
||||
icon_state = "south"
|
||||
|
||||
/area/syndicate_station/commssat
|
||||
name = "\improper south of the communication satellite"
|
||||
name = "\improper South of the Communication Satellite"
|
||||
icon_state = "south"
|
||||
|
||||
/area/syndicate_station/mining
|
||||
name = "\improper north east of the mining asteroid"
|
||||
name = "\improper North-East of the Mining Asteroid"
|
||||
icon_state = "north"
|
||||
|
||||
/area/syndicate_station/transit
|
||||
name = "\improper hyperspace"
|
||||
name = "\improper Hyperspace"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/wizard_station
|
||||
@@ -596,66 +596,66 @@ var/list/ghostteleportlocs = list()
|
||||
|
||||
|
||||
/area/vox_station/transit
|
||||
name = "\improper hyperspace"
|
||||
name = "\improper Hyperspace"
|
||||
icon_state = "shuttle"
|
||||
requires_power = 0
|
||||
|
||||
/area/vox_station/southwest_solars
|
||||
name = "\improper aft port solars"
|
||||
name = "\improper Aft Port Solars"
|
||||
icon_state = "southwest"
|
||||
requires_power = 0
|
||||
|
||||
/area/vox_station/northwest_solars
|
||||
name = "\improper fore port solars"
|
||||
name = "\improper Fore Port Solars"
|
||||
icon_state = "northwest"
|
||||
requires_power = 0
|
||||
|
||||
/area/vox_station/northeast_solars
|
||||
name = "\improper fore starboard solars"
|
||||
name = "\improper Fore Starboard Solars"
|
||||
icon_state = "northeast"
|
||||
requires_power = 0
|
||||
|
||||
/area/vox_station/southeast_solars
|
||||
name = "\improper aft starboard solars"
|
||||
name = "\improper Aft Starboard Solars"
|
||||
icon_state = "southeast"
|
||||
requires_power = 0
|
||||
|
||||
/area/vox_station/mining
|
||||
name = "\improper nearby mining asteroid"
|
||||
name = "\improper Nearby Mining Asteroid"
|
||||
icon_state = "north"
|
||||
requires_power = 0
|
||||
|
||||
/area/xenos_station/start
|
||||
name = "\improper start area"
|
||||
name = "\improper Start Area"
|
||||
icon_state = "north"
|
||||
|
||||
/area/xenos_station/transit
|
||||
name = "\improper hyperspace"
|
||||
name = "\improper Hyperspace"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/xenos_station/southwest
|
||||
name = "\improper aft port solars"
|
||||
name = "\improper Aft Port Solars"
|
||||
icon_state = "southwest"
|
||||
|
||||
/area/xenos_station/northwest
|
||||
name = "\improper fore port solars"
|
||||
name = "\improper Fore Port Solars"
|
||||
icon_state = "northwest"
|
||||
|
||||
/area/xenos_station/northeast
|
||||
name = "\improper fore starboard solars"
|
||||
name = "\improper Fore Starboard Solars"
|
||||
icon_state = "northeast"
|
||||
requires_power = 0
|
||||
|
||||
/area/xenos_station/southeast
|
||||
name = "\improper aft starboard solars"
|
||||
name = "\improper Aft Starboard Solars"
|
||||
icon_state = "southeast"
|
||||
|
||||
/area/xenos_station/north
|
||||
name = "\improper west landing area"
|
||||
name = "\improper West Landing Area"
|
||||
icon_state = "north"
|
||||
|
||||
/area/xenos_station/south
|
||||
name = "\improper east landing area"
|
||||
name = "\improper East Landing Area"
|
||||
icon_state = "south"
|
||||
|
||||
//PRISON
|
||||
@@ -1023,11 +1023,27 @@ var/list/ghostteleportlocs = list()
|
||||
/area/chapel/office
|
||||
name = "\improper Chapel Office"
|
||||
icon_state = "chapeloffice"
|
||||
|
||||
/area/escapepodbay
|
||||
name = "Escape Shuttle Hallway Podbay"
|
||||
icon_state = "escape"
|
||||
|
||||
/area/lawoffice
|
||||
name = "\improper Law Office"
|
||||
icon_state = "law"
|
||||
|
||||
|
||||
/area/magistrateoffice
|
||||
name = "\improper Magistrate's Office"
|
||||
icon_state = "law"
|
||||
|
||||
area/clownoffice
|
||||
name = "\improper Clown's Office"
|
||||
icon_state = "dk_yellow"
|
||||
|
||||
area/mimeoffice
|
||||
name = "\improper Mime's Office"
|
||||
icon_state = "dk_yellow"
|
||||
|
||||
/area/civilian/barber
|
||||
name = "\improper Barber Shop"
|
||||
icon_state = "barber"
|
||||
@@ -1188,19 +1204,19 @@ var/list/ghostteleportlocs = list()
|
||||
icon_state = "panelsP"
|
||||
|
||||
/area/maintenance/auxsolarport
|
||||
name = "Fore Port Solar Maintenance"
|
||||
name = "\improper Fore Port Solar Maintenance"
|
||||
icon_state = "SolarcontrolA"
|
||||
|
||||
/area/maintenance/starboardsolar
|
||||
name = "Aft Starboard Solar Maintenance"
|
||||
name = "\improper Aft Starboard Solar Maintenance"
|
||||
icon_state = "SolarcontrolS"
|
||||
|
||||
/area/maintenance/portsolar
|
||||
name = "Aft Port Solar Maintenance"
|
||||
name = "\improper Aft Port Solar Maintenance"
|
||||
icon_state = "SolarcontrolP"
|
||||
|
||||
/area/maintenance/auxsolarstarboard
|
||||
name = "Fore Starboard Solar Maintenance"
|
||||
name = "\improper Fore Starboard Solar Maintenance"
|
||||
icon_state = "SolarcontrolA"
|
||||
|
||||
|
||||
@@ -1334,6 +1350,10 @@ var/list/ghostteleportlocs = list()
|
||||
/area/medical/virology
|
||||
name = "\improper Virology"
|
||||
icon_state = "virology"
|
||||
|
||||
/area/medical/virology/lab
|
||||
name = "\improper Virology Laboratory"
|
||||
icon_state = "virology"
|
||||
|
||||
/area/medical/morgue
|
||||
name = "\improper Morgue"
|
||||
@@ -1370,6 +1390,10 @@ var/list/ghostteleportlocs = list()
|
||||
/area/medical/sleeper
|
||||
name = "\improper Medical Treatment Center"
|
||||
icon_state = "exam_room"
|
||||
|
||||
/area/medical/paramedic
|
||||
name = "\improper Paramedic"
|
||||
icon_state = "medbay"
|
||||
|
||||
//Security
|
||||
|
||||
@@ -1378,7 +1402,7 @@ var/list/ghostteleportlocs = list()
|
||||
icon_state = "security"
|
||||
|
||||
/area/security/lobby
|
||||
name = "\improper Security lobby"
|
||||
name = "\improper Security Lobby"
|
||||
icon_state = "security"
|
||||
|
||||
/area/security/brig
|
||||
@@ -1388,11 +1412,31 @@ var/list/ghostteleportlocs = list()
|
||||
/area/security/prison
|
||||
name = "\improper Prison Wing"
|
||||
icon_state = "sec_prison"
|
||||
|
||||
/area/security/prison/cell_block/A
|
||||
name = "Prison Cell Block A"
|
||||
icon_state = "brig"
|
||||
|
||||
/area/security/prison/cell_block/B
|
||||
name = "Prison Cell Block B"
|
||||
icon_state = "brig"
|
||||
|
||||
/area/security/prison/cell_block/C
|
||||
name = "Prison Cell Block C"
|
||||
icon_state = "brig"
|
||||
|
||||
/area/security/medbay
|
||||
name = "\improper Security Medbay"
|
||||
icon_state = "brig"
|
||||
|
||||
/area/security/processing
|
||||
name = "\improper Prisoner Processing"
|
||||
icon_state = "sec_prison"
|
||||
|
||||
/area/security/warden
|
||||
name = "\improper Security Medbay"
|
||||
icon_state = "Warden"
|
||||
|
||||
/area/security/warden
|
||||
name = "\improper Warden"
|
||||
icon_state = "Warden"
|
||||
@@ -1400,13 +1444,27 @@ var/list/ghostteleportlocs = list()
|
||||
/area/security/armoury
|
||||
name = "\improper Armory"
|
||||
icon_state = "Warden"
|
||||
|
||||
/area/security/securearmoury
|
||||
name = "\improper Secure Armory"
|
||||
icon_state = "Warden"
|
||||
|
||||
/area/security/armoury/gamma
|
||||
name = "\improper Gamma Armory"
|
||||
icon_state = "Warden"
|
||||
requires_power = 0
|
||||
|
||||
/area/security/securehallway
|
||||
name = "\improper Security Secure Hallway"
|
||||
icon_state = "security"
|
||||
|
||||
/area/security/hos
|
||||
name = "\improper Head of Security's Office"
|
||||
icon_state = "sec_hos"
|
||||
|
||||
area/security/podbay
|
||||
name = "\improper Security Podbay"
|
||||
icon_state = "security"
|
||||
|
||||
/area/security/detectives_office
|
||||
name = "\improper Detective's Office"
|
||||
@@ -1510,7 +1568,7 @@ var/list/ghostteleportlocs = list()
|
||||
icon_state = "janitor"
|
||||
|
||||
/area/hydroponics
|
||||
name = "Hydroponics"
|
||||
name = "\improper Hydroponics"
|
||||
icon_state = "hydro"
|
||||
|
||||
//Toxins
|
||||
@@ -1534,6 +1592,10 @@ var/list/ghostteleportlocs = list()
|
||||
/area/toxins/xenobiology
|
||||
name = "\improper Xenobiology Lab"
|
||||
icon_state = "toxlab"
|
||||
|
||||
/area/toxins/xenobiology/flora
|
||||
name = "\improper Xenobiology Flora Lab"
|
||||
icon_state = "toxlab"
|
||||
|
||||
/area/toxins/storage
|
||||
name = "\improper Toxins Storage"
|
||||
@@ -2183,7 +2245,11 @@ var/list/the_station_areas = list (
|
||||
/area/holodeck,
|
||||
/area/library,
|
||||
/area/chapel,
|
||||
/area/escapepodbay,
|
||||
/area/lawoffice,
|
||||
/area/magistrateoffice,
|
||||
/area/clownoffice,
|
||||
/area/mimeoffice,
|
||||
/area/engine,
|
||||
/area/solar,
|
||||
/area/assembly,
|
||||
|
||||
@@ -12,7 +12,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
required_players = 2
|
||||
required_players_secret = 10
|
||||
required_enemies = 1
|
||||
recommended_enemies = 2
|
||||
recommended_enemies = 4
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_uses = 20
|
||||
|
||||
@@ -21,17 +21,18 @@ var/bomb_set
|
||||
var/light_wire
|
||||
var/safety_wire
|
||||
var/timing_wire
|
||||
var/removal_stage = 0 // 0 is no removal, 1 is covers removed, 2 is covers open,
|
||||
// 3 is sealant open, 4 is unwrenched, 5 is removed from bolts.
|
||||
var/removal_stage = 0 // 0 is no removal, 1 is covers removed, 2 is covers open, 3 is sealant open, 4 is unwrenched, 5 is removed from bolts.
|
||||
var/lastentered
|
||||
var/data[0]
|
||||
var/uiwidth
|
||||
var/uiheight
|
||||
var/uititle
|
||||
flags = FPRINT
|
||||
use_power = 0
|
||||
|
||||
|
||||
|
||||
/obj/machinery/nuclearbomb/New()
|
||||
..()
|
||||
r_code = "[rand(10000, 99999.0)]"//Creates a random code upon object spawn.
|
||||
|
||||
src.wires["Red"] = 0
|
||||
src.wires["Blue"] = 0
|
||||
src.wires["Green"] = 0
|
||||
@@ -55,11 +56,10 @@ var/bomb_set
|
||||
explode()
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if ((M.client && M.machine == src))
|
||||
src.attack_hand(M)
|
||||
nanomanager.update_uis(src)
|
||||
return
|
||||
|
||||
/obj/machinery/nuclearbomb/attackby(obj/item/weapon/O as obj, mob/user as mob)
|
||||
|
||||
if (istype(O, /obj/item/weapon/screwdriver))
|
||||
src.add_fingerprint(user)
|
||||
if (src.auth)
|
||||
@@ -67,35 +67,37 @@ var/bomb_set
|
||||
src.opened = 1
|
||||
overlays += image(icon, "npanel_open")
|
||||
user << "You unscrew the control panel of [src]."
|
||||
|
||||
else
|
||||
src.opened = 0
|
||||
overlays -= image(icon, "npanel_open")
|
||||
user << "You screw the control panel of [src] back on."
|
||||
else
|
||||
if (src.opened == 0)
|
||||
user << "The [src] emits a buzzing noise, the panel staying locked in."
|
||||
user << "[src] emits a buzzing noise, the panel staying locked in."
|
||||
if (src.opened == 1)
|
||||
src.opened = 0
|
||||
overlays -= image(icon, "npanel_open")
|
||||
user << "You screw the control panel of [src] back on."
|
||||
flick("nuclearbombc", src)
|
||||
|
||||
ui_interact(user)
|
||||
return
|
||||
|
||||
if (istype(O, /obj/item/device/multitool) || istype(O, /obj/item/weapon/wirecutters))
|
||||
ui_interact(user)
|
||||
|
||||
if (src.extended)
|
||||
if (istype(O, /obj/item/weapon/disk/nuclear))
|
||||
usr.drop_item()
|
||||
O.loc = src
|
||||
src.auth = O
|
||||
src.add_fingerprint(user)
|
||||
ui_interact(user)
|
||||
return
|
||||
|
||||
if (src.anchored)
|
||||
switch(removal_stage)
|
||||
if(0)
|
||||
if(istype(O,/obj/item/weapon/weldingtool))
|
||||
|
||||
var/obj/item/weapon/weldingtool/WT = O
|
||||
if(!WT.isOn()) return
|
||||
if (WT.get_fuel() < 5) // uses up 5 fuel.
|
||||
@@ -169,25 +171,7 @@ var/bomb_set
|
||||
if (src.opened)
|
||||
nukehack_win(user,50)
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT><B>Nuclear Fission Explosive</B><BR>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", src, (src.auth ? "++++++++++" : "----------"))
|
||||
if (src.auth)
|
||||
if (src.yes_code)
|
||||
dat += text("\n<B>Status</B>: []-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] <A href='?src=\ref[];timer=1'>Toggle</A><BR>\nTime: <A href='?src=\ref[];time=-10'>-</A> <A href='?src=\ref[];time=-1'>-</A> [] <A href='?src=\ref[];time=1'>+</A> <A href='?src=\ref[];time=10'>+</A><BR>\n<BR>\nSafety: [] <A href='?src=\ref[];safety=1'>Toggle</A><BR>\nAnchor: [] <A href='?src=\ref[];anchor=1'>Toggle</A><BR>\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src)
|
||||
else
|
||||
dat += text("\n<B>Status</B>: Auth. S2-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\n[] Safety: Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
else
|
||||
if (src.timing)
|
||||
dat += text("\n<B>Status</B>: Set-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
else
|
||||
dat += text("\n<B>Status</B>: Auth. S1-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
var/message = "AUTH"
|
||||
if (src.auth)
|
||||
message = text("[]", src.code)
|
||||
if (src.yes_code)
|
||||
message = "*****"
|
||||
dat += text("<HR>\n>[]<BR>\n<A href='?src=\ref[];type=1'>1</A>-<A href='?src=\ref[];type=2'>2</A>-<A href='?src=\ref[];type=3'>3</A><BR>\n<A href='?src=\ref[];type=4'>4</A>-<A href='?src=\ref[];type=5'>5</A>-<A href='?src=\ref[];type=6'>6</A><BR>\n<A href='?src=\ref[];type=7'>7</A>-<A href='?src=\ref[];type=8'>8</A>-<A href='?src=\ref[];type=9'>9</A><BR>\n<A href='?src=\ref[];type=R'>R</A>-<A href='?src=\ref[];type=0'>0</A>-<A href='?src=\ref[];type=E'>E</A><BR>\n</TT>", message, src, src, src, src, src, src, src, src, src, src, src, src)
|
||||
user << browse(dat, "window=nuclearbomb;size=300x400")
|
||||
onclose(user, "nuclearbomb")
|
||||
ui_interact(user)
|
||||
else if (src.deployable)
|
||||
if(removal_stage < 5)
|
||||
src.anchored = 1
|
||||
@@ -201,15 +185,53 @@ var/bomb_set
|
||||
return
|
||||
|
||||
obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
var/dat as text
|
||||
dat += "<TT><B>Nuclear Fission Explosive</B><BR>\nNuclear Device Wires:</A><HR>"
|
||||
for(var/wire in src.wires)
|
||||
dat += text("[wire] Wire: <A href='?src=\ref[src];wire=[wire];act=wire'>[src.wires[wire] ? "Mend" : "Cut"]</A> <A href='?src=\ref[src];wire=[wire];act=pulse'>Pulse</A><BR>")
|
||||
dat += text("<HR>The device is [src.timing ? "shaking!" : "still"]<BR>")
|
||||
dat += text("The device is [src.safety ? "quiet" : "whirring"].<BR>")
|
||||
dat += text("The lights are [src.lighthack ? "static" : "functional"].<BR>")
|
||||
user << browse("<HTML><HEAD><TITLE>Bomb Defusion</TITLE></HEAD><BODY>[dat]</BODY></HTML>","window=nukebomb_hack")
|
||||
onclose(user, "nukebomb_hack")
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
if(!src.opened)
|
||||
data["hacking"] = 0
|
||||
data["auth"] = src.auth
|
||||
if (src.auth)
|
||||
if (src.yes_code)
|
||||
data["authstatus"] = src.timing ? "Functional/Set" : "Functional"
|
||||
else
|
||||
data["authstatus"] = "Auth. S2"
|
||||
else
|
||||
if (src.timing)
|
||||
data["authstatus"] = "Set"
|
||||
else
|
||||
data["authstatus"] = "Auth. S1"
|
||||
data["safe"] = src.safety ? "Safe" : "Engaged"
|
||||
data["time"] = src.timeleft
|
||||
data["timer"] = src.timing
|
||||
data["safety"] = src.safety
|
||||
data["anchored"] = src.anchored
|
||||
data["yescode"] = src.yes_code
|
||||
data["message"] = "AUTH"
|
||||
if (src.auth)
|
||||
data["message"] = src.code
|
||||
if (src.yes_code)
|
||||
data["message"] = "*****"
|
||||
uiwidth = 300
|
||||
uiheight = 510
|
||||
uititle = "Nuke Control Panel"
|
||||
else
|
||||
data["hacking"] = 1
|
||||
var/list/tempwires[0]
|
||||
for(var/wire in src.wires)
|
||||
tempwires.Add(list(list("name" = wire, "cut" = src.wires[wire])))
|
||||
data["wires"] = tempwires
|
||||
data["timing"] = src.timing
|
||||
data["safety"] = src.safety
|
||||
data["lighthack"] = src.lighthack
|
||||
uiwidth = 420
|
||||
uiheight = 440
|
||||
uititle = "Nuclear Bomb Defusion"
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "nuclear_bomb.tmpl", uititle, uiwidth, uiheight)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/nuclearbomb/verb/make_deployable()
|
||||
set category = "Object"
|
||||
@@ -224,9 +246,9 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
src.deployable = 1
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/nuclearbomb/Topic(href, href_list)
|
||||
..()
|
||||
if(..())
|
||||
return
|
||||
if (!usr.canmove || usr.stat || usr.restrained())
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
@@ -297,9 +319,15 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
src.yes_code = 0
|
||||
src.code = null
|
||||
else
|
||||
src.code += text("[]", href_list["type"])
|
||||
if (length(src.code) > 5)
|
||||
src.code = "ERROR"
|
||||
lastentered = text("[]", href_list["type"])
|
||||
if (text2num(lastentered) == null)
|
||||
var/turf/LOC = get_turf(usr)
|
||||
message_admins("[key_name_admin(usr)] tried to exploit a nuclear bomb by entering non-numerical codes: <a href='?_src_=vars;Vars=\ref[src]'>[lastentered]</a>! ([LOC ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[LOC.x];Y=[LOC.y];Z=[LOC.z]'>JMP</a>" : "null"])", 0)
|
||||
log_admin("EXPLOIT: [key_name(usr)] tried to exploit a nuclear bomb by entering non-numerical codes: [lastentered]!")
|
||||
else
|
||||
src.code += lastentered
|
||||
if (length(src.code) > 5)
|
||||
src.code = "ERROR"
|
||||
if (src.yes_code)
|
||||
if (href_list["time"])
|
||||
var/time = text2num(href_list["time"])
|
||||
@@ -309,7 +337,8 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
if (src.timing == -1.0)
|
||||
return
|
||||
if (src.safety)
|
||||
usr << "\red The safety is still on."
|
||||
usr << "\red The safety is still on."
|
||||
nanomanager.update_uis(src)
|
||||
return
|
||||
src.timing = !( src.timing )
|
||||
if (src.timing)
|
||||
@@ -329,7 +358,6 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
src.timing = 0
|
||||
bomb_set = 0
|
||||
if (href_list["anchor"])
|
||||
|
||||
if(removal_stage == 5)
|
||||
src.anchored = 0
|
||||
visible_message("\red \The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.")
|
||||
@@ -344,9 +372,8 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
src.add_fingerprint(usr)
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if ((M.client && M.machine == src))
|
||||
src.attack_hand(M)
|
||||
nanomanager.update_uis(src)
|
||||
else
|
||||
usr << browse(null, "window=nuclearbomb")
|
||||
return
|
||||
return
|
||||
|
||||
@@ -398,8 +425,12 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
ticker.mode.explosion_in_progress = 0
|
||||
if(ticker.mode.name == "nuclear emergency")
|
||||
ticker.mode:nukes_left --
|
||||
else if(off_station == 1)
|
||||
world << "<b>A nuclear device was set off, but the explosion was out of reach of the station!</b>"
|
||||
else if(off_station == 2)
|
||||
world << "<b>A nuclear device was set off, but the device was not on the station!</b>"
|
||||
else
|
||||
world << "<B>The station was destoyed by the nuclear blast!</B>"
|
||||
world << "<b>The station was destoyed by the nuclear blast!</b>"
|
||||
|
||||
ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
|
||||
//kinda shit but I couldn't get permission to do what I wanted to do.
|
||||
@@ -412,7 +443,7 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
sleep(300)
|
||||
log_game("Rebooting due to nuclear detonation")
|
||||
log_game("Rebooting due to nuclear detonation.")
|
||||
world.Reboot()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/datum/theft_objective/antique_laser_gun
|
||||
name = "the captain's antique laser gun"
|
||||
typepath = /obj/item/weapon/gun/energy/laser/captain
|
||||
@@ -54,9 +53,9 @@
|
||||
typepath = /obj/item/device/aicard
|
||||
|
||||
/datum/theft_objective/magboots
|
||||
name = "a pair of magboots"
|
||||
typepath = /obj/item/clothing/shoes/magboots
|
||||
protected_jobs = list("Station Engineer", "Life Support Specialist", "Chief Engineer")
|
||||
name = "the chief engineer's advanced magnetic boots"
|
||||
typepath = /obj/item/clothing/shoes/magboots/advance
|
||||
protected_jobs = list("Chief Engineer")
|
||||
|
||||
/datum/theft_objective/blueprints
|
||||
name = "the station blueprints"
|
||||
@@ -76,6 +75,21 @@
|
||||
name = "a piece of corgi meat"
|
||||
typepath = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
||||
|
||||
/datum/theft_objective/capmedal
|
||||
name = "the medal of captaincy"
|
||||
typepath = /obj/item/clothing/tie/medal/gold/captain
|
||||
protected_jobs = list("Captain")
|
||||
|
||||
/datum/theft_objective/nukedisc
|
||||
name = "the nuclear authentication disk"
|
||||
typepath = /obj/item/weapon/disk/nuclear
|
||||
protected_jobs = list("Captain")
|
||||
|
||||
/datum/theft_objective/reactive
|
||||
name = "the reactive teleport armor"
|
||||
typepath = /obj/item/clothing/suit/armor/reactive
|
||||
protected_jobs = list("Research Director")
|
||||
|
||||
/datum/theft_objective/rd_jumpsuit
|
||||
name = "the research director's jumpsuit"
|
||||
typepath = /obj/item/clothing/under/rank/research_director
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
required_players = 2
|
||||
required_players_secret = 10
|
||||
required_enemies = 1
|
||||
recommended_enemies = 2
|
||||
recommended_enemies = 4
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_uses = 20
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
|
||||
else
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/melee/telebaton(H.back), slot_in_backpack)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -83,7 +84,7 @@
|
||||
supervisors = "the chief engineer"
|
||||
selection_color = "#fff5cc"
|
||||
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics)
|
||||
minimal_access = list(access_eva, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction)
|
||||
minimal_access = list(access_eva, access_atmospherics, access_maint_tunnels, access_external_airlocks, access_emergency_storage, access_construction)
|
||||
alt_titles = list("Atmospheric Technician")
|
||||
minimal_player_age = 7
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
else
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/melee/telebaton(H.back), slot_in_backpack)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/melee/telebaton(H.back), slot_in_backpack)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
else
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/melee/telebaton(H.back), slot_in_backpack)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/ids(H), slot_r_hand)
|
||||
else
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/melee/telebaton(H.back), slot_in_backpack)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
@@ -84,6 +85,7 @@
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/ids(H), slot_r_hand)
|
||||
else
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/melee/telebaton(H.back), slot_in_backpack)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
|
||||
@@ -300,7 +300,6 @@
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
else
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/key(H), slot_l_store)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
var/obj/effect/decal/cleanable/target
|
||||
var/obj/effect/decal/cleanable/oldtarget
|
||||
var/oldloc = null
|
||||
req_access = list(access_janitor)
|
||||
req_access = list(access_janitor, access_robotics)
|
||||
var/path[] = new()
|
||||
var/patrol_path[] = null
|
||||
var/beacon_freq = 1445 // navigation beacon frequency
|
||||
|
||||
@@ -52,7 +52,8 @@
|
||||
var/safe_weapons = list(\
|
||||
/obj/item/weapon/gun/energy/laser/bluetag,\
|
||||
/obj/item/weapon/gun/energy/laser/redtag,\
|
||||
/obj/item/weapon/gun/energy/laser/practice)
|
||||
/obj/item/weapon/gun/energy/laser/practice,\
|
||||
/obj/item/weapon/melee/telebaton)
|
||||
|
||||
var/turf/patrol_target // this is turf to navigate to (location of beacon)
|
||||
var/new_destination // pending new destination (waiting for beacon response)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
anchored = 0
|
||||
health = 20
|
||||
maxhealth = 20
|
||||
req_access =list(access_medical)
|
||||
req_access =list(access_medical, access_robotics)
|
||||
var/stunned = 0 //It can be stunned by tasers. Delicate circuits.
|
||||
//var/emagged = 0
|
||||
var/list/botcard_access = list(access_medical)
|
||||
|
||||
@@ -57,7 +57,9 @@
|
||||
var/safe_weapons = list(\
|
||||
/obj/item/weapon/gun/energy/laser/bluetag,\
|
||||
/obj/item/weapon/gun/energy/laser/redtag,\
|
||||
/obj/item/weapon/gun/energy/laser/practice)
|
||||
/obj/item/weapon/gun/energy/laser/practice,\
|
||||
/obj/item/weapon/melee/telebaton,\
|
||||
/obj/item/weapon/melee/baton/loaded/ntcane)
|
||||
|
||||
|
||||
/obj/machinery/bot/secbot/beepsky
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/mob/living/silicon/ai/proc/get_camera_list()
|
||||
|
||||
if(src.stat == 2)
|
||||
return
|
||||
|
||||
@@ -15,13 +14,11 @@
|
||||
var/list/tempnetwork = C.network&src.network
|
||||
if (tempnetwork.len)
|
||||
T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
|
||||
else return
|
||||
|
||||
track = new()
|
||||
track.cameras = T
|
||||
return T
|
||||
|
||||
|
||||
/mob/living/silicon/ai/proc/ai_camera_list(var/camera in get_camera_list())
|
||||
if(src.stat == 2)
|
||||
src << "You can't list the cameras because you are dead!"
|
||||
@@ -29,7 +26,7 @@
|
||||
|
||||
if (!camera || camera == "Cancel")
|
||||
return 0
|
||||
|
||||
|
||||
var/obj/machinery/camera/C = track.cameras[camera]
|
||||
track = null
|
||||
src.eyeobj.setLoc(C)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2,
|
||||
/obj/item/clothing/under/syndicate/tacticool = 2,
|
||||
/obj/item/toy/blink = 2,
|
||||
/obj/item/clothing/suit/syndicatefake = 2,
|
||||
/obj/item/weapon/storage/box/fakesyndiesuit = 2,
|
||||
/obj/item/toy/sword = 2,
|
||||
/obj/item/toy/gun = 2,
|
||||
/obj/item/toy/crossbow = 2,
|
||||
@@ -26,7 +26,10 @@
|
||||
/obj/item/toy/prize/mauler = 1,
|
||||
/obj/item/toy/prize/odysseus = 1,
|
||||
/obj/item/toy/prize/phazon = 1,
|
||||
/obj/item/toy/nuke = 2
|
||||
/obj/item/toy/nuke = 2,
|
||||
/obj/item/toy/cards/deck = 2,
|
||||
/obj/item/toy/carpplushie = 2,
|
||||
/obj/item/toy/minimeteor = 2,
|
||||
)
|
||||
|
||||
/obj/machinery/computer/arcade/power_change()
|
||||
|
||||
@@ -18,20 +18,27 @@
|
||||
networks["SS13"] = list(access_hos,access_captain)
|
||||
networks["Telecomms"] = list(access_hos,access_captain)
|
||||
networks["Research Outpost"] = list(access_rd,access_hos,access_captain)
|
||||
networks["Mining Outpost"] = list(access_qm,access_hop,access_hos,access_captain)
|
||||
networks["Mining Outpost"] = list(access_qm,access_hop,access_hos,access_captain)
|
||||
networks["Research"] = list(access_rd,access_hos,access_captain)
|
||||
networks["Prison"] = list(access_hos,access_captain)
|
||||
networks["Interrogation"] = list(access_hos,access_captain)
|
||||
networks["Interrogation"] = list(access_hos,access_captain)
|
||||
networks["Atmosphere Alarms"] = list(access_ce,access_hos,access_captain)
|
||||
networks["Fire Alarms"] = list(access_ce,access_hos,access_captain)
|
||||
networks["Power Alarms"] = list(access_ce,access_hos,access_captain)
|
||||
networks["Supermatter"] = list(access_ce,access_hos,access_captain)
|
||||
networks["Singularity"] = list(access_ce,access_hos,access_captain)
|
||||
networks["Singularity"] = list(access_ce,access_hos,access_captain)
|
||||
networks["Anomaly Isolation"] = list(access_rd,access_hos,access_captain)
|
||||
networks["Toxins"] = list(access_rd,access_hos,access_captain)
|
||||
networks["Telepad"] = list(access_rd,access_hos,access_captain)
|
||||
networks["ERT"] = list(access_cent_teleporter,access_cent_captain)
|
||||
networks["CentCom"] = list(access_cent_captain)
|
||||
networks["Thunderdome"] = list(access_cent_captain)
|
||||
networks["Thunderdome"] = list(access_cent_captain)
|
||||
|
||||
attack_ai(var/mob/user as mob)
|
||||
return ui_interact(user)
|
||||
if(isAI(user))
|
||||
return ui_interact(user)
|
||||
else
|
||||
return attack_hand(user)
|
||||
|
||||
attack_paw(var/mob/user as mob)
|
||||
return attack_hand(user)
|
||||
@@ -261,4 +268,4 @@
|
||||
name = "Engineering Camera Monitor"
|
||||
desc = "Used to monitor fires and breaches."
|
||||
icon_state = "engineeringcameras"
|
||||
network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
|
||||
network = list("Power Alarms","Atmosphere Alarms","Fire Alarms")
|
||||
@@ -25,7 +25,10 @@
|
||||
if(T && istype(T) && T.zone)
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
for(var/i=1;i<=stats.len;i++)
|
||||
rstats[i] = environment.vars[stats[i]]
|
||||
if(stats[i] == "pressure")
|
||||
rstats[i] = environment.return_pressure()
|
||||
else
|
||||
rstats[i] = environment.vars[stats[i]]
|
||||
else if(istype(T, /turf/simulated))
|
||||
rstats = null // Exclude zone (wall, door, etc).
|
||||
else if(istype(T, /turf))
|
||||
@@ -100,6 +103,7 @@
|
||||
/obj/machinery/door/firedoor/examine()
|
||||
set src in view()
|
||||
. = ..()
|
||||
|
||||
if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF)
|
||||
usr << "<span class='warning'>WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!</span>"
|
||||
|
||||
@@ -125,7 +129,7 @@
|
||||
o += "<span class='warning'>"
|
||||
else
|
||||
o += "<span style='color:blue'>"
|
||||
o += "[celsius]?C</span> "
|
||||
o += "[celsius]°C</span> "
|
||||
o += "<span style='color:blue'>"
|
||||
o += "[pressure]kPa</span></li>"
|
||||
usr << o
|
||||
@@ -159,7 +163,6 @@
|
||||
stat |= NOPOWER
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/door/firedoor/attack_hand(mob/user as mob)
|
||||
return attackby(null, user)
|
||||
|
||||
@@ -279,8 +282,42 @@
|
||||
if(alarmed)
|
||||
nextstate = CLOSED
|
||||
|
||||
/obj/machinery/door/firedoor/attack_ai(mob/user as mob)
|
||||
if(operating)
|
||||
return //Already doing something.
|
||||
|
||||
if(blocked)
|
||||
user << "\red \The [src] is welded solid!"
|
||||
return
|
||||
|
||||
var/area/A = get_area_master(src)
|
||||
ASSERT(istype(A)) // This worries me.
|
||||
var/alarmed = A.air_doors_activated || A.fire
|
||||
|
||||
var/access_granted = 0
|
||||
if(isAI(user) || isrobot(user))
|
||||
access_granted = 1
|
||||
|
||||
if(access_granted == 1)
|
||||
user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\
|
||||
"\The [src] [density ? "open" : "close"]s.",\
|
||||
"You hear a beep, and a door opening.")
|
||||
|
||||
var/needs_to_close = 0
|
||||
if(density)
|
||||
if(alarmed)
|
||||
needs_to_close = 1
|
||||
spawn()
|
||||
open()
|
||||
else
|
||||
spawn()
|
||||
close()
|
||||
|
||||
if(needs_to_close)
|
||||
spawn(50)
|
||||
if(alarmed)
|
||||
nextstate = CLOSED
|
||||
|
||||
// CHECK PRESSURE
|
||||
/obj/machinery/door/firedoor/process()
|
||||
..()
|
||||
|
||||
@@ -219,7 +219,50 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
return
|
||||
var/selected = plist[c]
|
||||
aiPDA.create_message(user, selected)
|
||||
|
||||
/mob/living/silicon/ai/proc/cmd_show_message_log(mob/user as mob)
|
||||
if(user.stat == 2)
|
||||
user << "You can't do that because you are dead!"
|
||||
return
|
||||
var/HTML = "<html><head><title>AI PDA Message Log</title></head><body>"
|
||||
for(var/index in aiPDA.tnote)
|
||||
if(index["sent"])
|
||||
HTML += addtext("<i><b>→ To <a href='byond://?src=\ref[src];choice=Message;target=",index["src"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
|
||||
else
|
||||
HTML += addtext("<i><b>← From <a href='byond://?src=\ref[src];choice=Message;target=",index["target"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
|
||||
HTML +="</body></html>"
|
||||
user << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
|
||||
|
||||
/obj/item/device/pda/ai/verb/cmd_send_pdamesg()
|
||||
set category = "AI IM"
|
||||
set name = "Send PDA Message"
|
||||
set src in usr
|
||||
if(usr.stat == 2)
|
||||
usr << "You can't send PDA messages because you are dead!"
|
||||
return
|
||||
var/list/plist = available_pdas()
|
||||
if (plist)
|
||||
var/c = input(usr, "Please select a PDA") as null|anything in sortList(plist)
|
||||
if (!c) // if the user hasn't selected a PDA file we can't send a message
|
||||
return
|
||||
var/selected = plist[c]
|
||||
create_message(usr, selected)
|
||||
|
||||
/obj/item/device/pda/ai/verb/cmd_show_message_log()
|
||||
set category = "AI IM"
|
||||
set name = "Show Message Log"
|
||||
set src in usr
|
||||
if(usr.stat == 2)
|
||||
usr << "You can't do that because you are dead!"
|
||||
return
|
||||
var/HTML = "<html><head><title>AI PDA Message Log</title></head><body>"
|
||||
for(var/index in tnote)
|
||||
if(index["sent"])
|
||||
HTML += addtext("<i><b>→ To <a href='byond://?src=\ref[src];choice=Message;target=",index["src"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
|
||||
else
|
||||
HTML += addtext("<i><b>← From <a href='byond://?src=\ref[src];choice=Message;target=",index["target"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
|
||||
HTML +="</body></html>"
|
||||
usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
|
||||
|
||||
/obj/item/device/pda/ai/verb/cmd_toggle_pda_receiver()
|
||||
set category = "AI IM"
|
||||
@@ -242,21 +285,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
silent=!silent
|
||||
usr << "<span class='notice'>PDA ringer toggled [(silent ? "Off" : "On")]!</span>"
|
||||
|
||||
|
||||
/mob/living/silicon/ai/proc/cmd_show_message_log(mob/user as mob)
|
||||
if(user.stat == 2)
|
||||
user << "You can't do that because you are dead!"
|
||||
return
|
||||
var/HTML = "<html><head><title>AI PDA Message Log</title></head><body>"
|
||||
for(var/index in aiPDA.tnote)
|
||||
if(index["sent"])
|
||||
HTML += addtext("<i><b>→ To <a href='byond://?src=\ref[src];choice=Message;target=",index["src"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
|
||||
else
|
||||
HTML += addtext("<i><b>← From <a href='byond://?src=\ref[src];choice=Message;target=",index["target"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
|
||||
HTML +="</body></html>"
|
||||
user << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
|
||||
|
||||
|
||||
/obj/item/device/pda/ai/can_use()
|
||||
return 1
|
||||
|
||||
@@ -358,12 +386,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(cartridge)
|
||||
var/cartdata[0]
|
||||
|
||||
if(mode in cartmodes)
|
||||
data["records"] = cartridge.create_NanoUI_values()
|
||||
|
||||
if(mode == 0)
|
||||
cartdata["name"] = cartridge.name
|
||||
cartdata["access"] = list(\
|
||||
cartdata["access"] = list(\
|
||||
"access_security" = cartridge.access_security,\
|
||||
"access_engine" = cartridge.access_engine,\
|
||||
"access_atmos" = cartridge.access_atmos,\
|
||||
@@ -375,8 +398,15 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
"access_hydroponics" = cartridge.access_hydroponics,\
|
||||
"access_reagent_scanner" = cartridge.access_reagent_scanner,\
|
||||
"access_remote_door" = cartridge.access_remote_door,\
|
||||
"access_status_display" = cartridge.access_status_display\
|
||||
"access_status_display" = cartridge.access_status_display,\
|
||||
"access_detonate_pda" = cartridge.access_detonate_pda\
|
||||
)
|
||||
|
||||
if(mode in cartmodes)
|
||||
data["records"] = cartridge.create_NanoUI_values()
|
||||
|
||||
if(mode == 0)
|
||||
cartdata["name"] = cartridge.name
|
||||
if(isnull(cartridge.radio))
|
||||
cartdata["radio"] = 0
|
||||
else
|
||||
@@ -388,7 +418,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
cartdata["radio"] = 3
|
||||
|
||||
if(mode == 2)
|
||||
cartdata["type"] = cartridge.type
|
||||
cartdata["charges"] = cartridge.charges ? cartridge.charges : 0
|
||||
data["cartridge"] = cartdata
|
||||
data["stationTime"] = worldtime2text()
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
var/access_janitor = 0
|
||||
// var/access_flora = 0
|
||||
var/access_reagent_scanner = 0
|
||||
var/access_remote_door = 0 //Control some blast doors remotely!!
|
||||
var/access_remote_door = 0 // Control some blast doors remotely!!
|
||||
var/remote_door_id = ""
|
||||
var/access_status_display = 0
|
||||
var/access_quartermaster = 0
|
||||
var/access_detonate_pda = 0
|
||||
var/access_hydroponics = 0
|
||||
var/charges = 0
|
||||
var/mode = null
|
||||
@@ -200,6 +201,7 @@
|
||||
name = "Detomatix Cartridge"
|
||||
icon_state = "cart"
|
||||
access_remote_door = 1
|
||||
access_detonate_pda = 1
|
||||
remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing.
|
||||
charges = 4
|
||||
|
||||
|
||||
@@ -71,9 +71,9 @@
|
||||
dat += "<br>"
|
||||
dat += {"<a href='byond://?src=\ref[src];choice=Wireless'>[A.control_disabled ? "Enable" : "Disable"] Wireless Activity</a>"}
|
||||
dat += "<br>"
|
||||
dat += "Subspace Transceiver is: [A.radio.disabledAi ? "Disabled" : "Enabled"]"
|
||||
dat += "Subspace Transceiver is: [A.aiRadio.disabledAi ? "Disabled" : "Enabled"]"
|
||||
dat += "<br>"
|
||||
dat += {"<a href='byond://?src=\ref[src];choice=Radio'>[A.radio.disabledAi ? "Enable" : "Disable"] Subspace Transceiver</a>"}
|
||||
dat += {"<a href='byond://?src=\ref[src];choice=Radio'>[A.aiRadio.disabledAi ? "Enable" : "Disable"] Subspace Transceiver</a>"}
|
||||
dat += "<br>"
|
||||
dat += {"<a href='byond://?src=\ref[src];choice=Close'> Close</a>"}
|
||||
user << browse(dat, "window=aicard")
|
||||
@@ -116,9 +116,9 @@
|
||||
|
||||
if ("Radio")
|
||||
for(var/mob/living/silicon/ai/A in src)
|
||||
A.radio.disabledAi = !A.radio.disabledAi
|
||||
A << "Your Subspace Transceiver has been: [A.radio.disabledAi ? "disabled" : "enabled"]"
|
||||
U << "You [A.radio.disabledAi ? "Disable" : "Enable"] the AI's Subspace Transceiver"
|
||||
A.aiRadio.disabledAi = !A.aiRadio.disabledAi
|
||||
A << "Your Subspace Transceiver has been: [A.aiRadio.disabledAi ? "disabled" : "enabled"]"
|
||||
U << "You [A.aiRadio.disabledAi ? "Disable" : "Enable"] the AI's Subspace Transceiver"
|
||||
|
||||
if ("Wireless")
|
||||
for(var/mob/living/silicon/ai/A in src)
|
||||
|
||||
@@ -171,7 +171,8 @@
|
||||
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
|
||||
name = "AI Subspace Transceiver"
|
||||
desc = "Integrated AI radio transceiver."
|
||||
icon_state = "ai_radio"
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
keyslot2 = new /obj/item/device/encryptionkey/heads/ai_integrated
|
||||
var/myAi = null // Atlantis: Reference back to the AI which has this radio.
|
||||
|
||||
@@ -378,6 +378,41 @@
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
// Copied from /obj/item/weapon/melee/energy/sword/attackby
|
||||
/obj/item/toy/sword/attackby(obj/item/weapon/W, mob/living/user)
|
||||
..()
|
||||
if(istype(W, /obj/item/toy/sword))
|
||||
if(W == src)
|
||||
user << "<span class='notice'>You try to attach the end of the plastic sword to... itself. You're not very smart, are you?</span>"
|
||||
if(ishuman(user))
|
||||
user.adjustBrainLoss(10)
|
||||
else
|
||||
user << "<span class='notice'>You attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool.</span>"
|
||||
new /obj/item/weapon/twohanded/dualsaber/toy(user.loc)
|
||||
del(W)
|
||||
del(src)
|
||||
|
||||
/*
|
||||
* Subtype of Double-Bladed Energy Swords
|
||||
*/
|
||||
/obj/item/weapon/twohanded/dualsaber/toy
|
||||
name = "double-bladed toy sword"
|
||||
desc = "A cheap, plastic replica of TWO energy swords. Double the fun!"
|
||||
force = 0
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
force_unwielded = 0
|
||||
force_wielded = 0
|
||||
origin_tech = null
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/toy/IsShield()
|
||||
return 0
|
||||
/*
|
||||
/obj/item/weapon/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
|
||||
return 0 */ //uncomment this once reflecting is ported
|
||||
|
||||
/obj/item/toy/katana
|
||||
name = "replica katana"
|
||||
desc = "Woefully underpowered in D20."
|
||||
@@ -1033,3 +1068,35 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
flags = FPRINT | TABLEPASS
|
||||
icon = 'icons/obj/clothing/belts.dmi'
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/*
|
||||
* Fake meteor
|
||||
*/
|
||||
|
||||
/obj/item/toy/minimeteor
|
||||
name = "Mini-Meteor"
|
||||
desc = "Relive the excitement of a meteor shower! SweetMeat-eor. Co is not responsible for any injuries, headaches or hearing loss caused by Mini-Meteor™"
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "minimeteor"
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 2.0
|
||||
|
||||
/obj/item/toy/minimeteor/throw_impact(atom/hit_atom)
|
||||
..()
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
for(var/mob/M in range(10, src))
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai))\
|
||||
shake_camera(M, 3, 1)
|
||||
del(src)
|
||||
|
||||
/*
|
||||
* Carp plushie
|
||||
*/
|
||||
|
||||
/obj/item/toy/carpplushie
|
||||
name = "space carp plushie"
|
||||
desc = "An adorable stuffed toy that resembles a space carp."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "carpplushie"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
@@ -44,16 +44,22 @@
|
||||
if(user.client && (target in user.client.screen))
|
||||
user << "<span class='notice'>You need to take that [target.name] off before cleaning it.</span>"
|
||||
else if(istype(target,/obj/effect/decal/cleanable))
|
||||
user << "<span class='notice'>You scrub \the [target.name] out.</span>"
|
||||
del(target)
|
||||
user.visible_message("<span class='warning'>[user] begins to scrub \the [target.name] out with [src].</span>")
|
||||
if(do_after(user, src.cleanspeed))
|
||||
user << "<span class='notice'>You scrub \the [target.name] out.</span>"
|
||||
del(target)
|
||||
else
|
||||
user << "<span class='notice'>You clean \the [target.name].</span>"
|
||||
target.clean_blood()
|
||||
user.visible_message("<span class='warning'>[user] begins to clean \the [target.name] with [src].</span>")
|
||||
if(do_after(user, src.cleanspeed))
|
||||
user << "<span class='notice'>You clean \the [target.name].</span>"
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
del(C)
|
||||
target.clean_blood()
|
||||
return
|
||||
|
||||
/obj/item/weapon/soap/attack(mob/target as mob, mob/user as mob)
|
||||
if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == "mouth" )
|
||||
user.visible_message("\red \the [user] washes \the [target]'s mouth out with soap!")
|
||||
user.visible_message("\red \the [user] washes \the [target]'s mouth out with [src.name]!")
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -4,58 +4,69 @@
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "mop"
|
||||
force = 3.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 5
|
||||
throwforce = 5.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
w_class = 3.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
|
||||
var/mopping = 0
|
||||
var/mopcount = 0
|
||||
var/mopcap = 5
|
||||
var/mopspeed = 40
|
||||
|
||||
|
||||
/obj/item/weapon/mop/New()
|
||||
var/datum/reagents/R = new/datum/reagents(5)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
create_reagents(mopcap)
|
||||
|
||||
|
||||
obj/item/weapon/mop/proc/clean(turf/simulated/A as turf)
|
||||
reagents.reaction(A,1,10)
|
||||
A.clean_blood()
|
||||
A.dirt = 0
|
||||
for(var/obj/effect/O in A)
|
||||
if( istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay) )
|
||||
del(O)
|
||||
|
||||
|
||||
/obj/effect/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/mop))
|
||||
return
|
||||
..()
|
||||
obj/item/weapon/mop/proc/clean(turf/simulated/A)
|
||||
if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1))
|
||||
A.clean_blood()
|
||||
for(var/obj/effect/O in A)
|
||||
if(istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay) || istype(O,/obj/effect/rune))
|
||||
del(O)
|
||||
reagents.reaction(A, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly.
|
||||
reagents.remove_any(1) //reaction() doesn't use up the reagents
|
||||
|
||||
|
||||
/obj/item/weapon/mop/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(reagents.total_volume < 1 || mopcount >= 5)
|
||||
|
||||
if(reagents.total_volume < 1)
|
||||
user << "<span class='notice'>Your mop is dry!</span>"
|
||||
return
|
||||
|
||||
if(istype(A, /turf/simulated) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune))
|
||||
user.visible_message("<span class='warning'>[user] begins to clean \the [get_turf(A)].</span>")
|
||||
if(do_after(user, 40))
|
||||
if(A)
|
||||
clean(get_turf(A))
|
||||
user << "<span class='notice'>You have finished mopping!</span>"
|
||||
mopcount++
|
||||
var/turf/simulated/turf = A
|
||||
if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay))
|
||||
turf = A.loc
|
||||
A = null
|
||||
|
||||
if(mopcount >= 5) //Okay this stuff is an ugly hack and i feel bad about it.
|
||||
spawn(5)
|
||||
reagents.clear_reagents()
|
||||
mopcount = 0
|
||||
return
|
||||
if(istype(turf))
|
||||
user.visible_message("<span class='warning'>[user] begins to clean \the [turf] with [src].</span>")
|
||||
|
||||
if(do_after(user, mopspeed))
|
||||
clean(turf)
|
||||
user << "<span class='notice'>You have finished mopping!</span>"
|
||||
|
||||
|
||||
/obj/effect/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap))
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
J.put_in_cart(src, user)
|
||||
J.mymop=src
|
||||
J.update_icon()
|
||||
J.update_icon()
|
||||
|
||||
/obj/item/weapon/mop/advanced
|
||||
desc = "The most advanced tool in a custodian's arsenal. Just think of all the viscera you will clean up with this!"
|
||||
name = "advanced mop"
|
||||
mopcap = 10
|
||||
icon_state = "advmop"
|
||||
item_state = "mop" //meh will do for now until TG makes one
|
||||
force = 6
|
||||
throwforce = 8
|
||||
throw_range = 4
|
||||
mopspeed = 20
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
w_class = 4
|
||||
max_w_class = 2
|
||||
storage_slots = 21
|
||||
storage_slots = 30
|
||||
can_hold = list() // any
|
||||
cant_hold = list("/obj/item/weapon/disk/nuclear","/obj/item/flag/nation")
|
||||
|
||||
|
||||
@@ -163,4 +163,20 @@
|
||||
name = "military belt"
|
||||
desc = "A syndicate belt designed to be used by boarding parties. Its style is modeled after the hardsuits they wear."
|
||||
icon_state = "militarybelt"
|
||||
item_state = "military"
|
||||
item_state = "military"
|
||||
|
||||
/obj/item/weapon/storage/belt/janitor
|
||||
name = "janibelt"
|
||||
desc = "A belt used to hold most janitorial supplies."
|
||||
icon_state = "janibelt"
|
||||
item_state = "janibelt"
|
||||
storage_slots = 6
|
||||
max_w_class = 4 // Set to this so the light replacer can fit.
|
||||
can_hold = list(
|
||||
"/obj/item/weapon/grenade/chem_grenade/cleaner",
|
||||
"/obj/item/device/lightreplacer",
|
||||
"/obj/item/device/flashlight",
|
||||
"/obj/item/weapon/reagent_containers/spray",
|
||||
"/obj/item/weapon/soap",
|
||||
"/obj/item/weapon/holosign_creator"
|
||||
)
|
||||
@@ -468,6 +468,16 @@
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
|
||||
/obj/item/weapon/storage/box/fakesyndiesuit
|
||||
name = "boxed space suit and helmet"
|
||||
desc = "A sleek, sturdy box used to hold replica spacesuits."
|
||||
icon_state = "box_of_doom"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/clothing/head/syndicatefake(src)
|
||||
new /obj/item/clothing/suit/syndicatefake(src)
|
||||
|
||||
/obj/item/weapon/storage/box/mousetraps
|
||||
name = "box of Pest-B-Gon mousetraps"
|
||||
desc = "<B><FONT color='red'>WARNING:</FONT></B> <I>Keep out of reach of children</I>."
|
||||
|
||||
@@ -159,34 +159,31 @@
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
force = 3
|
||||
var/cooldown = 0
|
||||
var/on = 0
|
||||
|
||||
|
||||
/obj/item/weapon/melee/telebaton/attack_self(mob/user as mob)
|
||||
on = !on
|
||||
if(on)
|
||||
user.visible_message("\red With a flick of their wrist, [user] extends their telescopic baton.",\
|
||||
"\red You extend the baton.",\
|
||||
"You hear an ominous click.")
|
||||
user << "<span class ='warning'>You extend the baton.</span>"
|
||||
icon_state = "telebaton_1"
|
||||
item_state = "telebaton_1"
|
||||
w_class = 3
|
||||
force = 15//quite robust
|
||||
attack_verb = list("smacked", "struck", "slapped")
|
||||
item_state = "nullrod"
|
||||
w_class = 4 //doesnt fit in backpack when its on for balance
|
||||
force = 10 //seclite damage
|
||||
attack_verb = list("smacked", "struck", "cracked", "beaten")
|
||||
else
|
||||
user.visible_message("\blue [user] collapses their telescopic baton.",\
|
||||
"\blue You collapse the baton.",\
|
||||
"You hear a click.")
|
||||
user << "<span class ='notice'>You collapse the baton.</span>"
|
||||
icon_state = "telebaton_0"
|
||||
item_state = "telebaton_0"
|
||||
item_state = "telebaton_0" //no sprite in other words
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
force = 3//not so robust now
|
||||
attack_verb = list("hit", "punched")
|
||||
force = 3 //not so robust now
|
||||
attack_verb = list("hit", "poked")
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
|
||||
add_fingerprint(user)
|
||||
if (!blood_DNA) return
|
||||
if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any
|
||||
@@ -203,8 +200,9 @@
|
||||
|
||||
/obj/item/weapon/melee/telebaton/attack(mob/target as mob, mob/living/user as mob)
|
||||
if(on)
|
||||
if ((M_CLUMSY in user.mutations) && prob(50))
|
||||
user << "\red You club yourself over the head."
|
||||
add_fingerprint(user)
|
||||
if((M_CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class ='danger'>You club yourself over the head.</span>"
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
@@ -212,23 +210,28 @@
|
||||
else
|
||||
user.take_organ_damage(2*force)
|
||||
return
|
||||
if(isrobot(target))
|
||||
..()
|
||||
return
|
||||
if(!isliving(target))
|
||||
return
|
||||
if (user.a_intent == "harm")
|
||||
if(!..()) return
|
||||
if(!isrobot(target))
|
||||
playsound(src.loc, "swing_hit", 50, 1, -1)
|
||||
target.Weaken(4)
|
||||
if(!isrobot(target)) return
|
||||
else
|
||||
playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1, -1)
|
||||
target.Weaken(2)
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [target.name] ([target.ckey])</font>")
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
src.add_fingerprint(user)
|
||||
target.visible_message("\red <B>[target] has been stunned with \the [src] by [user]!</B>")
|
||||
if(!iscarbon(user))
|
||||
target.LAssailant = null
|
||||
else
|
||||
target.LAssailant = user
|
||||
if(cooldown <= 0)
|
||||
playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
|
||||
target.Weaken(3)
|
||||
add_logs(user, target, "stunned", object="telescopic baton")
|
||||
src.add_fingerprint(user)
|
||||
target.visible_message("<span class ='danger'>[target] has been knocked down with \the [src] by [user]!</span>")
|
||||
if(!iscarbon(user))
|
||||
target.LAssailant = null
|
||||
else
|
||||
target.LAssailant = user
|
||||
cooldown = 1
|
||||
spawn(40)
|
||||
cooldown = 0
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -75,12 +75,12 @@
|
||||
new /obj/item/weapon/caution(src)
|
||||
new /obj/item/weapon/caution(src)
|
||||
new /obj/item/weapon/caution(src)
|
||||
new /obj/item/weapon/caution(src)
|
||||
new /obj/item/weapon/caution(src)
|
||||
new /obj/item/weapon/storage/bag/trash(src)
|
||||
new /obj/item/device/lightreplacer(src)
|
||||
new /obj/item/weapon/holosign_creator(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/head/soft/purple(src)
|
||||
new /obj/item/weapon/storage/belt/janitor(src)
|
||||
|
||||
/*
|
||||
* Lawyer
|
||||
|
||||
@@ -150,6 +150,7 @@
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
new /obj/item/clothing/suit/storage/hazardvest(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/weapon/cartridge/atmos(src)
|
||||
new /obj/item/taperoll/engineering(src)
|
||||
return
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
new /obj/item/clothing/gloves/captain(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/clothing/suit/armor/captain(src)
|
||||
new /obj/item/weapon/melee/telebaton(src)
|
||||
new /obj/item/clothing/under/dress/dress_cap(src)
|
||||
return
|
||||
|
||||
@@ -121,7 +120,6 @@
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/clothing/tie/holster/armpit(src)
|
||||
new /obj/item/weapon/melee/telebaton(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
sleep(2)
|
||||
new /obj/item/weapon/tank/jetpack/oxygen/harness(src)
|
||||
new /obj/item/clothing/mask/gas/syndicate(src)
|
||||
new /obj/item/clothing/shoes/magboots(src)
|
||||
new /obj/item/clothing/shoes/magboots/syndie(src)
|
||||
|
||||
/obj/structure/closet/syndicate/nuclear
|
||||
desc = "It's a storage unit for a Syndicate boarding party.."
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
if(myyellowtoolbox)
|
||||
dat += "<a href='?src=\ref[src];yellowtoolbox=1'>[myyellowtoolbox.name]</a><br>"
|
||||
if(myengitape)
|
||||
dat += "<a href='?src=\ref[src];myengitape=1'>[myengitape.name]</a><br>"
|
||||
dat += "<a href='?src=\ref[src];engitape=1'>[myengitape.name]</a><br>"
|
||||
var/datum/browser/popup = new(user, "engicart", name, 240, 160)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -329,6 +329,11 @@ proc/trigger_armed_response_team(var/force = 0)
|
||||
if (leader_selected)
|
||||
W.access += access_cent_teleporter
|
||||
equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
// Loyalty implant
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)
|
||||
L.imp_in = src
|
||||
L.implanted = 1
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
desc = "Covers the eyes, preventing sight."
|
||||
icon_state = "blindfold"
|
||||
item_state = "blindfold"
|
||||
vision_flags = BLIND
|
||||
//vision_flags = BLIND
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi'
|
||||
|
||||
@@ -2,39 +2,43 @@
|
||||
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
|
||||
name = "magboots"
|
||||
icon_state = "magboots0"
|
||||
var/magboot_state = "magboots"
|
||||
var/magpulse = 0
|
||||
species_restricted = null
|
||||
action_button_name = "Toggle the magboots"
|
||||
// flags = NOSLIP //disabled by default
|
||||
var/slowdown_active = 2
|
||||
action_button_name = "Toggle Magboots"
|
||||
icon_action_button = "action_magboots"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi'
|
||||
)
|
||||
species_restricted = list("Skrell","Human","Unathi","Tajaran","Machine","Slime People","Kidan","Grey","Diona") //Vox get their own booties doubt they'd fix on talons anyway.
|
||||
|
||||
attack_self(mob/user)
|
||||
if(magpulse)
|
||||
flags &= ~NOSLIP
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
magpulse = 0
|
||||
icon_state = "magboots0"
|
||||
user << "You disable the mag-pulse traction system."
|
||||
else
|
||||
flags |= NOSLIP
|
||||
slowdown = 2
|
||||
magpulse = 1
|
||||
icon_state = "magboots1"
|
||||
user << "You enable the mag-pulse traction system."
|
||||
user.update_inv_shoes() //so our mob-overlays update
|
||||
user.update_gravity(user.mob_has_gravity())
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
var/state = "disabled"
|
||||
if(src.flags&NOSLIP)
|
||||
state = "enabled"
|
||||
usr << "Its mag-pulse traction system appears to be [state]."
|
||||
/obj/item/clothing/shoes/magboots/attack_self(mob/user)
|
||||
if(src.magpulse)
|
||||
src.flags &= ~NOSLIP
|
||||
src.slowdown = SHOES_SLOWDOWN
|
||||
else
|
||||
src.flags |= NOSLIP
|
||||
src.slowdown = slowdown_active
|
||||
magpulse = !magpulse
|
||||
icon_state = "[magboot_state][magpulse]"
|
||||
user << "You [magpulse ? "enable" : "disable"] the mag-pulse traction system."
|
||||
user.update_inv_shoes() //so our mob-overlays update
|
||||
user.update_gravity(user.mob_has_gravity())
|
||||
|
||||
/obj/item/clothing/shoes/magboots/negates_gravity()
|
||||
return flags & NOSLIP
|
||||
return flags & NOSLIP
|
||||
|
||||
/obj/item/clothing/shoes/magboots/examine(mob/user)
|
||||
..()
|
||||
user << "Its mag-pulse traction system appears to be [magpulse ? "enabled" : "disabled"]."
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/magboots/advance
|
||||
desc = "Advanced magnetic boots that have a lighter magnetic pull, placing less burden on the wearer."
|
||||
name = "advanced magboots"
|
||||
icon_state = "advmag0"
|
||||
magboot_state = "advmag"
|
||||
slowdown_active = SHOES_SLOWDOWN
|
||||
|
||||
/obj/item/clothing/shoes/magboots/syndie
|
||||
desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders."
|
||||
name = "blood-red magboots"
|
||||
icon_state = "syndiemag0"
|
||||
magboot_state = "syndiemag"
|
||||
@@ -172,6 +172,7 @@
|
||||
/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user)
|
||||
if(src.magpulse)
|
||||
flags &= ~NOSLIP
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
magpulse = 0
|
||||
canremove = 1
|
||||
user << "You relax your deathgrip on the flooring."
|
||||
@@ -183,6 +184,7 @@
|
||||
|
||||
|
||||
flags |= NOSLIP
|
||||
slowdown = 2
|
||||
magpulse = 1
|
||||
canremove = 0 //kinda hard to take off magclaws when you are gripping them tightly.
|
||||
user << "You dig your claws deeply into the flooring, bracing yourself."
|
||||
|
||||
@@ -414,7 +414,7 @@
|
||||
icon_state = "rig0-syndi"
|
||||
item_state = "syndie_helm"
|
||||
_color = "syndi"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
siemens_coefficient = 0.6
|
||||
var/obj/machinery/camera/camera
|
||||
|
||||
@@ -440,7 +440,7 @@
|
||||
item_state = "syndie_hardsuit"
|
||||
slowdown = 1
|
||||
w_class = 3
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/device/suit_cooling_unit)
|
||||
siemens_coefficient = 0.6
|
||||
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL
|
||||
|
||||
@@ -30,25 +30,25 @@ var/list/department_radio_keys = list(
|
||||
":A" = "alientalk", "#A" = "alientalk", ".A" = "alientalk",
|
||||
":T" = "Syndicate", "#T" = "Syndicate", ".T" = "Syndicate",
|
||||
":U" = "Supply", "#U" = "Supply", ".U" = "Supply",
|
||||
":G" = "changeling", "#G" = "changeling", ".G" = "changeling",
|
||||
|
||||
//kinda localization -- rastaf0
|
||||
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
||||
":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand",
|
||||
":ä" = "left hand", "#ä" = "left hand", ".ä" = "left hand",
|
||||
":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom",
|
||||
":ð" = "department", "#ð" = "department", ".ð" = "department",
|
||||
":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command",
|
||||
":ò" = "Science", "#ò" = "Science", ".ò" = "Science",
|
||||
":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical",
|
||||
":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering",
|
||||
":û" = "Security", "#û" = "Security", ".û" = "Security",
|
||||
":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper",
|
||||
":è" = "binary", "#è" = "binary", ".è" = "binary",
|
||||
":ô" = "alientalk", "#ô" = "alientalk", ".ô" = "alientalk",
|
||||
":å" = "Syndicate", "#å" = "Syndicate", ".å" = "Syndicate",
|
||||
":é" = "Supply", "#é" = "Supply", ".é" = "Supply",
|
||||
":ï" = "changeling", "#ï" = "changeling", ".ï" = "changeling"
|
||||
":G" = "changeling", "#G" = "changeling", ".G" = "changeling"
|
||||
|
||||
/* //kinda localization -- rastaf0
|
||||
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
||||
":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand",
|
||||
":ä" = "left hand", "#ä" = "left hand", ".ä" = "left hand",
|
||||
":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom",
|
||||
":ð" = "department", "#ð" = "department", ".ð" = "department",
|
||||
":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command",
|
||||
":ò" = "Science", "#ò" = "Science", ".ò" = "Science",
|
||||
":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical",
|
||||
":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering",
|
||||
":û" = "Security", "#û" = "Security", ".û" = "Security",
|
||||
":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper",
|
||||
":è" = "binary", "#è" = "binary", ".è" = "binary",
|
||||
":ô" = "alientalk", "#ô" = "alientalk", ".ô" = "alientalk",
|
||||
":å" = "Syndicate", "#å" = "Syndicate", ".å" = "Syndicate",
|
||||
":é" = "Supply", "#é" = "Supply", ".é" = "Supply",
|
||||
":ï" = "changeling", "#ï" = "changeling", ".ï" = "changeling" */
|
||||
)
|
||||
|
||||
/mob/living/proc/binarycheck()
|
||||
@@ -178,7 +178,7 @@ var/list/department_radio_keys = list(
|
||||
message_mode = department_radio_keys[channel_prefix]
|
||||
if (message_mode || speaking || copytext(message,1,2) == ":")
|
||||
message = trim(copytext(message, 3))
|
||||
if (!(istype(src,/mob/living/carbon/human) || istype(src,/mob/living/carbon/monkey) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department" || isAI(src) && (message_mode=="department") || (message_mode in radiochannels))))
|
||||
if (!(istype(src,/mob/living/carbon/human) && !isAI(src) && !isrobot(src) || istype(src,/mob/living/carbon/monkey) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department") || isAI(src) && (message_mode=="department") || (message_mode in radiochannels)))
|
||||
message_mode = null //only humans can use headsets
|
||||
|
||||
if(src.stunned > 2 || (traumatic_shock > 61 && prob(50)))
|
||||
@@ -302,9 +302,9 @@ var/list/department_radio_keys = list(
|
||||
if(issilicon(src))
|
||||
if(isAI(src))//for the AI's radio. This can't be with the borg thing above due to typecasting.
|
||||
var/mob/living/silicon/ai/A = src
|
||||
if(A.radio)
|
||||
A.radio.talk_into(src, message, message_mode)
|
||||
used_radios += A.radio
|
||||
if(A.aiRadio)
|
||||
A.aiRadio.talk_into(src, message, message_mode)
|
||||
used_radios += A.aiRadio
|
||||
else
|
||||
var/mob/living/silicon/Ro=src
|
||||
if(!isAI(Ro))
|
||||
|
||||
@@ -19,7 +19,7 @@ var/list/ai_list = list()
|
||||
anchored = 1 // -- TLE
|
||||
density = 1
|
||||
status_flags = CANSTUN|CANPARALYSE|CANPUSH
|
||||
var/list/network = list("SS13")
|
||||
var/list/network = list("SS13","Telecomms","Research Outpost","Mining Outpost")
|
||||
var/obj/machinery/camera/current = null
|
||||
var/list/connected_robots = list()
|
||||
var/aiRestorePowerRoutine = 0
|
||||
@@ -34,7 +34,7 @@ var/list/ai_list = list()
|
||||
var/custom_sprite = 0 //For our custom sprites
|
||||
var/alienAI = 0
|
||||
|
||||
var/obj/item/device/radio/headset/heads/ai_integrated/radio = null
|
||||
var/obj/item/device/radio/headset/heads/ai_integrated/aiRadio = null
|
||||
|
||||
//MALFUNCTION
|
||||
var/datum/module_picker/malf_picker
|
||||
@@ -91,15 +91,15 @@ var/list/ai_list = list()
|
||||
aiPDA.name = name + " (" + aiPDA.ownjob + ")"
|
||||
|
||||
aiMulti = new(src)
|
||||
radio = new(src)
|
||||
radio.myAi = src
|
||||
aiRadio = new(src)
|
||||
aiRadio.myAi = src
|
||||
|
||||
aiCamera = new/obj/item/device/camera/siliconcam/ai_camera(src)
|
||||
|
||||
if (istype(loc, /turf))
|
||||
verbs.Add(/mob/living/silicon/ai/proc/ai_network_change, \
|
||||
/mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \
|
||||
/mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/control_integrateed_radio)
|
||||
/mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/control_integrated_radio)
|
||||
|
||||
if(!safety)//Only used by AIize() to successfully spawn an AI.
|
||||
if (!B)//If there is no player/brain inside.
|
||||
@@ -786,11 +786,11 @@ var/list/ai_list = list()
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/living/silicon/ai/proc/control_integrateed_radio()
|
||||
/mob/living/silicon/ai/proc/control_integrated_radio()
|
||||
set name = "Radio Settings"
|
||||
set desc = "Allows you to change settings of your radio."
|
||||
set category = "AI Commands"
|
||||
|
||||
src << "Accessing Subspace Transceiver control..."
|
||||
if (src.radio)
|
||||
src.radio.interact(src)
|
||||
if (src.aiRadio)
|
||||
src.aiRadio.interact(src)
|
||||
|
||||
@@ -250,6 +250,7 @@
|
||||
src.modules += new /obj/item/weapon/storage/bag/trash(src)
|
||||
src.modules += new /obj/item/weapon/mop(src)
|
||||
src.modules += new /obj/item/device/lightreplacer(src)
|
||||
src.modules += new /obj/item/weapon/holosign_creator(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
|
||||
|
||||
src.emag.reagents.add_reagent("lube", 250)
|
||||
|
||||
@@ -23,9 +23,4 @@
|
||||
return tally+config.robot_delay
|
||||
|
||||
/mob/living/silicon/robot/Move()
|
||||
if (!is_component_functioning("actuator") || !is_component_functioning("power cell") || !cell)
|
||||
return
|
||||
|
||||
else
|
||||
if (src.cell.charge > 0)
|
||||
..()
|
||||
..()
|
||||
@@ -50,18 +50,28 @@
|
||||
|
||||
alien_talk(message)
|
||||
else if (department_radio_keys[prefix] == "department")
|
||||
if(isAI(src)&&client)//For patching directly into AI holopads.
|
||||
if(isAI(src)&&client) //For patching directly into AI holopads.
|
||||
var/mob/living/silicon/ai/U = src
|
||||
message = copytext(message, 3)
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
U.holopad_talk(message)
|
||||
else//Will not allow anyone by an active AI to use this function.
|
||||
else //Will not allow anyone by an active AI to use this function.
|
||||
src << "This function is not available to you."
|
||||
return
|
||||
else
|
||||
return ..(message)
|
||||
var/mob/living/silicon/ai/AI = src
|
||||
if (isAI(src) && AI.aiRadio.disabledAi)
|
||||
src << "\red System Error - Transceiver Disabled"
|
||||
return
|
||||
else
|
||||
return ..(message)
|
||||
else
|
||||
return ..(message)
|
||||
var/mob/living/silicon/ai/AI = src
|
||||
if (isAI(src) && AI.aiRadio.disabledAi)
|
||||
src << "\red System Error - Transceiver Disabled"
|
||||
return
|
||||
else
|
||||
return ..(message)
|
||||
|
||||
//For holopads only. Usable by AI.
|
||||
/mob/living/silicon/ai/proc/holopad_talk(var/message)
|
||||
|
||||
@@ -848,9 +848,6 @@
|
||||
return 1
|
||||
|
||||
/obj/machinery/power/apc/Topic(href, href_list, var/usingUI = 1)
|
||||
if(..())
|
||||
return 0
|
||||
|
||||
if(!can_use(usr, 1))
|
||||
return 0
|
||||
|
||||
|
||||
@@ -2107,3 +2107,25 @@ datum/design/cart_captain
|
||||
materials = list("$metal" = 50, "$glass" = 50)
|
||||
build_path = "/obj/item/weapon/cartridge/captain"
|
||||
locked = 1
|
||||
|
||||
/////////////////////////////////////////
|
||||
////////////Janitor Designs//////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
datum/design/advmop
|
||||
name = "Advanced Mop"
|
||||
desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals."
|
||||
id = "advmop"
|
||||
req_tech = list("materials" = 4, "engineering" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 2500, "$glass" = 200)
|
||||
build_path = /obj/item/weapon/mop/advanced
|
||||
|
||||
datum/design/holosign
|
||||
name = "Holographic Sign Projector"
|
||||
desc = "A holograpic projector used to project various warning signs."
|
||||
id = "holosign"
|
||||
req_tech = list("magnets" = 3, "powerstorage" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 2000, "$glass" = 1000)
|
||||
build_path = /obj/item/weapon/holosign_creator
|
||||
@@ -785,6 +785,7 @@ var/list/cheartstopper = list("potassium_chloride") //this stops the heart when
|
||||
|
||||
var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them.
|
||||
"CentCom",
|
||||
"ERT",
|
||||
"Thunderdome",
|
||||
"Xeno"
|
||||
)
|
||||
|
||||
|
Before Width: | Height: | Size: 2.8 MiB After Width: | Height: | Size: 2.8 MiB |
|
Before Width: | Height: | Size: 3.4 MiB After Width: | Height: | Size: 3.4 MiB |
|
Before Width: | Height: | Size: 7.3 MiB After Width: | Height: | Size: 7.3 MiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
@@ -416,8 +416,7 @@ div.notice {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* Used in PDA */
|
||||
|
||||
/* PDA styling */
|
||||
.wholeScreen {
|
||||
position: absolute;
|
||||
color: #517087;
|
||||
@@ -431,8 +430,7 @@ div.notice {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* DNA Modifier UI (dna_modifier.tmpl) */
|
||||
|
||||
/* DNA Modifier styling */
|
||||
.dnaBlock {
|
||||
float: left;
|
||||
width: 90px;
|
||||
@@ -475,7 +473,7 @@ div.notice {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Table stuffs for power monitor */
|
||||
/* Table styling for the power monitor */
|
||||
table.pmon {
|
||||
border: 2px solid RoyalBlue;
|
||||
}
|
||||
@@ -485,8 +483,7 @@ table.pmon td, table.pmon th {
|
||||
padding: 0px 5px 0px 5px;
|
||||
}
|
||||
|
||||
/* Table Stuffs for manifest*/
|
||||
|
||||
/* Table styling for the crew manifest */
|
||||
th.command {
|
||||
background: #3333FF;
|
||||
font-weight: bold;
|
||||
@@ -530,7 +527,6 @@ th.misc {
|
||||
}
|
||||
|
||||
/* Damage colors for crew monitoring computer */
|
||||
|
||||
.burn {
|
||||
color: orange;
|
||||
}
|
||||
@@ -553,4 +549,33 @@ th.misc {
|
||||
|
||||
.oxyloss_light {
|
||||
color: #6698FF;
|
||||
}
|
||||
|
||||
/* Wire colors for nuclear bomb defusion */
|
||||
.Red {
|
||||
color: #FF0000;
|
||||
}
|
||||
|
||||
.Blue {
|
||||
color: #0000FF;
|
||||
}
|
||||
|
||||
.Green {
|
||||
color: #00FF00;
|
||||
}
|
||||
|
||||
.Marigold {
|
||||
color: #FDA505;
|
||||
}
|
||||
|
||||
.Fuschia {
|
||||
color: #FF0080;
|
||||
}
|
||||
|
||||
.Black {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.Pearl {
|
||||
color: #C6CACB;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
<!--
|
||||
Title: Keycard Authentication Device UI
|
||||
Used In File(s): \code\modules\security_levels\keycard_authentication.dm
|
||||
-->
|
||||
-->
|
||||
<div class="item">
|
||||
<h1>Keycard Authentication Device</h1>
|
||||
This device is used to trigger certain high security events. It requires the simultaneous swipe of two high-level ID cards.
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
<!--
|
||||
Title: Nuke Control Panel/Nuclear Bomb Defusion
|
||||
Used In File(s): \code\game\gamemodes\nuclear\nuclearbomb.dm
|
||||
-->
|
||||
{{if !data.hacking}}
|
||||
<div class="item">
|
||||
<b>Authorization Disk:</b> {{if data.auth}}{{:helper.link('++++++++++', 'eject', {'auth' : 1})}} {{else}} {{:helper.link('----------', 'disk', {'auth' : 1})}}{{/if}}
|
||||
</div>
|
||||
<hr>
|
||||
<div class="item">
|
||||
<div><b>Status:</b> {{:data.authstatus}} - {{:data.safe}}</div>
|
||||
<div><b>Timer:</b> {{:data.time}}</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="item">
|
||||
{{if data.auth && data.yescode}}
|
||||
<div class="item">
|
||||
<b>Timer:</b> {{:helper.link('On', 'play', {'timer' : 1}, data.timer ? 'selected' : '')}}{{:helper.link('Off', 'stop', {'timer' : 0}, !data.timer ? 'selected' : '')}}
|
||||
</div>
|
||||
<div class="item">
|
||||
<b>Time:</b> {{:helper.link('--', '', {'time' : -10}, data.time <= 60 ? 'disabled' : '')}}{{:helper.link('-', '', {'time' : -1}, data.time <= 60 ? 'disabled' : '')}} {{:data.time}} {{:helper.link('+', '', {'time' : 1})}}{{:helper.link('++', '', {'time' : 10})}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="item">
|
||||
<b>Timer:</b> {{:helper.link('On', 'play', null, 'disabled')}}{{:helper.link('Off', 'pause', null, 'disabled')}}
|
||||
</div>
|
||||
<div class="item">
|
||||
<b>Time:</b> {{:helper.link('-', '', null, 'disabled')}}{{:helper.link('-', '', null, 'disabled')}} {{:data.time}} {{:helper.link('+', '', null, 'disabled')}}{{:helper.link('++', '', null, 'disabled')}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item">
|
||||
{{if data.auth && data.yescode}}
|
||||
<div class="item">
|
||||
<b>Safety:</b> {{:helper.link('Engaged', 'info', {'safety' : 1}, data.safety ? 'selected' : '')}}{{:helper.link('Disengaged', 'alert', {'safety' : 0}, data.safety ? '' : 'selected')}}
|
||||
</div>
|
||||
<div class="item">
|
||||
<b>Anchor:</b> {{:helper.link('Engaged', 'locked', {'anchor' : 1}, data.anchored ? 'selected' : '')}}{{:helper.link('Disengaged', 'unlocked', {'anchor' : 0}, data.anchored ? '' : 'selected')}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="item">
|
||||
<b>Safety:</b> {{:helper.link('Engaged', 'info', null, 'disabled')}}{{:helper.link('Disengaged', 'alert', null, 'disabled')}}
|
||||
</div>
|
||||
<div class="item">
|
||||
<b>Anchor:</b> {{:helper.link('Engaged', 'locked', null, 'disabled')}}{{:helper.link('Disengaged', 'unlocked', null, 'disabled')}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="item">
|
||||
>{{if data.message}} {{:data.message}}{{/if}}
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="item">
|
||||
{{:helper.link('1', '', {'type' : 1})}}{{:helper.link('2', '', {'type' : 2})}}{{:helper.link('3', '', {'type' : 3})}}
|
||||
</div>
|
||||
<div class="item">
|
||||
{{:helper.link('4', '', {'type' : 4})}}{{:helper.link('5', '', {'type' : 5})}}{{:helper.link('6', '', {'type' : 6})}}
|
||||
</div>
|
||||
<div class="item">
|
||||
{{:helper.link('7', '', {'type' : 7})}}{{:helper.link('8', '', {'type' : 8})}}{{:helper.link('9', '', {'type' : 9})}}
|
||||
</div>
|
||||
<div class="item">
|
||||
{{:helper.link('R', '', {'type' : 'R'})}}{{:helper.link('0', '', {'type' : 0})}}{{:helper.link('E', '', {'type' : 'E'})}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="block">
|
||||
<h3>Exposed Wires</h3>
|
||||
{{for data.wires}}
|
||||
<div class="item">
|
||||
<div class="{{:value.name}} itemLabel">{{:value.name}}</div>
|
||||
<div class="itemContent">{{:helper.link(value.cut ? 'Mend' : 'Cut', '', {'wire' : value.name, 'act' : 'wire'})}} {{:helper.link('Pulse', '', {'wire' : value.name, 'act' : 'pulse'})}}</div>
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
<div class="item">
|
||||
The device is {{if data.timing}}shaking!{{else}}still.{{/if}}<br />
|
||||
The device is {{if data.safety}}quiet.{{else}}whirring.{{/if}}<br />
|
||||
The lights are {{if data.lighthack}}static.{{else}}functional.{{/if}}<br />
|
||||
</div>
|
||||
{{/if}}
|
||||
@@ -219,8 +219,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
||||
{{if data.cartridge.charges}}
|
||||
<div class="item">
|
||||
<b>{{:data.cartridge.charges}}
|
||||
{{if data.cartridge.type == "/obj/item/weapon/cartridge/syndicate"}} detonation charges left. {{/if}}
|
||||
{{if data.cartridge.type == "/obj/item/weapon/cartridge/clown" || data.cartridge.type == "/obj/item/weapon/cartridge/mime"}} viral files left. {{/if}}
|
||||
{{if data.cartridge.access.access_detonate_pda}} detonation charges left. {{/if}}
|
||||
{{if data.cartridge.access.access_clown || data.cartridge.access.access_mime}} viral files left. {{/if}}
|
||||
</b>
|
||||
<br><br>
|
||||
</div>
|
||||
@@ -234,14 +234,14 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
||||
{{for data.convopdas}}
|
||||
<div class="item">
|
||||
{{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, value.fixedLeftWider)}}
|
||||
{{if value.cartridge}}
|
||||
{{if value.cartridge.type == "/obj/item/weapon/cartridge/syndicate" && value.Detonate == 1}}
|
||||
{{if data.cartridge}}
|
||||
{{if data.cartridge.access.access_detonate_pda && value.Detonate}}
|
||||
{{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}}
|
||||
{{/if}}
|
||||
{{if value.cartridge.type == "/obj/item/weapon/cartridge/clown"}}
|
||||
{{if data.cartridge.access.access_clown}}
|
||||
{{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}}
|
||||
{{/if}}
|
||||
{{if value.cartridge.type == "/obj/item/weapon/cartridge/mime"}}
|
||||
{{if data.cartridge.access.access_mime}}
|
||||
{{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -251,10 +251,10 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
||||
{{for data.pdas}}
|
||||
<div class="item">
|
||||
{{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, value.fixedLeftWider)}}
|
||||
{{if value.cartridge}}
|
||||
{{if value.cartridge.type == "/obj/item/weapon/cartridge/syndicate" && value.Detonate == 1}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
||||
{{if value.cartridge.type == "/obj/item/weapon/cartridge/clown"}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
||||
{{if value.cartridge.type == "/obj/item/weapon/cartridge/mime"}} {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
||||
{{if data.cartridge}}
|
||||
{{if data.cartridge.access.access_detonate_pda && value.Detonate}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
||||
{{if data.cartridge.access.access_clown}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
||||
{{if data.cartridge.access.access_mime}} {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/for}}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!--
|
||||
Title: Telescience Control UI
|
||||
Used In File(s): \code\game\machinery\computer\telescience.dm
|
||||
-->
|
||||
-->
|
||||
<div class="item">
|
||||
<div class="itemLabel">Coordinates:</div>
|
||||
<div class="itemContent">
|
||||
|
||||