#include "element.h" int update_SHLD1(UPDATE_FUNC_ARGS) { int r, nnx, nny, rx, ry; for (rx=-1; rx<2; rx++) for (ry=-1; ry<2; ry++) if (x+rx>=0 && y+ry>0 && x+rxrand()%200&&parts[i].life==0) { sim->part_change_type(i,x,y,PT_SHLD2); parts[i].life = 7; } for ( nnx=-1; nnx<2; nnx++) for ( nny=-1; nny<2; nny++) { if (!pmap[y+ry+nny][x+rx+nnx]) { sim->create_part(-1,x+rx+nnx,y+ry+nny,PT_SHLD1); //parts[pmap[y+ny+nny][x+nx+nnx]>>8].life=7; } } } else if ((r&0xFF)==PT_SHLD3&&4>rand()%10) { sim->part_change_type(i,x,y,PT_SHLD2); parts[i].life = 7; } } return 0; } int update_SHLD2(UPDATE_FUNC_ARGS) { int r, nnx, nny, rx, ry, np; for (rx=-1; rx<2; rx++) for (ry=-1; ry<2; ry++) if (x+rx>=0 && y+ry>0 && x+rx0) sim->create_part(-1,x+rx,y+ry,PT_SHLD1); if (!r) continue; else if ((r&0xFF)==PT_SPRK&&parts[i].life==0) { if (25>rand()%200&&parts[i].life==0) { sim->part_change_type(i,x,y,PT_SHLD3); parts[i].life = 7; } for ( nnx=-1; nnx<2; nnx++) for ( nny=-1; nny<2; nny++) { if (!pmap[y+ry+nny][x+rx+nnx]) { np = sim->create_part(-1,x+rx+nnx,y+ry+nny,PT_SHLD1); if (np<0) continue; parts[np].life=7; } } } else if ((r&0xFF)==PT_SHLD4&&4>rand()%10) { sim->part_change_type(i,x,y,PT_SHLD3); parts[i].life = 7; } } return 0; } int update_SHLD3(UPDATE_FUNC_ARGS) { int r, nnx, nny, rx, ry, np; for (rx=-1; rx<2; rx++) for (ry=-1; ry<2; ry++) if (x+rx>=0 && y+ry>0 && x+rxrand()%2500) { np = sim->create_part(-1,x+rx,y+ry,PT_SHLD1); if (np<0) continue; parts[np].life=7; sim->part_change_type(i,x,y,PT_SHLD2); } else continue; } if ((r&0xFF)==PT_SHLD1 && parts[i].life>3) { sim->part_change_type(r>>8,x+rx,y+ry,PT_SHLD2); parts[r>>8].life=7; } else if ((r&0xFF)==PT_SPRK&&parts[i].life==0) { if (18>rand()%3000&&parts[i].life==0) { sim->part_change_type(i,x,y,PT_SHLD4); parts[i].life = 7; } for ( nnx=-1; nnx<2; nnx++) for ( nny=-1; nny<2; nny++) { if (!pmap[y+ry+nny][x+rx+nnx]) { np = sim->create_part(-1,x+rx+nnx,y+ry+nny,PT_SHLD1); if (np<0) continue; parts[np].life=7; } } } } return 0; } int update_SHLD4(UPDATE_FUNC_ARGS) { int r, nnx, nny, rx, ry, np; for (rx=-1; rx<2; rx++) for (ry=-1; ry<2; ry++) if (x+rx>=0 && y+ry>0 && x+rxrand()%5500) { np = sim->create_part(-1,x+rx,y+ry,PT_SHLD1); if (np<0) continue; parts[np].life=7; sim->part_change_type(i,x,y,PT_SHLD2); } else continue; } if ((r&0xFF)==PT_SHLD2 && parts[i].life>3) { sim->part_change_type(r>>8,x+rx,y+ry,PT_SHLD3); parts[r>>8].life = 7; } else if ((r&0xFF)==PT_SPRK&&parts[i].life==0) for ( nnx=-1; nnx<2; nnx++) for ( nny=-1; nny<2; nny++) { if (!pmap[y+ry+nny][x+rx+nnx]) { np = sim->create_part(-1,x+rx+nnx,y+ry+nny,PT_SHLD1); if (np<0) continue; parts[np].life=7; } } } return 0; }