Create an extendable array. But it does come with its own little problems unless you are tidy with your code.
Heres an example, complete (except for model name), compiled & tested.

Code:
#include <acknex.h>
#include <default.c>
//
//
//
ENTITY** soldier;
var max_soldiers;
//
//
function main()
{
   level_load(NULL);      camera.x = -400;   camera.z = -300;   camera.tilt = 45;
   //
   //
   // CREATE initial soldier array
   max_soldiers = 5;                                                 //set initial number of soldiers
   soldier = (ENTITY**)malloc(sizeof(ENTITY*)*max_soldiers);         //create array to hold this many soldier-entities
   soldier[0] = ent_create("cube.mdl", vector(0,10,0), NULL);                //create solder 1
   soldier[1] = ent_create("cube.mdl", vector(0,50,0), NULL);                //create solder 2
   soldier[2] = ent_create("cube.mdl", vector(0,100,0), NULL);               //create solder 3
   soldier[3] = ent_create("cube.mdl", vector(0,150,0), NULL);               //create solder 4
   soldier[4] = ent_create("cube.mdl", vector(0,200,0), NULL);               //create solder 5
   wait(-3);   //pause demo for dramatic effect
   //
   // EXTEND soldier array
   max_soldiers = 10;                                                      //increase number of soldiers
   soldier = (ENTITY**)realloc(soldier, sizeof(ENTITY*)*max_soldiers);     //extend array to hold aditional soldier-entities
   soldier[5] = ent_create("cube.mdl", vector(0,-10,0), NULL);        //create solder 6  in new space
   soldier[6] = ent_create("cube.mdl", vector(0,-50,0), NULL);        //create solder 7  in new space
   soldier[7] = ent_create("cube.mdl", vector(0,-100,0), NULL);       //create solder 8  in new space
   soldier[8] = ent_create("cube.mdl", vector(0,-150,0), NULL);       //create solder 9  in new space
   soldier[9] = ent_create("cube.mdl", vector(0,-200,0), NULL);       //create solder 10 in new space
   //
   wait(-1);   //pause demo for dramatic effect
   soldier[0].x -= 10;   //move old soldier 1 to prove he is still accessable under old name
   soldier[1].x -= 20;   //move old soldier 2 to prove he is still accessable under old name
   soldier[2].x -= 30;   //move old soldier 3 to prove he is still accessable under old name
   soldier[3].x -= 40;   //move old soldier 4 to prove he is still accessable under old name
   soldier[4].x -= 50;   //move old soldier 5 to prove he is still accessable under old name
   //
   //
   wait(-10);
   //flush and reset soldier array for next level.
   int i;   for(i=0; i<max_soldiers; i++)   { ent_remove(soldier[i]); }     //see - old soldiers DO die
   free(soldier);   //now as if it had never been used...
   //
   //
   //
   beep();
}
Any questions, fire away...


"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial