diff --git a/aurorastation.dme b/aurorastation.dme index 1752b65196c..dc6561e0674 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -668,7 +668,6 @@ #include "code\game\objects\effects\glowshroom.dm" #include "code\game\objects\effects\landmarks.dm" #include "code\game\objects\effects\manifest.dm" -#include "code\game\objects\effects\mines.dm" #include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\overlays.dm" #include "code\game\objects\effects\portals.dm" @@ -774,6 +773,7 @@ #include "code\game\objects\items\weapons\gift_wrappaper.dm" #include "code\game\objects\items\weapons\handcuffs.dm" #include "code\game\objects\items\weapons\improvised_components.dm" +#include "code\game\objects\items\weapons\landmines.dm" #include "code\game\objects\items\weapons\manuals.dm" #include "code\game\objects\items\weapons\mop.dm" #include "code\game\objects\items\weapons\paint.dm" diff --git a/code/datums/uplink/highly visible and dangerous weapons.dm b/code/datums/uplink/highly visible and dangerous weapons.dm index 81b66a809fd..1e9a00bf5bb 100644 --- a/code/datums/uplink/highly visible and dangerous weapons.dm +++ b/code/datums/uplink/highly visible and dangerous weapons.dm @@ -38,7 +38,7 @@ name = "Kneebreaker Hammer" item_cost = 10 path = /obj/item/weapon/melee/hammer - + /datum/uplink_item/item/visible_weapons/revolver name = "Revolver" item_cost = 12 @@ -49,6 +49,21 @@ item_cost = 14 path = /obj/item/weapon/gun/projectile/automatic/tommygun +/datum/uplink_item/item/visible_weapons/landmine + name = "Land Mine" + item_cost = 5 + path = /obj/item/weapon/landmine + +/datum/uplink_item/item/visible_weapons/emplandmine + name = "EMP Land Mine" + item_cost = 4 + path = /obj/item/weapon/landmine/emp + +/datum/uplink_item/item/visible_weapons/sleepylandmine + name = "N2O Land Mine" + item_cost = 7 + path = /obj/item/weapon/landmine/n2o + /datum/uplink_item/item/visible_weapons/heavysniper name = "Anti-materiel Rifle" item_cost = DEFAULT_TELECRYSTAL_AMOUNT diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm deleted file mode 100644 index 383119200fb..00000000000 --- a/code/game/objects/effects/mines.dm +++ /dev/null @@ -1,101 +0,0 @@ -/obj/effect/mine - name = "Mine" - desc = "I Better stay away from that thing." - density = 1 - anchored = 1 - layer = 3 - icon = 'icons/obj/weapons.dmi' - icon_state = "uglymine" - var/triggerproc = "explode" //name of the proc thats called when the mine is triggered - var/triggered = 0 - -/obj/effect/mine/New() - icon_state = "uglyminearmed" - -/obj/effect/mine/Crossed(AM as mob|obj) - Bumped(AM) - -/obj/effect/mine/Bumped(mob/M as mob|obj) - - if(triggered) return - - if(istype(M, /mob/living/carbon/human)) - for(var/mob/O in viewers(world.view, src.loc)) - O << "[M] triggered the \icon[src] [src]" - triggered = 1 - call(src,triggerproc)(M) - -/obj/effect/mine/proc/triggerrad(var/mob/living/M) - spark(src, 3, alldirs) - if (istype(M)) - M.apply_radiation(50) - - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggerstun(obj) - if(ismob(obj)) - var/mob/M = obj - M.Stun(30) - spark(src, 3, alldirs) - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggern2o(obj) - //example: n2o triggerproc - //note: im lazy - - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) - target.assume_gas("sleeping_agent", 30) - - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggerphoron(obj) - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) - target.assume_gas("phoron", 30) - - target.hotspot_expose(1000, CELL_VOLUME) - - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggerkick(var/mob/M) - spark(src, 3, alldirs) - if (istype(M)) - qdel(M.client) - - spawn(0) - qdel(src) - -/obj/effect/mine/proc/explode(obj) - explosion(loc, 0, 1, 2, 3) - spawn(0) - qdel(src) - -/obj/effect/mine/dnascramble - name = "Radiation Mine" - icon_state = "uglymine" - triggerproc = "triggerrad" - -/obj/effect/mine/phoron - name = "Phoron Mine" - icon_state = "uglymine" - triggerproc = "triggerphoron" - -/obj/effect/mine/kick - name = "Kick Mine" - icon_state = "uglymine" - triggerproc = "triggerkick" - -/obj/effect/mine/n2o - name = "N2O Mine" - icon_state = "uglymine" - triggerproc = "triggern2o" - -/obj/effect/mine/stun - name = "Stun Mine" - icon_state = "uglymine" - triggerproc = "triggerstun" diff --git a/code/game/objects/items/weapons/landmines.dm b/code/game/objects/items/weapons/landmines.dm new file mode 100644 index 00000000000..1b7bed7fea0 --- /dev/null +++ b/code/game/objects/items/weapons/landmines.dm @@ -0,0 +1,147 @@ +/obj/item/weapon/landmine + name = "land mine" + desc = "An anti-personnel explosive device used for area denial." + icon = 'icons/obj/grenade.dmi' + icon_state = "landmine" + throwforce = 0 + w_class = 3 + var/deployed = 0 + +/obj/item/weapon/landmine/update_icon() + ..() + + if(!deployed) + icon_state = "[icon_state]" + else + icon_state = "[icon_state]_on" + +/obj/item/weapon/landmine/verb/hide_under() + set src in oview(1) + set name = "Hide" + set category = "Object" + + if(use_check(user, USE_DISALLOW_SILICONS)) + return + + layer = TURF_LAYER+0.2 + usr << "You hide \the [src]." + + +/obj/item/weapon/landmine/attack_self(mob/user as mob) + ..() + if(!deployed && !use_check(user, USE_DISALLOW_SILICONS)) + user.visible_message( + "[user] starts to deploy \the [src].", + "You begin deploying \the [src]!" + ) + + if (do_after(user, 60)) + user.visible_message( + "[user] has deployed \the [src].", + "You have deployed \the [src]!" + ) + + deployed = 1 + user.drop_from_inventory(src) + update_icon() + anchored = 1 + +/obj/item/weapon/landmine/proc/trigger(mob/living/L) + spark(src, 3, alldirs) + if(ishuman(L)) + L.Weaken(2) + explosion(loc, 0, 1, 2, 3) + qdel(src) + +/obj/item/weapon/landmine/Crossed(AM as mob|obj) + if(deployed && isliving(AM)) + var/mob/living/L = AM + if(L.mob_size >= 5) + L.visible_message( + "[L] steps on \the [src].", + "You step on \the [src]!", + "You hear a mechanical click!" + ) + trigger(L) + ..() + +/obj/item/weapon/landmine/attack_hand(mob/user as mob) + if(deployed && !use_check(user, USE_DISALLOW_SILICONS)) + user.visible_message( + "[user] triggers \the [src].", + "You trigger \the [src]!", + "You hear a mechanical click!" + ) + trigger(user) + else + ..() + +/obj/item/weapon/landmine/attackby(var/obj/item/I, var/mob/user) + ..() + if(I.force > 10 && deployed) + trigger(user) + +/obj/item/weapon/landmine/bullet_act() + if(deployed) + trigger() + +/obj/item/weapon/landmine/ex_act() + if(deployed) + trigger() + +//landmines that do more than explode + +/obj/item/weapon/landmine/frag + name = "fragmentation land mine" + var/num_fragments = 15 + var/fragment_damage = 10 + var/damage_step = 2 + var/explosion_size = 3 + var/spread_range = 7 + +/obj/item/weapon/landmine/frag/trigger(mob/living/L) + spark(src, 3, alldirs) + fragem(src,num_fragments,num_fragments,explosion_size,explosion_size+1,fragment_damage,damage_step,1) + qdel(src) + +/obj/item/weapon/landmine/radiation + icon_state = "radlandmine" + +/obj/item/weapon/landmine/radiation/trigger(mob/living/L) + spark(src, 3, alldirs) + if(L) + if(ishuman(L)) + L.apply_radiation(50) + qdel(src) + +/obj/item/weapon/landmine/phoron + icon_state = "phoronlandmine" + +/obj/item/weapon/landmine/phoron/trigger(mob/living/L) + spark(src, 3, alldirs) + for (var/turf/simulated/floor/target in range(1,src)) + if(!target.blocks_air) + target.assume_gas("phoron", 30) + + target.hotspot_expose(1000, CELL_VOLUME) + + qdel(src) + +/obj/item/weapon/landmine/n2o + icon_state = "phoronlandmine" + +/obj/item/weapon/landmine/n2o/trigger(mob/living/L) + spark(src, 3, alldirs) + for (var/turf/simulated/floor/target in range(1,src)) + if(!target.blocks_air) + target.assume_gas("sleeping_agent", 30) + + qdel(src) + +/obj/item/weapon/landmine/emp + icon_state = "emplandmine" + +/obj/item/weapon/landmine/emp/trigger(mob/living/L) + spark(src, 3, alldirs) + empulse(src.loc, 2, 4) + qdel(src) \ No newline at end of file diff --git a/html/changelogs/alberyk-landmine.yml b/html/changelogs/alberyk-landmine.yml new file mode 100644 index 00000000000..e51ab1e6932 --- /dev/null +++ b/html/changelogs/alberyk-landmine.yml @@ -0,0 +1,4 @@ +author: Alberyk +delete-after: True +changes: + - rscadd: "Added explosive land mines, you can get them by using an uplink." diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index 60d7b4b4d2d..51bb782b8ef 100644 Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ