35 sprite->
depth = depth;
80 return sprite->
flags & 0x7FFFFFFF;
86 sprite->
flags |= 0x80000000;
88 sprite->
flags &= 0x7FFFFFFF;
99 setSemiTrans(sprt, 1);
101 setRGB0(sprt, 0x80, 0x80, 0x80);
102 sprt->x0 = x + (frame->
x + sprite->
x);
103 sprt->y0 = y + (frame->
y + sprite->
y);
109 addPrim(sprite->
ot, sprt);
122 if ((
s16)part->
clut & 0x8000) {
123 setSemiTrans(ft4, 1);
125 setRGB0(ft4, 0x80, 0x80, 0x80);
126 in[0].vx = in[2].vx = x + (frame->
x + sprite->
x) - sprite->
pivotX;
127 in[1].vx = in[3].vx = in[0].vx + w;
128 in[0].vy = in[1].vy = y + (frame->
y + sprite->
y) - sprite->
pivotY;
129 in[2].vy = in[3].vy = in[0].vy + h;
130 in[0].vz = in[1].vz = in[2].vz = in[3].vz = 0;
131 for (k = 0; k < 4; k++) {
132 ApplyMatrixSV(&sprite->
matrix, &in[k], &out);
133 (&ft4->x0)[k * 4] = out.vx + sprite->
pivotX;
134 (&ft4->y0)[k * 4] = out.vy + sprite->
pivotY;
136 ft4->u0 = ft4->u2 = u;
137 ft4->u1 = ft4->u3 = w + u - 1;
138 ft4->v0 = ft4->v1 = v;
139 ft4->v2 = ft4->v3 = h + v - 1;
142 addPrim(sprite->
ot, ft4);
186 state = sprite->
state;
200 cur.anim = sprite->
anim;
201 cur.frame = cur.anim->
frames;
202 cur.frame += sprite->
frame;
209 cur.anim = sprite->
anim;
210 cur.frame = cur.anim->
frames;
211 cur.frame += sprite->
frame;
213 p.bank = sprite->
bank;
215 count = cur.frame->sprite;
216 for (i = 0; i < count; i++) {
218 for (j = 0; j < n; j++) {
226 if (sprite->
scale.vx == 0 && sprite->
scale.vy == 0) {
229 if (sprite->
scale.vx == ONE && sprite->
scale.vy == ONE) {
241 for (i = 0; i < n; i++) {
245 for (i = 0; i < n; i++) {
248 clut = getClut(sprite->
clutX + (info & 0x1F) * 16, sprite->
clutY + ((part->
clut & 0x7FC0) >> 6));
249 tpage = getTPage(info >> 7, info >> 5, sprite->
imageX + (info & 0x1F) * 64, sprite->
imageY);
260 if (prevTpage != tpage) {
261 SetDrawTPage(prim.tpage, 0, 1, prevTpage);
262 addPrim(sprite->
ot, prim.ptr);
266 STGTRAIN_addSpriteSprt(sprite, prim.sprt, part, cur.frame, x, y, u, v, w, h, clut);
269 STGTRAIN_addSpriteQuad(sprite, prim.ft4, part, cur.frame, x, y, u, v, w, h, tpage, clut);
274 SetDrawTPage(prim.tpage, 0, 1, tpage);
275 addPrim(sprite->
ot, prim.ptr);
GfxState GFX
GFX: the graphics state and its methods.
STGTRAIN.PRO: the gyms, where the partners train their stats.
void STGTRAIN_setSpriteScale(TrainSprite *sprite, s32 x, s32 y, s32 z)
Scales the sprite (0x1000 is its size), drawing it as quads.
void STGTRAIN_setSpritePaused(TrainSprite *sprite, s32 paused)
Pauses the animation (paused) or plays it on.
void STGTRAIN_setSpriteBank(TrainSprite *sprite, TrainSpriteBank *bank, s32 offset)
Sets the sprite bank and where the sprites start in it.
void STGTRAIN_setSpriteClutPos(TrainSprite *sprite, s32 x, s32 y)
Sets where the sprite's CLUT is in VRAM.
static void STGTRAIN_addSpriteQuad(TrainSprite *sprite, POLY_FT4 *ft4, TrainSpritePart *part, TrainAnimFrame *frame, s32 x, s32 y, u8 u, u8 v, u16 w, u16 h, u16 tpage, u16 clut)
Fills in a part of the sprite as a quad, scaled and rotated about the pivot, and adds it to the sprit...
void STGTRAIN_setSpritePivot(TrainSprite *sprite, s32 x, s32 y)
Sets the point the sprite scales and turns about.
s32 STGTRAIN_getSpriteFlags(TrainSprite *sprite)
Whether the animation has ended (the flags but for the pause)
TrainSprite * STGTRAIN_createSprite(void)
Creates an animated sprite.
void STGTRAIN_setSpriteImagePos(TrainSprite *sprite, s32 x, s32 y)
Sets where the sprite's image is in VRAM.
void STGTRAIN_setSpriteAnim(TrainSprite *sprite, TrainAnim *anim)
Starts an animation from its first frame.
void STGTRAIN_setSpriteLayer(TrainSprite *sprite, s32 layerId, s32 depth)
Sets the layer and depth the sprite is drawn at.
void STGTRAIN_setSpriteRotation(TrainSprite *sprite, s16 x, s16 y, s16 z)
Turns the sprite, drawing it as quads.
void STGTRAIN_setSpritePos(TrainSprite *sprite, s32 x, s32 y)
Sets where the sprite is drawn.
static void STGTRAIN_addSpriteSprt(TrainSprite *sprite, SPRT *sprt, TrainSpritePart *part, TrainAnimFrame *frame, s32 x, s32 y, u8 u, u8 v, u16 w, u16 h, u16 clut)
Fills in a part of the sprite as a sprite, and adds it to the sprite's ordering table.
void STGTRAIN_updateSprite(TrainSprite *sprite)
The animated sprite's update: state 1 advances the animation, unless it is paused,...
struct Layer *(* getLayer)(s32 id)
void(* setPrim)(void *next)
u_long *(* getOtEntry)(struct Layer *, s32 depth)
A frame of a sprite animation.
A sprite animation: its frames follow the header.
A sprite bank's header, as the animated sprite reads it: its sprites start bankOffset bytes from it (...
A part of a sprite: a rectangle of a texture page.
u16 tpage
bits 0-4: the page's column, 64 pixels each; 5-8: getTPage's abr and tp
u16 clut
bits 6-14: the CLUT's row; bit 15: semi-transparent
Draws an animated sprite, maybe rotated and scaled (STGTRAIN_createSprite)
void(* nextState)(struct TrainSprite *task)
void(* setBank)(struct TrainSprite *sprite, TrainSpriteBank *bank, s32 offset)
s32 flags
bit 31: paused; the rest, ended
void(* setScale)(struct TrainSprite *sprite, s32 x, s32 y, s32 z)
void(* setRotation)(struct TrainSprite *sprite, s16 x, s16 y, s16 z)
u16 unk84
the bank's unk2 and spriteCount: nothing reads them
void(* setAnim)(struct TrainSprite *sprite, TrainAnim *anim)
void(* setClutPos)(struct TrainSprite *sprite, s32 x, s32 y)
s32(* getFlags)(struct TrainSprite *sprite)
void(* setImagePos)(struct TrainSprite *sprite, s32 x, s32 y)
void(* setPivot)(struct TrainSprite *sprite, s32 x, s32 y)
void(* setPos)(struct TrainSprite *sprite, s32 x, s32 y)
void(* setLayer)(struct TrainSprite *sprite, s32 layerId, s32 depth)
void(* setPaused)(struct TrainSprite *sprite, s32 paused)
void * createTask(void(*update)(), s32 size, s32 childrenSize)
createTaskWithId for a task nothing needs to find