[MIRROR] up ports misc gripper, gargoyle, petrification, some message fixes (#9566)

Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2024-11-30 11:07:33 -07:00
committed by GitHub
parent b4c7c534a9
commit 03e4547819
24 changed files with 164 additions and 224 deletions

View File

@@ -1,8 +1,11 @@
//CHOMPEDIT Start: edit the file human/update_icons.dm in the modular_chomp folder as well, if you update these (and clothing/clothing.dm line 789, the hardcoded layer there in /obj/item/clothing/suit/make_worn_icon)
// These are used as the layers for the icons, as well as indexes in a list that holds onto them.
// Technically the layers used are all -100+layer to make them FLOAT_LAYER overlays.
//Human Overlays Indexes/////////
//CHOMPEDIT edit the file human/update_icons.dm in the modular_chomp folder as well, if you update these (and clothing/clothing.dm line 789, the hardcoded layer there in /obj/item/clothing/suit/make_worn_icon)
#define MUTATIONS_LAYER 1 //Mutations like fat, and lasereyes
#define TAIL_LOWER_LAYER 2 //Tail as viewed from the south //CHOMPStation edit - underneath bodyparts
#define WING_LOWER_LAYER 3 //Wings as viewed from the south //CHOMPStation edit - underneath bodyparts
#define BODYPARTS_LAYER 4 //Bodyparts layer - CHOMPStation edit
#define BODYPARTS_LAYER 4 //Bodyparts layer
#define SKIN_LAYER 5 //Skin things added by a call on species
#define BLOOD_LAYER 6 //Bloodied hands/feet/anything else
#define MOB_DAM_LAYER 7 //Injury overlay sprites like open wounds
@@ -15,13 +18,13 @@
#define GLOVES_LAYER 14 //Glove-slot item
#define BELT_LAYER 15 //Belt-slot item
#define SUIT_LAYER 16 //Suit-slot item
#define TAIL_UPPER_LAYER 17 //Some species have tails to render (As viewed from the N, E, or W)
#define TAIL_UPPER_LAYER 17 //Some species have tails to render (As viewed from the N, E, or W)
#define GLASSES_LAYER 18 //Eye-slot item
#define BELT_LAYER_ALT 19 //Belt-slot item (when set to be above suit via verb)
#define SUIT_STORE_LAYER 20 //Suit storage-slot item
#define BACK_LAYER 21 //Back-slot item
#define HAIR_LAYER 22 //The human's hair
#define HAIR_ACCESSORY_LAYER 23 //VOREStation edit. Simply move this up a number if things are added.
#define HAIR_ACCESSORY_LAYER 23 //Simply move this up a number if things are added.
#define EARS_LAYER 24 //Both ear-slot items (combined image)
#define EYES_LAYER 25 //Mob's eyes (used for glowing eyes)
#define FACEMASK_LAYER 26 //Mask-slot item
@@ -39,5 +42,8 @@
#define FIRE_LAYER 38 //'Mob on fire' overlay layer
#define MOB_WATER_LAYER 39 //'Mob submerged' overlay layer
#define TARGETED_LAYER 40 //'Aimed at' overlay layer
#define TOTAL_LAYERS 40 //CHOMPStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list.
//CHOMPEdit End
#define TOTAL_LAYERS 40 // <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list.
//These two are only used for gargoyles currently
#define HUMAN_BODY_LAYERS list(MUTATIONS_LAYER, TAIL_LOWER_LAYER, WING_LOWER_LAYER, BODYPARTS_LAYER, SKIN_LAYER, BLOOD_LAYER, MOB_DAM_LAYER, TAIL_UPPER_LAYER, HAIR_LAYER, HAIR_ACCESSORY_LAYER, EYES_LAYER, WING_LAYER, VORE_BELLY_LAYER, VORE_TAIL_LAYER, TAIL_UPPER_LAYER_ALT)
#define HUMAN_OTHER_LAYERS list(MODIFIER_EFFECTS_LAYER, FIRE_LAYER, MOB_WATER_LAYER, TARGETED_LAYER)

View File

@@ -18,9 +18,9 @@
if (!ishuman(parent))
return COMPONENT_INCOMPATIBLE
gargoyle = parent
add_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_transformation) //CHOMPEdit TGPanel
add_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_pause) //CHOMPEdit TGPanel
add_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_checkenergy) //CHOMPEdit TGPanel
add_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_transformation)
add_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_pause)
add_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_checkenergy)
START_PROCESSING(SSprocessing, src)

View File

@@ -1,7 +1,7 @@
/obj/machinery/petrification
name = "odd interface"
desc = "An odd looking machine with an interface, some buttons and a tiny keyboard on the side."
icon = 'modular_chomp/icons/obj/machines/other.dmi'
icon = 'icons/obj/machines/petrification.dmi'
icon_state = "petrification"
idle_power_usage = 100
@@ -64,13 +64,13 @@
return FALSE
return TRUE
/obj/machinery/petrification/proc/popup_msg(var/message, var/notice = TRUE)
/obj/machinery/petrification/proc/popup_msg(var/mob/user, var/message, var/notice = TRUE)
if (notice)
message = "A notice pops up on the interface: \"[message]\""
if (target)
to_chat(usr, span_notice("[message]"))
to_chat(user, span_notice("[message]"))
/obj/machinery/petrification/proc/petrify(var/obj/item/petrifier/petrifier = null)
/obj/machinery/petrification/proc/petrify(var/mob/user, var/obj/item/petrifier/petrifier = null)
. = FALSE
var/mat = material
var/idt = identifier
@@ -88,32 +88,32 @@
no_clothes = petrifier.discard_clothes
statue = petrifier.target
if (QDELETED(statue) || !istype(statue))
popup_msg("Invalid target.")
popup_msg(user, "Invalid target.")
return
if (statue.stat == DEAD)
popup_msg("The target must be alive.")
popup_msg(user, "The target must be alive.")
return
if (!statue.client)
popup_msg("The target must be capable of conscious thought.")
popup_msg(user, "The target must be capable of conscious thought.")
return
if (!istext(mat) || !istext(idt) || !istext(adj) || !istext(tnt))
popup_msg("Invalid options.")
popup_msg(user, "Invalid options.")
var/turf/T = statue.loc
if (!istype(T))
popup_msg("They must be visible to the [petrifier ? "device" : "machine"].")
popup_msg(user, "They must be visible to the [petrifier ? "device" : "machine"].")
if (!petrifier)
var/turf/center = get_step(get_turf(src), turn(dir, 180))
if (!center)
return
if (T.z != z || T.x > center.x + 1 || T.x < center.x - 1 || T.y > center.y + 1 || T.y < center.y - 1)
popup_msg("They are out of range. They must be standing within a 3x3 square in front of the machine.")
popup_msg(user, "They are out of range. They must be standing within a 3x3 square in front of the machine.")
return
else
var/turf/center = get_turf(petrifier)
if (!center)
return
if (T.z != center.z || get_dist(center, T) > 4)
popup_msg("They are out of range. They must be standing within 4 tiles of the device.")
popup_msg(user, "They are out of range. They must be standing within 4 tiles of the device.")
return
var/datum/component/gargoyle/comp = statue.GetComponent(/datum/component/gargoyle)
if (no_clothes)
@@ -126,12 +126,12 @@
G.was_rayed = TRUE
if (can_unpetrify)
add_verb(statue,/mob/living/carbon/human/proc/gargoyle_transformation) //CHOMPEdit TGPanel
add_verb(statue,/mob/living/carbon/human/proc/gargoyle_transformation)
comp?.cooldown = 0
else
remove_verb(statue,/mob/living/carbon/human/proc/gargoyle_transformation) //CHOMPEdit
remove_verb(statue,/mob/living/carbon/human/proc/gargoyle_pause) //CHOMPEdit
remove_verb(statue,/mob/living/carbon/human/proc/gargoyle_checkenergy) //CHOMPEdit
remove_verb(statue,/mob/living/carbon/human/proc/gargoyle_transformation)
remove_verb(statue,/mob/living/carbon/human/proc/gargoyle_pause)
remove_verb(statue,/mob/living/carbon/human/proc/gargoyle_checkenergy)
comp?.cooldown = INFINITY
if (!petrifier)
@@ -165,17 +165,17 @@
data["can_remote"] = is_valid_target(target) && istext(material) && istext(identifier) && istext(adjective) && istext(tint)
return data
/obj/machinery/petrification/proc/set_input(var/option)
/obj/machinery/petrification/proc/set_input(var/option, mob/user)
var/list/only_these = list("tint","material","identifier","adjective","able_to_unpetrify","discard_clothes","target")
if (!(option in only_these))
return
switch(option)
if("tint")
var/new_color = input(usr, "Choose the color for the [identifier] to be:", "Statue color", tint) as color|null
var/new_color = input(user, "Choose the color for the [identifier] to be:", "Statue color", tint) as color|null
if (new_color)
tint = new_color
if("material","identifier","adjective")
var/input = tgui_input_text(usr, "What should the [option] be?", "Statue [option]", vars[option], MAX_NAME_LEN)
var/input = tgui_input_text(user, "What should the [option] be?", "Statue [option]", vars[option], MAX_NAME_LEN)
input = sanitizeSafe(input, 25)
if (length(input) <= 0)
return
@@ -200,35 +200,35 @@
if("target")
var/list/targets = get_viable_targets()
if (!length(targets))
popup_msg("No targets within range. Make sure there is a humanoid being within a 3x3 metre square in front of the interface.")
popup_msg(user, "No targets within range. Make sure there is a humanoid being within a 3x3 metre square in front of the interface.")
return
var/selected = input(usr, "Choose the target.", "Petrification Target") as null|anything in targets
var/selected = input(user, "Choose the target.", "Petrification Target") as null|anything in targets
if (selected && ishuman(targets[selected]) && is_valid_target(targets[selected]))
var/confirmation = tgui_alert(targets[selected], "You have been selected as a petrification target. If you press confirm, you will possibly be turned into a statue, and if the option is selected, possibly one that cannot be reverted back from a statue at all.","Petrification Target",list("Confirm", "Cancel"))
if (confirmation != "Confirm")
popup_msg("They declined the request.", FALSE)
popup_msg(user, "They declined the request.", FALSE)
return
var/double = tgui_alert(targets[selected], "This is your last warning, are you -certain-?","Petrification Target",list("Confirm", "Cancel"))
if (confirmation == "Confirm" && double == "Confirm")
target = targets[selected]
else
popup_msg("They declined the request.", FALSE)
popup_msg(user, "They declined the request.", FALSE)
/obj/machinery/petrification/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return TRUE
if (usr)
add_fingerprint(usr)
if (ui.user)
add_fingerprint(ui.user)
switch(action)
if("set_option")
if (params["option"])
set_input(params["option"])
set_input(params["option"], ui.user)
SStgui.update_uis(src)
return TRUE
if("petrify")
petrify()
petrify(ui.user)
return TRUE
if("remote")
if (is_valid_target(target) && istext(material) && istext(identifier) && istext(adjective) && istext(tint))
@@ -245,7 +245,7 @@
P.discard_clothes = discard_clothes
P.target = target
remotes[target] = P
usr.put_in_hands(P)
ui.user.put_in_hands(P)
return TRUE
return TRUE

View File

@@ -1,7 +1,7 @@
/obj/item/petrifier
name = "odd button"
desc = "A metal device with a single, purple button on it, and a tiny interface."
icon = 'modular_chomp/icons/obj/machines/other.dmi'
icon = 'icons/obj/machines/petrification.dmi'
icon_state = "petrifier"
var/mob/living/carbon/human/target
@@ -22,7 +22,7 @@
if (!isturf(user.loc) && user.get_ultimate_mob() != target)
to_chat(user, span_warning("The device beeps but does nothing."))
return
if (linked?.petrify(src))
if (linked?.petrify(user, src))
visible_message(span_notice("A ray of purple light streams out of \the [src], aimed directly at [target]. Everywhere the light touches on them quickly [adjective] into [material]."))
to_chat(user, span_warning("The device fizzles and crumbles into dust."))
qdel(src)

View File

@@ -153,7 +153,7 @@
unpetrify(deal_damage = FALSE, deleting = TRUE)
/obj/structure/gargoyle/examine_icon()
var/icon/examine_icon = icon(icon=src.icon, icon_state=src.icon_state, dir=SOUTH, frame=1, moving=0) //CHOMPEdit might be needed
var/icon/examine_icon = icon(icon=src.icon, icon_state=src.icon_state, dir=SOUTH, frame=1, moving=0)
examine_icon.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
return examine_icon
@@ -180,7 +180,7 @@
comp.transformed = FALSE
else
if (was_rayed)
remove_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_transformation) //CHOMPEdit
remove_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_transformation)
if (gargoyle.loc == src)
gargoyle.forceMove(loc)
gargoyle.transform = transform

View File

@@ -573,6 +573,9 @@
H.l_hand.clean_blood()
H.bloody_hands = 0
H.germ_level = 0
H.hand_blood_color = null
LAZYCLEARLIST(H.blood_DNA)
H.update_bloodied()
else
user.clean_blood()
for(var/mob/V in viewers(src, null))

View File

@@ -63,7 +63,7 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s
. += link + (trait_prefs[identifier] ? "Enabled" : "Disabled")
if (2) //TRAIT_PREF_TYPE_COLOR
. += " " + color_square(hex = trait_prefs[identifier]) + link + "Change"
if (3) //TRAIT_PREF_TYPE_STRING - CHOMPEdit
if (3) //TRAIT_PREF_TYPE_STRING
var/string = trait_prefs[identifier]
. += link + (length(string) > 0 ? string : "\[Empty\]")
. += "</a></li>"
@@ -104,7 +104,7 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s
var/new_color = input(user, "Choose the color for this trait preference:", "Trait Preference", trait_prefs[preference]) as color|null
if (new_color)
trait_prefs[preference] = new_color
if (3) //TRAIT_PREF_TYPE_STRING - CHOMPEdit
if (3) //TRAIT_PREF_TYPE_STRING
var/new_string = instance.apply_sanitization_to_string(preference, tgui_input_text(user, "What should the new value be?", instance.has_preferences[preference][2], trait_prefs[preference], MAX_NAME_LEN))
trait_prefs[preference] = new_string

View File

@@ -83,7 +83,7 @@
var/decl/emote/use_emote = get_emote_by_key(act)
if(!istype(use_emote))
to_chat(src, span_warning("Unknown emote '[act]'. Type <b>say *help</b> for a list of usable emotes. ([act] [message])")) //CHOMPEdit - Add full message in the event you used * instead of ! or something like that
to_chat(src, span_warning("Unknown emote '[act]'. Type " + span_bold("say *help") + " for a list of usable emotes. ([act] [message])")) // Add full message in the event you used * instead of ! or something like that
return
if(!use_emote.mob_can_use(src))
@@ -226,12 +226,11 @@
message = span_emote(span_bold("[src]") + " ([ghost_follow_link(src, M)]) [input]")
if(usr && usr.client && M && !(get_z(usr) == get_z(M)))
message = span_multizsay("[message]")
//CHOMPEdit Start - If you are in the same tile, right next to, or being held by a person doing an emote, you should be able to see it while blind
// If you are in the same tile, right next to, or being held by a person doing an emote, you should be able to see it while blind
if(m_type != AUDIBLE_MESSAGE && (src.Adjacent(M) || (istype(src.loc, /obj/item/holder) && src.loc.loc == M)))
M.show_message(message)
else
M.show_message(message, m_type)
//CHOMPEdit End
M.create_chat_message(src, "[runemessage]", FALSE, list("emote"), (m_type == AUDIBLE_MESSAGE))
for(var/obj/O as anything in o_viewers)

View File

@@ -1180,3 +1180,48 @@
/datum/trait/neutral/agraviaphobia/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
..()
H.phobias |= AGRAVIAPHOBIA
/datum/trait/neutral/gargoyle
name = "Gargoyle (Adjustable)"
desc = "You turn into a statue (or similar) at will, but also whenever you run out of energy. Being a statue replenishes your energy slowly."
cost = 0
custom_only = FALSE //slimes, xenochimera, diona, proteans, etc, basically anything but custom doesn't make sense (as much as I wanna play a petrifying slime)
//Nah makes perfect sense, they could just be gene modded, not to mention we can expand this to have the statue and description of it renameable as well as color adjustable, to support general petrification
has_preferences = list("identifier" = list(TRAIT_PREF_TYPE_STRING, "Identifier", TRAIT_NO_VAREDIT_TARGET, "statue"),
"material" = list(TRAIT_PREF_TYPE_STRING, "Material", TRAIT_NO_VAREDIT_TARGET, "stone"),
"tint" = list(TRAIT_PREF_TYPE_COLOR, "Statue color", TRAIT_NO_VAREDIT_TARGET, "#FFFFFF"),
"adjective" = list(TRAIT_PREF_TYPE_STRING, "Adjective", TRAIT_NO_VAREDIT_TARGET, "hardens")/*,
"pickupable" = list(TRAIT_PREF_TYPE_BOOLEAN, "Can be picked up", TRAIT_NO_VAREDIT_TARGET, FALSE)*/)
/datum/trait/neutral/gargoyle/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/list/trait_prefs)
..()
var/datum/component/gargoyle/G = H.LoadComponent(/datum/component/gargoyle)
if (trait_prefs)
G.tint = trait_prefs["tint"]
G.material = lowertext(trait_prefs["material"])
G.identifier = lowertext(trait_prefs["identifier"])
G.adjective = lowertext(trait_prefs["adjective"])
/datum/trait/neutral/gargoyle/apply_sanitization_to_string(var/pref, var/input)
if (has_preferences[pref][1] != TRAIT_PREF_TYPE_STRING || length(input) <= 0)
return
input = sanitizeSafe(input, 25)
if (length(input) <= 0)
return default_value_for_pref(pref)
input = lowertext(input)
if (pref == "adjective")
if (copytext_char(input, -1) != "s")
switch(copytext_char(input, -2))
if ("ss")
input += "es"
if ("sh")
input += "es"
if ("ch")
input += "es"
else
switch(copytext_char(input, -1))
if("s", "x", "z")
input += "es"
else
input += "s"
return input

View File

@@ -102,51 +102,6 @@
autohiss_exempt = list("Vespinae"))
excludes = list(/datum/trait/neutral/autohiss_tajaran, /datum/trait/neutral/autohiss_unathi)
/datum/trait/neutral/gargoyle
name = "Gargoyle (Adjustable)"
desc = "You turn into a statue (or similar) at will, but also whenever you run out of energy. Being a statue replenishes your energy slowly."
cost = 0
custom_only = FALSE //slimes, xenochimera, diona, proteans, etc, basically anything but custom doesn't make sense (as much as I wanna play a petrifying slime)
//Nah makes perfect sense, they could just be gene modded, not to mention we can expand this to have the statue and description of it renameable as well as color adjustable, to support general petrification
has_preferences = list("identifier" = list(TRAIT_PREF_TYPE_STRING, "Identifier", TRAIT_NO_VAREDIT_TARGET, "statue"),
"material" = list(TRAIT_PREF_TYPE_STRING, "Material", TRAIT_NO_VAREDIT_TARGET, "stone"),
"tint" = list(TRAIT_PREF_TYPE_COLOR, "Statue color", TRAIT_NO_VAREDIT_TARGET, "#FFFFFF"),
"adjective" = list(TRAIT_PREF_TYPE_STRING, "Adjective", TRAIT_NO_VAREDIT_TARGET, "hardens")/*,
"pickupable" = list(TRAIT_PREF_TYPE_BOOLEAN, "Can be picked up", TRAIT_NO_VAREDIT_TARGET, FALSE)*/)
/datum/trait/neutral/gargoyle/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/list/trait_prefs)
..()
var/datum/component/gargoyle/G = H.LoadComponent(/datum/component/gargoyle)
if (trait_prefs)
G.tint = trait_prefs["tint"]
G.material = lowertext(trait_prefs["material"])
G.identifier = lowertext(trait_prefs["identifier"])
G.adjective = lowertext(trait_prefs["adjective"])
/datum/trait/neutral/gargoyle/apply_sanitization_to_string(var/pref, var/input)
if (has_preferences[pref][1] != TRAIT_PREF_TYPE_STRING || length(input) <= 0)
return
input = sanitizeSafe(input, 25)
if (length(input) <= 0)
return default_value_for_pref(pref)
input = lowertext(input)
if (pref == "adjective")
if (copytext_char(input, -1) != "s")
switch(copytext_char(input, -2))
if ("ss")
input += "es"
if ("sh")
input += "es"
if ("ch")
input += "es"
else
switch(copytext_char(input, -1))
if("s", "x", "z")
input += "es"
else
input += "s"
return input
/datum/trait/neutral/slip_reflex
name ="Slippery Reflexes"
desc = "Your reflexes are quick enough to react to slippery surfaces. You are not immune though."

View File

@@ -76,11 +76,11 @@
return TRUE
if(TRAIT_PREF_TYPE_COLOR) //color
return "#ffffff"
if(TRAIT_PREF_TYPE_STRING) //CHOMPEdit - string
if(TRAIT_PREF_TYPE_STRING) //string
return ""
return
/datum/trait/proc/apply_sanitization_to_string(var/pref, var/input) //CHOMPEdit addition
/datum/trait/proc/apply_sanitization_to_string(var/pref, var/input)
if (has_preferences[pref][1] != TRAIT_PREF_TYPE_STRING || length(input) <= 0)
return default_value_for_pref(pref)
input = sanitizeSafe(input, MAX_NAME_LEN)

View File

@@ -59,59 +59,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
cut_overlay(I)
overlays_standing[cache_index] = null
// These are used as the layers for the icons, as well as indexes in a list that holds onto them.
// Technically the layers used are all -100+layer to make them FLOAT_LAYER overlays.
//CHOMPEDIT: edit the file human/update_icons.dm in the modular_chomp folder as well, if you update these (and clothing/clothing.dm line 789, the hardcoded layer there in /obj/item/clothing/suit/make_worn_icon)
/*CHOMPRemove Start: Global here!
//Human Overlays Indexes/////////
#define MUTATIONS_LAYER 1 //Mutations like fat, and lasereyes
#define TAIL_LOWER_LAYER 2 //Tail as viewed from the south //CHOMPStation edit - underneath bodyparts
#define WING_LOWER_LAYER 3 //Wings as viewed from the south //CHOMPStation edit - underneath bodyparts
#define BODYPARTS_LAYER 4 //Bodyparts layer - CHOMPStation edit
#define SKIN_LAYER 5 //Skin things added by a call on species
#define BLOOD_LAYER 6 //Bloodied hands/feet/anything else
#define MOB_DAM_LAYER 7 //Injury overlay sprites like open wounds
#define SURGERY_LAYER 8 //Overlays for open surgical sites
#define UNDERWEAR_LAYER 9 //Underwear/bras/etc
#define SHOES_LAYER_ALT 10 //Shoe-slot item (when set to be under uniform via verb)
#define UNIFORM_LAYER 11 //Uniform-slot item
#define ID_LAYER 12 //ID-slot item
#define SHOES_LAYER 13 //Shoe-slot item
#define GLOVES_LAYER 14 //Glove-slot item
#define BELT_LAYER 15 //Belt-slot item
#define SUIT_LAYER 16 //Suit-slot item
#define TAIL_UPPER_LAYER 17 //Some species have tails to render (As viewed from the N, E, or W)
#define GLASSES_LAYER 18 //Eye-slot item
#define BELT_LAYER_ALT 19 //Belt-slot item (when set to be above suit via verb)
#define SUIT_STORE_LAYER 20 //Suit storage-slot item
#define BACK_LAYER 21 //Back-slot item
#define HAIR_LAYER 22 //The human's hair
#define HAIR_ACCESSORY_LAYER 23 //VOREStation edit. Simply move this up a number if things are added.
#define EARS_LAYER 24 //Both ear-slot items (combined image)
#define EYES_LAYER 25 //Mob's eyes (used for glowing eyes)
#define FACEMASK_LAYER 26 //Mask-slot item
#define GLASSES_LAYER_ALT 27 //So some glasses can appear on top of hair and things
#define HEAD_LAYER 28 //Head-slot item
#define HANDCUFF_LAYER 29 //Handcuffs, if the human is handcuffed, in a secret inv slot
#define LEGCUFF_LAYER 30 //Same as handcuffs, for legcuffs
#define L_HAND_LAYER 31 //Left-hand item
#define R_HAND_LAYER 32 //Right-hand item
#define WING_LAYER 33 //Wings or protrusions over the suit.
#define VORE_BELLY_LAYER 34 //CHOMPStation edit - Move this and everything after up if things are added.
#define VORE_TAIL_LAYER 35 //CHOMPStation edit - Move this and everything after up if things are added.
#define TAIL_UPPER_LAYER_ALT 36 //Modified tail-sprite layer. Tend to be larger.
#define MODIFIER_EFFECTS_LAYER 37 //Effects drawn by modifiers
#define FIRE_LAYER 38 //'Mob on fire' overlay layer
#define MOB_WATER_LAYER 39 //'Mob submerged' overlay layer
#define TARGETED_LAYER 40 //'Aimed at' overlay layer
#define TOTAL_LAYERS 40 //CHOMPStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list.
//////////////////////////////////
*///CHOMPRemove End
//These two are only used for gargoyles currently
#define HUMAN_BODY_LAYERS list(MUTATIONS_LAYER, TAIL_LOWER_LAYER, WING_LOWER_LAYER, BODYPARTS_LAYER, SKIN_LAYER, BLOOD_LAYER, MOB_DAM_LAYER, TAIL_UPPER_LAYER, HAIR_LAYER, HAIR_ACCESSORY_LAYER, EYES_LAYER, WING_LAYER, VORE_BELLY_LAYER, VORE_TAIL_LAYER, TAIL_UPPER_LAYER_ALT)
#define HUMAN_OTHER_LAYERS list(MODIFIER_EFFECTS_LAYER, FIRE_LAYER, MOB_WATER_LAYER, TARGETED_LAYER)
/mob/living/carbon/human
var/list/overlays_standing[TOTAL_LAYERS]
var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed

View File

@@ -376,7 +376,7 @@ var/list/channel_to_radio_key = new
if(M && src) //If we still exist, when the spawn processes
//VOREStation Add - Ghosts don't hear whispers
if(whispering && isobserver(M) && (!M.client?.prefs?.read_preference(/datum/preference/toggle/ghost_see_whisubtle) || \
(!(client?.prefs?.read_preference(/datum/preference/toggle/whisubtle_vis) || (isbelly(M.loc) && src == M.loc:owner)) && !M.client?.holder))) // CHOMPedit
(!(client?.prefs?.read_preference(/datum/preference/toggle/whisubtle_vis) || (isbelly(M.loc) && src == M.loc:owner)) && !M.client?.holder)))
M.show_message(span_game(span_say(span_name(src.name) + " [w_not_heard].")), 2)
return
//VOREStation Add End
@@ -439,7 +439,7 @@ var/list/channel_to_radio_key = new
/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/verb_understood="gestures", var/datum/language/language, var/type = 1)
var/turf/T = get_turf(src)
//We're in something, gesture to people inside the same thing
if(loc != T && !istype(loc, /obj/item/holder)) //CHOMPEdit - Partially fixes sign language while being held.
if(loc != T && !istype(loc, /obj/item/holder)) // Partially fixes sign language while being held.
for(var/mob/M in loc)
M.hear_signlang(message, verb, verb_understood, language, src, type)

View File

@@ -178,6 +178,23 @@
/obj/item/material/gravemarker
)
/obj/item/gripper/scene
name = "misc gripper"
desc = "A simple grasping tool that can hold a variety of 'general' objects..."
can_hold = list(
/obj/item/capture_crystal,
/obj/item/clothing,
/obj/item/implanter,
/obj/item/disk/nifsoft/compliance,
/obj/item/handcuffs,
/obj/item/toy,
/obj/item/petrifier,
/obj/item/dice,
/obj/item/casino_platinum_chip,
/obj/item/spacecasinocash
)
/obj/item/gripper/no_use/organ
name = "organ gripper"
icon_state = "gripper-flesh"

View File

@@ -218,8 +218,8 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/boop_module(src)
src.modules += new /obj/item/flash/robot(src)
src.modules += new /obj/item/extinguisher(src)
src.modules += new /obj/item/gripper/scene(src) //CHOMPEdit - Give all borgs a scene gripper
src.modules += new /obj/item/tool/crowbar/cyborg(src)
src.modules += new /obj/item/gripper/scene(src)
/obj/item/robot_module/robot/standard
name = "standard robot module"

View File

@@ -123,6 +123,17 @@
/atom/proc/drain_power(var/drain_check,var/surge, var/amount = 0)
return -1
// used for petrification machines
/atom/proc/get_ultimate_mob()
var/mob/ultimate_mob
var/atom/to_check = loc
var/n = 0
while (to_check && !isturf(to_check) && n++ < 16)
if (ismob(to_check))
ultimate_mob = to_check
to_check = to_check.loc
return ultimate_mob
// Show a message to all mobs and objects in earshot of this one
// This would be for audible actions by the src mob
// message is the message output to anyone who can hear.

View File

@@ -1,9 +1,8 @@
/mob/proc/say(var/message, var/datum/language/speaking = null, var/whispering = 0)
return
/mob/verb/whisper(message as text) //CHOMPEdit
/mob/verb/whisper(message as text)
set name = "Whisper"
// set category = "IC.Subtle" //CHOMPEdit
set hidden = 1
//VOREStation Addition Start
if(forced_psay)
@@ -13,10 +12,8 @@
usr.say(message,whispering=1)
/mob/verb/say_verb(message as text) //CHOMPEdit
/mob/verb/say_verb(message as text)
set name = "Say"
// set category = "IC.Chat" //CHOMPEdit
set instant = TRUE // CHOMPEdit
set hidden = 1
set instant = TRUE
@@ -32,9 +29,8 @@
if(message)
QUEUE_OR_CALL_VERB_FOR(VERB_CALLBACK(src, TYPE_PROC_REF(/mob, say), message), SSspeech_controller)
/mob/verb/me_verb(message as message) //CHOMPEdit
/mob/verb/me_verb(message as message)
set name = "Me"
// set category = "IC.Chat" //CHOMPEdit
set desc = "Emote to nearby people (and your pred/prey)"
set hidden = 1
@@ -118,9 +114,9 @@
if(speaking.flags & NONVERBAL)
if(sdisabilities & BLIND || blinded)
return FALSE
if(!other) //CHOMPEdit - Fixes seeing non-verbal languages while being held
if(!other)
return FALSE
//CHOMPEdit Start - Fixes seeing non-verbal languages while being held
// Fixes seeing non-verbal languages while being held
if(istype(other.loc, /obj/item/holder))
if(istype(src.loc, /obj/item/holder))
if(!(other.loc in view(src.loc.loc)))
@@ -132,7 +128,6 @@
return FALSE
else if((!other) in view(src))
return FALSE
//CHOMPEdit End
//Language check.
for(var/datum/language/L in languages)

View File

@@ -1,15 +1,6 @@
/atom/proc/get_ultimate_mob() //seems like the wrong place for it, but other stuff uses this
var/mob/ultimate_mob
var/atom/to_check = loc
var/n = 0
while (to_check && !isturf(to_check) && n++ < 16)
if (ismob(to_check))
ultimate_mob = to_check
to_check = to_check.loc
return ultimate_mob
/mob/verb/say_verb_ch()
set name = "Say CH"
// Allows the usage of old style chat inputs even with TG Say enabled
/mob/verb/say_verb_old()
set name = "Say Old"
set category = "IC.Chat"
client?.start_thinking()
@@ -20,8 +11,8 @@
if(message)
say_verb(message)
/mob/verb/me_verb_ch()
set name = "Me CH"
/mob/verb/me_verb_old()
set name = "Me Old"
set category = "IC.Chat"
set desc = "Emote to nearby people (and your pred/prey)"
@@ -33,8 +24,8 @@
if(message)
me_verb(message)
/mob/verb/whisper_ch()
set name = "Whisper CH"
/mob/verb/whisper_old()
set name = "Whisper Old"
set category = "IC.Subtle"
var/message = tgui_input_text(usr, "Speak to nearby people.\nType your message:", "Whisper")
@@ -43,8 +34,8 @@
whisper(message)
/mob/verb/me_verb_subtle_ch()
set name = "Subtle CH"
/mob/verb/me_verb_subtle_old()
set name = "Subtle Old"
set category = "IC.Subtle"
set desc = "Emote to nearby people (and your pred/prey)"
@@ -53,8 +44,8 @@
if(message)
me_verb_subtle(message)
/mob/verb/me_verb_subtle_custom_ch()
set name = "Subtle (Custom) CH"
/mob/verb/me_verb_subtle_custom_old()
set name = "Subtle (Custom) Old"
set category = "IC.Subtle"
set desc = "Emote to nearby people, with ability to choose which specific portion of people you wish to target."
@@ -63,8 +54,8 @@
if(message)
me_verb_subtle_custom(message)
/mob/verb/psay_ch()
set name = "Psay CH"
/mob/verb/psay_old()
set name = "Psay Old"
set category = "IC.Subtle"
var/message = tgui_input_text(usr, "Talk to people affected by complete absorbed or dominate predator/prey.\nType your message:", "Psay")
@@ -72,8 +63,8 @@
if(message)
psay(message)
/mob/verb/pme_ch()
set name = "Pme CH"
/mob/verb/pme_old()
set name = "Pme Old"
set category = "IC.Subtle"
var/message = tgui_input_text(usr, "Emote to people affected by complete absorbed or dominate predator/prey.\nType your message:", "Pme")
@@ -82,7 +73,7 @@
pme(message)
/mob/living/verb/player_narrate_ch()
set name = "Narrate (Player) CH"
set name = "Narrate (Player) Old"
set category = "IC.Chat"
var/message = tgui_input_text(usr, "Narrate an action or event! An alternative to emoting, for when your emote shouldn't start with your name!\nType your message:", "Narrate (Player)")

View File

@@ -4,7 +4,6 @@
/mob/verb/me_verb_subtle(message as message) //This would normally go in say.dm //CHOMPEdit
set name = "Subtle"
// set category = "IC.Subtle" //CHOMPEdit
set desc = "Emote to nearby people (and your pred/prey)"
set hidden = 1
@@ -27,7 +26,6 @@
/mob/verb/me_verb_subtle_custom(message as message) // Literally same as above but with mode_selection set to true //CHOMPEdit
set name = "Subtle (Custom)"
// set category = "IC.Subtle" //CHOMPEdit
set desc = "Emote to nearby people, with ability to choose which specific portion of people you wish to target."
if(say_disabled) //This is here to try to identify lag problems
@@ -204,7 +202,7 @@
if(src.client && M && !(get_z(src) == get_z(M)))
message = span_multizsay("[message]")
if(isobserver(M) && (!(M.client?.prefs?.read_preference(/datum/preference/toggle/ghost_see_whisubtle) || (isbelly(M.loc) && src == M.loc:owner)) || \
!client?.prefs?.read_preference(/datum/preference/toggle/whisubtle_vis) && !M.client?.holder)) //CHOMPEdit - Added the belly check so that ghosts in bellies can still see their pred's messages.
!client?.prefs?.read_preference(/datum/preference/toggle/whisubtle_vis) && !M.client?.holder))
spawn(0)
M.show_message(undisplayed_message, 2)
else
@@ -260,8 +258,7 @@
///// PSAY /////
/mob/verb/psay(message as text) //CHOMPEdit
// set category = "IC.Subtle" //CHOMPEdit
/mob/verb/psay(message as text)
set name = "Psay"
set desc = "Talk to people affected by complete absorbed or dominate predator/prey."
@@ -366,8 +363,7 @@
///// PME /////
/mob/verb/pme(message as message) //CHOMPEdit
// set category = "IC.Subtle" //CHOMPEdit
/mob/verb/pme(message as message)
set name = "Pme"
set desc = "Emote to people affected by complete absorbed or dominate predator/prey."
@@ -470,8 +466,7 @@
M.forced_psay = FALSE
M.me_verb(message)
/mob/living/verb/player_narrate(message as message) //CHOMPEdit
// set category = "IC.Chat" //CHOMPEdit
/mob/living/verb/player_narrate(message as message)
set name = "Narrate (Player)"
set desc = "Narrate an action or event! An alternative to emoting, for when your emote shouldn't start with your name!"

View File

@@ -697,7 +697,6 @@
forceMove(get_turf(src))
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of a microwave.")
//CHOMPEdit - petrification (again not vore but hey- ooc escape)
else if(istype(loc, /obj/structure/gargoyle) && loc:was_rayed)
var/obj/structure/gargoyle/G = loc
G.can_revert = TRUE
@@ -710,10 +709,6 @@
forceMove(get_turf(src))
log_and_message_admins("[key_name(src)] used the OOC escape button to escape from of a pair of shoes. [ADMIN_FLW(src)] - Shoes [ADMIN_VV(S)]")
else if(istype(loc, /obj/item/holder/micro) && (istype(loc.loc, /obj/machinery/microwave)))
forceMove(get_turf(src))
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of a microwave.")
//You are in food and for some reason can't resist out
else if(istype(loc, /obj/item/reagent_containers/food))
var/obj/item/reagent_containers/food/F = src.loc

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1,17 +0,0 @@
//CHOMPADDITIONS
/obj/item/gripper/scene
name = "misc gripper"
desc = "A simple grasping tool that can hold a variety of 'general' objects..."
can_hold = list(
/obj/item/capture_crystal,
/obj/item/clothing,
/obj/item/implanter,
/obj/item/disk/nifsoft/compliance,
/obj/item/handcuffs,
/obj/item/toy,
/obj/item/petrifier,
/obj/item/dice,
/obj/item/casino_platinum_chip,
/obj/item/spacecasinocash
)

View File

@@ -1,8 +1,7 @@
import { BooleanLike } from 'common/react';
import { useBackend } from '../../backend';
import { Button, LabeledList, Section } from '../../components';
import { Window } from '../../layouts';
import { useBackend } from 'tgui/backend';
import { Button, LabeledList, Section } from 'tgui/components';
import { Window } from 'tgui/layouts';
type Data = {
material: string;

View File

@@ -492,6 +492,7 @@
#include "code\datums\components\connect_containers_ch.dm"
#include "code\datums\components\connect_mob_behalf.dm"
#include "code\datums\components\connect_range_ch.dm"
#include "code\datums\components\gargoyle.dm"
#include "code\datums\components\material_container.dm"
#include "code\datums\components\overlay_lighting.dm"
#include "code\datums\components\recursive_move.dm"
@@ -1040,6 +1041,7 @@
#include "code\game\machinery\pandemic.dm"
#include "code\game\machinery\partslathe_vr.dm"
#include "code\game\machinery\pda_multicaster.dm"
#include "code\game\machinery\petrification.dm"
#include "code\game\machinery\pointdefense.dm"
#include "code\game\machinery\portable_turret.dm"
#include "code\game\machinery\portable_turret_vr.dm"
@@ -1377,6 +1379,7 @@
#include "code\game\objects\items\magazine.dm"
#include "code\game\objects\items\mail_ch.dm"
#include "code\game\objects\items\paintkit.dm"
#include "code\game\objects\items\petrifier.dm"
#include "code\game\objects\items\pizza_voucher_vr.dm"
#include "code\game\objects\items\poi_items.dm"
#include "code\game\objects\items\robobag.dm"
@@ -1721,6 +1724,7 @@
#include "code\game\objects\structures\fireaxe.dm"
#include "code\game\objects\structures\fitness.dm"
#include "code\game\objects\structures\fitness_vr.dm"
#include "code\game\objects\structures\gargoyle.dm"
#include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\gravemarker.dm"
#include "code\game\objects\structures\grille.dm"
@@ -3072,7 +3076,7 @@
#include "code\modules\mob\mob_planes_vr.dm"
#include "code\modules\mob\mob_transformation_simple.dm"
#include "code\modules\mob\say.dm"
#include "code\modules\mob\say_ch.dm"
#include "code\modules\mob\say_old.dm"
#include "code\modules\mob\say_vr.dm"
#include "code\modules\mob\theme_lists.dm"
#include "code\modules\mob\transform_procs.dm"
@@ -4756,7 +4760,6 @@
#include "modular_chomp\code\datums\autolathe\general_ch.dm"
#include "modular_chomp\code\datums\changelog\changelog.dm"
#include "modular_chomp\code\datums\components\dry.dm"
#include "modular_chomp\code\datums\components\gargoyle.dm"
#include "modular_chomp\code\datums\components\hearer.dm"
#include "modular_chomp\code\datums\components\orbiter.dm"
#include "modular_chomp\code\datums\components\squeak.dm"
@@ -4796,7 +4799,6 @@
#include "modular_chomp\code\game\machinery\food_replicator.dm"
#include "modular_chomp\code\game\machinery\holosign.dm"
#include "modular_chomp\code\game\machinery\paradox.dm"
#include "modular_chomp\code\game\machinery\petrification.dm"
#include "modular_chomp\code\game\machinery\portable_turret.dm"
#include "modular_chomp\code\game\machinery\vending.dm"
#include "modular_chomp\code\game\machinery\virtual_reality\vr_console.dm"
@@ -4809,7 +4811,6 @@
#include "modular_chomp\code\game\objects\effects\step_triggers.dm"
#include "modular_chomp\code\game\objects\items\contraband.dm"
#include "modular_chomp\code\game\objects\items\holosign_creator.dm"
#include "modular_chomp\code\game\objects\items\petrifier.dm"
#include "modular_chomp\code\game\objects\items\target_toy.dm"
#include "modular_chomp\code\game\objects\items\clockwork\ratvarian_spear.dm"
#include "modular_chomp\code\game\objects\items\devices\flipper.dm"
@@ -4831,7 +4832,6 @@
#include "modular_chomp\code\game\objects\random\misc.dm"
#include "modular_chomp\code\game\objects\structures\desert_planet_structures.dm"
#include "modular_chomp\code\game\objects\structures\flora.dm"
#include "modular_chomp\code\game\objects\structures\gargoyle.dm"
#include "modular_chomp\code\game\objects\structures\holosign.dm"
#include "modular_chomp\code\game\objects\structures\loot_pile.dm"
#include "modular_chomp\code\game\objects\structures\tyr_project_props.dm"
@@ -4977,7 +4977,6 @@
#include "modular_chomp\code\modules\mob\living\silicon\robot\robot_movement.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\dogborg\dog_modules.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\dogborg\dog_sleeper.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\drone\drone_items.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\modules\exploration.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\_sprite_datum.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\civilian.dm"