diff options
Diffstat (limited to 'src/simulation/Simulation.cpp')
| -rw-r--r-- | src/simulation/Simulation.cpp | 407 |
1 files changed, 213 insertions, 194 deletions
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 2a61e24..083d9f6 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -2546,202 +2546,221 @@ int Simulation::create_part(int p, int x, int y, int tv)//the function for creat parts[i].tmp = 0; parts[i].tmp2 = 0; } - if (t==PT_LIGH && p==-2) - { - switch (gravityMode) - { - default: - case 0: - parts[i].tmp= 270+rand()%40-20; - break; - case 1: - parts[i].tmp = rand()%360; - break; - case 2: - parts[i].tmp = atan2(x-XCNTR, y-YCNTR)*(180.0f/M_PI)+90; - break; - } - parts[i].tmp2 = 4; - } - if (t==PT_SOAP) - { - parts[i].tmp = -1; - parts[i].tmp2 = -1; - } - //now set various properties that we want at spawn. - if (t==PT_ACID || t==PT_CAUS) - { - parts[i].life = 75; - } - /*Testing - if(t==PT_WOOD){ - parts[i].life = 150; - } - End Testing*/ - if (t==PT_WARP) { - parts[i].life = rand()%95+70; - } - if (t==PT_FUSE) { - parts[i].life = 50; - parts[i].tmp = 50; - } - /*if (elements[t].Properties&PROP_LIFE) { - int r; - for (r = 0; r<NGOL; r++) - if (t==goltype[r]) - parts[i].tmp = grule[r+1][9] - 1; - }*/ - if (t==PT_LIFE && v<NGOLALT) - { - parts[i].tmp = grule[v+1][9] - 1; - parts[i].ctype = v; - } - if (t==PT_TRON) - { - int randhue = rand()%360; - int randomdir = rand()%4; - parts[i].tmp = 1|(randomdir<<5)|(randhue<<7);//set as a head and a direction - parts[i].tmp2 = 4;//tail - parts[i].life = 5; - } - if (t==PT_DEUT) - parts[i].life = 10; - if (t==PT_MERC) - parts[i].tmp = 10; - if (t==PT_BRAY) - parts[i].life = 30; - if (t==PT_PUMP || t==PT_GPMP) - parts[i].life= 10; - if (t==PT_SING) - parts[i].life = rand()%50+60; - if (t==PT_QRTZ) - parts[i].tmp = (rand()%11); - if (t==PT_PQRT) - parts[i].tmp = (rand()%11); - if (t==PT_CLST) - parts[i].tmp = (rand()%7); - if (t==PT_FSEP) - parts[i].life = 50; - if (t==PT_COAL) { - parts[i].life = 110; - parts[i].tmp = 50; - } - if (t==PT_IGNT) { - parts[i].life = 3; - } - if (t==PT_FRZW) - parts[i].life = 100; - if (t==PT_PIPE) - parts[i].life = 60; - if (t==PT_BCOL) - parts[i].life = 110; - if (t==PT_FIRE) - parts[i].life = rand()%50+120; - if (t==PT_PLSM) - parts[i].life = rand()%150+50; - if (t==PT_HFLM) - parts[i].life = rand()%150+50; - if (t==PT_LAVA) - parts[i].life = rand()%120+240; - if (t==PT_NBLE) - parts[i].life = 0; - if (t==PT_ICEI) - parts[i].ctype = PT_WATR; - if (t==PT_NEUT) - { - float r = (rand()%128+128)/127.0f; - float a = (rand()%360)*3.14159f/180.0f; - parts[i].life = rand()%480+480; - parts[i].vx = r*cosf(a); - parts[i].vy = r*sinf(a); - } - if (t==PT_MORT) - { - parts[i].vx = 2; - } - if (t==PT_PHOT) - { - float a = (rand()%8) * 0.78540f; - parts[i].life = 680; - parts[i].ctype = 0x3FFFFFFF; - parts[i].vx = 3.0f*cosf(a); - parts[i].vy = 3.0f*sinf(a); - } - if (t==PT_ELEC) - { - float a = (rand()%360)*3.14159f/180.0f; - parts[i].life = 680; - parts[i].vx = 2.0f*cosf(a); - parts[i].vy = 2.0f*sinf(a); - } - if (t==PT_STKM) - { - if (player.spwn==0) + switch (t) { - parts[i].x = (float)x; - parts[i].y = (float)y; - parts[i].type = PT_STKM; - parts[i].vx = 0; - parts[i].vy = 0; - parts[i].life = 100; - parts[i].ctype = 0; - parts[i].temp = elements[t].Temperature; - //STKM_init_legs(this, &player, i); - player.spwn = 1; - } - else - { - return -1; - } - create_part(-1,x,y,PT_SPAWN); - } - if (t==PT_STKM2) - { - if (player2.spwn==0) - { - parts[i].x = (float)x; - parts[i].y = (float)y; - parts[i].type = PT_STKM2; - parts[i].vx = 0; - parts[i].vy = 0; - parts[i].life = 100; - parts[i].ctype = 0; - parts[i].temp = elements[t].Temperature; - //STKM_init_legs(this, &player2, i); - player2.spwn = 1; - } - else - { - return -1; - } - create_part(-1,x,y,PT_SPAWN2); - } - if (t==PT_FIGH) - { - unsigned char fcount = 0; - while (fcount < 100 && fcount < (fighcount+1) && fighters[fcount].spwn==1) fcount++; - if (fcount < 100 && fighters[fcount].spwn==0) - { - parts[i].x = (float)x; - parts[i].y = (float)y; - parts[i].type = PT_FIGH; - parts[i].vx = 0; - parts[i].vy = 0; - parts[i].life = 100; - parts[i].ctype = 0; - parts[i].tmp = fcount; - parts[i].temp = elements[t].Temperature; - //STKM_init_legs(this, &fighters[fcount], i); - fighters[fcount].spwn = 1; - fighters[fcount].elem = PT_DUST; - fighcount++; - - return i; + case PT_LIGH: + if (p==-2) + { + switch (gravityMode) + { + default: + case 0: + parts[i].tmp= 270+rand()%40-20; + break; + case 1: + parts[i].tmp = rand()%360; + break; + case 2: + parts[i].tmp = atan2(float( x-XCNTR), float(y-YCNTR))*(180.0f/M_PI)+90; + } + parts[i].tmp2 = 4; + } + break; + case PT_SOAP: + parts[i].tmp = -1; + parts[i].tmp2 = -1; + break; + case PT_ACID: case PT_CAUS: + parts[i].life = 75; + break; + /*Testing + case PT_WOOD: + parts[i].life = 150; + break; + End Testing*/ + case PT_WARP: + parts[i].life = rand()%95+70; + break; + case PT_FUSE: + parts[i].life = 50; + parts[i].tmp = 50; + break; + case PT_LIFE: + if (v<NGOLALT) + { + parts[i].tmp = grule[v+1][9] - 1; + parts[i].ctype = v; + } + break; + case PT_DEUT: + parts[i].life = 10; + break; + case PT_MERC: + parts[i].tmp = 10; + break; + case PT_BRAY: + parts[i].life = 30; + break; + case PT_GPMP: case PT_PUMP: + parts[i].life = 10; + break; + case PT_SING: + parts[i].life = rand()%50+60; + break; + case PT_QRTZ: + parts[i].tmp = (rand()%11); + break; + case PT_PQRT: + parts[i].tmp = (rand()%11); + break; + case PT_CLST: + parts[i].tmp = (rand()%7); + break; + case PT_FSEP: + parts[i].life = 50; + break; + case PT_COAL: + parts[i].life = 110; + parts[i].tmp = 50; + break; + case PT_IGNT: + parts[i].life = 3; + break; + case PT_FRZW: + parts[i].life = 100; + break; + case PT_PIPE: + parts[i].life = 60; + break; + case PT_BCOL: + parts[i].life = 110; + break; + case PT_FIRE: + parts[i].life = rand()%50+120; + break; + case PT_PLSM: + parts[i].life = rand()%150+50; + break; + case PT_HFLM: + parts[i].life = rand()%150+50; + break; + case PT_LAVA: + parts[i].life = rand()%120+240; + break; + case PT_NBLE: + parts[i].life = 0; + break; + case PT_ICEI: + parts[i].ctype = PT_WATR; + break; + case PT_MORT: + parts[i].vx = 2; + break; + case PT_STKM: + if (player.spwn==0) + { + parts[i].x = (float)x; + parts[i].y = (float)y; + parts[i].type = PT_STKM; + parts[i].vx = 0; + parts[i].vy = 0; + parts[i].life = 100; + parts[i].ctype = 0; + parts[i].temp = elements[t].Temperature; + Element_STKM::STKM_init_legs(this, &player, i); + player.spwn = 1; + } + else + { + return -1; + } + create_part(-1,x,y,PT_SPAWN); + elementCount[PT_SPAWN] = 1; + break; + case PT_STKM2: + if (player2.spwn==0) + { + parts[i].x = (float)x; + parts[i].y = (float)y; + parts[i].type = PT_STKM2; + parts[i].vx = 0; + parts[i].vy = 0; + parts[i].life = 100; + parts[i].ctype = 0; + parts[i].temp = elements[t].Temperature; + Element_STKM::STKM_init_legs(this, &player2, i); + player2.spwn = 1; + } + else + { + return -1; + } + create_part(-1,x,y,PT_SPAWN2); + elementCount[PT_SPAWN2] = 1; + break; + case PT_FIGH: + break; + case PT_BIZR: case PT_BIZRG: case PT_BIZRS: + parts[i].ctype = 0x47FFFF; + break; + default: + if (t==PT_FIGH) + { + unsigned char fcount = 0; + while (fcount < 100 && fcount < (fighcount+1) && fighters[fcount].spwn==1) fcount++; + if (fcount < 100 && fighters[fcount].spwn==0) + { + parts[i].x = (float)x; + parts[i].y = (float)y; + parts[i].type = PT_FIGH; + parts[i].vx = 0; + parts[i].vy = 0; + parts[i].life = 100; + parts[i].ctype = 0; + parts[i].tmp = fcount; + parts[i].temp = elements[t].Temperature; + Element_STKM::STKM_init_legs(this, &fighters[fcount], i); + fighters[fcount].spwn = 1; + fighters[fcount].elem = PT_DUST; + fighcount++; + + return i; + } + return -1; + } + if (t==PT_PHOT) + { + float a = (rand()%8) * 0.78540f; + parts[i].life = 680; + parts[i].ctype = 0x3FFFFFFF; + parts[i].vx = 3.0f*cosf(a); + parts[i].vy = 3.0f*sinf(a); + } + if (t==PT_ELEC) + { + float a = (rand()%360)*3.14159f/180.0f; + parts[i].life = 680; + parts[i].vx = 2.0f*cosf(a); + parts[i].vy = 2.0f*sinf(a); + } + if (t==PT_NEUT) + { + float r = (rand()%128+128)/127.0f; + float a = (rand()%360)*3.14159f/180.0f; + parts[i].life = rand()%480+480; + parts[i].vx = r*cosf(a); + parts[i].vy = r*sinf(a); + } + if (t==PT_TRON) + { + int randhue = rand()%360; + int randomdir = rand()%4; + parts[i].tmp = 1|(randomdir<<5)|(randhue<<7);//set as a head and a direction + parts[i].tmp2 = 4;//tail + parts[i].life = 5; + } + break; } - return -1; - } - if (t==PT_BIZR||t==PT_BIZRG||t==PT_BIZRS) - parts[i].ctype = 0x47FFFF; //and finally set the pmap/photon maps to the newly created particle if (elements[t].Properties & TYPE_ENERGY) photons[y][x] = t|(i<<8); |
