diff --git a/icons/effects/genetics.dmi b/icons/effects/genetics.dmi index 8e31fea96135..fa46a2d6c094 100644 Binary files a/icons/effects/genetics.dmi and b/icons/effects/genetics.dmi differ diff --git a/icons/mob/hud/alien_standard.dmi b/icons/mob/hud/alien_standard.dmi index 7e339ec5e83d..8bad0b44acc9 100644 Binary files a/icons/mob/hud/alien_standard.dmi and b/icons/mob/hud/alien_standard.dmi differ diff --git a/icons/mob/hud/human_bronze.dmi b/icons/mob/hud/human_bronze.dmi index 4f2ee88d1da5..11a724057245 100644 Binary files a/icons/mob/hud/human_bronze.dmi and b/icons/mob/hud/human_bronze.dmi differ diff --git a/icons/mob/hud/human_orange.dmi b/icons/mob/hud/human_orange.dmi index 420fb3e8ea3e..8a46dad89ed5 100644 Binary files a/icons/mob/hud/human_orange.dmi and b/icons/mob/hud/human_orange.dmi differ diff --git a/icons/mob/hud/screen1.dmi b/icons/mob/hud/screen1.dmi index df8475ef0ebd..fd4cf8188579 100644 Binary files a/icons/mob/hud/screen1.dmi and b/icons/mob/hud/screen1.dmi differ diff --git a/icons/mob/hud/talk.dmi b/icons/mob/hud/talk.dmi index 52255e1094f9..c6f043bfd781 100644 Binary files a/icons/mob/hud/talk.dmi and b/icons/mob/hud/talk.dmi differ diff --git a/icons/mob/humans/green_armors.dmi b/icons/mob/humans/green_armors.dmi index e1a5aaf8c13f..5022b6c4bbc7 100644 Binary files a/icons/mob/humans/green_armors.dmi and b/icons/mob/humans/green_armors.dmi differ diff --git a/icons/mob/humans/human.dmi b/icons/mob/humans/human.dmi index f98eb58f08ff..7bcd1e9796cc 100644 Binary files a/icons/mob/humans/human.dmi and b/icons/mob/humans/human.dmi differ diff --git a/icons/mob/humans/onmob/belt.dmi b/icons/mob/humans/onmob/belt.dmi index 1d5ed650b6f9..f95ba65ece52 100644 Binary files a/icons/mob/humans/onmob/belt.dmi and b/icons/mob/humans/onmob/belt.dmi differ diff --git a/icons/mob/humans/species/monkeys/onmob/suit_monkey_0.dmi b/icons/mob/humans/species/monkeys/onmob/suit_monkey_0.dmi index 3083c943c761..6d05304ef8d9 100644 Binary files a/icons/mob/humans/species/monkeys/onmob/suit_monkey_0.dmi and b/icons/mob/humans/species/monkeys/onmob/suit_monkey_0.dmi differ diff --git a/icons/mob/humans/species/monkeys/onmob/uniform_monkey_0.dmi b/icons/mob/humans/species/monkeys/onmob/uniform_monkey_0.dmi index 730ee28ff467..cc6fb5d13b03 100644 Binary files a/icons/mob/humans/species/monkeys/onmob/uniform_monkey_0.dmi and b/icons/mob/humans/species/monkeys/onmob/uniform_monkey_0.dmi differ diff --git a/icons/obj/bodybag.dmi b/icons/obj/bodybag.dmi index 9084afd56f63..157a7692b2a8 100644 Binary files a/icons/obj/bodybag.dmi and b/icons/obj/bodybag.dmi differ diff --git a/icons/obj/items/black_goo_stuff.dmi b/icons/obj/items/black_goo_stuff.dmi index 2d7b063bc4b8..b40461a40101 100644 Binary files a/icons/obj/items/black_goo_stuff.dmi and b/icons/obj/items/black_goo_stuff.dmi differ diff --git a/icons/obj/items/clothing/halloween_clothes.dmi b/icons/obj/items/clothing/halloween_clothes.dmi index 3de24560ec9d..530b7cf5a905 100644 Binary files a/icons/obj/items/clothing/halloween_clothes.dmi and b/icons/obj/items/clothing/halloween_clothes.dmi differ diff --git a/icons/obj/items/food.dmi b/icons/obj/items/food.dmi index ac802dc66a9a..6e2c86aa4999 100644 Binary files a/icons/obj/items/food.dmi and b/icons/obj/items/food.dmi differ diff --git a/icons/obj/items/hunter/pred_gear.dmi b/icons/obj/items/hunter/pred_gear.dmi index 5587cc685bec..ab034d7ec48a 100644 Binary files a/icons/obj/items/hunter/pred_gear.dmi and b/icons/obj/items/hunter/pred_gear.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/barrel.dmi b/icons/obj/items/weapons/guns/attachments/barrel.dmi index 41231e81b975..d040aa85fd5d 100644 Binary files a/icons/obj/items/weapons/guns/attachments/barrel.dmi and b/icons/obj/items/weapons/guns/attachments/barrel.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/rail.dmi b/icons/obj/items/weapons/guns/attachments/rail.dmi index 10e3cbe99a8c..315005696ba8 100644 Binary files a/icons/obj/items/weapons/guns/attachments/rail.dmi and b/icons/obj/items/weapons/guns/attachments/rail.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/stock.dmi b/icons/obj/items/weapons/guns/attachments/stock.dmi index 481710383a14..8eb95d15770f 100644 Binary files a/icons/obj/items/weapons/guns/attachments/stock.dmi and b/icons/obj/items/weapons/guns/attachments/stock.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/under.dmi b/icons/obj/items/weapons/guns/attachments/under.dmi index 8cbf735ac96b..1a55ea7e215f 100644 Binary files a/icons/obj/items/weapons/guns/attachments/under.dmi and b/icons/obj/items/weapons/guns/attachments/under.dmi differ diff --git a/icons/obj/items/weapons/guns/legacy/old_bayguns.dmi b/icons/obj/items/weapons/guns/legacy/old_bayguns.dmi index d1bdb7d3b0c9..568bfd0ee456 100644 Binary files a/icons/obj/items/weapons/guns/legacy/old_bayguns.dmi and b/icons/obj/items/weapons/guns/legacy/old_bayguns.dmi differ diff --git a/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi b/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi index bf67ed68502c..24cade43454f 100644 Binary files a/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi and b/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi differ diff --git a/icons/obj/structures/doors/mineral_doors.dmi b/icons/obj/structures/doors/mineral_doors.dmi index 1613f466d523..f9e025ccf0e9 100644 Binary files a/icons/obj/structures/doors/mineral_doors.dmi and b/icons/obj/structures/doors/mineral_doors.dmi differ diff --git a/icons/obj/structures/doors/prison_FOP/prison_hatches.dmi b/icons/obj/structures/doors/prison_FOP/prison_hatches.dmi index 489d2333f2a6..23864a1065d1 100644 Binary files a/icons/obj/structures/doors/prison_FOP/prison_hatches.dmi and b/icons/obj/structures/doors/prison_FOP/prison_hatches.dmi differ diff --git a/icons/obj/structures/machinery/computer3.dmi b/icons/obj/structures/machinery/computer3.dmi index 4735cfc5a1a4..047417f303f3 100644 Binary files a/icons/obj/structures/machinery/computer3.dmi and b/icons/obj/structures/machinery/computer3.dmi differ diff --git a/icons/obj/structures/machinery/cryogenics.dmi b/icons/obj/structures/machinery/cryogenics.dmi index b2c5d2e0c5ce..dc061195583f 100644 Binary files a/icons/obj/structures/machinery/cryogenics.dmi and b/icons/obj/structures/machinery/cryogenics.dmi differ diff --git a/icons/obj/structures/machinery/shuttle-parts.dmi b/icons/obj/structures/machinery/shuttle-parts.dmi index 1ec8a07e6b3f..7db27387e7c1 100644 Binary files a/icons/obj/structures/machinery/shuttle-parts.dmi and b/icons/obj/structures/machinery/shuttle-parts.dmi differ diff --git a/icons/obj/structures/machinery/vending.dmi b/icons/obj/structures/machinery/vending.dmi index ecc570680a74..640e96f49540 100644 Binary files a/icons/obj/structures/machinery/vending.dmi and b/icons/obj/structures/machinery/vending.dmi differ diff --git a/icons/obj/structures/props/dam.dmi b/icons/obj/structures/props/dam.dmi index 3541b2412e13..76f67514c2ea 100644 Binary files a/icons/obj/structures/props/dam.dmi and b/icons/obj/structures/props/dam.dmi differ diff --git a/icons/obj/structures/props/fence.dmi b/icons/obj/structures/props/fence.dmi index 9ed9d1f7fc20..016aab562777 100644 Binary files a/icons/obj/structures/props/fence.dmi and b/icons/obj/structures/props/fence.dmi differ diff --git a/icons/obj/structures/stairs/perspective_stairs_ice.dmi b/icons/obj/structures/stairs/perspective_stairs_ice.dmi index 8f5bf6935d7b..3311adfc11dd 100644 Binary files a/icons/obj/structures/stairs/perspective_stairs_ice.dmi and b/icons/obj/structures/stairs/perspective_stairs_ice.dmi differ diff --git a/icons/obj/structures/stairs/perspective_stairs_kutjevo.dmi b/icons/obj/structures/stairs/perspective_stairs_kutjevo.dmi index 86a2cfde6339..f9c759a32d12 100644 Binary files a/icons/obj/structures/stairs/perspective_stairs_kutjevo.dmi and b/icons/obj/structures/stairs/perspective_stairs_kutjevo.dmi differ diff --git a/icons/old_stuff/Seasonal/xmas.dmi b/icons/old_stuff/Seasonal/xmas.dmi index 8dd25fd4b6d4..9669a6034b9c 100644 Binary files a/icons/old_stuff/Seasonal/xmas.dmi and b/icons/old_stuff/Seasonal/xmas.dmi differ diff --git a/icons/rebase_icons.dmi b/icons/rebase_icons.dmi index aaf92453b29a..2d394cef793d 100644 Binary files a/icons/rebase_icons.dmi and b/icons/rebase_icons.dmi differ diff --git a/icons/turf/area_strata.dmi b/icons/turf/area_strata.dmi index 54b90d0a8f92..8c9791522989 100644 Binary files a/icons/turf/area_strata.dmi and b/icons/turf/area_strata.dmi differ diff --git a/icons/turf/floors/asphalt.dmi b/icons/turf/floors/asphalt.dmi index ef4f07d5f374..f167bb134bf5 100644 Binary files a/icons/turf/floors/asphalt.dmi and b/icons/turf/floors/asphalt.dmi differ diff --git a/icons/turf/floors/concrete.dmi b/icons/turf/floors/concrete.dmi index d3aa3a1fa7ee..54d7dd3aaaef 100644 Binary files a/icons/turf/floors/concrete.dmi and b/icons/turf/floors/concrete.dmi differ diff --git a/icons/turf/floors/desert_dirt.dmi b/icons/turf/floors/desert_dirt.dmi index e153917e708a..0f2ffeb803e3 100644 Binary files a/icons/turf/floors/desert_dirt.dmi and b/icons/turf/floors/desert_dirt.dmi differ diff --git a/icons/turf/floors/desert_rock.dmi b/icons/turf/floors/desert_rock.dmi index 8cbd01e3cec1..5f001b4c1bdc 100644 Binary files a/icons/turf/floors/desert_rock.dmi and b/icons/turf/floors/desert_rock.dmi differ diff --git a/icons/turf/floors/floors.dmi b/icons/turf/floors/floors.dmi index 681ffa537aa4..7b68cbb2b6b2 100644 Binary files a/icons/turf/floors/floors.dmi and b/icons/turf/floors/floors.dmi differ diff --git a/icons/turf/walls/bunker.dmi b/icons/turf/walls/bunker.dmi index 6f7537e20f7c..d9d4f8a080cb 100644 Binary files a/icons/turf/walls/bunker.dmi and b/icons/turf/walls/bunker.dmi differ diff --git a/icons/turf/walls/dev/dev.dmi b/icons/turf/walls/dev/dev.dmi index 0c6025876b2e..4a1eaf6f7b6a 100644 Binary files a/icons/turf/walls/dev/dev.dmi and b/icons/turf/walls/dev/dev.dmi differ diff --git a/icons/turf/walls/floodgate.dmi b/icons/turf/walls/floodgate.dmi index 5b3f00abb597..f67e5a7a3fcc 100644 Binary files a/icons/turf/walls/floodgate.dmi and b/icons/turf/walls/floodgate.dmi differ diff --git a/icons/turf/walls/kutjevo/kutjevo.dmi b/icons/turf/walls/kutjevo/kutjevo.dmi index 5c8c0053e1bf..3aba82409af6 100644 Binary files a/icons/turf/walls/kutjevo/kutjevo.dmi and b/icons/turf/walls/kutjevo/kutjevo.dmi differ diff --git a/icons/turf/walls/solaris/solaris.dmi b/icons/turf/walls/solaris/solaris.dmi index 85d5c118a901..96865710abd7 100644 Binary files a/icons/turf/walls/solaris/solaris.dmi and b/icons/turf/walls/solaris/solaris.dmi differ diff --git a/icons/turf/walls/solaris/solaris_old.dmi b/icons/turf/walls/solaris/solaris_old.dmi index 59846bf0ad1c..2aca7b187508 100644 Binary files a/icons/turf/walls/solaris/solaris_old.dmi and b/icons/turf/walls/solaris/solaris_old.dmi differ diff --git a/icons/turf/walls/strata_outpost.dmi b/icons/turf/walls/strata_outpost.dmi index 36e20bdd176a..6043f7c32d8d 100644 Binary files a/icons/turf/walls/strata_outpost.dmi and b/icons/turf/walls/strata_outpost.dmi differ diff --git a/icons/turf/walls/windows.dmi b/icons/turf/walls/windows.dmi index b1b7c7ebfbe9..85f822873e68 100644 Binary files a/icons/turf/walls/windows.dmi and b/icons/turf/walls/windows.dmi differ diff --git a/tools/dmi/duplicate_icon_states.py b/tools/dmi/duplicate_icon_states.py new file mode 100644 index 000000000000..fcf73603f7d5 --- /dev/null +++ b/tools/dmi/duplicate_icon_states.py @@ -0,0 +1,70 @@ +import os +import sys +from dmi import * + + +def green(text): + return "\033[32m" + str(text) + "\033[0m" + + +def red(text): + return "\033[31m" + str(text) + "\033[0m" + + +def _self_test(): + # test: can we load every DMI in the tree + count = 0 + failed = 0 + for dirpath, dirnames, filenames in os.walk('.'): + if '.git' in dirnames: + dirnames.remove('.git') + for filename in filenames: + if filename.endswith('.dmi'): + fullpath = os.path.join(dirpath, filename) + failures_this_file = 0 + try: + dmi = Dmi.from_file(fullpath) + dmi_states = dmi.states + number_of_icon_states = len(dmi.states) + if number_of_icon_states > 512: + print("{0} {1} has too many icon states: {2}/512.".format(red("FAIL"), fullpath, number_of_icon_states)) + failures_this_file += 1 + existing_states = [] + for state in dmi_states: + state_name = state.name + if state.movement: + state_name += "_MOVEMENT_STATE_TRUE" + if state_name in existing_states: + print("{0} {1} has a duplicate state '{2}'.".format(red("FAIL"), fullpath, state.name)) + failures_this_file += 1 + continue + existing_states.append(state_name) + except Exception: + print("{0} {1} threw an exception.".format(red("FAIL"), fullpath)) + failures_this_file += 1 + raise + count += 1 + if failures_this_file > 0: + failed += 1 + + print(f"{os.path.relpath(__file__)}: {green(f'successfully parsed {count-failed} .dmi files')}") + if failed > 0: + print(f"{os.path.relpath(__file__)}: {red(f'failed to parse {failed} .dmi files')}") + exit(1) + + +def _usage(): + print(f"Usage:") + print(f" tools{os.sep}bootstrap{os.sep}python -m {__spec__.name}") + exit(1) + + +def _main(): + if len(sys.argv) == 1: + return _self_test() + + return _usage() + + +if __name__ == '__main__': + _main()