Drops des amiibo

Revision as of 13:07, 14 June 2022 by Echocolat (talk | contribs) (Created page with "À chaque fois qu'un amiibo est enregistré: *AmiiboMgr détermine si il devrait réinitialiser l'historique d'utilisations quotidienne de l'amiibo (stocké dans le flag Amiib...")
Other languages:

Warning: Display title "amiibo drops/fr" overrides earlier display title "Drops des amiibo".

Table de drops

Idx Name Description
0 Normal
1 Normal2 Inutilisée.
2 SmallHit
3 SmallHit2 Inutilisée.
4 BigHit
5 BigHit2 Inutilisée.
6 GreatHit
7 GreatHit2 Inutilisée.

Enregistrement des amiibo

Un amiibo est enregistré[1] chaque fois qu'un amiibo est utilisé.

À chaque fois qu'un amiibo est enregistré:

  • AmiiboMgr détermine si il devrait réinitialiser l'historique d'utilisations quotidienne de l'amiibo (stocké dans le flag AmiiboTouchHistory)[2].
    • Si moins de 86400 secondes (1 jour) se sont écoulées depuis que le jeu a été lancé, ne fait rien du tout.[check]
    • AmiiboMgr compile ensuite 10000 * now.year + 100 * now.month + now.day. Si la valeur est différente de AmiiboLastTouchDate (ce qui signifirait qu'un jour s'est écoulé), le tableau AmiiboTouchHistory est réinitialisé.
  • Une entrée pour l'amiibo scanné est rajouté dans AmiiboTouchHistory. Seulement les 100 dernières entrées sont gardées.
  • Si c'est la première fois que l'amiibo est scanné, une nouvelle entrée est rajoutée dans AmiiboTouchHistoryTotal (seulement les 200 dernières entrées sont gardées). Sinon, le compteur de scans est incrémenté en mettant à jour l'entrée existante.
  • Enfin, AmiiboLastTouchDate est mis à la date actuelle.

The format for AmiiboTouchHistory and AmiiboTouchHistoryTotal entries is "%s_%d_%d_%d" (amiibo UID, amiibo value 1, amiibo value 2, scan count) 

Logic

A SmallHit happens 20% of the time.

If the amiibo has been scanned 0, 1, 2, 3 or 4 times, you'll get a GreatHit 20% of the time. If you didn't get a GreatHit, the game will ensure you get a BigHit.

If the amiibo has been scanned 5 times or more, you'll always get a GreatHit. In this case, the BigHit table is ignored.

For BigHits and GreatHits, the game uses the 'Remain' tables if Find_4Relic_1stClear is set, 'Parasail' if IsGet_PlayerStole2, and 'Normal' otherwise.

The game then determines the number of drops from each table[3]:

  • For a GreatHit:
    • GreatHit drops: random number between RepeatNumMin and RepeatNumMax for GreatHit
    • SmallHit drops: same, but for SmallHit (if there is a SmallHit).
    • Normal drops: random number between RepeatNumMin and RepeatNumMax for Normal, minus the GreatHit drop num
  • For a BigHit:
    • BigHit drops: random number between RepeatNumMin and RepeatNumMax for BigHit
    • SmallHit drops: same, but for SmallHit (if there is a SmallHit).
    • Normal drops: random number between RepeatNumMin and RepeatNumMax for the Normal table, minus the BigHit drop num

After a GreatHit, the amiibo's scan count for the amiibo is reset to 0 (0x710064AC8C).

Dropped items receive the IsAmiibo actor parameter.

Special cases

Items with the AmiiboArmorItem tag

If the player hasn't received the complete armor set from an amiibo, armor pieces that they have already received will not be spawned.

Items with the Important tag

The IsGet_ flag for Important items must be false; otherwise they will not spawn.

Items with the AmiiboTreasure tag

Items with the AmiiboTreasure tag are spawned inside of a treasure chest (TBox_Field_Iron).

The chest's "SharpWeaponJudgeType" parameter is set to 2, which causes different weapon bonuses and guarantees the weapon will have at least a blue/white modifier.

Exceptions:

  • bdrop resource is Actor/DropTable/Item_Amiibo_DropTable_012 (Daruk), drop name starts with "Item_Ore_" and is not Item_Ore_A (Diamond)
  • bdrop resource is Actor/DropTable/Item_Amiibo_DropTable_013 (Revali), drop name starts with "Obj_BombArrow"
  • bdrop resource is Actor/DropTable/Item_Amiibo_DropTable_015 (Urbosa), drop name starts with "Obj_ElectricArrow"

Items with a name that starts with GameRomHorse

If it is the first time you are scanning an amiibo that can drop horse equipment (if IsAmiiboDrop_GameRomHorseItem isn't set), the game will always spawn GameRomHorseSaddle_01 and GameRomHorseReins_01.

If you have already received those items, they will not spawn consistently anymore (or not at all[check]).

Items that are marked as amiibo drops

Items that are marked as amiibo drops -- i.e. actors for which the "Amiibo" key exists in the "drops" dictionary in their ActorInfo.product.sbyml entry -- receive an additional DropTable actor parameter. It is set to "Amiibo" for normal drop lists and "Amiibo_After" for Parasail/Remain lists.

Ancient arrows

Obj_AncientArrow_A_01 and Obj_AncientArrow_C_01 can only spawn if you have already received Ancient Arrows at some point (if IsGet_AncientArrow is set).

Divine Beast helms (Armor_181_Head, Armor_182_Head, Armor_183_Head, Armor_184_Head)

When scanning a Champion amiibo, if you've completed any Divine Beast and received a Great Hit, and if you haven't already received the corresponding helm[4], the chest is guaranteed to contain the Divine Helm.

Code

Unless otherwise indicated, all member function names below are unofficial. (Only the class name is official.)

action::ItemAmiiboCreateFromDropTable::getOneDrop

This function is responsible for choosing a drop to be spawned.

https://gist.github.com/leoetlino/a67a874111c1bd97805239f8678e0d00

action::ItemAmiiboCreateFromDropTable::doSpawn

This function is responsible for spawning a drop.

https://gist.github.com/leoetlino/ff246cb5c16b12c5af14a899d1cd8ffd

References

  1. 0x710064B564 sur Switch, 1.5.0
  2. 0x710064B3C8
  3. AIDef:Action/ItemAmiiboCreateFromDropTable
  4. If the corresponding IsGet flag is false