.Section "oam objects" superfree ;relative pointers to objects: ObjectLUT: .dw (Object000-ObjectLUT) .dw (Object001-ObjectLUT) Object000: .db %11011010 ;object type designation ;bit3=subroutine? if set, this object has its own subroutine that must be executed every frame ;bit4=animate? if set, this object is animated(a special table for each object specifies the exact animation with commands for tileloading, waiting, animation loop etc) ;bit5=screen-bound? if set, this object must move in accordance with background layer 0 ;bit6=object active? if set, this object is active and needs to be processed. if clear, this sprite doesnt need to be processed ;bit7=object present? if set, this slot has an object. if clear, its considered empty and can be overwritten .db %00000000 ;object type designation 2 .db $02 ;number of subroutine. executed if bit6 of object type is set .db 0 ;tileset to use .db $00 ;current "frame" of tileset to display .db $08 ;starting tile in vram .db %00110110 ;palette and config .dw $80 ;x position .dw $80 ;y position .db 0 ;current frame in animation list .db 0 ;object command list to use .db 0 ;object offset in object list. .db 0 ;palette number to upload for this sprite .dw 0 ;object number .db 0 ;x-displacement .db 0 ;y-displacement .db 0 ;z-displacement .db 0 ;animation repeat counter for nop .db 0 ;collision subroutine .db 0 ;vector speed. 3bit + 3bit sub-pixel accuracy. msb set=target speed met.(speed=0: don't calc vector movement) .db 0 ;void .db 0 ;void .db 0 ;void .db 7 ;spare variable .db 0 ;spare variable .db 0 ;spare variable .db 0 ;spare variable .db 0 ;spare variable .db 0 ;spare variable ;cpu usage indicator Object001: .db %11101000 ;object type designation ;bit0=X position sign of sprite(usually 0) ;bit1=Object size flag ;bit2=collidable ;bit3=subroutine? if set, this object has its own subroutine that must be executed every frame ;bit4=animate? if set, this object is animated(a special table for each object specifies the exact animation with commands for tileloading, waiting, animation loop etc) ;bit5=bg-bound? if set, this object must move in accordance with background layer 0 ;bit6=object active? if set, this object is active and needs to be drawn. if clear, this sprite doesnt need to be drawn, but must be processed, anyway ;bit7=object present? if set, this slot has an object. if clear, its considered empty and can be overwritten .db %00100000 ;object type designation 2 ;bit7=pseudo 3d sprite that needs to be moved according to z-value when background moves ;bit6=don't upload tiles for this sprite. useful for stuff like particles and such where lots of sprites share the same tiles. ;bit5=don't upload palette for this sprite. ;bits0-3: current position in vector angle LUT (didn't fit anywhere else) .db 1 ;number of subroutine. executed if bit6 of object type is set .db 0 ;tileset to use .db $00 ;current "frame" of tileset to display .db $ff ;starting tile in vram .db %00110001 ;palette and config .dw 1*16 ;x position .dw 1 ;y position .db 0 ;current frame in animation list .db 0 ;object command list to use .db 0 ;object offset in object list. .db 0 ;palette number to upload for this sprite .dw 0 ;object number .db 0 ;x-displacement .db 0 ;y-displacement .db 0 ;z-displacement .db 0 ;animation repeat counter for nop .db 0 ;collision subroutine .db 0 ;vector speed. bit0-2:subpixel speed. bit3-5:pixel speed. bit7 set: target speed met .db 0 ;vector target speed. bit0-2:subpixel speed target. bit3-5:pixel speed target. bit6,7: movement type(direct, linear slow, linear fast, smooth) .db 0 ;vector direction. bit0-5:direction.0=facing up. bit6=turning direction.(set=clockwise) msb set=target direction met. .db 0 ;vector target dir. bit0-5:target direction.0=facing up. bit6,7: movement type(direct, linear slow, linear fast, smooth) .db 0 ;subpixel buffer. bit0-2:vector speed subpixel buffer. bit3-7: direction turn speed sub-pixel buffer. .db 0 ;spare variable .db 0 ;spare variable .db 0 ;spare variable .db 0 ;spare variable .db 0 ;spare variable .ends