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é.
- AIDef:Action/CreateEpona le fait une fois qu'Epona a été spawnée.
- AIDef:AI/WolfLinkAmiibo le fait une fois que Link Loup a été spawné.
- AIDef:Action/ItemAmiiboSelectDropTable enregistre un amiibo directement après qu'il ait été scanné, et ce avant même de faire apparaître les drops.
À 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.
Le format des entrées de AmiiboTouchHistory et de AmiiboTouchHistoryTotal est "%s_%d_%d_%d" (UID de l'amiibo, la première valeur de l'amiibo, la deuxième valeur de l'amiibo, le compteur de scans)
Logique
Un SmallHit arrive dans 20% des cas.
Si l'amiibo a été scanné 0, 1, 2, 3 ou 4 fois, un GreatHit arrive dans 20% des cas. Si GreatHit n'a pas été obtenu, le jeu s'assurera de donner un BigHit.
Si l'Amiibo a été scanné 5 fois ou plus, vous obtiendrez toujours un GreatHit. Dans ce cas, la table de BigHit est ignorée.
Pour les BigHit et GreatHit, le jeu utilise la table 'Remain' si le flag Find_4Relic_1stClear est activé (si le joueur a vaincu sa première créature divine), 'Parasail' si IsGet_PlayerStole2 (si le joueur a récupéré la Paravoile), et 'Normal' sinon.
Ensuite, le jeu détermine le nombre de drops pour chaque table[3]:
- Pour un GreatHit:
- Drops de GreatHit: nombre aléatoire entre RepeatNumMin et RepeatNumMax pour GreatHit
- Drops de SmallHit: item, mais pour SmallHit (si il y a une table SmallHit).
- Drops de Normal: nombre aléatoire entre RepeatNumMin et RepearNumMax pour Normal, moins le nombre de drops de GreatHit
- Pour un BigHit:
- Drops de BigHit: nombre aléatoire entre RepeatNumMin et RepeatNumMax pour BigHit
- Drops de SmallHit: idem, mais pour SmallHit (si il y a une table SmallHit).
- Drops de Normal: nombre aléatoire entre RepeatNumMin et RepeatNumMax pour Normal, moins le nombre de drops de BigHit
Après un GreatHit, le nombre de scans de l'amiibo est réinitialisé à 0 (0x710064AC8C)
Les objets droppés reçoivent le paramètre d'acteur IsAmiibo.
Cas spéciaux
Objets avec le tag AmiiboArmorItem
Si le joueur n'a pas reçu la tenue complète d'un amiibo, les pièces d'armure qu'il a déjà récupérées ne seront pas spawnées.
Objets avec le tag Important
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
- ↑ 0x710064B564 sur Switch, 1.5.0
- ↑ 0x710064B3C8
- ↑ AIDef:Action/ItemAmiiboCreateFromDropTable
- ↑ If the corresponding IsGet flag is false