So I wake up at 3 in the morning and start having coherent thoughts about encryption... whodathunkit?
Basically I was thinking that if I wanted to design an open-source game based on this engine, I'd have to have a "trusted host" for the game... that is, given a set of players playing the game, they'd need to find someone trustworthy (either among themselves or a neutral third party) to process turns.
That's because it's impossible (AFAIK) to have a program X run by players H and P create data (think ".gam file" but it only contains data on things that a specific player can see) on H's side (the host) which is readable by P (the player) but not by H, if H has access to the source code of the program. (No matter how much encryption I use in writing X, H could step through the code with a debugger, after all!)
I was also thinking of distributed computing as a way to alleviate this problem - basically, "if you can't prevent the host from knowing what players are up to, maybe you can remove the host and let players know only a minimal set of information that they're 'not supposed to', and obfuscate it along the way"! But that would require some really careful coding, if it's even possible at all - obviously I'd need some way of preventing client-side hacks (crc checks on the binaries? might work for .NET, which I'm using, since you don't have to worry about different binaries for different platforms

) - but still, even with that in place, I'd need a way to divvy up the work of processing a turn, and given that any entity in the game can potentially affect ANY other entity, depending on the inheritance rules assigned to the entity's abilities (think of some of SE5's more exotic ability scopes, such as "System Range - Enemies"), I'd need to be REALLY careful that I get all the cases handled that actually need to be handled...
...hmm, that does make me think, is this whole "any entity can affect any other entity" a bad idea in the first place? I'm using LINQ and I'm not sure how that's optimized, but if I were using conventional programming techniques, I'd basically have to loop through all entities, then loop through all entities again within that loop to see if any abilities are inherited, making the ability inheritance process at the least O(N^2)...
Then again, maybe Aaron had to do basically the same thing for SE5, given all the different ability scopes the game has - sure, he doesn't have to worry about items in planet X's cargo inheriting abilities from components of ship Y, because the game is not set up to allow that, but that just means he has a number of smaller sets to test, each of which is O(N^2)...
Just some random theoretical thoughts
