Technical stuff for geeks
So you want to make mods, tools, or reverse engineer the game? You're at the right place. Let's take a look at what we already know about how the game is coded or how it works.
ObsCure
This game has a lot of versions, they have some slight differences on how the game files work, so let's focus on the Steam version. When installing the game, you'll see a bunch of files, but let's focus on the most important ones:
- HVP files: `cachpack.hvp`, `datapack.hvp`, `kinepack.hvp` and `strmpack.hvp`.
- The executable file: `Obscure.exe`.
HVP files
I will quickly explain what HVP files are, how to unpack them and make the game read them. If the explanations are unclear, or you prefer watching a video, you can check the tutorial below, made by the admin of the site (in English).
The files with the `.hvp` extension are packages that include a lot of game files such as dialogues, models, textures, cutscenes, rooms info, items info, etc. To read and modify these models, textures, etc, you need a tool to unpack the HVPs, to download such tools check this link.
Once you have extracted the HVP files, you'll see a bunch of folders with names such as "_common", "_levels", etc, they all start with an underscore. It turns out you can make the game read the extracted files instead of the HVPs, that means that if you modify the extracted files and you make the game read them, you will play with the modified files, isn't that great? To do so, you need to move all those folders starting with an underscore to a new folder that you will name "data" and you will place said folder in the root directory of the game (so you will have the `data` folder and the `.exe` of the game in the same directory). You will also need to rename the HVP files so that the game can't find them. I suggest adding a "2" to their names so that you don't lose track of which HVP file is which. So for example `datapack.hvp` will become `datapack2.hvp`.
A lot of the files inside the HVPs have a non-standard format, created by Hydravision to meet their needs, so a very important part of reverse engineering the game is figuring out these formats, so that we can read the files more easily, and so that we can modify them as we want.
For example, we have the `.hoe` files (`data/_levels/x/xyyy/xyyy.hoe`), which give some information about each room. To be specific, they give information on events, monsters, and the map of collisions of the environment. We already know the general structure of these files (more or less), but if we understood them completely we would be able to modify every hidden item, every monster, and even the behaviour of the creatures!
One more example, by modifying the `.tm` files (`data/_levels/x/xyyy/xyyy_z.tm`) and the `allitems.it` file (`data/_common/allitems.it`) we can modify every pickable item in the game! That's what the Randomizer does! And that wouldn't be possible if we didn't know the formats of the files.
Obscure.exe
There's not much to explain for this one, it's the executable file of the game. It's in x86 (32 bits) machine code, so in order to read it more easily you should use a disassembler such as Binary Ninja or Ghidra. The latter has the advantage of having a free decompiler, which makes everything even simpler.
I, the admin of the site, have been working on this `.exe` for a long time. My goal for now is to understand how the game works, what the structures or classes are, and to rename all the functions and variables so that the code becomes more readable.
I'm actually working on the German-Spanish PC executable, not the Steam one, but moving all the progress to the Steam version shouldn't be a problem.
Resources
You can check the ObsCure Documentation made by fans to take a look at the formats that have already been reversed, lists of IDs used in the game, and more useful information for anyone trying to reverse the game. If you want to contribute to this documentation, check this link.