summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacob1 <jfu614@gmail.com>2012-01-25 20:04:14 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-26 14:15:57 (GMT)
commitfff85989e12f09835513069060721be015ab1f4d (patch)
tree877b256b0ba7291504cd6bbe0cdf28a7207ac7ff /src
parent7593f01389116a06e6b31365b818fde1542f259e (diff)
downloadpowder-fff85989e12f09835513069060721be015ab1f4d.zip
powder-fff85989e12f09835513069060721be015ab1f4d.tar.gz
stickmen load correctly and are drawn in new save format, and fighters are drawn correctly in both
Conflicts: src/save.c
Diffstat (limited to 'src')
-rw-r--r--src/save.c93
1 files changed, 85 insertions, 8 deletions
diff --git a/src/save.c b/src/save.c
index 781ed15..09dfc1a 100644
--- a/src/save.c
+++ b/src/save.c
@@ -229,9 +229,44 @@ pixel *prerender_save_OPS(void *save, int size, int *width, int *height)
partsData[i] = PT_DMND; //Replace all invalid elements with diamond
//Draw type
- vidBuf[(fullY+y)*fullW+(fullX+x)] = ptypes[partsData[i]].pcolors;
- i+=3; //Skip Type an Descriptor
-
+ if (partsData[i]==PT_STKM || partsData[i]==PT_STKM2 || partsData[i]==PT_FIGH)
+ {
+ pixel lc, hc=PIXRGB(255, 224, 178);
+ if (partsData[i]==PT_STKM || partsData[i]==PT_FIGH) lc = PIXRGB(255, 255, 255);
+ else lc = PIXRGB(100, 100, 255);
+ //only need to check upper bound of y coord - lower bounds and x<w are checked in draw_line
+ if (partsData[i]==PT_STKM || partsData[i]==PT_STKM2)
+ {
+ draw_line(vidBuf, x-2, y-2, x+2, y-2, PIXR(hc), PIXG(hc), PIXB(hc), *width);
+ if (y+2<*height)
+ {
+ draw_line(vidBuf, x-2, y+2, x+2, y+2, PIXR(hc), PIXG(hc), PIXB(hc), *width);
+ draw_line(vidBuf, x-2, y-2, x-2, y+2, PIXR(hc), PIXG(hc), PIXB(hc), *width);
+ draw_line(vidBuf, x+2, y-2, x+2, y+2, PIXR(hc), PIXG(hc), PIXB(hc), *width);
+ }
+ }
+ else if (y+2<*height)
+ {
+ draw_line(vidBuf, x-2, y, x, y-2, PIXR(hc), PIXG(hc), PIXB(hc), *width);
+ draw_line(vidBuf, x-2, y, x, y+2, PIXR(hc), PIXG(hc), PIXB(hc), *width);
+ draw_line(vidBuf, x, y-2, x+2, y, PIXR(hc), PIXG(hc), PIXB(hc), *width);
+ draw_line(vidBuf, x, y+2, x+2, y, PIXR(hc), PIXG(hc), PIXB(hc), *width);
+ }
+ if (y+6<*height)
+ {
+ draw_line(vidBuf, x, y+3, x-1, y+6, PIXR(lc), PIXG(lc), PIXB(lc), *width);
+ draw_line(vidBuf, x, y+3, x+1, y+6, PIXR(lc), PIXG(lc), PIXB(lc), *width);
+ }
+ if (y+12<*height)
+ {
+ draw_line(vidBuf, x-1, y+6, x-3, y+12, PIXR(lc), PIXG(lc), PIXB(lc), *width);
+ draw_line(vidBuf, x+1, y+6, x+3, y+12, PIXR(lc), PIXG(lc), PIXB(lc), *width);
+ }
+ }
+ else
+ vidBuf[(fullY+y)*fullW+(fullX+x)] = ptypes[partsData[i]].pcolors;
+ i+=3; //Skip Type and Descriptor
+
//Skip temp
if(fieldDescriptor & 0x01)
{
@@ -1136,6 +1171,38 @@ int parse_save_OPS(void *save, int size, int replace, int x0, int y0, unsigned c
if(i >= partsDataLen) goto fail;
partsptr[newIndex].tmp2 = partsData[i++];
}
+
+ if ((player.spwn == 1 && partsptr[newIndex].type==PT_STKM) || (player2.spwn == 1 && partsptr[newIndex].type==PT_STKM2))
+ {
+ partsptr[newIndex].type = PT_NONE;
+ }
+ else if (partsptr[newIndex].type == PT_STKM)
+ {
+ STKM_init_legs(&player, newIndex);
+ player.spwn = 1;
+ player.elem = PT_DUST;
+ }
+ else if (partsptr[newIndex].type == PT_STKM2)
+ {
+ STKM_init_legs(&player2, newIndex);
+ player2.spwn = 1;
+ player2.elem = PT_DUST;
+ }
+ else if (partsptr[newIndex].type == PT_FIGH)
+ {
+ unsigned char fcount = 0;
+ while (fcount < 100 && fcount < (fighcount+1) && fighters[fcount].spwn==1) fcount++;
+ if (fcount < 100 && fighters[fcount].spwn==0)
+ {
+ partsptr[newIndex].tmp = fcount;
+ fighters[fcount].spwn = 1;
+ fighters[fcount].elem = PT_DUST;
+ fighcount++;
+ STKM_init_legs(&(fighters[fcount]), newIndex);
+ }
+ }
+ if (!ptypes[partsptr[newIndex].type].enabled)
+ partsptr[newIndex].type = PT_NONE;
}
}
}
@@ -1309,12 +1376,22 @@ pixel *prerender_save_PSv(void *save, int size, int *width, int *height)
if (j==PT_STKM || j==PT_FIGH) lc = PIXRGB(255, 255, 255);
else lc = PIXRGB(100, 100, 255);
//only need to check upper bound of y coord - lower bounds and x<w are checked in draw_line
- draw_line(fb , x-2, y-2, x+2, y-2, PIXR(hc), PIXG(hc), PIXB(hc), w);
- if (y+2<h)
+ if (j==PT_STKM || j==PT_STKM2)
+ {
+ draw_line(fb , x-2, y-2, x+2, y-2, PIXR(hc), PIXG(hc), PIXB(hc), w);
+ if (y+2<h)
+ {
+ draw_line(fb , x-2, y+2, x+2, y+2, PIXR(hc), PIXG(hc), PIXB(hc), w);
+ draw_line(fb , x-2, y-2, x-2, y+2, PIXR(hc), PIXG(hc), PIXB(hc), w);
+ draw_line(fb , x+2, y-2, x+2, y+2, PIXR(hc), PIXG(hc), PIXB(hc), w);
+ }
+ }
+ else if (y+2<h)
{
- draw_line(fb , x-2, y+2, x+2, y+2, PIXR(hc), PIXG(hc), PIXB(hc), w);
- draw_line(fb , x-2, y-2, x-2, y+2, PIXR(hc), PIXG(hc), PIXB(hc), w);
- draw_line(fb , x+2, y-2, x+2, y+2, PIXR(hc), PIXG(hc), PIXB(hc), w);
+ draw_line(fb, x-2, y, x, y-2, PIXR(hc), PIXG(hc), PIXB(hc), w);
+ draw_line(fb, x-2, y, x, y+2, PIXR(hc), PIXG(hc), PIXB(hc), w);
+ draw_line(fb, x, y-2, x+2, y, PIXR(hc), PIXG(hc), PIXB(hc), w);
+ draw_line(fb, x, y+2, x+2, y, PIXR(hc), PIXG(hc), PIXB(hc), w);
}
if (y+6<h)
{