mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
committed by
Atermonera
parent
e58e97c449
commit
fa6ff94474
81
code/datums/wires/mines.dm
Normal file
81
code/datums/wires/mines.dm
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/datum/wires/mines
|
||||||
|
wire_count = 6
|
||||||
|
random = 1
|
||||||
|
holder_type = /obj/effect/mine
|
||||||
|
|
||||||
|
#define WIRE_DETONATE 1
|
||||||
|
#define WIRE_TIMED_DET 2
|
||||||
|
#define WIRE_DISARM 4
|
||||||
|
#define WIRE_DUMMY_1 8
|
||||||
|
#define WIRE_DUMMY_2 16
|
||||||
|
#define WIRE_BADDISARM 32
|
||||||
|
|
||||||
|
/datum/wires/mines/GetInteractWindow()
|
||||||
|
. = ..()
|
||||||
|
. += "<br>\n["Warning: detonation may occur even with proper equipment."]"
|
||||||
|
return .
|
||||||
|
|
||||||
|
/datum/wires/mines/proc/explode()
|
||||||
|
return
|
||||||
|
|
||||||
|
/datum/wires/mines/UpdateCut(var/index, var/mended)
|
||||||
|
var/obj/effect/mine/C = holder
|
||||||
|
|
||||||
|
switch(index)
|
||||||
|
if(WIRE_DETONATE)
|
||||||
|
C.visible_message("\icon[C] *BEEE-*", "\icon[C] *BEEE-*")
|
||||||
|
C.explode()
|
||||||
|
|
||||||
|
if(WIRE_TIMED_DET)
|
||||||
|
C.visible_message("\icon[C] *BEEE-*", "\icon[C] *BEEE-*")
|
||||||
|
C.explode()
|
||||||
|
|
||||||
|
if(WIRE_DISARM)
|
||||||
|
C.visible_message("\icon[C] *click!*", "\icon[C] *click!*")
|
||||||
|
new C.mineitemtype(get_turf(C))
|
||||||
|
spawn(0)
|
||||||
|
qdel(C)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(WIRE_DUMMY_1)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
if(WIRE_DUMMY_2)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(WIRE_BADDISARM)
|
||||||
|
C.visible_message("\icon[C] *BEEPBEEPBEEP*", "\icon[C] *BEEPBEEPBEEP*")
|
||||||
|
spawn(20)
|
||||||
|
C.explode()
|
||||||
|
return
|
||||||
|
|
||||||
|
/datum/wires/mines/UpdatePulsed(var/index)
|
||||||
|
var/obj/effect/mine/C = holder
|
||||||
|
if(IsIndexCut(index))
|
||||||
|
return
|
||||||
|
switch(index)
|
||||||
|
if(WIRE_DETONATE)
|
||||||
|
C.visible_message("\icon[C] *beep*", "\icon[C] *beep*")
|
||||||
|
|
||||||
|
if(WIRE_TIMED_DET)
|
||||||
|
C.visible_message("\icon[C] *BEEPBEEPBEEP*", "\icon[C] *BEEPBEEPBEEP*")
|
||||||
|
spawn(20)
|
||||||
|
C.explode()
|
||||||
|
|
||||||
|
if(WIRE_DISARM)
|
||||||
|
C.visible_message("\icon[C] *ping*", "\icon[C] *ping*")
|
||||||
|
|
||||||
|
if(WIRE_DUMMY_1)
|
||||||
|
C.visible_message("\icon[C] *ping*", "\icon[C] *ping*")
|
||||||
|
|
||||||
|
if(WIRE_DUMMY_2)
|
||||||
|
C.visible_message("\icon[C] *beep*", "\icon[C] *beep*")
|
||||||
|
|
||||||
|
if(WIRE_BADDISARM)
|
||||||
|
C.visible_message("\icon[C] *ping*", "\icon[C] *ping*")
|
||||||
|
return
|
||||||
|
|
||||||
|
/datum/wires/mines/CanUse(var/mob/living/L)
|
||||||
|
var/obj/effect/mine/M = holder
|
||||||
|
return M.panel_open
|
||||||
@@ -1,16 +1,37 @@
|
|||||||
/obj/effect/mine
|
/obj/effect/mine
|
||||||
name = "Mine"
|
name = "mine"
|
||||||
desc = "I Better stay away from that thing."
|
desc = "A small explosive mine with 'HE' and a grenade symbol on the side."
|
||||||
density = 1
|
density = 0
|
||||||
anchored = 1
|
anchored = 1
|
||||||
layer = 3
|
|
||||||
icon = 'icons/obj/weapons.dmi'
|
icon = 'icons/obj/weapons.dmi'
|
||||||
icon_state = "uglymine"
|
icon_state = "uglymine"
|
||||||
var/triggerproc = "explode" //name of the proc thats called when the mine is triggered
|
|
||||||
var/triggered = 0
|
var/triggered = 0
|
||||||
|
var/smoke_strength = 3
|
||||||
|
var/mineitemtype = /obj/item/weapon/mine
|
||||||
|
var/panel_open = 0
|
||||||
|
var/datum/wires/mines/wires = null
|
||||||
|
|
||||||
/obj/effect/mine/New()
|
/obj/effect/mine/New()
|
||||||
icon_state = "uglyminearmed"
|
icon_state = "uglyminearmed"
|
||||||
|
wires = new(src)
|
||||||
|
|
||||||
|
/obj/effect/mine/proc/explode()
|
||||||
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||||
|
triggered = 1
|
||||||
|
s.set_up(3, 1, src)
|
||||||
|
s.start()
|
||||||
|
explosion(loc, 0, 2, 3, 4) //land mines are dangerous, folks.
|
||||||
|
qdel(s)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/effect/mine/bullet_act()
|
||||||
|
if(prob(50))
|
||||||
|
explode()
|
||||||
|
|
||||||
|
/obj/effect/mine/ex_act(severity)
|
||||||
|
if(severity <= 2 || prob(50))
|
||||||
|
explode()
|
||||||
|
..()
|
||||||
|
|
||||||
/obj/effect/mine/Crossed(AM as mob|obj)
|
/obj/effect/mine/Crossed(AM as mob|obj)
|
||||||
Bumped(AM)
|
Bumped(AM)
|
||||||
@@ -19,87 +40,218 @@
|
|||||||
|
|
||||||
if(triggered) return
|
if(triggered) return
|
||||||
|
|
||||||
if(istype(M, /mob/living/carbon/human))
|
if(istype(M, /mob/living/))
|
||||||
for(var/mob/O in viewers(world.view, src.loc))
|
explode()
|
||||||
O << "<font color='red'>[M] triggered the \icon[src] [src]</font>"
|
|
||||||
triggered = 1
|
|
||||||
call(src,triggerproc)(M)
|
|
||||||
|
|
||||||
/obj/effect/mine/proc/triggerrad(obj)
|
/obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||||
|
if(isscrewdriver(W))
|
||||||
|
panel_open = !panel_open
|
||||||
|
user.visible_message("<span class='warning'>[user] very carefully screws the mine's panel [panel_open ? "open" : "closed"].</span>",
|
||||||
|
"<span class='notice'>You very carefully screw the mine's panel [panel_open ? "open" : "closed"].</span>")
|
||||||
|
playsound(src.loc, W.usesound, 50, 1)
|
||||||
|
|
||||||
|
else if((iswirecutter(W) || ismultitool(W)) && panel_open)
|
||||||
|
interact(user)
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/effect/mine/interact(mob/living/user as mob)
|
||||||
|
if(!panel_open || istype(user, /mob/living/silicon/ai))
|
||||||
|
return
|
||||||
|
|
||||||
|
user.set_machine(src)
|
||||||
|
wires.Interact(user)
|
||||||
|
|
||||||
|
/obj/effect/mine/dnascramble/explode(obj)
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||||
|
triggered = 1
|
||||||
s.set_up(3, 1, src)
|
s.set_up(3, 1, src)
|
||||||
s.start()
|
s.start()
|
||||||
obj:radiation += 50
|
obj:radiation += 50
|
||||||
randmutb(obj)
|
randmutb(obj)
|
||||||
domutcheck(obj,null)
|
domutcheck(obj,null)
|
||||||
spawn(0)
|
qdel(s)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/obj/effect/mine/proc/triggerstun(obj)
|
/obj/effect/mine/stun/explode(obj)
|
||||||
|
triggered = 1
|
||||||
if(ismob(obj))
|
if(ismob(obj))
|
||||||
var/mob/M = obj
|
var/mob/M = obj
|
||||||
M.Stun(30)
|
M.Stun(30)
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||||
s.set_up(3, 1, src)
|
s.set_up(3, 1, src)
|
||||||
s.start()
|
s.start()
|
||||||
spawn(0)
|
qdel(s)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/obj/effect/mine/proc/triggern2o(obj)
|
|
||||||
//example: n2o triggerproc
|
|
||||||
//note: im lazy
|
|
||||||
|
|
||||||
|
/obj/effect/mine/n2o/explode()
|
||||||
|
triggered = 1
|
||||||
for (var/turf/simulated/floor/target in range(1,src))
|
for (var/turf/simulated/floor/target in range(1,src))
|
||||||
if(!target.blocks_air)
|
if(!target.blocks_air)
|
||||||
target.assume_gas("sleeping_agent", 30)
|
target.assume_gas("sleeping_agent", 30)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
spawn(0)
|
/obj/effect/mine/phoron/explode()
|
||||||
qdel(src)
|
triggered = 1
|
||||||
|
|
||||||
/obj/effect/mine/proc/triggerphoron(obj)
|
|
||||||
for (var/turf/simulated/floor/target in range(1,src))
|
for (var/turf/simulated/floor/target in range(1,src))
|
||||||
if(!target.blocks_air)
|
if(!target.blocks_air)
|
||||||
target.assume_gas("phoron", 30)
|
target.assume_gas("phoron", 30)
|
||||||
|
|
||||||
target.hotspot_expose(1000, CELL_VOLUME)
|
target.hotspot_expose(1000, CELL_VOLUME)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
spawn(0)
|
/obj/effect/mine/kick/explode(obj)
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/effect/mine/proc/triggerkick(obj)
|
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||||
|
triggered = 1
|
||||||
s.set_up(3, 1, src)
|
s.set_up(3, 1, src)
|
||||||
s.start()
|
s.start()
|
||||||
qdel(obj:client)
|
qdel(obj:client)
|
||||||
spawn(0)
|
qdel(s)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/obj/effect/mine/proc/explode(obj)
|
/obj/effect/mine/frag/explode()
|
||||||
explosion(loc, 0, 1, 2, 3)
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||||
spawn(0)
|
triggered = 1
|
||||||
qdel(src)
|
s.set_up(3, 1, src)
|
||||||
|
s.start()
|
||||||
|
var/turf/O = get_turf(src)
|
||||||
|
if(!O)
|
||||||
|
return
|
||||||
|
src.fragmentate(O, 20, 7, list(/obj/item/projectile/bullet/pellet/fragment)) //only 20 weak fragments because you're stepping directly on it
|
||||||
|
qdel(s)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/effect/mine/training/explode()
|
||||||
|
triggered = 1
|
||||||
|
visible_message("\The [src.name]'s light flashes rapidly as it 'explodes'.")
|
||||||
|
new src.mineitemtype(get_turf(src))
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
/obj/effect/mine/dnascramble
|
/obj/effect/mine/dnascramble
|
||||||
name = "Radiation Mine"
|
name = "radiation mine"
|
||||||
|
desc = "A small explosive mine with a radiation symbol on the side."
|
||||||
icon_state = "uglymine"
|
icon_state = "uglymine"
|
||||||
triggerproc = "triggerrad"
|
mineitemtype = /obj/item/weapon/mine/dnascramble
|
||||||
|
|
||||||
/obj/effect/mine/phoron
|
/obj/effect/mine/phoron
|
||||||
name = "Phoron Mine"
|
name = "incendiary mine"
|
||||||
|
desc = "A small explosive mine with a fire symbol on the side."
|
||||||
icon_state = "uglymine"
|
icon_state = "uglymine"
|
||||||
triggerproc = "triggerphoron"
|
mineitemtype = /obj/item/weapon/mine/phoron
|
||||||
|
|
||||||
/obj/effect/mine/kick
|
/obj/effect/mine/kick
|
||||||
name = "Kick Mine"
|
name = "kick mine"
|
||||||
|
desc = "Concentrated war crimes. Handle with care."
|
||||||
icon_state = "uglymine"
|
icon_state = "uglymine"
|
||||||
triggerproc = "triggerkick"
|
mineitemtype = /obj/item/weapon/mine/kick
|
||||||
|
|
||||||
/obj/effect/mine/n2o
|
/obj/effect/mine/n2o
|
||||||
name = "N2O Mine"
|
name = "nitrous oxide mine"
|
||||||
|
desc = "A small explosive mine with three Z's on the side."
|
||||||
icon_state = "uglymine"
|
icon_state = "uglymine"
|
||||||
triggerproc = "triggern2o"
|
mineitemtype = /obj/item/weapon/mine/n2o
|
||||||
|
|
||||||
/obj/effect/mine/stun
|
/obj/effect/mine/stun
|
||||||
name = "Stun Mine"
|
name = "stun mine"
|
||||||
|
desc = "A small explosive mine with a lightning bolt symbol on the side."
|
||||||
icon_state = "uglymine"
|
icon_state = "uglymine"
|
||||||
triggerproc = "triggerstun"
|
mineitemtype = /obj/item/weapon/mine/stun
|
||||||
|
|
||||||
|
/obj/effect/mine/frag
|
||||||
|
name = "fragmentation mine"
|
||||||
|
desc = "A small explosive mine with 'FRAG' and a grenade symbol on the side."
|
||||||
|
icon_state = "uglymine"
|
||||||
|
mineitemtype = /obj/item/weapon/mine/frag
|
||||||
|
var/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment)
|
||||||
|
var/num_fragments = 20 //total number of fragments produced by the grenade
|
||||||
|
//The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern
|
||||||
|
var/spread_range = 7
|
||||||
|
|
||||||
|
/obj/effect/mine/training
|
||||||
|
name = "training mine"
|
||||||
|
desc = "A mine with its payload removed, for EOD training and demonstrations."
|
||||||
|
icon_state = "uglymine"
|
||||||
|
mineitemtype = /obj/item/weapon/mine/training
|
||||||
|
|
||||||
|
/obj/item/weapon/mine
|
||||||
|
name = "mine"
|
||||||
|
desc = "A small explosive mine with 'HE' and a grenade symbol on the side."
|
||||||
|
icon = 'icons/obj/weapons.dmi'
|
||||||
|
icon_state = "uglymine"
|
||||||
|
var/arming = 0
|
||||||
|
var/countdown = 10
|
||||||
|
var/minetype = /obj/effect/mine
|
||||||
|
|
||||||
|
/obj/item/weapon/mine/attack_self(mob/user as mob)
|
||||||
|
if(!arming)
|
||||||
|
to_chat(user, "<span class='warning'>You prime \the [name]! [countdown] seconds!</span>")
|
||||||
|
icon_state = initial(icon_state) + "armed"
|
||||||
|
arming = 1
|
||||||
|
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||||
|
add_fingerprint(user)
|
||||||
|
if(iscarbon(user))
|
||||||
|
var/mob/living/carbon/C = user
|
||||||
|
C.throw_mode_on()
|
||||||
|
spawn(countdown*10)
|
||||||
|
if(arming)
|
||||||
|
prime()
|
||||||
|
if(user)
|
||||||
|
msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||||
|
return
|
||||||
|
else
|
||||||
|
to_chat(user, "You cancel \the [name]'s priming sequence.")
|
||||||
|
arming = 0
|
||||||
|
countdown = initial(countdown)
|
||||||
|
icon_state = initial(icon_state)
|
||||||
|
add_fingerprint(user)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/item/weapon/mine/proc/prime(mob/user as mob)
|
||||||
|
visible_message("\The [src.name] beeps as the priming sequence completes.")
|
||||||
|
var/atom/R = new minetype(get_turf(src))
|
||||||
|
src.transfer_fingerprints_to(R)
|
||||||
|
R.add_fingerprint(user)
|
||||||
|
spawn(0)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/item/weapon/mine/dnascramble
|
||||||
|
name = "radiation mine"
|
||||||
|
desc = "A small explosive mine with a radiation symbol on the side."
|
||||||
|
icon_state = "uglymine"
|
||||||
|
minetype = /obj/effect/mine/dnascramble
|
||||||
|
|
||||||
|
/obj/item/weapon/mine/phoron
|
||||||
|
name = "incendiary mine"
|
||||||
|
desc = "A small explosive mine with a fire symbol on the side."
|
||||||
|
icon_state = "uglymine"
|
||||||
|
minetype = /obj/effect/mine/phoron
|
||||||
|
|
||||||
|
/obj/item/weapon/mine/kick
|
||||||
|
name = "kick mine"
|
||||||
|
desc = "Concentrated war crimes. Handle with care."
|
||||||
|
icon_state = "uglymine"
|
||||||
|
minetype = /obj/effect/mine/kick
|
||||||
|
|
||||||
|
/obj/item/weapon/mine/n2o
|
||||||
|
name = "nitrous oxide mine"
|
||||||
|
desc = "A small explosive mine with three Z's on the side."
|
||||||
|
icon_state = "uglymine"
|
||||||
|
minetype = /obj/effect/mine/n2o
|
||||||
|
|
||||||
|
/obj/item/weapon/mine/stun
|
||||||
|
name = "stun mine"
|
||||||
|
desc = "A small explosive mine with a lightning bolt symbol on the side."
|
||||||
|
icon_state = "uglymine"
|
||||||
|
minetype = /obj/effect/mine/stun
|
||||||
|
|
||||||
|
/obj/item/weapon/mine/frag
|
||||||
|
name = "fragmentation mine"
|
||||||
|
desc = "A small explosive mine with 'FRAG' and a grenade symbol on the side."
|
||||||
|
icon_state = "uglymine"
|
||||||
|
minetype = /obj/effect/mine/frag
|
||||||
|
|
||||||
|
/obj/item/weapon/mine/training
|
||||||
|
name = "training mine"
|
||||||
|
desc = "A mine with its payload removed, for EOD training and demonstrations."
|
||||||
|
icon_state = "uglymine"
|
||||||
|
minetype = /obj/effect/mine/training
|
||||||
36
html/changelogs/MistyLuminescence-mines.yml
Normal file
36
html/changelogs/MistyLuminescence-mines.yml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
################################
|
||||||
|
# Example Changelog File
|
||||||
|
#
|
||||||
|
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||||
|
#
|
||||||
|
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||||
|
# When it is, any changes listed below will disappear.
|
||||||
|
#
|
||||||
|
# Valid Prefixes:
|
||||||
|
# bugfix
|
||||||
|
# wip (For works in progress)
|
||||||
|
# tweak
|
||||||
|
# soundadd
|
||||||
|
# sounddel
|
||||||
|
# rscadd (general adding of nice things)
|
||||||
|
# rscdel (general deleting of nice things)
|
||||||
|
# imageadd
|
||||||
|
# imagedel
|
||||||
|
# maptweak
|
||||||
|
# spellcheck (typo fixes)
|
||||||
|
# experiment
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# Your name.
|
||||||
|
author: MistyLuminescence
|
||||||
|
|
||||||
|
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||||
|
delete-after: True
|
||||||
|
|
||||||
|
# Any changes you've made. See valid prefix list above.
|
||||||
|
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||||
|
# SCREW THIS UP AND IT WON'T WORK.
|
||||||
|
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||||
|
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||||
|
changes:
|
||||||
|
- tweak: "Mines are now very, /very/ dangerous to step on (so don't do that). You can disarm them with a multitool and wirecutters - ping is good, beep is bad - or by shooting or exploding them from a distance. Be careful!"
|
||||||
@@ -315,6 +315,7 @@
|
|||||||
#include "code\datums\wires\explosive.dm"
|
#include "code\datums\wires\explosive.dm"
|
||||||
#include "code\datums\wires\grid_checker.dm"
|
#include "code\datums\wires\grid_checker.dm"
|
||||||
#include "code\datums\wires\jukebox.dm"
|
#include "code\datums\wires\jukebox.dm"
|
||||||
|
#include "code\datums\wires\mines.dm"
|
||||||
#include "code\datums\wires\particle_accelerator.dm"
|
#include "code\datums\wires\particle_accelerator.dm"
|
||||||
#include "code\datums\wires\radio.dm"
|
#include "code\datums\wires\radio.dm"
|
||||||
#include "code\datums\wires\robot.dm"
|
#include "code\datums\wires\robot.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user