Amiibo drops: Difference between revisions
imported>Leoetlino |
imported>Leoetlino (→Logic) |
||
Line 60: | Line 60: | ||
=== Special cases === | === Special cases === | ||
==== Items with the AmiiboArmorItem tag ==== | ==== Items with the AmiiboArmorItem tag ==== | ||
If the player hasn't received the complete armor set from an amiibo, do not give them armor pieces that they have already received. | |||
==== Items with a name that starts with GameRomHorse ==== | ==== Items with a name that starts with GameRomHorse ==== | ||
Line 73: | Line 73: | ||
==== Drops from Item_Amiibo_DropTable_012, Item_Amiibo_DropTable_013, Item_Amiibo_DropTable_015 ==== | ==== Drops from Item_Amiibo_DropTable_012, Item_Amiibo_DropTable_013, Item_Amiibo_DropTable_015 ==== | ||
??? | ??? | ||
==== | ==== Some ore, electric/bomb arrows, GreatHit items ==== | ||
These are always spawned as a chest item (TBox_Field_Iron). The chest always receives the "IsAmiibo" property and "SharpWeaponJudgeType" is set to 2, which causes [[difficulty scaling#Weapon bonuses|different weapon bonuses]] and guarantees the weapon will have at least a blue/white modifier. | These are always spawned as a chest item (TBox_Field_Iron). The chest always receives the "IsAmiibo" property and "SharpWeaponJudgeType" is set to 2, which causes [[difficulty scaling#Weapon bonuses|different weapon bonuses]] and guarantees the weapon will have at least a blue/white modifier. | ||
==== Divine Beast helms (Armor_181_Head, Armor_182_Head, Armor_183_Head, Armor_184_Head) ==== | ==== 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<ref>If the corresponding IsGet flag is false</ref>, the chest is guaranteed to contain the Divine Helm. | 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<ref>If the corresponding IsGet flag is false</ref>, 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. | |||
== References == | == References == |
Revision as of 15:59, 24 February 2019
Drop tables
Idx | Name | Description |
---|---|---|
0 | Normal | |
1 | Normal2 | Unused. |
2 | SmallHit | |
3 | SmallHit2 | Unused. |
4 | BigHit | |
5 | BigHit2 | Unused. |
6 | GreatHit | |
7 | GreatHit2 | Unused. |
amiibo registering
amiibo are registered[1] every time an amiibo is used.
- AIDef:Action/CreateEpona does so after Epona has been spawned.
- AIDef:AI/WolfLinkAmiibo does it after spawning Wolf Link.
- AIDef:Action/ItemAmiiboSelectDropTable registers an amiibo as soon as it is scanned, even before spawning the drops.
Whenever an amiibo is registered:
- AmiiboMgr determines if it should reset its daily amiibo use history (stored in the AmiiboTouchHistory flag)[2].
- If less than 86400 seconds (1 day) have elapsed since the game was launched, don't do anything.[check]
- AmiiboMgr then computes
10000 * now.year + 100 * now.month + now.day
. If the value is different from AmiiboLastTouchDate (which would mean that a day has elapsed), the AmiiboTouchHistory array is cleared.
- An entry for the scanned amiibo is inserted into AmiiboTouchHistory. Only the last 100 entries are kept.
- For a first time scan, a new entry is inserted into AmiiboTouchHistoryTotal (only the last 200 entries are kept). Otherwise, the scan count is incremented by updating the existing entry.
- Finally, AmiiboLastTouchDate is set to the current date.
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).
Special cases
Items with the AmiiboArmorItem tag
If the player hasn't received the complete armor set from an amiibo, do not give them armor pieces that they have already received.
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]).
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).
Items with the Important tag
The IsGet_ flag for Important items must be false; otherwise they will not spawn.
Drops from Item_Amiibo_DropTable_012, Item_Amiibo_DropTable_013, Item_Amiibo_DropTable_015
???
Some ore, electric/bomb arrows, GreatHit items
These are always spawned as a chest item (TBox_Field_Iron). The chest always receives the "IsAmiibo" property and "SharpWeaponJudgeType" is set to 2, which causes different weapon bonuses and guarantees the weapon will have at least a blue/white modifier.
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.
References
- ↑ 0x710064B564 on Switch 1.5.0
- ↑ 0x710064B3C8
- ↑ AIDef:Action/ItemAmiiboCreateFromDropTable
- ↑ If the corresponding IsGet flag is false