summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacksonmj <mj-pt@jacksonmj.co.uk>2012-06-09 11:34:06 (GMT)
committer jacksonmj <mj-pt@jacksonmj.co.uk>2012-06-09 15:09:14 (GMT)
commit303a32f2903d763d73060a28449e1d723f905f2b (patch)
tree920f9c334be4642530e33e5c693b09c9620a7ec7 /src
parent601766a3a0a596ef125c5d59510649178281ca8e (diff)
downloadpowder-303a32f2903d763d73060a28449e1d723f905f2b.zip
powder-303a32f2903d763d73060a28449e1d723f905f2b.tar.gz
Avoid stacking in INVS and FILT, and fix pressurised INVS graphics
Collisions now always work for particles inside INVS and FILT, so particles don't stack (just a single particle on top of each INVS/FILT). Pressurised INVS was being drawn using PMODE_FLAT (with no alpha blending), which sometimes hid particles inside INVS. Also limit BHOL tmp value to make sure it saves correctly.
Diffstat (limited to 'src')
-rw-r--r--src/elements/newgraphics.c3
-rw-r--r--src/powder.c6
2 files changed, 6 insertions, 3 deletions
diff --git a/src/elements/newgraphics.c b/src/elements/newgraphics.c
index 92a1c94..5679b63 100644
--- a/src/elements/newgraphics.c
+++ b/src/elements/newgraphics.c
@@ -249,8 +249,7 @@ int graphics_INVS(GRAPHICS_FUNC_ARGS)
*colr = 15;
*colg = 0;
*colb = 150;
- *pixel_mode &= PMODE;
- *pixel_mode |= PMODE_BLEND;
+ *pixel_mode = PMODE_BLEND;
}
return 0;
}
diff --git a/src/powder.c b/src/powder.c
index 9fcb1f0..2e55f49 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -1567,6 +1567,7 @@ void update_particles_i(pixel *vid, int start, int inc)
create_part(i, x, y, PT_NBHL);
parts[i].temp = MAX_TEMP;
parts[i].tmp = pmap_count[y][x]-NPART;//strength of grav field
+ if (parts[i].tmp>51200) parts[i].tmp = 51200;
pmap_count[y][x] = NPART;
}
else
@@ -2859,7 +2860,10 @@ void update_particles(pixel *vid)//doesn't update the particles themselves, but
photons[y][x] = t|(i<<8);
else
{
- pmap[y][x] = t|(i<<8);
+ // Particles are sometimes allowed to go inside INVS and FILT
+ // To make particles collide correctly when inside these elements, these elements must not overwrite an existing pmap entry from particles inside them
+ if (!pmap[y][x] || (t!=PT_INVIS && t!= PT_FILT))
+ pmap[y][x] = t|(i<<8);
pmap_count[y][x]++;
}
}