Amiibo drops: Difference between revisions

From ZeldaMods (Breath of the Wild)
Jump to navigation Jump to search
imported>Leoetlino
imported>Leoetlino
Line 31: Line 31:
**If less than 86400 seconds (1 day) have elapsed since the game was launched, don't do anything.{{check}}
**If less than 86400 seconds (1 day) have elapsed since the game was launched, don't do anything.{{check}}
**AmiiboMgr then computes <code>10000 * now.year + 100 * now.month + now.day</code>. If the value is different from AmiiboLastTouchDate (which would mean that a day has elapsed), the AmiiboTouchHistory array is cleared.
**AmiiboMgr then computes <code>10000 * now.year + 100 * now.month + now.day</code>. If the value is different from AmiiboLastTouchDate (which would mean that a day has elapsed), the AmiiboTouchHistory array is cleared.
*The amiibo UID is inserted into AmiiboTouchHistory. Only the last 100 entries are kept.
*An entry for the scanned amiibo is inserted into AmiiboTouchHistory. Only the last 100 entries are kept.
*It is also inserted into AmiiboTouchHistoryTotal. Only the last 200 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.
*Finally, AmiiboLastTouchDate is set to <code>10000 * now.year + 100 * now.month + now.day</code> to update the last amiibo usage date.
*Finally, AmiiboLastTouchDate is set to <code>10000 * now.year + 100 * now.month + now.day</code> to update the last amiibo usage date.
The format for AmiiboTouchHistory and AmiiboTouchHistoryTotal entries is "%s_%d_%d_%d" (amiibo UID, amiibo value 1, amiibo value 2, scan count) 


== Logic ==
== Logic ==

Revision as of 13:10, 27 October 2018

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.

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.
  • Finally, AmiiboLastTouchDate is set to 10000 * now.year + 100 * now.month + now.day to update the last amiibo usage 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 the GreatHit table
    • SmallHit drops: same, but for SmallHit (if there is a SmallHit).
    • Normal drops: random number between RepeatNumMin and RepeatNumMax for Normal - 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

Special cases

Items with the AmiiboArmorItem tag

???

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

???

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.

References

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