summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-06-12 15:30:27 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-06-12 15:30:27 (GMT)
commita270acfc54b3c4e555b7fd6c91093f96641cd52f (patch)
treee2a1ca54cd3844616ad329cd6ca67a14a21df28b /src
parentad677189cbb01da171d67346fa445af0f55ed106 (diff)
downloadpowder-a270acfc54b3c4e555b7fd6c91093f96641cd52f.zip
powder-a270acfc54b3c4e555b7fd6c91093f96641cd52f.tar.gz
OPS loading: don't replace existing particles twice, and clear soap c…
Diffstat (limited to 'src')
-rw-r--r--src/client/GameSave.cpp33
-rw-r--r--src/simulation/Simulation.cpp38
2 files changed, 38 insertions, 33 deletions
diff --git a/src/client/GameSave.cpp b/src/client/GameSave.cpp
index c500fc3..14a5837 100644
--- a/src/client/GameSave.cpp
+++ b/src/client/GameSave.cpp
@@ -625,39 +625,6 @@ void GameSave::readOPS(char * data, int dataLength)
if(i >= partsDataLen) goto fail;
particles[newIndex].tmp2 = partsData[i++];
}
-
- /*if ((sim->player.spwn == 1 && particles[newIndex].type==PT_STKM) || (sim->player2.spwn == 1 && particles[newIndex].type==PT_STKM2))
- {
- particles[newIndex].type = PT_NONE;
- }
- else if (particles[newIndex].type == PT_STKM)
- {
- //STKM_init_legs(&player, newIndex);
- sim->player.spwn = 1;
- sim->player.elem = PT_DUST;
- }
- else if (particles[newIndex].type == PT_STKM2)
- {
- //STKM_init_legs(&player2, newIndex);
- sim->player2.spwn = 1;
- sim->player2.elem = PT_DUST;
- }
- else if (particles[newIndex].type == PT_FIGH)
- {
- //TODO: 100 should be replaced with a macro
- unsigned char fcount = 0;
- while (fcount < 100 && fcount < (sim->fighcount+1) && sim->fighters[fcount].spwn==1) fcount++;
- if (fcount < 100 && sim->fighters[fcount].spwn==0)
- {
- particles[newIndex].tmp = fcount;
- sim->fighters[fcount].spwn = 1;
- sim->fighters[fcount].elem = PT_DUST;
- sim->fighcount++;
- //STKM_init_legs(&(sim->fighters[sim->fcount]), newIndex);
- }
- }
- if (!sim->elements[particles[newIndex].type].Enabled)
- particles[newIndex].type = PT_NONE;*/
newIndex++;
}
}
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp
index 850f978..00fbe96 100644
--- a/src/simulation/Simulation.cpp
+++ b/src/simulation/Simulation.cpp
@@ -37,10 +37,48 @@ int Simulation::Load(int fullX, int fullY, GameSave * save)
x = int(tempPart.x + 0.5f);
y = int(tempPart.y + 0.5f);
+ if ((player.spwn == 1 && tempPart.type==PT_STKM) || (player2.spwn == 1 && tempPart.type==PT_STKM2))
+ {
+ continue;
+ }
+ else if (tempPart.type == PT_SOAP)
+ {
+ tempPart.ctype = 0;
+ }
+ else if (tempPart.type == PT_STKM)
+ {
+ //STKM_init_legs(&player, newIndex);
+ player.spwn = 1;
+ player.elem = PT_DUST;
+ }
+ else if (tempPart.type == PT_STKM2)
+ {
+ //STKM_init_legs(&player2, newIndex);
+ player2.spwn = 1;
+ player2.elem = PT_DUST;
+ }
+ else if (tempPart.type == PT_FIGH)
+ {
+ //TODO: 100 should be replaced with a macro
+ unsigned char fcount = 0;
+ while (fcount < 100 && fcount < (fighcount+1) && fighters[fcount].spwn==1) fcount++;
+ if (fcount < 100 && fighters[fcount].spwn==0)
+ {
+ tempPart.tmp = fcount;
+ fighters[fcount].spwn = 1;
+ fighters[fcount].elem = PT_DUST;
+ fighcount++;
+ //STKM_init_legs(&(sim->fighters[sim->fcount]), newIndex);
+ }
+ }
+ if (!elements[tempPart.type].Enabled)
+ continue;
+
if(r = pmap[y][x])
{
//Replace existing
parts[r>>8] = tempPart;
+ pmap[y][x] = 0;
}
else
{