summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsavask <savask@yandex.ru>2011-05-21 09:45:43 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2011-06-04 17:09:02 (GMT)
commita48e477fca5d53813892d6fcc454b4b7c4a91020 (patch)
treee66eb05fe790ed009408f738b6907fde31e2fe3e /src
parent98115038c74e2a9650fd723e7ecbe4edec96aa3f (diff)
downloadpowder-a48e477fca5d53813892d6fcc454b4b7c4a91020.zip
powder-a48e477fca5d53813892d6fcc454b4b7c4a91020.tar.gz
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)
Diffstat (limited to 'src')
-rw-r--r--src/elements/prti.c4
-rw-r--r--src/elements/soap.c17
-rw-r--r--src/graphics.c2
-rw-r--r--src/powder.c24
4 files changed, 24 insertions, 23 deletions
diff --git a/src/elements/prti.c b/src/elements/prti.c
index 7205844..f7599bf 100644
--- a/src/elements/prti.c
+++ b/src/elements/prti.c
@@ -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)
{
diff --git a/src/elements/soap.c b/src/elements/soap.c
index 0496bd2..ce8ff3d 100644
--- a/src/elements/soap.c
+++ b/src/elements/soap.c
@@ -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;
diff --git a/src/graphics.c b/src/graphics.c
index a5593a2..0b8b8f8 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -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);
}
diff --git a/src/powder.c b/src/powder.c
index 19a6d70..b8bfe85 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -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)