Jump to content
Double Fine Action Forums
Sign in to follow this  
Eagle0600

Sequence breaking?

Recommended Posts

This thread is about the Ida/Halcyon combo. I have a few observations, and also a few questions.

First off, wishing for extra wishes works just beautifully. I'm not sure what the actual name of the truth in question is, but it can be found by searching for "wishes". 999999 should be just about enough.

maxHealth and curHealth are the next ones up to 999999. You need to leave the room to see the change.

I found my inventory variable, but here's where I ran into a bit of a problem.

I set it to some random value and enter the next room, but at that point it crashes: The reason is that it's looking for a table value, but I've replaced it with a string. I've tried changing it to "[]" and "{}" (and "\[\]" and "\{\}"), but it's still a string, not a table. Any idea how to make it a table?

The ultimate goal of this is to go back in time and get the loupe and bomb early.

Solved!

I did it!

1 - Use Ida

2 - Input activePath

3 - Use the magic lamp

4 - Input hy[[][$]]"1"pvt"eit"oannr

5 - Use the magic lamp again

6 - Input Content/Game/Global/Items/BombItem

7 - Enter a different room

The first item in your inventory is now bombs.

Let me know if you find a class of objects outside the cave that doesn't cause the decompiler to crash, because I didn't. ;)

edit:

A full list of variables I've found:

["currentTab"]

["entryArea"]

["entryWorld"]

[“entryDirection”]

[“entryLengthRatio”]

["maxHealth"]

["curHealth"]

["name"]

["bondedSprite"]

["inventory"]

[“inventory”][X][“state”][“numWishes”] - number of wishes for the lamp item, X appears to be variable (probably the item index in your inventory)

[“inventory”][X][“state”][“activePath”] - (magic lamp)

[“inventory”][X][“state”][“exposed”] - (boomerang)

[“inventory”][X][“state”][“searchSucceeded”] - (Ida?)

[“inventory”][X][“state”][“replaceSucceeded”] - (Halcyon?)

["inventory"][X]["path"] - Set this to the resource path for the item you want in your inventory slot.

["queenSpriteGaveHearts"]

["TIME_DISTORTION"]

["INFO_OPACITY"]

["discoveredValues"]

[“entryRoomPath”]

[“hoodless”]

[“artifacts”]

[“trapped”]

[“glyphsDecoded”]

[“escapedDungeon”]

[“discussedAlgorithms”]

[“beganCodePuzzles”]

[“equipped”][“primary”]

[“equipped”][“secondary”]

[“statementScenes”]

Share this post


Link to post
Share on other sites

I think you can only input strings and numbers. I already entered a bug that some numbers weren't recognized properly. Not sure if other data types should be supported or not though.

I think it's a bit premature to go in-depth with these items though, since the game is not yet final and everything could still change. But if you want to go further in the analysis now, be my guest.

What I can tell you is that what Ida returns is encoded using the Burrows-Wheeler transform right now. So wishes actually returns ["inventory"][9]["state"]["numWishes"]. I bet you could play with that instead of attempting to create a custom table.

Personally, I found ["discoveredValues"] by luck while searching for red. No idea what it does.

Share this post


Link to post
Share on other sites

Added those to the list.

Interestingly, while typing maxHealth will return ["maxHealth"], typing ["maxHealth"] or even ["Alice"]["maxHealth"] apparently returns too many results.

There is clearly more going on with this search than first appears.

Share this post


Link to post
Share on other sites

Doing a search for [“inventory”][9][“state”][“numWishes”] doesn't seem to find anything, which looks pretty bad for adding items to your inventory. Each item probably has a variable with the same name that says whether you have it, and since items seem to be referenced by a index number in your inventory, it's going to make it so you can't search for them.

I also tried a searching 'inventory numWishes' (without the quotes), and that also didn't come up with anything. I have a couple more ideas, like using operators or regular expressions. I'll let you know if those work out.

EDIT: Nope, failure on both counts.

Share this post


Link to post
Share on other sites

What gets me is that literalString is apparently a more specific search than ["literalString"]. It also seems to choke up whenever searching for a number. So ["inventory"] returns many results, and ["inventory"][]["state"] returns many results, ["inventory"][X]["state"] returns none.

I suspect the fact that there are many results for ["Alice"]["maxHealth"] either means that it's disregarding anything in the quotes or there are several Alice objects. Perhaps something to do with the save states?

edit:

The former. I searched for something along the lines of ["aduifhaspdjufhoiugasgdf"] and it apparently returned many results, so I've been barking up the wrong tree the whole time.

edit2:

[asdkfjhkajfhgbkjhabfg] also returns many results, so anything between the square brackets in the search is generic?

edit3:

Searching simply for the literal "maxHealth" (with quotes) returns no results, which feels like progress.

Searching for inventory[ ] also returns no results, so the square quotes are only generic when they encapsulate the whole search string? I'm just getting more confused

Share this post


Link to post
Share on other sites

It's possible that searching for things with bracket characters in them returns an error, or some other object that's not a string. The search function could encode and return the string if it finds it, or if the object isn't a string it could say that it found many results, assuming that the returned object is an array of strings if it's not a single string. I think that would explain the weird behavior.

I think the stupidity of the search function is actually helping the game out a lot by not allowing significant sequence breaks. That said, I still think it's fun to try to find ways around it.

I wonder if they're using a prebaked variable search function. I'll have to check if LUA has that kind of reflection already built in later.

EDIT: I think it's worth noting that the search function only searches through variable names, not their values. There's a special case built in for the player's name, probably run before the actual search function.

Share this post


Link to post
Share on other sites

More stuff I found:

["entryRoomPath"]

["hoodless"]

["artifacts"]

["inventory"][9]["state"]["activePath"] (magic lamp)

["inventory"][6]["state"]["exposed"] (boomerang)

["trapped"]

["entryArea"]

In the case of activePath, it's actually the path returned by Ida, so it's actually possible to force a path this way, as long as it's encoded using the Burrows-Wheeler transform first. Not seeing the usefulness, but it's good to know.

By the way, is it just me or does hacking some variables this way does absolutely nothing? I tried hacking artifact values and the change wasn't applied. Same for some of the other paths found so far. The worst part is that I can't tell if it's a bug or not...

Share this post


Link to post
Share on other sites

I found ["bondedSprite"] (I think, can't quite tell because the sort order for my inverse bwt is messed up), but I'm not sure what it does.

Share this post


Link to post
Share on other sites

Added those.

Yeah, the artifact variables don't seem to do anything when edited with Halcyon.

Forcing the activePath seems like it could be useful for hacking your inventory in those cases where you can't select a specific item.

Share this post


Link to post
Share on other sites

Just as an fyi, bondedSprite and queenSpriteGaveHearts are the only accessible sprite variables.

EDIT: Can someone decode this one? I'm still having trouble figuring out a table sort that will work correctly for Python.

(dey[[[][h$]]]""9"etucreetsdecvc"eitao""sanSnr)

EDIT2: Nevermind, I'm dumb. Got it working.

["inventory"][9]["state"]["searchSucceeded"]

EDIT3: And more:

["glyphsDecoded"]

["entryDirection"]

["beganCodePuzzles"]

["escapedDungeon"]

["inventory"][10]["state"]["replaceSucceeded"]

["discussedAlgorithms"]

["equipped"]["primary"]

["equipped"]["secondary"]

["statementScenes"]

["entryLengthRatio"]

Share this post


Link to post
Share on other sites
Forcing the activePath seems like it could be useful for hacking your inventory in those cases where you can't select a specific item.

I thought the same thing, but how are you supposed to do that through a string input? So far I've only been able to convert strings to numbers through Halcyon, and even that is buggy.

As a reference, Lua has the following basic data types: nil, boolean, number, string, userdata, function, thread, and table.

Share this post


Link to post
Share on other sites

I was really hoping you might be able to use a function editing room to do stealth edits of these properties, but it seems that the variable names are the one thing that's immutable in the function editing rooms.

EDIT: Also the variables in the function editing rooms are scoped so that you don't have access to them with Halcyon/Ida.

Share this post


Link to post
Share on other sites

Somebody in the Steam forums found WORLD, which turned out to be ["entryWorld"]. Hacking this value apparently causes the save file to become corrupted though.

Share this post


Link to post
Share on other sites

Alright, added those, except for entryWorld which I already had.

What we really need to figure out is how to get the item type of an inventory slot so we can set it to the magic loupe or the bombs.

Share this post


Link to post
Share on other sites

I did it!

1 - Use Ida

2 - Input activePath

3 - Use the magic lamp

4 - Input hy[[][$]]"1"pvt"eit"oannr

5 - Use the magic lamp again

6 - Input Content/Game/Global/Items/BombItem

7 - Enter a different room

The first item in your inventory is now bombs.

Let me know if you find a class of objects outside the cave that doesn't cause the decompiler to crash, because I didn't. ;)

Share this post


Link to post
Share on other sites

Experimented a bit with items not normally present in the game:

- ArtifactAmulet: When used, an empty menu called "Discovered Artifacts" opens. I'm assuming it's trying to search elements in discoveredArtifacts.

- LibraryBookItem: Has a unique book graphic. When used, the universe collapses because it's searching for a variable named "fullPath".

- MagnifyingGlass: When used, Alice starts acting as if she had the magic loupe in her hands, but the loupe is invisible and Alice walks very slowly while constantly looking in the same direction.

By the way, there's some special dialog by Halcyon when trying to hack item slot 0, but the universe collapses immediately afterwards because of a bug.

Share this post


Link to post
Share on other sites
I did it!

1 - Use Ida

2 - Input activePath

3 - Use the magic lamp

4 - Input hy[[][$]]"1"pvt"eit"oannr

5 - Use the magic lamp again

6 - Input Content/Game/Global/Items/BombItem

7 - Enter a different room

The first item in your inventory is now bombs.

Let me know if you find a class of objects outside the cave that doesn't cause the decompiler to crash, because I didn't. ;)

Really? I found a lot. The gate outside the boomerang + its open/close port, the fireball shooters, the invisible platforms, the warden + his block, and the hut that you come out of after the sewers.

The most useful thing i found i could do was make the floating platforms bigger. Dissapointingly, even the hut didn't have a variable refering to which map it took you too otherwise you could use it to go anywhere. You should have a go bombing it though, it turns white!

Im going to have another go now.

Share this post


Link to post
Share on other sites

hy[[][$]]"1"pvt"eit"oannr is ["inventory"][1]["path"] after applying the Burrows-Wheeler transform.

I just tried a few random objects yesterday and got unlucky. It's awesome that you found more classes that actually work Archonn!

I'll do more experiments later tonight.

Share this post


Link to post
Share on other sites

Looks like somebody on the Steam forums got busy with my bomb early trick and beat me in trying ideas I had but didn't had the opportunity to check yet, with cool results:

http://steamcommunity.com/app/246070/discussions/0/540741132023362742/

http://steamcommunity.com/app/246070/discussions/0/540741132035372484/

I can't get the book fix to work for some reason though. Can somebody else try it? I should note that he mentions "filePath" even though the exception mentions "fullPath" instead.

Share this post


Link to post
Share on other sites
Experimented a bit with items not normally present in the game:

- ArtifactAmulet: When used, an empty menu called "Discovered Artifacts" opens. I'm assuming it's trying to search elements in discoveredArtifacts.

- LibraryBookItem: Has a unique book graphic. When used, the universe collapses because it's searching for a variable named "fullPath".

- MagnifyingGlass: When used, Alice starts acting as if she had the magic loupe in her hands, but the loupe is invisible and Alice walks very slowly while constantly looking in the same direction.

By the way, there's some special dialog by Halcyon when trying to hack item slot 0, but the universe collapses immediately afterwards because of a bug.

The ArtifactAmulet appears if you play the beta content for Act V. In the menu it has a property for MaxHealth that affects your..well max health. I like this item a lot as it's function appears, as you implied, to take any artifacts that modify the universe state and put it into a single inventory item. It is much nicer to use than each artifact individually.

(I'm going to create a post on how to easily play any of the game rooms without copying/moving directory and files around).

Share this post


Link to post
Share on other sites

I goofed up on the filePath thing yesterday. Tried it again today and it works like a charm! Kudos to Tarean on the Steam forums to figuring that one out by looking at the disassembly in moai_log_Hack'n'Slash.txt!

So basically:

1 - Use Ida: activePath

2 - Use magic lamp: hy[[][$]]"3"pvt"eit"oannr

3 - Use magic lamp Content/Game/Global/Items/LibraryBookItem

4 - Use Ida: activePath

5 - Use magic lamp: hey[[[][e]$]]""3"tPtlv"tf"ieito"saannr

6 - Switch rooms

7 - Use magic lamp: the file path you want to access in the algorithm room

8 - Use book

More findings from Tarean:

I've checked the moai log for the Magnifying Glass as well.At startup it seems to check for entities on the same layer, get their Function component and call an enable function. It also has a hasEnteredCodeRoom variable which is set to false at the start. When entering a coderoom while using it it becomes trippy...

You can add other fields into the artifact viewer by adding new strings into the table quite easily. Not sure if you could exploit that to get at new variables, though.

With all of these findings, I'm starting to think of a potential speedrunning route for the final version. Assuming nothing unexpected happens after exiting the cave in InfiniteWoods, this should be feasible:

1 - Go to InfiniteWoods as fast as possible

2 - Follow the correct path to the cave (LUULLDDRRU)

3 - Complete the puzzles in the cave normally to get the bombs

4 - Bomb the turtle spawner in CentralForest

5 - Hack its functions to force it to spawn Ida, the magic lamp and/or the book

6 - Say "Hocus pocus" and win, or something like that :P

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...