summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/elementdata.c4
-rw-r--r--src/elements/brel.c1
-rw-r--r--src/elements/elec.c2
-rw-r--r--src/elements/exot.c65
-rw-r--r--src/elements/warp.c18
-rw-r--r--src/powder.c3
6 files changed, 79 insertions, 14 deletions
diff --git a/src/elementdata.c b/src/elementdata.c
index 0d68900..68fa3e3 100644
--- a/src/elementdata.c
+++ b/src/elementdata.c
@@ -127,7 +127,7 @@ part_type ptypes[PT_NUM] =
{"BCLN", PIXPACK(0xFFD040), 0.0f, 0.00f * CFDS, 0.97f, 0.50f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 12, 1, 1, 100, SC_SPECIAL, R_TEMP+0.0f +273.15f, 251, "Breakable Clone.", ST_NONE, TYPE_SOLID|PROP_LIFE_DEC|PROP_LIFE_KILL_DEC, &update_BCLN, NULL},
{"LOVE", PIXPACK(0xFF30FF), 0.0f, 0.00f * CFDS, 0.00f, 0.00f, 0.0f, 0.0f, 0.0f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, 100, SC_CRACKER2, 373.0f, 40, "Love...", ST_GAS, TYPE_SOLID, &update_MISC, NULL},
{"DEUT", PIXPACK(0x00153F), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 2, 0, 0, 0, 20, 1, 1, 31, SC_NUCLEAR, R_TEMP-2.0f +273.15f, 251, "Deuterium oxide. Volume changes with temp, radioactive with neutrons.", ST_LIQUID, TYPE_LIQUID|PROP_NEUTPENETRATE, &update_DEUT, &graphics_DEUT},
- {"WARP", PIXPACK(0x000000), 0.8f, 0.00f * CFDS, 0.9f, 0.70f, -0.1f, 0.0f, 3.00f, 0.000f * CFDS, 0, 0, 0, 0, 30, 1, 1, 1, SC_NUCLEAR, R_TEMP +273.15f, 100, "Displaces other elements.", ST_GAS, TYPE_GAS|PROP_LIFE_DEC|PROP_LIFE_KILL, &update_WARP, NULL},
+ {"WARP", PIXPACK(0x000000), 0.8f, 0.00f * CFDS, 0.9f, 0.70f, -0.1f, 0.0f, 3.00f, 0.000f * CFDS, 0, 0, 0, 0, 30, 1, 1, 1, SC_NUCLEAR, R_TEMP +273.15f, 100, "Displaces other elements.", ST_GAS, TYPE_GAS|PROP_LIFE_DEC|PROP_LIFE_KILL, &update_WARP, &graphics_WARP},
{"PUMP", PIXPACK(0x0A0A3B), 0.0f, 0.00f * CFDS, 0.95f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 10, 1, 1, 100, SC_POWERED, 273.15f, 0, "Changes pressure to its temp when activated. (use HEAT/COOL).", ST_SOLID, TYPE_SOLID, &update_PUMP, &graphics_PUMP},
{"FWRK", PIXPACK(0x666666), 0.4f, 0.01f * CFDS, 0.99f, 0.95f, 0.0f, 0.4f, 0.00f, 0.000f * CFDS, 1, 0, 0, 0, 1, 1, 1, 97, SC_EXPLOSIVE, R_TEMP+0.0f +273.15f, 100, "First fireworks made, activated by heat/neutrons.", ST_SOLID, TYPE_PART|PROP_LIFE_DEC, &update_FWRK, NULL},
{"PIPE", PIXPACK(0x444444), 0.0f, 0.00f * CFDS, 0.95f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, 100, SC_SOLIDS, 273.15f, 0, "Moves elements around, read FAQ on website for help.", ST_SOLID, TYPE_SOLID|PROP_LIFE_DEC, &update_PIPE, &graphics_PIPE},
@@ -176,7 +176,7 @@ part_type ptypes[PT_NUM] =
{"GEL", PIXPACK(0xFF9900), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 2, 0, 0, 0, 20, 1, 1, 35, SC_LIQUID, R_TEMP-2.0f +273.15f, 29, "Gel. A liquid with variable viscosity and heat conductivity", ST_LIQUID, TYPE_LIQUID|PROP_LIFE_DEC|PROP_NEUTPENETRATE, &update_GEL, &graphics_GEL},
{"TRON", PIXPACK(0x000000), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, 100, SC_SPECIAL, 0.0f, 40, "Smart particles, Travels in straight lines and avoids obstacles. Grows with time.", ST_NONE, TYPE_SOLID|PROP_LIFE_DEC|PROP_LIFE_KILL, &update_TRON, &graphics_TRON},
{"TTAN", PIXPACK(0x909090), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 50, 1, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 251, "Titanium, Higher melting temperature than other metals, blocks all air pressure", ST_SOLID, TYPE_SOLID|PROP_CONDUCTS|PROP_HOT_GLOW|PROP_LIFE_DEC, &update_TTAN, NULL},
- {"EXOT", PIXPACK(0x808080), 0.3f, 0.02f * CFDS, 0.95f, 0.80f, 0.0f, 0.15f, 0.00f, 0.0003f * CFDS, 2, 0, 0, 0, 2, 1, 1, 45, SC_NUCLEAR, R_TEMP-2.0f +273.15f, 29, "Radioactive liquid", ST_LIQUID, TYPE_LIQUID|PROP_NEUTPENETRATE, &update_EXOT, &graphics_EXOT},
+ {"EXOT", PIXPACK(0x404040), 0.3f, 0.02f * CFDS, 0.95f, 0.80f, 0.0f, 0.15f, 0.00f, 0.0003f * CFDS, 2, 0, 0, 0, 2, 1, 1, 46, SC_NUCLEAR, R_TEMP-2.0f +273.15f, 250, "Exotic matter. Explodes with excess exposure to electrons.", ST_LIQUID, TYPE_LIQUID, &update_EXOT, &graphics_EXOT},
/*FREE*/{"BRAN", PIXPACK(0xCCCC00), 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, "Brian 6 S6/B246/3", ST_NONE, TYPE_SOLID|PROP_LIFE, NULL, NULL},
/*FREE*/{"WIND", PIXPACK(0x101010), 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_SPECIAL, 0.0f, 40, "", ST_NONE, ST_NONE, NULL, NULL},
{"HYGN", PIXPACK(0x5070FF), 2.0f, 0.00f * CFDS, 0.99f, 0.30f, -0.10f, 0.00f, 3.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, 1, SC_GAS, R_TEMP+0.0f +273.15f, 251, "Combines with O2 to make WATR", ST_GAS, TYPE_GAS, &update_H2, NULL},
diff --git a/src/elements/brel.c b/src/elements/brel.c
index 06ea363..c97118b 100644
--- a/src/elements/brel.c
+++ b/src/elements/brel.c
@@ -20,6 +20,7 @@ int update_BREL(UPDATE_FUNC_ARGS) {
if (1>rand()%200 && (pv[y/CELL][x/CELL] > 30.0f) && parts[i].temp>9000 && parts[i].life>0)
{
part_change_type(i, x ,y ,PT_EXOT);
+ parts[i].life = 1000;
}
if ((pv[y/CELL][x/CELL] > 10.0f) && (parts[i].life>0)) {
parts[i].temp = parts[i].temp + (pv[y/CELL][x/CELL])/8;
diff --git a/src/elements/elec.c b/src/elements/elec.c
index 919ee87..12f9fac 100644
--- a/src/elements/elec.c
+++ b/src/elements/elec.c
@@ -94,6 +94,8 @@ int update_ELEC(UPDATE_FUNC_ARGS) {
kill_part(i);
return 1;
}
+ if ((r&0xFF)==PT_EXOT)
+ parts[r>>8].tmp2 += 5;
if (ptypes[r&0xFF].properties & PROP_CONDUCTS && ((r&0xFF)!=PT_NBLE||parts[i].temp<2273.15))
{
create_part(-1, x+rx, y+ry, PT_SPRK);
diff --git a/src/elements/exot.c b/src/elements/exot.c
index 234ab9e..81f7c7d 100644
--- a/src/elements/exot.c
+++ b/src/elements/exot.c
@@ -16,20 +16,67 @@
#include <element.h>
int update_EXOT(UPDATE_FUNC_ARGS) {
-
-
+ int r, rt, rx, ry, nb, rrx, rry;
+ for (rx=-2; rx<=2; rx++)
+ for (ry=-2; ry<=2; ry++)
+ if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES) {
+ r = pmap[y+ry][x+rx];
+ if (!r)
+ continue;
+ if ((r&0xFF)==PT_WARP)
+ {
+ if (parts[r>>8].tmp2>2000)
+ if (1>rand()%100)
+ {
+ parts[i].tmp2 += 50;
+ }
+ }
+ }
parts[i].tmp--;
- if (parts[i].tmp<1) {
+ parts[i].tmp2--;
+ if (parts[i].tmp<1 || parts[i].tmp>250)
parts[i].tmp = 250;
+ if (parts[i].tmp2<1)
+ parts[i].tmp2 = 1;
+ else if (parts[i].tmp2>2500)
+ {
+ parts[i].tmp2 = 2500;
+ part_change_type(i, x, y, PT_WARP);
+ parts[i].temp = 10000;
}
-
+ else
+ pv[y/CELL][x/CELL] += (parts[i].tmp2/2000) * CFDS;
+ if (pv[y/CELL][x/CELL]>200 && parts[i].temp>9000 && parts[i].tmp2>200)
+ {
+ part_change_type(i, x, y, PT_WARP);
+ parts[i].tmp2 = 2500;
+ }
return 0;
}
int graphics_EXOT(GRAPHICS_FUNC_ARGS)
{
- *colr = cpart->tmp / 2 + 0x08;
- *colg = cpart->tmp * 2 + 0x28;
- *colb = cpart->tmp / 2 + 0x08;
+ int q = cpart->temp;
+ int b = cpart->tmp;
+ if ((cpart->tmp2 - 1)>rand()%1000)
+ {
+ float frequency = 0.90045;
+ *colr = (sin(frequency*q + 0) * 127 + 255);
+ *colg = (sin(frequency*q + 2) * 127 + 255);
+ *colb = (sin(frequency*q + 4) * 127 + 255);
+ *firea = 100;
+ *firer = 0;
+ *fireg = 0;
+ *fireb = 0;
+ *pixel_mode |= PMODE_FLAT;
+// *pixel_mode |= FIRE_ADD;
+ *pixel_mode |= PMODE_FLARE;
+ }
+ else
+ {
+ float frequency = 0.00045;
+ *colr = (sin(frequency*q + 0) * 127 + (b/1.7));
+ *colg = (sin(frequency*q + 2) * 127 + (b/1.7));
+ *colb = (sin(frequency*q + 4) * 127 + (b/1.7));
*cola = cpart->tmp / 6;
*firea = *cola;
*firer = *colr;
@@ -37,8 +84,6 @@ int graphics_EXOT(GRAPHICS_FUNC_ARGS)
*fireb = *colb;
*pixel_mode |= FIRE_ADD;
*pixel_mode |= PMODE_BLUR;
-
-
-
+ }
return 0;
}
diff --git a/src/elements/warp.c b/src/elements/warp.c
index 27352fd..0108bb9 100644
--- a/src/elements/warp.c
+++ b/src/elements/warp.c
@@ -17,6 +17,14 @@
int update_WARP(UPDATE_FUNC_ARGS) {
int trade, r, rx, ry;
+
+ if (parts[i].tmp2>2000)
+ {
+ parts[i].temp = 10000;
+ pv[y/CELL][x/CELL] += (parts[i].tmp2/2000) * CFDS;
+ if (2>rand()%1000)
+ create_part(-3, x, y, PT_ELEC);
+ }
for ( trade = 0; trade<5; trade ++)
{
rx = rand()%3-1;
@@ -26,12 +34,14 @@ int update_WARP(UPDATE_FUNC_ARGS) {
r = pmap[y+ry][x+rx];
if (!r)
continue;
- if ((r&0xFF)!=PT_WARP&&(r&0xFF)!=PT_STKM&&(r&0xFF)!=PT_STKM2&&(r&0xFF)!=PT_DMND&&(r&0xFF)!=PT_CLNE&&(r&0xFF)!=PT_BCLN&&(r&0xFF)!=PT_PCLN&&(10>=rand()%200))
+ if ((r&0xFF)!=PT_WARP&&(r&0xFF)!=PT_STKM&&(r&0xFF)!=PT_STKM2&&(r&0xFF)!=PT_DMND&&(r&0xFF)!=PT_CLNE&&(r&0xFF)!=PT_BCLN&&(r&0xFF)!=PT_PCLN)
{
parts[i].x = parts[r>>8].x;
parts[i].y = parts[r>>8].y;
parts[r>>8].x = x;
parts[r>>8].y = y;
+ parts[r>>8].vx = (rand()%4)-1.5;
+ parts[r>>8].vy = (rand()%4)-2;
parts[i].life += 4;
pmap[y][x] = r;
pmap[y+ry][x+rx] = (i<<8)|parts[i].type;
@@ -41,3 +51,9 @@ int update_WARP(UPDATE_FUNC_ARGS) {
}
return 0;
}
+int graphics_WARP(GRAPHICS_FUNC_ARGS)
+{
+ *cola = 0;
+ *pixel_mode &= ~PMODE;
+ return 0;
+}
diff --git a/src/powder.c b/src/powder.c
index f954525..ecd3418 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -163,6 +163,7 @@ void init_can_move()
can_move[PT_PHOT][t] = 2;
}
can_move[PT_ELEC][PT_LCRY] = 2;
+ can_move[PT_ELEC][PT_EXOT] = 2;
can_move[PT_PHOT][PT_LCRY] = 3;//varies according to LCRY life
can_move[PT_PHOT][PT_BIZR] = 2;
@@ -1023,7 +1024,7 @@ inline int create_part(int p, int x, int y, int tv)//the function for creating a
parts[i].vx = 2;
break;
case PT_EXOT:
- parts[i].life = 250;
+ parts[i].life = 1000;
break;
case PT_STKM:
if (player.spwn==0)