Added BCLN LOVE WTF. description on forum post. A fix for loading COAL. made everything use the #defines for cmode (ex. CM_HEAT instead of 5).

This commit is contained in:
Philip
2010-11-15 11:57:37 -05:00
parent 02067b1587
commit 663db5374f
6 changed files with 284 additions and 83 deletions

View File

@@ -108,7 +108,9 @@ typedef struct stamp stamp;
int MSIGN; int MSIGN;
int CGOL; int CGOL;
int ISGOL; int ISGOL;
int ISLOVE;
int GSPEED; int GSPEED;
int love[XRES/9][YRES/9];
int gol[XRES][YRES]; int gol[XRES][YRES];
int gol2[XRES][YRES][NGOL]; int gol2[XRES][YRES][NGOL];
extern sign signs[MAXSIGNS]; extern sign signs[MAXSIGNS];

View File

@@ -5,7 +5,8 @@
#include "defines.h" #include "defines.h"
#include "interface.h" #include "interface.h"
#define CM_COUNT 7 #define CM_COUNT 8//todo: switch cmode==0, ect. with cmode==CM_VEL
#define CM_NOTHING 7
#define CM_FANCY 6 #define CM_FANCY 6
#define CM_HEAT 5 #define CM_HEAT 5
#define CM_BLOB 4 #define CM_BLOB 4
@@ -131,7 +132,10 @@
#define PT_CRAC 90 #define PT_CRAC 90
#define PT_RIME 91 #define PT_RIME 91
#define PT_FOG 92 #define PT_FOG 92
#define PT_NUM 93 #define PT_BCLN 93
#define PT_LOVE 94
#define PT_WTF 95
#define PT_NUM 96
#define R_TEMP 22 #define R_TEMP 22
#define MAX_TEMP 9999 #define MAX_TEMP 9999
@@ -313,8 +317,12 @@ static const part_type ptypes[PT_NUM] =
{"LLIF", PIXPACK(0x505050), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_LIFE, 9000.0f, 40, "Long Life! (5/345)", TYPE_SOLID}, {"LLIF", PIXPACK(0x505050), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_LIFE, 9000.0f, 40, "Long Life! (5/345)", TYPE_SOLID},
{"STAN", PIXPACK(0x5000FF), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_LIFE, 9000.0f, 40, "Stains! (235678/3678)", TYPE_SOLID}, {"STAN", PIXPACK(0x5000FF), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_LIFE, 9000.0f, 40, "Stains! (235678/3678)", TYPE_SOLID},
{"CRAC", PIXPACK(0xFFBE30), 0.00f, 0.00f * CFDS, 0.00f, 1.00f, 0.00f, 0.0f, 0.00f, 0.000f * CFDS, 0, 20, 0, 1, 30, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 251, "cracker64 - Spongey, Made by himself",TYPE_SOLID}, {"CRAC", PIXPACK(0xFFBE30), 0.00f, 0.00f * CFDS, 0.00f, 1.00f, 0.00f, 0.0f, 0.00f, 0.000f * CFDS, 0, 20, 0, 1, 30, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 251, "cracker64 - Spongey, Made by himself",TYPE_SOLID},
{"RIME", PIXPACK(0xCCCCCC), 0.00f, 0.00f * CFDS, 0.00f, 1.00f, 0.00f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 30, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 100, "from FOG",TYPE_SOLID}, {"RIME", PIXPACK(0xCCCCCC), 0.00f, 0.00f * CFDS, 0.00f, 1.00f, 0.00f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 30, 1, 100, SC_SOLIDS, 243.15f, 100, "Not quite Ice",TYPE_SOLID},
{"FOG", PIXPACK(0xAAAAAA), 0.8f, 0.00f * CFDS, 0.4f, 0.70f, -0.1f, 0.0f, 0.99f, 0.000f * CFDS, 0, 0, 0, 0, 30, 1, 1, SC_GAS, R_TEMP+0.0f +273.15f, 100, "hmmm",TYPE_GAS}, {"FOG", PIXPACK(0xAAAAAA), 0.8f, 0.00f * CFDS, 0.4f, 0.70f, -0.1f, 0.0f, 0.99f, 0.000f * CFDS, 0, 0, 0, 0, 30, 1, 1, SC_GAS, 243.15f, 100, "Not quite Steam",TYPE_GAS},
{"BCLN", PIXPACK(0xFFD040), 0.1f, 0.00f * CFDS, 0.97f, 0.50f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 12, 1, 100, SC_SPECIAL, R_TEMP+0.0f +273.15f, 251, "Breakable Clone.", TYPE_SOLID},
{"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, 100, SC_LIFE, 373.0f, 40, "Love...", TYPE_SOLID},
{"WTF", 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, 30, SC_LIQUID, R_TEMP-2.0f +273.15f, 29, "WTF for catelite", TYPE_LIQUID},
//Name Colour Advec Airdrag Airloss Loss Collid Grav Diffus Hotair Fal Burn Exp Mel Hrd M Weights Section H Ins(real world, by triclops200) Description //Name Colour Advec Airdrag Airloss Loss Collid Grav Diffus Hotair Fal Burn Exp Mel Hrd M Weights Section H Ins(real world, by triclops200) Description
}; };
@@ -344,7 +352,7 @@ static part_state pstates[PT_NUM] =
/* PLNT */ {ST_SOLID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_FIRE, 573.0f}, /* PLNT */ {ST_SOLID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_FIRE, 573.0f},
/* ACID */ {ST_LIQUID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f}, /* ACID */ {ST_LIQUID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
/* VOID */ {ST_SOLID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f}, /* VOID */ {ST_SOLID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
/* WTRV */ {ST_GAS, PT_ICEI, 273.0f, PT_DSTW, 371.0f, PT_NONE, 373.0f, PT_NONE, 0.0f}, /* WTRV */ {ST_GAS, PT_RIME, 273.0f, PT_DSTW, 371.0f, PT_NONE, 373.0f, PT_NONE, 0.0f},
/* CNCT */ {ST_SOLID, PT_NONE, 0.0f, PT_LAVA, 1123.0f, PT_NONE, 0.0f, PT_NONE, 0.0f}, /* CNCT */ {ST_SOLID, PT_NONE, 0.0f, PT_LAVA, 1123.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
/* DSTW */ {ST_LIQUID, PT_ICEI, 273.15f, PT_NONE, 0.0f, PT_WTRV, 373.0f, PT_NONE, 0.0f}, /* DSTW */ {ST_LIQUID, PT_ICEI, 273.15f, PT_NONE, 0.0f, PT_WTRV, 373.0f, PT_NONE, 0.0f},
/* SALT */ {ST_SOLID, PT_NONE, 0.0f, PT_LAVA, 1173.0f, PT_NONE, 0.0f, PT_NONE, 0.0f}, /* SALT */ {ST_SOLID, PT_NONE, 0.0f, PT_LAVA, 1173.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
@@ -412,8 +420,11 @@ static part_state pstates[PT_NUM] =
/* GOL */ {ST_NONE, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f}, /* GOL */ {ST_NONE, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
/* GOL */ {ST_NONE, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f}, /* GOL */ {ST_NONE, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
/* Crac */ {ST_SOLID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_FIRE, 22730.0f}, /* Crac */ {ST_SOLID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_FIRE, 22730.0f},
/* RIME */ {ST_SOLID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f}, /* RIME */ {ST_SOLID, PT_NONE, 0.0f, PT_WATR, 273.15f, PT_NONE, 0.0f, PT_NONE, 0.0f},
/* FOG */ {ST_GAS, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f}, /* FOG */ {ST_GAS, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
/* BCLN */ {ST_NONE, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
/* LOVE */ {ST_GAS, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
/* WTF */ {ST_LIQUID, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f, PT_NONE, 0.0f},
}; };
static int grule[NGOL][9] = static int grule[NGOL][9] =
{ {
@@ -432,6 +443,18 @@ static int grule[NGOL][9] =
{0,0,0,2,2,3,0,0,0},//LLIF {0,0,0,2,2,3,0,0,0},//LLIF
{0,0,1,3,0,1,3,3,3},//STAN {0,0,1,3,0,1,3,3,3},//STAN
}; };
static int loverule[9][9] =
{
{0,0,1,1,0,0,0,0,0},
{0,1,0,0,1,1,0,0,0},
{1,0,0,0,0,0,1,0,0},
{1,0,0,0,0,0,0,1,0},
{0,1,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,0},
{1,0,0,0,0,0,1,0,0},
{0,1,0,0,1,1,0,0,0},
{0,0,1,1,0,0,0,0,0},
};
extern int isplayer; extern int isplayer;
extern float player[27]; extern float player[27];

View File

@@ -21,7 +21,7 @@
#include <misc.h> #include <misc.h>
unsigned cmode = 3; unsigned cmode = CM_FIRE;
SDL_Surface *sdl_scrn; SDL_Surface *sdl_scrn;
int sdl_scale = 1; int sdl_scale = 1;
@@ -1107,7 +1107,7 @@ void draw_air(pixel *vid)
int x, y, i, j; int x, y, i, j;
pixel c; pixel c;
if(cmode == 2) if(cmode == CM_PERS)
return; return;
for(y=0; y<YRES/CELL; y++) for(y=0; y<YRES/CELL; y++)
@@ -1270,7 +1270,7 @@ void draw_parts(pixel *vid)
float pt = R_TEMP; float pt = R_TEMP;
for(i = 0; i<NPART; i++) { for(i = 0; i<NPART; i++) {
#ifdef OpenGL #ifdef OpenGL
if(cmode == 6) //If fire mode if(cmode == CM_FANCY) //If fancy mode
{ {
if(t==PT_MWAX) if(t==PT_MWAX)
@@ -1355,14 +1355,14 @@ void draw_parts(pixel *vid)
isplayer = 1; //It's a secret. Tssss... isplayer = 1; //It's a secret. Tssss...
} }
if(cmode==7)//nothing display if(cmode==CM_NOTHING)//nothing display
{ {
cr = PIXR(ptypes[t].pcolors); cr = PIXR(ptypes[t].pcolors);
cg = PIXG(ptypes[t].pcolors); cg = PIXG(ptypes[t].pcolors);
cb = PIXB(ptypes[t].pcolors); cb = PIXB(ptypes[t].pcolors);
blendpixel(vid, nx, ny, cr, cg, cb, 255); blendpixel(vid, nx, ny, cr, cg, cb, 255);
} }
else if(t==PT_MWAX&&cmode == 6) else if(t==PT_MWAX&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1391,6 +1391,42 @@ void draw_parts(pixel *vid)
cb = 20; cb = 20;
blendpixel(vid, nx, ny, cr, cg, cb, 255); blendpixel(vid, nx, ny, cr, cg, cb, 255);
}
else if(t==PT_WTF)
{
if(parts[i].life>=700&&(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY))
{
x = nx/CELL;
y = ny/CELL;
cr = 20;
cg = 20;
cb = 20;
cg += fire_g[y][x];
if(cg > 255) cg = 255;
fire_g[y][x] = cg;
cb += fire_b[y][x];
if(cb > 255) cb = 255;
fire_b[y][x] = cb;
cr += fire_r[y][x];
if(cr > 255) cr = 255;
fire_r[y][x] = cr;
}
else
{
cr = PIXR(ptypes[t].pcolors) + parts[i].life*1;
cg = PIXG(ptypes[t].pcolors) + parts[i].life*2;
cb = PIXB(ptypes[t].pcolors) + parts[i].life*4;
if(cr>=255)
cr = 255;
if(cg>=255)
cg = 255;
if(cb>=255)
cb = 255;
blendpixel(vid, nx, ny, cr, cg, cb, 255);
}
} }
else if(t==PT_ACID) else if(t==PT_ACID)
{ {
@@ -1401,7 +1437,7 @@ void draw_parts(pixel *vid)
cr = PIXR(ptypes[t].pcolors)/s; cr = PIXR(ptypes[t].pcolors)/s;
cg = PIXG(ptypes[t].pcolors)/s; cg = PIXG(ptypes[t].pcolors)/s;
cb = PIXB(ptypes[t].pcolors)/s; cb = PIXB(ptypes[t].pcolors)/s;
if(cmode==6) { if(cmode==CM_FANCY) {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
for(y=-1; y<=1; y++) for(y=-1; y<=1; y++)
@@ -1416,7 +1452,7 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx, ny, cr, cg, cb, 255); blendpixel(vid, nx, ny, cr, cg, cb, 255);
} }
if(cmode==4) if(cmode==CM_BLOB)
{ {
blendpixel(vid, nx+1, ny, cr, cg, cb, 223); blendpixel(vid, nx+1, ny, cr, cg, cb, 223);
blendpixel(vid, nx-1, ny, cr, cg, cb, 223); blendpixel(vid, nx-1, ny, cr, cg, cb, 223);
@@ -1429,7 +1465,7 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx-1, ny+1, cr, cg, cb, 112); blendpixel(vid, nx-1, ny+1, cr, cg, cb, 112);
} }
} }
else if(t==PT_OIL&&cmode == 6) else if(t==PT_OIL&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1444,7 +1480,7 @@ void draw_parts(pixel *vid)
} }
else if(t==PT_NEUT) else if(t==PT_NEUT)
{ {
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors; vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors;
cg = 8; cg = 8;
@@ -1473,7 +1509,7 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32); blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32);
blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32); blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32);
} }
} else if(t==PT_PLUT&&cmode == 6) } else if(t==PT_PLUT&&cmode == CM_FANCY)
{ {
int tempx; int tempx;
int tempy; int tempy;
@@ -1493,7 +1529,7 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx-tempx, ny-tempy, cr, cg, cb, 5); blendpixel(vid, nx-tempx, ny-tempy, cr, cg, cb, 5);
} }
} }
} else if(t==PT_URAN&&cmode == 6) } else if(t==PT_URAN&&cmode == CM_FANCY)
{ {
int tempx; int tempx;
int tempy; int tempy;
@@ -1513,7 +1549,7 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx-tempx, ny-tempy, cr, cg, cb, 5); blendpixel(vid, nx-tempx, ny-tempy, cr, cg, cb, 5);
} }
} }
} else if(t==PT_SLTW&&cmode == 6) } else if(t==PT_SLTW&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1528,7 +1564,7 @@ void draw_parts(pixel *vid)
} }
else if(t==PT_PHOT) else if(t==PT_PHOT)
{ {
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
cg = 0; cg = 0;
cb = 0; cb = 0;
@@ -1595,7 +1631,7 @@ void draw_parts(pixel *vid)
y = ny; y = ny;
blendpixel(vid,x,y,17,217,24,255); blendpixel(vid,x,y,17,217,24,255);
} }
else if(t==PT_LNTG&&cmode == 6) else if(t==PT_LNTG&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1610,7 +1646,7 @@ void draw_parts(pixel *vid)
} }
else if(t==PT_SMKE) else if(t==PT_SMKE)
{ {
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
x = nx/CELL; x = nx/CELL;
y = ny/CELL; y = ny/CELL;
@@ -1643,7 +1679,7 @@ void draw_parts(pixel *vid)
} }
} }
} }
else if(t==PT_WATR&&cmode == 6) else if(t==PT_WATR&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1656,7 +1692,7 @@ void draw_parts(pixel *vid)
} }
} }
} else if(t==PT_DSTW&&cmode == 6) } else if(t==PT_DSTW&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1669,7 +1705,7 @@ void draw_parts(pixel *vid)
} }
} }
} }
else if(t==PT_NITR&&cmode == 6) else if(t==PT_NITR&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1683,7 +1719,7 @@ void draw_parts(pixel *vid)
} }
} }
else if(t==PT_LRBD&&cmode == 6) else if(t==PT_LRBD&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1698,7 +1734,7 @@ void draw_parts(pixel *vid)
} }
else if(t==PT_NBLE&&cmode == 6) else if(t==PT_NBLE&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1714,7 +1750,7 @@ void draw_parts(pixel *vid)
} }
} }
else if(t==PT_GAS&&cmode == 6) else if(t==PT_GAS&&cmode == CM_FANCY)
{ {
for(x=-1; x<=1; x++) for(x=-1; x<=1; x++)
{ {
@@ -1732,7 +1768,7 @@ void draw_parts(pixel *vid)
} }
else if(t==PT_WTRV) else if(t==PT_WTRV)
{ {
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
x = nx/CELL; x = nx/CELL;
y = ny/CELL; y = ny/CELL;
@@ -1767,7 +1803,7 @@ void draw_parts(pixel *vid)
} }
else if(t==PT_THDR) else if(t==PT_THDR)
{ {
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors; vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors;
cg = 16; cg = 16;
@@ -1812,7 +1848,7 @@ void draw_parts(pixel *vid)
fr = 2 * pv[ny/CELL][nx/CELL]; fr = 2 * pv[ny/CELL][nx/CELL];
} }
vid[ny*(XRES+BARSIZE)+nx] = PIXRGB((int)restrict_flt(0x44 + fr*8, 0, 255), (int)restrict_flt(0x88 + fg*8, 0, 255), (int)restrict_flt(0x44 + fb*8, 0, 255)); vid[ny*(XRES+BARSIZE)+nx] = PIXRGB((int)restrict_flt(0x44 + fr*8, 0, 255), (int)restrict_flt(0x88 + fg*8, 0, 255), (int)restrict_flt(0x44 + fb*8, 0, 255));
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
x = nx/CELL; x = nx/CELL;
y = ny/CELL; y = ny/CELL;
@@ -1826,7 +1862,7 @@ void draw_parts(pixel *vid)
if(fr > 255) fr = 255; if(fr > 255) fr = 255;
fire_r[y][x] = fr; fire_r[y][x] = fr;
} }
if(cmode == 4) { if(cmode == CM_BLOB) {
uint8 R = (int)restrict_flt(0x44 + fr*8, 0, 255); uint8 R = (int)restrict_flt(0x44 + fr*8, 0, 255);
uint8 G = (int)restrict_flt(0x88 + fg*8, 0, 255); uint8 G = (int)restrict_flt(0x88 + fg*8, 0, 255);
uint8 B = (int)restrict_flt(0x44 + fb*8, 0, 255); uint8 B = (int)restrict_flt(0x44 + fb*8, 0, 255);
@@ -1846,7 +1882,7 @@ void draw_parts(pixel *vid)
{ {
uint8 GR = 0x50+(parts[i].life*10); uint8 GR = 0x50+(parts[i].life*10);
vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, GR, GR); vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, GR, GR);
if(cmode == 4) { if(cmode == CM_BLOB) {
blendpixel(vid, nx+1, ny, GR, GR, GR, 223); blendpixel(vid, nx+1, ny, GR, GR, GR, 223);
blendpixel(vid, nx-1, ny, GR, GR, GR, 223); blendpixel(vid, nx-1, ny, GR, GR, GR, 223);
blendpixel(vid, nx, ny+1, GR, GR, GR, 223); blendpixel(vid, nx, ny+1, GR, GR, GR, 223);
@@ -1862,7 +1898,7 @@ void draw_parts(pixel *vid)
{ {
uint8 GR = 0x3B+(parts[i].life*19); uint8 GR = 0x3B+(parts[i].life*19);
vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, GR, 10); vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, GR, 10);
if(cmode == 4) { if(cmode == CM_BLOB) {
blendpixel(vid, nx+1, ny, GR, GR, 10, 223); blendpixel(vid, nx+1, ny, GR, GR, 10, 223);
blendpixel(vid, nx-1, ny, GR, GR, 10, 223); blendpixel(vid, nx-1, ny, GR, GR, 10, 223);
blendpixel(vid, nx, ny+1, GR, GR, 10, 223); blendpixel(vid, nx, ny+1, GR, GR, 10, 223);
@@ -1878,7 +1914,7 @@ void draw_parts(pixel *vid)
{ {
uint8 GR = 0x3B+(parts[i].life*19); uint8 GR = 0x3B+(parts[i].life*19);
vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, 10, 10); vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, 10, 10);
if(cmode == 4) { if(cmode == CM_BLOB) {
blendpixel(vid, nx+1, ny, GR, 10, 10, 223); blendpixel(vid, nx+1, ny, GR, 10, 10, 223);
blendpixel(vid, nx-1, ny, GR, 10, 10, 223); blendpixel(vid, nx-1, ny, GR, 10, 10, 223);
blendpixel(vid, nx, ny+1, GR, 10, 10, 223); blendpixel(vid, nx, ny+1, GR, 10, 10, 223);
@@ -1897,7 +1933,7 @@ void draw_parts(pixel *vid)
uint8 R = plasma_data[caddress]; uint8 R = plasma_data[caddress];
uint8 G = plasma_data[caddress+1]; uint8 G = plasma_data[caddress+1];
uint8 B = plasma_data[caddress+2]; uint8 B = plasma_data[caddress+2];
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
cr = R/8; cr = R/8;
cg = G/8; cg = G/8;
@@ -1936,7 +1972,7 @@ void draw_parts(pixel *vid)
uint8 R = hflm_data[caddress]; uint8 R = hflm_data[caddress];
uint8 G = hflm_data[caddress+1]; uint8 G = hflm_data[caddress+1];
uint8 B = hflm_data[caddress+2]; uint8 B = hflm_data[caddress+2];
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
cr = R/8; cr = R/8;
cg = G/8; cg = G/8;
@@ -1975,7 +2011,7 @@ void draw_parts(pixel *vid)
uint8 R = firw_data[caddress]; uint8 R = firw_data[caddress];
uint8 G = firw_data[caddress+1]; uint8 G = firw_data[caddress+1];
uint8 B = firw_data[caddress+2]; uint8 B = firw_data[caddress+2];
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
cr = R/2; cr = R/2;
cg = G/2; cg = G/2;
@@ -2015,7 +2051,7 @@ void draw_parts(pixel *vid)
uint8 R = flm_data[caddress]; uint8 R = flm_data[caddress];
uint8 G = flm_data[caddress+1]; uint8 G = flm_data[caddress+1];
uint8 B = flm_data[caddress+2]; uint8 B = flm_data[caddress+2];
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
cr = R/8; cr = R/8;
cg = G/8; cg = G/8;
@@ -2103,7 +2139,7 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx-1, ny, cr, cg, cb, 64); blendpixel(vid, nx-1, ny, cr, cg, cb, 64);
blendpixel(vid, nx, ny+1, cr, cg, cb, 64); blendpixel(vid, nx, ny+1, cr, cg, cb, 64);
blendpixel(vid, nx, ny-1, cr, cg, cb, 64); blendpixel(vid, nx, ny-1, cr, cg, cb, 64);
if(cmode == 3||cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
cr /= 32; cr /= 32;
cg /= 32; cg /= 32;
@@ -2124,7 +2160,7 @@ void draw_parts(pixel *vid)
else if(t==PT_LAVA || t==PT_SPRK) else if(t==PT_LAVA || t==PT_SPRK)
{ {
vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors; vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors;
if(cmode == 3 || cmode==4 || cmode==6) if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
{ {
if(t == PT_LAVA) if(t == PT_LAVA)
{ {
@@ -2193,7 +2229,7 @@ void draw_parts(pixel *vid)
//blendpixel(vid, nx+1, ny, R, G, B, 255); //blendpixel(vid, nx+1, ny, R, G, B, 255);
} }
} }
if(cmode == 4&&t!=PT_FIRE&&t!=PT_PLSM&&t!=PT_HFLM&&t!=PT_NONE&&t!=PT_ACID&&t!=PT_LCRY&&t!=PT_GLOW&&t!=PT_SWCH&&t!=PT_SMKE&&t!=PT_WTRV&&!(t==PT_FIRW&&parts[i].tmp==3)) if(cmode == CM_BLOB&&t!=PT_FIRE&&t!=PT_PLSM&&t!=PT_HFLM&&t!=PT_NONE&&t!=PT_ACID&&t!=PT_LCRY&&t!=PT_GLOW&&t!=PT_SWCH&&t!=PT_SMKE&&t!=PT_WTRV&&!(t==PT_FIRW&&parts[i].tmp==3))
{ {
if(t==PT_PHOT) { if(t==PT_PHOT) {
cg = 0; cg = 0;

View File

@@ -528,29 +528,29 @@ void draw_svf_ui(pixel *vid_buf)
switch(cmode) switch(cmode)
{ {
case 0: case CM_VEL:
drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x98", 128, 160, 255, 255); drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x98", 128, 160, 255, 255);
break; break;
case 1: case CM_PRESS:
drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x99", 255, 212, 32, 255); drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x99", 255, 212, 32, 255);
break; break;
case 2: case CM_PERS:
drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x9A", 212, 212, 212, 255); drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x9A", 212, 212, 212, 255);
break; break;
case 3: case CM_FIRE:
drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x9B", 255, 0, 0, 255); drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x9B", 255, 0, 0, 255);
drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x9C", 255, 255, 64, 255); drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x9C", 255, 255, 64, 255);
break; break;
case 4: case CM_BLOB:
drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\xBF", 55, 255, 55, 255); drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\xBF", 55, 255, 55, 255);
break; break;
case 5: case CM_HEAT:
drawtext(vid_buf, XRES-27+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\xBE", 255, 0, 0, 255); drawtext(vid_buf, XRES-27+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\xBE", 255, 0, 0, 255);
drawtext(vid_buf, XRES-27+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\xBD", 255, 255, 255, 255); drawtext(vid_buf, XRES-27+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\xBD", 255, 255, 255, 255);
break; break;
case 6: case CM_FANCY:
drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\xC4", 100, 150, 255, 255); drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\xC4", 100, 150, 255, 255);
case 7: case CM_NOTHING:
drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x00", 100, 150, 255, 255); drawtext(vid_buf, XRES-29+BARSIZE/*481*/, YRES+(MENUSIZE-13), "\x00", 100, 150, 255, 255);
break; break;
} }
@@ -1741,39 +1741,39 @@ void set_cmode(int cm)
{ {
cmode = cm; cmode = cm;
itc = 51; itc = 51;
if(cmode==4) if(cmode==CM_BLOB)
{ {
memset(fire_r, 0, sizeof(fire_r)); memset(fire_r, 0, sizeof(fire_r));
memset(fire_g, 0, sizeof(fire_g)); memset(fire_g, 0, sizeof(fire_g));
memset(fire_b, 0, sizeof(fire_b)); memset(fire_b, 0, sizeof(fire_b));
strcpy(itc_msg, "Blob Display"); strcpy(itc_msg, "Blob Display");
} }
else if(cmode==5) else if(cmode==CM_HEAT)
{ {
strcpy(itc_msg, "Heat Display"); strcpy(itc_msg, "Heat Display");
} }
else if(cmode==6) else if(cmode==CM_FANCY)
{ {
memset(fire_r, 0, sizeof(fire_r)); memset(fire_r, 0, sizeof(fire_r));
memset(fire_g, 0, sizeof(fire_g)); memset(fire_g, 0, sizeof(fire_g));
memset(fire_b, 0, sizeof(fire_b)); memset(fire_b, 0, sizeof(fire_b));
strcpy(itc_msg, "Fancy Display"); strcpy(itc_msg, "Fancy Display");
} }
else if(cmode==3) else if(cmode==CM_FIRE)
{ {
memset(fire_r, 0, sizeof(fire_r)); memset(fire_r, 0, sizeof(fire_r));
memset(fire_g, 0, sizeof(fire_g)); memset(fire_g, 0, sizeof(fire_g));
memset(fire_b, 0, sizeof(fire_b)); memset(fire_b, 0, sizeof(fire_b));
strcpy(itc_msg, "Fire Display"); strcpy(itc_msg, "Fire Display");
} }
else if(cmode==2) else if(cmode==CM_PERS)
{ {
memset(fire_bg, 0, XRES*YRES*PIXELSIZE); memset(fire_bg, 0, XRES*YRES*PIXELSIZE);
strcpy(itc_msg, "Persistent Display"); strcpy(itc_msg, "Persistent Display");
} }
else if(cmode==1) else if(cmode==CM_PRESS)
strcpy(itc_msg, "Pressure Display"); strcpy(itc_msg, "Pressure Display");
else if(cmode==7) else if(cmode==CM_NOTHING)
strcpy(itc_msg, "Cracker Display"); strcpy(itc_msg, "Cracker Display");
else else
strcpy(itc_msg, "Velocity Display"); strcpy(itc_msg, "Velocity Display");

View File

@@ -530,6 +530,8 @@ int parse_save(void *save, int size, int replace, int x0, int y0)
else if(i < nf) else if(i < nf)
{ {
parts[fp[i]].type = j; parts[fp[i]].type = j;
if(j == PT_COAL)
parts[fp[i]].tmp = 50;
if(j == PT_PHOT) if(j == PT_PHOT)
parts[fp[i]].ctype = 0x3fffffff; parts[fp[i]].ctype = 0x3fffffff;
parts[fp[i]].x = (float)x; parts[fp[i]].x = (float)x;
@@ -1123,11 +1125,11 @@ int main(int argc, char *argv[])
#ifdef OpenGL #ifdef OpenGL
ClearScreen(); ClearScreen();
#else #else
if(cmode==0 || cmode==1) if(cmode==CM_VEL || cmode==CM_PRESS)
{ {
draw_air(vid_buf); draw_air(vid_buf);
} }
else if(cmode==2) else if(cmode==CM_PERS)
{ {
memcpy(vid_buf, fire_bg, XRES*YRES*PIXELSIZE); memcpy(vid_buf, fire_bg, XRES*YRES*PIXELSIZE);
memset(vid_buf+(XRES*YRES), 0, ((XRES+BARSIZE)*YRES*PIXELSIZE)-(XRES*YRES*PIXELSIZE)); memset(vid_buf+(XRES*YRES), 0, ((XRES+BARSIZE)*YRES*PIXELSIZE)-(XRES*YRES*PIXELSIZE));
@@ -1140,7 +1142,7 @@ int main(int argc, char *argv[])
update_particles(vid_buf); update_particles(vid_buf);
draw_parts(vid_buf); draw_parts(vid_buf);
if(cmode==2) if(cmode==CM_PERS)
{ {
if(!fire_fc) if(!fire_fc)
{ {
@@ -1152,7 +1154,7 @@ int main(int argc, char *argv[])
} }
fire_fc = (fire_fc+1) % 3; fire_fc = (fire_fc+1) % 3;
} }
if(cmode==3||cmode==4||cmode==6) if(cmode==CM_FIRE||cmode==CM_BLOB||cmode==CM_FANCY)
render_fire(vid_buf); render_fire(vid_buf);
render_signs(vid_buf); render_signs(vid_buf);
@@ -1240,35 +1242,35 @@ int main(int argc, char *argv[])
} }
if(sdl_key=='1') if(sdl_key=='1')
{ {
set_cmode(0); set_cmode(CM_VEL);
} }
if(sdl_key=='2') if(sdl_key=='2')
{ {
set_cmode(1); set_cmode(CM_PRESS);
} }
if(sdl_key=='3') if(sdl_key=='3')
{ {
set_cmode(2); set_cmode(CM_PERS);
} }
if(sdl_key=='4') if(sdl_key=='4')
{ {
set_cmode(3); set_cmode(CM_FIRE);
} }
if(sdl_key=='5') if(sdl_key=='5')
{ {
set_cmode(4); set_cmode(CM_BLOB);
} }
if(sdl_key=='6') if(sdl_key=='6')
{ {
set_cmode(5); set_cmode(CM_HEAT);
} }
if(sdl_key=='7') if(sdl_key=='7')
{ {
set_cmode(6); set_cmode(CM_FANCY);
} }
if(sdl_key=='8') if(sdl_key=='8')
{ {
set_cmode(7); set_cmode(CM_NOTHING);
} }
if(sdl_key==SDLK_LEFTBRACKET) { if(sdl_key==SDLK_LEFTBRACKET) {
if(sdl_zoom_trig==1) if(sdl_zoom_trig==1)
@@ -1349,7 +1351,7 @@ int main(int argc, char *argv[])
} }
else if(sdl_key=='c') else if(sdl_key=='c')
{ {
set_cmode((cmode+1) % 8); set_cmode((cmode+1) % CM_COUNT);
if(it > 50) if(it > 50)
it = 50; it = 50;
} }
@@ -1786,9 +1788,9 @@ int main(int argc, char *argv[])
if(x>=(XRES+BARSIZE-(510-476)) && x<=(XRES+BARSIZE-(510-491)) && !bq) if(x>=(XRES+BARSIZE-(510-476)) && x<=(XRES+BARSIZE-(510-491)) && !bq)
{ {
if(b & SDL_BUTTON_LMASK) if(b & SDL_BUTTON_LMASK)
set_cmode((cmode+1) % 8); set_cmode((cmode+1) % CM_COUNT);
if(b & SDL_BUTTON_RMASK) if(b & SDL_BUTTON_RMASK)
set_cmode((cmode+7) % 8); set_cmode((cmode+(CM_COUNT-1)) % CM_COUNT);
save_presets(0); save_presets(0);
} }
if(x>=(XRES+BARSIZE-(510-494)) && x<=(XRES+BARSIZE-(510-509)) && !bq) if(x>=(XRES+BARSIZE-(510-494)) && x<=(XRES+BARSIZE-(510-509)) && !bq)

View File

@@ -830,6 +830,49 @@ void update_particles_i(pixel *vid, int start, int inc)
int starti = (start*-1); int starti = (start*-1);
if(sys_pause&&!framerender) if(sys_pause&&!framerender)
return; return;
if(ISLOVE==1)
{
for(ny=4;ny<YRES-4;ny++)
{
for(nx=4;nx<XRES-4;nx++)
{
r=pmap[ny][nx];
if((r>>8)>=NPART || !r)
{
continue;
}
if(parts[r>>8].type==PT_LOVE)
{
love[nx/9][ny/9] = 1;
}
}
}
for(nx=0;nx<=XRES-4;nx++)
{
for(ny=0;ny<=YRES-4;ny++)
{
if(love[nx/9][ny/9]==1)
{
for(int nnx=0;nnx<9;nnx++)
for(int nny=0;nny<9;nny++)
{
rt=pmap[ny+nny][nx+nnx];
if((rt>>8)>=NPART)
{
continue;
}
if(!rt&&loverule[nnx][nny]==1)
create_part(-1,nx+nnx,ny+nny,PT_LOVE);
if(parts[rt>>8].type==PT_LOVE&&loverule[nnx][nny]==0)
parts[rt>>8].type=PT_NONE;
}
}
love[nx/9][ny/9]=0;
}
}
}
if(ISGOL==1&&CGOL>=GSPEED)//GSPEED is frames per generation if(ISGOL==1&&CGOL>=GSPEED)//GSPEED is frames per generation
{ {
for(nx=4;nx<XRES-4;nx++) for(nx=4;nx<XRES-4;nx++)
@@ -925,7 +968,7 @@ void update_particles_i(pixel *vid, int start, int inc)
ly = parts[i].y; ly = parts[i].y;
t = parts[i].type; t = parts[i].type;
if(parts[i].life && t!=PT_ACID && t!=PT_COAL && t!=PT_WOOD && t!=PT_NBLE && t!=PT_SWCH && t!=PT_STKM && t!=PT_FUSE && t!=PT_FSEP && t!=PT_BCOL && t!=PT_GOL && t!=PT_CRAC) if(parts[i].life && t!=PT_ACID && t!=PT_COAL && t!=PT_WOOD && t!=PT_NBLE && t!=PT_SWCH && t!=PT_STKM && t!=PT_FUSE && t!=PT_FSEP && t!=PT_BCOL && t!=PT_GOL && t!=PT_CRAC && t!=PT_WTF)
{ {
if(!(parts[i].life==10&&(parts[i].type==PT_LCRY||parts[i].type==PT_PCLN||parts[i].type==PT_HSWC))) if(!(parts[i].life==10&&(parts[i].type==PT_LCRY||parts[i].type==PT_PCLN||parts[i].type==PT_HSWC)))
parts[i].life--; parts[i].life--;
@@ -1017,7 +1060,7 @@ void update_particles_i(pixel *vid, int start, int inc)
parts[i].vx *= ptypes[t].loss; parts[i].vx *= ptypes[t].loss;
parts[i].vy *= ptypes[t].loss; parts[i].vy *= ptypes[t].loss;
if(t==PT_GOO && !parts[i].life) if((t==PT_GOO||t==PT_BCLN) && !parts[i].life)
{ {
if(pv[y/CELL][x/CELL]>1.0f) if(pv[y/CELL][x/CELL]>1.0f)
{ {
@@ -1901,16 +1944,18 @@ void update_particles_i(pixel *vid, int start, int inc)
parts[i].temp -= 50.0f; parts[i].temp -= 50.0f;
ISGOL=1; ISGOL=1;
} }
else if(t==PT_LOVE)
ISLOVE=1;
else if(t==PT_CRAC) else if(t==PT_CRAC)
{ {
if(pv[y/CELL][x/CELL]<=3&&pv[y/CELL][x/CELL]>=-3) if(pv[y/CELL][x/CELL]<=3&&pv[y/CELL][x/CELL]>=-3)
{ {
for(nx=-1; nx<2; nx++) for(nx=-1; nx<2; nx++)
for(ny=-1; ny<2; ny++) for(ny=-1; ny<2; ny++)
if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny)) if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny))
{ {
r = pmap[y+ny][x+nx]; r = pmap[y+ny][x+nx];
if((r>>8)>=NPART || !r || parts[i].temp>374.0f) if((r>>8)>=NPART || !r || parts[i].temp>374.0f)
continue; continue;
if(parts[r>>8].type==PT_WATR&&33>=rand()/(RAND_MAX/100)+1) if(parts[r>>8].type==PT_WATR&&33>=rand()/(RAND_MAX/100)+1)
{ {
@@ -1963,7 +2008,7 @@ void update_particles_i(pixel *vid, int start, int inc)
} }
} }
} }
for(nx=-1; nx<2; nx++) for(nx=-1; nx<2; nx++)
for(ny=-1; ny<2; ny++) for(ny=-1; ny<2; ny++)
if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny)) if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny))
{ {
@@ -1977,8 +2022,8 @@ void update_particles_i(pixel *vid, int start, int inc)
parts[i].life -= parts[i].life/3; parts[i].life -= parts[i].life/3;
} }
} }
if(parts[i].temp>=374) if(parts[i].temp>=374)
for(nx=-1; nx<2; nx++) for(nx=-1; nx<2; nx++)
for(ny=-1; ny<2; ny++) for(ny=-1; ny<2; ny++)
if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny)) if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny))
{ {
@@ -1997,6 +2042,8 @@ void update_particles_i(pixel *vid, int start, int inc)
} }
else if(t==PT_FOG) else if(t==PT_FOG)
{ {
if(parts[i].temp>=373.15)
t = parts[i].type = PT_WTRV;
for(nx=-1; nx<2; nx++) for(nx=-1; nx<2; nx++)
for(ny=-1; ny<2; ny++) for(ny=-1; ny<2; ny++)
if(x+nx>=0 && y+ny>0 && if(x+nx>=0 && y+ny>0 &&
@@ -2008,8 +2055,6 @@ void update_particles_i(pixel *vid, int start, int inc)
if(pstates[parts[r>>8].type].state==ST_SOLID&&5>=rand()%50&&parts[i].life==0&&!(parts[r>>8].type==PT_CLNE||parts[r>>8].type==PT_PCLN)) if(pstates[parts[r>>8].type].state==ST_SOLID&&5>=rand()%50&&parts[i].life==0&&!(parts[r>>8].type==PT_CLNE||parts[r>>8].type==PT_PCLN))
{ {
t = parts[i].type = PT_RIME; t = parts[i].type = PT_RIME;
parts[i].vx = 0;
parts[i].vy = 0;
} }
if(parts[r>>8].type==PT_SPRK) if(parts[r>>8].type==PT_SPRK)
{ {
@@ -2019,6 +2064,8 @@ void update_particles_i(pixel *vid, int start, int inc)
} }
else if(t==PT_RIME) else if(t==PT_RIME)
{ {
parts[i].vx = 0;
parts[i].vy = 0;
for(nx=-1; nx<2; nx++) for(nx=-1; nx<2; nx++)
for(ny=-1; ny<2; ny++) for(ny=-1; ny<2; ny++)
if(x+nx>=0 && y+ny>0 && if(x+nx>=0 && y+ny>0 &&
@@ -2040,6 +2087,76 @@ void update_particles_i(pixel *vid, int start, int inc)
} }
} }
} }
else if(t==PT_WTF)
{
int maxlife = ((10000/(parts[i].temp + 1))-1);
if((10000%((int)parts[i].temp+1))>rand()%((int)parts[i].temp+1))
maxlife ++;
if(parts[i].life < maxlife)
{
for(nx=-1; nx<2; nx++)
for(ny=-1; ny<2; ny++)
if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny))
{
r = pmap[y+ny][x+nx];
if((r>>8)>=NPART || !r || (parts[i].life >=maxlife))
continue;
if(parts[r>>8].type==PT_WTF&&33>=rand()/(RAND_MAX/100)+1)
{
if((parts[i].life + parts[r>>8].life + 1) <= maxlife)
{
parts[i].life += parts[r>>8].life + 1;
parts[r>>8].type=PT_NONE;
}
}
}
}
else
for(nx=-1; nx<2; nx++)
for(ny=-1; ny<2; ny++)
if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny))
{
r = pmap[y+ny][x+nx];
if((r>>8)>=NPART || (parts[i].life<=maxlife))
continue;
if((bmap[(y+ny)/CELL][(x+nx)/CELL]==8||bmap[(y+ny)/CELL][(x+nx)/CELL]==7||bmap[(y+ny)/CELL][(x+nx)/CELL]==2||bmap[(y+ny)/CELL][(x+nx)/CELL]==1||
bmap[(y+ny)/CELL][(x+nx)/CELL]==9||bmap[(y+ny)/CELL][(x+nx)/CELL]==10||bmap[(y+ny)/CELL][(x+nx)/CELL]==13))
continue;
if((!r)&&parts[i].life>=1)//if nothing then create wtf
{
create_part(-1,x+nx,y+ny,PT_WTF);
parts[i].life--;
parts[pmap[y+ny][x+nx]>>8].temp = parts[i].temp;
}
}
for(int trade = 0; trade<9;trade ++)
{
nx = rand()%5-2;
ny = rand()%5-2;
if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny))
{
r = pmap[y+ny][x+nx];
if((r>>8)>=NPART || !r)
continue;
if(parts[r>>8].type==t&&(parts[i].life>parts[r>>8].life)&&parts[i].life>0&&!((r>>8)>=NPART || !r))//diffusion
{
int temp = parts[i].life - parts[r>>8].life;
if(temp ==1)
{
parts[r>>8].life ++;
parts[i].life --;
trade = 9;
}
else if(temp>0)
{
parts[r>>8].life += temp/2;
parts[i].life -= temp/2;
trade = 9;
}
}
}
}
}
else if(t==PT_LCRY) else if(t==PT_LCRY)
{ {
for(nx=-1; nx<2; nx++) for(nx=-1; nx<2; nx++)
@@ -2900,6 +3017,27 @@ killed:
create_part(-1, x+rand()%3-1, y+rand()%3-1, parts[i].ctype); create_part(-1, x+rand()%3-1, y+rand()%3-1, parts[i].ctype);
} }
}
if(t==PT_BCLN)
{
if(!parts[i].ctype)
{
for(nx=-1; nx<2; nx++)
for(ny=-1; ny<2; ny++)
if(x+nx>=0 && y+ny>0 &&
x+nx<XRES && y+ny<YRES &&
pmap[y+ny][x+nx] &&
(pmap[y+ny][x+nx]&0xFF)!=PT_CLNE &&
(pmap[y+ny][x+nx]&0xFF)!=PT_BCLN &&
(pmap[y+ny][x+nx]&0xFF)!=PT_PCLN &&
(pmap[y+ny][x+nx]&0xFF)!=PT_STKM &&
(pmap[y+ny][x+nx]&0xFF)!=0xFF)
parts[i].ctype = pmap[y+ny][x+nx]&0xFF;
}
else {
create_part(-1, x+rand()%3-1, y+rand()%3-1, parts[i].ctype);
}
} }
if(parts[i].type==PT_PCLN) if(parts[i].type==PT_PCLN)
{ {
@@ -3247,7 +3385,7 @@ void update_particles(pixel *vid)
} }
} }
pfree=l; pfree=l;
if(cmode==4) if(cmode==CM_BLOB)
{ {
for(y=0; y<YRES/CELL; y++) for(y=0; y<YRES/CELL; y++)
{ {