From a48e477fca5d53813892d6fcc454b4b7c4a91020 Mon Sep 17 00:00:00 2001 From: savask Date: Sat, 21 May 2011 17:45:43 +0800 Subject: [PATCH] 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) --- src/elements/prti.c | 4 ++++ src/elements/soap.c | 17 ----------------- src/graphics.c | 2 +- src/powder.c | 24 +++++++++++++++++++----- 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/elements/prti.c b/src/elements/prti.c index 7205844ce..f7599bfee 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 0496bd242..ce8ff3d7b 100644 --- a/src/elements/soap.c +++ b/src/elements/soap.c @@ -1,22 +1,5 @@ #include -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 a5593a273..0b8b8f826 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 19a6d70a6..b8bfe8506 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>8)==i)