From 3f8dbf2b0bc7469c0686ab51e5f2c49f520487ad Mon Sep 17 00:00:00 2001 From: Time-Green Date: Wed, 1 Aug 2018 09:12:45 +0200 Subject: [PATCH] Emitter gun mounts (#39367) * different guns can be inserted into emitters * fixes portal gun runtime * You can now switch type through wires * makes one line more readable * Fixes being able to grab nodrop guns from emitters --- code/datums/wires/emitter.dm | 10 +++-- code/modules/power/singularity/emitter.dm | 44 +++++++++++++++++-- .../projectile/special/wormhole.dm | 2 + 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/code/datums/wires/emitter.dm b/code/datums/wires/emitter.dm index df1cf05a9c8..d0e1352c0ef 100644 --- a/code/datums/wires/emitter.dm +++ b/code/datums/wires/emitter.dm @@ -1,13 +1,17 @@ /datum/wires/emitter - randomize = 1 //Only one wire don't need blueprints holder_type = /obj/machinery/power/emitter /datum/wires/emitter/New(atom/holder) - wires = list(WIRE_ZAP) + wires = list(WIRE_ZAP,WIRE_HACK) ..() /datum/wires/emitter/on_pulse(wire) var/obj/machinery/power/emitter/E = holder - E.fire_beam_pulse() + switch(wire) + if(WIRE_ZAP) + E.fire_beam_pulse() + if(WIRE_HACK) + E.mode = !E.mode + E.set_projectile() ..() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index e3b2bf59caf..d0becf53f70 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -31,16 +31,19 @@ var/allow_switch_interact = TRUE var/projectile_type = /obj/item/projectile/beam/emitter - var/projectile_sound = 'sound/weapons/emitter.ogg' - var/datum/effect_system/spark_spread/sparks + var/obj/item/gun/energy/gun + var/list/gun_properties + var/mode = 0 + // The following 3 vars are mostly for the prototype var/manual = FALSE var/charge = 0 var/last_projectile_params + /obj/machinery/power/emitter/anchored anchored = TRUE @@ -269,6 +272,8 @@ return TRUE /obj/machinery/power/emitter/crowbar_act(mob/living/user, obj/item/I) + if(panel_open && gun) + return remove_gun(user) default_deconstruction_crowbar(I) return TRUE @@ -295,9 +300,42 @@ else if(is_wire_tool(I) && panel_open) wires.interact(user) return - + else if(panel_open && !gun && istype(I,/obj/item/gun/energy)) + if(integrate(I,user)) + return return ..() +/obj/machinery/power/emitter/proc/integrate(obj/item/gun/energy/E,mob/user) + if(istype(E, /obj/item/gun/energy)) + if(!user.transferItemToLoc(E, src)) + return + gun = E + gun_properties = gun.get_turret_properties() + set_projectile() + return TRUE + +/obj/machinery/power/emitter/proc/remove_gun(mob/user) + if(!gun) + return + user.put_in_hands(gun) + gun = null + playsound(src, 'sound/items/deconstruct.ogg', 50, 1) + gun_properties = list() + set_projectile() + return TRUE + +/obj/machinery/power/emitter/proc/set_projectile() + if(LAZYLEN(gun_properties)) + if(mode || !gun_properties["lethal_projectile"]) + projectile_type = gun_properties["stun_projectile"] + projectile_sound = gun_properties["stun_projectile_sound"] + else + projectile_type = gun_properties["lethal_projectile"] + projectile_sound = gun_properties["lethal_projectile_sound"] + return + projectile_type = initial(projectile_type) + projectile_sound = initial(projectile_sound) + /obj/machinery/power/emitter/emag_act(mob/user) if(obj_flags & EMAGGED) return diff --git a/code/modules/projectiles/projectile/special/wormhole.dm b/code/modules/projectiles/projectile/special/wormhole.dm index e95ff24ae52..07b56a133fb 100644 --- a/code/modules/projectiles/projectile/special/wormhole.dm +++ b/code/modules/projectiles/projectile/special/wormhole.dm @@ -21,7 +21,9 @@ if(casing) gun = casing.gun + /obj/item/projectile/beam/wormhole/on_hit(atom/target) if(!gun) qdel(src) + return gun.create_portal(src, get_turf(src))