summaryrefslogtreecommitdiff
path: root/src/simulation/Simulation.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-07-25 17:32:10 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-07-25 17:32:10 (GMT)
commitb9e16d4bc6a1a8e018a70f248abdb5aca8cb8133 (patch)
treed84da22ec16d28ad778942518587073b03ff388f /src/simulation/Simulation.cpp
parent1e5eba3583960624a811cde461a34901c74f1b8c (diff)
downloadpowder-b9e16d4bc6a1a8e018a70f248abdb5aca8cb8133.zip
powder-b9e16d4bc6a1a8e018a70f248abdb5aca8cb8133.tar.gz
TPT: Prevent STKM falling through activated PVOD with a ctype that isn't STKM 637ee194e0c
Diffstat (limited to 'src/simulation/Simulation.cpp')
-rw-r--r--src/simulation/Simulation.cpp23
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