>2;
for (int i=0;i>2)];
}
else
for (int i=0;i
max_sprites) num_sprites = max_sprites;
for (int i=0;i>2);
uint32_t* r=s;
if (i==num_sprites-1) r = (uint32_t*) end;
else for (int j=0;(r==s)&&(i+j>2);
if (r==s) r=(uint32_t*)end;
uint8_t* pp = (uint8_t*) p;
int wid = pp[0], hei = pp[1], xcen = pp[2], ycen = pp[3];
sprites[i].x = xcen; sprites[i].y = ycen;
sprites[i].s = SDL_CreateRGBSurface(SDL_HWSURFACE|SDL_SRCALPHA,wid,hei,32,
0xff,0xff00,0xff0000,0xff000000);
SDL_LockSurface(sprites[i].s);
uint32_t* data = (uint32_t*) sprites[i].s->pixels;
for (int z=0; z>8) % 320;
int y = ((0x0fffff00&*q)>>8) / 320;
if ((y*wid+x<0)||(y*wid+x>=wid*hei)) printf("%i: x=%i y=%i wid=%i hei=%i: bad idea\n",i,x,y,wid,hei);
else data[y*wid+x] = palette[0xff&*q];
}
SDL_UnlockSurface(sprites[i].s);
}
return num_sprites;
}
void update_keyboard()
{
SDL_Event e;
SDL_KeyboardEvent* ke;
SDL_MouseButtonEvent* me;
while (SDL_PollEvent(&e)) {
// why not SDL_PeepEvents(&e, 1, SDL_GETEVENT, SDL_KEYDOWNMASK|SDL_KEYUPMASK)>0)?
switch (e.type) {
case SDL_KEYDOWN:
ke=(SDL_KeyboardEvent*)&e;
keyboard[ke->keysym.sym] = 0xff;
keybuf = ke->keysym.sym;
break;
case SDL_KEYUP:
ke=(SDL_KeyboardEvent*)&e;
keyboard[ke->keysym.sym] = 0;
break;
case SDL_MOUSEBUTTONDOWN:
me=(SDL_MouseButtonEvent*)&e;
switch (me->button) {
case SDL_BUTTON_LEFT: mouse|=4; break;
case SDL_BUTTON_MIDDLE: mouse|=2; break;
case SDL_BUTTON_RIGHT: mouse|=1; break;
}
break;
case SDL_MOUSEBUTTONUP:
me=(SDL_MouseButtonEvent*)&e;
switch (me->button) {
case SDL_BUTTON_LEFT: mouse&=~4; break;
case SDL_BUTTON_MIDDLE: mouse&=~2; break;
case SDL_BUTTON_RIGHT: mouse&=~1; break;
}
break;
}
}
}
void fspplot(fastspr_sprite* sprites, char n, int x, int y)
{
fastspr_sprite sprite = sprites[(char)n];
static SDL_Rect pos;
pos.x = x - sprite.x; pos.y = y - sprite.y;
SDL_BlitSurface(sprite.s, NULL, ArcScreen, &pos);
}