-init_space_dots() {
- int i,b;
- for(i = 0; i<MAXSPACEDOTS; i++) {
- sdot[i].x = rnd()*(XSIZE-5);
- sdot[i].y = rnd()*(YSIZE-5);
- sdot[i].z = MAXDUSTDEPTH*sqrt(rnd());
- b = (MAXDUSTDEPTH - sdot[i].z) * 255.0 / MAXDUSTDEPTH;
- sdot[i].color = SDL_MapRGB(surf_screen->format, b, b, b);
- }
-}
-
-void
-make_bang_dots(int xbang, int ybang, int dx, int dy, SDL_Surface *s, int power) {
-
- // TODO - stop generating dots after a certain amount of time has passed, to cope with slower CPUs.
- // TODO - generate and display dots in a circular buffer
-
- int x,y,endcount;
- Uint16 *rawpixel,c;
- double theta,r;
- int begin_generate;
-
- begin_generate = SDL_GetTicks();
-
- SDL_LockSurface(s);
- rawpixel = (Uint16 *) s->pixels;
-
- //for(n = 0; n <= power/2; n++) {
-
- endcount = 0;
- while (endcount<3) {
- for(x = 0; x<s->w; x++) {
- for(y = 0; y<s->h; y++) {
- c = rawpixel[s->pitch/2*y + x];
- if(c && c != s->format->colorkey) {
-
- theta = rnd()*M_PI*2;
-
- r = 1-(rnd()*rnd());
-
- bdot[bd2].dx = (power/50.0)*45.0*cos(theta)*r + dx;
- bdot[bd2].dy = (power/50.0)*45.0*sin(theta)*r + dy;
- bdot[bd2].x = x + xbang;
- bdot[bd2].y = y + ybang;
-
- // Replace the last few bang dots with the pixels from the exploding object
- bdot[bd2].c = (endcount>0)?c:0;
- bdot[bd2].life = 100;
- bdot[bd2].decay = rnd()*3 + 1;
+new_bang_dots(struct sprite *s)
+{
+ int i, n, x, y;
+ uint16_t *pixel, c;
+ uint32_t colorkey;
+ int row_inc;
+ double theta, r;
+ SDL_Surface *img = s->image;
+
+ n = 20;
+ pixel = img->pixels;
+ row_inc = img->pitch/sizeof(uint16_t) - img->w;
+ colorkey = img->format->colorkey;
+
+ if(SDL_MUSTLOCK(img)) { SDL_LockSurface(img); }
+
+ for(i=0; i<n; i++) {
+ pixel = img->pixels;
+ for(y=0; y<img->h; y++) {
+ for(x = 0; x<img->w; x++) {
+ c = *pixel++;
+ if(c && c != colorkey) {
+ theta = frnd()*M_PI*2;
+ r = frnd(); r = 1 - r*r;
+
+ bdot[bd2].dx = 45*r*cos(theta) + s->dx;
+ bdot[bd2].dy = 45*r*sin(theta) + s->dy;
+ bdot[bd2].x = x + s->x;
+ bdot[bd2].y = y + s->y;
+ //bdot[bd2].c = (i < n-3) ? 0 : c;
+ bdot[bd2].life = frnd() * 99;
+ bdot[bd2].decay = frnd()*3 + 1;