* "Fix" two bugs introduced by r1450. In quotation marks, because I merely tracked down the offending changes without understanding them. Mild breakage of TX's ROR is expected.

The two bugs are:
    - RPG projectiles don't pass through water
    - can't emerge from slime in bobsp2
* Coalesce Polymer lights that are at the same position for FIRE-like sprites so that only one light is actually generated. This is good for usermaps that have multi-sprite fires, like bobsp2 again.

git-svn-id: https://svn.eduke32.com/eduke32@1967 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2011-08-16 19:17:45 +00:00
parent 6e7a13448d
commit ff5c3b660f

View file

@ -3267,7 +3267,10 @@ ACTOR_STATIC void G_MoveTransports(void)
g_player[p].ps->vel.z += 512; g_player[p].ps->vel.z += 512;
} }
if (onfloorz && sectlotag == 2 && g_player[p].ps->pos.z <= sector[sect].ceilingz /*&& g_player[p].ps->vel.z == 0*/) // r1449-:
if (onfloorz && sectlotag == 2 && g_player[p].ps->pos.z < (sector[sect].ceilingz+1080) && g_player[p].ps->vel.z == 0)
// r1450+, breaks submergible slime in bobsp2:
// if (onfloorz && sectlotag == 2 && g_player[p].ps->pos.z <= sector[sect].ceilingz /*&& g_player[p].ps->vel.z == 0*/)
{ {
k = 1; k = 1;
// if( sprite[j].extra <= 0) break; // if( sprite[j].extra <= 0) break;
@ -3320,8 +3323,8 @@ ACTOR_STATIC void G_MoveTransports(void)
break; break;
case STAT_PROJECTILE: case STAT_PROJECTILE:
// comment out to make RPGs pass through water: // comment out to make RPGs pass through water: (r1450 breaks this)
if (sectlotag != 0) goto JBOLT; // if (sectlotag != 0) goto JBOLT;
case STAT_ACTOR: case STAT_ACTOR:
if ((sprite[j].picnum == SHARK) || (sprite[j].picnum == COMMANDER) || (sprite[j].picnum == OCTABRAIN) if ((sprite[j].picnum == SHARK) || (sprite[j].picnum == COMMANDER) || (sprite[j].picnum == OCTABRAIN)
|| ((sprite[j].picnum >= GREENSLIME) && (sprite[j].picnum <= GREENSLIME+7))) || ((sprite[j].picnum >= GREENSLIME) && (sprite[j].picnum <= GREENSLIME+7)))
@ -8088,7 +8091,9 @@ void G_MoveWorld(void)
{ {
int32_t i, p, j, k = MAXSTATUS-1, pl; int32_t i, p, j, k = MAXSTATUS-1, pl;
#ifdef POLYMER
int32_t numsavedfires = 0;
#endif
do do
{ {
i = headspritestat[k]; i = headspritestat[k];
@ -8222,6 +8227,10 @@ void G_MoveWorld(void)
case BURNING2__STATIC: case BURNING2__STATIC:
{ {
uint32_t color; uint32_t color;
int32_t jj;
static int32_t savedfires[32][4]; // sectnum x y z
/* /*
if (Actor[i].floorz - Actor[i].ceilingz < 128) break; if (Actor[i].floorz - Actor[i].ceilingz < 128) break;
if (s->z > Actor[i].floorz+2048) break; if (s->z > Actor[i].floorz+2048) break;
@ -8235,7 +8244,21 @@ void G_MoveWorld(void)
default: color = 255+(95<<8); break; default: color = 255+(95<<8); break;
} }
for (jj=numsavedfires-1; jj>=0; jj--)
if (savedfires[jj][0]==s->sectnum && savedfires[jj][1]==(s->x>>3) &&
savedfires[jj][2]==(s->y>>3) && savedfires[jj][3]==(s->z>>7))
break;
if (jj==-1 && numsavedfires<32)
{
jj = numsavedfires;
G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD2, color, PR_LIGHT_PRIO_HIGH_GAME); G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD2, color, PR_LIGHT_PRIO_HIGH_GAME);
savedfires[jj][0] = s->sectnum;
savedfires[jj][1] = s->x>>3;
savedfires[jj][2] = s->y>>3;
savedfires[jj][3] = s->z>>7;
numsavedfires++;
}
} }
break; break;