ZPlugins are still executed when ZBrush starts and before the DefaultZscript.txt so it is possible to write a .txt Zscript, compile it and place it in the ZBrush3/ZStartup/ZPlugs folder.
I posted a zplugin that sets the current material upon startup [>> here <<](http://www.zbrushcentral.com/zbc/showthread.php?t=49645). So it does work and I cannot see where any harm to stability could come from. It is after all just a compiled zscript and besides these startup scripts are highly individual, so no need to have two or more.
In order to make the script work there is extra code needed. This is to ensure the scripts UI state changing code is executed only once.
[If, [MemGetSize, yourMemoryBlockNameHere], //returns 1 or greater if memory block exists.
//do nothing if Mem size > 0
,
//if Mem size = 0
[MemCreate, yourMemoryBlockNameHere, 1]
// insert your startup script commands here
[Iset, Draw: Draw Size, 128] //for example
]
I find it best to create the zscript .txt file in the ZScript folder to modify and reload it from there. When you are satisfied with the changes your script produces move the .zsc version to the ZBrush3/ZStartup/Zplugs folder and restart ZBrush.
If someone had the time and inclination he/she could possibly write a zplugin that examines all values not saved by the config and set those values at startup.
Btw, Marcus, I seem to remember you had another way of running code only once. Was it the ZBrushInfo timer value?