Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
19199c2
optimize flock/GOAP target selection
Kapu1178 Oct 8, 2025
339fbba
optimizes GOAP target selection massively
Kapu1178 Oct 8, 2025
7f4c3fa
micro opt GBTBDS
Kapu1178 Oct 8, 2025
7500c34
compute -> bandwidth
Kapu1178 Oct 9, 2025
5d1286d
TSX flockpanel
Kapu1178 Oct 9, 2025
552c142
flock cage and cache
Kapu1178 Oct 10, 2025
2096e3e
flock examine
Kapu1178 Oct 10, 2025
63aef00
flock antag
Kapu1178 Oct 10, 2025
8d85b8b
flock greet
Kapu1178 Oct 10, 2025
580c656
grammar
Kapu1178 Oct 10, 2025
bf71a00
conversion strings for flock.json
Kapu1178 Oct 10, 2025
03f5bbc
cage_mob action
Kapu1178 Oct 10, 2025
29f8401
flockdrone butchering didnt test
Kapu1178 Oct 10, 2025
538971e
oops
Kapu1178 Oct 10, 2025
1ef4860
relay base
Kapu1178 Oct 10, 2025
a057fe1
doc
Kapu1178 Oct 10, 2025
3e51b8b
relay additions
Kapu1178 Oct 11, 2025
58d0a71
apcs/air alarms do not get converted
Kapu1178 Oct 12, 2025
8db275e
collector
Kapu1178 Oct 12, 2025
0edc177
clean up this flockphase turf relations
Kapu1178 Oct 12, 2025
72d370a
fix cage issue
Kapu1178 Oct 12, 2025
3893899
small flockpanel update
Kapu1178 Oct 12, 2025
8e5bd19
fix flock unlockable runtime
Kapu1178 Oct 12, 2025
a6aa65d
more flock unlockable fixes
Kapu1178 Oct 12, 2025
fa1b3f0
fix flock ping
Kapu1178 Oct 12, 2025
69917ae
new drone control
Kapu1178 Oct 12, 2025
659717f
fix
Kapu1178 Oct 12, 2025
b761dbc
grammar consistency
Kapu1178 Oct 12, 2025
77b8826
minor text tweak
Kapu1178 Oct 12, 2025
3300e30
slight do_after refactor, assuming control of a drone now cancels do_…
Kapu1178 Oct 12, 2025
9898f96
info tags
Kapu1178 Oct 12, 2025
0843faa
structure info tags
Kapu1178 Oct 12, 2025
3b9059a
flockmob info tags
Kapu1178 Oct 12, 2025
911f76e
minor consistency
Kapu1178 Oct 12, 2025
0af932d
fix mobs getting stuck in windows
Kapu1178 Oct 13, 2025
d75e041
randomizes GOAP best targets if they share the same score
Kapu1178 Oct 13, 2025
76f276a
dormantize
Kapu1178 Oct 13, 2025
61d4b89
kind of makes take_control work
Kapu1178 Oct 13, 2025
3cc3a86
fix soft gc
Kapu1178 Oct 13, 2025
e3e8214
interceptor
Kapu1178 Oct 20, 2025
a26135c
flcokdrone part base
Kapu1178 Oct 21, 2025
7466a3d
incapacitator
Kapu1178 Oct 21, 2025
e16f8a8
fixes
Kapu1178 Oct 21, 2025
a3ec98d
fix missing args in take_damage
Kapu1178 Oct 21, 2025
b58c088
fixes
Kapu1178 Oct 21, 2025
a855090
healthdoll fixes
Kapu1178 Oct 21, 2025
5a7432f
fix cage mob action
Kapu1178 Oct 21, 2025
576861b
Don't render drone actions
Kapu1178 Oct 21, 2025
6d8825d
deconstruction
Kapu1178 Oct 22, 2025
e8f5719
deposit action, rename resources to substrate
Kapu1178 Oct 22, 2025
00728f8
goap preconditions
Kapu1178 Oct 22, 2025
ac43a4f
deconstruction
Kapu1178 Oct 23, 2025
af89c48
goap weights + renaming
Kapu1178 Oct 23, 2025
d7d7796
flcok conversion no longer qdels 99% of objects, deconstruction impro…
Kapu1178 Oct 23, 2025
9d17845
nesting
Kapu1178 Oct 24, 2025
c38896e
absorber
Kapu1178 Oct 24, 2025
4344ba2
rebalance item integrity and burning object damage
Kapu1178 Oct 24, 2025
e9ce8af
harvesting ai
Kapu1178 Oct 24, 2025
470f5ec
nesting/replicate split, rummaging
Kapu1178 Oct 25, 2025
4692d69
flock fabricator
Kapu1178 Oct 26, 2025
9370326
release_control improvements
Kapu1178 Oct 26, 2025
cc7eb21
overmind harvest command
Kapu1178 Oct 26, 2025
728db7e
harvest behavior (did not test yet)
Kapu1178 Oct 27, 2025
8d2b465
boilerplate reduction pt1
Kapu1178 Oct 27, 2025
9b4cf80
tweak
Kapu1178 Oct 27, 2025
cdf33a7
move capture & convert to new framework
Kapu1178 Oct 27, 2025
93298f7
cage mob control, fix search radiuses being way too big
Kapu1178 Oct 27, 2025
e6df327
shooting
Kapu1178 Oct 28, 2025
e7d7ed2
deposit task (untested)
Kapu1178 Oct 31, 2025
1ebcc2a
tweaks
Kapu1178 Oct 31, 2025
b95a053
fixes n shit
Kapu1178 Nov 1, 2025
ce5c2dd
almost ready
Kapu1178 Nov 1, 2025
b7336f1
immmm retarded!
Kapu1178 Nov 1, 2025
bcafd02
immmmm extra retarded!
Kapu1178 Nov 1, 2025
40efea8
point holder return values
Kapu1178 Nov 1, 2025
3a29765
fixes
Kapu1178 Nov 4, 2025
9f72252
fix
Kapu1178 Nov 4, 2025
430b000
more fixes
Kapu1178 Nov 4, 2025
8ab7e9f
fix astar pathfind harddel
Kapu1178 Nov 4, 2025
672873b
rewrite flockphasing
Kapu1178 Nov 4, 2025
7266c52
force stop flockphasing when performing actions
Kapu1178 Nov 4, 2025
c57ee19
fix depositing (lol)
Kapu1178 Nov 6, 2025
3188dff
ident confirmed. also fixes flockbits having 2x health
Kapu1178 Nov 6, 2025
f639758
flockdrone substrate statpane message
Kapu1178 Nov 6, 2025
cb76f17
fix looping timer bug
Kapu1178 Nov 6, 2025
caf13f5
fixes fabricators i guess
Kapu1178 Nov 6, 2025
4c7533c
bugfixes
Kapu1178 Nov 6, 2025
32f1df7
sentinel charge bug
Kapu1178 Nov 9, 2025
82eadb3
Fixes silicon flocksay clobbering HTML
Kapu1178 Nov 9, 2025
4013446
fixes n shit
Kapu1178 Nov 10, 2025
4ec41a8
functioning objective
Kapu1178 Nov 10, 2025
2e06f2d
Merge branch 'master' of github.com:DaedalusDock/daedalusdock into 10…
Kapu1178 Nov 22, 2025
79aeec6
Merge branch 'master' of github.com:DaedalusDock/daedalusdock into 10…
Kapu1178 Jan 21, 2026
1b25dce
remove warnings
Kapu1178 Jan 21, 2026
84a3b58
fix issues found by C&D
Kapu1178 Jan 21, 2026
ce60664
just skip it whatever
Kapu1178 Jan 21, 2026
6f14969
fix collector oversight
Kapu1178 Jan 21, 2026
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/__DEFINES/ai.dm
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@
///Does this require the current_movement_target to be adjacent and in reach?
#define AI_BEHAVIOR_REQUIRE_REACH (1<<5)

/// Magic value to tell the G.O.A.P selector to ignore a behavior.
#define AI_GOAP_SKIP_BEHAVIOR (-1000001)


///AI flags
#define STOP_MOVING_WHEN_PULLED (1<<0)
Expand Down Expand Up @@ -257,7 +260,20 @@
#define BB_FLOCK_WANDERING "BB_flock_wandering"
#define BB_FLOCK_STARE_CD "BB_flock_stare_cooldown"
#define BB_FLOCK_CONVERT_TARGET "BB_flock_convert_target"
#define BB_FLOCK_DECON_TARGET "BB_flock_decon_target"
#define BB_FLOCK_HARVEST_TARGET "BB_flock_harvest_target"
#define BB_FLOCK_WANDER_FRUSTRATION "BB_flock_wander_frustration"
#define BB_FLOCK_HEAL_TARGET "BB_flock_heal_target"
#define BB_FLOCK_HEAL_FRUSTRATION "BB_flock_heal_frustation"
#define BB_FLOCK_REPLICATE_TARGET "BB_flock_replicate_target"
#define BB_FLOCK_NEST_TARGET "BB_flock_nest_target"
#define BB_FLOCK_OVERMIND_CONTROL "BB_flock_overmind_control"
#define BB_FLOCK_CONTAINER_TARGET "BB_flock_container_target"
#define BB_FLOCK_RUMMAGE_TARGET "BB_flock_rummage_target"
#define BB_FLOCK_CAPTURE_TARGET "BB_flock_capture_target"
#define BB_FLOCK_ATTACK_TARGET "BB_flock_attack_target"
#define BB_FLOCK_ATTACK_COOLDOWN "BB_flock_attack_cooldown"
#define BB_FLOCK_ATTACK_RUN_COOLDOWN "BB_flock_attack_run_cooldown"
#define BB_FLOCK_ATTACK_STRAFE_COOLDOWN "BB_flock_attack_strafe_cooldown"
#define BB_FLOCK_ATTACK_FRUSTRATION "BB_flock_attack_frustration"
#define BB_FLOCK_DEPOSIT_TARGET "BB_flock_deposit_target"
46 changes: 46 additions & 0 deletions code/__DEFINES/flock_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,22 @@
#define FLOCK_TYPE_DRONE "drone"
#define FLOCK_TYPE_BIT "bit"

// Turf reserved by a flockdrone
#define FLOCK_NOTICE_RESERVED "reserved"
// Turf marked for conversion
#define FLOCK_NOTICE_PRIORITY "priority"
// Mob marked as enemy
#define FLOCK_NOTICE_ENEMY "enemy"
// Mob marked as ignored
#define FLOCK_NOTICE_IGNORE "ignore"
// Flockdrone under flocktrace control
#define FLOCK_NOTICE_FLOCKTRACE_CONTROL "flocktrace_control"
// Flockdrone under overmind control
#define FLOCK_NOTICE_FLOCKMIND_CONTROL "flockmind_control"
// Flockdrone health bars
#define FLOCK_NOTICE_HEALTH "flock_health"
// Atom marked for deconstruction
#define FLOCK_NOTICE_DECONSTRUCT "flock_deconstruct"

#define FLOCK_UI_DRONES "drones"
#define FLOCK_UI_TRACES "traces"
Expand All @@ -19,3 +28,40 @@
#define FLOCK_COMPUTE_COST_FLOCKTRACE 100
#define FLOCK_COMPUTE_COST_DRONE 10
#define FLOCK_COMPUTE_COST_RELAY 500

#define FLOCK_TURFS_FOR_RELAY 250

/// Amount of substrate to add to a tealprint.
#define FLOCK_SUBSTRATE_COST_DEPOST_TEALPRINT 10
/// Amount to convert a turf and it's contents.
#define FLOCK_SUBSTRATE_COST_CONVERT 20
/// Amount to repair a flock construct.
#define FLOCK_SUBSTRATE_COST_REPAIR 10
/// BASE amount to lay an egg.
#define FLOCK_SUBSTRATE_COST_LAY_EGG 100

/// Egg cost does not start scaling until there are this many drones.
#define FLOCK_MIN_DESIRED_POP 10
/// Each drone above the min desired pop adds this much to the substrate required to be able to lay an egg.
#define FLOCK_ADDITIONAL_RESOURCE_RESERVATION_PER_DRONE 8
#define FLOCK_DRONE_LIMIT 50

#define FLOCK_ENDGAME_LOST 1
#define FLOCK_ENDGAME_RELAY_BUILT 2
#define FLOCK_ENDGAME_RELAY_ACTIVATING 3
#define FLOCK_ENDGAME_VICTORY 4

// G.O.A.P weights for flock behaviors, for easy comparison/adjustment.
#define FLOCK_BEHAVIOR_WEIGHT_WANDER 1
#define FLOCK_BEHAVIOR_WEIGHT_STARE 1
#define FLOCK_BEHAVIOR_WEIGHT_CONVERT 1
#define FLOCK_BEHAVIOR_WEIGHT_HARVEST 2
#define FLOCK_BEHAVIOR_WEIGHT_OPEN_CONTAINER 3
#define FLOCK_BEHAVIOR_WEIGHT_RUMMAGE 3
#define FLOCK_BEHAVIOR_WEIGHT_REPAIR 4
#define FLOCK_BEHAVIOR_WEIGHT_NEST 6
#define FLOCK_BEHAVIOR_WEIGHT_REPLICATE 7
#define FLOCK_BEHAVIOR_WEIGHT_DECONSTRUCT 8
#define FLOCK_BEHAVIOR_WEIGHT_DEPOSIT 8
#define FLOCK_BEHAVIOR_WEIGHT_SHOOT 10
#define FLOCK_BEHAVIOR_WEIGHT_CAPTURE 15
5 changes: 4 additions & 1 deletion code/__DEFINES/layers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,9 @@ Specifically: ZMIMIC_MAX_PLANE to (ZMIMIC_MAX_PLANE - ZMIMIC_MAX_DEPTH)
///Pipecrawling images
#define PIPECRAWL_IMAGES_PLANE 180

///Info tags, below things like blindness and camera static
#define INFO_TAG_PLANE 190

///AI Camera Static
#define CAMERA_STATIC_PLANE 200

Expand All @@ -181,6 +184,7 @@ Specifically: ZMIMIC_MAX_PLANE to (ZMIMIC_MAX_PLANE - ZMIMIC_MAX_DEPTH)
#define DITHER_LAYER 3
#define UI_DAMAGE_LAYER 4
#define BLIND_LAYER 5
#define FLOCK_CONVERT_LAYER 5.5
#define CRIT_LAYER 6
#define CURSE_LAYER 7
#define FOV_EFFECTS_LAYER 10000 //Blindness effects are not layer 4, they lie to you
Expand All @@ -205,7 +209,6 @@ Specifically: ZMIMIC_MAX_PLANE to (ZMIMIC_MAX_PLANE - ZMIMIC_MAX_DEPTH)
#define RADIAL_BACKGROUND_LAYER 0
///1000 is an unimportant number, it's just to normalize copied layers
#define RADIAL_CONTENT_LAYER 1000

#define ADMIN_POPUP_LAYER 1

///Layer for screentips
Expand Down
3 changes: 2 additions & 1 deletion code/__DEFINES/role_preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#define ROLE_CHANGELING "Changeling"
#define ROLE_CULTIST "Cultist"
#define ROLE_FAMILIES "Gangster"
#define ROLE_FLOCK "Flock"
#define ROLE_FLOCK "Divine Flock"
#define ROLE_HERETIC "Heretic"
#define ROLE_MALF "Malf AI"
#define ROLE_OPERATIVE "Operative"
Expand Down Expand Up @@ -118,6 +118,7 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_TRAITOR = 0,
ROLE_WIZARD = 14,
ROLE_VAMPIRE = 0,
ROLE_FLOCK = 0,

// Midround
ROLE_ABDUCTOR = 0,
Expand Down
8 changes: 7 additions & 1 deletion code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_IMPORTANT_SPEAKER "important_speaker"
/// This mob automatically succeeds rolls for get_examine_result()
#define TRAIT_BIGBRAIN "big_brain"

/// Always butcherable even if butcher_results list is empty.
#define TRAIT_ALWAYS_BUTCHERABLE "always_butcherable"
// Stops the mob from slipping on water, or banana peels, or pretty much anything that doesn't have [GALOSHES_DONT_HELP] set
#define TRAIT_NO_SLIP_WATER "NO_SLIP_WATER"
/// Stops the mob from slipping on permafrost ice (not any other ice) (but anything with [SLIDE_ICE] set)
Expand Down Expand Up @@ -1026,7 +1027,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define FLOCK_CONTROLLED_BY_OVERMIND_SOURCE "FLOCK_CONTROLLED_BY_OVERMIND_SOURCE"

#define TRAIT_FLOCKPHASE "TRAIT_FLOCKPHASE"
/// Is a flock object. Because of type fuckery.
#define TRAIT_FLOCK_THING "TRAIT_FLOCK_THING"
/// Flockdrones cannot deconstruct this object.
#define TRAIT_FLOCK_NODECON "TRAIT_FLOCK_NODECON"
/// Implements flock_examine() proc.
#define TRAIT_FLOCK_EXAMINE "TRAIT_FLOCK_EXAMINE"

/// Trait from mob/living/update_transform()
#define UPDATE_TRANSFORM_TRAIT "update_transform"
1 change: 1 addition & 0 deletions code/__HELPERS/atlas.dm
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ GLOBAL_REAL_VAR(list/atlas) = list()
/// Key used for things that can call the shuttle
#define TRACKING_KEY_SHUTTLE_CALLER "shuttle_caller"
#define TRACKING_KEY_RCD "rcds"
#define TRACKING_KEY_FLOCK_INFO_HUDS "flock_info"

/proc/list_debug()
var/list/lists = list()
Expand Down
1 change: 1 addition & 0 deletions code/__HELPERS/paths/astar_path.dm
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@
open_binary_tree = null
open_turf_to_node = null
closed = null
heuristic = null // hard del generator if using generic_heuristic

/**
* "starts" off the pathfinding, by storing the values this datum will need to work later on
Expand Down
2 changes: 1 addition & 1 deletion code/__HELPERS/paths/jps_path.dm
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@
continue
if(!border.density && border.can_astar_pass == CANASTARPASS_DENSITY)
continue
if(!border.CanAStarPass(actual_dir, pass_info))
if(!border.CanAStarPass(actual_dir, pass_info, TRUE))
return TRUE

// Destination blockers check
Expand Down
2 changes: 1 addition & 1 deletion code/__HELPERS/paths/path.dm
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@

if(isflockdrone(construct_from))
var/mob/living/simple_animal/flock/drone/bird = construct_from
if(HAS_TRAIT(bird, TRAIT_FLOCKPHASE) || bird.resources.has_points(10))
if(HAS_TRAIT(bird, TRAIT_FLOCKPHASE) || bird.substrate.has_points(10))
able_to_flockphase = TRUE

/// List of vars on /datum/can_pass_info to use when checking two instances for equality
Expand Down
3 changes: 3 additions & 0 deletions code/_onclick/hud/action_button.dm
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ DEFINE_INTERACTABLE(/atom/movable/screen/movable/action_button)

for(var/datum/action/action as anything in actions)
var/atom/movable/screen/movable/action_button/button = action.viewers[hud_used]
if(isnull(button))
continue

action.build_all_button_icons()
if(reload_screen)
client.screen += button
Expand Down
169 changes: 169 additions & 0 deletions code/_onclick/hud/flock.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
/datum/hud/flockdrone
ui_style = 'goon/icons/hud/flock_ui.dmi'

var/atom/movable/screen/flock_relay_status/relay_status

/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

healthdoll = new /atom/movable/screen/flockdrone_health(null, src)
infodisplay += healthdoll

relay_status = new(null, src)
infodisplay += relay_status

/datum/hud/flockdrone/Destroy()
QDEL_NULL(relay_status)
return ..()

// Used for flock traces and the overmind
/datum/hud/flockghost
ui_style = 'goon/icons/hud/flock_ui.dmi'

var/atom/movable/screen/flock_relay_status/relay_status

/datum/hud/flockghost/New(mob/owner)
. = ..()
relay_status = new(null, src)
infodisplay += relay_status

/datum/hud/flockghost/Destroy()
QDEL_NULL(relay_status)
return ..()

/atom/movable/screen/flockdrone_health
icon = 'goon/icons/hud/flock_ui.dmi'
icon_state = "health1"
screen_loc = ui_living_healthdoll

/atom/movable/screen/flockdrone_part
icon = 'goon/icons/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/simple_animal/flock/drone/drone = hud?.mymob
part_ref = locate(part_type) in drone?.parts // create n destroy
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/simple_animal/flock/drone/drone = hud?.mymob
drone.set_active_part(part_ref)

/atom/movable/screen/flockdrone_part/converter
name = "converter"
active_state = "converter1"
inactive_state = "converter0"

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"

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"
add_viscontents(charge_overlay)

overlay_mask = icon('goon/icons/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()
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"

screen_loc = "CENTER+1:16,SOUTH:5"

part_type = /datum/flockdrone_part/absorber

/atom/movable/screen/flock_relay_status
name = "relay progress"
icon = 'goon/icons/hud/flock_ui.dmi'
icon_state = "structure-relay"

screen_loc = "EAST-1:28,CENTER-2:15"
alpha = 0

/// Tracks the last flock status it was aware of.
var/flock_status = NONE

/atom/movable/screen/flock_relay_status/update_icon_state()
switch(flock_status)
if(NONE)
icon_state = "structure-relay"
if(FLOCK_ENDGAME_RELAY_BUILT, FLOCK_ENDGAME_RELAY_ACTIVATING, FLOCK_ENDGAME_VICTORY)
icon_state = "structure-relay-glow"
return ..()

/atom/movable/screen/flock_relay_status/update_overlays()
. = ..()
if(flock_status == FLOCK_ENDGAME_RELAY_ACTIVATING || flock_status == FLOCK_ENDGAME_VICTORY)
. += image(icon, "structure-relay-sparks")
6 changes: 5 additions & 1 deletion code/_onclick/hud/fullscreen.dm
Original file line number Diff line number Diff line change
Expand Up @@ -232,4 +232,8 @@
show_when_dead = TRUE
screen_loc = "WEST,SOUTH to EAST,NORTH"

/atom/movable/screen/fullscreen/bloodlust
/atom/movable/screen/fullscreen/flock_convert
icon = 'goon/icons/hud/flockmindcircuit.dmi'
icon_state = "flockmindcircuit"
layer = FLOCK_CONVERT_LAYER
show_when_dead = FALSE
3 changes: 3 additions & 0 deletions code/_onclick/hud/hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
floating_actions = list()
for(var/datum/action/action as anything in mymob.actions)
var/atom/movable/screen/movable/action_button/button = action.viewers[src]
if(!action.render_button)
continue

if(!button)
action.ShowTo(mymob)
button = action.viewers[src]
Expand Down
Loading
Loading