Replaced all the extraneous flags with bitflags

This commit is contained in:
Putnam
2020-04-13 16:47:43 -07:00
parent 7cb2057bb0
commit 1e8fffbf0b
18 changed files with 146 additions and 190 deletions
+8 -8
View File
@@ -221,9 +221,9 @@
if(isliving(AM))
var/mob/living/L = AM
var/mob/living/OW = owner
if(L.absorbed && !include_absorbed)
if(L.vore_flags & ABSORBED && !include_absorbed)
continue
L.absorbed = FALSE
L.vore_flags &= ~ABSORBED
L.stop_sound_channel(CHANNEL_PREYLOOP)
SEND_SIGNAL(OW, COMSIG_CLEAR_MOOD_EVENT, "fedpred", /datum/mood_event/fedpred)
SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey)
@@ -277,14 +277,14 @@
SEND_SIGNAL(OW, COMSIG_ADD_MOOD_EVENT, "emptypred", /datum/mood_event/emptypred)
SEND_SIGNAL(ML, COMSIG_ADD_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey)
if(ML.absorbed)
ML.absorbed = FALSE
if(CHECK_BITFIELD(ML.vore_flags,ABSORBED))
DISABLE_BITFIELD(ML.vore_flags,ABSORBED)
if(ishuman(M) && ishuman(OW))
var/mob/living/carbon/human/Prey = M
var/mob/living/carbon/human/Pred = OW
var/absorbed_count = 2 //Prey that we were, plus the pred gets a portion
for(var/mob/living/P in contents)
if(P.absorbed)
if(CHECK_BITFIELD(P.vore_flags,ABSORBED))
absorbed_count++
Pred.reagents.trans_to(Prey, Pred.reagents.total_volume / absorbed_count)
@@ -389,7 +389,7 @@
formatted_message = replacetext(formatted_message,"%pred",owner)
formatted_message = replacetext(formatted_message,"%prey",english_list(contents))
for(var/mob/living/P in contents)
if(!P.absorbed) //This is required first, in case there's a person absorbed and not absorbed in a stomach.
if(!CHECK_BITFIELD(P.vore_flags, ABSORBED)) //This is required first, in case there's a person absorbed and not absorbed in a stomach.
total_bulge += P.mob_size
if(total_bulge >= bulge_size && bulge_size != 0)
return("<span class='warning'>[formatted_message]</span><BR>")
@@ -484,7 +484,7 @@
// Handle a mob being absorbed
/obj/belly/proc/absorb_living(var/mob/living/M)
M.absorbed = TRUE
ENABLE_BITFIELD(M.vore_flags, ABSORBED)
to_chat(M,"<span class='notice'>[owner]'s [lowertext(name)] absorbs your body, making you part of them.</span>")
to_chat(owner,"<span class='notice'>Your [lowertext(name)] absorbs [M]'s body, making them part of you.</span>")
@@ -498,7 +498,7 @@
for(var/belly in M.vore_organs)
var/obj/belly/B = belly
for(var/mob/living/Mm in B)
if(Mm.absorbed)
if(CHECK_BITFIELD(Mm.vore_flags, ABSORBED))
absorb_living(Mm)
//Update owner
+6 -6
View File
@@ -27,7 +27,7 @@
var/list/EL = emote_lists[digest_mode]
if(LAZYLEN(EL))
for(var/mob/living/M in contents)
if(M.digestable || !(digest_mode == DM_DIGEST)) // don't give digesty messages to indigestible people
if((M.vore_flags & DIGESTABLE) || !(digest_mode == DM_DIGEST)) // don't give digesty messages to indigestible people
to_chat(M,"<span class='notice'>[pick(EL)]</span>")
///////////////////// Prey Loop Refresh/hack //////////////////////
@@ -51,7 +51,7 @@
//////////////////////// Absorbed Handling ////////////////////////
for(var/mob/living/M in contents)
if(M.absorbed)
if(M.vore_flags & ABSORBED)
M.Stun(5)
////////////////////////// Sound vars /////////////////////////////
@@ -76,7 +76,7 @@
play_sound = pick(pred_digest)
//Pref protection!
if (!M.digestable || M.absorbed)
if (!M.vore_flags & DIGESTABLE || M.vore_flags & ABSORBED)
continue
//Person just died in guts!
@@ -150,7 +150,7 @@
SEND_SOUND(M,prey_digest)
play_sound = pick(pred_digest)
if(M.absorbed)
if(M.vore_flags & ABSORBED)
continue
if(M.nutrition >= 100) //Drain them until there's no nutrients left. Slowly "absorb" them.
@@ -164,8 +164,8 @@
if(DM_UNABSORB)
for (var/mob/living/M in contents)
if(M.absorbed && owner.nutrition >= 100)
M.absorbed = FALSE
if(M.vore_flags & ABSORBED && owner.nutrition >= 100)
DISABLE_BITFIELD(M.vore_flags, ABSORBED)
to_chat(M,"<span class='notice'>You suddenly feel solid again </span>")
to_chat(owner,"<span class='notice'>You feel like a part of you is missing.</span>")
owner.nutrition -= 100
+19 -23
View File
@@ -1,18 +1,11 @@
///////////////////// Mob Living /////////////////////
/mob/living
var/digestable = FALSE // Can the mob be digested inside a belly?
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/devourable = FALSE // Can the mob be vored at all?
var/feeding = FALSE // Are we going to feed someone else?
var/vore_taste = null // What the character tastes like
var/no_vore = FALSE // If the character/mob can vore.
var/openpanel = FALSE // Is the vore panel open?
var/absorbed = FALSE //are we absorbed?
var/next_preyloop
var/vore_init = FALSE //Has this mob's vore been initialized yet?
var/vorepref_init = FALSE //Has this mob's voreprefs been initialized?
//
// Hook for generic creation of stuff on new creatures
@@ -22,7 +15,7 @@
M.verbs += /mob/living/proc/lick
M.verbs += /mob/living/proc/escapeOOC
if(M.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.
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
M.verbs += /mob/living/proc/insidePanel
@@ -35,7 +28,7 @@
return TRUE
/mob/living/proc/init_vore()
vore_init = TRUE
ENABLE_BITFIELD(vore_flags, VORE_INIT)
//Something else made organs, meanwhile.
if(LAZYLEN(vore_organs))
return TRUE
@@ -75,7 +68,7 @@
return
if(pred == prey) //you click your target
if(!pred.feeding)
if(!CHECK_BITFIELD(pred.vore_flags,FEEDING))
to_chat(user, "<span class='notice'>They aren't able to be fed.</span>")
to_chat(pred, "<span class='notice'>[user] tried to feed you themselves, but you aren't voracious enough to be fed.</span>")
return
@@ -91,11 +84,11 @@
feed_grabbed_to_self(user, prey)
else // click someone other than you/prey
if(!pred.feeding)
if(!CHECK_BITFIELD(pred.vore_flags,FEEDING))
to_chat(user, "<span class='notice'>They aren't voracious enough to be fed.</span>")
to_chat(pred, "<span class='notice'>[user] tried to feed you [prey], but you aren't voracious enough to be fed.</span>")
return
if(!prey.feeding)
if(!CHECK_BITFIELD(prey.vore_flags,FEEDING))
to_chat(user, "<span class='notice'>They aren't able to be fed to someone.</span>")
to_chat(prey, "<span class='notice'>[user] tried to feed you to [pred], but you aren't able to be fed to them.</span>")
return
@@ -128,7 +121,7 @@
testing("[user] attempted to feed [prey] to [pred], via [lowertext(belly.name)] but it went wrong.")
return
if (!prey.devourable)
if (!prey.vore_flags & DEVOURABLE)
to_chat(user, "This can't be eaten!")
return FALSE
@@ -267,9 +260,7 @@
to_chat(src,"<span class='warning'>You attempted to save your vore prefs but somehow you're in this character without a client.prefs variable. Tell a dev.</span>")
return FALSE
client.prefs.digestable = digestable
client.prefs.devourable = devourable
client.prefs.feeding = feeding
client.prefs.vore_flags = vore_flags // there's garbage data in here, but it doesn't matter
client.prefs.vore_taste = vore_taste
var/list/serialized = list()
@@ -288,12 +279,17 @@
if(!client || !client.prefs)
to_chat(src,"<span class='warning'>You attempted to apply your vore prefs but somehow you're in this character without a client.prefs variable. Tell a dev.</span>")
return FALSE
vorepref_init = TRUE
ENABLE_BITFIELD(vore_flags,VOREPREF_INIT)
// garbage data coming back the other way or breaking absorbed would be bad, so instead we do this
vore_flags |= CHECK_BITFIELD(client.prefs.vore_flags,DIGESTABLE) // set to 1 if prefs is 1
vore_flags |= CHECK_BITFIELD(client.prefs.vore_flags,DEVOURABLE)
vore_flags |= CHECK_BITFIELD(client.prefs.vore_flags,FEEDING)
vore_flags &= CHECK_BITFIELD(client.prefs.vore_flags,DIGESTABLE) // set to 0 if prefs is 0
vore_flags &= CHECK_BITFIELD(client.prefs.vore_flags,DEVOURABLE)
vore_flags &= CHECK_BITFIELD(client.prefs.vore_flags,FEEDING)
digestable = client.prefs.digestable
devourable = client.prefs.devourable
feeding = client.prefs.feeding
vore_taste = client.prefs.vore_taste
release_vore_contents(silent = TRUE)
@@ -361,7 +357,7 @@
var/list/choices
for(var/mob/living/L in view(1))
if(L != src && (!L.ckey || L.client?.prefs.lickable) && Adjacent(L))
if(L != src && (!L.ckey || L.client?.prefs.vore_flags & LICKABLE) && Adjacent(L))
LAZYADD(choices, L)
if(!choices)
@@ -369,7 +365,7 @@
var/mob/living/tasted = input(src, "Who would you like to lick? (Excluding yourself and those with the preference disabled)", "Licking") as null|anything in choices
if(QDELETED(tasted) || (tasted.ckey && !(tasted.client?.prefs.lickable)) || !Adjacent(tasted) || incapacitated(ignore_restraints = TRUE))
if(QDELETED(tasted) || (tasted.ckey && !(tasted.client?.prefs.vore_flags & LICKABLE)) || !Adjacent(tasted) || incapacitated(ignore_restraints = TRUE))
return
setClickCooldown(100)
+31 -31
View File
@@ -20,10 +20,10 @@
picker_holder.popup = new(src, "insidePanel","Vore Panel", 450, 700, picker_holder)
picker_holder.popup.set_content(dat)
picker_holder.popup.open()
src.openpanel = TRUE
vore_flags |= OPEN_PANEL
/mob/living/proc/updateVRPanel() //Panel popup update call from belly events.
if(src.openpanel == TRUE)
if(vore_flags & OPEN_PANEL)
var/datum/vore_look/picker_holder = new()
picker_holder.loop = picker_holder
picker_holder.selected = vore_selected
@@ -65,7 +65,7 @@
//Don't display this part if we couldn't find the belly since could be held in hand.
if(inside_belly)
dat += "<font color = 'green'>You are currently [user.absorbed ? "absorbed into " : "inside "]</font> <font color = 'yellow'>[eater]'s</font> <font color = 'red'>[inside_belly]</font>!<br><br>"
dat += "<font color = 'green'>You are currently [(user.vore_flags & ABSORBED) ? "absorbed into " : "inside "]</font> <font color = 'yellow'>[eater]'s</font> <font color = 'red'>[inside_belly]</font>!<br><br>"
if(inside_belly.desc)
dat += "[inside_belly.desc]<br><br>"
@@ -80,8 +80,8 @@
continue
//That's an absorbed person you're checking
if(M.absorbed)
if(user.absorbed)
if(M.vore_flags & ABSORBED)
if(user.vore_flags & ABSORBED)
dat += "<a href='?src=\ref[src];outsidepick=\ref[O];outsidebelly=\ref[inside_belly]'><span style='color:purple;'>[O]</span></a>"
continue
else
@@ -139,7 +139,7 @@
var/mob/living/M = O
//Absorbed gets special color OOoOOOOoooo
if(M.absorbed)
if(M.vore_flags & ABSORBED)
dat += "<a href='?src=\ref[src];insidepick=\ref[O]'><span style='color:purple;'>[O]</span></a>"
continue
@@ -243,11 +243,11 @@
dat += "<HR>"
var/pref_on = "#173d15"
var/pref_off = "#990000"
dat += "<br><a style='background:[user.digestable ? pref_on : pref_off];' href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: [user.digestable ? "ON" : "OFF"])</a>"
dat += "<br><a style='background:[user.devourable ? pref_on : pref_off];' href='?src=\ref[src];toggledvor=1'>Toggle Devourable (Currently: [user.devourable ? "ON" : "OFF"])</a>"
dat += "<br><a style='background:[user.feeding ? pref_on : pref_off];' href='?src=\ref[src];toggledfeed=1'>Toggle Feeding (Currently: [user.feeding ? "ON" : "OFF"])</a>"
dat += "<br><a style='background:[(user.vore_flags & DIGESTABLE) ? pref_on : pref_off];' href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: [(user.vore_flags & DIGESTABLE) ? "ON" : "OFF"])</a>"
dat += "<br><a style='background:[(user.vore_flags & DEVOURABLE) ? pref_on : pref_off];' href='?src=\ref[src];toggledvor=1'>Toggle Devourable (Currently: [(user.vore_flags & DEVOURABLE) ? "ON" : "OFF"])</a>"
dat += "<br><a style='background:[(user.vore_flags & FEEDING) ? pref_on : pref_off];' href='?src=\ref[src];toggledfeed=1'>Toggle Feeding (Currently: [(user.vore_flags & FEEDING) ? "ON" : "OFF"])</a>"
if(user.client.prefs)
dat += "<br><a style='background:[user.client.prefs.lickable ? pref_on : pref_off];' href='?src=\ref[src];toggledlickable=1'>Toggle Licking (Currently: [user.client.prefs.lickable ? "ON" : "OFF"])</a>"
dat += "<br><a style='background:[(user.client.prefs.vore_flags & LICKABLE) ? pref_on : pref_off];' href='?src=\ref[src];toggledlickable=1'>Toggle Licking (Currently: [(user.client.prefs.vore_flags & LICKABLE) ? "ON" : "OFF"])</a>"
//Returns the dat html to the vore_look
return dat
@@ -257,7 +257,7 @@
if(href_list["close"])
qdel(src) // Cleanup
user.openpanel = FALSE
user.vore_flags &= ~OPEN_PANEL
return
if(href_list["show_int"])
@@ -287,7 +287,7 @@
M.examine(user)
if("Help Out") //Help the inside-mob out
if(user.stat || user.absorbed || M.absorbed)
if(user.stat || user.vore_flags & ABSORBED || M.vore_flags & ABSORBED)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return TRUE
@@ -306,7 +306,7 @@
to_chat(OB.owner,"<font color='green'>Your body efficiently shoves [M] back where they belong.</font>")
if("Devour") //Eat the inside mob
if(user.absorbed || user.stat)
if(user.vore_flags & ABSORBED || user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return TRUE
@@ -687,58 +687,58 @@
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.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion")
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")
return FALSE
if("Allow Digestion")
user.digestable = TRUE
user.vore_flags |= DIGESTABLE
user.client.prefs.vore_flags |= DIGESTABLE
if("Prevent Digestion")
user.digestable = FALSE
user.client.prefs.digestable = user.digestable
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.devourable ? "Allowed" : "Prevented"]", "", "Allow Devourment", "Cancel", "Prevent Devourment")
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")
return FALSE
if("Allow Devourment")
user.devourable = TRUE
user.vore_flags |= DEVOURABLE
user.client.prefs.vore_flags |= DEVOURABLE
if("Prevent Devourment")
user.devourable = FALSE
user.client.prefs.devourable = user.devourable
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.feeding ? "Allowed" : "Prevented"]", "", "Allow Feeding", "Cancel", "Prevent Feeding")
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")
return FALSE
if("Allow Feeding")
user.feeding = TRUE
user.vore_flags |= FEEDING
user.client.prefs.vore_flags |= FEEDING
if("Prevent Feeding")
user.feeding = FALSE
user.client.prefs.feeding = user.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.lickable ? "Allowed" : "Prevented"]", "", "Allow Licking", "Cancel", "Prevent Licking")
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")
return FALSE
if("Allow Licking")
user.client.prefs.lickable = TRUE
user.client.prefs.vore_flags |= LICKABLE
if("Prevent Licking")
user.client.prefs.lickable = FALSE
user.client.prefs.vore_flags &= ~LICKABLE
//Refresh when interacted with, returning 1 makes vore_look.Topic update
return TRUE