Original galaxy editor is way better than that from first starcraft and Warcratft III. Anyway, sometimes we want to have something more than it offers. There is many tools that extends maps on their own, but it is sometimes difficult to use them in a proper way, and of course it needs additional effort from end user. I just want to change it. This is how project Gemini was born. You can read more here.
Gemini project v0.2
What it is?
It is external program, that runs Map Editor and equip it with additional features transparently to end user.
It is still in very early stage of development.
How it works?
It creates new process for editor, performs a dll injection by process memory swap and waits for signals. Anything is controlled from external Lua script, what makes it very expandable. If you want more details or want to contribute, there is publicly available source code on github.
I want one! (download)
You can download latest release here, but , it is not well tested and i can't guarantee it wont break your map. We don't have many compatible extensions for this moment too.
More about demo extension
When you save your map, it adds additional trigger to MapScript. You should get "Gemini injection successful" message at third second of game time.
- working save injection
- demo extension included
- initial release
we need better messaging api, probably as DLL, make it internal standard
Could you elaborate more in how this program is supposed to run or what are your plans. I know, it is in a very early stage.
And in what concerns to third-party extensions, how should they be created and registered (dll or lua scripts)? When and how they are loaded, and a list of what will be available to those extension to mess with the editor, thats it, what areas are you planing to have gemini interfering in SC2editor execution, just in map save?
Save injection is a part of standard extension (GeHack.dll). It is a dll and some lua code to inject and communicate with this dll. The rest isn't completed yet, but the new (async client-server IPC) communication api draft is available from repository (ipsmes.h). I have no time to work on that now... I stuck on implementing communication layer (ipsmes.cpp), because i never used WinApi pipes before. Usage of overlapped pipe IO for multiple client - server model is just a Pain in the Ass... If anybody knows how to do it (i hope api is clear enough to say how it should work), i will appreciate helping me and the rest of community. After that, i will start implementing the rest of base functionality (menu extensions etc.). SBeier gave me an idea for automatic extension version check and update, it will be very useful and possible to implement inside Gemini, but extensions needs to be more strictly defined. I think about a .lua with listed methods (onEvent(e), doInit() etc.) and variables (version?), because it can be easily executed (simple dofile(...) or directly from c++).
Summarizing: everything is a draft or even idea now...
Erm. Okay. It doesn't work for now. The last version is very old and not really working on latest editor. Everyting of that is true because of crappy implementation of communication, through blocking api. It sucks actually. Overlapped pipe IO api is a must. But i can't make it work.. somehow. Hate WinApi... Anyway, its worth trying.