* ports all the tg junk for icemoon, not yet changed to make it all compile * fixes * fixes * fixes * fixes * fixes * new stuff * whew * fixes * it compiles, now to fix the maps * fixes the maps * fixes solars + removes the space tiles in the toxins burn chamber * nukes the SpawnTerrain proc used for tg geysers * linter fix * fix * fixes the non matching turf atmos (hopefully) * more mapping fixes * dmm2tgm * unfucks changeturf for the more_caves * fixes the volanic subtypes of the other thing * fixes the stupid fucking tile placing list * some map fixes, fixes the station_ruin loader shitting out errors this commit took 2 hours of my fucking life * fixes a bunch of mismatch atmos in ruins * fixes wendigo cave having no air * backwards couch backwards couch * fixes the SM up * wendigos can't runtime when butchering if you can't butcher them 😎 * makes the wendigo fight have the same atmos as the surrounding icemoon * Tweaks atmos mixture from o2=22;n2=82;TEMP=180 to o2=18;n2=63;TEMP=180, making lavaland weapons actually work * makes the wendigo screech shake not completely aids * fixes snowlegion portals dropping proper legions instead of skeles * brings the engioutpost ruin over as well * whoopps * empty commit to reroll bots * Fixes pirates, ops, the mining base, and gives pirates and ops drills * fixes lone ops and ninjas * fixes the snowed plating getting fucked when tiles are placed on it * removes some OP junk from the wabbajack pool (aka removes non-antag headslugs again) * more bug fixes * empty commit to reroll bots * hopefully finally kills the active turfs on the library ruin Co-authored-by: kevinz000 <2003111+kevinz000@users.noreply.github.com>
87 lines
3.2 KiB
Plaintext
87 lines
3.2 KiB
Plaintext
//If you look at the "geyser_soup" overlay icon_state, you'll see that the first frame has 25 ticks.
|
|
//That's because the first 18~ ticks are completely skipped for some ungodly weird fucking byond reason
|
|
|
|
/obj/structure/geyser
|
|
name = "geyser"
|
|
icon = 'icons/obj/lavaland/terrain.dmi'
|
|
icon_state = "geyser"
|
|
anchored = TRUE
|
|
|
|
var/erupting_state = null //set to null to get it greyscaled from "[icon_state]_soup". Not very usable with the whole random thing, but more types can be added if you change the spawn prob
|
|
var/activated = FALSE //whether we are active and generating chems
|
|
var/reagent_id = /datum/reagent/fuel/oil
|
|
var/potency = 2 //how much reagents we add every process (2 seconds)
|
|
var/max_volume = 500
|
|
var/start_volume = 50
|
|
|
|
/obj/structure/geyser/proc/start_chemming()
|
|
activated = TRUE
|
|
create_reagents(max_volume, DRAINABLE)
|
|
reagents.add_reagent(reagent_id, start_volume)
|
|
START_PROCESSING(SSfluids, src) //It's main function is to be plumbed, so use SSfluids
|
|
if(erupting_state)
|
|
icon_state = erupting_state
|
|
else
|
|
var/mutable_appearance/I = mutable_appearance('icons/obj/lavaland/terrain.dmi', "[icon_state]_soup")
|
|
I.color = mix_color_from_reagents(reagents.reagent_list)
|
|
add_overlay(I)
|
|
|
|
/obj/structure/geyser/process()
|
|
if(activated && reagents.total_volume <= reagents.maximum_volume) //this is also evaluated in add_reagent, but from my understanding proc calls are expensive
|
|
reagents.add_reagent(reagent_id, potency)
|
|
|
|
/obj/structure/geyser/plunger_act(obj/item/plunger/P, mob/living/user, _reinforced)
|
|
if(!_reinforced)
|
|
to_chat(user, "<span class='warning'>The [P.name] isn't strong enough!</span>")
|
|
return
|
|
if(activated)
|
|
to_chat(user, "<span class'warning'>The [name] is already active!</span>")
|
|
return
|
|
|
|
to_chat(user, "<span class='notice'>You start vigorously plunging [src]!</span>")
|
|
if(do_after(user, 50 * P.plunge_mod, target = src) && !activated)
|
|
start_chemming()
|
|
|
|
/obj/structure/geyser/random
|
|
erupting_state = null
|
|
var/list/options = list(/datum/reagent/clf3 = 10, /datum/reagent/water/hollowwater = 10, /datum/reagent/medicine/omnizine/protozine = 6, /datum/reagent/wittel = 1)
|
|
|
|
/obj/structure/geyser/random/Initialize()
|
|
. = ..()
|
|
reagent_id = pickweight(options)
|
|
|
|
/obj/item/plunger
|
|
name = "plunger"
|
|
desc = "It's a plunger for plunging."
|
|
icon = 'icons/obj/watercloset.dmi'
|
|
icon_state = "plunger"
|
|
|
|
slot_flags = ITEM_SLOT_MASK
|
|
|
|
var/plunge_mod = 1 //time*plunge_mod = total time we take to plunge an object
|
|
var/reinforced = FALSE //whether we do heavy duty stuff like geysers
|
|
|
|
/obj/item/plunger/attack_obj(obj/O, mob/living/user)
|
|
if(!O.plunger_act(src, user, reinforced))
|
|
return ..()
|
|
|
|
/obj/item/plunger/throw_impact(atom/hit_atom, datum/thrownthing/tt)
|
|
. = ..()
|
|
if(tt.target_zone != BODY_ZONE_HEAD)
|
|
return
|
|
if(iscarbon(hit_atom))
|
|
var/mob/living/carbon/H = hit_atom
|
|
if(!H.wear_mask)
|
|
H.equip_to_slot_if_possible(src, ITEM_SLOT_MASK)
|
|
H.visible_message("<span class='warning'>The plunger slams into [H]'s face!</span>", "<span class='warning'>The plunger suctions to your face!</span>")
|
|
|
|
/obj/item/plunger/reinforced
|
|
name = "reinforced plunger"
|
|
desc = "It's an M. 7 Reinforced Plunger© for heavy duty plunging."
|
|
icon_state = "reinforced_plunger"
|
|
|
|
reinforced = TRUE
|
|
plunge_mod = 0.8
|
|
|
|
custom_premium_price = 1200
|