Amiibo drops/zh: Difference between revisions
(Created page with "開出特獎後,本 amiibo 的掃描次數會重設為 0 (0x710064AC8C).") |
(Created page with "=== 特例 ===") |
||
Line 67: | Line 67: | ||
Dropped items receive the '''IsAmiibo''' actor parameter. | Dropped items receive the '''IsAmiibo''' actor parameter. | ||
=== | === 特例 === | ||
==== Items with the AmiiboArmorItem tag ==== | ==== Items with the AmiiboArmorItem tag ==== |
Revision as of 00:06, 27 May 2020
掉落物表格
Idx | Name | Description |
---|---|---|
0 | Normal | |
1 | Normal2 | 沒用到 |
2 | SmallHit | |
3 | SmallHit2 | 沒用到 |
4 | BigHit | |
5 | BigHit2 | 沒用到 |
6 | GreatHit | |
7 | GreatHit2 | 沒用到 |
Amiibo 註冊
每次使用 amiibo 時,遊戲會紀錄使用了哪個 amiibo [1]。
- AIDef:Action/CreateEpona 在生成伊波娜後紀錄
- AIDef:AI/WolfLinkAmiibo 在生成林克狼後紀錄
- AIDef:Action/ItemAmiiboSelectDropTable 在「掃描階段」時就會紀錄(請注意此時寶物還沒出現)。
當遊戲試圖紀錄 amiibo 時,會做下面這些事情
- AmiiboMgr 會檢查是不是應該清空「今日使用過的 amiibo 列表」(stored in the AmiiboTouchHistory flag)[2]。
- 如果遊戲開啟後還沒過 86400 秒(現實一天),則不做任何事。[check]
- 否則,AmiiboMgr 會計算
10000 * now.year + 100 * now.month + now.day
。如果這個數字不同於 AmiiboLastTouchDate(代表一天過去了),那麼 AmiiboTouchHistory 就會被清空。
- 掃描到的 amiibo 的名字(和其他任天堂認為有必要紀錄的東西)會被寫進 AmiiboTouchHistory 裡。這個表只會保留最新的 100 個名字。
- 如果這個 amiibo 是「新的」,那麼就把它寫進 AmiiboTouchHistoryTotal 這個表裡。如果那個表裡已經有這個 amiibo 的名字了,那就增加它對應的計數器。這個表只會保留 200 個項目。
- 最後把 AmiiboLastTouchDate 更新成今天的日期。
這兩個表格 AmiiboTouchHistory 跟 AmiiboTouchHistoryTotal 用的格式是 "%s_%d_%d_%d" (amiibo UID 名字, amiibo value 1, amiibo value 2, scan count 掃描次數)
運作邏輯
有 20% 的機率出現 SmallHit。
如果這是第 0, 1, 2, 3, 或 4 次掃描這個 amiibo,遊戲有 20% 的機率給你 GreatHit(姑且譯作「特獎」)。如果遇到另外 80%,遊戲會給你 BigHit(姑且譯作「頭獎」)。
如果這個 amiibo 已經連續掃 5 次還沒出過特獎的話,第六次開始就會保證是特獎。
開頭獎跟特獎的時候,遊戲會檢查玩家的進度,如果 Find_4Relic_1stClear 為真(打完一隻神獸),遊戲會使用 'Remain' 這個表決定掉落物。若否,遊戲會檢查 IsGet_PlayerStole2(拿到滑翔傘),為真則使用 'Parasail' 這個表,否則只用 'Normal' 這個表。
決定好使用哪個表格後,遊戲會決定應該掉落多少東西[3]:
- 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
- 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
開出特獎後,本 amiibo 的掃描次數會重設為 0 (0x710064AC8C).
Dropped items receive the IsAmiibo actor parameter.
特例
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
- ↑ 0x710064B564 on Switch 1.5.0
- ↑ 0x710064B3C8
- ↑ AIDef:Action/ItemAmiiboCreateFromDropTable
- ↑ If the corresponding IsGet flag is false