Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Anomalies and Waste from Monke1 #4393

Merged
merged 22 commits into from
Dec 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions code/game/turfs/open/floor/iron_floor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -480,3 +480,19 @@
base_icon_state = "sepia"
desc = "Well, the flow of time is normal on these tiles, weird."
floor_tile = /obj/item/stack/tile/iron/sepia

/turf/open/floor/iron/snowed
icon_state = "snow"
base_icon_state = "snow"
icon = 'icons/turf/snow.dmi'
desc = "The stations floor tiles are covered in heaping of snow."
slowdown = 2
bullet_sizzle = TRUE
footstep = FOOTSTEP_SAND
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY

/turf/open/floor/iron/snowed/Initialize(mapload)
. = ..()
AddElement(/datum/element/diggable, /obj/item/stack/sheet/mineral/snow, 2)
4 changes: 2 additions & 2 deletions code/modules/mob/living/simple_animal/bot/secbot.dm
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,9 @@
bot_mode_flags = BOT_MODE_ON | BOT_MODE_AUTOPATROL | BOT_MODE_REMOTE_ENABLED
commissioned = FALSE

/mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize(mapload)
/mob/living/simple_animal/bot/secbot/beepsky/big/Initialize(mapload)
. = ..()
update_transform(1.2)
update_transform(1.3)
//monkestation edit end

/mob/living/simple_animal/bot/secbot/beepsky/explode()
Expand Down
Binary file modified icons/effects/anomalies.dmi
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#define HONK_RANGE 3
//clwun nomaly honk
/obj/effect/anomaly/clown
name = "Honking Anomaly"
icon_state = "static"
desc = "An anomaly that smells faintly of bananas and lubricant."
color = "#86c4dd"
lifespan = 40 SECONDS //fast and slippery
var/active = TRUE
var/list/comedysounds = list('sound/items/SitcomLaugh1.ogg', 'sound/items/SitcomLaugh2.ogg', 'sound/items/SitcomLaugh3.ogg')
var/static/list/clown_spawns = list(
/mob/living/basic/clown/clownhulk/chlown = 6,
/mob/living/basic/clown = 66,
/obj/item/grown/bananapeel = 33,
/obj/item/stack/ore/bananium = 12,
/obj/item/bikehorn = 15)

/obj/effect/anomaly/clown/Initialize(mapload, new_lifespan)
. = ..()
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = .proc/on_entered,
)
AddElement(/datum/element/connect_loc, loc_connections)

/obj/effect/anomaly/clown/Destroy()
. = ..()
RemoveElement(/datum/element/connect_loc)

/obj/effect/anomaly/clown/proc/on_entered(datum/source, atom/movable/atom_movable)
SIGNAL_HANDLER

if(active && iscarbon(atom_movable))
var/mob/living/carbon/target = atom_movable
active = FALSE
target.slip(4 SECONDS, src)
playsound(src, pick(comedysounds), vol = 50, vary = 1)

/obj/effect/anomaly/clown/anomalyEffect(seconds_per_tick)
..()

if(isspaceturf(src) || !isopenturf(get_turf(src)))
return

var/turf/open/current_location = get_turf(src)
current_location.MakeSlippery(TURF_WET_LUBE, min_wet_time = 20 SECONDS, wet_time_to_add = 5 SECONDS)
if(active)
active = FALSE
playsound(src, 'sound/items/bikehorn.ogg', vol = 50)
var/selected_spawn = pick_weight(clown_spawns)
new selected_spawn(src.loc)
return
active = TRUE

/obj/effect/anomaly/clown/detonate()
playsound(src, 'sound/items/airhorn.ogg', vol = 100, vary = 1)

for(var/mob/living/carbon/target in (hearers(HONK_RANGE, src)))
to_chat(target, "<font color='red' size='10'>HONK</font>")
target.SetSleeping(0)
target.adjust_stutter(10 SECONDS)
var/obj/item/organ/internal/ears/ears = target.get_organ_slot(ORGAN_SLOT_EARS)
ears?.adjustEarDamage(0, 2 SECONDS)
target.Knockdown(2 SECONDS)
target.set_jitter_if_lower(50 SECONDS)

#undef HONK_RANGE
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#define NORMAL_FLUID_AMOUNT 25
#define DANGEROUS_FLUID_AMOUNT 100

//fully automated piss floods
/obj/effect/anomaly/fluid
name = "Fluidic Anomaly"
desc = "An anomaly pulling in liquids from places unknown. Better get the mop."
icon_state = "bluestream_fade"
var/dangerous = FALSE
var/list/fluid_choices = list()

/obj/effect/anomaly/fluid/Initialize(mapload, new_lifespan)
. = ..()
if(prob(10))
dangerous = TRUE //Unrestricts the reagent choice and increases fluid amounts

for(var/i = 1, i <= rand(1,5), i++) //Between 1 and 5 random chemicals
fluid_choices += dangerous ? get_random_reagent_id_unrestricted() : get_random_reagent_id()

/obj/effect/anomaly/fluid/anomalyEffect(seconds_per_tick)
..()

if(isspaceturf(src) || !isopenturf(get_turf(src)))
return

var/turf/spawn_point = get_turf(src)
spawn_point.add_liquid(pick(fluid_choices), dangerous ? DANGEROUS_FLUID_AMOUNT : NORMAL_FLUID_AMOUNT, chem_temp = rand(BODYTEMP_COLD_DAMAGE_LIMIT, BODYTEMP_HEAT_DAMAGE_LIMIT))

/obj/effect/anomaly/fluid/detonate()
if(isinspace(src) || !isopenturf(get_turf(src)))
return
var/turf/spawn_point = get_turf(src)
spawn_point.add_liquid(pick(fluid_choices), (dangerous ? DANGEROUS_FLUID_AMOUNT : NORMAL_FLUID_AMOUNT) * 5, chem_temp = rand(BODYTEMP_COLD_DAMAGE_LIMIT, BODYTEMP_HEAT_DAMAGE_LIMIT))

#undef NORMAL_FLUID_AMOUNT
#undef DANGEROUS_FLUID_AMOUNT
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#define MIN_REPLACEMENT 2
#define MAX_REPLACEMENT 7
#define MAX_RANGE 7

//THE STATION MUST SURVIVE
/obj/effect/anomaly/frost
name = "glacial anomaly"
icon_state = "impact_laser_blue"
/// How many seconds between each gas release
var/releasedelay = 10

/obj/effect/anomaly/frost/anomalyEffect(seconds_per_tick)
..()

if(isspaceturf(src) || !isopenturf(get_turf(src)))
return

var/turf/current_location = get_turf(src)
var/list/valid_turfs = list()
var/static/list/blacklisted_turfs = typecacheof(list(
/turf/closed,
/turf/open/space,
/turf/open/lava,
/turf/open/chasm,
/turf/open/floor/iron/snowed))

current_location.atmos_spawn_air ("o2=2;freon=1;water_vapor=8;TEMP=180")

for(var/searched_turfs in circle_view_turfs(src, MAX_RANGE))
if(is_type_in_typecache(searched_turfs, blacklisted_turfs))
continue
else
valid_turfs |= searched_turfs
for(var/i = 1 to min(rand(MIN_REPLACEMENT, MAX_REPLACEMENT), length(valid_turfs)))//Replace 2-7 tiles with snow
var/turf/searched_turfs = pick(valid_turfs)
if(searched_turfs)
if(istype(searched_turfs, /turf/open/floor/plating))
searched_turfs.PlaceOnTop(/turf/open/floor/iron/snowed)
else
searched_turfs.ChangeTurf(/turf/open/floor/iron/snowed)

/obj/effect/anomaly/frost/detonate()
//The station holds its breath, waiting for whatever the end will bring.
if(isinspace(src) || !isopenturf(get_turf(src)))
return
var/turf/current_location = get_turf(src)
current_location.atmos_spawn_air("water_vapor=200;freon=100;o2=100;TEMP=140") //The cold will be brutal. The water in hydroponics will freeze. We'll have to make do with the food we've stockpiled.

#undef MIN_REPLACEMENT
#undef MAX_REPLACEMENT
#undef MAX_RANGE
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/obj/effect/anomaly/lifebringer //2catz lmao (also see thermonuclear catsplosion)
name = "Lifebringer Anomaly"
desc = "An anomalous gateway that seemingly creates new life out of nowhere. Known by Lavaland Dwarves as the \"Petsplosion\"."
icon_state = "bluestream_fade"
lifespan = 30 SECONDS
var/active = TRUE
var/list/pet_type_cache
var/catsplosion = FALSE

/obj/effect/anomaly/lifebringer/Initialize(mapload, new_lifespan)
. = ..()
if(prob(1))
catsplosion = TRUE

pet_type_cache = subtypesof(/mob/living/basic/pet)
pet_type_cache += list(
/mob/living/basic/axolotl,
/mob/living/basic/butterfly,
/mob/living/basic/cockroach,
/mob/living/basic/crab,
/mob/living/basic/frog,
/mob/living/basic/lizard,
/mob/living/basic/mothroach,
/mob/living/basic/bat,
/mob/living/basic/parrot,
/mob/living/basic/chicken,
/mob/living/basic/sloth)
pet_type_cache -= list(/mob/living/basic/pet/penguin, //Removing the risky and broken ones.
/mob/living/basic/pet/dog/corgi/narsie,
/mob/living/basic/pet/dog,
/mob/living/basic/pet/fox
)

/obj/effect/anomaly/lifebringer/anomalyEffect(seconds_per_tick)
..()

if(isspaceturf(src) || !isopenturf(get_turf(src)))
return
if(active)

if(catsplosion)
new /mob/living/simple_animal/pet/cat(src.loc)
active = FALSE
var/turf/open/tile = get_turf(src)
if(istype(tile))
tile.atmos_spawn_air("o2=10;plasma=1;TEMP=3000")
return

var/mob/living/basic/pet/chosen_pet = pick(pet_type_cache)
new chosen_pet(src.loc)
active = FALSE
return

active = TRUE
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#define MONKEY_SOUNDS list('sound/creatures/monkey/monkey_screech_1.ogg', 'sound/creatures/monkey/monkey_screech_2.ogg', 'sound/creatures/monkey/monkey_screech_3.ogg','sound/creatures/monkey/monkey_screech_4.ogg','sound/creatures/monkey/monkey_screech_5.ogg','sound/creatures/monkey/monkey_screech_6.ogg','sound/creatures/monkey/monkey_screech_7.ogg')

/obj/effect/anomaly/monkey //Monkey Anomaly (Random Chimp Event)
name = "Screeching Anomaly"
desc = "An anomalous one-way gateway that leads straight to some sort of a ape dimension."
icon_state = "dimensional_overlay"
color = "#a76d17"
lifespan = 35 SECONDS
var/active = TRUE

/obj/effect/anomaly/monkey/anomalyEffect(seconds_per_tick)
..()

playsound(src, pick(MONKEY_SOUNDS), vol = 33, vary = 1, mixer_channel = CHANNEL_MOB_SOUNDS)

if(isspaceturf(src) || !isopenturf(get_turf(src)))
return

if(!active)
active = TRUE
return

if(prob(15))
new /mob/living/carbon/human/species/monkey/angry(src.loc)
else
new /mob/living/carbon/human/species/monkey(src.loc)
active = FALSE

/obj/effect/anomaly/monkey/detonate()
if(prob(25))
new /mob/living/basic/gorilla(src.loc)

#undef MONKEY_SOUNDS
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//radioactive anomaly, creates radioactive goo
/obj/effect/anomaly/radioactive
name = "Radioactive Anomaly"
icon_state = "shield-grey"
desc = "A highly unstable mass of charged particles leaving waste material in it's wake."
color = "#86c4dd"
var/active = TRUE

/obj/effect/anomaly/radioactive/Initialize(mapload, new_lifespan)
. = ..()
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = .proc/on_entered,
)
AddElement(/datum/element/connect_loc, loc_connections)

/obj/effect/anomaly/radioactive/Destroy()
. = ..()
RemoveElement(/datum/element/connect_loc)

/obj/effect/anomaly/radioactive/proc/on_entered(datum/source, atom/movable/atom_movable)
SIGNAL_HANDLER
if(active && isliving(atom_movable))
var/mob/living/victim = atom_movable
active = FALSE
victim.Paralyze(1 SECONDS)
var/atom/target = get_edge_target_turf(victim, get_dir(src, get_step_away(victim, src)))
victim.throw_at(target, 3, 1)
radiation_pulse(victim, 100)
to_chat(victim, "<span class='danger'>You feel a disgusting wave of heat wash over you!!!</span>")

/obj/effect/anomaly/radioactive/anomalyEffect(seconds_per_tick)
..()
active = TRUE

if(isspaceturf(src) || !isopenturf(get_turf(src)))
return

radiation_pulse(src, 50)
if(!locate(/obj/effect/decal/nuclear_waste) in src.loc)
playsound(src, pick('sound/misc/desecration-01.ogg','sound/misc/desecration-02.ogg', 'sound/misc/desecration-03.ogg'), vol = 50, vary = 1)
new /obj/effect/decal/nuclear_waste(src.loc)
if(prob(15))
new /obj/effect/decal/nuclear_waste/epicenter(src.loc)

/obj/effect/anomaly/radioactive/detonate()
playsound(src, 'sound/effects/empulse.ogg', vol = 100, vary = 1)
radiation_pulse(src, 1000)
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
//Storm Anomaly (Lightning)
//LORD OF LIGHTNING SHIFTS HIS GAZE
#define STORM_MIN_RANGE 2
#define STORM_MAX_RANGE 5
#define STORM_POWER_LEVEL 1500

/obj/effect/anomaly/storm
name = "Storm Anomaly"
desc = "The lord of lightning peeks through the veil."
icon_state = "flux"
color = "#fbff00"
lifespan = 30 SECONDS //Way too strong to give a full 99 seconds.
var/active = TRUE

//POINTS HIS STRUM FINGER OUR WAY
/obj/effect/anomaly/storm/Initialize(mapload, new_lifespan)
. = ..()
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = .proc/on_entered,
)
AddElement(/datum/element/connect_loc, loc_connections)

/obj/effect/anomaly/storm/Destroy()
. = ..()
RemoveElement(/datum/element/connect_loc)

//ELECTRICITY ESCAPES
/obj/effect/anomaly/storm/proc/on_entered(datum/source, atom/movable/atom_movable)
SIGNAL_HANDLER

if(active && iscarbon(atom_movable))
var/mob/living/carbon/target = atom_movable
active = FALSE
target.electrocute_act(23, "[name]", flags = SHOCK_NOGLOVES)
target.adjustFireLoss(10)

//LEAVES DESTRUCTION IN HIS WAKE
/obj/effect/anomaly/storm/anomalyEffect(seconds_per_tick)
..()
if(!active) //Only works every other tick
active = TRUE
return
active = FALSE

tesla_zap(src, rand(STORM_MIN_RANGE, STORM_MAX_RANGE), STORM_POWER_LEVEL)
playsound(src, 'sound/magic/lightningshock.ogg', 100, TRUE)

if(isspaceturf(src) || !isopenturf(get_turf(src)))
return

var/turf/location = get_turf(src)
location.atmos_spawn_air("water_vapor=10;TEMP=350")

//No detonation because it's strong enough as it is


#undef STORM_MIN_RANGE
#undef STORM_MAX_RANGE
#undef STORM_POWER_LEVEL
Loading
Loading