Mercury
This commit is contained in:
parent
106dc6e097
commit
97cc3488eb
@ -203,7 +203,8 @@
|
|||||||
#define PT_SOAP 149
|
#define PT_SOAP 149
|
||||||
#define PT_NBHL 150
|
#define PT_NBHL 150
|
||||||
#define PT_NWHL 151
|
#define PT_NWHL 151
|
||||||
#define PT_NUM 152
|
#define PT_MERC 152
|
||||||
|
#define PT_NUM 153
|
||||||
|
|
||||||
#define R_TEMP 22
|
#define R_TEMP 22
|
||||||
#define MAX_TEMP 9999
|
#define MAX_TEMP 9999
|
||||||
@ -313,6 +314,7 @@ int update_O2(UPDATE_FUNC_ARGS);
|
|||||||
int update_H2(UPDATE_FUNC_ARGS);
|
int update_H2(UPDATE_FUNC_ARGS);
|
||||||
int update_NBHL(UPDATE_FUNC_ARGS);
|
int update_NBHL(UPDATE_FUNC_ARGS);
|
||||||
int update_NWHL(UPDATE_FUNC_ARGS);
|
int update_NWHL(UPDATE_FUNC_ARGS);
|
||||||
|
int update_MERC(UPDATE_FUNC_ARGS);
|
||||||
|
|
||||||
int update_MISC(UPDATE_FUNC_ARGS);
|
int update_MISC(UPDATE_FUNC_ARGS);
|
||||||
int update_legacy_PYRO(UPDATE_FUNC_ARGS);
|
int update_legacy_PYRO(UPDATE_FUNC_ARGS);
|
||||||
@ -540,6 +542,7 @@ static const part_type ptypes[PT_NUM] =
|
|||||||
{"SOAP", PIXPACK(0xF5F5DC), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 2, 0, 0, 0, 20, 1, 35, SC_LIQUID, R_TEMP-2.0f +273.15f, 29, "Soap. Creates bubbles.", ST_LIQUID, TYPE_LIQUID|PROP_NEUTPENETRATE|PROP_LIFE_DEC, &update_SOAP},
|
{"SOAP", PIXPACK(0xF5F5DC), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 2, 0, 0, 0, 20, 1, 35, SC_LIQUID, R_TEMP-2.0f +273.15f, 29, "Soap. Creates bubbles.", ST_LIQUID, TYPE_LIQUID|PROP_NEUTPENETRATE|PROP_LIFE_DEC, &update_SOAP},
|
||||||
{"BHOL", PIXPACK(0x202020), 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_SPECIAL, R_TEMP+0.0f +273.15f, 186, "Black hole (Requires newtonian gravity)", ST_SOLID, TYPE_SOLID, &update_NBHL},
|
{"BHOL", PIXPACK(0x202020), 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_SPECIAL, R_TEMP+0.0f +273.15f, 186, "Black hole (Requires newtonian gravity)", ST_SOLID, TYPE_SOLID, &update_NBHL},
|
||||||
{"WHOL", PIXPACK(0xFFFFFF), 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_SPECIAL, R_TEMP+0.0f +273.15f, 186, "White hole (Requires newtonian gravity)", ST_SOLID, TYPE_SOLID, &update_NWHL},
|
{"WHOL", PIXPACK(0xFFFFFF), 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_SPECIAL, R_TEMP+0.0f +273.15f, 186, "White hole (Requires newtonian gravity)", ST_SOLID, TYPE_SOLID, &update_NWHL},
|
||||||
|
{"MERC", PIXPACK(0x736B6D), 0.4f, 0.04f * CFDS, 0.94f, 0.80f, 0.0f, 0.3f, 0.00f, 0.000f * CFDS, 2, 0, 0, 0, 20, 1, 91, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Mercury. Volume changes with temperature, Conductive.", ST_LIQUID, TYPE_LIQUID|PROP_CONDUCTS|PROP_NEUTABSORB|PROP_LIFE_DEC, &update_MERC},
|
||||||
//Name Colour Advec Airdrag Airloss Loss Collid Grav Diffus Hotair Fal Burn Exp Mel Hrd M Weights Section H Ins Description
|
//Name Colour Advec Airdrag Airloss Loss Collid Grav Diffus Hotair Fal Burn Exp Mel Hrd M Weights Section H Ins Description
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -707,6 +710,7 @@ static part_transition ptransitions[PT_NUM] =
|
|||||||
/* SOAP */ {IPL, NT, IPH, NT, ITL, NT, ITL, NT},
|
/* SOAP */ {IPL, NT, IPH, NT, ITL, NT, ITL, NT},
|
||||||
/* NBHL */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
|
/* NBHL */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
|
||||||
/* NWHL */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
|
/* NWHL */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
|
||||||
|
/* MERC */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
|
||||||
};
|
};
|
||||||
#undef IPL
|
#undef IPL
|
||||||
#undef IPH
|
#undef IPH
|
||||||
|
73
src/elements/merc.c
Normal file
73
src/elements/merc.c
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#include <element.h>
|
||||||
|
|
||||||
|
int update_MERC(UPDATE_FUNC_ARGS) {
|
||||||
|
int r, rx, ry, trade, np;
|
||||||
|
int maxtmp = ((10000/(parts[i].temp + 1))-1);
|
||||||
|
if ((10000%((int)parts[i].temp+1))>rand()%((int)parts[i].temp+1))
|
||||||
|
maxtmp ++;
|
||||||
|
if (parts[i].tmp < maxtmp)
|
||||||
|
{
|
||||||
|
for (rx=-1; rx<2; rx++)
|
||||||
|
for (ry=-1; ry<2; ry++)
|
||||||
|
if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
|
||||||
|
{
|
||||||
|
r = pmap[y+ry][x+rx];
|
||||||
|
if ((r>>8)>=NPART || !r || (parts[i].tmp >=maxtmp))
|
||||||
|
continue;
|
||||||
|
if ((r&0xFF)==PT_MERC&&33>=rand()/(RAND_MAX/100)+1)
|
||||||
|
{
|
||||||
|
if ((parts[i].tmp + parts[r>>8].tmp + 1) <= maxtmp)
|
||||||
|
{
|
||||||
|
parts[i].tmp += parts[r>>8].tmp + 1;
|
||||||
|
kill_part(r>>8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
for (rx=-1; rx<2; rx++)
|
||||||
|
for (ry=-1; ry<2; ry++)
|
||||||
|
if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
|
||||||
|
{
|
||||||
|
r = pmap[y+ry][x+rx];
|
||||||
|
if ((r>>8)>=NPART || (parts[i].tmp<=maxtmp))
|
||||||
|
continue;
|
||||||
|
if ((bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_WALLELEC||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_EWALL||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_DESTROYALL||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_WALL||
|
||||||
|
bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_ALLOWAIR||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_ALLOWSOLID||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_ALLOWGAS))
|
||||||
|
continue;
|
||||||
|
if ((!r)&&parts[i].tmp>=1)//if nothing then create deut
|
||||||
|
{
|
||||||
|
np = create_part(-1,x+rx,y+ry,PT_MERC);
|
||||||
|
if (np<0) continue;
|
||||||
|
parts[i].tmp--;
|
||||||
|
parts[np].temp = parts[i].temp;
|
||||||
|
parts[np].tmp = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for ( trade = 0; trade<4; trade ++)
|
||||||
|
{
|
||||||
|
rx = rand()%5-2;
|
||||||
|
ry = rand()%5-2;
|
||||||
|
if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
|
||||||
|
{
|
||||||
|
r = pmap[y+ry][x+rx];
|
||||||
|
if ((r>>8)>=NPART || !r)
|
||||||
|
continue;
|
||||||
|
if ((r&0xFF)==PT_MERC&&(parts[i].tmp>parts[r>>8].tmp)&&parts[i].tmp>0)//diffusion
|
||||||
|
{
|
||||||
|
int temp = parts[i].tmp - parts[r>>8].tmp;
|
||||||
|
if (temp ==1)
|
||||||
|
{
|
||||||
|
parts[r>>8].tmp ++;
|
||||||
|
parts[i].tmp --;
|
||||||
|
}
|
||||||
|
else if (temp>0)
|
||||||
|
{
|
||||||
|
parts[r>>8].tmp += temp/2;
|
||||||
|
parts[i].tmp -= temp/2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Reference in New Issue
Block a user