diff --git a/code/__defines/mobs_ch.dm b/code/__defines/mobs_ch.dm
new file mode 100644
index 0000000000..45114d7cbd
--- /dev/null
+++ b/code/__defines/mobs_ch.dm
@@ -0,0 +1,3 @@
+#define MARKING_NONDIGI_ONLY (1 << 0)
+#define MARKING_DIGITIGRADE_ONLY (1 << 1)
+#define MARKING_ALL_LEGS MARKING_NONDIGI_ONLY|MARKING_DIGITIGRADE_ONLY
diff --git a/code/game/turfs/flooring/flooring_decals_ch.dm b/code/game/turfs/flooring/flooring_decals_ch.dm
index 3d648ccb36..1021ae947b 100644
--- a/code/game/turfs/flooring/flooring_decals_ch.dm
+++ b/code/game/turfs/flooring/flooring_decals_ch.dm
@@ -10,4 +10,4 @@
icon_state = "wood_stairs2"
/obj/effect/floor_decal/stairs/dark_stairs
- icon_state = "dark_stairs"
\ No newline at end of file
+ icon_state = "dark_stairs"
diff --git a/code/game/turfs/flooring/flooring_decals_yw.dm b/code/game/turfs/flooring/flooring_decals_yw.dm
index 75983e086f..2c948bb9b3 100644
--- a/code/game/turfs/flooring/flooring_decals_yw.dm
+++ b/code/game/turfs/flooring/flooring_decals_yw.dm
@@ -18,3 +18,4 @@
/obj/effect/floor_decal/snow/floor/pointy
icon_state = "snowfloorpointy"
+
diff --git a/code/modules/mob/new_player/sprite_accessories_ear_ch.dm b/code/modules/mob/new_player/sprite_accessories_ear_ch.dm
index 05533bcc76..0e37e8c9d5 100644
--- a/code/modules/mob/new_player/sprite_accessories_ear_ch.dm
+++ b/code/modules/mob/new_player/sprite_accessories_ear_ch.dm
@@ -14,6 +14,24 @@
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
+/datum/sprite_accessory/ears/protogen
+ name = "Protogen"
+ desc = ""
+ icon = 'icons/mob/vore/ears_ch.dmi'
+ icon_state = "protogen"
+ extra_overlay = "protogen_fluff"
+ do_colouration = 1
+ color_blend_mode = ICON_MULTIPLY
+
+/datum/sprite_accessory/ears/miqote
+ name = "Miqo'te"
+ desc = ""
+ icon = 'icons/mob/vore/ears_ch.dmi'
+ icon_state = "miqote"
+ extra_overlay = "miqote_inner"
+ do_colouration = 1
+ color_blend_mode = ICON_MULTIPLY
+
/datum/sprite_accessory/ears/vale
name = "VALE Model Ear Coloring"
desc = ""
diff --git a/code/modules/mob/new_player/sprite_accessories_extra_ch.dm b/code/modules/mob/new_player/sprite_accessories_extra_ch.dm
index cb65a846f6..487f6d27aa 100644
--- a/code/modules/mob/new_player/sprite_accessories_extra_ch.dm
+++ b/code/modules/mob/new_player/sprite_accessories_extra_ch.dm
@@ -1,3 +1,7 @@
+/datum/sprite_accessory/marking
+ var/digitigrade_acceptance = MARKING_NONDIGI_ONLY
+ var/digitigrade_icon = 'icons/mob/human_races/markings_digi_ch.dmi'
+
/datum/sprite_accessory/marking/ch
icon = 'icons/mob/human_races/markings_ch.dmi'
@@ -149,65 +153,196 @@
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
+/datum/sprite_accessory/marking/ch/protogen_snout
+ name = "Protogen Snout"
+ icon_state = "protogen_snout"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/ch/hshark_snout
+ name = "HShark Snout"
+ icon_state = "hshark_snout"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/ch/hshark_head
+ name = "HShark Head"
+ icon_state = "hshark"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/ch/ram_horns
+ name = "Ram Horns"
+ icon_state = "ram_horns"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/ch/neckfluff
+ name = "Neck Fluff"
+ icon_state = "neckfluff"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/ch/husky_chest
+ name = "Husky Chest"
+ icon_state = "husky"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_TORSO, BP_GROIN)
+
+/datum/sprite_accessory/marking/ch/fox_head
+ name = "Fox Head"
+ icon_state = "fox"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/ch/fox_chest
+ name = "Fox Chest"
+ icon_state = "fox"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_TORSO, BP_GROIN)
+
+/datum/sprite_accessory/marking/ch/fox_hsocks
+ name = "Fox Hand Socks"
+ icon_state = "fox"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_ARM, BP_R_HAND, BP_L_ARM, BP_L_HAND)
+
+/datum/sprite_accessory/marking/ch/fox_lsocks
+ name = "Fox Leg Socks"
+ icon_state = "fox"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_LEG,BP_R_FOOT,BP_L_LEG,BP_L_FOOT)
+ digitigrade_acceptance = MARKING_ALL_LEGS
+
+/datum/sprite_accessory/marking/ch/tiger_head
+ name = "Tiger Head"
+ icon_state = "tiger"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/ch/tiger_chest
+ name = "Tiger Chest"
+ icon_state = "tiger"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_TORSO, BP_GROIN)
+
+/datum/sprite_accessory/marking/ch/tiger_arms
+ name = "Tiger Arms"
+ icon_state = "tiger"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_ARM, BP_R_HAND, BP_L_ARM, BP_L_HAND)
+
+/datum/sprite_accessory/marking/ch/tiger_legs
+ name = "Tiger Legs"
+ icon_state = "tiger"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_LEG,BP_R_FOOT,BP_L_LEG,BP_L_FOOT)
+ digitigrade_acceptance = MARKING_ALL_LEGS
+
+/datum/sprite_accessory/marking/ch/gradient_arms
+ name = "Gradient Arms"
+ icon_state = "gradient"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_ARM, BP_R_HAND, BP_L_ARM, BP_L_HAND)
+
+/datum/sprite_accessory/marking/ch/gradient_legs
+ name = "Gradient Legs"
+ icon_state = "gradient"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_LEG,BP_R_FOOT,BP_L_LEG,BP_L_FOOT)
+ digitigrade_acceptance = MARKING_ALL_LEGS
+
+/datum/sprite_accessory/marking/ch/hawk_talons
+ name = "Hawk Talons (Legs)"
+ icon_state = "hawktalon"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_LEG,BP_R_FOOT,BP_L_LEG,BP_L_FOOT)
+ digitigrade_acceptance = MARKING_ALL_LEGS
+
+/datum/sprite_accessory/marking/ch/deer_hooves
+ name = "Deer Hooves"
+ icon_state = "deerhoof"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_FOOT, BP_L_FOOT)
+ digitigrade_acceptance = MARKING_ALL_LEGS
+
+/datum/sprite_accessory/marking/ch/frills_simple
+ name = "Frills (Simple)"
+ icon_state = "frills_simple"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/ch/frills_short
+ name = "Frills (Short)"
+ icon_state = "frills_short"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/ch/frills_aquatic
+ name = "Frills (Aquatic)"
+ icon_state = "frills_aqua"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
/datum/sprite_accessory/marking/ch/guilmonhead
- name = "Guilmon head"
- icon_state = "guilmon_head"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_HEAD)
+ name = "Guilmon head"
+ icon_state = "guilmon_head"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/ch/guilmonchest
- name = "Guilmon Chest"
- icon_state = "guilmon_chest"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_TORSO)
+ name = "Guilmon Chest"
+ icon_state = "guilmon_chest"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/ch/guilmonchestmarking
- name = "Guilmon Chest Markings"
- icon_state = "guilmon_marking"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_TORSO)
+ name = "Guilmon Chest Markings"
+ icon_state = "guilmon_marking"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/ch/guilmonarms
- name = "Guilmon arms"
- icon_state = "guilmon"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND)
+ name = "Guilmon arms"
+ icon_state = "guilmon"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND)
/datum/sprite_accessory/marking/ch/guilmonRLeg
- name = "Guilmon Right leg"
- icon_state = "guilmon"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_R_LEG)
+ name = "Guilmon Right leg"
+ icon_state = "guilmon"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_LEG)
/datum/sprite_accessory/marking/ch/guilmonLleg
- name = "Guilmon Left leg"
- icon_state = "guilmon"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_L_LEG)
+ name = "Guilmon Left leg"
+ icon_state = "guilmon"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_L_LEG)
/datum/sprite_accessory/marking/ch/guilmondigiRleg1
- name = "Guilmon digigrade right leg 1"
- icon_state = "guilmon_digitigrade_1"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_R_LEG)
+ name = "Guilmon digigrade right leg 1"
+ icon_state = "guilmon_digitigrade_1"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_LEG)
/datum/sprite_accessory/marking/ch/guilmondigiLleg1
- name = "Guilmon digigrade left leg 1"
- icon_state = "guilmon_digitigrade_1"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_L_LEG)
+ name = "Guilmon digigrade left leg 1"
+ icon_state = "guilmon_digitigrade_1"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_L_LEG)
/datum/sprite_accessory/marking/ch/guilmondigiRleg2
- name = "Guilmon digigrade right leg 2"
- icon_state = "guilmon_digitigrade_2"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_R_LEG)
+ name = "Guilmon digigrade right leg 2"
+ icon_state = "guilmon_digitigrade_2"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_LEG)
/datum/sprite_accessory/marking/ch/guilmondigiLleg2
- name = "Guilmon digigrade left leg 2"
- icon_state = "guilmon_digitigrade_2"
- color_blend_mode = ICON_MULTIPLY
- body_parts = list(BP_L_LEG)
+ name = "Guilmon digigrade left leg 2"
+ icon_state = "guilmon_digitigrade_2"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_L_LEG)
/datum/sprite_accessory/tail/special/orca_tail
name = "Orca Tail"
@@ -332,6 +467,7 @@
//Digitigrade markings
/datum/sprite_accessory/marking/digi
icon = 'icons/mob/human_races/markings_digi_ch.dmi'
+ digitigrade_acceptance = MARKING_DIGITIGRADE_ONLY
/datum/sprite_accessory/marking/digi/fullleft
name = "Digitigrade Full Left Leg(Only works with digitigrade legs)"
diff --git a/code/modules/mob/new_player/sprite_accessories_tail_ch.dm b/code/modules/mob/new_player/sprite_accessories_tail_ch.dm
index 8ffb4054c4..a1f1e1734b 100644
--- a/code/modules/mob/new_player/sprite_accessories_tail_ch.dm
+++ b/code/modules/mob/new_player/sprite_accessories_tail_ch.dm
@@ -22,6 +22,17 @@
icon = 'icons/mob/vore/tails_ch.dmi'
icon_state = "zorgoia"
extra_overlay = "zorgoia_fluff"
+ extra_overlay2 = "zorgoia_fluff_top"
+ do_colouration = 1
+ color_blend_mode = ICON_MULTIPLY
+
+/datum/sprite_accessory/tail/leopard
+ name = "Leopard tail, dual-color (vwag)"
+ icon = 'icons/mob/vore/tails_ch.dmi'
+ icon_state = "leopard"
+ ani_state = "leopard_w"
+ extra_overlay = "leopard_spots"
+ extra_overlay_w = "leopard_spots_w"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
@@ -144,17 +155,17 @@
extra_overlay = "bigringtail_markings"
/datum/sprite_accessory/tail/longtail/desert_nightstalker
- name = "Desert Nightstalker Tail (vwag)"
- icon = 'icons/mob/vore/taurs_ch.dmi'
- icon_state = "nightstalker_desert"
- ani_state = "nightstalker_desert_w"
- do_colouration = 0 // We're not coloring this, these are pre-colored
- color_blend_mode = ICON_ADD
+ name = "Desert Nightstalker Tail (vwag)"
+ icon = 'icons/mob/vore/taurs_ch.dmi'
+ icon_state = "nightstalker_desert"
+ ani_state = "nightstalker_desert_w"
+ do_colouration = 0 // We're not coloring this, these are pre-colored
+ color_blend_mode = ICON_ADD
/datum/sprite_accessory/tail/longtail/diamondback_nightstalker
- name = "Diamondback Nightstalker Tail (dual-color, vwag)"
- icon = 'icons/mob/vore/taurs_ch.dmi'
- icon_state = "nightstalker_diamondback"
- ani_state = "nightstalker_diamondback_w"
- extra_overlay = "nightstalker_diamondback_markings"
- extra_overlay_w = "nightstalker_diamondback_markings_w"
\ No newline at end of file
+ name = "Diamondback Nightstalker Tail (dual-color, vwag)"
+ icon = 'icons/mob/vore/taurs_ch.dmi'
+ icon_state = "nightstalker_diamondback"
+ ani_state = "nightstalker_diamondback_w"
+ extra_overlay = "nightstalker_diamondback_markings"
+ extra_overlay_w = "nightstalker_diamondback_markings_w"
diff --git a/code/modules/player_tips_vr/player_tips_controller_vr.dm b/code/modules/player_tips_vr/player_tips_controller_vr.dm
index fc4ffbcf2b..72e756b886 100644
--- a/code/modules/player_tips_vr/player_tips_controller_vr.dm
+++ b/code/modules/player_tips_vr/player_tips_controller_vr.dm
@@ -30,6 +30,7 @@ Controlled by the player_tips subsystem under code/controllers/subsystems/player
to_chat(M, SPAN_NOTICE("[tip]"))
last_tip = tip
+ last_tip_time = world.time
tip_delay = rand(min_tip_delay, max_tip_delay)
diff --git a/icons/mob/human_races/markings_ch.dmi b/icons/mob/human_races/markings_ch.dmi
index 267bcb7bf9..f2600bce01 100644
Binary files a/icons/mob/human_races/markings_ch.dmi and b/icons/mob/human_races/markings_ch.dmi differ
diff --git a/icons/mob/human_races/markings_digi_ch.dmi b/icons/mob/human_races/markings_digi_ch.dmi
index dbe633fac4..39ccb6a945 100644
Binary files a/icons/mob/human_races/markings_digi_ch.dmi and b/icons/mob/human_races/markings_digi_ch.dmi differ
diff --git a/icons/mob/vore/ears_ch.dmi b/icons/mob/vore/ears_ch.dmi
index 08497fe609..ff8ff0b410 100644
Binary files a/icons/mob/vore/ears_ch.dmi and b/icons/mob/vore/ears_ch.dmi differ
diff --git a/icons/mob/vore/tails_ch.dmi b/icons/mob/vore/tails_ch.dmi
index 4d16a9e2dd..7cd1d55711 100644
Binary files a/icons/mob/vore/tails_ch.dmi and b/icons/mob/vore/tails_ch.dmi differ
diff --git a/modular_chomp/code/game/objects/structures/desert_planet_structures.dm b/modular_chomp/code/game/objects/structures/desert_planet_structures.dm
new file mode 100644
index 0000000000..8c7eafa62f
--- /dev/null
+++ b/modular_chomp/code/game/objects/structures/desert_planet_structures.dm
@@ -0,0 +1,299 @@
+// Props
+/obj/structure/prop/desert_rock
+ icon = 'modular_chomp/icons/obj/desert_planet/desert_rocks.dmi'
+ desc = "Sandy and smooth from erosion."
+ density = TRUE
+ anchored = TRUE
+
+/obj/structure/prop/desert_rock/rock
+ name = "desert rock"
+
+/obj/structure/prop/desert_rock/rock/attack_hand(mob/living/user)
+ if(user.is_incorporeal())
+ return
+ to_chat(user, "You push on the [src].")
+ var/movedir = user.dir
+ if(do_after(user, 3 SECONDS, src))
+ step(src, movedir)
+
+/obj/structure/prop/desert_rock/rock/New()
+ ..()
+ icon_state = "desert_rock[rand(0,6)]"
+
+/obj/structure/prop/desert_rock/pebble
+ name = "sandy pebble"
+ density = FALSE
+
+/obj/structure/prop/desert_rock/pebble/Crossed(atom/movable/AM as mob|obj)
+ if(AM.is_incorporeal())
+ return
+ if(istype(AM, /mob/living))
+ var/mob/living/M = AM
+ if(M.m_intent == "run" && prob(5))
+ M.Weaken(2)
+ to_chat(M, "You trip over the [src]!")
+
+/obj/structure/prop/desert_rock/pebble/New()
+ ..()
+ icon_state = "desert_pebble[rand(0,6)]"
+
+/obj/structure/prop/desert_rock/anthill
+ name = "ant hill"
+ desc = "See how many ants you can spot."
+ icon = 'modular_chomp/icons/obj/desert_planet/desert_plants.dmi'
+ icon_state = "anthill0"
+
+/obj/structure/prop/desert_rock/anthill/New()
+ ..()
+ icon_state = "anthill[rand(0,2)]"
+
+/obj/structure/prop/desert_planet64x64
+ name = "large rock"
+ desc = "Sandy and smooth from erosion."
+ icon = 'modular_chomp/icons/obj/desert_planet/desert_props_64x64.dmi'
+ density = TRUE
+ anchored = TRUE
+ can_buckle = FALSE
+
+/obj/structure/prop/desert_planet64x64/lrock
+ icon_state = "lrock"
+
+/obj/structure/prop/desert_planet64x64/lrock1
+ icon_state = "lrock1"
+
+/obj/structure/prop/desert_planet64x64/lrock2
+ icon_state = "lrock2"
+
+/obj/structure/prop/desert_planet64x64/lrock3
+ icon_state = "lrock3"
+
+/obj/structure/prop/desert_planet64x64/lrock4
+ icon_state = "lrock4"
+
+/obj/structure/prop/desert_planet64x64/lribs
+ name = "ribs"
+ desc = "Bleached white by baking sunlight."
+ icon_state = "lribs"
+
+/obj/structure/prop/desert_planet64x64/lribs1
+ name = "ribs"
+ desc = "Bleached white by baking sunlight."
+ icon_state = "lribs1"
+
+/obj/structure/prop/desert_planet64x64/lskull
+ name = "skull"
+ desc = "Bleached white by baking sunlight."
+ icon_state = "lskull"
+
+/obj/structure/prop/desert_planet64x64/lbone
+ name = "bone"
+ desc = "Bleached white by baking sunlight."
+ icon_state = "lbone"
+
+/obj/structure/prop/desert_planet64x64/palmuria
+ name = "palm"
+ desc = "Stout and bushy."
+ icon_state = "palmuria"
+
+/obj/structure/prop/desert_planet64x64/palmuria1
+ name = "palm"
+ desc = "Stout and bushy."
+ icon_state = "palmuria1"
+
+/obj/structure/prop/desert_planet160x160
+ name = "desert large boulder"
+ desc = "Sandy and smooth from erosion."
+ icon = 'modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi'
+ density = TRUE
+ anchored = TRUE
+ can_buckle = FALSE
+
+/obj/structure/prop/desert_planet160x160/largeboulder
+ icon_state = "large_boulder"
+
+/obj/structure/prop/desert_planet160x160/tallboulder
+ icon_state = "tall_boulder"
+
+/obj/structure/prop/desert_planet160x160/boulder
+ icon_state = "boulder"
+
+/obj/structure/prop/desert_planet160x160/lcactus
+ name = "cactus"
+ desc = "Large and prickly."
+ icon_state = "lcactus"
+
+/obj/structure/prop/desert_planet160x160/lcactus1
+ name = "cactus"
+ desc = "Large and prickly."
+ icon_state = "lcactus1"
+
+/obj/structure/prop/desert_planet160x160/lcactus2
+ name = "cactus"
+ desc = "Large and prickly."
+ icon_state = "lcactus2"
+
+/obj/structure/prop/desert_planet160x160/lcactus3
+ name = "cactus"
+ desc = "Large and prickly."
+ icon_state = "lcactus3"
+
+// Flora
+/obj/structure/flora/desert_planet
+ name = "desert plant"
+ desc = "Probably a succulent."
+ icon = 'modular_chomp/icons/obj/desert_planet/desert_plants.dmi'
+
+/obj/structure/flora/desert_planet/potted_plant
+ name = "potted plant"
+ desc = "Colloquially known as a pot plant."
+ icon_state = "potplant0"
+
+/obj/structure/flora/desert_planet/potted_plant/New()
+ ..()
+ icon_state = "potplant[rand(0,2)]"
+
+/obj/structure/flora/desert_planet/thicket
+ name = "thicket"
+ desc = "Weedy growths."
+ icon_state = "thicket0"
+
+/obj/structure/flora/desert_planet/thicket/New()
+ ..()
+ icon_state = "thicket[rand(0,6)]"
+
+/obj/structure/flora/desert_planet/shrub
+ name = "shrub"
+ desc = "Dense and weedy."
+ icon_state = "shrub0"
+
+/obj/structure/flora/desert_planet/shrub/New()
+ ..()
+ icon_state = "shrub[rand(0,5)]"
+
+/obj/structure/flora/desert_planet/bush
+ name = "bush"
+ desc = "Denser and weedier."
+ icon_state = "bush0"
+
+/obj/structure/flora/desert_planet/bush/New()
+ ..()
+ icon_state = "bush[rand(0,5)]"
+
+/obj/structure/flora/desert_planet/barrelcacti
+ name = "barrel cacti"
+ desc = "Small, adorable, and begging for a hug."
+ icon_state = "barrelcacti0"
+
+/obj/structure/flora/desert_planet/barrelcacti/New()
+ ..()
+ icon_state = "barrelcacti[rand(0,3)]"
+
+/obj/structure/flora/desert_planet/palmy
+ name = "yucca bush"
+ desc = "Probably not actually a yucca."
+ icon_state = "palmy0"
+
+/obj/structure/flora/desert_planet/palmy/New()
+ ..()
+ icon_state = "palmy[rand(0,2)]"
+
+/obj/structure/flora/desert_planet/shrubber
+ name = "thorny bush"
+ desc = "Makes for great fur accessories."
+ icon_state = "shrubber0"
+
+/obj/structure/flora/desert_planet/shrubber/New()
+ ..()
+ icon_state = "shrubber[rand(0,2)]"
+
+/obj/structure/flora/desert_planet/lbarrelcacti
+ name = "barrel cactus"
+ desc = "Absolutely begging for pets."
+ icon_state = "lbarrelcacti0"
+
+/obj/structure/flora/desert_planet/lbarrelcacti/New()
+ ..()
+ icon_state = "lbarrelcacti[rand(0,2)]"
+
+// Trees
+/obj/structure/flora/tree/desert_planet
+ name = "palm tree"
+ desc = "Tall palm tree, makes for a good shade."
+ icon = 'modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi'
+ density = FALSE
+ anchored = TRUE
+ can_buckle = FALSE
+ product = /obj/item/stack/material/log
+ product_amount = 50
+ health = 2000
+ max_health = 2000
+ //var/fruit
+
+/obj/structure/flora/tree/desert_planet/palmtreeb
+ icon_state = "palmtreeb"
+ base_state = "palmr" // Necessary for stumps to work.
+
+/obj/structure/flora/tree/desert_planet/palmtreeb1
+ icon_state = "palmtreeb1"
+ base_state = "palml"
+
+/obj/structure/flora/tree/desert_planet/palmtree
+ icon_state = "palmtree"
+ base_state = "palmr"
+
+/obj/structure/flora/tree/desert_planet/palmtree1
+ icon_state = "palmtree1"
+ base_state = "palml"
+
+/obj/structure/flora/tree/desert_planet/mpalmtreeb
+ icon_state = "mpalmtreeb"
+ base_state = "palmr"
+
+/obj/structure/flora/tree/desert_planet/mpalmtreeb1
+ icon_state = "mpalmtreeb1"
+ base_state = "palml"
+
+/obj/structure/flora/tree/desert_planet/mpalmtree
+ icon_state = "mpalmtree"
+ base_state = "palml"
+
+/obj/structure/flora/tree/desert_planet/mpalmtree1
+ icon_state = "mpalmtree1"
+ base_state = "palmr"
+
+/obj/structure/flora/tree/desert_planet/spalmtree
+ icon_state = "spalmtree"
+ base_state = "palmls"
+
+/obj/structure/flora/tree/desert_planet/spalmtree1
+ icon_state = "spalmtree1"
+ base_state = "palmrs"
+
+/obj/structure/flora/tree/desert_planet/spalmtree3
+ icon_state = "spalmtree3"
+ base_state = "palmls"
+
+/obj/structure/flora/tree/desert_planet/spalmtree4
+ icon_state = "spalmtree4"
+ base_state = "palmrs"
+
+/obj/structure/flora/tree/desert_planet/desert_tree
+ name = "barren tree"
+ desc = "Completely barren."
+ icon_state = "desert_tree"
+ base_state = "desert"
+
+/obj/structure/flora/tree/desert_planet/desert_tree1
+ name = "gnarled tree"
+ desc = "Twisted but living."
+ icon_state = "desert_tree1"
+ base_state = "desert"
+
+/obj/structure/flora/tree/desert_planet/desert_tree3
+ name = "hardy tree"
+ desc = "Thriving despite the conditions."
+ icon_state = "desert_tree3"
+ base_state = "desert"
+ product_amount = 100
+ health = 4000
+ max_health = 4000
diff --git a/modular_chomp/code/game/turfs/simulated/outdoors/desert_planet.dm b/modular_chomp/code/game/turfs/simulated/outdoors/desert_planet.dm
index 58f1b1eea9..7b08e4eb6f 100644
--- a/modular_chomp/code/game/turfs/simulated/outdoors/desert_planet.dm
+++ b/modular_chomp/code/game/turfs/simulated/outdoors/desert_planet.dm
@@ -1,136 +1,257 @@
-/* Testing
+// Parent turf.
+/turf/simulated/floor/outdoors/desert_planet
+ name = "sand"
+ desc = "Salty and gritty."
+ icon = 'modular_chomp/icons/turf/desert_tiles.dmi'
+ icon_edge = 'modular_chomp/icons/turf/outdoors_edge.dmi'
+ can_dig = FALSE
+
/turf/simulated/floor/outdoors/desert_planet/sand
name = "sand"
- desc = "Sandy, taste salty and gritty."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
+ desc = "Salty and gritty."
+ icon_state = "sand0"
edge_blending_priority = 2
- turf_layers = list(/turf/simulated/floor/outdoors/rocks)
- initial_flooring = /decl/flooring/sand
- can_dig = false
-*/
+ initial_flooring = /decl/flooring/desert_planet/sand
-/turf/simulated/floor/outdoors/desert_planet/sand
- name = "sand"
- desc = "Salty and gritty."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
- icon_state = "sand"
- edge_blending_priority = 3
- turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand)
+// Necessary to get the edges to generate correctly since we use a random-ish icon_state. Inelegant to hard code, but this is a one-off case.
+/turf/simulated/floor/outdoors/desert_planet/sand/get_edge_icon_state()
+ return "sand"
-/* Testing
-/decl/flooring/outdoors/sand
- name = "sand"
- desc = "Salty and gritty."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
- icon_base = "sand"
- footstep_sounds = list("human" = list(
- 'sound/effects/footstep/asteroid1.ogg',
- 'sound/effects/footstep/asteroid2.ogg',
- 'sound/effects/footstep/asteroid3.ogg',
- 'sound/effects/footstep/asteroid4.ogg',
- 'sound/effects/footstep/asteroid5.ogg',
- 'sound/effects/footstep/MedDirt1.ogg',
- 'sound/effects/footstep/MedDirt2.ogg',
- 'sound/effects/footstep/MedDirt3.ogg',
- 'sound/effects/footstep/MedDirt4.ogg'))
+/turf/simulated/floor/outdoors/desert_planet/sand/Initialize(mapload)
+ . = ..()
+ icon_state = "sand[rand(0,2)]"
-/turf/simulated/floor/outdoors/sand/Initialize(mapload)
- var/possiblesands = list(
- "ironsand1" = 50,
- "ironsand2" = 1,
- "ironsand3" = 1,
- "ironsand4" = 1,
- "ironsand5" = 1,
- "ironsand6" = 1,
- "ironsand7" = 1,
- "ironsand8" = 1,
- "ironsand9" = 1,
- "ironsand10" = 1,
- "ironsand11" = 1,
- "ironsand12" = 1,
- "ironsand13" = 1,
- "ironsand14" = 1,
- "ironsand15" = 1
-
- )
- flooring_override = pickweight(possiblesands)
- return ..()
-
-/turf/simulated/floor/water/hotspring
- name = "Hotsprings"
- desc = "A natural hotspring connecting to an aquifer. It seems the facility was built ontop of it."
- edge_blending_priority = -2
- movement_cost = 8
- depth = 2
- water_state = "water_shallow"
- outdoors = FALSE
-
-/turf/simulated/floor/water/hotspring/Entered(atom/movable/AM, atom/oldloc)
- if(istype(AM, /mob/living))
- var/mob/living/L = AM
- L.update_water()
- if(L.check_submerged() <= 0)
- return
- if(!istype(oldloc, /turf/simulated/floor/water/hotspring))
- to_chat(L, "You feel an overwhelming wave of warmth from entering \the [src]!")
- AM.water_act(5)
- ..()
-
-
-*/
+/turf/simulated/floor/outdoors/desert_planet/sand/attackby(var/obj/item/W, var/mob/user)
+ if(istype(W, /obj/item/weapon/shovel))
+ to_chat(user, "You begin to remove \the [src] with your [W].")
+ if(do_after(user, 4 SECONDS * W.toolspeed))
+ to_chat(user, "\The [src] has been dug up, and now lies in a pile nearby.")
+ icon_state = "sand_dug"
+ new /obj/item/weapon/ore/glass (src)
+ else
+ to_chat(user, "You decide to not finish removing \the [src].")
+ else
+ ..()
/turf/simulated/floor/outdoors/desert_planet/deep_sand
name = "sand"
- desc = "Salty and gritty."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
- icon_state = "deep_sand"
- edge_blending_priority = 2
- turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand)
+ desc = "Really gets everywhere."
+ icon_state = "deep_sand0"
+ edge_blending_priority = 1
+ movement_cost = 3
+ initial_flooring = /decl/flooring/desert_planet/deep_sand
+
+/turf/simulated/floor/outdoors/desert_planet/deep_sand/Initialize(mapload)
+ . = ..()
+ icon_state = "deep_sand[rand(0,2)]"
/turf/simulated/floor/outdoors/desert_planet/grass
name = "grass"
desc = "Lively green grass, soft to walk on."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
icon_state = "grass"
- edge_blending_priority = 6
- turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand)
+ edge_blending_priority = 5
+ initial_flooring = /decl/flooring/desert_planet/grass
/turf/simulated/floor/outdoors/desert_planet/deep_grass
name = "dense grass"
desc = "Dense patch of grass, seems like a soft spot to lay on."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
icon_state = "deep_grass"
- edge_blending_priority = 7
- turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand)
+ edge_blending_priority = 6
+ initial_flooring = /decl/flooring/desert_planet/deep_grass
/turf/simulated/floor/outdoors/desert_planet/gravel
name = "gravel"
desc = "Mix of dirt and sand, it crumbles in your hand."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
icon_state = "gravel"
- edge_blending_priority = 5
- turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand)
+ edge_blending_priority = 3
+ initial_flooring = /decl/flooring/desert_planet/gravel
/turf/simulated/floor/outdoors/desert_planet/mud
name = "mud"
desc = "Squishy damp dirt, smells muddy."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
icon_state = "mud"
edge_blending_priority = 4
- turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand)
+ initial_flooring = /decl/flooring/desert_planet/mud
+// At last we've come full circle, a floor which is actually a wall.
+/turf/simulated/floor/outdoors/desert_planet/stonewall
+ name = "sandstone"
+ desc = "Rough sandstone."
+ icon_state = "stonewall"
+ density = TRUE
+ opacity = TRUE
+ edge_blending_priority = 7
+ initial_flooring = /decl/flooring/desert_planet/stonewall
+ turf_layers = list(/turf/simulated/floor/outdoors/rocks)
+ var/last_act = 0
+
+// Stolen from mineral turf code.
+/turf/simulated/floor/outdoors/desert_planet/stonewall/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(!user.IsAdvancedToolUser())
+ to_chat(user, "You don't have the dexterity to do this!")
+ return
+
+ if(istype(W, /obj/item/weapon/pickaxe))
+ if(!istype(user.loc, /turf))
+ return
+
+ var/obj/item/weapon/pickaxe/P = W
+ if(last_act + P.digspeed > world.time)//prevents message spam
+ return
+ last_act = world.time
+
+ playsound(user, P.drill_sound, 20, 1)
+ to_chat(user, "You start [P.drill_verb].")
+
+ if(do_after(user,P.digspeed))
+
+ to_chat(user, "You finish [P.drill_verb] \the [src].")
+ new /obj/item/stack/material/sandstone(src)
+ density = FALSE
+ opacity = FALSE
+ demote() // Converts the turf to the next layer in turf_layers.
+ ..()
+
+/turf/simulated/floor/outdoors/desert_planet/sandrock
+ name = "sandstone tiles"
+ desc = "Tightly joined in a mesmerizing lattice."
+ icon_state = "sandrock"
+ density = TRUE
+ opacity = TRUE
+ initial_flooring = /decl/flooring/desert_planet/sandrock
+
+// Declarations (for initial_flooring)
+/decl/flooring/desert_planet // Yeah don't use this one, it's a parent just for setting icon.
+ name = "desert stuff"
+ desc = "If you see this, this turf is using the wrong decl."
+ icon = 'modular_chomp/icons/turf/desert_tiles.dmi'
+ icon_base = null
+
+/decl/flooring/desert_planet/sand
+ name = "sand"
+ desc = "Salty and gritty."
+ icon_base = "sand"
+ has_base_range = 2
+
+/decl/flooring/desert_planet/deep_sand
+ name = "sand"
+ desc = "Really gets everywhere."
+ icon_base = "deep_sand"
+ has_base_range = 2
+
+/decl/flooring/desert_planet/grass
+ name = "grass"
+ desc = "Lively green grass, soft to walk on."
+ icon_base = "grass"
+
+/decl/flooring/desert_planet/deep_grass
+ name = "dense grass"
+ desc = "Dense patch of grass, seems like a soft spot to lay on."
+ icon_base = "deep_grass"
+
+/decl/flooring/desert_planet/gravel
+ name = "gravel"
+ desc = "Mix of dirt and sand, it crumbles in your hand."
+ icon_base = "gravel"
+
+/decl/flooring/desert_planet/mud
+ name = "mud"
+ desc = "Squishy damp dirt, smells muddy."
+ icon_base = "mud"
+
+/decl/flooring/desert_planet/stonewall
+ name = "sandstone"
+ desc = "Rough sandstone."
+ icon_base = "stonewall"
+
+/decl/flooring/desert_planet/sandrock
+ name = "sandstone tiles"
+ desc = "Tightly joined in a mesmerizing lattice."
+ icon_base = "sandrock"
+ flags = TURF_HAS_EDGES | TURF_HAS_CORNERS
+
+/*
+/obj/effect/floor_decal/desert_planet/floor/sand0_edge
+ name = "sand0_edge"
+ icon = 'icons/turf/desert_planet.dmi'
+ icon_state = "sand0_edge"
+
+/obj/effect/floor_decal/desert_planet/floor/gravel_edge
+ name = "gravel_edge"
+ icon = 'icons/turf/desert_planet.dmi'
+ icon_state = "gravel_edge"
+
+/obj/effect/floor_decal/desert_planet/floor/mud_edge
+ name = "mud_edge"
+ icon = 'icons/turf/desert_planet.dmi'
+ icon_state = "mud_edge"
+
+/obj/effect/floor_decal/desert_planet/floor/grass_edge
+ name = "grass_edge"
+ icon = 'icons/turf/desert_planet.dmi'
+ icon_state = "grass_edge"
+
+/obj/effect/floor_decal/desert_planet/floor/deep_grass_edge
+ name = "deep_grass_edge"
+ icon = 'icons/turf/desert_planet.dmi'
+ icon_state = "deep_grass_edge"
+*/
+
+/* #No idea how water tiles work
/turf/simulated/floor/outdoors/desert_planet/water
name = "water"
desc = "Clear cool water, looks potable."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
+ icon = 'icons/turf/desert_planet.dmi'
icon_state = "water"
- edge_blending_priority = 8
+ var/water_state = "water_shallow"
+ var/under_state = "sand"
+ can_be_plated = FALSE
+ outdoors = OUTDOORS_YES
+ flags = TURF_ACID_IMMUNE
+ layer = WATER_FLOOR_LAYER
+ can_dirty = FALSE // It's water
+ var/depth = 1 // Higher numbers indicates deeper water.
+ var/reagent_type = "water"
+ edge_blending_priority = 2
turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand)
/turf/simulated/floor/outdoors/desert_planet/deep_water
name = "deep water"
desc = "deep enough you can't see the bottom of it."
- icon = 'modular_chomp/icons/turf/desert_planet.dmi'
+ icon = 'icons/turf/desert_planet.dmi'
icon_state = "deep_water"
- edge_blending_priority = 9
+ var/water_state = "water_shallow"
+ var/under_state = "sand"
+ can_be_plated = FALSE
+ outdoors = OUTDOORS_YES
+ flags = TURF_ACID_IMMUNE
+ layer = WATER_FLOOR_LAYER
+ can_dirty = FALSE // It's water
+ var/depth = 2 // Higher numbers indicates deeper water.
+ var/reagent_type = "water"
+ edge_blending_priority = 4
turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand)
+
+ //I want this for the water tiles
+/turf/simulated/floor/water
+ name = "shallow water"
+ desc = "A body of water. It seems shallow enough to walk through, if needed."
+ icon = 'icons/turf/outdoors.dmi'
+ icon_state = "seashallow" // So it shows up in the map editor as water.
+ var/water_state = "water_shallow"
+ var/under_state = "rock"
+ edge_blending_priority = -1
+ movement_cost = 4
+ can_be_plated = FALSE
+ outdoors = OUTDOORS_YES
+ flags = TURF_ACID_IMMUNE
+
+ layer = WATER_FLOOR_LAYER
+
+ can_dirty = FALSE // It's water
+
+ var/depth = 1 // Higher numbers indicates deeper water.
+
+ var/reagent_type = "water"
+ // var/datum/looping_sound/water/soundloop CHOMPEdit: Removing soundloop for now.
+*/
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/desert_planet_mobs.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/desert_planet_mobs.dm
new file mode 100644
index 0000000000..fb6f3a0e00
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/desert_planet_mobs.dm
@@ -0,0 +1,47 @@
+/mob/living/simple_mob/animal/passive/dog/stray
+ name = "dog"
+ desc = "The most standard dog you have ever seen, it even smells like one."
+ tt_desc = "Canis lupus familiaris"
+ //faction = "mexico" //They are from Mexico. //Amusing but this prompts aggression from crew-aligned mobs.
+
+ icon = 'modular_chomp/icons/turf/desert_tiles.dmi'
+ icon_state = "dog"
+ item_state = "dog"
+ icon_living = "dog"
+ icon_rest = "dog"
+ icon_dead = "dog"
+
+ health = 50
+ maxHealth = 50
+
+ mob_size = MOB_SMALL
+ pass_flags = PASSTABLE
+ can_pull_size = ITEMSIZE_TINY
+ can_pull_mobs = MOB_PULL_NONE
+ layer = MOB_LAYER
+ density = 1
+ movement_cooldown = 0.75 //roughly a bit faster than a person
+
+ response_help = "pets"
+ response_disarm = "rolls aside"
+ response_harm = "stomps"
+
+ melee_damage_lower = 5
+ melee_damage_upper = 7
+ attacktext = list("nips", "bumps", "scratches")
+
+ vore_taste = "wet dog"
+
+ min_oxy = 16 //Require atleast 16kPA oxygen
+ minbodytemp = 223 //Below -50 Degrees Celcius
+ maxbodytemp = 523 //Above 80 Degrees Celcius
+ heat_damage_per_tick = 3
+ cold_damage_per_tick = 3
+
+ meat_amount = 7
+ holder_type = /obj/item/weapon/holder/armadillo
+ ai_holder_type = /datum/ai_holder/simple_mob/armadillo
+
+ speak_emote = list("rumbles", "chirr?", "churr")
+
+ say_list_type = /datum/say_list/armadillo
diff --git a/modular_chomp/code/modules/organs/organ_icon.dm b/modular_chomp/code/modules/organs/organ_icon.dm
index 339a45a4f6..6088084a06 100644
--- a/modular_chomp/code/modules/organs/organ_icon.dm
+++ b/modular_chomp/code/modules/organs/organ_icon.dm
@@ -4,10 +4,11 @@
// preferentially take digitigrade value from owner if available, THEN DNA.
// this allows limbs to be set properly when being printed in the bioprinter without an owner
// this also allows the preview mannequin to update properly because customisation topic calls don't call a DNA check
+ var/check_digi = istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot)
if(owner)
- digitigrade = owner.digitigrade && (istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot))
+ digitigrade = check_digi && owner.digitigrade
else if(dna)
- digitigrade = dna.digitigrade && (istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot))
+ digitigrade = check_digi && dna.digitigrade
var/robotic_digi = prosthetic_digi && digitigrade //could make it so the prosthetic digi var is more of a "does this limb have a custom digitigrade sprite for its robospriting" but this is fine for now
@@ -57,13 +58,15 @@
if((!istype(src,/obj/item/organ/external/head) && !(force_icon && !robotic_digi)) || (model && owner && owner.synth_markings))
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
- var/isdigitype = istype(mark_style,/datum/sprite_accessory/marking/digi)
- if(!(digitigrade ^ isdigitype)) //Equivalent to XNOR; this code will only run if either both digitigrade and isdigitype are true, or if both are false.
- var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
- mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
- add_overlay(mark_s) //So when it's not on your body, it has icons
- mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
- icon_cache_key += "[M][markings[M]["color"]]"
+ var/isdigitype = mark_style.digitigrade_acceptance
+ if(check_digi)
+ if (!(isdigitype & (digitigrade ? MARKING_DIGITIGRADE_ONLY : MARKING_NONDIGI_ONLY))) //checks flags based on which digitigrade type the limb is
+ continue
+ var/icon/mark_s = new/icon("icon" = digitigrade ? mark_style.digitigrade_icon : mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
+ mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
+ add_overlay(mark_s) //So when it's not on your body, it has icons
+ mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
+ icon_cache_key += "[M][markings[M]["color"]]"
if(body_hair && islist(h_col) && h_col.len >= 3)
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
if(!limb_icon_cache[cache_key])
diff --git a/modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi b/modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi
new file mode 100644
index 0000000000..2aa297b86c
Binary files /dev/null and b/modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi differ
diff --git a/modular_chomp/icons/obj/desert_planet/desert_plants.dmi b/modular_chomp/icons/obj/desert_planet/desert_plants.dmi
new file mode 100644
index 0000000000..3eb6d1c042
Binary files /dev/null and b/modular_chomp/icons/obj/desert_planet/desert_plants.dmi differ
diff --git a/modular_chomp/icons/obj/desert_planet/desert_props_64x64.dmi b/modular_chomp/icons/obj/desert_planet/desert_props_64x64.dmi
new file mode 100644
index 0000000000..766e457d24
Binary files /dev/null and b/modular_chomp/icons/obj/desert_planet/desert_props_64x64.dmi differ
diff --git a/modular_chomp/icons/obj/desert_planet/desert_rocks.dmi b/modular_chomp/icons/obj/desert_planet/desert_rocks.dmi
new file mode 100644
index 0000000000..3da476f9dd
Binary files /dev/null and b/modular_chomp/icons/obj/desert_planet/desert_rocks.dmi differ
diff --git a/modular_chomp/icons/turf/desert_planet.dmi b/modular_chomp/icons/turf/desert_planet.dmi
deleted file mode 100644
index c9b6d3a7b5..0000000000
Binary files a/modular_chomp/icons/turf/desert_planet.dmi and /dev/null differ
diff --git a/modular_chomp/icons/turf/desert_tiles.dmi b/modular_chomp/icons/turf/desert_tiles.dmi
new file mode 100644
index 0000000000..5a4d197acc
Binary files /dev/null and b/modular_chomp/icons/turf/desert_tiles.dmi differ
diff --git a/modular_chomp/icons/turf/outdoors_edge.dmi b/modular_chomp/icons/turf/outdoors_edge.dmi
index c9b6d3a7b5..f94dbd8ee0 100644
Binary files a/modular_chomp/icons/turf/outdoors_edge.dmi and b/modular_chomp/icons/turf/outdoors_edge.dmi differ
diff --git a/vorestation.dme b/vorestation.dme
index ac88f3b17e..515aa06470 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -71,6 +71,7 @@
#include "code\__defines\misc_ch.dm"
#include "code\__defines\misc_vr.dm"
#include "code\__defines\mobs.dm"
+#include "code\__defines\mobs_ch.dm"
#include "code\__defines\mobs_vr.dm"
#include "code\__defines\mobs_yw.dm"
#include "code\__defines\nifsoft.dm"
@@ -4525,6 +4526,7 @@
#include "modular_chomp\code\game\machinery\airconditioner_ch.dm"
#include "modular_chomp\code\game\machinery\autolathe_armory.dm"
#include "modular_chomp\code\game\objects\items\clockwork\ratvarian_spear.dm"
+#include "modular_chomp\code\game\objects\structures\desert_planet_structures.dm"
#include "modular_chomp\code\game\objects\structures\loot_pile.dm"
#include "modular_chomp\code\game\objects\structures\watercloset_ch.dm"
#include "modular_chomp\code\game\objects\structures\crate_lockers\largecrate.dm"
@@ -4591,6 +4593,7 @@
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\gygax.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\occult\constructs\juggernaut.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\bigdragon.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\desert_planet_mobs.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\greatwolf.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\swoopie.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\vore.dm"