diff --git a/src/pyclashbot/bot/card_detection3.py b/src/pyclashbot/bot/card_detection3.py index 362b5a739..b4af505bb 100644 --- a/src/pyclashbot/bot/card_detection3.py +++ b/src/pyclashbot/bot/card_detection3.py @@ -150,7 +150,15 @@ "Indigo": 948, "Violet": 88, }, - "fireball":{'Red': 0, 'Orange': 0, 'Yellow': 125, 'Green': 0, 'Blue': 1030, 'Indigo': 1331, 'Violet': 778}, + "fireball": { + "Red": 0, + "Orange": 0, + "Yellow": 125, + "Green": 0, + "Blue": 1030, + "Indigo": 1331, + "Violet": 778, + }, "princess": { "Red": 14, "Orange": 496, @@ -250,7 +258,15 @@ "Indigo": 1709, "Violet": 1001, }, - "inferno_tower2":{'Red': 0, 'Orange': 1, 'Yellow': 544, 'Green': 153, 'Blue': 0, 'Indigo': 2066, 'Violet': 500}, + "inferno_tower2": { + "Red": 0, + "Orange": 1, + "Yellow": 544, + "Green": 153, + "Blue": 0, + "Indigo": 2066, + "Violet": 500, + }, "inferno_tower": { "Red": 1, "Orange": 104, @@ -314,10 +330,13 @@ "Indigo": 420, "Violet": 105, }, - } + + + + PLAY_COORDS = { # done "spell": { @@ -351,6 +370,10 @@ } + + + + def identify_card_from_color_dict(color_dict): min_distance = float("inf") identified_card = None @@ -427,6 +450,7 @@ def get_pixels_and_count(iar, topleft): return pixels +#card identification, grouping, and play coords def identify_hand_cards(vm_index): iar = numpy.asarray(screenshot(vm_index)) top_lefts = [ @@ -438,14 +462,14 @@ def identify_hand_cards(vm_index): card_ids = [] - print('\n') - for i,top_left in enumerate(top_lefts): + print("\n") + for i, top_left in enumerate(top_lefts): pixels = get_pixels_and_count(iar, top_left) color_dict = colors_from_pixels(pixels) identification = identify_card_from_color_dict(color_dict) card_ids.append(identification) - print(i+1, identification, color_dict) + print(i + 1, identification, color_dict) return card_ids @@ -537,6 +561,7 @@ def get_play_coords_for_card(vm_index, card_index, side_preference): return identity, coords +#available cards def check_which_cards_are_available(vm_index): iar = numpy.asarray(screenshot(vm_index)) @@ -602,5 +627,4 @@ def count_purple_colors_in_pixel_list(pixel_list): if __name__ == "__main__": - while 1: - print(identify_hand_cards(12)) + pass diff --git a/src/pyclashbot/bot/card_detection4.py b/src/pyclashbot/bot/card_detection4.py new file mode 100644 index 000000000..2b6602d19 --- /dev/null +++ b/src/pyclashbot/bot/card_detection4.py @@ -0,0 +1,2897 @@ +from pyclashbot.detection import pixel_is_equal +from pyclashbot.memu.client import screenshot +import numpy +import math +import random + + +#play coord data +PLAY_COORDS = { + # done + "spell": { + "left": [(116, 140)], + "right": [(302, 140)], + }, + "hog": { + "left": [(77, 281), (113, 286), (154, 283)], + "right": [(257, 283), (300, 284), (353, 283)], + }, + "turret": { + "left": [(224, 300), (224, 334)], + "right": [(224, 300), (224, 334)], + }, + "miner": { + "left": [(86, 156), (90, 104), (143, 113), (142, 153)], + "right": [(274, 152), (276, 111), (339, 111), (323, 157)], + }, + "goblin_barrel": { + "left": [(115, 134), (115, 134), (60, 96)], + "right": [(300, 137), (300, 137), (356, 106)], + }, + "xbow": { + "left": [(170, 288)], + "right": [(254, 284)], + }, + "spawner": { + "left": [(69, 442), (158, 444), (166, 394)], + "right": [(247, 396), (264, 440), (343, 442)], + }, +} + + +#card color data +card_color_data = { + "arrows": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 3, + "Blue": 20, + "Indigo": 56, + "Violet": 64, + "Cyan": 0, + "Magenta": 0, + "Pink": 700, + "Turquoise": 7, + "Lime": 0, + "Purple": 2, + "Brown": 17, + "Teal": 22, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 5, + "Indigo": 141, + "Violet": 90, + "Cyan": 0, + "Magenta": 0, + "Pink": 600, + "Turquoise": 17, + "Lime": 0, + "Purple": 8, + "Brown": 9, + "Teal": 21, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 1, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 47, + "Violet": 21, + "Cyan": 0, + "Magenta": 21, + "Pink": 742, + "Turquoise": 2, + "Lime": 0, + "Purple": 14, + "Brown": 33, + "Teal": 4, + "Maroon": 5, + }, + { + "Red": 0, + "Orange": 2, + "Yellow": 0, + "Green": 2, + "Blue": 0, + "Indigo": 50, + "Violet": 4, + "Cyan": 0, + "Magenta": 42, + "Pink": 722, + "Turquoise": 15, + "Lime": 0, + "Purple": 12, + "Brown": 24, + "Teal": 15, + "Maroon": 3, + }, + ], + "barb_hut": [ + { + "Red": 0, + "Orange": 16, + "Yellow": 0, + "Green": 2, + "Blue": 0, + "Indigo": 17, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 511, + "Turquoise": 77, + "Lime": 0, + "Purple": 4, + "Brown": 79, + "Teal": 185, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 1, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 2, + "Violet": 0, + "Cyan": 3, + "Magenta": 0, + "Pink": 147, + "Turquoise": 155, + "Lime": 0, + "Purple": 0, + "Brown": 20, + "Teal": 562, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 99, + "Violet": 8, + "Cyan": 0, + "Magenta": 13, + "Pink": 167, + "Turquoise": 192, + "Lime": 0, + "Purple": 145, + "Brown": 39, + "Teal": 218, + "Maroon": 9, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 15, + "Blue": 0, + "Indigo": 97, + "Violet": 8, + "Cyan": 0, + "Magenta": 53, + "Pink": 108, + "Turquoise": 350, + "Lime": 0, + "Purple": 27, + "Brown": 23, + "Teal": 204, + "Maroon": 6, + }, + ], + "barb_barrel": [ + { + "Red": 0, + "Orange": 206, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 43, + "Violet": 1, + "Cyan": 2, + "Magenta": 0, + "Pink": 220, + "Turquoise": 359, + "Lime": 0, + "Purple": 0, + "Brown": 6, + "Teal": 52, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 115, + "Violet": 1, + "Cyan": 1, + "Magenta": 0, + "Pink": 263, + "Turquoise": 211, + "Lime": 0, + "Purple": 0, + "Brown": 186, + "Teal": 114, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 2, + "Yellow": 0, + "Green": 64, + "Blue": 0, + "Indigo": 192, + "Violet": 15, + "Cyan": 0, + "Magenta": 15, + "Pink": 127, + "Turquoise": 182, + "Lime": 0, + "Purple": 9, + "Brown": 24, + "Teal": 247, + "Maroon": 14, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 8, + "Blue": 0, + "Indigo": 451, + "Violet": 6, + "Cyan": 0, + "Magenta": 39, + "Pink": 86, + "Turquoise": 68, + "Lime": 0, + "Purple": 9, + "Brown": 84, + "Teal": 134, + "Maroon": 6, + }, + ], + "balloon": [ + { + "Red": 0, + "Orange": 10, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 34, + "Violet": 0, + "Cyan": 3, + "Magenta": 0, + "Pink": 297, + "Turquoise": 27, + "Lime": 0, + "Purple": 2, + "Brown": 427, + "Teal": 84, + "Maroon": 7, + }, + { + "Red": 0, + "Orange": 20, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 29, + "Violet": 0, + "Cyan": 5, + "Magenta": 0, + "Pink": 106, + "Turquoise": 64, + "Lime": 0, + "Purple": 0, + "Brown": 571, + "Teal": 86, + "Maroon": 9, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 5, + "Blue": 0, + "Indigo": 114, + "Violet": 9, + "Cyan": 0, + "Magenta": 17, + "Pink": 325, + "Turquoise": 227, + "Lime": 0, + "Purple": 14, + "Brown": 64, + "Teal": 109, + "Maroon": 7, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 61, + "Violet": 4, + "Cyan": 0, + "Magenta": 43, + "Pink": 548, + "Turquoise": 118, + "Lime": 0, + "Purple": 6, + "Brown": 10, + "Teal": 97, + "Maroon": 3, + }, + ], + "bomb_tower": [ + { + "Red": 0, + "Orange": 9, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 192, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 127, + "Turquoise": 56, + "Lime": 0, + "Purple": 4, + "Brown": 421, + "Teal": 80, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 313, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 101, + "Turquoise": 48, + "Lime": 0, + "Purple": 82, + "Brown": 236, + "Teal": 111, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 53, + "Indigo": 69, + "Violet": 8, + "Cyan": 0, + "Magenta": 18, + "Pink": 66, + "Turquoise": 245, + "Lime": 0, + "Purple": 73, + "Brown": 10, + "Teal": 347, + "Maroon": 2, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 63, + "Indigo": 88, + "Violet": 1, + "Cyan": 1, + "Magenta": 41, + "Pink": 47, + "Turquoise": 402, + "Lime": 0, + "Purple": 48, + "Brown": 3, + "Teal": 195, + "Maroon": 2, + }, + ], + "battle_ram": [ + { + "Red": 0, + "Orange": 104, + "Yellow": 7, + "Green": 1, + "Blue": 0, + "Indigo": 4, + "Violet": 0, + "Cyan": 1, + "Magenta": 0, + "Pink": 124, + "Turquoise": 10, + "Lime": 0, + "Purple": 0, + "Brown": 487, + "Teal": 31, + "Maroon": 122, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 360, + "Turquoise": 0, + "Lime": 0, + "Purple": 0, + "Brown": 355, + "Teal": 0, + "Maroon": 176, + }, + { + "Red": 0, + "Orange": 1, + "Yellow": 0, + "Green": 11, + "Blue": 0, + "Indigo": 139, + "Violet": 6, + "Cyan": 0, + "Magenta": 18, + "Pink": 66, + "Turquoise": 64, + "Lime": 0, + "Purple": 13, + "Brown": 113, + "Teal": 433, + "Maroon": 27, + }, + { + "Red": 0, + "Orange": 24, + "Yellow": 0, + "Green": 10, + "Blue": 0, + "Indigo": 154, + "Violet": 3, + "Cyan": 0, + "Magenta": 40, + "Pink": 63, + "Turquoise": 45, + "Lime": 0, + "Purple": 7, + "Brown": 179, + "Teal": 186, + "Maroon": 180, + }, + ], + "cannon": [ + { + "Red": 0, + "Orange": 1, + "Yellow": 0, + "Green": 17, + "Blue": 0, + "Indigo": 153, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 446, + "Turquoise": 151, + "Lime": 0, + "Purple": 66, + "Brown": 52, + "Teal": 5, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 159, + "Blue": 0, + "Indigo": 166, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 286, + "Turquoise": 7, + "Lime": 0, + "Purple": 69, + "Brown": 168, + "Teal": 4, + "Maroon": 32, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 109, + "Blue": 0, + "Indigo": 184, + "Violet": 15, + "Cyan": 0, + "Magenta": 20, + "Pink": 59, + "Turquoise": 57, + "Lime": 0, + "Purple": 56, + "Brown": 47, + "Teal": 266, + "Maroon": 78, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 104, + "Blue": 0, + "Indigo": 123, + "Violet": 4, + "Cyan": 0, + "Magenta": 39, + "Pink": 360, + "Turquoise": 88, + "Lime": 0, + "Purple": 8, + "Brown": 5, + "Teal": 144, + "Maroon": 16, + }, + ], + "furnace": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 5, + "Blue": 0, + "Indigo": 208, + "Violet": 7, + "Cyan": 0, + "Magenta": 12, + "Pink": 129, + "Turquoise": 67, + "Lime": 0, + "Purple": 6, + "Brown": 77, + "Teal": 267, + "Maroon": 113, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 16, + "Blue": 0, + "Indigo": 216, + "Violet": 1, + "Cyan": 0, + "Magenta": 3, + "Pink": 182, + "Turquoise": 229, + "Lime": 0, + "Purple": 11, + "Brown": 109, + "Teal": 92, + "Maroon": 32, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 57, + "Blue": 0, + "Indigo": 297, + "Violet": 15, + "Cyan": 0, + "Magenta": 19, + "Pink": 25, + "Turquoise": 43, + "Lime": 0, + "Purple": 10, + "Brown": 45, + "Teal": 287, + "Maroon": 93, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 20, + "Blue": 1, + "Indigo": 85, + "Violet": 2, + "Cyan": 0, + "Magenta": 42, + "Pink": 67, + "Turquoise": 97, + "Lime": 0, + "Purple": 7, + "Brown": 360, + "Teal": 187, + "Maroon": 23, + }, + ], + "freeze": [ + { + "Red": 0, + "Orange": 6, + "Yellow": 5, + "Green": 1, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 824, + "Turquoise": 0, + "Lime": 0, + "Purple": 0, + "Brown": 55, + "Teal": 0, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 20, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 785, + "Turquoise": 0, + "Lime": 0, + "Purple": 0, + "Brown": 80, + "Teal": 0, + "Maroon": 5, + }, + { + "Red": 0, + "Orange": 66, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 17, + "Violet": 11, + "Cyan": 0, + "Magenta": 19, + "Pink": 581, + "Turquoise": 0, + "Lime": 0, + "Purple": 9, + "Brown": 187, + "Teal": 0, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 84, + "Yellow": 107, + "Green": 0, + "Blue": 0, + "Indigo": 21, + "Violet": 7, + "Cyan": 0, + "Magenta": 37, + "Pink": 582, + "Turquoise": 0, + "Lime": 0, + "Purple": 4, + "Brown": 49, + "Teal": 0, + "Maroon": 0, + }, + ], + "goblin_drill": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 14, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 294, + "Turquoise": 27, + "Lime": 0, + "Purple": 3, + "Brown": 299, + "Teal": 27, + "Maroon": 226, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 81, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 225, + "Turquoise": 2, + "Lime": 0, + "Purple": 2, + "Brown": 569, + "Teal": 4, + "Maroon": 8, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 4, + "Blue": 0, + "Indigo": 379, + "Violet": 7, + "Cyan": 0, + "Magenta": 19, + "Pink": 84, + "Turquoise": 3, + "Lime": 0, + "Purple": 11, + "Brown": 366, + "Teal": 10, + "Maroon": 8, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 119, + "Violet": 2, + "Cyan": 0, + "Magenta": 40, + "Pink": 110, + "Turquoise": 32, + "Lime": 0, + "Purple": 9, + "Brown": 387, + "Teal": 73, + "Maroon": 119, + }, + ], + "goblin_cage": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 16, + "Blue": 0, + "Indigo": 6, + "Violet": 0, + "Cyan": 2, + "Magenta": 0, + "Pink": 101, + "Turquoise": 191, + "Lime": 0, + "Purple": 0, + "Brown": 259, + "Teal": 244, + "Maroon": 72, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 24, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 101, + "Turquoise": 242, + "Lime": 0, + "Purple": 0, + "Brown": 143, + "Teal": 148, + "Maroon": 233, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 206, + "Blue": 0, + "Indigo": 107, + "Violet": 7, + "Cyan": 0, + "Magenta": 21, + "Pink": 61, + "Turquoise": 114, + "Lime": 0, + "Purple": 11, + "Brown": 168, + "Teal": 194, + "Maroon": 2, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 44, + "Blue": 11, + "Indigo": 163, + "Violet": 1, + "Cyan": 1, + "Magenta": 38, + "Pink": 88, + "Turquoise": 153, + "Lime": 0, + "Purple": 17, + "Brown": 229, + "Teal": 146, + "Maroon": 0, + }, + ], + "graveyard": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 295, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 86, + "Turquoise": 1, + "Lime": 0, + "Purple": 36, + "Brown": 354, + "Teal": 0, + "Maroon": 119, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 66, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 171, + "Turquoise": 17, + "Lime": 0, + "Purple": 23, + "Brown": 536, + "Teal": 0, + "Maroon": 78, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 7, + "Blue": 0, + "Indigo": 72, + "Violet": 8, + "Cyan": 0, + "Magenta": 18, + "Pink": 153, + "Turquoise": 2, + "Lime": 0, + "Purple": 130, + "Brown": 413, + "Teal": 2, + "Maroon": 86, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 3, + "Blue": 0, + "Indigo": 77, + "Violet": 1, + "Cyan": 0, + "Magenta": 42, + "Pink": 308, + "Turquoise": 1, + "Lime": 0, + "Purple": 100, + "Brown": 269, + "Teal": 5, + "Maroon": 85, + }, + ], + "goblin_barrel": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 44, + "Blue": 0, + "Indigo": 125, + "Violet": 0, + "Cyan": 3, + "Magenta": 0, + "Pink": 225, + "Turquoise": 277, + "Lime": 0, + "Purple": 0, + "Brown": 30, + "Teal": 187, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 52, + "Blue": 0, + "Indigo": 15, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 212, + "Turquoise": 311, + "Lime": 0, + "Purple": 0, + "Brown": 0, + "Teal": 294, + "Maroon": 7, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 123, + "Blue": 0, + "Indigo": 91, + "Violet": 14, + "Cyan": 0, + "Magenta": 19, + "Pink": 9, + "Turquoise": 92, + "Lime": 0, + "Purple": 9, + "Brown": 32, + "Teal": 496, + "Maroon": 6, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 38, + "Blue": 0, + "Indigo": 87, + "Violet": 7, + "Cyan": 0, + "Magenta": 40, + "Pink": 479, + "Turquoise": 37, + "Lime": 0, + "Purple": 5, + "Brown": 1, + "Teal": 196, + "Maroon": 1, + }, + ], + "miner": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 41, + "Blue": 0, + "Indigo": 119, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 103, + "Turquoise": 72, + "Lime": 0, + "Purple": 0, + "Brown": 198, + "Teal": 127, + "Maroon": 231, + }, + { + "Red": 0, + "Orange": 20, + "Yellow": 0, + "Green": 29, + "Blue": 0, + "Indigo": 49, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 195, + "Turquoise": 72, + "Lime": 0, + "Purple": 0, + "Brown": 364, + "Teal": 73, + "Maroon": 89, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 15, + "Blue": 0, + "Indigo": 302, + "Violet": 13, + "Cyan": 0, + "Magenta": 20, + "Pink": 52, + "Turquoise": 115, + "Lime": 0, + "Purple": 9, + "Brown": 20, + "Teal": 269, + "Maroon": 76, + }, + { + "Red": 0, + "Orange": 23, + "Yellow": 0, + "Green": 9, + "Blue": 1, + "Indigo": 112, + "Violet": 10, + "Cyan": 0, + "Magenta": 38, + "Pink": 291, + "Turquoise": 221, + "Lime": 0, + "Purple": 12, + "Brown": 52, + "Teal": 63, + "Maroon": 59, + }, + ], + "skeleton_barrel": [ + { + "Red": 0, + "Orange": 24, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 44, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 749, + "Turquoise": 17, + "Lime": 0, + "Purple": 1, + "Brown": 50, + "Teal": 5, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 101, + "Yellow": 0, + "Green": 11, + "Blue": 0, + "Indigo": 50, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 453, + "Turquoise": 65, + "Lime": 0, + "Purple": 6, + "Brown": 108, + "Teal": 96, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 31, + "Blue": 0, + "Indigo": 255, + "Violet": 15, + "Cyan": 0, + "Magenta": 20, + "Pink": 356, + "Turquoise": 3, + "Lime": 0, + "Purple": 11, + "Brown": 67, + "Teal": 46, + "Maroon": 87, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 35, + "Blue": 0, + "Indigo": 166, + "Violet": 5, + "Cyan": 0, + "Magenta": 38, + "Pink": 184, + "Turquoise": 43, + "Lime": 0, + "Purple": 13, + "Brown": 88, + "Teal": 306, + "Maroon": 13, + }, + ], + "wall_breakers": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 36, + "Blue": 0, + "Indigo": 470, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 71, + "Turquoise": 34, + "Lime": 0, + "Purple": 2, + "Brown": 154, + "Teal": 105, + "Maroon": 19, + }, + { + "Red": 0, + "Orange": 2, + "Yellow": 0, + "Green": 45, + "Blue": 0, + "Indigo": 230, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 65, + "Turquoise": 10, + "Lime": 0, + "Purple": 1, + "Brown": 130, + "Teal": 386, + "Maroon": 22, + }, + { + "Red": 0, + "Orange": 44, + "Yellow": 0, + "Green": 46, + "Blue": 0, + "Indigo": 61, + "Violet": 12, + "Cyan": 0, + "Magenta": 16, + "Pink": 279, + "Turquoise": 45, + "Lime": 0, + "Purple": 11, + "Brown": 318, + "Teal": 26, + "Maroon": 33, + }, + { + "Red": 0, + "Orange": 74, + "Yellow": 0, + "Green": 16, + "Blue": 0, + "Indigo": 36, + "Violet": 7, + "Cyan": 0, + "Magenta": 40, + "Pink": 151, + "Turquoise": 12, + "Lime": 0, + "Purple": 8, + "Brown": 379, + "Teal": 17, + "Maroon": 151, + }, + ], + "snowball": [ + { + "Red": 0, + "Orange": 51, + "Yellow": 0, + "Green": 3, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 680, + "Turquoise": 0, + "Lime": 0, + "Purple": 0, + "Brown": 156, + "Teal": 0, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 531, + "Turquoise": 0, + "Lime": 0, + "Purple": 0, + "Brown": 97, + "Teal": 0, + "Maroon": 263, + }, + { + "Red": 0, + "Orange": 1, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 15, + "Violet": 12, + "Cyan": 0, + "Magenta": 16, + "Pink": 287, + "Turquoise": 0, + "Lime": 0, + "Purple": 7, + "Brown": 178, + "Teal": 0, + "Maroon": 375, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 22, + "Violet": 7, + "Cyan": 0, + "Magenta": 40, + "Pink": 386, + "Turquoise": 0, + "Lime": 0, + "Purple": 7, + "Brown": 377, + "Teal": 0, + "Maroon": 52, + }, + ], + "princess": [ + { + "Red": 0, + "Orange": 28, + "Yellow": 0, + "Green": 68, + "Blue": 0, + "Indigo": 285, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 92, + "Turquoise": 284, + "Lime": 0, + "Purple": 7, + "Brown": 24, + "Teal": 103, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 167, + "Yellow": 15, + "Green": 126, + "Blue": 0, + "Indigo": 166, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 129, + "Turquoise": 193, + "Lime": 0, + "Purple": 4, + "Brown": 18, + "Teal": 73, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 20, + "Yellow": 0, + "Green": 54, + "Blue": 0, + "Indigo": 158, + "Violet": 14, + "Cyan": 0, + "Magenta": 19, + "Pink": 180, + "Turquoise": 226, + "Lime": 0, + "Purple": 10, + "Brown": 63, + "Teal": 121, + "Maroon": 26, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 9, + "Blue": 0, + "Indigo": 160, + "Violet": 9, + "Cyan": 0, + "Magenta": 40, + "Pink": 228, + "Turquoise": 256, + "Lime": 0, + "Purple": 5, + "Brown": 75, + "Teal": 106, + "Maroon": 3, + }, + ], + "tombstone": [ + { + "Red": 0, + "Orange": 9, + "Yellow": 6, + "Green": 52, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 105, + "Turquoise": 9, + "Lime": 0, + "Purple": 0, + "Brown": 663, + "Teal": 26, + "Maroon": 21, + }, + { + "Red": 0, + "Orange": 13, + "Yellow": 0, + "Green": 14, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 281, + "Turquoise": 23, + "Lime": 0, + "Purple": 0, + "Brown": 515, + "Teal": 44, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 1, + "Yellow": 6, + "Green": 21, + "Blue": 0, + "Indigo": 16, + "Violet": 15, + "Cyan": 0, + "Magenta": 20, + "Pink": 269, + "Turquoise": 60, + "Lime": 0, + "Purple": 9, + "Brown": 439, + "Teal": 28, + "Maroon": 7, + }, + { + "Red": 0, + "Orange": 4, + "Yellow": 0, + "Green": 5, + "Blue": 0, + "Indigo": 22, + "Violet": 5, + "Cyan": 0, + "Magenta": 38, + "Pink": 296, + "Turquoise": 47, + "Lime": 0, + "Purple": 7, + "Brown": 465, + "Teal": 2, + "Maroon": 0, + }, + ], + "royal_delivery": [ + { + "Red": 0, + "Orange": 78, + "Yellow": 2, + "Green": 13, + "Blue": 0, + "Indigo": 111, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 91, + "Turquoise": 278, + "Lime": 0, + "Purple": 0, + "Brown": 163, + "Teal": 147, + "Maroon": 8, + }, + { + "Red": 0, + "Orange": 36, + "Yellow": 8, + "Green": 2, + "Blue": 0, + "Indigo": 77, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 269, + "Turquoise": 261, + "Lime": 0, + "Purple": 0, + "Brown": 81, + "Teal": 154, + "Maroon": 3, + }, + { + "Red": 0, + "Orange": 2, + "Yellow": 0, + "Green": 59, + "Blue": 0, + "Indigo": 252, + "Violet": 16, + "Cyan": 0, + "Magenta": 17, + "Pink": 25, + "Turquoise": 2, + "Lime": 0, + "Purple": 8, + "Brown": 156, + "Teal": 267, + "Maroon": 87, + }, + { + "Red": 0, + "Orange": 16, + "Yellow": 0, + "Green": 83, + "Blue": 0, + "Indigo": 110, + "Violet": 5, + "Cyan": 0, + "Magenta": 39, + "Pink": 101, + "Turquoise": 6, + "Lime": 0, + "Purple": 8, + "Brown": 183, + "Teal": 317, + "Maroon": 23, + }, + ], + "hog": [ + { + "Red": 0, + "Orange": 17, + "Yellow": 0, + "Green": 45, + "Blue": 0, + "Indigo": 383, + "Violet": 0, + "Cyan": 2, + "Magenta": 0, + "Pink": 338, + "Turquoise": 31, + "Lime": 0, + "Purple": 21, + "Brown": 10, + "Teal": 43, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 60, + "Blue": 0, + "Indigo": 471, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 207, + "Turquoise": 60, + "Lime": 0, + "Purple": 11, + "Brown": 4, + "Teal": 78, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 70, + "Blue": 0, + "Indigo": 725, + "Violet": 7, + "Cyan": 0, + "Magenta": 21, + "Pink": 23, + "Turquoise": 11, + "Lime": 0, + "Purple": 13, + "Brown": 0, + "Teal": 19, + "Maroon": 2, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 81, + "Blue": 0, + "Indigo": 245, + "Violet": 1, + "Cyan": 0, + "Magenta": 38, + "Pink": 84, + "Turquoise": 110, + "Lime": 0, + "Purple": 16, + "Brown": 95, + "Teal": 221, + "Maroon": 0, + }, + ], + "earthquake": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 93, + "Blue": 0, + "Indigo": 99, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 108, + "Turquoise": 25, + "Lime": 0, + "Purple": 0, + "Brown": 313, + "Teal": 253, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 23, + "Blue": 0, + "Indigo": 370, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 63, + "Turquoise": 44, + "Lime": 0, + "Purple": 0, + "Brown": 1, + "Teal": 390, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 67, + "Blue": 0, + "Indigo": 357, + "Violet": 13, + "Cyan": 0, + "Magenta": 20, + "Pink": 13, + "Turquoise": 7, + "Lime": 0, + "Purple": 9, + "Brown": 0, + "Teal": 399, + "Maroon": 6, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 34, + "Blue": 0, + "Indigo": 365, + "Violet": 4, + "Cyan": 0, + "Magenta": 38, + "Pink": 29, + "Turquoise": 38, + "Lime": 0, + "Purple": 10, + "Brown": 0, + "Teal": 373, + "Maroon": 0, + }, + ], + "mortar": [ + { + "Red": 0, + "Orange": 29, + "Yellow": 0, + "Green": 105, + "Blue": 0, + "Indigo": 11, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 492, + "Turquoise": 2, + "Lime": 0, + "Purple": 0, + "Brown": 195, + "Teal": 12, + "Maroon": 45, + }, + { + "Red": 0, + "Orange": 150, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 613, + "Turquoise": 0, + "Lime": 0, + "Purple": 0, + "Brown": 123, + "Teal": 1, + "Maroon": 3, + }, + { + "Red": 0, + "Orange": 5, + "Yellow": 0, + "Green": 174, + "Blue": 0, + "Indigo": 81, + "Violet": 11, + "Cyan": 0, + "Magenta": 19, + "Pink": 170, + "Turquoise": 24, + "Lime": 0, + "Purple": 9, + "Brown": 166, + "Teal": 162, + "Maroon": 70, + }, + { + "Red": 0, + "Orange": 1, + "Yellow": 0, + "Green": 89, + "Blue": 9, + "Indigo": 93, + "Violet": 7, + "Cyan": 0, + "Magenta": 37, + "Pink": 172, + "Turquoise": 124, + "Lime": 0, + "Purple": 10, + "Brown": 103, + "Teal": 241, + "Maroon": 5, + }, + ], + "log": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 161, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 164, + "Turquoise": 301, + "Lime": 0, + "Purple": 0, + "Brown": 18, + "Teal": 247, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 20, + "Blue": 0, + "Indigo": 83, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 463, + "Turquoise": 178, + "Lime": 0, + "Purple": 0, + "Brown": 45, + "Teal": 102, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 2, + "Blue": 0, + "Indigo": 44, + "Violet": 11, + "Cyan": 0, + "Magenta": 16, + "Pink": 337, + "Turquoise": 294, + "Lime": 0, + "Purple": 11, + "Brown": 2, + "Teal": 169, + "Maroon": 5, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 19, + "Blue": 0, + "Indigo": 195, + "Violet": 6, + "Cyan": 0, + "Magenta": 39, + "Pink": 391, + "Turquoise": 120, + "Lime": 0, + "Purple": 4, + "Brown": 16, + "Teal": 97, + "Maroon": 4, + }, + ], + "tesla": [ + { + "Red": 0, + "Orange": 128, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 5, + "Violet": 0, + "Cyan": 3, + "Magenta": 0, + "Pink": 135, + "Turquoise": 7, + "Lime": 0, + "Purple": 0, + "Brown": 600, + "Teal": 5, + "Maroon": 7, + }, + { + "Red": 0, + "Orange": 176, + "Yellow": 4, + "Green": 0, + "Blue": 0, + "Indigo": 1, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 299, + "Turquoise": 7, + "Lime": 0, + "Purple": 0, + "Brown": 404, + "Teal": 0, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 46, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 380, + "Violet": 7, + "Cyan": 0, + "Magenta": 19, + "Pink": 102, + "Turquoise": 1, + "Lime": 0, + "Purple": 10, + "Brown": 275, + "Teal": 14, + "Maroon": 37, + }, + { + "Red": 0, + "Orange": 101, + "Yellow": 0, + "Green": 3, + "Blue": 0, + "Indigo": 150, + "Violet": 2, + "Cyan": 0, + "Magenta": 40, + "Pink": 145, + "Turquoise": 238, + "Lime": 0, + "Purple": 6, + "Brown": 120, + "Teal": 70, + "Maroon": 16, + }, + ], + "poison": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 2, + "Indigo": 494, + "Violet": 0, + "Cyan": 2, + "Magenta": 0, + "Pink": 50, + "Turquoise": 99, + "Lime": 0, + "Purple": 2, + "Brown": 0, + "Teal": 242, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 6, + "Indigo": 382, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 80, + "Turquoise": 119, + "Lime": 0, + "Purple": 0, + "Brown": 0, + "Teal": 304, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 12, + "Indigo": 242, + "Violet": 7, + "Cyan": 0, + "Magenta": 21, + "Pink": 22, + "Turquoise": 198, + "Lime": 0, + "Purple": 10, + "Brown": 0, + "Teal": 377, + "Maroon": 2, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 72, + "Indigo": 94, + "Violet": 2, + "Cyan": 0, + "Magenta": 38, + "Pink": 43, + "Turquoise": 306, + "Lime": 0, + "Purple": 15, + "Brown": 0, + "Teal": 321, + "Maroon": 0, + }, + ], + "royal_hogs": [ + { + "Red": 0, + "Orange": 44, + "Yellow": 0, + "Green": 31, + "Blue": 0, + "Indigo": 103, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 88, + "Turquoise": 5, + "Lime": 0, + "Purple": 7, + "Brown": 454, + "Teal": 0, + "Maroon": 159, + }, + { + "Red": 0, + "Orange": 3, + "Yellow": 0, + "Green": 40, + "Blue": 0, + "Indigo": 161, + "Violet": 1, + "Cyan": 0, + "Magenta": 0, + "Pink": 156, + "Turquoise": 56, + "Lime": 0, + "Purple": 2, + "Brown": 338, + "Teal": 50, + "Maroon": 84, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 45, + "Blue": 0, + "Indigo": 387, + "Violet": 18, + "Cyan": 0, + "Magenta": 18, + "Pink": 103, + "Turquoise": 92, + "Lime": 0, + "Purple": 16, + "Brown": 69, + "Teal": 105, + "Maroon": 38, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 25, + "Blue": 0, + "Indigo": 186, + "Violet": 4, + "Cyan": 0, + "Magenta": 42, + "Pink": 132, + "Turquoise": 67, + "Lime": 0, + "Purple": 8, + "Brown": 48, + "Teal": 34, + "Maroon": 345, + }, + ], + "ram_rider": [ + { + "Red": 0, + "Orange": 3, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 66, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 64, + "Turquoise": 548, + "Lime": 0, + "Purple": 4, + "Brown": 33, + "Teal": 172, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 20, + "Blue": 2, + "Indigo": 163, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 28, + "Turquoise": 514, + "Lime": 0, + "Purple": 0, + "Brown": 21, + "Teal": 142, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 17, + "Yellow": 0, + "Green": 10, + "Blue": 0, + "Indigo": 286, + "Violet": 15, + "Cyan": 0, + "Magenta": 16, + "Pink": 57, + "Turquoise": 252, + "Lime": 0, + "Purple": 9, + "Brown": 60, + "Teal": 157, + "Maroon": 12, + }, + { + "Red": 0, + "Orange": 2, + "Yellow": 0, + "Green": 20, + "Blue": 0, + "Indigo": 103, + "Violet": 9, + "Cyan": 0, + "Magenta": 39, + "Pink": 94, + "Turquoise": 495, + "Lime": 0, + "Purple": 6, + "Brown": 3, + "Teal": 115, + "Maroon": 5, + }, + ], + "inferno_tower": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 3, + "Blue": 57, + "Indigo": 220, + "Violet": 73, + "Cyan": 0, + "Magenta": 3, + "Pink": 161, + "Turquoise": 118, + "Lime": 0, + "Purple": 116, + "Brown": 128, + "Teal": 11, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 270, + "Violet": 23, + "Cyan": 0, + "Magenta": 0, + "Pink": 232, + "Turquoise": 171, + "Lime": 0, + "Purple": 110, + "Brown": 17, + "Teal": 20, + "Maroon": 48, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 298, + "Violet": 113, + "Cyan": 0, + "Magenta": 17, + "Pink": 42, + "Turquoise": 13, + "Lime": 0, + "Purple": 293, + "Brown": 96, + "Teal": 15, + "Maroon": 4, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 205, + "Violet": 89, + "Cyan": 0, + "Magenta": 43, + "Pink": 124, + "Turquoise": 197, + "Lime": 0, + "Purple": 151, + "Brown": 30, + "Teal": 48, + "Maroon": 3, + }, + ], + "goblin_hut": [ + { + "Red": 0, + "Orange": 5, + "Yellow": 0, + "Green": 14, + "Blue": 0, + "Indigo": 54, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 257, + "Turquoise": 164, + "Lime": 0, + "Purple": 0, + "Brown": 49, + "Teal": 347, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 10, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 459, + "Turquoise": 241, + "Lime": 0, + "Purple": 0, + "Brown": 1, + "Teal": 180, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 51, + "Blue": 0, + "Indigo": 322, + "Violet": 8, + "Cyan": 0, + "Magenta": 17, + "Pink": 39, + "Turquoise": 65, + "Lime": 0, + "Purple": 9, + "Brown": 33, + "Teal": 337, + "Maroon": 10, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 33, + "Blue": 0, + "Indigo": 376, + "Violet": 4, + "Cyan": 0, + "Magenta": 43, + "Pink": 99, + "Turquoise": 92, + "Lime": 0, + "Purple": 4, + "Brown": 0, + "Teal": 226, + "Maroon": 14, + }, + ], + "lightning": [ + { + "Red": 0, + "Orange": 14, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 1, + "Magenta": 0, + "Pink": 764, + "Turquoise": 15, + "Lime": 0, + "Purple": 7, + "Brown": 85, + "Teal": 5, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 2, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 775, + "Turquoise": 37, + "Lime": 0, + "Purple": 0, + "Brown": 74, + "Teal": 1, + "Maroon": 2, + }, + { + "Red": 0, + "Orange": 47, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 19, + "Violet": 12, + "Cyan": 0, + "Magenta": 12, + "Pink": 223, + "Turquoise": 0, + "Lime": 0, + "Purple": 9, + "Brown": 442, + "Teal": 0, + "Maroon": 127, + }, + { + "Red": 0, + "Orange": 236, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 23, + "Violet": 5, + "Cyan": 0, + "Magenta": 36, + "Pink": 236, + "Turquoise": 0, + "Lime": 0, + "Purple": 9, + "Brown": 273, + "Teal": 0, + "Maroon": 72, + }, + ], + "rocket": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 86, + "Blue": 0, + "Indigo": 84, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 470, + "Turquoise": 95, + "Lime": 0, + "Purple": 16, + "Brown": 43, + "Teal": 97, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 7, + "Blue": 0, + "Indigo": 11, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 625, + "Turquoise": 170, + "Lime": 0, + "Purple": 0, + "Brown": 2, + "Teal": 76, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 104, + "Blue": 0, + "Indigo": 36, + "Violet": 8, + "Cyan": 0, + "Magenta": 13, + "Pink": 586, + "Turquoise": 38, + "Lime": 0, + "Purple": 14, + "Brown": 1, + "Teal": 90, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 19, + "Violet": 2, + "Cyan": 0, + "Magenta": 36, + "Pink": 104, + "Turquoise": 454, + "Lime": 0, + "Purple": 14, + "Brown": 0, + "Teal": 256, + "Maroon": 5, + }, + ], + "xbow": [ + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 1, + "Blue": 0, + "Indigo": 51, + "Violet": 0, + "Cyan": 2, + "Magenta": 0, + "Pink": 627, + "Turquoise": 80, + "Lime": 0, + "Purple": 34, + "Brown": 29, + "Teal": 63, + "Maroon": 4, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 2, + "Blue": 0, + "Indigo": 65, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 604, + "Turquoise": 23, + "Lime": 0, + "Purple": 4, + "Brown": 162, + "Teal": 31, + "Maroon": 0, + }, + { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 12, + "Blue": 0, + "Indigo": 60, + "Violet": 8, + "Cyan": 0, + "Magenta": 13, + "Pink": 241, + "Turquoise": 296, + "Lime": 0, + "Purple": 15, + "Brown": 84, + "Teal": 122, + "Maroon": 40, + }, + { + "Red": 0, + "Orange": 9, + "Yellow": 0, + "Green": 10, + "Blue": 0, + "Indigo": 59, + "Violet": 2, + "Cyan": 0, + "Magenta": 36, + "Pink": 247, + "Turquoise": 303, + "Lime": 0, + "Purple": 20, + "Brown": 64, + "Teal": 99, + "Maroon": 42, + }, + ], + "rage": [{'Red': 0, 'Orange': 0, 'Yellow': 0, 'Green': 1, 'Blue': 0, 'Indigo': 55, 'Violet': 13, 'Cyan': 0, 'Magenta': 0, 'Pink': 778, 'Turquoise': 5, 'Lime': 0, 'Purple': 36, 'Brown': 0, 'Teal': 0, 'Maroon': 3}, {'Red': 0, 'Orange': 0, 'Yellow': 0, 'Green': 1, 'Blue': 0, 'Indigo': 20, 'Violet': 13, 'Cyan': 0, 'Magenta': 0, 'Pink': 758, 'Turquoise': 23, 'Lime': 0, 'Purple': 57, 'Brown': 0, 'Teal': 19, 'Maroon': 0}, {'Red': 0, 'Orange': 0, 'Yellow': 0, 'Green': 0, 'Blue': 0, 'Indigo': 42, 'Violet': 83, 'Cyan': 0, 'Magenta': 36, 'Pink': 317, 'Turquoise': 0, 'Lime': 0, 'Purple': 406, +'Brown': 0, 'Teal': 0, 'Maroon': 7}, {'Red': 0, 'Orange': 0, 'Yellow': 0, 'Green': 0, 'Blue': 0, 'Indigo': 24, 'Violet': 112, 'Cyan': 0, 'Magenta': 45, 'Pink': 240, 'Turquoise': 0, 'Lime': 0, 'Purple': 464, 'Brown': 2, 'Teal': 0, 'Maroon': 4}], + "zap": [ + { + "Red": 0, + "Orange": 70, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 12, + "Violet": 0, + "Cyan": 3, + "Magenta": 0, + "Pink": 528, + "Turquoise": 6, + "Lime": 0, + "Purple": 0, + "Brown": 239, + "Teal": 32, + "Maroon": 1, + }, + { + "Red": 0, + "Orange": 120, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 11, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 471, + "Turquoise": 14, + "Lime": 0, + "Purple": 0, + "Brown": 222, + "Teal": 48, + "Maroon": 5, + }, + { + "Red": 3, + "Orange": 111, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 16, + "Violet": 11, + "Cyan": 0, + "Magenta": 16, + "Pink": 256, + "Turquoise": 0, + "Lime": 0, + "Purple": 11, + "Brown": 421, + "Teal": 0, + "Maroon": 46, + }, + { + "Red": 0, + "Orange": 121, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 25, + "Violet": 6, + "Cyan": 0, + "Magenta": 39, + "Pink": 154, + "Turquoise": 0, + "Lime": 0, + "Purple": 4, + "Brown": 509, + "Teal": 0, + "Maroon": 33, + }, + ], +} + +#card image stuff + +toplefts = [ + (115, 529), + (182, 529), + (249, 529), + (316, 529), +] + +TOTAL_WIDTH = 54 +TOTAL_HEIGHT = 66 +HALF_WIDTH = int(TOTAL_WIDTH / 2) +HALF_HEIGHT = int(TOTAL_HEIGHT / 2) + +#color stuff +COLORS = { + "Red": [255, 0, 0], + "Orange": [255, 165, 0], + "Yellow": [255, 255, 0], + "Green": [0, 128, 0], + "Blue": [0, 0, 255], + "Indigo": [75, 0, 130], + "Violet": [148, 0, 211], + "Cyan": [0, 255, 255], + "Magenta": [255, 0, 255], + "Pink": [255, 192, 203], + "Turquoise": [64, 224, 208], + "Lime": [0, 255, 0], + "Purple": [128, 0, 128], + "Brown": [165, 42, 42], + "Teal": [0, 128, 128], + "Maroon": [128, 0, 0], +} + +#identification methods +def make_pixel_dict_from_color_list(color_list): + pixel_dict = { + "Red": 0, + "Orange": 0, + "Yellow": 0, + "Green": 0, + "Blue": 0, + "Indigo": 0, + "Violet": 0, + "Cyan": 0, + "Magenta": 0, + "Pink": 0, + "Turquoise": 0, + "Lime": 0, + "Purple": 0, + "Brown": 0, + "Teal": 0, + "Maroon": 0, + } + + for color in color_list: + pixel_dict[color] += 1 + + return pixel_dict + + +def find_closest_card(collected_data): + offsets_dict = {} + + # for each card in the card_color_data + for card_name, card_data in card_color_data.items(): + total_offset = 0 + # for each corner + for i, corner_data in enumerate(collected_data): + # print(f'This is the corner data: {corner_data}') + # for each color in the corner data + for color_name, color_value in corner_data.items(): + # print(f'This color: {color_name} has a value of {color_value}') + + # get the difference between the corner color and the card color + offset = abs(color_value - card_data[i][color_name]) + # print(f'This color: {color_name} has a offset of {offset}') + # add the offset to the total offset + total_offset += offset + + offsets_dict[card_name] = total_offset + + best_card = None + best_offset = None + for card_name, offset in offsets_dict.items(): + if best_offset is None or offset < best_offset: + best_card = card_name + best_offset = offset + + if best_offset > 1000: + return "UNKNOWN" + + return best_card + + +def color_from_pixel(pixel): + + # Calculate the Euclidean distance between the pixel and each color + distances = { + color: math.sqrt(sum((a - b) ** 2 for a, b in zip(pixel, COLORS[color]))) + for color in COLORS + } + + # Find the color with the minimum distance + closest_color = min(distances, key=distances.get) + + return closest_color + + +def get_topleft_corner_pixels(topleft, iar): + colors = [] + x_range = (topleft[0], topleft[0] + HALF_WIDTH) + y_range = (topleft[1], topleft[1] + HALF_HEIGHT) + for x in range(x_range[0], x_range[1]): + for y in range(y_range[0], y_range[1]): # Corrected this line + pixel = iar[y][x] + colors.append(color_from_pixel(pixel)) + return make_pixel_dict_from_color_list(colors) + + +def get_topright_corner_pixels(topleft, iar): + colors = [] + x_range = (topleft[0] + HALF_WIDTH, topleft[0] + TOTAL_WIDTH) + y_range = (topleft[1], topleft[1] + HALF_HEIGHT) + for x in range(x_range[0], x_range[1]): + for y in range(y_range[0], y_range[1]): + pixel = iar[y][x] + colors.append(color_from_pixel(pixel)) + return make_pixel_dict_from_color_list(colors) + + +def get_bottomleft_corner_pixels(topleft, iar): + colors = [] + x_range = (topleft[0], topleft[0] + HALF_WIDTH) + y_range = (topleft[1] + HALF_HEIGHT, topleft[1] + TOTAL_HEIGHT) + for x in range(x_range[0], x_range[1]): + for y in range(y_range[0], y_range[1]): + pixel = iar[y][x] + colors.append(color_from_pixel(pixel)) + return make_pixel_dict_from_color_list(colors) + + +def get_bottomright_corner_pixels(topleft, iar): + colors = [] + x_range = (topleft[0] + HALF_WIDTH, topleft[0] + TOTAL_WIDTH) + y_range = (topleft[1] + HALF_HEIGHT, topleft[1] + TOTAL_HEIGHT) + for x in range(x_range[0], x_range[1]): + for y in range(y_range[0], y_range[1]): + pixel = iar[y][x] + colors.append(color_from_pixel(pixel)) + return make_pixel_dict_from_color_list(colors) + + +def get_all_pixel_data(vm_index): + color_lists = [] + + iar = numpy.asarray((screenshot(vm_index))) + for topleft in (toplefts): + topleft_pixels = get_topleft_corner_pixels(topleft, iar) + topright_pixels = get_topright_corner_pixels(topleft, iar) + bottomleft_pixels = get_bottomleft_corner_pixels(topleft, iar) + bottomright_pixels = get_bottomright_corner_pixels(topleft, iar) + + color_list = [ + topleft_pixels, + topright_pixels, + bottomleft_pixels, + bottomright_pixels, + ] + + color_lists.append(color_list) + + return color_lists + + +def check_which_cards_are_available(vm_index): + iar = numpy.asarray(screenshot(vm_index)) + + card_1_pixels = [] + card_2_pixels = [] + card_3_pixels = [] + card_4_pixels = [] + + card_toplefts = [ + [133, 582], + [199, 583], + [266, 583], + [334, 582], + ] + width = 20 + height = 20 + + for i, topleft in enumerate(card_toplefts): + for x in range(width): + for y in range(height): + x_coord = topleft[0] + x + y_coord = topleft[1] + y + + if i == 0: + card_1_pixels.append(iar[y_coord][x_coord]) + if i == 1: + card_2_pixels.append(iar[y_coord][x_coord]) + if i == 2: + card_3_pixels.append(iar[y_coord][x_coord]) + if i == 3: + card_4_pixels.append(iar[y_coord][x_coord]) + + purple_count_1 = count_purple_colors_in_pixel_list(card_1_pixels) + purple_count_2 = count_purple_colors_in_pixel_list(card_2_pixels) + purple_count_3 = count_purple_colors_in_pixel_list(card_3_pixels) + purple_count_4 = count_purple_colors_in_pixel_list(card_4_pixels) + + card_exists_list = [] + + if purple_count_1 > 25: + card_exists_list.append(0) + + if purple_count_2 > 25: + card_exists_list.append(1) + + if purple_count_3 > 25: + card_exists_list.append(2) + + if purple_count_4 > 25: + card_exists_list.append(3) + + return card_exists_list + + +def count_purple_colors_in_pixel_list(pixel_list): + purple_color = [255, 43, 227] + count = 0 + for p in pixel_list: + if pixel_is_equal(p, purple_color, tol=30): + count += 1 + + return count + + +def identify_hand_cards(vm_index): + color_lists = get_all_pixel_data(vm_index) + return [find_closest_card(color_list) for color_list in color_lists] + + +def get_card_group(card_id) -> str: + card_groups: dict[str, list[str]] = { + "spell": [ + "earthquake", + "fireball", + "freeze", + "poison", + "arrows", + "snowball", + "zap", + "rocket", + "lightning", + "log", + "tornado", + "graveyard", + ], + "turret": [ + "bomb_tower", + "cannon", + "tesla", + "goblin_cage", + "inferno_tower", + "inferno_tower2", + ], + "hog": [ + "battle_ram", + "wall_breakers", + "princess", + "ram_rider", + "skeleton_barrel", + "hog", + "royal_hogs", + ], + "miner": [ + "goblin_drill", + "miner", + ], + "goblin_barrel": [ + "goblin_barrel", + ], + "xbow": [ + "xbow", + "mortar", + ], + "spawner": [ + "tombstone", + "goblin_hut", + "barb_hut", + "furnace", + ], + } + + for group, cards in card_groups.items(): + if card_id in cards: + return group + + return "No group" + + + +def get_play_coords_for_card(vm_index, card_index, side_preference): + # get the ID of this card(ram_rider, zap, etc) + identity = identify_hand_cards(vm_index)[card_index] + + # get the grouping of this card (hog, turret, spell, etc) + group = get_card_group(identity) + + # get the play coords of this grouping + coords = calculate_play_coords(group, side_preference) + + return identity, coords + +def calculate_play_coords(card_grouping: str, side_preference: str): + if PLAY_COORDS.get(card_grouping): + group_datum = PLAY_COORDS[card_grouping] + if side_preference == "left" and "left" in group_datum: + return random.choice(group_datum["left"]) + if side_preference == "right" and "right" in group_datum: + return random.choice(group_datum["right"]) + if "coords" in group_datum: + return random.choice(group_datum["coords"]) + + if side_preference == "left": + return (random.randint(60, 206), random.randint(281, 456)) + return (random.randint(210, 351), random.randint(281, 456)) + + + +if __name__ == "__main__": + pass diff --git a/src/pyclashbot/bot/do_fight_state.py b/src/pyclashbot/bot/do_fight_state.py index 179d674c9..46e2f6ef4 100644 --- a/src/pyclashbot/bot/do_fight_state.py +++ b/src/pyclashbot/bot/do_fight_state.py @@ -9,7 +9,7 @@ from xmlrpc.client import Boolean -from pyclashbot.bot.card_detection3 import ( +from pyclashbot.bot.card_detection4 import ( get_play_coords_for_card, check_which_cards_are_available, )