summaryrefslogtreecommitdiff
path: root/src/elements/embr.c
diff options
context:
space:
mode:
authorjacksonmj <mj-pt@jacksonmj.co.uk>2012-06-20 20:45:33 (GMT)
committer jacksonmj <mj-pt@jacksonmj.co.uk>2012-06-20 21:15:45 (GMT)
commit1d5b08194291db72c05e68eed592e8fcb6101c63 (patch)
tree39945df4b183ef2bbcaf0cc1432a3a02b547f5f6 /src/elements/embr.c
parent9b2c2a78a6f4ba4fb13f04f17a649caeaf416d8d (diff)
downloadpowder-1d5b08194291db72c05e68eed592e8fcb6101c63.zip
powder-1d5b08194291db72c05e68eed592e8fcb6101c63.tar.gz
Replace all explosion sparks with new element (EMBR)
Replaces: BOMB sparks and flash, electrons + glass sparks, sparks from IGNC, sparks from TNT explosion, and sparks from FWRK and FIRW.
Diffstat (limited to 'src/elements/embr.c')
-rw-r--r--src/elements/embr.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/elements/embr.c b/src/elements/embr.c
new file mode 100644
index 0000000..16c4e70
--- /dev/null
+++ b/src/elements/embr.c
@@ -0,0 +1,94 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <element.h>
+
+/* ctype - colour RRGGBB (optional)
+ * life - decremented each frame, disappears when life reaches zero
+ * tmp - mode
+ * 0 - BOMB sparks
+ * 1 - firework sparks (colour defaults to white)
+ * 2 - flash (colour defaults to white)
+ */
+int update_EMBR(UPDATE_FUNC_ARGS) {
+ int r, rx, ry, nb;
+ for (rx=-1; rx<2; rx++)
+ for (ry=-1; ry<2; ry++)
+ if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
+ {
+ r = pmap[y+ry][x+rx];
+ if (!r)
+ continue;
+ if ((ptypes[r&0xFF].properties & (TYPE_SOLID | TYPE_PART | TYPE_LIQUID)) && !(ptypes[r&0xFF].properties & PROP_SPARKSETTLE))
+ {
+ kill_part(i);
+ return 1;
+ }
+ }
+ return 0;
+}
+int graphics_EMBR(GRAPHICS_FUNC_ARGS)
+{
+ if (cpart->ctype&0xFFFFFF)
+ {
+ int maxComponent;
+ *colr = (cpart->ctype&0xFF0000)>>16;
+ *colg = (cpart->ctype&0x00FF00)>>8;
+ *colb = (cpart->ctype&0x0000FF);
+ maxComponent = *colr;
+ if (*colg>maxComponent) maxComponent = *colg;
+ if (*colb>maxComponent) maxComponent = *colb;
+ if (maxComponent<60)//make sure it isn't too dark to see
+ {
+ float multiplier = 60.0f/maxComponent;
+ *colr *= multiplier;
+ *colg *= multiplier;
+ *colb *= multiplier;
+ }
+ }
+ else if (cpart->tmp != 0)
+ {
+ *colr = *colg = *colb = 255;
+ }
+
+ if (decorations_enable && cpart->dcolour)
+ {
+ int a = (cpart->dcolour>>24)&0xFF;
+ *colr = (a*((cpart->dcolour>>16)&0xFF) + (255-a)**colr) >> 8;
+ *colg = (a*((cpart->dcolour>>8)&0xFF) + (255-a)**colg) >> 8;
+ *colb = (a*((cpart->dcolour)&0xFF) + (255-a)**colb) >> 8;
+ }
+ *firer = *colr;
+ *fireg = *colg;
+ *fireb = *colb;
+
+ if (cpart->tmp==1)
+ {
+ *pixel_mode = FIRE_ADD | PMODE_BLEND | PMODE_GLOW;
+ *firea = (cpart->life-15)*4;
+ *cola = (cpart->life+15)*4;
+ }
+ else if (cpart->tmp==2)
+ {
+ *pixel_mode = PMODE_FLAT | FIRE_ADD;
+ *firea = 255;
+ }
+ else
+ {
+ *pixel_mode = PMODE_SPARK | PMODE_ADD;
+ if (cpart->life<64) *cola = 4*cpart->life;
+ }
+ return 0;
+}