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/datums/mind_vr.dm b/code/datums/mind_vr.dm
index d2ae478410..f6ba695438 100644
--- a/code/datums/mind_vr.dm
+++ b/code/datums/mind_vr.dm
@@ -4,6 +4,10 @@
var/directory_tag
var/directory_erptag
var/directory_ad
+ //CHOMPEdit additions
+ var/vantag_preference = VANTAG_NONE
+ var/directory_gendertag
+ var/directory_sexualitytag
/mob/living/mind_initialize()
. = ..()
@@ -12,3 +16,7 @@
mind.directory_tag = client.prefs.directory_tag
mind.directory_erptag = client.prefs.directory_erptag
mind.directory_ad = client.prefs.directory_ad
+ //CHOMPEdit additions
+ mind.vantag_preference = client.prefs.vantag_preference
+ mind.directory_gendertag = client.prefs.directory_gendertag
+ mind.directory_sexualitytag = client.prefs.directory_sexualitytag
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index db61554bd1..53099410dc 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -132,15 +132,15 @@
qdel(src)
/obj/effect/spider/eggcluster/small
- spiders_min = 1
- spiders_max = 3
+ spiders_min = 2 //CHOMP Edit
+ spiders_max = 6 //CHOMP Edit
/obj/effect/spider/eggcluster/small/frost
spider_type = /obj/effect/spider/spiderling/frost
/obj/effect/spider/eggcluster/royal
spiders_min = 2
- spiders_max = 5
+ spiders_max = 6 //CHOMP Edit
spider_type = /obj/effect/spider/spiderling/varied
/obj/effect/spider/spiderling
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 88701319cd..30d032215f 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -88,8 +88,18 @@
/obj/item/device/taperecorder/hear_talk(mob/M, list/message_pieces, verb)
var/msg = multilingual_to_message(message_pieces, requires_machine_understands = TRUE, with_capitalization = TRUE)
+ //START OF CHOMPEDIT
+ var/voice = "Unknown"
+ if (M.type == /mob/living/carbon/human)
+ {
+ var/mob/living/carbon/human/H = M
+ voice = H.voice
+ }
+ else
+ voice = M.name
+ //END OF CHOMPEDIT
if(mytape && recording)
- mytape.record_speech("[M.name] [verb], \"[msg]\"")
+ mytape.record_speech("[voice] [verb], \"[msg]\"") //CHOMP Edit
/obj/item/device/taperecorder/see_emote(mob/M as mob, text, var/emote_type)
@@ -432,4 +442,4 @@
//Random colour tapes
/obj/item/device/tape/random/New()
- icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
\ No newline at end of file
+ icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
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/client/verbs/character_directory.dm b/code/modules/client/verbs/character_directory.dm
index ddea49806b..d4441af20b 100644
--- a/code/modules/client/verbs/character_directory.dm
+++ b/code/modules/client/verbs/character_directory.dm
@@ -34,9 +34,9 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
data["personalVisibility"] = user.mind.show_in_directory
data["personalTag"] = user.mind.directory_tag || "Unset"
data["personalErpTag"] = user.mind.directory_erptag || "Unset"
- data["personalEventTag"] = vantag_choices_list[user.client.prefs.vantag_preference] //CHOMPEdit
- data["personalGenderTag"] = user.client.prefs.directory_gendertag || "Unset" // CHOMPStation Edit: Character Directory Update
- data["personalSexualityTag"] = user.client.prefs.directory_sexualitytag || "Unset" // CHOMPStation Edit: Character Directory Update
+ data["personalEventTag"] = vantag_choices_list[user.mind.vantag_preference] //CHOMPEdit
+ data["personalGenderTag"] = user.mind.directory_gendertag || "Unset" // CHOMPStation Edit: Character Directory Update
+ data["personalSexualityTag"] = user.mind.directory_sexualitytag || "Unset" // CHOMPStation Edit: Character Directory Update
else if (user?.client?.prefs)
data["personalVisibility"] = user.client.prefs.show_in_directory
data["personalTag"] = user.client.prefs.directory_tag || "Unset"
@@ -62,9 +62,9 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
var/species = null
var/ooc_notes = null
var/flavor_text = null
- var/gendertag = C.prefs.directory_gendertag || "Unset" // CHOMPStation Edit: Character Directory Update
- var/sexualitytag = C.prefs.directory_sexualitytag || "Unset" // CHOMPStation Edit: Character Directory Update
- var/eventtag = vantag_choices_list[C.prefs.vantag_preference] //CHOMPEdit
+ var/gendertag = null // CHOMPStation Edit: Character Directory Update
+ var/sexualitytag = null // CHOMPStation Edit: Character Directory Update
+ var/eventtag = vantag_choices_list[VANTAG_NONE] //CHOMPEdit
var/tag
var/erptag
var/character_ad
@@ -72,10 +72,16 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
tag = C.mob.mind.directory_tag || "Unset"
erptag = C.mob.mind.directory_erptag || "Unset"
character_ad = C.mob.mind.directory_ad
+ gendertag = C.mob.mind.directory_gendertag || "Unset"
+ sexualitytag = C.mob.mind.directory_sexualitytag || "Unset"
+ eventtag = vantag_choices_list[C.mob.mind.vantag_preference]
else
tag = C.prefs.directory_tag || "Unset"
erptag = C.prefs.directory_erptag || "Unset"
character_ad = C.prefs.directory_ad
+ gendertag = C.prefs.directory_gendertag || "Unset"
+ sexualitytag = C.prefs.directory_sexualitytag || "Unset"
+ eventtag = vantag_choices_list[C.prefs.vantag_preference]
//CHOMPEdit Start
if(ishuman(C.mob))
@@ -176,19 +182,6 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
if(!new_tag)
return
return set_for_mind_or_prefs(user, action, new_tag, can_set_prefs, can_set_mind)
- // CHOMPStation Edit Start: Directory Update
- if("setGenderTag")
- var/list/new_gendertag = tgui_input_list(usr, "Pick a new Gender tag for the character directory. This is YOUR gender, not what you prefer.", "Character Gender Tag", GLOB.char_directory_gendertags)
- if(!new_gendertag)
- return
- usr?.client?.prefs?.directory_gendertag = new_gendertag
- return TRUE
- if("setSexualityTag")
- var/list/new_sexualitytag = tgui_input_list(usr, "Pick a new Sexuality/Orientation tag for the character directory", "Character Sexuality/Orientation Tag", GLOB.char_directory_sexualitytags)
- if(!new_sexualitytag)
- return
- usr?.client?.prefs?.directory_sexualitytag = new_sexualitytag
- return TRUE
// CHOMPStation Edit End: Directory Update
if("setErpTag")
var/list/new_erptag = tgui_input_list(usr, "Pick a new ERP tag for the character directory", "Character ERP Tag", GLOB.char_directory_erptags)
@@ -209,8 +202,17 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
if(isnull(new_ad))
return
return set_for_mind_or_prefs(user, action, new_ad, can_set_prefs, can_set_mind)
- //CHOMPEdit start
- //CHOMPEdit begin
+ // CHOMPStation Edit Start: Directory Update
+ if("setGenderTag")
+ var/list/new_gendertag = tgui_input_list(usr, "Pick a new Gender tag for the character directory. This is YOUR gender, not what you prefer.", "Character Gender Tag", GLOB.char_directory_gendertags)
+ if(!new_gendertag)
+ return
+ return set_for_mind_or_prefs(user, action, new_gendertag, can_set_prefs, can_set_mind)
+ if("setSexualityTag")
+ var/list/new_sexualitytag = tgui_input_list(usr, "Pick a new Sexuality/Orientation tag for the character directory", "Character Sexuality/Orientation Tag", GLOB.char_directory_sexualitytags)
+ if(!new_sexualitytag)
+ return
+ return set_for_mind_or_prefs(user, action, new_sexualitytag, can_set_prefs, can_set_mind)
if("setEventTag")
var/list/names_list = list()
for(var/C in vantag_choices_list)
@@ -218,9 +220,8 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
var/list/new_eventtag = input(usr, "Pick your preference for event involvement", "Event Preference Tag", usr?.client?.prefs?.vantag_preference) as null|anything in names_list
if(!new_eventtag)
return
- usr?.client?.prefs?.vantag_preference = names_list[new_eventtag]
- return TRUE
- //CHOMPEdit end
+ return set_for_mind_or_prefs(user, action, names_list[new_eventtag], can_set_prefs, can_set_mind)
+ //CHOMPEdit end
/datum/character_directory/proc/set_for_mind_or_prefs(mob/user, action, new_value, can_set_prefs, can_set_mind)
can_set_prefs &&= !!user.client.prefs
@@ -253,3 +254,18 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
if (can_set_mind)
user.mind.directory_ad = new_value
return TRUE
+ if ("setEventTag")
+ if (can_set_prefs)
+ user.client.prefs.vantag_preference = new_value
+ if (can_set_mind)
+ user.mind.vantag_preference = new_value
+ if ("setGenderTag")
+ if (can_set_prefs)
+ user.client.prefs.directory_gendertag = new_value
+ if (can_set_mind)
+ user.mind.directory_gendertag = new_value
+ if ("setSexualityTag")
+ if (can_set_prefs)
+ user.client.prefs.directory_sexualitytag = new_value
+ if (can_set_mind)
+ user.mind.directory_sexualitytag = new_value
\ No newline at end of file
diff --git a/code/modules/events/event_container_vr.dm b/code/modules/events/event_container_vr.dm
index 6c1eea9d60..ecc47a09b1 100644
--- a/code/modules/events/event_container_vr.dm
+++ b/code/modules/events/event_container_vr.dm
@@ -46,6 +46,7 @@
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Shipping Error", /datum/event/shipping_error , 30, list(ASSIGNMENT_ANY = 2), 0),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lore News", /datum/event/lore_news, 400),
+ new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1, min_jobs = list(ASSIGNMENT_CARGO = 1)),
// Spawns mice, lizards, or dud spiderlings
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_JANITOR = 100), 1),
// Rot only weakens walls, not destroy them
@@ -94,6 +95,7 @@
// Radiation, but only in space.
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Storm", /datum/event/solar_storm, 20, list(ASSIGNMENT_ENGINEER = 40, ASSIGNMENT_SECURITY = 20), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, -20, list(ASSIGNMENT_SECURITY = 30, ASSIGNMENT_HOS = 20, ASSIGNMENT_WARDEN = 20), 0, min_jobs = list(ASSIGNMENT_SECURITY = 1)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 100), 1, min_jobs = list(ASSIGNMENT_MEDICAL = 1)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100), 1, min_jobs = list(ASSIGNMENT_SCIENTIST = 1), min_jobs = list(ASSIGNMENT_SCIENTIST = 1, ASSIGNMENT_SECURITY =1)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1),
@@ -116,12 +118,14 @@
available_events = list(
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 900),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 5, list(ASSIGNMENT_ENGINEER = 35), 1),
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, -100, list(ASSIGNMENT_SECURITY = 40, ASSIGNMENT_HOS = 10, ASSIGNMENT_WARDEN = 10, ASSIGNMENT_ENGINEER = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, -100, list(ASSIGNMENT_SECURITY = 40, ASSIGNMENT_HOS = 10, ASSIGNMENT_WARDEN = 10, ASSIGNMENT_ENGINEER = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 1)),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, -110, list(ASSIGNMENT_SECURITY = 50, ASSIGNMENT_HOS = 10, ASSIGNMENT_WARDEN = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1),
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, -110, list(ASSIGNMENT_ENGINEER = 50), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 3)),
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Metroid Infestation", /datum/event/metroid_infestation, -105, list(ASSIGNMENT_SECURITY = 30, ASSIGNMENT_SCIENCE = 20, ASSIGNMENT_HOS = 15, ASSIGNMENT_WARDEN = 15), 1 , min_jobs = list(ASSIGNMENT_SECURITY = 3, ASSIGNMENT_SCIENCE = 1)),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, -90, list(ASSIGNMENT_ENGINEER = 50, ASSIGNMENT_MEDICAL = 10, ASSIGNMENT_ANY = 1), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Metroid Infestation", /datum/event/metroid_infestation, -100, list(ASSIGNMENT_SECURITY = 30, ASSIGNMENT_SCIENCE = 20, ASSIGNMENT_HOS = 15, ASSIGNMENT_WARDEN = 15, ASSIGNMENT_ANY = 2), 1 , min_jobs = list(ASSIGNMENT_SECURITY = 2, ASSIGNMENT_SCIENCE = 1)),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 20, list(ASSIGNMENT_ENGINEER = 15), 1),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Spider Infestation", /datum/event/spider_infestation, -60, list(ASSIGNMENT_SECURITY = 20, ASSIGNMENT_HOS = 10, ASSIGNMENT_WARDEN = 10, ASSIGNMENT_ANY = 3), 0),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1, min_jobs = list(ASSIGNMENT_CARGO = 1)),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, -50, list(ASSIGNMENT_MEDICAL = 25), 1, min_jobs = list(ASSIGNMENT_MEDICAL = 2)),
)
add_disabled_events(list(
@@ -129,7 +133,6 @@
//Needs Xenobio containment breach fixed
//new /datum/event_meta(EVENT_LEVEL_MAJOR, "Xenobiology Breach", /datum/event/prison_break/xenobiology, -10, list(ASSIGNMENT_SCIENCE = 30, ASSIGNMENT_ENGINEER = 20), 1),
//new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Strike", /datum/event/meteor_strike, 10, list(ASSIGNMENT_ENGINEER = 15), 1),
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1, min_jobs = list(ASSIGNMENT_CARGO = 1)),
))
#undef ASSIGNMENT_ANY
diff --git a/code/modules/events/metroid_infestation.dm b/code/modules/events/metroid_infestation.dm
index c23e14dd74..b0e74598b7 100644
--- a/code/modules/events/metroid_infestation.dm
+++ b/code/modules/events/metroid_infestation.dm
@@ -6,9 +6,12 @@
var/give_positions = 0
/datum/event/metroid_infestation/setup()
+ if(prob(50)) //50% chance of the event to even occur if procced
+ kill()
+ return
announceWhen = rand(announceWhen, announceWhen + 60)
- spawncount = rand(1 * severity, 2 * severity)
+ spawncount = rand(2 * severity, 4 * severity)
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines)
//CHOMPEdit: Added a couple areas to the exclusion. Also made this actually work.
@@ -25,7 +28,15 @@
/datum/event/metroid_infestation/start()
while((spawncount >= 1) && vents.len)
var/obj/vent = pick(vents)
- new /mob/living/simple_mob/metroid/juvenile/baby(get_turf(vent))
+ var/spawn_metroids = pickweight(list(
+ /mob/living/simple_mob/metroid/juvenile/baby = 60,
+ /mob/living/simple_mob/metroid/juvenile/super = 30,
+ /mob/living/simple_mob/metroid/juvenile/alpha = 10,
+ /mob/living/simple_mob/metroid/juvenile/gamma = 3,
+ /mob/living/simple_mob/metroid/juvenile/zeta = 2,
+ /mob/living/simple_mob/metroid/juvenile/omega = 1,
+ ))
+ new spawn_metroids(get_turf(vent))
vents -= vent
spawncount--
vents.Cut()
diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm
index a5ca92b650..7d5d735903 100644
--- a/code/modules/events/spider_infestation.dm
+++ b/code/modules/events/spider_infestation.dm
@@ -6,8 +6,11 @@
/datum/event/spider_infestation/setup()
+ if(prob(75) && severity == 3) //CHOMP Add 75% chance of the event to even occur if chosen and is major severity
+ kill()
+ return
announceWhen = rand(announceWhen, announceWhen + 60)
- spawncount = rand(6 * severity, 12 * severity) //spiderlings only have a 50% chance to grow big and strong //CHOMP Edit: Tripled amount spawned
+ spawncount = rand(6 * severity, 14 * severity) //spiderlings only have a 50% chance to grow big and strong //CHOMP Edit: old: 2/4 new: 6/14
sent_spiders_to_station = 0
/datum/event/spider_infestation/announce()
@@ -29,6 +32,6 @@
while((spawncount >= 1) && vents.len)
var/obj/vent = pick(vents)
- new /obj/effect/spider/spiderling/virgo(vent.loc) //VOREStation Edit - No nurses
+ new /obj/effect/spider/spiderling(vent.loc) //VOREStation Edit - No nurses //Oh my JESUS CHRIST, this slipped past me. Literally no nurses. Well guess what, nurses are back.
vents -= vent
spawncount--
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm
index fb91b0cce7..de898f80a7 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm
@@ -391,20 +391,23 @@
/datum/trait/negative/reduced_biocompat_minor
name = "Reduced Biocompatibility, Minor"
desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records! Chems are only 80% as effective on you!"
- cost = -1
+ cost = -2
var_changes = list("chem_strength_heal" = 0.8)
+ can_take = ORGANICS
/datum/trait/negative/reduced_biocompat
name = "Reduced Biocompatibility"
desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records! Chems are only 60% as effective on you!"
cost = -4
var_changes = list("chem_strength_heal" = 0.6)
+ can_take = ORGANICS
/datum/trait/negative/reduced_biocompat_extreme
name = "Reduced Biocompatibility, Major"
desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records! Chems are only 30% as effective on you!"
cost = -8
var_changes = list("chem_strength_heal" = 0.3)
+ can_take = ORGANICS
// Rykkanote: Relocated these here as we're no longer a YW downstream.
/datum/trait/negative/light_sensitivity
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_ch.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_ch.dm
index e90b557d20..9103385489 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station_ch.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station_ch.dm
@@ -1,3 +1,13 @@
+//Lets make this shit more sane-shark
+/hook/startup/proc/robot_modules_ch()
+//define OUR modules
+ robot_modules["ExploreHound"] = /obj/item/weapon/robot_module/robot/exploration //Array define
+ robot_module_types += "ExploreHound" //Add to global
+ robot_modules["Honk-Hound"] = /obj/item/weapon/robot_module/robot/clerical/honkborg
+ robot_modules["UnityHound"] = /obj/item/weapon/robot_module/robot/chound
+
+
+
//TFF 5/1/20 - Add Ore Scanner for mining drones
/obj/item/weapon/robot_module/drone/mining/New()
..()
@@ -93,4 +103,71 @@
R.verbs |= /mob/living/proc/toggle_rider_reins
R.verbs |= /mob/living/proc/shred_limb
R.verbs |= /mob/living/silicon/robot/proc/rest_style
- ..()
\ No newline at end of file
+ ..()
+
+//Explo doggos
+/obj/item/weapon/robot_module/robot/exploration
+ name = "ExploreHound"
+ channels = list("Exploration" = 1)
+ languages = list(
+ LANGUAGE_SOL_COMMON = 1,
+ LANGUAGE_UNATHI = 1,
+ LANGUAGE_SIIK = 1,
+ LANGUAGE_AKHANI = 1,
+ LANGUAGE_SKRELLIAN = 1,
+ LANGUAGE_SKRELLIANFAR = 0,
+ LANGUAGE_ROOTLOCAL = 0,
+ LANGUAGE_TRADEBAND = 1,
+ LANGUAGE_GUTTER = 0,
+ LANGUAGE_SCHECHI = 1,
+ LANGUAGE_EAL = 1,
+ LANGUAGE_TERMINUS = 1,
+ LANGUAGE_SIGN = 0
+ )
+
+/obj/item/weapon/robot_module/robot/exploration
+ sprites = list(
+ "ExploreHound" = "exploration",
+ )
+ can_be_pushed = 0
+/obj/item/weapon/robot_module/robot/exploration/New(var/mob/living/silicon/robot/R)
+ src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
+ src.modules += new /obj/item/device/dogborg/boop_module(src)
+ src.modules += new /obj/item/device/dogborg/sleeper/K9/exploration(src)
+ src.modules += new /obj/item/weapon/gun/energy/locked/phasegun/unlocked/mounted/cyborg(src)
+ src.modules += new /obj/item/device/cataloguer(src)
+ src.modules += new /obj/item/roller_holder(src)
+ src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/flare(src)
+
+ src.emag = new /obj/item/weapon/dogborg/pounce(src)
+
+ R.can_buckle = 1
+ R.icon = 'modular_chomp/icons/mob/widerobot_exp_ch.dmi'
+ R.wideborg_dept = R.icon
+ R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
+ R.ui_style_vr = TRUE
+ R.pixel_x = -16
+ R.old_x = -16
+ R.default_pixel_x = -16
+ R.dogborg = TRUE
+ R.vore_capacity = 1
+ R.vore_capacity_ex = list("stomach" = 1)
+ R.wideborg = TRUE
+ ..()
+
+
+
+/obj/item/device/dogborg/sleeper/K9/exploration //The K9 portabrig
+ name = "Store-Belly"
+ desc = "Equipment for a ExploreHound unit. A mounted portable-storage device that holds supplies/person."
+ icon_state = "sleeperb"
+ injection_chems = null
+ medsensor = FALSE
+ recycles = TRUE
+ max_item_count = 4
+
+/obj/item/weapon/gun/energy/taser/mounted/cyborg/flare
+ name = "flare gun"
+ desc = "A flare-gun"
+ projectile_type = /obj/item/projectile/energy/flash/flare
+ fire_sound = 'sound/weapons/tablehit1.ogg'
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
index a8b2cb6194..a04907ae0d 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
@@ -72,8 +72,6 @@
robot_modules["Service-Hound"] = /obj/item/weapon/robot_module/robot/clerical/butler/brodog
robot_modules["BoozeHound"] = /obj/item/weapon/robot_module/robot/clerical/butler/booze
robot_modules["KMine"] = /obj/item/weapon/robot_module/robot/miner/kmine
- robot_modules["UnityHound"] = /obj/item/weapon/robot_module/robot/chound //CHOMP Addition Unity
- robot_modules["Honk-Hound"] = /obj/item/weapon/robot_module/robot/clerical/honkborg //CHOMP Addition Honk
robot_modules["Stray"] = /obj/item/weapon/robot_module/robot/stray
robot_modules["TraumaHound"] = /obj/item/weapon/robot_module/robot/medical/traumahound
return 1
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/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index c2fbbad018..9c9db605c7 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -261,6 +261,9 @@
var/alert_msg = " Integrity at [integrity]%"
var/message_sound = 'sound/ambience/matteralarm.ogg'
+ if(!(src.z in using_map.station_levels)) // CHOMPEdit: SM Global Warn Fix; Is our location the same as the station? If no, then we're not going to warn.
+ return // CHOMPEdit: SM Global Warn Fix; No need to announce if we're outside the station's Z, at a POI, etc.
+
if(final_countdown) // Chompers additon
return
if(damage > emergency_point)
@@ -450,6 +453,10 @@
candidate_alarm.causality.start()
causalitywarn = 1
+ if(!(src.z in using_map.station_levels)) // CHOMPEdit: SM Global Warn Fix; Is our location the same as the station? If no, then we're not going to use a stabilization field.
+ explode() // CHOMPEdit: SM Global Warn Fix; Just exploding, because we're not on the station's Z. No safety countdown.
+ return // CHOMPEdit: SM Global Warn Fix; Stops the code here.
+
if(final_countdown) // We're already doing it go away
return
final_countdown = TRUE
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/code/modules/player_tips/player_tips_list.dm b/modular_chomp/code/modules/player_tips/player_tips_list.dm
index 5cf9050953..7c5e437d51 100644
--- a/modular_chomp/code/modules/player_tips/player_tips_list.dm
+++ b/modular_chomp/code/modules/player_tips/player_tips_list.dm
@@ -21,7 +21,7 @@ When editing the list, please try and keep similar probabilities near each other
switch(choice)
if("general")
- var/info = "The following is a general tip to playing on CHOMPStation! \n"
+ var/info = "The following is a general tip to playing on CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of character setup! \n"
return pick(
prob(60); "[info] Got a question about gameplay, roleplay or the setting? Press F1 to Mentorhelp!",
prob(60); "[info] We have a wiki that is actively updated! Please check it out at https://wiki.chompstation13.net/index.php/Chomp_Station_Wiki for help!",
@@ -36,7 +36,7 @@ When editing the list, please try and keep similar probabilities near each other
if("gameplay")
- var/info = "The following is a gameplay-focused tip to playing on CHOMPStation \n"
+ var/info = "The following is a gameplay-focused tip to playing on CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of character setup! \n"
return pick(
prob(50); "[info] To talk to your fellow coworkers, use ';'! You may append it by an exclamation mark, like ';!' to perform an audiable emote. ",
prob(50); "[info] Lost on the map? You can find In-Character help by speaking on the Common Radio. You can do this by pressing F3 and typing ' ; ' before your message. Your fellow co-workers will likely help. If OOC help is preferred, press F1 for mentorhelp. ",
@@ -51,7 +51,7 @@ When editing the list, please try and keep similar probabilities near each other
)
if("roleplay")
- var/info = "The following is a roleplay-focused tip to playing on CHOMPStation \n"
+ var/info = "The following is a roleplay-focused tip to playing on CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of character setup! \n"
return pick(
prob(50); "[info] Having difficulty finding scenes? The number one tip that people should take for finding scenes is to be active! Generally speaking, people are more likely to interact with you if you are moving about and doing things. Don't be afraid to talk to people, you're less likely to be approached if you're sat alone at a table silently. People that are looking for scenes generally like to see how you type and RP before they'll start working towards a scene with you.",
prob(50); "[info] Please avoid a character that knows everything. Having only a small set of jobs you are capable of doing can help flesh out your character! It's OK for things to break and fail if nobody is around to fix it - you do not need to do others' jobs.",
@@ -64,7 +64,7 @@ When editing the list, please try and keep similar probabilities near each other
)
if("lore")
- var/info = "The following is tip for understanding the lore of CHOMPStation \n"
+ var/info = "The following is tip for understanding the lore of CHOMPStation! You can disable them using the periodic tips toggle in the Global tab of character setup! \n"
return pick(
prob(25); "[info] Our lore is somewhat in line with other servers. But not Virgo's. They wrote themselves out of the timeline, lol. The year is 2564 (current year+541).",
prob(75); "[info] You can find a short summary of our setting that everyone should know at https://wiki.chompstation13.net/index.php/Lore",
diff --git a/modular_chomp/icons/mob/widerobot_exp_ch.dmi b/modular_chomp/icons/mob/widerobot_exp_ch.dmi
new file mode 100644
index 0000000000..ff8d161032
Binary files /dev/null and b/modular_chomp/icons/mob/widerobot_exp_ch.dmi differ
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/tgui/packages/tgui/interfaces/CharacterDirectory.js b/tgui/packages/tgui/interfaces/CharacterDirectory.js
index 8e37c78b37..0749816aa7 100644
--- a/tgui/packages/tgui/interfaces/CharacterDirectory.js
+++ b/tgui/packages/tgui/interfaces/CharacterDirectory.js
@@ -38,7 +38,7 @@ export const CharacterDirectory = (props, context) => {
{(overlay && ) || (
@@ -52,7 +52,6 @@ export const CharacterDirectory = (props, context) => {
/>
}>
-
-
- act('setSexualityTag')} />
+ act('setTag', { overwrite_prefs: overwritePrefs })}
+ />
{
/>
- act('setEventTag')} />
+ act('setTag', { overwrite_prefs: overwritePrefs })}
+ />
act('editAd', { overwrite_prefs: overwritePrefs })} />
diff --git a/vorestation.dme b/vorestation.dme
index f3b3fa3957..94a7665201 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"
@@ -4526,6 +4527,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"