Tarkon Tweaks and Xeno Changes (#2896)

## About The Pull Request

Update as of 01/26

So that was a lie

Anyways I completely remade tarkon, which is what I ORIGNIALLY wanted to
do, but used a lot of the pre-existing tarkon assets to do so, to
maintain the same feel.

Some NEW NEW features (as the project grew in scope) include:

Med/RND/Engineering are now separate "Islands" like charlie (tarkon was
always meant to be like that anyhow
Each one has a few xenos, and a new "Emergency power generator"
Scanning this with the new (not a ripoff) Hack-C tool will call in a
repair drone (Original content) to repair it, and it needs to be
defended from the xenos it alerts.
Sucsesfully completing a defence will reward sickass weapons and gear
you wouldn't normally ever get to see, making further areas easier, and
a key for the final area.
Once all 3 keys are obtained, and the areas are re-secured, you can go
to the boss area and clear out the AI sat / command zone.

A bitrunning server to allow them to make their own bitden (it's the
first prototype, and the rest must be researched so it's not
shift-start)

more floor safes with various things like some ore thumpers and two
bluespace beakers

Crates! Someone misfiled a crate of goodies and it got sent here! These
orders should be delivered to their owners! I'm sure they would
appreciate it! Probably...

A Recycler (Amazing)

A produce order console! Now you can actually cook whatever you want!
And it gives you a reason to sell stuff for money!

more stuff, lots more stuff. things keep getting added the longer it
takes for this to be looked at.

Also adds three new variants of xenobio, and two new variants of the
cargo bay. One cult (we miss you cult), one carp, and a monkey themed
xenobio.

## Why It's Good For The Game
Part 1 of my attempt to make tarkon feel better to play. The overall
gameplay was very "Meta" and didn't really give you any reason to clear
out xenos or the threats. Who knows what might come next.
Tarkon was pretty stale. A bit of new stuff might be nice. plus a reason
to use their shuttle is good.

Furthermore, tarkon WILL run on solar, so if you REALLY don't want to,
you don't HAVE to go and clear everything out.

## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>


![image](https://github.com/user-attachments/assets/f707090e-426c-4d63-b171-8fdfa33a0489)


![image](https://github.com/user-attachments/assets/26b97663-53c4-49b5-827d-484b6aae9b38)


![image](https://github.com/user-attachments/assets/94d03e35-8a44-4d39-b8e7-5fa1a722ff8e)


![image](https://github.com/user-attachments/assets/a865263b-6e62-409e-a537-7c5e157e21f7)


![image](https://github.com/user-attachments/assets/7d8edb71-5dec-469b-9a39-fe3f1305b127)


![image](https://github.com/user-attachments/assets/1bae535a-82e3-43f9-93a0-d2983e011ea7)


![image](https://github.com/user-attachments/assets/2ad382a1-58e8-4846-a575-2e4bc732216d)


![image](https://github.com/user-attachments/assets/2a41c51c-d447-413f-a4f2-3c272c8ddd15)


![image](https://github.com/user-attachments/assets/aaae91bd-aec4-4f0d-93c8-857e63416562)


![image](https://github.com/user-attachments/assets/4e89da8d-bbc7-4084-bb8d-353ec032ca4c)

I did test it, and run the wave defense, it DOES work. 
</details>

## Changelog
🆑
add:  BUNCH of new tarkon things!
map: Tarkon QOL changes
/🆑

---------

Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
This commit is contained in:
Manatee
2025-04-10 20:15:56 +03:00
committed by GitHub
co-authored by Waterpig Arturlang
parent 0f8d37991f
commit 472893ae5e
22 changed files with 29482 additions and 12446 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,257 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"g" = (
/mob/living/basic/carp,
/turf/template_noop,
/area/template_noop)
"i" = (
/obj/structure/closet/crate,
/obj/effect/spawner/random/bedsheet,
/obj/effect/spawner/random/bedsheet,
/obj/effect/spawner/random/bedsheet,
/obj/effect/spawner/random/bedsheet,
/obj/effect/spawner/random/bedsheet,
/obj/effect/spawner/random/bedsheet,
/obj/effect/spawner/random/bedsheet,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/turf/template_noop,
/area/template_noop)
"k" = (
/obj/structure/rack/shelf,
/turf/template_noop,
/area/template_noop)
"o" = (
/mob/living/basic/carp/mega,
/turf/template_noop,
/area/template_noop)
"p" = (
/obj/modular_map_connector,
/turf/template_noop,
/area/template_noop)
"q" = (
/obj/structure/closet/crate,
/obj/item/reagent_containers/spray/cleaner,
/obj/item/reagent_containers/spray/cleaner,
/obj/item/reagent_containers/spray/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/holosign_creator/janibarrier,
/turf/template_noop,
/area/template_noop)
"r" = (
/mob/living/basic/carp/passive,
/turf/template_noop,
/area/template_noop)
"x" = (
/obj/item/construction/rcd/arcd/mattermanipulator,
/obj/item/rcd_ammo/large,
/obj/item/rcd_ammo/large,
/obj/item/rcd_ammo/large,
/obj/structure/closet/crate/secure/engineering,
/turf/template_noop,
/area/template_noop)
"y" = (
/obj/structure/rack/shelf,
/obj/item/storage/fish_case/random/saltwater,
/turf/template_noop,
/area/template_noop)
"A" = (
/obj/item/pizzabox/mushroom,
/obj/item/pizzabox/meat,
/obj/item/pizzabox/margherita,
/obj/structure/closet/crate/freezer,
/obj/item/food/fishmeat/carp,
/obj/item/food/fishmeat/carp,
/obj/item/food/fishmeat/carp,
/obj/item/food/fishmeat/carp,
/obj/item/food/fishmeat/carp,
/obj/item/knife/carp,
/obj/item/knife/carp,
/turf/template_noop,
/area/template_noop)
"F" = (
/obj/structure/closet/crate/secure/science,
/obj/item/mod/construction/broken_core,
/obj/item/mod/construction/broken_core,
/obj/item/mod/construction/broken_core,
/obj/item/mod/construction/broken_core,
/obj/item/mod/construction/broken_core,
/turf/template_noop,
/area/template_noop)
"H" = (
/obj/machinery/fishing_portal_generator/emagged,
/turf/template_noop,
/area/template_noop)
"I" = (
/obj/structure/closet/crate/engineering,
/obj/item/stack/sheet/plasteel/fifty,
/obj/item/stack/sheet/rglass{
amount = 50
},
/obj/item/stack/sheet/mineral/plasma/thirty,
/obj/item/stack/sheet/mineral/titanium/fifty,
/turf/template_noop,
/area/template_noop)
"J" = (
/obj/item/rack_parts,
/turf/template_noop,
/area/template_noop)
"L" = (
/obj/structure/rack/shelf,
/obj/item/storage/fish_case/random/freshwater,
/turf/template_noop,
/area/template_noop)
"O" = (
/obj/structure/closet/crate/medical,
/obj/item/storage/medkit/advanced,
/obj/item/storage/medkit/brute,
/obj/item/storage/medkit/fire,
/obj/item/storage/medkit/regular,
/obj/item/storage/medkit/regular,
/turf/template_noop,
/area/template_noop)
"R" = (
/obj/structure/rack/shelf,
/obj/item/fish/baby_carp,
/obj/item/storage/fish_case,
/turf/template_noop,
/area/template_noop)
"U" = (
/obj/structure/closet/crate,
/obj/item/storage/belt/utility,
/obj/item/clothing/gloves/color/black,
/obj/item/clothing/head/utility/hardhat/orange,
/obj/item/clothing/suit/hazardvest,
/obj/item/clothing/gloves/color/yellow,
/turf/template_noop,
/area/template_noop)
"V" = (
/obj/structure/rack/shelf,
/obj/item/storage/fish_case/blackmarket,
/turf/template_noop,
/area/template_noop)
"Y" = (
/obj/structure/rack/shelf,
/obj/item/storage/fish_case/random,
/turf/template_noop,
/area/template_noop)
(1,1,1) = {"
i
q
a
p
a
a
H
"}
(2,1,1) = {"
a
a
a
a
x
a
a
"}
(3,1,1) = {"
a
r
I
g
a
a
a
"}
(4,1,1) = {"
a
a
a
a
a
a
a
"}
(5,1,1) = {"
a
a
V
y
a
a
a
"}
(6,1,1) = {"
a
a
k
J
a
o
a
"}
(7,1,1) = {"
a
a
R
L
a
a
a
"}
(8,1,1) = {"
a
a
J
Y
a
a
a
"}
(9,1,1) = {"
F
a
g
a
a
a
a
"}
(10,1,1) = {"
a
a
a
a
a
a
a
"}
(11,1,1) = {"
a
a
a
U
a
a
O
"}
(12,1,1) = {"
a
a
A
a
a
a
a
"}
@@ -0,0 +1,291 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/structure/rack/shelf,
/obj/item/stack/sheet/rglass{
amount = 50
},
/obj/item/stack/sheet/plasteel/fifty,
/obj/item/stack/sheet/mineral/titanium/fifty,
/turf/template_noop,
/area/template_noop)
"b" = (
/obj/structure/rack/shelf,
/obj/item/construction/rcd/arcd/mattermanipulator,
/turf/template_noop,
/area/template_noop)
"c" = (
/obj/item/restraints/legcuffs/bola/cult,
/turf/template_noop,
/area/template_noop)
"d" = (
/obj/structure/closet/crate/medical,
/obj/item/storage/medkit/advanced,
/obj/item/storage/medkit/brute,
/obj/item/storage/medkit/fire,
/obj/item/storage/medkit/regular,
/obj/item/storage/medkit/regular,
/turf/template_noop,
/area/template_noop)
"e" = (
/obj/structure/destructible/cult/item_dispenser/forge,
/turf/template_noop,
/area/template_noop)
"f" = (
/obj/structure/destructible/cult/item_dispenser/altar,
/turf/template_noop,
/area/template_noop)
"g" = (
/obj/item/pizzabox/margherita,
/obj/item/pizzabox/meat,
/obj/item/pizzabox/mushroom,
/obj/item/pizzabox/margherita,
/obj/item/pizzabox/meat,
/obj/item/pizzabox/mushroom,
/obj/structure/closet/crate/freezer,
/turf/template_noop,
/area/template_noop)
"h" = (
/mob/living/basic/construct/artificer/hostile,
/turf/template_noop,
/area/template_noop)
"j" = (
/obj/structure/rack/shelf,
/obj/item/clothing/suit/hazardvest,
/obj/item/clothing/gloves/color/black,
/obj/item/clothing/head/utility/hardhat/orange,
/turf/template_noop,
/area/template_noop)
"k" = (
/obj/structure/closet/crate/secure/science,
/obj/item/mod/construction/broken_core,
/obj/item/mod/construction/broken_core,
/obj/item/mod/construction/broken_core,
/obj/item/mod/construction/broken_core,
/obj/item/mod/construction/broken_core,
/turf/template_noop,
/area/template_noop)
"l" = (
/obj/structure/closet/crate,
/obj/item/reagent_containers/spray/cleaner,
/obj/item/reagent_containers/spray/cleaner,
/obj/item/reagent_containers/spray/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/holosign_creator/janibarrier,
/obj/modular_map_connector,
/turf/template_noop,
/area/template_noop)
"p" = (
/obj/structure/rack/shelf,
/obj/item/storage/toolbox/electrical,
/obj/item/storage/toolbox/electrical,
/turf/template_noop,
/area/template_noop)
"q" = (
/mob/living/simple_animal/hostile/cult,
/turf/template_noop,
/area/template_noop)
"r" = (
/obj/structure/rack/shelf,
/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty,
/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty,
/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty,
/turf/template_noop,
/area/template_noop)
"u" = (
/mob/living/simple_animal/hostile/cult/magic,
/turf/template_noop,
/area/template_noop)
"B" = (
/mob/living/simple_animal/hostile/cult/horror,
/turf/template_noop,
/area/template_noop)
"C" = (
/obj/structure/rack/shelf,
/obj/item/storage/toolbox/mechanical,
/obj/item/storage/toolbox/mechanical,
/turf/template_noop,
/area/template_noop)
"D" = (
/mob/living/basic/construct/juggernaut/hostile,
/turf/template_noop,
/area/template_noop)
"G" = (
/obj/structure/rack/shelf,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/effect/spawner/random/bedsheet/double,
/obj/item/bedsheet/cult/double,
/turf/template_noop,
/area/template_noop)
"J" = (
/turf/template_noop,
/area/template_noop)
"K" = (
/obj/item/stack/sheet/runed_metal/ten,
/turf/template_noop,
/area/template_noop)
"M" = (
/obj/structure/rack/shelf,
/obj/item/stack/sheet/mineral/gold{
amount = 25
},
/obj/item/stack/sheet/runed_metal/five,
/turf/template_noop,
/area/template_noop)
"Q" = (
/obj/structure/destructible/cult/pylon,
/turf/template_noop,
/area/template_noop)
"V" = (
/mob/living/simple_animal/hostile/cult/mannequin,
/turf/template_noop,
/area/template_noop)
"X" = (
/obj/structure/rack/shelf,
/obj/item/holosign_creator/janibarrier,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/grenade/chem_grenade/cleaner,
/obj/item/reagent_containers/spray/cleaner,
/obj/item/reagent_containers/spray/cleaner,
/obj/item/reagent_containers/spray/cleaner,
/turf/template_noop,
/area/template_noop)
"Y" = (
/obj/structure/rack/shelf,
/obj/effect/spawner/random/decoration/carpet,
/turf/template_noop,
/area/template_noop)
"Z" = (
/obj/item/melee/cultblade/dagger,
/turf/template_noop,
/area/template_noop)
(1,1,1) = {"
J
J
J
l
k
b
a
"}
(2,1,1) = {"
J
J
Q
J
J
B
g
"}
(3,1,1) = {"
J
q
Z
e
J
J
J
"}
(4,1,1) = {"
J
J
J
u
J
J
J
"}
(5,1,1) = {"
J
J
D
M
J
J
J
"}
(6,1,1) = {"
J
J
J
Y
J
J
J
"}
(7,1,1) = {"
J
J
J
C
J
h
J
"}
(8,1,1) = {"
J
J
q
p
J
J
J
"}
(9,1,1) = {"
J
J
J
J
J
J
J
"}
(10,1,1) = {"
J
V
K
J
Q
J
J
"}
(11,1,1) = {"
J
J
c
J
J
J
r
"}
(12,1,1) = {"
J
f
J
d
j
X
G
"}
@@ -36,6 +36,7 @@
amount = 50
},
/obj/item/stack/sheet/plasteel/fifty,
/obj/item/stack/sheet/mineral/titanium/fifty,
/turf/template_noop,
/area/template_noop)
"n" = (
@@ -17,6 +17,7 @@
amount = 50
},
/obj/item/stack/sheet/mineral/plasma/thirty,
/obj/item/stack/sheet/mineral/titanium/fifty,
/turf/template_noop,
/area/template_noop)
"i" = (
@@ -0,0 +1,137 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"g" = (
/mob/living/basic/carp,
/turf/template_noop,
/area/template_noop)
"i" = (
/obj/effect/decal/cleanable/glass,
/obj/item/shard,
/turf/template_noop,
/area/template_noop)
"k" = (
/obj/effect/decal/cleanable/glass,
/obj/item/shard{
icon_state = "medium"
},
/turf/template_noop,
/area/template_noop)
"l" = (
/obj/modular_map_connector,
/turf/template_noop,
/area/template_noop)
"o" = (
/obj/structure/window/reinforced/spawner/directional/north,
/mob/living/basic/carp/passive,
/turf/template_noop,
/area/template_noop)
"q" = (
/obj/machinery/door/window/brigdoor/right/directional/north,
/turf/template_noop,
/area/template_noop)
"s" = (
/obj/structure/window/reinforced/spawner/directional/east,
/turf/template_noop,
/area/template_noop)
"x" = (
/obj/structure/window/reinforced/spawner/directional/south,
/turf/template_noop,
/area/template_noop)
"H" = (
/obj/structure/window/reinforced/spawner/directional/north,
/turf/template_noop,
/area/template_noop)
"N" = (
/mob/living/basic/carp/mega,
/turf/template_noop,
/area/template_noop)
"T" = (
/obj/structure/window/reinforced/spawner/directional/south,
/obj/structure/window/reinforced/spawner/directional/east,
/turf/template_noop,
/area/template_noop)
"X" = (
/obj/machinery/door/window/brigdoor/right/directional/south,
/turf/template_noop,
/area/template_noop)
"Z" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/effect/decal/cleanable/glass,
/obj/item/shard{
icon_state = "small"
},
/turf/template_noop,
/area/template_noop)
(1,1,1) = {"
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
a
a
"}
(3,1,1) = {"
a
x
l
H
a
"}
(4,1,1) = {"
a
x
a
H
a
"}
(5,1,1) = {"
g
X
a
q
a
"}
(6,1,1) = {"
s
T
a
k
s
"}
(7,1,1) = {"
a
i
a
Z
a
"}
(8,1,1) = {"
a
X
a
q
a
"}
(9,1,1) = {"
a
x
N
o
a
"}
(10,1,1) = {"
a
x
a
H
a
"}
@@ -0,0 +1,119 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"d" = (
/mob/living/simple_animal/hostile/cult/warrior,
/turf/template_noop,
/area/template_noop)
"f" = (
/mob/living/basic/construct/wraith/hostile,
/turf/template_noop,
/area/template_noop)
"g" = (
/mob/living/simple_animal/hostile/cult/magic,
/turf/template_noop,
/area/template_noop)
"p" = (
/obj/machinery/door/airlock/cult/friendly,
/obj/modular_map_connector,
/turf/template_noop,
/area/template_noop)
"r" = (
/obj/structure/destructible/cult/item_dispenser/altar,
/turf/template_noop,
/area/template_noop)
"s" = (
/obj/structure/destructible/cult/pylon,
/turf/template_noop,
/area/template_noop)
"C" = (
/obj/structure/destructible/cult/item_dispenser/archives,
/turf/template_noop,
/area/template_noop)
"I" = (
/mob/living/basic/construct/artificer/hostile,
/turf/template_noop,
/area/template_noop)
"R" = (
/mob/living/simple_animal/hostile/cult/assassin,
/turf/template_noop,
/area/template_noop)
"S" = (
/mob/living/simple_animal/hostile/cult/spear,
/turf/template_noop,
/area/template_noop)
"Y" = (
/turf/closed/wall/mineral/cult,
/area/template_noop)
(1,1,1) = {"
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
a
a
"}
(3,1,1) = {"
Y
Y
p
Y
Y
"}
(4,1,1) = {"
f
a
a
a
a
"}
(5,1,1) = {"
a
d
a
S
a
"}
(6,1,1) = {"
a
a
a
a
a
"}
(7,1,1) = {"
r
a
a
a
I
"}
(8,1,1) = {"
a
g
s
R
a
"}
(9,1,1) = {"
a
a
a
a
a
"}
(10,1,1) = {"
a
C
a
a
a
"}
@@ -0,0 +1,125 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"j" = (
/obj/structure/rack/wooden,
/turf/template_noop,
/area/template_noop)
"k" = (
/obj/item/food/grown/banana,
/turf/template_noop,
/area/template_noop)
"m" = (
/mob/living/basic/gorilla,
/turf/template_noop,
/area/template_noop)
"p" = (
/obj/modular_map_connector,
/turf/template_noop,
/area/template_noop)
"s" = (
/mob/living/basic/banana_spider,
/turf/template_noop,
/area/template_noop)
"y" = (
/obj/item/seeds/banana/spider_banana,
/turf/template_noop,
/area/template_noop)
"z" = (
/mob/living/carbon/human/species/monkey,
/turf/template_noop,
/area/template_noop)
"C" = (
/obj/structure/water_source/puddle,
/turf/template_noop,
/area/template_noop)
"D" = (
/obj/structure/flora/tree/palm,
/turf/template_noop,
/area/template_noop)
"M" = (
/obj/effect/mob_spawn/corpse/human/monkey,
/turf/template_noop,
/area/template_noop)
"N" = (
/obj/structure/rack/wooden,
/obj/item/hatchet/wooden,
/turf/template_noop,
/area/template_noop)
"U" = (
/obj/effect/mob_spawn/corpse/human/monkey,
/obj/item/clothing/shoes/banana_slippers,
/turf/template_noop,
/area/template_noop)
(1,1,1) = {"
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
a
a
"}
(3,1,1) = {"
a
a
p
a
a
"}
(4,1,1) = {"
a
k
a
a
M
"}
(5,1,1) = {"
M
z
a
a
a
"}
(6,1,1) = {"
j
s
a
s
a
"}
(7,1,1) = {"
N
y
C
a
a
"}
(8,1,1) = {"
j
D
a
m
a
"}
(9,1,1) = {"
a
z
U
a
a
"}
(10,1,1) = {"
a
a
a
a
a
"}
@@ -170,11 +170,19 @@
name = "P-T Trauma Center"
icon_state = "med_central"
/area/ruin/space/has_grav/port_tarkon/viro
name = "P-T Virology Center"
icon_state = "med_central"
/area/ruin/space/has_grav/port_tarkon/developement
name = "P-T Developement Center"
icon_state = "science"
area_flags = XENOBIOLOGY_COMPATIBLE | UNIQUE_AREA
/area/ruin/space/has_grav/port_tarkon/scienceaway
name = "P-T Detached Research Center"
icon_state = "science"
/area/ruin/space/has_grav/port_tarkon/comms
name = "P-T Communication Center"
icon_state = "command"
@@ -191,10 +199,18 @@
name = "P-T Security Office"
icon_state = "security"
/area/ruin/space/has_grav/port_tarkon/lounge
name = "P-T Bar Lounge"
icon_state = "bar"
/area/ruin/space/has_grav/port_tarkon/atmos
name = "P-T Atmospheric Center"
icon_state = "atmos"
/area/ruin/space/has_grav/port_tarkon/engineering
name = "P-T Engineering Center"
icon_state = "engineering"
/area/ruin/space/has_grav/port_tarkon/kitchen
name = "P-T Kitchen"
icon_state = "cafeteria"
@@ -203,6 +219,10 @@
name = "P-T Garden"
icon_state = "garden"
/area/ruin/space/has_grav/port_tarkon/park
name = "P-T Park"
icon_state = "garden"
/area/ruin/space/has_grav/port_tarkon/cargo
name = "P-T Cargo Center"
icon_state = "cargo_office"
@@ -232,6 +252,14 @@
icon_state = "space_near"
default_gravity = STANDARD_GRAVITY
/area/ruin/space/has_grav/port_tarkon/aichamber
name = "P-T AI Chamber"
icon_state = "ai_interior"
/area/ruin/space/has_grav/port_tarkon/aiante
name = "P-T AI Antechamber"
icon_state = "ai_interior"
// Cargodise Lost Freighter
/area/ruin/space/has_grav/cargodise_freighter/primaryhall
@@ -150,6 +150,6 @@
/obj/projectile/bullet/smart/a10x28 // utter peashooter, but it has 6000rpm
name = "10x28mm bullet"
damage = 6
damage = 9
wound_bonus = -5
wound_falloff_tile = -1
@@ -0,0 +1,136 @@
// Engine based key doors
/obj/machinery/door/puzzle/keycard/rnd
name = "R&D Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has purple markings on it."
puzzle_id = "tarkon1"
/obj/machinery/door/puzzle/keycard/engi
name = "Engineering Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has orange markings on it."
puzzle_id = "tarkon2"
/obj/machinery/door/puzzle/keycard/med
name = "Medical Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has blue markings on it."
puzzle_id = "tarkon3"
/obj/machinery/door/puzzle/keycard/vault
name = "Vault Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has black markings on it."
puzzle_id = "tarkon4"
// End Engine based key doors
// Engine based Door Keys
/obj/item/keycard/tarkon_rnd
name = "Research keycard"
desc = "Tarkon industries secure storage lock key."
color = "#a03aaf"
puzzle_id = "tarkon1"
/obj/item/keycard/tarkon_engi
name = "Engineering keycard"
desc = "Tarkon industries secure storage lock key."
color = "#f05812"
puzzle_id = "tarkon2"
/obj/item/keycard/tarkon_med
name = "Medical keycard"
desc = "Tarkon industries secure storage lock key."
color = "#33d4ff"
puzzle_id = "tarkon3"
/obj/item/keycard/tarkon_vault
name = "Vault keycard"
desc = "Tarkon industries secure storage lock key."
color = "#303030"
puzzle_id = "tarkon4"
// End Engine based door keys
/mob/living/basic/alien/drone/tarkon
basic_mob_flags = DEL_ON_DEATH
// JOB SPECIFIC VAULT KEYS
/obj/item/keycard/tarkon_job_med
name = "Personal keycard"
desc = "Tarkon industries secure storage lock key. This one has a label reading 'Medical Secure Storage'"
color = "#33d4ff"
puzzle_id = "tarkon_vaultmed"
/obj/item/keycard/tarkon_job_sec
name = "Personal keycard"
desc = "Tarkon industries secure storage lock key. This one has a label reading 'Security Secure Storage'"
color = "#C70039"
puzzle_id = "tarkon_vaultsec"
/obj/item/keycard/tarkon_job_engi
name = "Personal keycard"
desc = "Tarkon industries secure storage lock key. This one has a label reading 'Engineering Secure Storage'"
color = "#FFC300"
puzzle_id = "tarkon_vaultengi"
/obj/item/keycard/tarkon_job_rnd
name = "Personal keycard"
desc = "Tarkon industries secure storage lock key. This one has a label reading 'Research Secure Storage'"
color = "#a207b9"
puzzle_id = "tarkon_vaultrnd"
/obj/item/keycard/tarkon_job_supply
name = "Personal keycard"
desc = "Tarkon industries secure storage lock key. This one has a label reading 'Supply Secure Storage'"
color = "#9e5d06"
puzzle_id = "tarkon_vaultsupply"
/obj/item/keycard/tarkon_job_command
name = "Personal keycard"
desc = "Tarkon industries secure storage lock key. This one has a label reading 'Command Secure Storage'"
color = "#1b50d5"
puzzle_id = "tarkon_vaultcommand"
/obj/item/keycard/tarkon_job_ensign
name = "Personal keycard"
desc = "Tarkon industries secure storage lock key. This one has a label reading 'Ensign Secure Storage'"
color = "#1b50d5"
puzzle_id = "tarkon_vaultensign"
// End job specific vault keys
// JOB SPECIFIC VAULT DOORS
/obj/machinery/door/puzzle/keycard/personal_med
name = "Personal Medical Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has blue markings on it."
puzzle_id = "tarkon_vaultmed"
/obj/machinery/door/puzzle/keycard/personal_sec
name = "Personal Security Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has red markings on it."
puzzle_id = "tarkon_vaultsec"
/obj/machinery/door/puzzle/keycard/personal_engi
name = "Personal Engineering Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has orange markings on it."
puzzle_id = "tarkon_vaultengi"
/obj/machinery/door/puzzle/keycard/personal_rnd
name = "Personal Science Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has purple markings on it."
puzzle_id = "tarkon_vaultrnd"
/obj/machinery/door/puzzle/keycard/personal_supply
name = "Personal Supply Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has brown markings on it."
puzzle_id = "tarkon_vaultsupply"
/obj/machinery/door/puzzle/keycard/personal_command
name = "Personal Command Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has blue and gold markings on it."
puzzle_id = "tarkon_vaultcommand"
/obj/machinery/door/puzzle/keycard/personal_ensign
name = "Personal Ensign Secure Airlock"
desc = "Tarkon industries secure storage lock. This one has blue and red markings on it."
puzzle_id = "tarkon_vaultensign"
// End job specific vault doors
@@ -26,7 +26,8 @@
"powerator_tarkon",
"cargoconsole_tarkon",
"bountypad_tarkon",
"bountyconsole_tarkon"
"bountyconsole_tarkon",
"hackc"
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
hidden = TRUE
@@ -142,6 +143,20 @@
)
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
/datum/design/tarkonhackc
name = "Tarkon Hack-C Signaller"
desc = "A small device that signals a 'Hack-C' drone to repair specialized machinery."
id = "hackc"
build_path = /obj/item/hackc
category = list(
RND_CATEGORY_TOOLS
)
materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT
)
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
///// Now we make the physical server /////
/obj/item/circuitboard/machine/rdserver/tarkon
@@ -22,8 +22,9 @@
head = /obj/item/clothing/head/utility/welding/hat
back = /obj/item/storage/backpack
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/crowbar = 1,
)
)
shoes = /obj/item/clothing/shoes/winterboots
gloves = /obj/item/clothing/gloves/combat
id = /obj/item/card/id/advanced/tarkon
@@ -38,11 +39,11 @@
if(ispath(back, /obj/item/storage/backpack)) //we just steal this from the job outfit datum.
switch(tarkon.backpack)
if(GBACKPACK)
back = /obj/item/storage/backpack //Grey backpack
back = /obj/item/storage/backpack/tarkon //Tarkon backpack
if(GSATCHEL)
back = /obj/item/storage/backpack/satchel //Grey satchel
back = /obj/item/storage/backpack/satchel/tarkon //Tarkon satchel
if(GDUFFELBAG)
back = /obj/item/storage/backpack/duffelbag //Grey Duffel bag
back = /obj/item/storage/backpack/duffelbag/tarkon //Tarkon Duffel bag
if(LSATCHEL)
back = /obj/item/storage/backpack/satchel/leather //Leather Satchel
if(GMESSENGER)
@@ -81,6 +82,7 @@
return ..()
/obj/effect/mob_spawn/ghost_role/human/tarkon/cargo
name = "Port Tarkon Supply Crew Member"
prompt_name = "a port salvage tech"
outfit = /datum/outfit/tarkon/cargo
@@ -91,11 +93,20 @@
id = /obj/item/card/id/advanced/tarkon/cargo
id_trim = /datum/id_trim/away/tarkon/cargo
l_pocket = /obj/item/mining_voucher
back = /obj/item/storage/backpack
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/keycard/tarkon_job_supply,
/obj/item/crowbar = 1,
)
skillchips = list(/obj/item/skillchip/job/miner)
/obj/effect/mob_spawn/ghost_role/human/tarkon/sci
name = "Port Tarkon Reserach Crew Member"
prompt_name = "a port researcher"
outfit = /datum/outfit/tarkon/sci
/datum/outfit/tarkon/sci
name = "Port Tarkon Science Outfit"
uniform = /obj/item/clothing/under/tarkon/sci
@@ -104,8 +115,16 @@
id_trim = /datum/id_trim/away/tarkon/sci
r_pocket = /obj/item/stock_parts/power_store/cell/high
l_pocket = /obj/item/card/id/away/tarkonrobo
back = /obj/item/storage/backpack
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/crowbar = 1,
/obj/item/keycard/tarkon_job_rnd,
)
skillchips = list(/obj/item/skillchip/job/roboticist)
/obj/effect/mob_spawn/ghost_role/human/tarkon/med
name = "Port Tarkon Medical Crew Member"
prompt_name = "a port trauma medic"
outfit = /datum/outfit/tarkon/med
@@ -118,8 +137,16 @@
neck = /obj/item/clothing/neck/stethoscope
l_pocket = /obj/item/healthanalyzer
r_pocket = /obj/item/stack/medical/suture/medicated
back = /obj/item/storage/backpack
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/crowbar = 1,
/obj/item/keycard/tarkon_job_med,
)
skillchips = list(/obj/item/skillchip/entrails_reader)
/obj/effect/mob_spawn/ghost_role/human/tarkon/engi
name = "Port Tarkon Engineering Crew Member"
prompt_name = "a port maintenance engineer"
outfit = /datum/outfit/tarkon/engi
@@ -133,8 +160,16 @@
l_hand = /obj/item/inducer
l_pocket = /obj/item/tank/internals/emergency_oxygen/engi
r_pocket = /obj/item/stack/cable_coil
back = /obj/item/storage/backpack
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/crowbar = 1,
/obj/item/keycard/tarkon_job_engi,
)
skillchips = list(/obj/item/skillchip/job/engineer)
/obj/effect/mob_spawn/ghost_role/human/tarkon/sec
name = "Port Tarkon Security Crew Member"
prompt_name = "a port security member"
outfit = /datum/outfit/tarkon/sec
@@ -148,6 +183,12 @@
id_trim = /datum/id_trim/away/tarkon/sec
l_pocket = /obj/item/melee/baton/telescopic
r_pocket = /obj/item/grenade/barrier
back = /obj/item/storage/backpack
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/crowbar = 1,
/obj/item/keycard/tarkon_job_sec,
)
skillchips = list(/obj/item/skillchip/chameleon/reload)
/obj/effect/mob_spawn/ghost_role/human/tarkon/ensign
@@ -168,6 +209,12 @@
id = /obj/item/card/id/advanced/tarkon/ensign
id_trim = /datum/id_trim/away/tarkon/ensign
neck = /obj/item/clothing/neck/security_cape/tarkon
back = /obj/item/storage/backpack
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/crowbar = 1,
/obj/item/keycard/tarkon_job_ensign,
)
skillchips = list(/obj/item/skillchip/chameleon/reload)
/obj/effect/mob_spawn/ghost_role/human/tarkon/director
@@ -193,6 +240,12 @@
id_trim = /datum/id_trim/away/tarkon/director
neck = /obj/item/clothing/neck/security_cape/tarkon
r_pocket = /obj/item/card/id/away/tarkonrobo
back = /obj/item/storage/backpack
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/crowbar = 1,
/obj/item/keycard/tarkon_job_command,
)
skillchips = list(/obj/item/skillchip/chameleon/reload)
/obj/machinery/computer/cryopod/tarkon
@@ -229,8 +282,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/tarkon, 32)
max_mobs = 7
spawn_time = 20 SECONDS
mob_types = list(
/mob/living/basic/alien,
/mob/living/basic/alien/drone,
/mob/living/basic/alien/drone/tarkon,
/mob/living/basic/alien/sentinel
)
spawn_text = "crawls out of"
@@ -291,7 +343,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/tarkon, 32)
max_mobs = 2
spawn_time = 30 SECONDS
mob_types = list(
/mob/living/basic/alien,
/mob/living/basic/alien/drone
)
boss_mob = /mob/living/basic/alien/sentinel
@@ -0,0 +1,44 @@
/**
* # Tarkon Produce Orders Console
*
* A produce orders console modified to use a specified department account, and only allow express orders
*
* This file is based off of order_computer.dm
* Any changes made to that file should be copied over with discretion
*/
/obj/item/circuitboard/computer/order_console/tarkon
name = "Tarkon Produce Orders Console"
greyscale_colors = CIRCUIT_COLOR_SERVICE
build_path = /obj/machinery/computer/order_console/cook/tarkon
/obj/machinery/computer/order_console/cook/tarkon
name = "Tarkon produce orders console"
desc = "An interface for ordering fresh produce and other."
circuit = /obj/item/circuitboard/computer/order_console/tarkon
blackbox_key = null
forced_express = TRUE
/// The account to add balance
var/credits_account = ACCOUNT_TAR
/// The resolved bank account
var/datum/bank_account/synced_bank_account = null
/obj/machinery/computer/order_console/cook/tarkon/post_machine_initialize()
. = ..()
synced_bank_account = SSeconomy.get_dep_account(credits_account == "" ? ACCOUNT_CAR : credits_account)
/obj/machinery/computer/order_console/cook/tarkon/ui_data(mob/user)
var/list/data = ..()
data["points"] = !synced_bank_account ? 0 : synced_bank_account.account_balance
return data
/obj/machinery/computer/order_console/cook/tarkon/purchase_items(obj/item/card/id/card, express = FALSE)
if(!synced_bank_account)
say("Error, no department account found.")
return FALSE
var/final_cost = round(get_total_cost() * (express ? express_cost_multiplier : cargo_cost_multiplier))
if(synced_bank_account.adjust_money(-final_cost, "[name]: Purchase"))
return TRUE
say("Sorry, but you do not have enough [credit_type].")
return FALSE
@@ -80,7 +80,7 @@
contraband = TRUE
/obj/machinery/computer/cargo/express/interdyne/tarkon
name = "interdyne express supply console"
name = "tarkon express supply console"
desc = "A standard Tarkon express console."
circuit = /obj/item/circuitboard/computer/cargo/express/interdyne/tarkon
req_access = list(ACCESS_TARKON)
@@ -0,0 +1,209 @@
// Intended to be how mining vents work but instead of ore, at the end it spawns a chest with loot
// Implemented on Port Tarkon as standard.
/obj/structure/wave_defence
name = "Emergency Backup Generator"
desc = "A small, rusty looking engine used to run emergency systems. Call in a Hack-C pod to begin the reboot sequence."
icon = 'modular_zubbers/icons/obj/machines/wavedef.dmi'
icon_state = "emerg_engine"
base_icon_state = "emerg_engine"
var/excavation_warning = "This will be awfully loud. Are you ready to protect the hacking pod?"
var/list/defending_mobs = list(/mob/living/basic/alien/drone/tarkon)
var/static/list/scanning_equipment = list(/obj/item/hackc)
move_resist = MOVE_FORCE_EXTREMELY_STRONG
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //This thing will take a beating.
anchored = TRUE
density = TRUE
can_buckle = TRUE
var/tapped = FALSE
var/unique_vent = TRUE
var/spawn_drone_on_tap = TRUE
var/icon_state_tapped = "emerg_engine_running"
var/mob/living/basic/node_drone/hackc/node = null //this path is a placeholder.
var/wave_timer = WAVE_DURATION_LARGE
COOLDOWN_DECLARE(wave_cooldown)
COOLDOWN_DECLARE(manual_vent_cooldown)
var/reward_key // for allowing the door key to drop
var/reward_gun // the prize for finishing. its always a gun for now, so.
var/difficulty_modifier = 0 // to increase the number of mobs that can spawn
var/loot_rolls = 1 // number of times loot is rolled from your table
var/spawn_mod = 0 // used to adjust distance that creatures can spawn
/obj/item/hackc
name = "Hack-C repair pod signaller"
icon = 'modular_zubbers/icons/obj/machines/wavedef_items.dmi'
icon_state = "hackc"
desc = "A small tool with a bunch of ones and zeros on it. The label say 'For emergency use only!'"
/mob/living/basic/node_drone/hackc
name = "Hack-C drone"
desc = "A lightweight version of the standard NT drones. This one has been modified for basic repairs and electrical engineering work."
icon = 'modular_zubbers/icons/obj/machines/wavedef_items.dmi'
icon_state = "mining_node_active"
icon_living = "mining_node_active"
icon_dead = "mining_node_active"
/obj/structure/wave_defence/examine(mob/user)
. += span_notice("This can be repaired by calling in a drone with a [span_bold("Hack-C signaller")].")
/obj/structure/wave_defence/Destroy() // we dont want to affect the resource gen
reset_drone(success = FALSE)
return ..()
/obj/structure/wave_defence/proc/reset_drone(success)
if(!QDELETED(node))
node.pre_escape(success = success)
UnregisterSignal(node, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED))
node = null
/obj/structure/wave_defence/Initialize(mapload)
register_context()
if(tapped)
icon_state = icon_state_tapped
update_appearance(UPDATE_ICON_STATE)
RegisterSignal(src, COMSIG_SPAWNER_SPAWNED_DEFAULT, PROC_REF(anti_cheese))
return ..()
/obj/structure/ore_vent/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
if(is_type_in_list(held_item, scanning_equipment))
context[SCREENTIP_CONTEXT_LMB] = "Signal hacking drone"
return CONTEXTUAL_SCREENTIP_SET
/obj/structure/wave_defence/attackby(obj/item/attacking_item, mob/user, params)
. = ..()
if(.)
return TRUE
if(!is_type_in_list(attacking_item, scanning_equipment))
return TRUE
if(tapped)
balloon_alert_to_viewers("engine repaired!")
return TRUE
scan_and_confirm(user)
return TRUE
/obj/structure/wave_defence/proc/pre_wave_defense(mob/user, spawn_drone = TRUE)
if(tgui_alert(user, excavation_warning, "Begin defending emergency engine?", list("Yes", "No")) != "Yes")
return FALSE
if(!can_interact(user))
return FALSE
if(!COOLDOWN_FINISHED(src, wave_cooldown) || node)
return FALSE
//This is where we start spitting out mobs.
Shake(duration = 3 SECONDS)
if(spawn_drone)
node = new /mob/living/basic/node_drone/hackc(loc)
node.arrive(src)
RegisterSignal(node, COMSIG_QDELETING, PROC_REF(handle_wave_conclusion))
RegisterSignal(node, COMSIG_MOVABLE_MOVED, PROC_REF(handle_wave_conclusion))
addtimer(CALLBACK(node, TYPE_PROC_REF(/atom, update_appearance)), wave_timer * 0.25)
addtimer(CALLBACK(node, TYPE_PROC_REF(/atom, update_appearance)), wave_timer * 0.5)
addtimer(CALLBACK(node, TYPE_PROC_REF(/atom, update_appearance)), wave_timer * 0.75)
add_shared_particles(/particles/smoke/ash)
return TRUE
/obj/structure/wave_defence/proc/start_wave_defense()
AddComponent(\
/datum/component/spawner, \
spawn_types = defending_mobs, \
spawn_time = 15 SECONDS - difficulty_modifier, \
max_spawned = 10 + difficulty_modifier, \
max_spawn_per_attempt = 3 + difficulty_modifier + spawn_mod, \
spawn_text = "appears to assault", \
spawn_distance = 4 + spawn_mod, \
spawn_distance_exclude = 2, \
)
COOLDOWN_START(src, wave_cooldown, wave_timer)
addtimer(CALLBACK(src, PROC_REF(handle_wave_conclusion)), wave_timer)
icon_state = icon_state_tapped
update_appearance(UPDATE_ICON_STATE)
/obj/structure/wave_defence/proc/handle_wave_conclusion(datum/source, force = FALSE)
SIGNAL_HANDLER
SEND_SIGNAL(src, COMSIG_VENT_WAVE_CONCLUDED)
COOLDOWN_RESET(src, wave_cooldown)
remove_shared_particles(/particles/smoke/ash)
if(force)
initiate_wave_win()
return
if(QDELETED(node))
initiate_wave_loss(loss_message = "\the [src] creaks and groans as the hacking attempt fails, and the engine grinds to a halt.")
return
if(get_turf(node) != get_turf(src))
initiate_wave_loss(loss_message = "The [node] detaches from the [src], and the engine seizes up!")
return //Start over!
initiate_wave_win()
/obj/structure/wave_defence/proc/initiate_wave_win()
tapped = TRUE
balloon_alert_to_viewers("engine started!")
icon_state = icon_state_tapped
update_appearance(UPDATE_ICON_STATE)
qdel(GetComponent(/datum/component/gps))
reset_drone(success = TRUE)
reward_gun = pick_weight_recursive(GLOB.tarkon_prize_pool)
new reward_gun(loc)
new reward_key(loc)
qdel(src) // so they dont just take up room
/obj/structure/wave_defence/proc/scan_and_confirm(mob/living/user)
if(tapped)
balloon_alert_to_viewers("engine started!")
return
if(!COOLDOWN_FINISHED(src, wave_cooldown) || node) //We're already defending the vent, so don't scan it again.
return
if(DOING_INTERACTION_WITH_TARGET(user, src))
balloon_alert(user, "already calling!")
return
balloon_alert(user, "calling pod...")
playsound(src, 'sound/items/timer.ogg', 30, TRUE)
if(!do_after(user, 4 SECONDS, src))
return
balloon_alert(user, "engine started!")
if(!pre_wave_defense(user, spawn_drone_on_tap))
return
start_wave_defense()
/obj/structure/wave_defence/proc/anti_cheese()
explosion(src, heavy_impact_range = 1, light_impact_range = 3, flame_range = 0, flash_range = 0, adminlog = FALSE)
/obj/structure/wave_defence/is_buckle_possible(mob/living/target, force, check_loc)
. = ..()
if(tapped)
return FALSE
if(istype(target, /mob/living/basic/node_drone/hackc))
return TRUE
/obj/structure/wave_defence/proc/initiate_wave_loss(loss_message)
visible_message(span_danger(loss_message))
icon_state = base_icon_state
update_appearance(UPDATE_ICON_STATE)
reset_drone(success = FALSE)
/obj/structure/wave_defence/tarkon/rnd
reward_key = /obj/item/keycard/tarkon_rnd
/obj/structure/wave_defence/tarkon/engi
reward_key = /obj/item/keycard/tarkon_engi
spawn_mod = 1
/obj/structure/wave_defence/tarkon/med
reward_key = /obj/item/keycard/tarkon_med
/obj/structure/wave_defence/tarkon/boss
reward_key = /obj/item/keycard/tarkon_vault
difficulty_modifier = 2
/obj/structure/wave_defence/tarkon/boss/initiate_wave_win()
reward_gun = pick_weight_recursive(GLOB.tarkon_prize_pool)
new reward_gun(loc)
reward_gun = pick_weight_recursive(GLOB.tarkon_prize_pool)
new reward_gun(loc)
return ..()
@@ -10,3 +10,12 @@
/mob/living/basic/carp/mega/Initialize(mapload)
. = ..()
maxHealth += rand(15, 40)
/mob/living/basic/carp/mega/queen
name = "Royal Space Carp"
desc = "A ferocious, fang bearing creature that resembles a shark. The scales visibly gleam in the pale light. Sure looks tough."
maxHealth = 300
health = 300
melee_damage_lower = 20
melee_damage_upper = 25
@@ -0,0 +1,39 @@
GLOBAL_LIST_INIT(tarkon_prize_pool, list(
/obj/item/storage/toolbox/guncase/m44a = 1,
/obj/item/storage/toolbox/guncase/m44a_shotgun = 1,
/obj/item/storage/toolbox/guncase/smartgun = 1,
/obj/item/gun/ballistic/automatic/proto = 1,
/obj/item/storage/toolbox/guncase/oldlaserrifle = 1,
/obj/item/gun/medbeam = 1,
/obj/item/gun/energy/modular_laser_rifle = 1,
/obj/item/gun/energy/e_gun/stun = 1,
/obj/item/gun/energy/laser/captain/scattershot = 1,
/obj/item/storage/toolbox/guncase/bmsniper = 1,
/obj/item/melee/energy/sword = 1,
/obj/item/fireaxe/energy = 1
))
/obj/item/storage/toolbox/guncase/m44a
name = "M44A gun case"
weapon_to_spawn = /obj/item/gun/ballistic/automatic/ar/modular/m44a
extra_to_spawn = /obj/item/ammo_box/magazine/m44a
/obj/item/storage/toolbox/guncase/m44a_shotgun
name = "M44A Shotgun gun case"
weapon_to_spawn = /obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun
extra_to_spawn = /obj/item/ammo_box/magazine/m44a
/obj/item/storage/toolbox/guncase/bmsniper
name = "SA-107 gun case"
weapon_to_spawn = /obj/item/gun/ballistic/automatic/sniper_rifle/modular/blackmarket
extra_to_spawn = /obj/item/ammo_box/magazine/sniper_rounds
/obj/item/storage/toolbox/guncase/oldlaserrifle
name = "Combat Laser Rifle gun case"
weapon_to_spawn = /obj/item/gun/ballistic/automatic/laser
extra_to_spawn = /obj/item/ammo_box/magazine/recharge
/obj/item/storage/toolbox/guncase/smartgun
name = "MODsuit Smartgun case"
weapon_to_spawn = /obj/item/mod/module/smartgun
extra_to_spawn = /obj/item/ammo_box/magazine/smartgun_drum
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

+2 -2
View File
@@ -1,10 +1,10 @@
directory = "_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/"
[rooms.xeno]
modules = ["xeno_safe.dmm", "xeno_dead.dmm", "xeno_nest.dmm"]
modules = ["xeno_safe.dmm", "xeno_dead.dmm", "xeno_nest.dmm", "xeno_cult.dmm", "xeno_carp.dmm", "xeno_monkey.dmm"]
[rooms.cargo]
modules = ["cargo_stock.dmm", "cargo_warehouse.dmm", "cargo_secure.dmm"]
modules = ["cargo_stock.dmm", "cargo_warehouse.dmm", "cargo_secure.dmm", "cargo_cult.dmm", "cargo_carp.dmm"]
[rooms.dorm]
modules = ["dorm_classic.dmm", "dorm_cabin.dmm", "dorm_party.dmm"]
+4
View File
@@ -8675,6 +8675,7 @@
#include "modular_skyrat\modules\tarkon\code\misc-fluff\card.dm"
#include "modular_skyrat\modules\tarkon\code\misc-fluff\fax.dm"
#include "modular_skyrat\modules\tarkon\code\misc-fluff\fluff.dm"
#include "modular_skyrat\modules\tarkon\code\misc-fluff\port_tarkon_fluff.dm"
#include "modular_skyrat\modules\tarkon\code\misc-fluff\radio.dm"
#include "modular_skyrat\modules\tarkon\code\misc-fluff\research.dm"
#include "modular_skyrat\modules\tarkon\code\misc-fluff\spawner.dm"
@@ -8926,6 +8927,7 @@
#include "modular_zubbers\code\game\machinery\camera\camera.dm"
#include "modular_zubbers\code\game\machinery\computer\crew.dm"
#include "modular_zubbers\code\game\machinery\computer\orders\order_computer\cook_order_interdyne.dm"
#include "modular_zubbers\code\game\machinery\computer\orders\order_computer\cook_order_tarkon.dm"
#include "modular_zubbers\code\game\machinery\computer\orders\order_items\mining\order_pka.dm"
#include "modular_zubbers\code\game\machinery\doors\door.dm"
#include "modular_zubbers\code\game\machinery\doors\firedoor.dm"
@@ -9217,6 +9219,7 @@
#include "modular_zubbers\code\modules\food_and_drinks\machinery\stove.dm"
#include "modular_zubbers\code\modules\food_and_drinks\recipes\tablecraft\recipes_seafood.dm"
#include "modular_zubbers\code\modules\GAGS\greyscale_configs.dm"
#include "modular_zubbers\code\modules\ghost_wavedefence\wave_def.dm"
#include "modular_zubbers\code\modules\ghostcafe\hilbertshotel_silicon.dm"
#include "modular_zubbers\code\modules\gladiator\code\game\objects\items\gladiator_items.dm"
#include "modular_zubbers\code\modules\goofsec\code\department_guards.dm"
@@ -9554,6 +9557,7 @@
#include "modular_zubbers\code\modules\syndicate_offstation\storage\fireaxe.dm"
#include "modular_zubbers\code\modules\syndicate_offstation\storage\lockers.dm"
#include "modular_zubbers\code\modules\syndicate_offstation\storage\safe.dm"
#include "modular_zubbers\code\modules\tarkon\code\tarkon_loot.dm"
#include "modular_zubbers\code\modules\tarkon\code\clothing\backpack.dm"
#include "modular_zubbers\code\modules\tarkon\code\misc-fluff\research.dm"
#include "modular_zubbers\code\modules\taur_mechanics\serpentine_taur.dm"