From dd09f0b7859d4245d37aa64fa0f2820112fe90c7 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Mon, 19 Jul 2021 02:57:23 -0300 Subject: [PATCH] Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 --- _maps/map_files/BoxStation/BoxStation.dmm | 128 +- code/__DEFINES/citadel_defines.dm | 1 + code/__DEFINES/construction.dm | 1 - code/__DEFINES/inventory.dm | 12 + code/__DEFINES/traits.dm | 1 + code/__DEFINES/voreconstants.dm | 25 +- code/__HELPERS/_lists.dm | 2 + code/_globalvars/lists/maintenance_loot.dm | 1 + code/datums/components/crafting/craft.dm | 491 ------ code/datums/components/crafting/crafting.dm | 6 +- .../crafting/recipes/recipes_misc.dm | 116 +- code/datums/elements/trash.dm | 19 + code/datums/traits/neutral.dm | 8 + code/game/objects/items/cigs_lighters.dm | 4 + .../objects/items/stacks/sheets/leather.dm | 1 + .../items/stacks/sheets/sheet_types.dm | 1 + code/game/objects/items/trash.dm | 7 +- code/game/objects/structures/mirror.dm | 34 +- code/game/turfs/change_turf.dm | 2 +- code/modules/client/preferences.dm | 5 + code/modules/client/preferences_savefile.dm | 3 + code/modules/clothing/head/misc.dm | 6 + code/modules/events/cat_surgeon.dm | 2 +- code/modules/hydroponics/fermenting_barrel.dm | 37 + .../new_player/sprite_accessories/tails.dm | 2 +- .../mob/living/carbon/human/human_defines.dm | 2 + code/modules/mob/living/carbon/human/login.dm | 30 + code/modules/mob/living/living.dm | 13 + .../living/simple_animal/hostile/hostile.dm | 4 +- code/modules/tgui/states/vorepanel.dm | 18 + code/modules/tgui/tgui_alert.dm | 27 +- code/modules/vore/eating/bellymodes.dm | 2 +- code/modules/vore/eating/living.dm | 73 +- code/modules/vore/eating/vorepanel.dm | 1380 ++++++++--------- html/changelog.html | 38 + html/changelogs/.all_changelog.yml | 33 + icons/mob/clothing/head.dmi | Bin 233232 -> 233611 bytes icons/obj/clothing/hats.dmi | Bin 112982 -> 113301 bytes icons/obj/objects.dmi | Bin 108877 -> 107583 bytes .../crafting/recipes/recipes_misc.dm | 26 +- .../modules/crafting/recipes/recipes_misc.dm | 6 +- tgstation.dme | 2 + tgui/packages/tgui/interfaces/VorePanel.js | 591 +++++++ 43 files changed, 1783 insertions(+), 1377 deletions(-) delete mode 100644 code/datums/components/crafting/craft.dm create mode 100644 code/datums/elements/trash.dm create mode 100644 code/modules/tgui/states/vorepanel.dm create mode 100644 tgui/packages/tgui/interfaces/VorePanel.js diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 25d64ac7b2..78fb75524f 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -49262,7 +49262,6 @@ name = "MiniSat External Access"; req_access_txt = "65;13" }, -/obj/structure/fans/tiny, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "ctb" = ( @@ -54064,6 +54063,16 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"eXJ" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 1" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/hallway/secondary/entry) "eXL" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 10 @@ -54848,18 +54857,6 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) -"gJA" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "QMLoad" - }, -/obj/machinery/door/poddoor{ - id = "QMLoaddoor"; - name = "supply dock loading door" - }, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/cargo/storage) "gJN" = ( /obj/structure/rack, /obj/item/book/manual/wiki/engineering_singulo_tesla, @@ -55933,16 +55930,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"jqd" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/door/airlock/external{ - name = "Port Docking Bay 1" - }, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/hallway/secondary/entry) "jqv" = ( /obj/structure/chair/wood/normal{ dir = 1 @@ -58150,18 +58137,6 @@ }, /turf/open/floor/plasteel, /area/commons/fitness/pool) -"ojC" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "QMLoad2" - }, -/obj/machinery/door/poddoor{ - id = "QMLoaddoor2"; - name = "supply dock loading door" - }, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/cargo/storage) "okK" = ( /obj/machinery/light/small{ dir = 8 @@ -58471,6 +58446,18 @@ }, /turf/open/floor/plating, /area/service/abandoned_gambling_den) +"oLn" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "supply dock loading door" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/cargo/storage) "oMT" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -58909,6 +58896,11 @@ dir = 4 }, /area/service/theater/clown) +"pIt" = ( +/obj/effect/turf_decal/bot, +/mob/living/simple_animal/pet/dog/cheems, +/turf/open/floor/plasteel, +/area/cargo/storage) "pJR" = ( /obj/structure/disposalpipe/segment, /obj/structure/chair/comfy/brown{ @@ -58933,14 +58925,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/port) -"pOo" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "Port Docking Bay 1" - }, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/hallway/secondary/entry) "pPi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -59587,10 +59571,6 @@ }, /turf/open/floor/plasteel, /area/engineering/gravity_generator) -"rty" = ( -/mob/living/simple_animal/pet/dog/cheems, -/turf/open/floor/plasteel, -/area/cargo/storage) "rtC" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, @@ -59653,14 +59633,6 @@ }, /turf/open/floor/plasteel, /area/commons/fitness) -"ryN" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/maintenance/aft) "rAR" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -60801,6 +60773,18 @@ /obj/machinery/atmospherics/pipe/manifold/purple/visible, /turf/open/floor/plasteel, /area/engineering/atmos) +"ueh" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "supply dock loading door" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/cargo/storage) "uei" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 @@ -62017,6 +62001,14 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"wsp" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Port Docking Bay 1" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/hallway/secondary/entry) "wuO" = ( /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; @@ -62482,6 +62474,14 @@ /obj/structure/closet/secure_closet/personal, /turf/open/floor/plasteel, /area/commons/locker) +"xEc" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/maintenance/aft) "xEB" = ( /obj/effect/turf_decal/bot_white/right, /obj/effect/turf_decal/tile/neutral{ @@ -72458,7 +72458,7 @@ awZ ayl azy auP -jqd +eXJ aaa aaa aaa @@ -72466,7 +72466,7 @@ aaa aaa aaa aaa -pOo +wsp auP cIh ayl @@ -74257,7 +74257,7 @@ axh aIK azy auP -jqd +eXJ aaa aaa aaa @@ -74265,7 +74265,7 @@ aaa aaa aaa aaa -pOo +wsp auP cIh ayl @@ -80455,11 +80455,11 @@ aPz aaa aaa boI -ojC +oLn brJ boI brJ -gJA +ueh boI aaa aaa @@ -83024,7 +83024,7 @@ bjo bjr bjr bmh -boK +pIt bjr boK bjr @@ -83282,7 +83282,7 @@ bjr ama bmh bjr -rty +bjr bjr bjr bjr @@ -104656,7 +104656,7 @@ czY cNW bAw bAw -ryN +xEc aag gJi aaa diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index 541b50e9bd..04eeb515c9 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -101,6 +101,7 @@ #define NO_AUTO_WAG (1<<12) #define GENITAL_EXAMINE (1<<13) #define VORE_EXAMINE (1<<14) +#define TRASH_FORCEFEED (1<<15) #define TOGGLES_CITADEL 0 //belly sound pref things diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index d3caedac22..f4b0fe1593 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -81,7 +81,6 @@ #define CAT_AMMO "Ammunition" #define CAT_PARTS "Weapon Parts" #define CAT_ROBOT "Robots" -#define CAT_MISC "Misc" #define CAT_MISCELLANEOUS "Miscellaneous" #define CAT_TOOL "Tools & Storage" #define CAT_FURNITURE "Furniture" diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 3f8a85d8c0..1431ad2109 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -192,6 +192,18 @@ #define TINT_DARKENED 2 //Threshold of tint level to apply weld mask overlay #define TINT_BLIND 3 //Threshold of tint level to obscure vision fully +// defines for AFK theft +/// How many messages you can remember while logged out before you stop remembering new ones +#define AFK_THEFT_MAX_MESSAGES 10 +/// If someone logs back in and there are entries older than this, just tell them they can't remember who it was or when +#define AFK_THEFT_FORGET_DETAILS_TIME 5 MINUTES +/// The index of the entry in 'afk_thefts' with the person's visible name at the time +#define AFK_THEFT_NAME 1 +/// The index of the entry in 'afk_thefts' with the text +#define AFK_THEFT_MESSAGE 2 +/// The index of the entry in 'afk_thefts' with the time it happened +#define AFK_THEFT_TIME 3 + //Allowed equipment lists for security vests and hardsuits. GLOBAL_LIST_INIT(advanced_hardsuit_allowed, typecacheof(list( diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 3082856ccf..eb9bdccc22 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -221,6 +221,7 @@ #define TRAIT_LIVING_NO_DENSITY "living_no_density" /// forces us to not render our overlays #define TRAIT_HUMAN_NO_RENDER "human_no_render" +#define TRAIT_TRASHCAN "trashcan" // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) diff --git a/code/__DEFINES/voreconstants.dm b/code/__DEFINES/voreconstants.dm index d2eb034813..372c5b776c 100644 --- a/code/__DEFINES/voreconstants.dm +++ b/code/__DEFINES/voreconstants.dm @@ -8,17 +8,22 @@ #define DM_UNABSORB "Un-absorb" #define DIGESTABLE (1<<0) -#define SHOW_VORE_PREFS (1<<1) -#define DEVOURABLE (1<<2) -#define FEEDING (1<<3) -#define NO_VORE (1<<4) -#define OPEN_PANEL (1<<5) -#define ABSORBED (1<<6) -#define VORE_INIT (1<<7) -#define VOREPREF_INIT (1<<8) -#define LICKABLE (1<<9) +#define DEVOURABLE (1<<1) +#define FEEDING (1<<2) +#define NO_VORE (1<<3) +#define ABSORBED (1<<4) +#define VORE_INIT (1<<5) +#define VOREPREF_INIT (1<<6) +#define LICKABLE (1<<7) +/// Can be smelled? +#define SMELLABLE (1<<8) +/// Can get absorbed? +#define ABSORBABLE (1<<9) +/// Can get simplemob vored? +#define MOBVORE (1<<10) -#define MAX_VORE_FLAG (1<<10)-1 // change this whenever you add a vore flag, must be largest vore flag*2-1 +/// Change this whenever you add a vore flag, must be largest vore flag*2-1 +#define MAX_VORE_FLAG (1<<11)-1 #define isbelly(A) istype(A, /obj/belly) diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 7e2abebcf9..2d0601d839 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -19,6 +19,8 @@ #define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= length(L) ? L[I] : null) : L[I]) : null) #define LAZYSET(L, K, V) if(!L) { L = list(); } L[K] = V; #define LAZYLEN(L) length(L) +//Sets a list to null +#define LAZYNULL(L) L = null #define LAZYCLEARLIST(L) if(L) L.Cut() #define SANITIZE_LIST(L) ( islist(L) ? L : list() ) #define reverseList(L) reverseRange(L.Copy()) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index b41b7356a8..daa4f5879d 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -112,6 +112,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/storage/box/marshmallow = 2, /obj/item/clothing/gloves/tackler/offbrand = 1, /obj/item/stack/sticky_tape = 1, + /obj/effect/spawner/lootdrop/grille_or_trash = 15, "" = 3 )) diff --git a/code/datums/components/crafting/craft.dm b/code/datums/components/crafting/craft.dm deleted file mode 100644 index 3283c514b8..0000000000 --- a/code/datums/components/crafting/craft.dm +++ /dev/null @@ -1,491 +0,0 @@ -/datum/component/personal_crafting/Initialize() - if(!ismob(parent)) - return COMPONENT_INCOMPATIBLE - RegisterSignal(parent, COMSIG_MOB_CLIENT_LOGIN, .proc/create_mob_button) - -/datum/component/personal_crafting/proc/create_mob_button(mob/user, client/CL) - var/datum/hud/H = user.hud_used - var/obj/screen/craft/C = new() - C.icon = H.ui_style - H.static_inventory += C - if(!CL.prefs.widescreenpref) - C.screen_loc = ui_boxcraft - CL.screen += C - RegisterSignal(C, COMSIG_CLICK, .proc/component_ui_interact) - -/datum/component/personal_crafting - var/busy - var/viewing_category = 1 - var/viewing_subcategory = 1 - var/list/categories = list( - CAT_WEAPONRY = list( - CAT_WEAPON, - CAT_AMMO, - ), - CAT_ROBOT = CAT_NONE, - CAT_MISC = list( - CAT_MISCELLANEOUS, - CAT_TOOL, - CAT_FURNITURE, - ), - CAT_PRIMAL = CAT_NONE, - CAT_FOOD = list( - CAT_BREAD, - CAT_BURGER, - CAT_CAKE, - CAT_DONUT, - CAT_EGG, - CAT_ICE, - CAT_MEAT, - CAT_MEXICAN, - CAT_MISCFOOD, - CAT_PASTRY, - CAT_PIE, - CAT_PIZZA, - CAT_SEAFOOD, - CAT_SALAD, - CAT_SANDWICH, - CAT_SOUP, - CAT_SPAGHETTI, - ), - CAT_DRINK = CAT_NONE, - CAT_CLOTHING = CAT_NONE, - ) - - var/cur_category = CAT_NONE - var/cur_subcategory = CAT_NONE - var/datum/action/innate/crafting/button - var/display_craftable_only = FALSE - var/display_compact = TRUE - - - - -/* This is what procs do: - get_environment - gets a list of things accessable for crafting by user - get_surroundings - takes a list of things and makes a list of key-types to values-amounts of said type in the list - check_contents - takes a recipe and a key-type list and checks if said recipe can be done with available stuff - check_tools - takes recipe, a key-type list, and a user and checks if there are enough tools to do the stuff, checks bugs one level deep - construct_item - takes a recipe and a user, call all the checking procs, calls do_after, checks all the things again, calls del_reqs, creates result, calls CheckParts of said result with argument being list returned by deel_reqs - del_reqs - takes recipe and a user, loops over the recipes reqs var and tries to find everything in the list make by get_environment and delete it/add to parts list, then returns the said list -*/ - - - -/** - * Check that the contents of the recipe meet the requirements. - * - * user: The /mob that initated the crafting. - * R: The /datum/crafting_recipe being attempted. - * contents: List of items to search for R's reqs. - */ -/datum/component/personal_crafting/proc/check_contents(mob/user, datum/crafting_recipe/R, list/contents) - var/list/item_instances = contents["instances"] - contents = contents["other"] - - var/list/requirements_list = list() - - // Process all requirements - for(var/requirement_path in R.reqs) - // Check we have the appropriate amount available in the contents list - var/needed_amount = R.reqs[requirement_path] - for(var/content_item_path in contents) - // Right path and not blacklisted - if(!ispath(content_item_path, requirement_path) || R.blacklist.Find(requirement_path)) - continue - - needed_amount -= contents[content_item_path] - if(needed_amount <= 0) - break - - if(needed_amount > 0) - return FALSE - - // Store the instances of what we will use for R.check_requirements() for requirement_path - var/list/instances_list = list() - for(var/instance_path in item_instances) - if(ispath(instance_path, requirement_path)) - instances_list += item_instances[instance_path] - - requirements_list[requirement_path] = instances_list - - for(var/requirement_path in R.chem_catalysts) - if(contents[requirement_path] < R.chem_catalysts[requirement_path]) - return FALSE - - return R.check_requirements(user, requirements_list) - -/datum/component/personal_crafting/proc/get_environment(mob/user) - . = list() - for(var/obj/item/I in user.held_items) - . += I - if(!isturf(user.loc)) - return - var/list/L = block(get_step(user, SOUTHWEST), get_step(user, NORTHEAST)) - for(var/A in L) - var/turf/T = A - if(T.Adjacent(user)) - for(var/B in T) - var/atom/movable/AM = B - if(AM.flags_1 & HOLOGRAM_1) - continue - . += AM - for(var/slot in list(SLOT_R_STORE, SLOT_L_STORE)) - . += user.get_item_by_slot(slot) - -/datum/component/personal_crafting/proc/get_surroundings(mob/user) - . = list() - .["tool_behaviour"] = list() - .["other"] = list() - .["instances"] = list() - for(var/obj/item/I in get_environment(user)) - if(I.flags_1 & HOLOGRAM_1) - continue - if(.["instances"][I.type]) - .["instances"][I.type] += I - else - .["instances"][I.type] = list(I) - if(istype(I, /obj/item/stack)) - var/obj/item/stack/S = I - .["other"][I.type] += S.amount - else if(I.tool_behaviour) - .["tool_behaviour"] += I.tool_behaviour - .["other"][I.type] += 1 - else - if(istype(I, /obj/item/reagent_containers)) - var/obj/item/reagent_containers/RC = I - if(RC.is_drainable()) - for(var/datum/reagent/A in RC.reagents.reagent_list) - .["other"][A.type] += A.volume - .["other"][I.type] += 1 - -/datum/component/personal_crafting/proc/check_tools(mob/user, datum/crafting_recipe/R, list/contents) - if(!R.tools.len) - return TRUE - var/list/possible_tools = list() - var/list/present_qualities = list() - present_qualities |= contents["tool_behaviour"] - for(var/obj/item/I in user.contents) - if(istype(I, /obj/item/storage)) - for(var/obj/item/SI in I.contents) - possible_tools += SI.type - if(SI.tool_behaviour) - present_qualities.Add(SI.tool_behaviour) - - possible_tools += I.type - - if(I.tool_behaviour) - present_qualities.Add(I.tool_behaviour) - - possible_tools |= contents["other"] - - main_loop: - for(var/A in R.tools) - if(A in present_qualities) - continue - else - for(var/I in possible_tools) - if(ispath(I, A)) - continue main_loop - return FALSE - return TRUE - -/datum/component/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R) - var/list/contents = get_surroundings(user) - var/send_feedback = TRUE - if(check_contents(user, R, contents)) - if(check_tools(user, R, contents)) - if(do_after(user, R.time, target = user)) - contents = get_surroundings(user) - if(!check_contents(user, R, contents)) - return ", missing component." - if(!check_tools(user, R, contents)) - return ", missing tool." - var/list/parts = del_reqs(R, user) - var/atom/movable/I = new R.result (get_turf(user.loc)) - I.CheckParts(parts, R) - if(isitem(I)) - if(isfood(I)) - var/obj/item/reagent_containers/food/food_result = I - var/total_quality = 0 - var/total_items = 0 - for(var/obj/item/reagent_containers/food/ingredient in parts) - total_items += 1 - total_quality += ingredient.food_quality - if(total_items == 0) - food_result.adjust_food_quality(50) - else - food_result.adjust_food_quality(total_quality / total_items) - user.put_in_hands(I) - if(send_feedback) - SSblackbox.record_feedback("tally", "object_crafted", 1, I.type) - log_craft("[I] crafted by [user] at [loc_name(I.loc)]") - return FALSE - return "." - return ", missing tool." - return ", missing component." - - -/*Del reqs works like this: - - Loop over reqs var of the recipe - Set var amt to the value current cycle req is pointing to, its amount of type we need to delete - Get var/surroundings list of things accessable to crafting by get_environment() - Check the type of the current cycle req - If its reagent then do a while loop, inside it try to locate() reagent containers, inside such containers try to locate needed reagent, if there isnt remove thing from surroundings - If there is enough reagent in the search result then delete the needed amount, create the same type of reagent with the same data var and put it into deletion list - If there isnt enough take all of that reagent from the container, put into deletion list, substract the amt var by the volume of reagent, remove the container from surroundings list and keep searching - While doing above stuff check deletion list if it already has such reagnet, if yes merge instead of adding second one - If its stack check if it has enough amount - If yes create new stack with the needed amount and put in into deletion list, substract taken amount from the stack - If no put all of the stack in the deletion list, substract its amount from amt and keep searching - While doing above stuff check deletion list if it already has such stack type, if yes try to merge them instead of adding new one - If its anything else just locate() in in the list in a while loop, each find --s the amt var and puts the found stuff in deletion loop - - Then do a loop over parts var of the recipe - Do similar stuff to what we have done above, but now in deletion list, until the parts conditions are satisfied keep taking from the deletion list and putting it into parts list for return - - After its done loop over deletion list and delete all the shit that wasnt taken by parts loop - - del_reqs return the list of parts resulting object will receive as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already -*/ - -/datum/component/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, mob/user) - var/list/surroundings - var/list/Deletion = list() - . = list() - var/data - var/amt - main_loop: - for(var/A in R.reqs) - amt = R.reqs[A] - surroundings = get_environment(user) - surroundings -= Deletion - if(ispath(A, /datum/reagent)) - var/datum/reagent/RG = new A - var/datum/reagent/RGNT - while(amt > 0) - var/obj/item/reagent_containers/RC = locate() in surroundings - RG = RC.reagents.get_reagent(A) - if(RG) - if(!locate(RG.type) in Deletion) - Deletion += new RG.type() - if(RG.volume > amt) - RG.volume -= amt - data = RG.data - RC.reagents.conditional_update(RC) - RG = locate(RG.type) in Deletion - RG.volume = amt - RG.data += data - continue main_loop - else - surroundings -= RC - amt -= RG.volume - RC.reagents.reagent_list -= RG - RC.reagents.conditional_update(RC) - RGNT = locate(RG.type) in Deletion - RGNT.volume += RG.volume - RGNT.data += RG.data - qdel(RG) - RC.on_reagent_change() - else - surroundings -= RC - else if(ispath(A, /obj/item/stack)) - var/obj/item/stack/S - var/obj/item/stack/SD - while(amt > 0) - S = locate(A) in surroundings - if(S.amount >= amt) - if(!locate(S.type) in Deletion) - SD = new S.type() - Deletion += SD - S.use(amt) - SD = locate(S.type) in Deletion - SD.amount += amt - continue main_loop - else - amt -= S.amount - if(!locate(S.type) in Deletion) - Deletion += S - else - data = S.amount - S = locate(S.type) in Deletion - S.add(data) - surroundings -= S - else - var/atom/movable/I - while(amt > 0) - I = locate(A) in surroundings - Deletion += I - surroundings -= I - amt-- - var/list/partlist = list(R.parts.len) - for(var/M in R.parts) - partlist[M] = R.parts[M] - for(var/A in R.parts) - if(istype(A, /datum/reagent)) - var/datum/reagent/RG = locate(A) in Deletion - if(RG.volume > partlist[A]) - RG.volume = partlist[A] - . += RG - Deletion -= RG - continue - else if(istype(A, /obj/item/stack)) - var/obj/item/stack/ST = locate(A) in Deletion - if(ST.amount > partlist[A]) - ST.amount = partlist[A] - . += ST - Deletion -= ST - continue - else - while(partlist[A] > 0) - var/atom/movable/AM = locate(A) in Deletion - . += AM - Deletion -= AM - partlist[A] -= 1 - while(Deletion.len) - var/DL = Deletion[Deletion.len] - Deletion.Cut(Deletion.len) - qdel(DL) - -/datum/component/personal_crafting/proc/component_ui_interact(obj/screen/craft/image, location, control, params, user) - if(user == parent) - ui_interact(user) - -/datum/component/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_turf_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - cur_category = categories[1] - if(islist(categories[cur_category])) - var/list/subcats = categories[cur_category] - cur_subcategory = subcats[1] - else - cur_subcategory = CAT_NONE - ui = new(user, src, ui_key, "personal_crafting", "Crafting Menu", 700, 800, master_ui, state) - ui.open() - - -/datum/component/personal_crafting/ui_data(mob/user) - var/list/data = list() - data["busy"] = busy - data["category"] = cur_category - data["subcategory"] = cur_subcategory - data["display_craftable_only"] = display_craftable_only - data["display_compact"] = display_compact - - var/list/surroundings = get_surroundings(user) - var/list/craftability = list() - for(var/rec in GLOB.crafting_recipes) - var/datum/crafting_recipe/R = rec - - if(!R.always_availible && !(R.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this. - continue - - if((R.category != cur_category) || (R.subcategory != cur_subcategory)) - continue - - craftability["[REF(R)]"] = check_contents(user, R, surroundings) - - data["craftability"] = craftability - return data - -/datum/component/personal_crafting/ui_static_data(mob/user) - var/list/data = list() - - var/list/crafting_recipes = list() - for(var/rec in GLOB.crafting_recipes) - var/datum/crafting_recipe/R = rec - - if(R.name == "") //This is one of the invalid parents that sneaks in - continue - - if(!R.always_availible && !(R.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this. - continue - - if(isnull(crafting_recipes[R.category])) - crafting_recipes[R.category] = list() - - if(R.subcategory == CAT_NONE) - crafting_recipes[R.category] += list(build_recipe_data(R)) - else - if(isnull(crafting_recipes[R.category][R.subcategory])) - crafting_recipes[R.category][R.subcategory] = list() - crafting_recipes[R.category]["has_subcats"] = TRUE - crafting_recipes[R.category][R.subcategory] += list(build_recipe_data(R)) - - data["crafting_recipes"] = crafting_recipes - return data - - -/datum/component/personal_crafting/ui_act(action, params) - if(..()) - return - switch(action) - if("make") - var/datum/crafting_recipe/TR = locate(params["recipe"]) in GLOB.crafting_recipes - ui_interact(usr) - if(busy) - to_chat(usr, "You are already making something!") - return - busy = TRUE - var/fail_msg = construct_item(usr, TR) - if(!fail_msg) - to_chat(usr, "[TR.name] constructed.") - else - to_chat(usr, "Construction failed[fail_msg]") - busy = FALSE - if("toggle_recipes") - display_craftable_only = !display_craftable_only - . = TRUE - if("toggle_compact") - display_compact = !display_compact - . = TRUE - if("set_category") - if(!isnull(params["category"])) - cur_category = params["category"] - if(!isnull(params["subcategory"])) - if(params["subcategory"] == "0") - cur_subcategory = "" - else - cur_subcategory = params["subcategory"] - . = TRUE - -/datum/component/personal_crafting/proc/build_recipe_data(datum/crafting_recipe/R) - var/list/data = list() - data["name"] = R.name - data["ref"] = "[REF(R)]" - var/req_text = "" - var/tool_text = "" - var/catalyst_text = "" - - for(var/a in R.reqs) - //We just need the name, so cheat-typecast to /atom for speed (even tho Reagents are /datum they DO have a "name" var) - //Also these are typepaths so sadly we can't just do "[a]" - var/atom/A = a - req_text += " [R.reqs[A]] [initial(A.name)]," - req_text = replacetext(req_text,",","",-1) - data["req_text"] = req_text - - for(var/a in R.chem_catalysts) - var/atom/A = a //cheat-typecast - catalyst_text += " [R.chem_catalysts[A]] [initial(A.name)]," - catalyst_text = replacetext(catalyst_text,",","",-1) - data["catalyst_text"] = catalyst_text - - for(var/a in R.tools) - if(ispath(a, /obj/item)) - var/obj/item/b = a - tool_text += " [initial(b.name)]," - else - tool_text += " [a]," - tool_text = replacetext(tool_text,",","",-1) - data["tool_text"] = tool_text - - return data - -//Mind helpers - -/datum/mind/proc/teach_crafting_recipe(R) - if(!learned_recipes) - learned_recipes = list() - learned_recipes |= R diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 1a9f4c0512..147dd287ca 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -4,6 +4,10 @@ /datum/component/personal_crafting/proc/create_mob_button(mob/user, client/CL) var/datum/hud/H = user.hud_used + for(var/huds in H.static_inventory) + if(istype(huds, /obj/screen/craft)) + return + //We don't want to be stacking multiple crafting huds on relogs var/obj/screen/craft/C = new() C.icon = H.ui_style H.static_inventory += C @@ -20,7 +24,7 @@ CAT_AMMO, ), CAT_ROBOT = CAT_NONE, - CAT_MISC = list( + CAT_MISCELLANEOUS = list( CAT_MISCELLANEOUS, CAT_TOOL, CAT_FURNITURE, diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index 625e850212..ad37f770ed 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -8,7 +8,7 @@ time = 1 reqs = list(/obj/item/stack/sheet/plastic = 1, /obj/item/stack/sheet/mineral/wood = 1) - category = CAT_MISC + category = CAT_MISCELLANEOUS subcategory = CAT_TOOL /datum/crafting_recipe/showercurtain @@ -18,7 +18,7 @@ /obj/item/stack/rods = 1) result = /obj/structure/curtain subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/guillotine name = "Guillotine" @@ -29,7 +29,7 @@ /obj/item/stack/cable_coil = 10) tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/femur_breaker name = "Femur Breaker" @@ -39,7 +39,7 @@ /obj/item/stack/cable_coil = 30) tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS // Blood Sucker stuff // /datum/crafting_recipe/bloodsucker/blackcoffin @@ -54,7 +54,7 @@ ///obj/item/pipe = 2) time = 150 subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS always_availible = TRUE /datum/crafting_recipe/bloodsucker/meatcoffin @@ -66,7 +66,7 @@ /obj/item/restraints/handcuffs/cable = 1) time = 150 subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS always_availible = TRUE /datum/crafting_recipe/bloodsucker/metalcoffin @@ -77,7 +77,7 @@ reqs = list(/obj/item/stack/sheet/metal = 5) time = 100 subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS always_availible = TRUE /datum/crafting_recipe/bloodsucker/vassalrack @@ -100,7 +100,7 @@ // ) time = 150 subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS always_availible = FALSE // Disabled until learned @@ -117,7 +117,7 @@ ) time = 100 subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS always_availible = FALSE // Disabled til learned /datum/crafting_recipe/furnace @@ -129,7 +129,7 @@ /obj/item/stack/rods = 2) tools = list(TOOL_CROWBAR) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/tableanvil name = "Table Anvil" @@ -139,7 +139,7 @@ /obj/item/stack/rods = 2) tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/sandvil name = "Sandstone Anvil" @@ -148,7 +148,7 @@ reqs = list(/obj/item/stack/sheet/mineral/sandstone = 24) tools = list(TOOL_CROWBAR) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/basaltblock name = "Sintered Basalt Block" @@ -157,7 +157,7 @@ reqs = list(/obj/item/stack/ore/glass/basalt = 50) tools = list(TOOL_WELDER) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/basaltanvil name = "Basalt Anvil" @@ -166,7 +166,7 @@ reqs = list(/obj/item/basaltblock = 5) tools = list(TOOL_CROWBAR) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /////////////////// //Tools & Storage// /////////////////// @@ -177,7 +177,7 @@ time = 1 reqs = list(/obj/item/stack/medical/gauze = 1, /datum/reagent/space_cleaner/sterilizine = 5) - category = CAT_MISC + category = CAT_MISCELLANEOUS subcategory = CAT_TOOL /datum/crafting_recipe/brute_pack @@ -186,7 +186,7 @@ time = 1 reqs = list(/obj/item/stack/medical/gauze/adv = 1, /datum/reagent/medicine/styptic_powder = 10) - category = CAT_MISC + category = CAT_MISCELLANEOUS subcategory = CAT_TOOL /datum/crafting_recipe/burn_pack @@ -195,7 +195,7 @@ time = 1 reqs = list(/obj/item/stack/medical/gauze/adv = 1, /datum/reagent/medicine/silver_sulfadiazine = 10) - category = CAT_MISC + category = CAT_MISCELLANEOUS subcategory = CAT_TOOL /datum/crafting_recipe/ghettojetpack @@ -206,7 +206,7 @@ /obj/item/extinguisher = 1, /obj/item/pipe = 3, /obj/item/stack/cable_coil = 30) - category = CAT_MISC + category = CAT_MISCELLANEOUS subcategory = CAT_TOOL tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER) @@ -220,7 +220,7 @@ /datum/reagent/water = 15) time = 40 subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/toolboxhammer name = "Toolbox Hammer" @@ -231,7 +231,7 @@ /obj/item/stack/rods = 2) time = 40 subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/papersack name = "Paper Sack" @@ -239,7 +239,7 @@ time = 10 reqs = list(/obj/item/paper = 5) subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/smallcarton name = "Small Carton" @@ -247,7 +247,7 @@ time = 10 reqs = list(/obj/item/stack/sheet/cardboard = 1) subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/bronze_driver name = "Bronze Plated Screwdriver" @@ -259,7 +259,7 @@ /datum/reagent/water = 15) time = 40 subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/bronze_welder name = "Bronze Plated Welding Tool" @@ -271,7 +271,7 @@ /datum/reagent/water = 15) time = 40 subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/bronze_wirecutters name = "Bronze Plated Wirecutters" @@ -283,7 +283,7 @@ /datum/reagent/water = 15) time = 40 subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/bronze_crowbar name = "Bronze Plated Crowbar" @@ -295,7 +295,7 @@ /datum/reagent/water = 15) time = 40 subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/bronze_wrench name = "Bronze Plated Wrench" @@ -307,7 +307,7 @@ /datum/reagent/water = 15) time = 40 subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/rcl name = "Makeshift Rapid Cable Layer" @@ -316,7 +316,7 @@ tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH) reqs = list(/obj/item/stack/sheet/metal = 15) subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/picket_sign name = "Picket Sign" @@ -325,7 +325,7 @@ /obj/item/stack/sheet/cardboard = 2) time = 80 subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/electrochromatic_kit name = "Electrochromatic Kit" @@ -334,7 +334,7 @@ /obj/item/stack/cable_coil = 1) time = 5 subcategory = CAT_TOOL - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/blackmarket_uplink name = "Black Market Uplink" @@ -346,7 +346,7 @@ /obj/item/radio = 1, /obj/item/analyzer = 1) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/heretic/codex name = "Codex Cicatrix" @@ -358,7 +358,7 @@ /obj/item/stack/sheet/animalhide/human = 1) time = 150 subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS always_availible = FALSE //////////// @@ -372,7 +372,7 @@ /obj/item/stack/rods = 8) time = 100 subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/motorized_wheelchair name = "Hoverchair" @@ -386,7 +386,7 @@ tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH) time = 200 subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/skateboard name = "Skateboard" @@ -395,7 +395,7 @@ reqs = list(/obj/item/stack/sheet/metal = 5, /obj/item/stack/rods = 10) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/scooter name = "Scooter" @@ -404,7 +404,7 @@ reqs = list(/obj/item/stack/sheet/metal = 5, /obj/item/stack/rods = 12) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS ///////// //Toys/// @@ -415,28 +415,28 @@ reqs = list(/obj/item/light/bulb = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4) result = /obj/item/toy/sword subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/extendohand name = "Extendo-Hand" reqs = list(/obj/item/bodypart/r_arm/robot = 1, /obj/item/clothing/gloves/boxing = 1) result = /obj/item/extendohand subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/toyneb name = "Non-Euplastic Blade" reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4) result = /obj/item/toy/sword/cx subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/catgirlplushie name = "Catgirl Plushie" reqs = list(/obj/item/toy/plush/hairball = 3) result = /obj/item/toy/plush/catgirl subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS //////////// //Unsorted// @@ -450,7 +450,7 @@ reqs = list(/obj/item/stack/sheet/mineral/wood = 1) result = /obj/item/stick subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/swordhilt @@ -459,14 +459,14 @@ reqs = list(/obj/item/stack/sheet/mineral/wood = 2) result = /obj/item/swordhandle subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/blackcarpet name = "Black Carpet" reqs = list(/obj/item/stack/tile/carpet = 50, /obj/item/toy/crayon/black = 1) result = /obj/item/stack/tile/carpet/black/fifty subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/paperframes name = "Paper Frames" @@ -474,7 +474,7 @@ time = 10 reqs = list(/obj/item/stack/sheet/mineral/wood = 5, /obj/item/paper = 20) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/naturalpaper name = "Hand-Pressed Paper" @@ -483,7 +483,7 @@ tools = list(/obj/item/hatchet) result = /obj/item/paper_bin/bundlenatural subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/bluespacehonker name = "Bluespace Bike horn" @@ -493,7 +493,7 @@ /obj/item/toy/crayon/blue = 1, /obj/item/bikehorn = 1) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/mousetrap name = "Mouse Trap" @@ -502,7 +502,7 @@ reqs = list(/obj/item/stack/sheet/cardboard = 1, /obj/item/stack/rods = 1) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/flashlight_eyes name = "Flashlight Eyes" @@ -513,7 +513,7 @@ /obj/item/restraints/handcuffs/cable = 1 ) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/pressureplate name = "Pressure Plate" @@ -524,7 +524,7 @@ /obj/item/stack/cable_coil = 2, /obj/item/assembly/igniter = 1) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/gold_horn name = "Golden Bike Horn" @@ -533,7 +533,7 @@ reqs = list(/obj/item/stack/sheet/mineral/bananium = 5, /obj/item/bikehorn = 1) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/spooky_camera name = "Camera Obscura" @@ -543,7 +543,7 @@ /datum/reagent/water/holywater = 10) parts = list(/obj/item/camera = 1) subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/coconut_bong name = "Coconut Bong" @@ -552,7 +552,7 @@ /obj/item/reagent_containers/food/snacks/grown/coconut = 1) time = 70 subcategory = CAT_MISCELLANEOUS - category = CAT_MISC + category = CAT_MISCELLANEOUS ////////////// //Banners///// @@ -565,7 +565,7 @@ reqs = list(/obj/item/stack/rods = 2, /obj/item/clothing/under/rank/captain/parade = 1) subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/engineering_banner name = "Engitopia Banner" @@ -574,7 +574,7 @@ reqs = list(/obj/item/stack/rods = 2, /obj/item/clothing/under/rank/engineering/engineer = 1) subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/cargo_banner name = "Cargonia Banner" @@ -583,7 +583,7 @@ reqs = list(/obj/item/stack/rods = 2, /obj/item/clothing/under/rank/cargo/tech = 1) subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/science_banner name = "Sciencia Banner" @@ -592,7 +592,7 @@ reqs = list(/obj/item/stack/rods = 2, /obj/item/clothing/under/rank/rnd/scientist = 1) subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/medical_banner name = "Meditopia Banner" @@ -601,7 +601,7 @@ reqs = list(/obj/item/stack/rods = 2, /obj/item/clothing/under/rank/medical/doctor = 1) subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS /datum/crafting_recipe/security_banner name = "Securistan Banner" @@ -610,4 +610,4 @@ reqs = list(/obj/item/stack/rods = 2, /obj/item/clothing/under/rank/security/officer = 1) subcategory = CAT_FURNITURE - category = CAT_MISC + category = CAT_MISCELLANEOUS diff --git a/code/datums/elements/trash.dm b/code/datums/elements/trash.dm new file mode 100644 index 0000000000..3a4d5b0150 --- /dev/null +++ b/code/datums/elements/trash.dm @@ -0,0 +1,19 @@ +/datum/element/trash + element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH + +/datum/element/trash/Attach(datum/target) + . = ..() + RegisterSignal(target, COMSIG_ITEM_ATTACK, .proc/UseFromHand) + +/datum/element/trash/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user) + if((M == user || user.vore_flags & TRASH_FORCEFEED) && ishuman(user)) + var/mob/living/carbon/human/H = user + if(HAS_TRAIT(H, TRAIT_TRASHCAN)) + playsound(H.loc,'sound/items/eatfood.ogg', rand(10,50), 1) + if(H.vore_selected) + H.visible_message("[H] [H.vore_selected.vore_verb]s the [source] into their [H.vore_selected]", + "You [H.vore_selected.vore_verb]s the [source] into your [H.vore_selected]") + source.forceMove(H.vore_selected) + else + H.visible_message("[H] consumes the [source].") + qdel(source) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 18d565ed5a..2f0667d942 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -154,3 +154,11 @@ /datum/quirk/longtimer/on_spawn() var/mob/living/carbon/C = quirk_holder C.generate_fake_scars(rand(min_scars, max_scars)) + +/datum/quirk/trashcan + name = "Trashcan" + desc = "You are able to consume and digest trash." + value = 0 + gain_text = "You feel like munching on a can of soda." + lose_text = "You no longer feel like you should be eating trash." + mob_trait = TRAIT_TRASHCAN diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 4280e7105f..16ebe20e51 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -387,6 +387,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM throwforce = 0 grind_results = list(/datum/reagent/carbon = 2) +/obj/item/cigbutt/Initialize() + . = ..() + AddElement(/datum/element/trash) + /obj/item/cigbutt/cigarbutt name = "cigar butt" desc = "A manky old cigar butt." diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index c58fe95f09..11370d6c3b 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -13,6 +13,7 @@ GLOBAL_LIST_INIT(human_recipes, list( \ new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5), \ + new/datum/stack_recipe("human skin hat", /obj/item/clothing/head/human_leather, 1), \ )) /obj/item/stack/sheet/animalhide/human/get_main_recipes() diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 57fe8dd0c2..97cef8f621 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -181,6 +181,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = TRUE), \ new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 50), \ + new/datum/stack_recipe("plasteel keg", /obj/structure/custom_keg, 10, time = 50), \ new/datum/stack_recipe("micro powered fan assembly", /obj/machinery/fan_assembly, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ new /datum/stack_recipe_list("crates", list( \ new /datum/stack_recipe("gray crate", /obj/structure/closet/crate, 5, time = 50, one_per_turf = 1, on_floor = 1), \ diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 2109d1038e..1816f26843 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -7,6 +7,10 @@ w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE +/obj/item/trash/Initialize() + . = ..() + AddElement(/datum/element/trash) + /obj/item/trash/raisins name = "\improper 4no raisins" icon_state= "4no_raisins" @@ -80,6 +84,3 @@ name = "boritos bag" icon_state = "boritos" grind_results = list(/datum/reagent/aluminium = 1) //from the mylar bag - -/obj/item/trash/attack(mob/M, mob/living/user) - return diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 32040b8573..a70d9d4678 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -48,14 +48,34 @@ return // no message spam ..() +/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user) + if(broken || !istype(user) || !I.force) + return ..() + + . = ..() + if(broken) // breaking a mirror truly gets you bad luck! + to_chat(user, "A chill runs down your spine as [src] shatters...") + user.AddComponent(/datum/component/omen, silent=TRUE) // we have our own message + +/obj/structure/mirror/bullet_act(obj/item/projectile/P) + if(broken || !isliving(P.firer) || !P.damage) + return ..() + + . = ..() + if(broken) // breaking a mirror truly gets you bad luck! + var/mob/living/unlucky_dude = P.firer + to_chat(unlucky_dude, "A chill runs down your spine as [src] shatters...") + unlucky_dude.AddComponent(/datum/component/omen, silent=TRUE) // we have our own message + /obj/structure/mirror/obj_break(damage_flag, mapload) - if(!broken && !(flags_1 & NODECONSTRUCT_1)) - icon_state = "mirror_broke" - if(!mapload) - playsound(src, "shatter", 70, 1) - if(desc == initial(desc)) - desc = "Oh no, seven years of bad luck!" - broken = TRUE + if(broken || (flags_1 & NODECONSTRUCT_1)) + return + icon_state = "mirror_broke" + if(!mapload) + playsound(src, "shatter", 70, TRUE) + if(desc == initial(desc)) + desc = "Oh no, seven years of bad luck!" + broken = TRUE /obj/structure/mirror/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 35f8c59f7c..bb5ca6da1a 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -72,7 +72,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( // basic doesn't initialize and this will cause issues // no warning though because this can happen naturaly as a result of it being built on top of path = /turf/open/space - if(!GLOB.use_preloader && path == type && !(flags & CHANGETURF_FORCEOP)) // Don't no-op if the map loader requires it to be reconstructed + if(!GLOB.use_preloader && path == type && !(flags & CHANGETURF_FORCEOP) && (baseturfs == new_baseturfs)) // Don't no-op if the map loader requires it to be reconstructed, or if this is a new set of baseturfs return src if(flags & CHANGETURF_SKIP) return new path(src) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 7c136e2721..b1de3d3834 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -199,6 +199,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/vore_flags = 0 var/list/belly_prefs = list() var/vore_taste = "nothing in particular" + var/vore_smell = null var/toggleeatingnoise = TRUE var/toggledigestionnoise = TRUE var/hound_sleeper = TRUE @@ -1105,6 +1106,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Voracious MediHound sleepers: [(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]
" dat += "Hear Vore Sounds: [(cit_toggles & EATING_NOISES) ? "Yes" : "No"]
" dat += "Hear Vore Digestion Sounds: [(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]
" + dat += "Allow trash forcefeeding (requires Trashcan quirk) [(cit_toggles & TRASH_FORCEFEED) ? "Yes" : "No"]
" dat += "Forced Feminization: [(cit_toggles & FORCED_FEM) ? "Allowed" : "Disallowed"]
" dat += "Forced Masculinization: [(cit_toggles & FORCED_MASC) ? "Allowed" : "Disallowed"]
" dat += "Lewd Hypno: [(cit_toggles & HYPNO) ? "Allowed" : "Disallowed"]
" @@ -2961,6 +2963,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("toggledigestionnoise") cit_toggles ^= DIGESTION_NOISES + if("toggleforcefeedtrash") + cit_toggles ^= TRASH_FORCEFEED + if("breast_enlargement") cit_toggles ^= BREAST_ENLARGEMENT diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 60fac0fdd1..1e7b5e045a 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -835,6 +835,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["vore_flags"] >> vore_flags S["vore_taste"] >> vore_taste + S["vore_smell"] >> vore_smell var/char_vr_path = "[vr_path]/character_[default_slot]_v2.json" if(fexists(char_vr_path)) var/list/json_from_file = json_decode(file2text(char_vr_path)) @@ -1007,6 +1008,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car vore_flags = sanitize_integer(vore_flags, 0, MAX_VORE_FLAG, 0) vore_taste = copytext(vore_taste, 1, MAX_TASTE_LEN) + vore_smell = copytext(vore_smell, 1, MAX_TASTE_LEN) belly_prefs = SANITIZE_LIST(belly_prefs) cit_character_pref_load(S) @@ -1162,6 +1164,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["vore_flags"] , vore_flags) WRITE_FILE(S["vore_taste"] , vore_taste) + WRITE_FILE(S["vore_smell"] , vore_smell) var/char_vr_path = "[vr_path]/character_[default_slot]_v2.json" var/belly_prefs_json = safe_json_encode(list("belly_prefs" = belly_prefs)) if(fexists(char_vr_path)) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 124ece8fdc..fd181779f1 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -482,3 +482,9 @@ icon_state = "kabuto" item_state = "kabuto" flags_inv = HIDEHAIR|HIDEEARS + +/obj/item/clothing/head/human_leather + name = "human skin hat" + desc = "This will scare them. All will know my power." + icon_state = "human_leather" + item_state = "human_leather" diff --git a/code/modules/events/cat_surgeon.dm b/code/modules/events/cat_surgeon.dm index ebcd55d8aa..2d5651b9b1 100644 --- a/code/modules/events/cat_surgeon.dm +++ b/code/modules/events/cat_surgeon.dm @@ -5,7 +5,7 @@ weight = 8 /datum/round_event/cat_surgeon/announce(fake) - priority_announce("One of our... ahem... 'special' cases has escaped. Our sensors now show their tracker implant on your station. On an unrelated note, has anyone seen our cats?", + priority_announce("One of our... ahem... 'special' cases has escaped. As it happens their last known location before their tracker went dead is your station so keep an eye out for them. On an unrelated note, has anyone seen our cats?", sender_override = "Nanotrasen Psych Ward") /datum/round_event/cat_surgeon/start() diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index 76e36a1725..3d6b90eb2d 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -73,3 +73,40 @@ icon_state = "barrel_open" else icon_state = "barrel" + +/obj/structure/custom_keg + name = "Plasteel Keg" + desc = "A large plasteel keg. You can use it to hold liquids. You may wanna label this, too." + icon = 'icons/obj/objects.dmi' + icon_state = "keg" + density = TRUE + anchored = FALSE + pressure_resistance = 2 * ONE_ATMOSPHERE + max_integrity = 300 + var/open = FALSE + +/obj/structure/custom_keg/Initialize() + create_reagents(1000, DRAINABLE | AMOUNT_VISIBLE) + . = ..() + +/obj/structure/custom_keg/examine(mob/user) + . = ..() + . += "It is currently [open?"open, letting you pour liquids in.":"closed, letting you draw liquids from the tap."]" + +/obj/structure/custom_keg/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) + open = !open + if(open) + DISABLE_BITFIELD(reagents.reagents_holder_flags, DRAINABLE) + ENABLE_BITFIELD(reagents.reagents_holder_flags, REFILLABLE) + to_chat(user, "You open [src], letting you fill it.") + else + DISABLE_BITFIELD(reagents.reagents_holder_flags, REFILLABLE) + ENABLE_BITFIELD(reagents.reagents_holder_flags, DRAINABLE) + to_chat(user, "You close [src], letting you draw from its tap.") + update_icon() + +/obj/structure/custom_keg/update_icon_state() + if(open) + icon_state = "keg_open" + else + icon_state = "keg" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm index e17dc43950..3834eb9231 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -679,7 +679,7 @@ icon_state = "crow" matrixed_sections = MATRIX_RED -/datum/sprite_accessory/tails/mam_tail/cow +/datum/sprite_accessory/tails/mam_tails/cow name = "Cow" icon_state = "cow" matrixed_sections = MATRIX_RED diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index c9e4598aa8..8340b385c7 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -58,6 +58,8 @@ var/obj/item/ears_extra = null var/obj/item/wrists = null // + /// When an braindead player has their equipment fiddled with, we log that info here for when they come back so they know who took their ID while they were DC'd for 30 seconds + var/list/afk_thefts var/special_voice = "" // For changing our voice. Used by a symptom. diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm index a89921143a..ebf76eeafa 100644 --- a/code/modules/mob/living/carbon/human/login.dm +++ b/code/modules/mob/living/carbon/human/login.dm @@ -2,3 +2,33 @@ ..() if(dna?.species?.has_field_of_vision && CONFIG_GET(flag/use_field_of_vision)) LoadComponent(/datum/component/field_of_vision, field_of_vision_type) + + if(!LAZYLEN(afk_thefts)) + return + + var/list/print_msg = list() + print_msg += "*---------*" + print_msg += "As you snap back to consciousness, you recall people messing with your stuff..." + + afk_thefts = reverseRange(afk_thefts) + + for(var/list/iter_theft as anything in afk_thefts) + if(!islist(iter_theft) || LAZYLEN(iter_theft) != AFK_THEFT_TIME) + stack_trace("[src] ([ckey]) returned to their body and had a null/malformed afk_theft entry. Contents: [json_encode(iter_theft)]") + continue + + var/thief_name = iter_theft[AFK_THEFT_NAME] + var/theft_message = iter_theft[AFK_THEFT_MESSAGE] + var/time_since = world.time - iter_theft[AFK_THEFT_TIME] + + if(time_since > AFK_THEFT_FORGET_DETAILS_TIME) + print_msg += "\tSomeone [theft_message], but it was at least [DisplayTimeText(AFK_THEFT_FORGET_DETAILS_TIME)] ago." + else + print_msg += "\t[thief_name] [theft_message] roughly [DisplayTimeText(time_since, 10)] ago." + + if(LAZYLEN(afk_thefts) >= AFK_THEFT_MAX_MESSAGES) + print_msg += "There may have been more, but that's all you can remember..." + print_msg += "*---------*" + + to_chat(src, print_msg.Join("\n")) + LAZYNULL(afk_thefts) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 9c7258fe61..500e7f0d3d 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -920,6 +920,12 @@ "[src] tries to remove your [what.name].", target = src, target_message = "You try to remove [who]'s [what.name].") what.add_fingerprint(src) + if(ishuman(who)) + var/mob/living/carbon/human/victim_human = who + if(victim_human.key && !victim_human.client) // AKA braindead + if(victim_human.stat <= SOFT_CRIT && LAZYLEN(victim_human.afk_thefts) <= AFK_THEFT_MAX_MESSAGES) + var/list/new_entry = list(list(src.name, "tried unequipping your [what]", world.time)) + LAZYADD(victim_human.afk_thefts, new_entry) else to_chat(src,"You try to remove [who]'s [what.name].") what.add_fingerprint(src) @@ -966,6 +972,13 @@ to_chat(src, "\The [what.name] doesn't fit in that place!") return + if(ishuman(who)) + var/mob/living/carbon/human/victim_human = who + if(victim_human.key && !victim_human.client) // AKA braindead + if(victim_human.stat <= SOFT_CRIT && LAZYLEN(victim_human.afk_thefts) <= AFK_THEFT_MAX_MESSAGES) + var/list/new_entry = list(list(src.name, "tried equipping you with [what]", world.time)) + LAZYADD(victim_human.afk_thefts, new_entry) + who.visible_message("[src] tries to put [what] on [who].", "[src] tries to put [what] on you.", target = src, target_message = "You try to put [what] on [who].") diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 95f8f2acc1..01a30bb90a 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -364,11 +364,10 @@ /mob/living/simple_animal/hostile/proc/AttackingTarget() SEND_SIGNAL(src, COMSIG_HOSTILE_ATTACKINGTARGET, target) in_melee = TRUE - /* sorry for the simplemob vore fans if(vore_active) if(isliving(target)) var/mob/living/L = target - if(!client && L.Adjacent(src) && CHECK_BITFIELD(L.vore_flags,DEVOURABLE)) // aggressive check to ensure vore attacks can be made + if(!client && L.Adjacent(src) && CHECK_BITFIELD(L.vore_flags, DEVOURABLE) && CHECK_BITFIELD(L.vore_flags, MOBVORE)) // aggressive check to ensure vore attacks can be made if(prob(voracious_chance)) vore_attack(src,L,src) else @@ -379,7 +378,6 @@ return target.attack_animal(src) else return target.attack_animal(src) - */ return target.attack_animal(src) /mob/living/simple_animal/hostile/proc/Aggro() diff --git a/code/modules/tgui/states/vorepanel.dm b/code/modules/tgui/states/vorepanel.dm new file mode 100644 index 0000000000..b68dfb970a --- /dev/null +++ b/code/modules/tgui/states/vorepanel.dm @@ -0,0 +1,18 @@ + /** + * tgui state: vorepanel_state + * + * Only checks that the user and src_object are the same. + **/ + +GLOBAL_DATUM_INIT(ui_vorepanel_state, /datum/ui_state/vorepanel_state, new) + +/datum/ui_state/vorepanel_state/can_use_topic(src_object, mob/user) + if(src_object != user) + // Note, in order to allow others to look at others vore panels, change this to + // UI_UPDATE + return UI_CLOSE + if(!user.client) + return UI_CLOSE + if(user.stat == DEAD) + return UI_DISABLED + return UI_INTERACTIVE diff --git a/code/modules/tgui/tgui_alert.dm b/code/modules/tgui/tgui_alert.dm index 1a86cca705..d144588ad9 100644 --- a/code/modules/tgui/tgui_alert.dm +++ b/code/modules/tgui/tgui_alert.dm @@ -9,7 +9,7 @@ * * buttons - The options that can be chosen by the user, each string is assigned a button on the UI. * * timeout - The timeout of the alert, after which the modal will close and qdel itself. Set to zero for no timeout. */ -/proc/tgui_alert(mob/user, message, title, list/buttons, timeout = 60 SECONDS) +/proc/tgui_alert(mob/user, message = null, title = null, list/buttons = list("Ok"), timeout = 0) if (!user) user = usr if (!istype(user)) @@ -35,9 +35,9 @@ * * title - The of the alert modal, shown on the top of the TGUI window. * * buttons - The options that can be chosen by the user, each string is assigned a button on the UI. * * callback - The callback to be invoked when a choice is made. - * * timeout - The timeout of the alert, after which the modal will close and qdel itself. Set to zero for no timeout. + * * timeout - The timeout of the alert, after which the modal will close and qdel itself. Disabled by default, can be set to seconds otherwise. */ -/proc/tgui_alert_async(mob/user, message, title, list/buttons, datum/callback/callback, timeout = 60 SECONDS) +/proc/tgui_alert_async(mob/user, message = null, title = null, list/buttons = list("Ok"), datum/callback/callback, timeout = 0) if (!user) user = usr if (!istype(user)) @@ -90,7 +90,7 @@ * the window was closed by the user. */ /datum/tgui_modal/proc/wait() - while (!choice && !closed) + while (!choice && !closed && !QDELETED(src)) stoplag(1) /datum/tgui_modal/ui_interact(mob/user, datum/tgui/ui) @@ -124,10 +124,13 @@ if("choose") if (!(params["choice"] in buttons)) return - choice = params["choice"] + set_choice(params["choice"]) SStgui.close_uis(src) return TRUE +/datum/tgui_modal/proc/set_choice(choice) + src.choice = choice + /** * # async tgui_modal * @@ -138,23 +141,17 @@ var/datum/callback/callback /datum/tgui_modal/async/New(mob/user, message, title, list/buttons, callback, timeout) - ..(user, title, message, buttons, timeout) + ..(user, message, title, buttons, timeout) src.callback = callback /datum/tgui_modal/async/Destroy(force, ...) QDEL_NULL(callback) . = ..() -/datum/tgui_modal/async/ui_close(mob/user) +/datum/tgui_modal/async/set_choice(choice) . = ..() - qdel(src) - -/datum/tgui_modal/async/ui_act(action, list/params) - . = ..() - if (!. || choice == null) - return - callback.InvokeAsync(choice) - qdel(src) + if(!isnull(src.choice)) + callback?.InvokeAsync(src.choice) /datum/tgui_modal/async/wait() return diff --git a/code/modules/vore/eating/bellymodes.dm b/code/modules/vore/eating/bellymodes.dm index 7cf36ebc50..8d64ee28f1 100644 --- a/code/modules/vore/eating/bellymodes.dm +++ b/code/modules/vore/eating/bellymodes.dm @@ -150,7 +150,7 @@ SEND_SOUND(M,prey_digest) play_sound = pick(pred_digest) - if(M.vore_flags & ABSORBED) + if(M.vore_flags & ABSORBED || !(M.vore_flags & ABSORBABLE)) //Negative. continue if(M.nutrition >= 100) //Drain them until there's no nutrients left. Slowly "absorb" them. diff --git a/code/modules/vore/eating/living.dm b/code/modules/vore/eating/living.dm index ca5ee0f476..6bc44e6489 100644 --- a/code/modules/vore/eating/living.dm +++ b/code/modules/vore/eating/living.dm @@ -1,17 +1,24 @@ ///////////////////// Mob Living ///////////////////// /mob/living var/vore_flags = 0 - var/showvoreprefs = TRUE // Determines if the mechanical vore preferences button will be displayed on the mob or not. - var/obj/belly/vore_selected // Default to no vore capability. - var/list/vore_organs = list() // List of vore containers inside a mob - var/vore_taste = null // What the character tastes like + // Determines if the mechanical vore preferences button will be displayed on the mob or not. + var/showvoreprefs = TRUE + /// Default to no vore capability. + var/obj/belly/vore_selected + /// List of vore containers inside a mob + var/list/vore_organs = list() + /// What the character tastes like + var/vore_taste = null + /// What the character smells like + var/vore_smell = null + /// Next time vore sounds get played for the prey, do not change manually as it is intended to be set automatically var/next_preyloop // // Hook for generic creation of stuff on new creatures // /hook/living_new/proc/vore_setup(mob/living/M) - add_verb(M, list(/mob/living/proc/preyloop_refresh, /mob/living/proc/lick, /mob/living/proc/escapeOOC)) + add_verb(M, list(/mob/living/proc/preyloop_refresh, /mob/living/proc/lick, /mob/living/proc/smell, /mob/living/proc/escapeOOC)) if(M.vore_flags & NO_VORE) //If the mob isn't supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach. return TRUE @@ -256,6 +263,7 @@ client.prefs.vore_flags = vore_flags // there's garbage data in here, but it doesn't matter client.prefs.vore_taste = vore_taste + client.prefs.vore_smell = vore_smell var/list/serialized = list() for(var/belly in vore_organs) @@ -264,6 +272,8 @@ client.prefs.belly_prefs = serialized + client.prefs.save_character() + return TRUE // @@ -274,8 +284,9 @@ to_chat(src,"You attempted to apply your vore prefs but somehow you're in this character without a client.prefs variable. Tell a dev.") return FALSE ENABLE_BITFIELD(vore_flags,VOREPREF_INIT) - COPY_SPECIFIC_BITFIELDS(vore_flags,client.prefs.vore_flags,DIGESTABLE | DEVOURABLE | FEEDING | LICKABLE) + COPY_SPECIFIC_BITFIELDS(vore_flags, client.prefs.vore_flags, DIGESTABLE | DEVOURABLE | FEEDING | LICKABLE | SMELLABLE | ABSORBABLE | MOBVORE) vore_taste = client.prefs.vore_taste + vore_smell = client.prefs.vore_smell release_vore_contents(silent = TRUE) QDEL_LIST(vore_organs) @@ -379,6 +390,56 @@ else taste_message += "a plain old normal [src]" return taste_message + +// +// Equally important as the above +// +/mob/living/proc/smell() + set name = "Smell Someone" + set category = "Vore" + set desc = "Smell someone nearby!" + + if(incapacitated(ignore_restraints = TRUE)) + to_chat(src, "You can't do that while incapacitated.") + return + if(!CheckActionCooldown()) + to_chat(src, "You can't do that so fast, slow down.") + return + + DelayNextAction(CLICK_CD_MELEE, flush = TRUE) + + var/list/smellable = list() + for(var/mob/living/L in view(1)) + if(L != src && (!L.ckey || L.client?.prefs.vore_flags & SMELLABLE) && Adjacent(L)) + LAZYADD(smellable, L) + for(var/mob/living/listed in smellable) + smellable[listed] = new /mutable_appearance(listed) + + if(!smellable) + return + + var/mob/living/sniffed = show_radial_menu(src, src, smellable, radius = 40, require_near = TRUE) + + if(QDELETED(sniffed) || (sniffed.ckey && !(sniffed.client?.prefs.vore_flags & SMELLABLE)) || !Adjacent(sniffed) || incapacitated(ignore_restraints = TRUE)) + return + + visible_message("[src] smells [sniffed]!","You smell [sniffed]. They smell like [sniffed.get_smell_message()].","Sniff!") + +/mob/living/proc/get_smell_message(allow_generic = TRUE, datum/species/mrace) + if(!vore_smell && !allow_generic) + return FALSE + + var/smell_message = "" + if(vore_smell && (vore_smell != "")) + smell_message += "[vore_smell]" + else + if(ishuman(src)) + var/mob/living/carbon/human/H = src + smell_message += "a normal [H.custom_species ? H.custom_species : H.dna.species]" + else + smell_message += "a plain old normal [src]" + return smell_message + // Check if an object is capable of eating things, based on vore_organs // /proc/has_vore_belly(var/mob/living/O) diff --git a/code/modules/vore/eating/vorepanel.dm b/code/modules/vore/eating/vorepanel.dm index aac8cbe745..a3adc89352 100644 --- a/code/modules/vore/eating/vorepanel.dm +++ b/code/modules/vore/eating/vorepanel.dm @@ -2,746 +2,730 @@ // Vore management panel for players // -#define BELLIES_MAX 20 +#define BELLIES_MAX 40 #define BELLIES_NAME_MIN 2 -#define BELLIES_NAME_MAX 24 +#define BELLIES_NAME_MAX 40 #define BELLIES_DESC_MAX 4096 +#define FLAVOR_MAX 400 + +/mob/living + var/datum/vore_look/vorePanel /mob/living/proc/insidePanel() set name = "Vore Panel" set category = "Vore" - var/datum/vore_look/picker_holder = new() - picker_holder.loop = picker_holder - picker_holder.selected = vore_selected + if(!vorePanel) + log_game("VORE: [src] ([type], \ref[src]) didn't have a vorePanel and tried to use the verb.") + vorePanel = new(src) - var/dat = picker_holder.gen_vui(src) - - picker_holder.popup = new(src, "insidePanel","Vore Panel", 450, 700, picker_holder) - picker_holder.popup.set_content(dat) - picker_holder.popup.open() - vore_flags |= OPEN_PANEL + vorePanel.ui_interact(src) /mob/living/proc/updateVRPanel() //Panel popup update call from belly events. - if(vore_flags & OPEN_PANEL) - var/datum/vore_look/picker_holder = new() - picker_holder.loop = picker_holder - picker_holder.selected = vore_selected - - var/dat = picker_holder.gen_vui(src) - - picker_holder.popup = new(src, "insidePanel","Vore Panel", 450, 700, picker_holder) - picker_holder.popup.set_content(dat) - picker_holder.popup.open() + SStgui.update_uis(vorePanel) // // Callback Handler for the Inside form // /datum/vore_look - var/obj/belly/selected - var/show_interacts = FALSE - var/datum/browser/popup - var/loop = null; // Magic self-reference to stop the handler from being GC'd before user takes action. + var/mob/living/host // Note, we do this in case we ever want to allow people to view others vore panels + var/unsaved_changes = FALSE + var/show_pictures = TRUE + +/datum/vore_look/New(mob/living/new_host) + if(istype(new_host)) + host = new_host + . = ..() /datum/vore_look/Destroy() - loop = null - selected = null - ..() //this is a must - return QDEL_HINT_HARDDEL + host = null + . = ..() -/datum/vore_look/Topic(href,href_list[]) - if (vp_interact(href, href_list)) - popup.set_content(gen_vui(usr)) - usr << output(popup.get_content(), "insidePanel.browser") +/datum/vore_look/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "VorePanel", "Vore Panel") + ui.open() -/datum/vore_look/proc/gen_vui(var/mob/living/user) - var/dat - dat += "Remember to toggle the vore mode, it's to the left of your combat toggle. Open mouth means you're voracious!
" - dat += "Remember that the prey is blind, use audible mode subtle messages to communicate to them with posts!
" - dat += "
" - var/atom/userloc = user.loc - if (isbelly(userloc)) - var/obj/belly/inside_belly = userloc - var/mob/living/eater = inside_belly.owner +// This looks weird, but all tgui_host is used for is state checking +// So this allows us to use the self_state just fine. +/datum/vore_look/ui_host(mob/user) + return host - //Don't display this part if we couldn't find the belly since could be held in hand. - if(inside_belly) - dat += "You are currently [(user.vore_flags & ABSORBED) ? "absorbed into " : "inside "] [eater]'s [inside_belly]!

" +// Note, in order to allow others to look at others vore panels, this state would need +// to be modified. +/datum/vore_look/ui_state(mob/user) + return GLOB.ui_vorepanel_state - if(inside_belly.desc) - dat += "[inside_belly.desc]

" +/datum/vore_look + var/static/list/nom_icons - if (inside_belly.contents.len > 1) - dat += "You can see the following around you:
" - for (var/atom/movable/O in inside_belly) - if(istype(O,/mob/living)) - var/mob/living/M = O - //That's just you - if(M == user) - continue +/datum/vore_look/proc/cached_nom_icon(atom/target) + LAZYINITLIST(nom_icons) - //That's an absorbed person you're checking - if(M.vore_flags & ABSORBED) - if(user.vore_flags & ABSORBED) - dat += "[O]" - continue - else - continue - - //Anything else - dat += "[O]​" - - //Zero-width space, for wrapping - dat += "​" + var/key = "" + if(isobj(target)) + key = "[target.type]" + else if(ismob(target)) + var/mob/M = target + key = "\ref[target][M.real_name]" + if(nom_icons[key]) + . = nom_icons[key] else - dat += "You aren't inside anyone." - - dat += "
" - - dat += "
    " - for(var/belly in user.vore_organs) - var/obj/belly/B = belly - if(B == selected) - dat += "
  1. [B.name]" - else - dat += "
  2. [B.name]" - var/spanstyle - switch(B.digest_mode) - if(DM_HOLD) - spanstyle = "" - if(DM_DIGEST) - spanstyle = "color:red;" - if(DM_HEAL) - spanstyle = "color:darkgreen;" - if(DM_NOISY) - spanstyle = "color:purple;" - if(DM_ABSORB) - spanstyle = "color:purple;" - if(DM_DRAGON) - spanstyle = "color:blue;" - - dat += " ([B.contents.len])
  3. " - - if(user.vore_organs.len < BELLIES_MAX) - dat += "
  4. New+
  5. " - dat += "
" - dat += "
" - - // Selected Belly (contents, configuration) - if(!selected) - dat += "No belly selected. Click one to select it." - else - if(selected.contents.len) - dat += "Contents: " - for(var/O in selected) - - //Mobs can be absorbed, so treat them separately from everything else - if(istype(O,/mob/living)) - var/mob/living/M = O - - //Absorbed gets special color OOoOOOOoooo - if(M.vore_flags & ABSORBED) - dat += "[O]" - continue - - //Anything else - dat += "[O]" - - //Zero-width space, for wrapping - dat += "​" - - //If there's more than one thing, add an [All] button - if(selected.contents.len > 1) - dat += "\[All\]" - - dat += "
" - - //Belly Name Button - dat += "Name:" - dat += " '[selected.name]'" - - //Belly Type button - dat += "
Is Fleshy:" - dat += "[selected.is_wet ? "Yes" : "No"]" - if(selected.is_wet) - dat += "
Internal loop for prey?:" - dat += "[selected.wet_loop ? "Yes" : "No"]" - - //Digest Mode Button - dat += "
Belly Mode:" - dat += " [selected.digest_mode]" - - //Belly verb - dat += "
Vore Verb:" - dat += " '[selected.vore_verb]'" - - //Inside flavortext - dat += "
Flavor Text:" - dat += " '[selected.desc]'" - - //Belly sound - dat += "
Vore Sound: [selected.vore_sound]" - dat += "Test" - - //Release sound - dat += "
Release Sound: [selected.release_sound]" - dat += "Test" - - //Belly messages - dat += "
Belly Messages" - - //Can belly taste? - dat += "
Can Taste:" - dat += " [selected.can_taste ? "Yes" : "No"]" - - //Minimum size prey must be to show up. - dat += "
Required examine size:" - dat += " [selected.bulge_size*100]%" - - //Belly escapability - dat += "
Belly Interactions ([selected.escapable ? "On" : "Off"])" - if(selected.escapable) - dat += "[show_interacts ? "Hide" : "Show"]" - - if(show_interacts && selected.escapable) - dat += "
" - dat += "Interaction Settings ?" - dat += "
Set Belly Escape Chance" - dat += " [selected.escapechance]%" - - dat += "
Set Belly Escape Time" - dat += " [selected.escapetime/10]s" - - //Special
here to add a gap - dat += "
" - dat += "
Set Belly Transfer Chance" - dat += " [selected.transferchance]%" - - dat += "
Set Belly Transfer Location" - dat += " [selected.transferlocation ? selected.transferlocation : "Disabled"]" - - //Special
here to add a gap - dat += "
" - dat += "
Set Belly Absorb Chance" - dat += " [selected.absorbchance]%" - - dat += "
Set Belly Digest Chance" - dat += " [selected.digestchance]%" - dat += "
" - - //Delete button - dat += "
Delete Belly" - - dat += "Set Flavor" - - dat += "
" - - //Under the last HR, save and stuff. - dat += "Save Prefs" - dat += "Refresh" - dat += "Reload Slot Prefs" - - dat += "
" - var/pref_on = "#173d15" - var/pref_off = "#990000" - dat += "
Toggle Digestable (Currently: [(user.vore_flags & DIGESTABLE) ? "ON" : "OFF"])" - dat += "
Toggle Devourable (Currently: [(user.vore_flags & DEVOURABLE) ? "ON" : "OFF"])" - dat += "
Toggle Feeding (Currently: [(user.vore_flags & FEEDING) ? "ON" : "OFF"])" - if(user.client.prefs) - dat += "
Toggle Licking (Currently: [(user.client.prefs.vore_flags & LICKABLE) ? "ON" : "OFF"])" - //Returns the dat html to the vore_look - return dat - -/datum/vore_look/proc/vp_interact(href, href_list) - var/mob/living/user = usr - for(var/H in href_list) - - if(href_list["close"]) - qdel(src) // Cleanup - user.vore_flags &= ~OPEN_PANEL - return - - if(href_list["show_int"]) - show_interacts = !show_interacts - return TRUE //Force update - - if(href_list["int_help"]) - alert("These control how your belly responds to someone using 'resist' while inside you. The percent chance to trigger each is listed below, \ - and you can change them to whatever you see fit. Setting them to 0% will disable the possibility of that interaction. \ - These only function as long as interactions are turned on in general. Keep in mind, the 'belly mode' interactions (digest/absorb) \ - will affect all prey in that belly, if one resists and triggers digestion/absorption. If multiple trigger at the same time, \ - only the first in the order of 'Escape > Transfer > Absorb > Digest' will occur.","Interactions Help") - return FALSE //Force update - - if(href_list["outsidepick"]) - var/atom/movable/tgt = locate(href_list["outsidepick"]) - var/obj/belly/OB = locate(href_list["outsidebelly"]) - if(!istype(OB)) - return - if(!(tgt in OB)) //Aren't here anymore, need to update menu. - return TRUE - var/intent = "Examine" - - if(istype(tgt,/mob/living)) - var/mob/living/M = tgt - intent = alert("What do you want to do to them?","Query","Examine","Help Out","Devour") - switch(intent) - if("Examine") //Examine a mob inside another mob - M.examine(user) - - if("Help Out") //Help the inside-mob out - if(user.stat || user.vore_flags & ABSORBED || M.vore_flags & ABSORBED) - to_chat(user,"You can't do that in your state!") - return TRUE - - to_chat(user,"You begin to push [M] to freedom!") - to_chat(M,"[usr] begins to push you to freedom!") - to_chat(M.loc,"Someone is trying to escape from inside you!") - sleep(50) - if(prob(33)) - OB.release_specific_contents(M) - to_chat(usr,"You manage to help [M] to safety!") - to_chat(M,"[user] pushes you free!") - to_chat(OB.owner,"[M] forces free of the confines of your body!") - else - to_chat(user,"[M] slips back down inside despite your efforts.") - to_chat(M," Even with [user]'s help, you slip back inside again.") - to_chat(OB.owner,"Your body efficiently shoves [M] back where they belong.") - - if("Devour") //Eat the inside mob - if(user.vore_flags & ABSORBED || user.stat) - to_chat(user,"You can't do that in your state!") - return TRUE - - if(!user.vore_selected) - to_chat(user,"Pick a belly on yourself first!") - return TRUE - - var/obj/belly/TB = user.vore_selected - to_chat(user,"You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!") - to_chat(M,"[user] begins to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!") - to_chat(OB.owner,"Someone inside you is eating someone else!") - - sleep(TB.nonhuman_prey_swallow_time) //Can't do after, in a stomach, weird things abound. - if((user in OB) && (M in OB)) //Make sure they're still here. - to_chat(user,"You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!") - to_chat(M,"[user] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!") - to_chat(OB.owner,"Someone inside you has eaten someone else!") - TB.nom_mob(M) - - else if(istype(tgt,/obj/item)) - var/obj/item/T = tgt - if(!(tgt in OB)) - //Doesn't exist anymore, update. - return TRUE - intent = alert("What do you want to do to that?","Query","Examine","Use Hand") - switch(intent) - if("Examine") - T.examine(user) - - if("Use Hand") - if(user.stat) - to_chat(user,"You can't do that in your state!") - return TRUE - - user.ClickOn(T) - sleep(5) //Seems to exit too fast for the panel to update - - if(href_list["insidepick"]) - var/intent - - //Handle the [All] choice. Ugh inelegant. Someone make this pretty. - if(href_list["pickall"]) - intent = alert("Eject all, Move all?","Query","Eject all","Cancel","Move all") - switch(intent) - if("Cancel") - return FALSE - - if("Eject all") - if(user.stat) - to_chat(user,"You can't do that in your state!") - return FALSE - - selected.release_all_contents() - - if("Move all") - if(user.stat) - to_chat(user,"You can't do that in your state!") - return FALSE - - var/obj/belly/choice = input("Move all where?","Select Belly") as null|anything in user.vore_organs - if(!choice) - return FALSE - - for(var/atom/movable/tgt in selected) - to_chat(tgt,"You're squished from [user]'s [lowertext(selected)] to their [lowertext(choice.name)]!") - selected.transfer_contents(tgt, choice, 1) - - var/atom/movable/tgt = locate(href_list["insidepick"]) - if(!(tgt in selected)) //Old menu, needs updating because they aren't really there. - return TRUE //Forces update - intent = "Examine" - intent = alert("Examine, Eject, Move? Examine if you want to leave this box.","Query","Examine","Eject","Move") - switch(intent) - if("Examine") - tgt.examine(user) - - if("Eject") - if(user.stat) - to_chat(user,"You can't do that in your state!") - return FALSE - - selected.release_specific_contents(tgt) - - if("Move") - if(user.stat) - to_chat(user,"You can't do that in your state!") - return FALSE - - var/obj/belly/choice = input("Move [tgt] where?","Select Belly") as null|anything in user.vore_organs - if(!choice || !(tgt in selected)) - return FALSE - - to_chat(tgt,"You're squished from [user]'s [lowertext(selected.name)] to their [lowertext(choice.name)]!") - selected.transfer_contents(tgt, choice) - - if(href_list["newbelly"]) - if(user.vore_organs.len >= BELLIES_MAX) - return FALSE - - var/new_name = html_encode(input(usr,"New belly's name:","New Belly") as text|null) - - var/failure_msg - if(length(new_name) > BELLIES_NAME_MAX || length(new_name) < BELLIES_NAME_MIN) - failure_msg = "Entered belly name length invalid (must be longer than [BELLIES_NAME_MIN], no more than than [BELLIES_NAME_MAX])." - // else if(whatever) //Next test here. - else - for(var/belly in user.vore_organs) - var/obj/belly/B = belly - if(lowertext(new_name) == lowertext(B.name)) - failure_msg = "No duplicate belly names, please." - break - - if(failure_msg) //Something went wrong. - alert(user,failure_msg,"Error!") - return FALSE - - var/obj/belly/NB = new(user) - NB.name = new_name - selected = NB - - if(href_list["bellypick"]) - selected = locate(href_list["bellypick"]) - user.vore_selected = selected - - //// - //Please keep these the same order they are on the panel UI for ease of coding - //// - if(href_list["b_name"]) - var/new_name = html_encode(input(usr,"Belly's new name:","New Name") as text|null) - - var/failure_msg - if(length(new_name) > BELLIES_NAME_MAX || length(new_name) < BELLIES_NAME_MIN) - failure_msg = "Entered belly name length invalid (must be longer than [BELLIES_NAME_MIN], no more than than [BELLIES_NAME_MAX])." - // else if(whatever) //Next test here. - else - for(var/belly in user.vore_organs) - var/obj/belly/B = belly - if(lowertext(new_name) == lowertext(B.name)) - failure_msg = "No duplicate belly names, please." - break - - if(failure_msg) //Something went wrong. - alert(user,failure_msg,"Error!") - return FALSE - - selected.name = new_name - - if(href_list["b_wetness"]) - selected.is_wet = !selected.is_wet - - if(href_list["b_wetloop"]) - selected.wet_loop = !selected.wet_loop - - if(href_list["b_mode"]) - var/list/menu_list = selected.digest_modes - - var/new_mode = input("Choose Mode (currently [selected.digest_mode])") as null|anything in menu_list - if(!new_mode) - return FALSE - selected.digest_mode = new_mode - - if(href_list["b_desc"]) - var/new_desc = html_encode(input(usr,"Belly Description ([BELLIES_DESC_MAX] char limit):","New Description",selected.desc) as message|null) - - if(new_desc) - new_desc = readd_quotes(new_desc) - if(length(new_desc) > BELLIES_DESC_MAX) - alert("Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error") - return FALSE - selected.desc = new_desc - else //Returned null - return FALSE - - if(href_list["b_msgs"]) - var/list/messages = list( - "Digest Message (to prey)", - "Digest Message (to you)", - "Struggle Message (outside)", - "Struggle Message (inside)", - "Examine Message (when full)", - "Reset All To Default" + . = icon2base64(getFlatIcon(target,defdir=SOUTH,no_anim=TRUE)) + nom_icons[key] = . + +/datum/vore_look/ui_data(mob/user) + var/list/data = list() + + if(!host) + return data + + data["unsaved_changes"] = unsaved_changes + data["show_pictures"] = show_pictures + + var/atom/hostloc = host.loc + var/list/inside = list() + if(isbelly(hostloc)) + var/obj/belly/inside_belly = hostloc + var/mob/living/pred = inside_belly.owner + + inside = list( + "absorbed" = host.vore_flags & ABSORBED, + "belly_name" = inside_belly.name, + "belly_mode" = inside_belly.digest_mode, + "desc" = inside_belly.desc || "No description.", + "pred" = pred, + "ref" = "\ref[inside_belly]", ) - alert(user,"Setting abusive or deceptive messages will result in a ban. Consider this your warning. Max 150 characters per message, max 10 messages per topic.","Really, don't.") - var/choice = input(user,"Select a type to modify. Messages from each topic are pulled at random when needed.","Pick Type") as null|anything in messages - var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name." + var/list/inside_contents = list() + for(var/atom/movable/O in inside_belly) + if(O == host) + continue - switch(choice) - if("Digest Message (to prey)") - var/new_message = input(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",selected.get_messages("dmp")) as message - if(new_message) - selected.set_messages(new_message,"dmp") + var/list/info = list( + "name" = "[O]", + "absorbed" = FALSE, + "stat" = 0, + "ref" = "\ref[O]", + "outside" = FALSE, + ) + if(show_pictures) + info["icon"] = cached_nom_icon(O) + if(isliving(O)) + var/mob/living/M = O + info["stat"] = M.stat + if(M.vore_flags & ABSORBED) + info["absorbed"] = TRUE + inside_contents.Add(list(info)) + inside["contents"] = inside_contents + data["inside"] = inside - if("Digest Message (to you)") - var/new_message = input(user,"These are sent to you when prey expires in you. Write them in 2nd person ('you feel X'). Avoid using %pred in this type."+help,"Digest Message (to you)",selected.get_messages("dmo")) as message - if(new_message) - selected.set_messages(new_message,"dmo") + var/list/our_bellies = list() + for(var/belly in host.vore_organs) + var/obj/belly/B = belly + our_bellies.Add(list(list( + "selected" = (B == host.vore_selected), + "name" = B.name, + "ref" = "\ref[B]", + "digest_mode" = B.digest_mode, + "contents" = LAZYLEN(B.contents), + ))) + data["our_bellies"] = our_bellies - if("Struggle Message (outside)") - var/new_message = input(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",selected.get_messages("smo")) as message - if(new_message) - selected.set_messages(new_message,"smo") + var/list/selected_list = null + if(host.vore_selected) + var/obj/belly/selected = host.vore_selected + selected_list = list( + "belly_name" = selected.name, + "is_wet" = selected.is_wet, + "wet_loop" = selected.wet_loop, + "mode" = selected.digest_mode, + "verb" = selected.vore_verb, + "desc" = selected.desc, + "sound" = selected.vore_sound, + "release_sound" = selected.release_sound, + "can_taste" = selected.can_taste, + "bulge_size" = selected.bulge_size, + ) - if("Struggle Message (inside)") - var/new_message = input(user,"These are sent to prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Struggle Message (inside)",selected.get_messages("smi")) as message - if(new_message) - selected.set_messages(new_message,"smi") + selected_list["escapable"] = selected.escapable + selected_list["interacts"] = list() + if(selected.escapable) + selected_list["interacts"]["escapechance"] = selected.escapechance + selected_list["interacts"]["escapetime"] = selected.escapetime + selected_list["interacts"]["transferchance"] = selected.transferchance + selected_list["interacts"]["transferlocation"] = selected.transferlocation + selected_list["interacts"]["absorbchance"] = selected.absorbchance + selected_list["interacts"]["digestchance"] = selected.digestchance - if("Examine Message (when full)") - var/new_message = input(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",selected.get_messages("em")) as message - if(new_message) - selected.set_messages(new_message,"em") + var/list/selected_contents = list() + for(var/O in selected) + var/list/info = list( + "name" = "[O]", + "absorbed" = FALSE, + "stat" = 0, + "ref" = "\ref[O]", + "outside" = TRUE, + ) + if(show_pictures) + info["icon"] = cached_nom_icon(O) + if(isliving(O)) + var/mob/living/M = O + info["stat"] = M.stat + if(M.vore_flags & ABSORBED) + info["absorbed"] = TRUE + selected_contents.Add(list(info)) + selected_list["contents"] = selected_contents - if("Reset All To Default") - var/confirm = alert(user,"This will delete any custom messages. Are you sure?","Confirmation","DELETE","Cancel") - if(confirm == "DELETE") - selected.digest_messages_prey = initial(selected.digest_messages_prey) - selected.digest_messages_owner = initial(selected.digest_messages_owner) - selected.struggle_messages_outside = initial(selected.struggle_messages_outside) - selected.struggle_messages_inside = initial(selected.struggle_messages_inside) + data["selected"] = selected_list + data["prefs"] = list( + "digestable" = CHECK_BITFIELD(host.vore_flags, DIGESTABLE), + "devourable" = CHECK_BITFIELD(host.vore_flags, DEVOURABLE), + "feeding" = CHECK_BITFIELD(host.vore_flags, FEEDING), + "absorbable" = CHECK_BITFIELD(host.vore_flags, ABSORBABLE), + "allowmobvore" = CHECK_BITFIELD(host.vore_flags, MOBVORE), + "vore_sounds" = CHECK_BITFIELD(host.client.prefs.cit_toggles, EATING_NOISES), + "digestion_sounds" = CHECK_BITFIELD(host.client.prefs.cit_toggles, DIGESTION_NOISES), + "lickable" = CHECK_BITFIELD(host.vore_flags, LICKABLE), + "smellable" = CHECK_BITFIELD(host.vore_flags, SMELLABLE), + ) - if(href_list["b_verb"]) - var/new_verb = html_encode(input(usr,"New verb when eating (infinitive tense, e.g. nom or swallow):","New Verb") as text|null) + return data - if(length(new_verb) > BELLIES_NAME_MAX || length(new_verb) < BELLIES_NAME_MIN) - alert("Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error") - return FALSE +/datum/vore_look/ui_act(action, params) + if(..()) + return TRUE - selected.vore_verb = new_verb + switch(action) + if("show_pictures") + show_pictures = !show_pictures + return TRUE + if("int_help") + tgui_alert(usr, "These control how your belly responds to someone using 'resist' while inside you. The percent chance to trigger each is listed below, \ + and you can change them to whatever you see fit. Setting them to 0% will disable the possibility of that interaction. \ + These only function as long as interactions are turned on in general. Keep in mind, the 'belly mode' interactions (digest/absorb) \ + will affect all prey in that belly, if one resists and triggers digestion/absorption. If multiple trigger at the same time, \ + only the first in the order of 'Escape > Transfer > Absorb > Digest' will occur.","Interactions Help") + return TRUE - if(href_list["b_release"]) - var/choice = input(user,"Currently set to [selected.release_sound]","Select Sound") as null|anything in GLOB.pred_release_sounds + // Host is inside someone else, and is trying to interact with something else inside that person. + if("pick_from_inside") + return pick_from_inside(usr, params) - if(!choice) - return + // Host is trying to interact with something in host's belly. + if("pick_from_outside") + return pick_from_outside(usr, params) - selected.release_sound = choice - - if(href_list["b_releasesoundtest"]) - var/sound/releasetest = GLOB.prey_release_sounds[selected.release_sound] - if(releasetest) - SEND_SOUND(user, releasetest) - - if(href_list["b_sound"]) - var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in GLOB.pred_vore_sounds - - if(!choice) - return - - selected.vore_sound = choice - - if(href_list["b_soundtest"]) - var/sound/voretest = GLOB.prey_vore_sounds[selected.vore_sound] - if(voretest) - SEND_SOUND(user, voretest) - - if(href_list["b_tastes"]) - selected.can_taste = !selected.can_taste - - if(href_list["b_bulge_size"]) - var/new_bulge = input(user, "Choose the required size prey must be to show up on examine, ranging from 25% to 200% Set this to 0 for no text on examine.", "Set Belly Examine Size.") as num|null - if(new_bulge == null) - return - if(new_bulge == 0) //Disable. - selected.bulge_size = 0 - to_chat(user,"Your stomach will not be seen on examine.") - else if (!ISINRANGE(new_bulge,25,200)) - selected.bulge_size = 0.25 //Set it to the default. - to_chat(user,"Invalid size.") - else if(new_bulge) - selected.bulge_size = (new_bulge/100) - - if(href_list["b_escapable"]) - if(selected.escapable == FALSE) //Possibly escapable and special interactions. - selected.escapable = TRUE - to_chat(usr,"Prey now have special interactions with your [lowertext(selected.name)] depending on your settings.") - else if(selected.escapable == TRUE) //Never escapable. - selected.escapable = FALSE - to_chat(usr,"Prey will not be able to have special interactions with your [lowertext(selected.name)].") - show_interacts = FALSE //Force the hiding of the panel - else - alert("Something went wrong. Your stomach will now not have special interactions. Press the button enable them again and tell a dev.","Error") //If they somehow have a varable that's not 0 or 1 - selected.escapable = FALSE - show_interacts = FALSE //Force the hiding of the panel - - if(href_list["b_escapechance"]) - var/escape_chance_input = input(user, "Set prey escape chance on resist (as %)", "Prey Escape Chance") as num|null - if(!isnull(escape_chance_input)) //These have to be 'null' because both cancel and 0 are valid, separate options - selected.escapechance = sanitize_integer(escape_chance_input, 0, 100, initial(selected.escapechance)) - - if(href_list["b_escapetime"]) - var/escape_time_input = input(user, "Set number of seconds for prey to escape on resist (1-60)", "Prey Escape Time") as num|null - if(!isnull(escape_time_input)) - selected.escapetime = sanitize_integer(escape_time_input*10, 10, 600, initial(selected.escapetime)) - - if(href_list["b_transferchance"]) - var/transfer_chance_input = input(user, "Set belly transfer chance on resist (as %). You must also set the location for this to have any effect.", "Prey Escape Time") as num|null - if(!isnull(transfer_chance_input)) - selected.transferchance = sanitize_integer(transfer_chance_input, 0, 100, initial(selected.transferchance)) - - if(href_list["b_transferlocation"]) - var/obj/belly/choice = input("Where do you want your [lowertext(selected.name)] to lead if prey resists?","Select Belly") as null|anything in (user.vore_organs + "None - Remove" - selected) - - if(!choice) //They cancelled, no changes - return FALSE - else if(choice == "None - Remove") - selected.transferlocation = null - else - selected.transferlocation = choice.name - - if(href_list["b_absorbchance"]) - var/absorb_chance_input = input(user, "Set belly absorb mode chance on resist (as %)", "Prey Absorb Chance") as num|null - if(!isnull(absorb_chance_input)) - selected.absorbchance = sanitize_integer(absorb_chance_input, 0, 100, initial(selected.absorbchance)) - - if(href_list["b_digestchance"]) - var/digest_chance_input = input(user, "Set belly digest mode chance on resist (as %)", "Prey Digest Chance") as num|null - if(!isnull(digest_chance_input)) - selected.digestchance = sanitize_integer(digest_chance_input, 0, 100, initial(selected.digestchance)) - - if(href_list["b_del"]) - var/alert = alert("Are you sure you want to delete your [lowertext(selected.name)]?","Confirmation","Delete","Cancel") - if(!alert == "Delete") - return FALSE - - var/failure_msg = "" - - var/dest_for //Check to see if it's the destination of another vore organ. - for(var/belly in user.vore_organs) - var/obj/belly/B = belly - if(B.transferlocation == selected) - dest_for = B.name - failure_msg += "This is the destiantion for at least '[dest_for]' belly transfers. Remove it as the destination from any bellies before deleting it. " - break - - if(selected.contents.len) - failure_msg += "You cannot delete bellies with contents! " //These end with spaces, to be nice looking. Make sure you do the same. - if(selected.immutable) - failure_msg += "This belly is marked as undeletable. " - if(user.vore_organs.len == 1) - failure_msg += "You must have at least one belly. " - - if(failure_msg) - alert(user,failure_msg,"Error!") - return FALSE - - qdel(selected) - selected = user.vore_organs[1] - user.vore_selected = user.vore_organs[1] - - if(href_list["saveprefs"]) - if(!(user.client?.prefs)) - return FALSE - if(!user.copy_to_prefs_vr() || !user.client.prefs.save_character()) - to_chat(user, "Belly Preferences not saved!") - log_admin("Could not save vore prefs on USER: [user].") - else - to_chat(user, "Belly Preferences were saved!") - - if(href_list["applyprefs"]) - var/alert = alert("Are you sure you want to reload the current slot preferences? This will remove your current vore organs and eject their contents.","Confirmation","Reload","Cancel") - if(!alert == "Reload") - return FALSE - if(!user.copy_from_prefs_vr()) - alert("ERROR: Vore preferences failed to apply!","Error") - else - to_chat(user,"Vore preferences applied from active slot!") - - if(href_list["setflavor"]) - var/new_flavor = html_encode(input(usr,"What your character tastes like (40ch limit). This text will be printed to the pred after 'X tastes of...' so just put something like 'strawberries and cream':","Character Flavor",user.vore_taste) as text|null) - if(!new_flavor) - return FALSE - - new_flavor = readd_quotes(new_flavor) - if(length(new_flavor) > MAX_TASTE_LEN) - alert("Entered flavor/taste text too long. [MAX_TASTE_LEN] character limit.","Error!") - return FALSE - user.vore_taste = new_flavor - - if(href_list["toggledg"]) - var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable to all mobs. Digesting you is currently: [(user.vore_flags & DIGESTABLE) ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion") - if(!user || !user.client) - return - switch(choice) - if("Cancel") + if("newbelly") + if(host.vore_organs.len >= BELLIES_MAX) return FALSE - if("Allow Digestion") - user.vore_flags |= DIGESTABLE - user.client.prefs.vore_flags |= DIGESTABLE - if("Prevent Digestion") - user.vore_flags &= ~DIGESTABLE - user.client.prefs.vore_flags &= ~DIGESTABLE - if(href_list["toggledvor"]) - var/choice = alert(user, "This button is for those who don't like vore at all. Devouring you is currently: [(user.vore_flags & DEVOURABLE) ? "Allowed" : "Prevented"]", "", "Allow Devourment", "Cancel", "Prevent Devourment") - if(!user || !user.client) - return - switch(choice) - if("Cancel") + var/new_name = html_encode(input(usr,"New belly's name:","New Belly") as text|null) + + var/failure_msg + if(length(new_name) > BELLIES_NAME_MAX || length(new_name) < BELLIES_NAME_MIN) + failure_msg = "Entered belly name length invalid (must be longer than [BELLIES_NAME_MIN], no more than than [BELLIES_NAME_MAX])." + // else if(whatever) //Next test here. + else + for(var/belly in host.vore_organs) + var/obj/belly/B = belly + if(lowertext(new_name) == lowertext(B.name)) + failure_msg = "No duplicate belly names, please." + break + + if(failure_msg) //Something went wrong. + tgui_alert_async(usr, failure_msg, "Error!") + return TRUE + + var/obj/belly/NB = new(host) + NB.name = new_name + host.vore_selected = NB + unsaved_changes = TRUE + return TRUE + + if("bellypick") + host.vore_selected = locate(params["bellypick"]) + return TRUE + if("move_belly") + var/dir = text2num(params["dir"]) + if(LAZYLEN(host.vore_organs) <= 1) + to_chat(usr, "You can't sort bellies with only one belly to sort...") + return TRUE + + var/current_index = host.vore_organs.Find(host.vore_selected) + if(current_index) + var/new_index = clamp(current_index + dir, 1, LAZYLEN(host.vore_organs)) + host.vore_organs.Swap(current_index, new_index) + unsaved_changes = TRUE + return TRUE + + if("set_attribute") + return set_attr(usr, params) + + if("saveprefs") + if(!host.copy_to_prefs_vr()) + tgui_alert_async(usr, "Belly Preferences not saved!", "Error") + log_admin("Could not save vore prefs on USER: [usr].") + else + to_chat(usr, "Belly Preferences were saved!") + unsaved_changes = FALSE + return TRUE + if("reloadprefs") + var/alert = tgui_alert(usr, "Are you sure you want to reload character slot preferences? This will remove your current vore organs and eject their contents.","Confirmation",list("Reload","Cancel")) + if(alert != "Reload") return FALSE - if("Allow Devourment") - user.vore_flags |= DEVOURABLE - user.client.prefs.vore_flags |= DEVOURABLE - if("Prevent Devourment") - user.vore_flags &= ~DEVOURABLE - user.client.prefs.vore_flags &= ~DEVOURABLE - - if(href_list["toggledfeed"]) - var/choice = alert(user, "This button is to toggle your ability to be fed to others. Feeding predators is currently: [(user.vore_flags & FEEDING) ? "Allowed" : "Prevented"]", "", "Allow Feeding", "Cancel", "Prevent Feeding") - if(!user || !user.client) - return - switch(choice) - if("Cancel") + if(!host.copy_from_prefs_vr()) + tgui_alert_async(usr, "ERROR: Virgo-specific preferences failed to apply!","Error") + else + to_chat(usr, "Vore preferences applied from active slot!") + unsaved_changes = FALSE + return TRUE + if("setflavor") + var/new_flavor = html_encode(input(usr,"What your character tastes like (400ch limit). This text will be printed to the pred after 'X tastes of...' so just put something like 'strawberries and cream':","Character Flavor",host.vore_taste) as text|null) + if(!new_flavor) return FALSE - if("Allow Feeding") - user.vore_flags |= FEEDING - user.client.prefs.vore_flags |= FEEDING - if("Prevent Feeding") - user.vore_flags &= ~FEEDING - user.client.prefs.vore_flags &= ~FEEDING - if(href_list["toggledlickable"]) - var/choice = alert(user, "This button is to toggle your ability to be licked. Being licked is currently: [(user.client.prefs.vore_flags & LICKABLE) ? "Allowed" : "Prevented"]", "", "Allow Licking", "Cancel", "Prevent Licking") - if(!user || !user.client) - return - switch(choice) - if("Cancel") + new_flavor = readd_quotes(new_flavor) + if(length(new_flavor) > FLAVOR_MAX) + tgui_alert_async(usr, "Entered flavor/taste text too long. [FLAVOR_MAX] character limit.","Error!") + return FALSE + host.vore_taste = new_flavor + unsaved_changes = TRUE + return TRUE + if("setsmell") + var/new_smell = html_encode(input(usr,"What your character smells like (400ch limit). This text will be printed to the pred after 'X smells of...' so just put something like 'strawberries and cream':","Character Smell",host.vore_smell) as text|null) + if(!new_smell) return FALSE - if("Allow Licking") - user.client.prefs.vore_flags |= LICKABLE - if("Prevent Licking") - user.client.prefs.vore_flags &= ~LICKABLE - //Refresh when interacted with, returning 1 makes vore_look.Topic update - return TRUE + new_smell = readd_quotes(new_smell) + if(length(new_smell) > FLAVOR_MAX) + tgui_alert_async(usr, "Entered perfume/smell text too long. [FLAVOR_MAX] character limit.","Error!") + return FALSE + host.vore_smell = new_smell + unsaved_changes = TRUE + return TRUE + if("toggle_digest") + TOGGLE_BITFIELD(host.vore_flags, DIGESTABLE) + if(host.client.prefs) + COPY_SPECIFIC_BITFIELDS(host.client.prefs.vore_flags, host.vore_flags, DIGESTABLE) + unsaved_changes = TRUE + return TRUE + if("toggle_devour") + TOGGLE_BITFIELD(host.vore_flags, DEVOURABLE) + if(host.client.prefs) + COPY_SPECIFIC_BITFIELDS(host.client.prefs.vore_flags, host.vore_flags, DEVOURABLE) + unsaved_changes = TRUE + return TRUE + if("toggle_feed") + TOGGLE_BITFIELD(host.vore_flags, FEEDING) + if(host.client.prefs) + COPY_SPECIFIC_BITFIELDS(host.client.prefs.vore_flags, host.vore_flags, FEEDING) + unsaved_changes = TRUE + return TRUE + if("toggle_absorbable") + TOGGLE_BITFIELD(host.vore_flags, ABSORBABLE) + if(host.client.prefs) + COPY_SPECIFIC_BITFIELDS(host.client.prefs.vore_flags, host.vore_flags, ABSORBABLE) + unsaved_changes = TRUE + return TRUE + if("toggle_mobvore") + TOGGLE_BITFIELD(host.vore_flags, MOBVORE) + if(host.client.prefs) + COPY_SPECIFIC_BITFIELDS(host.client.prefs.vore_flags, host.vore_flags, MOBVORE) + unsaved_changes = TRUE + return TRUE + if("toggle_vore_sounds") + TOGGLE_BITFIELD(host.client.prefs.cit_toggles, EATING_NOISES) + unsaved_changes = TRUE + return TRUE + if("toggle_digestion_sounds") + TOGGLE_BITFIELD(host.client.prefs.cit_toggles, DIGESTION_NOISES) + unsaved_changes = TRUE + return TRUE + if("toggle_lickable") + TOGGLE_BITFIELD(host.vore_flags, LICKABLE) + unsaved_changes = TRUE + return TRUE + if("toggle_smellable") + TOGGLE_BITFIELD(host.vore_flags, SMELLABLE) + unsaved_changes = TRUE + return TRUE + +/datum/vore_look/proc/pick_from_inside(mob/user, params) + var/atom/movable/target = locate(params["pick"]) + var/obj/belly/OB = locate(params["belly"]) + + if(!(target in OB)) + return TRUE // Aren't here anymore, need to update menu + + var/intent = "Examine" + if(isliving(target)) + intent = tgui_alert(usr, "What do you want to do to them?","Query",list("Examine","Help Out","Devour")) + + else if(istype(target, /obj/item)) + intent = tgui_alert(usr, "What do you want to do to that?","Query",list("Examine","Use Hand")) + + switch(intent) + if("Examine") //Examine a mob inside another mob + var/list/results = target.examine(host) + if(!results || !results.len) + results = list("You were unable to examine that. Tell a developer!") + to_chat(user, jointext(results, "
")) + return TRUE + + if("Use Hand") + if(host.stat) + to_chat(user, "You can't do that in your state!") + return TRUE + + host.ClickOn(target) + return TRUE + + if(!isliving(target)) + return + + var/mob/living/M = target + switch(intent) + if("Help Out") //Help the inside-mob out + if(host.stat || host.vore_flags & ABSORBED || M.vore_flags & ABSORBED) + to_chat(user, "You can't do that in your state!") + return TRUE + + to_chat(user,"You begin to push [M] to freedom!") + to_chat(M,"[host] begins to push you to freedom!") + to_chat(M.loc,"Someone is trying to escape from inside you!") + sleep(50) + if(prob(33)) + OB.release_specific_contents(M) + to_chat(user,"You manage to help [M] to safety!") + to_chat(M,"[host] pushes you free!") + to_chat(OB.owner,"[M] forces free of the confines of your body!") + else + to_chat(user,"[M] slips back down inside despite your efforts.") + to_chat(M," Even with [host]'s help, you slip back inside again.") + to_chat(OB.owner,"Your body efficiently shoves [M] back where they belong.") + return TRUE + + if("Devour") //Eat the inside mob + if(host.stat || host.vore_flags & ABSORBED) + to_chat(user,"You can't do that in your state!") + return TRUE + + if(!host.vore_selected) + to_chat(user,"Pick a belly on yourself first!") + return TRUE + + var/obj/belly/TB = host.vore_selected + to_chat(user,"You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!") + to_chat(M,"[host] begins to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!") + to_chat(OB.owner,"Someone inside you is eating someone else!") + + sleep(TB.nonhuman_prey_swallow_time) //Can't do after, in a stomach, weird things abound. + if((host in OB) && (M in OB)) //Make sure they're still here. + to_chat(user,"You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!") + to_chat(M,"[host] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!") + to_chat(OB.owner,"Someone inside you has eaten someone else!") + TB.nom_mob(M) + +/datum/vore_look/proc/pick_from_outside(mob/user, params) + var/intent + + //Handle the [All] choice. Ugh inelegant. Someone make this pretty. + if(params["pickall"]) + intent = tgui_alert(usr, "Eject all, Move all?","Query",list("Eject all","Cancel","Move all")) + switch(intent) + if("Cancel") + return TRUE + + if("Eject all") + if(host.stat) + to_chat(user,"You can't do that in your state!") + return TRUE + + host.vore_selected.release_all_contents() + return TRUE + + if("Move all") + if(host.stat) + to_chat(user,"You can't do that in your state!") + return TRUE + + var/obj/belly/choice = tgui_input_list(usr, "Move all where?","Select Belly", host.vore_organs) + if(!choice) + return FALSE + + for(var/atom/movable/target in host.vore_selected) + to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected)] to their [lowertext(choice.name)]!") + host.vore_selected.transfer_contents(target, choice, 1) + return TRUE + return + + var/atom/movable/target = locate(params["pick"]) + if(!(target in host.vore_selected)) + return TRUE // Not in our X anymore, update UI + var/list/available_options = list("Examine", "Eject", "Move") + if(ishuman(target)) + available_options += "Transform" + intent = tgui_alert(user, "What would you like to do with [target]?", "Vore Pick", available_options) + switch(intent) + if("Examine") + var/list/results = target.examine(host) + if(!results || !results.len) + results = list("You were unable to examine that. Tell a developer!") + to_chat(user, jointext(results, "
")) + return TRUE + + if("Eject") + if(host.stat) + to_chat(user,"You can't do that in your state!") + return TRUE + + host.vore_selected.release_specific_contents(target) + return TRUE + + if("Move") + if(host.stat) + to_chat(user,"You can't do that in your state!") + return TRUE + + var/obj/belly/choice = tgui_input_list(usr, "Move [target] where?","Select Belly", host.vore_organs) + if(!choice || !(target in host.vore_selected)) + return TRUE + + to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!") + host.vore_selected.transfer_contents(target, choice) + return TRUE + + if("Transform") + if(host.stat) + to_chat(user,"You can't do that in your state!") + return TRUE + + var/mob/living/carbon/human/H = target + if(!istype(H)) + return + + return TRUE + +/datum/vore_look/proc/set_attr(mob/user, params) + if(!host.vore_selected) + tgui_alert_async(usr, "No belly selected to modify.") + return FALSE + + var/attr = params["attribute"] + switch(attr) + if("b_name") + var/new_name = html_encode(input(usr,"Belly's new name:","New Name") as text|null) + + var/failure_msg + if(length(new_name) > BELLIES_NAME_MAX || length(new_name) < BELLIES_NAME_MIN) + failure_msg = "Entered belly name length invalid (must be longer than [BELLIES_NAME_MIN], no more than than [BELLIES_NAME_MAX])." + // else if(whatever) //Next test here. + else + for(var/belly in host.vore_organs) + var/obj/belly/B = belly + if(lowertext(new_name) == lowertext(B.name)) + failure_msg = "No duplicate belly names, please." + break + + if(failure_msg) //Something went wrong. + tgui_alert_async(user,failure_msg,"Error!") + return FALSE + + host.vore_selected.name = new_name + . = TRUE + if("b_wetness") + host.vore_selected.is_wet = !host.vore_selected.is_wet + . = TRUE + if("b_wetloop") + host.vore_selected.wet_loop = !host.vore_selected.wet_loop + . = TRUE + if("b_mode") + var/list/menu_list = host.vore_selected.digest_modes.Copy() + var/new_mode = tgui_input_list(usr, "Choose Mode (currently [host.vore_selected.digest_mode])", "Mode Choice", menu_list) + if(!new_mode) + return FALSE + + host.vore_selected.digest_mode = new_mode + . = TRUE + if("b_desc") + var/new_desc = html_encode(input(usr,"Belly Description ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.desc) as message|null) + + if(new_desc) + new_desc = readd_quotes(new_desc) + if(length(new_desc) > BELLIES_DESC_MAX) + tgui_alert_async(usr, "Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error") + return FALSE + host.vore_selected.desc = new_desc + . = TRUE + if("b_msgs") + tgui_alert(user,"Setting abusive or deceptive messages will result in a ban. Consider this your warning. Max 150 characters per message (500 for idle messages), max 10 messages per topic.","Really, don't.") // Should remain tgui_alert() (blocking) + var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. '%count' will be replaced with the number of anything in your belly (will not work for absorbed examine). '%countprey' will be replaced with the number of living prey in your belly (or absorbed prey for absorbed examine)." + switch(params["msgtype"]) + if("dmp") + var/new_message = input(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",host.vore_selected.get_messages("dmp")) as message + if(new_message) + host.vore_selected.set_messages(new_message,"dmp") + + if("dmo") + var/new_message = input(user,"These are sent to you when prey expires in you. Write them in 2nd person ('you feel X'). Avoid using %pred in this type."+help,"Digest Message (to you)",host.vore_selected.get_messages("dmo")) as message + if(new_message) + host.vore_selected.set_messages(new_message,"dmo") + + if("smo") + var/new_message = input(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",host.vore_selected.get_messages("smo")) as message + if(new_message) + host.vore_selected.set_messages(new_message,"smo") + + if("smi") + var/new_message = input(user,"These are sent to prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Struggle Message (inside)",host.vore_selected.get_messages("smi")) as message + if(new_message) + host.vore_selected.set_messages(new_message,"smi") + + if("em") + var/new_message = input(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",host.vore_selected.get_messages("em")) as message + if(new_message) + host.vore_selected.set_messages(new_message,"em") + + if("reset") + var/confirm = tgui_alert(user,"This will delete any custom messages. Are you sure?","Confirmation",list("Cancel","DELETE")) + if(confirm == "DELETE") + host.vore_selected.digest_messages_prey = initial(host.vore_selected.digest_messages_prey) + host.vore_selected.digest_messages_owner = initial(host.vore_selected.digest_messages_owner) + host.vore_selected.struggle_messages_outside = initial(host.vore_selected.struggle_messages_outside) + host.vore_selected.struggle_messages_inside = initial(host.vore_selected.struggle_messages_inside) + host.vore_selected.examine_messages = initial(host.vore_selected.examine_messages) + host.vore_selected.emote_lists = initial(host.vore_selected.emote_lists) + . = TRUE + if("b_verb") + var/new_verb = html_encode(input(usr,"New verb when eating (infinitive tense, e.g. nom or swallow):","New Verb") as text|null) + + if(length(new_verb) > BELLIES_NAME_MAX || length(new_verb) < BELLIES_NAME_MIN) + tgui_alert_async(usr, "Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error") + return FALSE + + host.vore_selected.vore_verb = new_verb + . = TRUE + if("b_release") + var/choice = tgui_input_list(user,"Currently set to [host.vore_selected.release_sound]","Select Sound", GLOB.pred_release_sounds) + + if(!choice) + return FALSE + + host.vore_selected.release_sound = choice + . = TRUE + if("b_releasesoundtest") + var/sound/releasetest = GLOB.pred_release_sounds[host.vore_selected.release_sound] + + if(releasetest) + SEND_SOUND(user, releasetest) + . = FALSE //Testing sound, no changes. + if("b_sound") + var/choice = tgui_input_list(user,"Currently set to [host.vore_selected.vore_sound]","Select Sound", GLOB.prey_vore_sounds) + + if(!choice) + return FALSE + + host.vore_selected.vore_sound = choice + . = TRUE + if("b_soundtest") + var/sound/voretest = GLOB.prey_vore_sounds[host.vore_selected.vore_sound] + if(voretest) + SEND_SOUND(user, voretest) + . = FALSE //Testing sound, no changes. + if("b_tastes") + host.vore_selected.can_taste = !host.vore_selected.can_taste + . = TRUE + if("b_bulge_size") + var/new_bulge = input(user, "Choose the required size prey must be to show up on examine, ranging from 25% to 200% Set this to 0 for no text on examine.", "Set Belly Examine Size.") as num|null + if(new_bulge == null) + return FALSE + if(new_bulge == 0) //Disable. + host.vore_selected.bulge_size = 0 + to_chat(user,"Your stomach will not be seen on examine.") + else if (!ISINRANGE(new_bulge,25,200)) + host.vore_selected.bulge_size = 0.25 //Set it to the default. + to_chat(user,"Invalid size.") + else if(new_bulge) + host.vore_selected.bulge_size = (new_bulge/100) + . = TRUE + if("b_escapable") + if(host.vore_selected.escapable == 0) //Possibly escapable and special interactions. + host.vore_selected.escapable = 1 + to_chat(usr,"Prey now have special interactions with your [lowertext(host.vore_selected.name)] depending on your settings.") + else if(host.vore_selected.escapable == 1) //Never escapable. + host.vore_selected.escapable = 0 + to_chat(usr,"Prey will not be able to have special interactions with your [lowertext(host.vore_selected.name)].") + else + tgui_alert_async(usr, "Something went wrong. Your stomach will now not have special interactions. Press the button enable them again and tell a dev.","Error") //If they somehow have a varable that's not 0 or 1 + host.vore_selected.escapable = 0 + . = TRUE + if("b_escapechance") + var/escape_chance_input = input(user, "Set prey escape chance on resist (as %)", "Prey Escape Chance") as num|null + if(!isnull(escape_chance_input)) //These have to be 'null' because both cancel and 0 are valid, separate options + host.vore_selected.escapechance = sanitize_integer(escape_chance_input, 0, 100, initial(host.vore_selected.escapechance)) + . = TRUE + if("b_escapetime") + var/escape_time_input = input(user, "Set number of seconds for prey to escape on resist (1-60)", "Prey Escape Time") as num|null + if(!isnull(escape_time_input)) + host.vore_selected.escapetime = sanitize_integer(escape_time_input*10, 10, 600, initial(host.vore_selected.escapetime)) + . = TRUE + if("b_transferchance") + var/transfer_chance_input = input(user, "Set belly transfer chance on resist (as %). You must also set the location for this to have any effect.", "Prey Escape Time") as num|null + if(!isnull(transfer_chance_input)) + host.vore_selected.transferchance = sanitize_integer(transfer_chance_input, 0, 100, initial(host.vore_selected.transferchance)) + . = TRUE + if("b_transferlocation") + var/obj/belly/choice = tgui_input_list(usr, "Where do you want your [lowertext(host.vore_selected.name)] to lead if prey resists?","Select Belly", (host.vore_organs + "None - Remove" - host.vore_selected)) + + if(!choice) //They cancelled, no changes + return FALSE + else if(choice == "None - Remove") + host.vore_selected.transferlocation = null + else + host.vore_selected.transferlocation = choice.name + . = TRUE + if("b_absorbchance") + var/absorb_chance_input = input(user, "Set belly absorb mode chance on resist (as %)", "Prey Absorb Chance") as num|null + if(!isnull(absorb_chance_input)) + host.vore_selected.absorbchance = sanitize_integer(absorb_chance_input, 0, 100, initial(host.vore_selected.absorbchance)) + . = TRUE + if("b_digestchance") + var/digest_chance_input = input(user, "Set belly digest mode chance on resist (as %)", "Prey Digest Chance") as num|null + if(!isnull(digest_chance_input)) + host.vore_selected.digestchance = sanitize_integer(digest_chance_input, 0, 100, initial(host.vore_selected.digestchance)) + . = TRUE + if("b_del") + var/alert = tgui_alert(usr, "Are you sure you want to delete your [lowertext(host.vore_selected.name)]?","Confirmation",list("Cancel","Delete")) + if(!(alert == "Delete")) + return FALSE + + var/failure_msg = "" + + var/dest_for //Check to see if it's the destination of another vore organ. + for(var/belly in host.vore_organs) + var/obj/belly/B = belly + if(B.transferlocation == host.vore_selected) + dest_for = B.name + failure_msg += "This is the destiantion for at least '[dest_for]' belly transfers. Remove it as the destination from any bellies before deleting it. " + break + + if(host.vore_selected.contents.len) + failure_msg += "You cannot delete bellies with contents! " //These end with spaces, to be nice looking. Make sure you do the same. + if(host.vore_selected.immutable) + failure_msg += "This belly is marked as undeletable. " + if(host.vore_organs.len == 1) + failure_msg += "You must have at least one belly. " + + if(failure_msg) + tgui_alert_async(user,failure_msg,"Error!") + return FALSE + + qdel(host.vore_selected) + host.vore_selected = host.vore_organs[1] + . = TRUE + + if(.) + unsaved_changes = TRUE diff --git a/html/changelog.html b/html/changelog.html index 00874e649c..80b12a5df9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,44 @@ -->
+

19 July 2021

+

Arturlang updated:

+
    +
  • The crafting button should no longer silently make more copies of itself on reconects
  • +
  • There are no longer two copies of the crafting component.
  • +
  • There is no longer a rogue d in tracer.dm tweak: Everything in Misc was moved to Miscelanious in the crafting menu, and Misc was nuked from orbit. Nobody will miss you.
  • +
+

MrJWhit updated:

+
    +
  • Fixes a memory leak, there's a good chance that it's the same one that killed kilo.
  • +
+

SandPoot updated:

+
    +
  • Put back mob vore with a pref.
  • +
  • Taken some stuff from tg for tgui_alert.
  • +
  • Refactored a lot of code on vore panel.
  • +
+

WanderingFox95 updated:

+
    +
  • custom plasteel kegs
  • +
+

YakumoChen updated:

+
    +
  • You can now wear the suffering of others on your head with just a sheet of human skin!
  • +
  • Human skin hats
  • +
+

keronshb updated:

+
    +
  • Stripping/equipping things to a conscious braindead person (AKA a human owned by a disconnected player) will now give them a message with your visible name and roughly how long ago you touched their stuff when they login again. Touching someone's pockets or adjusting their gear other than equipping/unequipping is not logged. After 5 minutes, you'll have forgotten both their name and exactly how long ago past those 5 minutes it happened. (Credit to Ryll-Ryll)
  • +
  • LAZYNULL
  • +
  • Breaking mirrors now gives you a bad omen
  • +
+

timothyteakettle updated:

+
    +
  • anthros can now select the cow tail
  • +
  • new quirk that allows you to eat trash
  • +
+

18 July 2021

timothyteakettle updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index c1aaca7a0b..bf9e88d857 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -30305,3 +30305,36 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. timothyteakettle: - bugfix: fixes photosynthesis stopping nutrition going past well fed from non-photosynthesis means +2021-07-19: + Arturlang: + - bugfix: The crafting button should no longer silently make more copies of itself + on reconects + - code_imp: There are no longer two copies of the crafting component. + - code_imp: 'There is no longer a rogue d in tracer.dm tweak: Everything in Misc + was moved to Miscelanious in the crafting menu, and Misc was nuked from orbit. + Nobody will miss you.' + MrJWhit: + - bugfix: Fixes a memory leak, there's a good chance that it's the same one that + killed kilo. + SandPoot: + - rscadd: Put back mob vore with a pref. + - code_imp: Taken some stuff from tg for tgui_alert. + - refactor: Refactored a lot of code on vore panel. + WanderingFox95: + - rscadd: custom plasteel kegs + YakumoChen: + - rscadd: You can now wear the suffering of others on your head with just a sheet + of human skin! + - imageadd: Human skin hats + keronshb: + - rscadd: Stripping/equipping things to a conscious braindead person (AKA a human + owned by a disconnected player) will now give them a message with your visible + name and roughly how long ago you touched their stuff when they login again. + Touching someone's pockets or adjusting their gear other than equipping/unequipping + is not logged. After 5 minutes, you'll have forgotten both their name and exactly + how long ago past those 5 minutes it happened. (Credit to Ryll-Ryll) + - rscadd: LAZYNULL + - rscadd: Breaking mirrors now gives you a bad omen + timothyteakettle: + - bugfix: anthros can now select the cow tail + - rscadd: new quirk that allows you to eat trash diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index 806f378323ae7d0e9e1732e70912b26bd328e6bd..51675c8d7da5933e78f205e6feb645e83f35db00 100644 GIT binary patch delta 16954 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 G#D4*9OlYV8 diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index b9c891ddb9089f41af04d1a4ef670aa05491c373..6d29b8df8e3c930d9045de20d70d7194ece9c43b 100644 GIT binary patch delta 55271 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%0A$X^d{=xb)ke44HDeUOC6C}KbF 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 { + const { act, data } = useBackend(context); + return ( + + + {data.unsaved_changes && ( + + + + Warning: Unsaved Changes! + + + + ) || null} + {show_pictures && ( + + {contents.map(thing => ( + + + {thing.name} + + ))} + + ) || ( + + {contents.map(thing => ( + + + + ))} + + )} + + ); +}; + +const VoreUserPreferences = (props, context) => { + const { act, data } = useBackend(context); + + const { + digestable, + devourable, + feeding, + absorbable, + allowmobvore, + vore_sounds, + digestion_sounds, + lickable, + smellable, + } = data.prefs; + + const { + show_pictures, + } = data; + + return ( +
    act("show_pictures")}> + Contents Preference: {show_pictures ? "Show Pictures" : "Show List"} + + }> + + +
    + + ); +};