diff --git a/code/__HELPERS/experimental.dm b/code/__HELPERS/experimental.dm
index 51b38959f58..66c4681324d 100644
--- a/code/__HELPERS/experimental.dm
+++ b/code/__HELPERS/experimental.dm
@@ -68,18 +68,21 @@ var/list/grillePool
/*
* @args
* A, type path
+ * B, loc
*/
-/proc/getFromPool(A)
+/proc/getFromPool(A, B)
switch (A)
if (/obj/item/weapon/shard)
if (isnull(shardPool))
#if DEBUG_OBJECT_POOL
world << "DEBUG_OBJECT_POOL: New proc has been called (/obj/item/weapon/shard)."
#endif
- return new /obj/item/weapon/shard()
+ return new /obj/item/weapon/shard(B)
- . = shardPool[FIRST_OBJECT_INDEX]
- shardPool = shardPool - .
+ var /obj/item/weapon/shard/Shard = shardPool[FIRST_OBJECT_INDEX]
+ shardPool = shardPool - Shard
+ Shard.loc = B
+ . = Shard
if (0 == shardPool.len)
shardPool = null
@@ -88,10 +91,12 @@ var/list/grillePool
#if DEBUG_OBJECT_POOL
world << "DEBUG_OBJECT_POOL: New proc has been called (obj/item/weapon/shard/plasma)."
#endif
- return new /obj/item/weapon/shard/plasma()
+ return new /obj/item/weapon/shard/plasma(B)
- . = plasmaShardPool[FIRST_OBJECT_INDEX]
- plasmaShardPool = plasmaShardPool - .
+ var /obj/item/weapon/shard/plasma/Plasma = plasmaShardPool[FIRST_OBJECT_INDEX]
+ plasmaShardPool = plasmaShardPool - Plasma
+ Plasma.loc = B
+ . = Plasma
if (0 == plasmaShardPool.len)
plasmaShardPool = null
@@ -100,10 +105,12 @@ var/list/grillePool
#if DEBUG_OBJECT_POOL
world << "DEBUG_OBJECT_POOL: New proc has been called (/obj/structure/grille)."
#endif
- return new /obj/structure/grille()
+ return new /obj/structure/grille(B)
- . = grillePool[FIRST_OBJECT_INDEX]
- grillePool = grillePool - .
+ var /obj/structure/grille/Grille = grillePool[FIRST_OBJECT_INDEX]
+ grillePool = grillePool - Grille
+ Grille.loc = B
+ . = Grille
if (0 == grillePool.len)
grillePool = null
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index e2224b2c496..6df5e411cab 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -316,7 +316,7 @@
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
var/obj/item/weapon/circuitboard/scan_consolenew/M = new /obj/item/weapon/circuitboard/scan_consolenew( A )
for (var/obj/C in src)
C.loc = src.loc
diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm
index bb35302386c..1d0cab15733 100644
--- a/code/game/machinery/atmo_control.dm
+++ b/code/game/machinery/atmo_control.dm
@@ -108,7 +108,7 @@ obj/machinery/air_sensor
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
var/obj/item/weapon/circuitboard/air_management/M = new /obj/item/weapon/circuitboard/air_management( A )
for (var/obj/C in src)
C.loc = src.loc
@@ -389,7 +389,7 @@ legend {
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
var/obj/item/weapon/circuitboard/injector_control/M = new /obj/item/weapon/circuitboard/injector_control( A )
for (var/obj/C in src)
C.loc = src.loc
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index a511ecf6e05..72301160d3e 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -266,9 +266,26 @@
src.updateUsrDialog()
- else
- ..()
- return
+ else if(istype(I, /obj/item/weapon/screwdriver))
+ playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/arcade/M = new /obj/item/weapon/circuitboard/arcade( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.anchored = 1
+
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ getFromPool(/obj/item/weapon/shard, loc)
+ A.state = 3
+ A.icon_state = "3"
+ else
+ user << "\blue You disconnect the monitor."
+ A.state = 4
+ A.icon_state = "4"
+
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 3ef385d0285..15d630c8140 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -112,7 +112,7 @@
C.loc = src.loc
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
A.state = 3
A.icon_state = "3"
else
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index 0a5696ee4ce..620aa5bd0d8 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -56,7 +56,7 @@
if(stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc )
- new /obj/item/weapon/shard( loc )
+ getFromPool(/obj/item/weapon/shard, loc)
//generate appropriate circuitboard. Accounts for /pod/old computer types
var/obj/item/weapon/circuitboard/pod/M = null
diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm
index f32293f67af..f8d14b77ac9 100644
--- a/code/game/machinery/computer/power.dm
+++ b/code/game/machinery/computer/power.dm
@@ -45,7 +45,7 @@
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
var/obj/item/weapon/circuitboard/powermonitor/M = new /obj/item/weapon/circuitboard/powermonitor( A )
for (var/obj/C in src)
C.loc = src.loc
diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm
index 25607ab66f8..9ce03c4630d 100644
--- a/code/game/machinery/computer/prisonshuttle.dm
+++ b/code/game/machinery/computer/prisonshuttle.dm
@@ -47,7 +47,7 @@ var/prison_shuttle_timeleft = 0
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
A.state = 3
A.icon_state = "3"
else
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 18be44f4e3e..7a247f37614 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -125,7 +125,7 @@
/obj/machinery/door/window/proc/take_damage(var/damage)
src.health = max(0, src.health - damage)
if (src.health <= 0)
- new /obj/item/weapon/shard(src.loc)
+ getFromPool(/obj/item/weapon/shard, loc)
var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src.loc)
CC.amount = 2
var/obj/item/weapon/airlock_electronics/ae
@@ -181,7 +181,12 @@
return
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
visible_message("\red [user] smashes against the [src.name].", 1)
- take_damage(25)
+ if (src.health <= 0)
+ getFromPool(/obj/item/weapon/shard, loc)
+ var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src.loc)
+ CC.amount = 2
+ src.density = 0
+ del(src)
else
return src.attack_hand(user)
@@ -259,11 +264,14 @@
//If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway)
if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card))
- var/aforce = I.force
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
visible_message("\red [src] was hit by [I].")
- if(I.damtype == BRUTE || I.damtype == BURN)
- take_damage(aforce)
+ if (src.health <= 0)
+ getFromPool(/obj/item/weapon/shard, loc)
+ var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src.loc)
+ CC.amount = 2
+ src.density = 0
+ del(src)
return
diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm
index 968b6cf1dc2..aa13a5e8a27 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -217,7 +217,7 @@
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A )
for (var/obj/C in src)
C.loc = src.loc
diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm
index ea313e00524..dd29affc6b3 100644
--- a/code/game/machinery/telecomms/telemonitor.dm
+++ b/code/game/machinery/telecomms/telemonitor.dm
@@ -130,7 +130,7 @@
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A )
for (var/obj/C in src)
C.loc = src.loc
diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm
index 226c47229e7..ab492949c3a 100644
--- a/code/game/machinery/telecomms/traffic_control.dm
+++ b/code/game/machinery/telecomms/traffic_control.dm
@@ -192,7 +192,7 @@
var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text
- if(newnet && ((usr in range(1, src) || issilicon(usr))))
+ if(newnet && canAccess(usr))
if(length(newnet) > 15)
temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -"
@@ -206,36 +206,42 @@
updateUsrDialog()
return
- attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- if (src.stat & BROKEN)
- user << "\blue The broken glass falls out."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
- var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 3
- A.icon_state = "3"
- A.anchored = 1
- del(src)
- else
- user << "\blue You disconnect the monitor."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 4
- A.icon_state = "4"
- A.anchored = 1
- del(src)
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "\blue You you disable the security protocols"
- src.updateUsrDialog()
- return
+
+/obj/machinery/computer/telecomms/traffic/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
+ if(istype(D, /obj/item/weapon/screwdriver))
+ playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
+ var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 3
+ A.icon_state = "3"
+ A.anchored = 1
+ del(src)
+ else
+ user << "\blue You disconnect the monitor."
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 4
+ A.icon_state = "4"
+ A.anchored = 1
+ del(src)
+ else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
+ playsound(get_turf(src), 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "\blue You you disable the security protocols"
+ src.updateUsrDialog()
+ return
+
+/obj/machinery/computer/telecomms/traffic/proc/canAccess(var/mob/user)
+ if(issilicon(user) || in_range(user, src))
+ return 1
+ return 0
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 3372f610831..a45b187d030 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -57,10 +57,11 @@
user << "\blue You need at least two rods to do this."
return
usr << "\blue Assembling grille..."
+
if (!do_after(usr, 10))
return
- var /obj/structure/grille/Grille = getFromPool(/obj/structure/grille)
- Grille.loc = usr.loc
+
+ var /obj/structure/grille/Grille = getFromPool(/obj/structure/grille, usr.loc)
usr << "\blue You assemble a grille"
Grille.add_fingerprint(usr)
use(2)
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index e28f1eccf7e..2a475ed7be0 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -35,7 +35,7 @@
/obj/structure/displaycase/ex_act(severity)
switch(severity)
if (1)
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
if (occupant)
dump()
qdel(src)
@@ -58,13 +58,13 @@
/obj/structure/displaycase/blob_act()
if (prob(75))
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
if(occupant) dump()
del(src)
/obj/structure/displaycase/meteorhit(obj/O as obj)
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
if(occupant) dump()
del(src)
@@ -74,8 +74,8 @@
if (!( src.destroyed ))
src.density = 0
src.destroyed = 1
- new /obj/item/weapon/shard( src.loc )
- playsound(src, "shatter", 70, 1)
+ getFromPool(/obj/item/weapon/shard, loc)
+ playsound(get_turf(src), "shatter", 70, 1)
update_icon()
else
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm
index 467cac7b6c8..ed8d793d69a 100644
--- a/code/game/objects/structures/lamarr_cage.dm
+++ b/code/game/objects/structures/lamarr_cage.dm
@@ -13,7 +13,7 @@
/obj/structure/lamarr/ex_act(severity)
switch(severity)
if (1)
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
Break()
qdel(src)
if (2)
@@ -35,13 +35,13 @@
/obj/structure/lamarr/blob_act()
if (prob(75))
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
Break()
qdel(src)
/obj/structure/lamarr/meteorhit(obj/O as obj)
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
Break()
qdel(src)
@@ -51,7 +51,7 @@
if (!( src.destroyed ))
src.density = 0
src.destroyed = 1
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
playsound(src, "shatter", 70, 1)
Break()
else
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index a704e1cc39b..1a5b8b9e8e6 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -31,8 +31,8 @@
// This should result in the same materials used to make the window.
/obj/structure/window/proc/destroy()
for(var/i=0;i[target] has been hit over the head with a [src.name], by [user]!"), 1)
+ else O.show_message(text("\red [target] hit himself with a [src.name] on the head!"), 1)
+
+ else
+ //Default attack message
+ for(var/mob/O in viewers(user, null))
+ if(target != user) O.show_message(text("\red [target] has been attacked with a [src.name], by [user]!"), 1)
+ else O.show_message(text("\red [target] has attacked himself with a [src.name]!"), 1)
+
+ //Attack logs
+ user.attack_log += text("\[[time_stamp()]\] Has attacked [target.name] ([target.ckey]) with a drinking glass!")
+ target.attack_log += text("\[[time_stamp()]\] Has been smashed with a drinking glass by [user.name] ([user.ckey])")
+ log_attack("[user.name] ([user.ckey]) attacked [target.name] with a drinking glass. ([target.ckey])")
+ if(!iscarbon(user))
+ target.LAssailant = null
+ else
+ target.LAssailant = user
+
+ //The reagents in the bottle splash all over the target, thanks for the idea Nodrak
+ if(src.reagents)
+ for(var/mob/O in viewers(user, null))
+ O.show_message(text("\blue The contents of the [src] splashes all over [target]!"), 1)
+ src.reagents.reaction(target, TOUCH)
+
+ //Finally, smash the bottle. This kills (del) the bottle.
+ src.smash(target, user)
+
on_reagent_change()
/*if(reagents.reagent_list.len > 1 )
diff --git a/code/modules/research/research_shuttle.dm b/code/modules/research/research_shuttle.dm
index 00939c0e290..cd5492b4392 100644
--- a/code/modules/research/research_shuttle.dm
+++ b/code/modules/research/research_shuttle.dm
@@ -112,7 +112,7 @@ proc/move_research_shuttle()
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
A.state = 3
A.icon_state = "3"
else
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index d5e14c16fb7..aeadca7ee4d 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -339,7 +339,7 @@
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
+ getFromPool(/obj/item/weapon/shard, loc)
var/obj/item/weapon/circuitboard/rdservercontrol/M = new /obj/item/weapon/circuitboard/rdservercontrol( A )
for (var/obj/C in src)
C.loc = src.loc
@@ -378,4 +378,4 @@
name = "Core R&D Server"
id_with_upload_string = "1"
id_with_download_string = "1"
- server_id = 1
\ No newline at end of file
+ server_id = 1
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
index 13c9e667318..09ea465a67f 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
@@ -20,17 +20,17 @@
/obj/structure/crystal/Destroy()
src.visible_message("\red[src] shatters!")
if(prob(75))
- new /obj/item/weapon/shard/plasma(src.loc)
+ getFromPool(/obj/item/weapon/shard/plasma, loc)
if(prob(50))
- new /obj/item/weapon/shard/plasma(src.loc)
+ getFromPool(/obj/item/weapon/shard/plasma, loc)
if(prob(25))
- new /obj/item/weapon/shard/plasma(src.loc)
+ getFromPool(/obj/item/weapon/shard/plasma, loc)
if(prob(75))
- new /obj/item/weapon/shard(src.loc)
+ getFromPool(/obj/item/weapon/shard, loc)
if(prob(50))
- new /obj/item/weapon/shard(src.loc)
+ getFromPool(/obj/item/weapon/shard, loc)
if(prob(25))
- new /obj/item/weapon/shard(src.loc)
+ getFromPool(/obj/item/weapon/shard, loc)
..()
//todo: laser_act
diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm
index 43c3d1ec70c..5c6231d789f 100644
--- a/code/modules/research/xenoarchaeology/finds/finds.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds.dm
@@ -296,9 +296,10 @@
apply_material_decorations = 0
if(22)
if(prob(50))
- new_item = new /obj/item/weapon/shard(src.loc)
+ new_item = getFromPool(/obj/item/weapon/shard, loc)
else
- new_item = new /obj/item/weapon/shard/plasma(src.loc)
+ new_item = getFromPool(/obj/item/weapon/shard/plasma, loc)
+
apply_prefix = 0
apply_image_decorations = 0
apply_material_decorations = 0