From 76e4a0ec4237fa6f4181ae5d402c71780d67d271 Mon Sep 17 00:00:00 2001 From: Petr Sykora Date: Tue, 21 Oct 2008 00:52:38 +0200 Subject: [PATCH] new particle efects -- dust when shooting and blood whe dying --- ebulanci.c | 65 ++++++++++++-- graphics/blood.svg | 70 +++++++++++++++ graphics/dust.svg | 255 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 385 insertions(+), 5 deletions(-) create mode 100644 graphics/blood.svg create mode 100644 graphics/dust.svg diff --git a/ebulanci.c b/ebulanci.c index 02e0d44..39f95f9 100644 --- a/ebulanci.c +++ b/ebulanci.c @@ -91,6 +91,8 @@ Sprite *lil[5]; Sprite *bg; Sprite *kul; Sprite *explo; +Sprite *dust; +Sprite *blood; Sprite *brok; Sprite *kulka; Sprite *mine; @@ -279,11 +281,50 @@ void CollideBulletMap(Game *g, double dtime, int i){ BulletExplodes(g, i); FreeArea(p); } + +void BloodColorFunc(double temp, SDL_Color *c) +{ + SDL_Color col={255,255,255,255}; + col.r *=(0.5+0.5*temp); + //col.g *=temp; + //col.b *=temp; + //col.unused *=temp*temp; + if (c != 0) memcpy(c, &col, sizeof(SDL_Color)); +} + +void BloodParticles(Game *g, double dtime, int lid) +{ + int i; + double a; + double v; + Particle *p; + + for(i = 0; i < 5; i ++){ + p = malloc(sizeof(Particle)); + memset(p, 0, sizeof(Particle)); + a = RandD(0.0, 20.0); + v = RandD(0.0, 2.0); + p->x = g->Lilanek[lid].Pos.x-g->Lilanek[lid].BSize.x*0.5; + p->y = g->Lilanek[lid].Pos.y-g->Lilanek[lid].BSize.y*0.5; + p->t = 1.0; + p->vx = v*sin(a); + p->vy = v*cos(a); + p->fx = 1.5; + p->fy = 1.5; + p->vt = 0.0-1.0; + p->s = blood; + p->tf = &BloodColorFunc; + p->z = 1; + AddParticle(p); + }; +} + void LilanekKilled(Game *g, double dtime, int BulletID, int LilanekID){ int i; g->Bullet[BulletID].Exists = 0; g->Lilanek[LilanekID].Deaths ++; g->Lilanek[g->Bullet[BulletID].lid].Frags ++; + BloodParticles(g, dtime, LilanekID); SpawnLilanek(g, LilanekID); for(i=0; inoWID; i++){ g->Lilanek[LilanekID].Ammo[i] = 0; @@ -538,6 +579,16 @@ void SpawnBullet(Game *g, double dtime, int lid, int bid){ FreeArea(LArea); }; +void DustColorFunc(double temp, SDL_Color *c) +{ + SDL_Color col={255,255,255,255}; + col.r *=temp; + col.g *=temp; + col.b *=temp; + col.unused *=temp*temp; + if (c != 0) memcpy(c, &col, sizeof(SDL_Color)); +} + void ShootParticles(Game *g, double dtime, int lid) { int i; @@ -545,18 +596,20 @@ void ShootParticles(Game *g, double dtime, int lid) double v; Particle *p; - for(i = 1; i < 20; i ++){ + for(i = 1; i < 10; i ++){ p = malloc(sizeof(Particle)); memset(p, 0, sizeof(Particle)); a = RandD(0.0, 2*M_PI); v = RandD(0.0, 2.0); - p->x = g->Lilanek[lid].Pos.x; - p->y = g->Lilanek[lid].Pos.y; + p->x = g->Lilanek[lid].Pos.x-g->Lilanek[lid].BSize.x*0.5; + p->y = g->Lilanek[lid].Pos.y-g->Lilanek[lid].BSize.y*0.5; p->t = 1.0; p->vx = v*sin(a); p->vy = v*cos(a); - p->vt = 0.0-1.0; - p->s = explo; + p->vt = 0.0-2.0; + p->s = dust; + p->z = 1; + p->tf = &DustColorFunc; AddParticle(p); }; } @@ -956,6 +1009,8 @@ int InitAll(Game **g){ bg = LoadSpriteSVG("graphics/bg.svg", 16.0, 15.0); kul = LoadSpriteSVG("graphics/kul.svg", 0.5, 0.5); explo = LoadSpriteSVG("graphics/exp.svg", 0.5, 0.5); + dust = LoadSpriteSVG("graphics/dust.svg", 0.5, 0.5); + blood = LoadSpriteSVG("graphics/blood.svg", 0.5, 0.5); brok = LoadSpriteSVG("graphics/brok.svg", 0.5, 0.5); kulka = LoadSpriteSVG("graphics/kulka.svg", 0.1, 0.1); mine = LoadSpriteSVG("graphics/mine.svg", 0.5, 0.5); diff --git a/graphics/blood.svg b/graphics/blood.svg new file mode 100644 index 0000000..02aa545 --- /dev/null +++ b/graphics/blood.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/graphics/dust.svg b/graphics/dust.svg new file mode 100644 index 0000000..32d39f5 --- /dev/null +++ b/graphics/dust.svg @@ -0,0 +1,255 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.11.4.GIT