jar moment

This commit is contained in:
Letter N
2020-08-12 19:35:24 +08:00
parent cc67ac0184
commit 1f2d9ca2ef
+61 -8
View File
@@ -240,7 +240,29 @@
custom_materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 600)
escape_time = 200 //equal to the time of a bluespace bodybag
alternate_escape_time = 100
///gas supply for simplemobs so they don't die
var/datum/gas_mixture/occupant_gas_supply
///level until the reagent gets INGEST ed instead of TOUCH
var/sipping_level = 150
/obj/item/pet_carrier/bluespace/Initialize()
. = ..()
create_reagents(300, NONE, DEFAULT_REAGENTS_VALUE) //equivalent of bsbeakers
/obj/item/pet_carrier/bluespace/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
// /obj/item/pet_carrier/bluespace/examine(mob/user)
// . = ..()
/obj/item/pet_carrier/bluespace/attack_self(mob/living/user)
..()
if(open)
reagents.reagents_holder_flags = OPENCONTAINER
else
reagents.reagents_holder_flags = NONE
/obj/item/pet_carrier/bluespace/update_icon_state()
if(open)
@@ -248,11 +270,28 @@
else
icon_state = "bluespace_jar"
/obj/item/pet_carrier/bluespace/throw_impact()
/obj/item/pet_carrier/bluespace/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
//delete the item upon impact, releasing the creature inside (this is handled by its deletion)
if(occupants.len)
loc.visible_message("<span class='warning'>The bluespace jar smashes, releasing [occupants[1]]!</span>")
if(reagents?.total_volume && ismob(hit_atom) && hit_atom.reagents)
reagents.total_volume *= rand(5,10) * 0.1 //Not all of it makes contact with the target
var/mob/M = hit_atom
var/R = reagents.log_list()
hit_atom.visible_message("<span class='danger'>[M] has been splashed with something!</span>", \
"<span class='userdanger'>[M] has been splashed with something!</span>")
var/turf/TT = get_turf(hit_atom)
var/throwerstring
if(thrownby)
log_combat(thrownby, M, "splashed", R)
var/turf/AT = get_turf(thrownby)
throwerstring = " THROWN BY [key_name(thrownby)] at [AT] (AREACOORD(AT)]"
log_reagent("SPLASH: [src] mob throw_impact() onto [key_name(hit_atom)] at [TT] ([AREACOORD(TT)])[throwerstring] - [R]")
reagents.reaction(hit_atom, TOUCH)
reagents.clear_reagents()
playsound(src, "shatter", 70, 1)
qdel(src)
@@ -260,21 +299,24 @@
. = ..()
if(!occupant_gas_supply)
occupant_gas_supply = new
if(isanimal(occupant))
var/mob/living/simple_animal/animal = occupant
occupant_gas_supply[/datum/gas/oxygen] = 0.0064 //make sure it has some gas in so it isn't depressurized
occupant_gas_supply.set_temperature(animal.minbodytemp) //simple animals only care about temperature/pressure when their turf isnt a location
else
if(ishuman(occupant)) //humans require resistance to cold/heat and living in no air while inside, and lose this when outside
ADD_TRAIT(occupant, TRAIT_RESISTCOLD, "bluespace_container_cold_resist")
ADD_TRAIT(occupant, TRAIT_RESISTHEAT, "bluespace_container_heat_resist")
ADD_TRAIT(occupant, TRAIT_NOBREATH, "bluespace_container_no_breath")
ADD_TRAIT(occupant, TRAIT_RESISTHIGHPRESSURE, "bluespace_container_resist_high_pressure")
ADD_TRAIT(occupant, TRAIT_RESISTLOWPRESSURE, "bluespace_container_resist_low_pressure")
if(ishuman(occupant)) //humans require resistance to cold/heat and living in no air while inside, and lose this when outside
START_PROCESSING(SSobj, src)
ADD_TRAIT(occupant, TRAIT_RESISTCOLD, "bluespace_container_cold_resist")
ADD_TRAIT(occupant, TRAIT_RESISTHEAT, "bluespace_container_heat_resist")
ADD_TRAIT(occupant, TRAIT_NOBREATH, "bluespace_container_no_breath")
ADD_TRAIT(occupant, TRAIT_RESISTHIGHPRESSURE, "bluespace_container_resist_high_pressure")
ADD_TRAIT(occupant, TRAIT_RESISTLOWPRESSURE, "bluespace_container_resist_low_pressure")
/obj/item/pet_carrier/bluespace/remove_occupant(mob/living/occupant)
. = ..()
if(ishuman(occupant))
STOP_PROCESSING(SSobj, src)
REMOVE_TRAIT(occupant, TRAIT_RESISTCOLD, "bluespace_container_cold_resist")
REMOVE_TRAIT(occupant, TRAIT_RESISTHEAT, "bluespace_container_heat_resist")
REMOVE_TRAIT(occupant, TRAIT_NOBREATH, "bluespace_container_no_breath")
@@ -287,6 +329,17 @@
occupant_gas_supply = new
return occupant_gas_supply
/obj/item/pet_carrier/bluespace/process()
if(!reagents)
return
for(var/mob/living/L in occupants)
if(!ishuman(L))
continue
if(reagents.total_volume >= sipping_level && prob(80))
reagents.reaction(L, INGEST) //consume
else
reagents.reaction(L, TOUCH, show_message = FALSE)
/obj/item/pet_carrier/bluespace/load_occupant(mob/living/user, mob/living/target)
if(..())
name = "[initial(name)] ([target])"