Monthly Archives: November 2013

Plans for the API and Macros

One of ZOLE 4′s biggest downfalls for users was everything had to be inputted numerically – interactions, chests, warps – and I think that’s a big reason hacking the games never took off. Despite there being tutorials and lists, users were often left in the dark when it came to editing until testing.

So how do we fix this? The entire reason ZOLE 4 didn’t display NPCs for some interactions is because it would require hardcoding. Interaction is just a fancy, wrongly-defined word for variable-passable assembly pointers that I came up with when ZOLE 4 was in its super early stages way back in May of 2010:

Some might call them sprites, some events, and others NPCs. Interactions is a word I chose to sum up both.

The solution is to implement a macro system. They will consist of code acting as templates for things like warps and have support for creating images for specific interactions, making them renderable and easily editable on the map. This would avoid hardcoding how these sorts of things are handled in the editor, while making it easy for the editor to use (and expand upon!).

I’m not entirely sure how to handle the macro system. What comes to mind is making them a part of the API and defining specific macro types – ones that set stuff in the ROM and ones that make visual things appear. This might be really difficult to use though, so if things don’t work out well I might end up creating what would be macros inside of the suite.

So it all comes down to the API. What is it? Why do I need it? Most of ZOLE 4′s tools shared a very similar format – have a window, specify the map group and index, and display some numerical data to be edited. This could all be generated automatically and use macros or editor-specific code to handle how the editor works. Plus when I implemented networking into the suite, the API will take care of what the editor controls what packets get sent practically automatically – no more need to implement features twice.

The API would mostly consist of all the ROM-loading stuff. For example, it would contain classes to load and display maps, or load interactions, etc. I’m thinking I’ll create a template editor to create the numerical editor things, maybe, and have an abstract function that draws and handles editing on the map.

If things don’t go well, I’m going to scrap a majority of the API and just write the suite normally. ZOLE 5 tried this approach and made it so broad that it wouldn’t even work. I’d really hate for that to happen to ZOLE 6, AKA the Zelda Oracles Hacking Suite.

Beta 0.04 Happened

Yesterday, for the first time in months, I actually released something. But despite all that time I’ve had to learn from my mistakes of the past, I messed up just as bad. The new beta release contained all of the assembly patches for Ages that will allow ZOHS to edit graphics and maps, which seemed to work great upon releasing. It turns out, though, that I didn’t test map swapping. For loading maps I was using CC2D as the group, which turned out to break swapped maps. The real address I should’ve been using was CD24, AKA the area’s “unknown” value in ZOLE 4. This value is actually the area’s map group, which is almost identical to the real map group. Instead of it going Present Overworld, Past Overworld, Present Underwater, and Past Underwater, it’s Present Overworld, Present Underwater, Past Overworld, Past Underwater. Why is this? I don’t know. Maybe the developers wanted setting bit 0 to trigger a map-change event that’s grabbed from the next group.

Long story short, I released ZOHS Beta 0.04 before testing map swapping even though I knew it I shouldn’t have. I guess eagerness to get something out strongly overpowered patience. Not even 10 minutes later did I fix the bug and re-upload the beta version.

In other news, I’m trying to think of ways to revive the Primary Zelda Hacking community. With most of its core people gone, it’s tough to build it up. I have beta releases, but they’re so people can find bugs to squash early on. Not many people are going to want to use it over ZOLE until it can do everything ZOLE can and more. ZOHS isn’t going to take off until I at least get the scripting engine done, so that’s one of my goals for at least 0.06 or 0.07. Beta 0.05 is going to consist of a lot of code rewriting and organizing to allow a smooth creation of the API that’s going to be used for most of the mini editors inside the suite. The problem is ZOHS is using a lot of ZOLE 4′s code, especially with map loading. The only new hacking-related code is the graphics loader, which was taken from ZOLE 5. The suite, for the most part, has just been a pretty interface that brings it all together.

This post is getting really long, so I’ll save describing the API and macros in another post. I believe they’re the biggest things to implement at this point and once done, the suite’s progress will fly and quickly become superior compared to ZOLE 4.

Welcome to the Primary Zelda Hacking Press!

This part of the Primary Zelda Hacking website will be dedicated to posting news regarding tools, documentation, hacks, and of course the website itself. Of course, everything will still be posted on the forums but this is primarily to organize everything and have it be easily viewed.

That said, since there isn’t a whole lot going on in the hacking scene right now, this part of the site will consist almost entirely of progress on the upcoming Zelda Oracles Hacking Suite – a utility meant to replace ZOLE 4 and all of its counterparts. This includes new features, new systems, code changes, demonstrations, and to-do lists. You can still download all of the beta versions here and when the program reaches a more stable version, the source code.

This website is supposed to act as a copy of the really old blog before the forums rolled around. It acted as an outlet for me, Lin, and I don’t want to flood the forums with my emotional connection between Oracles hacking and the nostalgia behind ZOLE. I hope you all enjoy reading as I will writing, and happy hacking!

~Lin