The Divine Flock - DaedalusDock Flockmind Port (#31984)

* Initial commit - FLOCKMIND - Probably has like a billion things to fix

* Do after conversions

* Config

* Moved the files, icon fixes

* Tick everything, language work, event, spawn landmark, role prefs, beginning mob port

* Spans and some other fixes. Also the tickening

* More tickening

* More fixes. Lots of fixes.

* More Fixes

* A whole lot more. Also flock TGUI.

* Fixes fixes fixes fixes fixes

* FIXES

* More fixes - PR ready, still needs a fuckton of testing

* Fixes

* fix incomplete upstream merge

* fix FlockPanel + sort button name

* TGUI review

* Fixes tealprint list

* Fixes

* More fixes

* Incapacitator Fix

* Filenames

* Linters

* Interceptor range buff

* Reagent counts

* Linters

* Fabricator vendor fix

* Keybinds and HUD - Flockdrones, Fixes Vendor Conversion, Cube Materials

* Reworks reagent, adds flock grilles, fixes compute node overlays

* Intent-based flockdrone parts

* Intent based drone parts

* Radial control panel for controlling drones manually, phasing through windows/grilles

* Movement fixes

* Radio talk power, stare fix

* Flock health HUD

* Fixes flock lights, linters

* Unit tests

* Adds countdown to relay

* Relay improvements

* Small fix

* Logic Schmogic

* Relay overlay and looping sound effect

* Ignore air when converting turfs

* Cage fixes and improvements

* Improved flock bolt

* Turret conversions

* Flock bolts taze simple or basic mobs

* Sentience type

* Fixe

* Linter

* tgui review stage 2

* Concentrated Repair Burst

* Improves radio detection

* Removes extra space

* Adds healing visual effect

* Cube tech levels

* Ghooost

* Excess

* Flock doors, chairs, lattices. Centralizes conversion code.  Crafting with Gnesis

* Update code/modules/antagonists/flockmind/ai_behaviors/flock_wander.dm

Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Fixes the fix

* Astar movement detection

* Fix, extraneous code, language stuff

* Language fixes and wander fix

* Fixes

* Another fix

* Lints

* Another linter

* Language improvement

* More language improvements

* Time requirement and appearing in orbit menu as an antag

* Cube glow

* TGUI

* Minicache

* Linters

* Grammar

* Material ID fix

* Lid fix

* Reagent turf reaction

* Reagent fix

* Butcher results

* Conversion rates

* Flock stare fix

* Fixes stare behavior

* Staring

* Flock mob blood

* Flock mobs gibs and blood. Also some runtime fixes

* Flock mobs now resist out of grabs, buckles, lockers, and more

* Fixes flock orbit, fixes a runtime I think,

* Target mechs, damage mechs, other bug fixes

* Cage fix

* Cage resist change

* Some mind changes, gatecrash buff

* Drones now shoot mechs, stare improvement

* Cut down on spam a little

* Nest fix

* No more resist spam

* Fixed drone death control

* Resist statement

* Makes the relay alarm scarier

* Fixes dead flock camera mobs having no ghost sprite, something with ghosting

* Enhanced flockphasing

* Improved flockmob pathing

* Added required turf restriction to relay

* Increased needed bandwidth for relay construction

* Nerfed drone substrate rate

* Added new status tab items for relay progress

* Another relay cost adjustment

* Improves drone AI responsiveness

* Computer frames now become flock computers

* Improves target finding for conversion, building, and replicating

* Reduced flock event pop requirements

* Adjusts flock protection on structures. Adjusts overlays.

* Relay unlock tweak

* Fixwes flock being able to gib mech'd AIs with one button

* Map conflict

* Flock can no longer be outed by merely existing

* Fied bug causing drones to shoot themselves

* Prevents mobs from attacking while in a cage

* Converter tool can now open closets and crates.

* Adds descriptions to flockdrone tools.

* More informatic blurbs

* Adds xenobiology organs

* Organ lint

* TGUI merge

* bundle and mm

---------

Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Co-authored-by: Toastical <20125180+Toastical@users.noreply.github.com>
Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
PollardTheDragon
2026-07-08 17:31:28 -04:00
committed by GitHub
parent ab05a4ee3a
commit 24845b238a
228 changed files with 9724 additions and 49 deletions
+1 -1
View File
@@ -111,7 +111,7 @@
var/obj/tgvehicle/sealed/car/clowncar/cc = loc
return cc.fire_cannon_at(A, src, params)
if(restrained())
if(restrained() | istype(loc, /obj/structure/flock/cage))
RestrainedClickOn(A)
return
+12
View File
@@ -658,6 +658,18 @@ so as to remain in compliance with the most up-to-date laws."
return
infected_user.ghostize()
/atom/movable/screen/alert/ghost/flock
desc = "Would you like to ghost? You will be notified when your body is removed from the cage."
/atom/movable/screen/alert/ghost/flock/Click()
if(!..())
return
var/mob/living/carbon/human/caged_user = usr
if(!istype(caged_user) || caged_user.stat == DEAD)
caged_user.clear_alert("ghost_cage")
return
caged_user.ghostize()
/atom/movable/screen/alert/notify_action
name = "Body created"
desc = "A body was created. You can enter it."
+187
View File
@@ -0,0 +1,187 @@
/datum/hud/flockdrone/New(mob/owner)
. = ..()
var/atom/movable/screen/using
using = new /atom/movable/screen/flockdrone_part/converter(null, src)
static_inventory += using
using = new /atom/movable/screen/flockdrone_part/incapacitator(null, src)
static_inventory += using
using = new /atom/movable/screen/flockdrone_part/absorber(null, src)
static_inventory += using
using = new /atom/movable/screen/flockphasing()
using.icon_state = (HAS_TRAIT(mymob, TRAIT_FLOCKPHASE) ? "running" : "walking")
infodisplay += using
using = new /atom/movable/screen/act_intent/flock()
using.icon_state = mymob.a_intent
static_inventory += using
action_intent = using
mymob.healths = new /atom/movable/screen/healths/flockdrone_health(null, src)
infodisplay += mymob.healths
mymob.pullin = new /atom/movable/screen/pull/flock()
mymob.pullin.hud = src
mymob.pullin.update_icon(UPDATE_ICON_STATE)
hotkeybuttons += mymob.pullin
zone_select = new /atom/movable/screen/zone_sel/flock()
zone_select.hud = src
zone_select.update_icon(UPDATE_OVERLAYS)
static_inventory += zone_select
// Used for flock traces and the overmind
/datum/hud/flockghost
/atom/movable/screen/healths/flockdrone_health
icon = 'icons/goonstation/hud/flock_ui.dmi'
icon_state = "health1"
screen_loc = UI_BORG_HEALTH
/atom/movable/screen/pull/flock
icon = 'icons/goonstation/hud/flock_ui.dmi'
icon_state = "pull0"
screen_loc = UI_MOVI
/atom/movable/screen/act_intent/flock
icon = 'icons/goonstation/hud/flock_ui.dmi'
/atom/movable/screen/act_intent/flock/Click(location, control, params)
var/_x = text2num(params2list(params)["icon-x"])
var/_y = text2num(params2list(params)["icon-y"])
if(_x<=16 && _y<=16)
usr.a_intent_change(INTENT_GRAB)
else if(_x<=16 && _y>=17)
usr.a_intent_change(INTENT_HELP)
else if(_x>=17 && _y<=16)
usr.a_intent_change(INTENT_HARM)
else if(_x>=17 && _y>=17)
usr.a_intent_change(INTENT_DISARM)
/atom/movable/screen/flockphasing
icon = 'icons/goonstation/hud/flock_ui.dmi'
name = "flockphase toggle"
icon_state = "walking"
screen_loc = UI_MOVI
/atom/movable/screen/flockphasing/Click(location, control, params)
var/mob/living/basic/flock/drone/M = usr
if(!istype(M))
return
if(HAS_TRAIT(M, TRAIT_FLOCKPHASE))
M.stop_flockphase()
else
if(M.can_flockphase() && M.flockphase_tax())
M.start_flockphase()
/atom/movable/screen/zone_sel/flock
icon = 'icons/goonstation/hud/flock_ui.dmi'
overlay_file = 'icons/goonstation/hud/flock_ui.dmi'
/atom/movable/screen/flockdrone_part
icon = 'icons/goonstation/hud/flock_ui.dmi'
var/active_state = ""
var/inactive_state = ""
var/part_type
var/datum/flockdrone_part/part_ref
/atom/movable/screen/flockdrone_part/Initialize(mapload, datum/hud/hud_owner)
. = ..()
var/mob/living/basic/flock/drone/drone = usr
for(var/datum/flockdrone_part/part in drone.parts)
if(istype(part, part_type))
part_ref = part
break
part_ref?.screen_obj = src
update_appearance(UPDATE_ICON_STATE)
/atom/movable/screen/flockdrone_part/Destroy()
part_ref?.screen_obj = null
part_ref = null
return ..()
/atom/movable/screen/flockdrone_part/update_icon_state()
if(part_ref?.is_active())
icon_state = active_state
else
icon_state = inactive_state
return ..()
/atom/movable/screen/flockdrone_part/Click(location, control, params)
. = ..()
if(.)
return
var/mob/living/basic/flock/drone/drone = usr
drone.set_active_part(part_ref)
/atom/movable/screen/flockdrone_part/converter
name = "converter"
active_state = "converter1"
inactive_state = "converter0"
desc = "Converters are an integrated multitool in every flockdrone's arsenal. On help and disarm intent, it will build structures, open lockers, and convert turfs. On harm or grab intent, it will deconstruct or cage things."
screen_loc = "CENTER-1:16,SOUTH:5"
part_type = /datum/flockdrone_part/converter
/atom/movable/screen/flockdrone_part/incapacitator
name = "incapacitator"
active_state = "incapacitor1"
inactive_state = "incapacitor0"
desc = "Incapacitators are the primary weapon system of every flockdrone. They fire enhanced stunning rounds capable of disrupting electronics. They will recharge slowly on their own."
maptext_x = 6
maptext_y = 6
screen_loc = "CENTER:16,SOUTH:5"
part_type = /datum/flockdrone_part/incapacitator
var/icon/overlay_mask
var/obj/effect/abstract/charge_overlay
/atom/movable/screen/flockdrone_part/incapacitator/Initialize(mapload, datum/hud/hud_owner)
charge_overlay = new()
. = ..()
charge_overlay.vis_flags = VIS_INHERIT_ID | VIS_INHERIT_LAYER | VIS_INHERIT_PLANE | VIS_INHERIT_ICON
charge_overlay.icon_state = "charge_overlay"
managed_vis_overlays += charge_overlay
overlay_mask = icon('icons/goonstation/hud/flock_ui.dmi', "darkener")
charge_overlay.add_filter("mask", 1, alpha_mask_filter(0, 0, overlay_mask))
/atom/movable/screen/flockdrone_part/incapacitator/Destroy()
managed_vis_overlays -= charge_overlay
QDEL_NULL(charge_overlay)
return ..()
/atom/movable/screen/flockdrone_part/incapacitator/update_appearance(updates)
. = ..()
var/datum/flockdrone_part/incapacitator/part = part_ref
maptext = MAPTEXT("[part?.shot_count || "0"]")
var/datum/flockdrone_part/incapacitator/weapon = part_ref
charge_overlay.transition_filter(
"mask",
0.5 SECONDS,
list(
"y" = -24 * (1 - round(weapon.shot_count / weapon.max_shots, 0.1))
),
SINE_EASING,
FALSE
)
/atom/movable/screen/flockdrone_part/absorber
name = "material decompiler"
active_state = "absorber"
inactive_state = "absorber"
desc = "Absorbers are a key piece of any flockdrone's toolkit. They will pickup items and deconstruct them for substrate - the primary building material of any flock device."
screen_loc = "CENTER+1:16,SOUTH:5"
part_type = /datum/flockdrone_part/absorber
+5
View File
@@ -260,6 +260,11 @@
icon_state = "agentbox"
alpha = 128
/atom/movable/screen/fullscreen/flock_convert
icon = 'icons/goonstation/hud/flockmindcircuit.dmi'
icon_state = "flockmindcircuit"
layer = BLIND_LAYER
#undef FULLSCREEN_LAYER
#undef BLIND_LAYER
#undef CRIT_LAYER