Is the order of tiles within a metasprite importnat (i.e. do you use sprite layering) ? If not, then you can just blit the sprites out of order.

Instead of doing something like, assuming shadow-OAM is at $200-$2FF

**Code:**

BlitMetasprite:

[some calculations here]

BlitMetasprite_loop:

[some calculations here]

sta $200,X ;

[some calculations here]

sta $201,X

[some calculations here]

sta $202,X

[some calculations here]

sta $203,X

inx

inx

inx

inx

beq OAM_full

[some calculations here]

bne Blit_metasprite_loop

OAM_Full:

rts

You do something like :

**Code:**

BlitMetasprite:

[some calculations here]

BlitMetasprite_loop:

[some calculations here]

sta $200,X ;

[some calculations here]

sta $201,X

[some calculations here]

sta $202,X

[some calculations here]

sta $203,X

txa

clc

adc SpriteSpacingValue

tax

beq OAM_full

[some calculations here]

bne Blit_metasprite_loop

OAM_Full:

rts

And SpriteSpacingValue can be any multiple of 4 which is not a multiple of 8, in order to blit the sprites out of order. A good idea is once per frame tie it to the pseudorandom-number generator, shift 3 times and add 4. This assures your sprites will be blitted in random order and makes it close to what Konami is doing in their games, which looks quite good in my opinion. Note that you still blit your metatiles in order, it's just that the individual sprites that are part of them are put in random order in OAM, so that the lower priority individual sprites who disapears are random. Another advantage is that sprite #0 remains always sprite #0, so it doesn't get in the way of sprite zero hit. However you can only use sprite layering if it doesn't rely on priorities (i.e. the non-used layer is "transparent").