summaryrefslogtreecommitdiff
path: root/src/elements
diff options
context:
space:
mode:
authorjacksonmj <mj-pt@jacksonmj.co.uk>2012-03-13 18:26:56 (GMT)
committer jacksonmj <mj-pt@jacksonmj.co.uk>2012-03-13 18:27:47 (GMT)
commitf41af456209923f64f8e1474f7fd06f2889c75b6 (patch)
tree5fa3cec39e2f21a577ef7922e7c5af98b00251d1 /src/elements
parente83a1a21aec87374625106d654dbf8af0ff8117d (diff)
downloadpowder-f41af456209923f64f8e1474f7fd06f2889c75b6.zip
powder-f41af456209923f64f8e1474f7fd06f2889c75b6.tar.gz
Fix fighters not going through portals correctly
Diffstat (limited to 'src/elements')
-rw-r--r--src/elements/prti.c3
-rw-r--r--src/elements/prto.c25
-rw-r--r--src/elements/stkm.c5
3 files changed, 31 insertions, 2 deletions
diff --git a/src/elements/prti.c b/src/elements/prti.c
index 57830ab..8d8f685 100644
--- a/src/elements/prti.c
+++ b/src/elements/prti.c
@@ -31,6 +31,9 @@ int update_PRTI(UPDATE_FUNC_ARGS) {
continue;
}
+ if ((r&0xFF)==PT_STKM || (r&0xFF)==PT_STKM2 || (r&0xFF)==PT_FIGH)
+ continue;// Handling these is a bit more complicated, and is done in STKM_interact()
+
if ((r&0xFF) == PT_SOAP)
detach(r>>8);
diff --git a/src/elements/prto.c b/src/elements/prto.c
index dcbc53c..1e7cde0 100644
--- a/src/elements/prto.c
+++ b/src/elements/prto.c
@@ -47,8 +47,31 @@ int update_PRTO(UPDATE_FUNC_ARGS) {
player.spwn = 0;
if (portalp[parts[i].tmp][randomness][nnx].type==PT_STKM2)
player2.spwn = 0;
+ if (portalp[parts[i].tmp][randomness][nnx].type==PT_FIGH)
+ {
+ fighcount--;
+ fighters[(unsigned char)portalp[parts[i].tmp][randomness][nnx].tmp].spwn = 0;
+ }
np = create_part(-1,x+rx,y+ry,portalp[parts[i].tmp][randomness][nnx].type);
- if (np<0) continue;
+ if (np<0)
+ {
+ if (portalp[parts[i].tmp][randomness][nnx].type==PT_STKM)
+ player.spwn = 1;
+ if (portalp[parts[i].tmp][randomness][nnx].type==PT_STKM2)
+ player2.spwn = 1;
+ if (portalp[parts[i].tmp][randomness][nnx].type==PT_FIGH)
+ {
+ fighcount++;
+ fighters[(unsigned char)portalp[parts[i].tmp][randomness][nnx].tmp].spwn = 1;
+ }
+ continue;
+ }
+ if (parts[np].type==PT_FIGH)
+ {
+ // Release the fighters[] element allocated by create_part, the one reserved when the fighter went into the portal will be used
+ fighters[(unsigned char)parts[np].tmp].spwn = 0;
+ fighters[(unsigned char)portalp[parts[i].tmp][randomness][nnx].tmp].spwn = 1;
+ }
parts[np] = portalp[parts[i].tmp][randomness][nnx];
parts[np].x = x+rx;
parts[np].y = y+ry;
diff --git a/src/elements/stkm.c b/src/elements/stkm.c
index 08cb1ba..d8286d5 100644
--- a/src/elements/stkm.c
+++ b/src/elements/stkm.c
@@ -451,7 +451,10 @@ void STKM_interact(playerst* playerp, int i, int x, int y)
{
portalp[parts[r>>8].tmp][count][nnx] = parts[i];
kill_part(i);
- playerp->spwn = 1;//stop SPWN creating a new STKM while he is in portal
+ //stop new STKM/fighters being created to replace the ones in the portal:
+ playerp->spwn = 1;
+ if (portalp[parts[r>>8].tmp][count][nnx].type==PT_FIGH)
+ fighcount++;
break;
}
}