Added fighters.

This commit is contained in:
savask 2011-08-29 23:47:22 +07:00 committed by Simon Robertshaw
parent f8d54e66db
commit 00d604820d
5 changed files with 727 additions and 552 deletions

View File

@ -210,7 +210,8 @@
#define PT_CLST 155 #define PT_CLST 155
#define PT_WIRE 156 #define PT_WIRE 156
#define PT_GBMB 157 #define PT_GBMB 157
#define PT_NUM 158 #define PT_FIGH 158
#define PT_NUM 159
#define R_TEMP 22 #define R_TEMP 22
#define MAX_TEMP 9999 #define MAX_TEMP 9999
@ -327,6 +328,7 @@ int update_CLST(UPDATE_FUNC_ARGS);
int update_DLAY(UPDATE_FUNC_ARGS); int update_DLAY(UPDATE_FUNC_ARGS);
int update_WIRE(UPDATE_FUNC_ARGS); int update_WIRE(UPDATE_FUNC_ARGS);
int update_GBMB(UPDATE_FUNC_ARGS); int update_GBMB(UPDATE_FUNC_ARGS);
int update_FIGH(UPDATE_FUNC_ARGS);
int update_CO2(UPDATE_FUNC_ARGS); int update_CO2(UPDATE_FUNC_ARGS);
int update_CBNW(UPDATE_FUNC_ARGS); int update_CBNW(UPDATE_FUNC_ARGS);
int update_STOR(UPDATE_FUNC_ARGS); int update_STOR(UPDATE_FUNC_ARGS);
@ -574,6 +576,7 @@ static const part_type ptypes[PT_NUM] =
{"CLST", PIXPACK(0xE4A4A4), 0.7f, 0.02f * CFDS, 0.94f, 0.95f, 0.0f, 0.2f, 0.00f, 0.000f * CFDS, 1, 0, 0, 2, 2, 1, 1, 55, SC_POWDERS, R_TEMP+0.0f +273.15f, 70, "Clay dust. Produces paste when mixed with water.", ST_SOLID, TYPE_PART, &update_CLST}, {"CLST", PIXPACK(0xE4A4A4), 0.7f, 0.02f * CFDS, 0.94f, 0.95f, 0.0f, 0.2f, 0.00f, 0.000f * CFDS, 1, 0, 0, 2, 2, 1, 1, 55, SC_POWDERS, R_TEMP+0.0f +273.15f, 70, "Clay dust. Produces paste when mixed with water.", ST_SOLID, TYPE_PART, &update_CLST},
{"WIRE", PIXPACK(0xFFCC00), 0.0f, 0.00f * CFDS, 0.00f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 250, "WireWorld wires.",ST_SOLID,TYPE_SOLID,&update_WIRE}, {"WIRE", PIXPACK(0xFFCC00), 0.0f, 0.00f * CFDS, 0.00f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 250, "WireWorld wires.",ST_SOLID,TYPE_SOLID,&update_WIRE},
{"GBMB", PIXPACK(0x1144BB), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 1, 0, 0, 0, 20, 1, 1, 30, SC_EXPLOSIVE, R_TEMP-2.0f +273.15f, 29, "Sticks to first object it touches then produces strong gravity push.", ST_NONE, TYPE_PART|PROP_LIFE_DEC|PROP_LIFE_KILL_DEC, &update_GBMB}, {"GBMB", PIXPACK(0x1144BB), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 1, 0, 0, 0, 20, 1, 1, 30, SC_EXPLOSIVE, R_TEMP-2.0f +273.15f, 29, "Sticks to first object it touches then produces strong gravity push.", ST_NONE, TYPE_PART|PROP_LIFE_DEC|PROP_LIFE_KILL_DEC, &update_GBMB},
{"FIGH", PIXPACK(0x000000), 0.5f, 0.00f * CFDS, 0.2f, 1.0f, 0.0f, 0.0f, 0.0f, 0.00f * CFDS, 0, 0, 0, 0, 0, 1, 1, 50, SC_SPECIAL, R_TEMP+14.6f+273.15f, 0, "Fighter. Tries to kill stickmans.", ST_NONE, 0, &update_FIGH},
//Name Colour Advec Airdrag Airloss Loss Collid Grav Diffus Hotair Fal Burn Exp Mel Hrd M Use Weight Section H Ins Description //Name Colour Advec Airdrag Airloss Loss Collid Grav Diffus Hotair Fal Burn Exp Mel Hrd M Use Weight Section H Ins Description
}; };
@ -747,6 +750,7 @@ static part_transition ptransitions[PT_NUM] =
/* CLST */ {IPL, NT, IPH, NT, ITL, NT, 1256.0f, PT_LAVA}, /* CLST */ {IPL, NT, IPH, NT, ITL, NT, 1256.0f, PT_LAVA},
/* WIRE */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT}, /* WIRE */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
/* GBMB */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT}, /* GBMB */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
/* FIGH */ {IPL, NT, IPH, NT, ITL, NT, 620.0f, PT_FIRE},
}; };
#undef IPL #undef IPL
#undef IPH #undef IPH
@ -977,6 +981,9 @@ extern int gravwl_timeout;
extern float player[29]; extern float player[29];
extern float player2[29]; extern float player2[29];
extern float fighters[256][28];
extern unsigned char fighcount;
extern int gravityMode; extern int gravityMode;
extern int airMode; extern int airMode;

7
src/elements/figh.c Normal file
View File

@ -0,0 +1,7 @@
#include <element.h>
int update_FIGH(UPDATE_FUNC_ARGS)
{
run_stickman(fighters[(unsigned char)parts[i].tmp], UPDATE_FUNC_SUBCALL_ARGS);
return 0;
}

View File

@ -1023,19 +1023,97 @@ inline int drawchar(pixel *vid, int x, int y, int c, int r, int g, int b, int a)
ba >>= 2; ba >>= 2;
bn -= 2; bn -= 2;
} }
return x + w; return x + w;
} }
int drawtext(pixel *vid, int x, int y, const char *s, int r, int g, int b, int a) int drawtext(pixel *vid, int x, int y, const char *s, int r, int g, int b, int a)
{ {
#ifdef OpenGL #ifdef OpenGL
#else #else
int sx = x; int sx = x;
for (; *s; s++) for (; *s; s++)
{
if (*s == '\n')
{
x = sx;
y += FONT_H+2;
}
else if (*s == '\b')
{
switch (s[1])
{
case 'w':
r = g = b = 255;
break;
case 'g':
r = g = b = 192;
break;
case 'o':
r = 255;
g = 216;
b = 32;
break;
case 'r':
r = 255;
g = b = 0;
break;
case 'b':
r = g = 0;
b = 255;
break;
case 't':
b = 255;
g = 170;
r = 32;
break;
}
s++;
}
else
x = drawchar(vid, x, y, *(unsigned char *)s, r, g, b, a);
}
#endif
return x;
}
//Draw text with an outline
int drawtext_outline(pixel *vid, int x, int y, const char *s, int r, int g, int b, int a, int or, int og, int ob, int oa)
{
drawtext(vid, x-1, y-1, s, or, og, ob, oa);
drawtext(vid, x+1, y+1, s, or, og, ob, oa);
drawtext(vid, x-1, y+1, s, or, og, ob, oa);
drawtext(vid, x+1, y-1, s, or, og, ob, oa);
return drawtext(vid, x, y, s, r, g, b, a);
}
int drawtextwrap(pixel *vid, int x, int y, int w, const char *s, int r, int g, int b, int a)
{
#ifdef OpenGL
#else
int sx = x;
int rh = 12;
int rw = 0;
int cw = x;
int wordlen;
int charspace;
while (*s)
{
wordlen = strcspn(s," .,!?\n");
charspace = textwidthx((char *)s, w-(x-cw));
if (charspace<wordlen && wordlen && w-(x-cw)<w/3)
{
x = sx;
rw = 0;
y+=FONT_H+2;
rh+=FONT_H+2;
}
for (; *s && --wordlen>=-1; s++)
{ {
if (*s == '\n') if (*s == '\n')
{ {
x = sx; x = sx;
rw = 0;
y += FONT_H+2; y += FONT_H+2;
} }
else if (*s == '\b') else if (*s == '\b')
@ -1065,56 +1143,13 @@ int drawtext(pixel *vid, int x, int y, const char *s, int r, int g, int b, int a
r = g = 0; r = g = 0;
b = 255; b = 255;
break; break;
case 't':
b = 255;
g = 170;
r = 32;
break;
} }
s++; s++;
} }
else else
x = drawchar(vid, x, y, *(unsigned char *)s, r, g, b, a);
}
#endif
return x;
}
//Draw text with an outline
int drawtext_outline(pixel *vid, int x, int y, const char *s, int r, int g, int b, int a, int or, int og, int ob, int oa)
{
drawtext(vid, x-1, y-1, s, or, og, ob, oa);
drawtext(vid, x+1, y+1, s, or, og, ob, oa);
drawtext(vid, x-1, y+1, s, or, og, ob, oa);
drawtext(vid, x+1, y-1, s, or, og, ob, oa);
return drawtext(vid, x, y, s, r, g, b, a);
}
int drawtextwrap(pixel *vid, int x, int y, int w, const char *s, int r, int g, int b, int a)
{
#ifdef OpenGL
#else
int sx = x;
int rh = 12;
int rw = 0;
int cw = x;
int wordlen;
int charspace;
while (*s)
{ {
wordlen = strcspn(s," .,!?\n");
charspace = textwidthx((char *)s, w-(x-cw)); if (x-cw>=w)
if (charspace<wordlen && wordlen && w-(x-cw)<w/3)
{
x = sx;
rw = 0;
y+=FONT_H+2;
rh+=FONT_H+2;
}
for (; *s && --wordlen>=-1; s++)
{
if (*s == '\n')
{ {
x = sx; x = sx;
rw = 0; rw = 0;
@ -1167,36 +1202,38 @@ int drawtextwrap(pixel *vid, int x, int y, int w, const char *s, int r, int g, i
} }
x = drawchar(vid, x, y, *(unsigned char *)s, r, g, b, a); x = drawchar(vid, x, y, *(unsigned char *)s, r, g, b, a);
} }
x = drawchar(vid, x, y, *(unsigned char *)s, r, g, b, a);
} }
} }
}
return rh; return rh;
#endif #endif
} }
//draws a rectange, (x,y) are the top left coords. //draws a rectange, (x,y) are the top left coords.
void drawrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a) void drawrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a)
{ {
#ifdef OpenGL #ifdef OpenGL
glBegin(GL_LINE_LOOP); glBegin(GL_LINE_LOOP);
glColor4ub(r, g, b, a); glColor4ub(r, g, b, a);
glVertex2i(x, y); glVertex2i(x, y);
glVertex2i(x+w, y); glVertex2i(x+w, y);
glVertex2i(x+w, y+h); glVertex2i(x+w, y+h);
glVertex2i(x, y+h); glVertex2i(x, y+h);
glEnd(); glEnd();
#else #else
int i; int i;
for (i=0; i<=w; i++) for (i=0; i<=w; i++)
{ {
drawpixel(vid, x+i, y, r, g, b, a); drawpixel(vid, x+i, y, r, g, b, a);
drawpixel(vid, x+i, y+h, r, g, b, a); drawpixel(vid, x+i, y+h, r, g, b, a);
} }
for (i=1; i<h; i++) for (i=1; i<h; i++)
{ {
drawpixel(vid, x, y+i, r, g, b, a); drawpixel(vid, x, y+i, r, g, b, a);
drawpixel(vid, x+w, y+i, r, g, b, a); drawpixel(vid, x+w, y+i, r, g, b, a);
} }
#endif #endif
} }
@ -1204,16 +1241,16 @@ void drawrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a
void fillrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a) void fillrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a)
{ {
#ifdef OpenGL #ifdef OpenGL
glBegin(GL_QUADS); glBegin(GL_QUADS);
glColor4ub(r, g, b, a); glColor4ub(r, g, b, a);
glVertex2i(x, y); glVertex2i(x, y);
glVertex2i(x+w, y); glVertex2i(x+w, y);
glVertex2i(x+w, y+h); glVertex2i(x+w, y+h);
glVertex2i(x, y+h); glVertex2i(x, y+h);
glEnd(); glEnd();
#else #else
int i,j; int i,j;
for (j=1; j<h; j++) for (j=1; j<h; j++)
for (i=1; i<w; i++) for (i=1; i<w; i++)
drawpixel(vid, x+i, y+j, r, g, b, a); drawpixel(vid, x+i, y+j, r, g, b, a);
#endif // OpenGL #endif // OpenGL
@ -1221,70 +1258,70 @@ void fillrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a
void clearrect(pixel *vid, int x, int y, int w, int h) void clearrect(pixel *vid, int x, int y, int w, int h)
{ {
int i; int i;
for (i=1; i<h; i++) for (i=1; i<h; i++)
memset(vid+(x+1+(XRES+BARSIZE)*(y+i)), 0, PIXELSIZE*(w-1)); memset(vid+(x+1+(XRES+BARSIZE)*(y+i)), 0, PIXELSIZE*(w-1));
} }
//draws a line of dots, where h is the height. (why is this even here) //draws a line of dots, where h is the height. (why is this even here)
void drawdots(pixel *vid, int x, int y, int h, int r, int g, int b, int a) void drawdots(pixel *vid, int x, int y, int h, int r, int g, int b, int a)
{ {
#ifdef OpenGL #ifdef OpenGL
int i; int i;
glBegin(GL_QUADS); glBegin(GL_QUADS);
glColor4ub(r, g, b, a); glColor4ub(r, g, b, a);
for (i = 0; i <= h; i +=2) for (i = 0; i <= h; i +=2)
glVertex2i(x, y+i); glVertex2i(x, y+i);
glEnd(); glEnd();
#else #else
int i; int i;
for (i=0; i<=h; i+=2) for (i=0; i<=h; i+=2)
drawpixel(vid, x, y+i, r, g, b, a); drawpixel(vid, x, y+i, r, g, b, a);
#endif //OpenGL #endif //OpenGL
} }
int textwidth(char *s) int textwidth(char *s)
{ {
int x = 0; int x = 0;
for (; *s; s++) for (; *s; s++)
x += font_data[font_ptrs[(int)(*(unsigned char *)s)]]; x += font_data[font_ptrs[(int)(*(unsigned char *)s)]];
return x-1; return x-1;
} }
int drawtextmax(pixel *vid, int x, int y, int w, char *s, int r, int g, int b, int a) int drawtextmax(pixel *vid, int x, int y, int w, char *s, int r, int g, int b, int a)
{ {
int i; int i;
w += x-5; w += x-5;
for (; *s; s++) for (; *s; s++)
{ {
if (x+font_data[font_ptrs[(int)(*(unsigned char *)s)]]>=w && x+textwidth(s)>=w+5) if (x+font_data[font_ptrs[(int)(*(unsigned char *)s)]]>=w && x+textwidth(s)>=w+5)
break; break;
x = drawchar(vid, x, y, *(unsigned char *)s, r, g, b, a); x = drawchar(vid, x, y, *(unsigned char *)s, r, g, b, a);
} }
if (*s) if (*s)
for (i=0; i<3; i++) for (i=0; i<3; i++)
x = drawchar(vid, x, y, '.', r, g, b, a); x = drawchar(vid, x, y, '.', r, g, b, a);
return x; return x;
} }
int textnwidth(char *s, int n) int textnwidth(char *s, int n)
{ {
int x = 0; int x = 0;
for (; *s; s++) for (; *s; s++)
{ {
if (!n) if (!n)
break; break;
x += font_data[font_ptrs[(int)(*(unsigned char *)s)]]; x += font_data[font_ptrs[(int)(*(unsigned char *)s)]];
n--; n--;
} }
return x-1; return x-1;
} }
void textnpos(char *s, int n, int w, int *cx, int *cy) void textnpos(char *s, int n, int w, int *cx, int *cy)
{ {
int x = 0; int x = 0;
int y = 0; int y = 0;
int wordlen, charspace; int wordlen, charspace;
while (*s&&n) while (*s&&n)
{ {
wordlen = strcspn(s," .,!?\n"); wordlen = strcspn(s," .,!?\n");
charspace = textwidthx(s, w-x); charspace = textwidthx(s, w-x);
if (charspace<wordlen && wordlen && w-x<w/3) if (charspace<wordlen && wordlen && w-x<w/3)
@ -1305,29 +1342,29 @@ void textnpos(char *s, int n, int w, int *cx, int *cy)
} }
n--; n--;
} }
} }
*cx = x-1; *cx = x-1;
*cy = y; *cy = y;
} }
int textwidthx(char *s, int w) int textwidthx(char *s, int w)
{ {
int x=0,n=0,cw; int x=0,n=0,cw;
for (; *s; s++) for (; *s; s++)
{ {
cw = font_data[font_ptrs[(int)(*(unsigned char *)s)]]; cw = font_data[font_ptrs[(int)(*(unsigned char *)s)]];
if (x+(cw/2) >= w) if (x+(cw/2) >= w)
break; break;
x += cw; x += cw;
n++; n++;
} }
return n; return n;
} }
int textposxy(char *s, int width, int w, int h) int textposxy(char *s, int width, int w, int h)
{ {
int x=0,y=0,n=0,cw, wordlen, charspace; int x=0,y=0,n=0,cw, wordlen, charspace;
while (*s) while (*s)
{ {
wordlen = strcspn(s," .,!?\n"); wordlen = strcspn(s," .,!?\n");
charspace = textwidthx(s, width-x); charspace = textwidthx(s, width-x);
if (charspace<wordlen && wordlen && width-x<width/3) if (charspace<wordlen && wordlen && width-x<width/3)
@ -1347,16 +1384,16 @@ int textposxy(char *s, int width, int w, int h)
} }
n++; n++;
} }
} }
return n; return n;
} }
int textwrapheight(char *s, int width) int textwrapheight(char *s, int width)
{ {
int x=0, height=FONT_H+2, cw; int x=0, height=FONT_H+2, cw;
int wordlen; int wordlen;
int charspace; int charspace;
while (*s) while (*s)
{ {
wordlen = strcspn(s," .,!?\n"); wordlen = strcspn(s," .,!?\n");
charspace = textwidthx(s, width-x); charspace = textwidthx(s, width-x);
if (charspace<wordlen && wordlen && width-x<width/3) if (charspace<wordlen && wordlen && width-x<width/3)
@ -1386,8 +1423,8 @@ int textwrapheight(char *s, int width)
x += cw; x += cw;
} }
} }
} }
return height; return height;
} }
//the most used function for drawing a pixel, because it has OpenGL support, which is not fully implemented. //the most used function for drawing a pixel, because it has OpenGL support, which is not fully implemented.
@ -1424,30 +1461,30 @@ inline void blendpixel(pixel *vid, int x, int y, int r, int g, int b, int a)
void draw_icon(pixel *vid_buf, int x, int y, char ch, int flag) void draw_icon(pixel *vid_buf, int x, int y, char ch, int flag)
{ {
char t[2]; char t[2];
t[0] = ch; t[0] = ch;
t[1] = 0; t[1] = 0;
if (flag) if (flag)
{ {
fillrect(vid_buf, x-1, y-1, 17, 17, 255, 255, 255, 255); fillrect(vid_buf, x-1, y-1, 17, 17, 255, 255, 255, 255);
drawtext(vid_buf, x+3, y+2, t, 0, 0, 0, 255); drawtext(vid_buf, x+3, y+2, t, 0, 0, 0, 255);
} }
else else
{ {
drawrect(vid_buf, x, y, 15, 15, 255, 255, 255, 255); drawrect(vid_buf, x, y, 15, 15, 255, 255, 255, 255);
drawtext(vid_buf, x+3, y+2, t, 255, 255, 255, 255); drawtext(vid_buf, x+3, y+2, t, 255, 255, 255, 255);
} }
} }
void draw_air(pixel *vid) void draw_air(pixel *vid)
{ {
int x, y, i, j; int x, y, i, j;
pixel c; pixel c;
if (cmode == CM_PERS)//this should never happen anyway if (cmode == CM_PERS)//this should never happen anyway
return; return;
for (y=0; y<YRES/CELL; y++) for (y=0; y<YRES/CELL; y++)
for (x=0; x<XRES/CELL; x++) for (x=0; x<XRES/CELL; x++)
{ {
if (cmode == CM_PRESS) if (cmode == CM_PRESS)
@ -1512,9 +1549,9 @@ void draw_air(pixel *vid)
void draw_grav_zones(pixel * vid) void draw_grav_zones(pixel * vid)
{ {
int x, y, i, j; int x, y, i, j;
for (y=0; y<YRES/CELL; y++) for (y=0; y<YRES/CELL; y++)
{ {
for (x=0; x<XRES/CELL; x++) for (x=0; x<XRES/CELL; x++)
{ {
if(gravmask[y][x]) if(gravmask[y][x])
@ -1527,7 +1564,7 @@ void draw_grav_zones(pixel * vid)
drawpixel(vid, x*CELL+i, y*CELL+j, 32, 32, 32, 120); drawpixel(vid, x*CELL+i, y*CELL+j, 32, 32, 32, 120);
} }
} }
} }
} }
void draw_grav(pixel *vid) void draw_grav(pixel *vid)
@ -1535,9 +1572,16 @@ void draw_grav(pixel *vid)
int x, y, i, ca; int x, y, i, ca;
float nx, ny, dist; float nx, ny, dist;
for (y=0; y<YRES/CELL; y++) for (y=0; y<YRES/CELL; y++)
{ {
for (x=0; x<XRES/CELL; x++) for (x=0; x<XRES/CELL; x++)
{
if(fabsf(gravx[y][x]) <= 0.001f && fabsf(gravy[y][x]) <= 0.001f)
continue;
nx = x*CELL;
ny = y*CELL;
dist = fabsf(gravx[y][x])+fabsf(gravy[y][x]);
for(i = 0; i < 4; i++)
{ {
ca = ((y*CELL)*XRES)+(x*CELL); ca = ((y*CELL)*XRES)+(x*CELL);
if(fabsf(gravpf[ca]) <= 0.001f && fabsf(gravyf[ca]) <= 0.001f) if(fabsf(gravpf[ca]) <= 0.001f && fabsf(gravyf[ca]) <= 0.001f)
@ -1554,30 +1598,31 @@ void draw_grav(pixel *vid)
} }
} }
} }
}
void draw_line(pixel *vid, int x1, int y1, int x2, int y2, int r, int g, int b, int a) //Draws a line void draw_line(pixel *vid, int x1, int y1, int x2, int y2, int r, int g, int b, int a) //Draws a line
{ {
int dx, dy, i, sx, sy, check, e, x, y; int dx, dy, i, sx, sy, check, e, x, y;
dx = abs(x1-x2); dx = abs(x1-x2);
dy = abs(y1-y2); dy = abs(y1-y2);
sx = isign(x2-x1); sx = isign(x2-x1);
sy = isign(y2-y1); sy = isign(y2-y1);
x = x1; x = x1;
y = y1; y = y1;
check = 0; check = 0;
if (dy>dx) if (dy>dx)
{ {
dx = dx+dy; dx = dx+dy;
dy = dx-dy; dy = dx-dy;
dx = dx-dy; dx = dx-dy;
check = 1; check = 1;
} }
e = (dy<<2)-dx; e = (dy<<2)-dx;
for (i=0; i<=dx; i++) for (i=0; i<=dx; i++)
{ {
if (x>=0 && y>=0 && x<a && y<YRES+MENUSIZE) if (x>=0 && y>=0 && x<a && y<YRES+MENUSIZE)
vid[x+y*a] =PIXRGB(r, g, b); vid[x+y*a] =PIXRGB(r, g, b);
if (e>=0) if (e>=0)
@ -1593,76 +1638,76 @@ void draw_line(pixel *vid, int x1, int y1, int x2, int y2, int r, int g, int b,
else else
x = x+sx; x = x+sx;
e = e+(dy<<2); e = e+(dy<<2);
} }
} }
//adds color to a pixel, does not overwrite. //adds color to a pixel, does not overwrite.
void addpixel(pixel *vid, int x, int y, int r, int g, int b, int a) void addpixel(pixel *vid, int x, int y, int r, int g, int b, int a)
{ {
pixel t; pixel t;
if (x<0 || y<0 || x>=XRES || y>=YRES) if (x<0 || y<0 || x>=XRES || y>=YRES)
return; return;
t = vid[y*(XRES+BARSIZE)+x]; t = vid[y*(XRES+BARSIZE)+x];
r = (a*r + 255*PIXR(t)) >> 8; r = (a*r + 255*PIXR(t)) >> 8;
g = (a*g + 255*PIXG(t)) >> 8; g = (a*g + 255*PIXG(t)) >> 8;
b = (a*b + 255*PIXB(t)) >> 8; b = (a*b + 255*PIXB(t)) >> 8;
if (r>255) if (r>255)
r = 255; r = 255;
if (g>255) if (g>255)
g = 255; g = 255;
if (b>255) if (b>255)
b = 255; b = 255;
vid[y*(XRES+BARSIZE)+x] = PIXRGB(r,g,b); vid[y*(XRES+BARSIZE)+x] = PIXRGB(r,g,b);
} }
//draws one of two colors, so that it is always clearly visible //draws one of two colors, so that it is always clearly visible
void xor_pixel(int x, int y, pixel *vid) void xor_pixel(int x, int y, pixel *vid)
{ {
int c; int c;
if (x<0 || y<0 || x>=XRES || y>=YRES) if (x<0 || y<0 || x>=XRES || y>=YRES)
return; return;
c = vid[y*(XRES+BARSIZE)+x]; c = vid[y*(XRES+BARSIZE)+x];
c = PIXB(c) + 3*PIXG(c) + 2*PIXR(c); c = PIXB(c) + 3*PIXG(c) + 2*PIXR(c);
if (c<512) if (c<512)
vid[y*(XRES+BARSIZE)+x] = PIXPACK(0xC0C0C0); vid[y*(XRES+BARSIZE)+x] = PIXPACK(0xC0C0C0);
else else
vid[y*(XRES+BARSIZE)+x] = PIXPACK(0x404040); vid[y*(XRES+BARSIZE)+x] = PIXPACK(0x404040);
} }
//same as xor_pixel, but draws a line of it //same as xor_pixel, but draws a line of it
void xor_line(int x1, int y1, int x2, int y2, pixel *vid) void xor_line(int x1, int y1, int x2, int y2, pixel *vid)
{ {
int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy; int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy;
float e, de; float e, de;
if (cp) if (cp)
{ {
y = x1; y = x1;
x1 = y1; x1 = y1;
y1 = y; y1 = y;
y = x2; y = x2;
x2 = y2; x2 = y2;
y2 = y; y2 = y;
} }
if (x1 > x2) if (x1 > x2)
{ {
y = x1; y = x1;
x1 = x2; x1 = x2;
x2 = y; x2 = y;
y = y1; y = y1;
y1 = y2; y1 = y2;
y2 = y; y2 = y;
} }
dx = x2 - x1; dx = x2 - x1;
dy = abs(y2 - y1); dy = abs(y2 - y1);
e = 0.0f; e = 0.0f;
if (dx) if (dx)
de = dy/(float)dx; de = dy/(float)dx;
else else
de = 0.0f; de = 0.0f;
y = y1; y = y1;
sy = (y1<y2) ? 1 : -1; sy = (y1<y2) ? 1 : -1;
for (x=x1; x<=x2; x++) for (x=x1; x<=x2; x++)
{ {
if (cp) if (cp)
xor_pixel(y, x, vid); xor_pixel(y, x, vid);
else else
@ -1673,43 +1718,43 @@ void xor_line(int x1, int y1, int x2, int y2, pixel *vid)
y += sy; y += sy;
e -= 1.0f; e -= 1.0f;
} }
} }
} }
//same as blend_pixel, but draws a line of it //same as blend_pixel, but draws a line of it
void blend_line(pixel *vid, int x1, int y1, int x2, int y2, int r, int g, int b, int a) void blend_line(pixel *vid, int x1, int y1, int x2, int y2, int r, int g, int b, int a)
{ {
int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy; int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy;
float e, de; float e, de;
if (cp) if (cp)
{ {
y = x1; y = x1;
x1 = y1; x1 = y1;
y1 = y; y1 = y;
y = x2; y = x2;
x2 = y2; x2 = y2;
y2 = y; y2 = y;
} }
if (x1 > x2) if (x1 > x2)
{ {
y = x1; y = x1;
x1 = x2; x1 = x2;
x2 = y; x2 = y;
y = y1; y = y1;
y1 = y2; y1 = y2;
y2 = y; y2 = y;
} }
dx = x2 - x1; dx = x2 - x1;
dy = abs(y2 - y1); dy = abs(y2 - y1);
e = 0.0f; e = 0.0f;
if (dx) if (dx)
de = dy/(float)dx; de = dy/(float)dx;
else else
de = 0.0f; de = 0.0f;
y = y1; y = y1;
sy = (y1<y2) ? 1 : -1; sy = (y1<y2) ? 1 : -1;
for (x=x1; x<=x2; x++) for (x=x1; x<=x2; x++)
{ {
if (cp) if (cp)
blendpixel(vid, y, x, r, g, b, a); blendpixel(vid, y, x, r, g, b, a);
else else
@ -1720,23 +1765,23 @@ void blend_line(pixel *vid, int x1, int y1, int x2, int y2, int r, int g, int b,
y += sy; y += sy;
e -= 1.0f; e -= 1.0f;
} }
} }
} }
//same as xor_pixel, but draws a rectangle //same as xor_pixel, but draws a rectangle
void xor_rect(pixel *vid, int x, int y, int w, int h) void xor_rect(pixel *vid, int x, int y, int w, int h)
{ {
int i; int i;
for (i=0; i<w; i+=2) for (i=0; i<w; i+=2)
{ {
xor_pixel(x+i, y, vid); xor_pixel(x+i, y, vid);
xor_pixel(x+i, y+h-1, vid); xor_pixel(x+i, y+h-1, vid);
} }
for (i=2; i<h; i+=2) for (i=2; i<h; i+=2)
{ {
xor_pixel(x, y+i, vid); xor_pixel(x, y+i, vid);
xor_pixel(x+w-1, y+i, vid); xor_pixel(x+w-1, y+i, vid);
} }
} }
void draw_other(pixel *vid) // EMP effect void draw_other(pixel *vid) // EMP effect
@ -1784,6 +1829,16 @@ void draw_parts(pixel *vid)
} }
} }
for (i = 0; i<=parts_lastActiveIndex; i++) { for (i = 0; i<=parts_lastActiveIndex; i++) {
#ifdef OpenGL
if (cmode == CM_FANCY) //If fancy mode
{
if (ny%(4*GRID_MODE)==0)
blendpixel(vid, nx, ny, 100, 100, 100, 80);
if (nx%(4*GRID_MODE)==0)
blendpixel(vid, nx, ny, 100, 100, 100, 80);
}
}
for (i = 0; i<=parts_lastActiveIndex; i++) {
#ifdef OpenGL #ifdef OpenGL
if (cmode == CM_FANCY) //If fancy mode if (cmode == CM_FANCY) //If fancy mode
{ {
@ -1917,7 +1972,32 @@ void draw_parts(pixel *vid)
draw_line(vid , nx, ny+3, player2[11], player2[12], 100, 100, 255, s); draw_line(vid , nx, ny+3, player2[11], player2[12], 100, 100, 255, s);
draw_line(vid , player2[11], player2[12], player2[15], player2[16], 100, 100, 255, s); draw_line(vid , player2[11], player2[12], player2[15], player2[16], 100, 100, 255, s);
} }
if (cmode==CM_NOTHING && t!=PT_PIPE && t!=PT_SWCH && t!=PT_LCRY && t!=PT_PUMP && t!=PT_GPMP && t!=PT_PBCN && t!=PT_FILT && t!=PT_HSWC && t!=PT_PCLN && t!=PT_DEUT && t!=PT_WIFI && t!=PT_LIFE && t!=PT_PVOD)//nothing display but show needed color changes else if (t==PT_FIGH) //Fighter should be visible in heat mode
{
char buff[10]; //Buffer for HP
pixel pc;
float *figh = fighters[(unsigned char)parts[i].tmp];
if (mousex>(nx-3) && mousex<(nx+3) && mousey<(ny+3) && mousey>(ny-3)) //If mous is in the head
{
sprintf(buff, "%3d", parts[i].life); //Show HP
drawtext(vid, mousex-8-2*(parts[i].life<100)-2*(parts[i].life<10), mousey-12, buff, 255, 255, 255, 255);
}
if ((int)figh[2]<PT_NUM) pc = ptypes[(int)figh[2]].pcolors;
else pc = PIXPACK(0xFFFFFF);
s = XRES+BARSIZE;
//head
draw_line(vid , nx, ny+2, nx+2, ny, PIXR(pc), PIXG(pc), PIXB(pc), s);
draw_line(vid , nx+2, ny, nx, ny-2, PIXR(pc), PIXG(pc), PIXB(pc), s);
draw_line(vid , nx, ny-2, nx-2, ny, PIXR(pc), PIXG(pc), PIXB(pc), s);
draw_line(vid , nx-2, ny, nx, ny+2, PIXR(pc), PIXG(pc), PIXB(pc), s);
//legs
draw_line(vid , nx, ny+3, figh[3], figh[4], 255, 255, 255, s);
draw_line(vid , figh[3], figh[4], figh[7], figh[8], 255, 255, 255, s);
draw_line(vid , nx, ny+3, figh[11], figh[12], 255, 255, 255, s);
draw_line(vid , figh[11], figh[12], figh[15], figh[16], 255, 255, 255, s);
}
if (cmode==CM_NOTHING && t!=PT_PIPE && t!=PT_SWCH && t!=PT_LCRY && t!=PT_PUMP && t!=PT_GPMP && t!=PT_PBCN && t!=PT_FILT && t!=PT_HSWC && t!=PT_PCLN && t!=PT_DEUT && t!=PT_WIFI && t!=PT_LIFE)//nothing display but show needed color changes
{ {
if (t==PT_PHOT) if (t==PT_PHOT)
{ {
@ -3835,6 +3915,29 @@ void draw_parts(pixel *vid)
draw_line(vid , nx, ny+3, player2[11], player2[12], R, G, B, s); draw_line(vid , nx, ny+3, player2[11], player2[12], R, G, B, s);
draw_line(vid , player2[11], player2[12], player2[15], player2[16], R, G, B, s); draw_line(vid , player2[11], player2[12], player2[15], player2[16], R, G, B, s);
} }
else if (t==PT_FIGH) //Fighter should be visible in heat mode
{
char buff[10]; //Buffer for HP
float *figh = fighters[(unsigned char)parts[i].tmp];
if (mousex>(nx-3) && mousex<(nx+3) && mousey<(ny+3) && mousey>(ny-3)) //If mous is in the head
{
sprintf(buff, "%3d", parts[i].life); //Show HP
drawtext(vid, mousex-8-2*(parts[i].life<100)-2*(parts[i].life<10), mousey-12, buff, 255, 255, 255, 255);
}
s = XRES+BARSIZE;
//head
draw_line(vid , nx, ny+2, nx+2, ny, R, G, B, s);
draw_line(vid , nx+2, ny, nx, ny-2, R, G, B, s);
draw_line(vid , nx, ny-2, nx-2, ny, R, G, B, s);
draw_line(vid , nx-2, ny, nx, ny+2, R, G, B, s);
//legs
draw_line(vid , nx, ny+3, figh[3], figh[4], R, G, B, s);
draw_line(vid , figh[3], figh[4], figh[7], figh[8], R, G, B, s);
draw_line(vid , nx, ny+3, figh[11], figh[12], R, G, B, s);
draw_line(vid , figh[11], figh[12], figh[15], figh[16], R, G, B, s);
}
else else
{ {
vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(R, G, B); vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(R, G, B);
@ -4706,10 +4809,10 @@ pixel *prerender_save(void *save, int size, int *width, int *height)
j=d[p++]; j=d[p++];
if (j<PT_NUM && j>0) if (j<PT_NUM && j>0)
{ {
if (j==PT_STKM || j==PT_STKM2) if (j==PT_STKM || j==PT_STKM2 || j==PT_FIGH)
{ {
pixel lc, hc=PIXRGB(255, 224, 178); pixel lc, hc=PIXRGB(255, 224, 178);
if (j==PT_STKM) lc = PIXRGB(255, 255, 255); if (j==PT_STKM || j==PT_FIGH) lc = PIXRGB(255, 255, 255);
else lc = PIXRGB(100, 100, 255); else lc = PIXRGB(100, 100, 255);
//only need to check upper bound of y coord - lower bounds and x<w are checked in draw_line //only need to check upper bound of y coord - lower bounds and x<w are checked in draw_line
draw_line(fb , x-2, y-2, x+2, y-2, PIXR(hc), PIXG(hc), PIXB(hc), w); draw_line(fb , x-2, y-2, x+2, y-2, PIXR(hc), PIXG(hc), PIXB(hc), w);

View File

@ -1113,6 +1113,8 @@ void clear_sim(void)
memset(wireless, 0, sizeof(wireless)); memset(wireless, 0, sizeof(wireless));
memset(gol2, 0, sizeof(gol2)); memset(gol2, 0, sizeof(gol2));
memset(portalp, 0, sizeof(portalp)); memset(portalp, 0, sizeof(portalp));
memset(fighters, 0, sizeof(fighters));
fighcount = 0;
ISSPAWN1 = ISSPAWN2 = 0; ISSPAWN1 = ISSPAWN2 = 0;
player[27] = 0; player[27] = 0;
player2[27] = 0; player2[27] = 0;
@ -3115,7 +3117,7 @@ int main(int argc, char *argv[])
c = (b&1) ? sl : sr; //c is element to be spawned c = (b&1) ? sl : sr; //c is element to be spawned
su = c; su = c;
if (c!=WL_SIGN+100) if (c!=WL_SIGN+100 && c!=PT_FIGH)
{ {
if (!bq) if (!bq)
for (signi=0; signi<MAXSIGNS; signi++) for (signi=0; signi<MAXSIGNS; signi++)
@ -3144,6 +3146,12 @@ int main(int argc, char *argv[])
if (!bq) if (!bq)
add_sign_ui(vid_buf, x, y); add_sign_ui(vid_buf, x, y);
} }
if (c==PT_FIGH)
{
if (!bq)
create_part(-1, x, y, PT_FIGH);
}
//for the click functions, lx and ly, are the positions of where the FIRST click happened. x,y are current mouse position. //for the click functions, lx and ly, are the positions of where the FIRST click happened. x,y are current mouse position.
else if (lb)//lb means you are holding mouse down else if (lb)//lb means you are holding mouse down
{ {

View File

@ -16,6 +16,9 @@ int lighting_recreate = 0;
float player[29]; float player[29];
float player2[29]; float player2[29];
float fighters[256][28]; //255 is the maximum number of fighters
unsigned char fighcount = 0; //Contains the number of fighters
particle *parts; particle *parts;
particle *cb_parts; particle *cb_parts;
@ -110,6 +113,7 @@ void init_can_move()
//all stickman collisions are done in stickman update function //all stickman collisions are done in stickman update function
can_move[PT_STKM][t] = 2; can_move[PT_STKM][t] = 2;
can_move[PT_STKM2][t] = 2; can_move[PT_STKM2][t] = 2;
can_move[PT_FIGH][t] = 2;
} }
for (t=0;t<PT_NUM;t++) for (t=0;t<PT_NUM;t++)
{ {
@ -120,6 +124,7 @@ void init_can_move()
//all stickman collisions are done in stickman update function //all stickman collisions are done in stickman update function
can_move[t][PT_STKM] = 2; can_move[t][PT_STKM] = 2;
can_move[t][PT_STKM2] = 2; can_move[t][PT_STKM2] = 2;
can_move[PT_FIGH][t] = 2;
//INVIS behaviour varies with pressure //INVIS behaviour varies with pressure
can_move[t][PT_INVIS] = 3; can_move[t][PT_INVIS] = 3;
//stop CNCT being displaced by other particles //stop CNCT being displaced by other particles
@ -310,6 +315,11 @@ int try_move(int i, int x, int y, int nx, int ny)
{ {
player2[27] = 0; player2[27] = 0;
} }
if (parts[i].type == PT_FIGH)
{
fighters[(unsigned char)parts[i].tmp][27] = 0;
fighcount--;
}
parts[i].type=PT_NONE; parts[i].type=PT_NONE;
return 0; return 0;
} }
@ -323,6 +333,11 @@ int try_move(int i, int x, int y, int nx, int ny)
{ {
player2[27] = 0; player2[27] = 0;
} }
if (parts[i].type == PT_FIGH)
{
fighters[(unsigned char)parts[i].tmp][27] = 0;
fighcount--;
}
parts[i].type=PT_NONE; parts[i].type=PT_NONE;
if (!legacy_enable) if (!legacy_enable)
{ {
@ -592,6 +607,11 @@ void kill_part(int i)//kills particle number i
{ {
player2[27] = 0; player2[27] = 0;
} }
if (parts[i].type == PT_FIGH)
{
fighters[(unsigned char)parts[i].tmp][27] = 0;
fighcount--;
}
if (parts[i].type == PT_SPAWN) if (parts[i].type == PT_SPAWN)
{ {
ISSPAWN1 = 0; ISSPAWN1 = 0;
@ -633,6 +653,12 @@ inline void part_change_type(int i, int x, int y, int t)//changes the type of pa
if (parts[i].type == PT_STKM2) if (parts[i].type == PT_STKM2)
player2[27] = 0; player2[27] = 0;
if (parts[i].type == PT_FIGH)
{
fighters[(unsigned char)parts[i].tmp][27] = 0;
fighcount--;
}
parts[i].type = t; parts[i].type = t;
if (t==PT_PHOT || t==PT_NEUT) if (t==PT_PHOT || t==PT_NEUT)
{ {
@ -761,7 +787,7 @@ inline int create_part(int p, int x, int y, int tv)//the function for creating a
{ {
if ((pmap[y][x]&0xFF)!=PT_SPAWN&&(pmap[y][x]&0xFF)!=PT_SPAWN2) if ((pmap[y][x]&0xFF)!=PT_SPAWN&&(pmap[y][x]&0xFF)!=PT_SPAWN2)
{ {
if (t!=PT_STKM&&t!=PT_STKM2) if (t!=PT_STKM&&t!=PT_STKM2&&t!=PT_FIGH)
{ {
return -1; return -1;
} }
@ -787,7 +813,7 @@ inline int create_part(int p, int x, int y, int tv)//the function for creating a
t!=PT_CLNE&&t!=PT_PCLN&& t!=PT_CLNE&&t!=PT_PCLN&&
t!=PT_BCLN&&t!=PT_STKM&& t!=PT_BCLN&&t!=PT_STKM&&
t!=PT_STKM2&&t!=PT_PBCN&& t!=PT_STKM2&&t!=PT_PBCN&&
t!=PT_STOR) t!=PT_STOR&&t!=PT_FIGH)
) )
{ {
parts[pmap[y][x]>>8].ctype = t; parts[pmap[y][x]>>8].ctype = t;
@ -836,7 +862,7 @@ inline int create_part(int p, int x, int y, int tv)//the function for creating a
parts[i].pavg[0] = 0.0f; parts[i].pavg[0] = 0.0f;
parts[i].pavg[1] = 0.0f; parts[i].pavg[1] = 0.0f;
} }
if (t!=PT_STKM&&t!=PT_STKM2)//set everything to default values first, except for stickman. if (t!=PT_STKM&&t!=PT_STKM2&&t!=PT_FIGH)//set everything to default values first, except for stickman.
{ {
parts[i].x = (float)x; parts[i].x = (float)x;
parts[i].y = (float)y; parts[i].y = (float)y;
@ -1003,12 +1029,36 @@ inline int create_part(int p, int x, int y, int tv)//the function for creating a
create_part(-1,x,y,PT_SPAWN2); create_part(-1,x,y,PT_SPAWN2);
ISSPAWN2 = 1; ISSPAWN2 = 1;
} }
if (t==PT_FIGH)
{
unsigned char cunt = 0;
while (cunt < 100 && cunt < (fighcount+1) && fighters[cunt][27]==1) cunt++;
if (cunt < 100 && fighters[cunt][27]==0)
{
parts[i].x = (float)x;
parts[i].y = (float)y;
parts[i].type = PT_FIGH;
parts[i].vx = 0;
parts[i].vy = 0;
parts[i].life = 100;
parts[i].ctype = 0;
parts[i].tmp = cunt;
parts[i].temp = ptypes[t].heat;
STKM_init_legs(fighters[cunt], i);
fighters[cunt][27] = 1;
fighters[cunt][2] = PT_DUST;
fighcount++;
return i;
}
return -1;
}
if (t==PT_BIZR||t==PT_BIZRG) if (t==PT_BIZR||t==PT_BIZRG)
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) if (t==PT_PHOT||t==PT_NEUT)
photons[y][x] = t|(i<<8); photons[y][x] = t|(i<<8);
if (t!=PT_STKM&&t!=PT_STKM2 && t!=PT_PHOT && t!=PT_NEUT) if (t!=PT_STKM&&t!=PT_STKM2 && t!=PT_FIGH && t!=PT_PHOT && t!=PT_NEUT)
pmap[y][x] = t|(i<<8); pmap[y][x] = t|(i<<8);
//Fancy dust effects for powder types //Fancy dust effects for powder types
@ -1674,7 +1724,7 @@ void update_particles_i(pixel *vid, int start, int inc)
(bmap[y/CELL][x/CELL]==WL_ALLOWGAS && !(ptypes[t].properties&TYPE_GAS)) || //&& ptypes[t].falldown!=0 && parts[i].type!=PT_FIRE && parts[i].type!=PT_SMKE && parts[i].type!=PT_HFLM) || (bmap[y/CELL][x/CELL]==WL_ALLOWGAS && !(ptypes[t].properties&TYPE_GAS)) || //&& ptypes[t].falldown!=0 && parts[i].type!=PT_FIRE && parts[i].type!=PT_SMKE && parts[i].type!=PT_HFLM) ||
(bmap[y/CELL][x/CELL]==WL_ALLOWENERGY && !(ptypes[t].properties&TYPE_ENERGY)) || (bmap[y/CELL][x/CELL]==WL_ALLOWENERGY && !(ptypes[t].properties&TYPE_ENERGY)) ||
(bmap[y/CELL][x/CELL]==WL_DETECT && (t==PT_METL || t==PT_SPRK)) || (bmap[y/CELL][x/CELL]==WL_DETECT && (t==PT_METL || t==PT_SPRK)) ||
(bmap[y/CELL][x/CELL]==WL_EWALL && !emap[y/CELL][x/CELL])) && (t!=PT_STKM) && (t!=PT_STKM2))) (bmap[y/CELL][x/CELL]==WL_EWALL && !emap[y/CELL][x/CELL])) && (t!=PT_STKM) && (t!=PT_STKM2) && (t!=PT_FIGH)))
{ {
kill_part(i); kill_part(i);
continue; continue;
@ -1736,7 +1786,7 @@ void update_particles_i(pixel *vid, int start, int inc)
pGravX -= gravxf[(y*XRES)+x]; pGravX -= gravxf[(y*XRES)+x];
pGravY -= gravyf[(y*XRES)+x]; pGravY -= gravyf[(y*XRES)+x];
} }
else if(t!=PT_STKM && t!=PT_STKM2 && !(ptypes[t].properties & TYPE_SOLID)) else if(t!=PT_STKM && t!=PT_STKM2 && t!=PT_FIGH && !(ptypes[t].properties & TYPE_SOLID))
{ {
pGravX += gravxf[(y*XRES)+x]; pGravX += gravxf[(y*XRES)+x];
pGravY += gravyf[(y*XRES)+x]; pGravY += gravyf[(y*XRES)+x];
@ -2838,7 +2888,7 @@ int create_parts(int x, int y, int rx, int ry, int c, int flags)
int i, j, r, f = 0, u, v, oy, ox, b = 0, dw = 0, stemp = 0, p;//n; int i, j, r, f = 0, u, v, oy, ox, b = 0, dw = 0, stemp = 0, p;//n;
int wall = c - 100; int wall = c - 100;
if (c==SPC_WIND){ if (c==SPC_WIND || c==PT_FIGH)
return 0; return 0;
} }
if(c==SPC_PROP){ if(c==SPC_PROP){