diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm
index a14c8420b4..a00418f2dc 100644
--- a/code/_helpers/global_lists_vr.dm
+++ b/code/_helpers/global_lists_vr.dm
@@ -978,7 +978,7 @@ var/global/list/selectable_speech_bubbles = list(
"tentacles",
"heart",
"textbox",
- "posessed",
+ "possessed", // CHOMPEDIT : purdev (spelling changed <3)
"square",
"medical",
"medical_square",
diff --git a/code/controllers/configuration_ch.dm b/code/controllers/configuration_ch.dm
index b119f5fdbd..c11b4b6fff 100644
--- a/code/controllers/configuration_ch.dm
+++ b/code/controllers/configuration_ch.dm
@@ -17,6 +17,8 @@
var/discord_ahelps_disabled = 0 //Turn this off if you don't want the TGS bot sending you messages whenever an ahelp ticket is created.
var/discord_ahelps_all = 0 //Turn this on if you want all admin-PMs to go to be sent to discord, and not only the first message of a ticket.
+ var/list/ip_whitelist = list()
+
/hook/startup/proc/read_ch_config()
var/list/Lines = file2list("config/config.txt")
for(var/t in Lines)
@@ -62,4 +64,20 @@
config.nodebot_location = value
if ("ahelp_channel_tag")
config.ahelp_channel_tag = value
+
+ var/list/ip_whitelist_lines = file2list("config/ip_whitelist.txt")
+ var/increment = 1
+ for(var/t in ip_whitelist_lines)
+ if (!t) continue
+ t = trim(t)
+ if (length(t) == 0)
+ continue
+ else if (copytext(t, 1, 2) == "#")
+ continue
+ var/ip_address = splittext(t, ",")
+ for (var/name in ip_address)
+ config.ip_whitelist[name] = increment
+ increment += 1
+
+
return 1
diff --git a/code/datums/looping_sounds/mob_sounds.dm b/code/datums/looping_sounds/mob_sounds.dm
index ef997b22e8..1a3d6fcf93 100644
--- a/code/datums/looping_sounds/mob_sounds.dm
+++ b/code/datums/looping_sounds/mob_sounds.dm
@@ -12,7 +12,7 @@
/datum/looping_sound/mob/deafened
start_sound = 'modular_chomp/sound/effects/ear_ring/ear_deaf_in.ogg'
start_length = 4 SECONDS // 2 seconds shorter than the actual file ending, bc we want it to overlap
- mid_sounds = list('modular_chomp/sound/effects/ear_ring/ear_deaf_loop.ogg'=1)
+ mid_sounds = list('modular_chomp/sound/misc/silence.ogg'=1)
mid_length = 3 SECONDS
end_sound = 'modular_chomp/sound/effects/ear_ring/ear_deaf_out.ogg'
volume = 40
diff --git a/code/game/objects/items/blueprints_vr.dm b/code/game/objects/items/blueprints_vr.dm
index 92231894d9..6d9dece697 100644
--- a/code/game/objects/items/blueprints_vr.dm
+++ b/code/game/objects/items/blueprints_vr.dm
@@ -241,7 +241,7 @@
/obj/item/areaeditor/blueprints/engineers
name = "writing blueprints"
- desc = "A piece of paper that allows for expansion of the station and creaiton of new areas. There is a \"For Official Use Only\" stamp on it. NOT to be mistaken with the staion blueprints."
+ desc = "A piece of paper that allows for expansion of the station and creation of new areas. There is a \"For Official Use Only\" stamp on it. NOT to be mistaken with the station blueprints." // CHOMPEDIT : purdev (some spelling fixes)
station_master = 0
uses_charges = 1
can_override = 0
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index b88785b9fc..806056810e 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -128,7 +128,7 @@
/obj/item/bodybag/cryobag
name = "stasis bag"
desc = "A non-reusable plastic bag designed to slow down bodily functions such as circulation and breathing, \
- especially useful if short on time or in a hostile enviroment."
+ especially useful if short on time or in a hostile environment." // CHOMPEDIT : purdev (spelling fix)
icon = 'icons/obj/closets/cryobag.dmi'
icon_state = "bodybag_folded"
item_state = "bodybag_cryo_folded"
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index 980685f124..71bb7c0dd5 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -140,9 +140,9 @@ var/list/GPS_list = list()
toggle_tracking()
if(tracking)
- to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.")
- else
- to_chat(user, "[src] is now tracking, and visible to other GPS devices.")
+ to_chat(user, "[src] is now tracking, and visible to other GPS devices.") // CHOMPEDIT : purdev Fixed an issue where the if/else argument was written backwards
+ else // CHOMPEDIT : purdev Fixed an issue where the if/else argument was written backwards
+ to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.") // CHOMPEDIT : purdev Fixed an issue where the if/else argument was written backwards
/obj/item/device/gps/proc/toggle_tracking()
tracking = !tracking
diff --git a/code/game/objects/items/devices/paicard_ch.dm b/code/game/objects/items/devices/paicard_ch.dm
index b6ce0d69d8..8bb271053c 100644
--- a/code/game/objects/items/devices/paicard_ch.dm
+++ b/code/game/objects/items/devices/paicard_ch.dm
@@ -14,5 +14,5 @@
if("Cancel")
return
else if (istype(W, /obj/item/weapon/card/id) && src.pai.idaccessible == 0)
- to_chat(user, "[src] is not accepting access modifcations at this time.")
+ to_chat(user, "[src] is not accepting access modifications at this time.")
return
\ No newline at end of file
diff --git a/code/game/objects/stumble_into_vr.dm b/code/game/objects/stumble_into_vr.dm
index 610afea550..2079ab5a42 100644
--- a/code/game/objects/stumble_into_vr.dm
+++ b/code/game/objects/stumble_into_vr.dm
@@ -23,6 +23,7 @@
/obj/machinery/disposal/stumble_into(mob/living/M)
playsound(src, 'sound/effects/clang.ogg', 25, 1, -1)
visible_message("[M] [pick("tripped", "stumbled")] into \the [src]!")
+ log_and_message_admins("stumbled into \the [src]", M)
if(M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
@@ -141,4 +142,4 @@
/obj/machinery/vending/stumble_into(mob/living/M)
..()
if(prob(2))
- throw_item()
\ No newline at end of file
+ throw_item()
diff --git a/code/game/world.dm b/code/game/world.dm
index b204bc94fa..c61c58ec9e 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -1,5 +1,20 @@
#define RECOMMENDED_VERSION 513
+
+// CHOMPedit Start - Tracy
+/proc/prof_init()
+ var/lib
+
+ switch(world.system_type)
+ if(MS_WINDOWS) lib = "prof.dll"
+ if(UNIX) lib = "libprof.so"
+ else CRASH("unsupported platform")
+
+ var/init = call(lib, "init")()
+ if("0" != init) CRASH("[lib] init error: [init]")
+// CHOMPedit End
+
/world/New()
+ //prof_init() // CHOMPedit - Uncomment to enable Tracy. Requires https://github.com/mafemergency/byond-tracy/
world_startup_time = world.timeofday
rollover_safety_date = world.realtime - world.timeofday // 00:00 today (ish, since floating point error with world.realtime) of today
to_world_log("Map Loading Complete")
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 304f7b234f..5167d5becd 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -500,7 +500,7 @@
if("Cancel")
return
else if (istype(W, /obj/item/weapon/card/id) && idaccessible == 0)
- to_chat(user, "[src] is not accepting access modifcations at this time.")
+ to_chat(user, "[src] is not accepting access modifications at this time.") // CHOMPEDIT : purdev (spelling fix)
return
/mob/living/silicon/pai/verb/allowmodification()
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/posessed_ch.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/possessed_ch.dm
similarity index 100%
rename from code/modules/mob/living/simple_mob/subtypes/humanoid/posessed_ch.dm
rename to code/modules/mob/living/simple_mob/subtypes/humanoid/possessed_ch.dm
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 374690c5bd..004f6f332f 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -9,6 +9,10 @@
if(M == src) continue
if( M.key && (M.key != key) )
var/matches
+ //CHOMPEDIT - IP exemptions for those who are known to live together
+ if (config.ip_whitelist[key] && config.ip_whitelist[key] == config.ip_whitelist[M.key])
+ continue
+ //CHOMPEDIT end
if( (M.lastKnownIP == client.address) )
matches += "IP ([client.address])"
if( (client.connection != "web") && (M.computer_id == client.computer_id) )
diff --git a/code/modules/projectiles/guns/energy/altevian_vr.dm b/code/modules/projectiles/guns/energy/altevian_vr.dm
index 150d05c421..4208d2d9e2 100644
--- a/code/modules/projectiles/guns/energy/altevian_vr.dm
+++ b/code/modules/projectiles/guns/energy/altevian_vr.dm
@@ -10,7 +10,7 @@
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
matter = list(MAT_STEEL = 1000)
projectile_type = /obj/item/projectile/beam/meeplaser
- charge_cost = 150
+ charge_cost = 450
/obj/item/weapon/gun/energy/altevian/large
name = "Proto-Reactive Beam Thruster"
@@ -23,7 +23,7 @@
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 4)
matter = list(MAT_STEEL = 2000)
projectile_type = /obj/item/projectile/beam/meeplaser/strong
- charge_cost = 300
+ charge_cost = 200
/obj/item/projectile/beam/meeplaser
name = "meep beam"
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index a27e2cc384..bb7847fd0a 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -142,6 +142,8 @@
user.drop_item()
if(I)
+ if(istype(I, /obj/item/weapon/holder/micro))
+ log_and_message_admins("placed [I.name] inside \the [src]", user)
I.forceMove(src)
to_chat(user, "You place \the [I] into the [src].")
@@ -181,6 +183,7 @@
// must be awake, not stunned or whatever
msg = "[user.name] climbs into the [src]."
to_chat(user, "You climb into the [src].")
+ log_and_message_admins("climbed into disposals!", user)
else if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
msg = "[user.name] stuffs [target.name] into the [src]!"
to_chat(user, "You stuff [target.name] into the [src]!")
@@ -527,6 +530,8 @@
. = ..()
if(istype(AM, /obj/item) && !istype(AM, /obj/item/projectile))
if(prob(75))
+ if(istype(AM, /obj/item/weapon/holder/micro))
+ log_and_message_admins("[AM] was thrown into \the [src]")
AM.forceMove(src)
visible_message("\The [AM] lands in \the [src].")
else
@@ -541,6 +546,8 @@
return
if(prob(75))
I.forceMove(src)
+ if(istype(I, /obj/item/weapon/holder/micro))
+ log_and_message_admins("[I.name] was thrown into \the [src]")
for(var/mob/M in viewers(src))
M.show_message("\The [I] lands in \the [src].", 3)
else
diff --git a/config/example/ip_whitelist.txt b/config/example/ip_whitelist.txt
new file mode 100644
index 0000000000..788b4ebd8a
--- /dev/null
+++ b/config/example/ip_whitelist.txt
@@ -0,0 +1,4 @@
+# this file is for exempting certain groups of keys from recieving the "you're already in the game go away" message when they connect with the same IP (ie, living together)
+# each group should be on the same line, separated by a comma (and nothing else), and each group should be on a separate line
+# EXAMPLE (remove the # and it would be valid):
+#somekey1,somekey2,somekey3
\ No newline at end of file
diff --git a/config/jukebox.json b/config/jukebox.json
index e50ef49715..7bea866c53 100644
--- a/config/jukebox.json
+++ b/config/jukebox.json
@@ -4698,11 +4698,8 @@
"artist": "That Handsome Devil",
"secret": false,
"lobby": false,
-<<<<<<< HEAD
"jukebox": true,
"genre": "Rock"
-=======
-"jukebox": true
},
{
"url": "https://files.catbox.moe/8r5d7q.mp3",
@@ -4713,7 +4710,6 @@
"secret": true,
"lobby": false,
"jukebox": true
->>>>>>> ae542d5642... Merge pull request #14950 from Runa-Dacino/fixjukeboxjson
},
{
"url": "https://files.catbox.moe/2ozzmg.m4a",
diff --git a/icons/mob/vore/taurs_ch_loaf.dmi b/icons/mob/vore/taurs_ch_loaf.dmi
index 2b4c0acbdc..c1b90e5831 100644
Binary files a/icons/mob/vore/taurs_ch_loaf.dmi and b/icons/mob/vore/taurs_ch_loaf.dmi differ
diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi
index db935ef7d4..e5ffc375a3 100644
Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ
diff --git a/icons/obj/surgery_vr.dmi b/icons/obj/surgery_vr.dmi
index 6b6b4dbbb8..1e3d7677db 100644
Binary files a/icons/obj/surgery_vr.dmi and b/icons/obj/surgery_vr.dmi differ
diff --git a/maps/southern_cross/submaps/_southern_cross_submaps.dm b/maps/southern_cross/submaps/_southern_cross_submaps.dm
index fe2cf25478..2749f6f6a0 100644
--- a/maps/southern_cross/submaps/_southern_cross_submaps.dm
+++ b/maps/southern_cross/submaps/_southern_cross_submaps.dm
@@ -64,7 +64,7 @@
associated_map_datum = /datum/map_z_level/sc_lateload/gateway_destination
//VR maps go here, tell me if theres a better way to load this
-#include "virtual_reality/constructVR.dm"
+// #include "virtual_reality/constructVR.dm" Virtual Reality areas included by default.
/datum/map_template/sc_lateload/vr_world
name = "VR World"
desc = "A dynamic, virtual world."
diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/station/station_ch.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/station/station_ch.dm
new file mode 100644
index 0000000000..21e1c1f04f
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/carbon/human/species/station/station_ch.dm
@@ -0,0 +1,50 @@
+//There is already a station file, but feels wrong to put zaddat balancing changes with the restriction file, and feels wrong to lump them in with a modular station_vr so hello station_ch file
+
+/datum/species/zaddat
+ toxins_mod = 0.5 //toxins rarely come into play, and zaddat just has negatives. Along with their parasite letting them survive in their polluted planet, this seems reasonable.
+
+//So both of this are based off Fennec foxes I belivive. Those are desert critters, giving them more warm focused levels. And for variety giving them minor brute weakness and minor burn resistant
+//I also want to make a dig because fennec foxes actually make burrows and such, but I can't figure out how to do it in a way that is both flavorful but not abuseable
+/datum/species/hi_zoxxen //zorrens get wierd chemistry because of their past of expirementing on themselves. Check the cataloguer for deathclaws
+ chemOD_threshold = 0.75
+ radiation_mod = 0.5
+ brute_mod = 1.1
+ burn_mod = 0.9
+
+ cold_level_1 = 270 //Default 260 - Lower is better
+ cold_level_2 = 210 //Default 200
+ cold_level_3 = 120 //Default 120
+
+ breath_cold_level_1 = 250 //Default 240 - Lower is better
+ breath_cold_level_2 = 190 //Default 180
+ breath_cold_level_3 = 100 //Default 100
+
+ heat_level_1 = 400 //Default 360 - Higher is better
+ heat_level_2 = 460 //Default 400
+ heat_level_3 = 1080 //Default 1000
+
+ breath_heat_level_1 = 430 //Default 380 - Higher is better
+ breath_heat_level_2 = 510 //Default 450
+ breath_heat_level_3 = 1200 //Default 1250
+
+/datum/species/fl_zorren
+ item_slowdown_mod = 1.2
+ slowdown = -0.2
+ brute_mod = 1.1
+ burn_mod = 0.9
+
+ cold_level_1 = 270 //Default 260 - Lower is better
+ cold_level_2 = 210 //Default 200
+ cold_level_3 = 120 //Default 120
+
+ breath_cold_level_1 = 250 //Default 240 - Lower is better
+ breath_cold_level_2 = 190 //Default 180
+ breath_cold_level_3 = 100 //Default 100
+
+ heat_level_1 = 400 //Default 360 - Higher is better
+ heat_level_2 = 460 //Default 400
+ heat_level_3 = 1080 //Default 1000
+
+ breath_heat_level_1 = 430 //Default 380 - Higher is better
+ breath_heat_level_2 = 510 //Default 450
+ breath_heat_level_3 = 1200 //Default 1250
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mob/new_player/sprite_accessories_taur.dm b/modular_chomp/code/modules/mob/new_player/sprite_accessories_taur.dm
index 846ed0ae71..5d6fed9394 100644
--- a/modular_chomp/code/modules/mob/new_player/sprite_accessories_taur.dm
+++ b/modular_chomp/code/modules/mob/new_player/sprite_accessories_taur.dm
@@ -117,6 +117,9 @@
icon_state = "fox"
extra_overlay = "fox_markings"
extra_overlay2 = "fox_markings2"
+ can_loaf = TRUE
+ icon_loaf = 'icons/mob/vore/taurs_ch_loaf.dmi'
+ loaf_offset = 4
/datum/sprite_accessory/tail/taur/ch/sectdrone
name = "Sect Drone (Taur)"
diff --git a/modular_chomp/sound/misc/silence.ogg b/modular_chomp/sound/misc/silence.ogg
new file mode 100644
index 0000000000..41ee44cd04
Binary files /dev/null and b/modular_chomp/sound/misc/silence.ogg differ
diff --git a/vorestation.dme b/vorestation.dme
index 87f8b40812..4a5cd60874 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -3312,7 +3312,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates_ch.dm"
-#include "code\modules\mob\living\simple_mob\subtypes\humanoid\posessed_ch.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\possessed_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\russian.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs_ch.dm"
@@ -4516,6 +4516,7 @@
#include "maps\southern_cross\structures\closets\misc.dm"
#include "maps\southern_cross\structures\closets\research.dm"
#include "maps\southern_cross\structures\closets\security.dm"
+#include "maps\southern_cross\submaps\virtual_reality\constructVR.dm"
#include "maps\southern_cross\turfs\outdoors.dm"
#include "maps\submaps\_helpers.dm"
#include "maps\submaps\_readme.dm"
@@ -4631,6 +4632,7 @@
#include "modular_chomp\code\modules\mob\living\carbon\human\species\outsider\vox.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\prommie_blob.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\station.dm"
+#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\station_ch.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\station_special_ch.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\teshari.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\protean\_protean_defines.dm"