Files
2026-02-19 23:28:57 +01:00

48 lines
1.5 KiB
C

#ifndef _LIBGCCVB_OBJECT_H
#define _LIBGCCVB_OBJECT_H
#include "types.h"
#include "video.h"
/***** Object Manipulation Macros *****/
#define OBJ_XSET(n,x) OAM[ (n) << 2] = (x)
#define OBJ_YSET(n,y) OAM[((n) << 2) + 2] = (y)
#define OBJ_PSET(n,p) OAM[((n) << 2) + 1] = (OAM[((n) << 2) + 1] & 0xC000) | ((u16)(p) & 0x3FFF)
#define OBJ_CSET(n,c) OAM[((n) << 2) + 3] = (OAM[((n) << 2) + 3] & 0xF000) | ((u16)(c) & 0x07FF)
#define OBJ_HSET(n,h) OAM[((n) << 2) + 3] = (OAM[((n) << 2) + 3] & 0xDFFF) | (((u16)(h) << 13) & 0x2000)
#define OBJ_VSET(n,v) OAM[((n) << 2) + 3] = (OAM[((n) << 2) + 3] & 0xEFFF) | (((u16)(v) << 12) & 0x1000)
#define OBJ_PALSET(n,pal) OAM[((n) << 2) + 3] = (((pal) << 14) & 0xC000) | (OAM[((n) << 2) + 3] & 0x3FFF)
#define OBJ_VIS(n,v) OAM[((n) << 2) + 1] = (((v) << 14) & 0xC000) | (OAM[((n) << 2) + 1] & 0x3FFF)
/***** Object Functions *****/
// (Obsoleted by the OBJ_* macros...)
void vbSetObject (u16 n, u8 header, s16 x, s16 p, s16 y, u16 chr);
// Object attributes
#define JX 0 // Display pointer X
#define JP 2 // Paralax
#define JY 4 // Display pointer Y
#define JCA 6 // Character No.
/***** "vbSetObject" header flags *****/
// (OR these together to build an Object Header)
#define JLON 0x8000
#define JRON 0x4000
#define OBJ_ON 0x00C0
#define OBJ_LON 0x0080
#define OBJ_RON 0x0040
#define OBJ_PAL0 0x0000
#define OBJ_PAL1 0x0010
#define OBJ_PAL2 0x0020
#define OBJ_PAL3 0x0030
#define OBJ_HFLIP 0x0008
#define OBJ_VFLIP 0x0004
#endif