Tuesday, June 3, 2014

Making it Easier to Talk To Herman

Continued from the previous entry

In the previous entry, we identified the reason why it's hard to start a conversation with Herman Toothrot in the set toc. To debug this issue, I took a look at the set gpt because it has a variety of sectors, many with the same name. This results in sectors that are easy to move between, but transition in the wrong place. For example, the transition between gpt_village (sector 4) and gpt_starbuck (sector 5) happens at a different position in the retail version of EMI and ResidualVM, as shown below:
EMI Retail on the Left, ResidualVM on the Right
Let's take a look at the sector map for the camera sectors for the set gpt:
Camera Sectors in the Set gpt
In this picture, we can see that the two sectors overlap, resulting in the glitchy behavior we see in the example above. In the retail version, it appears that the higher ID sector takes precedence over a lower sector ID.

As another test, let's move Guybrush into the sector marked 4 and check what the result of IsActorInSector(guybrush.hActor, "gpt_village") is. We would expect this function to return "4" because this sector is named gpt_village, but in fact, we are told that Guybrush isn't in the sector gpt_village. However, if we move Guybrush into the sector marked 16, which is another sector named gpt_village, we find that the same command returns 16, indicating that Guybrush is in the sector!

So, it appears that IsActorInSector() should only return the sector ID if the name matches the requested name and the ID is the highest of all of the sectors where the name matches. A patch that implements this is found in an update to PR #883.

No comments:

Post a Comment