#define DS_BOSS_STORAGE "DS_BossStorage" #define DS_ENGINEERING "DS_Engineering" /mob/living/simple_animal/hostile/megafauna/fleshling name = "Fleshling" desc = "A sinister mass of flesh molded into a grotesque shape. Nothing about it looks like the result of natural evolution. It looks agitated and clearly doesn't want you to leave here alive." health = 1000 icon = 'icons/mob/fleshling.dmi' icon_state = "fleshling" icon_living = "fleshling" attack_sound = 'sound/misc/demon_attack1.ogg' death_sound = 'sound/misc/demon_dies.ogg' icon_dead = "" speed = 5 move_to_delay = 4 ranged = TRUE pixel_x = -16 melee_damage_lower = 20 melee_damage_upper = 20 wander = TRUE move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_VERY_STRONG pull_force = MOVE_FORCE_VERY_STRONG sentience_type = SENTIENCE_BOSS a_intent = INTENT_HARM deathmessage = "collapses into a pile of gibs. From the looks of it this is the deadest it can get... " del_on_death = TRUE /// Is the boss charging right now? var/charging = FALSE /// Did our boss die? var/boss_killed = FALSE // Below here is copy-pasted from /asteroid/big_legion /mob/living/simple_animal/hostile/megafauna/fleshling/AttackingTarget() if(!isliving(target)) return ..() var/mob/living/L = target var/datum/status_effect/stacking/ground_pound/G = L.has_status_effect(STATUS_EFFECT_GROUNDPOUND) if(!G) L.apply_status_effect(STATUS_EFFECT_GROUNDPOUND, 1, src) return ..() if(G.add_stacks(stacks_added = 1, attacker = src)) return ..() /mob/living/simple_animal/hostile/megafauna/fleshling/proc/throw_mobs() playsound(src, 'sound/effects/meteorimpact.ogg', 200, TRUE, 2, TRUE) for(var/mob/living/L in range(3, src)) if(faction_check(faction, L.faction, FALSE)) continue L.visible_message("[L] was thrown by [src]!", "You feel a strong force throwing you!", "You hear a thud.") var/atom/throw_target = get_edge_target_turf(L, get_dir(src, get_step_away(L, src))) L.throw_at(throw_target, 4, 4) var/limb_to_hit = L.get_organ(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) var/armor = L.run_armor_check(def_zone = limb_to_hit, attack_flag = MELEE, armour_penetration_percentage = 50) L.apply_damage(40, BRUTE, limb_to_hit, armor) // Below here is edited from Bubblegum /mob/living/simple_animal/hostile/megafauna/fleshling/proc/charge(atom/chargeat = target, delay = 5, chargepast = 2) if(!chargeat) return if(chargeat.z != z) return var/chargeturf = get_turf(chargeat) if(!chargeturf) return var/dir = get_dir(src, chargeturf) var/turf/T = get_ranged_target_turf(chargeturf, dir, chargepast) if(!T) return new /obj/effect/temp_visual/dragon_swoop/bubblegum(T) charging = TRUE walk(src, 0) setDir(dir) var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(loc,src) animate(D, alpha = 0, color = "#FF0000", transform = matrix()*2, time = 3) SLEEP_CHECK_DEATH(delay) var/movespeed = 0.8 walk_towards(src, T, movespeed) SLEEP_CHECK_DEATH(get_dist(src, T) * movespeed) walk(src, 0) charging = FALSE loot = list(/obj/effect/decal/cleanable/blood/innards, /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic) /mob/living/simple_animal/hostile/megafauna/fleshling/ListTargetsLazy() return ListTargets() /mob/living/simple_animal/hostile/megafauna/fleshling/Aggro() . = ..() if(target) playsound(loc, 'sound/voice/zombie_scream.ogg', 70, TRUE) /mob/living/simple_animal/hostile/megafauna/fleshling/OpenFire() if(charging) return charge(delay = 3) SetRecoveryTime(15) /mob/living/simple_animal/hostile/megafauna/fleshling/Moved(atom/OldLoc, Dir, Forced = FALSE) if(Dir) new /obj/effect/decal/cleanable/blood/bubblegum(loc) playsound(src, 'sound/effects/meteorimpact.ogg', 25, TRUE, 2, TRUE) return ..() /mob/living/simple_animal/hostile/megafauna/fleshling/Bump(atom/A, yes) if(charging && yes) if(isliving(A)) var/mob/living/L = A L.visible_message("[src] slams into [L]!", "[src] tramples you into the ground!") forceMove(get_turf(L)) L.apply_damage(istype(src, /mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination) ? 15 : 30, BRUTE) playsound(get_turf(L), 'sound/effects/meteorimpact.ogg', 100, TRUE) shake_camera(L, 4, 3) shake_camera(src, 2, 3) ..() /mob/living/simple_animal/hostile/megafauna/fleshling/Destroy() handle_dying() return ..() /mob/living/simple_animal/hostile/megafauna/fleshling/proc/handle_dying() if(!boss_killed) boss_killed = TRUE /mob/living/simple_animal/hostile/megafauna/fleshling/death(gibbed) if(can_die() && !boss_killed) unlock_blast_doors(DS_BOSS_STORAGE) src.visible_message("Somewhere, a heavy door has opened.") return ..(gibbed) /mob/living/simple_animal/hostile/megafauna/fleshling/proc/unlock_blast_doors(target_id_tag) for(var/obj/machinery/door/poddoor/P in GLOB.airlocks) if(P.density && P.id_tag == target_id_tag && P.z == z && !P.operating) P.open() /mob/living/simple_animal/hostile/spaceinfected name = "Infected" desc = "A reanimated corpse, wandering around aimlessly." icon = 'icons/mob/simple_human.dmi' icon_state = "spaceinfected" icon_living = "spaceinfected" mob_biotypes = MOB_ORGANIC | MOB_HUMANOID speak_chance = 1 turns_per_move = 3 death_sound = 'sound/effects/bodyfall1.ogg' speed = 0 maxHealth = 150 health = 150 melee_damage_lower = 20 melee_damage_upper = 20 attacktext = "hits" attack_sound = 'sound/effects/blobattack.ogg' del_on_death = TRUE sentience_type = SENTIENCE_OTHER footstep_type = FOOTSTEP_MOB_SHOE atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 loot = list(/obj/effect/decal/cleanable/blood/innards, /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic) /mob/living/simple_animal/hostile/spaceinfected/ListTargetsLazy() return ListTargets() /mob/living/simple_animal/hostile/spaceinfected/Aggro() . = ..() if(target) playsound(loc, 'sound/voice/zombie_scream.ogg', 70, TRUE) /mob/living/simple_animal/hostile/spaceinfected/Move(atom/newloc) if(ischasm(newloc)) // as this place filled with chasms, they shouldn't randomly fall in while wandering around return FALSE return ..() /mob/living/simple_animal/hostile/spaceinfected/default /mob/living/simple_animal/hostile/spaceinfected/default/Initialize(mapload) . = ..() var/loot_num = rand(1, 100) switch(loot_num) if(1 to 10) loot = list(/obj/item/salvage/ruin/nanotrasen, /obj/effect/decal/cleanable/blood/innards, /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic) if(11 to 30) loot = list(/obj/item/salvage/ruin/brick, /obj/effect/decal/cleanable/blood/innards, /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic) /mob/living/simple_animal/hostile/spaceinfected/gateopener // When this mob dies it'll trigger a poddoor open /// Is our mob dead? var/has_died = FALSE loot = list(/obj/item/gun/energy/laser, /obj/effect/decal/cleanable/blood/innards, /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic) // First weapon this ruin provides /mob/living/simple_animal/hostile/spaceinfected/gateopener/Destroy() handle_dying() return ..() /mob/living/simple_animal/hostile/spaceinfected/gateopener/proc/handle_dying() if(!has_died) has_died = TRUE /mob/living/simple_animal/hostile/spaceinfected/gateopener/death(gibbed) if(can_die() && !has_died) unlock_blast_doors(DS_ENGINEERING) src.visible_message("Somewhere, a heavy door has opened.") return ..(gibbed) /mob/living/simple_animal/hostile/spaceinfected/gateopener/proc/unlock_blast_doors(target_id_tag) for(var/obj/machinery/door/poddoor/P in GLOB.airlocks) if(P.density && P.id_tag == target_id_tag && P.z == z && !P.operating) P.open() /mob/living/simple_animal/hostile/spaceinfected/default/ranged desc = "A reanimated corpse. This one is keeping its distance from you." icon_state = "spaceinfected_ranged" ranged = TRUE retreat_distance = 5 minimum_distance = 5 projectiletype = /obj/item/projectile/neurotox projectilesound = 'sound/weapons/pierce.ogg' // Below here is ruin specific code /obj/structure/blob/normal/deepstorage name = "flesh wall" desc = "What even..." color = rgb(80, 39, 39) /obj/machinery/deepstorage_teleporter name = "package teleporter" desc = "It's tuned to maintain one-way teleportation." icon = 'icons/obj/stationobjs.dmi' icon_state = "controller" density = TRUE anchored = TRUE /// How many portals are present right now? var/active_portals = 0 /// Does user have the TGUI menu open right now? var/menu_open = FALSE /obj/machinery/deepstorage_teleporter/attack_hand(mob/user) if(active_portals != 0 || menu_open) return menu_open = TRUE var/list/boss_warning = list("Proceed" = TRUE) var/final_decision = tgui_input_list(user, "Just a hunch but wherever this machine may lead, it won't be somewhere pleasant. Are you sure about this?", "Make your decision", boss_warning) if(!final_decision) to_chat(user, "The teleporter machine remains untouched.") menu_open = FALSE return new /obj/effect/portal/advanced/deepstorage(locate(x, y + 1, z), locate(x + 3, y- 6, z), src, 200) playsound(loc, 'sound/machines/twobeep.ogg', 50, TRUE) active_portals++ addtimer(CALLBACK(src, PROC_REF(cooldown_passed)), 20 SECONDS) menu_open = FALSE // This proc is called when portal disappears after a while, so users can interact with teleporter again /obj/machinery/deepstorage_teleporter/proc/cooldown_passed() active_portals-- /obj/effect/portal/advanced/deepstorage name = "portal" desc = "Good luck." // loot spawners /obj/effect/spawner/random/deepstorage_reward name = "warehouse fashion reward" loot = list( /obj/item/storage/box/syndie_kit/chameleon, /obj/item/clothing/suit/pimpcoat, /obj/item/melee/skateboard/hoverboard, /obj/item/clothing/glasses/sunglasses/yeah ) /obj/effect/spawner/random/deepstorage_reward/main name = "warehouse main reward" loot = list( /obj/item/storage/belt/champion/wrestling, /obj/item/storage/box/weaver_kit, /obj/item/gun/medbeam, /obj/item/storage/lockbox/experimental_weapon ) // paper stuff & lore /obj/item/paper/fluff/ruins/deepstorage/log1 name = "a note" info = {"As per administration's request, I will be keeping the auxiliary power room locked from now on.

If you need in for whatever reason, find me in the western area of the cave tunnels."} /obj/item/paper/fluff/ruins/deepstorage/log2 name = "to my love" info = {"Everything went batshit insane, at first we all thought it was a terrorist attack or something... All floors were put into lockdown, then shortly after all communication across the facility went black.

Guards never said what happened but the fear in their eyes told us everything.

Our colleagues, friends and other folks started arguing, hurting then killing each other in time. Me and four others managed to isolate ourselves in the cafeteria.

We have enough supplies to last a few weeks here, should be enough until reinforcements arrive, right?

If it won't, then god help us... I can't wait to see you again.

Sincerely yours..."} /obj/item/paper/fluff/ruins/deepstorage/log3 name = "quartermaster's personal log" info = {"(beginning of record...)

Day 5 since the lockdown, we can't communicate with other floors which is quite a nuisance. We were already behind 13 deliveries. At these very times i miss my time back at-

(end of record.)

(beginning of record...)

Day 5, since the lockdown. More people are getting sick. I heard the body count was so high they had to start cremating them. The fewer bodies, the better.

(end of record.)

(beginning of record...)

Day... 5, since the-. God, I just checked my previous entries and there were like, 14 in total? In so many I start with 'day 5 of this, of that'. Weird part is, I don't recall making any of those records. It must be my insolent staff. If they want a bad review in their employee records, they got it...

(end of record.)
"} /obj/item/paper/fluff/ruins/deepstorage/log4 name = "crematorium report" info = {"We burnt so many... There's no end to this. It's been days and we're still burning them."} /obj/item/paper/fluff/ruins/deepstorage/log5 name = "subject: my concerns" info = {"First of all, I appreciate your initiative in cutting off comms, although I'm sure there are some rats listening on the private frequency. Unless you want a riot on your hands, I suggest keeping quiet in there.

Getting down to business: we have been working on the sample tissues you've been sending non-stop. In my expert opinion, I don't think there's a single bio-abomination we haven't discovered. I've never seen anything like this. It's nothing like a virus or disease you might be familiar with.

Yes, it's contagious, and I don't think it's limited to physical contact. We have been burning the corpses; there's still more to burn. This will not end well. I advise evacuating workers to a more suitable quarantine zone before things get out of hand."} /obj/item/paper/fluff/ruins/deepstorage/log6 name = "warning" info = {"We sealed that thing in the warehouse. It tore apart half of my squad. We were no match.

For whatever reason you want to go in, the package teleporter is still functional. Gates will remain sealed as long as that thing is alive so proceed at your own risk."} /obj/item/paper/fluff/ruins/deepstorage/log7 name = "???" info = {"Entry 1

By now it's safe to assume they know we're listening on their frequency. If it weren't for a copy of the manual I laid my hands on, they would've shaken us off already.

Entry 2

I keep hearing discussions of "resonance" brought up. I don't understand a single thing they're talking about but I know it is connected to what we're going through. Today guards arrested three more workers. They're desperately looking for us.


...

Entry 4

Elevators between floors and trams are now shut off, communications across floors followed soon after. Now there is a sickness... I still have two months until my transfer to some other facility in the sector. This too shall pass...


...

Entry 9

I no longer can tell where the dream ends and reality begins. Is this real, or still a dream... How many times did I write this? Where are we? This isn't our facility. Who are these people? They're not from our post...

...

Entry 13

KICK THEM. KICK THEM WHILE THEY ARE DOWN. "} /obj/item/paper/fluff/ruins/deepstorage/log8 name = "notice" info = {"Until further notice elevators will be out of service. Contact the floor administrator should you require access."} /obj/item/paper/fluff/ruins/deepstorage/log9 name = "attention" info = {"As per administration's order, unauthorized entry to supply storage is forbidden. Make your requests from the guard wing if you have a pending delivery."} #undef DS_BOSS_STORAGE #undef DS_ENGINEERING