update rng functions in a lot of element files to use .between/.chance

conversion is still very incomplete
This commit is contained in:
jacob1
2018-05-02 23:53:15 -04:00
parent d2e0986bf6
commit 44a8665f6f
38 changed files with 141 additions and 134 deletions

View File

@@ -22,6 +22,11 @@ uint64_t RNG::next()
return result; return result;
} }
unsigned int RNG::gen()
{
return next() & 0x7FFFFFFF;
}
unsigned int RNG::operator()() unsigned int RNG::operator()()
{ {
return next()&0xFFFFFFFF; return next()&0xFFFFFFFF;
@@ -33,9 +38,11 @@ int RNG::between(int lower, int upper)
return static_cast<int>(r % (upper - lower + 1)) + lower; return static_cast<int>(r % (upper - lower + 1)) + lower;
} }
bool RNG::chance(float chance) bool RNG::chance(int nominator, unsigned int denominator)
{ {
return uniform01() < chance; if (nominator < 0)
return false;
return next() % denominator < static_cast<unsigned int>(nominator);
} }
float RNG::uniform01() float RNG::uniform01()

View File

@@ -11,8 +11,9 @@ private:
uint64_t next(); uint64_t next();
public: public:
unsigned int operator()(); unsigned int operator()();
unsigned int gen();
int between(int lower, int upper); int between(int lower, int upper);
bool chance(float chance); bool chance(int nominator, unsigned int denominator);
float uniform01(); float uniform01();
RNG(); RNG();

View File

@@ -69,14 +69,14 @@ int Element_ACID::update(UPDATE_FUNC_ARGS)
} }
else if (rt == PT_WTRV) else if (rt == PT_WTRV)
{ {
if (RNG::Ref().chance(1/250.0f)) if (RNG::Ref().chance(1, 250))
{ {
sim->part_change_type(i, x, y, PT_CAUS); sim->part_change_type(i, x, y, PT_CAUS);
parts[i].life = RNG::Ref().between(25, 74); parts[i].life = RNG::Ref().between(25, 74);
sim->kill_part(ID(r)); sim->kill_part(ID(r));
} }
} }
else if (rt != PT_CLNE && rt != PT_PCLN && parts[i].life >= 50 && RNG::Ref().chance(sim->elements[rt].Hardness/1000.0)) else if (rt != PT_CLNE && rt != PT_PCLN && parts[i].life >= 50 && RNG::Ref().chance(sim->elements[rt].Hardness, 1000.0))
{ {
if (sim->parts_avg(i, ID(r),PT_GLAS)!= PT_GLAS)//GLAS protects stuff from acid if (sim->parts_avg(i, ID(r),PT_GLAS)!= PT_GLAS)//GLAS protects stuff from acid
{ {

View File

@@ -87,9 +87,9 @@ int Element_BANG::update(UPDATE_FUNC_ARGS)
//Explode!! //Explode!!
sim->pv[y/CELL][x/CELL] += 0.5f; sim->pv[y/CELL][x/CELL] += 0.5f;
parts[i].tmp = 0; parts[i].tmp = 0;
if (RNG::Ref().chance(1.0/3)) if (RNG::Ref().chance(1, 3))
{ {
if (RNG::Ref().chance(1.0/2)) if (RNG::Ref().chance(1, 2))
{ {
sim->create_part(i, x, y, PT_FIRE); sim->create_part(i, x, y, PT_FIRE);
} }
@@ -102,7 +102,7 @@ int Element_BANG::update(UPDATE_FUNC_ARGS)
} }
else else
{ {
if (RNG::Ref().chance(1.0/15)) if (RNG::Ref().chance(1, 15))
{ {
sim->create_part(i, x, y, PT_EMBR); sim->create_part(i, x, y, PT_EMBR);
parts[i].tmp = 0; parts[i].tmp = 0;

View File

@@ -66,7 +66,7 @@ int Element_IGNT::update(UPDATE_FUNC_ARGS)
} }
else if(parts[i].life > 0) else if(parts[i].life > 0)
{ {
if (RNG::Ref().chance(2.0/3)) if (RNG::Ref().chance(2, 3))
{ {
int nb = sim->create_part(-1, x + RNG::Ref().between(-1, 1), y + RNG::Ref().between(-1, 1), PT_EMBR); int nb = sim->create_part(-1, x + RNG::Ref().between(-1, 1), y + RNG::Ref().between(-1, 1), PT_EMBR);
if (nb!=-1) { if (nb!=-1) {

View File

@@ -52,7 +52,7 @@ int Element_PBCN::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry, rt; int r, rx, ry, rt;
if (!parts[i].tmp2 && sim->pv[y/CELL][x/CELL]>4.0f) if (!parts[i].tmp2 && sim->pv[y/CELL][x/CELL]>4.0f)
parts[i].tmp2 = random_gen()%40+80; parts[i].tmp2 = RNG::Ref().between(80, 119);
if (parts[i].tmp2) if (parts[i].tmp2)
{ {
parts[i].vx += ADVECTION*sim->vx[y/CELL][x/CELL]; parts[i].vx += ADVECTION*sim->vx[y/CELL][x/CELL];
@@ -132,9 +132,9 @@ int Element_PBCN::update(UPDATE_FUNC_ARGS)
for (ry=-1; ry<2; ry++) for (ry=-1; ry<2; ry++)
sim->create_part(-1, x+rx, y+ry, PT_LIFE, parts[i].tmp); sim->create_part(-1, x+rx, y+ry, PT_LIFE, parts[i].tmp);
else if (parts[i].ctype!=PT_LIGH || !(random_gen()%30)) else if (parts[i].ctype!=PT_LIGH || RNG::Ref().chance(1, 30))
{ {
int np = sim->create_part(-1, x+random_gen()%3-1, y+random_gen()%3-1, TYP(parts[i].ctype)); int np = sim->create_part(-1, x + RNG::Ref().between(-1, 1), y + RNG::Ref().between(-1, 1), TYP(parts[i].ctype));
if (np>-1) if (np>-1)
{ {
if (parts[i].ctype==PT_LAVA && parts[i].tmp>0 && parts[i].tmp<PT_NUM && sim->elements[parts[i].tmp].HighTemperatureTransition==PT_LAVA) if (parts[i].ctype==PT_LAVA && parts[i].tmp>0 && parts[i].tmp<PT_NUM && sim->elements[parts[i].tmp].HighTemperatureTransition==PT_LAVA)

View File

@@ -123,9 +123,9 @@ int Element_PCLN::update(UPDATE_FUNC_ARGS)
for (ry=-1; ry<2; ry++) for (ry=-1; ry<2; ry++)
sim->create_part(-1, x+rx, y+ry, PT_LIFE, parts[i].tmp); sim->create_part(-1, x+rx, y+ry, PT_LIFE, parts[i].tmp);
else if (parts[i].ctype!=PT_LIGH || (random_gen()%30)==0) else if (parts[i].ctype != PT_LIGH || RNG::Ref().chance(1, 30))
{ {
int np = sim->create_part(-1, x+random_gen()%3-1, y+random_gen()%3-1, TYP(parts[i].ctype)); int np = sim->create_part(-1, x + RNG::Ref().between(-1, 1), y + RNG::Ref().between(-1, 1), TYP(parts[i].ctype));
if (np>=0) if (np>=0)
{ {
if (parts[i].ctype==PT_LAVA && parts[i].tmp>0 && parts[i].tmp<PT_NUM && sim->elements[parts[i].tmp].HighTemperatureTransition==PT_LAVA) if (parts[i].ctype==PT_LAVA && parts[i].tmp>0 && parts[i].tmp<PT_NUM && sim->elements[parts[i].tmp].HighTemperatureTransition==PT_LAVA)

View File

@@ -55,7 +55,8 @@ int Element_PHOT::update(UPDATE_FUNC_ARGS)
return 1; return 1;
} }
if (parts[i].temp > 506) if (parts[i].temp > 506)
if (!(random_gen()%10)) Element_FIRE::update(UPDATE_FUNC_SUBCALL_ARGS); if (RNG::Ref().chance(1, 10))
Element_FIRE::update(UPDATE_FUNC_SUBCALL_ARGS);
for (rx=-1; rx<2; rx++) for (rx=-1; rx<2; rx++)
for (ry=-1; ry<2; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK) { if (BOUNDS_CHECK) {
@@ -64,16 +65,16 @@ int Element_PHOT::update(UPDATE_FUNC_ARGS)
continue; continue;
if (TYP(r)==PT_ISOZ || TYP(r)==PT_ISZS) if (TYP(r)==PT_ISOZ || TYP(r)==PT_ISZS)
{ {
if (!(random_gen()%400)) if (RNG::Ref().chance(1, 400))
{ {
parts[i].vx *= 0.90; parts[i].vx *= 0.90;
parts[i].vy *= 0.90; parts[i].vy *= 0.90;
sim->create_part(ID(r), x+rx, y+ry, PT_PHOT); sim->create_part(ID(r), x+rx, y+ry, PT_PHOT);
rrr = (random_gen()%360)*3.14159f/180.0f; rrr = RNG::Ref().between(0, 359) * 3.14159f / 180.0f;
if (TYP(r) == PT_ISOZ) if (TYP(r) == PT_ISOZ)
rr = (random_gen()%128+128)/127.0f; rr = RNG::Ref().between(128, 255) / 127.0f;
else else
rr = (random_gen()%228+128)/127.0f; rr = RNG::Ref().between(128, 355) / 127.0f;
parts[ID(r)].vx = rr*cosf(rrr); parts[ID(r)].vx = rr*cosf(rrr);
parts[ID(r)].vy = rr*sinf(rrr); parts[ID(r)].vy = rr*sinf(rrr);
sim->pv[y/CELL][x/CELL] -= 15.0f * CFDS; sim->pv[y/CELL][x/CELL] -= 15.0f * CFDS;
@@ -81,17 +82,17 @@ int Element_PHOT::update(UPDATE_FUNC_ARGS)
} }
else if((TYP(r) == PT_QRTZ || TYP(r) == PT_PQRT) && !ry && !rx)//if on QRTZ else if((TYP(r) == PT_QRTZ || TYP(r) == PT_PQRT) && !ry && !rx)//if on QRTZ
{ {
float a = (random_gen()%360)*3.14159f/180.0f; float a = RNG::Ref().between(0, 359) * 3.14159f / 180.0f;
parts[i].vx = 3.0f*cosf(a); parts[i].vx = 3.0f*cosf(a);
parts[i].vy = 3.0f*sinf(a); parts[i].vy = 3.0f*sinf(a);
if(parts[i].ctype == 0x3FFFFFFF) if(parts[i].ctype == 0x3FFFFFFF)
parts[i].ctype = 0x1F<<(random_gen()%26); parts[i].ctype = 0x1F << RNG::Ref().between(0, 25);
if (parts[i].life) if (parts[i].life)
parts[i].life++; //Delay death parts[i].life++; //Delay death
} }
else if(TYP(r) == PT_BGLA && !ry && !rx)//if on BGLA else if(TYP(r) == PT_BGLA && !ry && !rx)//if on BGLA
{ {
float a = (random_gen()%101 - 50) * 0.001f; float a = RNG::Ref().between(-50, 50) * 0.001f;
float rx = cosf(a), ry = sinf(a), vx, vy; float rx = cosf(a), ry = sinf(a), vx, vy;
vx = rx * parts[i].vx + ry * parts[i].vy; vx = rx * parts[i].vx + ry * parts[i].vy;
vy = rx * parts[i].vy - ry * parts[i].vx; vy = rx * parts[i].vy - ry * parts[i].vx;
@@ -100,8 +101,8 @@ int Element_PHOT::update(UPDATE_FUNC_ARGS)
} }
else if (TYP(r) == PT_FILT && parts[ID(r)].tmp==9) else if (TYP(r) == PT_FILT && parts[ID(r)].tmp==9)
{ {
parts[i].vx += ((float)(random_gen()%1000-500))/1000.0f; parts[i].vx += ((float)RNG::Ref().between(-500, 500))/1000.0f;
parts[i].vy += ((float)(random_gen()%1000-500))/1000.0f; parts[i].vy += ((float)RNG::Ref().between(-500, 500))/1000.0f;
} }
} }
return 0; return 0;

View File

@@ -191,7 +191,7 @@ int Element_PIPE::update(UPDATE_FUNC_ARGS)
if (nt)//there is something besides PIPE around current particle if (nt)//there is something besides PIPE around current particle
{ {
rndstore = random_gen(); rndstore = RNG::Ref().gen();
rnd = rndstore&7; rnd = rndstore&7;
//rndstore = rndstore>>3; //rndstore = rndstore>>3;
rx = pos_1_rx[rnd]; rx = pos_1_rx[rnd];
@@ -433,7 +433,7 @@ void Element_PIPE::pushParticle(Simulation * sim, int i, int count, int original
if( !(sim->parts[i].tmp&0x200) ) if( !(sim->parts[i].tmp&0x200) )
{ {
//normal random push //normal random push
rndstore = random_gen(); rndstore = RNG::Ref().gen();
// RAND_MAX is at least 32767 on all platforms i.e. pow(8,5)-1 // RAND_MAX is at least 32767 on all platforms i.e. pow(8,5)-1
// so can go 5 cycles without regenerating rndstore // so can go 5 cycles without regenerating rndstore
for (q=0; q<3; q++)//try to push 3 times for (q=0; q<3; q++)//try to push 3 times

View File

@@ -60,7 +60,7 @@ int Element_PLNT::update(UPDATE_FUNC_ARGS)
switch (TYP(r)) switch (TYP(r))
{ {
case PT_WATR: case PT_WATR:
if (!(random_gen()%50)) if (RNG::Ref().chance(1, 50))
{ {
np = sim->create_part(ID(r),x+rx,y+ry,PT_PLNT); np = sim->create_part(ID(r),x+rx,y+ry,PT_PLNT);
if (np<0) continue; if (np<0) continue;
@@ -68,7 +68,7 @@ int Element_PLNT::update(UPDATE_FUNC_ARGS)
} }
break; break;
case PT_LAVA: case PT_LAVA:
if (!(random_gen()%50)) if (RNG::Ref().chance(1, 50))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;
@@ -76,14 +76,14 @@ int Element_PLNT::update(UPDATE_FUNC_ARGS)
break; break;
case PT_SMKE: case PT_SMKE:
case PT_CO2: case PT_CO2:
if (!(random_gen()%50)) if (RNG::Ref().chance(1, 50))
{ {
sim->kill_part(ID(r)); sim->kill_part(ID(r));
parts[i].life = random_gen()%60 + 60; parts[i].life = RNG::Ref().between(60, 119);
} }
break; break;
case PT_WOOD: case PT_WOOD:
rndstore = random_gen(); rndstore = RNG::Ref().gen();
if (surround_space && !(rndstore%4) && parts[i].tmp==1) if (surround_space && !(rndstore%4) && parts[i].tmp==1)
{ {
rndstore >>= 3; rndstore >>= 3;

View File

@@ -48,7 +48,7 @@ Element_PLUT::Element_PLUT()
//#TPT-Directive ElementHeader Element_PLUT static int update(UPDATE_FUNC_ARGS) //#TPT-Directive ElementHeader Element_PLUT static int update(UPDATE_FUNC_ARGS)
int Element_PLUT::update(UPDATE_FUNC_ARGS) int Element_PLUT::update(UPDATE_FUNC_ARGS)
{ {
if (!(random_gen()%100) && (5.0f*sim->pv[y/CELL][x/CELL]) > (random_gen()%1000)) if (RNG::Ref().chance(1, 100) && RNG::Ref().chance(5.0f*sim->pv[y/CELL][x/CELL], 1000))
{ {
sim->create_part(i, x, y, PT_NEUT); sim->create_part(i, x, y, PT_NEUT);
} }

View File

@@ -55,7 +55,7 @@ int Element_POLO::update(UPDATE_FUNC_ARGS)
int r = sim->photons[y][x]; int r = sim->photons[y][x];
if (parts[i].tmp < LIMIT && !parts[i].life) if (parts[i].tmp < LIMIT && !parts[i].life)
{ {
if (!(random_gen()%10000) && !parts[i].tmp) if (RNG::Ref().chance(1, 10000) && !parts[i].tmp)
{ {
int s = sim->create_part(-3, x, y, PT_NEUT); int s = sim->create_part(-3, x, y, PT_NEUT);
if (s >= 0) if (s >= 0)
@@ -68,7 +68,7 @@ int Element_POLO::update(UPDATE_FUNC_ARGS)
} }
} }
if (r && !(random_gen()%100)) if (r && RNG::Ref().chance(1, 100))
{ {
int s = sim->create_part(-3, x, y, PT_NEUT); int s = sim->create_part(-3, x, y, PT_NEUT);
if (s >= 0) if (s >= 0)

View File

@@ -68,7 +68,7 @@ int Element_PROT::update(UPDATE_FUNC_ARGS)
break; break;
} }
case PT_DEUT: case PT_DEUT:
if ((-((int)sim->pv[y / CELL][x / CELL] - 4) + (parts[uID].life / 100)) > (int)(random_gen() % 200)) if (RNG::Ref().chance(-((int)sim->pv[y / CELL][x / CELL] - 4) + (parts[uID].life / 100), 200))
{ {
DeutImplosion(sim, parts[uID].life, x, y, restrict_flt(parts[uID].temp + parts[uID].life * 500, MIN_TEMP, MAX_TEMP), PT_PROT); DeutImplosion(sim, parts[uID].life, x, y, restrict_flt(parts[uID].temp + parts[uID].life * 500, MIN_TEMP, MAX_TEMP), PT_PROT);
sim->kill_part(uID); sim->kill_part(uID);
@@ -76,7 +76,7 @@ int Element_PROT::update(UPDATE_FUNC_ARGS)
break; break;
case PT_LCRY: case PT_LCRY:
//Powered LCRY reaction: PROT->PHOT //Powered LCRY reaction: PROT->PHOT
if (parts[uID].life > 5 && !(random_gen() % 10)) if (parts[uID].life > 5 && RNG::Ref().chance(1, 10))
{ {
sim->part_change_type(i, x, y, PT_PHOT); sim->part_change_type(i, x, y, PT_PHOT);
parts[i].life *= 2; parts[i].life *= 2;
@@ -143,7 +143,7 @@ int Element_PROT::update(UPDATE_FUNC_ARGS)
element = PT_CO2; element = PT_CO2;
else else
element = PT_NBLE; element = PT_NBLE;
newID = sim->create_part(-1, x+random_gen()%3-1, y+random_gen()%3-1, element); newID = sim->create_part(-1, x + RNG::Ref().between(-1, 1), y + RNG::Ref().between(-1, 1), element);
if (newID >= 0) if (newID >= 0)
parts[newID].temp = restrict_flt(100.0f*parts[i].tmp, MIN_TEMP, MAX_TEMP); parts[newID].temp = restrict_flt(100.0f*parts[i].tmp, MIN_TEMP, MAX_TEMP);
sim->kill_part(i); sim->kill_part(i);

View File

@@ -116,22 +116,22 @@ int Element_PRTI::update(UPDATE_FUNC_ARGS)
if (fe) { if (fe) {
int orbd[4] = {0, 0, 0, 0}; //Orbital distances int orbd[4] = {0, 0, 0, 0}; //Orbital distances
int orbl[4] = {0, 0, 0, 0}; //Orbital locations int orbl[4] = {0, 0, 0, 0}; //Orbital locations
if (!sim->parts[i].life) parts[i].life = random_gen(); if (!sim->parts[i].life) parts[i].life = RNG::Ref().gen();
if (!sim->parts[i].ctype) parts[i].ctype = random_gen(); if (!sim->parts[i].ctype) parts[i].ctype = RNG::Ref().gen();
sim->orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl); sim->orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl);
for (int r = 0; r < 4; r++) { for (int r = 0; r < 4; r++) {
if (orbd[r]>1) { if (orbd[r]>1) {
orbd[r] -= 12; orbd[r] -= 12;
if (orbd[r]<1) { if (orbd[r]<1) {
orbd[r] = (random_gen()%128)+128; orbd[r] = RNG::Ref().between(128, 255);
orbl[r] = random_gen()%255; orbl[r] = RNG::Ref().between(0, 254);
} else { } else {
orbl[r] += 2; orbl[r] += 2;
orbl[r] = orbl[r]%255; orbl[r] = orbl[r]%255;
} }
} else { } else {
orbd[r] = (random_gen()%128)+128; orbd[r] = RNG::Ref().between(128, 255);
orbl[r] = random_gen()%255; orbl[r] = RNG::Ref().between(0, 254);
} }
} }
sim->orbitalparts_set(&parts[i].life, &parts[i].ctype, orbd, orbl); sim->orbitalparts_set(&parts[i].life, &parts[i].ctype, orbd, orbl);

View File

@@ -73,7 +73,7 @@ int Element_PRTO::update(UPDATE_FUNC_ARGS)
fe = 1; fe = 1;
for ( nnx =0 ; nnx<80; nnx++) for ( nnx =0 ; nnx<80; nnx++)
{ {
int randomness = (count + random_gen()%3-1 + 4)%8;//add -1,0,or 1 to count int randomness = (count + RNG::Ref().between(-1, 1) + 4) % 8;//add -1,0,or 1 to count
if (sim->portalp[parts[i].tmp][randomness][nnx].type==PT_SPRK)// TODO: make it look better, spark creation if (sim->portalp[parts[i].tmp][randomness][nnx].type==PT_SPRK)// TODO: make it look better, spark creation
{ {
sim->create_part(-1,x+1,y,PT_SPRK); sim->create_part(-1,x+1,y,PT_SPRK);
@@ -141,15 +141,15 @@ int Element_PRTO::update(UPDATE_FUNC_ARGS)
if (fe) { if (fe) {
int orbd[4] = {0, 0, 0, 0}; //Orbital distances int orbd[4] = {0, 0, 0, 0}; //Orbital distances
int orbl[4] = {0, 0, 0, 0}; //Orbital locations int orbl[4] = {0, 0, 0, 0}; //Orbital locations
if (!sim->parts[i].life) parts[i].life = random_gen(); if (!sim->parts[i].life) parts[i].life = RNG::Ref().gen();
if (!sim->parts[i].ctype) parts[i].ctype = random_gen(); if (!sim->parts[i].ctype) parts[i].ctype = RNG::Ref().gen();
sim->orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl); sim->orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl);
for (r = 0; r < 4; r++) { for (r = 0; r < 4; r++) {
if (orbd[r]<254) { if (orbd[r]<254) {
orbd[r] += 16; orbd[r] += 16;
if (orbd[r]>254) { if (orbd[r]>254) {
orbd[r] = 0; orbd[r] = 0;
orbl[r] = random_gen()%255; orbl[r] = RNG::Ref().between(0, 254);
} }
else else
{ {
@@ -160,7 +160,7 @@ int Element_PRTO::update(UPDATE_FUNC_ARGS)
//orbl[r] = orbl[r]%255; //orbl[r] = orbl[r]%255;
} else { } else {
orbd[r] = 0; orbd[r] = 0;
orbl[r] = random_gen()%255; orbl[r] = RNG::Ref().between(0, 254);
} }
} }
sim->orbitalparts_set(&parts[i].life, &parts[i].ctype, orbd, orbl); sim->orbitalparts_set(&parts[i].life, &parts[i].ctype, orbd, orbl);

View File

@@ -70,7 +70,7 @@ int Element_QRTZ::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
else if (TYP(r)==PT_SLTW && !(random_gen()%500)) else if (TYP(r)==PT_SLTW && RNG::Ref().chance(1, 500))
{ {
sim->kill_part(ID(r)); sim->kill_part(ID(r));
parts[i].tmp++; parts[i].tmp++;
@@ -83,7 +83,7 @@ int Element_QRTZ::update(UPDATE_FUNC_ARGS)
int rnd, sry, srx; int rnd, sry, srx;
for (trade = 0; trade < 9; trade++) for (trade = 0; trade < 9; trade++)
{ {
rnd = random_gen()%0x3FF; rnd = RNG::Ref().gen() % 0x3FF;
rx = (rnd%5)-2; rx = (rnd%5)-2;
srx = (rnd%3)-1; srx = (rnd%3)-1;
rnd >>= 3; rnd >>= 3;
@@ -106,11 +106,11 @@ int Element_QRTZ::update(UPDATE_FUNC_ARGS)
// If PQRT is stationary and has started growing particles of QRTZ, the PQRT is basically part of a new QRTZ crystal. So turn it back into QRTZ so that it behaves more like part of the crystal. // If PQRT is stationary and has started growing particles of QRTZ, the PQRT is basically part of a new QRTZ crystal. So turn it back into QRTZ so that it behaves more like part of the crystal.
sim->part_change_type(i,x,y,PT_QRTZ); sim->part_change_type(i,x,y,PT_QRTZ);
} }
if (random_gen()%2) if (RNG::Ref().chance(1, 2))
{ {
parts[np].tmp=-1;//dead qrtz parts[np].tmp=-1;//dead qrtz
} }
else if (!parts[i].tmp && !(random_gen()%15)) else if (!parts[i].tmp && RNG::Ref().chance(1, 15))
{ {
parts[i].tmp=-1; parts[i].tmp=-1;
} }

View File

@@ -58,7 +58,7 @@ int Element_RIME::update(UPDATE_FUNC_ARGS)
if (TYP(r)==PT_SPRK) if (TYP(r)==PT_SPRK)
{ {
sim->part_change_type(i,x,y,PT_FOG); sim->part_change_type(i,x,y,PT_FOG);
parts[i].life = random_gen()%50 + 60; parts[i].life = RNG::Ref().between(60, 119);
} }
else if (TYP(r)==PT_FOG&&parts[ID(r)].life>0) else if (TYP(r)==PT_FOG&&parts[ID(r)].life>0)
{ {

View File

@@ -50,8 +50,8 @@ int Element_RPEL::update(UPDATE_FUNC_ARGS)
int r, rx, ry, ri; int r, rx, ry, ri;
for(ri = 0; ri <= 10; ri++) for(ri = 0; ri <= 10; ri++)
{ {
rx = (random_gen()%21)-10; rx = RNG::Ref().between(-10, 10);
ry = (random_gen()%21)-10; ry = RNG::Ref().between(-10, 10);
if (x+rx >= 0 && x+rx < XRES && y+ry >= 0 && y+ry < YRES && (rx || ry)) if (x+rx >= 0 && x+rx < XRES && y+ry >= 0 && y+ry < YRES && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];

View File

@@ -57,7 +57,7 @@ int Element_SHLD1::update(UPDATE_FUNC_ARGS)
continue; continue;
else if (TYP(r)==PT_SPRK&&parts[i].life==0) else if (TYP(r)==PT_SPRK&&parts[i].life==0)
{ {
if (11>random_gen()%40) if (RNG::Ref().chance(11, 40))
{ {
sim->part_change_type(i,x,y,PT_SHLD2); sim->part_change_type(i,x,y,PT_SHLD2);
parts[i].life = 7; parts[i].life = 7;
@@ -72,7 +72,7 @@ int Element_SHLD1::update(UPDATE_FUNC_ARGS)
} }
} }
} }
else if (TYP(r)==PT_SHLD3&&2>random_gen()%5) else if (TYP(r) == PT_SHLD3 && RNG::Ref().chance(2, 5))
{ {
sim->part_change_type(i,x,y,PT_SHLD2); sim->part_change_type(i,x,y,PT_SHLD2);
parts[i].life = 7; parts[i].life = 7;

View File

@@ -61,7 +61,7 @@ int Element_SHLD2::update(UPDATE_FUNC_ARGS)
} }
else if (TYP(r)==PT_SPRK&&parts[i].life==0) else if (TYP(r)==PT_SPRK&&parts[i].life==0)
{ {
if (!(random_gen()%8)) if (RNG::Ref().chance(1, 8))
{ {
sim->part_change_type(i,x,y,PT_SHLD3); sim->part_change_type(i,x,y,PT_SHLD3);
parts[i].life = 7; parts[i].life = 7;
@@ -77,7 +77,7 @@ int Element_SHLD2::update(UPDATE_FUNC_ARGS)
} }
} }
} }
else if (TYP(r)==PT_SHLD4&&2>random_gen()%5) else if (TYP(r) == PT_SHLD4 && RNG::Ref().chance(2, 5))
{ {
sim->part_change_type(i,x,y,PT_SHLD3); sim->part_change_type(i,x,y,PT_SHLD3);
parts[i].life = 7; parts[i].life = 7;

View File

@@ -55,7 +55,7 @@ int Element_SHLD3::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
{ {
if (!(random_gen()%2500)) if (RNG::Ref().chance(1, 2500))
{ {
np = sim->create_part(-1,x+rx,y+ry,PT_SHLD1); np = sim->create_part(-1,x+rx,y+ry,PT_SHLD1);
if (np<0) continue; if (np<0) continue;
@@ -71,7 +71,7 @@ int Element_SHLD3::update(UPDATE_FUNC_ARGS)
} }
else if (TYP(r)==PT_SPRK&&parts[i].life==0) else if (TYP(r)==PT_SPRK&&parts[i].life==0)
{ {
if (3>random_gen()%500) if (RNG::Ref().chance(3, 500))
{ {
sim->part_change_type(i,x,y,PT_SHLD4); sim->part_change_type(i,x,y,PT_SHLD4);
parts[i].life = 7; parts[i].life = 7;

View File

@@ -55,7 +55,7 @@ int Element_SHLD4::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
{ {
if (!(random_gen()%5500)) if (RNG::Ref().chance(1, 5500))
{ {
np = sim->create_part(-1,x+rx,y+ry,PT_SHLD1); np = sim->create_part(-1,x+rx,y+ry,PT_SHLD1);
if (np<0) continue; if (np<0) continue;

View File

@@ -78,7 +78,7 @@ int Element_SING::update(UPDATE_FUNC_ARGS)
spawncount = (spawncount>255) ? 3019 : std::pow((double)(spawncount/8), 2)*M_PI; spawncount = (spawncount>255) ? 3019 : std::pow((double)(spawncount/8), 2)*M_PI;
for (int j = 0;j < spawncount; j++) for (int j = 0;j < spawncount; j++)
{ {
switch(random_gen()%3) switch (RNG::Ref().gen() % 3)
{ {
case 0: case 0:
nb = sim->create_part(-3, x, y, PT_PHOT); nb = sim->create_part(-3, x, y, PT_PHOT);
@@ -91,10 +91,10 @@ int Element_SING::update(UPDATE_FUNC_ARGS)
break; break;
} }
if (nb!=-1) { if (nb!=-1) {
parts[nb].life = (random_gen()%300); parts[nb].life = RNG::Ref().between(0, 299);
parts[nb].temp = MAX_TEMP/2; parts[nb].temp = MAX_TEMP/2;
angle = random_gen.uniform01()*2.0f*M_PI; angle = RNG::Ref().uniform01()*2.0f*M_PI;
v = random_gen.uniform01()*5.0f; v = RNG::Ref().uniform01()*5.0f;
parts[nb].vx = v*cosf(angle); parts[nb].vx = v*cosf(angle);
parts[nb].vy = v*sinf(angle); parts[nb].vy = v*sinf(angle);
} }
@@ -111,7 +111,7 @@ int Element_SING::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if (TYP(r)!=PT_DMND&& !(random_gen()%3)) if (TYP(r)!=PT_DMND&& RNG::Ref().chance(1, 3))
{ {
if (TYP(r)==PT_SING && parts[ID(r)].life >10) if (TYP(r)==PT_SING && parts[ID(r)].life >10)
{ {
@@ -123,11 +123,11 @@ int Element_SING::update(UPDATE_FUNC_ARGS)
{ {
if (parts[i].life+3 > 255) if (parts[i].life+3 > 255)
{ {
if (parts[ID(r)].type!=PT_SING && !(random_gen()%100)) if (parts[ID(r)].type!=PT_SING && RNG::Ref().chance(1, 1000))
{ {
int np; int np;
np = sim->create_part(ID(r),x+rx,y+ry,PT_SING); np = sim->create_part(ID(r),x+rx,y+ry,PT_SING);
parts[np].life = random_gen()%50+60; parts[np].life = RNG::Ref().between(60, 109);
} }
continue; continue;
} }

View File

@@ -56,16 +56,16 @@ int Element_SLTW::update(UPDATE_FUNC_ARGS)
switch TYP(r) switch TYP(r)
{ {
case PT_SALT: case PT_SALT:
if (!(random_gen()%2000)) if (RNG::Ref().chance(1, 2000))
sim->part_change_type(ID(r),x+rx,y+ry,PT_SLTW); sim->part_change_type(ID(r),x+rx,y+ry,PT_SLTW);
break; break;
case PT_PLNT: case PT_PLNT:
if (!(random_gen()%40)) if (RNG::Ref().chance(1, 40))
sim->kill_part(ID(r)); sim->kill_part(ID(r));
break; break;
case PT_RBDM: case PT_RBDM:
case PT_LRBD: case PT_LRBD:
if ((sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && !(random_gen()%100)) if ((sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && RNG::Ref().chance(1, 100))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;
@@ -76,7 +76,8 @@ int Element_SLTW::update(UPDATE_FUNC_ARGS)
if (parts[ID(r)].ctype!=PT_WATR) if (parts[ID(r)].ctype!=PT_WATR)
{ {
sim->kill_part(ID(r)); sim->kill_part(ID(r));
if(!(random_gen()%30)){ if (RNG::Ref().chance(1, 30))
{
sim->kill_part(i); sim->kill_part(i);
return 1; return 1;
} }

View File

@@ -60,7 +60,7 @@ int Element_SNOW::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((TYP(r)==PT_SALT || TYP(r)==PT_SLTW) && !(random_gen()%333)) if ((TYP(r)==PT_SALT || TYP(r)==PT_SLTW) && RNG::Ref().chance(1, 333))
{ {
sim->part_change_type(i,x,y,PT_SLTW); sim->part_change_type(i,x,y,PT_SLTW);
sim->part_change_type(ID(r),x+rx,y+ry,PT_SLTW); sim->part_change_type(ID(r),x+rx,y+ry,PT_SLTW);

View File

@@ -63,31 +63,31 @@ int Element_SPNG::update(UPDATE_FUNC_ARGS)
case PT_WATR: case PT_WATR:
case PT_DSTW: case PT_DSTW:
case PT_FRZW: case PT_FRZW:
if (parts[i].life<limit && 500>random_gen()%absorbChanceDenom) if (parts[i].life<limit && RNG::Ref().chance(500, absorbChanceDenom))
{ {
parts[i].life++; parts[i].life++;
sim->kill_part(ID(r)); sim->kill_part(ID(r));
} }
break; break;
case PT_SLTW: case PT_SLTW:
if (parts[i].life<limit && 50>random_gen()%absorbChanceDenom) if (parts[i].life<limit && RNG::Ref().chance(50, absorbChanceDenom))
{ {
parts[i].life++; parts[i].life++;
if (random_gen()%4) if (RNG::Ref().chance(1, 4))
sim->kill_part(ID(r)); sim->kill_part(ID(r));
else else
sim->part_change_type(ID(r), x+rx, y+ry, PT_SALT); sim->part_change_type(ID(r), x+rx, y+ry, PT_SALT);
} }
break; break;
case PT_CBNW: case PT_CBNW:
if (parts[i].life<limit && 100>random_gen()%absorbChanceDenom) if (parts[i].life<limit && RNG::Ref().chance(100, absorbChanceDenom))
{ {
parts[i].life++; parts[i].life++;
sim->part_change_type(ID(r), x+rx, y+ry, PT_CO2); sim->part_change_type(ID(r), x+rx, y+ry, PT_CO2);
} }
break; break;
case PT_PSTE: case PT_PSTE:
if (parts[i].life<limit && 20>random_gen()%absorbChanceDenom) if (parts[i].life<limit && RNG::Ref().chance(20, absorbChanceDenom))
{ {
parts[i].life++; parts[i].life++;
sim->create_part(ID(r), x+rx, y+ry, PT_CLST); sim->create_part(ID(r), x+rx, y+ry, PT_CLST);
@@ -112,8 +112,8 @@ int Element_SPNG::update(UPDATE_FUNC_ARGS)
} }
for ( trade = 0; trade<9; trade ++) for ( trade = 0; trade<9; trade ++)
{ {
rx = random_gen()%5-2; rx = RNG::Ref().between(-2, 2);
ry = random_gen()%5-2; ry = RNG::Ref().between(-2, 2);
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];

View File

@@ -99,7 +99,7 @@ int Element_SPRK::update(UPDATE_FUNC_ARGS)
case PT_NBLE: case PT_NBLE:
if (parts[i].life<=1 && !(parts[i].tmp&0x1)) if (parts[i].life<=1 && !(parts[i].tmp&0x1))
{ {
parts[i].life = random_gen()%150+50; parts[i].life = RNG::Ref().between(50, 199);
sim->part_change_type(i,x,y,PT_PLSM); sim->part_change_type(i,x,y,PT_PLSM);
parts[i].ctype = PT_NBLE; parts[i].ctype = PT_NBLE;
if (parts[i].temp > 5273.15) if (parts[i].temp > 5273.15)
@@ -118,12 +118,12 @@ int Element_SPRK::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (r) if (r)
continue; continue;
if (parts[i].tmp>4 && random_gen()%(parts[i].tmp*parts[i].tmp/20+6)==0) if (parts[i].tmp>4 && RNG::Ref().chance(1, parts[i].tmp*parts[i].tmp/20+6))
{ {
int p = sim->create_part(-1, x+rx*2, y+ry*2, PT_LIGH); int p = sim->create_part(-1, x+rx*2, y+ry*2, PT_LIGH);
if (p!=-1) if (p!=-1)
{ {
parts[p].life=random_gen()%(2+parts[i].tmp/15)+parts[i].tmp/7; parts[p].life = RNG::Ref().between(0, 2+parts[i].tmp/15) + parts[i].tmp/7;
if (parts[i].life>60) if (parts[i].life>60)
parts[i].life=60; parts[i].life=60;
parts[p].temp=parts[p].life*parts[i].tmp/2.5; parts[p].temp=parts[p].life*parts[i].tmp/2.5;
@@ -151,17 +151,17 @@ int Element_SPRK::update(UPDATE_FUNC_ARGS)
continue; continue;
if (TYP(r)==PT_DSTW || TYP(r)==PT_SLTW || TYP(r)==PT_WATR) if (TYP(r)==PT_DSTW || TYP(r)==PT_SLTW || TYP(r)==PT_WATR)
{ {
int rnd = random_gen()%100; int rndstore = RNG::Ref().gen()%100;
if (!rnd) if (!rndstore)
sim->part_change_type(ID(r),x+rx,y+ry,PT_O2); sim->part_change_type(ID(r),x+rx,y+ry,PT_O2);
else if (3>rnd) else if (3 > rndstore)
sim->part_change_type(ID(r),x+rx,y+ry,PT_H2); sim->part_change_type(ID(r),x+rx,y+ry,PT_H2);
} }
} }
break; break;
case PT_TUNG: case PT_TUNG:
if(parts[i].temp < 3595.0){ if(parts[i].temp < 3595.0){
parts[i].temp += (random_gen()%20)-4; parts[i].temp += RNG::Ref().between(-4, 15);
} }
default: default:
break; break;

View File

@@ -403,7 +403,7 @@ int Element_STKM::run_stickman(playerst *playerp, UPDATE_FUNC_ARGS) {
//Spawn //Spawn
if (((int)(playerp->comm)&0x08) == 0x08) if (((int)(playerp->comm)&0x08) == 0x08)
{ {
ry -= 2*(random_gen()%2)+1; ry -= 2 * RNG::Ref().between(0, 1) + 1;
r = pmap[ry][rx]; r = pmap[ry][rx];
if (sim->elements[TYP(r)].Properties&TYPE_SOLID) if (sim->elements[TYP(r)].Properties&TYPE_SOLID)
{ {
@@ -439,7 +439,7 @@ int Element_STKM::run_stickman(playerst *playerp, UPDATE_FUNC_ARGS) {
{ {
if (playerp->elem == PT_PHOT) if (playerp->elem == PT_PHOT)
{ {
int random = abs((int)(random_gen()%3-1))*3; int random = abs((RNG::Ref().between(-1, 1)))*3;
if (random==0) if (random==0)
{ {
sim->kill_part(np); sim->kill_part(np);
@@ -460,7 +460,7 @@ int Element_STKM::run_stickman(playerst *playerp, UPDATE_FUNC_ARGS) {
if (gvx!=0 || gvy!=0) if (gvx!=0 || gvy!=0)
angle = atan2(gvx, gvy)*180.0f/M_PI; angle = atan2(gvx, gvy)*180.0f/M_PI;
else else
angle = random_gen()%360; angle = RNG::Ref().between(0, 359);
if (((int)playerp->pcomm)&0x01) if (((int)playerp->pcomm)&0x01)
angle += 180; angle += 180;
if (angle>360) if (angle>360)
@@ -468,9 +468,9 @@ int Element_STKM::run_stickman(playerst *playerp, UPDATE_FUNC_ARGS) {
if (angle<0) if (angle<0)
angle+=360; angle+=360;
parts[np].tmp = angle; parts[np].tmp = angle;
parts[np].life=random_gen()%(2+power/15)+power/7; parts[np].life = RNG::Ref().between(0, 2+power/15) + power/7;
parts[np].temp=parts[np].life*power/2.5; parts[np].temp = parts[np].life*power/2.5;
parts[np].tmp2=1; parts[np].tmp2 = 1;
} }
else if (!playerp->fan) else if (!playerp->fan)
{ {
@@ -592,7 +592,7 @@ void Element_STKM::STKM_interact(Simulation *sim, playerst *playerp, int i, int
{ {
if (TYP(r)==PT_SPRK && playerp->elem!=PT_LIGH) //If on charge if (TYP(r)==PT_SPRK && playerp->elem!=PT_LIGH) //If on charge
{ {
sim->parts[i].life -= random_gen.between(32, 52); sim->parts[i].life -= RNG::Ref().between(32, 52);
} }
if (sim->elements[TYP(r)].HeatConduct && (TYP(r)!=PT_HSWC||sim->parts[ID(r)].life==10) && ((playerp->elem!=PT_LIGH && sim->parts[ID(r)].temp>=323) || sim->parts[ID(r)].temp<=243) && (!playerp->rocketBoots || TYP(r)!=PT_PLSM)) if (sim->elements[TYP(r)].HeatConduct && (TYP(r)!=PT_HSWC||sim->parts[ID(r)].life==10) && ((playerp->elem!=PT_LIGH && sim->parts[ID(r)].temp>=323) || sim->parts[ID(r)].temp<=243) && (!playerp->rocketBoots || TYP(r)!=PT_PLSM))

View File

@@ -68,9 +68,9 @@ int Element_THDR::update(UPDATE_FUNC_ARGS)
else if (rt!=PT_CLNE&&rt!=PT_THDR&&rt!=PT_SPRK&&rt!=PT_DMND&&rt!=PT_FIRE) else if (rt!=PT_CLNE&&rt!=PT_THDR&&rt!=PT_SPRK&&rt!=PT_DMND&&rt!=PT_FIRE)
{ {
sim->pv[y/CELL][x/CELL] += 100.0f; sim->pv[y/CELL][x/CELL] += 100.0f;
if (sim->legacy_enable&&1>(random_gen()%200)) if (sim->legacy_enable && RNG::Ref().chance(1, 200))
{ {
parts[i].life = random_gen()%50+120; parts[i].life = RNG::Ref().between(120, 169);
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
} }
else else

View File

@@ -102,7 +102,7 @@ int Element_TRON::update(UPDATE_FUNC_ARGS)
int originaldir = direction; int originaldir = direction;
//random turn //random turn
int random = random_gen()%340; int random = RNG::Ref().between(0, 339);
if ((random==1 || random==3) && !(parts[i].tmp & TRON_NORANDOM)) if ((random==1 || random==3) && !(parts[i].tmp & TRON_NORANDOM))
{ {
//randomly turn left(3) or right(1) //randomly turn left(3) or right(1)
@@ -126,7 +126,7 @@ int Element_TRON::update(UPDATE_FUNC_ARGS)
} }
else else
{ {
seconddir = (direction + ((random_gen()%2)*2)+1)% 4; seconddir = (direction + (RNG::Ref().between(0, 1)*2)+1)% 4;
lastdir = (seconddir + 2)%4; lastdir = (seconddir + 2)%4;
} }
seconddircheck = trymovetron(sim,x,y,seconddir,i,parts[i].tmp2); seconddircheck = trymovetron(sim,x,y,seconddir,i,parts[i].tmp2);

View File

@@ -66,16 +66,16 @@ int Element_TUNG::update(UPDATE_FUNC_ARGS)
} }
} }
} }
if((parts[i].temp > MELTING_POINT && !(random_gen()%20)) || splode) if((parts[i].temp > MELTING_POINT && RNG::Ref().chance(1, 20)) || splode)
{ {
if(!(random_gen()%50)) if (RNG::Ref().chance(1, 50))
{ {
sim->pv[y/CELL][x/CELL] += 50.0f; sim->pv[y/CELL][x/CELL] += 50.0f;
} }
else if(!(random_gen()%100)) else if (RNG::Ref().chance(1, 100))
{ {
sim->part_change_type(i, x, y, PT_FIRE); sim->part_change_type(i, x, y, PT_FIRE);
parts[i].life = random_gen()%500; parts[i].life = RNG::Ref().between(0, 499);
return 1; return 1;
} }
else else
@@ -86,10 +86,10 @@ int Element_TUNG::update(UPDATE_FUNC_ARGS)
} }
if(splode) if(splode)
{ {
parts[i].temp = restrict_flt(MELTING_POINT + (random_gen()%600) + 200, MIN_TEMP, MAX_TEMP); parts[i].temp = restrict_flt(MELTING_POINT + RNG::Ref().between(200, 799), MIN_TEMP, MAX_TEMP);
} }
parts[i].vx += (random_gen()%100)-50; parts[i].vx += RNG::Ref().between(-50, 50);
parts[i].vy += (random_gen()%100)-50; parts[i].vy += RNG::Ref().between(-50, 50);
return 1; return 1;
} }
parts[i].pavg[0] = parts[i].pavg[1]; parts[i].pavg[0] = parts[i].pavg[1];

View File

@@ -80,7 +80,7 @@ int Element_VIBR::update(UPDATE_FUNC_ARGS) {
else //if it is exploding else //if it is exploding
{ {
//Release sparks before explode //Release sparks before explode
rndstore = random_gen(); rndstore = RNG::Ref().gen();
if (parts[i].life < 300) if (parts[i].life < 300)
{ {
rx = rndstore%3-1; rx = rndstore%3-1;
@@ -114,7 +114,7 @@ int Element_VIBR::update(UPDATE_FUNC_ARGS) {
{ {
if (!parts[i].tmp2) if (!parts[i].tmp2)
{ {
rndstore = random_gen(); rndstore = RNG::Ref().gen();
int index = sim->create_part(-3,x+((rndstore>>4)&3)-1,y+((rndstore>>6)&3)-1,PT_ELEC); int index = sim->create_part(-3,x+((rndstore>>4)&3)-1,y+((rndstore>>6)&3)-1,PT_ELEC);
if (index != -1) if (index != -1)
parts[index].temp = 7000; parts[index].temp = 7000;
@@ -122,7 +122,7 @@ int Element_VIBR::update(UPDATE_FUNC_ARGS) {
if (index != -1) if (index != -1)
parts[index].temp = 7000; parts[index].temp = 7000;
int rx = ((rndstore>>12)&3)-1; int rx = ((rndstore>>12)&3)-1;
rndstore = random_gen(); rndstore = RNG::Ref().gen();
index = sim->create_part(-1,x+rx-1,y+rndstore%3-1,PT_BREC); index = sim->create_part(-1,x+rx-1,y+rndstore%3-1,PT_BREC);
if (index != -1) if (index != -1)
parts[index].temp = 7000; parts[index].temp = 7000;
@@ -156,7 +156,7 @@ int Element_VIBR::update(UPDATE_FUNC_ARGS) {
{ {
if (!parts[ID(r)].life) if (!parts[ID(r)].life)
parts[ID(r)].tmp += 45; parts[ID(r)].tmp += 45;
else if (parts[i].tmp2 && parts[i].life > 75 && random_gen()%2) else if (parts[i].tmp2 && parts[i].life > 75 && RNG::Ref().chance(1, 2))
{ {
parts[ID(r)].tmp2 = 1; parts[ID(r)].tmp2 = 1;
parts[i].tmp = 0; parts[i].tmp = 0;
@@ -171,7 +171,7 @@ int Element_VIBR::update(UPDATE_FUNC_ARGS) {
else else
{ {
//Melts into EXOT //Melts into EXOT
if (TYP(r) == PT_EXOT && !(random_gen()%25)) if (TYP(r) == PT_EXOT && RNG::Ref().chance(1, 25))
{ {
sim->part_change_type(i, x, y, PT_EXOT); sim->part_change_type(i, x, y, PT_EXOT);
return 1; return 1;
@@ -187,7 +187,7 @@ int Element_VIBR::update(UPDATE_FUNC_ARGS) {
for (trade = 0; trade < 9; trade++) for (trade = 0; trade < 9; trade++)
{ {
if (!(trade%2)) if (!(trade%2))
rndstore = random_gen(); rndstore = RNG::Ref().gen();
rx = rndstore%7-3; rx = rndstore%7-3;
rndstore >>= 3; rndstore >>= 3;
ry = rndstore%7-3; ry = rndstore%7-3;

View File

@@ -49,7 +49,7 @@ Element_VINE::Element_VINE()
//#TPT-Directive ElementHeader Element_VINE static int update(UPDATE_FUNC_ARGS) //#TPT-Directive ElementHeader Element_VINE static int update(UPDATE_FUNC_ARGS)
int Element_VINE::update(UPDATE_FUNC_ARGS) int Element_VINE::update(UPDATE_FUNC_ARGS)
{ {
int r, np, rx, ry, rndstore = random_gen()&0x7FFFFFFF; int r, np, rx, ry, rndstore = RNG::Ref().gen();
rx = (rndstore % 3) - 1; rx = (rndstore % 3) - 1;
rndstore >>= 2; rndstore >>= 2;
ry = (rndstore % 3) - 1; ry = (rndstore % 3) - 1;

View File

@@ -50,7 +50,7 @@ int Element_VIRS::update(UPDATE_FUNC_ARGS)
{ {
//pavg[0] measures how many frames until it is cured (0 if still actively spreading and not being cured) //pavg[0] measures how many frames until it is cured (0 if still actively spreading and not being cured)
//pavg[1] measures how many frames until it dies //pavg[1] measures how many frames until it dies
int r, rx, ry, rndstore = random_gen(); int r, rx, ry, rndstore = RNG::Ref().gen();
if (parts[i].pavg[0]) if (parts[i].pavg[0])
{ {
parts[i].pavg[0] -= (rndstore & 0x1) ? 0:1; parts[i].pavg[0] -= (rndstore & 0x1) ? 0:1;
@@ -101,7 +101,7 @@ int Element_VIRS::update(UPDATE_FUNC_ARGS)
} }
else if (TYP(r) == PT_PLSM) else if (TYP(r) == PT_PLSM)
{ {
if (surround_space && 10 + sim->pv[(y+ry)/CELL][(x+rx)/CELL] > (random_gen()%100)) if (surround_space && RNG::Ref().chance(10 + sim->pv[(y+ry)/CELL][(x+rx)/CELL], 100))
{ {
sim->create_part(i, x, y, PT_PLSM); sim->create_part(i, x, y, PT_PLSM);
return 1; return 1;
@@ -135,7 +135,7 @@ int Element_VIRS::update(UPDATE_FUNC_ARGS)
} }
//reset rndstore only once, halfway through //reset rndstore only once, halfway through
else if (!rx && !ry) else if (!rx && !ry)
rndstore = random_gen(); rndstore = RNG::Ref().gen();
} }
return 0; return 0;
} }

View File

@@ -53,13 +53,13 @@ int Element_WARP::update(UPDATE_FUNC_ARGS)
{ {
parts[i].temp = 10000; parts[i].temp = 10000;
sim->pv[y/CELL][x/CELL] += (parts[i].tmp2/5000) * CFDS; sim->pv[y/CELL][x/CELL] += (parts[i].tmp2/5000) * CFDS;
if (!(random_gen()%50)) if (RNG::Ref().chance(1, 50))
sim->create_part(-3, x, y, PT_ELEC); sim->create_part(-3, x, y, PT_ELEC);
} }
for ( trade = 0; trade<5; trade ++) for ( trade = 0; trade<5; trade ++)
{ {
rx = random_gen()%3-1; rx = RNG::Ref().between(-1, 1);
ry = random_gen()%3-1; ry = RNG::Ref().between(-1, 1);
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
@@ -71,8 +71,8 @@ int Element_WARP::update(UPDATE_FUNC_ARGS)
parts[i].y = parts[ID(r)].y; parts[i].y = parts[ID(r)].y;
parts[ID(r)].x = x; parts[ID(r)].x = x;
parts[ID(r)].y = y; parts[ID(r)].y = y;
parts[ID(r)].vx = (random_gen()%4)-1.5; parts[ID(r)].vx = RNG::Ref().chance(-2, 1) + 0.5f;
parts[ID(r)].vy = (random_gen()%4)-2; parts[ID(r)].vy = RNG::Ref().between(-2, 1);
parts[i].life += 4; parts[i].life += 4;
pmap[y][x] = r; pmap[y][x] = r;
pmap[y+ry][x+rx] = PMAP(i, parts[i].type); pmap[y+ry][x+rx] = PMAP(i, parts[i].type);

View File

@@ -55,35 +55,32 @@ int Element_WATR::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if (TYP(r)==PT_SALT && !(random_gen()%50)) if (TYP(r)==PT_SALT && RNG::Ref().chance(1, 50))
{ {
sim->part_change_type(i,x,y,PT_SLTW); sim->part_change_type(i,x,y,PT_SLTW);
// on average, convert 3 WATR to SLTW before SALT turns into SLTW // on average, convert 3 WATR to SLTW before SALT turns into SLTW
if (!(random_gen()%3)) if (RNG::Ref().chance(1, 3))
sim->part_change_type(ID(r),x+rx,y+ry,PT_SLTW); sim->part_change_type(ID(r),x+rx,y+ry,PT_SLTW);
} }
else if ((TYP(r)==PT_RBDM||TYP(r)==PT_LRBD) && (sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && !(random_gen()%100)) else if ((TYP(r)==PT_RBDM||TYP(r)==PT_LRBD) && (sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && RNG::Ref().chance(1, 100))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;
parts[i].ctype = PT_WATR; parts[i].ctype = PT_WATR;
} }
else if (TYP(r)==PT_FIRE && parts[ID(r)].ctype!=PT_WATR){ else if (TYP(r)==PT_FIRE && parts[ID(r)].ctype!=PT_WATR)
{
sim->kill_part(ID(r)); sim->kill_part(ID(r));
if(!(random_gen()%30)){ if (RNG::Ref().chance(1, 30))
{
sim->kill_part(i); sim->kill_part(i);
return 1; return 1;
} }
} }
else if (TYP(r)==PT_SLTW && !(random_gen()%2000)) else if (TYP(r)==PT_SLTW && RNG::Ref().chance(1, 2000))
{ {
sim->part_change_type(i,x,y,PT_SLTW); sim->part_change_type(i,x,y,PT_SLTW);
} }
/*if (TYP(r)==PT_CNCT && !(random_gen()%100)) Concrete+Water to paste, not very popular
{
part_change_type(i,x,y,PT_PSTE);
sim.kill_part(ID(r));
}*/
} }
return 0; return 0;
} }

View File

@@ -55,7 +55,7 @@ int Element_WTRV::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((TYP(r)==PT_RBDM||TYP(r)==PT_LRBD) && !sim->legacy_enable && parts[i].temp>(273.15f+12.0f) && !(random_gen()%100)) if ((TYP(r)==PT_RBDM||TYP(r)==PT_LRBD) && !sim->legacy_enable && parts[i].temp>(273.15f+12.0f) && RNG::Ref().chance(1, 100))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;

View File

@@ -55,7 +55,7 @@ int Element_YEST::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if (TYP(r)==PT_DYST && RNG::Ref().chance(1.0/6) && !sim->legacy_enable) if (TYP(r)==PT_DYST && RNG::Ref().chance(1, 6) && !sim->legacy_enable)
{ {
sim->part_change_type(i,x,y,PT_DYST); sim->part_change_type(i,x,y,PT_DYST);
} }