I forgot about the issues tracker. I guess that could be used. It would be nice to have the vote-up/vote-down feature. I checked out the other suggestions but one is only free for the first month, and the second was only free for the first 5 users. Bugzilla does what I want, but no one seems to host it for free. I tried installing it on my home server, but it gave some mysterious perl error message after I followed the steps. I\'m more of a servlet/JSP person, I\'m not all that experienced in LAMP. So I\'m stuck.
If you are looking at the stuff, the raw stuff is in my personal fork jjaquinta/StarMade. I move it over to StarMade/StarMade when it gets stable. I moved the feature system to be Action based, so it\'s easy to add menus. General manipulation has been moved to plugins, so you don\'t even have to touch core code for that.
Reading/writing of .smb2 files is going pretty well. Where the headaches are is keeping them in sync with the anciliary files. For entity based objects, they have to be in sync with the .ent file. I just improved the entity reading stuff (which you can test with DumpEntityFile and EditEntityFile) so that it now correctly understands the SERIALIZED tag. So now we can modify the entity file. We just have to work out what in the entity file to modify.
Similarly with blueprints, I just turned on writing the .smb2 file, but without altering the other two files you can\'t do anything substantive. That format is better known so I was going to start looking at that.
At some point I wanted to start making generators. Planet generators, rock generators, and even ship generators. Ever play Traveller? I thought I\'d start with a hull generator; lets you pick one of several basic shapes. Extend that to let you choose what % or #blocks to use for engines, power, shields, etc. As you for the # hardpoints, and %/blocks per hard point. Then spit out a ship to those specs.
If you\'re set on Undo/Redo, I had some thoughts. It\'s probably impractical to store a copy of the whole Grid each time a change is made. But if at each checkpoint you store a copy of the delta, that would save memory. (More so if you serialize and compress it, since it\'s got a lot of redundant data.) Would need utility functions to compare two SparseMatrix obejcts and return a SparseMatrix containing the differences. Another to apply one SparseMatrix to another, etc.