Fixed ehole, made wall code use defines, wall specific deletion.

This commit is contained in:
Philip 2010-11-21 01:08:33 -05:00
parent a38dddaf5a
commit 3d2292890b
5 changed files with 72 additions and 27 deletions

View File

@ -86,6 +86,8 @@ extern int amd;
extern int FPSB; extern int FPSB;
int NUM_PARTS;
extern int legacy_enable; extern int legacy_enable;
extern int sys_pause; extern int sys_pause;

View File

@ -27,6 +27,7 @@
#define WL_STREAM 25 #define WL_STREAM 25
#define WL_SIGN 26 #define WL_SIGN 26
#define WL_FAN 27 #define WL_FAN 27
#define WL_FANHELPER 255
#define WL_ALLOWLIQUID 28 #define WL_ALLOWLIQUID 28
#define WL_DESTROYALL 29 #define WL_DESTROYALL 29
#define WL_ERASE 30 #define WL_ERASE 30

View File

@ -2875,7 +2875,7 @@ void render_cursor(pixel *vid, int x, int y, int t, float rx, float ry)
else else
{ {
int tc; int tc;
c = (rx/CELL) * CELL; c = ((int)rx/CELL) * CELL;
x = (x/CELL) * CELL; x = (x/CELL) * CELL;
y = (y/CELL) * CELL; y = (y/CELL) * CELL;

View File

@ -481,7 +481,36 @@ int parse_save(void *save, int size, int replace, int x0, int y0)
for(x=bx0; x<bx0+bw; x++) for(x=bx0; x<bx0+bw; x++)
{ {
if(d[p]) if(d[p])
{
bmap[y][x] = 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++; p++;
} }
for(y=by0; y<by0+bh; y++) for(y=by0; y<by0+bh; y++)
@ -1878,10 +1907,10 @@ int main(int argc, char *argv[])
{ {
nfvx = (x-lx)*0.005f; nfvx = (x-lx)*0.005f;
nfvy = (y-ly)*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(j=0; j<YRES/CELL; j++)
for(i=0; i<XRES/CELL; i++) for(i=0; i<XRES/CELL; i++)
if(bmap[j][i] == 255) if(bmap[j][i] == WL_FANHELPER)
{ {
fvx[j][i] = nfvx; fvx[j][i] = nfvx;
fvy[j][i] = nfvy; fvy[j][i] = nfvy;
@ -2131,11 +2160,11 @@ int main(int argc, char *argv[])
{ {
#ifdef BETA #ifdef BETA
if(REPLACE_MODE) 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)) 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 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); //printf("%s\n", uitext);
#else #else
sprintf(uitext, "Version %d.%d FPS:%d", SAVE_VERSION, MINOR_VERSION, FPS); sprintf(uitext, "Version %d.%d FPS:%d", SAVE_VERSION, MINOR_VERSION, FPS);

View File

@ -88,6 +88,8 @@ static int eval_move(int pt, int nx, int ny, unsigned *rr)
return 0; return 0;
if((pt==PT_NEUT ||pt==PT_PHOT) && bmap[ny/CELL][nx/CELL]==WL_EWALL && !emap[ny/CELL][nx/CELL]) if((pt==PT_NEUT ||pt==PT_PHOT) && bmap[ny/CELL][nx/CELL]==WL_EWALL && !emap[ny/CELL][nx/CELL])
return 0; 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) if(bmap[ny/CELL][nx/CELL]==WL_ALLOWAIR)
return 0; return 0;
@ -1422,7 +1424,7 @@ void update_particles_i(pixel *vid, int start, int inc)
nx = x/CELL; nx = x/CELL;
ny = y/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); set_emap(nx, ny);
fe = 0; fe = 0;
@ -3663,6 +3665,7 @@ void update_particles(pixel *vid)
isplayer = 0; //Needed for player spawning isplayer = 0; //Needed for player spawning
memset(pmap, 0, sizeof(pmap)); memset(pmap, 0, sizeof(pmap));
r = rand()%2; r = rand()%2;
NUM_PARTS = 0;
for(j=0; j<NPART; j++) for(j=0; j<NPART; j++)
{ {
i = r ? (NPART-1-j) : 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) if(t!=PT_NEUT || (pmap[y][x]&0xFF)!=PT_GLAS)
pmap[y][x] = t|(i<<8); pmap[y][x] = t|(i<<8);
} }
NUM_PARTS ++;
} }
else else
{ {
@ -4250,7 +4254,7 @@ int flood_parts(int x, int y, int c, int cm, int bm)
bm = 0; 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; return 1;
// go left as far as possible // 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; int wall = c - 100;
for(int r=UI_ACTUALSTART;r<=UI_ACTUALSTART+UI_WALLCOUNT;r++) for(int r=UI_ACTUALSTART;r<=UI_ACTUALSTART+UI_WALLCOUNT;r++)
{ {
if(wall==WL_STREAM) if(wall==r)
{
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(c == SPC_AIR || c == SPC_HEAT || c == SPC_COOL || c == SPC_VACUUM)
break;
b = wall; b = wall;
dw = 1; dw = 1;
} }
} }
if(c == 255) if(c == WL_FANHELPER)
{ {
b = 255; b = WL_FANHELPER;
dw = 1; dw = 1;
} }
if(dw==1) if(dw==1)
{ {
rx = rx/CELL; rx = (int)rx/CELL;
x = x/CELL; x = x/CELL;
y = y/CELL; y = y/CELL;
x -= rx/2; x -= (int)rx/2;
y -= rx/2; y -= (int)rx/2;
for (ox=x; ox<=x+rx; ox++) for (ox=x; ox<=x+rx; ox++)
{ {
for (oy=y; oy<=y+rx; oy++) 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; i = ox;
j = oy; 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) if(b==WL_FAN)
{ {
fvx[j][i] = 0.0f; fvx[j][i] = 0.0f;
fvy[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; bmap[j][i] = b;
} }
} }