Fix WARP destroying DMND

If WARP moved in its update function, then the x/y variables in the main
loop were out of date. When the normal movement code ran, changes were
made to the wrong place in the pmap. This resulted in some particles
with low IDs being destroyed by the addition of WARP+SING.

This change might also fix the WARP+PRTI crash that I never managed to
reproduce.
This commit is contained in:
jacksonmj 2012-01-20 23:35:28 +08:00 committed by Simon Robertshaw
parent 32c9ff3099
commit a9c198dd46

View File

@ -1706,8 +1706,6 @@ void update_particles_i(pixel *vid, int start, int inc)
for (i=0; i<=parts_lastActiveIndex; i++)
if (parts[i].type)
{
lx = parts[i].x;
ly = parts[i].y;
t = parts[i].type;
if (t<0 || t>=PT_NUM)
{
@ -2121,12 +2119,21 @@ void update_particles_i(pixel *vid, int start, int inc)
{
if ((*(ptypes[t].update_func))(i,x,y,surround_space,nt))
continue;
else if (t==PT_WARP)
{
// Warp does some movement in its update func, update variables to avoid incorrect data in pmap
x = (int)(parts[i].x+0.5f);
y = (int)(parts[i].y+0.5f);
}
}
#ifdef LUACONSOLE
if(lua_el_mode[t])
{
if(luacon_part_update(t,i,x,y,surround_space,nt))
continue;
// Need to update variables, in case they've been changed by Lua
x = (int)(parts[i].x+0.5f);
y = (int)(parts[i].y+0.5f);
}
#endif
if (legacy_enable)//if heat sim is off