from collections import deque IN_PATH = r"K:\ghidra\Crusader_Decomp\binary\Crusader - No Remorse Memdump Weapons.bin" W,H = 1024,512 import os with open(IN_PATH,'rb') as f: data = f.read() count = min(len(data)//2, W*H) # build mask of non-black pixels mask = bytearray(W*H) for i in range(count): off = i*2 val = data[off] | (data[off+1]<<8) b = (val & 0x1F) << 3 g = ((val >>5) & 0x1F) << 3 r = ((val >>10) & 0x1F) << 3 if r|g|b: mask[i] = 1 # flood-fill connected components (4-neigh) visited = bytearray(W*H) bbs = [] for idx in range(W*H): if mask[idx] and not visited[idx]: q = deque([idx]) visited[idx]=1 xs = [] ys = [] while q: v = q.popleft() y = v // W x = v % W xs.append(x); ys.append(y) # neighbors for dx,dy in ((1,0),(-1,0),(0,1),(0,-1)): nx = x+dx; ny = y+dy if 0<=nx