It’s raycasting, but the tiles belong to convex sectors so I can quickly check if a height change occurred at each ray step. Then the height changes are stored in AA array for each screen column so the items can use them as a series of clips. The last rendered enemy per column is stored for hitscans.