mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-10 23:02:03 +00:00
- greenslime.
This commit is contained in:
parent
d4ee8a1c48
commit
44fc4f9243
1 changed files with 75 additions and 77 deletions
|
@ -2336,10 +2336,10 @@ void movetransports_d(void)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void greenslime(int i)
|
||||
static void greenslime(DDukeActor *actor)
|
||||
{
|
||||
spritetype* s = &sprite[i];
|
||||
auto t = &hittype[i].temp_data[0];
|
||||
auto s = &actor->s;
|
||||
int* t = &actor->temp_data[0];
|
||||
int sect = s->sectnum;
|
||||
int j;
|
||||
|
||||
|
@ -2359,20 +2359,20 @@ static void greenslime(int i)
|
|||
|
||||
if (sector[sect].floorstat & 1)
|
||||
{
|
||||
deletesprite(i);
|
||||
deletesprite(actor);
|
||||
return;
|
||||
}
|
||||
|
||||
int x;
|
||||
int p = findplayer(s, &x);
|
||||
int p = findplayer(&actor->s, &x);
|
||||
|
||||
if (x > 20480)
|
||||
{
|
||||
hittype[i].timetosleep++;
|
||||
if (hittype[i].timetosleep > SLEEPTIME)
|
||||
actor->timetosleep++;
|
||||
if (actor->timetosleep > SLEEPTIME)
|
||||
{
|
||||
hittype[i].timetosleep = 0;
|
||||
changespritestat(i, 2);
|
||||
actor->timetosleep = 0;
|
||||
changespritestat(actor, 2);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -2386,27 +2386,28 @@ static void greenslime(int i)
|
|||
t[0] = 0;
|
||||
return;
|
||||
}
|
||||
makeitfall(i);
|
||||
makeitfall(actor);
|
||||
s->cstat = 257;
|
||||
s->picnum = GREENSLIME + 2;
|
||||
s->extra = 1;
|
||||
s->pal = 1;
|
||||
j = fi.ifhitbyweapon(&hittype[i]); if (j >= 0)
|
||||
j = fi.ifhitbyweapon(actor);
|
||||
if (j >= 0)
|
||||
{
|
||||
if (j == FREEZEBLAST)
|
||||
return;
|
||||
for (j = 16; j >= 0; j--)
|
||||
{
|
||||
int k = EGS(sprite[i].sectnum, sprite[i].x, sprite[i].y, sprite[i].z, GLASSPIECES + (j % 3), -32, 36, 36, krand() & 2047, 32 + (krand() & 63), 1024 - (krand() & 1023), i, 5);
|
||||
sprite[k].pal = 1;
|
||||
auto k = EGS(s->sectnum, s->x, s->y, s->z, GLASSPIECES + (j % 3), -32, 36, 36, krand() & 2047, 32 + (krand() & 63), 1024 - (krand() & 1023), actor, 5);
|
||||
k->s.pal = 1;
|
||||
}
|
||||
ps[p].actors_killed++;
|
||||
S_PlayActorSound(GLASS_BREAKING, i);
|
||||
deletesprite(i);
|
||||
S_PlayActorSound(GLASS_BREAKING, actor);
|
||||
deletesprite(actor);
|
||||
}
|
||||
else if (x < 1024 && ps[p].quick_kick == 0)
|
||||
{
|
||||
j = getincangle(ps[p].angle.ang.asbuild(), getangle(sprite[i].x - ps[p].posx, sprite[i].y - ps[p].posy));
|
||||
j = getincangle(ps[p].angle.ang.asbuild(), getangle(s->x - ps[p].posx, s->y - ps[p].posy));
|
||||
if (j > -128 && j < 128)
|
||||
ps[p].quick_kick = 14;
|
||||
}
|
||||
|
@ -2420,37 +2421,37 @@ static void greenslime(int i)
|
|||
|
||||
if (t[0] == -4) //On the player
|
||||
{
|
||||
if (sprite[ps[p].i].extra < 1)
|
||||
if (ps[p].GetActor()->s.extra < 1)
|
||||
{
|
||||
t[0] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
setsprite(i, s->x, s->y, s->z);
|
||||
setsprite(actor, s->pos);
|
||||
|
||||
s->ang = ps[p].angle.ang.asbuild();
|
||||
|
||||
if ((PlayerInput(p, SB_FIRE) || (ps[p].quick_kick > 0)) && sprite[ps[p].i].extra > 0)
|
||||
if ((PlayerInput(p, SB_FIRE) || (ps[p].quick_kick > 0)) && ps[p].GetActor()->s.extra > 0)
|
||||
if (ps[p].quick_kick > 0 || (ps[p].curr_weapon != HANDREMOTE_WEAPON && ps[p].curr_weapon != HANDBOMB_WEAPON && ps[p].curr_weapon != TRIPBOMB_WEAPON && ps[p].ammo_amount[ps[p].curr_weapon] >= 0))
|
||||
{
|
||||
for (x = 0; x < 8; x++)
|
||||
{
|
||||
j = EGS(sect, s->x, s->y, s->z - (8 << 8), SCRAP3 + (krand() & 3), -8, 48, 48, krand() & 2047, (krand() & 63) + 64, -(krand() & 4095) - (s->zvel >> 2), i, 5);
|
||||
sprite[j].pal = 6;
|
||||
auto j = EGS(sect, s->x, s->y, s->z - (8 << 8), SCRAP3 + (krand() & 3), -8, 48, 48, krand() & 2047, (krand() & 63) + 64, -(krand() & 4095) - (s->zvel >> 2), actor, 5);
|
||||
j->s.pal = 6;
|
||||
}
|
||||
|
||||
S_PlayActorSound(SLIM_DYING, i);
|
||||
S_PlayActorSound(SQUISHED, i);
|
||||
S_PlayActorSound(SLIM_DYING, actor);
|
||||
S_PlayActorSound(SQUISHED, actor);
|
||||
if ((krand() & 255) < 32)
|
||||
{
|
||||
j = fi.spawn(i, BLOODPOOL);
|
||||
sprite[j].pal = 0;
|
||||
auto j = spawn(actor, BLOODPOOL);
|
||||
j->s.pal = 0;
|
||||
}
|
||||
ps[p].actors_killed++;
|
||||
t[0] = -3;
|
||||
if (ps[p].somethingonplayer == &hittype[i])
|
||||
if (ps[p].somethingonplayer == actor)
|
||||
ps[p].somethingonplayer = nullptr;
|
||||
deletesprite(i);
|
||||
deletesprite(actor);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2475,10 +2476,10 @@ static void greenslime(int i)
|
|||
updatesector(ps[p].posx, ps[p].posy, &ps[p].cursectnum);
|
||||
setpal(&ps[p]);
|
||||
|
||||
StatIterator it(STAT_ACTOR);
|
||||
while ((j = it.NextIndex()) >= 0)
|
||||
DukeStatIterator it(STAT_ACTOR);
|
||||
while (auto ac = it.Next())
|
||||
{
|
||||
if (sprite[j].picnum == CAMERA1) sprite[j].yvel = 0;
|
||||
if (ac->s.picnum == CAMERA1) ac->s.yvel = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2490,8 +2491,9 @@ static void greenslime(int i)
|
|||
|
||||
if (t[3] == 5)
|
||||
{
|
||||
sprite[ps[p].i].extra += -(5 + (krand() & 3));
|
||||
S_PlayActorSound(SLIM_ATTACK, i);
|
||||
auto psp = ps[p].GetActor();
|
||||
psp->s.extra += -(5 + (krand() & 3));
|
||||
S_PlayActorSound(SLIM_ATTACK, actor);
|
||||
}
|
||||
|
||||
if (t[3] < 7) t[3]++;
|
||||
|
@ -2518,7 +2520,7 @@ static void greenslime(int i)
|
|||
{
|
||||
if (ps[p].somethingonplayer == nullptr)
|
||||
{
|
||||
ps[p].somethingonplayer = &hittype[i];
|
||||
ps[p].somethingonplayer = actor;
|
||||
if (t[0] == 3 || t[0] == 2) //Falling downward
|
||||
t[2] = (12 << 8);
|
||||
else t[2] = -(13 << 8); //Climbing up duke
|
||||
|
@ -2526,70 +2528,70 @@ static void greenslime(int i)
|
|||
}
|
||||
}
|
||||
|
||||
j = fi.ifhitbyweapon(&hittype[i]); if (j >= 0)
|
||||
j = fi.ifhitbyweapon(actor);
|
||||
if (j >= 0)
|
||||
{
|
||||
S_PlayActorSound(SLIM_DYING, i);
|
||||
S_PlayActorSound(SLIM_DYING, actor);
|
||||
|
||||
if (ps[p].somethingonplayer == &hittype[i])
|
||||
if (ps[p].somethingonplayer == actor)
|
||||
ps[p].somethingonplayer = nullptr;
|
||||
|
||||
if (j == FREEZEBLAST)
|
||||
{
|
||||
S_PlayActorSound(SOMETHINGFROZE, i); t[0] = -5; t[3] = 0;
|
||||
S_PlayActorSound(SOMETHINGFROZE, actor);
|
||||
t[0] = -5; t[3] = 0;
|
||||
return;
|
||||
}
|
||||
ps[p].actors_killed++;
|
||||
|
||||
if ((krand() & 255) < 32)
|
||||
{
|
||||
j = fi.spawn(i, BLOODPOOL);
|
||||
sprite[j].pal = 0;
|
||||
auto j = spawn(actor, BLOODPOOL);
|
||||
j->s.pal = 0;
|
||||
}
|
||||
|
||||
for (x = 0; x < 8; x++)
|
||||
{
|
||||
j = EGS(sect, s->x, s->y, s->z - (8 << 8), SCRAP3 + (krand() & 3), -8, 48, 48, krand() & 2047, (krand() & 63) + 64, -(krand() & 4095) - (s->zvel >> 2), i, 5);
|
||||
sprite[j].pal = 6;
|
||||
auto j = EGS(sect, s->x, s->y, s->z - (8 << 8), SCRAP3 + (krand() & 3), -8, 48, 48, krand() & 2047, (krand() & 63) + 64, -(krand() & 4095) - (s->zvel >> 2), actor, 5);
|
||||
j->s.pal = 6;
|
||||
}
|
||||
t[0] = -3;
|
||||
deletesprite(i);
|
||||
deletesprite(actor);
|
||||
return;
|
||||
}
|
||||
// All weap
|
||||
if (t[0] == -1) //Shrinking down
|
||||
{
|
||||
makeitfall(i);
|
||||
makeitfall(actor);
|
||||
|
||||
s->cstat &= 65535 - 8;
|
||||
s->picnum = GREENSLIME + 4;
|
||||
|
||||
// if(s->yrepeat > 62)
|
||||
// fi.guts(s,JIBS6,5,myconnectindex);
|
||||
|
||||
if (s->xrepeat > 32) s->xrepeat -= krand() & 7;
|
||||
if (s->yrepeat > 16) s->yrepeat -= krand() & 7;
|
||||
else
|
||||
{
|
||||
s->xrepeat = 40;
|
||||
s->yrepeat = 16;
|
||||
t[5] = -1;
|
||||
actor->temp_actor = nullptr;
|
||||
t[0] = 0;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if (t[0] != -2) getglobalz(i);
|
||||
else if (t[0] != -2) getglobalz(actor);
|
||||
|
||||
if (t[0] == -2) //On top of somebody (an enemy)
|
||||
{
|
||||
makeitfall(i);
|
||||
sprite[t[5]].xvel = 0;
|
||||
auto s5 = actor->temp_actor;
|
||||
makeitfall(actor);
|
||||
s5->s.xvel = 0;
|
||||
|
||||
int l = sprite[t[5]].ang;
|
||||
int l = s5->s.ang;
|
||||
|
||||
s->z = sprite[t[5]].z;
|
||||
s->x = sprite[t[5]].x + (sintable[(l + 512) & 2047] >> 11);
|
||||
s->y = sprite[t[5]].y + (sintable[l & 2047] >> 11);
|
||||
s->z = s5->s.z;
|
||||
s->x = s5->s.x + (sintable[(l + 512) & 2047] >> 11);
|
||||
s->y = s5->s.y + (sintable[l & 2047] >> 11);
|
||||
|
||||
s->picnum = GREENSLIME + 2 + (global_random & 1);
|
||||
|
||||
|
@ -2600,9 +2602,9 @@ static void greenslime(int i)
|
|||
else
|
||||
{
|
||||
t[0] = -1;
|
||||
x = ldist(s, &sprite[t[5]]);
|
||||
x = ldist(actor, s5);
|
||||
if (x < 768) {
|
||||
sprite[t[5]].xrepeat = 0;
|
||||
s5->s.xrepeat = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2612,18 +2614,14 @@ static void greenslime(int i)
|
|||
//Check randomly to see of there is an actor near
|
||||
if (rnd(32))
|
||||
{
|
||||
SectIterator it(sect);
|
||||
while ((j = it.NextIndex()) >= 0)
|
||||
DukeSectIterator it(sect);
|
||||
while (auto a2 = it.Next())
|
||||
{
|
||||
switch (sprite[j].picnum)
|
||||
if (actorinfo[a2->s.picnum].flags & SFLAG_GREENSLIMEFOOD)
|
||||
{
|
||||
case LIZTROOP:
|
||||
case LIZMAN:
|
||||
case PIGCOP:
|
||||
case NEWBEAST:
|
||||
if (ldist(s, &sprite[j]) < 768 && (abs(s->z - sprite[j].z) < 8192)) //Gulp them
|
||||
if (ldist(actor, a2) < 768 && (abs(s->z - a2->s.z) < 8192)) //Gulp them
|
||||
{
|
||||
t[5] = j;
|
||||
actor->temp_actor = a2;
|
||||
t[0] = -2;
|
||||
t[1] = 0;
|
||||
return;
|
||||
|
@ -2639,14 +2637,14 @@ static void greenslime(int i)
|
|||
s->picnum = GREENSLIME;
|
||||
|
||||
if ((krand() & 511) == 0)
|
||||
S_PlayActorSound(SLIM_ROAM, i);
|
||||
S_PlayActorSound(SLIM_ROAM, actor);
|
||||
|
||||
if (t[0] == 2)
|
||||
{
|
||||
s->zvel = 0;
|
||||
s->cstat &= (65535 - 8);
|
||||
|
||||
if ((sector[sect].ceilingstat & 1) || (hittype[i].ceilingz + 6144) < s->z)
|
||||
if ((sector[sect].ceilingstat & 1) || (actor->ceilingz + 6144) < s->z)
|
||||
{
|
||||
s->z += 2048;
|
||||
t[0] = 3;
|
||||
|
@ -2656,10 +2654,10 @@ static void greenslime(int i)
|
|||
else
|
||||
{
|
||||
s->cstat |= 8;
|
||||
makeitfall(i);
|
||||
makeitfall(actor);
|
||||
}
|
||||
|
||||
if (everyothertime & 1) ssp(i, CLIPMASK0);
|
||||
if (everyothertime & 1) ssp(actor, CLIPMASK0);
|
||||
|
||||
if (s->xvel > 96)
|
||||
{
|
||||
|
@ -2680,7 +2678,7 @@ static void greenslime(int i)
|
|||
s->yrepeat = 16 + (sintable[t[1] & 2047] >> 13);
|
||||
|
||||
if (rnd(4) && (sector[sect].ceilingstat & 1) == 0 &&
|
||||
abs(hittype[i].floorz - hittype[i].ceilingz)
|
||||
abs(actor->floorz - actor->ceilingz)
|
||||
< (192 << 8))
|
||||
{
|
||||
s->zvel = 0;
|
||||
|
@ -2697,9 +2695,9 @@ static void greenslime(int i)
|
|||
if (s->zvel > -(2048 + 1024))
|
||||
s->zvel -= 348;
|
||||
s->z += s->zvel;
|
||||
if (s->z < hittype[i].ceilingz + 4096)
|
||||
if (s->z < actor->ceilingz + 4096)
|
||||
{
|
||||
s->z = hittype[i].ceilingz + 4096;
|
||||
s->z = actor->ceilingz + 4096;
|
||||
s->xvel = 0;
|
||||
t[0] = 2;
|
||||
}
|
||||
|
@ -2709,9 +2707,9 @@ static void greenslime(int i)
|
|||
{
|
||||
s->picnum = GREENSLIME + 1;
|
||||
|
||||
makeitfall(i);
|
||||
makeitfall(actor);
|
||||
|
||||
if (s->z > hittype[i].floorz - (8 << 8))
|
||||
if (s->z > actor->floorz - (8 << 8))
|
||||
{
|
||||
s->yrepeat -= 4;
|
||||
s->xrepeat += 2;
|
||||
|
@ -2722,9 +2720,9 @@ static void greenslime(int i)
|
|||
if (s->xrepeat > 8) s->xrepeat -= 4;
|
||||
}
|
||||
|
||||
if (s->z > hittype[i].floorz - 2048)
|
||||
if (s->z > actor->floorz - 2048)
|
||||
{
|
||||
s->z = hittype[i].floorz - 2048;
|
||||
s->z = actor->floorz - 2048;
|
||||
t[0] = 0;
|
||||
s->xvel = 0;
|
||||
}
|
||||
|
@ -3196,7 +3194,7 @@ void moveactors_d(void)
|
|||
case GREENSLIME + 5:
|
||||
case GREENSLIME + 6:
|
||||
case GREENSLIME + 7:
|
||||
greenslime(i);
|
||||
greenslime(&hittype[i]);
|
||||
continue;
|
||||
|
||||
case BOUNCEMINE:
|
||||
|
|
Loading…
Reference in a new issue