Merge remote-tracking branch 'upstream/master'

This commit is contained in:
keronshb
2021-11-05 10:48:46 -04:00
75 changed files with 258 additions and 257 deletions
@@ -9261,9 +9261,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"axH" = (
/obj/structure/extinguisher_cabinet{
pixel_y = 30
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
@@ -10269,6 +10266,9 @@
dir = 8
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/structure/extinguisher_cabinet{
pixel_y = -32
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aAg" = (
@@ -80969,7 +80969,7 @@ aaa
aaa
aaa
aaa
syn
aaa
aaa
aaa
aaa
@@ -81226,7 +81226,7 @@ aaa
aaa
aaa
aaa
aaa
syn
aaa
aaa
aaa
+1 -5
View File
@@ -5,10 +5,6 @@
#define NONE 0
//for convenience
#define ENABLE_BITFIELD(variable, flag) (variable |= (flag))
#define DISABLE_BITFIELD(variable, flag) (variable &= ~(flag))
#define CHECK_BITFIELD(variable, flag) (variable & (flag))
#define TOGGLE_BITFIELD(variable, flag) (variable ^= (flag))
#define COPY_SPECIFIC_BITFIELDS(a,b,flags)\
do{\
var/_old = a & ~(flags);\
@@ -154,7 +150,7 @@ GLOBAL_LIST_INIT(bitflags, list(
//Mob mobility var flags
/// any flag
#define CHECK_MOBILITY(target, flags) CHECK_BITFIELD(target.mobility_flags, flags)
#define CHECK_MOBILITY(target, flags) (target.mobility_flags & flags)
#define CHECK_ALL_MOBILITY(target, flags) CHECK_MULTIPLE_BITFIELDS(target.mobility_flags, flags)
/// can move
+1 -1
View File
@@ -59,7 +59,7 @@
for(var/gpath in subtypesof(/obj/item/organ/genital))
var/obj/item/organ/genital/G = gpath
if(!CHECK_BITFIELD(initial(G.genital_flags), GENITAL_BLACKLISTED))
if(!(initial(G.genital_flags) & GENITAL_BLACKLISTED))
GLOB.genitals_list[initial(G.name)] = gpath
//END OF CIT CHANGES
+1 -1
View File
@@ -323,7 +323,7 @@
var/obj/item/clothing/mask/M = check
if(M.mask_adjusted)
M.adjustmask(C)
if(CHECK_BITFIELD(check.clothing_flags, ALLOWINTERNALS))
if((check.clothing_flags & ALLOWINTERNALS))
internals = TRUE
if(!internals)
to_chat(C, "<span class='warning'>You are not wearing an internals mask!</span>")
+1 -1
View File
@@ -260,7 +260,7 @@
return clamp((1.5 + (w_class/5)) * ((force_override || force) / 1.5), 0, 10 SECONDS) * CONFIG_GET(number/melee_stagger_factor)
/obj/item/proc/do_stagger_action(mob/living/target, mob/living/user, force_override)
if(!CHECK_BITFIELD(target.status_flags, CANSTAGGER))
if(!(target.status_flags & CANSTAGGER))
return FALSE
if(target.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE)
target.do_staggered_animation()
+1 -1
View File
@@ -29,7 +29,7 @@
expire = _expire
/datum/component/anti_magic/proc/on_equip(datum/source, mob/equipper, slot)
if(!CHECK_BITFIELD(allowed_slots, slotdefine2slotbit(slot))) //Check that the slot is valid for antimagic
if(!(allowed_slots & slotdefine2slotbit(slot))) //Check that the slot is valid for antimagic
UnregisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC)
return
RegisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC, .proc/protect, TRUE)
+2 -2
View File
@@ -52,7 +52,7 @@
new /obj/effect/temp_visual/heart(target.loc)
if(pet_emote)
target.emote("me", pet_type, pet_emote)
if(pet_moodlet && !CHECK_BITFIELD(target.flags_1, HOLOGRAM_1)) //prevents unlimited happiness petting park exploit.
if(pet_moodlet && !(target.flags_1 & HOLOGRAM_1)) //prevents unlimited happiness petting park exploit.
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, target, pet_moodlet, target)
/datum/element/wuv/proc/kick_the_dog(mob/target, mob/user)
@@ -60,5 +60,5 @@
return
if(punt_emote)
target.emote("me", punt_type, punt_emote)
if(punt_moodlet && !CHECK_BITFIELD(target.flags_1, HOLOGRAM_1))
if(punt_moodlet && !(target.flags_1 & HOLOGRAM_1))
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, target, punt_moodlet, target)
+1 -1
View File
@@ -141,7 +141,7 @@
if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs.
var/mob/living/L = new_character
if(L.client?.prefs && L.client.prefs.auto_ooc && L.client.prefs.chat_toggles & CHAT_OOC)
DISABLE_BITFIELD(L.client.prefs.chat_toggles,CHAT_OOC)
L.client.prefs.chat_toggles &= ~(CHAT_OOC)
hide_ckey = current.client?.prefs?.hide_ckey
+1 -1
View File
@@ -112,7 +112,7 @@
))
if(!can_contaminate || blacklisted[thing.type])
continue
if(CHECK_BITFIELD(thing.rad_flags, RAD_NO_CONTAMINATE) || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
if((thing.rad_flags & RAD_NO_CONTAMINATE) || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
continue
contam_atoms += thing
var/did_contam = 0
@@ -63,7 +63,7 @@
required_candidates = 1
weight = 7
cost = 5
requirements = list(40,30,20,10,10,10,10,10,10,10)
requirements = list(101,40,25,20,15,10,10,10,10,10)
repeatable = TRUE
//////////////////////////////////////////////
@@ -159,5 +159,5 @@
required_candidates = 1
weight = 4
cost = 10
requirements = list(101,101,101,50,40,10,10,10,10,10)
requirements = list(101,101,101,50,40,20,20,15,10,10)
repeatable = TRUE
@@ -254,7 +254,7 @@
antag_flag = ROLE_MALF
enemy_roles = list("Security Officer", "Warden","Detective","Head of Security", "Captain", "Scientist", "Chemist", "Research Director", "Chief Engineer")
exclusive_roles = list("AI")
required_enemies = list(4,4,4,4,4,4,2,2,2,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 3
cost = 35
@@ -304,11 +304,11 @@
antag_flag = "wizard mid"
antag_flag_override = ROLE_WIZARD
enemy_roles = list("Security Officer","Detective","Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 2
cost = 20
requirements = list(101,101,100,80,50,30,20,10,10,10)
requirements = list(101,101,100,60,40,20,20,20,10,10)
repeatable = TRUE
var/datum/mind/wizard
@@ -351,11 +351,11 @@
antag_datum = /datum/antagonist/nukeop
antag_flag_override = ROLE_OPERATIVE
enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden","Detective","Head of Security", "Captain")
required_enemies = list(3,3,3,3,3,2,1,1,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 5
weight = 3
cost = 35
requirements = list(101,101,101,80,50,40,30,15,10,10)
requirements = list(101,101,101,60,40,30,20,15,10,10)
var/list/operative_cap = list(2,2,3,3,3,4,5,5,5,5)
var/datum/team/nuclear/nuke_team
flags = HIGH_IMPACT_RULESET
@@ -393,11 +393,11 @@
antag_datum = /datum/antagonist/blob
antag_flag = ROLE_BLOB
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 2
cost = 10
requirements = list(101,101,101,101,70,40,25,20,10,10)
requirements = list(101,101,101,101,50,40,30,20,10,10)
repeatable = TRUE
/datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant)
@@ -412,11 +412,11 @@
protected_roles = list("Prisoner", "Security Officer", "Warden", "Detective", "Head of Security", "Captain")
restricted_roles = list("Cyborg", "AI", "Positronic Brain")
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 2
cost = 10
requirements = list(101,101,101,101,70,40,25,20,10,10)
requirements = list(101,101,101,101,50,40,30,20,10,10)
repeatable = TRUE
/datum/dynamic_ruleset/midround/blob_infection/trim_candidates()
@@ -450,11 +450,11 @@
antag_datum = /datum/antagonist/xeno
antag_flag = ROLE_ALIEN
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 3
cost = 10
requirements = list(101,101,101,101,60,50,30,20,10,10)
requirements = list(101,101,101,101,50,40,30,20,10,10)
repeatable = TRUE
var/list/vents = list()
@@ -496,11 +496,11 @@
antag_flag = "Nightmare"
antag_flag_override = ROLE_ALIEN
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 4
cost = 10
requirements = list(101,101,101,40,30,20,10,10,10,10)
requirements = list(101,101,50,30,25,20,10,10,10,10)
repeatable = TRUE
var/list/spawn_locs = list()
@@ -542,11 +542,11 @@
antag_flag = ROLE_SPACE_DRAGON
antag_flag_override = ROLE_SPACE_DRAGON
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 3
cost = 10
requirements = list(101,101,101,101,60,50,30,20,10,10)
requirements = list(101,101,101,101,50,40,30,20,10,10)
repeatable = TRUE
var/list/spawn_locs = list()
@@ -586,12 +586,12 @@
antag_flag = "Abductor"
antag_flag_override = ROLE_ABDUCTOR
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 2
required_applicants = 2
weight = 3
cost = 10
requirements = list(101,101,101,101,101,40,25,20,10,10)
requirements = list(101,101,101,101,101,30,20,15,10,10)
repeatable = TRUE
var/datum/team/abductor_team/new_team
@@ -625,11 +625,11 @@
antag_flag_override = ROLE_ALIEN
required_type = /mob/dead/observer
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 0
weight = 3
cost = 10
requirements = list(101,101,101,101,60,50,30,20,10,10)
requirements = list(101,101,101,101,50,40,30,20,10,10)
repeatable = TRUE
/datum/dynamic_ruleset/midround/swarmers/execute()
@@ -658,11 +658,11 @@
antag_flag = "Space Ninja"
antag_flag_override = ROLE_NINJA
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 4
cost = 10
requirements = list(101,101,101,80,60,50,30,20,10,10)
requirements = list(101,101,101,60,50,30,10,10,10,10)
repeatable = TRUE
var/list/spawn_locs = list()
@@ -699,11 +699,11 @@
antag_flag = "Revenant"
antag_flag_override = ROLE_REVENANT
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 4
cost = 10
requirements = list(101,101,101,70,50,40,20,15,10,10)
requirements = list(101,101,50,30,25,20,10,10,10,10)
repeatable = TRUE
var/dead_mobs_required = 20
var/need_extra_spawns_value = 15
@@ -748,7 +748,7 @@
required_candidates = 1
weight = 4
cost = 10
requirements = list(101,101,101,70,50,40,20,15,10,10)
requirements = list(101,101,50,30,25,20,10,10,10,10)
repeatable = TRUE
/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/generate_ruleset_body(mob/applicant)
@@ -765,11 +765,11 @@
antag_flag = "Space Pirates"
required_type = /mob/dead/observer
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 0
weight = 4
cost = 10
requirements = list(101,101,101,50,40,25,10,10,10,10)
requirements = list(101,101,101,40,30,20,10,10,10,10)
repeatable = TRUE
/datum/dynamic_ruleset/midround/pirates/acceptable(population=0, threat=0)
@@ -103,7 +103,7 @@
weight = 3
cost = 16
scaling_cost = 10
requirements = list(101,70,60,50,40,20,20,10,10,10)
requirements = list(101,60,50,40,30,20,15,10,10,10)
antag_cap = list("denominator" = 29)
/datum/dynamic_ruleset/roundstart/changeling/pre_execute(population)
@@ -138,7 +138,7 @@
weight = 3
cost = 15
scaling_cost = 9
requirements = list(101,101,101,55,40,25,20,15,10,10)//higher because of 'round end'
requirements = list(101,101,101,50,40,20,20,15,10,10)//higher because of 'round end'
antag_cap = list("denominator" = 24)
@@ -179,7 +179,7 @@
required_candidates = 1
weight = 3
cost = 20
requirements = list(101,101,100,80,50,40,30,20,10,10)//100 because of configt, otherwise equal to nukies
requirements = list(101,101,100,60,40,20,20,20,10,10)//100 because of configt, otherwise equal to nukies
var/list/roundstart_wizards = list()
/datum/dynamic_ruleset/roundstart/wizard/acceptable(population=0, threat=0)
@@ -223,7 +223,7 @@
weight = 2 //lower weight because of easy steamroll potential
cost = 20
//requirements = list(100,90,80,60,40,30,10,10,10,10)
requirements = list(101,101,101,101,60,40,20,10,10,10)
requirements = list(101,101,101,101,50,40,20,10,10,10)
flags = HIGH_IMPACT_RULESET
antag_cap = list("denominator" = 20, "offset" = 1)
var/datum/team/cult/main_cult
@@ -279,7 +279,7 @@
required_candidates = 5
weight = 3
cost = 20
requirements = list(101,101,101,80,50,40,30,15,10,10)
requirements = list(101,101,101,60,40,30,20,15,10,10)
flags = HIGH_IMPACT_RULESET
antag_cap = list("denominator" = 18, "offset" = 1)
var/datum/team/nuclear/nuke_team
@@ -365,7 +365,7 @@
weight = 2
delay = 7 MINUTES
cost = 20
requirements = list(101,101,101,101,60,40,20,10,10,10)
requirements = list(101,101,101,101,50,40,20,10,10,10)
antag_cap = 3
flags = HIGH_IMPACT_RULESET
blocking_rules = list(/datum/dynamic_ruleset/latejoin/provocateur)
@@ -445,7 +445,7 @@
required_candidates = 2
weight = 3 //higher weight than blood cult and revs because it's more balanced
cost = 20
requirements = list(101,101,101,101,60,40,20,10,10,10) //slightly higher than nukies
requirements = list(101,101,101,101,50,40,20,10,10,10) //slightly higher than nukies
flags = HIGH_IMPACT_RULESET
antag_cap = list("denominator" = 20, "offset" = 1)
var/datum/team/clockcult/main_clockcult
+2 -2
View File
@@ -62,7 +62,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
update_icon()
/obj/machinery/requests_console/update_icon_state()
if(CHECK_BITFIELD(stat, NOPOWER))
if((stat & NOPOWER))
set_light(0)
else
set_light(1.4, 0.7, "#34D352")//green light
@@ -72,7 +72,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
icon_state="req_comp_open"
else
icon_state="req_comp_rewired"
else if(CHECK_BITFIELD(stat, NOPOWER))
else if((stat & NOPOWER))
if(icon_state != "req_comp_off")
icon_state = "req_comp_off"
else
@@ -1,5 +1,5 @@
/*
The log console for viewing the entire telecomms
The log console for viewing the entire telecomms
network log
*/
@@ -15,7 +15,7 @@
var/network = "NULL" // the network to probe
var/notice = ""
var/universal_translate = FALSE // set to TRUE(1) if it can translate nonhuman speech
var/universal_translate = FALSE // set to TRUE(1) if it can translate nonhuman speech
/obj/machinery/computer/telecomms/server/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
@@ -53,7 +53,7 @@
if(!LAZYLEN(SelectedMachine.log_entries))
return data_out
for(var/datum/comm_log_entry/C in SelectedMachine.log_entries)
var/list/data = list()
data["name"] = C.name //name of the file
@@ -104,7 +104,7 @@
data["message"] = C.parameters["message"]
else
data["message"] = "(unintelligible)"
data_out["selected_logs"] += list(data)
return data_out
@@ -133,7 +133,7 @@
if(LAZYLEN(machinelist) > 0)
notice = "FAILED: Cannot probe when buffer full"
return
for(var/obj/machinery/telecomms/T in GLOB.telecomms_list) //telecomms just went global!
if(T.network == network)
LAZYADD(machinelist, T)
@@ -147,7 +147,7 @@
SelectedMachine = T
break
if("delete")
if(!src.allowed(usr) && !CHECK_BITFIELD(obj_flags, EMAGGED))
if(!src.allowed(usr) && !(obj_flags & EMAGGED))
to_chat(usr, "<span class='danger'>ACCESS DENIED.</span>")
return
@@ -156,7 +156,7 @@
return
var/datum/comm_log_entry/D = locate(params["value"])
if(!istype(D))
notice = "NOTICE: Object not found"
notice = "NOTICE: Object not found"
return
notice = "Deleted entry: [D.name]"
LAZYREMOVE(SelectedMachine.log_entries, D)
@@ -94,9 +94,9 @@
if(istype(S) && S.hack_software)
data_out["canhack"] = TRUE
data_out["hacking"] = (hacking || CHECK_BITFIELD(obj_flags, EMAGGED))
data_out["hacking"] = (hacking || (obj_flags & EMAGGED))
if(hacking)
data_out["borg"] = ((isAI(user) || iscyborg(user)) && !CHECK_BITFIELD(obj_flags, EMAGGED)) //even borgs can't read emag
data_out["borg"] = ((isAI(user) || iscyborg(user)) && !(obj_flags & EMAGGED)) //even borgs can't read emag
return data_out
data_out["servers"] = list()
@@ -324,7 +324,7 @@
update_static_data(usr)
/obj/machinery/computer/message_monitor/attackby(obj/item/O, mob/living/user, params)
if(O.tool_behaviour == TOOL_SCREWDRIVER && CHECK_BITFIELD(obj_flags, EMAGGED))
if(O.tool_behaviour == TOOL_SCREWDRIVER && (obj_flags & EMAGGED))
//Stops people from just unscrewing the monitor and putting it back to get the console working again.
//Why this though, you should make it emag to a board level. (i wont do it)
to_chat(user, "<span class='warning'>It is too hot to mess with!</span>")
@@ -333,12 +333,12 @@
/obj/machinery/computer/message_monitor/emag_act(mob/user)
. = ..()
if(CHECK_BITFIELD(obj_flags, EMAGGED))
if((obj_flags & EMAGGED))
return
if(isnull(linkedServer))
to_chat(user, "<span class='notice'>A no server error appears on the screen.</span>")
return
ENABLE_BITFIELD(obj_flags, EMAGGED)
obj_flags |= EMAGGED
spark_system.set_up(5, 0, src)
spark_system.start()
var/obj/item/paper/monitorkey/MK = new(loc, linkedServer)
@@ -366,7 +366,7 @@
message = ""
/obj/machinery/computer/message_monitor/proc/UnmagConsole()
DISABLE_BITFIELD(obj_flags, EMAGGED)
obj_flags &= ~(EMAGGED)
message = ""
/obj/machinery/computer/message_monitor/proc/ResetMessage()
@@ -119,7 +119,7 @@ GLOBAL_LIST_EMPTY(telecomms_list)
/obj/machinery/telecomms/proc/update_power()
if(toggled)
// if powered, on. if not powered, off. if too damaged, off
if(CHECK_BITFIELD(stat, (BROKEN | NOPOWER | EMPED)))
if(stat &(BROKEN | NOPOWER | EMPED))
on = FALSE
else
on = TRUE
@@ -137,11 +137,11 @@ GLOBAL_LIST_EMPTY(telecomms_list)
/obj/machinery/telecomms/emp_act(severity)
. = ..()
if(CHECK_BITFIELD(., EMP_PROTECT_SELF))
if((. & EMP_PROTECT_SELF))
return
if(prob(severity))
if(!CHECK_BITFIELD(stat, EMPED))
ENABLE_BITFIELD(stat, EMPED)
if(!(stat & EMPED))
stat |= EMPED
var/duration = severity * 35
spawn(rand(duration - 20, duration + 20)) // Takes a long time for the machines to reboot.
DISABLE_BITFIELD(stat, EMPED)
stat &= ~(EMPED)
@@ -276,7 +276,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/critfail()
..()
if(reagents)
DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.reagents_holder_flags &= ~(NO_REACT)
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/can_attach(obj/mecha/medical/M)
if(..())
+5 -5
View File
@@ -450,8 +450,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
A.Remove(user)
if(item_flags & DROPDEL)
qdel(src)
DISABLE_BITFIELD(item_flags, IN_INVENTORY)
DISABLE_BITFIELD(item_flags, IN_STORAGE)
item_flags &= ~(IN_INVENTORY)
item_flags &= ~(IN_STORAGE)
SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user)
remove_outline()
// if(!silent)
@@ -529,8 +529,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
if(item_action_slot_check(slot, user, A)) //some items only give their actions buttons when in a specific slot.
A.Grant(user)
item_flags |= IN_INVENTORY
if(CHECK_BITFIELD(item_flags, IN_STORAGE)) // Left storage item but somehow has the bitfield active still.
DISABLE_BITFIELD(item_flags, IN_STORAGE)
if((item_flags & IN_STORAGE)) // Left storage item but somehow has the bitfield active still.
item_flags &= ~(IN_STORAGE)
// if(!initial)
// if(equip_sound && (slot_flags & slot))
// playsound(src, equip_sound, EQUIP_SOUND_VOLUME, TRUE, ignore_walls = FALSE)
@@ -1054,7 +1054,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
*/
/obj/item/proc/set_slowdown(new_slowdown)
slowdown = new_slowdown
if(CHECK_BITFIELD(item_flags, IN_INVENTORY))
if((item_flags & IN_INVENTORY))
var/mob/living/L = loc
if(istype(L))
L.update_equipment_speed_mods()
+5 -5
View File
@@ -190,7 +190,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
qdel(src)
return
// allowing reagents to react after being lit
DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.reagents_holder_flags &= ~(NO_REACT)
reagents.handle_reactions()
icon_state = icon_on
item_state = icon_on
@@ -762,7 +762,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(!screw)
screw = TRUE
to_chat(user, "<span class='notice'>You open the cap on [src].</span>")
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags |= OPENCONTAINER
if(obj_flags & EMAGGED)
add_overlay("vapeopen_high")
else if(super)
@@ -772,7 +772,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
screw = FALSE
to_chat(user, "<span class='notice'>You close the cap on [src].</span>")
DISABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags &= ~(OPENCONTAINER)
cut_overlays()
if(O.tool_behaviour == TOOL_MULTITOOL)
@@ -822,7 +822,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(slot == SLOT_WEAR_MASK)
if(!screw)
to_chat(user, "<span class='notice'>You start puffing on the vape.</span>")
DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.reagents_holder_flags &= ~(NO_REACT)
START_PROCESSING(SSobj, src)
else //it will not start if the vape is opened.
to_chat(user, "<span class='warning'>You need to close the cap first!</span>")
@@ -831,7 +831,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
. = ..()
var/mob/living/carbon/C = user
if(C.get_item_by_slot(SLOT_WEAR_MASK) == src)
ENABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.reagents_holder_flags |= NO_REACT
STOP_PROCESSING(SSobj, src)
/obj/item/clothing/mask/vape/proc/hand_reagents()//had to rename to avoid duplicate error
@@ -326,7 +326,7 @@
cleaning_cycles--
cleaning = TRUE
for(var/mob/living/carbon/C in (touchable_items))
if((C.status_flags & GODMODE) || !CHECK_BITFIELD(C.vore_flags, DIGESTABLE))
if((C.status_flags & GODMODE) || !(C.vore_flags & DIGESTABLE))
items_preserved += C
else
C.adjustBruteLoss(2)
@@ -335,7 +335,7 @@
var/atom/target = pick(touchable_items)
if(iscarbon(target)) //Handle the target being a mob
var/mob/living/carbon/T = target
if(T.stat == DEAD && CHECK_BITFIELD(T.vore_flags, DIGESTABLE)) //Mob is now dead
if(T.stat == DEAD && (T.vore_flags & DIGESTABLE)) //Mob is now dead
message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[hound.x];Y=[hound.y];Z=[hound.z]'>JMP</a>" : "null"])")
to_chat(hound,"<span class='notice'>You feel your belly slowly churn around [T], breaking them down into a soft slurry to be used as power for your systems.</span>")
to_chat(T,"<span class='notice'>You feel [hound]'s belly slowly churn around your form, breaking you down into a soft slurry to be used as power for [hound]'s systems.</span>")
@@ -433,7 +433,7 @@
var/mob/living/silicon/robot/hound = get_host()
if(!hound || !istype(target) || !proximity || target.anchored)
return
if (!CHECK_BITFIELD(target.vore_flags,DEVOURABLE))
if (!(target.vore_flags & DEVOURABLE))
to_chat(user, "The target registers an error code. Unable to insert into [src].")
return
if(patient)
+12 -12
View File
@@ -174,11 +174,11 @@
/obj/item/shield/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
if(ismovable(object))
var/atom/movable/AM = object
if(CHECK_BITFIELD(shield_flags, SHIELD_TRANSPARENT) && (AM.pass_flags & PASSGLASS))
if((shield_flags & SHIELD_TRANSPARENT) && (AM.pass_flags & PASSGLASS))
return BLOCK_NONE
if(CHECK_BITFIELD(shield_flags, SHIELD_NO_RANGED) && (attack_type & ATTACK_TYPE_PROJECTILE))
if((shield_flags & SHIELD_NO_RANGED) && (attack_type & ATTACK_TYPE_PROJECTILE))
return BLOCK_NONE
if(CHECK_BITFIELD(shield_flags, SHIELD_NO_MELEE) && (attack_type & ATTACK_TYPE_MELEE))
if((shield_flags & SHIELD_NO_MELEE) && (attack_type & ATTACK_TYPE_MELEE))
return BLOCK_NONE
if(attack_type & ATTACK_TYPE_THROWN)
final_block_chance += 30
@@ -249,15 +249,15 @@
if(attack_type & ATTACK_TYPE_MELEE)
var/obj/hittingthing = object
if(hittingthing.damtype == BURN)
if(CHECK_BITFIELD(shield_flags, SHIELD_ENERGY_WEAK))
if((shield_flags & SHIELD_ENERGY_WEAK))
final_damage *= 2
else if(CHECK_BITFIELD(shield_flags, SHIELD_ENERGY_STRONG))
else if((shield_flags & SHIELD_ENERGY_STRONG))
final_damage *= 0.5
if(hittingthing.damtype == BRUTE)
if(CHECK_BITFIELD(shield_flags, SHIELD_KINETIC_WEAK))
if((shield_flags & SHIELD_KINETIC_WEAK))
final_damage *= 2
else if(CHECK_BITFIELD(shield_flags, SHIELD_KINETIC_STRONG))
else if((shield_flags & SHIELD_KINETIC_STRONG))
final_damage *= 0.5
if(hittingthing.damtype == STAMINA || hittingthing.damtype == TOX || hittingthing.damtype == CLONE || hittingthing.damtype == BRAIN || hittingthing.damtype == OXY)
@@ -266,19 +266,19 @@
if(attack_type & ATTACK_TYPE_PROJECTILE)
var/obj/item/projectile/shootingthing = object
if(is_energy_reflectable_projectile(shootingthing))
if(CHECK_BITFIELD(shield_flags, SHIELD_ENERGY_WEAK))
if((shield_flags & SHIELD_ENERGY_WEAK))
final_damage *= 2
else if(CHECK_BITFIELD(shield_flags, SHIELD_ENERGY_STRONG))
else if((shield_flags & SHIELD_ENERGY_STRONG))
final_damage *= 0.5
if(!is_energy_reflectable_projectile(object))
if(CHECK_BITFIELD(shield_flags, SHIELD_KINETIC_WEAK))
if((shield_flags & SHIELD_KINETIC_WEAK))
final_damage *= 2
else if(CHECK_BITFIELD(shield_flags, SHIELD_KINETIC_STRONG))
else if((shield_flags & SHIELD_KINETIC_STRONG))
final_damage *= 0.5
if(shootingthing.damage_type == STAMINA)
if(CHECK_BITFIELD(shield_flags, SHIELD_DISABLER_DISRUPTED))
if((shield_flags & SHIELD_DISABLER_DISRUPTED))
final_damage *= 3 //disablers melt these kinds of shields. Really meant more for holoshields.
else
final_damage = 0
+2 -2
View File
@@ -1290,9 +1290,9 @@
var/toxic_risk = min(round(spess_current_year - expiration_date * 0.01), 1)
for(var/obj/item/reagent_containers/food/snacks/S in contents)
if(prob(gross_risk))
ENABLE_BITFIELD(S.foodtype, GROSS)
S.foodtype |= GROSS
if(prob(toxic_risk))
ENABLE_BITFIELD(S.foodtype, TOXIC)
S.foodtype |= TOXIC
/obj/item/storage/box/mre/menu1
name = "\improper Nanotrasen MRE Ration Kit Menu 1"
+1 -1
View File
@@ -370,7 +370,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
desc = replacetext(desc, "Danger", "Bouncy")
desc = replacetext(desc, "robust", "safe")
desc = replacetext(desc, "heavier", "bouncier")
DISABLE_BITFIELD(flags_1, CONDUCT_1)
flags_1 &= ~(CONDUCT_1)
custom_materials = null
damtype = STAMINA
force += 3 //to compensate the higher stamina K.O. threshold compared to actual health.
+1 -1
View File
@@ -48,7 +48,7 @@
var/obj/item/clothing/mask/M = check
if(M.mask_adjusted)
M.adjustmask(H)
if(CHECK_BITFIELD(check.clothing_flags, ALLOWINTERNALS))
if((check.clothing_flags & ALLOWINTERNALS))
internals = TRUE
if(!internals)
+2 -2
View File
@@ -291,10 +291,10 @@
status = !status
if(status)
to_chat(user, "<span class='notice'>You resecure [src] and close the fuel tank.</span>")
DISABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags &= ~(OPENCONTAINER)
else
to_chat(user, "<span class='notice'>[src] can now be attached, modified, and refuelled.</span>")
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags |= OPENCONTAINER
add_fingerprint(user)
/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user)
+1 -1
View File
@@ -512,7 +512,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
/turf/shove_act(mob/living/target, mob/living/user, pre_act = FALSE)
var/list/possibilities
for(var/obj/O in contents)
if(CHECK_BITFIELD(O.obj_flags, SHOVABLE_ONTO))
if((O.obj_flags & SHOVABLE_ONTO))
LAZYADD(possibilities, O)
else if(!O.CanPass(target, src))
return FALSE
+5 -5
View File
@@ -262,7 +262,7 @@
selectors_used |= query.where_switched
combined_refs |= query.select_refs
running -= query
if(!CHECK_BITFIELD(query.options, SDQL2_OPTION_DO_NOT_AUTOGC))
if(!(query.options & SDQL2_OPTION_DO_NOT_AUTOGC))
QDEL_IN(query, 50)
else
if(usr)
@@ -442,19 +442,19 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
if("select")
switch(value)
if("force_nulls")
DISABLE_BITFIELD(options, SDQL2_OPTION_SELECT_OUTPUT_SKIP_NULLS)
options &= ~(SDQL2_OPTION_SELECT_OUTPUT_SKIP_NULLS)
if("proccall")
switch(value)
if("blocking")
ENABLE_BITFIELD(options, SDQL2_OPTION_BLOCKING_CALLS)
options |= SDQL2_OPTION_BLOCKING_CALLS
if("priority")
switch(value)
if("high")
ENABLE_BITFIELD(options, SDQL2_OPTION_HIGH_PRIORITY)
options |= SDQL2_OPTION_HIGH_PRIORITY
if("autogc")
switch(value)
if("keep_alive")
ENABLE_BITFIELD(options, SDQL2_OPTION_DO_NOT_AUTOGC)
options |= SDQL2_OPTION_DO_NOT_AUTOGC
/datum/SDQL2_query/proc/ARun()
INVOKE_ASYNC(src, .proc/Run)
@@ -9,7 +9,7 @@
var/datum/game_mode/dynamic/mode
if(istype(SSticker.mode,/datum/game_mode/dynamic))
mode = SSticker.mode
assassin_prob = max(0,mode.threat_level-40)
assassin_prob = max(0,mode.threat_level-20)
if(prob(assassin_prob))
var/datum/objective/assassinate/once/kill_objective = new
kill_objective.owner = T.owner
+3 -3
View File
@@ -55,7 +55,7 @@
return genit_list
/obj/item/organ/genital/proc/climaxable(mob/living/carbon/human/H, silent = FALSE) //returns the fluid source (ergo reagents holder) if found.
if(CHECK_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION))
if((genital_flags & GENITAL_FUID_PRODUCTION))
. = reagents
else
if(linked_organ)
@@ -124,7 +124,7 @@
var/list/worn_stuff = get_equipped_items()
for(var/obj/item/organ/genital/G in internal_organs)
if(CHECK_BITFIELD(G.genital_flags, CAN_CLIMAX_WITH) && G.is_exposed(worn_stuff)) //filter out what you can't masturbate with
if((G.genital_flags & CAN_CLIMAX_WITH) && G.is_exposed(worn_stuff)) //filter out what you can't masturbate with
LAZYADD(genitals_list, G)
if(LAZYLEN(genitals_list))
var/obj/item/organ/genital/ret_organ = input(src, "with what?", "Climax", null) as null|obj in genitals_list
@@ -212,7 +212,7 @@
if(forced_climax) //Something forced us to cum, this is not a masturbation thing and does not progress to the other checks
log_message("was forced to climax by [cause]",LOG_EMOTE)
for(var/obj/item/organ/genital/G in internal_organs)
if(!CHECK_BITFIELD(G.genital_flags, CAN_CLIMAX_WITH)) //Skip things like wombs and testicles
if(!(G.genital_flags & CAN_CLIMAX_WITH)) //Skip things like wombs and testicles
continue
mob_climax_outside(G, mb_time = 0) //removed climax timer for sudden, forced orgasms
//Now all genitals that could climax, have.
+1 -1
View File
@@ -112,7 +112,7 @@
var/list/genital_list = list()
for(var/obj/item/organ/genital/G in internal_organs)
if(!CHECK_BITFIELD(G.genital_flags, GENITAL_INTERNAL))
if(!(G.genital_flags & GENITAL_INTERNAL))
genital_list += G
if(!genital_list.len) //There is nothing to expose
return
+2 -2
View File
@@ -48,7 +48,7 @@
else
desc += " You estimate that they're [uppertext(size)]-cups."
if(CHECK_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION) && aroused_state)
if((genital_flags & GENITAL_FUID_PRODUCTION) && aroused_state)
var/datum/reagent/R = GLOB.chemical_reagents_list[fluid_id]
if(R)
desc += " They're leaking [lowertext(R.name)]."
@@ -115,7 +115,7 @@
size = D.features["breasts_size"]
shape = D.features["breasts_shape"]
if(!D.features["breasts_producing"])
DISABLE_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION|CAN_CLIMAX_WITH|CAN_MASTURBATE_WITH)
genital_flags &= ~ (GENITAL_FUID_PRODUCTION|CAN_CLIMAX_WITH|CAN_MASTURBATE_WITH)
if(!isnum(size))
cached_size = breast_values[size]
else
+14 -14
View File
@@ -126,29 +126,29 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
var/list/json_from_file = json_decode(file2text(vr_path))
if(json_from_file)
if(json_from_file["digestable"])
ENABLE_BITFIELD(vore_flags,DIGESTABLE)
vore_flags |= DIGESTABLE
if(json_from_file["devourable"])
ENABLE_BITFIELD(vore_flags,DEVOURABLE)
vore_flags |= DEVOURABLE
if(json_from_file["feeding"])
ENABLE_BITFIELD(vore_flags,FEEDING)
vore_flags |= FEEDING
if(json_from_file["lickable"])
ENABLE_BITFIELD(vore_flags,LICKABLE)
vore_flags |= LICKABLE
belly_prefs = json_from_file["belly_prefs"]
vore_taste = json_from_file["vore_taste"]
for(var/V in all_quirks) // quirk migration
switch(V)
if("Acute hepatic pharmacokinesis")
DISABLE_BITFIELD(cit_toggles, PENIS_ENLARGEMENT)
DISABLE_BITFIELD(cit_toggles, BREAST_ENLARGEMENT)
ENABLE_BITFIELD(cit_toggles,FORCED_FEM)
ENABLE_BITFIELD(cit_toggles,FORCED_MASC)
cit_toggles &= ~(PENIS_ENLARGEMENT)
cit_toggles &= ~(BREAST_ENLARGEMENT)
cit_toggles |= FORCED_FEM
cit_toggles |= FORCED_MASC
all_quirks -= V
if("Crocin Immunity")
ENABLE_BITFIELD(cit_toggles,NO_APHRO)
cit_toggles |= NO_APHRO
all_quirks -= V
if("Buns of Steel")
ENABLE_BITFIELD(cit_toggles,NO_ASS_SLAP)
cit_toggles |= NO_ASS_SLAP
all_quirks -= V
if(features["meat_type"] == "Inesct")
@@ -178,13 +178,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feeding"] >> feeding
S["lickable"] >> lickable
if(digestable)
ENABLE_BITFIELD(vore_flags,DIGESTABLE)
vore_flags |= DIGESTABLE
if(devourable)
ENABLE_BITFIELD(vore_flags,DEVOURABLE)
vore_flags |= DEVOURABLE
if(feeding)
ENABLE_BITFIELD(vore_flags,FEEDING)
vore_flags |= FEEDING
if(lickable)
ENABLE_BITFIELD(vore_flags,LICKABLE)
vore_flags |= LICKABLE
if(current_version < 30)
switch(features["taur"])
+1 -1
View File
@@ -67,7 +67,7 @@
/obj/item/clothing/Initialize()
. = ..()
if(CHECK_BITFIELD(clothing_flags, VOICEBOX_TOGGLABLE))
if((clothing_flags & VOICEBOX_TOGGLABLE))
actions_types += /datum/action/item_action/toggle_voice_box
if(ispath(pocket_storage_component_path))
LoadComponent(pocket_storage_component_path)
+3 -3
View File
@@ -11,9 +11,9 @@
var/datum/beepsky_fashion/beepsky_fashion //the associated datum for applying this to a secbot
/obj/item/clothing/mask/attack_self(mob/user)
if(CHECK_BITFIELD(clothing_flags, VOICEBOX_TOGGLABLE))
TOGGLE_BITFIELD(clothing_flags, VOICEBOX_DISABLED)
var/status = !CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED)
if((clothing_flags & VOICEBOX_TOGGLABLE))
(clothing_flags ^= VOICEBOX_DISABLED)
var/status = !(clothing_flags & VOICEBOX_DISABLED)
to_chat(user, "<span class='notice'>You turn the voice box in [src] [status ? "on" : "off"].</span>")
/obj/item/clothing/mask/equipped(mob/M, slot)
+4 -4
View File
@@ -124,7 +124,7 @@
modifies_speech = TRUE
/obj/item/clothing/mask/pig/handle_speech(datum/source, list/speech_args)
if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
if(!(clothing_flags & VOICEBOX_DISABLED))
speech_args[SPEECH_MESSAGE] = pick("Oink!","Squeeeeeeee!","Oink Oink!")
/obj/item/clothing/mask/pig/cursed //needs to be different otherwise you could turn the speedmodification off and on
@@ -150,7 +150,7 @@
modifies_speech = TRUE
/obj/item/clothing/mask/frog/handle_speech(datum/source, list/speech_args) //whenever you speak
if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
if(!(clothing_flags & VOICEBOX_DISABLED))
if(prob(5)) //sometimes, the angry spirit finds others words to speak.
speech_args[SPEECH_MESSAGE] = pick("HUUUUU!!","SMOOOOOKIN'!!","Hello my baby, hello my honey, hello my rag-time gal.", "Feels bad, man.", "GIT DIS GUY OFF ME!!" ,"SOMEBODY STOP ME!!", "NORMIES, GET OUT!!")
else
@@ -180,7 +180,7 @@
modifies_speech = TRUE
/obj/item/clothing/mask/cowmask/handle_speech(datum/source, list/speech_args)
if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
if(!(clothing_flags & VOICEBOX_DISABLED))
speech_args[SPEECH_MESSAGE] = pick("Moooooooo!","Moo!","Moooo!")
@@ -205,7 +205,7 @@
clothing_flags = VOICEBOX_TOGGLABLE
/obj/item/clothing/mask/horsehead/handle_speech(datum/source, list/speech_args)
if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
if(!(clothing_flags & VOICEBOX_DISABLED))
speech_args[SPEECH_MESSAGE] = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
@@ -500,7 +500,7 @@
/obj/item/reagent_containers/food/drinks/soda_cans/attack_self(mob/user)
if(!is_drainable())
to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags |= OPENCONTAINER
playsound(src, "can_open", 50, 1)
spillable = TRUE
return
+2 -2
View File
@@ -473,9 +473,9 @@
/mob/living/simple_animal/jacq/update_mobility()
. = ..()
if(busy)
DISABLE_BITFIELD(., MOBILITY_MOVE)
. &= ~(MOBILITY_MOVE)
else
ENABLE_BITFIELD(., MOBILITY_MOVE)
. |= MOBILITY_MOVE
mobility_flags = .
+1 -1
View File
@@ -78,7 +78,7 @@
// these vars are not really standardized but all would theoretically create stuff on death
for(var/v in list("butcher_results","corpse","weapon1","weapon2","blood_volume") & mob.vars)
mob.vars[v] = null
ENABLE_BITFIELD(mob.flags_1, HOLOGRAM_1)
mob.flags_1 |= HOLOGRAM_1
if(isliving(mob))
var/mob/living/L = mob
L.vore_flags = 0
@@ -59,12 +59,12 @@
/obj/structure/fermenting_barrel/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)
reagents.reagents_holder_flags &= ~(DRAINABLE)
reagents.reagents_holder_flags |= REFILLABLE
to_chat(user, "<span class='notice'>You open [src], letting you fill it.</span>")
else
DISABLE_BITFIELD(reagents.reagents_holder_flags, REFILLABLE)
ENABLE_BITFIELD(reagents.reagents_holder_flags, DRAINABLE)
reagents.reagents_holder_flags &= ~(REFILLABLE)
reagents.reagents_holder_flags |= DRAINABLE
to_chat(user, "<span class='notice'>You close [src], letting you draw from its tap.</span>")
update_icon()
@@ -96,12 +96,12 @@
/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)
reagents.reagents_holder_flags &= ~(DRAINABLE)
reagents.reagents_holder_flags |= REFILLABLE
to_chat(user, "<span class='notice'>You open [src], letting you fill it.</span>")
else
DISABLE_BITFIELD(reagents.reagents_holder_flags, REFILLABLE)
ENABLE_BITFIELD(reagents.reagents_holder_flags, DRAINABLE)
reagents.reagents_holder_flags &= ~(REFILLABLE)
reagents.reagents_holder_flags |= DRAINABLE
to_chat(user, "<span class='notice'>You close [src], letting you draw from its tap.</span>")
update_icon()
+1 -1
View File
@@ -365,7 +365,7 @@
opened = TRUE
spillable = !screwdrivered
reagent_flags = OPENCONTAINER
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags |= OPENCONTAINER
icon_state = screwdrivered ? "coconut_carved" : "coconut_chopped"
desc = "A coconut. [screwdrivered ? "This one's got a hole in it" : "This one's sliced open, with all its delicious contents for your eyes to savour"]."
playsound(user, W.hitsound, 50, 1, -1)
@@ -55,14 +55,14 @@
id = "[type]"
/datum/instrument/proc/Initialize()
if(CHECK_BITFIELD(instrument_flags, INSTRUMENT_LEGACY | INSTRUMENT_DO_NOT_AUTOSAMPLE))
if(instrument_flags & (INSTRUMENT_LEGACY | INSTRUMENT_DO_NOT_AUTOSAMPLE))
return
calculate_samples()
/datum/instrument/proc/ready()
if(CHECK_BITFIELD(instrument_flags, INSTRUMENT_LEGACY))
if((instrument_flags & INSTRUMENT_LEGACY))
return legacy_instrument_path && legacy_instrument_ext
else if(CHECK_BITFIELD(instrument_flags, INSTRUMENT_DO_NOT_AUTOSAMPLE))
else if((instrument_flags & INSTRUMENT_DO_NOT_AUTOSAMPLE))
return length(samples)
return (length(samples) >= 128)
@@ -77,7 +77,7 @@
/obj/item/integrated_circuit/reagent/injector/Initialize()
. = ..()
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags |= OPENCONTAINER
/obj/item/integrated_circuit/reagent/injector/on_reagent_change(changetype)
push_vol()
@@ -273,7 +273,7 @@
/obj/item/integrated_circuit/reagent/storage/Initialize()
. = ..()
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags |= OPENCONTAINER
/obj/item/integrated_circuit/reagent/storage/do_work()
set_pin_data(IC_OUTPUT, 2, WEAKREF(src))
@@ -303,7 +303,7 @@
/obj/item/integrated_circuit/reagent/storage/cryo/Initialize()
. = ..()
ENABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.reagents_holder_flags |= NO_REACT
/obj/item/integrated_circuit/reagent/storage/grinder
name = "reagent grinder"
@@ -574,7 +574,7 @@
/obj/item/integrated_circuit/reagent/smoke/Initialize()
. = ..()
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags |= OPENCONTAINER
/obj/item/integrated_circuit/reagent/smoke/on_reagent_change(changetype)
//reset warning only if we have reagents now
@@ -632,7 +632,7 @@
/obj/item/integrated_circuit/reagent/extinguisher/Initialize()
.=..()
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
reagents.reagents_holder_flags |= OPENCONTAINER
set_pin_data(IC_OUTPUT,2, src)
/obj/item/integrated_circuit/reagent/extinguisher/on_reagent_change(changetype)
+3 -3
View File
@@ -198,7 +198,7 @@
if(start_T && end_T)
log_combat(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]")
else if(!CHECK_BITFIELD(I.item_flags, ABSTRACT) && !HAS_TRAIT(I, TRAIT_NODROP))
else if(!(I.item_flags & ABSTRACT) && !HAS_TRAIT(I, TRAIT_NODROP))
thrown_thing = I
dropItemToGround(I)
@@ -621,12 +621,12 @@
to_chat(src, "<span class='notice'>You're too exhausted to keep going...</span>")
set_resting(TRUE, FALSE, FALSE)
SEND_SIGNAL(src, COMSIG_DISABLE_COMBAT_MODE)
ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT)
combat_flags |= COMBAT_FLAG_HARD_STAMCRIT
filters += CIT_FILTER_STAMINACRIT
update_mobility()
if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && total_health <= STAMINA_CRIT_REMOVAL_THRESHOLD)
to_chat(src, "<span class='notice'>You don't feel nearly as exhausted anymore.</span>")
DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT)
combat_flags &= ~(COMBAT_FLAG_HARD_STAMCRIT)
filters -= CIT_FILTER_STAMINACRIT
update_mobility()
UpdateStaminaBuffer()
@@ -22,7 +22,7 @@
/mob/living/carbon/Moved()
. = ..()
if(. && !CHECK_BITFIELD(movement_type, FLOATING)) //floating is easy
if(. && !(movement_type & FLOATING)) //floating is easy
if(HAS_TRAIT(src, TRAIT_NOHUNGER))
set_nutrition(NUTRITION_LEVEL_FED - 1) //just less than feeling vigorous
else if(nutrition && stat != DEAD)
@@ -113,11 +113,11 @@
. += effects_exam
//CIT CHANGES START HERE - adds genital details to examine text
if(LAZYLEN(internal_organs) && CHECK_BITFIELD(user.client?.prefs.cit_toggles, GENITAL_EXAMINE))
if(LAZYLEN(internal_organs) && (user.client?.prefs.cit_toggles & GENITAL_EXAMINE))
for(var/obj/item/organ/genital/dicc in internal_organs)
if(istype(dicc) && dicc.is_exposed())
. += "[dicc.desc]"
if(CHECK_BITFIELD(user.client?.prefs.cit_toggles, VORE_EXAMINE))
if(user.client?.prefs.cit_toggles & VORE_EXAMINE)
var/cursed_stuff = attempt_vr(src,"examine_bellies",args) //vore Code
if(cursed_stuff)
. += cursed_stuff
@@ -62,7 +62,7 @@
H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle)
ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you
H.pass_flags |= PASSMOB //this actually lets people pass over you
squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you
//if the user is a changeling, retract their sting
@@ -103,7 +103,7 @@
REMOVE_TRAIT(H, TRAIT_HUMAN_NO_RENDER, SLIMEPUDDLE_TRAIT)
H.update_disabled_bodyparts(silent = TRUE)
H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle)
DISABLE_BITFIELD(H.pass_flags, PASSMOB)
H.pass_flags &= ~(PASSMOB)
is_puddle = FALSE
if(squeak)
squeak.RemoveComponent()
@@ -188,9 +188,9 @@
dropItemToGround(r_store, TRUE) //Again, makes sense for pockets to drop.
if(l_store)
dropItemToGround(l_store, TRUE)
if(wear_id && !CHECK_BITFIELD(wear_id.item_flags, NO_UNIFORM_REQUIRED))
if(wear_id && !(wear_id.item_flags & NO_UNIFORM_REQUIRED))
dropItemToGround(wear_id)
if(belt && !CHECK_BITFIELD(belt.item_flags, NO_UNIFORM_REQUIRED))
if(belt && !(belt.item_flags & NO_UNIFORM_REQUIRED))
dropItemToGround(belt)
w_uniform = null
update_suit_sensors()
+1 -1
View File
@@ -214,7 +214,7 @@
var/missing_body_parts_flags = ~get_body_parts_flags()
var/max_protection = 1
if(missing_body_parts_flags) //I don't like copypasta as much as proc overhead. Do you want me to make these into a macro?
DISABLE_BITFIELD(thermal_protection_flags, missing_body_parts_flags)
thermal_protection_flags &= ~(missing_body_parts_flags)
if(missing_body_parts_flags & HEAD)
max_protection -= THERMAL_PROTECTION_HEAD
if(missing_body_parts_flags & CHEST)
@@ -1243,7 +1243,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(SLOT_BELT)
if(H.belt)
return FALSE
if(!CHECK_BITFIELD(I.item_flags, NO_UNIFORM_REQUIRED))
if(!(I.item_flags & NO_UNIFORM_REQUIRED))
var/obj/item/bodypart/O = H.get_bodypart(BODY_ZONE_CHEST)
if(!H.w_uniform && !nojumpsuit && (!O || !O.is_robotic_limb()))
if(return_warning)
@@ -1285,7 +1285,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(SLOT_WEAR_ID)
if(H.wear_id)
return FALSE
if(!CHECK_BITFIELD(I.item_flags, NO_UNIFORM_REQUIRED))
if(!(I.item_flags & NO_UNIFORM_REQUIRED))
var/obj/item/bodypart/O = H.get_bodypart(BODY_ZONE_CHEST)
if(!H.w_uniform && !nojumpsuit && (!O || !O.is_robotic_limb()))
if(return_warning)
@@ -31,7 +31,7 @@
/datum/species/dullahan/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
. = ..()
DISABLE_BITFIELD(H.flags_1, HEAR_1)
H.flags_1 &= ~(HEAR_1)
var/obj/item/bodypart/head/head = H.get_bodypart(BODY_ZONE_HEAD)
if(head)
if(pumpkin)//Pumpkinhead!
@@ -49,7 +49,7 @@
OA.Trigger()
/datum/species/dullahan/on_species_loss(mob/living/carbon/human/H)
ENABLE_BITFIELD(H.flags_1, HEAR_1)
H.flags_1 |= HEAR_1
H.reset_perspective(H)
if(myhead)
var/obj/item/dullahan_relay/DR = myhead
+1 -1
View File
@@ -324,7 +324,7 @@
if(!HAS_TRAIT(src, TRAIT_NO_INTERNALS))
for(check in GET_INTERNAL_SLOTS(src))
if(CHECK_BITFIELD(check.clothing_flags, ALLOWINTERNALS))
if((check.clothing_flags & ALLOWINTERNALS))
internals = TRUE
if(internal)
if(internal.loc != src)
+3 -3
View File
@@ -125,19 +125,19 @@
if(IS_STAMCRIT(src))
to_chat(src, "<span class='warning'>You're too exhausted to crawl [(CHECK_MOBILITY(L, MOBILITY_STAND)) ? "under": "over"] [L].</span>")
return TRUE
ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_ATTEMPTING_CRAWL)
combat_flags &= COMBAT_FLAG_ATTEMPTING_CRAWL
visible_message("<span class='notice'>[src] is attempting to crawl [(CHECK_MOBILITY(L, MOBILITY_STAND)) ? "under" : "over"] [L].</span>",
"<span class='notice'>You are now attempting to crawl [(CHECK_MOBILITY(L, MOBILITY_STAND)) ? "under": "over"] [L].</span>",
target = L, target_message = "<span class='notice'>[src] is attempting to crawl [(CHECK_MOBILITY(L, MOBILITY_STAND)) ? "under" : "over"] you.</span>")
if(!do_after(src, CRAWLUNDER_DELAY, target = src) || CHECK_MOBILITY(src, MOBILITY_STAND))
DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_ATTEMPTING_CRAWL)
combat_flags &= ~(COMBAT_FLAG_ATTEMPTING_CRAWL)
return TRUE
var/src_passmob = (pass_flags & PASSMOB)
pass_flags |= PASSMOB
Move(origtargetloc)
if(!src_passmob)
pass_flags &= ~PASSMOB
DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_ATTEMPTING_CRAWL)
combat_flags &= ~(COMBAT_FLAG_ATTEMPTING_CRAWL)
return TRUE
//END OF CIT CHANGES
+5 -5
View File
@@ -28,7 +28,7 @@
set name = "Rest"
set category = "IC"
if(client?.prefs?.autostand)
TOGGLE_BITFIELD(combat_flags, COMBAT_FLAG_INTENTIONALLY_RESTING)
(combat_flags ^= COMBAT_FLAG_INTENTIONALLY_RESTING)
to_chat(src, "<span class='notice'>You are now attempting to [(combat_flags & COMBAT_FLAG_INTENTIONALLY_RESTING) ? "[!resting ? "lay down and ": ""]stay down" : "[resting ? "get up and ": ""]stay up"].</span>")
if((combat_flags & COMBAT_FLAG_INTENTIONALLY_RESTING) && !resting)
set_resting(TRUE, FALSE)
@@ -117,14 +117,14 @@
mobility_flags &= ~(MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_STORAGE | MOBILITY_HOLD)
if(HAS_TRAIT(src, TRAIT_MOBILITY_NOMOVE))
DISABLE_BITFIELD(mobility_flags, MOBILITY_MOVE)
mobility_flags &= ~(MOBILITY_MOVE)
if(HAS_TRAIT(src, TRAIT_MOBILITY_NOPICKUP))
DISABLE_BITFIELD(mobility_flags, MOBILITY_PICKUP)
mobility_flags &= ~(MOBILITY_PICKUP)
if(HAS_TRAIT(src, TRAIT_MOBILITY_NOUSE))
DISABLE_BITFIELD(mobility_flags, MOBILITY_USE)
mobility_flags &= ~(MOBILITY_USE)
if(daze)
DISABLE_BITFIELD(mobility_flags, MOBILITY_USE)
mobility_flags &= ~(MOBILITY_USE)
//Handle update-effects.
if(!CHECK_MOBILITY(src, MOBILITY_HOLD))
+4 -4
View File
@@ -30,7 +30,7 @@
return
if(combat_flags & COMBAT_FLAG_SPRINT_ACTIVE)
return
ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_SPRINT_ACTIVE)
combat_flags |= COMBAT_FLAG_SPRINT_ACTIVE
add_movespeed_modifier(/datum/movespeed_modifier/sprinting)
if(update_icon)
update_sprint_icon()
@@ -38,7 +38,7 @@
/mob/living/proc/disable_sprint_mode(update_icon = TRUE)
if(!(combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) || (combat_flags & COMBAT_FLAG_SPRINT_FORCED))
return
DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_SPRINT_ACTIVE)
combat_flags &= ~(COMBAT_FLAG_SPRINT_ACTIVE)
remove_movespeed_modifier(/datum/movespeed_modifier/sprinting)
if(update_icon)
update_sprint_icon()
@@ -46,7 +46,7 @@
/mob/living/proc/enable_intentional_sprint_mode()
if((combat_flags & COMBAT_FLAG_SPRINT_TOGGLED) && (combat_flags & COMBAT_FLAG_SPRINT_ACTIVE))
return
ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_SPRINT_TOGGLED)
combat_flags |= COMBAT_FLAG_SPRINT_TOGGLED
if(!HAS_TRAIT(src, TRAIT_SPRINT_LOCKED) && !(combat_flags & COMBAT_FLAG_SPRINT_ACTIVE))
enable_sprint_mode(FALSE)
update_sprint_icon()
@@ -57,7 +57,7 @@
return
if(combat_flags & COMBAT_FLAG_SPRINT_FORCED)
return
DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_SPRINT_TOGGLED)
combat_flags &= ~(COMBAT_FLAG_SPRINT_TOGGLED)
if(combat_flags & COMBAT_FLAG_SPRINT_ACTIVE)
disable_sprint_mode(FALSE)
update_sprint_icon()
@@ -182,7 +182,7 @@
deputize(W, user)
else if(istype(W, /obj/item/mop/advanced))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_CLEANER_ADVANCED_MOP))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_CLEANER_ADVANCED_MOP))
to_chat(user, "<span class='notice'>You replace \the [src] old mop with a new better one!</span>")
upgrades |= UPGRADE_CLEANER_ADVANCED_MOP
clean_time = 20 //2.5 the speed!
@@ -198,7 +198,7 @@
to_chat(user, "<span class='notice'>The [src] already has this mop!</span>")
else if(istype(W, /obj/item/broom))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_CLEANER_BROOM))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_CLEANER_BROOM))
to_chat(user, "<span class='notice'>You add to \the [src] a broom speeding it up!</span>")
upgrades |= UPGRADE_CLEANER_BROOM
base_speed = 1 //2x faster!
@@ -124,7 +124,7 @@
to_chat(user, "<span class='warning'>You need at least one floor tile to put into [src]!</span>")
else if(istype(W, /obj/item/storage/toolbox/artistic))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_FLOOR_ARTBOX))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_FLOOR_ARTBOX))
to_chat(user, "<span class='notice'>You upgrade \the [src] case to hold more!</span>")
upgrades |= UPGRADE_FLOOR_ARTBOX
maxtiles += 100 //Double the storage!
@@ -139,7 +139,7 @@
to_chat(user, "<span class='notice'>The [src] already has a upgraded case!</span>")
else if(istype(W, /obj/item/storage/toolbox/syndicate))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_FLOOR_SYNDIBOX))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_FLOOR_SYNDIBOX))
to_chat(user, "<span class='notice'>You upgrade \the [src] case to hold more!</span>")
upgrades |= UPGRADE_FLOOR_SYNDIBOX
maxtiles += 200 //Double bse storage
@@ -433,4 +433,4 @@
if(robot.mode == BOT_REPAIRING)
return TRUE
return FALSE
@@ -254,7 +254,7 @@
show_controls(user)
else if(istype(W, /obj/item/reagent_containers/syringe/piercing))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_MEDICAL_PIERERCING))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_MEDICAL_PIERERCING))
to_chat(user, "<span class='notice'>You replace \the [src] syringe with a diamond-tipped one!</span>")
upgrades |= UPGRADE_MEDICAL_PIERERCING
qdel(W)
@@ -268,7 +268,7 @@
to_chat(user, "<span class='notice'>The [src] already has a diamond-tipped syringe!</span>")
else if(istype(W, /obj/item/hypospray/mkii))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_MEDICAL_HYPOSPRAY))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_MEDICAL_HYPOSPRAY))
to_chat(user, "<span class='notice'>You replace \the [src] syringe base with a DeForest Medical MK.II Hypospray!</span>")
upgrades |= UPGRADE_MEDICAL_HYPOSPRAY
injection_time = 15 //Half the time half the death!
@@ -284,7 +284,7 @@
to_chat(user, "<span class='notice'>The [src] already has a DeForest Medical Hypospray base!</span>")
else if(istype(W, /obj/item/circuitboard/machine/chem_dispenser))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_MEDICAL_CHEM_BOARD))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_MEDICAL_CHEM_BOARD))
to_chat(user, "<span class='notice'>You add in the board upgrading \the [src] reagent banks!</span>")
upgrades |= UPGRADE_MEDICAL_CHEM_BOARD
treatment_oxy = /datum/reagent/medicine/salbutamol //Replaces Dex with salbutamol "better" healing of o2
@@ -299,7 +299,7 @@
to_chat(user, "<span class='notice'>The [src] already has this upgrade!</span>")
else if(istype(W, /obj/item/circuitboard/machine/cryo_tube))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_MEDICAL_CRYO_BOARD))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_MEDICAL_CRYO_BOARD))
to_chat(user, "<span class='notice'>You add in the board upgrading \the [src] reagent banks!</span>")
upgrades |= UPGRADE_MEDICAL_CRYO_BOARD
treatment_fire = /datum/reagent/medicine/oxandrolone //Replaces Kep with oxandrolone "better" healing of burns
@@ -314,7 +314,7 @@
to_chat(user, "<span class='notice'>The [src] already has this upgrade!</span>")
else if(istype(W, /obj/item/circuitboard/machine/chem_master))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_MEDICAL_CHEM_MASTER))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_MEDICAL_CHEM_MASTER))
to_chat(user, "<span class='notice'>You add in the board upgrading \the [src] reagent banks!</span>")
upgrades |= UPGRADE_MEDICAL_CHEM_MASTER
treatment_brute = /datum/reagent/medicine/sal_acid //Replaces Bic with Sal Acid "better" healing of brute
@@ -329,7 +329,7 @@
to_chat(user, "<span class='notice'>the [src] already has this upgrade!</span>")
else if(istype(W, /obj/item/circuitboard/machine/sleeper))
if(bot_core.allowed(user) && open && !CHECK_BITFIELD(upgrades,UPGRADE_MEDICAL_SLEEP_BOARD))
if(bot_core.allowed(user) && open && !(upgrades & UPGRADE_MEDICAL_SLEEP_BOARD))
to_chat(user, "<span class='notice'>You add in the board upgrading \the [src] reagent banks!</span>")
upgrades |= UPGRADE_MEDICAL_SLEEP_BOARD
treatment_tox = /datum/reagent/medicine/pen_acid //replaces charcoal with pen acid a "better" healing of toxins
@@ -359,7 +359,7 @@
audible_message("<span class='danger'>[src] buzzes oddly!</span>")
flick("medibot_spark", src)
playsound(src, "sparks", 75, 1)
if(!CHECK_BITFIELD(upgrades,UPGRADE_MEDICAL_PIERERCING))
if(!(upgrades & UPGRADE_MEDICAL_PIERERCING))
upgrades |= UPGRADE_MEDICAL_PIERERCING //Jabs even harder through the clothing!
if(user)
oldpatient = user
@@ -558,7 +558,7 @@
if(ishuman(C))
var/mob/living/carbon/human/H = C
if (H.wear_suit && H.head && istype(H.wear_suit, /obj/item/clothing) && istype(H.head, /obj/item/clothing) && !CHECK_BITFIELD(upgrades,UPGRADE_MEDICAL_PIERERCING))
if (H.wear_suit && H.head && istype(H.wear_suit, /obj/item/clothing) && istype(H.head, /obj/item/clothing) && !(upgrades & UPGRADE_MEDICAL_PIERERCING))
var/obj/item/clothing/CS = H.wear_suit
var/obj/item/clothing/CH = H.head
if (CS.clothing_flags & CH.clothing_flags & THICKMATERIAL)
@@ -367,7 +367,7 @@
if(vore_active)
if(isliving(target))
var/mob/living/L = target
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(!client && L.Adjacent(src) && (L.vore_flags & DEVOURABLE) && (L.vore_flags & MOBVORE)) // aggressive check to ensure vore attacks can be made
if(prob(voracious_chance))
vore_attack(src,L,src)
else
@@ -122,7 +122,7 @@
if(!client && ranged && ranged_cooldown <= world.time)
OpenFire()
if(L.Adjacent(src) && (L.stat != CONSCIOUS))
if(vore_active && CHECK_BITFIELD(L.vore_flags,DEVOURABLE))
if(vore_active && (L.vore_flags & DEVOURABLE))
vore_attack(src,L,src)
LoseTarget()
else
@@ -49,10 +49,10 @@
// Simple animals have only one belly. This creates it (if it isn't already set up)
/mob/living/simple_animal/init_vore()
ENABLE_BITFIELD(vore_flags, VORE_INIT)
if(CHECK_BITFIELD(flags_1, HOLOGRAM_1))
vore_flags |= VORE_INIT
if((flags_1 & HOLOGRAM_1))
return
if(!vore_active || CHECK_BITFIELD(vore_flags, NO_VORE)) //If it can't vore, let's not give it a stomach.
if(!vore_active || (vore_flags & NO_VORE)) //If it can't vore, let's not give it a stomach.
return
if(vore_active && !IsAdvancedToolUser()) //vore active, but doesn't have thumbs to grab people with.
verbs |= /mob/living/simple_animal/proc/animal_nom
@@ -133,6 +133,6 @@
if (stat != CONSCIOUS)
return
if(!CHECK_BITFIELD(T.vore_flags,DEVOURABLE))
if(!(T.vore_flags & DEVOURABLE))
return
return vore_attack(src,T,src)
@@ -466,7 +466,7 @@
SStun = world.time + rand(20,60)
spawn(0)
DISABLE_BITFIELD(mobility_flags, MOBILITY_MOVE)
mobility_flags &= ~(MOBILITY_MOVE)
if(user)
step_away(src,user,15)
sleep(3)
@@ -1,5 +1,5 @@
/mob/living/simple_animal/slime/update_mobility()
. = ..()
if(Tempstun && !buckled)
DISABLE_BITFIELD(., MOBILITY_MOVE)
. &= ~(MOBILITY_MOVE)
mobility_flags = .
@@ -139,7 +139,7 @@
/obj/item/ammo_casing/shotgun/dart/noreact/Initialize()
. = ..()
ENABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.reagents_holder_flags |= NO_REACT
/obj/item/ammo_casing/shotgun/dart/bioterror
desc = "A shotgun dart filled with an obscene amount of lethal reagents. God help whoever is shot with this."
+5 -5
View File
@@ -362,7 +362,7 @@
/obj/item/projectile/proc/process_hit(turf/T, atom/target, qdel_self, hit_something = FALSE) //probably needs to be reworked entirely when pixel movement is done.
if(QDELETED(src) || !T || !target) //We're done, nothing's left.
if((qdel_self == FORCE_QDEL) || ((qdel_self == QDEL_SELF) && !temporary_unstoppable_movement && !CHECK_BITFIELD(movement_type, UNSTOPPABLE)))
if((qdel_self == FORCE_QDEL) || ((qdel_self == QDEL_SELF) && !temporary_unstoppable_movement && !(movement_type & UNSTOPPABLE)))
qdel(src)
return hit_something
permutated |= target //Make sure we're never hitting it again. If we ever run into weirdness with piercing projectiles needing to hit something multiple times.. well.. that's a to-do.
@@ -370,16 +370,16 @@
return process_hit(T, select_target(T), qdel_self, hit_something) //Hit whatever else we can since that didn't work.
var/result = target.bullet_act(src, def_zone)
if(result == BULLET_ACT_FORCE_PIERCE)
if(!CHECK_BITFIELD(movement_type, UNSTOPPABLE))
if(!(movement_type & UNSTOPPABLE))
temporary_unstoppable_movement = TRUE
ENABLE_BITFIELD(movement_type, UNSTOPPABLE)
movement_type |= UNSTOPPABLE
return process_hit(T, select_target(T), qdel_self, TRUE) //Hit whatever else we can since we're piercing through but we're still on the same tile.
else if(result == BULLET_ACT_TURF) //We hit the turf but instead we're going to also hit something else on it.
return process_hit(T, select_target(T), QDEL_SELF, TRUE)
else //Whether it hit or blocked, we're done!
qdel_self = QDEL_SELF
hit_something = TRUE
if((qdel_self == FORCE_QDEL) || ((qdel_self == QDEL_SELF) && !temporary_unstoppable_movement && !CHECK_BITFIELD(movement_type, UNSTOPPABLE)))
if((qdel_self == FORCE_QDEL) || ((qdel_self == QDEL_SELF) && !temporary_unstoppable_movement && !(movement_type & UNSTOPPABLE)))
qdel(src)
return hit_something
@@ -775,7 +775,7 @@
if(.)
if(temporary_unstoppable_movement)
temporary_unstoppable_movement = FALSE
DISABLE_BITFIELD(movement_type, UNSTOPPABLE)
movement_type &= ~(UNSTOPPABLE)
if(fired && can_hit_target(original, permutated, TRUE))
Bump(original)
@@ -25,7 +25,7 @@
"<span class='userdanger'>You were protected against \the [src]!</span>")
..(target, blocked)
DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.reagents_holder_flags &= ~(NO_REACT)
reagents.handle_reactions()
return BULLET_ACT_HIT
@@ -31,7 +31,7 @@
/obj/item/projectile/curse_hand/prehit(atom/target)
if(target == original)
DISABLE_BITFIELD(movement_type, UNSTOPPABLE)
movement_type &= ~(UNSTOPPABLE)
else if(!isturf(target))
return FALSE
return ..()
@@ -40,7 +40,7 @@
if(arm)
arm.End()
arm = null
if(CHECK_BITFIELD(movement_type, UNSTOPPABLE))
if((movement_type & UNSTOPPABLE))
playsound(src, 'sound/effects/curse3.ogg', 25, 1, -1)
var/turf/T = get_step(src, dir)
var/obj/effect/temp_visual/dir_setting/curse/hand/leftover = new(T, dir)
@@ -30,8 +30,8 @@
SplashReagents(user)
return
else
DISABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
ENABLE_BITFIELD(reagents.reagents_holder_flags, DRAWABLE |INJECTABLE )
reagents.reagents_holder_flags &= ~(OPENCONTAINER)
reagents.reagents_holder_flags |= (DRAWABLE|INJECTABLE)
spillable = FALSE
sealed = TRUE
to_chat(user, "<span class='notice'>You seal the bag.</span>")
@@ -141,11 +141,11 @@
/obj/item/reagent_containers/rag/towel/attack(mob/living/M, mob/living/user)
if(user.a_intent == INTENT_HARM)
DISABLE_BITFIELD(item_flags, NOBLUDGEON)
item_flags &= ~(NOBLUDGEON)
. = TRUE
..()
if(.)
ENABLE_BITFIELD(item_flags, NOBLUDGEON)
item_flags |= NOBLUDGEON
/obj/item/reagent_containers/rag/towel/equipped(mob/living/user, slot)
. = ..()
@@ -106,7 +106,7 @@
applyOrganDamage(maxHealth * decay_factor * (seconds * 0.5))
/obj/item/organ/proc/can_decay()
if(CHECK_BITFIELD(organ_flags, ORGAN_NO_SPOIL | ORGAN_SYNTHETIC | ORGAN_FAILING))
if(organ_flags & (ORGAN_NO_SPOIL | ORGAN_SYNTHETIC | ORGAN_FAILING))
return FALSE
return TRUE
+1 -1
View File
@@ -71,7 +71,7 @@
var/turf/T = get_turf(patient)
var/obj/structure/table/optable/table = locate(/obj/structure/table/optable, T)
if(table?.computer && !CHECK_BITFIELD(table.computer.stat, NOPOWER|BROKEN))
if(table?.computer && !(table.computer.stat & (NOPOWER|BROKEN)))
advanced_surgeries |= table.computer.advanced_surgeries
if(istype(tool, /obj/item/surgical_drapes/advanced))
+6 -6
View File
@@ -278,14 +278,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(CHECK_BITFIELD(ML.vore_flags,ABSORBED))
DISABLE_BITFIELD(ML.vore_flags,ABSORBED)
if((ML.vore_flags & ABSORBED))
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(CHECK_BITFIELD(P.vore_flags,ABSORBED))
if((P.vore_flags & ABSORBED))
absorbed_count++
Pred.reagents.trans_to(Prey, Pred.reagents.total_volume / absorbed_count)
@@ -390,7 +390,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(!CHECK_BITFIELD(P.vore_flags, ABSORBED)) //This is required first, in case there's a person absorbed and not absorbed in a stomach.
if(!(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>")
@@ -485,7 +485,7 @@
// Handle a mob being absorbed
/obj/belly/proc/absorb_living(var/mob/living/M)
ENABLE_BITFIELD(M.vore_flags, ABSORBED)
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>")
@@ -499,7 +499,7 @@
for(var/belly in M.vore_organs)
var/obj/belly/B = belly
for(var/mob/living/Mm in B)
if(CHECK_BITFIELD(Mm.vore_flags, ABSORBED))
if((Mm.vore_flags & ABSORBED))
absorb_living(Mm)
//Update owner
+2 -2
View File
@@ -76,7 +76,7 @@
play_sound = pick(pred_digest)
//Pref protection!
if (!CHECK_BITFIELD(M.vore_flags, DIGESTABLE) || M.vore_flags & ABSORBED)
if (!(M.vore_flags & DIGESTABLE) || M.vore_flags & ABSORBED)
continue
//Person just died in guts!
@@ -165,7 +165,7 @@
for (var/mob/living/M in contents)
if(M.vore_flags & ABSORBED && owner.nutrition >= 100)
DISABLE_BITFIELD(M.vore_flags, ABSORBED)
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.adjust_nutrition(-100)
+6 -6
View File
@@ -33,7 +33,7 @@
return TRUE
/mob/living/proc/init_vore()
ENABLE_BITFIELD(vore_flags, VORE_INIT)
vore_flags |= VORE_INIT
//Something else made organs, meanwhile.
if(LAZYLEN(vore_organs))
return TRUE
@@ -75,7 +75,7 @@
lazy_init_belly()
if(pred == prey) //you click your target
if(!CHECK_BITFIELD(pred.vore_flags,FEEDING))
if(!(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
@@ -85,11 +85,11 @@
feed_grabbed_to_self(user, prey)
else // click someone other than you/prey
if(!CHECK_BITFIELD(pred.vore_flags,FEEDING))
if(!(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(!CHECK_BITFIELD(prey.vore_flags,FEEDING))
if(!(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
@@ -122,7 +122,7 @@
testing("[user] attempted to feed [prey] to [pred], via [lowertext(belly.name)] but it went wrong.")
return
if (!CHECK_BITFIELD(prey.vore_flags, DEVOURABLE))
if (!(prey.vore_flags & DEVOURABLE))
to_chat(user, "This can't be eaten!")
return FALSE
@@ -283,7 +283,7 @@
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
ENABLE_BITFIELD(vore_flags,VOREPREF_INIT)
vore_flags |= VOREPREF_INIT
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
+18 -18
View File
@@ -181,15 +181,15 @@
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),
"digestable" = (host.vore_flags & DIGESTABLE),
"devourable" = (host.vore_flags & DEVOURABLE),
"feeding" = (host.vore_flags & FEEDING),
"absorbable" = (host.vore_flags & ABSORBABLE),
"allowmobvore" = (host.vore_flags & MOBVORE),
"vore_sounds" = (host.client.prefs.cit_toggles & EATING_NOISES),
"digestion_sounds" = (host.client.prefs.cit_toggles & DIGESTION_NOISES),
"lickable" = (host.vore_flags & LICKABLE),
"smellable" = (host.vore_flags & SMELLABLE),
)
return data
@@ -307,49 +307,49 @@
unsaved_changes = TRUE
return TRUE
if("toggle_digest")
TOGGLE_BITFIELD(host.vore_flags, DIGESTABLE)
(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)
(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)
(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)
(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)
(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)
(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)
(host.client.prefs.cit_toggles ^= DIGESTION_NOISES)
unsaved_changes = TRUE
return TRUE
if("toggle_lickable")
TOGGLE_BITFIELD(host.vore_flags, LICKABLE)
(host.vore_flags ^= LICKABLE)
unsaved_changes = TRUE
return TRUE
if("toggle_smellable")
TOGGLE_BITFIELD(host.vore_flags, SMELLABLE)
(host.vore_flags ^= SMELLABLE)
unsaved_changes = TRUE
return TRUE
@@ -0,0 +1,5 @@
author: "keronshb"
delete-after: True
changes:
- balance: "removes required enemies"
- balance: "Lowers assassination threat threshold"