Yet Another Fugitives PR: Bounty Hunters, Features, Fixes, Treason, Removals! (#44802)
* mostly fixes in this commit * removes old_god from the dme * russian shuttle improvements * TODO: fix the hook gun * shotgun finished, next commit shuttle * bounty hunting shuttle * back up to speed on the dmis * readds poster 46 and adds the shuttle finally * dmi fixes * traps need fixing, work out whatever is happening with synths * super final touches, see desc map ports + proper spawners, pinpointer and traps functional. other misc changes * removes verb stuff from non verb stuff * review (see desc) antimagic checks and it now the two objects move inside each other instead * dmi conflicts * PLUNGERS. BEGONE.
487
_maps/shuttles/hunter_bounty.dmm
Normal file
@@ -0,0 +1,487 @@
|
|||||||
|
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||||
|
"a" = (
|
||||||
|
/turf/template_noop,
|
||||||
|
/area/template_noop)
|
||||||
|
"b" = (
|
||||||
|
/turf/closed/wall/mineral/plastitanium,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"c" = (
|
||||||
|
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||||
|
/obj/machinery/door/airlock/external,
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"d" = (
|
||||||
|
/obj/effect/turf_decal/stripes/line{
|
||||||
|
dir = 1
|
||||||
|
},
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"e" = (
|
||||||
|
/obj/structure/shuttle/engine/propulsion{
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
|
/turf/open/floor/plating/airless,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"f" = (
|
||||||
|
/obj/structure/shuttle/engine/heater{
|
||||||
|
icon_state = "heater";
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
|
/turf/open/floor/plating/airless,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"g" = (
|
||||||
|
/obj/structure/sign/warning/vacuum/external,
|
||||||
|
/turf/closed/wall/mineral/plastitanium,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"h" = (
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"i" = (
|
||||||
|
/obj/structure/grille,
|
||||||
|
/obj/structure/window/plastitanium,
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"j" = (
|
||||||
|
/obj/effect/turf_decal/stripes/line,
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"k" = (
|
||||||
|
/obj/structure/sign/poster/contraband/bountyhunters,
|
||||||
|
/turf/closed/wall/mineral/plastitanium,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"l" = (
|
||||||
|
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||||
|
dir = 1
|
||||||
|
},
|
||||||
|
/obj/machinery/door/airlock/external,
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"m" = (
|
||||||
|
/obj/structure/chair/office{
|
||||||
|
dir = 4
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/light,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"n" = (
|
||||||
|
/obj/structure/table,
|
||||||
|
/turf/open/floor/pod/light,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"o" = (
|
||||||
|
/obj/structure/chair/office{
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/light,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"p" = (
|
||||||
|
/obj/effect/mob_spawn/human/fugitive/bounty/hook,
|
||||||
|
/turf/open/floor/pod/light,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"q" = (
|
||||||
|
/obj/structure/shuttle/engine/heater{
|
||||||
|
icon_state = "heater";
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
|
/obj/structure/window/reinforced{
|
||||||
|
dir = 4
|
||||||
|
},
|
||||||
|
/turf/open/floor/plating/airless,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"r" = (
|
||||||
|
/obj/machinery/computer/launchpad{
|
||||||
|
dir = 4
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"s" = (
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"t" = (
|
||||||
|
/obj/effect/turf_decal/stripes/line{
|
||||||
|
dir = 9
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"u" = (
|
||||||
|
/obj/structure/curtain/bounty,
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"v" = (
|
||||||
|
/obj/structure/chair/office{
|
||||||
|
dir = 4
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"w" = (
|
||||||
|
/obj/structure/table,
|
||||||
|
/obj/item/phone,
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"x" = (
|
||||||
|
/obj/structure/table,
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"y" = (
|
||||||
|
/obj/structure/chair/office{
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"z" = (
|
||||||
|
/obj/structure/chair/comfy/shuttle{
|
||||||
|
dir = 4
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"A" = (
|
||||||
|
/obj/machinery/computer/shuttle/hunter{
|
||||||
|
icon_state = "computer";
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"B" = (
|
||||||
|
/obj/machinery/launchpad,
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"C" = (
|
||||||
|
/obj/item/multitool,
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"D" = (
|
||||||
|
/obj/effect/turf_decal/stripes/line{
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"E" = (
|
||||||
|
/obj/structure/table,
|
||||||
|
/obj/item/twohanded/binoculars,
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"F" = (
|
||||||
|
/obj/machinery/power/smes,
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"G" = (
|
||||||
|
/obj/machinery/fugitive_capture,
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"H" = (
|
||||||
|
/obj/effect/turf_decal/stripes/line{
|
||||||
|
dir = 10
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"I" = (
|
||||||
|
/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/hunter{
|
||||||
|
icon_state = "computer";
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/dark,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"J" = (
|
||||||
|
/obj/machinery/suit_storage_unit/standard_unit,
|
||||||
|
/turf/open/floor/pod/light,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"K" = (
|
||||||
|
/obj/machinery/suit_storage_unit/open,
|
||||||
|
/turf/open/floor/pod/light,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"M" = (
|
||||||
|
/obj/effect/mob_spawn/human/fugitive/bounty/armor{
|
||||||
|
icon_state = "sleeper";
|
||||||
|
dir = 1
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/light,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"N" = (
|
||||||
|
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||||
|
dir = 1
|
||||||
|
},
|
||||||
|
/obj/machinery/door/airlock/external,
|
||||||
|
/obj/docking_port/stationary{
|
||||||
|
dwidth = 11;
|
||||||
|
height = 16;
|
||||||
|
id = "pirateship_home";
|
||||||
|
name = "Deep Space";
|
||||||
|
width = 17
|
||||||
|
},
|
||||||
|
/obj/docking_port/mobile{
|
||||||
|
dheight = 3;
|
||||||
|
dwidth = 3;
|
||||||
|
height = 13;
|
||||||
|
id = "huntership";
|
||||||
|
movement_force = list("KNOCKDOWN" = 0, "THROW" = 0);
|
||||||
|
name = "hunter shuttle";
|
||||||
|
rechargeTime = 1800;
|
||||||
|
width = 15
|
||||||
|
},
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"P" = (
|
||||||
|
/obj/structure/fluff/empty_sleeper{
|
||||||
|
icon_state = "sleeper-open";
|
||||||
|
dir = 1
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod/light,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"Z" = (
|
||||||
|
/obj/effect/mob_spawn/human/fugitive/bounty/synth,
|
||||||
|
/turf/open/floor/pod/light,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
|
||||||
|
(1,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
b
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
b
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(2,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
b
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
b
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(3,1,1) = {"
|
||||||
|
b
|
||||||
|
a
|
||||||
|
a
|
||||||
|
b
|
||||||
|
a
|
||||||
|
e
|
||||||
|
a
|
||||||
|
e
|
||||||
|
a
|
||||||
|
b
|
||||||
|
a
|
||||||
|
a
|
||||||
|
b
|
||||||
|
"}
|
||||||
|
(4,1,1) = {"
|
||||||
|
b
|
||||||
|
a
|
||||||
|
e
|
||||||
|
b
|
||||||
|
b
|
||||||
|
q
|
||||||
|
i
|
||||||
|
q
|
||||||
|
b
|
||||||
|
b
|
||||||
|
e
|
||||||
|
a
|
||||||
|
b
|
||||||
|
"}
|
||||||
|
(5,1,1) = {"
|
||||||
|
b
|
||||||
|
b
|
||||||
|
f
|
||||||
|
b
|
||||||
|
b
|
||||||
|
r
|
||||||
|
B
|
||||||
|
F
|
||||||
|
b
|
||||||
|
b
|
||||||
|
f
|
||||||
|
b
|
||||||
|
b
|
||||||
|
"}
|
||||||
|
(6,1,1) = {"
|
||||||
|
b
|
||||||
|
b
|
||||||
|
g
|
||||||
|
b
|
||||||
|
b
|
||||||
|
s
|
||||||
|
C
|
||||||
|
G
|
||||||
|
b
|
||||||
|
b
|
||||||
|
g
|
||||||
|
b
|
||||||
|
b
|
||||||
|
"}
|
||||||
|
(7,1,1) = {"
|
||||||
|
c
|
||||||
|
d
|
||||||
|
h
|
||||||
|
j
|
||||||
|
l
|
||||||
|
t
|
||||||
|
D
|
||||||
|
H
|
||||||
|
c
|
||||||
|
d
|
||||||
|
h
|
||||||
|
j
|
||||||
|
N
|
||||||
|
"}
|
||||||
|
(8,1,1) = {"
|
||||||
|
b
|
||||||
|
b
|
||||||
|
i
|
||||||
|
b
|
||||||
|
b
|
||||||
|
u
|
||||||
|
u
|
||||||
|
u
|
||||||
|
b
|
||||||
|
b
|
||||||
|
i
|
||||||
|
b
|
||||||
|
b
|
||||||
|
"}
|
||||||
|
(9,1,1) = {"
|
||||||
|
a
|
||||||
|
b
|
||||||
|
i
|
||||||
|
b
|
||||||
|
m
|
||||||
|
v
|
||||||
|
s
|
||||||
|
s
|
||||||
|
J
|
||||||
|
b
|
||||||
|
i
|
||||||
|
b
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(10,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
i
|
||||||
|
k
|
||||||
|
n
|
||||||
|
w
|
||||||
|
x
|
||||||
|
s
|
||||||
|
J
|
||||||
|
b
|
||||||
|
i
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(11,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
b
|
||||||
|
n
|
||||||
|
x
|
||||||
|
E
|
||||||
|
s
|
||||||
|
K
|
||||||
|
b
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(12,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
b
|
||||||
|
o
|
||||||
|
y
|
||||||
|
s
|
||||||
|
s
|
||||||
|
J
|
||||||
|
b
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(13,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
i
|
||||||
|
b
|
||||||
|
u
|
||||||
|
u
|
||||||
|
u
|
||||||
|
b
|
||||||
|
i
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(14,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
i
|
||||||
|
p
|
||||||
|
s
|
||||||
|
s
|
||||||
|
s
|
||||||
|
P
|
||||||
|
i
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(15,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
i
|
||||||
|
Z
|
||||||
|
z
|
||||||
|
s
|
||||||
|
z
|
||||||
|
M
|
||||||
|
i
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(16,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
b
|
||||||
|
i
|
||||||
|
A
|
||||||
|
n
|
||||||
|
I
|
||||||
|
i
|
||||||
|
b
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
|
(17,1,1) = {"
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
i
|
||||||
|
i
|
||||||
|
i
|
||||||
|
i
|
||||||
|
i
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
a
|
||||||
|
"}
|
||||||
@@ -41,7 +41,6 @@
|
|||||||
/turf/open/floor/mineral/plastitanium/red,
|
/turf/open/floor/mineral/plastitanium/red,
|
||||||
/area/shuttle/hunter)
|
/area/shuttle/hunter)
|
||||||
"j" = (
|
"j" = (
|
||||||
/obj/structure/reagent_dispensers/fueltank,
|
|
||||||
/obj/effect/turf_decal/bot,
|
/obj/effect/turf_decal/bot,
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
@@ -49,11 +48,6 @@
|
|||||||
"k" = (
|
"k" = (
|
||||||
/turf/open/floor/mineral/plastitanium/red,
|
/turf/open/floor/mineral/plastitanium/red,
|
||||||
/area/shuttle/hunter)
|
/area/shuttle/hunter)
|
||||||
"l" = (
|
|
||||||
/obj/structure/reagent_dispensers/fueltank,
|
|
||||||
/obj/effect/turf_decal/bot,
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/shuttle/hunter)
|
|
||||||
"m" = (
|
"m" = (
|
||||||
/obj/structure/reagent_dispensers/fueltank,
|
/obj/structure/reagent_dispensers/fueltank,
|
||||||
/obj/item/weldingtool/largetank,
|
/obj/item/weldingtool/largetank,
|
||||||
@@ -187,7 +181,7 @@
|
|||||||
/area/shuttle/hunter)
|
/area/shuttle/hunter)
|
||||||
"I" = (
|
"I" = (
|
||||||
/obj/effect/turf_decal/bot,
|
/obj/effect/turf_decal/bot,
|
||||||
/obj/mecha/working/ripley,
|
/obj/structure/mecha_wreckage/ripley,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/shuttle/hunter)
|
/area/shuttle/hunter)
|
||||||
"J" = (
|
"J" = (
|
||||||
@@ -222,6 +216,21 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/shuttle/hunter)
|
/area/shuttle/hunter)
|
||||||
|
"N" = (
|
||||||
|
/obj/machinery/suit_storage_unit/standard_unit,
|
||||||
|
/obj/effect/turf_decal/stripes/line{
|
||||||
|
dir = 2
|
||||||
|
},
|
||||||
|
/turf/open/floor/mineral/plastitanium,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"Q" = (
|
||||||
|
/obj/item/book/manual/ripley_build_and_repair,
|
||||||
|
/turf/open/floor/mineral/plastitanium/red,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
"Y" = (
|
||||||
|
/obj/machinery/suit_storage_unit/standard_unit,
|
||||||
|
/turf/open/floor/mineral/plastitanium,
|
||||||
|
/area/shuttle/hunter)
|
||||||
|
|
||||||
(1,1,1) = {"
|
(1,1,1) = {"
|
||||||
a
|
a
|
||||||
@@ -336,13 +345,13 @@ b
|
|||||||
f
|
f
|
||||||
g
|
g
|
||||||
b
|
b
|
||||||
l
|
x
|
||||||
k
|
|
||||||
u
|
|
||||||
u
|
|
||||||
q
|
|
||||||
u
|
|
||||||
k
|
k
|
||||||
|
Y
|
||||||
|
Y
|
||||||
|
Y
|
||||||
|
Y
|
||||||
|
Q
|
||||||
I
|
I
|
||||||
b
|
b
|
||||||
g
|
g
|
||||||
@@ -379,7 +388,7 @@ y
|
|||||||
y
|
y
|
||||||
b
|
b
|
||||||
k
|
k
|
||||||
q
|
N
|
||||||
b
|
b
|
||||||
b
|
b
|
||||||
b
|
b
|
||||||
|
|||||||
@@ -8,6 +8,17 @@
|
|||||||
},
|
},
|
||||||
/turf/closed/wall/mineral/titanium/survival/pod,
|
/turf/closed/wall/mineral/titanium/survival/pod,
|
||||||
/area/survivalpod)
|
/area/survivalpod)
|
||||||
|
"c" = (
|
||||||
|
/obj/machinery/shower,
|
||||||
|
/obj/item/soap/deluxe,
|
||||||
|
/obj/structure/curtain{
|
||||||
|
alpha = 240;
|
||||||
|
color = "#454545";
|
||||||
|
icon_state = "bathroom-closed";
|
||||||
|
open = 0
|
||||||
|
},
|
||||||
|
/turf/open/floor/pod,
|
||||||
|
/area/survivalpod)
|
||||||
"d" = (
|
"d" = (
|
||||||
/obj/structure/sign/mining/survival{
|
/obj/structure/sign/mining/survival{
|
||||||
dir = 8
|
dir = 8
|
||||||
@@ -26,17 +37,6 @@
|
|||||||
/obj/item/gps/computer,
|
/obj/item/gps/computer,
|
||||||
/turf/open/floor/pod,
|
/turf/open/floor/pod,
|
||||||
/area/survivalpod)
|
/area/survivalpod)
|
||||||
"h" = (
|
|
||||||
/obj/machinery/shower,
|
|
||||||
/obj/item/soap/deluxe,
|
|
||||||
/obj/structure/curtain{
|
|
||||||
alpha = 240;
|
|
||||||
color = "#454545";
|
|
||||||
icon_state = "closed";
|
|
||||||
open = 0
|
|
||||||
},
|
|
||||||
/turf/open/floor/pod,
|
|
||||||
/area/survivalpod)
|
|
||||||
"i" = (
|
"i" = (
|
||||||
/obj/structure/toilet/secret{
|
/obj/structure/toilet/secret{
|
||||||
secret_type = /obj/item/kitchen/knife/combat/survival
|
secret_type = /obj/item/kitchen/knife/combat/survival
|
||||||
@@ -237,7 +237,7 @@ D
|
|||||||
"}
|
"}
|
||||||
(5,1,1) = {"
|
(5,1,1) = {"
|
||||||
a
|
a
|
||||||
h
|
c
|
||||||
n
|
n
|
||||||
r
|
r
|
||||||
w
|
w
|
||||||
|
|||||||
@@ -591,6 +591,10 @@
|
|||||||
suffix = "russian"
|
suffix = "russian"
|
||||||
name = "Russian Cargo Ship"
|
name = "Russian Cargo Ship"
|
||||||
|
|
||||||
|
/datum/map_template/shuttle/hunter/bounty
|
||||||
|
suffix = "bounty"
|
||||||
|
name = "Bounty Hunter Ship"
|
||||||
|
|
||||||
/datum/map_template/shuttle/ruin/caravan_victim
|
/datum/map_template/shuttle/ruin/caravan_victim
|
||||||
suffix = "caravan_victim"
|
suffix = "caravan_victim"
|
||||||
name = "Small Freighter"
|
name = "Small Freighter"
|
||||||
|
|||||||
@@ -408,11 +408,18 @@
|
|||||||
desc = "A poster advertising a movie about some masked men."
|
desc = "A poster advertising a movie about some masked men."
|
||||||
icon_state = "poster44"
|
icon_state = "poster44"
|
||||||
|
|
||||||
|
//annoyingly, poster45 is in another file.
|
||||||
|
|
||||||
/obj/structure/sign/poster/contraband/free_key
|
/obj/structure/sign/poster/contraband/free_key
|
||||||
name = "Free Syndicate Encryption Key"
|
name = "Free Syndicate Encryption Key"
|
||||||
desc = "A poster about traitors begging for more."
|
desc = "A poster about traitors begging for more."
|
||||||
icon_state = "poster46"
|
icon_state = "poster46"
|
||||||
|
|
||||||
|
/obj/structure/sign/poster/contraband/bountyhunters
|
||||||
|
name = "Bounty Hunters"
|
||||||
|
desc = "A poster advertising bounty hunting services. \"I hear you got a problem.\""
|
||||||
|
icon_state = "poster47"
|
||||||
|
|
||||||
/obj/structure/sign/poster/official
|
/obj/structure/sign/poster/official
|
||||||
poster_item_name = "motivational poster"
|
poster_item_name = "motivational poster"
|
||||||
poster_item_desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface."
|
poster_item_desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface."
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
var/minimum_range = 0 //at what range the pinpointer declares you to be at your destination
|
var/minimum_range = 0 //at what range the pinpointer declares you to be at your destination
|
||||||
var/ignore_suit_sensor_level = FALSE // Do we find people even if their suit sensors are turned off
|
var/ignore_suit_sensor_level = FALSE // Do we find people even if their suit sensors are turned off
|
||||||
var/alert = FALSE // TRUE to display things more seriously
|
var/alert = FALSE // TRUE to display things more seriously
|
||||||
|
var/process_scan = TRUE // some pinpointers change target every time they scan, which means we can't have it change very process but instead when it turns on.
|
||||||
|
var/icon_suffix = "" // for special pinpointer icons
|
||||||
|
|
||||||
/obj/item/pinpointer/Initialize()
|
/obj/item/pinpointer/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -31,6 +33,8 @@
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/pinpointer/attack_self(mob/living/user)
|
/obj/item/pinpointer/attack_self(mob/living/user)
|
||||||
|
if(!process_scan) //since it's not scanning on process, it scans here.
|
||||||
|
scan_for_target()
|
||||||
toggle_on()
|
toggle_on()
|
||||||
user.visible_message("<span class='notice'>[user] [active ? "" : "de"]activates [user.p_their()] pinpointer.</span>", "<span class='notice'>You [active ? "" : "de"]activate your pinpointer.</span>")
|
user.visible_message("<span class='notice'>[user] [active ? "" : "de"]activates [user.p_their()] pinpointer.</span>", "<span class='notice'>You [active ? "" : "de"]activate your pinpointer.</span>")
|
||||||
|
|
||||||
@@ -47,7 +51,8 @@
|
|||||||
/obj/item/pinpointer/process()
|
/obj/item/pinpointer/process()
|
||||||
if(!active)
|
if(!active)
|
||||||
return PROCESS_KILL
|
return PROCESS_KILL
|
||||||
scan_for_target()
|
if(process_scan)
|
||||||
|
scan_for_target()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/item/pinpointer/proc/scan_for_target()
|
/obj/item/pinpointer/proc/scan_for_target()
|
||||||
@@ -58,24 +63,24 @@
|
|||||||
if(!active)
|
if(!active)
|
||||||
return
|
return
|
||||||
if(!target)
|
if(!target)
|
||||||
add_overlay("pinon[alert ? "alert" : ""]null")
|
add_overlay("pinon[alert ? "alert" : ""]null[icon_suffix]")
|
||||||
return
|
return
|
||||||
var/turf/here = get_turf(src)
|
var/turf/here = get_turf(src)
|
||||||
var/turf/there = get_turf(target)
|
var/turf/there = get_turf(target)
|
||||||
if(here.z != there.z)
|
if(here.z != there.z)
|
||||||
add_overlay("pinon[alert ? "alert" : ""]null")
|
add_overlay("pinon[alert ? "alert" : ""]null[icon_suffix]")
|
||||||
return
|
return
|
||||||
if(get_dist_euclidian(here,there) <= minimum_range)
|
if(get_dist_euclidian(here,there) <= minimum_range)
|
||||||
add_overlay("pinon[alert ? "alert" : ""]direct")
|
add_overlay("pinon[alert ? "alert" : ""]direct[icon_suffix]")
|
||||||
else
|
else
|
||||||
setDir(get_dir(here, there))
|
setDir(get_dir(here, there))
|
||||||
switch(get_dist(here, there))
|
switch(get_dist(here, there))
|
||||||
if(1 to 8)
|
if(1 to 8)
|
||||||
add_overlay("pinon[alert ? "alert" : "close"]")
|
add_overlay("pinon[alert ? "alert" : "close"][icon_suffix]")
|
||||||
if(9 to 16)
|
if(9 to 16)
|
||||||
add_overlay("pinon[alert ? "alert" : "medium"]")
|
add_overlay("pinon[alert ? "alert" : "medium"][icon_suffix]")
|
||||||
if(16 to INFINITY)
|
if(16 to INFINITY)
|
||||||
add_overlay("pinon[alert ? "alert" : "far"]")
|
add_overlay("pinon[alert ? "alert" : "far"][icon_suffix]")
|
||||||
|
|
||||||
/obj/item/pinpointer/crew // A replacement for the old crew monitoring consoles
|
/obj/item/pinpointer/crew // A replacement for the old crew monitoring consoles
|
||||||
name = "crew pinpointer"
|
name = "crew pinpointer"
|
||||||
@@ -183,3 +188,21 @@
|
|||||||
|
|
||||||
A.other_pair = B
|
A.other_pair = B
|
||||||
B.other_pair = A
|
B.other_pair = A
|
||||||
|
|
||||||
|
/obj/item/pinpointer/shuttle
|
||||||
|
name = "fugitive pinpointer"
|
||||||
|
desc = "A handheld tracking device that locates the bounty hunter shuttle for quick escapes."
|
||||||
|
icon_state = "pinpointer_hunter"
|
||||||
|
icon_suffix = "_hunter"
|
||||||
|
var/obj/shuttleport
|
||||||
|
|
||||||
|
/obj/item/pinpointer/shuttle/Initialize(mapload)
|
||||||
|
. = ..()
|
||||||
|
shuttleport = SSshuttle.getShuttle("huntership")
|
||||||
|
|
||||||
|
/obj/item/pinpointer/shuttle/scan_for_target()
|
||||||
|
target = shuttleport
|
||||||
|
|
||||||
|
/obj/item/pinpointer/shuttle/Destroy()
|
||||||
|
shuttleport = null
|
||||||
|
. = ..()
|
||||||
|
|||||||
@@ -38,6 +38,29 @@
|
|||||||
back_story = "russian"
|
back_story = "russian"
|
||||||
desc = "A small sleeper typically used to make long distance travel a bit more bearable."
|
desc = "A small sleeper typically used to make long distance travel a bit more bearable."
|
||||||
mob_name = "russian"
|
mob_name = "russian"
|
||||||
outfit = /datum/outfit/russiancorpse
|
outfit = /datum/outfit/russiancorpse/hunter
|
||||||
icon = 'icons/obj/machines/sleeper.dmi'
|
icon = 'icons/obj/machines/sleeper.dmi'
|
||||||
icon_state = "sleeper"
|
icon_state = "sleeper"
|
||||||
|
|
||||||
|
/obj/effect/mob_spawn/human/fugitive/bounty
|
||||||
|
name = "bounty hunter pod"
|
||||||
|
flavour_text = "We got a new bounty on some fugitives, dead or alive."
|
||||||
|
back_story = "bounty hunters"
|
||||||
|
desc = "A small sleeper typically used to make long distance travel a bit more bearable."
|
||||||
|
mob_name = "bounty hunter"
|
||||||
|
icon = 'icons/obj/machines/sleeper.dmi'
|
||||||
|
icon_state = "sleeper"
|
||||||
|
|
||||||
|
/obj/effect/mob_spawn/human/fugitive/bounty/Destroy()
|
||||||
|
var/obj/structure/fluff/empty_sleeper/S = new(drop_location())
|
||||||
|
S.setDir(dir)
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/effect/mob_spawn/human/fugitive/bounty/armor
|
||||||
|
outfit = /datum/outfit/bountyarmor
|
||||||
|
|
||||||
|
/obj/effect/mob_spawn/human/fugitive/bounty/hook
|
||||||
|
outfit = /datum/outfit/bountyhook
|
||||||
|
|
||||||
|
/obj/effect/mob_spawn/human/fugitive/bounty/synth
|
||||||
|
outfit = /datum/outfit/bountysynth
|
||||||
|
|||||||
@@ -6,17 +6,21 @@
|
|||||||
density = FALSE
|
density = FALSE
|
||||||
anchored = TRUE
|
anchored = TRUE
|
||||||
alpha = 30 //initially quite hidden when not "recharging"
|
alpha = 30 //initially quite hidden when not "recharging"
|
||||||
|
var/flare_message = "<span class='warning'>the trap flares brightly!</span>"
|
||||||
var/last_trigger = 0
|
var/last_trigger = 0
|
||||||
var/time_between_triggers = 600 //takes a minute to recharge
|
var/time_between_triggers = 600 //takes a minute to recharge
|
||||||
var/charges = INFINITY
|
var/charges = INFINITY
|
||||||
|
var/checks_antimagic = TRUE
|
||||||
|
|
||||||
var/list/static/ignore_typecache
|
var/list/static/ignore_typecache
|
||||||
var/list/mob/immune_minds = list()
|
var/list/mob/immune_minds = list()
|
||||||
|
|
||||||
|
var/sparks = TRUE
|
||||||
var/datum/effect_system/spark_spread/spark_system
|
var/datum/effect_system/spark_spread/spark_system
|
||||||
|
|
||||||
/obj/structure/trap/Initialize(mapload)
|
/obj/structure/trap/Initialize(mapload)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
flare_message = "<span class='warning'>[src] flares brightly!</span>"
|
||||||
spark_system = new
|
spark_system = new
|
||||||
spark_system.set_up(4,1,src)
|
spark_system.set_up(4,1,src)
|
||||||
spark_system.attach(src)
|
spark_system.attach(src)
|
||||||
@@ -44,8 +48,9 @@
|
|||||||
/obj/structure/trap/proc/flare()
|
/obj/structure/trap/proc/flare()
|
||||||
// Makes the trap visible, and starts the cooldown until it's
|
// Makes the trap visible, and starts the cooldown until it's
|
||||||
// able to be triggered again.
|
// able to be triggered again.
|
||||||
visible_message("<span class='warning'>[src] flares brightly!</span>")
|
visible_message(flare_message)
|
||||||
spark_system.start()
|
if(sparks)
|
||||||
|
spark_system.start()
|
||||||
alpha = 200
|
alpha = 200
|
||||||
last_trigger = world.time
|
last_trigger = world.time
|
||||||
charges--
|
charges--
|
||||||
@@ -65,7 +70,7 @@
|
|||||||
var/mob/M = AM
|
var/mob/M = AM
|
||||||
if(M.mind in immune_minds)
|
if(M.mind in immune_minds)
|
||||||
return
|
return
|
||||||
if(M.anti_magic_check())
|
if(checks_antimagic && M.anti_magic_check())
|
||||||
flare()
|
flare()
|
||||||
return
|
return
|
||||||
if(charges <= 0)
|
if(charges <= 0)
|
||||||
@@ -81,10 +86,85 @@
|
|||||||
name = "shock trap"
|
name = "shock trap"
|
||||||
desc = "A trap that will shock and render you immobile. You'd better avoid it."
|
desc = "A trap that will shock and render you immobile. You'd better avoid it."
|
||||||
icon_state = "trap-shock"
|
icon_state = "trap-shock"
|
||||||
|
var/stun_time = 100
|
||||||
|
|
||||||
/obj/structure/trap/stun/trap_effect(mob/living/L)
|
/obj/structure/trap/stun/trap_effect(mob/living/L)
|
||||||
L.electrocute_act(30, src, safety=1) // electrocute act does a message.
|
L.electrocute_act(30, src, safety=1) // electrocute act does a message.
|
||||||
L.Paralyze(100)
|
L.Paralyze(stun_time)
|
||||||
|
|
||||||
|
/obj/structure/trap/stun/hunter
|
||||||
|
name = "bounty trap"
|
||||||
|
desc = "A trap that only goes off when a fugitive steps on it, announcing the location and stunning the target. You'd better avoid it."
|
||||||
|
icon = 'icons/obj/objects.dmi'
|
||||||
|
icon_state = "bounty_trap_on"
|
||||||
|
stun_time = 200
|
||||||
|
sparks = FALSE //the item version gives them off to prevent runtimes (see Destroy())
|
||||||
|
checks_antimagic = FALSE
|
||||||
|
var/obj/item/bountytrap/stored_item
|
||||||
|
var/caught = FALSE
|
||||||
|
|
||||||
|
/obj/structure/trap/stun/hunter/Initialize(mapload)
|
||||||
|
. = ..()
|
||||||
|
time_between_triggers = 10
|
||||||
|
flare_message = "<span class='warning'>[src] snaps shut!</span>"
|
||||||
|
|
||||||
|
/obj/structure/trap/stun/hunter/Crossed(atom/movable/AM)
|
||||||
|
if(isliving(AM))
|
||||||
|
var/mob/living/L = AM
|
||||||
|
if(!L.mind?.has_antag_datum(/datum/antagonist/fugitive))
|
||||||
|
return
|
||||||
|
caught = TRUE
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
/obj/structure/trap/stun/hunter/flare()
|
||||||
|
..()
|
||||||
|
stored_item.forceMove(get_turf(src))
|
||||||
|
forceMove(stored_item)
|
||||||
|
if(caught)
|
||||||
|
stored_item.announce_fugitive()
|
||||||
|
caught = FALSE
|
||||||
|
|
||||||
|
/obj/item/bountytrap
|
||||||
|
name = "bounty trap"
|
||||||
|
desc = "A trap that only goes off when a fugitive steps on it, announcing the location and stunning the target. It's currently inactive."
|
||||||
|
icon = 'icons/obj/objects.dmi'
|
||||||
|
icon_state = "bounty_trap_off"
|
||||||
|
var/obj/structure/trap/stun/hunter/stored_trap
|
||||||
|
var/obj/item/radio/radio
|
||||||
|
var/datum/effect_system/spark_spread/spark_system
|
||||||
|
|
||||||
|
/obj/item/bountytrap/Initialize(mapload)
|
||||||
|
. = ..()
|
||||||
|
radio = new(src)
|
||||||
|
radio.subspace_transmission = TRUE
|
||||||
|
radio.canhear_range = 0
|
||||||
|
radio.recalculateChannels()
|
||||||
|
spark_system = new
|
||||||
|
spark_system.set_up(4,1,src)
|
||||||
|
spark_system.attach(src)
|
||||||
|
name = "[name] #[rand(1, 999)]"
|
||||||
|
stored_trap = new(src)
|
||||||
|
stored_trap.name = name
|
||||||
|
stored_trap.stored_item = src
|
||||||
|
|
||||||
|
/obj/item/bountytrap/proc/announce_fugitive()
|
||||||
|
spark_system.start()
|
||||||
|
playsound(src, 'sound/machines/ding.ogg', 50, 1)
|
||||||
|
radio.talk_into(src, "Fugitive has triggered this trap in the [get_area_name(src)]!", RADIO_CHANNEL_COMMON)
|
||||||
|
|
||||||
|
/obj/item/bountytrap/attack_self(mob/living/user)
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
if(!user || !user.transferItemToLoc(src, T))//visibly unequips
|
||||||
|
return
|
||||||
|
to_chat(user, "<span class=notice>You set up [src]. Examine while close to disarm it.</span>")
|
||||||
|
stored_trap.forceMove(T)//moves trap to ground
|
||||||
|
forceMove(stored_trap)//moves item into trap
|
||||||
|
|
||||||
|
/obj/item/bountytrap/Destroy()
|
||||||
|
qdel(stored_trap)
|
||||||
|
QDEL_NULL(radio)
|
||||||
|
QDEL_NULL(spark_system)
|
||||||
|
. = ..()
|
||||||
|
|
||||||
/obj/structure/trap/fire
|
/obj/structure/trap/fire
|
||||||
name = "flame trap"
|
name = "flame trap"
|
||||||
|
|||||||
@@ -370,7 +370,8 @@
|
|||||||
name = "curtain"
|
name = "curtain"
|
||||||
desc = "Contains less than 1% mercury."
|
desc = "Contains less than 1% mercury."
|
||||||
icon = 'icons/obj/watercloset.dmi'
|
icon = 'icons/obj/watercloset.dmi'
|
||||||
icon_state = "open"
|
icon_state = "bathroom-open"
|
||||||
|
var/icon_type = "bathroom"//used in making the icon state
|
||||||
color = "#ACD1E9" //Default color, didn't bother hardcoding other colors, mappers can and should easily change it.
|
color = "#ACD1E9" //Default color, didn't bother hardcoding other colors, mappers can and should easily change it.
|
||||||
alpha = 200 //Mappers can also just set this to 255 if they want curtains that can't be seen through
|
alpha = 200 //Mappers can also just set this to 255 if they want curtains that can't be seen through
|
||||||
layer = SIGN_LAYER
|
layer = SIGN_LAYER
|
||||||
@@ -385,13 +386,13 @@
|
|||||||
|
|
||||||
/obj/structure/curtain/update_icon()
|
/obj/structure/curtain/update_icon()
|
||||||
if(!open)
|
if(!open)
|
||||||
icon_state = "closed"
|
icon_state = "[icon_type]-closed"
|
||||||
layer = WALL_OBJ_LAYER
|
layer = WALL_OBJ_LAYER
|
||||||
density = TRUE
|
density = TRUE
|
||||||
open = FALSE
|
open = FALSE
|
||||||
|
|
||||||
else
|
else
|
||||||
icon_state = "open"
|
icon_state = "[icon_type]-open"
|
||||||
layer = SIGN_LAYER
|
layer = SIGN_LAYER
|
||||||
density = FALSE
|
density = FALSE
|
||||||
open = TRUE
|
open = TRUE
|
||||||
@@ -441,3 +442,9 @@
|
|||||||
playsound(loc, 'sound/weapons/tap.ogg', 50, 1)
|
playsound(loc, 'sound/weapons/tap.ogg', 50, 1)
|
||||||
if(BURN)
|
if(BURN)
|
||||||
playsound(loc, 'sound/items/welder.ogg', 80, 1)
|
playsound(loc, 'sound/items/welder.ogg', 80, 1)
|
||||||
|
|
||||||
|
/obj/structure/curtain/bounty
|
||||||
|
icon_type = "bounty"
|
||||||
|
icon_state = "bounty-open"
|
||||||
|
color = null
|
||||||
|
alpha = 255
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
if("cultist")
|
if("cultist")
|
||||||
to_chat(owner, "<B>Blessed be our journey so far, but I fear the worst has come to our doorstep, and only those with the strongest faith will survive.</B>")
|
to_chat(owner, "<B>Blessed be our journey so far, but I fear the worst has come to our doorstep, and only those with the strongest faith will survive.</B>")
|
||||||
to_chat(owner, "<B>Our religion has been repeatedly culled by Nanotrasen because it is categorized as an \"Enemy of the Corporation\", whatever that means.</B>")
|
to_chat(owner, "<B>Our religion has been repeatedly culled by Nanotrasen because it is categorized as an \"Enemy of the Corporation\", whatever that means.</B>")
|
||||||
to_chat(owner, "<B>Now there are only three of us left, and Nanotrasen is coming. But we have a secret weapon: Our weakened god, Yalp Elor, will help us survive.</B>")
|
to_chat(owner, "<B>Now there are only four of us left, and Nanotrasen is coming. When will our god show itself to save us from this hellish station?!</B>")
|
||||||
if("waldo")
|
if("waldo")
|
||||||
to_chat(owner, "<B>Hi, Friends!</B>")
|
to_chat(owner, "<B>Hi, Friends!</B>")
|
||||||
to_chat(owner, "<B>My name is Waldo. I'm just setting off on a galaxywide hike. You can come too. All you have to do is find me.</B>")
|
to_chat(owner, "<B>My name is Waldo. I'm just setting off on a galaxywide hike. You can come too. All you have to do is find me.</B>")
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
H.facial_hair_style = "Shaved"
|
H.facial_hair_style = "Shaved"
|
||||||
H.hair_color = "000"
|
H.hair_color = "000"
|
||||||
H.facial_hair_color = H.hair_color
|
H.facial_hair_color = H.hair_color
|
||||||
|
H.update_body()
|
||||||
if(H.mind)
|
if(H.mind)
|
||||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
|
H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
|
||||||
var/list/no_drops = list()
|
var/list/no_drops = list()
|
||||||
@@ -70,8 +71,9 @@
|
|||||||
shoes = /obj/item/clothing/shoes/jackboots
|
shoes = /obj/item/clothing/shoes/jackboots
|
||||||
mask = /obj/item/clothing/mask/gas/sechailer/swat/spacepol
|
mask = /obj/item/clothing/mask/gas/sechailer/swat/spacepol
|
||||||
glasses = /obj/item/clothing/glasses/sunglasses
|
glasses = /obj/item/clothing/glasses/sunglasses
|
||||||
|
ears = /obj/item/radio/headset
|
||||||
l_pocket = /obj/item/ammo_box/magazine/m45
|
l_pocket = /obj/item/ammo_box/magazine/m45
|
||||||
r_pocket = /obj/item/ammo_box/magazine/m45
|
r_pocket = /obj/item/restraints/handcuffs
|
||||||
id = /obj/item/card/id
|
id = /obj/item/card/id
|
||||||
|
|
||||||
/datum/outfit/spacepol/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
/datum/outfit/spacepol/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||||
@@ -81,3 +83,88 @@
|
|||||||
W.assignment = "Police Officer"
|
W.assignment = "Police Officer"
|
||||||
W.registered_name = H.real_name
|
W.registered_name = H.real_name
|
||||||
W.update_label()
|
W.update_label()
|
||||||
|
|
||||||
|
/datum/outfit/russiancorpse/hunter
|
||||||
|
ears = /obj/item/radio/headset
|
||||||
|
r_hand = /obj/item/gun/ballistic/rifle/boltaction
|
||||||
|
|
||||||
|
/datum/outfit/russiancorpse/hunter/pre_equip(mob/living/carbon/human/H)
|
||||||
|
if(prob(50))
|
||||||
|
head = /obj/item/clothing/head/ushanka
|
||||||
|
|
||||||
|
/datum/outfit/bountyarmor
|
||||||
|
name = "Bounty Hunter - Armored"
|
||||||
|
uniform = /obj/item/clothing/under/rank/prisoner
|
||||||
|
head = /obj/item/clothing/head/hunter
|
||||||
|
suit = /obj/item/clothing/suit/space/hunter
|
||||||
|
gloves = /obj/item/clothing/gloves/combat
|
||||||
|
shoes = /obj/item/clothing/shoes/jackboots
|
||||||
|
mask = /obj/item/clothing/mask/gas/hunter
|
||||||
|
glasses = /obj/item/clothing/glasses/sunglasses/garb
|
||||||
|
ears = /obj/item/radio/headset
|
||||||
|
l_pocket = /obj/item/tank/internals/plasma/full
|
||||||
|
r_pocket = /obj/item/restraints/handcuffs/cable
|
||||||
|
id = /obj/item/card/id
|
||||||
|
r_hand = /obj/item/flamethrower/full/tank
|
||||||
|
|
||||||
|
/datum/outfit/bountyarmor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||||
|
if(visualsOnly)
|
||||||
|
return
|
||||||
|
var/obj/item/card/id/W = H.wear_id
|
||||||
|
W.assignment = "Bounty Hunter"
|
||||||
|
W.registered_name = H.real_name
|
||||||
|
W.update_label()
|
||||||
|
|
||||||
|
/datum/outfit/bountyhook
|
||||||
|
name = "Bounty Hunter - Hook"
|
||||||
|
uniform = /obj/item/clothing/under/rank/prisoner
|
||||||
|
back = /obj/item/storage/backpack
|
||||||
|
head = /obj/item/clothing/head/scarecrow_hat
|
||||||
|
gloves = /obj/item/clothing/gloves/botanic_leather
|
||||||
|
ears = /obj/item/radio/headset
|
||||||
|
shoes = /obj/item/clothing/shoes/jackboots
|
||||||
|
mask = /obj/item/clothing/mask/scarecrow
|
||||||
|
r_pocket = /obj/item/restraints/handcuffs/cable
|
||||||
|
id = /obj/item/card/id
|
||||||
|
r_hand = /obj/item/gun/ballistic/shotgun/doublebarrel/hook
|
||||||
|
|
||||||
|
backpack_contents = list(
|
||||||
|
/obj/item/ammo_casing/shotgun/incapacitate = 6
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/outfit/bountygrapple/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||||
|
if(visualsOnly)
|
||||||
|
return
|
||||||
|
var/obj/item/card/id/W = H.wear_id
|
||||||
|
W.assignment = "Bounty Hunter"
|
||||||
|
W.registered_name = H.real_name
|
||||||
|
W.update_label()
|
||||||
|
|
||||||
|
/datum/outfit/bountysynth
|
||||||
|
name = "Bounty Hunter - Synth"
|
||||||
|
uniform = /obj/item/clothing/under/rank/prisoner
|
||||||
|
back = /obj/item/storage/backpack
|
||||||
|
suit = /obj/item/clothing/suit/armor/riot
|
||||||
|
shoes = /obj/item/clothing/shoes/jackboots
|
||||||
|
glasses = /obj/item/clothing/glasses/eyepatch
|
||||||
|
r_pocket = /obj/item/restraints/handcuffs/cable
|
||||||
|
ears = /obj/item/radio/headset
|
||||||
|
id = /obj/item/card/id
|
||||||
|
r_hand = /obj/item/storage/firstaid/regular
|
||||||
|
l_hand = /obj/item/pinpointer/shuttle
|
||||||
|
|
||||||
|
backpack_contents = list(
|
||||||
|
/obj/item/bountytrap = 4
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/outfit/bountysynth/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||||
|
if(visualsOnly)
|
||||||
|
return
|
||||||
|
var/datum/species/synth/synthetic_appearance = new()
|
||||||
|
H.set_species(synthetic_appearance)
|
||||||
|
synthetic_appearance.assume_disguise(synthetic_appearance, H)
|
||||||
|
H.update_hair()
|
||||||
|
var/obj/item/card/id/W = H.wear_id
|
||||||
|
W.assignment = "Bounty Hunter"
|
||||||
|
W.registered_name = H.real_name
|
||||||
|
W.update_label()
|
||||||
|
|||||||
@@ -172,7 +172,7 @@
|
|||||||
/datum/antagonist/fugitive_hunter/proc/update_fugitive_icons_added(var/mob/living/carbon/human/fugitive)
|
/datum/antagonist/fugitive_hunter/proc/update_fugitive_icons_added(var/mob/living/carbon/human/fugitive)
|
||||||
var/datum/atom_hud/antag/fughud = GLOB.huds[ANTAG_HUD_FUGITIVE]
|
var/datum/atom_hud/antag/fughud = GLOB.huds[ANTAG_HUD_FUGITIVE]
|
||||||
fughud.join_hud(fugitive)
|
fughud.join_hud(fugitive)
|
||||||
set_antag_hud(fugitive, "fugitive")
|
set_antag_hud(fugitive, "fugitive_hunter")
|
||||||
|
|
||||||
/datum/antagonist/fugitive_hunter/proc/update_fugitive_icons_removed(var/mob/living/carbon/human/fugitive)
|
/datum/antagonist/fugitive_hunter/proc/update_fugitive_icons_removed(var/mob/living/carbon/human/fugitive)
|
||||||
var/datum/atom_hud/antag/fughud = GLOB.huds[ANTAG_HUD_FUGITIVE]
|
var/datum/atom_hud/antag/fughud = GLOB.huds[ANTAG_HUD_FUGITIVE]
|
||||||
|
|||||||
@@ -1,165 +0,0 @@
|
|||||||
|
|
||||||
/mob/camera/yalp_elor
|
|
||||||
name = "Yalp Elor"
|
|
||||||
real_name = "Yalp Elor"
|
|
||||||
desc = "An old, dying god. Its power has been severely sapped ever since it has lost its standing in the world."
|
|
||||||
icon = 'icons/mob/cameramob.dmi'
|
|
||||||
icon_state = "yalp_elor"
|
|
||||||
invisibility = INVISIBILITY_OBSERVER
|
|
||||||
var/lastWarning = 0
|
|
||||||
var/datum/action/innate/yalp_transmit/transmit
|
|
||||||
var/datum/action/innate/yalp_transport/transport
|
|
||||||
|
|
||||||
/mob/camera/yalp_elor/Initialize()
|
|
||||||
. = ..()
|
|
||||||
transmit = new
|
|
||||||
transport = new
|
|
||||||
transmit.Grant(src)
|
|
||||||
transport.Grant(src)
|
|
||||||
START_PROCESSING(SSobj, src)
|
|
||||||
|
|
||||||
/mob/camera/yalp_elor/Destroy()
|
|
||||||
STOP_PROCESSING(SSobj, src)
|
|
||||||
return ..()
|
|
||||||
|
|
||||||
/mob/camera/yalp_elor/Destroy()
|
|
||||||
QDEL_NULL(transmit)
|
|
||||||
QDEL_NULL(transport)
|
|
||||||
. = ..()
|
|
||||||
|
|
||||||
/mob/camera/yalp_elor/CanPass(atom/movable/mover, turf/target)
|
|
||||||
return TRUE
|
|
||||||
|
|
||||||
/mob/camera/yalp_elor/Process_Spacemove(movement_dir = 0)
|
|
||||||
return TRUE
|
|
||||||
|
|
||||||
/mob/camera/yalp_elor/Login()
|
|
||||||
..()
|
|
||||||
to_chat(src, "<B>You must protect your followers from Nanotrasen!</B>")
|
|
||||||
to_chat(src, "<B>Only your followers can hear you, and you can speak to send messages to all of them, wherever they are. You can also locally whisper to anyone.</B>")
|
|
||||||
to_chat(src, "<B>Nanotrasen will reach you and your followers in about 10 minutes. Make sure they are ready when the time is up.</B>")
|
|
||||||
|
|
||||||
/mob/camera/yalp_elor/Move(NewLoc, direct)
|
|
||||||
if(!NewLoc)
|
|
||||||
return
|
|
||||||
var/OldLoc = loc
|
|
||||||
var/turf/T = get_turf(NewLoc)
|
|
||||||
if(locate(/obj/effect/blessing, T))
|
|
||||||
if((world.time - lastWarning) >= 30)
|
|
||||||
lastWarning = world.time
|
|
||||||
to_chat(src, "<span class='warning'>This turf is consecrated and can't be crossed!</span>")
|
|
||||||
return
|
|
||||||
if(istype(get_area(T), /area/chapel))
|
|
||||||
if((world.time - lastWarning) >= 30)
|
|
||||||
lastWarning = world.time
|
|
||||||
to_chat(src, "<span class='warning'>The Chapel is hallowed ground under a much, MUCH stronger deity, and can't be accessed!</span>")
|
|
||||||
return
|
|
||||||
forceMove(T)
|
|
||||||
Moved(OldLoc, direct)
|
|
||||||
|
|
||||||
/mob/camera/yalp_elor/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
|
||||||
if(client)
|
|
||||||
if(client.prefs.muted & MUTE_IC)
|
|
||||||
to_chat(src, "You cannot send IC messages (muted).")
|
|
||||||
return
|
|
||||||
if(client.handle_spam_prevention(message,MUTE_IC))
|
|
||||||
return
|
|
||||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
|
||||||
if(!message)
|
|
||||||
return
|
|
||||||
src.log_talk(message, LOG_SAY, tag="fugitive god")
|
|
||||||
message = "<span class='cultitalic'><b>[name]:</b> \"[capitalize(message)]\"</span>"
|
|
||||||
for(var/mob/V in GLOB.player_list)
|
|
||||||
if(V.mind.has_antag_datum(/datum/antagonist/fugitive))
|
|
||||||
to_chat(V, "[message]")
|
|
||||||
else if(isobserver(V))
|
|
||||||
to_chat(V, "[FOLLOW_LINK(V, src)] [message]")
|
|
||||||
|
|
||||||
/mob/camera/yalp_elor/process()
|
|
||||||
var/safe = FALSE
|
|
||||||
for(var/mob/V in GLOB.player_list)
|
|
||||||
if(!V.mind)
|
|
||||||
continue
|
|
||||||
var/datum/antagonist/fugitive/fug = V.mind.has_antag_datum(/datum/antagonist/fugitive)
|
|
||||||
if(!fug || V == src)
|
|
||||||
continue
|
|
||||||
if(!fug.is_captured) //they can still be revived
|
|
||||||
safe = TRUE
|
|
||||||
break
|
|
||||||
if(!safe)
|
|
||||||
to_chat(src, "<span class='userdanger'>All of your followers are gone. That means you cease to exist.</span>")
|
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/datum/action/innate/yalp_transmit
|
|
||||||
name = "Divine Oration"
|
|
||||||
desc = "Transmits a message to the target."
|
|
||||||
icon_icon = 'icons/mob/actions/actions_animal.dmi'
|
|
||||||
background_icon_state = "bg_spell"
|
|
||||||
button_icon_state = "god_transmit"
|
|
||||||
|
|
||||||
/datum/action/innate/yalp_transmit/Trigger()
|
|
||||||
var/list/possible_targets = list()
|
|
||||||
for(var/mob/living/M in range(7, owner))
|
|
||||||
if(istype(M))
|
|
||||||
possible_targets += M
|
|
||||||
if(!possible_targets.len)
|
|
||||||
to_chat(owner, "<span class='warning'>Nobody in range to talk to!</span>")
|
|
||||||
return FALSE
|
|
||||||
|
|
||||||
var/mob/living/target
|
|
||||||
if(possible_targets.len == 1)
|
|
||||||
target = possible_targets[1]
|
|
||||||
else
|
|
||||||
target = input("Who do you wish to transmit to?", "Targeting") as null|mob in possible_targets
|
|
||||||
|
|
||||||
var/input = stripped_input(owner, "What do you wish to tell [target]?", null, "")
|
|
||||||
if(QDELETED(src) || !input || !IsAvailable())
|
|
||||||
return FALSE
|
|
||||||
|
|
||||||
transmit(owner, target, input)
|
|
||||||
return TRUE
|
|
||||||
|
|
||||||
/datum/action/innate/yalp_transmit/proc/transmit(mob/user, mob/living/target, message)
|
|
||||||
if(!message)
|
|
||||||
return
|
|
||||||
log_directed_talk(user, target, message, LOG_SAY, "[name]")
|
|
||||||
to_chat(user, "<span class='boldnotice'>You transmit to [target]:</span> <span class='notice'>[message]</span>")
|
|
||||||
to_chat(target, "<span class='boldnotice'>You hear something behind you talking...</span> <span class='notice'>[message]</span>")
|
|
||||||
for(var/ded in GLOB.dead_mob_list)
|
|
||||||
if(!isobserver(ded))
|
|
||||||
continue
|
|
||||||
var/follow_rev = FOLLOW_LINK(ded, user)
|
|
||||||
var/follow_whispee = FOLLOW_LINK(ded, target)
|
|
||||||
to_chat(ded, "[follow_rev] <span class='boldnotice'>[user] [name]:</span> <span class='notice'>\"[message]\" to</span> [follow_whispee] <span class='name'>[target]</span>")
|
|
||||||
|
|
||||||
/datum/action/innate/yalp_transport
|
|
||||||
name = "Guidance"
|
|
||||||
desc = "Transports you to a follower."
|
|
||||||
icon_icon = 'icons/mob/actions/actions_animal.dmi'
|
|
||||||
background_icon_state = "bg_spell"
|
|
||||||
button_icon_state = "god_transport"
|
|
||||||
|
|
||||||
/datum/action/innate/yalp_transport/Trigger()
|
|
||||||
var/list/faithful = list()
|
|
||||||
var/mob/living/target
|
|
||||||
for(var/mob/V in GLOB.player_list)
|
|
||||||
var/datum/antagonist/fugitive/fug = V.mind.has_antag_datum(/datum/antagonist/fugitive)
|
|
||||||
if(!fug || V == src)
|
|
||||||
continue
|
|
||||||
if(fug.is_captured)
|
|
||||||
continue
|
|
||||||
faithful += V
|
|
||||||
if(!faithful.len)
|
|
||||||
to_chat(owner, "<span class='warning'>You have nobody to jump to!</span>")
|
|
||||||
return FALSE
|
|
||||||
if(faithful.len == 1)
|
|
||||||
target = faithful[1]
|
|
||||||
else
|
|
||||||
target = input("Which of your followers do you wish to jump to?", "Targeting") as null|mob in faithful
|
|
||||||
|
|
||||||
var/turf/T = get_turf(target)
|
|
||||||
if(target && T)
|
|
||||||
owner.forceMove(T)
|
|
||||||
return TRUE
|
|
||||||
to_chat(owner, "<span class='warning'>Something horrible just happened to your target!</span>")
|
|
||||||
return FALSE
|
|
||||||
@@ -245,6 +245,20 @@
|
|||||||
. = ..()
|
. = ..()
|
||||||
ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT)
|
ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT)
|
||||||
|
|
||||||
|
/obj/item/clothing/head/flatcap
|
||||||
|
name = "flat cap"
|
||||||
|
desc = "A working man's cap."
|
||||||
|
icon_state = "flat_cap"
|
||||||
|
item_state = "detective"
|
||||||
|
|
||||||
|
/obj/item/clothing/head/hunter
|
||||||
|
name = "bounty hunting hat"
|
||||||
|
desc = "Ain't nobody gonna cheat the hangman in my town."
|
||||||
|
icon_state = "hunter"
|
||||||
|
item_state = "hunter"
|
||||||
|
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||||
|
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||||
|
|
||||||
/obj/item/clothing/head/cone
|
/obj/item/clothing/head/cone
|
||||||
desc = "This cone is trying to warn you of something!"
|
desc = "This cone is trying to warn you of something!"
|
||||||
name = "warning cone"
|
name = "warning cone"
|
||||||
|
|||||||
@@ -197,3 +197,11 @@
|
|||||||
/obj/item/clothing/mask/gas/tiki_mask/yalp_elor
|
/obj/item/clothing/mask/gas/tiki_mask/yalp_elor
|
||||||
icon_state = "tiki_yalp"
|
icon_state = "tiki_yalp"
|
||||||
actions_types = list()
|
actions_types = list()
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/gas/hunter
|
||||||
|
name = "bounty hunting mask"
|
||||||
|
desc = "A custom tactical mask with decals added."
|
||||||
|
icon_state = "hunter"
|
||||||
|
item_state = "hunter"
|
||||||
|
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||||
|
flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ Contains:
|
|||||||
- EVA spacesuit
|
- EVA spacesuit
|
||||||
- Freedom's spacesuit (freedom from vacuum's oppression)
|
- Freedom's spacesuit (freedom from vacuum's oppression)
|
||||||
- Carp hardsuit
|
- Carp hardsuit
|
||||||
|
- Bounty hunter hardsuit
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//Death squad armored space suits, not hardsuits!
|
//Death squad armored space suits, not hardsuits!
|
||||||
@@ -397,3 +398,13 @@ Contains:
|
|||||||
torn = TRUE
|
torn = TRUE
|
||||||
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1)
|
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1)
|
||||||
playsound(loc, 'sound/effects/refill.ogg', 50, 1)
|
playsound(loc, 'sound/effects/refill.ogg', 50, 1)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/hunter
|
||||||
|
name = "bounty hunting suit"
|
||||||
|
desc = "A custom version of the MK.II SWAT suit, modified to look rugged and tough. Works as a space suit, if you can find a helmet."
|
||||||
|
icon_state = "hunter"
|
||||||
|
item_state = "swat_suit"
|
||||||
|
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat)
|
||||||
|
armor = list(melee = 60, bullet = 40, laser = 40, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100)
|
||||||
|
strip_delay = 130
|
||||||
|
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||||
|
|||||||
@@ -23,7 +23,8 @@
|
|||||||
var/list/possible_backstories = list()
|
var/list/possible_backstories = list()
|
||||||
var/list/candidates = get_candidates(ROLE_TRAITOR, null, ROLE_TRAITOR)
|
var/list/candidates = get_candidates(ROLE_TRAITOR, null, ROLE_TRAITOR)
|
||||||
if(candidates.len >= 1) //solo refugees
|
if(candidates.len >= 1) //solo refugees
|
||||||
possible_backstories.Add("waldo")
|
if(prob(30))
|
||||||
|
possible_backstories.Add("waldo") //less common as it comes with magicks and is kind of immershun shattering
|
||||||
if(candidates.len >= 4)//group refugees
|
if(candidates.len >= 4)//group refugees
|
||||||
possible_backstories.Add("prisoner", "cultist", "synth")
|
possible_backstories.Add("prisoner", "cultist", "synth")
|
||||||
if(!possible_backstories.len)
|
if(!possible_backstories.len)
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
var/member_size = 3
|
var/member_size = 3
|
||||||
var/leader
|
var/leader
|
||||||
switch(backstory)
|
switch(backstory)
|
||||||
if("cultist" || "synth")
|
if("synth")
|
||||||
leader = pick_n_take(candidates)
|
leader = pick_n_take(candidates)
|
||||||
if("waldo")
|
if("waldo")
|
||||||
member_size = 0 //solo refugees have no leader so the member_size gets bumped to one a bit later
|
member_size = 0 //solo refugees have no leader so the member_size gets bumped to one a bit later
|
||||||
@@ -87,27 +88,22 @@
|
|||||||
/datum/round_event/ghost_role/fugitives/proc/gear_fugitive_leader(var/mob/dead/leader, var/turf/landing_turf, backstory)
|
/datum/round_event/ghost_role/fugitives/proc/gear_fugitive_leader(var/mob/dead/leader, var/turf/landing_turf, backstory)
|
||||||
var/datum/mind/player_mind = new /datum/mind(leader.key)
|
var/datum/mind/player_mind = new /datum/mind(leader.key)
|
||||||
player_mind.active = TRUE
|
player_mind.active = TRUE
|
||||||
switch(backstory)
|
//if you want to add a fugitive with a special leader in the future, make this switch with the backstory
|
||||||
if("cultist")
|
var/mob/living/carbon/human/S = gear_fugitive(leader, landing_turf, backstory)
|
||||||
var/mob/camera/yalp_elor/yalp = new(landing_turf)
|
var/obj/item/choice_beacon/augments/A = new(S)
|
||||||
player_mind.transfer_to(yalp)
|
S.put_in_hands(A)
|
||||||
player_mind.assigned_role = "Yalp Elor"
|
new /obj/item/autosurgeon(landing_turf)
|
||||||
player_mind.special_role = "Old God"
|
|
||||||
player_mind.add_antag_datum(/datum/antagonist/fugitive)
|
|
||||||
if("synth")
|
|
||||||
var/mob/living/carbon/human/S = gear_fugitive(leader, landing_turf, backstory)
|
|
||||||
var/obj/item/choice_beacon/augments/A = new(S)
|
|
||||||
S.put_in_hands(A)
|
|
||||||
new /obj/item/autosurgeon(landing_turf)
|
|
||||||
|
|
||||||
//security team gets called in after 10 minutes of prep to find the refugees
|
//security team gets called in after 10 minutes of prep to find the refugees
|
||||||
/datum/round_event/ghost_role/fugitives/proc/spawn_hunters()
|
/datum/round_event/ghost_role/fugitives/proc/spawn_hunters()
|
||||||
var/backstory = pick("space cop", "russian")
|
var/backstory = pick("space cop", "russian", "bounty hunter")
|
||||||
var/datum/map_template/shuttle/ship
|
var/datum/map_template/shuttle/ship
|
||||||
if(backstory == "space cop")
|
if(backstory == "space cop")
|
||||||
ship = new /datum/map_template/shuttle/hunter/space_cop
|
ship = new /datum/map_template/shuttle/hunter/space_cop
|
||||||
else
|
else if (backstory == "russian")
|
||||||
ship = new /datum/map_template/shuttle/hunter/russian
|
ship = new /datum/map_template/shuttle/hunter/russian
|
||||||
|
else
|
||||||
|
ship = new /datum/map_template/shuttle/hunter/bounty
|
||||||
var/x = rand(TRANSITIONEDGE,world.maxx - TRANSITIONEDGE - ship.width)
|
var/x = rand(TRANSITIONEDGE,world.maxx - TRANSITIONEDGE - ship.width)
|
||||||
var/y = rand(TRANSITIONEDGE,world.maxy - TRANSITIONEDGE - ship.height)
|
var/y = rand(TRANSITIONEDGE,world.maxy - TRANSITIONEDGE - ship.height)
|
||||||
var/z = SSmapping.empty_space.z_value
|
var/z = SSmapping.empty_space.z_value
|
||||||
@@ -115,5 +111,5 @@
|
|||||||
if(!T)
|
if(!T)
|
||||||
CRASH("Fugitive Hunters (Created from fugitive event) found no turf to load in")
|
CRASH("Fugitive Hunters (Created from fugitive event) found no turf to load in")
|
||||||
if(!ship.load(T))
|
if(!ship.load(T))
|
||||||
CRASH("Loading hunter ship failed!")
|
CRASH("Loading [backstory] ship failed!")
|
||||||
priority_announce("Unidentified armed ship detected near the station.")
|
priority_announce("Unidentified ship detected near the station.")
|
||||||
|
|||||||
@@ -442,6 +442,20 @@
|
|||||||
qdel(chain)
|
qdel(chain)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
//just a nerfed version of the real thing for the bounty hunters.
|
||||||
|
/obj/item/gun/magic/hook/bounty
|
||||||
|
name = "hook"
|
||||||
|
ammo_type = /obj/item/ammo_casing/magic/hook/bounty
|
||||||
|
|
||||||
|
/obj/item/gun/magic/hook/bounty/shoot_with_empty_chamber(mob/living/user)
|
||||||
|
to_chat(user, "<span class='warning'>The [src] isn't ready to fire yet!</span>")
|
||||||
|
|
||||||
|
/obj/item/ammo_casing/magic/hook/bounty
|
||||||
|
projectile_type = /obj/item/projectile/hook/bounty
|
||||||
|
|
||||||
|
/obj/item/projectile/hook/bounty
|
||||||
|
damage = 0
|
||||||
|
paralyze = 20
|
||||||
|
|
||||||
//Immortality Talisman
|
//Immortality Talisman
|
||||||
/obj/item/immortality_talisman
|
/obj/item/immortality_talisman
|
||||||
|
|||||||
@@ -73,6 +73,15 @@
|
|||||||
variance = 25
|
variance = 25
|
||||||
materials = list(MAT_METAL=4000)
|
materials = list(MAT_METAL=4000)
|
||||||
|
|
||||||
|
/obj/item/ammo_casing/shotgun/incapacitate
|
||||||
|
name = "custom incapacitating shot"
|
||||||
|
desc = "A shotgun casing filled with... something. used to incapacitate targets."
|
||||||
|
icon_state = "bountyshell"
|
||||||
|
projectile_type = /obj/item/projectile/bullet/pellet/shotgun_incapacitate
|
||||||
|
pellets = 12//double the pellets, but half the stun power of each, which makes this best for just dumping right in someone's face.
|
||||||
|
variance = 25
|
||||||
|
materials = list(MAT_METAL=4000)
|
||||||
|
|
||||||
/obj/item/ammo_casing/shotgun/improvised
|
/obj/item/ammo_casing/shotgun/improvised
|
||||||
name = "improvised shell"
|
name = "improvised shell"
|
||||||
desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards."
|
desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards."
|
||||||
|
|||||||
@@ -3,3 +3,9 @@
|
|||||||
ammo_type = /obj/item/ammo_casing/caseless/laser/gatling
|
ammo_type = /obj/item/ammo_casing/caseless/laser/gatling
|
||||||
caliber = "gatling"
|
caliber = "gatling"
|
||||||
max_ammo = 5000
|
max_ammo = 5000
|
||||||
|
|
||||||
|
/obj/item/ammo_box/magazine/internal/hook
|
||||||
|
name = "hook internal tube"
|
||||||
|
ammo_type = /obj/item/ammo_casing/magic/hook
|
||||||
|
caliber = "hook"
|
||||||
|
max_ammo = 1
|
||||||
|
|||||||
@@ -36,3 +36,8 @@
|
|||||||
name = "riot shotgun internal magazine"
|
name = "riot shotgun internal magazine"
|
||||||
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
|
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
|
||||||
max_ammo = 6
|
max_ammo = 6
|
||||||
|
|
||||||
|
/obj/item/ammo_box/magazine/internal/shot/bounty
|
||||||
|
name = "triple-barrel shotgun internal magazine"
|
||||||
|
ammo_type = /obj/item/ammo_casing/shotgun/incapacitate
|
||||||
|
max_ammo = 3
|
||||||
|
|||||||
@@ -162,7 +162,6 @@
|
|||||||
. = ..()
|
. = ..()
|
||||||
if(unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
|
if(unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
|
||||||
reskin_obj(user)
|
reskin_obj(user)
|
||||||
|
|
||||||
// IMPROVISED SHOTGUN //
|
// IMPROVISED SHOTGUN //
|
||||||
|
|
||||||
/obj/item/gun/ballistic/shotgun/doublebarrel/improvised
|
/obj/item/gun/ballistic/shotgun/doublebarrel/improvised
|
||||||
@@ -210,3 +209,48 @@
|
|||||||
w_class = WEIGHT_CLASS_NORMAL
|
w_class = WEIGHT_CLASS_NORMAL
|
||||||
sawn_off = TRUE
|
sawn_off = TRUE
|
||||||
slot_flags = ITEM_SLOT_BELT
|
slot_flags = ITEM_SLOT_BELT
|
||||||
|
|
||||||
|
/obj/item/gun/ballistic/shotgun/doublebarrel/hook
|
||||||
|
name = "hook modified sawn-off shotgun"
|
||||||
|
desc = "Range isn't an issue when you can bring your victim to you."
|
||||||
|
icon_state = "hookshotgun"
|
||||||
|
item_state = "shotgun"
|
||||||
|
load_sound = "sound/weapons/shotguninsert.ogg"
|
||||||
|
mag_type = /obj/item/ammo_box/magazine/internal/shot/bounty
|
||||||
|
w_class = WEIGHT_CLASS_BULKY
|
||||||
|
weapon_weight = WEAPON_MEDIUM
|
||||||
|
can_be_sawn_off = FALSE
|
||||||
|
force = 10 //it has a hook on it
|
||||||
|
attack_verb = list("slashed", "hooked", "stabbed")
|
||||||
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||||
|
//our hook gun!
|
||||||
|
var/obj/item/gun/magic/hook/bounty/hook
|
||||||
|
var/toggled = FALSE
|
||||||
|
|
||||||
|
/obj/item/gun/ballistic/shotgun/doublebarrel/hook/Initialize()
|
||||||
|
. = ..()
|
||||||
|
hook = new /obj/item/gun/magic/hook/bounty(src)
|
||||||
|
|
||||||
|
/obj/item/gun/ballistic/shotgun/doublebarrel/hook/AltClick(mob/user)
|
||||||
|
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||||
|
return
|
||||||
|
if(toggled)
|
||||||
|
to_chat(user,"<span class='notice'>You switch to the shotgun.</span>")
|
||||||
|
fire_sound = initial(fire_sound)
|
||||||
|
else
|
||||||
|
to_chat(user,"<span class='notice'>You switch to the hook.</span>")
|
||||||
|
fire_sound = 'sound/weapons/batonextend.ogg'
|
||||||
|
toggled = !toggled
|
||||||
|
|
||||||
|
/obj/item/gun/ballistic/shotgun/doublebarrel/hook/examine(mob/user)
|
||||||
|
. = ..()
|
||||||
|
if(toggled)
|
||||||
|
. += "<span class='notice'>Alt-click to switch to the shotgun.</span>"
|
||||||
|
else
|
||||||
|
. += "<span class='notice'>Alt-click to switch to the hook.</span>"
|
||||||
|
|
||||||
|
/obj/item/gun/ballistic/shotgun/doublebarrel/hook/afterattack(atom/target, mob/living/user, flag, params)
|
||||||
|
if(toggled)
|
||||||
|
hook.afterattack(target, user, flag, params)
|
||||||
|
else
|
||||||
|
return ..()
|
||||||
|
|||||||
@@ -67,6 +67,11 @@
|
|||||||
damage = 3
|
damage = 3
|
||||||
stamina = 11
|
stamina = 11
|
||||||
|
|
||||||
|
/obj/item/projectile/bullet/pellet/shotgun_incapacitate
|
||||||
|
name = "incapacitating pellet"
|
||||||
|
damage = 1
|
||||||
|
stamina = 6
|
||||||
|
|
||||||
/obj/item/projectile/bullet/pellet/Range()
|
/obj/item/projectile/bullet/pellet/Range()
|
||||||
..()
|
..()
|
||||||
if(damage > 0)
|
if(damage > 0)
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 189 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 343 KiB After Width: | Height: | Size: 343 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 17 KiB |
@@ -1366,7 +1366,6 @@
|
|||||||
#include "code\modules\antagonists\fugitive\fugitive_outfits.dm"
|
#include "code\modules\antagonists\fugitive\fugitive_outfits.dm"
|
||||||
#include "code\modules\antagonists\fugitive\fugitive_ship.dm"
|
#include "code\modules\antagonists\fugitive\fugitive_ship.dm"
|
||||||
#include "code\modules\antagonists\fugitive\hunter.dm"
|
#include "code\modules\antagonists\fugitive\hunter.dm"
|
||||||
#include "code\modules\antagonists\fugitive\old_god.dm"
|
|
||||||
#include "code\modules\antagonists\greentext\greentext.dm"
|
#include "code\modules\antagonists\greentext\greentext.dm"
|
||||||
#include "code\modules\antagonists\highlander\highlander.dm"
|
#include "code\modules\antagonists\highlander\highlander.dm"
|
||||||
#include "code\modules\antagonists\hivemind\hivemind.dm"
|
#include "code\modules\antagonists\hivemind\hivemind.dm"
|
||||||
|
|||||||