diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 7346bc64a14..9cb33c36821 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -6,7 +6,9 @@ #define WOOD 2 #define SAND 3 -#define DROPWALL_UPTIME 12 +#define DROPWALL_UPTIME 1 MINUTES + +#define AUTO "automatic" //Barricades/cover @@ -227,6 +229,7 @@ desc = "A temporary deployable energy shield powered by a generator. Breaking the generator will destroy all the shields connected to it." icon = 'icons/obj/dropwall.dmi' icon_state = "dropwall_dead" //sprite chosen in init + armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 10, ACID = 0) // Copied from the security barrier, but no melee armor density = FALSE directional_blockage = TRUE proj_pass_rate = 100 //don't worry about it, covered by directional blockage. @@ -271,11 +274,17 @@ icon = 'icons/obj/dropwall.dmi' icon_state = "dropwall" item_state = "grenade" - mode = NORTH - var/uptime = DROPWALL_UPTIME SECONDS + mode = AUTO + var/uptime = DROPWALL_UPTIME + /// If this is true we do not arm again, due to the sleep + var/deployed = FALSE + /// Mob who armed it. Needed for the get_dir proc + var/armer /obj/item/grenade/barrier/dropwall/toggle_mode(mob/user) switch(mode) + if(AUTO) + mode = NORTH if(NORTH) mode = EAST if(EAST) @@ -283,12 +292,27 @@ if(SOUTH) mode = WEST if(WEST) - mode = NORTH + mode = AUTO - to_chat(user, "[src] is now in [dir2text(mode)] mode.") + to_chat(user, "[src] is now in [mode == AUTO ? mode : dir2text(mode)] mode.") + +/obj/item/grenade/barrier/dropwall/attack_self(mob/user) + . = ..() + armer = user + + +/obj/item/grenade/barrier/dropwall/end_throw() + if(active) + addtimer(CALLBACK(src, PROC_REF(prime)), 1) //Wait for the throw to fully end /obj/item/grenade/barrier/dropwall/prime() + if(deployed) + return + if(mode == AUTO) + mode = angle2dir_cardinal(get_angle(armer, get_turf(src))) new /obj/structure/dropwall_generator(get_turf(loc), mode, uptime) + deployed = TRUE + armer = null qdel(src) /obj/structure/dropwall_generator @@ -355,6 +379,11 @@ else qdel(src) +/obj/structure/dropwall_generator/ex_act(severity) + if(protected && severity > 1) //We would throw the explosion at the shield, but it is already getting hit + return + qdel(src) + /obj/structure/dropwall_generator/proc/power_out() visible_message("[src] runs out of power, causing its shields to fail!") new /obj/item/used_dropwall(get_turf(src)) @@ -395,3 +424,5 @@ #undef DROPWALL_UPTIME + +#undef AUTO