I believe that the reason my thing works at all is that C++ is lazy and accessing a negative array (or something) index works - it just points to some random bit of memory. You can see this if you do "print CyGlobalContext().getPromotionInfo(-1).getSomeProperty()" in the python console - sometimes it will work and give gibberish, sometimes it will error out. Theres a semi-workaround in the ActionButtons mod which essentially goes through and sees which ones crash out and which ones work, and only uses the ones that work, but I haven't backported the changes here because not as many people seemed to be using it. When Firaxis can release the new patch and the SDK, I'll release a new version of ActionButtons that doesn't rely on this hack.