Merge branch 'master' into shep-dev-looping-alarms

This commit is contained in:
Razgriz
2023-02-14 15:17:33 -07:00
committed by GitHub
37 changed files with 996 additions and 206 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -18,3 +18,4 @@
/obj/effect/floor_decal/snow/floor/pointy
icon_state = "snowfloorpointy"

View File

@@ -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,8 +220,7 @@ 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
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)
@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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--

View File

@@ -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

View File

@@ -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()
..()
@@ -94,3 +104,70 @@
R.verbs |= /mob/living/proc/shred_limb
R.verbs |= /mob/living/silicon/robot/proc/rest_style
..()
//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'

View File

@@ -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

View File

@@ -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 = ""

View File

@@ -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,6 +153,137 @@
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"
@@ -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)"

View File

@@ -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

View File

@@ -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)

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -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

View File

@@ -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, "<span class='warning'>You feel an overwhelming wave of warmth from entering \the [src]!</span>")
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, "<span class='notice'>You begin to remove \the [src] with your [W].</span>")
if(do_after(user, 4 SECONDS * W.toolspeed))
to_chat(user, "<span class='notice'>\The [src] has been dug up, and now lies in a pile nearby.</span>")
icon_state = "sand_dug"
new /obj/item/weapon/ore/glass (src)
else
to_chat(user, "<span class='notice'>You decide to not finish removing \the [src].</span>")
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, "<span class='warning'>You don't have the dexterity to do this!</span>")
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, "<span class='notice'>You start [P.drill_verb].</span>")
if(do_after(user,P.digspeed))
to_chat(user, "<span class='notice'>You finish [P.drill_verb] \the [src].</span>")
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.
*/

View File

@@ -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

View File

@@ -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,9 +58,11 @@
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]")
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

View File

@@ -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",

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -38,7 +38,7 @@ export const CharacterDirectory = (props, context) => {
{(overlay && <ViewCharacter />) || (
<Fragment>
<Section
title="Controls"
title="Settings and Preferences"
buttons={
<Fragment>
<Box color="label" inline>
@@ -52,7 +52,6 @@ export const CharacterDirectory = (props, context) => {
/>
</Fragment>
}>
<Section title="Settings and Preferences">
<LabeledList>
<LabeledList.Item label="Visibility">
<Button
@@ -69,10 +68,18 @@ export const CharacterDirectory = (props, context) => {
/>
</LabeledList.Item>
<LabeledList.Item label="Gender">
<Button fluid content={personalGenderTag} onClick={() => act('setGenderTag')} />
<Button
fluid
content={personalGenderTag}
onClick={() => act('setTag', { overwrite_prefs: overwritePrefs })}
/>
</LabeledList.Item>
<LabeledList.Item label="Sexuality">
<Button fluid content={personalSexualityTag} onClick={() => act('setSexualityTag')} />
<Button
fluid
content={personalSexualityTag}
onClick={() => act('setTag', { overwrite_prefs: overwritePrefs })}
/>
</LabeledList.Item>
<LabeledList.Item label="ERP Tag">
<Button
@@ -82,7 +89,11 @@ export const CharacterDirectory = (props, context) => {
/>
</LabeledList.Item>
<LabeledList.Item label="Event Pref">
<Button fluid content={personalEventTag} onClick={() => act('setEventTag')} />
<Button
fluid
content={personalEventTag}
onClick={() => act('setTag', { overwrite_prefs: overwritePrefs })}
/>
</LabeledList.Item>
<LabeledList.Item label="Advertisement">
<Button fluid content="Edit Ad" onClick={() => act('editAd', { overwrite_prefs: overwritePrefs })} />

View File

@@ -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"