00001 #ifndef __XF_SPRITES_H__
00002 #define __XF_SPRITES_H__
00003
00004 #include "xf_types.h"
00005 #include "xf_params.h"
00006 #include "xf_alloc.h"
00007
00008
00009 typedef struct {
00010 u8 Alive;
00011 void *Image;
00012
00013 s16 X, Y;
00014 s16 ImgWidth, ImgHeight, Width, Height;
00015 u8 ColorMode, Full;
00016 u16 *Palette;
00017 s16 Priority;
00018
00019
00020 s16 Frame, FrameChange, FirstFrame, LastFrame, AnimCycles, AnimSpeed;
00021 u8 AnimPlay, AnimTime, AnimType;
00022
00023 s16 Alpha;
00024 u8 HFlip, VFlip;
00025 s32 Zoom, Angle;
00026 s32 ZoomX, ZoomY;
00027 u16 *RLEList;
00028 u8 *RLE;
00029 u8 *AlphaLayer;
00030
00031 u8 Window;
00032
00033 u8 MinX, MinY, MaxX, MaxY;
00034
00035 } sprite_type;
00036
00037 extern int xf_minsprite, xf_maxsprite;
00038
00039
00040 #define XF_ResetSprites XF_InitSprites
00041
00042
00043 #define N_SPRITES 4096
00044
00045 extern sprite_type *xf_sprites[N_SPRITES];
00046
00047 #define SPRITE_16COLORS 0
00048 #define SPRITE_256COLORS 1
00049 #define SPRITE_16BIT 2
00050 #define SPRITE_16BITS 2
00051 #define SPRITE_24BIT 3
00052 #define SPRITE_24BITS 3
00053
00054
00055 #define ANIM_LOOP 0 // loop around
00056 #define ANIM_UPDOWN 1 // back and forth animation
00057
00058 #define ANIM_ONESHOT ANIM_LOOP, 1
00059 #define ANIM_INFINITE ANIM_LOOP, -1
00060
00061 void XF_InitSprites(void);
00062
00063
00064
00065
00066
00067
00075 void XF_CreateSprite(u32 sprite, XF_Sprite *image, s16 width, s16 height, s32 x, s32 y);
00076
00077
00089 #define XF_SetSpriteX(sprite, x) xf_sprites[sprite]->X = x
00090
00102 #define XF_SetSpriteY(sprite, y) xf_sprites[sprite]->Y = y
00103
00104 extern inline void XF_SetSpriteXY(u16 sprite, s16 x, s16 y){
00105 XF_SetSpriteX(sprite, x);
00106 XF_SetSpriteY(sprite, y);
00107 }
00108
00109
00110
00119 #define XF_GetSpriteX(sprite) xf_sprites[sprite]->X
00120
00129 #define XF_GetSpriteY(sprite) xf_sprites[sprite]->Y
00130
00131
00132
00133
00134 #define XF_GetSpriteWidth(sprite) xf_sprites[sprite]->Width
00135 #define XF_GetSpriteHeight(sprite) xf_sprites[sprite]->Height
00136
00137 #define XF_SetSpriteAlive(sprite, alive) xf_sprites[sprite]->Alive = alive
00138 #define XF_GetSpriteAlive(sprite) (xf_sprites[sprite] && (xf_sprites[sprite]->Alive))
00139
00140 #define XF_SetSpriteVisible(sprite, visible) xf_sprites[sprite]->Alive = visible
00141 #define XF_GetSpriteVisible(sprite) (xf_sprites[sprite] && (xf_sprites[sprite]->Alive))
00142
00143 void XF_SetSpriteXY(u16 sprite, s16 x, s16 y);
00144
00145
00146
00164 #define XF_StartSpriteAnim(sprite, firstframe, lastframe, speed) XF_StartSpriteAnimEx(sprite, firstframe, lastframe, speed, ANIM_INFINITE)
00165
00189 void XF_StartSpriteAnimEx(s16 sprite, s16 FirstFrame, s16 LastFrame, s16 AnimSpeed, u8 AnimType, s16 AnimCycles);
00190
00199 #define XF_StopSpriteAnim(sprite) xf_sprites[sprite]->AnimPlay = 0
00200
00201 #define XF_SetSpriteFrame(sprite, frame) xf_sprites[sprite]->Frame = frame
00202 #define XF_GetSpriteFrame(sprite) xf_sprites[sprite]->Frame
00203
00204 #define XF_SetSpritePrio(sprite, prio) xf_sprites[sprite]->Priority = prio
00205 #define XF_GetSpritePrio(sprite) xf_sprites[sprite]->Priority
00206
00207 #define XF_SetSpriteAlpha(sprite, alpha) xf_sprites[sprite]->Alpha = alpha
00208 #define XF_GetSpriteAlpha(sprite) xf_sprites[sprite]->Alpha
00209
00210 #define XF_SetSpriteHFlip(sprite, hflip) xf_sprites[sprite]->HFlip = hflip
00211 #define XF_GetSpriteHFlip(sprite) xf_sprites[sprite]->HFlip
00212
00213 #define XF_SetSpriteVFlip(sprite, vflip) xf_sprites[sprite]->VFlip = vflip
00214 #define XF_GetSpriteVFlip(sprite) xf_sprites[sprite]->VFlip
00215
00216 #define XF_SetSpriteAngle(sprite, angle) xf_sprites[sprite]->Angle = angle
00217 #define XF_GetSpriteAngle(sprite) xf_sprites[sprite]->Angle
00218
00219 #define XF_SetSpriteZoom(sprite, zoom) xf_sprites[sprite]->Zoom = zoom
00220 #define XF_GetSpriteZoom(sprite) xf_sprites[sprite]->Zoom
00221
00222 #define XF_SetSpritePal(sprite, pal) xf_sprites[sprite]->Palette = pal
00223 #define XF_GetSpritePal(sprite) xf_sprites[sprite]->Palette
00224
00225 #define XF_SetSpriteWindow(sprite, window) xf_sprites[sprite]->Window = window
00226 #define XF_GetSpriteWindow(sprite) xf_sprites[sprite]->Window
00227
00228 extern inline void XF_SetSpriteHVFlip(s16 sprite, u8 hflip, u8 vflip){
00229 XF_SetSpriteHFlip(sprite, hflip);
00230 XF_SetSpriteVFlip(sprite, vflip);
00231 }
00232
00233
00234
00235 void XF_SetSpriteLimits(u16 sprite, u8 x0, u8 y0, u8 x1, u8 y1);
00236
00237
00238 void XF_ShowSprite(s16 sprite);
00239 XF_Sprite* XF_GifToSprite(void *gif);
00240
00241 extern inline void XF_CloneSprite(u32 sprite, u32 targetsprite){
00242 if(xf_sprites[sprite] == 0) xf_sprites[sprite] = (sprite_type*)malloc(sizeof(sprite_type));
00243
00244 if((s16)sprite < xf_minsprite) xf_minsprite = sprite;
00245 if((s16)sprite > xf_maxsprite) xf_maxsprite = sprite;
00246
00247 *xf_sprites[sprite] = *xf_sprites[targetsprite];
00248 }
00249
00250 void XF_SetSpriteImage(u32 sprite, XF_Sprite *image);
00251
00252
00253
00255
00256
00257 extern XF_Sprite *xf_sprite_alloc[2048];
00258 extern u16 xf_nsprite_alloc;
00259
00260 #endif
00261
00262