diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 9781ad98a0..b79e7e1f69 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -152,7 +152,7 @@
if(pcard.is_damage_critical())
pcard.forceMove(get_turf(src))
charging = null
- pcard.damage_random_component()
+ //pcard.damage_random_component()//CHOMPEDIT: Punishing PAI for charging too soon seems kinda annoying
update_icon()
else if(pcard.pai.bruteloss)
pcard.pai.adjustBruteLoss(-5)
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index a710df388b..30df9adb2f 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -561,8 +561,8 @@ the implant may become unstable and either pre-maturely inject the subject or si
if (malfunction) //so I'm just going to add a meltdown chance here
return
malfunction = MALFUNCTION_TEMPORARY
-
- activate("emp") //let's shout that this dude is dead
+ if(prob(40)) //CHOMPEDIT: Make the malfunction a probability because annoying
+ activate("emp") //let's shout that this dude is dead
if(severity == 1)
if(prob(40)) //small chance of obvious meltdown
meltdown()
diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
index c824e41261..c8be2d2466 100644
--- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
@@ -35,6 +35,13 @@
character_name = list("Malady Blanche")
// A CKEYS
+
+/datum/gear/fluff/mira_medal
+ path = /obj/item/clothing/accessory/medal/silver/fluff/abc314
+ display_name = "Mira's Health Service Achievement medal"
+ ckeywhitelist = list("abc314")
+ character_name = list("Mira Nesyne")
+
/datum/gear/fluff/lethe_helmet
path = /obj/item/clothing/head/helmet/hos/fluff/lethe
display_name = "Lethe's Helmet"
diff --git a/code/modules/client/preference_setup/loadout/loadout_shoes_vr.dm b/code/modules/client/preference_setup/loadout/loadout_shoes_vr.dm
index 1f83f7484d..e3c6eaf9b0 100644
--- a/code/modules/client/preference_setup/loadout/loadout_shoes_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_shoes_vr.dm
@@ -47,5 +47,6 @@
name = "No Shoes"
desc = "shoeless?"
icon_state = ""
-/obj/item/clothing/shoes/none/New()
- qdel(src)
+/obj/item/clothing/shoes/none/Initialize()
+ . = INITIALIZE_HINT_QDEL //Fuck them shoes
+ ..()
diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm
index 12f409204e..bb3260213b 100644
--- a/code/modules/clothing/glasses/hud_vr.dm
+++ b/code/modules/clothing/glasses/hud_vr.dm
@@ -13,6 +13,8 @@
var/flash_prot = 0 //0 for none, 1 for flash weapon protection, 2 for welder protection
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_AUGMENTED)
plane_slots = list(slot_glasses)
+ var/ar_toggled = TRUE //Used for toggle_ar_planes() verb
+
/obj/item/clothing/glasses/omnihud/New()
..()
@@ -28,6 +30,14 @@
SStgui.close_uis(src)
..()
+/obj/item/clothing/glasses/omnihud/examine()
+ . = ..()
+ if(ar_toggled)
+ . += "\n The HUD indicator reads ON."
+ else
+ . += "\n The HUD indicator reads OFF."
+
+
/obj/item/clothing/glasses/omnihud/emp_act(var/severity)
if(tgarscreen)
SStgui.close_uis(src)
@@ -114,6 +124,29 @@
to_chat(usr, "The [src] don't seem to support this functionality.")
update_clothing_icon()
+/obj/item/clothing/glasses/omnihud/verb/toggle_ar_planes()
+ set name = "Toggle AR Heads-Up Display"
+ set desc = "Toggles the job icon and other non-manually requested displays. Does not disable Crew monitor and similar."
+ set category = "Object"
+ set src in usr
+
+ //We do not check if user can move or not, since this system is inspired to help see chat bubbles during scenes primarily.
+ //Preventing turning off the HUD could get in the way of scene flow.
+ usr.visible_emote("toggles a button on their [src.name]!") //Since we're turning stuff like arrest/medical HUD on/off, we should inform those nearby.
+ if(ar_toggled)
+ away_planes = enables_planes
+ enables_planes = null
+ to_chat(usr, SPAN_NOTICE("You disabled the Augmented Reality HUD of your [src.name]."))
+ else
+ enables_planes = away_planes
+ away_planes = null
+ to_chat(usr, SPAN_NOTICE("You enabled the Augmented Reality HUD of your [src.name]."))
+ ar_toggled = !ar_toggled
+ usr.update_action_buttons()
+ usr.recalculate_vis()
+
+
+
/obj/item/clothing/glasses/omnihud/proc/ar_interact(var/mob/living/carbon/human/user)
return 0 //The base models do nothing.
@@ -305,4 +338,4 @@
icon_state = "[icon_state]_1"
else
icon_state = initial(icon_state)
- update_clothing_icon()
\ No newline at end of file
+ update_clothing_icon()
diff --git a/code/modules/clothing/head/misc_vr.dm b/code/modules/clothing/head/misc_vr.dm
index bd7cb68db9..559defab45 100644
--- a/code/modules/clothing/head/misc_vr.dm
+++ b/code/modules/clothing/head/misc_vr.dm
@@ -91,7 +91,10 @@
/obj/item/clothing/head/pizzaguy
name = "pizza delivery visor"
desc = "A fancy visor showing alignment to pizza delivery service. Extremely risky career choice."
+ icon = 'icons/inventory/head/item_vr.dmi'
+ icon_override = 'icons/inventory/head/mob_vr.dmi'
icon_state = "pizzadelivery"
+ item_state = "pizzadelivery"
/obj/item/clothing/head/wedding
name = "wedding veil"
diff --git a/code/modules/clothing/spacesuits/rig/suits/robotics.dm b/code/modules/clothing/spacesuits/rig/suits/robotics.dm
index 860ed2c6b8..5efb8f8348 100644
--- a/code/modules/clothing/spacesuits/rig/suits/robotics.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/robotics.dm
@@ -32,7 +32,7 @@
name = "suit helmet"
/obj/item/clothing/suit/space/rig/advsuit
- name = "voidsuit"
+ name = "Hardsuit" //CHOMPEDIT: Replcing Void with Hard to fit the naming convention. Specced down hardsuit for comfort
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
- cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
\ No newline at end of file
+ cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index eb6ba185c7..41f3aac421 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -332,6 +332,16 @@ var/list/holder_mob_icon_cache = list()
L.Stun(2)
/obj/item/weapon/holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ //CHOMPADDITION: MicroHandCrush
+ if(W == src && user.a_intent == I_HURT)
+ for(var/mob/living/M in src.contents)
+ if(user.size_multiplier > M.size_multiplier)
+ var/dam = (user.size_multiplier - M.size_multiplier)*(rand(2,5))
+ to_chat(user, "You roughly squeeze [M]!")
+ to_chat(M, "You are roughly squeezed by [user]!")
+ log_and_message_admins("[key_name(M)] has been harmsqueezed by [key_name(user)]")
+ M.apply_damage(dam)
+ //CHOMPADDITION: MicroHandCrush END
for(var/mob/M in src.contents)
M.attackby(W,user)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 4f1d54f050..e87acde261 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -451,6 +451,8 @@
return 0
/mob/living/carbon/can_feel_pain(var/check_organ)
+ if(!species) //CHOMPEdit
+ return 0
if(isSynthetic())
return 0
return !(species.flags & NO_PAIN)
diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm
index da4770c2c3..9e5f14d21b 100644
--- a/code/modules/overmap/sectors.dm
+++ b/code/modules/overmap/sectors.dm
@@ -16,6 +16,11 @@
var/real_desc
/// Icon_state prior to being scanned if !known
var/unknown_state = "field"
+ //Set to null. Exists only for admins/GMs when spawning overmap objects.
+ //We need these as normal functionality relies on initial() which do not work at all with GM shenanigans.
+ var/real_icon //Holds the .dmi file for icon_state to pick from. Leave null if using standard overmap.dmi
+ var/real_icon_state //actual icon name to be used. Find examples inside 'icons/obj/overmap.dmi'
+ var/real_color
var/list/map_z = list()
var/list/extra_z_levels //if you need to manually insist that these z-levels are part of this sector, for things like edge-of-map step trigger transitions rather than multi-z complexes
@@ -84,6 +89,19 @@
//at the moment only used for the OM location renamer. Initializing here in case we want shuttles incl as well in future. Also proc definition convenience.
visitable_overmap_object_instances |= src
+//To be used by GMs and calling through var edits for the overmap object
+//It causes the overmap object to "reinitialize" its real_appearance for known = FALSE objects
+//Includes an argument that allows GMs/Admins to set a previously known sector to unknown. Set to any value except 0/False/Null to activate
+/obj/effect/overmap/visitable/proc/gmtools_update_omobject_vars(var/setToHidden)
+ real_appearance = image(real_icon, src, real_icon_state)
+ real_appearance.override = TRUE
+ if(setToHidden && known) //
+ name = unknown_name
+ icon = 'icons/obj/overmap.dmi'
+ icon_state = unknown_state
+ color = null
+ desc = "Scan this to find out more information."
+ known = FALSE
// You generally shouldn't destroy these.
@@ -141,8 +159,16 @@
name = real_name
else
name = initial(name)
- icon_state = initial(icon_state)
- color = initial(color)
+ if(real_icon_state) //Only true when GMs/Admins play with the object
+ if(real_icon) //Only true if GMs/Admins want a non-standard icon from outside 'icons/obj/overmap.dmi'
+ icon = real_icon
+ icon_state = real_icon_state
+ else
+ icon_state = initial(icon_state)
+ if(real_color)
+ color = real_color
+ else
+ color = initial(color)
if(real_desc)
desc = real_desc
else
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 58f8ee0275..55a7d4d2b9 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -9,7 +9,10 @@
density = FALSE
unacidable = TRUE
use_power = USE_POWER_OFF
- light_range = 4
+ light_on = TRUE
+ light_range = 2
+ light_power = 0.5
+ light_color = "#5BA8FF"
var/obj/machinery/field_generator/FG1 = null
var/obj/machinery/field_generator/FG2 = null
var/list/shockdirs
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index ec29e08efa..8d892b2756 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -36,6 +36,10 @@ field_generator power level display
var/gen_power_draw = 5500 //power needed per generator
var/field_power_draw = 2000 //power needed per field object
+ var/light_range_on = 3
+ var/light_power_on = 1
+ light_color = "#5BA8FF"
+
/obj/machinery/field_generator/update_icon()
cut_overlays()
@@ -177,6 +181,7 @@ field_generator power level display
active = 0
spawn(1)
src.cleanup()
+ set_light(0)
update_icon()
/obj/machinery/field_generator/proc/turn_on()
@@ -189,6 +194,7 @@ field_generator power level display
update_icon()
if(warming_up >= 3)
start_fields()
+ set_light(light_range_on, light_power_on)
update_icon()
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 335ed4240a..8c608a83f3 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -10,8 +10,8 @@
icon_state = "conveyor0"
name = "conveyor belt"
desc = "A conveyor belt."
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ plane = OBJ_PLANE //CHOMPEdit
+ layer = STAIRS_LAYER //CHOMPEdit
anchored = TRUE
active_power_usage = 100
circuit = /obj/item/weapon/circuitboard/conveyor
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index eb5e9e7edb..96f2262c2f 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -936,6 +936,8 @@
M.forceMove(G)
else
qdel(M)
+ if(isanimal(owner))
+ owner.update_transform()
//CHOMPEdit End
// Handle a mob being absorbed
diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm
index e97a4af930..99d52cfbd0 100644
--- a/code/modules/vore/eating/bellymodes_datum_vr.dm
+++ b/code/modules/vore/eating/bellymodes_datum_vr.dm
@@ -215,10 +215,12 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.put_in_egg(H, 1)*/
/datum/digest_mode/egg/handle_atoms(obj/belly/B, list/touchable_atoms)
+ if(B.owner.nutrition < 25) //CHOMPEdit Start
+ return
var/list/egg_contents = list()
for(var/E in touchable_atoms)
if(istype(E, /obj/item/weapon/storage/vore_egg)) // Don't egg other eggs.
- var/obj/item/weapon/storage/vore_egg/EG = E //CHOMPEdit Start
+ var/obj/item/weapon/storage/vore_egg/EG = E
if(EG.egg_name != B.egg_name)
if(!B.egg_name)
EG.egg_name = null
@@ -239,6 +241,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
if(B.egg_type in tf_vore_egg_types)
B.egg_path = tf_vore_egg_types[B.egg_type]
B.ownegg = new B.egg_path(B)
+ B.owner.adjust_nutrition(-25)
if(B.ownegg && B.egg_name)
B.ownegg.egg_name = B.egg_name
B.ownegg.name = B.egg_name //CHOMPEdit End
diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm
index dae81f32ce..f23bc2814f 100644
--- a/code/modules/vore/fluffstuff/custom_items_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_items_vr.dm
@@ -1568,3 +1568,12 @@ End CHOMP Removal*/
/obj/item/weapon/dice/loaded/ceph/New()
icon_state = "ceph_d6[rand(1,sides)]"
+
+
+//abc123: Mira Nesyne
+/obj/item/clothing/accessory/medal/silver/fluff/abc314
+ name = "Health Service Achievement medal"
+ desc = "A small silver medal with the inscription \"For going above and beyond in the field.\" on it, along with the name Mira Nesyne."
+
+ icon = 'icons/inventory/accessory/item.dmi'
+ icon_state = "silver"
diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm
index 69113596fe..a1ab69c506 100644
--- a/code/modules/vore/persist/persist_vr.dm
+++ b/code/modules/vore/persist/persist_vr.dm
@@ -45,6 +45,9 @@
// Find out of this mob is a proper mob!
if (persister.mind && persister.mind.loaded_from_ckey)
+ if(ckey(persister.mind.key) != persister.mind.loaded_from_ckey) //CHOMPAdd
+ warning("Persist (P4P): [persister.mind] was loaded from ckey [persister.mind.loaded_from_ckey] mismatching the current ckey [ckey(persister.mind.key)].")
+ return //CHOMPAdd End
// Okay this mob has a real loaded-from-savefile mind in it!
var/datum/preferences/prefs = preferences_datums[persister.mind.loaded_from_ckey]
if(!prefs)
diff --git a/modular_chomp/code/modules/recycling/v_garbosystem.dm b/modular_chomp/code/modules/recycling/v_garbosystem.dm
index f76471e5d3..f3c92c868b 100644
--- a/modular_chomp/code/modules/recycling/v_garbosystem.dm
+++ b/modular_chomp/code/modules/recycling/v_garbosystem.dm
@@ -77,6 +77,8 @@
items_taken++
break
for(var/atom/movable/C in A.contents)
+ if(C.anchored)
+ C.anchored = FALSE
C.forceMove(loc)
if(isitem(A))
A.SpinAnimation(5,3)
@@ -115,4 +117,4 @@
return
else
to_chat(user, "Unable to empty filter while the machine is running.")
- return ..()
\ No newline at end of file
+ return ..()