Post

Friends in Yu-Gi-Oh! Nightmare Troubadour

Friends in Yu-Gi-Oh! Nightmare Troubadour

This is the third and final post I plan to do on Yu-Gi-Oh! Nightmare Troubadour. I may come back to it at a later date, but for now I’ve worked out everything I really wanted to know. Like the previous two posts, this work was done with the PAL version of the game. I did check the trades in the NTSC-U version as well just to make sure on Imperial Order, though.

I’m not the first one to look into this aspect of the game. LancetJades on GameFAQs has a topic here where they dig into the same things this post goes into. I independently found most of this, but their work on the dislike counter saved me some time trying to make heads or tails of that part.

Overview

As discussed in the previous post, Yu-Gi-Oh! Nightmare Troubadour places the potential opponents on an overworld and the player must track them down. However, each duelist also has a friendship level. If the friendship level is high enough, the duelist will offer to register you. This will allow you to immediately duel them if they have spawned, and be able to tell who they are.

Some registered duelists The jewel indicates Odion and Marik are registered

Registering a duelist brings other benefits. It opens up the possibility for them to give you their deck recipe (a listing of the cards contained in one of their decks) and to trade with them. Neglect a duelist too long though, and they will deregister you.

Making friends

Friendship is given by a non-negative two-byte value for each duelist. The game divides friendship into five grades, given by emoticons with different background colours. These five grades are what the player can view in-game.

Every duelist has their own values of friendship needed for each grade. Additionally, each duelist has a maximum friendship and if the maximum friendship is not greater than a threshold (note: greater, not greater than or equal) then the game will not allow the duelist to reach that grade. This is how the game keeps some duelists at the lowest grade permanently: Arkana, Bandit Keith, Big 1, Big 2, Big 3, Big 4, Big 5, Gozaburo, Lumis, Noah, PaniK, Rare Hunter, Umbra, Yami Bakura, and Yami Marik. This is also how the game stops some duelists from reaching the maximum grade, namely Bonz, Dox, Ishizu Ishtar, Para, Seto Kaiba, Solomon, Strings, and Weevil.

With that said, the table below contains the thresholds for each grade for the duelists not permanently stuck at zero friendship. Note for some duelists lower thresholds are given as -, which means the duelist can not drop below the corresponding grade. This table also includes the initial friendship of each duelist (set when you first encounter them), the maximum friendship, and a ‘base increase’ value.

Name:(:|:)X)InitialMaximumBase increase
Yami Yugi-20011001400450160020
Yugi Muto-20011001400450160040
Joey Wheeler10040011001400550160016
Seto Kaiba2006001400-350160020
Mokuba-40012001500550180030
Bakura-30012001400450150022
Tea Gardner-20010001300450140026
Mai Valentine20040011001300250140012
Serenity-20010001200550130026
Rebecca10030011001300350150016
Solomon-2001200-650140024
Bonz-2001200-450140018
Mako-30011001400150160036
Espa Roba10040011001400250160014
Rex Raptor20050014001600250180014
Weevil3009001600-550180018
Dox1004001300-50150026
Para1004001300-50150026
Pegasus-200900110050130026
Strings-2001200-50140026
Odion--8001100500130016
Ishizu Ishtar-2001100-450140026
Marik Ishtar--9001200200150026

The base increase value plays a role in how friendship increases. When you enter a duel against an opponent, the game increases their friendship (note that since this happens upon entering a duel, whether you win or lose doesn’t matter). The increase is the sum of three numbers. The first is the duelist’s base increase. The second is the player’s level. The third is 50 if this is the player’s first duel against that opponent that day, 25 if it’s the second that day, and 0 for subsequent duels.

There is a second way to increase friendship: accepting trades. Each duelist has a value that is meant to give how much accepting a trade increases their friendship by. I have not given these values because they do not matter since everyone in this game is a complete nutter.

Serenity offering a trade Accept the trade and she will be willing to die for you

Presumably the code was meant to look something like this:

1
increaseFriendship(opponentId, FriendshipData[opponentId - 1].increaseForTrade);

Instead it looks like this:

1
2
3
increaseFriendship(opponentId,
                   friendshipLevel(opponentId) +
                       FriendshipData[opponentId - 1].increaseForTrade);

This means accepting a trade would at least double the duelist’s friendship. But since their friendship must be at least :) grade in order to offer a trade (more on that later) and the threshold for :) grade is more than half the maximum friendship for each duelist, it just maximises it instead.

After a duel, if the duelist’s friendship is at least of :) grade, the game checks if a duelist is registered. If not, the game does a roll. If the friendship is of :) grade, there is a 60% chance the duelist will offer to register you. If the friendship is of X) grade, the duelist will always offer to register you.

Losing friends

Losing friendship is more complicated. There are three ways to decrease a duelist’s friendship: rejecting a duel offer, rejecting a trade offer, and going a day without dueling them. But it’s not as simple as the friendship going down by some set value every time one of these happens. Each duelist has a ‘dislike counter’ that acts as a buffer stopping them from immediately losing friendship. Relevant values are given in the table below.

NameThresholdEnd of dayDuel declineTrade decline
Yami Yugi1801042
Yugi Muto1801042
Joey Wheeler1501253
Seto Kaiba1301253
Mokuba1201253
Bakura1301675
Tea Gardner1601253
Mai Valentine1501253
Serenity1301042
Rebecca1301463
Solomon1801042
Bonz1501253
Mako1801042
Espa Roba1301253
Rex Raptor1301463
Weevil1301463
Dox1301463
Para1301463
Pegasus1501253
Strings1801253
Odion1801042
Ishizu Ishtar1601253
Marik Ishtar1501042

The dislike counter is reset whenever a player starts a duel against the duelist in question. When one of the three above actions occur, the game looks up the value for the given action and duelist. If the duelist is registered, this value is halved. If the value was odd, the game rounds down. Since trades are only offered to the player if the duelist is registered, this means that declining a trade always sets the dislike counter to one, except for Bakura for whom it gets set to two.

Next the game looks at the dislike counter and compares it to a per-duelist threshold. If the dislike counter meets or exceeds this threshold, the value is subtracted from the friendship. Otherwise the game first adds the value to the dislike counter. If after this addition the dislike counter meets or exceeds the threshold, the new dislike counter value plus the value are subtracted from the friendship and the duelist will deregister the player. Note this means that the final addition to the dislike counter is effectively taken off the friendship twice.

Deck recipes and trading

If the player has a duelist registered and the friendship is of :) grade or greater, there is a chance the duelist will give you their deck recipe or propose a trade. If the friendship is of :) grade, there is a 30% chance of this happening. If the friendship is of X) grade, there is a 40% chance. Note that this means it is more difficult to get the deck recipe from and trade with duelists who max out at :) grade.

If the game decides to do one of these, it first checks if the duelist can give out their deck recipe. This is the case provided the player does not already have the deck recipe, and in three cases (Yami Yugi, Seto Kaiba, Marik Ishtar) also whether they have the corresponding god card (Slifer, Obelisk, Ra). It does not matter if they used a deck with the god card in it. Provided these checks pass, there is a 50% chance the game will award the player with the deck recipe. If this 50% fails, or the checks do not pass, the game will instead try to propose a trade.

It is important to note there are two types of trades: random trades and fixed trades. Each opponent has a pool of cards they would like and ones they are willing to part with. In a random trade, the game selects a random card the opponent is willing to part with, and asks for a random card they’d like out of the ones the player is able to trade away (i.e. has at least one copy not currently in the deck, fusion deck, and probably side deck).

Fixed trades are simpler: the opponent will ask for a specific card and offer a specific card in return. Such a trade can only be proposed in the postgame after Yami Marik has been defeated, if the player has a copy they can trade away, and in the case where a god card is offered by the opponent, the opponent has said god card.

If the AI has decided to try to propose a trade, it will look at the random trade cards the player can trade away and the fixed trades that are possible. If there are no trades of either type, the game abandons the attempt. If there are only available trades of one type, the game will offer that type. If there are available trades of both types, the game has a 50% chance of offering either type of trade.

When the game decides to do a random trade, it will randomly select one of the cards the player is able to give away (each with equal probability, ignoring imperfections in the RNG and its utilisation), randomly select one of the cards the opponent is willing to part with, and then offer to trade those two cards. When the game decides to do a fixed trade, it takes the list of fixed trades that are allowed and randomly selects one.

The list of cards each opponent will randomly request and offer, and their fixed trades, have been placed in an XML file here. The trades are the same in the NTSC-U version.

Note that Imperial Order is a postgame trade, so it is impossible to get it from Pegasus in the NTSC-U version.

This post is licensed under CC BY 4.0 by the author.