IN_BIN = r"K:\ghidra\Crusader_Decomp\binary\Crusader - No Remorse Memdump Weapons.bin" W,H = 1024,512 # regions HUD_BOX = (80,44,360,92) # left,top,right,bot VSTRIP_X0, VSTRIP_X1 = 956, 1023 import os, sys with open(IN_BIN,'rb') as f: data = f.read() count = min(len(data)//2, W*H) # build RGB rows rows = [] for y in range(H): row = [] for x in range(W): i = y*W + x if i < 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 else: r=g=b=0 row.append((r,g,b)) rows.append(row) # extract HUD crop lx,ty,rx,by = HUD_BOX w = rx-lx; h = by-ty hud = [[rows[y][x] for x in range(lx,rx)] for y in range(ty,by)] # build mask for HUD hud_mask = [[(1 if any(ch!=0 for ch in hud[y][x]) else 0) for x in range(w)] for y in range(h)] # extract vstrip area and find blobs vx0,vx1 = VSTRIP_X0, VSTRIP_X1 vw = vx1-vx0+1 vrows = [[rows[y][x] for x in range(vx0,vx1+1)] for y in range(H)] # mask and flood-fill mask = [[1 if any(ch!=0 for ch in vrows[y][x]) else 0 for x in range(vw)] for y in range(H)] visited = [[0]*vw for _ in range(H)] from collections import deque blobs = [] for y in range(H): for x in range(vw): if mask[y][x] and not visited[y][x]: q=deque([(x,y)]) visited[y][x]=1 xs=[]; ys=[] while q: cx,cy=q.popleft() xs.append(cx); ys.append(cy) for dx,dy in ((1,0),(-1,0),(0,1),(0,-1)): nx,ny = cx+dx, cy+dy if 0<=nx