diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index f1bad6e9d..d684bdcef 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -285,9 +285,7 @@ void ms(short i) short startwall, endwall, x; int tx, ty; - spritetype* s; - - s = &sprite[i]; + auto s = &sprite[i]; s->x += (s->xvel * (sintable[(s->ang + 512) & 2047])) >> 14; s->y += (s->xvel * (sintable[s->ang & 2047])) >> 14; @@ -361,44 +359,42 @@ void movecyclers(void) void movedummyplayers(void) { - short i, p, nexti; + int i, p; - i = headspritestat[STAT_DUMMYPLAYER]; - while (i >= 0) + StatIterator iti(STAT_DUMMYPLAYER); + while ((i = iti.NextIndex()) >= 0) { - nexti = nextspritestat[i]; - - p = sprite[sprite[i].owner].yvel; + auto spri = &sprite[i]; + auto hti = &hittype[i]; + p = sprite[spri->owner].yvel; if ((!isRR() && ps[p].on_crane >= 0) || sector[ps[p].cursectnum].lotag != 1 || sprite[ps[p].i].extra <= 0) { ps[p].dummyplayersprite = -1; deletesprite(i); - i = nexti; continue; } else { if (ps[p].on_ground && ps[p].on_warping_sector == 1 && sector[ps[p].cursectnum].lotag == 1) { - sprite[i].cstat = CSTAT_SPRITE_BLOCK_ALL; - sprite[i].z = sector[sprite[i].sectnum].ceilingz + (27 << 8); - sprite[i].ang = ps[p].angle.ang.asbuild(); - if (hittype[i].temp_data[0] == 8) - hittype[i].temp_data[0] = 0; - else hittype[i].temp_data[0]++; + spri->cstat = CSTAT_SPRITE_BLOCK_ALL; + spri->z = sector[spri->sectnum].ceilingz + (27 << 8); + spri->ang = ps[p].angle.ang.asbuild(); + if (hti->temp_data[0] == 8) + hti->temp_data[0] = 0; + else hti->temp_data[0]++; } else { - if (sector[sprite[i].sectnum].lotag != 2) sprite[i].z = sector[sprite[i].sectnum].floorz; - sprite[i].cstat = (short)32768; + if (sector[spri->sectnum].lotag != 2) spri->z = sector[spri->sectnum].floorz; + spri->cstat = (short)32768; } } - sprite[i].x += (ps[p].posx - ps[p].oposx); - sprite[i].y += (ps[p].posy - ps[p].oposy); - setsprite(i, sprite[i].x, sprite[i].y, sprite[i].z); - i = nexti; + spri->x += (ps[p].posx - ps[p].oposx); + spri->y += (ps[p].posy - ps[p].oposy); + setsprite(i, spri->x, spri->y, spri->z); } } @@ -410,25 +406,22 @@ void movedummyplayers(void) void moveplayers(void) //Players { - short i, nexti; + int i; int otherx; - spritetype* s; - struct player_struct* p; - i = headspritestat[STAT_PLAYER]; - while (i >= 0) + StatIterator iti(STAT_PLAYER); + while ((i = iti.NextIndex()) >= 0) { - nexti = nextspritestat[i]; - - s = &sprite[i]; - p = &ps[s->yvel]; + auto s = &sprite[i]; + auto ht = &hittype[i]; + auto p = &ps[s->yvel]; if (s->owner >= 0) { if (p->newowner >= 0) //Looking thru the camera { s->x = p->oposx; s->y = p->oposy; - hittype[i].bposz = s->z = p->oposz + PHEIGHT; + ht->bposz = s->z = p->oposz + PHEIGHT; s->ang = p->angle.oang.asbuild(); setsprite(i, s->x, s->y, s->z); } @@ -475,7 +468,7 @@ void moveplayers(void) //Players { // currently alive... - hittype[i].owner = i; + ht->owner = i; if (ud.god == 0) if (fi.ceilingspace(s->sectnum) || fi.floorspace(s->sectnum)) @@ -502,13 +495,12 @@ void moveplayers(void) //Players if (p->holoduke_on == -1) { deletesprite(i); - i = nexti; continue; } - hittype[i].bposx = s->x; - hittype[i].bposy = s->y; - hittype[i].bposz = s->z; + ht->bposx = s->x; + ht->bposy = s->y; + ht->bposz = s->z; s->cstat = 0; @@ -549,8 +541,6 @@ void moveplayers(void) //Players s->shade += (sector[s->sectnum].ceilingshade - s->shade) >> 1; else s->shade += (sector[s->sectnum].floorshade - s->shade) >> 1; - - i = nexti; } } diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index cff93c8c5..173d03857 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -489,7 +489,7 @@ SKIPWALLCHECK: ht->extra = hp1 + (krand() % (hp2 - hp1)); } - if (sprite[j].picnum != TANK && sprite[j].picnum != ROTATEGUN && sprite[j].picnum != RECON && !bossguy(&sprite[j])) + if (sj->picnum != TANK && sj->picnum != ROTATEGUN && sj->picnum != RECON && !bossguy(sj)) { if (sj->xvel < 0) sj->xvel = 0; sj->xvel += (s->extra << 2); @@ -688,14 +688,15 @@ void guts_d(spritetype* s, short gtype, short n, short p) int r4 = krand(); int r5 = krand(); // TRANSITIONAL: owned by a player??? - i = EGS(s->sectnum, s->x + (r5 & 255) - 128, s->y + (r4 & 255) - 128, gutz - (r3 & 8191), gtype, -32, sx, sy, a, 48 + (r2 & 31), -512 - (r1 & 2047), ps[p].i, 5); - if (sprite[i].picnum == JIBS2) + i = EGS(s->sectnum, s->x + (r5 & 255) - 128, s->y + (r4 & 255) - 128, gutz - (r3 & 8191), gtype, -32, sx, sy, a, 48 + (r2 & 31), -512 - (r1 & 2047), ps[p].i, 5); + auto si = &sprite[i]; + if (si->picnum == JIBS2) { - sprite[i].xrepeat >>= 2; - sprite[i].yrepeat >>= 2; + si->xrepeat >>= 2; + si->yrepeat >>= 2; } if (pal != 0) - sprite[i].pal = pal; + si->pal = pal; } } @@ -983,55 +984,54 @@ int ifhitbyweapon_d(int sn) void movefallers_d(void) { - short i, nexti, sect, j; - spritetype* s; - int x; + short sect; + int i, j, x; - i = headspritestat[STAT_FALLER]; - while (i >= 0) + StatIterator iti(STAT_FALLER); + while ((i = iti.NextIndex()) >= 0) { - nexti = nextspritestat[i]; - s = &sprite[i]; + auto s = &sprite[i]; + auto ht = &hittype[i]; sect = s->sectnum; - if (hittype[i].temp_data[0] == 0) + if (ht->temp_data[0] == 0) { s->z -= (16 << 8); - hittype[i].temp_data[1] = s->ang; + ht->temp_data[1] = s->ang; x = s->extra; j = fi.ifhitbyweapon(i); - if (j >= 0) + if (j >= 0) { if (j == FIREEXT || j == RPG || j == RADIUSEXPLOSION || j == SEENINE || j == OOZFILTER) { if (s->extra <= 0) { - hittype[i].temp_data[0] = 1; - j = headspritestat[STAT_FALLER]; - while (j >= 0) + ht->temp_data[0] = 1; + StatIterator itj(STAT_FALLER); + while ((j = itj.NextIndex()) >= 0) { - if (sprite[j].hitag == sprite[i].hitag) + auto sj = &sprite[j]; + if (sj->hitag == s->hitag) { hittype[j].temp_data[0] = 1; - sprite[j].cstat &= (65535 - 64); - if (sprite[j].picnum == CEILINGSTEAM || sprite[j].picnum == STEAM) - sprite[j].cstat |= 32768; + sj->cstat &= (65535 - 64); + if (sj->picnum == CEILINGSTEAM || sj->picnum == STEAM) + sj->cstat |= 32768; } - j = nextspritestat[j]; } } } else { - hittype[i].extra = 0; + ht->extra = 0; s->extra = x; } } - s->ang = hittype[i].temp_data[1]; + s->ang = ht->temp_data[1]; s->z += (16 << 8); } - else if (hittype[i].temp_data[0] == 1) + else if (ht->temp_data[0] == 1) { if (s->lotag > 0) { @@ -1074,11 +1074,10 @@ void movefallers_d(void) } } } - - i = nexti; } } + //--------------------------------------------------------------------------- // // split out of movestandables