Adventures in bitflags!

This commit is contained in:
Fermi
2019-06-14 12:47:22 +01:00
parent e95b371ea5
commit 2365f7337c
3 changed files with 23 additions and 19 deletions
+6 -7
View File
@@ -1,6 +1,5 @@
#define FLAG_STATUS_NONE (1 << 0)
#define FLAG_STATUS_PH (1 << 1)
#define FLAG_STATUS_TEMP (1 << 2)
#define PH_WEAK (1 << 0)
#define TEMP_WEAK (1 << 1)
/obj/item/reagent_containers
name = "Container"
@@ -15,7 +14,7 @@
var/spawned_disease = null
var/disease_amount = 20
var/spillable = FALSE
var/beaker_weaknesses = NONE
var/beaker_weakness_bitflag = NONE//Bitflag!
/obj/item/reagent_containers/Initialize(mapload, vol)
. = ..()
@@ -130,7 +129,7 @@
//melts plastic beakers
/obj/item/reagent_containers/microwave_act(obj/machinery/microwave/M)
reagents.expose_temperature(1000)
if(beaker_weaknesses == FLAG_STATUS_TEMP)
if(beaker_weakness_bitflag & TEMP_WEAK)
var/list/seen = viewers(5, get_turf(src))
var/iconhtml = icon2html(src, seen)
for(var/mob/H in seen)
@@ -142,7 +141,7 @@
//melts plastic beakers
/obj/item/reagent_containers/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
reagents.expose_temperature(exposed_temperature)
if(beaker_weaknesses == FLAG_STATUS_TEMP)
if(beaker_weakness_bitflag & TEMP_WEAK)
if(reagents.chem_temp > 444)//assuming polypropylene
var/list/seen = viewers(5, get_turf(src))
var/iconhtml = icon2html(src, seen)
@@ -153,7 +152,7 @@
//melts glass beakers
/obj/item/reagent_containers/proc/pH_check()
if(beaker_weaknesses == FLAG_STATUS_PH)
if(beaker_weakness_bitflag & PH_WEAK)
if((reagents.pH < 0.5) || (reagents.pH > 13.5))
var/list/seen = viewers(5, get_turf(src))
var/iconhtml = icon2html(src, seen)
@@ -113,7 +113,7 @@
icon_state = "beaker"
item_state = "beaker"
materials = list(MAT_GLASS=500)
beaker_weaknesses |= FLAG_STATUS_PH
beaker_weakness_bitflag = PH_WEAK
/obj/item/reagent_containers/glass/beaker/Initialize()
. = ..()
@@ -174,8 +174,10 @@
volume = 150
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150)
beaker_weaknesses &= ~FLAG_STATUS_PH
beaker_weaknesses |= FLAG_STATUS_TEMP
/obj/item/reagent_containers/glass/beaker/plastic/Initialize()
beaker_weakness_bitflag &= ~PH_WEAK
beaker_weakness_bitflag |= TEMP_WEAK
/obj/item/reagent_containers/glass/beaker/plastic/update_icon()
icon_state = "beakerlarge" // hack to lets us reuse the large beaker reagent fill states
@@ -190,7 +192,9 @@
volume = 200
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,20,25,30,50,100,200)
beaker_weaknesses &= ~FLAG_STATUS_PH
/obj/item/reagent_containers/glass/beaker/meta/Initialize()
beaker_weakness_bitflag &= ~PH_WEAK
/obj/item/reagent_containers/glass/beaker/noreact
name = "cryostasis beaker"
@@ -200,9 +204,9 @@
materials = list(MAT_METAL=3000)
volume = 50
amount_per_transfer_from_this = 10
beaker_weaknesses &= ~FLAG_STATUS_PH
/obj/item/reagent_containers/glass/beaker/noreact/Initialize()
beaker_weakness_bitflag &= ~PH_WEAK
. = ..()
reagents.set_reacting(FALSE)
@@ -272,7 +276,9 @@
SLOT_L_STORE, SLOT_R_STORE,\
SLOT_GENERC_DEXTROUS_STORAGE
)
beaker_weaknesses &= ~FLAG_STATUS_PH_IMMUNE
/obj/item/reagent_containers/glass/bucket/Initialize()
beaker_weakness_bitflag |= TEMP_WEAK
/obj/item/reagent_containers/glass/bucket/attackby(obj/O, mob/user, params)
if(istype(O, /obj/item/mop))
@@ -322,8 +328,9 @@
materials = list(MAT_GLASS=0)
volume = 50
amount_per_transfer_from_this = 10
beaker_weaknesses |= FLAG_STATUS_PH
beaker_weaknesses |= FLAG_STATUS_TEMP
/obj/item/reagent_containers/glass/beaker/waterbottle/Initialize()
beaker_weakness_bitflag |= TEMP_WEAK
/obj/item/reagent_containers/glass/beaker/waterbottle/empty
list_reagents = list()
@@ -335,8 +342,6 @@
list_reagents = list("water" = 100)
volume = 100
amount_per_transfer_from_this = 20
beaker_weaknesses |= FLAG_STATUS_PH
beaker_weaknesses |= FLAG_STATUS_TEMP
/obj/item/reagent_containers/glass/beaker/waterbottle/large/empty
list_reagents = list()
@@ -55,13 +55,13 @@
. = ..()
to_chat(M, "<span class='userdanger'>Oh god, you feel like your wavefunction is about to tear.</span>")
log_game("FERMICHEM: [M] ckey: [M.key] has overdosed on eigenstasium")
M.Jitter(10)
M.Jitter(20)
metabolization_rate += 0.5 //So you're not stuck forever teleporting.
/datum/reagent/fermi/eigenstate/overdose_process(mob/living/M) //Overdose, makes you teleport randomly, probably one of my favourite effects. Sometimes kills you.
do_sparks(5,FALSE,src)
do_teleport(M, get_turf(M), 10, asoundin = 'sound/effects/phasein.ogg')
do_sparks(5,FALSE,src)
M.reagents.remove_reagent(id, 0.5)//So you're not stuck for 10 minutes teleporting
..()
//Addiction