mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 13:10:02 +01:00
Revert "Adds the hivebot invasion event (#28514)"
This reverts commit 78a2e5c4c3.
This commit is contained in:
@@ -127,25 +127,6 @@
|
||||
end_create_message = "slams open, revealing out a hivebot!"
|
||||
recharge_sound = null
|
||||
recharge_message = null
|
||||
var/static/list/hivebot_dispensable_types = list(/mob/living/simple_animal/hostile/hivebot, /mob/living/simple_animal/hostile/hivebot/range, /mob/living/simple_animal/hostile/hivebot/rapid)
|
||||
|
||||
/obj/machinery/droneDispenser/hivebot/invasion
|
||||
name = "invasion fabricator"
|
||||
desc = "A huge machine designed to withstand intense pressures. It whirs with activity as steam hisses from vents in its sides."
|
||||
production_time = 10
|
||||
dispense_type = /mob/living/simple_animal/hostile/hivebot
|
||||
work_sound = 'sound/machines/copier.ogg'
|
||||
begin_create_message = "closes, humming and whirring..."
|
||||
end_create_message = "slams open, revealing a hivebot!"
|
||||
recharge_sound = null
|
||||
recharge_message = null
|
||||
|
||||
/obj/machinery/droneDispenser/hivebot/invasion/Dispense()
|
||||
dispense_type = pick(hivebot_dispensable_types)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/droneDispenser/hivebot/invasion/ex_act(severity)
|
||||
return //hivebot don give a fuck about bombs
|
||||
|
||||
/obj/machinery/droneDispenser/swarmer
|
||||
name = "swarmer fabricator"
|
||||
@@ -189,10 +170,6 @@
|
||||
stat |= NOPOWER
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/droneDispenser/proc/Dispense()
|
||||
var/atom/A = new dispense_type(get_turf(src))
|
||||
A.admin_spawned = admin_spawned
|
||||
|
||||
/obj/machinery/droneDispenser/process()
|
||||
..()
|
||||
if((stat & (NOPOWER|BROKEN)) || !anchored)
|
||||
@@ -223,8 +200,9 @@
|
||||
materials.use_amount(using_materials)
|
||||
if(power_used)
|
||||
use_power(power_used)
|
||||
|
||||
Dispense()
|
||||
|
||||
var/atom/A = new dispense_type(loc)
|
||||
A.admin_spawned = admin_spawned
|
||||
|
||||
if(create_sound)
|
||||
playsound(src, create_sound, 50, 1)
|
||||
|
||||
@@ -1,122 +0,0 @@
|
||||
/obj/machinery/hivebot_swarm_core //A hulking machine armed with several weapons. Creates hivebots and defends itself with a buzzsaw and mounted weapons.
|
||||
name = "hivebot swarm core"
|
||||
desc = "An incredibly dangerous machine with random weapons haphazardly attached with spot welds. Its main body seems impervious to damage, but the head is vulnerable."
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "hivebot_swarm_core"
|
||||
pixel_x = -32
|
||||
pixel_y = -16
|
||||
use_power = FALSE
|
||||
max_integrity = 250
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
var/recharge_period = 0 //The number of ticks the core is waiting for and cannot do anything
|
||||
var/atom/movable/threat_to_swarm //The core's "target" for its attacks
|
||||
var/hivebot_limit = 40 //Stop making hivebots if there are this many in a 7x7 square around us
|
||||
|
||||
/obj/machinery/hivebot_swarm_core/Destroy()
|
||||
visible_message("<span class='warning'>[src] falls apart, its red eyes sputtering out.</span>")
|
||||
playsound(src, 'sound/magic/clockwork/anima_fragment_death.ogg', 50, 0)
|
||||
new/obj/structure/fluff/hivebot_swarm_core(get_turf(src))
|
||||
return ..()
|
||||
|
||||
/obj/machinery/hivebot_swarm_core/examine(mob/user)
|
||||
..()
|
||||
if(recharge_period)
|
||||
to_chat(user, "<span class='warning'>It seems to be recharging.</span>")
|
||||
|
||||
/obj/machinery/hivebot_swarm_core/process()
|
||||
if(recharge_period)
|
||||
recharge_period--
|
||||
return
|
||||
acquire_target()
|
||||
if(!threat_to_swarm)
|
||||
make_hivebot()
|
||||
else
|
||||
defend_the_swarm()
|
||||
|
||||
/obj/machinery/hivebot_swarm_core/proc/make_hivebot() //Only called if we don't find a threat
|
||||
var/hivebots = 0
|
||||
for(var/mob/living/simple_animal/hostile/hivebot/H in range(7, src))
|
||||
hivebots++
|
||||
if(hivebots >= hivebot_limit)
|
||||
return
|
||||
var/turf/T = get_step(src, SOUTHWEST)
|
||||
var/mob/living/simple_animal/hostile/hivebot/H = new(T)
|
||||
H.color = rgb(0, 255, 0)
|
||||
animate(H, color = initial(H.color), time = 10)
|
||||
|
||||
/obj/machinery/hivebot_swarm_core/proc/acquire_target() //If we find a mob in our view, it becomes the threat. Robots don't count because we're too stupid to recognize them.
|
||||
if(threat_to_swarm)
|
||||
return
|
||||
var/list/potential_targets = list()
|
||||
for(var/mob/living/carbon/C in view(7, src))
|
||||
potential_targets += C
|
||||
for(var/mob/living/silicon/S in view(7, src))
|
||||
potential_targets += S
|
||||
for(var/obj/mecha/M in view(7, src))
|
||||
potential_targets += M
|
||||
for(var/mob/living/L in potential_targets)
|
||||
if(L.stat)
|
||||
potential_targets -= L
|
||||
else
|
||||
if("hivebot" in L.faction)
|
||||
potential_targets -= L
|
||||
if(!potential_targets.len) //Run another sanity check, just in case
|
||||
return
|
||||
threat_to_swarm = pick(potential_targets)
|
||||
visible_message("<span class='warning'>[src] turns ominously towards [threat_to_swarm]!</span>")
|
||||
say("SUBJECT STATUS: THREAT TO SWARM. TARGET LOCKED.")
|
||||
|
||||
/obj/machinery/hivebot_swarm_core/proc/defend_the_swarm()
|
||||
var/atom/movable/threat_to_swarm = src.threat_to_swarm
|
||||
var/mob/living/L = threat_to_swarm
|
||||
if(!istype(L) || L.stat)
|
||||
L = null
|
||||
if(QDELETED(threat_to_swarm) || !threat_to_swarm in view(7, src) || L)
|
||||
say("TARGET LOST. RESUMING FABRICATION ROUTINE.")
|
||||
threat_to_swarm = null
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
var/list/combat_actions = list("saw" = 1 * (get_dist(threat_to_swarm, src) <= 2), "swarm" = 1, "laser" = 2)
|
||||
switch(pickweight(combat_actions))
|
||||
if("laser")
|
||||
threat_to_swarm.Beam(T, "sat_beam", time = 5)
|
||||
if(L)
|
||||
L.adjustFireLoss(15)
|
||||
else
|
||||
var/obj/threat = threat_to_swarm
|
||||
threat.take_damage(15, "fire", "laser")
|
||||
playsound(src, 'sound/weapons/plasma_cutter.ogg', 50, 1)
|
||||
playsound(threat_to_swarm, 'sound/weapons/sear.ogg', 50, 1)
|
||||
if("swarm")
|
||||
visible_message("<span class='warning'>[src] warps in a swarm of hivebots!</span>")
|
||||
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/i in 1 to 3)
|
||||
new/mob/living/simple_animal/hostile/hivebot(T)
|
||||
for(var/i in 1 to 2)
|
||||
new/mob/living/simple_animal/hostile/hivebot/range(T)
|
||||
new/mob/living/simple_animal/hostile/hivebot/engineer(T)
|
||||
recharge_period = 5 //Give some time to mop up the adds
|
||||
if("saw")
|
||||
var/turf/target_turf = get_turf(threat_to_swarm)
|
||||
visible_message("<span class='warning'>[src] revs its buzzsaw!</span>")
|
||||
say("COMMENCING ANNIHILATION.")
|
||||
playsound(src, 'sound/machines/buzzsaw_windup.ogg', 100, 0)
|
||||
recharge_period = 2
|
||||
addtimer(CALLBACK(src, .proc/saw_turf, target_turf), 12.5) //To match up with the sound
|
||||
|
||||
/obj/machinery/hivebot_swarm_core/proc/saw_turf(turf/target) //Instacrits anyone standing on the turf
|
||||
playsound(target, 'sound/machines/buzzsaw_BRRRRR.ogg', 100, 0)
|
||||
for(var/mob/living/L in target) //you fucked up now
|
||||
L.visible_message("<span class='warning'>[src]'s buzzsaw rips into [L]!</span>", "<span class='userdanger'>[src]'s buzzsaw rips into you!</span>")
|
||||
L.emote("scream")
|
||||
var/datum/callback/cb = CALLBACK(src, .proc/saw_target, L)
|
||||
cb.Invoke()
|
||||
for(var/I in 1 to 4)
|
||||
addtimer(cb, 5 * I)
|
||||
|
||||
/obj/machinery/hivebot_swarm_core/proc/saw_target(mob/living/L)
|
||||
L.adjustBruteLoss(rand(20, 30)) //Guaranteed crit at least
|
||||
L.Knockdown(40)
|
||||
playsound(L, "desecration", 75, 1)
|
||||
playsound(L, 'sound/effects/splat.ogg', 50, 1)
|
||||
@@ -1,10 +0,0 @@
|
||||
/obj/item/device/hivebot_crux
|
||||
name = "hivebot crux"
|
||||
desc = "A smooth, metallic metal cylinder with an indigo screen."
|
||||
icon = 'icons/mob/hivebot.dmi'
|
||||
icon_state = "hive_main-crash"
|
||||
flags = CONDUCT | NOBLUDGEON
|
||||
slot_flags = SLOT_BELT
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 1000)
|
||||
origin_tech = "engineering=5;magnets=4;programming=4"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -161,21 +161,3 @@
|
||||
name = "shrine"
|
||||
desc = "A shrine dedicated to a deity."
|
||||
icon_state = "shrine"
|
||||
|
||||
/obj/structure/fluff/hivebot_swarm_core
|
||||
name = "hivebot swarm core"
|
||||
desc = "The dented, ruined husk of a powerful machine."
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "hivebot_swarm_core_dead"
|
||||
pixel_x = -32
|
||||
pixel_y = -16
|
||||
density = 1
|
||||
|
||||
/obj/structure/fluff/hivebot_swarm_core/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='warning'>It's gently vibrating...</span>") //Hint at the treasure inside
|
||||
|
||||
/obj/structure/fluff/hivebot_swarm_core/Destroy()
|
||||
visible_message("<span class='warning'>Something tumbles free of [src]!</span>")
|
||||
new/obj/item/device/hivebot_crux(get_turf(src))
|
||||
return ..()
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
/datum/round_event_control/hivebot_invasion //A hivebot swarm core impacts the station and warps in hivebots.
|
||||
name = "Hivebot Invasion"
|
||||
typepath = /datum/round_event/hivebot_invasion
|
||||
weight = 5
|
||||
max_occurrences = 1
|
||||
min_players = 25
|
||||
earliest_start = 18000
|
||||
|
||||
/datum/round_event/hivebot_invasion
|
||||
announceWhen = 0
|
||||
startWhen = 20
|
||||
var/obj/effect/landmark/invasion_point
|
||||
|
||||
/datum/round_event/hivebot_invasion/setup()
|
||||
invasion_point = pick(GLOB.generic_event_spawns)
|
||||
message_admins("Hivebot invasion point set to [get_area(invasion_point)]! [ADMIN_COORDJMP(invasion_point)]")
|
||||
log_game("Hivebot invasion point set to [get_area(invasion_point)]! ([COORD(invasion_point)])")
|
||||
|
||||
|
||||
/datum/round_event/hivebot_invasion/announce()
|
||||
priority_announce("Long-range scanners have detected an unidentified object on collision course with [station_name()]. Intent appears hostile. ETA: 30 seconds. All crew brace for impact.", "Impact Warning", sound = 'sound/machines/warning_alarm.ogg' )
|
||||
addtimer(CALLBACK(GLOBAL_PROC, /proc/priority_announce, "Impact location determined from trajectory to be [get_area(invasion_point)]. Leave the area immediately or risk annihilation.", "Impact Warning", 'sound/misc/notice1.ogg'), 150)
|
||||
|
||||
/datum/round_event/hivebot_invasion/start()
|
||||
var/turf/T = get_turf(invasion_point)
|
||||
priority_announce("Object has made impact. Heavy bluespace activity detected; object likely serves as a beacon. Destroy the object as quickly as possible.", "Invasion Warning", sound = 'sound/misc/notice1.ogg')
|
||||
for(var/P in GLOB.player_list)
|
||||
var/mob/player = P
|
||||
if(player.z == invasion_point.z)
|
||||
shake_camera(player, 15, 1)
|
||||
player.playsound_local(T, 'sound/effects/explosionfar.ogg', 100, 1)
|
||||
for(var/mob/living/L in range(1, invasion_point)) //you done fucked up now
|
||||
L.gib()
|
||||
explosion(T, 0, 0, 10) //Very little heavy damage but a lot of light
|
||||
new/obj/machinery/hivebot_swarm_core(T)
|
||||
|
||||
|
||||
|
||||
/datum/round_event_control/hivebot_invasion/false_alarm
|
||||
name = "Hivebot Invasion (False Alarm)"
|
||||
typepath = /datum/round_event/hivebot_false_alarm
|
||||
weight = 3
|
||||
max_occurrences = 1
|
||||
min_players = 0
|
||||
|
||||
/datum/round_event/hivebot_false_alarm
|
||||
announceWhen = 0
|
||||
startWhen = 15
|
||||
|
||||
/datum/round_event/hivebot_false_alarm/announce()
|
||||
priority_announce("Long-range scanners have detected an unidentified object on collision course with [station_name()]. Intent appears hostile. ETA: 30 seconds. All crew brace for impact.", "Impact Warning", sound = 'sound/machines/warning_alarm.ogg' )
|
||||
|
||||
/datum/round_event/hivebot_false_alarm/start()
|
||||
priority_announce("Our long-range scanners were picking up space debris. There is no danger. We apologize for the inconvenience.", "False Alarm")
|
||||
@@ -61,30 +61,6 @@
|
||||
maxHealth = 80
|
||||
ranged = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/engineer
|
||||
name = "engineer hivebot"
|
||||
desc = "A little robot with a tiny welder on its arm."
|
||||
icon_state = "EngBot"
|
||||
health = 25
|
||||
maxHealth = 25
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
ranged = 1
|
||||
retreat_distance = 2
|
||||
minimum_distance = 2
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/engineer/handle_automated_action()
|
||||
..()
|
||||
for(var/obj/machinery/hivebot_swarm_core/C in view(5, src))
|
||||
if(C.obj_integrity < C.max_integrity)
|
||||
if(!Adjacent(C))
|
||||
Goto(C, 5)
|
||||
else
|
||||
visible_message("<span class='warning'>[src] welds some of the dents on [C]!</span>")
|
||||
playsound(C, 'sound/items/Welder.ogg', 50, 1)
|
||||
C.obj_integrity = min(C.obj_integrity + 20, C.max_integrity)
|
||||
break
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/death(gibbed)
|
||||
do_sparks(3, TRUE, src)
|
||||
..(1)
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.5 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -532,7 +532,6 @@
|
||||
#include "code\game\machinery\flasher.dm"
|
||||
#include "code\game\machinery\gulag_item_reclaimer.dm"
|
||||
#include "code\game\machinery\gulag_teleporter.dm"
|
||||
#include "code\game\machinery\hivebot_swarm_core.dm"
|
||||
#include "code\game\machinery\hologram.dm"
|
||||
#include "code\game\machinery\igniter.dm"
|
||||
#include "code\game\machinery\iv_drip.dm"
|
||||
@@ -737,7 +736,6 @@
|
||||
#include "code\game\objects\items\devices\forcefieldprojector.dm"
|
||||
#include "code\game\objects\items\devices\geiger_counter.dm"
|
||||
#include "code\game\objects\items\devices\gps.dm"
|
||||
#include "code\game\objects\items\devices\hivebot_crux.dm"
|
||||
#include "code\game\objects\items\devices\instruments.dm"
|
||||
#include "code\game\objects\items\devices\laserpointer.dm"
|
||||
#include "code\game\objects\items\devices\lightreplacer.dm"
|
||||
@@ -1243,7 +1241,6 @@
|
||||
#include "code\modules\events\false_alarm.dm"
|
||||
#include "code\modules\events\ghost_role.dm"
|
||||
#include "code\modules\events\grid_check.dm"
|
||||
#include "code\modules\events\hivebot_invasion.dm"
|
||||
#include "code\modules\events\immovable_rod.dm"
|
||||
#include "code\modules\events\ion_storm.dm"
|
||||
#include "code\modules\events\major_dust.dm"
|
||||
|
||||
Reference in New Issue
Block a user