I wrote the code and I still have to invest time in understanding some of my original logic for the C# rewrites.
Boy do I know that feeling. Most of the things I've ever written I don't understand anymore.
Assuming you figure it all out, you then have to translate how this is written into a language that is structured in a different way. C# handles things very differently than VB6 for example.
Again, I totally get this. I would never try to copy the actual code structure. When I say replicate, I don't mean attempt to translate code line by line. I only mean copy every aspect of the UI, and duplicate the behavior of the game deterministically. For example, when I click this, this happens. When a random parameter is generated, it is generated over a uniform distribution between X and Y. I should be able to run VB6 Aurora and Replica-Aurora side by side, provide the same inputs on both programs, and see the same outcomes. (Assuming I could somehow seed the RNG on both. ) I don't care if one program uses bubble-sort and the other program uses merge-sort, since the outcomes are the same.
In fact, in replica-aurora, I would chose the most efficient algorithms possible, and make as many optimizations as I could, which could very well be drastically different from how VB6 Aurora does it. That's the whole point! To have the same game, but not have to wait 5 minutes or more a turn.
The VB6 code is still SUPER important. How are galaxies, how are AI controlled swarms, invaders, precursors, and NPRs generated? What are their decision trees? What are the RNG parameters? And so on. I have no idea how I would handle that. I wouldn't be reinventing the wheel from scratch, I'd be reinventing a combustible engine (which I know nothing about) from scratch. Generation logic and AI logic do not depend on a language. Why don't I write my own? Because I like yours. It would take years to get mine to be as good as yours, even including whatever problems you're aware of in the logic.
So I see C# handling things very differently than VB6 as an expected and irrelevant issue.
Once you start to rewrite, you realise some things don't really work that well. I assume you would fix bugs for example.
I would not intentionally include any bugs. Since it's not a line-by-line translation, existing bugs shouldn't cross over.
What about improving the AI . . . What about adding UI features to make life easier, etc.
Issues with the logic or UI I would keep. Who am I to judge any perceived imperfections in a Mona Lisa as I'm replicating it?
Improvements can be done after the replication project is done.
or changing some algorithms to make them faster. . . . Would you structure the code to run in memory rather than constantly accessing the DB
Absolutely would do that. Again any performance improvements that do not change the deterministic behavior of the game is the whole point of such a project.
Could you really resist changing or adding those things that you really want to see in the program?
Yes.
Ever known an avid paint-by-numbers person? (My brother is one) Or someone who builds model airplanes from a kit? Or someone who makes replicas of art, guns, or whatever else? Someone who built a LEGO Star Wars™ Millennium Falcon™? There is a certain type of person that takes great pleasure in meticulously duplicating an existing piece of work that has already been designed by someone else, without ever feeling the urge to make modifications of their own. Any modification would be considered a flaw and an error. I duplicated one of the dialogs in Aurora4x and enjoyed it a ton, looking forward to starting in on the next one. (See attachment)
I also feel that adding things leads to unnecessary delay.
But assuming you do reconcile all that, how do you maintain your enthusiasm for doing this when it will take many months (probably years).
Yep that's a real problem. How one feels today is never a good indication of how one feels 2 years from now. That's the reason for my robot thought experiment -- you could safely submit your code to the robot because a. It doesn't get tired and b. it's not erratic. What would a human do? You can never be sure. I certainly wouldn't want to give my codebase out to someone if there was any possibility they would get tired of their original idea and then. . . do what? Post the whole thing on the internet? Try to profit off of it? And there is always that possibility. Which is probably why I myself have never shared my code with anyone (not that anyone's asked). I have a pretty sophisticated music library program, for example, which actually plays good mixes based on who is in the room and what they have rated each song. I haven't even released it, let alone shared any code, mainly because I can't be bothered to.
So how do you get any guarantee that someone you shared with is genuine, and wont just abandon their project and do who knows what with your code? You don't. I don't know how to reconcile that. (This is why they need to hurry up and invent robotic friends!) Anyway, typically these concerns are dealt with using collateral, a refundable deposit, a payment, a legal contract, an NDA, employment, or any combination of the above. Are you actually after something like that?
One last thing would be to consider Fermi's paradox and how it might apply to this situation.
Yes there are 70 sextillion stars in the observable universe. But how many Aurora 4x enthusiasts with access to the source? 1? So I don't see how it applies. By the way, obviously the source itself would be irrelevant if you published a complete flowchart with every formula and decision tree, but that's almost as much work as rewriting the whole game, which you're already doing.