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