-
Notifications
You must be signed in to change notification settings - Fork 103
/
Copy pathmine.dm
78 lines (67 loc) · 2.5 KB
/
mine.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/obj/effect/mine/ms13/explosive
name = "Frag"
icon_state = "frag_primed"
var/inactive_state = "frag_armed"
/// The devastation range of the resulting explosion.
var/range_devastation = 0
/// The heavy impact range of the resulting explosion.
var/range_heavy = 1
/// The light impact range of the resulting explosion.
var/range_light = 2
/// The flame range of the resulting explosion.
var/range_flame = 0
/// The flash range of the resulting explosion.
var/range_flash = 3
arm_delay = 5 SECONDS
/obj/effect/mine/ms13/explosive/Initialize(mapload)
. = ..()
if(arm_delay)
armed = FALSE
icon_state = inactive_state
addtimer(CALLBACK(src, PROC_REF(now_armed)), arm_delay)
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
)
AddElement(/datum/element/connect_loc, loc_connections)
/obj/effect/mine/ms13/explosive/examine(mob/user)
. = ..()
if(!armed)
. += "\t<span class='information'>It appears to be inactive...</span>"
/// The effect of the mine
/obj/effect/mine/ms13/explosive/mineEffect(mob/victim)
explosion(src, range_devastation, range_heavy, range_light, range_flame, range_flash)
/// If the landmine was previously inactive, this beeps and displays a message marking it active
/obj/effect/mine/ms13/explosive/now_armed()
armed = TRUE
icon_state = initial(icon_state)
playsound(src, 'mojave/sound/ms13machines/frag_mine_arm.ogg', 40, FALSE, -2)
visible_message(span_danger("\The [src] beeps softly, indicating it is now active."), vision_distance = COMBAT_MESSAGE_RANGE)
/obj/effect/mine/ms13/explosive/on_entered(datum/source, atom/movable/AM)
. = ..()
/obj/effect/mine/ms13/explosive/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir)
. = ..()
triggermine()
/// When something sets off a mine
/obj/effect/mine/ms13/explosive/triggermine(atom/movable/triggerer)
if(iseffect(triggerer))
return
if(triggered) //too busy detonating to detonate again
return
if(triggerer)
visible_message(span_danger("[triggerer] sets off [icon2html(src, viewers(src))] [src]!"))
else
visible_message(span_danger("[icon2html(src, viewers(src))] [src] detonates!"))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
if(ismob(triggerer))
mineEffect(triggerer)
triggered = TRUE
SEND_SIGNAL(src, COMSIG_MINE_TRIGGERED, triggerer)
qdel(src)
/obj/effect/spawner/random/ms13/explosive_mines
name = "Explosive mines"
spawn_loot_chance = 50
loot = list(
/obj/effect/mine/ms13/explosive
)