Skip to content

Tutorial: PSI Abilities

vince94 edited this page Oct 13, 2021 · 4 revisions

What would our heroes do without PSI abilities? Ness, Paula, Jeff, Poo... each has their own distinct set of PSI powers. And wouldn't you know it, CoilSnake lets you customize them... to some extent. For one thing, there is, as of this writing, no support for PSI animations.

List of files used:

  • psi_ability_table.yml
  • psi_anim_palettes.yml
  • psi_name_table.yml
  • psi_teleport_dest_table.yml

Configuration

All PSI abilities used by the playable characters are declared in psi_ability_table.yml, using the same standard format; let'slook at the declaration for "Healing γ", ID 29:

29:
  Action: 38
  Level learned by Ness: 53
  Level learned by Paula: 0
  Level learned by Poo: 36
  PSI Menu position (X): 13
  PSI Menu position (Y): 1
  PSI Name: 7
  Strength: gamma
  Text Address: $ef5239
  Type:
  - recovery
  Usability Outside of Battle: usable
  • Action - Specifies the battle action the PSI power should have. To modify the nature of this action, edit the associated entry in battle_action_table.yml (which we will cover in a later chapter).
  • Level learned by Ness - Indicates the lowest level at which the power is attained by Ness.
  • Level learned by Paula - Indicates the lowest level at which the power is attained by Paula.
  • Level learned by Poo - Indicates the lowest level at which the power is attained by Poo.
  • PSI Menu position (Y) - Specifies the row on which the ability's name is written (going from 0 to 2) in the PSI selection menu.
  • PSI Menu position (X) - Specifies the horizontal location of the symbol for that level of power (α, β, γ, Ω, Σ).
  • PSI Name - Takes the ID of one of the names defined in psi_name_table.yml, such as ID 6 for "Lifeup ".
  • Strength - Indicates the level of the power (alpha, beta, gamma, omega, sigma, or none (which you should never use)).
  • Text Address - Either a pointer or a CCScript label to some text used to describe the PSI ability in the Status menu.
  • Type - A list of classification under which this ability should appear in the various PSI menus of the game. Possible values are offense, recovery, assist, or other.
  • Usability Outside of Battle - Specifies whether the power can be used bothin battle and out of battle (usable), usable only in battle (unusable), or a special power such as Teleport (other).

Note: Never edit the first or last entries in psi_ability_table.yml.

Teleportation Abilities

In the case of teleportation powers, additional configuration is required to specify the possible destinations; this is handled through psi_teleport_dest_table.yml. The syntax is simple as usual. Let's look at the entry for Twoson for example:

2:
  Event Flag: 0xd2
  Name: Twoson
  X: 176
  Y: 820
  • Name - The displayed label for the location in the game's ability menu.
  • X and Y - The coordinates on the map in the 8x8 format; that is, they specify a 8x8 pixel-sized tile somewhere on the world map (as can be seen in the Map Editor under Options->Show Coordinates->Warp X, Y).
  • Event Flag - Specifies the flag required to be set in order for this destination to be displayed in the menu.

Changing the "PSI" prefix for the special PSI / Favorite thing PSI

While editing the PSI Abilities for your hack, you might notice that there's one in particular that doesn't change. The 0 entry, PSI(????). This one gets its name from the Favorite Thing that EarthBound asks for at the very start of the game. However, the "PSI" prefix that accompanies this ability doesn't change at all, even if you modify the "PSI" in the YML file.

So how can you modify what this part says?

Well, there are two ways to tackle this. First off, let's try to change "PSI" to "PK" for that ability in particular. The following code should handle that just fine:

ROM[0xC1C415] = byte [0] 0x26
ROM[0xC1FE3D] = byte [0] 0x80
ROM[0xC1FE42] = byte [0] 0x7B

But what if you don't want to remove the first letter, and want to keep all three but rename them to something else? That's simple as well, all you have to do is know what Hex value corresponds to the letter you want to overwrite, and then you are good to go with the following code:

ROM[0xC1FE38] = byte [0] 0x7D
ROM[0xC1FE3D] = byte [0] 0x88
ROM[0xC1FE42] = byte [0] 0x7E

In this code, each value after "byte [0]" is a particular character taken from the Font 0.png file. The original game uses "PSI", which in Hex values are:

  • 0x80 = P
  • 0x83 = S
  • 0x79 = I

For this example, I replaced each letter with a different character from Font #0. Now the attack will say "MXN" instead of "PSI".

  • 0x7D = M
  • 0x88 = X
  • 0x7E = N

Refer to the Modifying Game Fonts section for further details!

Clone this wiki locally