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
@@ -68,3 +68,9 @@
/obj/effect/decal/cleanable/blood/gibs/down/vox
basecolor = "#2299FC"
fleshcolor = "#808D11"
/obj/effect/decal/cleanable/blood/gibs/flock
basecolor = COLOR_BLOOD_FLOCK
/obj/effect/decal/cleanable/blood/gibs/core/flock
basecolor = COLOR_BLOOD_FLOCK
+3
View File
@@ -7,6 +7,9 @@
/proc/xgibs(atom/location)
new /obj/effect/gibspawner/xeno(get_turf(location))
/proc/flockgibs(atom/location)
new /obj/effect/gibspawner/flock(get_turf(location))
/proc/robogibs(atom/location)
new /obj/effect/gibspawner/robot(get_turf(location))
+63
View File
@@ -0,0 +1,63 @@
/obj/effect/abstract/info_tag
plane = INFO_TAG_PLANE
layer = 1
alpha = 180
appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
vis_flags = VIS_INHERIT_ID
/// Atom we're displaying over.
var/atom/parent
/// Mobs that see us rn.
var/list/mob/viewing_mobs
/// Images we're inserting into client.images
VAR_PRIVATE/image/vis_holder
/obj/effect/abstract/info_tag/Initialize(mapload)
. = ..()
vis_holder = new()
vis_holder.plane = INFO_TAG_PLANE
vis_holder.vis_contents += src
/obj/effect/abstract/info_tag/Destroy(force)
set_parent(null)
vis_holder = null
for(var/mob/M in viewing_mobs)
hide_from(M.client)
viewing_mobs = null
return ..()
/obj/effect/abstract/info_tag/proc/set_parent(atom/new_parent)
parent = new_parent
vis_holder.loc = parent
/// Update the text.
/obj/effect/abstract/info_tag/proc/set_text(text)
maptext = "<span class='maptext' style='text-align: center;font-size: 6px'>[text]</span>"
/// Should the given mob be able to see this tag?
/obj/effect/abstract/info_tag/proc/mob_should_see(mob/M)
return TRUE
/obj/effect/abstract/info_tag/proc/show_to(client/C)
C?.images |= vis_holder
/obj/effect/abstract/info_tag/proc/hide_from(client/C)
C?.images -= vis_holder
/obj/effect/abstract/info_tag/flock
maptext_x = -64
maptext_y = -6
maptext_width = 160
maptext_height = 48
/obj/effect/abstract/info_tag/flock/mob_should_see(mob/M)
return (M != parent) && isflockmob(M)
/obj/effect/abstract/info_tag/flock/info
maptext_y = -14
+4
View File
@@ -104,6 +104,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/newplayer_start) //Without this you sp
name = "revenantspawn"
icon_state = "Rev"
/obj/effect/landmark/spawner/flock
name = "flockspawn"
icon_state = "flockmind"
/obj/effect/landmark/spawner/ninja
name = "ninjaspawn"
@@ -54,3 +54,15 @@
/obj/effect/gibspawner/vox/gib_dna(obj/effect/decal/cleanable/blood/gibs/gib, datum/dna/mob_dna)
if(!..()) // Probably admin spawned
gib.blood_DNA["Unknown Vox DNA"] = "A+"
/obj/effect/gibspawner/flock
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/flock, /obj/effect/decal/cleanable/blood/gibs/flock, /obj/effect/decal/cleanable/blood/gibs/core/flock)
gibamounts = list(2,2,1)
/obj/effect/gibspawner/flock/New()
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH), list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
..()
/obj/effect/gibspawner/flock/gib_dna(obj/effect/decal/cleanable/blood/gibs/gib, datum/dna/mob_dna)
if(!..())
gib.blood_DNA["UNKNOWN DNA"] = "&#^*@!"
@@ -5,6 +5,7 @@
* 4. REINFORCED PLASMA GLASS
* 5. TITANIUM GLASS
* 6. PLASTITANIUM GLASS
* 7. GNESIS GLASS
Todo: Create a unified construct_window(sheet, user, created_window, full_window)
@@ -26,6 +27,13 @@ GLOBAL_LIST_INIT(glass_recipes, list (
new /datum/stack_recipe("dropper", /obj/item/reagent_containers/dropper, 1, time = 1 SECONDS),
))
GLOBAL_LIST_INIT(gnesis_glass_recipes, list (
new /datum/stack_recipe("bright shard", /obj/item/shard/gnesis_glass, time = 0 SECONDS),
new /datum/stack_recipe/window("directional gnesis window", /obj/structure/window/flock, time = 1 SECONDS, on_floor = TRUE, window_checks = TRUE),
new /datum/stack_recipe/window("fulltile gnesis window", /obj/structure/window/flock/fulltile, 2, time = 2 SECONDS, on_floor = TRUE, window_checks = TRUE),
new /datum/stack_recipe("gnesis cache", /obj/item/reagent_containers/glass/gnesis, 5, time = 2 SECONDS),
))
/obj/item/stack/sheet/glass
name = "glass"
desc = "HOLY SHEET! That is a lot of glass."
@@ -312,3 +320,21 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
. = ..()
recipes = GLOB.plastitaniumglass_recipes
//////////////////////////////
// MARK: GNESIS GLASS
//////////////////////////////
/obj/item/stack/sheet/gnesis_glass
name = "transculent wafers"
singular_name = "transculent wafer"
desc = "A rare, complex crystalline matrix with a lazily shifting internal structure. The layers are arranged to let light through."
icon_state = "gnesisglass"
materials = list(MAT_GNESIS_GLASS = MINERAL_MATERIAL_AMOUNT)
merge_type = /obj/item/stack/sheet/gnesis_glass
armor = list(MELEE = 20, BULLET = 20, LASER = 0, ENERGY = 100, BOMB = 0, RAD = 50, FIRE = 100, ACID = 20)
resistance_flags = FIRE_PROOF
point_value = 5
dynamic_icon_state = FALSE
/obj/item/stack/sheet/gnesis_glass/Initialize(mapload, new_amount, merge)
. = ..()
recipes = GLOB.gnesis_glass_recipes
@@ -13,6 +13,7 @@ Mineral Sheets
- Platinum
- Alien Alloy
- Adamantine
- Gnesis
*/
GLOBAL_LIST_INIT(sandstone_recipes, list (
@@ -138,6 +139,13 @@ GLOBAL_LIST_INIT(adamantine_recipes, list(
new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount = 1, res_amount = 1),
))
GLOBAL_LIST_INIT(gnesis_recipes, list (
new /datum/stack_recipe("flock chair", /obj/structure/chair/comfy/flock, 2, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("flock closet", /obj/structure/closet/flock, 2, time = 10 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("flock grille", /obj/structure/grille/flock, 1, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("flock door", /obj/machinery/door/flock, 10, time = 10 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
))
GLOBAL_LIST_INIT(snow_recipes, list(
new /datum/stack_recipe("snowman", /obj/structure/snowman, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("Snowball", /obj/item/snowball, 1)
@@ -600,6 +608,23 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list(
/obj/item/stack/sheet/mineral/adamantine/fifty
amount = 50
/*
* Gnesis
*/
/obj/item/stack/sheet/gnesis
name = "wafers"
desc = "A rare, complex crystalline matrix with a lazily shifting internal structure. Not to be confused with gneiss, a metamorphic rock."
singular_name = "wafer"
icon_state = "gnesis"
materials = list(MAT_GNESIS = MINERAL_MATERIAL_AMOUNT)
merge_type = /obj/item/stack/sheet/gnesis
dynamic_icon_state = FALSE
/obj/item/stack/sheet/gnesis/Initialize(mapload, new_amount, merge)
. = ..()
recipes = GLOB.gnesis_recipes
/*
* Snow
*/
@@ -105,3 +105,12 @@
materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
icon_prefix = "plastitanium"
welded_type = /obj/item/stack/sheet/plastitaniumglass
/obj/item/shard/gnesis_glass
name = "bright shard"
desc = "A jagged shard of weird alien computer crystal stuff."
color = "#1bdebd"
force = 7
throwforce = 12
materials = list(MAT_GNESIS_GLASS = MINERAL_MATERIAL_AMOUNT * 0.5)
welded_type = /obj/item/stack/sheet/gnesis_glass
+9
View File
@@ -19,6 +19,15 @@
if(obj_integrity <= 0)
obj_destruction(damage_flag)
/**
* Retrieves the objects's current damage as a percentage where `100%` is `100`.
*/
/obj/proc/get_integrity_percentage()
return ceil(obj_integrity / max_integrity * 100)
/obj/proc/get_integrity_lost()
return max_integrity - obj_integrity
///returns the damage value of the attack after processing the obj's various armor protections
/obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armor_penetration_flat = 0, armor_penetration_percentage = 0)
if(damage_flag == MELEE && damage_amount < damage_deflection)