It's a Unity game, so extract the files with your tool of choice! The following is based on extracting with AssetRipper. Sprite sheets are stored in "Texture2D", players prefixed with "Ani_#_" each individual frame of animation has an association JSON FILE (under "Sprite" if ripped via AssetRipper) The coordinates under "m_Rect" near the bottom of those JSON files provide the width, height and position of their respective sheet ... but you'll need to apply them to a sheet that's been vertically flipped, otherwise the coordinates don't match. (I used a Bing-generated Python script to read all those coordinates in all the JSON files in its directory, then export them from the assigned image, see below) Associated palettes are prefixed "Pal_#_" and the colours they swap out are translucent in the sheet Grunt sprites come in at least four variants with an "_0#." suffix, and an unused template version that's un-numbered That template sprite will match perfectly with the final numbered versions of the JSONs (Skinny3, Tank4, etc) ... but for the others, the JSONs appear to be numbered strangely and don't produce clean results. I just had to export every JSON from one sheet and sort through them manually to find the right ones import os import json from PIL import Image # Specify the PNG image filename png_filename = "source.png" # Replace with the actual name of your PNG file # Check if the PNG file exists if not os.path.exists(png_filename): print(f"Error: The file '{png_filename}' does not exist in the current directory.") exit() # Open the PNG image source_image = Image.open(png_filename) # Get a list of all JSON files in the current directory json_files = [f for f in os.listdir() if f.endswith(".json")] # Process each JSON file for json_file in json_files: with open(json_file, "r") as f: data = json.load(f) # Extract "m_Rect" coordinates try: rect = data["m_Rect"] m_x = rect["m_X"] m_y = rect["m_Y"] m_width = rect["m_Width"] m_height = rect["m_Height"] # Calculate the cropping box crop_box = (m_x, m_y, m_x + m_width, m_y + m_height) # Crop the image cropped_image = source_image.crop(crop_box) # Save the cropped image with the JSON filename (without extension) output_filename = os.path.splitext(json_file)[0] + ".png" cropped_image.save(output_filename) print(f"Exported: {output_filename}") except KeyError: print(f"Error: 'm_Rect' or its keys are missing in {json_file}. Skipping...") except Exception as e: print(f"Error processing {json_file}: {e}") print("Processing complete.")