From 603db7270ed7b008cb4e875541a31793d23724fd Mon Sep 17 00:00:00 2001
From: FluffMedic <109300046+FluffMedic@users.noreply.github.com>
Date: Wed, 10 Jan 2024 19:42:29 -0500
Subject: [PATCH] Large/Small Content Update (#7523)
---
maps/southern_cross/southern_cross-6.dmm | 332 +-
maps/southern_cross/southern_cross_areas.dm | 4 +
modular_chomp/code/game/machinery/paradox.dm | 137 +
.../objects/items/weapons/melee/shock_maul.dm | 9 +-
modular_chomp/code/modules/mining/tools.dm | 9 +
.../subtypes/humanoid/starhunters/avatar.dm | 219 +
.../subtypes/humanoid/starhunters/base.dm | 157 +
.../subtypes/humanoid/starhunters/food.dm | 115 +
.../subtypes/humanoid/starhunters/hunters.dm | 242 +
.../subtypes/humanoid/starhunters/passive.dm | 120 +
.../humanoid/starhunters/tradercode.dm | 162 +
.../simple_mob/subtypes/slimess/xenobio.dm | 237 +-
modular_chomp/game/machinery/turrets.dm | 63 +-
modular_chomp/icons/mob/starhunters.dmi | Bin 0 -> 7122 bytes
modular_chomp/icons/obj/machines/defense.dmi | Bin 322 -> 727 bytes
modular_chomp/icons/obj/turrets.dmi | Bin 0 -> 182 bytes
.../maps/overmap/space_pois/space_areas.dm | 8 +
.../maps/overmap/space_pois/space_pois.dm | 10 +
.../space_pois/starhuntersarena_70x70.dmm | 5106 +++++++++++++++++
.../space_pois/starhunterstraders_30x30.dmm | 1032 ++++
vorestation.dme | 8 +
21 files changed, 7841 insertions(+), 129 deletions(-)
create mode 100644 modular_chomp/code/game/machinery/paradox.dm
create mode 100644 modular_chomp/code/modules/mining/tools.dm
create mode 100644 modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/avatar.dm
create mode 100644 modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/base.dm
create mode 100644 modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm
create mode 100644 modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/hunters.dm
create mode 100644 modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/passive.dm
create mode 100644 modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/tradercode.dm
create mode 100644 modular_chomp/icons/mob/starhunters.dmi
create mode 100644 modular_chomp/icons/obj/turrets.dmi
create mode 100644 modular_chomp/maps/overmap/space_pois/starhuntersarena_70x70.dmm
create mode 100644 modular_chomp/maps/overmap/space_pois/starhunterstraders_30x30.dmm
diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm
index 71482b4c5e..ce0f0b36ce 100644
--- a/maps/southern_cross/southern_cross-6.dmm
+++ b/maps/southern_cross/southern_cross-6.dmm
@@ -4189,6 +4189,20 @@
},
/turf/simulated/wall/solidrock,
/area/surface/cave/unexplored/normal)
+"jK" = (
+/obj/structure/table/marble,
+/obj/item/weapon/book/manual/anomaly_testing,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
+"jU" = (
+/obj/structure/table/marble,
+/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
+"kx" = (
+/obj/structure/table/marble,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"ky" = (
/turf/simulated/shuttle/floor/voidcraft/external,
/area/surface/cave/explored/deep)
@@ -4220,6 +4234,9 @@
"md" = (
/turf/simulated/wall/solidrock,
/area/surface/cave/unexplored/normal)
+"nr" = (
+/turf/simulated/mineral/sif,
+/area/surface/cave/explored/trader)
"nx" = (
/obj/machinery/light/small{
dir = 1
@@ -4247,6 +4264,10 @@
/obj/effect/zone_divider,
/turf/simulated/mineral/floor/ignore_mapgen/sif,
/area/surface/cave/explored/deep)
+"oO" = (
+/obj/item/weapon/stool,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"pQ" = (
/obj/effect/zone_divider,
/turf/simulated/floor/water{
@@ -4282,6 +4303,11 @@
outdoors = 0
},
/area/surface/outpost/wall/checkpoint)
+"rc" = (
+/obj/structure/simple_door/sandstone,
+/obj/structure/simple_door/sandstone,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"rd" = (
/obj/effect/map_effect/portal/line/side_a,
/turf/simulated/wall/solidrock,
@@ -4290,6 +4316,16 @@
/obj/effect/map_effect/portal/master/side_a/caves_to_wilderness,
/turf/simulated/wall/solidrock,
/area/surface/outpost/wall)
+"st" = (
+/obj/effect/map_effect/portal/line/side_b{
+ dir = 1
+ },
+/turf/simulated/wall/solidrock,
+/area/surface/cave/explored/trader)
+"sH" = (
+/obj/structure/simple_door/sandstone,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"tf" = (
/obj/effect/zone_divider,
/turf/simulated/mineral/floor/ignore_mapgen/sif,
@@ -4320,6 +4356,11 @@
temperature = 243.15
},
/area/surface/outpost/mining_main/cave)
+"xS" = (
+/obj/structure/table/marble,
+/obj/item/weapon/reagent_containers/food/drinks/cans/nukie_lemon,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"zJ" = (
/obj/machinery/light/small{
dir = 8
@@ -4358,6 +4399,11 @@
temperature = 243.15
},
/area/surface/outpost/mining_main/cave)
+"Cv" = (
+/obj/structure/bed,
+/obj/item/weapon/bedsheet/cosmos,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"Cx" = (
/obj/effect/map_effect/portal/line/side_b{
dir = 1
@@ -4409,10 +4455,23 @@
},
/turf/simulated/wall/solidrock,
/area/surface/cave/unexplored/normal)
+"HL" = (
+/obj/structure/table/marble,
+/obj/item/weapon/reagent_containers/food/snacks/breakfast_wrap,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
+"In" = (
+/obj/item/weapon/stool,
+/mob/living/simple_mob/humanoid/starhunter/trader/farmer,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"Jk" = (
/obj/effect/map_effect/portal/line/side_a,
/turf/simulated/wall/solidrock,
/area/surface/outpost/wall/checkpoint)
+"LO" = (
+/turf/simulated/wall/solidrock,
+/area/surface/cave/explored/trader)
"Nm" = (
/obj/effect/map_effect/portal/line/side_b{
dir = 1
@@ -4457,6 +4516,16 @@
temperature = 243.15
},
/area/surface/outpost/research/xenoarcheology/exterior)
+"Qd" = (
+/obj/item/weapon/stool,
+/mob/living/simple_mob/humanoid/starhunter/trader/miner,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
+"Qs" = (
+/obj/structure/table/marble,
+/obj/item/weapon/book/manual/engineering_singularity_safety,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"Qy" = (
/obj/effect/zone_divider,
/turf/simulated/floor/plating{
@@ -4466,6 +4535,9 @@
temperature = 243.15
},
/area/surface/outpost/research/xenoarcheology/exterior)
+"RM" = (
+/turf/simulated/wall/sandstone,
+/area/surface/cave/explored/trader)
"RX" = (
/obj/structure/cable/ender{
icon_state = "1-2";
@@ -4481,6 +4553,11 @@
temperature = 243.15
},
/area/surface/outpost/mining_main/cave)
+"SI" = (
+/obj/structure/table/marble,
+/obj/item/weapon/reagent_containers/food/snacks/bacon_and_eggs,
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"Ug" = (
/obj/effect/map_effect/portal/master/side_a/caves_to_wilderness/river,
/turf/simulated/wall/solidrock,
@@ -4504,6 +4581,9 @@
outdoors = 0
},
/area/surface/cave/explored/normal)
+"YU" = (
+/turf/simulated/floor/concrete,
+/area/surface/cave/explored/trader)
"YY" = (
/obj/machinery/light/small{
dir = 1
@@ -68231,20 +68311,20 @@ ae
ae
ae
ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-md
-Cx
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+rc
+RM
+LO
+st
aa
"}
(248,1,1) = {"
@@ -68489,20 +68569,20 @@ ae
ae
ae
ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-md
-Cx
+RM
+YU
+YU
+YU
+sH
+YU
+YU
+YU
+YU
+YU
+YU
+RM
+LO
+st
aa
"}
(249,1,1) = {"
@@ -68747,20 +68827,20 @@ ae
ae
ae
ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-md
-Cx
+RM
+YU
+YU
+YU
+RM
+YU
+YU
+YU
+YU
+YU
+YU
+RM
+LO
+st
aa
"}
(250,1,1) = {"
@@ -69005,20 +69085,20 @@ ae
ae
ae
ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-md
-md
+RM
+Cv
+Qs
+kx
+RM
+YU
+oO
+xS
+SI
+Qd
+YU
+RM
+LO
+LO
aa
"}
(251,1,1) = {"
@@ -69263,20 +69343,20 @@ ae
ae
ae
ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
+RM
+RM
+RM
+RM
+RM
+YU
+YU
+kx
+kx
+YU
+YU
+RM
+nr
+nr
aa
"}
(252,1,1) = {"
@@ -69521,20 +69601,20 @@ ae
ae
ae
ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
+RM
+Cv
+jK
+kx
+RM
+YU
+In
+HL
+jU
+oO
+YU
+RM
+nr
+nr
aa
"}
(253,1,1) = {"
@@ -69779,20 +69859,20 @@ ae
ae
ae
ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
+RM
+YU
+YU
+YU
+RM
+YU
+YU
+YU
+YU
+YU
+YU
+RM
+nr
+nr
aa
"}
(254,1,1) = {"
@@ -70037,20 +70117,20 @@ ae
ae
ae
ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
+RM
+YU
+YU
+YU
+sH
+YU
+YU
+YU
+YU
+YU
+YU
+RM
+nr
+nr
aa
"}
(255,1,1) = {"
@@ -70295,20 +70375,20 @@ ae
ae
ae
ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+RM
+nr
+nr
aa
"}
(256,1,1) = {"
diff --git a/maps/southern_cross/southern_cross_areas.dm b/maps/southern_cross/southern_cross_areas.dm
index 81b4c9c518..9bf7691fca 100644
--- a/maps/southern_cross/southern_cross_areas.dm
+++ b/maps/southern_cross/southern_cross_areas.dm
@@ -145,6 +145,10 @@
name = "Tunnels"
icon_state = "explored"
+/area/surface/cave/explored/trader
+ name = "Trader Hideout"
+ icon_state = "hideaway"
+
/area/surface/cave/unexplored/normal
name = "Tunnels"
icon_state = "unexplored"
diff --git a/modular_chomp/code/game/machinery/paradox.dm b/modular_chomp/code/game/machinery/paradox.dm
new file mode 100644
index 0000000000..c8e7d71c67
--- /dev/null
+++ b/modular_chomp/code/game/machinery/paradox.dm
@@ -0,0 +1,137 @@
+/obj/machinery/paradoxrift
+ name = "Paradoxical Rift Generator"
+ idle_power_usage = 50000000
+ icon = 'modular_chomp/icons/obj/machines/defense.dmi'
+ icon_state = "paradox"
+ circuit = /obj/item/weapon/circuitboard/paradoxrift
+ var/build_eff = 1
+ var/loot_eff = 1
+ var/chaos_eff = 1
+
+/obj/item/weapon/circuitboard/paradoxrift
+ name = "paradox rift generator circuit"
+ build_path = /obj/machinery/paradoxrift
+ board_type = new /datum/frame/frame_types/machine
+ origin_tech = list(TECH_DATA = 8, TECH_PRECURSOR = 3)
+ req_components = list(
+ /obj/item/stack/cable_coil = 10,
+ /obj/item/weapon/stock_parts/capacitor = 4,
+ /obj/item/weapon/stock_parts/manipulator = 6,
+ /obj/item/weapon/stock_parts/scanning_module = 10)
+
+/obj/machinery/paradoxrift/RefreshParts()
+ ..()
+ var/man_rating = 0
+ var/scan_rating = 0
+ var/cap_rating = 0
+
+ for(var/obj/item/weapon/stock_parts/P in component_parts)
+ if(istype(P, /obj/item/weapon/stock_parts/scanning_module))
+ scan_rating += P.rating
+ if(istype(P, /obj/item/weapon/stock_parts/manipulator))
+ man_rating += P.rating
+ if(istype(P, /obj/item/weapon/stock_parts/capacitor))
+ cap_rating += P.rating
+
+ build_eff = man_rating
+ loot_eff = scan_rating
+ chaos_eff = cap_rating
+
+
+/obj/machinery/paradoxrift/process()
+ if(!(stat & NOPOWER))
+ return
+ else
+ if(prob(3*build_eff))
+ if(prob(6*loot_eff))
+ new /obj/random/greaterportalloot (src.loc)
+ if(prob(30/chaos_eff))
+ new /obj/random/mob/interspace (src.loc)
+ else
+ return
+ else
+ new /obj/random/portalloot (src.loc)
+ if(prob(15/chaos_eff))
+ new /obj/random/mob/interspace (src.loc)
+ else
+ return
+ else
+ return
+
+
+/obj/random/portalloot
+ name = "Random Portal Loot"
+ desc = "This is a random goodie from the void."
+ icon_state = "medicalkit"
+
+/obj/random/portalloot/item_to_spawn()
+ return pick(prob(6);/obj/item/weapon/stock_parts/capacitor/omni,
+ prob(6);/obj/item/weapon/stock_parts/manipulator/omni,
+ prob(6);/obj/item/weapon/stock_parts/scanning_module/omni,
+ prob(6);/obj/item/weapon/stock_parts/matter_bin/omni,
+ prob(6);/obj/item/weapon/stock_parts/micro_laser/omni,
+ prob(6);/obj/item/stack/material/phoron,
+ prob(6);/obj/item/stack/material/deuterium,
+ prob(6);/obj/item/stack/material/tritium,
+ prob(6);/obj/item/stack/material/uranium
+ )
+
+/obj/random/greaterportalloot
+ name = "Random Greater Portal Loot"
+ desc = "This is a random goodie from the void."
+ icon_state = "medicalkit"
+
+/obj/random/greaterportalloot/item_to_spawn()
+ return pick(prob(2);/obj/item/weapon/stock_parts/capacitor/omni,
+ prob(2);/obj/item/weapon/stock_parts/manipulator/omni,
+ prob(2);/obj/item/weapon/stock_parts/scanning_module/omni,
+ prob(2);/obj/item/weapon/stock_parts/matter_bin/omni,
+ prob(2);/obj/item/weapon/stock_parts/micro_laser/omni,
+ prob(2);/obj/item/stack/material/phoron,
+ prob(2);/obj/item/stack/material/deuterium,
+ prob(2);/obj/item/stack/material/tritium,
+ prob(2);/obj/item/stack/material/uranium,
+ prob(6);/obj/item/weapon/rcd,
+ prob(6);/obj/item/weapon/rcd/shipwright,
+ prob(6);/obj/item/weapon/rcd/advanced,
+ prob(6);/obj/vehicle/bike/random,
+ prob(6);/obj/vehicle/train/engine/quadbike/random,
+ prob(6);/obj/vehicle/bike/random,
+ prob(6);/obj/structure/closet/crate/secure/lootsafe/numberlock,
+ prob(6);/obj/structure/closet/crate/secure/loot
+
+ )
+
+/obj/random/mob/interspace
+ name = "Random Interspace"
+ desc = "This is a random mob from space or inbetween space."
+ icon_state = "humanoid"
+
+ mob_faction = "demon"
+ mob_returns_home = 1
+ mob_wander_distance = 7
+
+/obj/random/mob/interspace/item_to_spawn()
+ return pick(prob(5);/mob/living/simple_mob/humanoid/starhunter/trader/miner,
+ prob(5);/mob/living/simple_mob/humanoid/starhunter/trader/reliccollecter,
+ prob(5);/mob/living/simple_mob/humanoid/starhunter/trader/farmer,
+ prob(1);/mob/living/simple_mob/vore/bigdragon,
+ prob(1);/mob/living/simple_mob/humanoid/cultist/magus/rift,
+ prob(15);/mob/living/simple_mob/vore/demonAI,
+ prob(25);/mob/living/simple_mob/shadekin,
+ prob(25);/mob/living/simple_mob/vore/solargrub,
+ prob(15);/mob/living/simple_mob/vore/sect_queen,
+ prob(25);/mob/living/simple_mob/vore/sect_drone,
+ prob(25);/mob/living/simple_mob/vore/aggressive/deathclaw,
+ prob(25);/mob/living/simple_mob/vore/aggressive/corrupthound,
+ prob(15);/mob/living/simple_mob/metroid/juvenile/super,
+ prob(25);/mob/living/simple_mob/animal/space/carp,
+ prob(15);/mob/living/simple_mob/animal/space/carp/large,
+ prob(15);/mob/living/simple_mob/animal/space/carp/large/huge,
+ prob(25);/mob/living/simple_mob/animal/space/carp/puffer,
+ prob(25);/mob/living/simple_mob/animal/space/alien,
+ prob(15);/mob/living/simple_mob/animal/space/alien/sentinel,
+ prob(25);/mob/living/simple_mob/vore/pakkun,
+ prob(25);/mob/living/simple_mob/vore/scel,
+ prob(5);/mob/living/simple_mob/vore/vore_hostile/abyss_lurker
+ )
\ No newline at end of file
diff --git a/modular_chomp/code/game/objects/items/weapons/melee/shock_maul.dm b/modular_chomp/code/game/objects/items/weapons/melee/shock_maul.dm
index d7a396e5d2..e9149e2cd9 100644
--- a/modular_chomp/code/game/objects/items/weapons/melee/shock_maul.dm
+++ b/modular_chomp/code/game/objects/items/weapons/melee/shock_maul.dm
@@ -2,4 +2,11 @@
name = "rubber concussion maul"
desc = "A variant of the concussion maul that staggers and weakens victims. Despite their screams, does no real damage."
damtype = HALLOSS
- launch_force = 0
\ No newline at end of file
+ launch_force = 0
+
+//something borked, trying to fix it
+/obj/item/weapon/melee/shock_maul
+ name = "concussion maul"
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "forcemaul0"
+ item_state = "forcemaul0"
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mining/tools.dm b/modular_chomp/code/modules/mining/tools.dm
new file mode 100644
index 0000000000..7a63003562
--- /dev/null
+++ b/modular_chomp/code/modules/mining/tools.dm
@@ -0,0 +1,9 @@
+/obj/item/weapon/kinetic_crusher/glaive
+ name = "kinetic glaive"
+ icon_state = "crusher-glaive"
+ force = 20
+ detonation_damage = 20 // 40
+ backstab_bonus = 30 // 60
+ reach = 2
+ slot_flags = SLOT_BELT
+ w_class = ITEMSIZE_NORMAL
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/avatar.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/avatar.dm
new file mode 100644
index 0000000000..e74a5bd03c
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/avatar.dm
@@ -0,0 +1,219 @@
+/mob/living/simple_mob/humanoid/starhunter/hunter/clone
+ name = "Avatar Of The Serpent"
+ icon_state = "avatar"
+ health = 15
+ maxHealth = 15
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/starhunter
+ projectiletype = /obj/item/projectile/energy/ninjastar
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar
+ name = "Avatar Of The Serpent"
+ icon_state = "avatar"
+ health = 1000 //50 hits from 20 damage
+ maxHealth = 1000 //50 hits from 20 damage
+ damage_fatigue_mult = 0
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/starhunter
+ special_attack_cooldown = 20 SECONDS
+ special_attack_min_range = 1
+ special_attack_max_range = 7
+ projectiletype = /obj/item/projectile/energy/ninjastar
+ digestable = 0
+ devourable = 0
+ //note to self, expand the loot list later
+ loot_list = list(/obj/item/weapon/storage/belt/holding = 60,
+ /obj/item/clothing/glasses/omni = 60,
+ /obj/item/weapon/kinetic_crusher/glaive = 60,
+ /obj/item/slime_extract/sepia = 60,
+ /obj/item/weapon/circuitboard/defenseonelisk = 60,
+ /obj/item/weapon/circuitboard/paradoxrift = 60,
+ /obj/item/capture_crystal = 60
+ )
+
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/updatehealth()
+ . = ..()
+
+ if(health < maxHealth*0.25)
+ special_attack_cooldown = 5 SECONDS
+ projectiletype = /obj/item/projectile/bullet/ninjaburst
+ else if(health < maxHealth*0.5)
+ special_attack_cooldown = 10 SECONDS
+ projectiletype = /obj/item/projectile/energy/kunai
+ else if (health < maxHealth*0.75)
+ special_attack_cooldown = 15 SECONDS
+ projectiletype = /obj/item/projectile/energy/chakaram
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/do_special_attack(atom/A)
+ if(health < maxHealth*0.4)
+ if(prob(20))
+ lightingstorm(A)
+ if(prob(20))
+ lightingline(A)
+ if(prob(20))
+ lightpillar(A)
+ if(prob(20))
+ clones(A)
+ else
+ rapidfire_windup(A)
+ else if(health < maxHealth*0.7)
+ if(prob(25))
+ lightingstorm(A)
+ if(prob(25))
+ lightingline(A)
+ if(prob(25))
+ lightpillar(A)
+ else
+ rapidfire_windup(A)
+ else
+ if(prob(50))
+ lightingstrike(A)
+ else
+ lightpillar(A)
+
+/obj/item/projectile/energy/kunai //chip damage
+ name = "Energy Kunai"
+ icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin
+ icon_state = "kunai"
+ damage = 5
+ armor_penetration = 65 //Gets into the gaps
+ speed = 2
+ damage_type = BURN
+ check_armour = "laser"
+
+/obj/item/projectile/energy/chakaram //slower but hits harder
+ name = "Energy Chakaram"
+ icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin
+ icon_state = "chakaram"
+ damage = 25
+ armor_penetration = 25 //Gets into the gaps
+ speed = 5
+ damage_type = BURN
+ check_armour = "laser"
+
+/obj/item/projectile/bullet/ninjaburst
+ use_submunitions = 1
+ only_submunitions = 1
+ range = 0
+ embed_chance = 0
+ submunition_spread_max = 2600
+ submunition_spread_min = 150
+ submunitions = list(/obj/item/projectile/energy/kunai = 3, /obj/item/projectile/energy/chakaram = 1, /obj/item/projectile/energy/ninjastar = 3)
+
+/datum/ai_holder/simple_mob/ranged/aggressive/starhunter
+ vision_range = 14
+ closest_distance = 5
+ returns_home = TRUE // Stay close to the base...
+ wander = TRUE // ... but "patrol" a little.
+ intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death.
+ mauling = TRUE
+ call_distance = 0 //Trying to disable this for the mobs
+ retaliate = TRUE
+ hostile = FALSE
+ violent_breakthrough = TRUE
+ respect_alpha = FALSE
+ pointblank = TRUE
+
+/obj/effect/calldown_attack_lighting
+ anchored = TRUE
+ density = FALSE
+ unacidable = TRUE
+ mouse_opacity = 0
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "drop_marker"
+
+/obj/effect/calldown_attack_lighting/Initialize(mapload)
+ ..()
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/effect/calldown_attack_fire/LateInitialize()
+ var/delay = rand(25, 30)
+ spawn(delay-7)
+ lightning_strike(src.loc)
+ spawn(delay)
+ qdel(src)
+
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingstorm(atom/A)
+ var/list/potential_targets = ai_holder.list_targets()
+ for(var/atom/entry in potential_targets)
+ if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
+ potential_targets -= entry
+ if(potential_targets.len)
+ var/iteration = clamp(potential_targets.len, 1, 3)
+ for(var/i = 0, i < iteration, i++)
+ if(!(potential_targets.len))
+ break
+ var/mob/target = pick(potential_targets)
+ potential_targets -= target
+ lightingstormfollow(target)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingstormfollow(atom/target)
+ var/list/bomb_range = block(locate(target.x-6, target.y-6, target.z), locate(target.x+6, target.y+6, target.z))
+ new /obj/effect/calldown_attack(get_turf(target))
+ bomb_range -= get_turf(target)
+ for(var/i = 0, i < 4, i++)
+ var/turf/T = pick(bomb_range)
+ new /obj/effect/calldown_attack_lighting(T)
+ bomb_range -= T
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingline(atom/A)
+ var/list/potential_targets = ai_holder.list_targets()
+ for(var/atom/entry in potential_targets)
+ if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
+ potential_targets -= entry
+ if(potential_targets.len)
+ var/iteration = clamp(potential_targets.len, 1, 3)
+ for(var/i = 0, i < iteration, i++)
+ if(!(potential_targets.len))
+ break
+ var/mob/target = pick(potential_targets)
+ potential_targets -= target
+ lightinglinefollow(target)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightinglinefollow(atom/target)
+ var/alignment = rand(1,2) // 1 for vertical, 2 for horizontal
+ var/list/line_range = list()
+ var/turf/T = get_turf(target)
+ line_range += T
+ for(var/i = 1, i <= 7, i++)
+ switch(alignment)
+ if(1)
+ if(T.x-i > 0)
+ line_range += locate(T.x-i, T.y, T.z)
+ if(T.x+i <= world.maxx)
+ line_range += locate(T.x+i, T.y, T.z)
+ if(2)
+ if(T.y-i > 0)
+ line_range += locate(T.x, T.y-i, T.z)
+ if(T.y+i <= world.maxy)
+ line_range += locate(T.x, T.y+i, T.z)
+ for(var/turf/dropspot in line_range)
+ new /obj/effect/calldown_attack_lighting(dropspot)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/clones(atom/A)
+ new /mob/living/simple_mob/humanoid/starhunter/hunter/clone (src.loc)
+ new /mob/living/simple_mob/humanoid/starhunter/hunter/clone (src.loc)
+ new /mob/living/simple_mob/humanoid/starhunter/hunter/clone (src.loc)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/proc/lightingstrike(atom/A)
+ var/list/nearby_things = range(1, A)
+ var/list/valid_turfs = list()
+
+ // All this work to just go to a non-dense tile.
+ for(var/turf/potential_turf in nearby_things)
+ var/valid_turf = TRUE
+ if(potential_turf.density)
+ continue
+ for(var/atom/movable/AM in potential_turf)
+ if(AM.density)
+ valid_turf = FALSE
+ if(valid_turf)
+ valid_turfs.Add(potential_turf)
+
+ if(!(valid_turfs.len))
+ to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
+ return FALSE
+
+ var/turf/target_turf = pick(valid_turfs)
+
+ new/obj/effect/calldown_attack_lighting(target_turf)
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/base.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/base.dm
new file mode 100644
index 0000000000..c0a18f9f53
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/base.dm
@@ -0,0 +1,157 @@
+/mob/living/simple_mob/humanoid/starhunter
+ name = "Starhunter Initiate"
+ tt_desc = "E Homo sapiens"
+ desc = "You shouldn't be seeing this."
+ icon = 'modular_chomp/icons/mob/starhunters.dmi'
+ icon_state = "sun"
+ icon_living = "sun"
+ icon_dead = "statisgem"
+ icon_gib = "syndicate_gib"
+ taser_kill = 0
+
+ faction = "starhunter"
+ movement_cooldown = 0
+
+ status_flags = 0
+
+ response_help = "pokes"
+ response_disarm = "shoves"
+ response_harm = "hits"
+
+ health = 120 //This may be high, but intend for the combative ones to be on their own.
+ maxHealth = 120
+ harm_intent_damage = 5
+ melee_damage_lower = 17 //machette
+ melee_damage_upper = 17 //beg knife go brrr
+ attack_sharp = 1
+ attack_edge = 1
+ attacktext = list("slashed", "stabbed")
+ projectile_dispersion = 8
+ projectile_accuracy = -20
+ armor = list(melee = 40, bullet = 70, laser = 10, energy = 0, bomb = 50, bio = 100, rad = 100) // Critters are more ortiented torwards melee and bullet
+ ranged_cooldown = 5
+
+ ai_holder_type = /datum/ai_holder/simple_mob/starhunter
+
+ can_be_drop_prey = FALSE
+ pass_flags = PASSTABLE
+ softfall = TRUE
+
+ //spaceproofing things
+ minbodytemp = 0 // Minimum "okay" temperature in kelvin
+ maxbodytemp = 600 // Maximum of above
+
+ min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum'
+ max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum'
+ min_tox = 0 // Phoron min
+ max_tox = 0 // Phoron max
+ min_co2 = 0 // CO2 min
+ max_co2 = 0 // CO2 max
+ min_n2 = 0 // N2 min
+ max_n2 = 0
+
+/datum/ai_holder/simple_mob/starhunter
+ returns_home = TRUE // Stay close to the base...
+ wander = TRUE // ... but "patrol" a little.
+ intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death.
+ can_flee = TRUE // If they're even allowed to flee.
+ flee_when_dying = TRUE // If they should flee when low on health.
+ dying_threshold = 0.2 // How low on health the holder needs to be before fleeing. Defaults to 30% or lower health.
+ mauling = TRUE
+ call_distance = 0 //Trying to disable this for the mobs
+ vision_range = 10
+ retaliate = TRUE
+ hostile = FALSE
+ violent_breakthrough = TRUE
+ respect_alpha = FALSE
+ pointblank = TRUE
+
+/datum/ai_holder/simple_mob/starhunter/aggro
+ hostile = TRUE
+
+//basic aggro stahunters
+/mob/living/simple_mob/humanoid/starhunter/hunter
+ ai_holder_type = /datum/ai_holder/simple_mob/starhunter/aggro
+ special_attack_cooldown = 30 SECONDS
+ special_attack_min_range = 1
+ special_attack_max_range = 7
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/harvester
+ icon_state = "snekdruid"
+ icon_state = "snekdruid"
+ melee_damage_lower = 25
+ melee_damage_upper = 25
+ melee_attack_delay = 2.5 SECOND
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/harvester/handle_special() //wierd movement
+ if(prob(20))
+ step(src, pick(cardinal))
+ ..()
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/ninja
+ icon_state = "suneswift"
+ icon_living = "suneswift"
+ movement_cooldown = -3
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+ melee_attack_delay = 1.5 SECOND
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/ninja/do_special_attack(atom/target)
+ if(prob(50))
+ teleportnompf(target)
+ else
+ smokebomb(target)
+//Special attack procs
+/mob/living/simple_mob/humanoid/starhunter/hunter/proc/teleportnompf(atom/target)
+ var/list/nearby_things = range(1, target)
+ var/list/valid_turfs = list()
+
+ for(var/turf/potential_turf in nearby_things)
+ var/valid_turf = TRUE
+ if(potential_turf.density)
+ continue
+ for(var/atom/movable/AM in potential_turf)
+ if(AM.density)
+ valid_turf = FALSE
+ if(valid_turf)
+ valid_turfs.Add(potential_turf)
+
+ if(!(valid_turfs.len))
+ to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
+ return FALSE
+
+ var/turf/target_turf = pick(valid_turfs)
+
+ forceMove(target_turf)
+
+ var/mob/living/L = target
+ var/obj/belly/belly_dest
+
+ if(L.can_be_drop_prey && L.devourable)
+ L.forceMove(belly_dest)
+ to_chat(target, "[src] materializes around you, as you end up in their [belly_dest]!")
+
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/proc/smokebomb(atom/target)
+ var/list/nearby_things = range(1, target)
+ var/list/valid_turfs = list()
+
+ // All this work to just go to a non-dense tile.
+ for(var/turf/potential_turf in nearby_things)
+ var/valid_turf = TRUE
+ if(potential_turf.density)
+ continue
+ for(var/atom/movable/AM in potential_turf)
+ if(AM.density)
+ valid_turf = FALSE
+ if(valid_turf)
+ valid_turfs.Add(potential_turf)
+
+ if(!(valid_turfs.len))
+ to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
+ return FALSE
+
+ var/turf/target_turf = pick(valid_turfs)
+
+ var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/smoke_spread
+ s2.set_up(5, 1, target_turf)
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm
new file mode 100644
index 0000000000..3e662e7531
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm
@@ -0,0 +1,115 @@
+/mob/living/simple_mob/humanoid/starhunter/hunter/druid
+ vore_active = 1
+ vore_capacity = 6
+ vore_max_size = RESIZE_HUGE
+ vore_min_size = RESIZE_SMALL
+ vore_pounce_chance = 0 // Beat them into crit before eating.
+
+ can_be_drop_prey = FALSE //CHOMP Add
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/druid/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_mob(src)
+ verbs |= /mob/living/simple_mob/proc/animal_mount
+ verbs |= /mob/living/proc/toggle_rider_reins
+ movement_cooldown = 1
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/druid/MouseDrop_T(mob/living/M, mob/living/user)
+ return
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/druid/init_vore()
+ if(!voremob_loaded)
+ return
+ .=..()
+ var/obj/belly/B = vore_selected
+ B.name = "stomach"
+ B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.."
+
+ B.emote_lists[DM_HOLD] = list(
+ "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",
+ "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
+ "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
+
+ B.emote_lists[DM_DIGEST] = list(
+ "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!",
+ "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
+ "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/champion
+ vore_active = 1
+ vore_capacity = 6
+ vore_max_size = RESIZE_HUGE
+ vore_min_size = RESIZE_SMALL
+ vore_pounce_chance = 0 // Beat them into crit before eating.
+
+ can_be_drop_prey = FALSE //CHOMP Add
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/champion/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_mob(src)
+ verbs |= /mob/living/simple_mob/proc/animal_mount
+ verbs |= /mob/living/proc/toggle_rider_reins
+ movement_cooldown = 1
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/champion/MouseDrop_T(mob/living/M, mob/living/user)
+ return
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/champion/init_vore()
+ if(!voremob_loaded)
+ return
+ .=..()
+ var/obj/belly/B = vore_selected
+ B.name = "stomach"
+ B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.."
+
+ B.emote_lists[DM_HOLD] = list(
+ "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",
+ "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
+ "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
+
+ B.emote_lists[DM_DIGEST] = list(
+ "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!",
+ "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
+ "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar
+ vore_active = 1
+ vore_capacity = 6
+ vore_max_size = RESIZE_HUGE
+ vore_min_size = RESIZE_SMALL
+ vore_pounce_chance = 0 // Beat them into crit before eating.
+ vore_icons = SA_ICON_LIVING
+
+ can_be_drop_prey = FALSE //CHOMP Add
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_mob(src)
+ verbs |= /mob/living/simple_mob/proc/animal_mount
+ verbs |= /mob/living/proc/toggle_rider_reins
+ movement_cooldown = 1
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/MouseDrop_T(mob/living/M, mob/living/user)
+ return
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/init_vore()
+ if(!voremob_loaded)
+ return
+ .=..()
+ var/obj/belly/B = vore_selected
+ B.name = "stomach"
+ B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.."
+
+ B.emote_lists[DM_HOLD] = list(
+ "Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",
+ "Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
+ "Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
+
+ B.emote_lists[DM_DIGEST] = list(
+ "Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!",
+ "The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
+ "Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,)
+
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/hunters.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/hunters.dm
new file mode 100644
index 0000000000..5df7bff26e
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/hunters.dm
@@ -0,0 +1,242 @@
+//beg critters
+//kitsune is bullet hell esque in a traditonal sense
+//naga does a bunch of spawning and CoC
+//This are both training for the bigger dude I'll make later
+/mob/living/simple_mob/humanoid/starhunter/hunter/druid
+ name = "Starhunter Druid"
+ health = 200 //20 hits from 20 damage
+ maxHealth = 200 //20 hits from 20 damage
+ damage_fatigue_mult = 0
+ icon_state = "snekdruid"
+ icon_living = "snekdruid"
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/druid/do_special_attack(atom/A)
+ if(prob(50))
+ lightpillar(A)
+ else
+ fire_lines(A)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/bullet_act(obj/item/projectile/P)
+ if(istype(P, /obj/item/projectile/energy/lightpillar))
+ visible_message("[P] seems ineffective!.") //immune to their own attack
+ else
+ ..()
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/proc/lightpillar(atom/A)
+ var/list/potential_targets = ai_holder.list_targets()
+ for(var/atom/entry in potential_targets)
+ if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
+ potential_targets -= entry
+ if(potential_targets.len)
+ var/iteration = clamp(potential_targets.len, 1, 3)
+ for(var/i = 0, i < iteration, i++)
+ if(!(potential_targets.len))
+ break
+ var/mob/target = pick(potential_targets)
+ potential_targets -= target
+ spawn_lightpillar(target)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/proc/spawn_lightpillar(atom/target)
+ var/list/bomb_range = block(locate(target.x-4, target.y-4, target.z), locate(target.x+4, target.y+4, target.z))
+ new /obj/effect/calldown_attack(get_turf(target))
+ bomb_range -= get_turf(target)
+ for(var/i = 0, i < 4, i++)
+ var/turf/T = pick(bomb_range)
+ new /mob/living/simple_mob/humanoid/starhunter/hunter/prop(T)
+ bomb_range -= T
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/prop //This ain't a mob to spawn, but something apart of other mobs attacks and self deletes
+ health = 1000
+ maxHealth = 1000
+ projectile_dispersion = 0
+ projectile_accuracy = 100
+ armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100)
+ projectiletype = /obj/item/projectile/energy/lightpillar
+ ranged_attack_delay = 1.5 SECONDS
+ icon_state = "prism"
+ icon_living = "prism"
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/prop/ranged_pre_animation(atom/A)
+ Beam(get_turf(A), icon_state = "sniper_beam", time = 2 SECONDS, maxdistance = 10)
+ . = ..()
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/prop/shoot_target(atom/A)
+ set waitfor = FALSE
+
+ if(!istype(A) || QDELETED(A))
+ return
+
+ setClickCooldown(get_attack_speed())
+
+ face_atom(A)
+
+ var/atom/orig_targ = A
+
+ if(ranged_attack_delay)
+ A = get_turf(orig_targ)
+ ranged_pre_animation(A)
+ handle_attack_delay(A, ranged_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false.
+
+ if(needs_reload)
+ if(reload_count >= reload_max)
+ try_reload()
+ return FALSE
+
+ /*
+ * CHOMP Addition: This section here is (duplicated) special snowflake code because sniper does not call parent. Basically, this is a non-stupid version of the above intended for ranged mobs.
+ * ranged_attack_delay is stupid because it sleeps the entire mob.
+ * This new ranged_cooldown_time is smarter in the sense that it is an internalized timer. Try not to confuse the names.
+ */
+ if(ranged_cooldown_time) //If you have a non-zero number in a mob's variables, this pattern begins.
+ if(ranged_cooldown <= world.time) //Further down, a timer keeps adding to the ranged_cooldown variable automatically.
+ visible_message("\The [src] fires at \the [A]!") //Leave notice of shooting.
+ shoot(A) //Perform the shoot action
+ if(casingtype) //If the mob is designated to leave casings...
+ new casingtype(loc) //... leave the casing.
+ ranged_cooldown = world.time + ranged_cooldown_time + ((injury_level / 2) SECONDS) //Special addition here. This is a timer. Keeping updating the time after shooting. Add that ranged cooldown time specified in the mob to the world time.
+ qdel(src)
+ return TRUE //End these commands here.
+ // CHOMPAddition End
+
+ visible_message("\The [src] fires at \the [orig_targ]!")
+ shoot(A)
+ if(casingtype)
+ new casingtype(loc)
+
+ if(ranged_attack_delay)
+ ranged_post_animation(A)
+
+ return TRUE
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/proc/fire_lines(atom/A)
+ var/list/potential_targets = ai_holder.list_targets()
+ for(var/atom/entry in potential_targets)
+ if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
+ potential_targets -= entry
+ if(potential_targets.len)
+ var/iteration = clamp(potential_targets.len, 1, 3)
+ for(var/i = 0, i < iteration, i++)
+ if(!(potential_targets.len))
+ break
+ var/mob/target = pick(potential_targets)
+ potential_targets -= target
+ spawn_fire(target)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/proc/spawn_fire(atom/target)
+ var/alignment = rand(1,2) // 1 for vertical, 2 for horizontal
+ var/list/line_range = list()
+ var/turf/T = get_turf(target)
+ line_range += T
+ for(var/i = 1, i <= 7, i++)
+ switch(alignment)
+ if(1)
+ if(T.x-i > 0)
+ line_range += locate(T.x-i, T.y, T.z)
+ if(T.x+i <= world.maxx)
+ line_range += locate(T.x+i, T.y, T.z)
+ if(2)
+ if(T.y-i > 0)
+ line_range += locate(T.x, T.y-i, T.z)
+ if(T.y+i <= world.maxy)
+ line_range += locate(T.x, T.y+i, T.z)
+ for(var/turf/dropspot in line_range)
+ new /obj/effect/calldown_attack_fire(dropspot)
+
+
+/obj/effect/calldown_attack_fire
+ anchored = TRUE
+ density = FALSE
+ unacidable = TRUE
+ mouse_opacity = 0
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "drop_marker"
+
+/obj/effect/calldown_attack_fire/Initialize(mapload)
+ ..()
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/effect/calldown_attack_fire/LateInitialize()
+ var/delay = rand(25, 30)
+ spawn(delay-7)
+ new /obj/fire(src.loc)
+ spawn(delay)
+ qdel(src)
+
+
+//Kitsune Stuff
+/mob/living/simple_mob/humanoid/starhunter/hunter/champion
+ name = "Starhunter Starweilder"
+ health = 200 //10 hits from 20 damage
+ maxHealth = 200
+ damage_fatigue_mult = 0
+ projectiletype = /obj/item/projectile/energy/ninjastar
+ icon_state = "suneswift"
+ icon_living = "suneswift"
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/champion/do_special_attack(atom/A)
+ if(prob(50))
+ bullethell(A)
+ else
+ rapidfire_windup(A)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/proc/bullethell(atom/A)
+ set waitfor = FALSE
+
+ var/sd = dir2angle(dir)
+ var/list/offsets = list(45, 45, 20, 10)
+
+ for(var/i = 0, i<4, i++)
+ for(var/j = 0, j <4, j++)
+ var/obj/item/projectile/energy/slow_orb/shot = new(get_turf(src))
+ shot.firer = src
+ shot.fire(sd)
+ sd += 90
+ sd += pick(offsets)
+ sleep(20)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/proc/rapidfire_windup(atom/A)
+ var/list/potential_targets = ai_holder.list_targets()
+ for(var/atom/entry in potential_targets)
+ if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
+ potential_targets -= entry
+ if(potential_targets.len)
+ var/iteration = clamp(potential_targets.len, 1, 3)
+ for(var/i = 0, i < iteration, i++)
+ if(!(potential_targets.len))
+ break
+ var/mob/target = pick(potential_targets)
+ potential_targets -= target
+ rapidfire(target)
+
+/mob/living/simple_mob/humanoid/starhunter/hunter/proc/rapidfire(atom/target)
+ var/list/bomb_range = block(locate(target.x-4, target.y-4, target.z), locate(target.x+4, target.y+4, target.z))
+ var/obj/item/projectile/P = new /obj/item/projectile/energy/ninjastar(get_turf(src))
+ bomb_range -= get_turf(target)
+ for(var/i = 0, i < 4, i++)
+ var/turf/T = pick(bomb_range)
+ P.launch_projectile(target, BP_TORSO, src)
+ bomb_range -= T
+
+
+/obj/item/projectile/energy/lightpillar
+ name = "Light Pillar"
+ icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin
+ icon_state = "lightpillar"
+ damage = 30 //DIVINE JUDGMENT
+ armor_penetration = 50 //DIVINE JUDGMENT
+ light_range = 5
+ light_power = 5
+ damage_type = BURN
+ check_armour = "laser"
+ light_color = "#FF6600"
+ range = 7
+ speed = 13
+
+/obj/item/projectile/energy/ninjastar
+ name = "Energy Star"
+ icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin
+ icon_state = "ninjastar"
+ damage = 15
+ armor_penetration = 25 //Gets into the gaps
+ damage_type = BURN
+ check_armour = "laser"
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/passive.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/passive.dm
new file mode 100644
index 0000000000..9f8eb584ef
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/passive.dm
@@ -0,0 +1,120 @@
+/mob/living/simple_mob/humanoid/starhunter/trader/weaponsmith
+ icon_state = "sunetrader"
+ products = list(/obj/item/weapon/gun/energy/sickshot = 5,
+ /obj/item/weapon/material/twohanded/fireaxe/scythe = 3,
+ /obj/item/weapon/material/twohanded/spear/lance = 3,
+ /obj/item/weapon/beartrap = 12,
+ /obj/item/weapon/material/barbedwire = 12,
+ /obj/item/weapon/material/sword/battleaxe = 3
+
+ ) // For each, use the following pattern:
+
+ premium = list(/obj/item/weapon/gun/energy/maghowitzer) //This may be a mistake
+
+ prices = list(/obj/item/weapon/gun/energy/maghowitzer = 8000,
+ /obj/item/weapon/gun/energy/sickshot = 800,
+ /obj/item/weapon/material/twohanded/fireaxe/scythe = 400,
+ /obj/item/weapon/material/twohanded/spear/lance = 400,
+ /obj/item/weapon/beartrap = 80,
+ /obj/item/weapon/material/barbedwire = 80,
+ /obj/item/weapon/material/sword/battleaxe = 400
+ )
+
+/mob/living/simple_mob/humanoid/starhunter/trader/reliccollecter
+ icon_state = "snektrader"
+ products = list(/obj/item/clothing/head/helmet/combat/crusader = 3,
+ /obj/item/clothing/suit/armor/combat/crusader = 3,
+ /obj/item/clothing/head/culthood = 3,
+ /obj/item/clothing/suit/cultrobes = 3,
+ /obj/item/clothing/head/helmet/space/cult = 3,
+ /obj/item/clothing/suit/space/cult = 3,
+ /obj/item/device/soulstone = 8,
+ /obj/item/clothing/glasses/monocoole = 3,
+ /obj/item/weapon/storage/belt/holding = 1,
+ /obj/item/clothing/gloves/regen = 1
+ ) // For each, use the following pattern:
+
+ premium = list(/obj/item/clothing/glasses/omni) //I am unsure why but this feels right
+
+ prices = list(/obj/item/clothing/head/helmet/combat/crusader = 600,
+ /obj/item/clothing/suit/armor/combat/crusader = 600,
+ /obj/item/clothing/head/culthood = 600,
+ /obj/item/clothing/suit/cultrobes = 600,
+ /obj/item/clothing/head/helmet/space/cult = 600,
+ /obj/item/clothing/suit/space/cult = 600,
+ /obj/item/device/soulstone = 80,
+ /obj/item/clothing/glasses/monocoole = 1200,
+ /obj/item/weapon/storage/belt/holding = 1800,
+ /obj/item/clothing/gloves/regen = 1800,
+ /obj/item/clothing/glasses/omni = 2600
+ )
+
+/mob/living/simple_mob/humanoid/starhunter/trader/miner
+ icon_state = "snektrader"
+ products = list(/obj/item/weapon/kinetic_crusher/glaive = 5,
+ /obj/item/weapon/kinetic_crusher = 3,
+ /obj/item/weapon/gun/energy/mininglaser = 3,
+ /obj/item/weapon/melee/shock_maul = 3,
+ /obj/item/stack/material/phoron = 50,
+ /obj/item/stack/material/uranium = 50,
+ /obj/item/stack/material/tritium = 50,
+ /obj/item/stack/material/deuterium = 50,
+ /obj/item/stack/material/bronze = 50,
+ /obj/item/weapon/circuitboard/paradoxrift = 3
+ ) // For each, use the following pattern:
+
+ premium = list(/obj/item/weapon/circuitboard/defenseonelisk) // No specified amount = only one in stock
+
+ prices = list(/obj/item/weapon/kinetic_crusher/glaive = 600,
+ /obj/item/weapon/kinetic_crusher = 600,
+ /obj/item/weapon/gun/energy/mininglaser = 800,
+ /obj/item/weapon/melee/shock_maul = 600,
+ /obj/item/stack/material/phoron = 12,
+ /obj/item/stack/material/uranium = 12,
+ /obj/item/stack/material/tritium = 12,
+ /obj/item/stack/material/deuterium = 12,
+ /obj/item/stack/material/bronze = 12,
+ /obj/item/weapon/circuitboard/paradoxrift = 2400,
+ /obj/item/weapon/circuitboard/defenseonelisk = 5000
+ )
+
+/mob/living/simple_mob/humanoid/starhunter/trader/farmer
+ icon_state = "sunetrader"
+ products = list(/obj/item/slime_extract/sepia =3,
+ /obj/item/slime_extract/ruby = 3,
+ /obj/item/slime_extract/bluespace = 3,
+ /obj/item/slime_extract/oil = 3,
+ /obj/item/slime_extract/sapphire = 3,
+ /obj/item/slime_extract/emerald = 3,
+ /obj/item/seeds/shrinkshroom = 12,
+ /obj/item/seeds/megashroom = 12,
+ /obj/item/seeds/pitcherseed = 6,
+ /obj/item/seeds/deathberryseed = 6,
+ /obj/item/seeds/ambrosiainfernusseed = 6,
+ /obj/item/seeds/thaadra = 6,
+ /obj/item/seeds/icepepperseed = 6,
+ /obj/item/seeds/jurlmah = 6,
+ /obj/item/seeds/amauri = 6,
+ /obj/item/seeds/gelthi = 6,
+ /obj/item/seeds/vale = 6
+ ) // For each, use the following pattern:
+
+ premium = list() // No specified amount = only one in stock
+
+ prices = list(/obj/item/slime_extract/sepia = 2500,
+ /obj/item/slime_extract/ruby = 2250,
+ /obj/item/slime_extract/bluespace = 2250,
+ /obj/item/slime_extract/oil = 2250,
+ /obj/item/slime_extract/sapphire = 2250,
+ /obj/item/slime_extract/emerald = 2250,
+ /obj/item/seeds/shrinkshroom = 50,
+ /obj/item/seeds/megashroom = 50,
+ /obj/item/seeds/pitcherseed = 125,
+ /obj/item/seeds/deathberryseed = 125,
+ /obj/item/seeds/ambrosiainfernusseed = 125,
+ /obj/item/seeds/thaadra = 125,
+ /obj/item/seeds/icepepperseed = 125,
+ /obj/item/seeds/jurlmah = 125,
+ /obj/item/seeds/amauri = 125,
+ /obj/item/seeds/gelthi = 125,
+ /obj/item/seeds/vale = 125)
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/tradercode.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/tradercode.dm
new file mode 100644
index 0000000000..e848cdd373
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/tradercode.dm
@@ -0,0 +1,162 @@
+/mob/living/simple_mob/humanoid/starhunter/trader
+ var/vend_ready = 1 //Are we ready to vend?? Is it time??
+ var/vend_delay = 10 //How long does it take to vend?
+ var/categories = CAT_NORMAL // Bitmask of cats we're currently showing
+ var/datum/stored_item/vending_product/currently_vending = null // What we're requesting payment for right now
+ var/vending_sound = "machines/vending/vending_drop.ogg"
+
+ /*
+ Variables used to initialize the product list
+ These are used for initialization only, and so are optional if
+ product_records is specified
+ */
+ var/list/products = list() // For each, use the following pattern:
+ var/list/contraband = list() // list(/type/path = amount,/type/path2 = amount2)
+ var/list/premium = list() // No specified amount = only one in stock
+ /// Set automatically, allows coin use
+ var/has_premium = FALSE
+ var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price.
+ /// Set automatically, enables pricing
+ var/has_prices = FALSE
+ // This one is used for refill cartridge use.
+ var/list/refill = list() // For each, use the following pattern:
+ // Enables refilling with appropriate cartridges
+ var/refillable = TRUE
+ var/obj/item/weapon/coin/coin
+
+
+/mob/living/simple_mob/humanoid/starhunter/trader/Initialize()
+ . = ..()
+ build_inventory()
+
+
+/mob/living/simple_mob/humanoid/starhunter/trader/proc/build_inventory()
+ var/list/all_products = list(
+ list(products, CAT_NORMAL),
+ list(contraband, CAT_HIDDEN),
+ list(premium, CAT_COIN))
+
+ for(var/current_list in all_products)
+ var/category = current_list[2]
+
+ for(var/entry in current_list[1])
+ var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry)
+
+ product.price = (entry in prices) ? prices[entry] : 0
+ product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
+ product.category = category
+
+ GLOB.vending_products[entry] = 1
+
+ if(LAZYLEN(prices))
+ has_prices = TRUE
+ if(LAZYLEN(premium))
+ has_premium = TRUE
+
+
+ LAZYCLEARLIST(products)
+ LAZYCLEARLIST(contraband)
+ LAZYCLEARLIST(premium)
+ LAZYCLEARLIST(prices)
+ all_products.Cut()
+
+
+/mob/living/simple_mob/humanoid/starhunter/trader/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ var/obj/item/weapon/card/id/I = W.GetID()
+
+ if(I || istype(W, /obj/item/weapon/spacecash))
+ attack_hand(user)
+ return
+ else if(istype(W, /obj/item/weapon/coin) && has_premium)
+ user.drop_item()
+ W.forceMove(src)
+ coin = W
+ categories |= CAT_COIN
+ to_chat(user, "You insert \the [W] into \the [src].")
+ SStgui.update_uis(src)
+ return
+
+
+/mob/living/simple_mob/humanoid/starhunter/trader/proc/pay_with_cash(var/obj/item/weapon/spacecash/cashmoney, mob/user)
+ if(currently_vending.price > cashmoney.worth)
+
+ // This is not a status display message, since it's something the character
+ // themselves is meant to see BEFORE putting the money in
+ to_chat(usr, "\icon[cashmoney][bicon(cashmoney)] That is not enough money.")
+ return 0
+
+ if(istype(cashmoney, /obj/item/weapon/spacecash))
+
+ visible_message("\The [usr] inserts some cash into \the [src].")
+ cashmoney.worth -= currently_vending.price
+
+ if(cashmoney.worth <= 0)
+ usr.drop_from_inventory(cashmoney)
+ qdel(cashmoney)
+ else
+ cashmoney.update_icon()
+
+ // Vending machines have no idea who paid with cash
+ credit_purchase("(cash)")
+ return 1
+
+/mob/living/simple_mob/humanoid/starhunter/trader/proc/credit_purchase(var/target as text)
+ vendor_account.money += currently_vending.price
+
+ var/datum/transaction/T = new()
+ T.target_name = target
+ T.purpose = "Purchase of [currently_vending.item_name]"
+ T.amount = "[currently_vending.price]"
+ T.source_terminal = name
+ T.date = current_date_string
+ T.time = stationtime2text()
+ vendor_account.transaction_log.Add(T)
+
+/mob/living/simple_mob/humanoid/starhunter/trader/tgui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Vending", name)
+ ui.open()
+
+/mob/living/simple_mob/humanoid/starhunter/trader/tgui_data(mob/user)
+ var/list/data = list()
+ var/list/listed_products = list()
+
+ data["chargesMoney"] = has_prices ? TRUE : FALSE
+
+ data["products"] = listed_products
+
+ if(coin)
+ data["coin"] = coin.name
+ else
+ data["coin"] = FALSE
+
+ if(currently_vending)
+ data["actively_vending"] = currently_vending.item_name
+ else
+ data["actively_vending"] = null
+
+ var/mob/living/carbon/human/H
+ var/obj/item/weapon/card/id/C
+
+ data["guestNotice"] = "Please present cash.";
+ data["userMoney"] = 0
+ data["user"] = null
+ if(ishuman(user))
+ H = user
+ C = H.GetIdCard()
+ var/obj/item/weapon/spacecash/S = H.get_active_hand()
+ if(istype(S))
+ data["userMoney"] = S.worth
+ data["guestNotice"] = "Accepting [S.initial_name]. You have: [S.worth]₮."
+ else if(istype(C))
+ var/datum/money_account/A = get_account(C.associated_account_number)
+ if(istype(A))
+ data["user"] = list()
+ data["user"]["name"] = A.owner_name
+ data["userMoney"] = A.money
+ data["user"]["job"] = (istype(C) && C.rank) ? C.rank : "No Job"
+ else
+ data["guestNotice"] = "Unlinked ID detected. Present cash to pay.";
+
+ return data
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/xenobio.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/xenobio.dm
index 49b6f8c04a..e6100344fa 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/xenobio.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/xenobio.dm
@@ -1,2 +1,237 @@
/mob/living/simple_mob/slime/xenobio/yellow
- projectiletype = /obj/item/projectile/energy/mob/electric_spider
\ No newline at end of file
+ projectiletype = /obj/item/projectile/energy/mob/electric_spider
+
+/mob/living/simple_mob/slime/xenobio/sepia
+ desc = "This slime is rather unknown and strange."
+ color = "#968473"
+ slime_color = "sepia"
+ coretype = /obj/item/slime_extract/sepia
+ reagent_injected = "stoxin"
+
+ mutation_chance = 100
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/sepia,
+ /mob/living/simple_mob/slime/xenobio/oil,
+ /mob/living/simple_mob/slime/xenobio/green,
+ /mob/living/simple_mob/slime/xenobio/ruby
+ )
+
+/obj/item/slime_extract/sepia
+ name = "sepia slime extract"
+ icon_state = "sepia slime extract"
+ description_info = "Who knows what will happen."
+ slime_type = /mob/living/simple_mob/slime/xenobio/sepia
+
+/decl/chemical_reaction/instant/slime/senseenhancer
+ name = "Slime Sense Enhancer"
+ id = "sepia_sh"
+ result = "senseenhancer"
+ required_reagents = list("phoron" = 5)
+ result_amount = 30
+ required = /obj/item/slime_extract/sepia
+
+/decl/chemical_reaction/instant/slime/secertslime
+ name = "Secert Slime "
+ id = "sepia_swapm"
+ result = "change_drug_male"
+ required_reagents = list("water" = 1, "blood" = 1, "phoron" = 3)
+ result_amount = 1
+ required = /obj/item/slime_extract/sepia
+
+/decl/chemical_reaction/instant/slime/secertslime/on_reaction(var/datum/reagents/holder)
+ holder.my_atom.visible_message("Infused with the mixture, the core begins to quiver and grow, and soon a new baby slime emerges from it!")
+ new /mob/living/simple_mob/slime/xenobio/redspace(get_turf(holder.my_atom))
+ ..()
+
+/decl/chemical_reaction/instant/slime/genderswapf
+ name = "Slime Change F"
+ id = "sepia_swapf"
+ result = "change_drug_female"
+ required_reagents = list("water" = 5)
+ result_amount = 30
+ required = /obj/item/slime_extract/sepia
+
+/decl/chemical_reaction/instant/slime/genderswapm
+ name = "Slime Change M"
+ id = "sepia_swapf"
+ result = "change_drug_male"
+ required_reagents = list("blood" = 5)
+ result_amount = 30
+ required = /obj/item/slime_extract/sepia
+
+/decl/chemical_reaction/instant/slime/sepia_new_slime
+ name = "Slime Spawn"
+ id = "m_sepia_spawn"
+ result = null
+ required_reagents = list("slimejelly" = 5)
+ result_amount = 1
+ required = /obj/item/slime_extract/sepia
+
+/decl/chemical_reaction/instant/slime/sepia_new_slime/on_reaction(var/datum/reagents/holder)
+ holder.my_atom.visible_message("Infused with slime jelly, the core begins to quiver and grow, and soon a new baby slime emerges from it!")
+ new /mob/living/simple_mob/slime/xenobio/sepia(get_turf(holder.my_atom))
+ ..()
+
+
+
+/mob/living/simple_mob/slime/xenobio/redspace
+ desc = "This slime is rather unknown and strange."
+ color = "#A50021"
+ slime_color = "redspace"
+ coretype = /obj/item/slime_extract/redspace
+ reagent_injected = "mindbreaker"
+
+ mutation_chance = 0
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark,
+ /mob/living/simple_mob/slime/xenobio/redspace,
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/plague
+ )
+
+/obj/item/slime_extract/redspace
+ name = "redspace slime extract"
+ icon_state = "ruby slime extract"
+ description_info = "Who knows what will happen."
+ slime_type = /mob/living/simple_mob/slime/xenobio/redspace
+
+
+/decl/chemical_reaction/instant/slime/redspace_fire
+ name = "Slime Living Fire"
+ id = "m_liquid_fire"
+ result = "neoliquidfire"
+ required_reagents = list("phoron" = 5)
+ result_amount = 30
+ required = /obj/item/slime_extract/redspace
+
+/decl/chemical_reaction/instant/slime/soulstone
+ name = "Slime Soulstone"
+ id = "m_redspace_soulstone"
+ required_reagents = list("blood" = 5)
+ result_amount = 1
+ required = /obj/item/slime_extract/redspace
+
+/decl/chemical_reaction/instant/slime/soulstone/on_reaction(var/datum/reagents/holder)
+ new /obj/item/device/soulstone(get_turf(holder.my_atom))
+ ..()
+
+/decl/chemical_reaction/instant/slime/obj/item/slime_extract/redspace_smoke
+ name = "Slime Smoke"
+ id = "m_redspace_smoke"
+ required_reagents = list("water" = 5)
+ result_amount = 1
+ required = /obj/item/slime_extract/redspace
+
+/decl/chemical_reaction/instant/slime/redspace_smoke/on_reaction(var/datum/reagents/holder)
+ var/location = get_turf(holder.my_atom)
+ var/datum/effect/effect/system/smoke_spread/chem/S = new /datum/effect/effect/system/smoke_spread/chem
+ S.attach(location)
+ S.set_up(holder, 120, 0, location)
+ playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
+ spawn(0)
+ S.start()
+ ..()
+
+
+/decl/chemical_reaction/instant/slime/slime_mindbreaker
+ name = "Slime Pyrotoxin"
+ id = "m_redspace_mindbreaker"
+ result = "mindbreaker"
+ required_reagents = list("slimejelly" = 5)
+ result_amount = 30
+ required = /obj/item/slime_extract/redspace
+
+
+/mob/living/simple_mob/slime/xenobio/dark
+ desc = "This slime is rather unknown and strange."
+ color = "#080808"
+ slime_color = "dark"
+ coretype = /obj/item/slime_extract/dark
+ reagent_injected = "potassium_chlorophoride"
+
+ mutation_chance = 0
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark,
+ /mob/living/simple_mob/slime/xenobio/redspace,
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/plague
+ )
+
+/obj/item/slime_extract/dark
+ name = "dark slime extract"
+ icon_state = "emerald slime extract"
+ description_info = "A strange extract, seems inert. Maybe something strange can be done one day"
+ slime_type = /mob/living/simple_mob/slime/xenobio/dark
+
+/decl/chemical_reaction/instant/slime/dark_neofire
+ name = "Slime Healing Liquid"
+ id = "m_liquid_healing"
+ result = "healing_nanites"
+ required_reagents = list("neoliquidfire" = 5)
+ result_amount = 30
+ required = /obj/item/slime_extract/dark
+
+/decl/chemical_reaction/instant/slime/dark_liquidfire
+ name = "Slime Secert Guard"
+ id = "m_slime_guardian"
+ required_reagents = list("liquidfire" = 5)
+ result_amount = 1
+ required = /obj/item/slime_extract/dark
+
+
+/decl/chemical_reaction/instant/slime/dark_liquidfire/on_reaction(var/datum/reagents/holder)
+ for(var/mob/living/L in range(1, holder.my_atom))
+ L.add_modifier(/datum/modifier/feysight, 10 MINUTES, src)
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/plague
+ desc = "This slime is rather unknown and strange."
+ color = "#A50021"
+ slime_color = "plague"
+ coretype = /obj/item/slime_extract/plague
+
+ mutation_chance = 0
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark,
+ /mob/living/simple_mob/slime/xenobio/redspace,
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/plague
+ )
+
+/obj/item/slime_extract/plague
+ name = "plague slime extract"
+ icon_state = "emerald slime extract"
+ description_info = "Who knows what will happen."
+ slime_type = /mob/living/simple_mob/slime/xenobio/plague
+
+/decl/chemical_reaction/instant/slime/plague_toxin
+ name = "Slime Living Fire"
+ id = "m_plague_toxin"
+ result = "neurophage_nanites"
+ required_reagents = list("phoron" = 5)
+ result_amount = 30
+ required = /obj/item/slime_extract/plague
+
+
+/decl/chemical_reaction/instant/slime/virusdish
+ name = "Virus dish"
+ id = "m_plague_dish"
+ required_reagents = list("blood" = 5)
+ result_amount = 1
+ required = /obj/item/slime_extract/plague
+
+/decl/chemical_reaction/instant/slime/virusdish/on_reaction(var/datum/reagents/holder)
+ new /obj/item/weapon/virusdish(get_turf(holder.my_atom))
+ ..()
+
+/decl/chemical_reaction/instant/slime/obj/item/slime_extract/plague_jelly
+ name = "Slime Smoke"
+ id = "m_slimejelly_alt"
+ result = "slimejelly"
+ required_reagents = list("water" = 5)
+ result_amount = 30
+ required = /obj/item/slime_extract/plague
\ No newline at end of file
diff --git a/modular_chomp/game/machinery/turrets.dm b/modular_chomp/game/machinery/turrets.dm
index df6267f82e..1554ffefb1 100644
--- a/modular_chomp/game/machinery/turrets.dm
+++ b/modular_chomp/game/machinery/turrets.dm
@@ -20,4 +20,65 @@
req_one_access = list(access_heads)
installation = /obj/item/weapon/gun/energy/gun/burst
health = 125
- maxhealth = 125
\ No newline at end of file
+ maxhealth = 125
+
+
+/obj/machinery/porta_turret/obelisk
+ name = "defense obelisk"
+ catalogue_data = list(/datum/category_item/catalogue/technology/turret)
+ anchored = TRUE
+
+ circuit = /obj/item/weapon/circuitboard/defenseonelisk
+
+ catalogue_data = null
+
+ turret_type = "obelisk"
+ icon_color = "obelisk_blue"
+ lethal_icon_color = "oblisk_blue"
+
+ icon = 'modular_chomp/icons/obj/machines/defense.dmi'
+ icon_state = "obelisk"
+
+ density = TRUE
+ use_power = TRUE //this turret uses and requires power
+ idle_power_usage = 50000 //when inactive, this turret takes up constant 50 Equipment power
+ active_power_usage = 150000 //when active, this turret takes up constant 300 Equipment power
+ power_channel = EQUIP //drains power from the EQUIPMENT channel
+ req_one_access = list(access_heads)
+ blocks_emissive = EMISSIVE_BLOCK_UNIQUE
+
+
+ health = 300 //the turret's health
+ maxhealth = 300 //turrets maximal health.
+ auto_repair = TRUE //if 1 the turret slowly repairs itself.
+
+ installation = /obj/item/weapon/gun/energy/pulse_rifle
+ reqpower = 50000
+ turret_type = "normal"
+ icon_color = "blue"
+ lethal_icon_color = "blue"
+
+ shot_delay = 0.5 SECONDS //This will delete foes
+
+ targetting_is_configurable = FALSE
+ check_arrest = TRUE
+ check_records = TRUE
+ check_weapons = FALSE
+ check_access = FALSE
+ check_anomalies = TRUE
+ check_synth = FALSE
+ check_all = FALSE
+ ailock = TRUE
+
+ lethal_is_configurable = FALSE // if false, its lethal setting cannot be changed
+
+ timeout = 1 // When a turret pops up, then finds nothing to shoot at, this number decrements until 0, when it pops down.
+ can_salvage = FALSE
+
+/obj/item/weapon/circuitboard/defenseonelisk
+ name = "paradox rift generator circuit"
+ build_path = /obj/machinery/paradoxrift
+ board_type = new /datum/frame/frame_types/machine
+ origin_tech = list(TECH_DATA = 8, TECH_ARCANE = 3)
+ req_components = list(
+ /obj/item/stack/cable_coil = 30)
\ No newline at end of file
diff --git a/modular_chomp/icons/mob/starhunters.dmi b/modular_chomp/icons/mob/starhunters.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..c27cd45c584578bafd0f163a90edff9d7d2bfeb8
GIT binary patch
literal 7122
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
W0R!VxY5#RV7K5j&pUXO@geCygCOLEf
literal 0
HcmV?d00001
diff --git a/modular_chomp/maps/overmap/space_pois/space_areas.dm b/modular_chomp/maps/overmap/space_pois/space_areas.dm
index a1778d7933..7904133c3e 100644
--- a/modular_chomp/maps/overmap/space_pois/space_areas.dm
+++ b/modular_chomp/maps/overmap/space_pois/space_areas.dm
@@ -157,6 +157,14 @@
name = "POI - Space bar"
ambience = AMBIENCE_ARRIVALS
+/area/submap/starhunterarena
+ name = "POI - Starhunter Arena"
+ ambience = AMBIENCE_OTHERWORLDLY
+
+/area/submap/starhuntertraders
+ name = "POI - Starhunter Traders"
+ ambience = AMBIENCE_OTHERWORLDLY
+
/area/submap/syndiecakesfactory
name = "POI - Syndiecakes factory"
ambience = AMBIENCE_OTHERWORLDLY
diff --git a/modular_chomp/maps/overmap/space_pois/space_pois.dm b/modular_chomp/maps/overmap/space_pois/space_pois.dm
index 395c5d4cc4..7ddd4093b7 100644
--- a/modular_chomp/maps/overmap/space_pois/space_pois.dm
+++ b/modular_chomp/maps/overmap/space_pois/space_pois.dm
@@ -230,6 +230,16 @@ Less important
mappath = "modular_chomp/maps/overmap/space_pois/spacebar_40x40.dmm"
block_size = 40
+/datum/map_template/dynamic_overmap/starhuntersarena_70x70
+ name = "Starhunter Challenge"
+ mappath = "modular_chomp/maps/overmap/space_pos/starhuntersarena_70x70.dmm"
+ block_size = 70
+
+/datum/map_template/dynamic_overmap/starhunterstraders_30x30
+ name = "Starhunter Traders"
+ mappath = "modular_chomp/maps/overmap/space_pos/starhunterstraders_30x30.dmm"
+ block_size = 30
+
/datum/map_template/dynamic_overmap/syndiecakesfactory_40x40
name = "Land o' Cakes Factory"
mappath = "modular_chomp/maps/overmap/space_pois/syndiecakesfactory_40x40.dmm"
diff --git a/modular_chomp/maps/overmap/space_pois/starhuntersarena_70x70.dmm b/modular_chomp/maps/overmap/space_pois/starhuntersarena_70x70.dmm
new file mode 100644
index 0000000000..1cc9e26d59
--- /dev/null
+++ b/modular_chomp/maps/overmap/space_pois/starhuntersarena_70x70.dmm
@@ -0,0 +1,5106 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/space,
+/area/template_noop)
+"b" = (
+/turf/simulated/wall/r_wall,
+/area/submap/starhunterarena)
+"c" = (
+/obj/structure/table/alien/blue,
+/obj/item/weapon/paper{
+ info = "Come face us. If we fall, you shall be rewarded.";
+ name = "Challenge"
+ },
+/turf/simulated/floor/tiled/eris/steel/bar_light,
+/area/submap/starhunterarena)
+"g" = (
+/mob/living/simple_mob/humanoid/starhunter/hunter/druid,
+/turf/simulated/floor/grass,
+/area/submap/starhunterarena)
+"j" = (
+/mob/living/simple_mob/humanoid/starhunter/hunter/champion,
+/turf/simulated/floor/grass,
+/area/submap/starhunterarena)
+"k" = (
+/obj/structure/flora/ausbushes,
+/turf/simulated/floor/grass,
+/area/submap/starhunterarena)
+"n" = (
+/obj/structure/flora/ausbushes/genericbush,
+/turf/simulated/floor/grass,
+/area/submap/starhunterarena)
+"u" = (
+/obj/structure/flora/ausbushes/brflowers,
+/turf/simulated/floor/grass,
+/area/submap/starhunterarena)
+"B" = (
+/obj/structure/flora/tree/bigtree,
+/turf/simulated/floor/grass,
+/area/submap/starhunterarena)
+"E" = (
+/obj/structure/flora/ausbushes/brflowers,
+/mob/living/simple_mob/humanoid/starhunter/hunter/avatar,
+/turf/simulated/floor/grass,
+/area/submap/starhunterarena)
+"G" = (
+/turf/simulated/mineral,
+/area/template_noop)
+"K" = (
+/obj/structure/fans/hardlight/colorable/abductor,
+/turf/simulated/floor/tiled/eris/steel/bar_light,
+/area/submap/starhunterarena)
+"M" = (
+/turf/simulated/floor/tiled/eris/steel/bar_light,
+/area/submap/starhunterarena)
+"P" = (
+/turf/simulated/mineral,
+/area/submap/starhunterarena)
+"T" = (
+/obj/structure/flora/ausbushes/brflowers,
+/obj/structure/flora/ausbushes/brflowers,
+/turf/simulated/floor/grass,
+/area/submap/starhunterarena)
+"U" = (
+/turf/simulated/floor/grass,
+/area/submap/starhunterarena)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+a
+a
+a
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(10,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(12,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(13,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(14,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(15,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(16,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(17,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+k
+U
+U
+u
+U
+u
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(18,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+u
+u
+U
+U
+U
+U
+U
+u
+U
+n
+U
+u
+U
+U
+U
+B
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(19,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+u
+u
+U
+U
+U
+u
+u
+U
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(20,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+u
+u
+u
+u
+u
+U
+u
+u
+u
+U
+U
+u
+u
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(21,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+B
+u
+U
+u
+u
+u
+U
+j
+U
+U
+U
+U
+u
+u
+u
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(22,1,1) = {"
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+u
+u
+u
+U
+U
+U
+U
+U
+U
+k
+U
+U
+U
+U
+u
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(23,1,1) = {"
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+U
+U
+U
+U
+u
+u
+u
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+u
+u
+u
+u
+u
+u
+u
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+"}
+(24,1,1) = {"
+a
+a
+a
+a
+a
+P
+P
+P
+P
+U
+U
+U
+U
+u
+u
+U
+u
+u
+u
+U
+U
+U
+P
+P
+P
+P
+P
+P
+u
+u
+U
+U
+k
+U
+u
+u
+U
+U
+U
+U
+u
+u
+u
+U
+u
+u
+U
+U
+u
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+"}
+(25,1,1) = {"
+a
+a
+a
+a
+a
+P
+P
+P
+U
+U
+U
+U
+u
+u
+U
+U
+U
+U
+u
+u
+u
+U
+U
+P
+P
+P
+U
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+u
+U
+u
+u
+u
+T
+u
+u
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+"}
+(26,1,1) = {"
+a
+a
+a
+a
+P
+P
+P
+P
+U
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+U
+u
+u
+u
+u
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+U
+U
+k
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+T
+T
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+"}
+(27,1,1) = {"
+a
+a
+a
+a
+P
+P
+P
+U
+U
+U
+u
+u
+U
+U
+U
+U
+B
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+B
+U
+U
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+P
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(28,1,1) = {"
+a
+a
+a
+P
+P
+P
+P
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+n
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(29,1,1) = {"
+a
+a
+a
+P
+P
+P
+P
+u
+u
+u
+U
+k
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+k
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+U
+U
+U
+u
+u
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(30,1,1) = {"
+a
+a
+a
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+k
+U
+U
+u
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+U
+U
+u
+T
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(31,1,1) = {"
+a
+a
+a
+P
+P
+P
+U
+U
+U
+B
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+P
+P
+P
+P
+P
+P
+U
+U
+U
+u
+u
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(32,1,1) = {"
+a
+a
+a
+P
+P
+P
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+U
+U
+U
+U
+U
+B
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(33,1,1) = {"
+a
+a
+a
+P
+P
+P
+U
+u
+u
+U
+U
+U
+U
+U
+U
+B
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+k
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(34,1,1) = {"
+a
+a
+a
+P
+P
+P
+U
+U
+u
+u
+u
+U
+U
+U
+U
+U
+U
+U
+E
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+n
+U
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(35,1,1) = {"
+a
+a
+a
+a
+P
+P
+P
+U
+U
+U
+u
+u
+U
+U
+U
+U
+u
+u
+u
+U
+u
+u
+U
+U
+n
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(36,1,1) = {"
+a
+a
+a
+a
+P
+P
+P
+P
+U
+U
+U
+u
+u
+u
+u
+u
+u
+U
+U
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+U
+U
+n
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+u
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(37,1,1) = {"
+a
+a
+a
+a
+a
+P
+P
+P
+U
+U
+U
+U
+U
+U
+u
+U
+U
+U
+k
+U
+U
+U
+u
+u
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+B
+U
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+U
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(38,1,1) = {"
+a
+a
+a
+a
+a
+P
+P
+P
+P
+U
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+u
+u
+u
+u
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+k
+U
+U
+U
+U
+U
+U
+u
+U
+U
+U
+U
+P
+P
+P
+P
+P
+G
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(39,1,1) = {"
+a
+a
+a
+a
+a
+P
+P
+P
+P
+U
+U
+u
+u
+U
+U
+U
+n
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+U
+U
+U
+U
+B
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(40,1,1) = {"
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+B
+U
+U
+U
+U
+u
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+B
+U
+U
+u
+u
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(41,1,1) = {"
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+U
+U
+U
+U
+B
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+u
+u
+P
+P
+P
+P
+U
+U
+U
+U
+u
+U
+k
+U
+U
+U
+U
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(42,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+k
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+P
+P
+P
+P
+U
+U
+U
+n
+u
+u
+U
+U
+U
+u
+u
+u
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(43,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+U
+U
+P
+P
+P
+P
+P
+U
+U
+U
+U
+u
+u
+U
+g
+U
+U
+U
+U
+U
+u
+U
+U
+U
+U
+U
+U
+U
+U
+P
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(44,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+u
+U
+U
+n
+U
+U
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+u
+u
+U
+U
+U
+U
+n
+U
+U
+u
+U
+U
+U
+k
+U
+U
+U
+U
+b
+M
+M
+M
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(45,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+u
+u
+U
+U
+k
+U
+U
+U
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+u
+u
+u
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+K
+M
+c
+M
+K
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(46,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+u
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+B
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+U
+U
+U
+U
+U
+U
+U
+b
+M
+M
+M
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(47,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+u
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+u
+U
+U
+U
+U
+U
+U
+P
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(48,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+n
+U
+U
+U
+U
+U
+B
+u
+u
+U
+U
+U
+n
+U
+U
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(49,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(50,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(51,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(52,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(53,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+U
+U
+U
+U
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(54,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(55,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(56,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(57,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(58,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(59,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(60,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(61,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(62,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(63,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+P
+P
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(64,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+P
+P
+P
+P
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(65,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(66,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(67,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(68,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(69,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(70,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/modular_chomp/maps/overmap/space_pois/starhunterstraders_30x30.dmm b/modular_chomp/maps/overmap/space_pois/starhunterstraders_30x30.dmm
new file mode 100644
index 0000000000..f0fa0367c4
--- /dev/null
+++ b/modular_chomp/maps/overmap/space_pois/starhunterstraders_30x30.dmm
@@ -0,0 +1,1032 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/space,
+/area/template_noop)
+"b" = (
+/turf/simulated/wall/r_wall,
+/area/submap/starhuntertraders)
+"c" = (
+/mob/living/simple_mob/humanoid/starhunter/trader/farmer,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"g" = (
+/mob/living/simple_mob/humanoid/starhunter/trader/miner,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"q" = (
+/obj/structure/table/sifwoodentable,
+/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/poison,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"A" = (
+/obj/structure/table/sifwoodentable,
+/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/berry,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"C" = (
+/turf/simulated/mineral,
+/area/submap/starhuntertraders)
+"D" = (
+/mob/living/simple_mob/humanoid/starhunter/trader/reliccollecter,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"F" = (
+/mob/living/simple_mob/humanoid/starhunter/trader/weaponsmith,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"G" = (
+/obj/structure/fans/hardlight/colorable/abductor,
+/turf/simulated/floor/tiled/eris/steel/bar_light,
+/area/submap/starhuntertraders)
+"H" = (
+/obj/structure/table/sifwoodentable,
+/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese_spicy,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"M" = (
+/obj/structure/table/sifwoodentable,
+/obj/item/weapon/reagent_containers/food/snacks/bacon_flatbread,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"N" = (
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"R" = (
+/obj/structure/table/sifwoodentable,
+/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"S" = (
+/obj/item/weapon/bedsheet,
+/obj/structure/bed,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"T" = (
+/obj/structure/table/sifwoodentable,
+/obj/item/weapon/reagent_containers/food/snacks/amanitajelly,
+/turf/simulated/floor/grass,
+/area/submap/starhuntertraders)
+"V" = (
+/turf/simulated/floor/tiled/eris/steel/bar_light,
+/area/submap/starhuntertraders)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+C
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+C
+C
+C
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+N
+N
+N
+N
+N
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(10,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+N
+N
+N
+N
+N
+N
+N
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+N
+N
+H
+T
+M
+T
+q
+N
+N
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(12,1,1) = {"
+a
+a
+a
+a
+a
+a
+C
+C
+C
+N
+N
+N
+c
+N
+N
+N
+F
+N
+N
+N
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+"}
+(13,1,1) = {"
+a
+a
+a
+a
+a
+a
+C
+C
+N
+N
+N
+N
+N
+N
+N
+N
+N
+N
+N
+N
+b
+V
+b
+a
+a
+a
+a
+a
+a
+a
+"}
+(14,1,1) = {"
+a
+a
+a
+a
+a
+a
+C
+C
+N
+N
+N
+N
+S
+S
+N
+S
+S
+N
+N
+N
+G
+V
+G
+a
+a
+a
+a
+a
+a
+a
+"}
+(15,1,1) = {"
+a
+a
+a
+a
+a
+a
+C
+C
+N
+N
+N
+N
+D
+N
+N
+N
+N
+N
+N
+N
+b
+V
+b
+a
+a
+a
+a
+a
+a
+a
+"}
+(16,1,1) = {"
+a
+a
+a
+a
+a
+a
+C
+C
+C
+N
+N
+N
+N
+N
+N
+g
+N
+N
+N
+N
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+"}
+(17,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+N
+N
+A
+T
+M
+T
+R
+N
+N
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(18,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+N
+N
+N
+N
+N
+N
+N
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(19,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+N
+N
+N
+N
+N
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(20,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+C
+C
+C
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(21,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+C
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(22,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+C
+C
+C
+C
+C
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(23,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(24,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(25,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(26,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(27,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(28,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(29,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(30,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/vorestation.dme b/vorestation.dme
index 283b5753a2..39b8e6b3f1 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -4639,6 +4639,7 @@
#include "modular_chomp\code\game\machinery\autolathe_armory.dm"
#include "modular_chomp\code\game\machinery\colormate.dm"
#include "modular_chomp\code\game\machinery\holosign.dm"
+#include "modular_chomp\code\game\machinery\paradox.dm"
#include "modular_chomp\code\game\machinery\petrification.dm"
#include "modular_chomp\code\game\machinery\portable_turret.dm"
#include "modular_chomp\code\game\machinery\virtual_reality\vr_console.dm"
@@ -4736,6 +4737,7 @@
#include "modular_chomp\code\modules\materials\materials\organic\animal_products.dm"
#include "modular_chomp\code\modules\mining\shelter_atoms_ch.dm"
#include "modular_chomp\code\modules\mining\shelters_ch.dm"
+#include "modular_chomp\code\modules\mining\tools.dm"
#include "modular_chomp\code\modules\mob\holder.dm"
#include "modular_chomp\code\modules\mob\mob.dm"
#include "modular_chomp\code\modules\mob\dead\observer\observer.dm"
@@ -4814,6 +4816,12 @@
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\eclipse\eclipse.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\eclipse\lore.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\eclipse\noms.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\starhunters\avatar.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\starhunters\base.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\starhunters\food.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\starhunters\hunters.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\starhunters\passive.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\starhunters\tradercode.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\cyber_horror.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\disbot.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\drones\combat_drone.dm"