From 4fd97b93b4d9d86eedcb218f972e6726fd708fbc Mon Sep 17 00:00:00 2001 From: jacksonmj Date: Sun, 29 May 2011 01:31:31 +0100 Subject: [PATCH] Large speed improvement for QRTZ Also prevent growing when sparked. --- src/elements/qrtz.c | 74 ++++++++++++++++++++++++--------------------- src/elements/sprk.c | 1 + 2 files changed, 41 insertions(+), 34 deletions(-) diff --git a/src/elements/qrtz.c b/src/elements/qrtz.c index f8312c135..cf22925d6 100644 --- a/src/elements/qrtz.c +++ b/src/elements/qrtz.c @@ -12,20 +12,22 @@ int update_QRTZ(UPDATE_FUNC_ARGS) { part_change_type(i,x,y,PT_PQRT); } } - //new QRTZ growth - for (rx=-2; rx<3 && parts[i].ctype!=-1; rx++) - for (ry=-2; ry<3; ry++) - if (x+rx>=0 && y+ry>0 && x+rx>8)>=NPART || !r) - continue; - else if ((r&0xFF)==PT_SLTW && (1>rand()%2500)) + // absorb SLTW + if (parts[i].ctype!=-1) + for (rx=-2; rx<3; rx++) + for (ry=-2; ry<3; ry++) + if (x+rx>=0 && y+ry>0 && x+rx>8); - parts[i].ctype ++; + r = pmap[y+ry][x+rx]; + if ((r>>8)>=NPART || !r) + continue; + else if ((r&0xFF)==PT_SLTW && (1>rand()%2500)) + { + kill_part(r>>8); + parts[i].ctype ++; + } } - } + // grow if absorbed SLTW if (parts[i].ctype>0) { for ( trade = 0; trade<5; trade ++) @@ -38,15 +40,15 @@ int update_QRTZ(UPDATE_FUNC_ARGS) { if ((r>>8)0) + if (np>-1) { parts[np].tmp = parts[i].tmp; - parts[i].ctype = 0; + parts[i].ctype--; if (5>rand()%10) { parts[np].ctype=-1;//dead qrtz } - else if (1>rand()%15) + else if (!parts[i].ctype && 1>rand()%15) { parts[i].ctype=-1; } @@ -57,29 +59,33 @@ int update_QRTZ(UPDATE_FUNC_ARGS) { } } } - for ( trade = 0; trade<9; trade ++) + // diffuse absorbed SLTW + if (parts[i].ctype>0) { - rx = rand()%5-2; - ry = rand()%5-2; - if (x+rx>=0 && y+ry>0 && x+rx>8)>=NPART || !r) - continue; - if ((r&0xFF)==t && (parts[i].ctype>parts[r>>8].ctype) && parts[i].ctype>0 && parts[r>>8].ctype>=0 )//diffusion + rx = rand()%5-2; + ry = rand()%5-2; + if (x+rx>=0 && y+ry>0 && x+rx>8].ctype; - if (tmp ==1) + r = pmap[y+ry][x+rx]; + if ((r>>8)>=NPART || !r) + continue; + if ((r&0xFF)==t && (parts[i].ctype>parts[r>>8].ctype) && parts[r>>8].ctype>=0 )//diffusion { - parts[r>>8].ctype ++; - parts[i].ctype --; - trade = 9; - } - if (tmp>0) - { - parts[r>>8].ctype += tmp/2; - parts[i].ctype -= tmp/2; - trade = 9; + tmp = parts[i].ctype - parts[r>>8].ctype; + if (tmp ==1) + { + parts[r>>8].ctype ++; + parts[i].ctype --; + break; + } + if (tmp>0) + { + parts[r>>8].ctype += tmp/2; + parts[i].ctype -= tmp/2; + break; + } } } } diff --git a/src/elements/sprk.c b/src/elements/sprk.c index ae7e76b41..004d6e825 100644 --- a/src/elements/sprk.c +++ b/src/elements/sprk.c @@ -11,6 +11,7 @@ int update_SPRK(UPDATE_FUNC_ARGS) { if (!ct) ct = PT_METL; part_change_type(i,x,y,ct); + parts[i].ctype = PT_NONE; parts[i].life = 4; if (ct == PT_WATR) parts[i].life = 64;