diff --git a/code/controllers/subsystems/robot_sprites.dm b/code/controllers/subsystems/robot_sprites.dm index fd18dfc49f..2cbb7feba5 100644 --- a/code/controllers/subsystems/robot_sprites.dm +++ b/code/controllers/subsystems/robot_sprites.dm @@ -159,6 +159,12 @@ SUBSYSTEM_DEF(robot_sprites) decals -= "decals" RS.sprite_decals |= decals continue + // special overlays that also can be used as animations, as some names have - in them, seperated by _ + if(findtext(icon, regex("^animations"))) + var/list/animations = splittext(icon, "_") + animations -= "animations" + RS.sprite_animations |= animations + continue // Check for all the possible overlays if(findtext(icon, regex("-roll"))) RS.sprite_flags |= ROBOT_HAS_SPEED_SPRITE diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a15f0b0807..9752967119 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -483,6 +483,22 @@ to_chat(src, span_filter_notice("You enable your \"[decal_to_toggle]\" extra apperances.")) update_icon() +/mob/living/silicon/robot/verb/flick_robot_animation() + set category = "Abilities.Settings" + set name = "Flick Animation" + + if(!sprite_datum) + return + if(!LAZYLEN(sprite_datum.sprite_animations)) + to_chat(src, span_warning("This module does not support animations.")) + return + + var/animation_to_play = tgui_input_list(src, "Please select which decal you want to flick", "Flick Decal", sprite_datum.sprite_animations) + if(!animation_to_play) + return + + flick("[sprite_datum.sprite_icon_state]-[animation_to_play]", src) + /mob/living/silicon/robot/verb/toggle_glowy_stomach() set category = "Abilities.Settings" set name = "Toggle Glowing Stomach & Accents" diff --git a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm index 1881f389be..ae08989e58 100644 --- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm @@ -34,6 +34,7 @@ var/list/belly_light_list = list() // Support multiple sleepers with r/g light "sleeper" var/list/belly_capacity_list = list() //Support multiple bellies with multiple sizes, default: "sleeper" = 1 var/list/sprite_decals = list() // Allow extra decals + var/list/sprite_animations = list() // Allows to flick animations /// Determines if the borg has the proper flags to show an overlay. /datum/robot_sprite/proc/sprite_flag_check(var/flag_to_check) diff --git a/code/unit_tests/robot_tests.dm b/code/unit_tests/robot_tests.dm index 5cc07bd34d..3ecd4e6ad0 100644 --- a/code/unit_tests/robot_tests.dm +++ b/code/unit_tests/robot_tests.dm @@ -42,6 +42,10 @@ for(var/decal in RS.sprite_decals) if(check_state(RS,"-[decal]")) failed = TRUE + if(LAZYLEN(RS.sprite_animations)) + for(var/animation in RS.sprite_animations) + if(check_state(RS,"-[animation]")) + failed = TRUE // Control panel if(RS.has_custom_open_sprites) if(check_state(RS,"-openpanel_nc"))