mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 11:10:47 +00:00
actors.c: factor out 4 almost identical code instances into proj_spawn_and_sound
Most differences are handled with function parameters, except that one instance checked SpriteProjectile[i].spawns for being >0 instead of >=0. The factored function always checks for >=0. git-svn-id: https://svn.eduke32.com/eduke32@2794 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
35e4f19ceb
commit
650d859a6f
1 changed files with 40 additions and 84 deletions
|
@ -2449,18 +2449,50 @@ ACTOR_STATIC void A_HandleBeingSpitOn(DukePlayer_t *ps)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void proj_spawn_and_sound(int32_t i, const vec3_t *davect, int32_t do_radius_damage)
|
||||||
|
{
|
||||||
|
if (SpriteProjectile[i].spawns >= 0)
|
||||||
|
{
|
||||||
|
int32_t k = A_Spawn(i,SpriteProjectile[i].spawns);
|
||||||
|
|
||||||
|
if (davect)
|
||||||
|
Bmemcpy(&sprite[k],davect,sizeof(vec3_t));
|
||||||
|
|
||||||
|
if (SpriteProjectile[i].sxrepeat > 4)
|
||||||
|
sprite[k].xrepeat=SpriteProjectile[i].sxrepeat;
|
||||||
|
if (SpriteProjectile[i].syrepeat > 4)
|
||||||
|
sprite[k].yrepeat=SpriteProjectile[i].syrepeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SpriteProjectile[i].isound >= 0)
|
||||||
|
A_PlaySound(SpriteProjectile[i].isound,i);
|
||||||
|
|
||||||
|
if (do_radius_damage)
|
||||||
|
{
|
||||||
|
spritetype *const s = &sprite[i];
|
||||||
|
int32_t x;
|
||||||
|
|
||||||
|
s->extra=SpriteProjectile[i].extra;
|
||||||
|
|
||||||
|
if (SpriteProjectile[i].extra_rand > 0)
|
||||||
|
s->extra += (krand()&SpriteProjectile[i].extra_rand);
|
||||||
|
|
||||||
|
x = s->extra;
|
||||||
|
A_RadiusDamage(i,SpriteProjectile[i].hitradius, x>>2,x>>1,x-(x>>2),x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ACTOR_STATIC void G_MoveWeapons(void)
|
ACTOR_STATIC void G_MoveWeapons(void)
|
||||||
{
|
{
|
||||||
int32_t i = headspritestat[STAT_PROJECTILE], j=0, k, f, nexti, p, q;
|
int32_t i = headspritestat[STAT_PROJECTILE], j=0, k, f, p, q;
|
||||||
vec3_t davect;
|
vec3_t davect;
|
||||||
int32_t x, ll;
|
int32_t x, ll;
|
||||||
uint32_t qq;
|
uint32_t qq;
|
||||||
spritetype *s;
|
|
||||||
|
|
||||||
while (i >= 0)
|
while (i >= 0)
|
||||||
{
|
{
|
||||||
nexti = nextspritestat[i];
|
const int32_t nexti = nextspritestat[i];
|
||||||
s = &sprite[i];
|
spritetype *const s = &sprite[i];
|
||||||
|
|
||||||
if (s->sectnum < 0)
|
if (s->sectnum < 0)
|
||||||
KILLIT(i);
|
KILLIT(i);
|
||||||
|
@ -2495,33 +2527,7 @@ ACTOR_STATIC void G_MoveWeapons(void)
|
||||||
Did this cause the bug with prematurely exploding projectiles? */
|
Did this cause the bug with prematurely exploding projectiles? */
|
||||||
if (s->yvel < 1)
|
if (s->yvel < 1)
|
||||||
{
|
{
|
||||||
|
proj_spawn_and_sound(i, NULL, 1);
|
||||||
if (SpriteProjectile[i].spawns >= 0)
|
|
||||||
{
|
|
||||||
k = A_Spawn(i,SpriteProjectile[i].spawns);
|
|
||||||
|
|
||||||
// Bmemcpy(&sprite[k],&davect,sizeof(vec3_t));
|
|
||||||
/*
|
|
||||||
sprite[k].x = dax;
|
|
||||||
sprite[k].y = day;
|
|
||||||
sprite[k].z = daz;
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (SpriteProjectile[i].sxrepeat > 4)
|
|
||||||
sprite[k].xrepeat=SpriteProjectile[i].sxrepeat;
|
|
||||||
if (SpriteProjectile[i].syrepeat > 4)
|
|
||||||
sprite[k].yrepeat=SpriteProjectile[i].syrepeat;
|
|
||||||
}
|
|
||||||
if (SpriteProjectile[i].isound >= 0)
|
|
||||||
A_PlaySound(SpriteProjectile[i].isound,i);
|
|
||||||
|
|
||||||
s->extra=SpriteProjectile[i].extra;
|
|
||||||
|
|
||||||
if (SpriteProjectile[i].extra_rand > 0)
|
|
||||||
s->extra += (krand()&SpriteProjectile[i].extra_rand);
|
|
||||||
|
|
||||||
x = s->extra;
|
|
||||||
A_RadiusDamage(i,SpriteProjectile[i].hitradius, x>>2,x>>1,x-(x>>2),x);
|
|
||||||
|
|
||||||
KILLIT(i);
|
KILLIT(i);
|
||||||
}
|
}
|
||||||
|
@ -2604,27 +2610,7 @@ ACTOR_STATIC void G_MoveWeapons(void)
|
||||||
{
|
{
|
||||||
if (SpriteProjectile[i].workslike & PROJECTILE_EXPLODEONTIMER)
|
if (SpriteProjectile[i].workslike & PROJECTILE_EXPLODEONTIMER)
|
||||||
{
|
{
|
||||||
if (SpriteProjectile[i].spawns >= 0)
|
proj_spawn_and_sound(i, &davect, 1);
|
||||||
{
|
|
||||||
k = A_Spawn(i,SpriteProjectile[i].spawns);
|
|
||||||
|
|
||||||
Bmemcpy(&sprite[k],&davect,sizeof(vec3_t));
|
|
||||||
|
|
||||||
if (SpriteProjectile[i].sxrepeat > 4)
|
|
||||||
sprite[k].xrepeat=SpriteProjectile[i].sxrepeat;
|
|
||||||
if (SpriteProjectile[i].syrepeat > 4)
|
|
||||||
sprite[k].yrepeat=SpriteProjectile[i].syrepeat;
|
|
||||||
}
|
|
||||||
if (SpriteProjectile[i].isound >= 0)
|
|
||||||
A_PlaySound(SpriteProjectile[i].isound,i);
|
|
||||||
|
|
||||||
s->extra=SpriteProjectile[i].extra;
|
|
||||||
|
|
||||||
if (SpriteProjectile[i].extra_rand > 0)
|
|
||||||
s->extra += (krand()&SpriteProjectile[i].extra_rand);
|
|
||||||
|
|
||||||
x = s->extra;
|
|
||||||
A_RadiusDamage(i,SpriteProjectile[i].hitradius, x>>2,x>>1,x-(x>>2),x);
|
|
||||||
}
|
}
|
||||||
KILLIT(i);
|
KILLIT(i);
|
||||||
}
|
}
|
||||||
|
@ -2699,19 +2685,7 @@ ACTOR_STATIC void G_MoveWeapons(void)
|
||||||
actor[j].picnum = s->picnum;
|
actor[j].picnum = s->picnum;
|
||||||
actor[j].extra += SpriteProjectile[i].extra;
|
actor[j].extra += SpriteProjectile[i].extra;
|
||||||
|
|
||||||
if (SpriteProjectile[i].spawns >= 0)
|
proj_spawn_and_sound(i, &davect, 0);
|
||||||
{
|
|
||||||
k = A_Spawn(i,SpriteProjectile[i].spawns);
|
|
||||||
Bmemcpy(&sprite[k],&davect,sizeof(vec3_t));
|
|
||||||
|
|
||||||
if (SpriteProjectile[i].sxrepeat > 4)
|
|
||||||
sprite[k].xrepeat=SpriteProjectile[i].sxrepeat;
|
|
||||||
if (SpriteProjectile[i].syrepeat > 4)
|
|
||||||
sprite[k].yrepeat=SpriteProjectile[i].syrepeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SpriteProjectile[i].isound >= 0)
|
|
||||||
A_PlaySound(SpriteProjectile[i].isound,i);
|
|
||||||
|
|
||||||
if (!(SpriteProjectile[i].workslike & PROJECTILE_FORCEIMPACT))
|
if (!(SpriteProjectile[i].workslike & PROJECTILE_FORCEIMPACT))
|
||||||
KILLIT(i);
|
KILLIT(i);
|
||||||
|
@ -2806,26 +2780,8 @@ ACTOR_STATIC void G_MoveWeapons(void)
|
||||||
|
|
||||||
if (SpriteProjectile[i].workslike & PROJECTILE_RPG)
|
if (SpriteProjectile[i].workslike & PROJECTILE_RPG)
|
||||||
{
|
{
|
||||||
if (SpriteProjectile[i].spawns > 0)
|
proj_spawn_and_sound(i, &davect, 1);
|
||||||
{
|
|
||||||
k = A_Spawn(i,SpriteProjectile[i].spawns);
|
|
||||||
Bmemcpy(&sprite[k],&davect,sizeof(vec3_t));
|
|
||||||
|
|
||||||
if (SpriteProjectile[i].sxrepeat > 4)
|
|
||||||
sprite[k].xrepeat=SpriteProjectile[i].sxrepeat;
|
|
||||||
if (SpriteProjectile[i].syrepeat > 4)
|
|
||||||
sprite[k].yrepeat=SpriteProjectile[i].syrepeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SpriteProjectile[i].isound >= 0)
|
|
||||||
A_PlaySound(SpriteProjectile[i].isound,i);
|
|
||||||
|
|
||||||
s->extra=SpriteProjectile[i].extra;
|
|
||||||
if (SpriteProjectile[i].extra_rand > 0)
|
|
||||||
s->extra += (krand()&SpriteProjectile[i].extra_rand);
|
|
||||||
|
|
||||||
A_RadiusDamage(i,SpriteProjectile[i].hitradius,
|
|
||||||
s->extra>>2,s->extra>>1,s->extra-(s->extra>>2),s->extra);
|
|
||||||
KILLIT(i);
|
KILLIT(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue