Wow, so this is actually a lot harder than I initially thought. If StarCraft didn't crash at randomass places enabling EUD actions in a map should be easy, so I can see why they haven't been enabled yet.
Anyway, I copied pretty much verbatim the layout of preplaced units in DeathTableAddon.scx, and I made a trigger to do the "set" trigger and one iteration of "add to unitID", and it crashes. How did you prevent that in your map? Your map also appears to have "Add 13 to unitID" followed by "Add 1 to unitID", they really can't be combined into a single trigger? If so more insight is needed as how to prevent crashes, that's probably the most essential information at this point.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include "scm.h"
struct{
struct scm_sectSTR sectSTR;
int16_t offset[4];
char str[100];
}my_str = { { { SCM_STR, sizeof( my_str ) - 8 } }, {}, "01234567890123456789012345678901234567890123456789\0" };
struct scm_sectSPRP my_sprp = { { SCM_SPRP, sizeof( my_sprp ) - 8 } };
struct scm_sectOWNR my_ownr = { { SCM_OWNR, sizeof( my_ownr ) - 8 } };
struct scm_sectSIDE my_side = { { SCM_SIDE, sizeof( my_side ) - 8 } };
struct scm_sectFORC my_forc = { { SCM_FORC, sizeof( my_forc ) - 8 } };
struct scm_sectUNIx my_unix = { { SCM_UNIx, sizeof( my_unix ) - 8 } };
struct scm_sectDIM my_dim = { { SCM_DIM, sizeof( my_dim ) - 8 } };
struct scm_sectERA my_era = { { SCM_ERA, sizeof( my_era ) - 8 } };
struct{
struct scm_sectMTXM sectMTXM;
int16_t tile[ 256*256 ];
}my_mtxm = { { { SCM_MTXM, sizeof( my_mtxm ) - 8 } } };
struct{
struct scm_sectUNIT sectUNIT;
struct scm_unit unit[ 1658 ];
}my_unit = { { { SCM_UNIT, sizeof( my_unit ) - 8 } } };
struct{
struct scm_sectMRGN sectMRGN;
struct scm_mrgn mrgn[ 255 ];
}my_mrgn = { { { SCM_MRGN, sizeof( my_mrgn ) - 8 } } };
struct{
struct scm_sectTRIG sectTRIG;
struct scm_trig trig[ 2 ];
}my_trig = { { { SCM_TRIG, sizeof( my_trig ) - 8 } } };
struct{
struct scm_sectMBRF sectMBRF;
struct scm_trig mbrf[ 0 ];
}my_mbrf = { { { SCM_MBRF, sizeof( my_mbrf ) - 8 } } };
int main( int argc, char **argv ){
assert( argc == 3 );
int i;
//str
{
}
//sprp
{
}
//ownr
{
my_ownr.owner[ 0 ] = SCM_OWNER_COMPUTER;
my_ownr.owner[ 1 ] = SCM_OWNER_HUMAN;
my_ownr.owner[ 2 ] = SCM_OWNER_NEUTRAL;
my_ownr.owner[ 3 ] = SCM_OWNER_NEUTRAL;
my_ownr.owner[ 4 ] = SCM_OWNER_NEUTRAL;
my_ownr.owner[ 5 ] = SCM_OWNER_NEUTRAL;
my_ownr.owner[ 6 ] = SCM_OWNER_NEUTRAL;
my_ownr.owner[ 7 ] = SCM_OWNER_NEUTRAL;
}
//side
{
}
//forc
{
}
//unix
{
}
//dim
{
}
//era
{
}
//mtxm
{
}
int8_t human_player = 2;
int ext_uid = 2547;
int ext_uid2 = 2635;
//unit
{
my_unit.unit[ 0 ].instance = 1;
my_unit.unit[ 0 ].related_instance = 2;
my_unit.unit[ 0 ].player = 0;
my_unit.unit[ 0 ].id = SCM_UNIT_COMSATSTATION;
my_unit.unit[ 0 ].x = 32*8;
my_unit.unit[ 0 ].y = 32*8;
my_unit.unit[ 1 ].player = 11; // pid:0 modifies node1648.playerID
my_unit.unit[ 1 ].id = ext_uid2;
my_unit.unit[ 1 ].x = 32*100;
my_unit.unit[ 1 ].y = 32*100;
my_unit.unit[ 2 ].player = 11; // pid:0 modifies node1648.playerID
my_unit.unit[ 2 ].id = ext_uid2;
my_unit.unit[ 2 ].x = 32*105;
my_unit.unit[ 2 ].y = 32*105;
my_unit.unit[ 3 ].player = 11; // pid:0 modifies node1648.playerID
my_unit.unit[ 3 ].id = ext_uid2;
my_unit.unit[ 3 ].x = 32*110;
my_unit.unit[ 3 ].y = 32*110;
my_unit.unit[ 4 ].player = 11; // pid:0 modifies node1648.playerID
my_unit.unit[ 4 ].id = ext_uid2;
my_unit.unit[ 4 ].x = 32*115;
my_unit.unit[ 4 ].y = 32*115;
my_unit.unit[ 5 ].player = 11; // pid:0 modifies node1648.playerID
my_unit.unit[ 5 ].id = ext_uid2;
my_unit.unit[ 5 ].x = 32*120;
my_unit.unit[ 5 ].y = 32*120;
my_unit.unit[ 6 ].player = 11; // pid:0 modifies node1648.playerID
my_unit.unit[ 6 ].id = ext_uid2;
my_unit.unit[ 6 ].x = 32*125;
my_unit.unit[ 6 ].y = 32*125;
for( i = 7; i != 1627; i++ ){
my_unit.unit[ i ].player = human_player;
my_unit.unit[ i ].id = SCM_UNIT_MAPREVEALER;
my_unit.unit[ i ].x = 32*1;
my_unit.unit[ i ].y = 32*1;
}
my_unit.unit[ 1627 ].player = 4; // pid:? modifies node1698.addon
my_unit.unit[ 1627 ].id = SCM_UNIT_CARRIER;
my_unit.unit[ 1627 ].x = 32*196;
my_unit.unit[ 1627 ].y = 32*196;
my_unit.unit[ 1627 ].hangar = 1;
my_unit.unit[ 1627 ].changeable = 1 << 5;
for( i = 1628; i != 1647; i++ ){
my_unit.unit[ i ].player = human_player;
my_unit.unit[ i ].id = SCM_UNIT_MAPREVEALER;
my_unit.unit[ i ].x = 32*1;
my_unit.unit[ i ].y = 32*1;
}
my_unit.unit[ 1647 ].player = 11; // pid:6 modifies node1628.unitID
my_unit.unit[ 1647 ].id = ext_uid;
my_unit.unit[ 1647 ].x = 32*150;
my_unit.unit[ 1647 ].y = 32*150;
my_unit.unit[ 1648 ].instance = 2;
my_unit.unit[ 1648 ].related_instance = 1;
my_unit.unit[ 1648 ].player = 0;
my_unit.unit[ 1648 ].id = SCM_UNIT_COMMANDCENTER;
my_unit.unit[ 1648 ].x = 32*8;
my_unit.unit[ 1648 ].y = 32*8;
for( i = 1649; i != 8 + 1649; i++ ){
my_unit.unit[ i ].player = i - 1649;
my_unit.unit[ i ].id = SCM_UNIT_STARTLOCATION;
my_unit.unit[ i ].x = 32*3;
my_unit.unit[ i ].y = 32*3;
}
/*
my_unit.unit[ 3 ].player = human_player;
my_unit.unit[ 3 ].id = SCM_UNIT_DRONE;
my_unit.unit[ 3 ].x = 32*1;
my_unit.unit[ 3 ].y = 32*1;
*/
/*
for( i = 1648; i != 1698; i++ ){
my_unit.unit[ i ].player = human_player;
my_unit.unit[ i ].id = SCM_UNIT_MAPREVEALER;
my_unit.unit[ i ].x = 32*1;
my_unit.unit[ i ].y = 32*1;
}
*/
/*
my_unit.unit[ 1698 ].player = human_player;
my_unit.unit[ 1698 ].id = SCM_UNIT_KHAYDARINCRYSTAL;
my_unit.unit[ 1698 ].x = 32*1;
my_unit.unit[ 1698 ].y = 32*1;
*/
}
//mrgn
{
my_mrgn.mrgn[ 0 ].start_x = 0;
my_mrgn.mrgn[ 0 ].start_y = 0;
my_mrgn.mrgn[ 0 ].end_x = 32*256;
my_mrgn.mrgn[ 0 ].end_y = 32*256;
}
//trig
{
my_trig.trig[ 0 ].owner[ 0 ] = 1;
my_trig.trig[ 0 ].act[ 0 ] = scm_act_giveunitstoplayer( 1, 11, ext_uid, 1, 2 );
my_trig.trig[ 0 ].act[ 1 ] = scm_act_giveunitstoplayer( 1, 11, ext_uid2, 2, 0 );
my_trig.trig[ 0 ].act[ 2 ] = scm_act_giveunitstoplayer( 1, 4, ext_uid, 1, 6 );
my_trig.trig[ 0 ].act[ 3 ] = scm_act_giveunitstoplayer( 1, 0, ext_uid2, 2, 11 );
my_trig.trig[ 0 ].act[ 4 ] = scm_act_giveunitstoplayer( 1, 4, ext_uid, 1, 2 );
// my_trig.trig[ 0 ].act[ 4 ] = scm_act_giveunitstoplayer( 1, 0, ext_uid2, SCM_NUM_ALL, 11 );
// my_trig.trig[ 0 ].act[ 5 ] = scm_act_giveunitstoplayer( 1, 5, ext_uid, SCM_NUM_ALL, 4 );
// my_trig.trig[ 0 ].act[ 4 ] = scm_act_giveunitstoplayer( 1, 0, ext_uid2, SCM_NUM_ALL, 11 );
// my_trig.trig[ 0 ].act[ 4 ] = scm_act_giveunitstoplayer( 1, 0, ext_uid2, SCM_NUM_ALL, 11 );
// my_trig.trig[ 0 ].act[ 5 ] = scm_act_giveunitstoplayer( 1, 5, ext_uid, SCM_NUM_ALL, 6 );
// my_trig.trig[ 0 ].act[ 2 ] = scm_act_giveunitstoplayer( 1, 6, 2551, SCM_NUM_ALL, 5 );
// my_trig.trig[ 0 ].act[ 3 ] = scm_act_giveunitstoplayer( 1, 5, 2551, SCM_NUM_ALL, 6 );
// my_trig.trig[ 0 ].act[ 4 ] = scm_act_giveunitstoplayer( 1, 6, 2551, SCM_NUM_ALL, 5 );
// my_trig.trig[ 0 ].act[ 5 ] = scm_act_giveunitstoplayer( 1, 5, 2551, SCM_NUM_ALL, 6 );
// my_trig.trig[ 0 ].act[ 6 ] = scm_act_giveunitstoplayer( 1, 6, 2551, SCM_NUM_ALL, 5 );
}
//mbrf
{
}
scm_in_mpq( argv[1], 0 );
struct scm_sect *sect;
while( ( sect = scm_in_sect() ) ){
if( sect->id != SCM_OWNR &&
sect->id != SCM_FORC &&
sect->id != SCM_UNIT &&
sect->id != SCM_MRGN &&
sect->id != SCM_TRIG &&
sect->id != SCM_MBRF )
scm_out_sect( sect );
}
scm_out_sect( &my_ownr.sect );
scm_out_sect( &my_forc.sect );
scm_out_sect( &my_unit.sectUNIT.sect );
scm_out_sect( &my_mrgn.sectMRGN.sect );
scm_out_sect( &my_trig.sectTRIG.sect );
scm_out_sect( &my_mbrf.sectMBRF.sect );
scm_out_mpq( argv[2], 0 );
scm_in_reset();
scm_out_reset();
return 0;
}