Merge remote-tracking branch 'upstream/master' into meme
This commit is contained in:
@@ -8,7 +8,6 @@
|
||||
possible_transfer_amounts = list(5,10,15,25,30)
|
||||
volume = 30
|
||||
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/Initialize()
|
||||
. = ..()
|
||||
if(!icon_state)
|
||||
@@ -40,7 +39,6 @@
|
||||
|
||||
. += filling
|
||||
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/epinephrine
|
||||
name = "epinephrine bottle"
|
||||
desc = "A small bottle. Contains epinephrine - used to stabilize patients."
|
||||
@@ -228,6 +226,13 @@
|
||||
desc = "A small bottle of atropine."
|
||||
list_reagents = list(/datum/reagent/medicine/atropine = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/zeolites
|
||||
name = "Zeolites bottle"
|
||||
desc = "A small bottle of lab made Zeolite, which removes radiation from people quickly as well as contamination on items."
|
||||
list_reagents = list(/datum/reagent/fermi/zeolites = 30)
|
||||
|
||||
// Viro bottles
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/romerol
|
||||
name = "romerol bottle"
|
||||
desc = "A small bottle of Romerol. The REAL zombie powder."
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
/obj/item/reagent_containers/chem_pack
|
||||
name = "intravenous medicine bag"
|
||||
desc = "A plastic pressure bag, or 'chem pack', for IV administration of drugs. It is fitted with a thermosealing strip."
|
||||
icon = 'icons/obj/bloodpack.dmi'
|
||||
icon_state = "chempack"
|
||||
volume = 100
|
||||
reagent_flags = OPENCONTAINER
|
||||
spillable = TRUE
|
||||
obj_flags = UNIQUE_RENAME
|
||||
resistance_flags = ACID_PROOF
|
||||
var/sealed = FALSE
|
||||
|
||||
/obj/item/reagent_containers/chem_pack/on_reagent_change(changetype)
|
||||
update_icon()
|
||||
|
||||
/obj/item/reagent_containers/chem_pack/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
var/v = min(round(reagents.total_volume / volume * 10), 10)
|
||||
if(v > 0)
|
||||
var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "chempack1")
|
||||
filling.icon_state = "chempack[v]"
|
||||
filling.color = mix_color_from_reagents(reagents.reagent_list)
|
||||
add_overlay(filling)
|
||||
|
||||
/obj/item/reagent_containers/chem_pack/AltClick(mob/living/user)
|
||||
if(user.canUseTopic(src, BE_CLOSE, NO_DEXTERY) && !sealed)
|
||||
if(iscarbon(user) && (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)))
|
||||
to_chat(user, "<span class='warning'>Uh... whoops! You accidentally spill the content of the bag onto yourself.</span>")
|
||||
SplashReagents(user)
|
||||
return
|
||||
else
|
||||
DISABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
|
||||
ENABLE_BITFIELD(reagents.reagents_holder_flags, DRAWABLE |INJECTABLE )
|
||||
spillable = FALSE
|
||||
sealed = TRUE
|
||||
to_chat(user, "<span class='notice'>You seal the bag.</span>")
|
||||
|
||||
|
||||
/obj/item/reagent_containers/chem_pack/examine()
|
||||
. = ..()
|
||||
if(sealed)
|
||||
. += "<span class='notice'>The bag is sealed shut.</span>"
|
||||
else
|
||||
. += "<span class='notice'>Alt-click to seal it.</span>"
|
||||
|
||||
|
||||
obj/item/reagent_containers/chem_pack/attack_self(mob/user)
|
||||
if(sealed)
|
||||
return
|
||||
..()
|
||||
@@ -7,6 +7,7 @@
|
||||
possible_transfer_amounts = list(1, 2, 3, 4, 5)
|
||||
volume = 5
|
||||
reagent_flags = TRANSPARENT
|
||||
custom_price = PRICE_CHEAP_AS_FREE
|
||||
|
||||
/obj/item/reagent_containers/dropper/afterattack(obj/target, mob/user , proximity)
|
||||
. = ..()
|
||||
|
||||
@@ -245,7 +245,6 @@
|
||||
icon_state = "beakerbluespace"
|
||||
custom_materials = list(/datum/material/glass = 5000, /datum/material/plasma = 3000, /datum/material/diamond = 1000, /datum/material/bluespace = 1000)
|
||||
volume = 300
|
||||
material_flags = MATERIAL_NO_EFFECTS
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(5,10,15,20,25,30,50,100,300)
|
||||
container_HP = 5
|
||||
@@ -352,7 +351,7 @@
|
||||
name = "wooden bucket"
|
||||
desc = "It's a bucket made of wood."
|
||||
icon_state = "bucket_wooden"
|
||||
custom_materials = null
|
||||
custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 2)
|
||||
slot_flags = NONE
|
||||
item_flags = NO_MAT_REDEMPTION
|
||||
|
||||
@@ -362,6 +361,7 @@
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
icon_state = "smallbottle"
|
||||
item_state = "bottle"
|
||||
custom_price = PRICE_CHEAP_AS_FREE
|
||||
list_reagents = list(/datum/reagent/water = 49.5, /datum/reagent/fluorine = 0.5)//see desc, don't think about it too hard
|
||||
custom_materials = list(/datum/material/glass=0)
|
||||
volume = 50
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
reagent_flags = DRAWABLE
|
||||
flags_1 = null
|
||||
list_reagents = list(/datum/reagent/medicine/epinephrine = 10, /datum/reagent/preservahyde = 3)
|
||||
custom_premium_price = PRICE_ALMOST_EXPENSIVE
|
||||
|
||||
/obj/item/reagent_containers/hypospray/medipen/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins to choke on \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -207,8 +208,8 @@
|
||||
#define DELUXE_SELF_SPRAY 10
|
||||
#define DELUXE_SELF_INJECT 10
|
||||
|
||||
#define COMBAT_WAIT_SPRAY 0
|
||||
#define COMBAT_WAIT_INJECT 0
|
||||
#define COMBAT_WAIT_SPRAY 15
|
||||
#define COMBAT_WAIT_INJECT 15
|
||||
#define COMBAT_SELF_SPRAY 0
|
||||
#define COMBAT_SELF_INJECT 0
|
||||
|
||||
@@ -331,7 +332,6 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>This doesn't fit in [src].</span>")
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
/obj/item/hypospray/mkii/AltClick(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
/obj/item/reagent_containers/glass/maunamug
|
||||
name = "mauna mug"
|
||||
desc = "A drink served in a classy mug. Now with built-in heating!"
|
||||
icon = 'icons/obj/mauna_mug.dmi'
|
||||
icon_state = "maunamug"
|
||||
spillable = TRUE
|
||||
reagent_flags = OPENCONTAINER
|
||||
// fill_icon_state = "maunafilling"
|
||||
// fill_icon_thresholds = list(25)
|
||||
var/obj/item/stock_parts/cell/cell
|
||||
var/open = FALSE
|
||||
var/on = FALSE
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/Initialize(mapload, vol)
|
||||
. = ..()
|
||||
cell = new /obj/item/stock_parts/cell(src)
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>The status display reads: Current temperature: <b>[reagents.chem_temp]K</b> Current Charge:[cell ? "[cell.charge / cell.maxcharge * 100]%" : "No cell found"].</span>"
|
||||
if(open)
|
||||
. += "<span class='notice'>The battery case is open.</span>"
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/update_overlays()
|
||||
. = ..()
|
||||
if(reagents.total_volume >= 25)
|
||||
. += mutable_appearance('icons/obj/reagentfillings.dmi', "maunafilling25", color = mix_color_from_reagents(reagents.reagent_list))
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/process()
|
||||
..()
|
||||
if(on && (!cell || cell.charge <= 0)) //Check if we ran out of power
|
||||
change_power_status(FALSE)
|
||||
return FALSE
|
||||
cell.use(10) //Basic cell goes for like 200 seconds, bluespace for 8000
|
||||
if(!reagents.total_volume)
|
||||
return FALSE
|
||||
var/max_temp = min(500 + (500 * (0.2 * cell.rating)), 1000) // 373 to 1000
|
||||
reagents.adjust_thermal_energy(0.8 * cell.maxcharge * reagents.total_volume, max_temp = max_temp) // 4 kelvin every tick on a basic cell. 160k on bluespace
|
||||
reagents.handle_reactions()
|
||||
update_icon()
|
||||
if(reagents.chem_temp >= max_temp)
|
||||
change_power_status(FALSE)
|
||||
audible_message("<span class='notice'>The Mauna Mug lets out a happy beep and turns off!</span>")
|
||||
playsound(src, 'sound/machines/chime.ogg', 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/Destroy()
|
||||
if(cell)
|
||||
QDEL_NULL(cell)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/attack_self(mob/user)
|
||||
if(on)
|
||||
change_power_status(FALSE)
|
||||
else
|
||||
if(!cell || cell.charge <= 0)
|
||||
return FALSE //No power, so don't turn on
|
||||
change_power_status(TRUE)
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/proc/change_power_status(status)
|
||||
on = status
|
||||
if(on)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/screwdriver_act(mob/living/user, obj/item/I)
|
||||
. = ..()
|
||||
open = !open
|
||||
to_chat(user, "<span class='notice'>You screw the battery case on [src] [open ? "open" : "closed"] .</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/attackby(obj/item/I, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
if(!istype(I, /obj/item/stock_parts/cell))
|
||||
return ..()
|
||||
if(!open)
|
||||
to_chat(user, "<span class='warning'>The battery case must be open to insert a power cell!</span>")
|
||||
return FALSE
|
||||
if(cell)
|
||||
to_chat(user, "<span class='warning'>There is already a power cell inside!</span>")
|
||||
return FALSE
|
||||
else if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
cell = I
|
||||
user.visible_message("<span class='notice'>[user] inserts a power cell into [src].</span>", "<span class='notice'>You insert the power cell into [src].</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/attack_hand(mob/living/user)
|
||||
if(cell && open)
|
||||
cell.update_icon()
|
||||
user.put_in_hands(cell)
|
||||
cell = null
|
||||
to_chat(user, "<span class='notice'>You remove the power cell from [src].</span>")
|
||||
on = FALSE
|
||||
update_icon()
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/obj/item/reagent_containers/glass/maunamug/update_icon()
|
||||
..()
|
||||
if(open)
|
||||
if(cell)
|
||||
icon_state = "maunamug_bat"
|
||||
else
|
||||
icon_state = "maunamug_no_bat"
|
||||
else if(on)
|
||||
icon_state = "maunamug_on"
|
||||
else
|
||||
icon_state = "maunamug"
|
||||
if(reagents.total_volume && reagents.chem_temp >= 400)
|
||||
var/intensity = (reagents.chem_temp - 400) * 1 / 600 //Get the opacity of the incandescent overlay. Ranging from 400 to 1000
|
||||
var/mutable_appearance/mug_glow = mutable_appearance(icon, "maunamug_incand")
|
||||
mug_glow.alpha = 255 * intensity
|
||||
add_overlay(mug_glow)
|
||||
@@ -22,10 +22,11 @@
|
||||
if(reagents.total_volume && roundstart)
|
||||
name += " ([reagents.total_volume]u)"
|
||||
|
||||
|
||||
/obj/item/reagent_containers/pill/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/reagent_containers/pill/get_w_volume() // DEFAULT_VOLUME_TINY at 25u, DEFAULT_VOLUME_SMALL at 50u
|
||||
return DEFAULT_VOLUME_TINY/2 + reagents.total_volume / reagents.maximum_volume * DEFAULT_VOLUME_TINY
|
||||
|
||||
/obj/item/reagent_containers/pill/attack(mob/M, mob/user, def_zone)
|
||||
if(!canconsume(M, user))
|
||||
@@ -72,9 +73,8 @@
|
||||
to_chat(user, "<span class='warning'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You dissolve [src] in [target].</span>")
|
||||
for(var/mob/O in viewers(2, user)) //viewers is necessary here because of the small radius
|
||||
to_chat(O, "<span class='warning'>[user] slips something into [target]!</span>")
|
||||
user.visible_message("<span class='warning'>[user] slips something into [target]!</span>",
|
||||
"<span class='notice'>You dissolve [src] in [target].</span>", vision_distance = 2)
|
||||
reagents.trans_to(target, reagents.total_volume)
|
||||
qdel(src)
|
||||
|
||||
@@ -138,14 +138,14 @@
|
||||
name = "mannitol pill"
|
||||
desc = "Used to treat brain damage."
|
||||
icon_state = "pill17"
|
||||
list_reagents = list(/datum/reagent/medicine/mannitol = 50)
|
||||
list_reagents = list(/datum/reagent/medicine/mannitol = 25)
|
||||
roundstart = 1
|
||||
|
||||
/obj/item/reagent_containers/pill/mutadone
|
||||
name = "mutadone pill"
|
||||
desc = "Used to treat genetic damage."
|
||||
icon_state = "pill20"
|
||||
list_reagents = list(/datum/reagent/medicine/mutadone = 50)
|
||||
list_reagents = list(/datum/reagent/medicine/mutadone = 25)
|
||||
roundstart = 1
|
||||
|
||||
/obj/item/reagent_containers/pill/salicyclic
|
||||
@@ -187,14 +187,14 @@
|
||||
name = "prussian blue pill"
|
||||
desc = "Used to treat heavy radition poisoning."
|
||||
icon_state = "prussian_blue"
|
||||
list_reagents = list(/datum/reagent/medicine/prussian_blue = 25, /datum/reagent/water = 10)
|
||||
list_reagents = list(/datum/reagent/medicine/prussian_blue = 25)
|
||||
roundstart = 1
|
||||
|
||||
/obj/item/reagent_containers/pill/mutarad
|
||||
name = "radiation treatment deluxe pill"
|
||||
desc = "Used to treat heavy radition poisoning and genetic defects."
|
||||
icon_state = "anit_rad_fixgene"
|
||||
list_reagents = list(/datum/reagent/medicine/prussian_blue = 15, /datum/reagent/medicine/potass_iodide = 15, /datum/reagent/medicine/mutadone = 15, /datum/reagent/water = 5)
|
||||
list_reagents = list(/datum/reagent/medicine/prussian_blue = 10, /datum/reagent/medicine/potass_iodide = 10, /datum/reagent/medicine/mutadone = 5)
|
||||
roundstart = 1
|
||||
|
||||
///////////////////////////////////////// this pill is used only in a legion mob drop
|
||||
@@ -217,7 +217,7 @@
|
||||
|
||||
/obj/item/reagent_containers/pill/lsd
|
||||
name = "hallucinogen pill"
|
||||
list_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 15, /datum/reagent/toxin/mindbreaker = 15)
|
||||
list_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 12.5, /datum/reagent/toxin/mindbreaker = 12.5)
|
||||
|
||||
|
||||
/obj/item/reagent_containers/pill/aranesp
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
|
||||
/obj/item/reagent_containers/spray/proc/spray(atom/A)
|
||||
var/range = CLAMP(get_dist(src, A), 1, current_range)
|
||||
var/range = clamp(get_dist(src, A), 1, current_range)
|
||||
var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src))
|
||||
D.create_reagents(amount_per_transfer_from_this, NONE, NO_REAGENTS_VALUE)
|
||||
var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
var/show_filling = TRUE
|
||||
custom_materials = list(/datum/material/iron=10, /datum/material/glass=20)
|
||||
reagent_flags = TRANSPARENT
|
||||
custom_price = PRICE_CHEAP_AS_FREE
|
||||
|
||||
/obj/item/reagent_containers/syringe/Initialize()
|
||||
. = ..()
|
||||
@@ -180,7 +181,7 @@
|
||||
///Used by update_icon() and update_overlays()
|
||||
/obj/item/reagent_containers/syringe/proc/get_rounded_vol()
|
||||
if(reagents && reagents.total_volume)
|
||||
return CLAMP(round((reagents.total_volume / volume * 15),5), 1, 15)
|
||||
return clamp(round((reagents.total_volume / volume * 15),5), 1, 15)
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user