From 1ad7827d9d76d75bf6f7cb65ef80dd0c49de2103 Mon Sep 17 00:00:00 2001 From: CHOMPStation2StaffMirrorBot <94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com> Date: Sat, 15 Mar 2025 17:03:00 -0700 Subject: [PATCH] [MIRROR] Robot offset unittest (#10433) Co-authored-by: Cameron Lennox Co-authored-by: Willburd <7099514+Willburd@users.noreply.github.com> --- .../living/silicon/robot/sprites/civilian.dm | 16 ++++++++++- .../living/silicon/robot/sprites/combat.dm | 8 ++++++ .../living/silicon/robot/sprites/command.dm | 6 +++++ .../silicon/robot/sprites/engineering.dm | 6 +++++ .../living/silicon/robot/sprites/gooborgs.dm | 24 +++++++++++++++++ .../living/silicon/robot/sprites/janitor.dm | 6 +++++ .../living/silicon/robot/sprites/medical.dm | 6 +++++ .../living/silicon/robot/sprites/mining.dm | 20 ++++++++++++++ .../living/silicon/robot/sprites/science.dm | 6 +++++ .../living/silicon/robot/sprites/security.dm | 8 ++++++ .../living/silicon/robot/sprites/syndicate.dm | 2 ++ .../exploration/exploration-sprites.dm | 4 +++ code/unit_tests/robot_tests.dm | 25 ++++++++++++++++-- icons/mob/robot/raptor.dmi | Bin 4717 -> 4866 bytes 14 files changed, 134 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/sprites/civilian.dm b/code/modules/mob/living/silicon/robot/sprites/civilian.dm index 98e03ad588..32562519eb 100644 --- a/code/modules/mob/living/silicon/robot/sprites/civilian.dm +++ b/code/modules/mob/living/silicon/robot/sprites/civilian.dm @@ -314,28 +314,37 @@ rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/service/dullahan - name = "Dullahan" + name = "Dullahan v1" sprite_icon_state = "dullahanserv" sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_serv.dmi' rest_sprite_options = list("Default", "Sit") has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE + pixel_x = 0 + icon_x = 32 + /datum/robot_sprite/dogborg/tall/service/dullahan/servicealt name = "Dullahan v2" sprite_icon_state = "dullahanserv_alt" + pixel_x = 0 + icon_x = 32 /datum/robot_sprite/dogborg/tall/service/dullahan/servicealt2 name = "Dullahan v3" sprite_icon = 'icons/mob/robot/dullahan/v3/service.dmi' sprite_icon_state = "dullahanservice" sprite_decals = list("decals") + icon_x = 64 + pixel_x = -16 /datum/robot_sprite/dogborg/tall/service/dullahan/servicealt3 name = "Dullahan v4 matcha" sprite_icon = 'icons/mob/robot/dullahan/v3/barista.dmi' sprite_icon_state = "dullahanbarista" sprite_decals = list("decals") + icon_x = 64 + pixel_x = -16 // Clerical @@ -434,6 +443,7 @@ has_custom_open_sprites = FALSE has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") + icon_x = 32 /datum/robot_sprite/dogborg/tall/clown/dullahan name = "Dullahan Clown" @@ -442,6 +452,8 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + pixel_x = 0 + icon_x = 32 /datum/robot_sprite/dogborg/clown/stoat name = "ST-04t" @@ -472,6 +484,8 @@ name = "MEKA Alt" sprite_icon_state = "mekaserve_alt" rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/service/smolraptorservicesprite diff --git a/code/modules/mob/living/silicon/robot/sprites/combat.dm b/code/modules/mob/living/silicon/robot/sprites/combat.dm index 88c12127e6..14f532223b 100644 --- a/code/modules/mob/living/silicon/robot/sprites/combat.dm +++ b/code/modules/mob/living/silicon/robot/sprites/combat.dm @@ -160,21 +160,29 @@ module_type = "Combat" sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi' has_vore_belly_sprites = TRUE + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/combat/tall/mmeka name = "NIKO" sprite_icon_state = "mmekasyndi" has_vore_belly_sprites = TRUE + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/combat/tall/fmeka name = "NIKA" sprite_icon_state = "fmekasyndi" has_vore_belly_sprites = TRUE + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/combat/tall/k4t name = "K4T" sprite_icon_state = "k4tsyndi" has_vore_belly_sprites = FALSE + icon_x = 32 + pixel_x = 0 //Using our own category wide here not to interfere with upstream in case they add wide sprites under just dogborg. /datum/robot_sprite/dogborg/wide/combat diff --git a/code/modules/mob/living/silicon/robot/sprites/command.dm b/code/modules/mob/living/silicon/robot/sprites/command.dm index 8936a1b3eb..0f9dd2b0df 100644 --- a/code/modules/mob/living/silicon/robot/sprites/command.dm +++ b/code/modules/mob/living/silicon/robot/sprites/command.dm @@ -78,6 +78,8 @@ has_dead_sprite_overlay = FALSE has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") + icon_y = 64 + vis_height = 64 /datum/robot_sprite/dogborg/tall/command/meka name = "MEKA" @@ -86,6 +88,8 @@ has_custom_open_sprites = FALSE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + /datum/robot_sprite/dogborg/tall/command/mmeka name = "NIKO" @@ -94,6 +98,7 @@ has_custom_open_sprites = FALSE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 /datum/robot_sprite/dogborg/tall/command/fmeka name = "NIKA" @@ -102,6 +107,7 @@ has_custom_open_sprites = FALSE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 /datum/robot_sprite/dogborg/command/smolraptorcommand name = "Small Raptor" diff --git a/code/modules/mob/living/silicon/robot/sprites/engineering.dm b/code/modules/mob/living/silicon/robot/sprites/engineering.dm index a9ecdd93d3..2dc949bdbd 100644 --- a/code/modules/mob/living/silicon/robot/sprites/engineering.dm +++ b/code/modules/mob/living/silicon/robot/sprites/engineering.dm @@ -227,16 +227,22 @@ rest_sprite_options = list("Default", "Sit") has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/engineering/dullahan/engineerv2 name = "Dullahan v2" sprite_icon_state = "dullahaneng_alt" + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/engineering/dullahan/engineerv3 name = "Dullahan v3" sprite_icon = 'icons/mob/robot/dullahan/v3/engineer.dmi' sprite_icon_state = "dullahanengineer" sprite_decals = list("decals") + icon_x = 64 + pixel_x = -16 /datum/robot_sprite/dogborg/engineering/cat name = "Cat" diff --git a/code/modules/mob/living/silicon/robot/sprites/gooborgs.dm b/code/modules/mob/living/silicon/robot/sprites/gooborgs.dm index c2346ac062..e194c4a99b 100644 --- a/code/modules/mob/living/silicon/robot/sprites/gooborgs.dm +++ b/code/modules/mob/living/silicon/robot/sprites/gooborgs.dm @@ -30,6 +30,8 @@ rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) sprite_flags = ROBOT_HAS_MELEE_SPRITE //Hammer + icon_y = 64 + vis_height = 64 /datum/robot_sprite/dogborg/mining/gooborg/miner name = "Gooborg - Miner" @@ -39,6 +41,8 @@ rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) sprite_flags = ROBOT_HAS_MELEE_SPRITE | ROBOT_HAS_GUN_SPRITE //Hammer & PKA + icon_y = 64 + vis_height = 64 /// Engineering /datum/robot_sprite/dogborg/engineering/gooborg @@ -55,6 +59,8 @@ sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_engi.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) + icon_y = 64 + vis_height = 64 /// Crisis /datum/robot_sprite/dogborg/crisis/gooborg @@ -72,6 +78,8 @@ rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) module_type = list("Crisis", "Surgeon") + icon_y = 64 + vis_height = 64 /// Science /datum/robot_sprite/dogborg/science/gooborg @@ -88,6 +96,8 @@ sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_sci.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) + icon_y = 64 + vis_height = 64 /// Security /datum/robot_sprite/dogborg/security/gooborg @@ -105,6 +115,8 @@ rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_SHIELD_SPRITE | ROBOT_HAS_DISABLER_SPRITE | ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE | ROBOT_HAS_MELEE_SPRITE //Melee is baton. + icon_y = 64 + vis_height = 64 /datum/robot_sprite/dogborg/security/gooborg/get_eyes_overlay(var/mob/living/silicon/robot/ourborg) if(ourborg.has_active_type(/obj/item/borg/combat/mobility)) @@ -128,6 +140,8 @@ rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) module_type = list("Service", "Clerical") + icon_y = 64 + vis_height = 64 /datum/robot_sprite/dogborg/janitor/gooborg name = "Gooborg" @@ -143,6 +157,8 @@ sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_jani.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) + icon_y = 64 + vis_height = 64 /datum/robot_sprite/dogborg/combat_gooborg name = "Gooborg" @@ -160,6 +176,8 @@ belly_capacity_list = list("sleeper" = 2, "throat" =2) sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_DISABLER_SPRITE | ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE | ROBOT_HAS_MELEE_SPRITE //Baton module_type = "Combat" + icon_y = 64 + vis_height = 64 /datum/robot_sprite/dogborg/combat_gooborg/get_eyes_overlay(var/mob/living/silicon/robot/ourborg) if(ourborg.has_active_type(/obj/item/borg/combat/mobility)) @@ -180,6 +198,8 @@ sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_jester.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) + icon_y = 64 + vis_height = 64 //Exploration. /datum/robot_sprite/dogborg/explo_gooborg @@ -197,6 +217,8 @@ rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2, "throat" =2) module_type = "Exploration" + icon_y = 64 + vis_height = 64 /datum/robot_sprite/dogborg/explo_gooborg/get_eyes_overlay(var/mob/living/silicon/robot/ourborg) if(ourborg.has_active_type(/obj/item/borg/combat/mobility)) @@ -221,6 +243,8 @@ belly_capacity_list = list("sleeper" = 2, "throat" =2) sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_GUN_SPRITE | ROBOT_HAS_BLADE_SPRITE //esword module_type = list("Combat Medic", "Mechanist", "Protector") //You get all three modules. + icon_y = 64 + vis_height = 64 /datum/robot_sprite/dogborg/combat_medic/gooborg/get_eyes_overlay(var/mob/living/silicon/robot/ourborg) if(ourborg.has_active_type(/obj/item/borg/combat/mobility)) diff --git a/code/modules/mob/living/silicon/robot/sprites/janitor.dm b/code/modules/mob/living/silicon/robot/sprites/janitor.dm index 9a4fc4750c..c14ddcc0dd 100644 --- a/code/modules/mob/living/silicon/robot/sprites/janitor.dm +++ b/code/modules/mob/living/silicon/robot/sprites/janitor.dm @@ -212,16 +212,22 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/janitor/dullahan/janitoralt name = "Dullahan v2" sprite_icon_state = "dullahanjani_alt" + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/janitor/dullahan/janitoralt2 name = "Dullahan v3" sprite_icon = 'icons/mob/robot/dullahan/v3/janitor.dmi' sprite_icon_state = "dullahanjanitor" sprite_decals = list("decals") + icon_x = 64 + pixel_x = -16 /datum/robot_sprite/dogborg/janitor/cat name = "Cat" diff --git a/code/modules/mob/living/silicon/robot/sprites/medical.dm b/code/modules/mob/living/silicon/robot/sprites/medical.dm index 40c00f37b8..92eca5298d 100644 --- a/code/modules/mob/living/silicon/robot/sprites/medical.dm +++ b/code/modules/mob/living/silicon/robot/sprites/medical.dm @@ -149,10 +149,14 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/crisis/dullahan/crisisalt name = "Dullahan v2" sprite_icon_state = "dullahanmed_alt" + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/medical/dullahan/crisisalt2 name = "Dullahan medical v3" @@ -160,6 +164,8 @@ sprite_icon = 'icons/mob/robot/dullahan/v3/medical.dmi' sprite_icon_state = "dullahanmedical" rest_sprite_options = list("Default", "Sit") + icon_x = 64 + pixel_x = -16 // Surgeon diff --git a/code/modules/mob/living/silicon/robot/sprites/mining.dm b/code/modules/mob/living/silicon/robot/sprites/mining.dm index f45957a3e8..9a82afb64a 100644 --- a/code/modules/mob/living/silicon/robot/sprites/mining.dm +++ b/code/modules/mob/living/silicon/robot/sprites/mining.dm @@ -196,16 +196,22 @@ has_custom_open_sprites = FALSE has_eye_light_sprites = TRUE rest_sprite_options = list("Default", "sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/mining/dullahan/mineralt name = "Dullahan Mining unit v2" sprite_icon_state = "dullahanmine_alt" + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/mining/dullahan/miningdully name = "Dullahan mining v3" sprite_icon = 'icons/mob/robot/dullahan/v3/mining.dmi' sprite_icon_state = "dullahanmining" sprite_decals = list("decals") + icon_x = 64 + pixel_x = -16 /datum/robot_sprite/dogborg/tall/mining/dullahancarg name = "Dullahan Cargo" @@ -214,10 +220,14 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/mining/dullahancarg/cargoalt name = "Dullahan Cargo v2" sprite_icon_state = "dullahancargo_alt" + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/mining/cat name = "Cat - Mining" @@ -245,6 +255,8 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/mining/tall/mmekacargo name = "NIKO - Cargo" @@ -252,6 +264,8 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/mining/tall/fmekacargo name = "NIKA - Cargo" @@ -259,6 +273,8 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/mining/tall/k4tcargo name = "K4T - Cargo" @@ -266,6 +282,8 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/mining/tall/k4t_alt1cargo name = "K4Talt - Cargo" @@ -273,6 +291,8 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/mining/smolraptorminer sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_min.dmi' diff --git a/code/modules/mob/living/silicon/robot/sprites/science.dm b/code/modules/mob/living/silicon/robot/sprites/science.dm index 276d76b8df..0ec49f1e44 100644 --- a/code/modules/mob/living/silicon/robot/sprites/science.dm +++ b/code/modules/mob/living/silicon/robot/sprites/science.dm @@ -219,17 +219,23 @@ has_eye_light_sprites = TRUE sprite_hud_icon_state = "sci-borg" rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/science/dullahan/scialt name = "Dullahan v2" sprite_icon_state = "dullahansci_alt" + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/science/dullahan/scialt2 name = "Dullahan v3" sprite_icon = 'icons/mob/robot/dullahan/v3/science.dmi' sprite_icon_state = "dullahanscience" sprite_decals = list("decals") + icon_x = 64 + pixel_x = -16 /datum/robot_sprite/dogborg/science/cat name = "Cat" diff --git a/code/modules/mob/living/silicon/robot/sprites/security.dm b/code/modules/mob/living/silicon/robot/sprites/security.dm index 2c871b46de..3f9273d4da 100644 --- a/code/modules/mob/living/silicon/robot/sprites/security.dm +++ b/code/modules/mob/living/silicon/robot/sprites/security.dm @@ -226,10 +226,15 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/security/dullahan/secalt name = "Dullahan v2" sprite_icon_state = "dullahansec_alt" + icon_x = 32 + pixel_x = 0 + /datum/robot_sprite/dogborg/tall/security/dullahan/securitydully name = "Dullahan security v3" @@ -237,6 +242,9 @@ sprite_icon_state = "dullahansecurity" has_vore_belly_sprites = TRUE sprite_decals = list("decals") + icon_x = 64 + pixel_x = -16 + /datum/robot_sprite/dogborg/security/vale2 name = "Secborg model V-3" diff --git a/code/modules/mob/living/silicon/robot/sprites/syndicate.dm b/code/modules/mob/living/silicon/robot/sprites/syndicate.dm index c19a25fd13..2bf5150a54 100644 --- a/code/modules/mob/living/silicon/robot/sprites/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/sprites/syndicate.dm @@ -76,6 +76,8 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/syndie/dullahanv3syndi sprite_icon = 'icons/mob/robot/dullahan/v3/syndi.dmi' diff --git a/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-sprites.dm b/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-sprites.dm index a83354316c..46c1106690 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-sprites.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-sprites.dm @@ -23,6 +23,8 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /datum/robot_sprite/dogborg/tall/explorer/dullahan/exploreralt name = "Dullahan v2" @@ -30,6 +32,8 @@ has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE rest_sprite_options = list("Default", "Sit") + icon_x = 32 + pixel_x = 0 /* placeholder /datum/robot_sprite/dogborg/tall/explorer diff --git a/code/unit_tests/robot_tests.dm b/code/unit_tests/robot_tests.dm index 915c8ddc12..5cc07bd34d 100644 --- a/code/unit_tests/robot_tests.dm +++ b/code/unit_tests/robot_tests.dm @@ -10,6 +10,11 @@ if(!RS.name) // Parent type, ignore me continue + if(!RS.sprite_icon) + log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", missing sprite_icon.") + failed = TRUE + continue + var/list/checks = list( "[ROBOT_HAS_SPEED_SPRITE]" = "-roll", "[ROBOT_HAS_SHIELD_SPRITE]" = "-shield", @@ -175,8 +180,24 @@ failed = TRUE if(RS.has_dead_sprite_overlay) // Only one per dmi if(!("wreck-overlay" in cached_icon_states(RS.sprite_icon))) - log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", had wreck-overlay state enabled, but was missing icon_state wreck-overlay, in dmi \"[RS.sprite_icon]\".") + log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", missing icon_state wreck-overlay, in dmi \"[RS.sprite_icon]\".") failed = TRUE + // offset + var/icon/I = new(RS.sprite_icon) + if(RS.icon_x != I.Width()) + log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", icon_x \"[RS.icon_x]\" did not match dmi configured width \"[I.Width()]\"") + failed = TRUE + if(RS.icon_y != I.Height()) + log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", icon_y \"[RS.icon_y]\" did not match dmi configured height \"[I.Height()]\"") + failed = TRUE + if(RS.icon_y != RS.vis_height) + log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", vis_height \"[RS.vis_height]\" did not match icon_y \"[RS.icon_y]\"") + failed = TRUE + var/legal_offset = (I.Width() - world.icon_size) / 2 + if(RS.pixel_x != -legal_offset) + log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", pixel_x \"[RS.pixel_x]\" did not have correct offset, should be \"[-legal_offset]\"") + failed = TRUE + qdel(I) qdel(RS) if(failed) @@ -188,6 +209,6 @@ /datum/unit_test/all_robot_sprites_must_be_valid/proc/check_state(var/datum/robot_sprite/RS,var/append) var/check_state = "[RS.sprite_icon_state][append]" if(!(check_state in cached_icon_states(RS.sprite_icon))) - log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", had [append] state enabled, but was missing icon_state \"[check_state]\", in dmi \"[RS.sprite_icon]\".") + log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", enabled but missing icon_state \"[check_state]\", in dmi \"[RS.sprite_icon]\".") return TRUE return FALSE diff --git a/icons/mob/robot/raptor.dmi b/icons/mob/robot/raptor.dmi index 21abab408133c92276bf811c239415e6efebbef0..8c7e05c61009d1466f5c3684adec17e829871c26 100644 GIT binary patch literal 4866 zcmai2cT`i$w+du|KuStV($dmaj&mk=KCrQJSh}>BS?8Eq zLM0_7-@SX+*VpIo?=L4O2R2R+6&9bY0#JqlqLSHihCOwZ8uzeI2D+H=@bJ87K)e^= zs&cr1fPjR8)9ckH>L=EI+lGXMyp<6a7By6QDk~h8F+Dw2hbLGkvG08x4 z`%o=iYkq$IypZl4s!udf8w*5s@=5Jrj8mX@aUAGz`Z8AK@d-3qO6rfqEQuY*I&3B#KGM6bAM0~Mm$4Oj z!Nt1vSAlsrlb3Y<3uQV&z~@g^V>G#rhYYRkS1uN?UX+e5D71ozdg0k`(=)HD%$`4H z8Xbu!zBW%239h>Tl~zRB4bCrB7``{kfA(w)(%W&`XF3kWZ?;soXI0Gz%i z`nT*N3$_bcV&*!y68IszxgBn)okal?+JTe0(M>UAO1-A?6*S+j`5VXI`#rOP#tjb- zoXRrI%7^HwG5<$_iIzw(7-Ji=Msz4OqUn363~X3{81RM2#p9J54t%~EwHK8%ctO>@ z4>ek^PHNd&E}k}Xl5~=WQH5wFRYP{YdlBS1&q#-<<)@1IS~qXf`%TQS{88)T2EAB9 zrr@(+SBpke77-KVxsBNXLlK=!++=0CO7@DGWFc;$iW8*x8E6R8aA{Gi^i=?JOcsmi z#NMabhz77AdCyFOGgz$rDS|Qm`N|_erZ29rsu#d58FLuH5qT>Du%#hBg^LZDfK`*1bi(qLJLYMeuSXMFF^S)yJn z$BfC)ho5b`l_8y(iKa#wjur1&ikLGhJWo}}owx1F=H2k$g18o$>6p~57K+qS(p zo?AHFWJ5C=(0Q51V>+M{2m#TK`8m1W?{aN=I@h-DQ`*65!u<^!tq;#B^^+kt*XcIx zL<{A{F-K3-y>F~`H@TGlicHxGUzA;SUAVb>);aXttjNEU(nD~R@kc$fUJ&2Jzu2r| zU5U?{ik{cbZ5k}!GKADQ$Ob!mvZNc8O!@T$$c8j7X(O3G8nnL8t7+Q4zn*Ad{NA>< zO}7VdO1Rx67@-5XnD`<&z_`5Myss=z!>Tf&=f@P;?+yB^Lt93HGc~ zSrIcSRTz^h$@{AGYV$9OB%KkQH!65~_9C+wI-`p(19x>#7ej`=H{`Wc2!7-ZELUv2 zJ`gMllS2N=Q2?hAP~4z(z*{l5i?j{Z)h02Z{A*C|$XtiD#GJpFcUgA0gfzGYlk*tw zM##&^+2Zv|!DHs|=lqfPufd5g`<3Ki zlK7I=a$zWX?I5lF)k8T-h3Uoe@OLG4z&g2fy7HyMYeh08LM3RA7RURvNz-mur{5;O z)va(yxlY^zDn0m7COQI^D9Z!5jo?7ca*bJgw=XA%>BTQV+GN0&`G+oK*8mlJU^C=i zT)uDy3yArqHhC(CP(NtY7%vJV0Gw{K=)*==BDjFUnQ9gTWf-~_q64)p?|BdiNscqSWVM|ND1|3jPsC`rAkDcQL0Yhp zwsKcM9DjmaG??HhHY68>(GhQ>H8%95xWb`#UD=0N@!t&VOuhsS@$9#i8?z9bY3<*Y zlu0QX(L28QYfx&KCAX0N&Df}M2KNuZO;EI#(=R`XDpady9$m9Zu@Wk~I(Bo%z^NsJ z!^}Mt5^2NRQZ%@2`As1tgd6Df0Z;^~gWMm{ru*#}+sLScPOpDy99wFhn|vtlb>7+|`eT^iETDEUD%$jhr@eJQ*#S%W z>}?HdwfCS}tNM4IV-nI%RmG?#NYccrPv|EFQ=w>d^g@_0%#!7R>#TAlU9W$R`{6nRaY_eIkPoEBs!3DU z9!H1o9>4mLUHo~p_`I^7qxyzw=q-Ps{b{4{re)ab^DMJx$vh2hh$Vu<I$fO;#PPHENg=ZoffsG;#h9z0JZ@?Gqk%4bl-V0!z*mDpk%q-yM%QAf#_|6!uvLhy4BrJpNzdOIui6FX^6!{@}nr zP>~)K^WTuV{@~OmFRgpmG+Lnx7WlwLyGVIL3v6ptVhK56R@o={oroNv{% z^u5nhL($SV4h@Y+8kHj8BBGNrhDK*aHI`-&*kw^&r|>#zl!Igv8$0Ls=FqUDQ8g-Q zhJ5peL*km5VPibv2SM;*RMN{Zn^me(Afl9JCXH>p(PD$lE!n<}lJQ_0?~J36seYhy zULN5bF12AFA&5tUm{!DxzMdUy@nSWp(#h2+y7;_|jnjjlH)2tC?Zf{!ZU55h5O}PO zy>`sPGrbVh;`$U}17#yyOv@jehP8XtGqiiObG3UQgagLdlH z8~xwi&1V#KA-25oz>d}}Zz4>x7)71f8|IFhMVG>N9VEtAOpi*zQ9?sDFip)7J6o(X zOl(~mFy2$J>TiQJgz3__<;!vVSjK;KEA$Dp!5YJs_A~7UyLYn4sWBRpTBfneG^w;* zZ#?MNa(er7-m#wCS~$3I;yZDY9c&QI>2ZbD=aiw}^OBr>ulHjs3GiNd?d9~X6BipM zt9AI{QIm=_KDDAAu zIpHegf_J*w6`|bG-_vayz->$926qP>U@}WyVJrg^y7B>&?45w#V(KvlHK|#DAe1yx zq?O7`OvE$4ne_`?!NhnqCo(q9yiWU>ydPXuV02%Xp?4ugYIj#LUlsbP>oTuN;e4pG zFmnT~$u*``_Lkc^;Vp=31&`l8V?ANaJn0-yDJW-819)At>)m`(;1C=3!|2V4R|a}< zQB;w(e;-+U8&Jd)-N*^zAeweX1FKowxYPUmhOwu1hTPxWC5E2U&TrKd2&jf*s1YHG zK}T-4o)Yk64g!p1N`0C+@Qy{K{|F&R;*%U8py)q1lrUJA*gq+sC+{0C9m}ll_egw5 zrkN;4>P3ma(kgkf(ua6rFkwtt{fs!bYV&)iUh!fYrkeX-*7tuxk?a`ib~b!_^kpkP zmS>cJt4A6Te~2ZY$i~jfza!)DC$$0o83UgQby`D`vXir967P95`TNHR&69_6Hg3-c z{&YBuKb*ej@|<%E8*lwy6b*S5(WE(VLs24jAD=bNPpt@iA(K|`2sDxI@OfMP1j|8l zNtcQEy;6VT0yQn@-1|mwa99}T;#KXCL(J5TXJt}_zQeYIK7vw&KpS$Z)a)mFD7+~J`hBu^BkLdK%wh#O0~W|gG6?{PIQwygWBjL6Nm@PDb$X%bgb=$w6(+P(fa5@lW7mid(ZOyh z#OG^+?4`U?3(Th{2a?SIC~mN;3U_@yqqPS@2d}H+HnmEQoEKpW?#ANS z5pSj`S^L>UKy)9dyLTs^q+#_~ty}TtB^?xhX}yl?^wz`Uu$jT&VFI?9s)bF`2b{hX zRy>aZvJpXXnQ)lVQhU3)3GcB*_KwX9YH^@46{mCH5X1Dy^k)TpPc7h7?E-9mTsi-AS2vzQLg`TG zqn(B+12Km%^xk&j$7c+;JicOdVaLcX@W(>#WJy~3fYbCd1Da@L;0XaQOFWU=xN8T< zYE@55B77wW#GPhqS5ap5VELB~i&3#kneiaz2K>4KjzVG)O2s7`JpFRZ(07JXam=r@ z?5UZ(+DtkzeJ$?3#^i!cq9I~)v(oPMj8Boz#92Zo+$5j0J>mNu>b%7 delta 4569 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 S$MK744M11hP^(hI0rx+@LVhOz