Merge pull request #1110 from BlackMajor/gut

Belly Filler 2: Electric Boogaloo, the Turniping
This commit is contained in:
Razgriz
2021-01-13 22:14:27 -07:00
committed by GitHub
13 changed files with 183 additions and 53 deletions
+1
View File
@@ -7,6 +7,7 @@
#define MAP_LEVEL_EMPTY 0x020 // Empty Z-levels that may be used for various things (currently used by bluespace jump)
#define MAP_LEVEL_CONSOLES 0x040 // Z-levels available to various consoles, such as the crew monitor (when that gets coded in). Defaults to station_levels if unset.
#define MAP_LEVEL_XENOARCH_EXEMPT 0x080 // Z-levels exempt from xenoarch digsite generation.
#define MAP_LEVEL_VORESPAWN 0x100 // Z-levels players are allowed to late join to via vorish means. Usually non-dangerous locations.
// Misc map defines.
#define SUBMAP_MAP_EDGE_PAD 8 // Automatically created submaps are forbidden from being this close to the main map's edge. //VOREStation Edit
+97 -25
View File
@@ -371,8 +371,7 @@ var/global/datum/controller/occupations/job_master
if(istype(S, /obj/effect/landmark/start) && istype(S.loc, /turf))
H.forceMove(S.loc)
else
var/list/spawn_props = LateSpawn(H.client, rank)
var/turf/T = spawn_props["turf"]
var/turf/T = get_turf(pick(latejoin))
if(!T)
to_chat(H, "<span class='critical'>You were unable to be spawned at your chosen late-join spawnpoint. Please verify your job/spawn point combination makes sense, and try another one.</span>")
return
@@ -511,21 +510,22 @@ var/global/datum/controller/occupations/job_master
to_chat(H, "<span class='danger'>Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug.</span>")
if(istype(H)) //give humans wheelchairs, if they need them.
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
var/obj/item/weapon/storage/S = locate() in H.contents
var/obj/item/wheelchair/R = null
if(S)
R = locate() in S.contents
if(!l_foot || !r_foot || R)
var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(H.loc)
W.buckle_mob(H)
H.update_canmove()
W.set_dir(H.dir)
W.add_fingerprint(H)
if(R)
W.color = R.color
qdel(R)
if(istype(H.loc, /obj/belly)) //unless in a gut
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
var/obj/item/weapon/storage/S = locate() in H.contents
var/obj/item/wheelchair/R = null
if(S)
R = locate() in S.contents
if(!l_foot || !r_foot || R)
var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(H.loc)
W.buckle_mob(H)
H.update_canmove()
W.set_dir(H.dir)
W.add_fingerprint(H)
if(R)
W.color = R.color
qdel(R)
to_chat(H, "<B>You are [job.total_positions == 1 ? "the" : "a"] [alt_title ? alt_title : rank].</B>")
@@ -649,24 +649,90 @@ var/global/datum/controller/occupations/job_master
var/datum/spawnpoint/spawnpos
var/fail_deadly = FALSE
var/obj/belly/vore_spawn_gut
var/datum/job/J = SSjob.get_job(rank)
fail_deadly = J?.offmap_spawn
//Spawn them at their preferred one
if(C && C.prefs.spawnpoint)
if(!(C.prefs.spawnpoint in using_map.allowed_spawns))
if(fail_deadly)
to_chat(C, "<span class='warning'>Your chosen spawnpoint is unavailable for this map and your job requires a specific spawnpoint. Please correct your spawn point choice.</span>")
return
if(C.prefs.spawnpoint == "Vore Belly")
var/list/preds = list()
var/list/pred_names = list() //This is cringe
for(var/client/V in GLOB.clients)
if(!isliving(V.mob))
continue
var/mob/living/M = V.mob
if(M.stat == UNCONSCIOUS || M.stat == DEAD || M.client.is_afk(10 MINUTES))
continue
if(!M.latejoin_vore)
continue
if(!(M.z in using_map.vorespawn_levels))
continue
preds += M
pred_names += M.real_name //very cringe
if(preds.len)
var/pred_name = input(C, "Choose a Predator.", "Pred Spawnpoint") as null|anything in pred_names
if(!pred_name)
return
var/index = pred_names.Find(pred_name)
var/mob/living/pred = preds[index]
var/list/available_bellies = list()
for(var/obj/belly/Y in pred.vore_organs)
if(Y.vorespawn_blacklist)
continue
available_bellies += Y
var/backup = alert(C, "Do you want a mind backup?", "Confirm", "Yes", "No")
if(backup == "Yes")
backup = 1
vore_spawn_gut = input(C, "Choose a Belly.", "Belly Spawnpoint") as null|anything in available_bellies
if(!vore_spawn_gut)
return
to_chat(C, "<span class='warning'>[pred] has received your spawn request. Please wait.</span>")
log_admin("[key_name(C)] has requested to vore spawn into [key_name(pred)]")
message_admins("[key_name(C)] has requested to vore spawn into [key_name(pred)]")
var/confirm = alert(pred, "[C.prefs.real_name] is attempting to spawn into your [vore_spawn_gut]. Let them?", "Confirm", "No", "Yes")
if(confirm != "Yes")
to_chat(C, "<span class='warning'>[pred] has declined your spawn request.</span>")
return
if(!vore_spawn_gut || QDELETED(vore_spawn_gut))
to_chat(C, "<span class='warning'>Somehow, the belly you were trying to enter no longer exists.</span>")
return
if(pred.stat == UNCONSCIOUS || pred.stat == DEAD)
to_chat(C, "<span class='warning'>[pred] is not conscious.</span>")
to_chat(pred, "<span class='warning'>You must be conscious to accept.</span>")
return
if(!(pred.z in using_map.vorespawn_levels))
to_chat(C, "<span class='warning'>[pred] is no longer in station grounds.</span>")
to_chat(pred, "<span class='warning'>You must be within station grounds to accept.</span>")
return
if(backup)
addtimer(CALLBACK(src, .proc/m_backup_client, C), 5 SECONDS)
log_admin("[key_name(C)] has vore spawned into [key_name(pred)]")
message_admins("[key_name(C)] has vore spawned into [key_name(pred)]")
to_chat(C, "<span class='notice'>You have been spawned via vore. You are free to roleplay how you got there as you please, such as teleportation or having had already been there.</span>")
to_chat(pred, "<span class='notice'>Your prey has spawned via vore. You are free to roleplay this how you please, such as teleportation or having had already been there.</span>")
else
to_chat(C, "<span class='warning'>Your chosen spawnpoint ([C.prefs.spawnpoint]) is unavailable for the current map. Spawning you at one of the enabled spawn points instead.</span>")
spawnpos = null
else
to_chat(C, "<span class='warning'>No predators were available to accept you.</span>")
return
spawnpos = spawntypes[C.prefs.spawnpoint]
else
if(!(C.prefs.spawnpoint in using_map.allowed_spawns))
if(fail_deadly)
to_chat(C, "<span class='warning'>Your chosen spawnpoint is unavailable for this map and your job requires a specific spawnpoint. Please correct your spawn point choice.</span>")
return
else
to_chat(C, "<span class='warning'>Your chosen spawnpoint ([C.prefs.spawnpoint]) is unavailable for the current map. Spawning you at one of the enabled spawn points instead.</span>")
spawnpos = null
else
spawnpos = spawntypes[C.prefs.spawnpoint]
//We will return a list key'd by "turf" and "msg"
. = list("turf","msg")
. = list("turf","msg", "voreny")
if(vore_spawn_gut)
.["voreny"] = vore_spawn_gut
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len)
if(spawnpos.check_job_spawning(rank))
.["turf"] = spawnpos.get_spawn_position()
@@ -684,3 +750,9 @@ var/global/datum/controller/occupations/job_master
var/spawning = pick(latejoin)
.["turf"] = get_turf(spawning)
.["msg"] = "has arrived on the station"
/datum/controller/occupations/proc/m_backup_client(var/client/C) //Same as m_backup, but takes a client entry. Used for vore late joining.
if(!ishuman(C.mob))
return
var/mob/living/carbon/human/CM = C.mob
SStranscore.m_backup(CM.mind, CM.nif)
@@ -4,4 +4,12 @@
/datum/spawnpoint/stationgateway/New()
..()
turfs = latejoin_gatewaystation
turfs = latejoin_gatewaystation
/datum/spawnpoint/vore
display_name = "Vore Belly"
msg = "has arrived on the station."
/datum/spawnpoint/vore/New()
..()
turfs = latejoin
+5 -2
View File
@@ -164,7 +164,7 @@
if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
to_chat(usr, "<font color='red'>The round is either not ready, or has already finished...</font>")
return
var/time_till_respawn = time_till_respawn()
if(time_till_respawn == -1) // Special case, never allowed to respawn
to_chat(usr, "<span class='warning'>Respawning is not allowed!</span>")
@@ -352,7 +352,7 @@
/mob/new_player/proc/time_till_respawn()
if(!ckey)
return -1 // What?
var/timer = GLOB.respawn_timers[ckey]
// No timer at all
if(!timer)
@@ -461,6 +461,9 @@
AnnounceArrival(character, rank, join_message, announce_channel, character.z)
data_core.manifest_inject(character)
ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
var/gut = join_props["voreny"]
if(gut)
character.forceMove(gut)
qdel(src) // Delete new_player mob
+1
View File
@@ -36,6 +36,7 @@
var/liquid_fullness3_messages = FALSE
var/liquid_fullness4_messages = FALSE
var/liquid_fullness5_messages = FALSE
var/vorespawn_blacklist = FALSE
var/list/fullness1_messages = list(
"%pred's %belly looks empty"
+4 -2
View File
@@ -185,7 +185,8 @@
"fullness2_messages",
"fullness3_messages",
"fullness4_messages",
"fullness5_messages" //CHOMP end of variables from CHOMP
"fullness5_messages",
"vorespawn_blacklist" //CHOMP end of variables from CHOMP
)
/*These have been pulled from the above list as these were chomp edits for liquid belly stuff. This needs to be ported back in for TGUI port
@@ -794,7 +795,8 @@
dupe.gen_time = gen_time
dupe.gen_time_display = gen_time_display
dupe.reagent_transfer_verb = reagent_transfer_verb
dupe.custom_max_volume = custom_max_volume //CHOMP end of variables from CHOMP
dupe.custom_max_volume = custom_max_volume
dupe.vorespawn_blacklist = vorespawn_blacklist //CHOMP end of variables from CHOMP
dupe.belly_fullscreen = belly_fullscreen
dupe.disable_hud = disable_hud
+7 -3
View File
@@ -32,7 +32,8 @@
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
var/show_vore_fx = TRUE // Show belly fullscreens
var/latejoin_vore = FALSE // If enabled, latejoiners can spawn into this, assuming they have a client
//
// Hook for generic creation of stuff on new creatures
@@ -242,7 +243,8 @@
P.can_be_drop_pred = src.can_be_drop_pred
//CHOMP reagent belly
//CHOMP stuff
P.latejoin_vore = src.latejoin_vore
P.receive_reagents = src.receive_reagents
P.give_reagents = src.give_reagents
@@ -279,7 +281,8 @@
can_be_drop_prey = P.can_be_drop_prey
can_be_drop_pred = P.can_be_drop_pred
//CHOMP reagents belly
//CHOMP stuff
latejoin_vore = P.latejoin_vore
receive_reagents = P.receive_reagents
give_reagents = P.give_reagents
@@ -865,6 +868,7 @@
dispvoreprefs += "<b>Healbelly permission:</b> [permit_healbelly ? "Allowed" : "Disallowed"]<br>"
dispvoreprefs += "<b>Spontaneous vore prey:</b> [can_be_drop_prey ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Spontaneous vore pred:</b> [can_be_drop_pred ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Late join spawn point belly:</b> [latejoin_vore ? "Enabled" : "Disabled"]<br>" //CHOMPstation edit
dispvoreprefs += "<b>Receiving liquids:</b> [receive_reagents ? "Enabled" : "Disabled"]<br>" //CHOMPstation edit
dispvoreprefs += "<b>Giving liquids:</b> [give_reagents ? "Enabled" : "Disabled"]<br>" //CHOMPstation edit
user << browse("<html><head><title>Vore prefs: [src]</title></head><body><center>[dispvoreprefs]</center></body></html>", "window=[name]mvp;size=200x300;can_resize=0;can_minimize=0")
+9 -4
View File
@@ -58,9 +58,10 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/can_be_drop_pred = FALSE
//CHOMP reagent belly
//CHOMP stuff
var/receive_reagents = FALSE
var/give_reagents = FALSE
var/latejoin_vore = FALSE
//Mechanically required
@@ -139,7 +140,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
belly_prefs = json_from_file["belly_prefs"]
//CHOMP reagent belly
//CHOMP stuff
latejoin_vore = json_from_file["latejoin_vore"]
receive_reagents = json_from_file["receive_reagents"]
give_reagents = json_from_file["give_reagents"]
@@ -168,7 +170,9 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
if(isnull(belly_prefs))
belly_prefs = list()
//CHOMP reagent belly
//CHOMP stuff
if(isnull(latejoin_vore))
latejoin_vore = FALSE
if(isnull(receive_reagents))
receive_reagents = FALSE
if(isnull(give_reagents))
@@ -192,9 +196,10 @@ 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,
"show_vore_fx" = show_vore_fx,
"can_be_drop_prey" = can_be_drop_prey,
"can_be_drop_pred" = can_be_drop_pred,
"latejoin_vore" = latejoin_vore,
"belly_prefs" = belly_prefs,
"receive_reagents" = receive_reagents,
"give_reagents" = give_reagents,
+22 -11
View File
@@ -157,6 +157,7 @@
"shrink_grow_size" = selected.shrink_grow_size,
"belly_fullscreen" = selected.belly_fullscreen,
"possible_fullscreens" = icon_states('icons/mob/screen_full_vore.dmi'),
"vorespawn_blacklist" = selected.vorespawn_blacklist
)
data["selected"]["addons"] = list()
@@ -200,7 +201,7 @@
if(M.absorbed)
info["absorbed"] = TRUE
data["selected"]["contents"].Add(list(info))
data["selected"]["show_liq"] = selected.show_liquids //CHOMPedit start: liquid belly options
data["selected"]["liq_interacts"] = list()
if(selected.show_liquids)
@@ -243,6 +244,7 @@
"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,
"latejoin_vore" = host.latejoin_vore,
"noisy" = host.noisy,
//CHOMPedit start, liquid belly prefs
"liq_rec" = host.receive_reagents,
@@ -271,7 +273,7 @@
// 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)
// Host is trying to interact with something in host's belly.
if("pick_from_outside")
return pick_from_outside(usr, params)
@@ -302,7 +304,7 @@
host.vore_selected = NB
unsaved_changes = TRUE
return TRUE
if("bellypick")
host.vore_selected = locate(params["bellypick"])
return TRUE
@@ -375,6 +377,12 @@
host.client.prefs_vr.can_be_drop_prey = host.can_be_drop_prey
unsaved_changes = TRUE
return TRUE
if("toggle_latejoin_vore")
host.latejoin_vore = !host.latejoin_vore
if(host.client.prefs_vr)
host.client.prefs_vr.latejoin_vore = host.latejoin_vore
unsaved_changes = TRUE
return TRUE
if("toggle_digest")
host.digestable = !host.digestable
if(host.client.prefs_vr)
@@ -459,11 +467,11 @@
if(!(target in OB))
return TRUE // Aren't here anymore, need to update menu
var/intent = "Examine"
if(isliving(target))
intent = alert("What do you want to do to them?","Query","Examine","Help Out","Devour")
else if(istype(target, /obj/item))
intent = alert("What do you want to do to that?","Query","Examine","Use Hand")
@@ -561,7 +569,7 @@
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
@@ -652,7 +660,7 @@
if(!toggle_addon)
return FALSE
host.vore_selected.mode_flags ^= host.vore_selected.mode_flag_list[toggle_addon]
host.vore_selected.items_preserved.Cut() //Re-evaltuate all items in belly on
host.vore_selected.items_preserved.Cut() //Re-evaltuate all items in belly on
. = TRUE
if("b_item_mode")
var/list/menu_list = host.vore_selected.item_digest_modes.Copy()
@@ -682,7 +690,7 @@
host.vore_selected.contamination_color = new_color
host.vore_selected.items_preserved.Cut() //To re-contaminate for new color
. = TRUE
if("b_desc")
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)
@@ -915,7 +923,10 @@
qdel(host.vore_selected)
host.vore_selected = host.vore_organs[1]
. = TRUE
if("b_vorespawn_blacklist")
host.vore_selected.vorespawn_blacklist = !host.vore_selected.vorespawn_blacklist
. = TRUE
if(.)
unsaved_changes = TRUE
@@ -928,7 +939,7 @@
var/attr = params["liq_attribute"]
switch(attr)
if("b_show_liq")
if(!host.vore_selected.show_liquids)
if(!host.vore_selected.show_liquids)
host.vore_selected.show_liquids = 1
to_chat(usr,"<span class='warning'>Your [lowertext(host.vore_selected.name)] now has liquid options.</span>")
else
@@ -1028,7 +1039,7 @@
var/attr = params["liq_messages"]
switch(attr)
if("b_show_liq_fullness")
if(!host.vore_selected.show_fullness_messages)
if(!host.vore_selected.show_fullness_messages)
host.vore_selected.show_fullness_messages = 1
to_chat(usr,"<span class='warning'>Your [lowertext(host.vore_selected.name)] now has liquid examination options.</span>")
else
@@ -171,7 +171,7 @@
#define SOUTHERN_CROSS_HOLOMAP_MARGIN_Y ((HOLOMAP_ICON_SIZE - (3*SOUTHERN_CROSS_MAP_SIZE)) / 2) // 60
/datum/map_z_level/southern_cross/station
flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES
flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_VORESPAWN
holomap_legend_x = 220
holomap_legend_y = 160
@@ -209,7 +209,7 @@
/datum/map_z_level/southern_cross/surface
z = Z_LEVEL_SURFACE
name = "Plains"
flags = MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_SEALED|MAP_LEVEL_CONSOLES
flags = MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_SEALED|MAP_LEVEL_CONSOLES|MAP_LEVEL_VORESPAWN
base_turf = /turf/simulated/floor/outdoors/rocks
/datum/map_z_level/southern_cross/surface_mine
@@ -228,13 +228,13 @@
/datum/map_z_level/southern_cross/surface_casino
z = Z_LEVEL_SURFACE_CASINO
name = "Casino"
flags = MAP_LEVEL_PLAYER|MAP_LEVEL_SEALED|MAP_LEVEL_CONTACT|MAP_LEVEL_CONSOLES
flags = MAP_LEVEL_PLAYER|MAP_LEVEL_SEALED|MAP_LEVEL_CONTACT|MAP_LEVEL_CONSOLES|MAP_LEVEL_VORESPAWN
base_turf = /turf/simulated/floor/outdoors/rocks
/datum/map_z_level/southern_cross/misc
z = Z_LEVEL_MISC
name = "Misc"
flags = MAP_LEVEL_PLAYER
flags = MAP_LEVEL_PLAYER|MAP_LEVEL_VORESPAWN
transit_chance = 6
/datum/map_z_level/southern_cross/centcom
+2
View File
@@ -34,6 +34,7 @@ var/list/all_maps = list()
var/static/list/sealed_levels = list() // Z-levels that don't allow random transit at edge
var/static/list/xenoarch_exempt_levels = list() //Z-levels exempt from xenoarch finds and digsites spawning.
var/static/list/empty_levels = null // Empty Z-levels that may be used for various things (currently used by bluespace jump)
var/static/list/vorespawn_levels = list() //Z-levels where players are allowed to vore latejoin to.
// End Static Lists
// Z-levels available to various consoles, such as the crew monitor. Defaults to station_levels if unset.
@@ -297,6 +298,7 @@ var/list/all_maps = list()
if(flags & MAP_LEVEL_PLAYER) map.player_levels += z
if(flags & MAP_LEVEL_SEALED) map.sealed_levels += z
if(flags & MAP_LEVEL_XENOARCH_EXEMPT) map.xenoarch_exempt_levels += z
if(flags & MAP_LEVEL_VORESPAWN) map.vorespawn_levels += z
if(flags & MAP_LEVEL_EMPTY)
if(!map.empty_levels) map.empty_levels = list()
map.empty_levels += z
@@ -273,6 +273,7 @@ const VoreSelectedBelly = (props, context) => {
liq_msg3,
liq_msg4,
liq_msg5,
vorespawn_blacklist,
} = belly;
const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 0);
@@ -474,6 +475,13 @@ const VoreSelectedBelly = (props, context) => {
onClick={() => act("set_attribute", { attribute: "b_grow_shrink" })}
content={shrink_grow_size * 100 + "%"} />
</LabeledList.Item>
<LabeledList.Item label="Vore Spawn Blacklist">
<Button
onClick={() => act("set_attribute", { attribute: "b_vorespawn_blacklist" })}
icon={vorespawn_blacklist ? "toggle-on" : "toggle-off"}
selected={vorespawn_blacklist}
content={vorespawn_blacklist ? "Yes" : "No"} />
</LabeledList.Item>
</LabeledList>
</Flex.Item>
<Flex.Item basis="100%" mt={1}>
@@ -800,6 +808,7 @@ const VoreUserPreferences = (props, context) => {
show_vore_fx,
can_be_drop_prey,
can_be_drop_pred,
latejoin_vore,
noisy,
liq_rec,
liq_giv,
@@ -910,6 +919,18 @@ const VoreUserPreferences = (props, context) => {
: "Click here to disable being spontaneous pred.")}
content={can_be_drop_pred ? "Spontaneous Pred Enabled" : "Spontaneous Pred Disabled"} />
</Flex.Item>
<Flex.Item basis="32%">
<Button
onClick={() => act("toggle_latejoin_vore")}
icon={latejoin_vore ? "toggle-on" : "toggle-off"}
selected={latejoin_vore}
fluid
tooltip={"Toggle late join vore spawnpoint. "
+ (latejoin_vore
? "Click here to turn off vorish spawnpoint."
: "Click here to turn on vorish spawnpoint.")}
content={latejoin_vore ? "Vore Spawn Enabled" : "Vore Spawn Disabled"} />
</Flex.Item>
<Flex.Item basis="32%">
<Button
onClick={() => act("toggle_noisy")}
File diff suppressed because one or more lines are too long