diff options
Diffstat (limited to 'src/simulation/Simulation.cpp')
| -rw-r--r-- | src/simulation/Simulation.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 596a226..9cac3cf 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -1881,7 +1881,6 @@ void Simulation::init_can_move() for (t=0;t<PT_NUM;t++) { // make them eat things - can_move[t][PT_VOID] = 1; can_move[t][PT_BHOL] = 1; can_move[t][PT_NBHL] = 1; can_move[t][PT_STKM] = 0; @@ -1891,8 +1890,9 @@ void Simulation::init_can_move() can_move[t][PT_INVIS] = 3; //stop CNCT being displaced by other particles can_move[t][PT_CNCT] = 0; - //Powered void behaviour varies on powered state + //void behaviour varies with powered state and ctype can_move[t][PT_PVOD] = 3; + can_move[t][PT_VOID] = 3; } for (t=0;t<PT_NUM;t++) { @@ -1955,9 +1955,22 @@ int Simulation::eval_move(int pt, int nx, int ny, unsigned *rr) } if ((r&0xFF)==PT_PVOD) { - if (parts[r>>8].life == 10) result = 1; + if (parts[r>>8].life == 10) + { + if(!parts[r>>8].ctype || (parts[r>>8].ctype==pt)!=(parts[r>>8].tmp&1)) + result = 1; + else + result = 0; + } else result = 0; } + if ((r&0xFF)==PT_VOID) + { + if(!parts[r>>8].ctype || (parts[r>>8].ctype==pt)!=(parts[r>>8].tmp&1)) + result = 1; + else + result = 0; + } } if (bmap[ny/CELL][nx/CELL]) { @@ -2084,8 +2097,8 @@ int Simulation::try_move(int i, int x, int y, int nx, int ny) } if ((r&0xFF)==PT_VOID || (r&0xFF)==PT_PVOD) //this is where void eats particles { - if(!parts[r>>8].ctype || (parts[r>>8].ctype==parts[i].type)!=(parts[r>>8].tmp&1)) - kill_part(i); + //void ctype already checked in eval_move + kill_part(i); return 0; } if ((r&0xFF)==PT_BHOL || (r&0xFF)==PT_NBHL) //this is where blackhole eats particles |
