Merge pull request #66 from jacob1/Modstuff
Code structure improvements for graphics/drawing, improvements to prevent accidental infinite loops in Lua, Fixes for fusion, improvements for VOID types. And other minor improvements
This commit is contained in:
commit
8196d2a645
2
.gitignore
vendored
2
.gitignore
vendored
@ -16,4 +16,4 @@ src/python/stdlib/*
|
|||||||
*.srv
|
*.srv
|
||||||
*.bat
|
*.bat
|
||||||
*.o
|
*.o
|
||||||
*.me
|
*.me
|
||||||
|
59
README
59
README
@ -102,7 +102,60 @@ scripts - enable scripts to be run from old console
|
|||||||
History:
|
History:
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
* Version 74.1
|
|
||||||
|
* Version 79.2 Beta Build 167
|
||||||
|
o Fix minor spelling errors
|
||||||
|
o Fix crash when using flood-fill or a lot of INST
|
||||||
|
o Fix an issue that made it impossible to change the Windows size from the options screen
|
||||||
|
* Version 79.1 Beta Build 166
|
||||||
|
o Prevent changing of Window size if the screen is too small.
|
||||||
|
o Fix bug that caused pressure to leak from TTAN when pausing/framestepping
|
||||||
|
o Fix crash when opening display options
|
||||||
|
* Version 79.0 Beta Build 165
|
||||||
|
o Fix Titanium only conducting once
|
||||||
|
o Better colour options preview.
|
||||||
|
* Version 79.0 Beta Build 164
|
||||||
|
o Fix a problem with GPMP that caused gravity to depend on air pressure
|
||||||
|
o Fix TNT sometimes not exploding if multiple TNT particles are in the same place
|
||||||
|
o Fix PUMP not generating negative pressure if it is next to a wall
|
||||||
|
o New element: titanium (in the solids menu), which completely blocks air and absorbs some neutrons
|
||||||
|
* Version 78.1 Build 163
|
||||||
|
o Fix bug that created "weaponised explosive GEL"
|
||||||
|
o Changes to License (GPLv2 to GPLv3)
|
||||||
|
o Fix bug that caused thumbnail caching to not work
|
||||||
|
o Remove unused debug output of thumbnail cache
|
||||||
|
o Plasma can now travel through portals and PIPE
|
||||||
|
o Fix file opening on Mac OS X
|
||||||
|
* Version 78.0 Beta Build 162
|
||||||
|
o Fixes when moving signs
|
||||||
|
o Line snapping in the decoration editor
|
||||||
|
o Changes to SING to prevent it from exploding through walls
|
||||||
|
o Save soap bubbles
|
||||||
|
o Changes to GEL, will no longer absorb water when saturated
|
||||||
|
o FILT not heated by photons with ambient heat on
|
||||||
|
o New save format: OPS, allows saving of almost all data within the simulation
|
||||||
|
* Version 77.0 Build 159
|
||||||
|
o tmp2 support for old console
|
||||||
|
o save tmp2 for TRON
|
||||||
|
* Version 76.0 Build 158
|
||||||
|
o GEL won't try to move solids anymore
|
||||||
|
* Version 76.0 Build 157
|
||||||
|
o Fixes for GEL and TRON
|
||||||
|
o Fix sponge bug
|
||||||
|
* Version 76.0 Beta Build 156
|
||||||
|
o New element: TRON
|
||||||
|
* Version 75.0 Beta Build 155
|
||||||
|
o New element: GEL
|
||||||
|
* Version 74.2 Build 154
|
||||||
|
o Walls don't trigger automatic pipe pattern generation
|
||||||
|
o BCOL uses COAL's graphics function
|
||||||
|
o Report icon
|
||||||
|
o Fix unmeltable ice
|
||||||
|
* Version 74.1 Build 152
|
||||||
|
o Fix ice with ctype of 0
|
||||||
|
* Version 74.1 Build 151
|
||||||
|
o BRAY glows in fancy display mode
|
||||||
|
* Version 74.1 Build 150
|
||||||
o Icon for Force Elements
|
o Icon for Force Elements
|
||||||
o Allow DEST to be used with clone elements.
|
o Allow DEST to be used with clone elements.
|
||||||
* Version 74.0
|
* Version 74.0
|
||||||
@ -146,8 +199,6 @@ History:
|
|||||||
* Version 70.0
|
* Version 70.0
|
||||||
o New element: ignition cord
|
o New element: ignition cord
|
||||||
o Stickmen and fighter fixes
|
o Stickmen and fighter fixes
|
||||||
o Fixed WIRE graphics
|
|
||||||
o New elements: ACEL and DCEL, accelerate nearby photons
|
|
||||||
* Version 69.1
|
* Version 69.1
|
||||||
o New Lua API features, ability to edit particle properties from tpt.el... array, particles are exposed as an array now
|
o New Lua API features, ability to edit particle properties from tpt.el... array, particles are exposed as an array now
|
||||||
* Version 69.0
|
* Version 69.0
|
||||||
@ -168,7 +219,7 @@ History:
|
|||||||
o Correct icons in render_ui
|
o Correct icons in render_ui
|
||||||
o Add back portal effects
|
o Add back portal effects
|
||||||
* Version 68.5
|
* Version 68.5
|
||||||
o fix decorations
|
o Fix decorations
|
||||||
* Version 68.4
|
* Version 68.4
|
||||||
o Stamp browser fixes
|
o Stamp browser fixes
|
||||||
o Remove some stuff from HUD to make it fit
|
o Remove some stuff from HUD to make it fit
|
||||||
|
@ -189,14 +189,7 @@ extern int ngrav_enable;
|
|||||||
int limitFPS;
|
int limitFPS;
|
||||||
int water_equal_test;
|
int water_equal_test;
|
||||||
extern int quickoptions_tooltip_fade;
|
extern int quickoptions_tooltip_fade;
|
||||||
|
extern int loop_time;
|
||||||
extern int debug_flags;
|
|
||||||
#define DEBUG_PERF_FRAMECOUNT 256
|
|
||||||
extern int debug_perf_istart;
|
|
||||||
extern int debug_perf_iend;
|
|
||||||
extern long debug_perf_frametime[DEBUG_PERF_FRAMECOUNT];
|
|
||||||
extern long debug_perf_partitime[DEBUG_PERF_FRAMECOUNT];
|
|
||||||
extern long debug_perf_time;
|
|
||||||
|
|
||||||
extern int debug_flags;
|
extern int debug_flags;
|
||||||
#define DEBUG_PERF_FRAMECOUNT 256
|
#define DEBUG_PERF_FRAMECOUNT 256
|
||||||
|
@ -195,6 +195,10 @@ void blend_line(pixel *vid, int x1, int y1, int x2, int y2, int r, int g, int b,
|
|||||||
|
|
||||||
void render_parts(pixel *vid);
|
void render_parts(pixel *vid);
|
||||||
|
|
||||||
|
void render_before(pixel *part_vbuf);
|
||||||
|
|
||||||
|
void render_after(pixel *part_vbuf, pixel *vid_buf);
|
||||||
|
|
||||||
#ifdef OGLR
|
#ifdef OGLR
|
||||||
void draw_parts_fbo();
|
void draw_parts_fbo();
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
#define LUACON_EL_MODIFIED_GRAPHICS 0x2
|
#define LUACON_EL_MODIFIED_GRAPHICS 0x2
|
||||||
#define LUACON_EL_MODIFIED_MENUS 0x4
|
#define LUACON_EL_MODIFIED_MENUS 0x4
|
||||||
|
|
||||||
int *lua_el_func, *lua_el_mode;
|
int *lua_el_func, *lua_el_mode, *lua_gr_func;
|
||||||
|
|
||||||
void luacon_open();
|
void luacon_open();
|
||||||
int luacon_step(int mx, int my, int selectl, int selectr);
|
int luacon_step(int mx, int my, int selectl, int selectr);
|
||||||
@ -48,6 +48,7 @@ int luacon_mouseevent(int mx, int my, int mb, int event);
|
|||||||
int luacon_keyevent(int key, int modifier, int event);
|
int luacon_keyevent(int key, int modifier, int event);
|
||||||
int luacon_eval(char *command);
|
int luacon_eval(char *command);
|
||||||
int luacon_part_update(int t, int i, int x, int y, int surround_space, int nt);
|
int luacon_part_update(int t, int i, int x, int y, int surround_space, int nt);
|
||||||
|
int luacon_graphics_update(int t, int i, int *pixel_mode, int *cola, int *colr, int *colg, int *colb, int *firea, int *firer, int *fireg, int *fireb);
|
||||||
char *luacon_geterror();
|
char *luacon_geterror();
|
||||||
void luacon_close();
|
void luacon_close();
|
||||||
int luacon_partsread(lua_State* l);
|
int luacon_partsread(lua_State* l);
|
||||||
@ -62,6 +63,7 @@ int luacon_particle_getproperty(char * key, int * format);
|
|||||||
int luacon_transition_getproperty(char * key, int * format);
|
int luacon_transition_getproperty(char * key, int * format);
|
||||||
int luacon_element_getproperty(char * key, int * format, unsigned int * modified_stuff);
|
int luacon_element_getproperty(char * key, int * format, unsigned int * modified_stuff);
|
||||||
int process_command_lua(pixel *vid_buf, char *console, char *console_error);
|
int process_command_lua(pixel *vid_buf, char *console, char *console_error);
|
||||||
|
void lua_hook(lua_State *L, lua_Debug *ar);
|
||||||
|
|
||||||
int getPartIndex_curIdx;
|
int getPartIndex_curIdx;
|
||||||
|
|
||||||
@ -69,6 +71,7 @@ int getPartIndex_curIdx;
|
|||||||
int luatpt_test(lua_State* l);
|
int luatpt_test(lua_State* l);
|
||||||
int luatpt_getelement(lua_State *l);
|
int luatpt_getelement(lua_State *l);
|
||||||
int luatpt_element_func(lua_State *l);
|
int luatpt_element_func(lua_State *l);
|
||||||
|
int luatpt_graphics_func(lua_State *l);
|
||||||
int luatpt_drawtext(lua_State* l);
|
int luatpt_drawtext(lua_State* l);
|
||||||
int luatpt_create(lua_State* l);
|
int luatpt_create(lua_State* l);
|
||||||
int luatpt_setpause(lua_State* l);
|
int luatpt_setpause(lua_State* l);
|
||||||
|
@ -65,6 +65,5 @@
|
|||||||
#define DISPLAY_AIR 0x0000000F
|
#define DISPLAY_AIR 0x0000000F
|
||||||
#define DISPLAY_WARP 0x00000010
|
#define DISPLAY_WARP 0x00000010
|
||||||
#define DISPLAY_PERS 0x00000020
|
#define DISPLAY_PERS 0x00000020
|
||||||
#define DISPLAY_EFFE 0x00000040
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -79,8 +79,8 @@ part_type ptypes[PT_NUM] =
|
|||||||
{"GLAS", PIXPACK(0x404040), 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_SOLIDS, R_TEMP+0.0f +273.15f, 150, "Solid. Meltable. Shatters under pressure", ST_SOLID, TYPE_SOLID | PROP_NEUTPASS | PROP_HOT_GLOW | PROP_SPARKSETTLE, &update_GLAS, NULL},
|
{"GLAS", PIXPACK(0x404040), 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_SOLIDS, R_TEMP+0.0f +273.15f, 150, "Solid. Meltable. Shatters under pressure", ST_SOLID, TYPE_SOLID | PROP_NEUTPASS | PROP_HOT_GLOW | PROP_SPARKSETTLE, &update_GLAS, NULL},
|
||||||
{"PTCT", PIXPACK(0x405050), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Semi-conductor. Only conducts electricity when cold (Less than 100C)", ST_SOLID, TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC, &update_NPTCT, NULL},
|
{"PTCT", PIXPACK(0x405050), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Semi-conductor. Only conducts electricity when cold (Less than 100C)", ST_SOLID, TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC, &update_NPTCT, NULL},
|
||||||
{"BGLA", PIXPACK(0x606060), 0.4f, 0.04f * CFDS, 0.94f, 0.95f, -0.1f, 0.3f, 0.00f, 0.000f * CFDS, 1, 0, 0, 5, 2, 1, 1, 90, SC_POWDERS, R_TEMP+0.0f +273.15f, 150, "Broken Glass, Heavy particles. Meltable. Bagels.", ST_SOLID, TYPE_PART | PROP_HOT_GLOW, NULL, NULL},
|
{"BGLA", PIXPACK(0x606060), 0.4f, 0.04f * CFDS, 0.94f, 0.95f, -0.1f, 0.3f, 0.00f, 0.000f * CFDS, 1, 0, 0, 5, 2, 1, 1, 90, SC_POWDERS, R_TEMP+0.0f +273.15f, 150, "Broken Glass, Heavy particles. Meltable. Bagels.", ST_SOLID, TYPE_PART | PROP_HOT_GLOW, NULL, NULL},
|
||||||
{"THDR", PIXPACK(0xFFFFA0), 0.0f, 0.00f * CFDS, 1.0f, 0.30f, -0.99f, 0.6f, 0.62f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, 1, SC_EXPLOSIVE, 9000.0f +273.15f, 1, "Lightning! Very hot, inflicts damage upon most materials, transfers current to metals.", ST_NONE, TYPE_ENERGY, &update_THDR, &graphics_THDR},
|
{"THDR", PIXPACK(0xFFFFA0), 0.0f, 0.00f * CFDS, 1.0f, 0.30f, -0.99f, 0.6f, 0.62f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, 1, SC_EXPLOSIVE, 9000.0f +273.15f, 1, "Lightning! Very hot, inflicts damage upon most materials, transfers current to metals.", ST_NONE, TYPE_PART, &update_THDR, &graphics_THDR},
|
||||||
{"PLSM", PIXPACK(0xBB99FF), 0.9f, 0.04f * CFDS, 0.97f, 0.20f, 0.0f, -0.1f, 0.30f, 0.001f * CFDS, 0, 0, 0, 0, 0, 1, 1, 1, SC_GAS, 10000.0f +273.15f, 5, "Plasma, extremely hot.", ST_NONE, TYPE_GAS|PROP_LIFE_DEC|PROP_LIFE_KILL, &update_PYRO, &graphics_PLSM},
|
{"PLSM", PIXPACK(0xBB99FF), 0.9f, 0.04f * CFDS, 0.97f, 0.20f, 0.0f, -0.1f, 0.30f, 0.001f * CFDS, 0, 0, 0, 0, 0, 1, 1, 1, SC_GAS, 10000.0f +273.15f, 5, "Plasma, extremely hot.", ST_NONE, TYPE_GAS|PROP_LIFE_DEC|PROP_LIFE_KILL, &update_PYRO, &graphics_PLSM},
|
||||||
{"ETRD", PIXPACK(0x404040), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Electrode. Creates a surface that allows Plasma arcs. (Use sparingly)", ST_NONE, TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC, NULL, NULL},
|
{"ETRD", PIXPACK(0x404040), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Electrode. Creates a surface that allows Plasma arcs. (Use sparingly)", ST_NONE, TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC, NULL, NULL},
|
||||||
{"NICE", PIXPACK(0xC0E0FF), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, -0.0005f* CFDS, 0, 0, 0, 0, 20, 1, 1, 100, SC_SOLIDS, 35.0f, 46, "Nitrogen Ice.", ST_SOLID, TYPE_SOLID, NULL, NULL},
|
{"NICE", PIXPACK(0xC0E0FF), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, -0.0005f* CFDS, 0, 0, 0, 0, 20, 1, 1, 100, SC_SOLIDS, 35.0f, 46, "Nitrogen Ice.", ST_SOLID, TYPE_SOLID, NULL, NULL},
|
||||||
{"NBLE", PIXPACK(0xEB4917), 1.0f, 0.01f * CFDS, 0.99f, 0.30f, -0.1f, 0.0f, 0.75f, 0.001f * CFDS, 0, 0, 0, 0, 1, 1, 1, 1, SC_GAS, R_TEMP+2.0f +273.15f, 106, "Noble Gas. Diffuses. Conductive. Ionizes into plasma when introduced to electricity", ST_GAS, TYPE_GAS|PROP_CONDUCTS|PROP_LIFE_DEC, &update_NBLE, NULL},
|
{"NBLE", PIXPACK(0xEB4917), 1.0f, 0.01f * CFDS, 0.99f, 0.30f, -0.1f, 0.0f, 0.75f, 0.001f * CFDS, 0, 0, 0, 0, 1, 1, 1, 1, SC_GAS, R_TEMP+2.0f +273.15f, 106, "Noble Gas. Diffuses. Conductive. Ionizes into plasma when introduced to electricity", ST_GAS, TYPE_GAS|PROP_CONDUCTS|PROP_LIFE_DEC, &update_NBLE, NULL},
|
||||||
|
@ -18,28 +18,47 @@
|
|||||||
int update_O2(UPDATE_FUNC_ARGS)
|
int update_O2(UPDATE_FUNC_ARGS)
|
||||||
{
|
{
|
||||||
int r,rx,ry;
|
int r,rx,ry;
|
||||||
for (rx=-2; rx<3; rx++)
|
if (parts[i].temp < 9273.15)
|
||||||
for (ry=-2; ry<3; ry++)
|
{
|
||||||
if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES && (rx || ry))
|
for (rx=-2; rx<3; rx++)
|
||||||
{
|
for (ry=-2; ry<3; ry++)
|
||||||
r = pmap[y+ry][x+rx];
|
if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES && (rx || ry))
|
||||||
if (!r)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if ((r&0xFF)==PT_FIRE)
|
|
||||||
{
|
{
|
||||||
parts[r>>8].temp+=(rand()/(RAND_MAX/100));
|
r = pmap[y+ry][x+rx];
|
||||||
if(parts[r>>8].tmp&0x01)
|
if (!r)
|
||||||
parts[r>>8].temp=3473;
|
continue;
|
||||||
parts[r>>8].tmp |= 2;
|
|
||||||
}
|
|
||||||
if ((r&0xFF)==PT_FIRE || (r&0xFF)==PT_PLSM)
|
|
||||||
{
|
|
||||||
create_part(i,x,y,PT_FIRE);
|
|
||||||
parts[i].temp+=(rand()/(RAND_MAX/100));
|
|
||||||
parts[i].tmp |= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
if ((r&0xFF)==PT_FIRE)
|
||||||
|
{
|
||||||
|
parts[r>>8].temp+=(rand()/(RAND_MAX/100));
|
||||||
|
if(parts[r>>8].tmp&0x01)
|
||||||
|
parts[r>>8].temp=3473;
|
||||||
|
parts[r>>8].tmp |= 2;
|
||||||
|
}
|
||||||
|
if ((r&0xFF)==PT_FIRE || (r&0xFF)==PT_PLSM)
|
||||||
|
{
|
||||||
|
create_part(i,x,y,PT_FIRE);
|
||||||
|
parts[i].temp+=(rand()/(RAND_MAX/100));
|
||||||
|
parts[i].tmp |= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (parts[i].temp > 9973.15 && pv[y/CELL][x/CELL] > 250.0f && abs(gravx[(((y/sdl_scale)/CELL)*(XRES/CELL))+((x/sdl_scale)/CELL)]) + abs(gravy[(((y/sdl_scale)/CELL)*(XRES/CELL))+((x/sdl_scale)/CELL)]) > 20)
|
||||||
|
{
|
||||||
|
if (rand()%5 < 1)
|
||||||
|
{
|
||||||
|
int j;
|
||||||
|
part_change_type(i,x,y,PT_PLSM);
|
||||||
|
parts[i].life = rand()%150+50;
|
||||||
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NEUT); if (j != -1) parts[j].temp = 15000;
|
||||||
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PHOT); if (j != -1) parts[j].temp = 15000;
|
||||||
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_BRMT); if (j != -1) parts[j].temp = 15000;
|
||||||
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_SING); if (j != -1) { parts[j].temp = 15000; parts[i].life = rand()%25+50; }
|
||||||
|
|
||||||
|
parts[i].temp += 15000;
|
||||||
|
pv[y/CELL][x/CELL] += 300;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -49,12 +49,13 @@ int update_CO2(UPDATE_FUNC_ARGS) {
|
|||||||
int j;
|
int j;
|
||||||
kill_part(i);
|
kill_part(i);
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NEUT); if (j != -1) parts[j].temp = 15000;
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NEUT); if (j != -1) parts[j].temp = 15000;
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_ELEC); if (j != -1) parts[j].temp = 15000;
|
if (!(rand()%50)) { j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_ELEC); if (j != -1) parts[j].temp = 15000; }
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_O2); if (j != -1) parts[j].temp = 15000;
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_O2); if (j != -1) parts[j].temp = 15000;
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_SING); if (j != -1) { parts[j].temp = 15000; parts[i].life = rand()%100+450; }
|
if (rand()%1000 < 1) { j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_SING); if (j != -1) { parts[j].temp = 15000; parts[i].life = 3; } }
|
||||||
|
|
||||||
parts[i].temp += 15000;
|
parts[i].temp += 15000;
|
||||||
pv[y/CELL][x/CELL] += 100;
|
pv[y/CELL][x/CELL] += 100;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -94,7 +94,7 @@ int update_ELEC(UPDATE_FUNC_ARGS) {
|
|||||||
kill_part(i);
|
kill_part(i);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (ptypes[r&0xFF].properties & PROP_CONDUCTS && ((r&0xFF)!=PT_H2||parts[i].tmp!=1))
|
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);
|
create_part(-1, x+rx, y+ry, PT_SPRK);
|
||||||
kill_part(i);
|
kill_part(i);
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
int update_GEL(UPDATE_FUNC_ARGS) {
|
int update_GEL(UPDATE_FUNC_ARGS) {
|
||||||
int r, rx, ry;
|
int r, rx, ry;
|
||||||
|
float dx, dy;
|
||||||
|
char gel;
|
||||||
if (parts[i].tmp>100) parts[i].tmp = 100;
|
if (parts[i].tmp>100) parts[i].tmp = 100;
|
||||||
if (parts[i].tmp<0) parts[i].tmp = 0;
|
if (parts[i].tmp<0) parts[i].tmp = 0;
|
||||||
for (rx=-2; rx<3; rx++)
|
for (rx=-2; rx<3; rx++)
|
||||||
@ -41,7 +43,7 @@ int update_GEL(UPDATE_FUNC_ARGS) {
|
|||||||
parts[i].tmp++;
|
parts[i].tmp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
char gel = 0;
|
gel = 0;
|
||||||
if ((r&0xFF)==PT_GEL)
|
if ((r&0xFF)==PT_GEL)
|
||||||
gel = 1;
|
gel = 1;
|
||||||
|
|
||||||
@ -58,7 +60,6 @@ int update_GEL(UPDATE_FUNC_ARGS) {
|
|||||||
parts[i].tmp--;
|
parts[i].tmp--;
|
||||||
}
|
}
|
||||||
|
|
||||||
float dx, dy;
|
|
||||||
dx = parts[i].x - parts[r>>8].x;
|
dx = parts[i].x - parts[r>>8].x;
|
||||||
dy = parts[i].y - parts[r>>8].y;
|
dy = parts[i].y - parts[r>>8].y;
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ int update_H2(UPDATE_FUNC_ARGS)
|
|||||||
}
|
}
|
||||||
if (parts[r>>8].temp > 2273.15)// && pv[y/CELL][x/CELL] > 50.0f)
|
if (parts[r>>8].temp > 2273.15)// && pv[y/CELL][x/CELL] > 50.0f)
|
||||||
continue;
|
continue;
|
||||||
if (parts[i].tmp != 1)
|
if (parts[i].temp < 2273.15)
|
||||||
{
|
{
|
||||||
if (rt==PT_FIRE)
|
if (rt==PT_FIRE)
|
||||||
{
|
{
|
||||||
@ -54,20 +54,18 @@ int update_H2(UPDATE_FUNC_ARGS)
|
|||||||
}
|
}
|
||||||
if (parts[i].temp > 2273.15 && pv[y/CELL][x/CELL] > 50.0f)
|
if (parts[i].temp > 2273.15 && pv[y/CELL][x/CELL] > 50.0f)
|
||||||
{
|
{
|
||||||
parts[i].tmp = 1;
|
|
||||||
if (rand()%5 < 1)
|
if (rand()%5 < 1)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
float temp = parts[i].temp;
|
float temp = parts[i].temp;
|
||||||
part_change_type(i,x,y,PT_PLSM);
|
part_change_type(i,x,y,PT_PLSM);
|
||||||
parts[i].life = rand()%150+50;
|
parts[i].life = rand()%150+50;
|
||||||
create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NEUT);
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NEUT); if (j != -1) parts[j].temp = temp;
|
||||||
create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_ELEC);
|
if (!(rand()%10)) { j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_ELEC); if (j != -1) parts[j].temp = temp; }
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PHOT);
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PHOT);
|
||||||
if (j != -1) { parts[j].ctype = 0xFFFF00; parts[j].temp = temp; }
|
if (j != -1) { parts[j].ctype = 0xFFFF00; parts[j].temp = temp; }
|
||||||
|
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NBLE);
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NBLE); if (j != -1) parts[j].temp = temp;
|
||||||
if (j != -1) { parts[j].tmp = 1; parts[j].temp = temp; }
|
|
||||||
|
|
||||||
if (rand()%2)
|
if (rand()%2)
|
||||||
{
|
{
|
||||||
@ -75,7 +73,7 @@ int update_H2(UPDATE_FUNC_ARGS)
|
|||||||
if (j != -1) { parts[j].tmp = 1; parts[j].temp = temp; }
|
if (j != -1) { parts[j].tmp = 1; parts[j].temp = temp; }
|
||||||
}
|
}
|
||||||
|
|
||||||
parts[i].temp += 6000;
|
parts[i].temp += 750+rand()%500;
|
||||||
pv[y/CELL][x/CELL] += 30;
|
pv[y/CELL][x/CELL] += 30;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,16 +25,16 @@ int update_NBLE(UPDATE_FUNC_ARGS)
|
|||||||
float temp = parts[i].temp;
|
float temp = parts[i].temp;
|
||||||
part_change_type(i,x,y,PT_PLSM);
|
part_change_type(i,x,y,PT_PLSM);
|
||||||
parts[i].life = rand()%150+50;
|
parts[i].life = rand()%150+50;
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NEUT); if (j != -1)
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NEUT); if (j != -1) parts[j].temp = temp;
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_ELEC); if (j != -1)
|
if (!(rand()%25)) { j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_ELEC); if (j != -1) parts[j].temp = temp; }
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PHOT);
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PHOT);
|
||||||
if (j != -1) { parts[j].ctype = 0xFF0000; parts[j].temp = temp; }
|
if (j != -1) { parts[j].ctype = 0xFF0000; parts[j].temp = temp; }
|
||||||
|
|
||||||
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_CO2);
|
j = create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_CO2);
|
||||||
if (j != -1) parts[j].temp = temp - 1000;
|
if (j != -1) parts[j].temp = temp;
|
||||||
|
|
||||||
parts[i].temp += 10000;
|
parts[i].temp += 1750+rand()%500;
|
||||||
pv[y/CELL][x/CELL] += 30;
|
pv[y/CELL][x/CELL] += 50;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -61,7 +61,7 @@ int update_PYRO(UPDATE_FUNC_ARGS) {
|
|||||||
(t!=PT_SPRK || (rt!=PT_RBDM && rt!=PT_LRBD && rt!=PT_INSL)) &&
|
(t!=PT_SPRK || (rt!=PT_RBDM && rt!=PT_LRBD && rt!=PT_INSL)) &&
|
||||||
(t!=PT_PHOT || rt!=PT_INSL) &&
|
(t!=PT_PHOT || rt!=PT_INSL) &&
|
||||||
(rt!=PT_SPNG || parts[r>>8].life==0) &&
|
(rt!=PT_SPNG || parts[r>>8].life==0) &&
|
||||||
(rt!=PT_H2 || (parts[r>>8].temp < 2273.15 && pv[y/CELL][x/CELL] < 50.0f)) &&
|
(rt!=PT_H2 || parts[r>>8].temp < 2273.15) &&
|
||||||
ptypes[rt].flammable && (ptypes[rt].flammable + (int)(pv[(y+ry)/CELL][(x+rx)/CELL]*10.0f))>(rand()%1000))
|
ptypes[rt].flammable && (ptypes[rt].flammable + (int)(pv[(y+ry)/CELL][(x+rx)/CELL]*10.0f))>(rand()%1000))
|
||||||
{
|
{
|
||||||
part_change_type(r>>8,x+rx,y+ry,PT_FIRE);
|
part_change_type(r>>8,x+rx,y+ry,PT_FIRE);
|
||||||
|
@ -59,7 +59,7 @@ int update_SPRK(UPDATE_FUNC_ARGS) {
|
|||||||
parts[nearp].ctype = PT_ETRD;
|
parts[nearp].ctype = PT_ETRD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ct==PT_NBLE&&parts[i].life<=1&&parts[i].tmp!=1)
|
else if (ct==PT_NBLE&&parts[i].life<=1&&parts[i].temp<5273.15)
|
||||||
{
|
{
|
||||||
parts[i].life = rand()%150+50;
|
parts[i].life = rand()%150+50;
|
||||||
part_change_type(i,x,y,PT_PLSM);
|
part_change_type(i,x,y,PT_PLSM);
|
||||||
@ -194,7 +194,7 @@ int update_SPRK(UPDATE_FUNC_ARGS) {
|
|||||||
conduct_sprk = 0;
|
conduct_sprk = 0;
|
||||||
if (rt==PT_INST&&ct!=PT_PSCN)
|
if (rt==PT_INST&&ct!=PT_PSCN)
|
||||||
conduct_sprk = 0;
|
conduct_sprk = 0;
|
||||||
if (rt == PT_NBLE && parts[r>>8].tmp == 1)
|
if (rt == PT_NBLE && parts[r>>8].temp > 5273.15)
|
||||||
conduct_sprk = 0;
|
conduct_sprk = 0;
|
||||||
|
|
||||||
if (conduct_sprk) {
|
if (conduct_sprk) {
|
||||||
|
124
src/graphics.c
124
src/graphics.c
@ -47,6 +47,9 @@
|
|||||||
#include <font.h>
|
#include <font.h>
|
||||||
#include <misc.h>
|
#include <misc.h>
|
||||||
#include "hmap.h"
|
#include "hmap.h"
|
||||||
|
#ifdef LUACONSOLE
|
||||||
|
#include <luaconsole.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(LIN32) || defined(LIN64)
|
#if defined(LIN32) || defined(LIN64)
|
||||||
#include "icon.h"
|
#include "icon.h"
|
||||||
@ -1693,7 +1696,7 @@ void draw_other(pixel *vid) // EMP effect
|
|||||||
if (emp_decor>0 && !sys_pause) emp_decor-=emp_decor/25+2;
|
if (emp_decor>0 && !sys_pause) emp_decor-=emp_decor/25+2;
|
||||||
if (emp_decor>40) emp_decor=40;
|
if (emp_decor>40) emp_decor=40;
|
||||||
if (emp_decor<0) emp_decor = 0;
|
if (emp_decor<0) emp_decor = 0;
|
||||||
if (!(display_mode & DISPLAY_EFFE)) // no in nothing mode
|
if (!(render_mode & EFFECT)) // not in nothing mode
|
||||||
return;
|
return;
|
||||||
if (emp_decor>0)
|
if (emp_decor>0)
|
||||||
{
|
{
|
||||||
@ -1854,8 +1857,29 @@ void render_parts(pixel *vid)
|
|||||||
}
|
}
|
||||||
else if(!(colour_mode & COLOUR_BASC)) //Don't get special effects for BASIC colour mode
|
else if(!(colour_mode & COLOUR_BASC)) //Don't get special effects for BASIC colour mode
|
||||||
{
|
{
|
||||||
|
#ifdef LUACONSOLE
|
||||||
|
if (lua_gr_func[t])
|
||||||
|
{
|
||||||
|
if (luacon_graphics_update(t,i, &pixel_mode, &cola, &colr, &colg, &colb, &firea, &firer, &fireg, &fireb))
|
||||||
|
{
|
||||||
|
graphicscache[t].isready = 1;
|
||||||
|
graphicscache[t].pixel_mode = pixel_mode;
|
||||||
|
graphicscache[t].cola = cola;
|
||||||
|
graphicscache[t].colr = colr;
|
||||||
|
graphicscache[t].colg = colg;
|
||||||
|
graphicscache[t].colb = colb;
|
||||||
|
graphicscache[t].firea = firea;
|
||||||
|
graphicscache[t].firer = firer;
|
||||||
|
graphicscache[t].fireg = fireg;
|
||||||
|
graphicscache[t].fireb = fireb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ptypes[t].graphics_func)
|
||||||
|
{
|
||||||
|
#else
|
||||||
if (ptypes[t].graphics_func)
|
if (ptypes[t].graphics_func)
|
||||||
{
|
{
|
||||||
|
#endif
|
||||||
if ((*(ptypes[t].graphics_func))(&(parts[i]), nx, ny, &pixel_mode, &cola, &colr, &colg, &colb, &firea, &firer, &fireg, &fireb)) //That's a lot of args, a struct might be better
|
if ((*(ptypes[t].graphics_func))(&(parts[i]), nx, ny, &pixel_mode, &cola, &colr, &colg, &colb, &firea, &firer, &fireg, &fireb)) //That's a lot of args, a struct might be better
|
||||||
{
|
{
|
||||||
graphicscache[t].isready = 1;
|
graphicscache[t].isready = 1;
|
||||||
@ -2869,10 +2893,82 @@ void draw_parts_fbo()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// draw the graphics that appear before update_particles is called
|
||||||
|
void render_before(pixel *part_vbuf)
|
||||||
|
{
|
||||||
|
#ifdef OGLR
|
||||||
|
if (display_mode & DISPLAY_PERS)//save background for persistent, then clear
|
||||||
|
{
|
||||||
|
clearScreen(0.01f);
|
||||||
|
memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
||||||
|
}
|
||||||
|
else //clear screen every frame
|
||||||
|
{
|
||||||
|
clearScreen(1.0f);
|
||||||
|
memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
||||||
|
if (display_mode & DISPLAY_AIR)//air only gets drawn in these modes
|
||||||
|
{
|
||||||
|
draw_air(part_vbuf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (display_mode & DISPLAY_AIR)//air only gets drawn in these modes
|
||||||
|
{
|
||||||
|
draw_air(part_vbuf);
|
||||||
|
}
|
||||||
|
else if (display_mode & DISPLAY_PERS)//save background for persistent, then clear
|
||||||
|
{
|
||||||
|
memcpy(part_vbuf, pers_bg, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
||||||
|
memset(part_vbuf+((XRES+BARSIZE)*YRES), 0, ((XRES+BARSIZE)*YRES*PIXELSIZE)-((XRES+BARSIZE)*YRES*PIXELSIZE));
|
||||||
|
}
|
||||||
|
else //clear screen every frame
|
||||||
|
{
|
||||||
|
memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(ngrav_enable && drawgrav_enable)
|
||||||
|
draw_grav(part_vbuf);
|
||||||
|
draw_walls(part_vbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
int persist_counter = 0;
|
||||||
|
// draw the graphics that appear after update_particles is called
|
||||||
|
void render_after(pixel *part_vbuf, pixel *vid_buf)
|
||||||
|
{
|
||||||
|
render_parts(part_vbuf); //draw particles
|
||||||
|
draw_other(part_vbuf);
|
||||||
|
//if(su == WL_GRAV+100)
|
||||||
|
// draw_grav_zones(part_vbuf);
|
||||||
|
if (vid_buf && (display_mode & DISPLAY_PERS))
|
||||||
|
{
|
||||||
|
if (!persist_counter)
|
||||||
|
{
|
||||||
|
dim_copy_pers(pers_bg, vid_buf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy(pers_bg, vid_buf, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
||||||
|
}
|
||||||
|
persist_counter = (persist_counter+1) % 3;
|
||||||
|
}
|
||||||
|
#ifndef OGLR
|
||||||
|
if (render_mode & FIREMODE)
|
||||||
|
render_fire(part_vbuf);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
render_signs(part_vbuf);
|
||||||
|
|
||||||
|
#ifndef OGLR
|
||||||
|
if(vid_buf && ngrav_enable && (display_mode & DISPLAY_WARP))
|
||||||
|
render_gravlensing(part_vbuf, vid_buf);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void draw_walls(pixel *vid)
|
void draw_walls(pixel *vid)
|
||||||
{
|
{
|
||||||
int x, y, i, j, cr, cg, cb;
|
int x, y, i, j, cr, cg, cb, nx, ny, t;
|
||||||
unsigned char wt;
|
unsigned char wt;
|
||||||
|
float lx, ly;
|
||||||
pixel pc;
|
pixel pc;
|
||||||
pixel gc;
|
pixel gc;
|
||||||
for (y=0; y<YRES/CELL; y++)
|
for (y=0; y<YRES/CELL; y++)
|
||||||
@ -3058,6 +3154,30 @@ void draw_walls(pixel *vid)
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// draw streamlines
|
||||||
|
for (y=0; y<YRES/CELL; y++)
|
||||||
|
for (x=0; x<XRES/CELL; x++)
|
||||||
|
if (bmap[y][x]==WL_STREAM)
|
||||||
|
{
|
||||||
|
lx = x*CELL + CELL*0.5f;
|
||||||
|
ly = y*CELL + CELL*0.5f;
|
||||||
|
for (t=0; t<1024; t++)
|
||||||
|
{
|
||||||
|
nx = (int)(lx+0.5f);
|
||||||
|
ny = (int)(ly+0.5f);
|
||||||
|
if (nx<0 || nx>=XRES || ny<0 || ny>=YRES)
|
||||||
|
break;
|
||||||
|
addpixel(vid, nx, ny, 255, 255, 255, 64);
|
||||||
|
i = nx/CELL;
|
||||||
|
j = ny/CELL;
|
||||||
|
lx += vx[j][i]*0.125f;
|
||||||
|
ly += vy[j][i]*0.125f;
|
||||||
|
if (bmap[j][i]==WL_STREAM && i!=x && j!=y)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
drawtext(vid, x*CELL, y*CELL-2, "\x8D", 255, 255, 255, 128);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_decorations(int x, int y, int rx, int ry, int r, int g, int b, int click, int tool)
|
void create_decorations(int x, int y, int rx, int ry, int r, int g, int b, int click, int tool)
|
||||||
|
@ -2883,6 +2883,7 @@ int sdl_poll(void)
|
|||||||
{
|
{
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
sdl_key=sdl_rkey=sdl_wheel=sdl_ascii=0;
|
sdl_key=sdl_rkey=sdl_wheel=sdl_ascii=0;
|
||||||
|
loop_time = SDL_GetTicks();
|
||||||
while (SDL_PollEvent(&event))
|
while (SDL_PollEvent(&event))
|
||||||
{
|
{
|
||||||
switch (event.type)
|
switch (event.type)
|
||||||
@ -5641,7 +5642,8 @@ unsigned int decorations_ui(pixel *vid_buf,int *bsx,int *bsy, unsigned int saved
|
|||||||
b = mouse_get_state(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
|
|
||||||
memcpy(vid_buf,old_buf,(XRES+BARSIZE)*(YRES+MENUSIZE)*PIXELSIZE);
|
memcpy(vid_buf,old_buf,(XRES+BARSIZE)*(YRES+MENUSIZE)*PIXELSIZE);
|
||||||
render_parts(vid_buf);
|
render_before(vid_buf);
|
||||||
|
render_after(vid_buf, NULL);
|
||||||
ui_edit_process(mx, my, b, &box_R);
|
ui_edit_process(mx, my, b, &box_R);
|
||||||
ui_edit_process(mx, my, b, &box_G);
|
ui_edit_process(mx, my, b, &box_G);
|
||||||
ui_edit_process(mx, my, b, &box_B);
|
ui_edit_process(mx, my, b, &box_B);
|
||||||
@ -5923,6 +5925,9 @@ unsigned int decorations_ui(pixel *vid_buf,int *bsx,int *bsy, unsigned int saved
|
|||||||
cb = PIXB(tempcolor);
|
cb = PIXB(tempcolor);
|
||||||
if (cr || cg || cb)
|
if (cr || cg || cb)
|
||||||
{
|
{
|
||||||
|
if (cr) cr++;
|
||||||
|
if (cg) cg++;
|
||||||
|
if (cb) cb++;
|
||||||
currR = cr;
|
currR = cr;
|
||||||
currG = cg;
|
currG = cg;
|
||||||
currB = cb;
|
currB = cb;
|
||||||
@ -6666,10 +6671,10 @@ void render_ui(pixel * vid_buf, int xcoord, int ycoord, int orientation)
|
|||||||
int render_optionicons[] = {0xE1, 0xDF, 0x9B, 0xC4, 0xBF, 0xDB};
|
int render_optionicons[] = {0xE1, 0xDF, 0x9B, 0xC4, 0xBF, 0xDB};
|
||||||
char * render_desc[] = {"Effects", "Glow", "Fire", "Blur", "Blob", "Basic"};
|
char * render_desc[] = {"Effects", "Glow", "Fire", "Blur", "Blob", "Basic"};
|
||||||
|
|
||||||
int display_optioncount = 7;
|
int display_optioncount = 6;
|
||||||
int display_options[] = {DISPLAY_AIRC, DISPLAY_AIRP, DISPLAY_AIRV, DISPLAY_AIRH, DISPLAY_WARP, DISPLAY_PERS, DISPLAY_EFFE};
|
int display_options[] = {DISPLAY_AIRC, DISPLAY_AIRP, DISPLAY_AIRV, DISPLAY_AIRH, DISPLAY_WARP, DISPLAY_PERS};
|
||||||
int display_optionicons[] = {0xD4, 0x99, 0x98, 0xBE, 0xDE, 0x9A, -1};
|
int display_optionicons[] = {0xD4, 0x99, 0x98, 0xBE, 0xDE, 0x9A};
|
||||||
char * display_desc[] = {"Air: Cracker", "Air: Pressure", "Air: Velocity", "Air: Heat", "Warp effect", "Persistent", "Effects"};
|
char * display_desc[] = {"Air: Cracker", "Air: Pressure", "Air: Velocity", "Air: Heat", "Warp effect", "Persistent"};
|
||||||
|
|
||||||
int colour_optioncount = 4;
|
int colour_optioncount = 4;
|
||||||
int colour_options[] = {COLOUR_BASC, COLOUR_LIFE, COLOUR_HEAT, COLOUR_GRAD};
|
int colour_options[] = {COLOUR_BASC, COLOUR_LIFE, COLOUR_HEAT, COLOUR_GRAD};
|
||||||
@ -6758,63 +6763,24 @@ void render_ui(pixel * vid_buf, int xcoord, int ycoord, int orientation)
|
|||||||
b = mouse_get_state(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
|
|
||||||
memcpy(vid_buf, o_vid_buf, ((YRES+MENUSIZE) * (XRES+BARSIZE)) * PIXELSIZE);
|
memcpy(vid_buf, o_vid_buf, ((YRES+MENUSIZE) * (XRES+BARSIZE)) * PIXELSIZE);
|
||||||
|
#ifdef OGLR
|
||||||
if(ngrav_enable && display_mode & DISPLAY_WARP)
|
part_vbuf = vid_buf;
|
||||||
|
#else
|
||||||
|
if(ngrav_enable && (display_mode & DISPLAY_WARP))
|
||||||
{
|
{
|
||||||
part_vbuf = part_vbuf_store;
|
part_vbuf = part_vbuf_store;
|
||||||
memset(vid_buf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
memset(vid_buf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
||||||
} else {
|
} else {
|
||||||
part_vbuf = vid_buf;
|
part_vbuf = vid_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OGLR
|
|
||||||
if (display_mode & DISPLAY_PERS)//save background for persistent, then clear
|
|
||||||
{
|
|
||||||
clearScreen(0.01f);
|
|
||||||
memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
}
|
|
||||||
else //clear screen every frame
|
|
||||||
{
|
|
||||||
clearScreen(1.0f);
|
|
||||||
memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
if (display_mode & DISPLAY_AIR)//air only gets drawn in these modes
|
|
||||||
{
|
|
||||||
draw_air(part_vbuf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (display_mode & DISPLAY_AIR)//air only gets drawn in these modes
|
|
||||||
{
|
|
||||||
draw_air(part_vbuf);
|
|
||||||
}
|
|
||||||
else if (display_mode & DISPLAY_PERS)//save background for persistent, then clear
|
|
||||||
{
|
|
||||||
memcpy(part_vbuf, pers_bg, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
memset(part_vbuf+((XRES+BARSIZE)*YRES), 0, ((XRES+BARSIZE)*YRES*PIXELSIZE)-((XRES+BARSIZE)*YRES*PIXELSIZE));
|
|
||||||
}
|
|
||||||
else //clear screen every frame
|
|
||||||
{
|
|
||||||
memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(ngrav_enable && drawgrav_enable)
|
|
||||||
draw_grav(vid_buf);
|
|
||||||
|
|
||||||
draw_walls(part_vbuf);
|
|
||||||
|
|
||||||
render_parts(part_vbuf);
|
|
||||||
draw_other(part_vbuf);
|
|
||||||
#ifndef OGLR
|
|
||||||
if (render_mode & FIREMODE)
|
|
||||||
render_fire(part_vbuf);
|
|
||||||
#endif
|
|
||||||
render_signs(part_vbuf);
|
|
||||||
|
|
||||||
#ifndef OGLR
|
|
||||||
if(ngrav_enable && display_mode & DISPLAY_WARP)
|
|
||||||
render_gravlensing(part_vbuf, vid_buf);
|
|
||||||
#endif
|
#endif
|
||||||
|
render_before(part_vbuf);
|
||||||
|
render_after(part_vbuf, vid_buf);
|
||||||
|
quickoptions_menu(vid_buf, b, bq, mx, my);
|
||||||
|
for (i=0; i<SC_TOTAL; i++)//draw all the menu sections
|
||||||
|
{
|
||||||
|
draw_menu(vid_buf, i, active_menu);
|
||||||
|
}
|
||||||
draw_svf_ui(vid_buf, sdl_mod & (KMOD_LCTRL|KMOD_RCTRL));
|
draw_svf_ui(vid_buf, sdl_mod & (KMOD_LCTRL|KMOD_RCTRL));
|
||||||
|
|
||||||
clearrect(vid_buf, xcoord-2, ycoord-2, xsize+4, ysize+4);
|
clearrect(vid_buf, xcoord-2, ycoord-2, xsize+4, ysize+4);
|
||||||
|
140
src/luaconsole.c
140
src/luaconsole.c
@ -96,6 +96,7 @@ void luacon_open(){
|
|||||||
{"screenshot",&luatpt_screenshot},
|
{"screenshot",&luatpt_screenshot},
|
||||||
{"element",&luatpt_getelement},
|
{"element",&luatpt_getelement},
|
||||||
{"element_func",&luatpt_element_func},
|
{"element_func",&luatpt_element_func},
|
||||||
|
{"graphics_func",&luatpt_graphics_func},
|
||||||
{NULL,NULL}
|
{NULL,NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -213,12 +214,15 @@ tpt.partsdata = nil");
|
|||||||
}
|
}
|
||||||
lua_setfield(l, tptProperties, "eltransition");
|
lua_setfield(l, tptProperties, "eltransition");
|
||||||
|
|
||||||
lua_el_func = calloc(PT_NUM, sizeof(int));
|
lua_el_func = (int*)calloc(PT_NUM, sizeof(int));
|
||||||
lua_el_mode = calloc(PT_NUM, sizeof(int));
|
lua_el_mode = (int*)calloc(PT_NUM, sizeof(int));
|
||||||
|
lua_gr_func = (int*)calloc(PT_NUM, sizeof(int));
|
||||||
for(i = 0; i < PT_NUM; i++)
|
for(i = 0; i < PT_NUM; i++)
|
||||||
{
|
{
|
||||||
lua_el_mode[i] = 0;
|
lua_el_mode[i] = 0;
|
||||||
|
lua_gr_func[i] = 0;
|
||||||
}
|
}
|
||||||
|
lua_sethook(l, &lua_hook, LUA_MASKCOUNT, 4000000);
|
||||||
}
|
}
|
||||||
#ifndef FFI
|
#ifndef FFI
|
||||||
int luacon_partread(lua_State* l){
|
int luacon_partread(lua_State* l){
|
||||||
@ -248,11 +252,11 @@ int luacon_partread(lua_State* l){
|
|||||||
switch(format)
|
switch(format)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
tempinteger = *((int*)(((void*)&parts[i])+offset));
|
tempinteger = *((int*)(((char*)&parts[i])+offset));
|
||||||
lua_pushnumber(l, tempinteger);
|
lua_pushnumber(l, tempinteger);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
tempfloat = *((float*)(((void*)&parts[i])+offset));
|
tempfloat = *((float*)(((char*)&parts[i])+offset));
|
||||||
lua_pushnumber(l, tempfloat);
|
lua_pushnumber(l, tempfloat);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -280,10 +284,10 @@ int luacon_partwrite(lua_State* l){
|
|||||||
switch(format)
|
switch(format)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
*((int*)(((void*)&parts[i])+offset)) = luaL_optinteger(l, 3, 0);
|
*((int*)(((char*)&parts[i])+offset)) = luaL_optinteger(l, 3, 0);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
*((float*)(((void*)&parts[i])+offset)) = luaL_optnumber(l, 3, 0);
|
*((float*)(((char*)&parts[i])+offset)) = luaL_optnumber(l, 3, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -410,11 +414,11 @@ int luacon_transitionread(lua_State* l){
|
|||||||
switch(format)
|
switch(format)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
tempinteger = *((int*)(((void*)&ptransitions[i])+offset));
|
tempinteger = *((int*)(((char*)&ptransitions[i])+offset));
|
||||||
lua_pushnumber(l, tempinteger);
|
lua_pushnumber(l, tempinteger);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
tempfloat = *((float*)(((void*)&ptransitions[i])+offset));
|
tempfloat = *((float*)(((char*)&ptransitions[i])+offset));
|
||||||
lua_pushnumber(l, tempfloat);
|
lua_pushnumber(l, tempfloat);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -444,10 +448,10 @@ int luacon_transitionwrite(lua_State* l){
|
|||||||
switch(format)
|
switch(format)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
*((int*)(((void*)&ptransitions[i])+offset)) = luaL_optinteger(l, 3, 0);
|
*((int*)(((char*)&ptransitions[i])+offset)) = luaL_optinteger(l, 3, 0);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
*((float*)(((void*)&ptransitions[i])+offset)) = luaL_optnumber(l, 3, 0);
|
*((float*)(((char*)&ptransitions[i])+offset)) = luaL_optnumber(l, 3, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -597,19 +601,19 @@ int luacon_elementread(lua_State* l){
|
|||||||
switch(format)
|
switch(format)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
tempinteger = *((int*)(((void*)&ptypes[i])+offset));
|
tempinteger = *((int*)(((char*)&ptypes[i])+offset));
|
||||||
lua_pushnumber(l, tempinteger);
|
lua_pushnumber(l, tempinteger);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
tempfloat = *((float*)(((void*)&ptypes[i])+offset));
|
tempfloat = *((float*)(((char*)&ptypes[i])+offset));
|
||||||
lua_pushnumber(l, tempfloat);
|
lua_pushnumber(l, tempfloat);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
tempstring = *((char**)(((void*)&ptypes[i])+offset));
|
tempstring = *((char**)(((char*)&ptypes[i])+offset));
|
||||||
lua_pushstring(l, tempstring);
|
lua_pushstring(l, tempstring);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
tempinteger = *((unsigned char*)(((void*)&ptypes[i])+offset));
|
tempinteger = *((unsigned char*)(((char*)&ptypes[i])+offset));
|
||||||
lua_pushnumber(l, tempinteger);
|
lua_pushnumber(l, tempinteger);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -641,10 +645,10 @@ int luacon_elementwrite(lua_State* l){
|
|||||||
switch(format)
|
switch(format)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
*((int*)(((void*)&ptypes[i])+offset)) = luaL_optinteger(l, 3, 0);
|
*((int*)(((char*)&ptypes[i])+offset)) = luaL_optinteger(l, 3, 0);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
*((float*)(((void*)&ptypes[i])+offset)) = luaL_optnumber(l, 3, 0);
|
*((float*)(((char*)&ptypes[i])+offset)) = luaL_optnumber(l, 3, 0);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
tempstring = mystrdup(luaL_optstring(l, 3, ""));
|
tempstring = mystrdup(luaL_optstring(l, 3, ""));
|
||||||
@ -667,11 +671,11 @@ int luacon_elementwrite(lua_State* l){
|
|||||||
return luaL_error(l, "Name in use");
|
return luaL_error(l, "Name in use");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*((char**)(((void*)&ptypes[i])+offset)) = tempstring;
|
*((char**)(((char*)&ptypes[i])+offset)) = tempstring;
|
||||||
//Need some way of cleaning up previous values
|
//Need some way of cleaning up previous values
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
*((unsigned char*)(((void*)&ptypes[i])+offset)) = luaL_optinteger(l, 3, 0);
|
*((unsigned char*)(((char*)&ptypes[i])+offset)) = luaL_optinteger(l, 3, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (modified_stuff)
|
if (modified_stuff)
|
||||||
@ -733,26 +737,39 @@ int luacon_step(int mx, int my, int selectl, int selectr){
|
|||||||
lua_setfield(l, tptProperties, "mousey");
|
lua_setfield(l, tptProperties, "mousey");
|
||||||
lua_setfield(l, tptProperties, "selectedl");
|
lua_setfield(l, tptProperties, "selectedl");
|
||||||
lua_setfield(l, tptProperties, "selectedr");
|
lua_setfield(l, tptProperties, "selectedr");
|
||||||
if(step_functions[0]){
|
for(i = 0; i<6; i++){
|
||||||
//Set mouse globals
|
if(step_functions[i]){
|
||||||
for(i = 0; i<6; i++){
|
loop_time = SDL_GetTicks();
|
||||||
if(step_functions[i]){
|
lua_rawgeti(l, LUA_REGISTRYINDEX, step_functions[i]);
|
||||||
lua_rawgeti(l, LUA_REGISTRYINDEX, step_functions[i]);
|
callret = lua_pcall(l, 0, 0, 0);
|
||||||
callret = lua_pcall(l, 0, 0, 0);
|
if (callret)
|
||||||
if (callret)
|
{
|
||||||
|
// failed, TODO: better error reporting
|
||||||
|
printf("%s\n",luacon_geterror());
|
||||||
|
if (!strcmp(luacon_geterror(),"Error: Infinite loop"))
|
||||||
{
|
{
|
||||||
// failed, TODO: better error reporting
|
lua_pushcfunction(l,&luatpt_unregister_step);
|
||||||
printf("%s\n",luacon_geterror());
|
lua_rawgeti(l, LUA_REGISTRYINDEX, step_functions[i]);
|
||||||
|
lua_pcall(l, 1, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return tempret;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int luacon_eval(char *command){
|
int luacon_eval(char *command){
|
||||||
|
loop_time = SDL_GetTicks();
|
||||||
return luaL_dostring (l, command);
|
return luaL_dostring (l, command);
|
||||||
}
|
}
|
||||||
|
void lua_hook(lua_State *L, lua_Debug *ar)
|
||||||
|
{
|
||||||
|
if(ar->event == LUA_HOOKCOUNT && SDL_GetTicks()-loop_time > 3000)
|
||||||
|
{
|
||||||
|
if (confirm_ui(vid_buf,"Infinite Loop","The Lua code might have an infinite loop. Press OK to stop it","OK"))
|
||||||
|
luaL_error(l,"Error: Infinite loop");
|
||||||
|
loop_time = SDL_GetTicks();
|
||||||
|
}
|
||||||
|
}
|
||||||
int luacon_part_update(int t, int i, int x, int y, int surround_space, int nt)
|
int luacon_part_update(int t, int i, int x, int y, int surround_space, int nt)
|
||||||
{
|
{
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
@ -771,6 +788,29 @@ int luacon_part_update(int t, int i, int x, int y, int surround_space, int nt)
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
int luacon_graphics_update(int t, int i, int *pixel_mode, int *cola, int *colr, int *colg, int *colb, int *firea, int *firer, int *fireg, int *fireb)
|
||||||
|
{
|
||||||
|
int cache = 0;
|
||||||
|
lua_rawgeti(l, LUA_REGISTRYINDEX, lua_gr_func[t]);
|
||||||
|
lua_pushinteger(l, i);
|
||||||
|
lua_pushinteger(l, *colr);
|
||||||
|
lua_pushinteger(l, *colg);
|
||||||
|
lua_pushinteger(l, *colb);
|
||||||
|
lua_pcall(l, 4, 10, 0);
|
||||||
|
|
||||||
|
cache = luaL_optint(l, 2, 0);
|
||||||
|
*pixel_mode = luaL_optint(l, 3, *pixel_mode);
|
||||||
|
*cola = luaL_optint(l, 4, *cola);
|
||||||
|
*colr = luaL_optint(l, 5, *colr);
|
||||||
|
*colg = luaL_optint(l, 6, *colg);
|
||||||
|
*colb = luaL_optint(l, 7, *colb);
|
||||||
|
*firea = luaL_optint(l, 8, *firea);
|
||||||
|
*firer = luaL_optint(l, 9, *firer);
|
||||||
|
*fireg = luaL_optint(l, 10, *fireg);
|
||||||
|
*fireb = luaL_optint(l, 11, *fireb);
|
||||||
|
lua_pop(l, 10);
|
||||||
|
return cache;
|
||||||
|
}
|
||||||
char *luacon_geterror(){
|
char *luacon_geterror(){
|
||||||
char *error = lua_tostring(l, -1);
|
char *error = lua_tostring(l, -1);
|
||||||
if(error==NULL || !error[0]){
|
if(error==NULL || !error[0]){
|
||||||
@ -855,6 +895,29 @@ int luatpt_element_func(lua_State *l)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
int luatpt_graphics_func(lua_State *l)
|
||||||
|
{
|
||||||
|
if(lua_isfunction(l, 1))
|
||||||
|
{
|
||||||
|
int element = luaL_optint(l, 2, 0);
|
||||||
|
int function;
|
||||||
|
lua_pushvalue(l, 1);
|
||||||
|
function = luaL_ref(l, LUA_REGISTRYINDEX);
|
||||||
|
if(element > 0 && element < PT_NUM)
|
||||||
|
{
|
||||||
|
lua_gr_func[element] = function;
|
||||||
|
graphicscache[element].isready = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return luaL_error(l, "Invalid element");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return luaL_error(l, "Not a function");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
int luatpt_error(lua_State* l)
|
int luatpt_error(lua_State* l)
|
||||||
{
|
{
|
||||||
char *error = "";
|
char *error = "";
|
||||||
@ -1075,8 +1138,13 @@ int luatpt_reset_spark(lua_State* l)
|
|||||||
{
|
{
|
||||||
if (parts[i].type==PT_SPRK)
|
if (parts[i].type==PT_SPRK)
|
||||||
{
|
{
|
||||||
parts[i].type = parts[i].ctype;
|
if (parts[i].ctype >= 0 && parts[i].ctype < PT_NUM)
|
||||||
parts[i].life = 4;
|
{
|
||||||
|
parts[i].type = parts[i].ctype;
|
||||||
|
parts[i].life = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
kill_part(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1270,7 +1338,7 @@ int luatpt_set_property(lua_State* l)
|
|||||||
} else {
|
} else {
|
||||||
t = luaL_optint(l, 2, 0);
|
t = luaL_optint(l, 2, 0);
|
||||||
}
|
}
|
||||||
if (format == 3 && (t<0 || t>=PT_NUM))
|
if (format == 3 && (t<0 || t>=PT_NUM || !ptypes[t].enabled))
|
||||||
return luaL_error(l, "Unrecognised element number '%d'", t);
|
return luaL_error(l, "Unrecognised element number '%d'", t);
|
||||||
} else {
|
} else {
|
||||||
name = luaL_optstring(l, 2, "dust");
|
name = luaL_optstring(l, 2, "dust");
|
||||||
@ -1462,9 +1530,9 @@ int luatpt_drawrect(lua_State* l)
|
|||||||
if (x<0 || y<0 || x>=XRES+BARSIZE || y>=YRES+MENUSIZE)
|
if (x<0 || y<0 || x>=XRES+BARSIZE || y>=YRES+MENUSIZE)
|
||||||
return luaL_error(l, "Screen coordinates out of range (%d,%d)", x, y);
|
return luaL_error(l, "Screen coordinates out of range (%d,%d)", x, y);
|
||||||
if(x+w > XRES+BARSIZE)
|
if(x+w > XRES+BARSIZE)
|
||||||
w = XRES-x;
|
w = XRES+BARSIZE-x;
|
||||||
if(y+h > YRES+MENUSIZE)
|
if(y+h > YRES+MENUSIZE)
|
||||||
h = YRES-y;
|
h = YRES+MENUSIZE-y;
|
||||||
if (r<0) r = 0;
|
if (r<0) r = 0;
|
||||||
if (r>255) r = 255;
|
if (r>255) r = 255;
|
||||||
if (g<0) g = 0;
|
if (g<0) g = 0;
|
||||||
@ -1496,9 +1564,9 @@ int luatpt_fillrect(lua_State* l)
|
|||||||
if (x<0 || y<0 || x>=XRES+BARSIZE || y>=YRES+MENUSIZE)
|
if (x<0 || y<0 || x>=XRES+BARSIZE || y>=YRES+MENUSIZE)
|
||||||
return luaL_error(l, "Screen coordinates out of range (%d,%d)", x, y);
|
return luaL_error(l, "Screen coordinates out of range (%d,%d)", x, y);
|
||||||
if(x+w > XRES+BARSIZE)
|
if(x+w > XRES+BARSIZE)
|
||||||
w = XRES-x;
|
w = XRES+BARSIZE-x;
|
||||||
if(y+h > YRES+MENUSIZE)
|
if(y+h > YRES+MENUSIZE)
|
||||||
h = YRES-y;
|
h = YRES+MENUSIZE-y;
|
||||||
if (r<0) r = 0;
|
if (r<0) r = 0;
|
||||||
if (r>255) r = 255;
|
if (r>255) r = 255;
|
||||||
if (g<0) g = 0;
|
if (g<0) g = 0;
|
||||||
@ -1893,6 +1961,8 @@ int luatpt_setdebug(lua_State* l)
|
|||||||
int luatpt_setfpscap(lua_State* l)
|
int luatpt_setfpscap(lua_State* l)
|
||||||
{
|
{
|
||||||
int fpscap = luaL_optint(l, 1, 0);
|
int fpscap = luaL_optint(l, 1, 0);
|
||||||
|
if (fpscap < 2)
|
||||||
|
return luaL_error(l, "fps cap too small");
|
||||||
limitFPS = fpscap;
|
limitFPS = fpscap;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
118
src/main.c
118
src/main.c
@ -151,7 +151,7 @@ static const char *it_msg =
|
|||||||
"\n"
|
"\n"
|
||||||
"Contributors: \bgStanislaw K Skowronek (\brhttp://powder.unaligned.org\bg, \bbirc.unaligned.org #wtf\bg),\n"
|
"Contributors: \bgStanislaw K Skowronek (\brhttp://powder.unaligned.org\bg, \bbirc.unaligned.org #wtf\bg),\n"
|
||||||
"\bgSimon Robertshaw, Skresanov Savely, cracker64, Catelite, Bryan Hoyle, Nathan Cousins, jacksonmj,\n"
|
"\bgSimon Robertshaw, Skresanov Savely, cracker64, Catelite, Bryan Hoyle, Nathan Cousins, jacksonmj,\n"
|
||||||
"\bgLieuwe Mosch, Anthony Boot, Matthew \"me4502\", MaksProg\n"
|
"\bgLieuwe Mosch, Anthony Boot, Matthew \"me4502\", MaksProg, jacob1\n"
|
||||||
"\n"
|
"\n"
|
||||||
"\bgTo use online features such as saving, you need to register at: \brhttp://powdertoy.co.uk/Register.html\n"
|
"\bgTo use online features such as saving, you need to register at: \brhttp://powdertoy.co.uk/Register.html\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -221,6 +221,7 @@ int frameidx = 0;
|
|||||||
//int CGOL = 0;
|
//int CGOL = 0;
|
||||||
//int GSPEED = 1;//causes my .exe to crash..
|
//int GSPEED = 1;//causes my .exe to crash..
|
||||||
int sound_enable = 0;
|
int sound_enable = 0;
|
||||||
|
int loop_time = 0;
|
||||||
|
|
||||||
int debug_flags = 0;
|
int debug_flags = 0;
|
||||||
int debug_perf_istart = 1;
|
int debug_perf_istart = 1;
|
||||||
@ -755,7 +756,7 @@ int main(int argc, char *argv[])
|
|||||||
void *http_ver_check, *http_session_check = NULL;
|
void *http_ver_check, *http_session_check = NULL;
|
||||||
char *ver_data=NULL, *check_data=NULL, *tmp;
|
char *ver_data=NULL, *check_data=NULL, *tmp;
|
||||||
//char console_error[255] = "";
|
//char console_error[255] = "";
|
||||||
int result, i, j, bq, bc = 0, fire_fc=0, do_check=0, do_s_check=0, old_version=0, http_ret=0,http_s_ret=0, major, minor, buildnum, is_beta = 0, old_ver_len, new_message_len=0;
|
int result, i, j, bq, bc = 0, do_check=0, do_s_check=0, old_version=0, http_ret=0,http_s_ret=0, major, minor, buildnum, is_beta = 0, old_ver_len, new_message_len=0;
|
||||||
#ifdef INTERNAL
|
#ifdef INTERNAL
|
||||||
int vs = 0;
|
int vs = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -770,6 +771,7 @@ int main(int argc, char *argv[])
|
|||||||
unsigned int rgbSave = PIXRGB(127,0,0);
|
unsigned int rgbSave = PIXRGB(127,0,0);
|
||||||
SDL_AudioSpec fmt;
|
SDL_AudioSpec fmt;
|
||||||
int username_flash = 0, username_flash_t = 1;
|
int username_flash = 0, username_flash_t = 1;
|
||||||
|
int saveOpenError = 0;
|
||||||
#ifdef PTW32_STATIC_LIB
|
#ifdef PTW32_STATIC_LIB
|
||||||
pthread_win32_process_attach_np();
|
pthread_win32_process_attach_np();
|
||||||
pthread_win32_thread_attach_np();
|
pthread_win32_thread_attach_np();
|
||||||
@ -779,7 +781,6 @@ int main(int argc, char *argv[])
|
|||||||
part_vbuf = calloc((XRES+BARSIZE)*(YRES+MENUSIZE), PIXELSIZE); //Extra video buffer
|
part_vbuf = calloc((XRES+BARSIZE)*(YRES+MENUSIZE), PIXELSIZE); //Extra video buffer
|
||||||
part_vbuf_store = part_vbuf;
|
part_vbuf_store = part_vbuf;
|
||||||
pers_bg = calloc((XRES+BARSIZE)*YRES, PIXELSIZE);
|
pers_bg = calloc((XRES+BARSIZE)*YRES, PIXELSIZE);
|
||||||
int saveOpenError = 0;
|
|
||||||
|
|
||||||
gravity_init();
|
gravity_init();
|
||||||
GSPEED = 1;
|
GSPEED = 1;
|
||||||
@ -902,12 +903,12 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else if (!strncmp(argv[i], "ptsave", 7) && i+1<argc)
|
else if (!strncmp(argv[i], "ptsave", 7) && i+1<argc)
|
||||||
{
|
{
|
||||||
puts("Got ptsave");
|
|
||||||
int ci = 0, ns = 0, okay = 0;
|
int ci = 0, ns = 0, okay = 0;
|
||||||
char * tempString = argv[i+1];
|
char * tempString = argv[i+1];
|
||||||
int tempStringLength = strlen(argv[i+1])-7;
|
int tempStringLength = strlen(argv[i+1])-7;
|
||||||
int tempSaveID = 0;
|
int tempSaveID = 0;
|
||||||
char tempNumberString[32];
|
char tempNumberString[32];
|
||||||
|
puts("Got ptsave");
|
||||||
i++;
|
i++;
|
||||||
tempNumberString[31] = 0;
|
tempNumberString[31] = 0;
|
||||||
tempNumberString[0] = 0;
|
tempNumberString[0] = 0;
|
||||||
@ -1002,54 +1003,12 @@ int main(int argc, char *argv[])
|
|||||||
update_airh();
|
update_airh();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OGLR
|
|
||||||
part_vbuf = vid_buf;
|
|
||||||
#else
|
|
||||||
if(ngrav_enable && display_mode & DISPLAY_WARP)
|
|
||||||
{
|
|
||||||
part_vbuf = part_vbuf_store;
|
|
||||||
memset(vid_buf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
} else {
|
|
||||||
part_vbuf = vid_buf;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(gravwl_timeout)
|
if(gravwl_timeout)
|
||||||
{
|
{
|
||||||
if(gravwl_timeout==1)
|
if(gravwl_timeout==1)
|
||||||
gravity_mask();
|
gravity_mask();
|
||||||
gravwl_timeout--;
|
gravwl_timeout--;
|
||||||
}
|
}
|
||||||
#ifdef OGLR
|
|
||||||
if (display_mode & DISPLAY_PERS)//save background for persistent, then clear
|
|
||||||
{
|
|
||||||
clearScreen(0.01f);
|
|
||||||
memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
}
|
|
||||||
else //clear screen every frame
|
|
||||||
{
|
|
||||||
clearScreen(1.0f);
|
|
||||||
memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
if (display_mode & DISPLAY_AIR)//air only gets drawn in these modes
|
|
||||||
{
|
|
||||||
draw_air(part_vbuf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (display_mode & DISPLAY_AIR)//air only gets drawn in these modes
|
|
||||||
{
|
|
||||||
draw_air(part_vbuf);
|
|
||||||
}
|
|
||||||
else if (display_mode & DISPLAY_PERS)//save background for persistent, then clear
|
|
||||||
{
|
|
||||||
memcpy(part_vbuf, pers_bg, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
memset(part_vbuf+((XRES+BARSIZE)*YRES), 0, ((XRES+BARSIZE)*YRES*PIXELSIZE)-((XRES+BARSIZE)*YRES*PIXELSIZE));
|
|
||||||
}
|
|
||||||
else //clear screen every frame
|
|
||||||
{
|
|
||||||
memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//Can't be too sure (Limit the cursor size)
|
//Can't be too sure (Limit the cursor size)
|
||||||
if (bsx>1180)
|
if (bsx>1180)
|
||||||
@ -1067,10 +1026,19 @@ int main(int argc, char *argv[])
|
|||||||
sandcolour_b = sandcolour_r = sandcolour_g = (int)(20.0f*sin((float)sandcolour_frame*(M_PI/180.0f)));
|
sandcolour_b = sandcolour_r = sandcolour_g = (int)(20.0f*sin((float)sandcolour_frame*(M_PI/180.0f)));
|
||||||
sandcolour_frame++;
|
sandcolour_frame++;
|
||||||
sandcolour_frame%=360;
|
sandcolour_frame%=360;
|
||||||
|
|
||||||
if(ngrav_enable && drawgrav_enable)
|
#ifdef OGLR
|
||||||
draw_grav(vid_buf);
|
part_vbuf = vid_buf;
|
||||||
draw_walls(part_vbuf);
|
#else
|
||||||
|
if(ngrav_enable && (display_mode & DISPLAY_WARP))
|
||||||
|
{
|
||||||
|
part_vbuf = part_vbuf_store;
|
||||||
|
memset(vid_buf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
||||||
|
} else {
|
||||||
|
part_vbuf = vid_buf;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
render_before(part_vbuf);
|
||||||
|
|
||||||
if(debug_flags & (DEBUG_PERFORMANCE_CALC|DEBUG_PERFORMANCE_FRAME))
|
if(debug_flags & (DEBUG_PERFORMANCE_CALC|DEBUG_PERFORMANCE_FRAME))
|
||||||
{
|
{
|
||||||
@ -1099,8 +1067,9 @@ int main(int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
render_parts(part_vbuf); //draw particles
|
render_after(part_vbuf, vid_buf);
|
||||||
draw_other(part_vbuf);
|
if(su == WL_GRAV+100)
|
||||||
|
draw_grav_zones(part_vbuf);
|
||||||
|
|
||||||
if(debug_flags & (DEBUG_PERFORMANCE_CALC|DEBUG_PERFORMANCE_FRAME))
|
if(debug_flags & (DEBUG_PERFORMANCE_CALC|DEBUG_PERFORMANCE_FRAME))
|
||||||
{
|
{
|
||||||
@ -1118,9 +1087,6 @@ int main(int argc, char *argv[])
|
|||||||
debug_perf_istart %= DEBUG_PERF_FRAMECOUNT;
|
debug_perf_istart %= DEBUG_PERF_FRAMECOUNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sl == WL_GRAV+100 || sr == WL_GRAV+100)
|
|
||||||
draw_grav_zones(part_vbuf);
|
|
||||||
|
|
||||||
gravity_update_async(); //Check for updated velocity maps from gravity thread
|
gravity_update_async(); //Check for updated velocity maps from gravity thread
|
||||||
if (!sys_pause||framerender) //Only update if not paused
|
if (!sys_pause||framerender) //Only update if not paused
|
||||||
memset(gravmap, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float)); //Clear the old gravmap
|
memset(gravmap, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float)); //Clear the old gravmap
|
||||||
@ -1130,31 +1096,6 @@ int main(int argc, char *argv[])
|
|||||||
sys_pause = 1;
|
sys_pause = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (display_mode & DISPLAY_PERS)
|
|
||||||
{
|
|
||||||
if (!fire_fc)//fire_fc has nothing to do with fire... it is a counter for diminishing persistent view every 3 frames
|
|
||||||
{
|
|
||||||
dim_copy_pers(pers_bg, vid_buf);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy(pers_bg, vid_buf, (XRES+BARSIZE)*YRES*PIXELSIZE);
|
|
||||||
}
|
|
||||||
fire_fc = (fire_fc+1) % 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OGLR
|
|
||||||
if (render_mode & FIREMODE)
|
|
||||||
render_fire(part_vbuf);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
render_signs(part_vbuf);
|
|
||||||
|
|
||||||
#ifndef OGLR
|
|
||||||
if(ngrav_enable && display_mode & DISPLAY_WARP)
|
|
||||||
render_gravlensing(part_vbuf, vid_buf);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
memset(vid_buf+((XRES+BARSIZE)*YRES), 0, (PIXELSIZE*(XRES+BARSIZE))*MENUSIZE);//clear menu areas
|
memset(vid_buf+((XRES+BARSIZE)*YRES), 0, (PIXELSIZE*(XRES+BARSIZE))*MENUSIZE);//clear menu areas
|
||||||
clearrect(vid_buf, XRES-1, 0, BARSIZE+1, YRES);
|
clearrect(vid_buf, XRES-1, 0, BARSIZE+1, YRES);
|
||||||
|
|
||||||
@ -1553,9 +1494,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rgbSave = decorations_ui(vid_buf,&bsx,&bsy,rgbSave);//decoration_mode = !decoration_mode;
|
|
||||||
decorations_enable = 1;
|
decorations_enable = 1;
|
||||||
sys_pause=1;
|
rgbSave = decorations_ui(vid_buf,&bsx,&bsy,rgbSave);//decoration_mode = !decoration_mode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sdl_key=='g')
|
if (sdl_key=='g')
|
||||||
@ -1590,8 +1530,13 @@ int main(int argc, char *argv[])
|
|||||||
for (i=0; i<NPART; i++)
|
for (i=0; i<NPART; i++)
|
||||||
if (parts[i].type==PT_SPRK)
|
if (parts[i].type==PT_SPRK)
|
||||||
{
|
{
|
||||||
parts[i].type = parts[i].ctype;
|
if (parts[i].ctype >= 0 && parts[i].ctype < PT_NUM)
|
||||||
parts[i].life = 0;
|
{
|
||||||
|
parts[i].type = parts[i].ctype;
|
||||||
|
parts[i].life = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
kill_part(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -2807,8 +2752,6 @@ int main(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
free(console);
|
free(console);
|
||||||
if (!console_mode)
|
|
||||||
hud_enable = 1;
|
|
||||||
#else
|
#else
|
||||||
char *console;
|
char *console;
|
||||||
sys_pause = 1;
|
sys_pause = 1;
|
||||||
@ -2821,12 +2764,9 @@ int main(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
free(console);
|
free(console);
|
||||||
if (!console_mode)
|
|
||||||
hud_enable = 1;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//execute python step hook
|
|
||||||
sdl_blit(0, 0, XRES+BARSIZE, YRES+MENUSIZE, vid_buf, XRES+BARSIZE);
|
sdl_blit(0, 0, XRES+BARSIZE, YRES+MENUSIZE, vid_buf, XRES+BARSIZE);
|
||||||
|
|
||||||
//Setting an element for the stick man
|
//Setting an element for the stick man
|
||||||
|
84
src/powder.c
84
src/powder.c
@ -176,6 +176,7 @@ void init_can_move()
|
|||||||
//whol eats anar
|
//whol eats anar
|
||||||
can_move[PT_ANAR][PT_WHOL] = 1;
|
can_move[PT_ANAR][PT_WHOL] = 1;
|
||||||
can_move[PT_ANAR][PT_NWHL] = 1;
|
can_move[PT_ANAR][PT_NWHL] = 1;
|
||||||
|
can_move[PT_THDR][PT_THDR] = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -257,7 +258,7 @@ int try_move(int i, int x, int y, int nx, int ny)
|
|||||||
|
|
||||||
if (!e) //if no movement
|
if (!e) //if no movement
|
||||||
{
|
{
|
||||||
if (parts[i].type!=PT_NEUT && parts[i].type!=PT_PHOT && parts[i].type!=PT_ELEC)
|
if (!(ptypes[parts[i].type].properties & TYPE_ENERGY))
|
||||||
return 0;
|
return 0;
|
||||||
if (!legacy_enable && parts[i].type==PT_PHOT && r)//PHOT heat conduction
|
if (!legacy_enable && parts[i].type==PT_PHOT && r)//PHOT heat conduction
|
||||||
{
|
{
|
||||||
@ -271,7 +272,7 @@ int try_move(int i, int x, int y, int nx, int ny)
|
|||||||
if (!parts[r>>8].ctype)
|
if (!parts[r>>8].ctype)
|
||||||
parts[r>>8].ctype = parts[i].type;
|
parts[r>>8].ctype = parts[i].type;
|
||||||
}
|
}
|
||||||
if ((r&0xFF)==PT_PRTI && (parts[i].type==PT_PHOT || parts[i].type==PT_NEUT || parts[i].type==PT_ELEC))
|
if ((r&0xFF)==PT_PRTI && (ptypes[parts[i].type].properties & TYPE_ENERGY))
|
||||||
{
|
{
|
||||||
int nnx, count;
|
int nnx, count;
|
||||||
for (count=0; count<8; count++)
|
for (count=0; count<8; count++)
|
||||||
@ -343,7 +344,8 @@ int try_move(int i, int x, int y, int nx, int ny)
|
|||||||
}
|
}
|
||||||
if ((r&0xFF)==PT_VOID || (r&0xFF)==PT_PVOD) //this is where void eats particles
|
if ((r&0xFF)==PT_VOID || (r&0xFF)==PT_PVOD) //this is where void eats particles
|
||||||
{
|
{
|
||||||
kill_part(i);
|
if(!parts[r>>8].ctype || (parts[r>>8].ctype==parts[i].type)!=(parts[r>>8].tmp&1))
|
||||||
|
kill_part(i);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if ((r&0xFF)==PT_BHOL || (r&0xFF)==PT_NBHL) //this is where blackhole eats particles
|
if ((r&0xFF)==PT_BHOL || (r&0xFF)==PT_NBHL) //this is where blackhole eats particles
|
||||||
@ -427,7 +429,7 @@ int do_move(int i, int x, int y, float nxf, float nyf)
|
|||||||
kill_part(i);
|
kill_part(i);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (t==PT_PHOT||t==PT_NEUT||t==PT_ELEC)
|
if (ptypes[t].properties & TYPE_ENERGY)
|
||||||
photons[ny][nx] = t|(i<<8);
|
photons[ny][nx] = t|(i<<8);
|
||||||
else if (t)
|
else if (t)
|
||||||
pmap[ny][nx] = t|(i<<8);
|
pmap[ny][nx] = t|(i<<8);
|
||||||
@ -678,7 +680,7 @@ inline void part_change_type(int i, int x, int y, int t)//changes the type of pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
parts[i].type = t;
|
parts[i].type = t;
|
||||||
if (t==PT_PHOT || t==PT_NEUT || t==PT_ELEC)
|
if (ptypes[t].properties & TYPE_ENERGY)
|
||||||
{
|
{
|
||||||
photons[y][x] = t|(i<<8);
|
photons[y][x] = t|(i<<8);
|
||||||
if ((pmap[y][x]>>8)==i)
|
if ((pmap[y][x]>>8)==i)
|
||||||
@ -717,23 +719,25 @@ inline int create_part(int p, int x, int y, int tv)//the function for creating a
|
|||||||
{
|
{
|
||||||
if (t==SPC_HEAT&&parts[pmap[y][x]>>8].temp<MAX_TEMP)
|
if (t==SPC_HEAT&&parts[pmap[y][x]>>8].temp<MAX_TEMP)
|
||||||
{
|
{
|
||||||
if ((pmap[y][x]&0xFF)==PT_PUMP || (pmap[y][x]&0xFF)==PT_GPMP) {
|
float heatchange;
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp + 0.1f, MIN_TEMP, MAX_TEMP);
|
int r = pmap[y][x], fast = ((sdl_mod & (KMOD_SHIFT)) && (sdl_mod & (KMOD_CTRL)));
|
||||||
} else if ((sdl_mod & (KMOD_SHIFT)) && (sdl_mod & (KMOD_CTRL))) {
|
if ((r&0xFF)==PT_PUMP || (r&0xFF)==PT_GPMP)
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp + 50.0f, MIN_TEMP, MAX_TEMP);
|
heatchange = fast?1.0f:.1f;
|
||||||
} else {
|
else
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp + 4.0f, MIN_TEMP, MAX_TEMP);
|
heatchange = fast?50.0f:4.0f;
|
||||||
}
|
|
||||||
|
parts[r>>8].temp = restrict_flt(parts[r>>8].temp + heatchange, MIN_TEMP, MAX_TEMP);
|
||||||
}
|
}
|
||||||
if (t==SPC_COOL&&parts[pmap[y][x]>>8].temp>MIN_TEMP)
|
if (t==SPC_COOL&&parts[pmap[y][x]>>8].temp>MIN_TEMP)
|
||||||
{
|
{
|
||||||
if ((pmap[y][x]&0xFF)==PT_PUMP || (pmap[y][x]&0xFF)==PT_GPMP) {
|
float heatchange;
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp - 0.1f, MIN_TEMP, MAX_TEMP);
|
int r = pmap[y][x], fast = ((sdl_mod & (KMOD_SHIFT)) && (sdl_mod & (KMOD_CTRL)));
|
||||||
} else if ((sdl_mod & (KMOD_SHIFT)) && (sdl_mod & (KMOD_CTRL))) {
|
if ((r&0xFF)==PT_PUMP || (r&0xFF)==PT_GPMP)
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp - 50.0f, MIN_TEMP, MAX_TEMP);
|
heatchange = fast?1.0f:.1f;
|
||||||
} else {
|
else
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp - 4.0f, MIN_TEMP, MAX_TEMP);
|
heatchange = fast?50.0f:4.0f;
|
||||||
}
|
|
||||||
|
parts[r>>8].temp = restrict_flt(parts[r>>8].temp - heatchange, MIN_TEMP, MAX_TEMP);
|
||||||
}
|
}
|
||||||
return pmap[y][x]>>8;
|
return pmap[y][x]>>8;
|
||||||
}
|
}
|
||||||
@ -843,7 +847,7 @@ inline int create_part(int p, int x, int y, int tv)//the function for creating a
|
|||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (photons[y][x] && (t==PT_PHOT||t==PT_NEUT||t==PT_ELEC))
|
if (photons[y][x] && (ptypes[t].properties & TYPE_ENERGY))
|
||||||
return -1;
|
return -1;
|
||||||
if (pfree == -1)
|
if (pfree == -1)
|
||||||
return -1;
|
return -1;
|
||||||
@ -963,7 +967,7 @@ inline int create_part(int p, int x, int y, int tv)//the function for creating a
|
|||||||
parts[i].tmp = 10;
|
parts[i].tmp = 10;
|
||||||
if (t==PT_BRAY)
|
if (t==PT_BRAY)
|
||||||
parts[i].life = 30;
|
parts[i].life = 30;
|
||||||
if (t==PT_PUMP)
|
if (t==PT_PUMP || t==PT_GPMP)
|
||||||
parts[i].life= 10;
|
parts[i].life= 10;
|
||||||
if (t==PT_SING)
|
if (t==PT_SING)
|
||||||
parts[i].life = rand()%50+60;
|
parts[i].life = rand()%50+60;
|
||||||
@ -1104,7 +1108,7 @@ inline int create_part(int p, int x, int y, int tv)//the function for creating a
|
|||||||
if (t==PT_BIZR||t==PT_BIZRG||t==PT_BIZRS)
|
if (t==PT_BIZR||t==PT_BIZRG||t==PT_BIZRS)
|
||||||
parts[i].ctype = 0x47FFFF;
|
parts[i].ctype = 0x47FFFF;
|
||||||
//and finally set the pmap/photon maps to the newly created particle
|
//and finally set the pmap/photon maps to the newly created particle
|
||||||
if (t==PT_PHOT||t==PT_NEUT||t==PT_ELEC)
|
if (ptypes[t].properties & TYPE_ENERGY)
|
||||||
photons[y][x] = t|(i<<8);
|
photons[y][x] = t|(i<<8);
|
||||||
else if (t!=PT_STKM && t!=PT_STKM2 && t!=PT_FIGH)
|
else if (t!=PT_STKM && t!=PT_STKM2 && t!=PT_FIGH)
|
||||||
pmap[y][x] = t|(i<<8);
|
pmap[y][x] = t|(i<<8);
|
||||||
@ -1440,7 +1444,7 @@ void create_arc(int sx, int sy, int dx, int dy, int midpoints, int variance, int
|
|||||||
void update_particles_i(pixel *vid, int start, int inc)
|
void update_particles_i(pixel *vid, int start, int inc)
|
||||||
{
|
{
|
||||||
int i, j, x, y, t, nx, ny, r, surround_space, s, lt, rt, nt, nnx, nny, q, golnum, goldelete, z, neighbors, createdsomething;
|
int i, j, x, y, t, nx, ny, r, surround_space, s, lt, rt, nt, nnx, nny, q, golnum, goldelete, z, neighbors, createdsomething;
|
||||||
float mv, dx, dy, ix, iy, lx, ly, nrx, nry, dp, ctemph, ctempl, gravtot;
|
float mv, dx, dy, ix, iy, lx, ly, nrx, nry, dp, ctemph, ctempl, gravtot, gel_scale;
|
||||||
int fin_x, fin_y, clear_x, clear_y, stagnant;
|
int fin_x, fin_y, clear_x, clear_y, stagnant;
|
||||||
float fin_xf, fin_yf, clear_xf, clear_yf;
|
float fin_xf, fin_yf, clear_xf, clear_yf;
|
||||||
float nn, ct1, ct2, swappage;
|
float nn, ct1, ct2, swappage;
|
||||||
@ -1878,7 +1882,7 @@ void update_particles_i(pixel *vid, int start, int inc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float gel_scale = 1.0f;
|
gel_scale = 1.0f;
|
||||||
if (t==PT_GEL)
|
if (t==PT_GEL)
|
||||||
gel_scale = parts[i].tmp*2.55f;
|
gel_scale = parts[i].tmp*2.55f;
|
||||||
|
|
||||||
@ -2349,7 +2353,7 @@ killed:
|
|||||||
stagnant = parts[i].flags & FLAG_STAGNANT;
|
stagnant = parts[i].flags & FLAG_STAGNANT;
|
||||||
parts[i].flags &= ~FLAG_STAGNANT;
|
parts[i].flags &= ~FLAG_STAGNANT;
|
||||||
|
|
||||||
if ((t==PT_PHOT||t==PT_NEUT||t==PT_ELEC)) {
|
if (ptypes[t].properties & TYPE_ENERGY) {
|
||||||
if (t == PT_PHOT) {
|
if (t == PT_PHOT) {
|
||||||
if (parts[i].flags&FLAG_SKIPMOVE)
|
if (parts[i].flags&FLAG_SKIPMOVE)
|
||||||
{
|
{
|
||||||
@ -2730,8 +2734,7 @@ movedone:
|
|||||||
int parts_lastActiveIndex = NPART-1;
|
int parts_lastActiveIndex = NPART-1;
|
||||||
void update_particles(pixel *vid)//doesn't update the particles themselves, but some other things
|
void update_particles(pixel *vid)//doesn't update the particles themselves, but some other things
|
||||||
{
|
{
|
||||||
int i, j, x, y, t, nx, ny, r, cr,cg,cb, l = -1;
|
int i, x, y, t;
|
||||||
float lx, ly;
|
|
||||||
int lastPartUsed = 0;
|
int lastPartUsed = 0;
|
||||||
int lastPartUnused = -1;
|
int lastPartUnused = -1;
|
||||||
#ifdef MT
|
#ifdef MT
|
||||||
@ -2751,7 +2754,7 @@ void update_particles(pixel *vid)//doesn't update the particles themselves, but
|
|||||||
y = (int)(parts[i].y+0.5f);
|
y = (int)(parts[i].y+0.5f);
|
||||||
if (x>=0 && y>=0 && x<XRES && y<YRES)
|
if (x>=0 && y>=0 && x<XRES && y<YRES)
|
||||||
{
|
{
|
||||||
if (t==PT_PHOT||t==PT_NEUT||t==PT_ELEC)
|
if (ptypes[t].properties & TYPE_ENERGY)
|
||||||
photons[y][x] = t|(i<<8);
|
photons[y][x] = t|(i<<8);
|
||||||
else
|
else
|
||||||
pmap[y][x] = t|(i<<8);
|
pmap[y][x] = t|(i<<8);
|
||||||
@ -2792,31 +2795,6 @@ void update_particles(pixel *vid)//doesn't update the particles themselves, but
|
|||||||
}
|
}
|
||||||
|
|
||||||
update_particles_i(vid, 0, 1);
|
update_particles_i(vid, 0, 1);
|
||||||
|
|
||||||
// this should probably be elsewhere
|
|
||||||
for (y=0; y<YRES/CELL; y++)
|
|
||||||
for (x=0; x<XRES/CELL; x++)
|
|
||||||
if (bmap[y][x]==WL_STREAM)
|
|
||||||
{
|
|
||||||
lx = x*CELL + CELL*0.5f;
|
|
||||||
ly = y*CELL + CELL*0.5f;
|
|
||||||
for (t=0; t<1024; t++)
|
|
||||||
{
|
|
||||||
nx = (int)(lx+0.5f);
|
|
||||||
ny = (int)(ly+0.5f);
|
|
||||||
if (nx<0 || nx>=XRES || ny<0 || ny>=YRES)
|
|
||||||
break;
|
|
||||||
addpixel(vid, nx, ny, 255, 255, 255, 64);
|
|
||||||
i = nx/CELL;
|
|
||||||
j = ny/CELL;
|
|
||||||
lx += vx[j][i]*0.125f;
|
|
||||||
ly += vy[j][i]*0.125f;
|
|
||||||
if (bmap[j][i]==WL_STREAM && i!=x && j!=y)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
drawtext(vid, x*CELL, y*CELL-2, "\x8D", 255, 255, 255, 128);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear_area(int area_x, int area_y, int area_w, int area_h)
|
void clear_area(int area_x, int area_y, int area_w, int area_h)
|
||||||
|
Reference in New Issue
Block a user