Skip to content
Rena Kunisaki edited this page Jan 24, 2022 · 5 revisions

Tricky is one of the game's most complex subsystems, and has lots of subtleties, easter eggs, and unused functions.

Attacking the player

If you smack Tricky too often, he'll spew fire on you. This is abused in speedruns because it doesn't cost any food and can be done anywhere for death abuse. The exact requirements for him to attack you are a bit complex.

First, he must be in his "idle" or "pissed off" state, meaning not focused on a baddie/ball, not digging/attacking, etc. In other states, he doesn't even notice he's being hit.

Second, only hits coming from Fox or an object he holds are counted. In practice this means only being smacked by the staff. Throwing things at him, Fire Blaster, Ice Blaster, Ground Quake etc won't trigger an attack; he actually fails to realize these are caused by the player. (He also doesn't care if it's Krystal hitting him, but she never has the chance anyway.)

When these conditions are met and he's hit by the staff, a variable hitByPlayerTimer is set to 180 frames (3 seconds) and he'll shout "hey!". This is phase one.

Subsequent hits before the timer reaches zero will add 600 to the timer, cause him to shout "get off!", and put him in the "pissed off" state. In this state, he won't obey commands. This is phase two.

When the timer reaches 3000, it's divided by two, and he'll try to attack. For the attack to succeed, he must have learned the Flame command, and must not be in water. Otherwise, he just says "get off!" again. Whether the attack happens or not, this is phase three. Note that he doesn't need to have any energy, and won't consume any.

Since the timer was halved, it's now about 1500 frames, or 25 seconds. Any additional hits during this time will trigger another attack (phase three again) which will also halve the timer (after the hit adds another 600).

This means it takes about 6 rapid hits to trigger an attack; in practice, since it takes time to swing the staff, the minimum is most likely 7 with perfect execution.

Offering him food will reset the timer to zero and the state to Idle, even if he's not hungry. Some other things might also reset it such as using Flame on a baddie, but since he doesn't obey, it might not be possible to trigger these.

Unused Functions

Decoy

This command would have had Tricky distract a baddie so that you could sneak past; most likely, this was the original plan for BribeClaw before they were changed to be paywalls. The Gecko code 0231B57C 00000002 will replace the Call Tricky command's action with this one; it doesn't do anything, but will play an unused voice clip.

This command has a description that would show in the Communicator:

  • Decoy Move
  • With this command you can use Tricky as a decoy while you sneak around without getting noticed!

Guard

This might have been the implementation of Decoy or an unrelated command. Its code still exists, but may not be fully working. The Gecko code 0431D340 8013FFB8 will change his "growl at baddie" function to this.

In this state, he'll get in the enemy's way and try to push them around. Debug text suggests he'd also Flame them without being told.

Baddie Alert

Not really unused, but changed. Originally, you would have bought something at the shop that caused the staff to glow red when enemies are nearby. This was replaced with Tricky running up to them and growling.

The name and description for the shop are still present:

  • Baddie Alert
  • This is the BAD GUY ALERT.
  • Your Staff will glow red...
  • ...whenever there is a baddie nearby.

Increased Food Capacity

The save file stores Tricky's current and maximum energy. During normal gameplay, the maximum is always 20 (5 mushrooms). Changing it will function correctly, but won't affect the HUD.

Kyte

Originally, Krystal also had a sidekick named Kyte, who would have done similar tasks as Tricky. Unfortunately it seems the only remnant of this is his model, which is the caged bird on Scales' galleon (internally named CagedKyte).

There's evidence to suggest Krystal was the one to visit LightFoot Village, meaning she was probably the one to be tied up; from this we can infer Kyte, rather than a queen who conveniently flew by, was likely the one to help in this minigame.

Playing

While not required to complete the game, you can buy Tricky's Ball at the shop and throw it to play with him. This doesn't seem to have any practical use, but perhaps could lead to useful glitches? (It's possible to throw it into some places where it becomes stuck, causing a "HIT OVERFLOW" message to appear, but this doesn't seem to affect anything else.)

For every 10 times he successfully brings the ball back (up to 239 times total) he'll change color. Supposedly the different colors have different effects such as how frequently he speaks. (TODO research this)

While he's bringing the ball back, he won't obey any commands. After he's thrown it at you and is staring at it, he won't notice if you hit him. If you throw it into an area where it can't be used, or if it suddenly becomes disabled (eg because a boss has awoken) it will just disappear.

Exploits and Bugs

There aren't many known exploits involving Tricky, other than smacking him to have him kill you to escape an area after sequence breaking.

He is able to push you in various states such as while aiming the staff, and even knock you off ledges; this might be useful somehow?

Mammoth Dismount

By equipping food to the Y button before riding the SnowHorn in DarkIce Mines, it's possible to enter a glitched state. You first need to clip into a wall so that Tricky is close enough to feed. Feeding him will cause Fox to dismount from the SnowHorn, but still control him.

This glitch is potentially extremely useful for three reasons:

  1. In this glitch state, you can go out of bounds without freezing in place; the "stop Fox from moving" check is skipped because his "mounted object" field isn't cleared. Since all the game's maps are on a connected grid (similar to 2D Zelda games), getting out of bounds while swimming with this glitch active lets you slowly swim to almost any map. This has the potential for huge sequence breaks.

  2. Leaving the map will unload the SnowHorn without clearing the "mounted object" pointer, leading to a use-after-free condition. While it's very difficult to take advantage of this because of the presence of function pointers in objects, one thing that can be done (with much precision) is to cause a fireball from the staff to allocate perfectly in the memory previously occupied by the SnowHorn. While Fox won't ride the fireball (as he's not in the "riding object" state), it will be able to hit triggers as if he was, which is especially helpful as Fox isn't able to hit them himself in this state.

  3. Pressing A while the SnowHorn is still loaded will warp Fox back to him, potentially activating triggers along the way, even if he's very far away. Any trigger in a line between Fox's previous and new position will be activated.

If conditions can be made just right, this glitch could possibly lead to arbitrary code execution...

Through other glitches, the bike in Ice Mountain can also be dismounted with similar effects, though this has nothing to do with Tricky.

Death Crash

If you die or get stuck out of bounds with food equipped to the Y button and Tricky nearby, and spam the Y button, the game will crash. This is because each press queues up another "feed Tricky" action. When the queue is full, the game prints an error message, but the code for doing this is bugged. (It tries to print the names of both objects involved, but there's only one, so the other causes a null pointer dereference.)

If you revive with the queue full but not overfull, it will just clear without actually feeding him.

This glitch is not exploitable, and is patched in Amethyst Edition.

Weird Head Movement

During the first scene where Tricky explains how to feed him, his head and tail can move to strange angles. This is very subtle and easily missed. It happens because of a typo in a trigonometric constant only used in this scene (325767 instead of 32767). This glitch doesn't have any practical use.

Clone this wiki locally