summaryrefslogtreecommitdiff
path: root/src/elements
diff options
context:
space:
mode:
authorjacksonmj <mj-pt@jacksonmj.co.uk>2012-02-03 23:35:44 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-02-05 14:45:29 (GMT)
commit6bdc05cc40a89b6454fdbaca7a2315a07f085bf9 (patch)
treeddda52ecac10186b524f397983ebcb2c116fba02 /src/elements
parenta4ad6ee428759346604437f416e27606b6ce09a1 (diff)
downloadpowder-6bdc05cc40a89b6454fdbaca7a2315a07f085bf9.zip
powder-6bdc05cc40a89b6454fdbaca7a2315a07f085bf9.tar.gz
Separate loop for updating life, and add SPRK life checks to most electronics
Diffstat (limited to 'src/elements')
-rw-r--r--src/elements/aray.c2
-rw-r--r--src/elements/dlay.c2
-rw-r--r--src/elements/emp.c2
-rw-r--r--src/elements/pcln.c2
-rw-r--r--src/elements/pvod.c2
-rw-r--r--src/elements/sprk.c14
-rw-r--r--src/elements/stor.c2
-rw-r--r--src/elements/wire.c7
8 files changed, 19 insertions, 14 deletions
diff --git a/src/elements/aray.c b/src/elements/aray.c
index 713fcc4..cce5e2d 100644
--- a/src/elements/aray.c
+++ b/src/elements/aray.c
@@ -11,7 +11,7 @@ int update_ARAY(UPDATE_FUNC_ARGS) {
r = pmap[y+ry][x+rx];
if (!r)
continue;
- if ((r&0xFF)==PT_SPRK) {
+ if ((r&0xFF)==PT_SPRK && parts[r>>8].life<4) {
int destroy = (parts[r>>8].ctype==PT_PSCN)?1:0;
int nostop = (parts[r>>8].ctype==PT_INST)?1:0;
for (docontinue = 1, nxx = 0, nyy = 0, nxi = rx*-1, nyi = ry*-1; docontinue; nyy+=nyi, nxx+=nxi) {
diff --git a/src/elements/dlay.c b/src/elements/dlay.c
index c91b69b..9fa32d5 100644
--- a/src/elements/dlay.c
+++ b/src/elements/dlay.c
@@ -19,7 +19,7 @@ int update_DLAY(UPDATE_FUNC_ARGS) {
r = pmap[y+ry][x+rx];
if (!r)
continue;
- if ((r&0xFF)==PT_SPRK && parts[i].life==0 && parts[r>>8].ctype==PT_PSCN)
+ if ((r&0xFF)==PT_SPRK && parts[i].life==0 && parts[r>>8].life<4 && parts[r>>8].ctype==PT_PSCN)
{
parts[i].life = (int)(parts[i].temp-273.15);
}
diff --git a/src/elements/emp.c b/src/elements/emp.c
index a7978a3..a9b555b 100644
--- a/src/elements/emp.c
+++ b/src/elements/emp.c
@@ -11,7 +11,7 @@ int update_EMP(UPDATE_FUNC_ARGS) {
r = pmap[y+ry][x+rx];
if (!r)
continue;
- if ((r&0xFF)==PT_SPRK)
+ if ((r&0xFF)==PT_SPRK && parts[r>>8].life<4)
{
ok=1;
break;
diff --git a/src/elements/pcln.c b/src/elements/pcln.c
index e9c8d5b..aecd89c 100644
--- a/src/elements/pcln.c
+++ b/src/elements/pcln.c
@@ -11,7 +11,7 @@ int update_PCLN(UPDATE_FUNC_ARGS) {
r = pmap[y+ry][x+rx];
if (!r)
continue;
- if ((r&0xFF)==PT_SPRK)
+ if ((r&0xFF)==PT_SPRK && parts[r>>8].life<4)
{
if (parts[r>>8].ctype==PT_PSCN)
parts[i].life = 10;
diff --git a/src/elements/pvod.c b/src/elements/pvod.c
index 2663efe..6ff508b 100644
--- a/src/elements/pvod.c
+++ b/src/elements/pvod.c
@@ -11,7 +11,7 @@ int update_PVOD(UPDATE_FUNC_ARGS) {
r = pmap[y+ry][x+rx];
if (!r)
continue;
- if ((r&0xFF)==PT_SPRK)
+ if ((r&0xFF)==PT_SPRK && parts[r>>8].life<4)
{
if (parts[r>>8].ctype==PT_PSCN)
parts[i].life = 10;
diff --git a/src/elements/sprk.c b/src/elements/sprk.c
index c0ded2d..67b8132 100644
--- a/src/elements/sprk.c
+++ b/src/elements/sprk.c
@@ -119,7 +119,7 @@ int update_SPRK(UPDATE_FUNC_ARGS) {
pavg = parts_avg(r>>8, i,PT_INSL);
- if ((rt==PT_SWCH||(rt==PT_SPRK&&parts[r>>8].ctype==PT_SWCH)) && pavg!=PT_INSL) // make sparked SWCH turn off correctly
+ if ((rt==PT_SWCH||(rt==PT_SPRK&&parts[r>>8].ctype==PT_SWCH)) && pavg!=PT_INSL && parts[i].life<4) // make sparked SWCH turn off correctly
{
if (rt==PT_SWCH&&ct==PT_PSCN&&parts[r>>8].life<10) {
parts[r>>8].life = 10;
@@ -130,12 +130,12 @@ int update_SPRK(UPDATE_FUNC_ARGS) {
parts[r>>8].life = 9;
}
}
- else if ((ct==PT_PSCN||ct==PT_NSCN) && (rt==PT_PUMP||rt==PT_GPMP||rt==PT_HSWC||rt==PT_PBCN)) // PROP_PTOGGLE, Maybe? We seem to use 2 different methods for handling actived elements, this one seems better. Yes, use this one for new elements, PCLN is different for compatibility with existing saves
+ else if ((ct==PT_PSCN||ct==PT_NSCN) && (rt==PT_PUMP||rt==PT_GPMP||rt==PT_HSWC||rt==PT_PBCN) && parts[i].life<4) // PROP_PTOGGLE, Maybe? We seem to use 2 different methods for handling actived elements, this one seems better. Yes, use this one for new elements, PCLN is different for compatibility with existing saves
{
if (ct==PT_PSCN) parts[r>>8].life = 10;
else if (ct==PT_NSCN && parts[r>>8].life>=10) parts[r>>8].life = 9;
}
- else if ((ct==PT_PSCN||ct==PT_NSCN) && (rt==PT_LCRY&&abs(rx)<2&&abs(ry)<2))
+ else if ((ct==PT_PSCN||ct==PT_NSCN) && (rt==PT_LCRY&&abs(rx)<2&&abs(ry)<2) && parts[i].life<4)
{
if (ct==PT_PSCN && parts[r>>8].tmp == 0) parts[r>>8].tmp = 2;
else if (ct==PT_NSCN && parts[r>>8].tmp == 3) parts[r>>8].tmp = 1;
@@ -150,7 +150,7 @@ int update_SPRK(UPDATE_FUNC_ARGS) {
conduct_sprk = 0;
- if (ct==PT_METL && (rt==PT_NTCT||rt==PT_PTCT||rt==PT_INWR||(rt==PT_SPRK&&(parts[r>>8].ctype==PT_NTCT||parts[r>>8].ctype==PT_PTCT))) && pavg!=PT_INSL)
+ if (ct==PT_METL && (rt==PT_NTCT||rt==PT_PTCT||rt==PT_INWR||(rt==PT_SPRK&&(parts[r>>8].ctype==PT_NTCT||parts[r>>8].ctype==PT_PTCT))) && pavg!=PT_INSL && parts[i].life<4)
{
parts[r>>8].temp = 473.0f;
if (rt==PT_NTCT||rt==PT_PTCT)
@@ -182,7 +182,7 @@ int update_SPRK(UPDATE_FUNC_ARGS) {
if (conduct_sprk) {
if (rt==PT_WATR||rt==PT_SLTW) {
- if (parts[r>>8].life==0 && (parts[i].life<2 || ((r>>8)<i && parts[i].life<3)))
+ if (parts[r>>8].life==0 && parts[i].life<3)
{
part_change_type(r>>8,x+rx,y+ry,PT_SPRK);
if (rt==PT_WATR) parts[r>>8].life = 6;
@@ -191,12 +191,12 @@ int update_SPRK(UPDATE_FUNC_ARGS) {
}
}
else if (rt==PT_INST) {
- if (parts[i].life>=3&&parts[r>>8].life==0)
+ if (parts[r>>8].life==0 && parts[i].life<4)
{
flood_parts(x+rx,y+ry,PT_SPRK,PT_INST,-1, 0);//spark the wire
}
}
- else if (parts[r>>8].life==0 && (parts[i].life<3 || ((r>>8)<i && parts[i].life<4))) {
+ else if (parts[r>>8].life==0 && parts[i].life<4) {
parts[r>>8].life = 4;
parts[r>>8].ctype = rt;
part_change_type(r>>8,x+rx,y+ry,PT_SPRK);
diff --git a/src/elements/stor.c b/src/elements/stor.c
index 42802a4..b84f54f 100644
--- a/src/elements/stor.c
+++ b/src/elements/stor.c
@@ -20,7 +20,7 @@ int update_STOR(UPDATE_FUNC_ARGS) {
parts[i].pavg[1] = parts[r>>8].ctype;
kill_part(r>>8);
}
- if(parts[i].tmp && (r&0xFF)==PT_SPRK && parts[r>>8].ctype==PT_PSCN)
+ if(parts[i].tmp && (r&0xFF)==PT_SPRK && parts[r>>8].ctype==PT_PSCN && parts[r>>8].life<4)
{
for(ry1 = 1; ry1 >= -1; ry1--){
for(rx1 = 0; rx1 >= -1 && rx1 <= 1; rx1 = -rx1-rx1+1){ // Oscilate the X starting at 0, 1, -1, 3, -5, etc (Though stop at -1)
diff --git a/src/elements/wire.c b/src/elements/wire.c
index e48e131..2177ec7 100644
--- a/src/elements/wire.c
+++ b/src/elements/wire.c
@@ -29,7 +29,12 @@ int update_WIRE(UPDATE_FUNC_ARGS) {
r = pmap[y+ry][x+rx];
if (!r)
continue;
- if((r&0xFF)==PT_SPRK && parts[r>>8].ctype==PT_PSCN){parts[i].ctype=1; parts[r>>8].life=0; return 0;}
+ if((r&0xFF)==PT_SPRK && parts[r>>8].life<4 && parts[r>>8].ctype==PT_PSCN)
+ {
+ parts[i].ctype=1;
+ parts[r>>8].life=0;
+ return 0;
+ }
else if((r&0xFF)==PT_NSCN && parts[i].tmp==1){create_part(-1, x+rx, y+ry, PT_SPRK);}
else if((r&0xFF)==PT_WIRE && parts[r>>8].tmp==1 && !parts[i].tmp){count++;}
}