CLST+NITR = TNT, Use ARAY to clear large arrays of STOR
This commit is contained in:
parent
d6953be3a8
commit
5e0bec261c
@ -150,7 +150,7 @@ part_type ptypes[PT_NUM] =
|
|||||||
{"ACEL", PIXPACK(0x0099CC), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 1, 1, 1, 100, SC_POWERED, R_TEMP+0.0f +273.15f, 251, "Accelerator", ST_NONE, TYPE_SOLID, &update_ACEL, &graphics_ACEL},
|
{"ACEL", PIXPACK(0x0099CC), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 1, 1, 1, 100, SC_POWERED, R_TEMP+0.0f +273.15f, 251, "Accelerator", ST_NONE, TYPE_SOLID, &update_ACEL, &graphics_ACEL},
|
||||||
{"DCEL", PIXPACK(0x99CC00), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 1, 1, 1, 100, SC_POWERED, R_TEMP+0.0f +273.15f, 251, "Decelerator", ST_NONE, TYPE_SOLID, &update_DCEL, &graphics_DCEL},
|
{"DCEL", PIXPACK(0x99CC00), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 1, 1, 1, 100, SC_POWERED, R_TEMP+0.0f +273.15f, 251, "Decelerator", ST_NONE, TYPE_SOLID, &update_DCEL, &graphics_DCEL},
|
||||||
{"TNT", PIXPACK(0xC05050), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 1, 1, 1, 100, SC_EXPLOSIVE, R_TEMP+0.0f +273.15f, 88, "Explosive.", ST_SOLID, TYPE_SOLID | PROP_NEUTPENETRATE, &update_BANG, NULL},
|
{"TNT", PIXPACK(0xC05050), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 1, 1, 1, 100, SC_EXPLOSIVE, R_TEMP+0.0f +273.15f, 88, "Explosive.", ST_SOLID, TYPE_SOLID | PROP_NEUTPENETRATE, &update_BANG, NULL},
|
||||||
{"IGNC", PIXPACK(0xC0B050), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 1, 0, 0, 0, 1, 1, 1, 100, SC_EXPLOSIVE, R_TEMP+0.0f +273.15f, 88, "Ignition cord.", ST_SOLID, TYPE_PART | PROP_NEUTPENETRATE | PROP_SPARKSETTLE | PROP_LIFE_KILL, &update_IGNT, NULL},
|
{"IGNC", PIXPACK(0xC0B050), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 1, 1, 1, 100, SC_EXPLOSIVE, R_TEMP+0.0f +273.15f, 88, "Ignition cord.", ST_SOLID, TYPE_SOLID | PROP_NEUTPENETRATE | PROP_SPARKSETTLE | PROP_LIFE_KILL, &update_IGNT, NULL},
|
||||||
{"BOYL", PIXPACK(0x0A3200), 1.0f, 0.01f * CFDS, 0.99f, 0.30f, -0.1f, 0.0f, 0.18f, 0.000f * CFDS, 0, 0, 0, 0, 1, 1, 1, 1, SC_GAS, R_TEMP+2.0f +273.15f, 42, "Boyle, variable pressure gas. Expands when heated.", ST_GAS, TYPE_GAS, &update_BOYL, NULL},
|
{"BOYL", PIXPACK(0x0A3200), 1.0f, 0.01f * CFDS, 0.99f, 0.30f, -0.1f, 0.0f, 0.18f, 0.000f * CFDS, 0, 0, 0, 0, 1, 1, 1, 1, SC_GAS, R_TEMP+2.0f +273.15f, 42, "Boyle, variable pressure gas. Expands when heated.", ST_GAS, TYPE_GAS, &update_BOYL, NULL},
|
||||||
/*FREE*/{"LOTE", PIXPACK(0xFF0000), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 0, 0, 100, SC_LIFE, 9000.0f, 40, "Behaves kinda like Living on the Edge S3458/B37/4", ST_NONE, TYPE_SOLID|PROP_LIFE, NULL, NULL},
|
/*FREE*/{"LOTE", PIXPACK(0xFF0000), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 0, 0, 100, SC_LIFE, 9000.0f, 40, "Behaves kinda like Living on the Edge S3458/B37/4", ST_NONE, TYPE_SOLID|PROP_LIFE, NULL, NULL},
|
||||||
/*FREE*/{"FRG2", PIXPACK(0x00FF00), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 0, 0, 100, SC_LIFE, 9000.0f, 40, "Like Frogs rule S124/B3/3", ST_NONE, TYPE_SOLID|PROP_LIFE, NULL, NULL},
|
/*FREE*/{"FRG2", PIXPACK(0x00FF00), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 0, 0, 100, SC_LIFE, 9000.0f, 40, "Like Frogs rule S124/B3/3", ST_NONE, TYPE_SOLID|PROP_LIFE, NULL, NULL},
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <element.h>
|
#include <element.h>
|
||||||
|
|
||||||
int update_ARAY(UPDATE_FUNC_ARGS) {
|
int update_ARAY(UPDATE_FUNC_ARGS) {
|
||||||
int r, nxx, nyy, docontinue, nxi, nyi, rx, ry, nr;
|
int r, nxx, nyy, docontinue, nxi, nyi, rx, ry, nr, ry1, rx1;
|
||||||
if (parts[i].life==0) {
|
if (parts[i].life==0) {
|
||||||
int colored =0;
|
int colored =0;
|
||||||
for (rx=-1; rx<2; rx++)
|
for (rx=-1; rx<2; rx++)
|
||||||
@ -19,54 +19,82 @@ int update_ARAY(UPDATE_FUNC_ARGS) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
r = pmap[y+nyi+nyy][x+nxi+nxx];
|
r = pmap[y+nyi+nyy][x+nxi+nxx];
|
||||||
if (!r) {
|
if (!r) {
|
||||||
int nr = create_part(-1, x+nxi+nxx, y+nyi+nyy, PT_BRAY);
|
int nr = create_part(-1, x+nxi+nxx, y+nyi+nyy, PT_BRAY);
|
||||||
if (nr!=-1) {
|
if (nr!=-1) {
|
||||||
if (destroy) {//if it came from PSCN
|
if (destroy) {//if it came from PSCN
|
||||||
parts[nr].tmp = 2;
|
parts[nr].tmp = 2;
|
||||||
parts[nr].life = 2;
|
parts[nr].life = 2;
|
||||||
} else
|
} else
|
||||||
parts[nr].ctype = colored;
|
parts[nr].ctype = colored;
|
||||||
parts[nr].temp = parts[i].temp;
|
parts[nr].temp = parts[i].temp;
|
||||||
|
}
|
||||||
|
} else if (!destroy) {
|
||||||
|
if ((r&0xFF)==PT_BRAY&&parts[r>>8].tmp==0) {//if it hits another BRAY that isn't red
|
||||||
|
if (nyy!=0 || nxx!=0) {
|
||||||
|
parts[r>>8].life = 1020;//makes it last a while
|
||||||
|
parts[r>>8].tmp = 1;
|
||||||
|
if (!parts[r>>8].ctype)//and colors it if it isn't already
|
||||||
|
parts[r>>8].ctype = colored;
|
||||||
}
|
}
|
||||||
} else if (!destroy) {
|
docontinue = 0;//then stop it
|
||||||
if ((r&0xFF)==PT_BRAY&&parts[r>>8].tmp==0) {//if it hits another BRAY that isn't red
|
} else if ((r&0xFF)==PT_BRAY&&parts[r>>8].tmp==1) {//if it hits one that already was a long life, reset it
|
||||||
if (nyy!=0 || nxx!=0) {
|
parts[r>>8].life = 1020;
|
||||||
parts[r>>8].life = 1020;//makes it last a while
|
//docontinue = 1;
|
||||||
parts[r>>8].tmp = 1;
|
} else if ((r&0xFF)==PT_FILT) {//get color if passed through FILT
|
||||||
if (!parts[r>>8].ctype)//and colors it if it isn't already
|
colored = parts[r>>8].ctype;
|
||||||
parts[r>>8].ctype = colored;
|
//this if prevents BRAY from stopping on certain materials
|
||||||
}
|
} else if ((r&0xFF)!=PT_STOR && (r&0xFF)!=PT_INWR && (r&0xFF)!=PT_ARAY && (r&0xFF)!=PT_WIFI && !((r&0xFF)==PT_SWCH && parts[r>>8].life>=10)) {
|
||||||
docontinue = 0;//then stop it
|
if (nyy!=0 || nxx!=0) {
|
||||||
} else if ((r&0xFF)==PT_BRAY&&parts[r>>8].tmp==1) {//if it hits one that already was a long life, reset it
|
create_part(-1, x+nxi+nxx, y+nyi+nyy, PT_SPRK);
|
||||||
parts[r>>8].life = 1020;
|
|
||||||
//docontinue = 1;
|
|
||||||
}
|
}
|
||||||
else if ((r&0xFF)==PT_FILT) {//get color if passed through FILT
|
//if (!(nostop && (ptypes[r&0xFF].properties&PROP_CONDUCTS))) {
|
||||||
colored = parts[r>>8].ctype;
|
if (!(nostop && parts[r>>8].ctype >= 0 && parts[r>>8].ctype < PT_NUM && (ptypes[parts[r>>8].ctype].properties&PROP_CONDUCTS))) {
|
||||||
//this if prevents BRAY from stopping on certain materials
|
|
||||||
} else if ((r&0xFF)!=PT_INWR && (r&0xFF)!=PT_ARAY && (r&0xFF)!=PT_WIFI && !((r&0xFF)==PT_SWCH && parts[r>>8].life>=10)) {
|
|
||||||
if (nyy!=0 || nxx!=0) {
|
|
||||||
create_part(-1, x+nxi+nxx, y+nyi+nyy, PT_SPRK);
|
|
||||||
}
|
|
||||||
//if (!(nostop && (ptypes[r&0xFF].properties&PROP_CONDUCTS))) {
|
|
||||||
if (!(nostop && parts[r>>8].ctype >= 0 && parts[r>>8].ctype < PT_NUM && (ptypes[parts[r>>8].ctype].properties&PROP_CONDUCTS))) {
|
|
||||||
docontinue = 0;
|
|
||||||
} else {
|
|
||||||
docontinue = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (destroy) {
|
|
||||||
if ((r&0xFF)==PT_BRAY) {
|
|
||||||
parts[r>>8].life = 1;
|
|
||||||
docontinue = 1;
|
|
||||||
//this if prevents red BRAY from stopping on certain materials
|
|
||||||
} else if ((r&0xFF)==PT_INWR || (r&0xFF)==PT_ARAY || (r&0xFF)==PT_WIFI || (r&0xFF)==PT_FILT || ((r&0xFF)==PT_SWCH && parts[r>>8].life>=10)) {
|
|
||||||
docontinue = 1;
|
|
||||||
} else {
|
|
||||||
docontinue = 0;
|
docontinue = 0;
|
||||||
|
} else {
|
||||||
|
docontinue = 1;
|
||||||
|
}
|
||||||
|
} else if((r&0xFF)==PT_STOR) {
|
||||||
|
if(parts[r>>8].tmp)
|
||||||
|
{
|
||||||
|
//Cause STOR to release
|
||||||
|
for(ry1 = 1; ry1 >= -1; ry1--){
|
||||||
|
for(rx1 = 0; rx1 >= -1 && rx1 <= 1; rx1 = -rx1-rx1+1){
|
||||||
|
int np = create_part(-1, x+nxi+nxx+rx1, y+nyi+nyy+ry1, parts[r>>8].tmp);
|
||||||
|
if (np!=-1)
|
||||||
|
{
|
||||||
|
parts[np].temp = parts[r>>8].temp;
|
||||||
|
parts[np].life = parts[r>>8].flags;
|
||||||
|
parts[np].tmp = parts[r>>8].pavg[0];
|
||||||
|
parts[np].ctype = parts[r>>8].pavg[1];
|
||||||
|
parts[r>>8].tmp = 0;
|
||||||
|
parts[r>>8].life = 10;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parts[r>>8].life = 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (destroy) {
|
||||||
|
if ((r&0xFF)==PT_BRAY) {
|
||||||
|
parts[r>>8].life = 1;
|
||||||
|
docontinue = 1;
|
||||||
|
//this if prevents red BRAY from stopping on certain materials
|
||||||
|
} else if ((r&0xFF)==PT_STOR || (r&0xFF)==PT_INWR || (r&0xFF)==PT_ARAY || (r&0xFF)==PT_WIFI || (r&0xFF)==PT_FILT || ((r&0xFF)==PT_SWCH && parts[r>>8].life>=10)) {
|
||||||
|
if((r&0xFF)==PT_STOR)
|
||||||
|
{
|
||||||
|
parts[r>>8].tmp = 0;
|
||||||
|
parts[r>>8].life = 0;
|
||||||
|
}
|
||||||
|
docontinue = 1;
|
||||||
|
} else {
|
||||||
|
docontinue = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//parts[i].life = 4;
|
//parts[i].life = 4;
|
||||||
|
@ -15,6 +15,11 @@ int update_CLST(UPDATE_FUNC_ARGS) {
|
|||||||
part_change_type(i,x,y,PT_PSTS);
|
part_change_type(i,x,y,PT_PSTS);
|
||||||
kill_part(r>>8);
|
kill_part(r>>8);
|
||||||
}
|
}
|
||||||
|
if ((r&0xFF)==PT_NITR)
|
||||||
|
{
|
||||||
|
create_part(i, x, y, PT_BANG);
|
||||||
|
create_part(r>>8, x+rx, y+ry, PT_BANG);
|
||||||
|
}
|
||||||
if ((r&0xFF)==PT_CLST)
|
if ((r&0xFF)==PT_CLST)
|
||||||
{
|
{
|
||||||
if(parts[i].temp <195)
|
if(parts[i].temp <195)
|
||||||
|
Loading…
Reference in New Issue
Block a user