Thanks, and yeah I'm glad too. @finnethen is the best!
I've been on a break from coding ever since finals had taken up all of my available time. I am on vacation right now and will be driving back home for the coming week. Once I get back in June I'll have more frequent updates--I still think it would be great to have a version of the API that modders can start using by the end of summer. We'll see.
A few updates on the project.
First, I've decided on a final name for the project. It will be called EMU (Extensible Modding Utility). I just thought it would be a cool nod to the three-letter animal acronym APE made popular. I meant it when I said that I wanted to honor Zootek in some way, and I have a few ideas after the name change.
Second, I've got a command console working. If you don't know what a command console is: some games let you open a terminal with a shortcut. It's a black window where you type commands that manipulate the game as you play. It's a good tool for an API because it lets me and modders debug API functions, and it's a fun tool for people to use in general because why not. Jay had a great idea where a possible application of this command console could be letting users modify .ini values while you're in the game (without actually changing the .ini file, if that makes sense).
Here's a 50 second clip of it in action. In this example, I continue to use the addToBudget function as I have before. I type the command in the console and you'll see the budget update in the game.:
Right now the console opens up automatically when Zoo Tycoon launches. Eventually I want it to only open up when hitting a shortcut.
I've also got a super primitive game loop working. If you don't know what a game loop is, it's usually where all of the game events and graphics refresh on a neverending loop. It's like an engine that makes sure a flip book is always flipping. This is important because it's where mods using the API will run when loaded. This game loop is actually how the console is working above. One of the challenges is that I had to create a new thread to make it work until I find a way to hook onto the real loop, so there is some performance loss at the moment that I hope I can patch later on.
Finally, thanks to Jay and Fern's help, I got a lot of the budget-related function calls figure out. As a reminder, here's how to read this chart: Bold just means they are the last two I've found. Leftmost is the number of the function. The first hexadecimal address is actually a mystery function I haven't defined yet, and the rightmost hex address is the location within that mystery function that the addToBudget() function is called. On the right I have a small note describing the context behind when that function call is made. That context will help me figure out what the mystery functions are actually doing when I have the time to figure those out, but we get a decent idea here. For example, this is how I learned that the parent function to number 5 is the easter egg cheat function that controls how all of the easter eggs are programmed.
If there's no comment it's because I haven't figured out how to trigger that function call yet. Some ideas are when you win a scenario and get money, certain event-related cash prizes, etc. If anyone has ideas, I would love to hear them!
See you guys again in about two weeks!