[MIRROR] Panel port test [IDB IGNORE] (#10447)

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-03-17 00:05:24 +01:00
committed by GitHub
co-authored by Kashargul
parent 2439279209
commit 2f698760c7
389 changed files with 4764 additions and 9001 deletions
+1 -1
View File
@@ -26,7 +26,7 @@ GLOBAL_LIST_EMPTY(shutoff_valves)
/obj/machinery/atmospherics/valve/shutoff/Destroy()
GLOB.shutoff_valves -= src
..()
. = ..()
/obj/machinery/atmospherics/valve/shutoff/attack_ai(mob/user as mob)
return src.attack_hand(user)
+19
View File
@@ -69,6 +69,8 @@
#define REAGENT_ID_POTASSIUM "potassium"
#define REAGENT_RADIUM "Radium"
#define REAGENT_ID_RADIUM "radium"
#define REAGENT_CONCENTRATEDRADIUM "Concentrated Radium"
#define REAGENT_ID_CONCENTRATEDRADIUM "concentrated_radium"
#define REAGENT_SILICON "Silicon"
#define REAGENT_ID_SILICON "silicon"
#define REAGENT_SODIUM "Sodium"
@@ -1302,6 +1304,8 @@
#define REAGENT_ID_SIFSAP "sifsap"
#define REAGENT_STOMACID "Digestive acid"
#define REAGENT_ID_STOMACID "stomacid"
#define REAGENT_DIETSTOMACID "Diluted digestive acid"
#define REAGENT_ID_DIETSTOMACID "diet_stomacid"
#define REAGENT_THERMITEV "Pyrotoxin"
#define REAGENT_ID_THERMITEV "thermite_v"
#define REAGENT_CONDENSEDCAPSAICINV "Irritant toxin"
@@ -1353,3 +1357,18 @@
#define REAGENT_ID_SLIMEBONEFIXER "slime_bone_fixer"
#define REAGENT_SLIMEORGANFIXER "Agent C"
#define REAGENT_ID_SLIMEORGANFIXER "slime_organ_fixer"
// Vore Belly Options
#define REAGENT_ID_WATER_BELLY "water_liquidbelly"
#define REAGENT_ID_MILK_BELLY "milk_liquidbelly"
#define REAGENT_ID_CREAM_BELLY "cream_liquidbelly"
#define REAGENT_ID_HONEY_BELLY "honey_liquidbelly"
#define REAGENT_ID_CHERRYJELLY_BELLY "cherry_liquidbelly"
#define REAGENT_ID_STOMACID_BELLY "stomacid_liquidbelly"
#define REAGENT_ID_DIETSTOMACID_BELLY "diet_stomacid_liquidbelly"
#define REAGENT_ID_CLEANER_BELLY "cleaner_liquidbelly"
#define REAGENT_ID_LUBE_BELLY "lube_liquidbelly"
#define REAGENT_ID_BIOMASS_BELLY "biomass_liquidbelly"
#define REAGENT_ID_CONCENTRATEDRADIUM_BELLY "cradium_liquidbelly"
#define REAGENT_ID_TRICORDRAZINE_BELLY "tricordrazine_liquidbelly"
-4
View File
@@ -37,8 +37,6 @@
#define REAGENT_ID_APHRODISIAC "aphrodisiac"
#define REAGENT_SORBITOL "Sorbitol"
#define REAGENT_ID_SORBITOL "sorbitol"
#define REAGENT_CONCENTRATEDRADIUM "Concentrated Radium"
#define REAGENT_ID_CONCENTRATEDRADIUM "concentrated_radium"
#define REAGENT_CLARIDYL "Claridyl Natural Remedy"
#define REAGENT_ID_CLARIDYL "claridyl"
#define REAGENT_DYLOTEANE "The Anti-Irish"
@@ -271,8 +269,6 @@
// Toxins
#define REAGENT_DIETSTOMACID "Diluted digestive acid"
#define REAGENT_ID_DIETSTOMACID "diet_stomacid"
#define REAGENT_DEATHBLOOD "Irradiating Blood"
#define REAGENT_ID_DEATHBLOOD "deathblood"
#define REAGENT_LIQUIDFIRE "Liquid Fire"
+83
View File
@@ -0,0 +1,83 @@
// Vore belly options
#define STRUGGLE_OUTSIDE "smo"
#define STRUGGLE_INSIDE "smi"
#define ABSORBED_STRUGGLE_OUSIDE "asmo"
#define ABSORBED_STRUGGLE_INSIDE "asmi"
#define ESCAPE_ATTEMPT_OWNER "escao"
#define ESCAPE_ATTEMPT_PREY "escap"
#define ESCAPE_OWNER "esco"
#define ESCAPE_PREY "escp"
#define ESCAPE_OUTSIDE "escout"
#define ESCAPE_ITEM_OWNER "escio"
#define ESCAPE_ITEM_PREY "escip"
#define ESCAPE_ITEM_OUTSIDE "esciout"
#define ESCAPE_FAIL_OWNER "escfo"
#define ESCAPE_FAIL_PREY "escfp"
#define ABSORBED_ESCAPE_ATTEMPT_OWNER "aescao"
#define ABSORBED_ESCAPE_ATTEMPT_PREY "aescap"
#define ABSORBED_ESCAPE_OWNER "aesco"
#define ABSORBED_ESCAPE_PREY "aescp"
#define ABSORBED_ESCAPE_OUTSIDE "aescout"
#define FULL_ABSORBED_ESCAPE_OWNER "aescfo"
#define FULL_ABSORBED_ESCAPE_PREY "aescfp"
#define PRIMARY_TRANSFER_OWNER "trnspo"
#define PRIMARY_TRANSFER_PREY "trnspp"
#define SECONDARY_TRANSFER_OWNER "trnsso"
#define SECONDARY_TRANSFER_PREY "trnssp"
#define PRIMARY_AUTO_TRANSFER_OWNER "atrnspo"
#define PRIMARY_AUTO_TRANSFER_PREY "atrnspp"
#define SECONDARY_AUTO_TRANSFER_OWNER "atrnsso"
#define SECONDARY_AUTO_TRANSFER_PREY "atrnssp"
#define DIGEST_CHANCE_OWNER "stmodo"
#define DIGEST_CHANCE_PREY "stmodp"
#define ABSORB_CHANCE_OWNER "stmoao"
#define ABSORB_CHANCE_PREY "stmoap"
#define DIGEST_OWNER "dmo"
#define DIGEST_PREY "dmp"
#define EXAMINES "em"
#define EXAMINES_ABSORBED "ema"
#define ABSORB_OWNER "amo"
#define ABSORB_PREY "amp"
#define UNABSORBS_OWNER "uamo"
#define UNABSORBS_PREY "uamp"
#define BELLY_MODE_DIGEST "im_digest"
#define BELLY_MODE_HOLD "im_hold"
#define BELLY_MODE_HOLD_ABSORB "im_holdabsorbed"
#define BELLY_MODE_ABSORB "im_absorb"
#define BELLY_MODE_HEAL "im_heal"
#define BELLY_MODE_DRAIN "im_drain"
#define BELLY_MODE_STEAL "im_steal"
#define BELLY_MODE_EGG "im_egg"
#define BELLY_MODE_SHRINK "im_shrink"
#define BELLY_MODE_GROW "im_grow"
#define BELLY_MODE_UNABSORB "im_unabsorb"
#define VB_MESSAGE_SANIRY(type) ASSERT(type == STRUGGLE_OUTSIDE || type == STRUGGLE_INSIDE || type == ABSORBED_STRUGGLE_OUSIDE || type == ABSORBED_STRUGGLE_INSIDE || type == ESCAPE_ATTEMPT_OWNER || type == ESCAPE_ATTEMPT_PREY ||\
type == ESCAPE_PREY || type == ESCAPE_OWNER || type == ESCAPE_OUTSIDE || type == ESCAPE_ITEM_PREY || type == ESCAPE_ITEM_OWNER || type == ESCAPE_ITEM_OUTSIDE || type == ESCAPE_FAIL_PREY ||\
type == ESCAPE_FAIL_OWNER || type == ABSORBED_ESCAPE_ATTEMPT_OWNER || type == ABSORBED_ESCAPE_ATTEMPT_PREY || type == ABSORBED_ESCAPE_PREY || type == ABSORBED_ESCAPE_OWNER ||\
type == ABSORBED_ESCAPE_OUTSIDE || type == FULL_ABSORBED_ESCAPE_PREY || type == FULL_ABSORBED_ESCAPE_OWNER || type == PRIMARY_TRANSFER_PREY || type == PRIMARY_TRANSFER_OWNER ||\
type == SECONDARY_TRANSFER_PREY || type == SECONDARY_TRANSFER_OWNER || type == PRIMARY_AUTO_TRANSFER_PREY || type == PRIMARY_AUTO_TRANSFER_OWNER || type == SECONDARY_AUTO_TRANSFER_PREY ||\
type == SECONDARY_AUTO_TRANSFER_OWNER || type == DIGEST_CHANCE_PREY || type == DIGEST_CHANCE_OWNER || type == ABSORB_CHANCE_PREY || type == ABSORB_CHANCE_OWNER || type == DIGEST_OWNER ||\
type == DIGEST_PREY || type == ABSORB_OWNER || type == ABSORB_PREY || type == UNABSORBS_OWNER || type == UNABSORBS_PREY || type == EXAMINES || type == EXAMINES_ABSORBED ||\
type == BELLY_MODE_DIGEST || type == BELLY_MODE_HOLD || type == BELLY_MODE_HOLD_ABSORB || type == BELLY_MODE_ABSORB || type == BELLY_MODE_HEAL || type == BELLY_MODE_DRAIN ||\
type == BELLY_MODE_STEAL || type == BELLY_MODE_EGG || type == BELLY_MODE_SHRINK || type == BELLY_MODE_GROW || type == BELLY_MODE_UNABSORB)
-40
View File
@@ -1,40 +0,0 @@
//CHOMP belly modes
//Belly Reagents mode flags
#define DM_FLAG_REAGENTSNUTRI 0x1
#define DM_FLAG_REAGENTSDIGEST 0x2
#define DM_FLAG_REAGENTSABSORB 0x4
#define DM_FLAG_REAGENTSDRAIN 0x8
//For belly fullscreen shennanigans outside of bellies, due to Life() clearing belly fullscreens outside of bellies.
#define ATOM_BELLY_FULLSCREEN "belly_atom_vfx"
//Auto-transfer mob flags
#define AT_FLAG_CREATURES 0x1
#define AT_FLAG_ABSORBED 0x2
#define AT_FLAG_CARBON 0x4
#define AT_FLAG_SILICON 0x8
#define AT_FLAG_MOBS 0x10
#define AT_FLAG_ANIMALS 0x20
#define AT_FLAG_MICE 0x40
#define AT_FLAG_DEAD 0x80
#define AT_FLAG_CANDIGEST 0x100
#define AT_FLAG_CANABSORB 0x200
#define AT_FLAG_HEALTHY 0x400
//Auto-transfer item flags
#define AT_FLAG_ITEMS 0x1
#define AT_FLAG_TRASH 0x2
#define AT_FLAG_EGGS 0x4
#define AT_FLAG_REMAINS 0x8
#define AT_FLAG_INDIGESTIBLE 0x10
#define AT_FLAG_RECYCLABLE 0x20
#define AT_FLAG_ORES 0x40
#define AT_FLAG_CLOTHES 0x80
#define AT_FLAG_FOOD 0x100
//Vorespawn flags
#define VS_FLAG_ABSORB_YES 0x1
#define VS_FLAG_ABSORB_PREY 0x2
+41 -4
View File
@@ -22,15 +22,15 @@
#define DM_FLAG_JAMSENSORS 0x20
#define DM_FLAG_FORCEPSAY 0x40
#define DM_FLAG_SPARELIMB 0x80
#define DM_FLAG_SLOWBODY 0x100 //CHOMPAdd
#define DM_FLAG_MUFFLEITEMS 0x200 //CHOMPAdd
#define DM_FLAG_TURBOMODE 0x400 //CHOMPAdd
#define DM_FLAG_SLOWBODY 0x100
#define DM_FLAG_MUFFLEITEMS 0x200
#define DM_FLAG_TURBOMODE 0x400
//Item related modes
#define IM_HOLD "Hold"
#define IM_DIGEST_FOOD "Digest (Food Only)"
#define IM_DIGEST "Digest"
#define IM_DIGEST_PARALLEL "Digest (Dispersed Damage)" //CHOMPedit
#define IM_DIGEST_PARALLEL "Digest (Dispersed Damage)"
//Stance for hostile mobs to be in while devouring someone.
#define HOSTILE_STANCE_EATING 99
@@ -53,3 +53,40 @@
#define DM_FLAG_VORESPRITE_TAIL 0x2
#define DM_FLAG_VORESPRITE_MARKING 0x4
#define DM_FLAG_VORESPRITE_ARTICLE 0x8
//Belly Reagents mode flags
#define DM_FLAG_REAGENTSNUTRI 0x1
#define DM_FLAG_REAGENTSDIGEST 0x2
#define DM_FLAG_REAGENTSABSORB 0x4
#define DM_FLAG_REAGENTSDRAIN 0x8
//For belly fullscreen shennanigans outside of bellies, due to Life() clearing belly fullscreens outside of bellies.
#define ATOM_BELLY_FULLSCREEN "belly_atom_vfx"
//Auto-transfer mob flags
#define AT_FLAG_CREATURES 0x1
#define AT_FLAG_ABSORBED 0x2
#define AT_FLAG_CARBON 0x4
#define AT_FLAG_SILICON 0x8
#define AT_FLAG_MOBS 0x10
#define AT_FLAG_ANIMALS 0x20
#define AT_FLAG_MICE 0x40
#define AT_FLAG_DEAD 0x80
#define AT_FLAG_CANDIGEST 0x100
#define AT_FLAG_CANABSORB 0x200
#define AT_FLAG_HEALTHY 0x400
//Auto-transfer item flags
#define AT_FLAG_ITEMS 0x1
#define AT_FLAG_TRASH 0x2
#define AT_FLAG_EGGS 0x4
#define AT_FLAG_REMAINS 0x8
#define AT_FLAG_INDIGESTIBLE 0x10
#define AT_FLAG_RECYCLABLE 0x20
#define AT_FLAG_ORES 0x40
#define AT_FLAG_CLOTHES 0x80
#define AT_FLAG_FOOD 0x100
//Vorespawn flags
#define VS_FLAG_ABSORB_YES 0x1
#define VS_FLAG_ABSORB_PREY 0x2
+1 -1
View File
@@ -5,7 +5,7 @@
#define CHEM_TOUCH 1
#define CHEM_INGEST 2
#define CHEM_BLOOD 3
#define CHEM_VORE 4 //CHOMP vore belly interactions
#define CHEM_VORE 4 // vore belly interactions
#define MINIMUM_CHEMICAL_VOLUME 0.01
+7
View File
@@ -813,6 +813,13 @@
#define COMSIG_OBSERVER_APC "observer_apc"
#define COMSIG_OBSERVER_GLOBALMOVED "observer_global_move"
// Bellies
///from /obj/belly/HandleBellyReagents() and /obj/belly/update_internal_overlay()
#define COMSIG_BELLY_UPDATE_VORE_FX "update_vore_fx"
///from /obj/belly/process()
#define COMSIG_BELLY_UPDATE_PREY_LOOP "update_prey_loop"
/// COMSIG used to get messages where they need to go
#define COMSIG_VISIBLE_MESSAGE "visible_message"
//Unittest data update
#ifdef UNIT_TEST
-8
View File
@@ -1,8 +0,0 @@
// Bellies
///from /obj/belly/HandleBellyReagents() and /obj/belly/update_internal_overlay()
#define COMSIG_BELLY_UPDATE_VORE_FX "update_vore_fx"
///from /obj/belly/process()
#define COMSIG_BELLY_UPDATE_PREY_LOOP "update_prey_loop"
/// COMSIG used to get messages where they need to go
#define COMSIG_VISIBLE_MESSAGE "visible_message"
+5 -5
View File
@@ -7,12 +7,12 @@
#define MAP_LEVEL_EMPTY 0x020 // Empty Z-levels that may be used for various things (currently used by bluespace jump)
#define MAP_LEVEL_CONSOLES 0x040 // Z-levels available to various consoles, such as the crew monitor (when that gets coded in). Defaults to station_levels if unset.
#define MAP_LEVEL_XENOARCH_EXEMPT 0x080 // Z-levels exempt from xenoarch digsite generation.
#define MAP_LEVEL_VORESPAWN 0x100 //CHOMPedit Z-levels players are allowed to late join to via vorish means. Usually non-dangerous locations.
#define MAP_LEVEL_PERSIST 0x200 // Z-levels where SSpersistence should persist between rounds //CHOMPedit bumped to 0x200 because vorespawn, hopefully this doesn't break things
#define MAP_LEVEL_MAPPABLE 0x400 // Z-levels where mapping units will work fully //CHOMPedit bumped to 0x400, somethingsomething don't break
#define MAP_LEVEL_BELOW_BLOCKED 0x800 // Z-levels in multiz with level below not meant to be 'normally' accessible //CHOMPedit bumped to 0x800, please god do not break
#define MAP_LEVEL_VORESPAWN 0x100 // Z-levels players are allowed to late join to via vorish means. Usually non-dangerous locations.
#define MAP_LEVEL_PERSIST 0x200 // Z-levels where SSpersistence should persist between rounds
#define MAP_LEVEL_MAPPABLE 0x400 // Z-levels where mapping units will work fully
#define MAP_LEVEL_BELOW_BLOCKED 0x800 // Z-levels in multiz with level below not meant to be 'normally' accessible
// Misc map defines.
#define SUBMAP_MAP_EDGE_PAD 8 // Automatically created submaps are forbidden from being this close to the main map's edge. //VOREStation Edit
#define SUBMAP_MAP_EDGE_PAD 8 // Automatically created submaps are forbidden from being this close to the main map's edge.
#define CELL_ALIVE(VAL) (VAL == cell_live_value)
+7
View File
@@ -228,3 +228,10 @@
if(num < 0)
return 0
return sqrt(num)
//Proc to check if a flag is active to use in universal math
/proc/global_flag_check(element, flag)
if(element & flag)
return 1
else
return 0
-7
View File
@@ -1,8 +1 @@
//Proc to check if a flag is active to use in universal math
/proc/global_flag_check(element, flag)
if(element & flag)
return 1
else
return 0
#define GAUSSIAN_RANDOM(vars...) ((-2*log(rand()))**0.5 * cos(6.28318530718*rand()))
+2 -2
View File
@@ -480,9 +480,9 @@
#define VIS_CH_STOMACH 34
#define VIS_SOULCATCHER 35 // CHOMPAdd
#define VIS_SOULCATCHER 35
#define VIS_COUNT 35 //Must be highest number from above. // CHOMPEdit
#define VIS_COUNT 35 //Must be highest number from above.
//Some mob icon layering defines
#define BODY_LAYER -100
+13
View File
@@ -0,0 +1,13 @@
//These two also have NIF FLAG representations. These are the local setting representations.
#define NIF_SC_CATCHING_ME 0x1
#define NIF_SC_CATCHING_OTHERS 0x2
//These are purely local setings flags, without global representation.
#define NIF_SC_ALLOW_EARS 0x4
#define NIF_SC_ALLOW_EYES 0x8
#define NIF_SC_BACKUPS 0x10
#define NIF_SC_PROJECTING 0x20
#define SOULGEM_CATCHING_GHOSTS 0x200
#define SOULGEM_ACTIVE 0x400
#define SOULGEM_SHOW_VORE_SFX 0x800
#define SOULGEM_CATCHING_DRAIN 0x1000
#define SOULGEM_SEE_SR_SOULS 0x2000
+24
View File
@@ -379,3 +379,27 @@ var/global/list/blacklisted_artifact_effects = list(
/datum/artifact_effect/gas/phoron,
/datum/artifact_effect/extreme
)
//stuff that only synths can eat
var/global/list/edible_tech = list(/obj/item/cell,
/obj/item/circuitboard,
/obj/item/integrated_circuit,
/obj/item/broken_device,
/obj/item/brokenbug,
)
var/global/list/item_digestion_blacklist = list(
/obj/item/hand_tele,
/obj/item/card/id,
/obj/item/gun,
/obj/item/pinpointer,
/obj/item/clothing/shoes/magboots,
/obj/item/areaeditor/blueprints,
/obj/item/disk/nuclear,
/obj/item/perfect_tele_beacon,
/obj/item/organ/internal/brain/slime,
/obj/item/mmi/digital/posibrain,
/obj/item/mmi/digital/robot,
/obj/item/rig/protean)
var/global/list/item_tf_spawnpoints = list() // Global variable tracking which items are item tf spawnpoints
-24
View File
@@ -1,27 +1,3 @@
var/global/list/item_tf_spawnpoints = list() // Global variable tracking which items are item tf spawnpoints
//stuff that only synths can eat
var/global/list/edible_tech = list(/obj/item/cell,
/obj/item/circuitboard,
/obj/item/integrated_circuit,
/obj/item/broken_device,
/obj/item/brokenbug,
)
var/global/list/item_digestion_blacklist = list(
/obj/item/hand_tele,
/obj/item/card/id,
/obj/item/gun,
/obj/item/pinpointer,
/obj/item/clothing/shoes/magboots,
/obj/item/areaeditor/blueprints,
/obj/item/disk/nuclear,
/obj/item/perfect_tele_beacon,
/obj/item/organ/internal/brain/slime,
/obj/item/mmi/digital/posibrain,
/obj/item/mmi/digital/robot,
/obj/item/rig/protean)
// Options for transforming into a different mob in virtual reality.
var/global/list/vr_mob_tf_options = list(
"Borg" = /mob/living/silicon/robot,
+1
View File
@@ -1621,6 +1621,7 @@ GLOBAL_REAL_VAR(list/stack_trace_storage)
. += new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags
. += new /obj/screen/plane_master{plane = PLANE_CH_STOMACH} //Stomachs
. += new /obj/screen/plane_master{plane = PLANE_AUGMENTED} //Augmented reality
. += new /obj/screen/plane_master{plane = PLANE_SOULCATCHER} //Soulcatcher
//VOREStation Add End
/proc/CallAsync(datum/source, proctype, list/arguments)
set waitfor = FALSE
@@ -9,10 +9,6 @@
///datum/config_entry/flag/emojis
// default = FALSE
/// In future see about making a function to adjust volume serverside in config.txt, easy to do with reenable values. - Jack
/datum/config_entry/number/vorefootstep_volume
default = 75
/// So, nodebot is a supplement to the TGS discord bot pretty much. For things likes faxes and the manifest it's very helpful because it's able to render html into an image and post it.
/datum/config_entry/flag/nodebot_enabled
default = FALSE
@@ -62,6 +62,10 @@
/datum/config_entry/number/footstep_volume
default = 0
/// In future see about making a function to adjust volume serverside in config.txt, easy to do with reenable values. - Jack
/datum/config_entry/number/vorefootstep_volume
default = 75
/datum/config_entry/flag/use_loyalty_implants
/datum/config_entry/flag/show_human_death_message
+9 -2
View File
@@ -29,8 +29,8 @@
var/cloaked = FALSE //If we're cloaked or not
var/image/cloaked_selfimage //The image we use for our client to let them see where we are
var/belly_cycles = 0 //CHOMPEdit: Counting current belly process cycles for autotransfer.
var/autotransferable = TRUE //CHOMPEdit: Toggle for autotransfer mechanics.
var/belly_cycles = 0 // Counting current belly process cycles for autotransfer.
var/autotransferable = TRUE // Toggle for autotransfer mechanics.
/atom/movable/Initialize(mapload)
. = ..()
@@ -667,3 +667,10 @@
var/direction = get_dir(old_loc, new_loc)
loc = new_loc
Moved(old_loc, direction, TRUE)
// Helper procs called on entering/exiting a belly. Does nothing by default, override on children for special behavior.
/atom/movable/proc/enter_belly(obj/belly/B)
return
/atom/movable/proc/exit_belly(obj/belly/B)
return
-7
View File
@@ -51,12 +51,5 @@
for (var/atom/movable/location as anything in get_nested_locs(src)|src)
LAZYOR(location.recursive_listeners, arrived.recursive_listeners)
// Helper procs called on entering/exiting a belly. Does nothing by default, override on children for special behavior.
/atom/movable/proc/enter_belly(obj/belly/B)
return
/atom/movable/proc/exit_belly(obj/belly/B)
return
/atom/movable/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
return
-2
View File
@@ -227,10 +227,8 @@
SSjob.shift_keys[title] += keylist
//CHOMPadd end
//CHOMPAdd Start
/datum/job/proc/update_limit(var/comperator)
return
//CHOMPAdd End
// Check client-specific availability rules.
/datum/job/proc/player_has_enough_pto(client/C)
+14 -32
View File
@@ -87,14 +87,12 @@ var/global/datum/controller/occupations/job_master
return 1
return 0
//CHOMPAdd Start
/datum/controller/occupations/proc/update_limit(var/rank, var/comperator)
var/datum/job/job = GetJob(rank)
if(job && job.total_positions != -1)
job.update_limit(comperator)
return 1
return 0
//CHOMPAdd End
/datum/controller/occupations/proc/FindOccupationCandidates(datum/job/job, level, flag)
Debug("Running FOC, Job: [job], Level: [level], Flag: [flag]")
@@ -677,13 +675,13 @@ var/global/datum/controller/occupations/job_master
var/datum/spawnpoint/spawnpos
var/fail_deadly = FALSE
var/obj/belly/vore_spawn_gut
var/absorb_choice = FALSE //CHOMPAdd - Ability to start absorbed with vorespawn
var/absorb_choice = FALSE // Ability to start absorbed with vorespawn
var/mob/living/prey_to_nomph
var/obj/item/item_to_be //CHOMPEdit - Item TF spawning
var/mob/living/item_carrier //CHOMPEdit - Capture crystal spawning
var/vorgans = FALSE //CHOMPEdit - capture crystal simplemob spawning
var/obj/item/item_to_be // Item TF spawning
var/mob/living/item_carrier // Capture crystal spawning
var/vorgans = FALSE // capture crystal simplemob spawning
//CHOMPEdit - Remove fail_deadly addition on offmap_spawn
// Remove fail_deadly addition on offmap_spawn
//Spawn them at their preferred one
if(C && C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint))
@@ -694,7 +692,7 @@ var/global/datum/controller/occupations/job_master
if(!isliving(V.mob))
continue
var/mob/living/M = V.mob
if(M.stat == UNCONSCIOUS || M.stat == DEAD || (M.client.is_afk(10 MINUTES) && !M.no_latejoin_vore_warning)) //CHOMPEdit
if(M.stat == UNCONSCIOUS || M.stat == DEAD || (M.client.is_afk(10 MINUTES) && !M.no_latejoin_vore_warning))
continue
if(!M.latejoin_vore)
continue
@@ -713,10 +711,8 @@ var/global/datum/controller/occupations/job_master
for(var/obj/belly/Y in pred.vore_organs)
if(Y.vorespawn_blacklist)
continue
//CHOMPAdd Start
if(LAZYLEN(Y.vorespawn_whitelist) && !(C.ckey in Y.vorespawn_whitelist))
continue
//CHOMPAdd End
available_bellies += Y
var/backup = tgui_alert(C, "Do you want a mind backup?", "Confirm", list("Yes", "No"))
if(backup == "Yes")
@@ -724,7 +720,6 @@ var/global/datum/controller/occupations/job_master
vore_spawn_gut = tgui_input_list(C, "Choose a Belly.", "Belly Spawnpoint", available_bellies)
if(!vore_spawn_gut)
return
//CHOMPAdd Start
if(vore_spawn_gut.vorespawn_absorbed & VS_FLAG_ABSORB_YES)
absorb_choice = TRUE
if(vore_spawn_gut.vorespawn_absorbed & VS_FLAG_ABSORB_PREY)
@@ -732,7 +727,6 @@ var/global/datum/controller/occupations/job_master
absorb_choice = FALSE
else if(tgui_alert(C, "[pred]'s [vore_spawn_gut] will start with you absorbed. Continue?", "Confirm", list("Yes", "No")) != "Yes")
return
//CHOMPAdd End
to_chat(C, span_boldwarning("[pred] has received your spawn request. Please wait."))
log_admin("[key_name(C)] has requested to vore spawn into [key_name(pred)]")
message_admins("[key_name(C)] has requested to vore spawn into [key_name(pred)]")
@@ -740,21 +734,17 @@ var/global/datum/controller/occupations/job_master
var/confirm
if(pred.no_latejoin_vore_warning)
if(pred.no_latejoin_vore_warning_time > 0)
//CHOMPEdit Start
if(absorb_choice)
confirm = tgui_alert(pred, "[C.prefs.real_name] is attempting to spawn absorbed as your [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"), pred.no_latejoin_vore_warning_time SECONDS)
else
confirm = tgui_alert(pred, "[C.prefs.real_name] is attempting to spawn into your [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"), pred.no_latejoin_vore_warning_time SECONDS)
//CHOMPEdit End
if(!confirm)
confirm = "Yes"
else
//CHOMPEdit Start
if(absorb_choice)
confirm = tgui_alert(pred, "[C.prefs.real_name] is attempting to spawn absorbed as your [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"))
else
confirm = tgui_alert(pred, "[C.prefs.real_name] is attempting to spawn into your [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"))
//CHOMPEdit End
if(confirm != "Yes")
to_chat(C, span_warning("[pred] has declined your spawn request."))
var/message = sanitizeSafe(input(pred,"Do you want to leave them a message?")as text|null)
@@ -777,7 +767,7 @@ var/global/datum/controller/occupations/job_master
log_admin("[key_name(C)] has vore spawned into [key_name(pred)]")
message_admins("[key_name(C)] has vore spawned into [key_name(pred)]")
to_chat(C, span_notice("You have been spawned via vore. You are free to roleplay how you got there as you please, such as teleportation or having had already been there."))
if(vore_spawn_gut.entrance_logs) //CHOMPEdit
if(vore_spawn_gut.entrance_logs)
to_chat(pred, span_notice("Your prey has spawned via vore. You are free to roleplay this how you please, such as teleportation or having had already been there."))
else
to_chat(C, span_warning("No predators were available to accept you."))
@@ -790,7 +780,7 @@ var/global/datum/controller/occupations/job_master
if(!isliving(V.mob))
continue
var/mob/living/M = V.mob
if(M.stat == UNCONSCIOUS || M.stat == DEAD || (M.client.is_afk(10 MINUTES) && !M.no_latejoin_prey_warning)) //CHOMPEdit
if(M.stat == UNCONSCIOUS || M.stat == DEAD || (M.client.is_afk(10 MINUTES) && !M.no_latejoin_prey_warning))
continue
if(!M.latejoin_prey)
continue
@@ -812,32 +802,26 @@ var/global/datum/controller/occupations/job_master
vore_spawn_gut = tgui_input_list(C, "Choose your Belly.", "Belly Spawnpoint", available_bellies)
if(!vore_spawn_gut)
return
//CHOMPAdd Start
if(alert(C, "Do you want to instantly absorb them?", "Confirm", "Yes", "No") == "Yes")
absorb_choice = TRUE
//CHOMPAdd End
to_chat(C, "<b><span class='warning'>[prey] has received your spawn request. Please wait.</span></b>")
to_chat(C, span_boldwarning("[prey] has received your spawn request. Please wait."))
log_admin("[key_name(C)] has requested to pred spawn onto [key_name(prey)]")
message_admins("[key_name(C)] has requested to pred spawn onto [key_name(prey)]")
var/confirm
if(prey.no_latejoin_prey_warning)
if(prey.no_latejoin_prey_warning_time > 0)
//CHOMPEdit Start
if(absorb_choice)
confirm = tgui_alert(prey, "[C.prefs.real_name] is attempting to televore and instantly absorb you with their [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"), prey.no_latejoin_prey_warning_time SECONDS)
else
confirm = tgui_alert(prey, "[C.prefs.real_name] is attempting to televore you into their [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"), prey.no_latejoin_prey_warning_time SECONDS)
//CHOMPEdit End
if(!confirm)
confirm = "Yes"
else
//CHOMPEdit Start
if(absorb_choice)
confirm = tgui_alert(prey, "[C.prefs.real_name] is attempting to televore and instantly absorb you with their [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"))
else
confirm = tgui_alert(prey, "[C.prefs.real_name] is attempting to televore you into their [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"))
//CHOMPEdit End
if(confirm != "Yes")
to_chat(C, span_warning("[prey] has declined your spawn request."))
var/message = sanitizeSafe(input(prey,"Do you want to leave them a message?")as text|null)
@@ -858,7 +842,7 @@ var/global/datum/controller/occupations/job_master
else
to_chat(C, span_warning("No prey were available to accept you."))
return
//CHOMPEdit - Item TF spawnpoints!
// Item TF spawnpoints!
else if(C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint) == "Item TF spawn")
var/list/items = list()
var/list/item_names = list()
@@ -918,7 +902,7 @@ var/global/datum/controller/occupations/job_master
var/mob/living/carrier = carriers[index]
if(istype(carrier))
to_chat(C, "<b><span class='warning'>[carrier] has received your spawn request. Please wait.</span></b>")
to_chat(C, span_boldwarning("[carrier] has received your spawn request. Please wait."))
log_and_message_admins("[key_name(C)] has requested to item spawn into [key_name(carrier)]'s possession")
var/confirm = tgui_alert(carrier, "[C.prefs.real_name] is attempting to join as the [item_name] in your possession.", "Confirm", list("No", "Yes"))
@@ -958,7 +942,6 @@ var/global/datum/controller/occupations/job_master
else
to_chat(C, span_warning("No items were available to accept you."))
return
//CHOMPEdit End
else
if(!(C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint) in using_map.allowed_spawns))
if(fail_deadly)
@@ -971,18 +954,17 @@ var/global/datum/controller/occupations/job_master
spawnpos = spawntypes[C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint)]
//We will return a list key'd by "turf" and "msg"
. = list("turf","msg", "voreny", "prey", "itemtf", "vorgans", "carrier") //CHOMPEdit - Item TF spawnpoints, spawn as mob
. = list("turf","msg", "voreny", "prey", "itemtf", "vorgans", "carrier") // Item TF spawnpoints, spawn as mob
if(vore_spawn_gut)
.["voreny"] = vore_spawn_gut
.["absorb"] = absorb_choice //CHOMPAdd
.["absorb"] = absorb_choice
if(prey_to_nomph)
.["prey"] = prey_to_nomph //We pass this on later to reverse the vorespawn in new_player.dm
//CHOMPEdit Start - Item TF spawnpoints
// Item TF spawnpoints
if(item_to_be)
.["carrier"] = item_carrier
.["vorgans"] = vorgans
.["itemtf"] = item_to_be
//CHOMPEdit End
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len)
if(spawnpos.check_job_spawning(rank))
.["turf"] = spawnpos.get_spawn_position()
+1 -1
View File
@@ -22,7 +22,7 @@
/obj/machinery/bluespace_beacon/Destroy()
if(Beacon)
qdel(Beacon)
..()
. = ..()
// update the invisibility and icon
/obj/machinery/bluespace_beacon/hide(var/intact)
+1 -1
View File
@@ -42,7 +42,7 @@
tank1 = null //Base machine Destroy()
tank2 = null //handles deleting contents
test_canister = null
..()
. = ..()
/obj/machinery/bomb_tester/dismantle()
if(tank1)
+1 -1
View File
@@ -22,7 +22,7 @@
/obj/machinery/computer/rcon/Destroy()
qdel(rcon)
rcon = null
..()
. = ..()
// Proc: attack_hand()
// Parameters: 1 (user - Person which clicked this computer)
+1 -1
View File
@@ -18,7 +18,7 @@ var/global/list/minor_air_alarms = list()
/obj/machinery/computer/atmos_alert/Destroy()
atmosphere_alarm.unregister_alarm(src)
..()
. = ..()
/obj/machinery/computer/atmos_alert/attack_hand(mob/user)
tgui_interact(user)
+1 -1
View File
@@ -17,7 +17,7 @@
/obj/machinery/computer/crew/Destroy()
qdel(crew_monitor)
crew_monitor = null
..()
. = ..()
/obj/machinery/computer/crew/attack_ai(mob/user)
attack_hand(user)
@@ -13,7 +13,7 @@
/obj/machinery/computer/shutoff_monitor/Destroy()
QDEL_NULL(monitor)
..()
. = ..()
/obj/machinery/computer/shutoff_monitor/attack_hand(var/mob/user as mob)
..()
@@ -25,7 +25,7 @@
/obj/machinery/computer/station_alert/Destroy()
alarm_monitor.unregister_alarm(src)
qdel(alarm_monitor)
..()
. = ..()
/obj/machinery/computer/station_alert/attack_ai(mob/user)
add_fingerprint(user)
+1 -1
View File
@@ -15,7 +15,7 @@ var/list/doppler_arrays = list()
/obj/machinery/doppler_array/Destroy()
doppler_arrays -= src
..()
. = ..()
/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/took)
if(stat & NOPOWER) return
@@ -90,7 +90,7 @@
/obj/machinery/embedded_controller/radio/Destroy()
if(radio_controller)
radio_controller.remove_object(src,frequency)
..()
. = ..()
/obj/machinery/embedded_controller/radio/update_icon()
if(on && program)
+2 -2
View File
@@ -184,7 +184,7 @@
/obj/machinery/magnetic_module/Destroy()
if(radio_controller)
radio_controller.remove_object(src, freq)
..()
. = ..()
/obj/machinery/magnetic_controller
name = "Magnetic Control Console"
@@ -391,4 +391,4 @@
/obj/machinery/magnetic_controller/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
..()
. = ..()
+1 -1
View File
@@ -202,7 +202,7 @@ Transponder Codes:<UL>"}
/obj/machinery/navbeacon/Destroy()
navbeacons.Remove(src)
..()
. = ..()
//
+1 -1
View File
@@ -49,7 +49,7 @@
for(var/atom/movable/AM in contents)
qdel(AM)
QDEL_NULL(soundloop)
..()
. = ..()
/obj/machinery/pda_multicaster/update_icon()
if(on)
+1 -1
View File
@@ -97,7 +97,7 @@
/obj/machinery/power/supply_beacon/Destroy()
if(use_power)
deactivate()
..()
. = ..()
/obj/machinery/power/supply_beacon/process()
if(expended)
+1 -1
View File
@@ -146,7 +146,7 @@
/obj/machinery/power/singularity_beacon/Destroy()
if(active)
Deactivate()
..()
. = ..()
//stealth direct power usage
/obj/machinery/power/singularity_beacon/process()
+1 -1
View File
@@ -121,7 +121,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
// In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore.
if(message_delay)
message_delay = 0
..()
. = ..()
/*
@@ -160,7 +160,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
comm.links -= src
links = list()
QDEL_NULL(soundloop) // CHOMPAdd: Tcomms noises
..()
. = ..()
// Used in auto linking
/obj/machinery/telecomms/proc/add_link(var/obj/machinery/telecomms/T)
+1 -1
View File
@@ -48,7 +48,7 @@
var/area/A = control_area
if(A && istype(A))
A.turret_controls -= src
..()
. = ..()
/obj/machinery/turretid/Initialize(mapload)
if(!control_area)
+23
View File
@@ -110,6 +110,9 @@
var/rock_climbing = FALSE //If true, allows climbing cliffs using click drag for single Z, walls if multiZ
var/climbing_delay = 1 //If rock_climbing, lower better.
var/digestable = TRUE
var/item_tf_spawn_allowed = FALSE
var/list/ckeys_allowed_itemspawn = list()
/obj/item/Initialize(mapload)
. = ..()
@@ -134,6 +137,8 @@
M.update_held_icons()
/obj/item/Destroy()
if(item_tf_spawn_allowed)
item_tf_spawnpoints -= src
if(ismob(loc))
var/mob/m = loc
m.drop_from_inventory(src)
@@ -1112,3 +1117,21 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen
/obj/item/proc/get_welder()
return
/obj/item/verb/toggle_digestable()
set category = "Object"
set name = "Toggle Digestable"
set desc = "Toggle item's digestability."
digestable = !digestable
if(!digestable)
to_chat(usr, span_notice("[src] is now protected from digestion."))
/obj/item/proc/item_tf_spawnpoint_set()
if(!item_tf_spawn_allowed)
item_tf_spawn_allowed = TRUE
item_tf_spawnpoints += src
/obj/item/proc/item_tf_spawnpoint_used()
if(item_tf_spawn_allowed)
item_tf_spawn_allowed = FALSE
item_tf_spawnpoints -= src
@@ -8,7 +8,7 @@
throwforce = 0
force = 0
actions_types = list(/datum/action/item_action/command)
w_class = ITEMSIZE_SMALL //CHOMPEdit
w_class = ITEMSIZE_SMALL
var/active = FALSE //Is it set up?
var/mob/living/owner //Reference to the owner
@@ -18,6 +18,7 @@
var/last_activate //Automatically set by things that try to move the bound mob or capture things
var/empty_icon = "empty"
var/full_icon = "full"
var/spawn_mob_name = "A mob"
var/capture_chance_modifier = 1 //So we can have special subtypes with different capture rates!
/obj/item/capture_crystal/Initialize(mapload)
@@ -36,11 +37,6 @@
if(owner)
UnregisterSignal(owner, COMSIG_PARENT_QDELETING)
owner = null
if(in_gut) // CHOMPedit start
UnregisterSignal(in_gut, COMSIG_PARENT_QDELETING)
UnregisterSignal(in_gut, COMSIG_BELLY_UPDATE_VORE_FX)
UnregisterSignal(in_gut, COMSIG_BELLY_UPDATE_PREY_LOOP)
in_gut = null // CHOMPedit end
return ..()
/obj/item/capture_crystal/examine(user)
@@ -483,7 +479,7 @@
//IF the crystal somehow ends up in a tummy and digesting with a bound mob who doesn't want to be eaten, let's move them to the ground
/obj/item/capture_crystal/digest_act(var/atom/movable/item_storage = null)
if(bound_mob) // CHOMPEdit
if(bound_mob)
if((bound_mob in contents) && !bound_mob.devourable)
bound_mob.forceMove(src.drop_location())
return ..()
@@ -863,3 +859,102 @@
/mob/living
var/capture_crystal = TRUE //If TRUE, the mob is capturable. Otherwise it isn't.
var/capture_caught = FALSE //If TRUE, the mob has already been caught, and so cannot be caught again.
/obj/item/capture_crystal/loadout
active = TRUE
/obj/item/capture_crystal/loadout/attack(mob/living/M, mob/living/user)
if(!bound_mob && M != user)
to_chat(user, span_notice("\The [src] emits an unpleasant tone..."))
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
return
. = ..()
/obj/item/capture_crystal/loadout/attack_self(mob/living/user)
if(!bound_mob)
to_chat(user, span_notice("\The [src] emits an unpleasant tone... It is not ready yet."))
playsound(src, 'sound/effects/capture-crystal-problem.ogg', 75, 1, -1)
return
. = ..()
/obj/item/capture_crystal/loadout/capture_chance()
return 0
/obj/item/capture_crystal/cheap
name = "cheap capture crystal"
desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheaply made and can only handle a willing mind."
icon = 'icons/obj/capture_crystal_vr.dmi'
//The basic capture command does most of the registration work.
/obj/item/capture_crystal/cheap/capture(mob/living/M, mob/living/U)
if(!M.capture_crystal || M.capture_caught)
to_chat(U, span_warning("This creature is not suitable for capture with this crystal."))
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
return
knowyoursignals(M, U)
if(isanimal(M) || !M.client)
to_chat(U, span_warning("This creature is not suitable for capture."))
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
return
owner = U
if(!bound_mob)
bound_mob = M
bound_mob.capture_caught = TRUE
persist_storable = FALSE
desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheaply made and can only handle a willing mind."
/obj/item/capture_crystal/cheap/activate(mob/living/user, target)
if(!cooldown_check()) //Are we ready to do things yet?
to_chat(thrower, span_notice("\The [src] clicks unsatisfyingly... It is not ready yet."))
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
return
if(spawn_mob_type && !bound_mob) //We don't already have a mob, but we know what kind of mob we want
bound_mob = new spawn_mob_type(src) //Well let's spawn it then!
bound_mob.faction = user.faction
spawn_mob_type = null
capture(bound_mob, user)
if(bound_mob) //We have a mob! Let's finish setting up.
user.visible_message("\The [src] clicks, and then emits a small chime.", "\The [src] grows warm in your hand, something inside is awake.")
active = TRUE
if(!owner) //Do we have an owner? It's pretty unlikely that this would ever happen! But it happens, let's claim the crystal.
owner = user
if(isanimal(bound_mob))
var/mob/living/simple_mob/S = bound_mob
S.revivedby = user.name
determine_action(user, target)
return
else if(isliving(target)) //So we don't have a mob, let's try to claim one! Is the target a mob?
var/mob/living/M = target
last_activate = world.time
if(M.capture_caught) //Can't capture things that were already caught.
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
to_chat(user, span_notice("\The [src] clicks unsatisfyingly... \The [M] is already under someone else's control."))
return
else if(M.stat == DEAD) //Is it dead? We can't influence dead things.
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
to_chat(user, span_notice("\The [src] clicks unsatisfyingly... \The [M] is not in a state to be captured."))
return
else if(M.client) //Is it player controlled?
capture_player(M, user) //We have to do things a little differently if so.
return
else if(!isanimal(M)) //So it's not player controlled, but it's also not a simplemob?
to_chat(user, span_warning("This creature is not suitable for capture."))
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
return
var/mob/living/simple_mob/S = M
if(!S.ai_holder) //We don't really want to capture simplemobs that don't have an AI
to_chat(user, span_warning("This creature is not suitable for capture."))
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
else //Shoot, it didn't work and now it's mad!!!
S.ai_holder.go_wake()
S.ai_holder.give_target(user, urgent = TRUE)
user.visible_message("\The [src] bonks into \the [S], angering it!")
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
to_chat(user, span_notice("\The [src] clicks unsatisfyingly."))
update_icon()
return
//The target is not a mob, so let's not do anything.
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
to_chat(user, span_notice("\The [src] clicks unsatisfyingly."))
@@ -15,7 +15,7 @@
show_messages = 0
allow_quick_empty = TRUE
use_sound = 'sound/items/drop/flesh.ogg'
var/egg_name = null //CHOMPAdd
var/egg_name = null
/obj/item/storage/vore_egg/Initialize(mapload)
. = ..()
@@ -51,7 +51,7 @@
for(var/obj/structure/prop/lock/L in locks)
L.linked_objects -= src
locks -= L
..()
. = ..()
/obj/machinery/door/blast/puzzle/attack_hand(mob/user as mob)
if(check_locks())
-4
View File
@@ -91,10 +91,6 @@
/obj/item/capture_crystal/after_trash_eaten(var/mob/living/user)
if(bound_mob && (bound_mob in contents))
if(isbelly(loc))
/* CHOMPRemove Start, handled by indirect FX
var/obj/belly/B = loc
to_chat(bound_mob, span_notice("Outside of your crystal, you can see; " + span_notice("[B.desc]")))
*/// CHOMPRemove End
to_chat(user, span_notice("You can taste the the power of command."))
// Most trash has no special check, so the rest of these are just after_trash_eaten()
@@ -0,0 +1,273 @@
/datum/belly_overlays
var/belly_icon
/datum/belly_overlays/vbo_belly1
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly1.dmi'
/datum/belly_overlays/vbo_belly2
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly2.dmi'
/datum/belly_overlays/vbo_belly3
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly3.dmi'
/datum/belly_overlays/vbo_belly4
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly4.dmi'
/datum/belly_overlays/vbo_belly5
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly5.dmi'
/datum/belly_overlays/vbo_belly6
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly6.dmi'
/datum/belly_overlays/vbo_belly7
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly7.dmi'
/datum/belly_overlays/vbo_belly8
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly8.dmi'
/datum/belly_overlays/vbo_belly9
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly9.dmi'
/datum/belly_overlays/vbo_belly9_fluidless
belly_icon = 'icons/mob/vore_fullscreens/VBO_belly9_fluidless.dmi'
/datum/belly_overlays/vbo_breast
belly_icon = 'icons/mob/vore_fullscreens/VBO_breast.dmi'
/datum/belly_overlays/vbo_breast1
belly_icon = 'icons/mob/vore_fullscreens/VBO_breast1.dmi'
/datum/belly_overlays/vbo_coils
belly_icon = 'icons/mob/vore_fullscreens/VBO_coils.dmi'
/datum/belly_overlays/vbo_coils1
belly_icon = 'icons/mob/vore_fullscreens/VBO_coils1.dmi'
/datum/belly_overlays/vbo_darkslit
belly_icon = 'icons/mob/vore_fullscreens/VBO_darkslit.dmi'
/datum/belly_overlays/vbo_fleshs
belly_icon = 'icons/mob/vore_fullscreens/VBO_fleshs.dmi'
/datum/belly_overlays/vbo_fleshs1
belly_icon = 'icons/mob/vore_fullscreens/VBO_fleshs1.dmi'
/datum/belly_overlays/vbo_foot
belly_icon = 'icons/mob/vore_fullscreens/VBO_foot.dmi'
/datum/belly_overlays/vbo_gematically_angular
belly_icon = 'icons/mob/vore_fullscreens/VBO_gematically_angular.dmi'
/datum/belly_overlays/vbo_intestines1
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines1.dmi'
/datum/belly_overlays/vbo_intestines2
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines2.dmi'
/datum/belly_overlays/vbo_intestines3
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines3.dmi'
/datum/belly_overlays/vbo_intestines4
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines4.dmi'
/datum/belly_overlays/vbo_intestines5
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines5.dmi'
/datum/belly_overlays/vbo_intestines6
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines6.dmi'
/datum/belly_overlays/vbo_intestines7
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines7.dmi'
/datum/belly_overlays/vbo_intestines8
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines8.dmi'
/datum/belly_overlays/vbo_intestines9
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines9.dmi'
/datum/belly_overlays/vbo_intestines9_fluidless
belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines9_fluidless.dmi'
/datum/belly_overlays/vbo_maw1
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw1.dmi'
/datum/belly_overlays/vbo_maw2
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw2.dmi'
/datum/belly_overlays/vbo_maw3
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw3.dmi'
/datum/belly_overlays/vbo_maw4
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw4.dmi'
/datum/belly_overlays/vbo_maw5
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw5.dmi'
/datum/belly_overlays/vbo_maw6
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw6.dmi'
/datum/belly_overlays/vbo_maw7
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw7.dmi'
/datum/belly_overlays/vbo_maw8
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw8.dmi'
/datum/belly_overlays/vbo_maw9
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw9.dmi'
/datum/belly_overlays/vbo_maw10
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw10.dmi'
/datum/belly_overlays/vbo_maw11
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw11.dmi'
/datum/belly_overlays/vbo_maw12
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw12.dmi'
/datum/belly_overlays/vbo_maw13
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw13.dmi'
/datum/belly_overlays/vbo_maw14
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw14.dmi'
/datum/belly_overlays/vbo_maw15
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw15.dmi'
/datum/belly_overlays/vbo_maw16
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw16.dmi'
/datum/belly_overlays/vbo_maw17
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw17.dmi'
/datum/belly_overlays/vbo_maw18
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw18.dmi'
/datum/belly_overlays/vbo_maw19
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw19.dmi'
/datum/belly_overlays/vbo_maw20
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw20.dmi'
/datum/belly_overlays/vbo_maw21
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw21.dmi'
/datum/belly_overlays/vbo_maw22
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw22.dmi'
/datum/belly_overlays/vbo_maw23
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw23.dmi'
/datum/belly_overlays/vbo_maw24
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw24.dmi'
/datum/belly_overlays/vbo_maw25
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw25.dmi'
/datum/belly_overlays/vbo_maw26
belly_icon = 'icons/mob/vore_fullscreens/VBO_maw26.dmi'
/datum/belly_overlays/vbo_notbelly
belly_icon = 'icons/mob/vore_fullscreens/VBO_notbelly.dmi'
/datum/belly_overlays/vbo_paw
belly_icon = 'icons/mob/vore_fullscreens/VBO_paw.dmi'
/datum/belly_overlays/vbo_synth1
belly_icon = 'icons/mob/vore_fullscreens/VBO_synth1.dmi'
/datum/belly_overlays/vbo_synth2
belly_icon = 'icons/mob/vore_fullscreens/VBO_synth2.dmi'
/datum/belly_overlays/vbo_trash
belly_icon = 'icons/mob/vore_fullscreens/VBO_trash.dmi'
/datum/belly_overlays/vbo_vines
belly_icon = 'icons/mob/vore_fullscreens/VBO_vines.dmi'
/datum/belly_overlays/vbo_wriggly
belly_icon = 'icons/mob/vore_fullscreens/VBO_wriggly.dmi'
/datum/belly_overlays/vboanim_belly1
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly1.dmi'
/datum/belly_overlays/vboanim_belly2
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly2.dmi'
/datum/belly_overlays/vboanim_belly3
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly3.dmi'
/datum/belly_overlays/vboanim_belly4
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly4.dmi'
/datum/belly_overlays/vboanim_belly5
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly5.dmi'
/datum/belly_overlays/vboanim_belly6
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly6.dmi'
/datum/belly_overlays/vboanim_belly7
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly7.dmi'
/datum/belly_overlays/vboanim_belly8
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly8.dmi'
/datum/belly_overlays/vboanim_belly9
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly9.dmi'
/datum/belly_overlays/vboanim_belly10
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly10.dmi'
/datum/belly_overlays/vboanim_gullet1
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_gullet1.dmi'
/datum/belly_overlays/vboanim_intestine1
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_intestine1.dmi'
/datum/belly_overlays/vboanim_intestine2
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_intestine2.dmi'
/datum/belly_overlays/vboanim_snakebelly1
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_snakebelly1.dmi'
/datum/belly_overlays/vboanim_synthbelly1
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_synthbelly1.dmi'
/datum/belly_overlays/vboanim_taurbelly1
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_taurbelly1.dmi'
/datum/belly_overlays/a_tumby
belly_icon = 'icons/mob/vore_fullscreens/a_tumby.dmi'
/datum/belly_overlays/another_tumby
belly_icon = 'icons/mob/vore_fullscreens/another_tumby.dmi'
/datum/belly_overlays/base
belly_icon = 'icons/mob/vore_fullscreens/base.dmi'
/datum/belly_overlays/brown_internals
belly_icon = 'icons/mob/vore_fullscreens/brown_internals.dmi'
/datum/belly_overlays/brown_internals_hole
belly_icon = 'icons/mob/vore_fullscreens/brown_internals_hole.dmi'
/datum/belly_overlays/da_tumby
belly_icon = 'icons/mob/vore_fullscreens/da_tumby.dmi'
/datum/belly_overlays/dark
belly_icon = 'icons/mob/vore_fullscreens/dark.dmi'
/datum/belly_overlays/synth_flesh_mono
belly_icon = 'icons/mob/vore_fullscreens/synth_flesh_mono.dmi'
/datum/belly_overlays/synth_flesh_mono_hole
belly_icon = 'icons/mob/vore_fullscreens/synth_flesh_mono_hole.dmi'
/datum/belly_overlays/yet_another_tumby
belly_icon = 'icons/mob/vore_fullscreens/yet_another_tumby.dmi'
//Compatibility assets due to renames...
/datum/belly_overlays/anim_belly
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly1.dmi'
/datum/belly_overlays/a_anim_belly
belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly1.dmi'
@@ -2,14 +2,14 @@
name = "vore"
/datum/asset/spritesheet/vore/create_spritesheets()
var/icon/downscaled = icon('modular_chomp/icons/mob/screen_full_vore_ch.dmi') //CHOMPedit: preserving save data
var/icon/downscaled = icon('icons/mob/screen_full_vore_list.dmi') // preserving save data
downscaled.Scale(240, 240)
InsertAll("", downscaled)
/datum/asset/spritesheet/vore_fixed //This should be getting loaded in the TGUI vore panel but the game refuses to do so, for some reason. It only loads the vore spritesheet. //CHOMPedit
name = "fixedvore" //CHOMPedit
/datum/asset/spritesheet/vore_fixed //This should be getting loaded in the TGUI vore panel but the game refuses to do so, for some reason. It only loads the vore spritesheet.
name = "fixedvore"
/datum/asset/spritesheet/vore_fixed/create_spritesheets() //CHOMPedi start: preserving save data
/datum/asset/spritesheet/vore_fixed/create_spritesheets() // preserving save data
var/icon/downscaledVF = icon('icons/mob/screen_full_vore.dmi')
downscaledVF.Scale(240, 240)
InsertAll("", downscaledVF) //CHOMpedit end
InsertAll("", downscaledVF)
+11 -2
View File
@@ -18,7 +18,7 @@ var/list/spawntypes = list()
var/list/restrict_job = null
var/list/disallow_job = null
var/announce_channel = "Common"
var/allow_offmap_spawn = FALSE //CHOMPEdit - add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint
var/allow_offmap_spawn = FALSE // add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint
var/allowed_mob_types = JOB_SILICON|JOB_CARBON
/datum/spawnpoint/proc/check_job_spawning(job)
@@ -32,7 +32,7 @@ var/list/spawntypes = list()
if(!J) // Couldn't find, admin shenanigans? Allow it
return 1
if(J.offmap_spawn && !allow_offmap_spawn && !(job in restrict_job)) //CHOMPEdit - add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint
if(J.offmap_spawn && !allow_offmap_spawn && !(job in restrict_job)) // add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint
return 0
if(!(J.mob_type & allowed_mob_types))
@@ -114,3 +114,12 @@ var/global/list/latejoin_tram = list()
/datum/spawnpoint/tram/New()
..()
turfs = latejoin_tram
/datum/spawnpoint/vore
display_name = "Vorespawn - Prey"
msg = "has arrived on the station"
allow_offmap_spawn = TRUE
/datum/spawnpoint/vore/pred
display_name = "Vorespawn - Pred"
msg = "has arrived on the station"
+5
View File
@@ -138,6 +138,11 @@
if(istype(M, /mob/living/carbon))
//TODO: replace with standard_feed_mob() call.
if(!M.consume_liquid_belly)
if(liquid_belly_check())
to_chat(user, span_infoplain("[user == M ? "You can't" : "\The [M] can't"] consume that, it contains something produced from a belly!"))
return FALSE
var/swallow_whole = FALSE
var/obj/belly/belly_target // These are surprise tools that will help us later
+1 -1
View File
@@ -190,7 +190,7 @@
//This could all be done better, but it works for now.
/obj/machinery/computer/HolodeckControl/Destroy()
emergencyShutdown()
..()
. = ..()
/obj/machinery/computer/HolodeckControl/ex_act(severity)
emergencyShutdown()
+1 -1
View File
@@ -89,4 +89,4 @@
for(var/obj/effect/plant/plant in get_turf(src))
if(plant.invisibility == INVISIBILITY_MAXIMUM)
plant.invisibility = initial(plant.invisibility)
..()
. = ..()
+1 -1
View File
@@ -155,7 +155,7 @@
//This could all be done better, but it works for now.
/obj/machinery/computer/looking_glass/Destroy()
unload_program()
..()
. = ..()
/obj/machinery/computer/looking_glass/ex_act(severity)
unload_program()
+1 -1
View File
@@ -6,7 +6,7 @@
plane_holder.set_vis(VIS_CLOAKED, TRUE)
plane_holder.set_vis(VIS_AI_EYE, TRUE)
plane_holder.set_vis(VIS_AUGMENTED, TRUE) //VOREStation Add - GHOST VISION IS AUGMENTED
plane_holder.set_vis(VIS_SOULCATCHER, TRUE) //CHOMPAdd Soulcatcher
plane_holder.set_vis(VIS_SOULCATCHER, TRUE) // Soulcatcher
plane = PLANE_GHOSTS
if(cleanup_timer)
deltimer(cleanup_timer)
@@ -3,6 +3,7 @@
desc = "This shouldn't appear"
density = FALSE
vis_flags = NONE
var/mob/living/body_backup = null //add reforming
/mob/observer/dead
name = "ghost"
@@ -584,6 +585,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/list/following_mobs = list()
/mob/observer/dead/Destroy()
if(body_backup)
body_backup.moveToNullspace() //YEET
qdel(body_backup)
body_backup = null
visualnet.addVisibility(src, src.client)
visualnet = null
if(ismob(following))
@@ -18,6 +18,7 @@
var/obj/item/organ/internal/brain/brainobj = null //The current brain organ.
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
var/obj/item/radio/headset/mmi_radio/radio = null//Let's give it a radio.
var/mob/living/body_backup = null //add reforming
/obj/item/mmi/New()
radio = new(src)//Spawns a radio inside the MMI.
@@ -146,6 +147,8 @@
rig.forced_move(direction, user)
/obj/item/mmi/Destroy()
if(body_backup)
qdel(body_backup)
if(isrobot(loc))
var/mob/living/silicon/robot/borg = loc
borg.mmi = null
@@ -204,10 +204,8 @@
if(stomach_vision)
compiled_vis += VIS_CH_STOMACH
//CHOMPAdd Start Soulcatcher
if(soulgem?.flag_check(SOULGEM_SEE_SR_SOULS))
compiled_vis += VIS_SOULCATCHER
//CHOMPAdd End
if(!compiled_vis.len && !vis_enabled.len)
return //Nothin' doin'.
+1 -7
View File
@@ -1252,14 +1252,12 @@
var/sound/growlsound = sound(get_sfx("hunger_sounds"))
var/growlmultiplier = 100 - (nutrition / 250 * 100)
playsound(src, growlsound, vol = growlmultiplier, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/preference/toggle/digestion_noises)
// CHOMPEnable Start
if(nutrition > 500 && noisy_full == TRUE)
var/belch_prob = 5 //Maximum belch prob.
if(nutrition < 4075)
belch_prob = ((nutrition-500)/3575)*5 //Scale belch prob with fullness if not already at max. If editing make sure the multiplier matches the max prob above.
if(prob(belch_prob))
src.emote("belch")
// CHOMPEnable End
if((CE_DARKSIGHT in chem_effects) && chemical_darksight == 0)
recalculate_vis()
chemical_darksight = 1
@@ -1681,12 +1679,8 @@
else
clear_alert("high")
//CHOMPEdit - surrounding_belly() used instead of isbelly(loc) to not clear indirect vorefx
if(!surrounding_belly() && !previewing_belly) //VOREStation Add - Belly fullscreens safety //CHOMPEdit
if(!surrounding_belly() && !previewing_belly) //VOREStation Add - Belly fullscreens safety
clear_fullscreen("belly")
//clear_fullscreen("belly2") //Chomp disable, using our own implementation
//clear_fullscreen("belly3") //Chomp disable, using our own implementation
//clear_fullscreen("belly4") //Chomp disable, using our own implementation
if(CONFIG_GET(flag/welder_vision))
var/found_welder
@@ -510,7 +510,7 @@
B.forceMove(src)
B.owner = src
soulgem.owner = src //CHOMPAdd
soulgem.owner = src
//vore_organs.Cut()
@@ -507,7 +507,7 @@
B.owner = blob
vore_organs.Cut()
soulgem.owner = blob // CHOMPAdd
soulgem.owner = blob
//We can still speak our languages!
blob.languages = languages.Copy()
@@ -619,7 +619,7 @@
B.owner = src
languages = blob.languages.Copy()
soulgem.owner = src // CHOMPAdd
soulgem.owner = src
Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right.
+11 -11
View File
@@ -20,23 +20,23 @@
add_verb(src, /mob/living/proc/smell)
add_verb(src, /mob/living/proc/switch_scaling)
add_verb(src, /mob/living/proc/center_offset)
add_verb(src, /mob/living/proc/mute_entry) //CHOMPEdit
add_verb(src, /mob/living/proc/liquidbelly_visuals) //CHOMPEdit
add_verb(src, /mob/living/proc/fix_vore_effects) //CHOMPedit
add_verb(src, /mob/living/proc/mute_entry)
add_verb(src, /mob/living/proc/liquidbelly_visuals)
add_verb(src, /mob/living/proc/fix_vore_effects)
if(!no_vore)
add_verb(src, /mob/living/proc/vorebelly_printout)
if(!vorePanel)
AddComponent(/datum/component/vore_panel)
add_verb(src,/mob/living/proc/vore_transfer_reagents) //CHOMPEdit TGPanel //CHOMP If mob doesnt have bellies it cant use this verb for anything
add_verb(src,/mob/living/proc/vore_check_reagents) //CHOMPEdit TGPanel //CHOMP If mob doesnt have bellies it cant use this verb for anything
add_verb(src,/mob/living/proc/vore_bellyrub) //CHOMPEdit TGPanel //CHOMP If mob doesnt have bellies it probably won't be needing this anyway
add_verb(src,/mob/proc/nsay_vore) //CHOMPAdd
add_verb(src,/mob/proc/nme_vore) //CHOMPAdd
add_verb(src,/mob/proc/nsay_vore_ch) //CHOMPAdd
add_verb(src,/mob/proc/nme_vore_ch) //CHOMPAdd
add_verb(src,/mob/proc/enter_soulcatcher) //CHOMPAdd
add_verb(src,/mob/living/proc/vore_transfer_reagents) // If mob doesnt have bellies it cant use this verb for anything
add_verb(src,/mob/living/proc/vore_check_reagents) // If mob doesnt have bellies it cant use this verb for anything
add_verb(src,/mob/living/proc/vore_bellyrub) // If mob doesnt have bellies it probably won't be needing this anyway
add_verb(src,/mob/proc/nsay_vore)
add_verb(src,/mob/proc/nme_vore)
add_verb(src,/mob/proc/nsay_vore_ch)
add_verb(src,/mob/proc/nme_vore_ch)
add_verb(src,/mob/proc/enter_soulcatcher)
//VOREStation Add Start
if(!voice_sounds_list.len || !voice_sounds_list)
+1 -1
View File
@@ -615,7 +615,7 @@ var/list/ai_verbs_default = list(
switch(choice)
if("Color")
input = tgui_color_picker("Choose a color:", "Hologram Color", holo_color)
input = tgui_color_picker(src, "Choose a color:", "Hologram Color", holo_color)
if(input)
holo_color = input
@@ -602,7 +602,7 @@
var/actual_brute = T.getBruteLoss() - old_brute
var/actual_burn = T.getFireLoss() - old_burn
var/damage_gain = actual_brute + actual_burn
hound.nutrition += 2.5 * damage_gain //drain(-25 * damage_gain) //25*total loss as with voreorgan stats.//CHOMPEdit
hound.adjust_nutrition(2.5 * damage_gain) //drain(-25 * damage_gain) //25*total loss as with voreorgan stats.
//CHOMPAdd Start
if(water)
water.add_charge(damage_gain)
@@ -669,8 +669,8 @@
//CHOMPAdd Start
if(T.reagents)
volume = T.reagents.total_volume
var/is_trash = istype(T, /obj/item/trash)
//CHOMPAdd End
var/is_trash = istype(T, /obj/item/trash)
var/digested = T.digest_act(item_storage = src)
if(!digested)
items_preserved |= T
@@ -699,15 +699,13 @@
plastic.add_charge(total_material)
if(material == MAT_WOOD && wood)
wood.add_charge(total_material)
//CHOMPEdit Start
if(is_trash)
hound.nutrition += digested
hound.adjust_nutrition(digested)
else
hound.nutrition += 5 * digested //drain(-50 * digested)
//CHOMPEdit End
hound.adjust_nutrition(5 * digested) //drain(-50 * digested)
else if(istype(target,/obj/effect/decal/remains))
qdel(target)
hound.nutrition += 10 //drain(-100) //CHOMPEdit
hound.adjust_nutrition(10) //drain(-100)
else
items_preserved |= target
update_patient()
+13 -4
View File
@@ -8,7 +8,7 @@
icon_state = "robot"
maxHealth = 200
health = 200
nutrition = 0 //CHOMPEdit
nutrition = 0
mob_bump_flag = ROBOT
mob_swap_flags = ~HEAVY
@@ -1467,14 +1467,12 @@
undeploy()
..()
//CHOMPAdd Start
/mob/living/silicon/robot/use_power()
if(cell && cell.charge < cell.maxcharge)
if(nutrition >= 1 * CYBORG_POWER_USAGE_MULTIPLIER)
nutrition -= 1 * CYBORG_POWER_USAGE_MULTIPLIER
adjust_nutrition(-(1 * CYBORG_POWER_USAGE_MULTIPLIER))
cell.charge += 10 * CYBORG_POWER_USAGE_MULTIPLIER
..()
//CHOMPAdd End
// Those basic ones require quite detailled checks on the robot's vars to see if they are installed!
/mob/living/silicon/robot/proc/has_basic_upgrade(var/given_type)
@@ -1585,3 +1583,14 @@
if(issilicon(user))
return TRUE
return FALSE
/mob/living/silicon/robot/verb/purge_nutrition()
set name = "Purge Nutrition"
set category = "Abilities.Vore"
set desc = "Allows you to clear out most of your nutrition if needed."
if (stat != CONSCIOUS || nutrition <= 1000)
return
nutrition = 1000
to_chat(src, span_warning("You have purged most of the nutrition lingering in your systems."))
return TRUE
@@ -28,7 +28,6 @@
playsound(src, 'sound/mecha/nominalsyndi.ogg', 75, 0)
//CHOMPAdd Start
/mob/living/silicon/robot/gravekeeper/proc/scramble_hardware(var/chance)
if(prob(chance)) //Small chance to spawn with a scrambled
emag_items = 1
@@ -39,4 +38,3 @@
if (churn_count == 5)
module.emag += new /obj/item/self_repair_system/advanced(module)
hud_used.update_robot_modules_display()
//CHOMPAdd End
@@ -335,11 +335,9 @@
return
//CHOMPAdd Start
/mob/living/silicon/robot/lost/handle_special_unlocks()
if(!emag_items)
scramble_hardware(20)
if (churn_count == 5)
module.emag += new /obj/item/self_repair_system/advanced(module)
hud_used.update_robot_modules_display()
//CHOMPAdd End
@@ -110,6 +110,8 @@
/mob/living/simple_mob/animal/synx/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
.=..()
var/obj/belly/B = vore_selected
//B.human_prey_swallow_time = 6 SECONDS //doesnt work
@@ -142,6 +144,8 @@
/mob/living/simple_mob/animal/synx/ai/pet/asteri/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
.=..()
var/obj/belly/B = vore_selected
B.desc = "The synx eagerly swallows you, taking you from its gullet into its long, serpentine stomach. The internals around you greedily press into your from all sides, keeping you coated in a slick coat of numbing fluids..."
@@ -559,6 +563,8 @@
/mob/living/simple_mob/animal/synx/ai/pet/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
.=..()
var/obj/belly/B = vore_selected
B.vore_verb = "swallow"
@@ -568,6 +574,8 @@
/mob/living/simple_mob/animal/synx/ai/pet/holo/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
.=..()
var/obj/belly/B = vore_selected
B.vore_verb = "swallow"
@@ -184,6 +184,8 @@
//vars for vore_icons toggle control
var/vore_icons_cache = null // null by default. Going from ON to OFF should store vore_icons val here, OFF to ON reset as null
//no stripping of simplemobs
strip_pref = FALSE
/mob/living/simple_mob/Initialize(mapload)
remove_verb(src, /mob/verb/observe)
@@ -215,25 +215,17 @@
AddElement(/datum/element/slosh) // Sloshy element
//CHOMPAdd Start
if(!soulgem)
soulgem = new(src)
//CHOMPAdd End
/* CHOMPRemove Start, handled with the vore_active var
if(!IsAdvancedToolUser())
add_verb(src, /mob/living/simple_mob/proc/animal_nom)
add_verb(src, /mob/living/proc/shred_limb)
*/// CHOMPRemove End
if(LAZYLEN(vore_organs))
return
// Since they have bellies, add verbs to toggle settings on them.
add_verb(src, /mob/living/simple_mob/proc/toggle_digestion)
add_verb(src, /mob/living/simple_mob/proc/toggle_fancygurgle)
add_verb(src, /mob/living/proc/vertical_nom)
if(LAZYLEN(vore_organs))
return
//A much more detailed version of the default /living implementation
var/obj/belly/B = new /obj/belly(src)
vore_selected = B
@@ -68,7 +68,7 @@
/obj/item/holder,
/obj/machinery/camera,
/obj/belly,
/obj/soulgem, // CHOMPAdd
/obj/soulgem,
/obj/screen,
/atom/movable/emissive_blocker,
/obj/item/material,
@@ -118,6 +118,8 @@
/mob/living/simple_mob/vore/alienanimals/catslug/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -99,6 +99,8 @@ GLOBAL_VAR_INIT(jellyfish_count, 0)
/mob/living/simple_mob/vore/alienanimals/space_jellyfish/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "internal chamber"
@@ -90,6 +90,8 @@
/mob/living/simple_mob/vore/alienanimals/skeleton/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -67,6 +67,8 @@
/mob/living/simple_mob/vore/alienanimals/dustjumper/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -55,6 +55,8 @@
/mob/living/simple_mob/vore/overmap/spacewhale/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -96,6 +96,8 @@
/mob/living/simple_mob/vore/alienanimals/startreader/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "gastric sac"
@@ -75,6 +75,8 @@
/mob/living/simple_mob/vore/alienanimals/succlet/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stummy"
@@ -171,6 +171,8 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
/mob/living/simple_mob/vore/alienanimals/teppi/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -1,6 +1,8 @@
/mob/living/simple_mob/animal/passive/cat/runtime/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
@@ -53,6 +53,8 @@
/mob/living/simple_mob/animal/passive/fox/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
@@ -201,6 +203,8 @@
/mob/living/simple_mob/animal/passive/fox/renault/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
@@ -233,6 +233,8 @@
/mob/living/simple_mob/animal/space/carp/large/huge/vorny/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -90,6 +90,8 @@ TODO: Make them light up and heat the air when exposed to oxygen.
/mob/living/simple_mob/animal/passive/gaslamp/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "internal chamber"
@@ -77,6 +77,8 @@
/mob/living/simple_mob/animal/passive/snake/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -72,6 +72,8 @@
/mob/living/simple_mob/vore/squirrel/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -46,12 +46,14 @@
/mob/living/simple_mob/vore/turkeygirl/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The hot churning stomach of a turkey girl! The doughy flesh presses inward to form to your figure, thick slime coating everything, and very shortly that includes you as well! There isn't any escaping that constant full body motion, as her body works to ball yours up into a tight little package. Gurgling and glubbing with every shifting movement, while her pulse throbs through the flesh all around you with every beat of her heart. All in all, one thing is for certain! You've become turkey stuffing! Oh no..."
B.mode_flags = DM_FLAG_THICKBELLY | DM_FLAG_NUMBING
B.belly_fullscreen = "anibelly"
B.belly_fullscreen = "anim_belly"
B.digest_brute = 1
B.digest_burn = 6
B.digestchance = 0
@@ -57,6 +57,8 @@
/mob/living/simple_mob/vore/blaidd/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -79,6 +79,8 @@
/mob/living/simple_mob/vore/ddraig/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -44,6 +44,8 @@
/mob/living/simple_mob/vore/fluffball/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "tail"
@@ -38,6 +38,8 @@
/mob/living/simple_mob/vore/horse/unicorn/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -80,9 +80,7 @@ var/list/_slime_default_emotes = list(
var/injection_amount = 5 // This determines how much.
var/mood = ":3" // Icon to use to display 'mood', as an overlay.
can_enter_vent_with = list(/obj/item/clothing/head,
/obj/soulgem // CHOMPAdd
)
can_enter_vent_with = list(/obj/item/clothing/head, /obj/soulgem)
can_be_drop_prey = FALSE //CHOMP Add
@@ -45,6 +45,8 @@
/mob/living/simple_mob/vore/bat/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -506,7 +506,9 @@ I think I covered everything.
/// My thanks to Raeschen for these descriptions
/mob/living/simple_mob/vore/bigdragon/init_vore()
if(!voremob_loaded || LAZYLEN(vore_organs))
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
var/obj/belly/B = new /obj/belly/dragon/maw(src)
B.affects_vore_sprites = FALSE
@@ -539,6 +539,8 @@ I think I covered everything.
//Ow my sanity
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
var/obj/belly/B = new /obj/belly/dragon/maw(src)
B.affects_vore_sprites = FALSE
B.emote_lists[DM_HOLD] = list(
@@ -129,6 +129,8 @@
/mob/living/simple_mob/vore/aggressive/corrupthound/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "fuel processor"
@@ -153,6 +155,8 @@
/mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "fuel processor"
@@ -71,6 +71,8 @@
/mob/living/simple_mob/vore/cryptdrake/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -86,6 +86,8 @@
/mob/living/simple_mob/vore/aggressive/deathclaw/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -52,6 +52,8 @@
/mob/living/simple_mob/vore/demon/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
@@ -68,6 +68,8 @@
/mob/living/simple_mob/vore/demonAI/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
.=..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
@@ -65,6 +65,8 @@
/mob/living/simple_mob/vore/demon/init_vore()
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
.=..()
var/obj/belly/B = vore_selected
B.name = "Stomach"

Some files were not shown because too many files have changed in this diff Show More