Moved detach(i) function to powder.c, made soap display connections when

it's double-joined, made portal in detach soap before teleportating
(works strangely)
This commit is contained in:
savask 2011-05-21 17:45:43 +08:00 committed by Simon Robertshaw
parent 98115038c7
commit a48e477fca
4 changed files with 24 additions and 23 deletions

View File

@ -33,6 +33,10 @@ int update_PRTI(UPDATE_FUNC_ARGS) {
if (!r || (r&0xFF)==PT_PRTI || (r&0xFF)==PT_PRTO || (ptypes[r&0xFF].falldown== 0 && ptypes[r&0xFF].state != ST_GAS && (r&0xFF)!=PT_SPRK))
continue;
}
if ((r&0xFF) == PT_SOAP)
detach(r>>8);
for ( nnx=0; nnx<80; nnx++)
if (!portalp[parts[i].tmp][count-1][nnx].type)
{

View File

@ -1,22 +1,5 @@
#include <element.h>
void detach(int i)
{
if ((parts[i].ctype&2) == 2)
{
if ((parts[parts[i].tmp].ctype&4) == 4)
parts[parts[i].tmp].ctype ^= 4;
}
if ((parts[i].ctype&4) == 4)
{
if ((parts[parts[i].tmp2].ctype&2) == 2)
parts[parts[i].tmp2].ctype ^= 2;
}
parts[i].ctype = 0;
}
int update_SOAP(UPDATE_FUNC_ARGS)
{
int r, rx, ry;

View File

@ -1583,7 +1583,7 @@ void draw_parts(pixel *vid)
if (t==PT_SOAP)
{
if (((parts[i].ctype&1) == 1) && ((parts[i].ctype&2) == 2))
if ((parts[i].ctype&7) == 7)
draw_line(vid, nx, ny, (int)(parts[parts[i].tmp].x+0.5f), (int)(parts[parts[i].tmp].y+0.5f), 245, 245, 220, XRES+BARSIZE);
}

View File

@ -548,6 +548,24 @@ int get_normal_interp(int pt, float x0, float y0, float dx, float dy, float *nx,
return get_normal(pt, x, y, dx, dy, nx, ny);
}
//For soap only
void detach(int i)
{
if ((parts[i].ctype&2) == 2)
{
if ((parts[parts[i].tmp].ctype&4) == 4)
parts[parts[i].tmp].ctype ^= 4;
}
if ((parts[i].ctype&4) == 4)
{
if ((parts[parts[i].tmp2].ctype&2) == 2)
parts[parts[i].tmp2].ctype ^= 2;
}
parts[i].ctype = 0;
}
void kill_part(int i)//kills particle number i
{
int x, y;
@ -574,11 +592,7 @@ void kill_part(int i)//kills particle number i
}
if (parts[i].type == PT_SOAP)
{
if ((parts[i].ctype&2) == 2)
parts[parts[i].tmp].ctype ^= 4;
if ((parts[i].ctype&4) == 4)
parts[parts[i].tmp2].ctype ^= 2;
detach(i);
}
if (x>=0 && y>=0 && x<XRES && y<YRES) {
if ((pmap[y][x]>>8)==i)