fix crash when PIPE finds PRTI with an invalid channel

This commit is contained in:
jacob1 2014-11-29 00:30:05 -05:00
parent 6da5b08fd2
commit 70a815a8c7

View File

@ -454,11 +454,15 @@ void Element_PIPE::pushParticle(Simulation * sim, int i, int count, int original
} }
else if ((r&0xFF) == PT_PRTI) //Pass particles into PRTI for a pipe speed increase else if ((r&0xFF) == PT_PRTI) //Pass particles into PRTI for a pipe speed increase
{ {
int nnx; int portaltmp = sim->parts[r>>8].tmp;
for (nnx=0; nnx<80; nnx++) if (portaltmp >= CHANNELS)
if (!sim->portalp[sim->parts[r>>8].tmp][count][nnx].type) portaltmp = CHANNELS-1;
else if (portaltmp < 0)
portaltmp = 0;
for (int nnx = 0; nnx < 80; nnx++)
if (!sim->portalp[portaltmp][count][nnx].type)
{ {
transfer_pipe_to_part(sim, sim->parts+i, &(sim->portalp[sim->parts[r>>8].tmp][count][nnx])); transfer_pipe_to_part(sim, sim->parts+i, &(sim->portalp[portaltmp][count][nnx]));
count++; count++;
break; break;
} }
@ -480,11 +484,15 @@ void Element_PIPE::pushParticle(Simulation * sim, int i, int count, int original
} }
else if ((r&0xFF) == PT_PRTI) //Pass particles into PRTI for a pipe speed increase else if ((r&0xFF) == PT_PRTI) //Pass particles into PRTI for a pipe speed increase
{ {
int nnx; int portaltmp = sim->parts[r>>8].tmp;
for (nnx=0; nnx<80; nnx++) if (portaltmp >= CHANNELS)
if (!sim->portalp[sim->parts[r>>8].tmp][count][nnx].type) portaltmp = CHANNELS-1;
else if (portaltmp < 0)
portaltmp = 0;
for (int nnx = 0; nnx < 80; nnx++)
if (!sim->portalp[portaltmp][count][nnx].type)
{ {
transfer_pipe_to_part(sim, sim->parts+i, &(sim->portalp[sim->parts[r>>8].tmp][count][nnx])); transfer_pipe_to_part(sim, sim->parts+i, &(sim->portalp[portaltmp][count][nnx]));
count++; count++;
break; break;
} }