Fixes fire extinguishers in space, removes empty hand requirement, which wasn't supposed to be committed. My bad.

Adds the ability for door buttons to both close the doors they're attached to, and also a framework for controlling their other functions like idscan/bolts.
Adds a secure safe to the HoS's office and a new flashbang grenade!  
Secure safes can now hold 8 weight units of stuff by default.  
Adds a reply function to the comm. console prayers as well as a confirmation button on BSA.  


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2946 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
VivianFoxfoot@gmail.com
2012-01-13 02:15:22 +00:00
parent bb41a2f57b
commit 7ffdec48bf
14 changed files with 208 additions and 34 deletions

View File

@@ -212,6 +212,16 @@
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
*/
anchored = 1.0
use_power = 1
idle_power_usage = 2

View File

@@ -18,14 +18,39 @@
if(normaldoorcontrol)
for(var/obj/machinery/door/airlock/D in range(range))
if(D.id_tag == src.id)
if (D.density)
spawn( 0 )
D.open()
return
if(desiredstate == 1)
if(specialfunctions & OPEN)
if (D.density)
spawn( 0 )
D.open()
return
if(specialfunctions & IDSCAN)
D.aiDisabledIdScanner = 1
if(specialfunctions & BOLTS)
spawn(5)
D.locked = 1
if(specialfunctions & SHOCK)
D.secondsElectrified = -1
if(specialfunctions & SAFE)
D.safe = 0
else
spawn( 0 )
// D.close()
return
if(specialfunctions & OPEN)
if (!D.density)
spawn( 0 )
D.close()
return
if(specialfunctions & IDSCAN)
D.aiDisabledIdScanner = 0
if(specialfunctions & BOLTS)
spawn(5)
D.locked = 0
if(specialfunctions & SHOCK)
D.secondsElectrified = 0
if(specialfunctions & SAFE)
D.safe = 1
else
for(var/obj/machinery/door/poddoor/M in machines)
@@ -39,6 +64,7 @@
M.close()
return
desiredstate = !desiredstate
spawn(15)
if(!(stat & NOPOWER))
icon_state = "doorctrl0"

View File

@@ -148,7 +148,7 @@
sleep(2)
var/area/a = get_area(usr.loc)
if((istype(src.loc, /turf/space)) || (a.has_gravity == 0))
if((istype(usr.loc, /turf/space)) || (a.has_gravity == 0))
user.inertia_dir = get_dir(target, user)
step(user, user.inertia_dir)

View File

@@ -93,6 +93,7 @@ FLASHBANG
var
active = 0
det_time = 30
banglet = 0
proc
bang(var/turf/T , var/mob/living/carbon/M)
prime()
@@ -206,14 +207,16 @@ FLASHBANG
if (M.eye_stat >= 20)
M << "\red Your eyes start to burn badly!"
M.disabilities |= 1
if (prob(M.eye_stat - 20 + 1))
M << "\red You can't see anything!"
M.sdisabilities |= 1
if(!banglet && !(istype(src , /obj/item/weapon/flashbang/clusterbang)))
if (prob(M.eye_stat - 20 + 1))
M << "\red You can't see anything!"
M.sdisabilities |= 1
if (M.ear_damage >= 15)
M << "\red Your ears start to ring badly!"
if (prob(M.ear_damage - 10 + 5))
M << "\red You can't hear anything!"
M.sdisabilities |= 4
if(!banglet && !(istype(src , /obj/item/weapon/flashbang/clusterbang)))
if (prob(M.ear_damage - 10 + 5))
M << "\red You can't hear anything!"
M.sdisabilities |= 4
else
if (M.ear_damage >= 5)
M << "\red Your ears start to ring!"
@@ -232,9 +235,7 @@ FLASHBANG
for(var/mob/living/carbon/M in viewers(T, null))
bang(T, M)
//Blob damage here
for(var/obj/effect/blob/B in view(8,T))
for(var/obj/effect/blob/B in view(8,T)) //Blob damage here
var/damage = round(30/(get_dist(B,T)+1))
B.health -= damage
B.update()
@@ -255,6 +256,12 @@ FLASHBANG
return
attack_hand()
walk(src, null, null)
..()
return
clown_check(var/mob/living/user)
if ((user.mutations & CLUMSY) && prob(50))
user << "\red Huh? How does this thing work?!"
@@ -266,12 +273,80 @@ FLASHBANG
return 0
return 1
/obj/item/weapon/flashbang/clusterbang
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
name = "Clusterbang"
icon = 'grenade.dmi'
icon_state = "clusterbang"
var/child = 0
attack_self(mob/user as mob)
if(!active)
//world << "cluster attack self"
user << "\red You prime the clusterbang! [det_time/10] seconds!"
src.active = 1
src.icon_state = "clusterbang1"
playsound(src.loc, 'armbomb.ogg', 75, 1, -3)
spawn(src.det_time)
arm(user)
return
afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container
if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..()
if((user.equipped() == src)&&(!active))
//world << "cluster after attack"
arm(user)
user.dir = get_dir(user, target)
user.drop_item()
var/t = (isturf(target) ? target : target.loc)
walk_towards(src, t, 3)
return
/obj/item/weapon/flashbang/clusterbang/proc/arm(mob/user as mob)
//world << "Armed!"
var/numspawned = rand(4,8)
// world << numspawned
var/again = 0
if(!child)
for(var/more = numspawned,more > 0,more--)
if(prob(35))
again++
numspawned --
for(,numspawned > 0, numspawned--)
//world << "Spawned Flashbang!"
spawn(0)
var/obj/item/weapon/flashbang/F = new /obj/item/weapon/flashbang(src)
F.loc = src.loc
F.icon_state = "flashbang1"
playsound(src.loc, 'armbomb.ogg', 75, 1, -3)
F.active = 1
F.banglet = 1
var/stepdist = rand(1,3)
step_away(F,src,stepdist)
var/dettime = rand(15,60)
spawn(dettime)
F.prime()
for(,again > 0, again--)
//world << "Spawned CFlashbang!"
spawn(0)
var/obj/item/weapon/flashbang/clusterbang/F = new /obj/item/weapon/flashbang/clusterbang(src)
F.loc = src.loc
F.active = 1
F.child = 1
F.icon_state = "clusterbang1"
var/stepdist = rand(1,3)
step_away(F,src,stepdist)
spawn(30)
F.arm()
spawn(70)
prime()
return

View File

@@ -13,6 +13,7 @@
var/l_hacking = 0
var/emagged = 0
var/open = 0
var/internalstorage = 3
w_class = 3.0
/obj/item/weapon/secstorage/examine()
@@ -111,7 +112,7 @@
else
user << "You short out the lock on [src]."
return
if ((W.w_class > 3 || istype(W, /obj/item/weapon/secstorage)))
if ((W.w_class > internalstorage || istype(W, /obj/item/weapon/secstorage)))
return
if ((istype(W, /obj/item/weapon/screwdriver)) && (src.locked == 1))
sleep(6)

View File

@@ -7,7 +7,8 @@
icon_sparking = "safespark"
flags = FPRINT | TABLEPASS
force = 8.0
w_class = 4.0
w_class = 8.0
internalstorage = 8
anchored = 1.0
density = 0
@@ -16,5 +17,9 @@
new /obj/item/weapon/paper(src)
new /obj/item/weapon/pen(src)
/obj/item/weapon/secstorage/ssafe/HoS/New()
..()
new /obj/item/weapon/storage/lockbox/clusterbang(src)
/obj/item/weapon/secstorage/ssafe/attack_hand(mob/user as mob)
return attack_self(user)

View File

@@ -74,4 +74,14 @@
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implanter/loyalty(src)
new /obj/item/weapon/implanter/loyalty(src)
/obj/item/weapon/storage/lockbox/clusterbang
name = "Lockbox (Clusterbang)"
desc = "You have a bad feeling about opening this."
req_access = list(access_security)
New()
..()
new /obj/item/weapon/flashbang/clusterbang(src)

View File

@@ -832,6 +832,13 @@
if (href_list["BlueSpaceArtillery"])
var/mob/M = locate(href_list["BlueSpaceArtillery"])
if(!M)
return
var/choice = alert(src.owner, "Are you sure you wish to hit [key_name(M)] with Blue Space Artillery?", "Confirm Firing?" , "Yes" , "No")
if (choice == "No")
return
M << "You've been hit by bluespace artillery!"
log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]")
message_admins("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]")
@@ -857,6 +864,36 @@
M.Weaken(20)
M.stuttering = 20
if (href_list["CentcommReply"])
var/mob/M = locate(href_list["CentcommReply"])
if(!M)
return
if(!istype(M, /mob/living/carbon/human))
alert("Centcomm cannot transmit to non-humans.")
return
if(!istype(M:ears, /obj/item/device/radio/headset))
alert("The person you're trying to reply to doesn't have a headset! Centcomm cannot transmit directly to them.")
return
var/input = input(src.owner, "Please enter a message to reply to [key_name(M)] via their headset.","Outgoing message from Centcomm", "")
if(!input)
return
M << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows. [input]. Message ends.\""
if (href_list["SyndicateReply"])
var/mob/M = locate(href_list["SyndicateReply"])
if(!M)
return
if(!istype(M, /mob/living/carbon/human))
alert("The Syndicate cannot transmit to non-humans.")
return
if(!istype(M:ears, /obj/item/device/radio/headset))
alert("The person you're trying to reply to doesn't have a headset! The Syndicate cannot transmit directly to them.")
return
var/input = input(src.owner, "Please enter a message to reply to [key_name(M)] via their headset.","Outgoing message from The Syndicate", "")
if(!input)
return
M << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. [input]. Message ends.\""
if (href_list["jumpto"])
if(rank in list("Badmin", "Game Admin", "Game Master"))

View File

@@ -30,7 +30,7 @@
for (var/mob/M in world)
if (M.client && M.client.holder)
M << "\blue <b><font color=orange>CENTCOMM:</font>[key_name(Sender, M)] (<A HREF='?src=\ref[M.client.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[M.client.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[M.client.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[M.client.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[M.client.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>):</b> [msg]"
M << "\blue <b><font color=orange>CENTCOMM:</font>[key_name(Sender, M)] (<A HREF='?src=\ref[M.client.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[M.client.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[M.client.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[M.client.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[M.client.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?src=\ref[M.client.holder];CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
/proc/Syndicate_announce(var/text , var/mob/Sender)
@@ -38,5 +38,5 @@
for (var/mob/M in world)
if (M.client && M.client.holder)
M << "\blue <b><font color=crimson>SYNDICATE:</font>[key_name(Sender, M)] (<A HREF='?src=\ref[M.client.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[M.client.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[M.client.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[M.client.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[M.client.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>):</b> [msg]"
M << "\blue <b><font color=crimson>SYNDICATE:</font>[key_name(Sender, M)] (<A HREF='?src=\ref[M.client.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[M.client.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[M.client.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[M.client.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[M.client.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?src=\ref[M.client.holder];SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"

View File

@@ -333,9 +333,11 @@
//First check to see if we can do things
if(restrained()) return 0
/*
if(istype(src,/mob/living/carbon))
if(src.l_hand && src.r_hand)
return 0
*/
var/dense_object = 0
for(var/turf/turf in oview(1,src))

View File

@@ -190,6 +190,13 @@ var/const
#define MAINT 8 // under maintaince
#define EMPED 16 // temporary broken by EMP pulse
//bitflags for door switches.
#define OPEN 1
#define IDSCAN 2
#define BOLTS 4
#define SHOCK 8
#define SAFE 16
#define ENGINE_EJECT_Z 3
//metal, glass, rod stacks

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 B

After

Width:  |  Height:  |  Size: 751 B

View File

@@ -65,7 +65,7 @@
"abm" = (/obj/structure/stool/chair{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/security/hos)
"abn" = (/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -2; pixel_y = 2; req_access_txt = ""},/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "carpet"},/area/security/hos)
"abo" = (/obj/structure/stool/chair{dir = 8},/obj/effect/landmark/start{name = "Head of Security"},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/security/hos)
"abp" = (/obj/machinery/camera{c_tag = "Head Security's Office"; dir = 8; network = "SS13"},/obj/structure/disposalpipe/segment,/obj/machinery/keycard_auth{pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "carpetside"},/area/security/hos)
"abp" = (/obj/machinery/camera{c_tag = "Head Security's Office"; dir = 8; network = "SS13"},/obj/structure/disposalpipe/segment,/obj/machinery/keycard_auth{pixel_x = 24; pixel_y = 10},/obj/item/device/radio/intercom{pixel_x = 30; pixel_y = -10},/turf/simulated/floor{dir = 4; icon_state = "carpetside"},/area/security/hos)
"abq" = (/obj/machinery/computer/security,/turf/simulated/floor,/area/security/main)
"abr" = (/obj/machinery/computer/secure_data,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor,/area/security/main)
"abs" = (/obj/machinery/power/apc{dir = 1; name = "Security APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/security/main)
@@ -81,7 +81,7 @@
"abC" = (/obj/structure/table/woodentable,/obj/item/clothing/glasses/thermal,/turf/simulated/floor{icon_state = "carpet"},/area/security/hos)
"abD" = (/obj/item/weapon/stamp/hos,/obj/structure/table/woodentable,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/security/hos)
"abE" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/woodentable,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/security/hos)
"abF" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{pixel_x = 28; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "carpetside"},/area/security/hos)
"abF" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/secstorage/ssafe/HoS{pixel_x = 35},/turf/simulated/floor{dir = 4; icon_state = "carpetside"},/area/security/hos)
"abG" = (/obj/structure/stool/chair{dir = 1},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor,/area/security/main)
"abH" = (/obj/structure/stool/chair{dir = 4},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor,/area/security/main)
"abI" = (/obj/structure/table,/obj/item/kitchen/donut_box,/turf/simulated/floor,/area/security/main)
@@ -222,11 +222,11 @@
"aen" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/security/range)
"aeo" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/security/range)
"aep" = (/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/cobweb,/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen{layer = 4},/turf/simulated/floor,/area/security/brig)
"aeq" = (/obj/machinery/camera{c_tag = "Brig Secure Cell 1"; dir = 0; name = "Secure Cell 1"},/turf/simulated/floor,/area/security/brig)
"aeq" = (/obj/machinery/camera{c_tag = "Brig Secure Cell 1"; dir = 0; name = "Secure Cell 1"},/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_y = 25; wires = 2},/turf/simulated/floor,/area/security/brig)
"aer" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/brig)
"aes" = (/obj/machinery/light/small{dir = 8},/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen{layer = 4},/turf/simulated/floor,/area/security/brig)
"aet" = (/obj/machinery/camera{c_tag = "Brig Secure Cell 2"; dir = 0; name = "Secure Cell 2"},/turf/simulated/floor,/area/security/brig)
"aeu" = (/obj/machinery/camera{c_tag = "Brig Secure Cell 3"; dir = 0; name = "Secure Cell 3"},/turf/simulated/floor,/area/security/brig)
"aet" = (/obj/machinery/camera{c_tag = "Brig Secure Cell 2"; dir = 0; name = "Secure Cell 2"},/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_y = 25; wires = 2},/turf/simulated/floor,/area/security/brig)
"aeu" = (/obj/machinery/camera{c_tag = "Brig Secure Cell 3"; dir = 0; name = "Secure Cell 3"},/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_y = 25; wires = 2},/turf/simulated/floor,/area/security/brig)
"aev" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/security/main)
"aew" = (/obj/structure/rack,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aex" = (/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j2s"; sortType = 8},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
@@ -6218,7 +6218,7 @@
"cpD" = (/obj/machinery/door/airlock/external,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "NTrasen"; name = "Outer Airlock"; opacity = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"cpE" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom)
"cpF" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control)
"cpG" = (/obj/structure/table,/obj/item/assembly/shock_kit{icon = 'icons/obj/assemblies.dmi'},/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control)
"cpG" = (/obj/structure/table,/obj/item/assembly/shock_kit{icon = 'assemblies.dmi'},/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control)
"cpH" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/shuttle/specops/centcom)
"cpI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/unsimulated/floor,/area/shuttle/specops/centcom)
"cpJ" = (/obj/effect/landmark{name = "Commando-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)

View File

@@ -162,6 +162,7 @@
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
#define FILE_DIR "maps/backup"
#define FILE_DIR "sound"
#define FILE_DIR "sound/ambience"
#define FILE_DIR "sound/announcer"