mirror of
https://github.com/n64decomp/perfect_dark.git
synced 2024-12-04 20:26:21 +00:00
197 lines
5.0 KiB
C
197 lines
5.0 KiB
C
|
/**************************************************************************
|
||
|
* *
|
||
|
* Copyright (C) 1994, Silicon Graphics, Inc. *
|
||
|
* *
|
||
|
* These coded instructions, statements, and computer programs contain *
|
||
|
* unpublished proprietary information of Silicon Graphics, Inc., and *
|
||
|
* are protected by Federal copyright law. They may not be disclosed *
|
||
|
* to third parties or copied or duplicated in any form, in whole or *
|
||
|
* in part, without the prior written consent of Silicon Graphics, Inc. *
|
||
|
* *
|
||
|
**************************************************************************/
|
||
|
|
||
|
/**************************************************************************
|
||
|
*
|
||
|
* Sprite library include file
|
||
|
*
|
||
|
* $Revision: 1.16 $
|
||
|
* $Date: 1998/04/17 05:03:46 $
|
||
|
* $Source: /hosts/gate3/exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/sp.h,v $
|
||
|
*
|
||
|
**************************************************************************/
|
||
|
|
||
|
#ifndef _SP_H_
|
||
|
#define _SP_H_
|
||
|
|
||
|
#ifdef _LANGUAGE_C_PLUS_PLUS
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include <PR/mbi.h>
|
||
|
#include <PR/ultratypes.h>
|
||
|
|
||
|
struct bitmap {
|
||
|
s16 width; /* Size across to draw in texels */
|
||
|
/* Done if width = 0 */
|
||
|
|
||
|
s16 width_img; /* Size across of bitmap in texels */
|
||
|
/* Done if width = 0 */
|
||
|
|
||
|
s16 s; /* Horizontal offset into bitmap */
|
||
|
/* if (s > width), then load only! */
|
||
|
|
||
|
s16 t; /* Vertical offset into base */
|
||
|
|
||
|
void *buf; /* Pointer to bitmap data */
|
||
|
/* Don't re-load if new buf */
|
||
|
/* is the same as the old one */
|
||
|
/* Skip if NULL */
|
||
|
|
||
|
s16 actualHeight; /* True Height of this bitmap piece */
|
||
|
|
||
|
s16 LUToffset; /* LUT base index */
|
||
|
};
|
||
|
|
||
|
typedef struct bitmap Bitmap;
|
||
|
|
||
|
struct sprite {
|
||
|
s16 x,y; /* Target position */
|
||
|
|
||
|
s16 width, height; /* Target size */
|
||
|
|
||
|
f32 scalex, scaley; /* Texel to Pixel scale factor */
|
||
|
|
||
|
s16 expx, expy; /* Explosion spacing */
|
||
|
|
||
|
u16 attr; /* Attribute Flags */
|
||
|
s16 zdepth; /* Z Depth */
|
||
|
|
||
|
u8 red; /* Red component */
|
||
|
u8 green; /* Green component */
|
||
|
u8 blue; /* Blue component */
|
||
|
u8 alpha; /* Alpha component */
|
||
|
|
||
|
s16 startTLUT; /* Lookup Table Entry Starting index */
|
||
|
s16 nTLUT; /* Total number of Lookup Table Entries */
|
||
|
|
||
|
int *LUT; /* Pointer to Lookup Table */
|
||
|
|
||
|
s16 istart; /* Starting bitmap index */
|
||
|
s16 istep; /* Bitmaps index step (see SP_INCY) */
|
||
|
/* if 0, then variable width bitmaps */
|
||
|
|
||
|
s16 nbitmaps; /* Total number of bitmaps */
|
||
|
s16 ndisplist; /* Total number of display-list words */
|
||
|
|
||
|
s16 bmheight; /* Bitmap Texel height (Used) */
|
||
|
s16 bmHreal; /* Bitmap Texel height (Real) */
|
||
|
u8 bmfmt; /* Bitmap Format */
|
||
|
u8 bmsiz; /* Bitmap Texel Size */
|
||
|
|
||
|
Bitmap *bitmap; /* Pointer to first bitmap */
|
||
|
|
||
|
Gfx *rsp_dl; /* Pointer to RSP display list */
|
||
|
|
||
|
Gfx *rsp_dl_next; /* Pointer to next RSP display entry */
|
||
|
|
||
|
s16 frac_s, /* Fractional Texture offsets */
|
||
|
frac_t; /* These have 5 fraction bits */
|
||
|
};
|
||
|
|
||
|
typedef struct sprite Sprite;
|
||
|
|
||
|
/*
|
||
|
* DANGER!
|
||
|
* This is bad programming. Where the *heck* do these numbers come
|
||
|
* from?
|
||
|
*
|
||
|
* They are obviously 'maximums' from the sprite library, but since
|
||
|
* the sprite library is built on top of gbi.h, which includes macros
|
||
|
* that decode into multiple macros, etc., it is nearly impossible to
|
||
|
* know what these maximums should be.
|
||
|
*
|
||
|
* Worse, there are some gbi macros (texture alignment mostly) that
|
||
|
* decode into *many* macros, so if we choose that as a maximum, we
|
||
|
* are wasting TONS of space...
|
||
|
*
|
||
|
* These numbers work for "reasonable" sprite library usage, and
|
||
|
* there is an assert() in the library to detect when they aren't
|
||
|
* enough. (use the debug version)
|
||
|
*/
|
||
|
#define DL_BM_OVERHEAD (12)
|
||
|
#define DL_SPRITE_OVERHEAD (24)
|
||
|
|
||
|
#define NUM_DL(nb) ((nb)*DL_BM_OVERHEAD +DL_SPRITE_OVERHEAD)
|
||
|
|
||
|
/*
|
||
|
* Misc constants
|
||
|
*/
|
||
|
|
||
|
#ifndef NULL
|
||
|
#define NULL 0
|
||
|
#endif
|
||
|
|
||
|
#ifndef TRUE
|
||
|
#define TRUE 1
|
||
|
#endif
|
||
|
|
||
|
#ifndef FALSE
|
||
|
#define FALSE 0
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* For sprite->attr
|
||
|
*/
|
||
|
|
||
|
#define SP_TRANSPARENT 0x00000001
|
||
|
#define SP_CUTOUT 0x00000002
|
||
|
#define SP_HIDDEN 0x00000004
|
||
|
#define SP_Z 0x00000008
|
||
|
#define SP_SCALE 0x00000010
|
||
|
#define SP_FASTCOPY 0x00000020
|
||
|
#define SP_OVERLAP 0x00000040
|
||
|
#define SP_TEXSHIFT 0x00000080
|
||
|
#define SP_FRACPOS 0x00000100
|
||
|
#define SP_TEXSHUF 0x00000200
|
||
|
#define SP_EXTERN 0x00000400
|
||
|
|
||
|
/*
|
||
|
* Function wrapper
|
||
|
*/
|
||
|
#if defined(F3DEX_GBI_2)
|
||
|
#define spMove spX2Move
|
||
|
#define spSetZ spX2SetZ
|
||
|
#define spScissor spX2Scissor
|
||
|
#define spDraw spX2Draw
|
||
|
#define spInit spX2Init
|
||
|
#define spFinish spX2Finish
|
||
|
#elif defined(F3DEX_GBI)
|
||
|
#define spMove spXMove
|
||
|
#define spSetZ spXSetZ
|
||
|
#define spScissor spXScissor
|
||
|
#define spDraw spXDraw
|
||
|
#define spInit spXInit
|
||
|
#define spFinish spXFinish
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* Function prototypes
|
||
|
*/
|
||
|
|
||
|
void spSetAttribute (Sprite *sp, s32 attr);
|
||
|
void spClearAttribute (Sprite *sp, s32 attr);
|
||
|
void spMove (Sprite *sp, s32 x, s32 y);
|
||
|
void spScale (Sprite *sp, f32 sx, f32 sy);
|
||
|
void spSetZ (Sprite *sp, s32 z );
|
||
|
void spColor (Sprite *sp, u8 red, u8 green, u8 blue, u8 alpha);
|
||
|
Gfx *spDraw (Sprite *sp);
|
||
|
void spInit( Gfx **glistp );
|
||
|
void spScissor( s32 xmin, s32 xmax, s32 ymin, s32 ymax );
|
||
|
void spFinish( Gfx **glistp );
|
||
|
|
||
|
#ifdef _LANGUAGE_C_PLUS_PLUS
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* _SP_H_ */
|