From 3b39a87bd17cec92341b840c77bae4c0b4696c5a Mon Sep 17 00:00:00 2001 From: helixhorned Date: Mon, 15 Apr 2013 10:48:13 +0000 Subject: [PATCH] Fix a couple of issues identified in the preceding commit. - In S_PlaySound(), move the sound index bound check above an indexing. - For A_CheckHitSprite(), and A_FindPlayer(), allow NULL second arg. - In A_ShootWithZvel(), make some one-letter vars be int32_t, making storing safeldist() results in them meaningful. - In MaybeTrainKillEnemies(), remove two redundant checks and move another one further up. - Comment that SIDEBOLT1 will never be translucent as was probably intended. - In G_MoveFX(), fix an always-true comparison. git-svn-id: https://svn.eduke32.com/eduke32@3680 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/source/actors.c | 36 ++++++++++------------ polymer/eduke32/source/gameexec.c | 1 - polymer/eduke32/source/lunatic/control.lua | 1 + polymer/eduke32/source/player.c | 33 +++++++++++--------- polymer/eduke32/source/sector.c | 9 ++++-- polymer/eduke32/source/sounds.c | 2 +- 6 files changed, 43 insertions(+), 39 deletions(-) diff --git a/polymer/eduke32/source/actors.c b/polymer/eduke32/source/actors.c index 57ffc55af..d5fc5aa8e 100644 --- a/polymer/eduke32/source/actors.c +++ b/polymer/eduke32/source/actors.c @@ -765,7 +765,7 @@ static void A_MoveSector(int32_t i) } } -#ifndef LUNATIC +#if !defined LUNATIC # define LIGHTRAD_PICOFS (T5 ? *(script+T5) + (*(script+T5+2))*T4 : 0) #else // SACTION @@ -1367,9 +1367,7 @@ ACTOR_STATIC void G_MoveFX(void) int32_t j; for (SPRITES_OF(STAT_FX, j)) - // XXX: PN is sprite[*i*].picnum - if (PN == MUSICANDSFX && j != i && sprite[j].lotag < 999 && - actor[j].t_data[0] == 1 && + if (j != i && S_IsAmbientSFX(j) && actor[j].t_data[0] == 1 && dist(&sprite[j], &sprite[peekps->i]) > x) { S_StopEnvSound(sprite[j].lotag,j); @@ -1522,8 +1520,6 @@ ACTOR_STATIC void G_MoveStandables(void) int32_t i = headspritestat[STAT_STANDABLE], j, switchpicnum; int32_t l=0, x; - int16_t m; - while (i >= 0) { const int32_t nexti = nextspritestat[i]; @@ -1603,8 +1599,7 @@ ACTOR_STATIC void G_MoveStandables(void) { if (s->owner==-2) { - // XXX: A_FindPlayer() often called with unused *d / x - int32_t p = A_FindPlayer(s,&x); + int32_t p = A_FindPlayer(s, NULL); A_PlaySound(DUKE_GRUNT,g_player[p].ps->i); if (g_player[p].ps->on_crane == i) g_player[p].ps->on_crane = -1; @@ -1692,9 +1687,9 @@ ACTOR_STATIC void G_MoveStandables(void) if (s->owner != -1) { - int32_t p = A_FindPlayer(s,&x); + int32_t p = A_FindPlayer(s, NULL); - if ((j = A_IncurDamage(i)) >= 0) + if (A_IncurDamage(i) >= 0) { if (s->owner == -2) if (g_player[p].ps->on_crane == i) @@ -1861,6 +1856,9 @@ ACTOR_STATIC void G_MoveStandables(void) break; case 32: + { + int16_t m; + l = s->ang; s->ang = T6; @@ -1873,7 +1871,7 @@ ACTOR_STATIC void G_MoveStandables(void) setsprite(i,(vec3_t *)s); - x = A_CheckHitSprite(i,&m); + x = A_CheckHitSprite(i, &m); actor[i].lastvx = x; @@ -1925,6 +1923,7 @@ ACTOR_STATIC void G_MoveStandables(void) A_PlaySound(LASERTRIP_ARMING,i); } break; + } case 33: T2++; @@ -1938,8 +1937,7 @@ ACTOR_STATIC void G_MoveStandables(void) setsprite(i,(vec3_t *)s); - // XXX: m unused - x = A_CheckHitSprite(i,&m); + x = A_CheckHitSprite(i, NULL); s->x = T4; s->y = T5; @@ -2258,7 +2256,8 @@ CLEAR_THE_BOLT2: } s->picnum++; - // XXX: Um, was this 'l' assigned to last at the beginning of this function? + // NOTE: Um, this 'l' was assigned to last at the beginning of this function. + // SIDEBOLT1 never gets translucent as a consequence, unlike BOLT1. if (l&1) s->cstat ^= 2; if ((krand()&1) && sector[sect].floorpicnum == HURTRAIL) @@ -5560,13 +5559,12 @@ static void MaybeTrainKillEnemies(int32_t i, int32_t numguts) { const int32_t nextj = nextspritesect[j]; - if (sprite[j].statnum == STAT_ACTOR && A_CheckEnemySprite(&sprite[j]) && - sprite[j].picnum != SECTOREFFECTOR && sprite[j].picnum != LOCATORS) + if (sprite[j].extra >= 0 && sprite[j].statnum == STAT_ACTOR && A_CheckEnemySprite(&sprite[j])) { int16_t k = sprite[j].sectnum; updatesector(sprite[j].x,sprite[j].y,&k); - if (sprite[j].extra >= 0 && k == sprite[i].sectnum) + if (k == sprite[i].sectnum) { A_DoGutsDir(j,JIBS6,numguts); A_PlaySound(SQUISHED,j); @@ -6220,8 +6218,6 @@ ACTOR_STATIC void G_MoveEffectors(void) //STATNUM 3 case 3: { if (t[4] == 0) break; - A_FindPlayer(s,&x); - // XXX: x is dead here; A_FindPlayer() call necessary? // if(t[5] > 0) { t[5]--; break; } @@ -7479,7 +7475,7 @@ ACTOR_STATIC void G_MoveEffectors(void) //STATNUM 3 sprite[j].cstat &= 32767; A_Spawn(j,SMALLSMOKE); - p = A_FindPlayer(s,&x); + p = A_FindPlayer(s, NULL); ps = g_player[p].ps; x = ldist(&sprite[ps->i], &sprite[j]); diff --git a/polymer/eduke32/source/gameexec.c b/polymer/eduke32/source/gameexec.c index c77d4dafd..a598a7036 100644 --- a/polymer/eduke32/source/gameexec.c +++ b/polymer/eduke32/source/gameexec.c @@ -3968,7 +3968,6 @@ finish_qsprintf: insptr++; { int32_t j; - // Gv_SetVarX(g_iReturnVarID, A_FindPlayer(&sprite[vm.g_i],&j)); aGameVars[g_iReturnVarID].val.lValue = A_FindPlayer(&sprite[vm.g_i],&j); Gv_SetVarX(*insptr++, j); } diff --git a/polymer/eduke32/source/lunatic/control.lua b/polymer/eduke32/source/lunatic/control.lua index 40c292921..a906a4b29 100644 --- a/polymer/eduke32/source/lunatic/control.lua +++ b/polymer/eduke32/source/lunatic/control.lua @@ -1283,6 +1283,7 @@ function _movesprite(spritenum, x, y, z, cliptype) return ffiC.A_MoveSprite(spritenum, vel, cliptype) end +-- NOTE: returns two args (in C version, hit sprite is a pointer input arg) local function A_CheckHitSprite(spr, angadd) local zoff = (spr:isenemy() and 42*256) or (spr.picnum==D.APLAYER and 39*256) or 0 diff --git a/polymer/eduke32/source/player.c b/polymer/eduke32/source/player.c index bd36a96ec..c4d32d1bd 100644 --- a/polymer/eduke32/source/player.c +++ b/polymer/eduke32/source/player.c @@ -521,11 +521,10 @@ static void P_PreFireHitscan(int32_t i, int32_t p, int32_t atwith, static void A_PreFireHitscan(const spritetype *s, vec3_t *srcvect, int32_t *zvel, int16_t *sa, int32_t not_accurate_p) { - int32_t dummydist; - const int32_t j = A_FindPlayer(s, &dummydist); + const int32_t j = A_FindPlayer(s, NULL); const DukePlayer_t *targetps = g_player[j].ps; - int32_t d = safeldist(targetps->i, s); + const int32_t d = safeldist(targetps->i, s); *zvel = ((targetps->pos.z-srcvect->z)<<8) / d; srcvect->z -= (4<<8); @@ -826,8 +825,9 @@ static void Proj_HandleKnee(hitdata_t *hit, int32_t i, int32_t p, int32_t atwith #define MinibossScale(s) (((s)*sprite[i].yrepeat)/80) int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) { - int16_t l, sa, j, k=-1; - int32_t vel, zvel = 0, x, oldzvel; + int16_t sa; + int32_t j, k=-1, l; + int32_t vel, zvel = 0; hitdata_t hit; vec3_t srcvect; spritetype *const s = &sprite[i]; @@ -937,6 +937,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) } else if (!(proj->workslike & PROJECTILE_NOAIM)) { + int32_t x; j = g_player[A_FindPlayer(s,&x)].ps->i; zvel = ((sprite[j].z-srcvect.z)<<8) / (x+1); sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y); @@ -1091,7 +1092,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) { if (!(proj->workslike & PROJECTILE_NOAIM)) { - j = A_FindPlayer(s,&x); + j = A_FindPlayer(s, NULL); sa = getangle(g_player[j].ps->opos.x-srcvect.x,g_player[j].ps->opos.y-srcvect.y); l = safeldist(g_player[j].ps->i, s); @@ -1164,6 +1165,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) } else { + int32_t x; j = g_player[A_FindPlayer(s,&x)].ps->i; zvel = ((sprite[j].z-srcvect.z)<<8) / (x+1); sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y); @@ -1283,7 +1285,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) } else { - j = A_FindPlayer(s,&x); + j = A_FindPlayer(s, NULL); // sa = getangle(g_player[j].ps->opos.x-sx,g_player[j].ps->opos.y-sy); sa += 16-(krand()&31); hit.pos.x = safeldist(g_player[j].ps->i, s); @@ -1291,7 +1293,6 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) } zvel = A_GetShootZvel(i, zvel); - oldzvel = zvel; // NOTE: assigned to after last store to zvel, so redundant if (atwith == SPIT) { @@ -1334,7 +1335,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) sprite[j].clipdist = 4; sa = s->ang+32-(krand()&63); - zvel = oldzvel+512-(krand()&1023); + zvel += 512-(krand()&1023); return j; } @@ -1342,7 +1343,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) case FREEZEBLAST__STATIC: srcvect.z += (3<<8); case RPG__STATIC: - + // XXX: "CODEDUP" if (s->extra >= 0) s->shade = -96; vel = 644; @@ -1361,7 +1362,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) } else { - j = A_FindPlayer(s,&x); + j = A_FindPlayer(s, NULL); sa = getangle(g_player[j].ps->opos.x-srcvect.x,g_player[j].ps->opos.y-srcvect.y); if (PN == BOSS3) srcvect.z -= MinibossScale(32<<8); @@ -1531,12 +1532,15 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) } return j?k:-1; } + case BOUNCEMINE__STATIC: case MORTER__STATIC: + { + int32_t x; if (s->extra >= 0) s->shade = -96; - j = g_player[A_FindPlayer(s,&x)].ps->i; + j = g_player[A_FindPlayer(s, NULL)].ps->i; x = ldist(&sprite[j],s); zvel = -x>>1; @@ -1551,6 +1555,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) srcvect.y+(sintable[(sa+512)&2047]>>8), srcvect.z+(6<<8),atwith,-64,32,32,sa,vel,zvel,i,1); break; + } case GROWSPARK__STATIC: @@ -1569,7 +1574,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) } else { - j = A_FindPlayer(s,&x); + j = A_FindPlayer(s, NULL); srcvect.z -= (4<<8); hit.pos.x = safeldist(g_player[j].ps->i, s); zvel = ((g_player[j].ps->pos.z-srcvect.z) <<8) / hit.pos.x; @@ -1632,7 +1637,7 @@ int32_t A_ShootWithZvel(int32_t i, int32_t atwith, int32_t override_zvel) } else if (s->statnum != STAT_EFFECTOR) { - j = A_FindPlayer(s,&x); + j = A_FindPlayer(s, NULL); l = safeldist(g_player[j].ps->i, s); zvel = ((g_player[j].ps->opos.z-srcvect.z)*512) / l ; } diff --git a/polymer/eduke32/source/sector.c b/polymer/eduke32/source/sector.c index e3fc4c969..82f6e06ae 100644 --- a/polymer/eduke32/source/sector.c +++ b/polymer/eduke32/source/sector.c @@ -205,7 +205,8 @@ int32_t __fastcall A_FindPlayer(const spritetype *s, int32_t *d) { DukePlayer_t *const myps = g_player[myconnectindex].ps; - *d = A_FP_ManhattanDist(myps, s); + if (d) + *d = A_FP_ManhattanDist(myps, s); return myconnectindex; } @@ -225,7 +226,8 @@ int32_t __fastcall A_FindPlayer(const spritetype *s, int32_t *d) } } - *d = closest; + if (d) + *d = closest; return closest_player; } } @@ -2965,7 +2967,8 @@ int32_t A_CheckHitSprite(int32_t i, int16_t *hitsp) 0,&hit,CLIPMASK1); SZ += zoff; - *hitsp = hit.sprite; + if (hitsp) + *hitsp = hit.sprite; if (hit.wall >= 0 && (wall[hit.wall].cstat&16) && A_CheckEnemySprite(&sprite[i])) return 1<<30; diff --git a/polymer/eduke32/source/sounds.c b/polymer/eduke32/source/sounds.c index 21d322242..fc7a2f5a4 100644 --- a/polymer/eduke32/source/sounds.c +++ b/polymer/eduke32/source/sounds.c @@ -705,7 +705,6 @@ int32_t S_PlaySound(int32_t num) if (ud.config.FXDevice < 0) return -1; if (ud.config.SoundToggle==0) return -1; - if (!(ud.config.VoiceToggle&1) && (g_sounds[num].m&4)) return -1; if ((unsigned)num > (unsigned)g_maxSoundPos || (g_sounds[num].filename == NULL && g_sounds[num].filename1 == NULL)) { @@ -713,6 +712,7 @@ int32_t S_PlaySound(int32_t num) return -1; } + if (!(ud.config.VoiceToggle&1) && (g_sounds[num].m&4)) return -1; if ((g_sounds[num].m&8) && ud.lockout) return -1; if (FX_VoiceAvailable(g_sounds[num].pr) == 0) return -1;