diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index f0a959c6a7..ddd7ac5dcc 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -12,7 +12,7 @@ clear_fullscreen(category, FALSE) screen = null else if(!severity || severity == screen.severity) - return null + return screen if(!screen) screen = new type() diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 64b76184e5..0eaa9cab49 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -285,6 +285,17 @@ InsertAll("", each, global.alldirs) ..() +//VOREStation Add +/datum/asset/spritesheet/vore + name = "vore" + +/datum/asset/spritesheet/vore/register() + var/icon/downscaled = icon('icons/mob/screen_full_vore.dmi') + downscaled.Scale(240, 240) + InsertAll("", downscaled) + ..() +//VOREStation Add End + // // Representative icons for each research design // /datum/asset/spritesheet/research_designs // name = "design" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 479874b185..50552b6844 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1283,16 +1283,8 @@ if(blinded) overlay_fullscreen("blind", /obj/screen/fullscreen/blind) throw_alert("blind", /obj/screen/alert/blind) - else - clear_fullscreens() - clear_alert("blind") - - if(blinded) - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - - else if(!machine) - clear_fullscreens() + clear_fullscreen("blind") clear_alert("blind") if(disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription @@ -1310,6 +1302,8 @@ else clear_alert("high") + if(!isbelly(loc)) clear_fullscreen("belly") //VOREStation Add - Belly fullscreens safety + if(config.welder_vision) var/found_welder if(species.short_sighted) diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 2f2c55b85a..23f98fdb62 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -117,6 +117,10 @@ //List has indexes that are the digestion mode strings, and keys that are lists of strings. var/tmp/list/emote_lists = list() + // Lets you do a fullscreen overlay. Set to an icon_state string. + var/belly_fullscreen = "" + var/disable_hud = FALSE + //For serialization, keep this updated, required for bellies to save correctly. /obj/belly/vars_to_save() return ..() + list( @@ -155,7 +159,9 @@ "release_sound", "fancy_vore", "is_wet", - "wet_loop" + "wet_loop", + "belly_fullscreen", + "disable_hud" ) /obj/belly/Initialize() @@ -199,6 +205,7 @@ var/taste if(can_taste && (taste = M.get_taste_message(FALSE))) to_chat(owner, "[M] tastes of [taste].") + vore_fx(M) //Stop AI processing in bellies if(M.ai_holder) M.ai_holder.go_sleep() @@ -208,9 +215,31 @@ . = ..() if(isliving(thing) && !isbelly(thing.loc)) var/mob/living/L = thing + L.clear_fullscreen("belly") + if(!L.hud_used.hud_shown) + L.toggle_hud_vis() if((L.stat != DEAD) && L.ai_holder) L.ai_holder.go_wake() +/obj/belly/proc/vore_fx(mob/living/L) + if(!istype(L)) + return + if(!L.show_vore_fx) + L.clear_fullscreen("belly") + return + + if(belly_fullscreen) + var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly) + F.icon_state = belly_fullscreen + // F.color = belly_fullscreen_color + else + L.clear_fullscreen("belly") + + if(disable_hud) + if(L.hud_used.hud_shown) + to_chat(L, "((Your pred has disabled huds in their belly. Turn off vore FX and hit F12 to get it back; or relax, and enjoy the serenity.))") + L.toggle_hud_vis(TRUE) + // Release all contents of this belly into the owning mob's location. // If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in. // Returns the number of mobs so released. @@ -684,6 +713,8 @@ dupe.fancy_vore = fancy_vore dupe.is_wet = is_wet dupe.wet_loop = wet_loop + dupe.belly_fullscreen = belly_fullscreen + dupe.disable_hud = disable_hud //// Object-holding variables //struggle_messages_outside - strings diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index d11af09376..e9b31904f9 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -121,6 +121,9 @@ if(L.absorbed) L.Weaken(5) + // Fullscreen overlays + vore_fx(L) + //Handle 'human' if(ishuman(L)) var/mob/living/carbon/human/H = L diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 0570744028..664709e88a 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -32,6 +32,7 @@ var/adminbus_trash = FALSE // For abusing trash eater for event shenanigans. var/adminbus_eat_minerals = FALSE // This creature subsists on a diet of pure adminium. var/vis_height = 32 // Sprite height used for resize features. + var/show_vore_fx = TRUE // Show belly fullscreens // // Hook for generic creation of stuff on new creatures @@ -235,6 +236,7 @@ P.vore_taste = src.vore_taste P.vore_smell = src.vore_smell P.permit_healbelly = src.permit_healbelly + P.show_vore_fx = src.show_vore_fx P.can_be_drop_prey = src.can_be_drop_prey P.can_be_drop_pred = src.can_be_drop_pred @@ -266,6 +268,7 @@ vore_taste = P.vore_taste vore_smell = P.vore_smell permit_healbelly = P.permit_healbelly + show_vore_fx = P.show_vore_fx can_be_drop_prey = P.can_be_drop_prey can_be_drop_pred = P.can_be_drop_pred @@ -851,3 +854,8 @@ user << browse("Vore prefs: [src]
[dispvoreprefs]
", "window=[name]mvp;size=200x300;can_resize=0;can_minimize=0") onclose(user, "[name]") return + +// Full screen belly overlays! +/obj/screen/fullscreen/belly + icon = 'icons/mob/screen_full_vore.dmi' + icon_state = "" diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 416a125f49..9ca0ddf045 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -53,6 +53,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/vore_taste = "nothing in particular" var/vore_smell = "nothing in particular" var/permit_healbelly = TRUE + var/show_vore_fx = TRUE var/can_be_drop_prey = FALSE var/can_be_drop_pred = FALSE @@ -126,6 +127,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE vore_taste = json_from_file["vore_taste"] vore_smell = json_from_file["vore_smell"] permit_healbelly = json_from_file["permit_healbelly"] + show_vore_fx = json_from_file["show_vore_fx"] can_be_drop_prey = json_from_file["can_be_drop_prey"] can_be_drop_pred = json_from_file["can_be_drop_pred"] belly_prefs = json_from_file["belly_prefs"] @@ -145,6 +147,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE allowmobvore = TRUE if(isnull(permit_healbelly)) permit_healbelly = TRUE + if(isnull(show_vore_fx)) + show_vore_fx = TRUE if(isnull(can_be_drop_prey)) can_be_drop_prey = FALSE if(isnull(can_be_drop_pred)) @@ -170,6 +174,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "vore_taste" = vore_taste, "vore_smell" = vore_smell, "permit_healbelly" = permit_healbelly, + "show_vore_fx" = show_vore_fx, "can_be_drop_prey" = can_be_drop_prey, "can_be_drop_pred" = can_be_drop_pred, "belly_prefs" = belly_prefs, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index de776e002b..0a7be55634 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -40,6 +40,10 @@ host = null . = ..() +/datum/vore_look/ui_assets(mob/user) + . = ..() + . += get_asset_datum(/datum/asset/spritesheet/vore) + /datum/vore_look/tgui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) @@ -148,6 +152,8 @@ "digest_burn" = selected.digest_burn, "bulge_size" = selected.bulge_size, "shrink_grow_size" = selected.shrink_grow_size, + "belly_fullscreen" = selected.belly_fullscreen, + "possible_fullscreens" = icon_states('icons/mob/screen_full_vore.dmi'), ) data["selected"]["addons"] = list() @@ -172,6 +178,8 @@ data["selected"]["interacts"]["absorbchance"] = selected.absorbchance data["selected"]["interacts"]["digestchance"] = selected.digestchance + data["selected"]["disable_hud"] = selected.disable_hud + data["selected"]["contents"] = list() for(var/O in selected) var/list/info = list( @@ -197,6 +205,7 @@ "digest_leave_remains" = host.digest_leave_remains, "allowmobvore" = host.allowmobvore, "permit_healbelly" = host.permit_healbelly, + "show_vore_fx" = host.show_vore_fx, "can_be_drop_prey" = host.can_be_drop_prey, "can_be_drop_pred" = host.can_be_drop_pred, "noisy" = host.noisy, @@ -354,6 +363,16 @@ host.client.prefs_vr.permit_healbelly = host.permit_healbelly unsaved_changes = TRUE return TRUE + if("toggle_fx") + host.show_vore_fx = !host.show_vore_fx + if(host.client.prefs_vr) + host.client.prefs_vr.show_vore_fx = host.show_vore_fx + if(!host.show_vore_fx) + host.clear_fullscreen("belly") + if(!host.hud_used.hud_shown) + host.toggle_hud_vis() + unsaved_changes = TRUE + return TRUE if("toggle_noisy") host.noisy = !host.noisy unsaved_changes = TRUE @@ -786,6 +805,12 @@ if(!isnull(digest_chance_input)) host.vore_selected.digestchance = sanitize_integer(digest_chance_input, 0, 100, initial(host.vore_selected.digestchance)) . = TRUE + if("b_fullscreen") + host.vore_selected.belly_fullscreen = params["val"] + . = TRUE + if("b_disable_hud") + host.vore_selected.disable_hud = !host.vore_selected.disable_hud + . = TRUE if("b_del") var/alert = alert("Are you sure you want to delete your [lowertext(host.vore_selected.name)]?","Confirmation","Delete","Cancel") if(!(alert == "Delete")) diff --git a/icons/mob/screen_full_vore.dmi b/icons/mob/screen_full_vore.dmi new file mode 100644 index 0000000000..632f413f59 Binary files /dev/null and b/icons/mob/screen_full_vore.dmi differ diff --git a/tgui/packages/tgui/interfaces/VorePanel.js b/tgui/packages/tgui/interfaces/VorePanel.js index 345183a42b..82ad9ec134 100644 --- a/tgui/packages/tgui/interfaces/VorePanel.js +++ b/tgui/packages/tgui/interfaces/VorePanel.js @@ -4,6 +4,7 @@ import { Fragment } from 'inferno'; import { useBackend, useLocalState } from "../backend"; import { Box, Button, Flex, Collapsible, Icon, LabeledList, NoticeBox, Section, Tabs } from "../components"; import { Window } from "../layouts"; +import { classes } from 'common/react'; const stats = [ null, @@ -197,6 +198,9 @@ const VoreSelectedBelly = (props, context) => { escapable, interacts, contents, + belly_fullscreen, + possible_fullscreens, + disable_hud, } = belly; const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 0); @@ -216,6 +220,9 @@ const VoreSelectedBelly = (props, context) => { setTabIndex(3)}> Interactions + setTabIndex(4)}> + Belly Styles + {tabIndex === 0 && ( @@ -436,10 +443,50 @@ const VoreSelectedBelly = (props, context) => { ) : "These options only display while interactions are turned on."} - ) || "Error."} + ) || tabIndex === 4 && ( + +
+ + +
+
+ + {Object.keys(possible_fullscreens).map(key => ( + + ))} +
+
+ ) || "Error"} ); }; + const VoreContentsPanel = (props, context) => { const { act } = useBackend(context); const { @@ -501,6 +548,7 @@ const VoreUserPreferences = (props, context) => { digest_leave_remains, allowmobvore, permit_healbelly, + show_vore_fx, can_be_drop_prey, can_be_drop_pred, noisy, @@ -615,7 +663,7 @@ const VoreUserPreferences = (props, context) => { : "Click here to turn on hunger noises.")} content={noisy ? "Hunger Noises Enabled" : "Hunger Noises Disabled"} /> - +