this should work.
Just use the same targetnames, but give each set a unique script_noteworthy. So for example:
Soul Door 1:
trigger: targetname - soul_trig
script_noteworthy - soul_door_1
brushes/models: targetname - soul_door
script_noteworthy - soul_door_1
(script_flag)
Soul Door 2:
trigger: targetname - soul_trig
script_noteworthy - soul_door_2
brushes/models: targetname - soul_door
script_noteworthy - soul_door_2
(script_flag)
etc. etc.
soul_tracker_init() { soul_door = getentarray( "soul_door", "targetname" ); for( i=0 ; i<soul_door.size ; i++ ) { if( isDefined(soul_door[i].script_flag) && !IsDefined( level.flag[soul_door[i].script_flag] ) ) flag_init( soul_door[i].script_flag ); } level thread zombie_soul_start(); } zombie_soul_start() { trigs = getentarray( "soul_trig", "targetname" ); while(isdefined(trigs) && trigs.size>=1 ) { zombies = getaiarray( "axis" ); for( i=0 ; i<zombies.size ; i++ ) { if( !isdefined( zombies[i].soul_zombie ) ) { zombies[i].soul_zombie = true; zombies[i] thread soul_watch( trigs ); } } wait 0.5; trigs = getentarray( "soul_trig", "targetname" ); } } soul_watch(trigs) { self waittill( "death", attacker ); if( !isdefined( trigs ) || trigs.size == 0 ) return; if( isdefined(attacker) && !isplayer( attacker ) ) return; for( i=0 ; i<trigs.size ; i++ ) { if( isdefined( trigs[i] ) && self istouching( trigs[i] ) ) trigs[i] thread add_soul_to_door(self.origin); } } add_soul_to_door(death_origin) { if( !isdefined( self.souls ) ) self.souls = 0; self.souls++; fx_pos = getstruct( "soul_fx_pos", "targetname" ); fx_tag = spawn( "script_model", death_origin+(0,0,30) ); fx_tag setmodel( "tag_origin" ); playfxontag( level._effect[ "YOUR_SOUL_FX" ], fx_tag, "tag_origin" ); // SOUL FX fx_tag moveto( fx_pos.origin, 2, 1, 0 ); wait 2; fx_tag delete(); playsoundatposition( "SOUL_ADDING_SOUND", fx_pos.origin ); // SOUND WHEN A SOUL GETS ADDED if( self.souls == 25 ) { level thread open_special_door(self.script_noteworthy); self delete(); } } open_special_door(noteworthy) { soul_door = getentarray( "soul_door", "targetname" ); for( i=0 ; i<soul_door.size ; i++ ) { if( soul_door[i].script_noteworthy == noteworthy ) { soul_door[i] notsolid(); soul_door[i] connectpaths(); soul_door[i] moveto( (soul_door[i].origin+soul_door[i].script_vector), 2, 0.5, 0.5 ); if( isdefined( soul_door[i].script_flag ) ) flag_set( soul_door[i].script_flag ); } } }