from typing import Dict, List, NamedTuple, TypedDict, Optional """ [obj id, name] """ objNames: Dict[int, str] = { 1140: "Clubstep Block 1", 1141: "Clubstep Block 2", 1142: "Clubstep Block 3", 1143: "Clubstep Block 4", 1144: "Clubstep Block 5", 1145: "Clubstep Block 6", 1146: "Clubstep Block 7", 1147: "Clubstep Block 8", 1148: "Clubstep Block 9", 1149: "Clubstep Block 10", 1150: "Clubstep Block 11", 1151: "Clubstep Block 12", 1152: "Clubstep Block 13", 1153: "Clubstep Block 14", 1329: "User Coin", 901: "Move Trigger", 914: "Text", 1019: "Large Pinwheel", 1020: "Medium Pinwheel", 1021: "Small Pinwheel", 1022: "Green Orb", 1006: "Pulse Trigger", 747: "Teleport Portal", 745: "Robot Portal", 900: "Ground 2 Color Trigger", 1007: "Alpha Trigger", 1049: "Toggle Trigger", 867: "Brick Block 1", 868: "Brick Block 2", 869: "Brick Block 3", 870: "Brick Block 4", 871: "Brick Block 5", 872: "Brick Block 6", 873: "Brick", 874: "Brick End", 918: "Monster", 997: "Large Spinner", 998: "Medium Spinner", 999: "Small Spinner", 1050: "Flowing Water", 1051: "Flowing Water Edge", 1052: "Single Flowing Water", 1055: "1 Dot Spinner", 1056: "Two Dot Spinner", 1057: "Four Dot Spinner", 1058: "Large Spiral Spinner", 1059: "Medium Spiral Spinner", 1060: "Small Spiral Spinner", 1061: "Tiny Spiral Spinner", 1247: "Bezel Block 1", 1248: "Bezel Block 2", 1249: "Bezel Block 3", 1250: "Bezel Block 4", 1251: "Bezel Block 5", 1252: "Bezel Block 6", 1253: "Bezel Block 7", 1254: "Bezel Block 8", 1255: "Bezel Block 9", 752: "Grass Block 1", 753: "Grass Block 2", 754: "Grass Block 3", 755: "Grass Block 4", 756: "Grass Block 5", 757: "Grass Block 6", 758: "Grass Block 7", 759: "Grass Block 8", 762: "Grass 45 Degree Slope", 763: "Grass 22.5 Degree Slope", 764: "Grass 45 Degree Slope Corner", 765: "Grass 22.5 Degree Slope Corner", 766: "Grass Block 9", 1154: "Half Obj Line", 1155: "Half Obj Corner", 1156: "Half Obj Top", 1157: "Half Obj Sides", 1158: "Half Obj Cornerpiece", 1275: "Key", 1276: "Keyhole", 1330: "Black Orb", # first 2.1 obj 1331: "Spider Portal", 1332: "Red Pad", 1333: "Red Orb", 1334: "4x Speed Portal", 1346: "Rotate Trigger", 1347: "Follow Trigger", 1704: "Dash Orb", 1755: "D-Block", 1813: "J-Block", 1829: "S-Block", 1859: "H-Block", 880: "Detailed Brick Block 1", 881: "Detailed Brick Block 2", 882: "Detailed Brick Block 3", 883: "Detailed Brick Block 4", 884: "Detailed Brick Block 5", 885: "Detailed Brick Block 6", 890: "Tetris Block", 891: "Tetris Slab", 919: "Monster Liquid", 920: "Fire", 921: "Flame", 1011: "Full Glow", 1012: "Full Glow Corner", 1013: "Full Glow Inner Corner", 1120: "Glass Quarter Deco", 1122: "Quarter Deco", 1123: "Quarter Line Deco", 1124: "Quarter Corner Line Deco", 1125: "Quarter Edge Line Deco", 1126: "Quarter Inner Line Deco", 1127: "Quarter Inner Line Deco", 1132: "Glass Inner Deco 1", 1133: "Glass Inner Deco 2", 1134: "Glass Inner Deco 3", 1135: "Glass Inner Deco 4", 1136: "Glass Inner Deco 5", 1137: "Glass Inner Deco 6", 1138: "Glass Inner Deco 7", 1139: "Glass Inner Deco 8", 1269: "Large 45 Degree Glow", 1270: "Large 22.5 Degree Glow", 1271: "Small 45 Degree Glow", 1272: "Small 22.5 Degree Glow", 1273: "Medium 45 Degree Glow", 1274: "Medium 22.5 Degree Glow", 1733: "Ground Spike Cornerpiece", 1886: "Medium Glow Circle", 1887: "Small Glow Circle", 1888: "Large Glow Circle", 841: "Tech Block 1", 842: "Tech Block 2", 843: "Tech Block 3", 844: "Tech Block 4", 845: "Tech Block 5", 846: "Tech Block 6", 847: "Tech Block 7", 848: "Tech Block 8", 850: "Small Bezeled Block 1", 853: "Small Bezeled Block 2", 854: "Small Bezeled Block 3", 855: "Small Bezeled Block 4", 856: "Small Bezeled Block 5", 857: "Small Bezeled Block 6", 859: "Small Bezeled Block 7", 861: "Small Bezeled Block 8", 862: "Small Bezeled Block 9", 863: "Small Bezeled Block 10", 939: "Flower", 940: "Grass Deco 1", 941: "Grass Deco 2", 942: "Grass Deco 3", 1001: "Thin Pipe Deco 1", 1002: "Thin Pipe Deco 2", 1003: "Thin Pipe Deco 3", 1004: "Thin Pipe Deco 4", 1005: "Thin Pipe Deco 5", 1075: "Thin Pipe Block 1", 1076: "Thin Pipe Block 2", 1077: "Thin Pipe Block 3", 1008: "Small Full Glow", 1009: "Small Full Glow Corner", 1010: "Small Full Glow Edge", 1291: "Quarter Full Glow", 1292: "Quarter Full Glow Corner", 1293: "Quarter Full Glow Edge", 902: "Skinny 3D Block", 1268: "Spawn Trigger", 1616: "Stop Trigger", 1737: "Pillar Bottom Deco", 1738: "Pillar Corner Deco", 1739: "Pillar Cornerpiece Deco", 1740: "Pillar Deco", 1741: "Pillar Top Deco", 1742: "Pillar Block Deco", 1758: "45 Degree Glow", 1759: "22.5 Degree Glow", 1760: "Small Full 45 Degree Glow", 1761: "Small Full 22.5 Degree Glow", 1762: "Full 45 Degree Glow", 1763: "Full 22.5 Degree Glow", 1820: "Colored Default Block 1", 1821: "Colored Default Block 2", 1823: "Colored Default Block 3", 1824: "Colored Default Block 4", 1825: "Colored Default Block 5", 1826: "Colored Default Block 6", 1827: "Colored Default Block 7", 1828: "Colored Default Block 8", 1849: "Animated Liquid 1", 1850: "Animated Liquid 2", 1851: "Animated Liquid 3", 1852: "Animated Liquid Drop 1", 1853: "Animated Liquid Drop 2", 1854: "Animated Liquid Drop 3", 1855: "Animated Liquid Drop 4", 1856: "Animated Bubble", 1878: "Wood Block 1", 1879: "Wood Block 2", 1880: "Wood Block 3", 1881: "Wood Block 4", 989: "Corner Square Hazard", 990: "Corner Square Hazard Outline", 991: "Triangle Hazard Cornerpiece", 992: "Triangle Hazard Cornerpiece Outline", 1187: "45 Degree Bezeled Slope", 1188: "22.5 Degree Bezeled Slope", 1189: "45 Degree Bezeled Slope Corner", 1190: "22.5 Degree Bezeled Slope Corner", 1202: "2x Outline Line", 1203: "2x Outline Corner", 1204: "2x Outline 3 Sides", 1205: "2x Outline Cornerpiece", 1206: "2x Outline 45 Degree Slope Cornerpiece", 1207: "2x Outline 22.5 Degree Slope Cornerpiece", 1208: "2x Outline Half Block", 1209: "2x Outline Sides", 1210: "2x Outline Block", 1732: "Corner Square Hazard", } """ [2.1 obj id, 1.9 equivalent] """ objIds: Dict[int, int] = { 1338: 665, 1339: 666, 1715: 9, 1716: 365, 1734: 675, 1735: 676, 1736: 677, 1719: 61, 1720: 243, 1721: 244, 1725: 421, 1726: 422, 1148: 193, 1743: 289, 1744: 291, 1705: 88, 1706: 89, 1707: 98, 1825: 251, 1891: 199, 1708: 397, 1709: 398, 1710: 399, 1910: 195, 1911: 196, 1747: 309, 1748: 311, 1711: 135, 1712: 135, 1713: 135, 1714: 135, 915: 104, 1903: 40, 1890: 198, 1889: 191, 1891: 199, 1892: 393, 1260: 468, 1717: 363, 1718: 364, 1903: 40, 1904: 369, 1905: 370, 1561: 506, 1562: 507, 1563: 508, 1564: 509, 1565: 510, 1566: 511, 1567: 512, 1568: 513, 1569: 514, 1906: 371, 1907: 372, 1908: 373, 1909: 374, 1142: 164, 1722: 368, 1723: 366, 1724: 367, 1728: 446, 1729: 447, 1730: 667, 1731: 720, 1745: 299, 1746: 301, 1749: 315, 1750: 317, 1825: 251, 1737: 668, # 2.1 pillar objects 1738: 669, # also show with the pre 2.0 ones? 1739: 670, 1740: 671, 1741: 672, 1742: 738, } """ [2.1 obj id, 1.9 equivalent] """ clubstepObjConv: Dict[int, int] = { 1140: 162, 1141: 163, 1143: 165, 1144: 166, 1145: 167, 1146: 168, 1147: 169, } """ [2.1 obj id, 1.9 equivalent] """ glowObj: Dict[int, int] = { 1011: 503, 1012: 504, 1013: 505, } """ [2.1 obj id, 1.9 equivalent] """ colorDefaultBlockObj: Dict[int, int] = { 1820: 247, 1821: 248, 1823: 249, 1824: 250, 1826: 252, 1827: 253, 1828: 254, } """ [2.1 obj id, 1.9 equivalent] """ colorTrigObj: Dict[int, int] = { 1000: 29, 1001: 30, 1002: 104, 1004: 105, 1003: 744, 1: 221, 2: 717, 3: 718, 4: 743 } """ [2.1 color id, 1.9 equivalent] """ objColors: Dict[int, int] = { 1005: 1, 1006: 2, 1007: 5, 1: 3, 2: 4, 3: 6, 4: 7 } """ [2.1 color id, 1.9 header equivalent] """ headerColorID: Dict[int, str] = { 1000: 'kS29', 1001: 'kS30', 1002: 'kS31', 1003: 'kS37', 1004: 'kS32', 1: 'kS33', 2: 'kS34', 3: 'kS35', 4: 'kS36' } class PointEightHeaderKeys(NamedTuple): r: str g: str b: str class PointEightHeader(TypedDict): color_keys: PointEightHeaderKeys blend_key: Optional[str] player_color_key: Optional[str] point_nine_equivalent: str point_six_headers: List[PointEightHeader] = [ PointEightHeader( # bg color color_keys=PointEightHeaderKeys(r="kS1", g="kS2", b="kS3"), player_color_key="kS16", point_nine_equivalent="kS29" ), PointEightHeader( # ground color color_keys=PointEightHeaderKeys(r="kS4", g="kS5", b="kS6"), player_color_key="kS17", point_nine_equivalent="kS30" ), PointEightHeader( # line color color_keys=PointEightHeaderKeys(r="kS7", g="kS8", b="kS9"), player_color_key="kS18", point_nine_equivalent="kS31" ), PointEightHeader( # obj color color_keys=PointEightHeaderKeys(r="kS10", g="kS11", b="kS12"), player_color_key="kS19", point_nine_equivalent="kS32" ), PointEightHeader( # color 1 color_keys=PointEightHeaderKeys(r="kS13", g="kS14", b="kS15"), player_color_key="kS20", blend_key="kA5", point_nine_equivalent="kS33" ), ]