Fixed ehole, made wall code use defines, wall specific deletion.
This commit is contained in:
parent
a38dddaf5a
commit
3d2292890b
@ -86,6 +86,8 @@ extern int amd;
|
||||
|
||||
extern int FPSB;
|
||||
|
||||
int NUM_PARTS;
|
||||
|
||||
extern int legacy_enable;
|
||||
|
||||
extern int sys_pause;
|
||||
|
@ -27,6 +27,7 @@
|
||||
#define WL_STREAM 25
|
||||
#define WL_SIGN 26
|
||||
#define WL_FAN 27
|
||||
#define WL_FANHELPER 255
|
||||
#define WL_ALLOWLIQUID 28
|
||||
#define WL_DESTROYALL 29
|
||||
#define WL_ERASE 30
|
||||
|
@ -2875,7 +2875,7 @@ void render_cursor(pixel *vid, int x, int y, int t, float rx, float ry)
|
||||
else
|
||||
{
|
||||
int tc;
|
||||
c = (rx/CELL) * CELL;
|
||||
c = ((int)rx/CELL) * CELL;
|
||||
x = (x/CELL) * CELL;
|
||||
y = (y/CELL) * CELL;
|
||||
|
||||
|
39
src/main.c
39
src/main.c
@ -481,7 +481,36 @@ int parse_save(void *save, int size, int replace, int x0, int y0)
|
||||
for(x=bx0; x<bx0+bw; x++)
|
||||
{
|
||||
if(d[p])
|
||||
{
|
||||
bmap[y][x] = d[p];
|
||||
if(bmap[y][x]==1)
|
||||
bmap[y][x]=WL_WALL;
|
||||
if(bmap[y][x]==2)
|
||||
bmap[y][x]=WL_DESTROYALL;
|
||||
if(bmap[y][x]==3)
|
||||
bmap[y][x]=WL_ALLOWLIQUID;
|
||||
if(bmap[y][x]==4)
|
||||
bmap[y][x]=WL_FAN;
|
||||
if(bmap[y][x]==5)
|
||||
bmap[y][x]=WL_STREAM;
|
||||
if(bmap[y][x]==6)
|
||||
bmap[y][x]=WL_DETECT;
|
||||
if(bmap[y][x]==7)
|
||||
bmap[y][x]=WL_EWALL;
|
||||
if(bmap[y][x]==8)
|
||||
bmap[y][x]=WL_WALLELEC;
|
||||
if(bmap[y][x]==9)
|
||||
bmap[y][x]=WL_ALLOWAIR;
|
||||
if(bmap[y][x]==10)
|
||||
bmap[y][x]=WL_ALLOWSOLID;
|
||||
if(bmap[y][x]==11)
|
||||
bmap[y][x]=WL_ALLOWALLELEC;
|
||||
if(bmap[y][x]==12)
|
||||
bmap[y][x]=WL_EHOLE;
|
||||
if(bmap[y][x]==13)
|
||||
bmap[y][x]=WL_ALLOWGAS;
|
||||
}
|
||||
|
||||
p++;
|
||||
}
|
||||
for(y=by0; y<by0+bh; y++)
|
||||
@ -1878,10 +1907,10 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
nfvx = (x-lx)*0.005f;
|
||||
nfvy = (y-ly)*0.005f;
|
||||
flood_parts(lx, ly, 255, -1, 4);
|
||||
flood_parts(lx, ly, WL_FANHELPER, -1, WL_FAN);
|
||||
for(j=0; j<YRES/CELL; j++)
|
||||
for(i=0; i<XRES/CELL; i++)
|
||||
if(bmap[j][i] == 255)
|
||||
if(bmap[j][i] == WL_FANHELPER)
|
||||
{
|
||||
fvx[j][i] = nfvx;
|
||||
fvy[j][i] = nfvy;
|
||||
@ -2131,11 +2160,11 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
#ifdef BETA
|
||||
if(REPLACE_MODE)
|
||||
sprintf(uitext, "Cracker's Version %d FPS:%d REPLACE MODE", SAVE_VERSION,FPS);
|
||||
sprintf(uitext, "Cracker's Version %d Parts:%d REPLACE MODE", SAVE_VERSION,NUM_PARTS);
|
||||
else if(sdl_mod&(KMOD_CAPS))
|
||||
sprintf(uitext, "Cracker's Version %d FPS:%d CAPS LOCK ON", SAVE_VERSION, FPS);
|
||||
sprintf(uitext, "Cracker's Version %d Parts:%d CAPS LOCK ON", SAVE_VERSION, NUM_PARTS);
|
||||
else
|
||||
sprintf(uitext, "Cracker's Version %d (Beta %d) FPS:%d", SAVE_VERSION, MINOR_VERSION, FPS);
|
||||
sprintf(uitext, "Cracker's Version %d Parts:%d", SAVE_VERSION, NUM_PARTS);
|
||||
//printf("%s\n", uitext);
|
||||
#else
|
||||
sprintf(uitext, "Version %d.%d FPS:%d", SAVE_VERSION, MINOR_VERSION, FPS);
|
||||
|
55
src/powder.c
55
src/powder.c
@ -88,6 +88,8 @@ static int eval_move(int pt, int nx, int ny, unsigned *rr)
|
||||
return 0;
|
||||
if((pt==PT_NEUT ||pt==PT_PHOT) && bmap[ny/CELL][nx/CELL]==WL_EWALL && !emap[ny/CELL][nx/CELL])
|
||||
return 0;
|
||||
if(bmap[ny/CELL][nx/CELL]==WL_EHOLE && !emap[ny/CELL][nx/CELL])
|
||||
return 2;
|
||||
|
||||
if(bmap[ny/CELL][nx/CELL]==WL_ALLOWAIR)
|
||||
return 0;
|
||||
@ -1422,7 +1424,7 @@ void update_particles_i(pixel *vid, int start, int inc)
|
||||
|
||||
nx = x/CELL;
|
||||
ny = y/CELL;
|
||||
if(bmap[ny][nx]==6 && emap[ny][nx]<WL_WALLELEC)
|
||||
if(bmap[ny][nx]==WL_DETECT && emap[ny][nx]<8)
|
||||
set_emap(nx, ny);
|
||||
|
||||
fe = 0;
|
||||
@ -3663,6 +3665,7 @@ void update_particles(pixel *vid)
|
||||
isplayer = 0; //Needed for player spawning
|
||||
memset(pmap, 0, sizeof(pmap));
|
||||
r = rand()%2;
|
||||
NUM_PARTS = 0;
|
||||
for(j=0; j<NPART; j++)
|
||||
{
|
||||
i = r ? (NPART-1-j) : j;
|
||||
@ -3675,6 +3678,7 @@ void update_particles(pixel *vid)
|
||||
if(t!=PT_NEUT || (pmap[y][x]&0xFF)!=PT_GLAS)
|
||||
pmap[y][x] = t|(i<<8);
|
||||
}
|
||||
NUM_PARTS ++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4250,7 +4254,7 @@ int flood_parts(int x, int y, int c, int cm, int bm)
|
||||
bm = 0;
|
||||
}
|
||||
|
||||
if((pmap[y][x]&0xFF)!=cm || bmap[y/CELL][x/CELL]!=bm ||( (sdl_mod & (KMOD_CAPS)) && cm!=SLALT))
|
||||
if(((pmap[y][x]&0xFF)!=cm || bmap[y/CELL][x/CELL]!=bm )||( (sdl_mod & (KMOD_CAPS)) && cm!=SLALT))
|
||||
return 1;
|
||||
|
||||
// go left as far as possible
|
||||
@ -4295,37 +4299,26 @@ int create_parts(int x, int y, float rx, float ry, int c)
|
||||
int wall = c - 100;
|
||||
for(int r=UI_ACTUALSTART;r<=UI_ACTUALSTART+UI_WALLCOUNT;r++)
|
||||
{
|
||||
if(wall==WL_STREAM)
|
||||
{
|
||||
i = x / CELL;
|
||||
j = y / CELL;
|
||||
for(v=-1; v<2; v++)
|
||||
for(u=-1; u<2; u++)
|
||||
if(i+u>=0 && i+u<XRES/CELL &&
|
||||
j+v>=0 && j+v<YRES/CELL &&
|
||||
bmap[j+v][i+u] == WL_STREAM)
|
||||
return 1;
|
||||
bmap[j][i] = WL_STREAM;
|
||||
return 1;
|
||||
}
|
||||
else if(wall==r)
|
||||
if(wall==r)
|
||||
{
|
||||
if(c == SPC_AIR || c == SPC_HEAT || c == SPC_COOL || c == SPC_VACUUM)
|
||||
break;
|
||||
b = wall;
|
||||
dw = 1;
|
||||
}
|
||||
}
|
||||
if(c == 255)
|
||||
if(c == WL_FANHELPER)
|
||||
{
|
||||
b = 255;
|
||||
b = WL_FANHELPER;
|
||||
dw = 1;
|
||||
}
|
||||
if(dw==1)
|
||||
{
|
||||
rx = rx/CELL;
|
||||
rx = (int)rx/CELL;
|
||||
x = x/CELL;
|
||||
y = y/CELL;
|
||||
x -= rx/2;
|
||||
y -= rx/2;
|
||||
x -= (int)rx/2;
|
||||
y -= (int)rx/2;
|
||||
for (ox=x; ox<=x+rx; ox++)
|
||||
{
|
||||
for (oy=y; oy<=y+rx; oy++)
|
||||
@ -4334,11 +4327,31 @@ int create_parts(int x, int y, float rx, float ry, int c)
|
||||
{
|
||||
i = ox;
|
||||
j = oy;
|
||||
if(((sdl_mod & (KMOD_LALT) && sdl_mod & (KMOD_SHIFT))|| sdl_mod & (KMOD_CAPS) ))
|
||||
{
|
||||
if(bmap[j][i]==SLALT-100)
|
||||
b = 0;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
if(b==WL_FAN)
|
||||
{
|
||||
fvx[j][i] = 0.0f;
|
||||
fvy[j][i] = 0.0f;
|
||||
}
|
||||
if(b==WL_STREAM)
|
||||
{
|
||||
i = x + rx/2;
|
||||
j = y + rx/2;
|
||||
for(v=-1; v<2; v++)
|
||||
for(u=-1; u<2; u++)
|
||||
if(i+u>=0 && i+u<XRES/CELL &&
|
||||
j+v>=0 && j+v<YRES/CELL &&
|
||||
bmap[j+v][i+u] == WL_STREAM)
|
||||
return 1;
|
||||
bmap[j][i] = WL_STREAM;
|
||||
continue;
|
||||
}
|
||||
bmap[j][i] = b;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user