Export translations
Jump to navigation
Jump to search
Settings
Group
Amiibo drops
Difficulty scaling
Escape Ganon glitch
Lord of the Mountain
Object respawning
Shield durability
The Great Plateau barrier
Time
WorldMgr
Language
aa - Afar
ab - Abkhazian
abs - Ambonese Malay
ace - Achinese
ady - Adyghe
ady-cyrl - Adyghe (Cyrillic script)
aeb - Tunisian Arabic
aeb-arab - Tunisian Arabic (Arabic script)
aeb-latn - Tunisian Arabic (Latin script)
af - Afrikaans
ak - Akan
aln - Gheg Albanian
alt - Southern Altai
am - Amharic
ami - Amis
an - Aragonese
ang - Old English
anp - Angika
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
atj - Atikamekw
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - South Azerbaijani
ba - Bashkir
ban - Balinese
ban-bali - ᬩᬲᬩᬮᬶ
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba (Latin script)
bcc - Southern Balochi
bci - Baoulé
bcl - Central Bikol
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bg - Bulgarian
bgn - Western Balochi
bh - Bhojpuri
bho - Bhojpuri
bi - Bislama
bjn - Banjar
blk - Pa'O
bm - Bambara
bn - Bangla
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
btm - Batak Mandailing
bto - Iriga Bicolano
bug - Buginese
bxr - Russia Buriat
ca - Catalan
cbk-zam - Chavacano
cdo - Min Dong Chinese
ce - Chechen
ceb - Cebuano
ch - Chamorro
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cps - Capiznon
cr - Cree
crh - Crimean Tatar
crh-cyrl - Crimean Tatar (Cyrillic script)
crh-latn - Crimean Tatar (Latin script)
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
dag - Dagbani
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
din - Dinka
diq - Zazaki
dsb - Lower Sorbian
dtp - Central Dusun
dty - Doteli
dv - Divehi
dz - Dzongkha
ee - Ewe
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
es-419 - Latin American Spanish
es-formal - Spanish (formal address)
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
fat - Fanti
ff - Fulah
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fon - Fon
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fy - Western Frisian
ga - Irish
gaa - Ga
gag - Gagauz
gan - Gan Chinese
gan-hans - Gan (Simplified)
gan-hant - Gan (Traditional)
gcr - Guianan Creole
gd - Scottish Gaelic
gl - Galician
gld - Nanai
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
gor - Gorontalo
got - Gothic
gpe - Ghanaian Pidgin
grc - Ancient Greek
gsw - Swiss German
gu - Gujarati
guc - Wayuu
gur - Frafra
guw - Gun
gv - Manx
ha - Hausa
hak - Hakka Chinese
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
ho - Hiri Motu
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
hsn - Xiang Chinese
ht - Haitian Creole
hu - Hungarian
hu-formal - Hungarian (formal address)
hy - Armenian
hyw - Western Armenian
hz - Herero
ia - Interlingua
id - Indonesian
ie - Interlingue
ig - Igbo
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kbd - Kabardian
kbd-cyrl - Kabardian (Cyrillic script)
kbp - Kabiye
kcg - Tyap
kea - Kabuverdianu
kg - Kongo
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kjp - Eastern Pwo
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
ko - Korean
ko-kp - Korean (North Korea)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
krl - Karelian
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ksw - S'gaw Karen
ku - Kurdish
ku-arab - Kurdish (Arabic script)
ku-latn - Kurdish (Latin script)
kum - Kumyk
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - Lak
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
lki - Laki
lld - Ladin
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mad - Madurese
mai - Maithili
map-bms - Basa Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Maori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mni - Manipuri
mnw - Mon
mo - Moldovan
mos - Mossi
mr - Marathi
mrh - Mara
mrj - Western Mari
ms - Malay
ms-arab - Malay (Jawi script)
mt - Maltese
mus - Muscogee
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nāhuatl
nan - Min Nan Chinese
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
nia - Nias
niu - Niuean
nl - Dutch
nl-informal - Dutch (informal address)
nmz - Nawdm
nn - Norwegian Nynorsk
no - Norwegian
nod - Northern Thai
nov - Novial
nqo - N’Ko
nrm - Norman
nso - Northern Sotho
nv - Navajo
ny - Nyanja
nyn - Nyankole
nys - Nyungar
oc - Occitan
ojb - Northwestern Ojibwe
olo - Livvi-Karelian
om - Oromo
or - Odia
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pcd - Picard
pcm - Nigerian Pidgin
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Norfuk / Pitkern
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
pwn - Paiwan
qqq - Message documentation
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rm - Romansh
rmc - Carpathian Romani
rmy - Vlax Romani
rn - Rundi
ro - Romanian
roa-tara - Tarantino
rsk - Pannonian Rusyn
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rw - Kinyarwanda
ryu - Okinawan
sa - Sanskrit
sah - Sakha
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
se-fi - davvisámegiella (Suoma bealde)
se-no - davvisámegiella (Norgga bealde)
se-se - davvisámegiella (Ruoŧa bealde)
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
shi - Tachelhit
shi-latn - Tachelhit (Latin script)
shi-tfng - Tachelhit (Tifinagh script)
shn - Shan
shy - Shawiya
shy-latn - Shawiya (Latin script)
si - Sinhala
simple - Simple English
sjd - Kildin Sami
sje - Pite Sami
sk - Slovak
skr - Saraiki
skr-arab - Saraiki (Arabic script)
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
smn - Inari Sami
sms - Skolt Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - Serbian (Cyrillic script)
sr-el - Serbian (Latin script)
srn - Sranan Tongo
sro - Campidanese Sardinian
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
sty - Siberian Tatar
su - Sundanese
sv - Swedish
sw - Swahili
syl - ꠍꠤꠟꠐꠤ
szl - Silesian
szy - Sakizaya
ta - Tamil
tay - Tayal
tcy - Tulu
tdd - Tai Nuea
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tk - Turkmen
tl - Tagalog
tly - Talysh
tly-cyrl - толыши
tn - Tswana
to - Tongan
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
trv - Taroko
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - Uzbek (Cyrillic script)
uz-latn - Uzbek (Latin script)
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vmw - Makhuwa
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
war - Waray
wls - Wallisian
wo - Wolof
wuu - Wu Chinese
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
xsy - Saisiyat
yi - Yiddish
yo - Yoruba
yrl - Nheengatu
yue - Cantonese
za - Zhuang
zea - Zeelandic
zgh - Standard Moroccan Tamazight
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - Chinese (Macau)
zh-my - Chinese (Malaysia)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
Format
Export for off-line translation
Export in native format
Export in CSV format
Fetch
{{DISPLAYTITLE:等級系統}}<languages/> '''Difficulty scaling'''(等級系統)是曠野之息用來控制敵人跟武器等級的一個機制。你會注意到,在遊玩的過程中,同一個地點的敵人可能在若干次血月後變成了更強的敵人,且其手上的武器也有所變化。 == 經驗值 == 等級系統是根據存檔裡的一個「經驗值」系統決定的。只有怪物死掉可以獲得經驗值。(意即解神廟、解任務之類的事情不算。) 每當有敵人死掉,遊戲就會想增加 Defeated_{SameGroupActorName}_Num 這個計數器。 花括號的意思是,如果是波克布林死掉,就會更新波克布林專屬的計數器。 不過,只有下列條件滿足的時候,計數器才會真的增加。 * 計數器本身還不到 10(意思是大部分的怪物只有殺死前十隻才算) * 死掉的那個敵人沒有 NotCountDefeatedNum flag(意思是某些特殊情況下不算) * '''導師米茲·喬希亞'''專用的計數器 'Defeated_Priest_Boss_Normal_Num' 是 0(意思是只有殺第一次才算) * '''魔獸加儂'''也是只有第一次才算 * '''厄咒加儂'''只有在神獸裡打敗的才算,原始遊戲打一次,DLC 跟幻影打一次,總共兩次(在城堡裡打的不算) 需要注意的是只要有''任何''敵人死掉,不管死法,也不管是不是林克親手殺的,遊戲都會試圖增加計數器。下面會講到哪些情況下不會算。 由於主線劇情會要求玩家殺怪,所以玩家或多或少都會累積經驗值,並且相應地導致等級上升。 遊戲的存檔裡會儲存死了幾隻怪的計數器,有了計數之後 Ecosystem::LevelSensor 這個子系統會用 [[#Ecosystem::LevelSensor::calculatePoints]] 計算你的經驗值。不同的怪會給你不同的經驗,表格存在這裡 [[#Ecosystem::LevelSensor::loadByml]]. 算出經驗值之後,這個子系統會用這兩個函數 [[#Ecosystem::LevelSensor::scaleWeapon]] 跟 [[#Ecosystem::LevelSensor::scaleActor]] 來決定敵人跟武器應該分別是什麼等級。 == 阻止升級的情況 == 下面這個情況會導致敵人跟武器維持原樣。 * WorldMgr::sInstance->stageType == 1 (Open World stage) * 且 WorldMgr::sInstance->isAocField (current map is Trial of the Sword) * 且 WorldMgr::sInstance->disableScaling (set to true when entering Trial of the Sword) 總而言之,遊戲不會升級劍之考驗裡的武器和敵人。 另一種會跳過升級的情況是 [[map area]] 等於 28, 也就是林克位在 "HateruSea",野外的考驗的塞哈特諾島。 == 武器 == 下面這些武器在生成的時候會呼叫它的 'scaleWeapon' 函數 * '''單獨存在的武器''': The actor property 'LevelSensorMode' is higher than 1 '''and''' it wasn't already picked up. 設定上可以升級而且還沒被撿走 * '''寶箱裡的武器''': If SharpWeaponJudgeType is not 4, when [[AIDef:AI/TreasureBox]] initialises the drop actor. 同樣是設定上允許升級 * '''西諾克斯脖子上的武器''': The flag <code>{MapName}_Necklace_{i}_{HinoxName}_{ID}</code> is false. * '''敵人手上的武器''': The flag <code>{MapName}_WeaponDrop_{ID}</code> is false, '''and''' [the actor property 'LevelSensorMode' is higher than 1 ''or'' the enemy is a Guardian Scout ('Enemy_Guardian_Mini' 廟裡的守護者)]. 註記:從 NPC 那裡拿到的武器(阿卡莱古代研究所、英傑武器、怪物商人)不在上面的列表裡,從而不升級。 == 武器加成 == 武器的加成有三個要素。 一是武器本身會被更新成更好的武器(騎士之劍 -> 王族之劍); 二是武器的攻擊、防禦、耐久等數值擇一增加; 三是增加多少。 藍標、白標(Blue/White)是比較低階的升級,標記成「某某某提升」。黃標(Yellow)是高階的升級,標記成「某某某大提升」。以攻擊力為例,藍標可能會增加 10~20 的攻擊力(攻擊力提升 +14),而黃標會增加 20~30(攻擊力大提升 +24)。 === 加成的方向 === 要往哪個方向加成(加攻擊還是加耐久?還是別的?)是隨機的, 每個可能的方向有同樣的機率被選到。 {|class="wikitable" ! 加成的方向 !! Available in bonus tiers |- |- | Attack up 攻擊力 || Blue/White and Yellow |- | Durability up 耐久度提升 || Blue/White and Yellow |- | Long throw 遠距離投擲 || Yellow |- | Multi-shot burst (bows) 多發弓發數增加 || Yellow |- | Quick shot (bows) 速射 || Yellow |- | AddSurfMaster || Yellow |- | Shield guard up 防禦力 || Blue/White and Yellow |- | Critical Hit 最後爆擊 || Blue/White |- | ZoomRapid || Yellow |} 需注意的是: * 最後爆擊 "Critical Hit" 只可能在 weaponCommonSharpWeaponAddCrit 是 true 且 加成的 tier 程度是 White/Blue (白色或藍色的「提升」而不是黃色的「大提升」)時出現。 但是隨著經驗值的提升,所有武器的加成都會漸漸變成 Yellow (黃色的「大提升」),所以「最後爆擊」在遊戲後期就不會再出現。 * AddSurfMaster is a bonus that only applies to shields and gives them a lower friction for shield surfing. That bonus type is unused in the game. '''"Shield Guard Up" does not appear for amiibo weapons because of a game bug.''' === 加成的程度 === 武器加成多少(如攻擊力應當提升多少)的數值來源於這個表 [[ActorParam/GeneralParamList]] (with a copy of the information in [[ActorInfoData]]). Valid ranges and bonuses for each weapon are configured in the WeaponCommon section. ==== amiibo ==== Because of a bug in the game code<ref>The bugged code is in function {{addr|a=0x71002df7d8|ver=nx-1.5.0}}.</ref>, any time the game randomly chooses the "Shield Guard Up" bonus, the actual bonus that gets assigned to the weapon and shows up in the user interface is "Durability Up". For this reason, the extra durability value that is used for shields with the "Durability Up" bonus is either addLifeMax or addGuardMax, depending on which bonus was chosen. {|class="wikitable" ! 加成的方向 !! 加成的程度 |- | None 不加成 || - |- | Attack up 攻擊力 || addAtkMax |- | Durability up 耐久度提升 || addLifeMax or addGuardMax |- | Long throw 遠距離投擲 || addThrowMax |- | Multi-shot burst (bows) 多發弓發數增加 || 5-shot burst 五連發 |- | Quick shot (bows) 速射 || addRapidFireMin |- | AddSurfMaster || [[bgparamlist#Global|GlobalParameter]]::shieldSurfMasterFrictionRatio |- | Shield guard up 防禦力 || addGuardMax |} 這段的意思是 amiibo 武器的加成都會是固定的值。譬如說,如果遊戲決定增加攻擊力,而且這個武器的攻擊力最多 +20,那就會 +20。 ==== 非 amiibo ==== {|class="wikitable" ! 加成的方向 !! 加成的程度 |- | None 不加成 || - |- | Attack up 攻擊力 || addAtkMin 到 addAtkMax 之間的隨機數字 |- | Durability up 耐久度提升 || addLifeMin 到 addLifeMax 之間的隨機數字 |- | Long throw 遠距離投擲 || addThrowMin 到 addThrowMax 之間的隨機數字 |- | Multi-shot burst (bows) 多發弓發數增加 || 5-shot burst 五連發 |- | Quick shot (bows) 速射 || addRapidFireMin 到 addRapidFireMax 之間的隨機數字 |- | AddSurfMaster || [[bgparamlist#Global|GlobalParameter]]::shieldSurfMasterFrictionRatio |- | Shield guard up 防禦力 || addGuardMin 到 addGuardMax 之間的隨機數字 |} 這段的意思是非 amiibo 武器的加成都是隨機的值。譬如說,如果遊戲決定增加攻擊力,而且這個武器的攻擊力從 +10 到 +20 都有可能,那最後生成的武器就會是 10 到 20 之間的隨機數字(應該是均勻分布)。 == 敵人 == 遊戲在載入敵人時會根據一定的規則升級敵人。 不過 'LevelSensorMode' < 1 的時候所有敵人(跟武器)都不會升級。 註記:有些敵人本身是無法升級的(例如帶冰、火、電的蜥蜴), 這僅僅是代表他們自身就已經是最高級了。 而他們手上的武器只要滿足下列條件就可以升級: * 'LevelSensorMode' 非零且經驗值足夠高 * 或是某個 flag 被強制寫入應該升級 the modifier tier is overridden using 'SharpWeaponJudgeType'. [1.3.0] 版本加入了大師模式。大師模式裡'''所有'''敵人都會先驗地提高一級。這個部分跟 'LevelSensorMode' 造成的升級互不衝突而且可以疊加。更精確的控制是由下面這些參數決定的 {| class="wikitable" ! 參數 ! 預設值 ! Description |- | IsHardModeActor | false | 是否只在大師模式出現 |- | DisableRankUpForHardMode | false | 在大師模式裡是否避免升級 |} 在大師模式裡,某些敵人的 IsHardModeActor、DisableRankUpForHardMode、LevelSensorMode這三個參數會同時被遊戲設計師手動調整。調整的目的是讓大師模式的後期還是會存在低等級的怪物(例如台地南邊有個紅色小波)。 == 屬性 == === <code>LevelSensorMode</code> === 這個 [[actor]] 屬性決定了一個武器或敵人會不會升級,一個敵人的 LevelSensorMode 屬性同時控制了它手上的武器升不升級。 不過西諾克斯的 LevelSensorMode 屬性並不控制他脖子上的武器如何升級(到頭來是脖子上而不是手上)。總之,西諾克斯用的是另一個機制來決定脖子上的武器如何升級,而且這個機制可以繞過 'LevelSensorMode'。 === <code>SharpWeaponJudgeType</code> === 這個屬性決定某個敵人或武器「至少」會被加成多少。 (意即:就算經驗值不夠還是會加成。) 在 [[Map unit|map units]] 這類的地方,下面這些值記載了遊戲打算如何加成武器。 {| class="wikitable" ! 值 ! Description |- | 0 | '''None''': 不加成 |- | 1 | '''RandomBlue''': 要麼是藍標以上的加成,要麼不加成,隨機決定。 (with <code>weaponCommonSharpWeaponPer</code> being the probability). |- | 2 | '''Blue''': 至少藍/白標,按經驗值往上加。 |- | 3 | '''Yellow''': 至少黃標。 |- | 4 | '''NoneForced''' (限於寶箱): Weapon will ''never'' spawn with any modifiers. 寶箱的這個屬性會抹去其他一切升級。 |} 如果 [[Difficulty scaling#LevelSensorMode|scaling]] 處在打開狀態的話,武器有可能因為經驗值足夠的關係被升到更高級。 經驗值不夠則維持原升級(不會降級)。 換句話說,就算是設成 0 ('None') 的武器也不是永遠不升級了, 而是遊戲開發者有意給玩家最低等級的武器。 只要玩家的經驗值高過某個門檻,就會得到 Blue 藍標加成,再高一點 Yellow 黃標加成。 == 升級的計算過程 == === <code>Ecosystem::LevelSensor::loadByml</code> === 這個函數會被 <code>Ecosystem::init</code> 呼叫, 後者是被 <code>ksys::InitializeApp</code> 呼叫。 它的功用是載入 byml 檔案 Ecosystem/[[LevelSensor.byml]]。 === <code>Ecosystem::LevelSensor::calculatePoints</code> === 每當遊戲生成 actors 時,[[PlacementMgr]] 會呼叫這個函數。(actor 可以是武器或是敵人) 它會用各種表格跟各種經驗值計算武器或敵人要升級多少。 遊戲到目前為止都只用殺敵數 <code>Defeated_%s_Num</code> 來計算經驗值並以此推測升級程度,但是從程式設計的角度來說可以用別的東西來計算經驗值。 有趣的是,遊戲利用殺敵數計算經驗值時,會把一個「原始經驗值」轉化成「用在武器升級的經驗值」跟「用在敵人升級的經驗值」。這樣設計師就可以在後期微調「原始」轉化到「武器」的匯率;「敵人」亦同。 <source lang="c++"> float points = 0.0; for (kill_flag : this->byml["flag"]) // 枚舉所有敵人 int kill_count = GameData::getIntegerFlag(kill_flag["name"]); points += kill_count * kill_flag["point"]; // 殺敵數 * 此敵人的分數 this->points = points; // 原始經驗值 this->weapon_points = points * this->byml["setting"].Level2WeaponPower; // 換算成武器用分數 this->enemy_points = points * this->byml["setting"].Level2EnemyPower; // 換算成敵人用分數 </source> 就我們能看到的部分,任天堂從來沒有調整過這兩個數值。 === <code>Ecosystem::LevelSensor::scaleWeapon</code> === 它負責處理武器的升級。有三個東西會呼叫它:寶箱、敵人{{Check}}、 <code>Ecosystem::LevelSensor::scaleActor</code>。 呼叫時給定一個武器的名字、預設的加成(至少多少)、跟目前玩家的經驗值。然後這個函數會回傳一個武器名稱(可能跟給定的不一樣),其中包括應當使用何種加成。 如果函數找半天找不到滿足給定的條件武器、加成,遊戲就會用預設的武器、預設的加成。(程式碼裡最後的 return false 會處理所有例外、失敗的情形。) Pseudocode (1.0.0): <source lang="c++"> bool Ecosystem::LevelSensor::scaleWeapon(const sead::SafeString& weapon_to_look_up, // 基礎武器 WeaponModifier required_modifier, // 預設至少加這麼多 const char** weapon_to_use_name, // 回傳的武器寫在這裡 WeaponModifier* modifier_to_use, // 回傳的加成寫在這裡 void* unknown) { // some checks using 'unknown' here which seems to be a pointer to the actor for (weapon_table : this->byml["weapon"]) { // find the first weapon entry for which the player has enough points // with the specified name and modifier // 不同的武器系列儲存在不同的 table 裡,要枚舉 table 再枚舉 table 裡的細項 i = -1; // 應該是 index,但是 -1 代表尚未找到 for (j = 0; j < weapon_table["actors"].size; ++j) { // 枚舉含有加成訊息的武器 entry = weapon_table["actors"][j]; float points_for_next_transition = entry["value"]; // 這個加成過的武器所需的經驗值 if (this->weapon_points > points_for_next_transition && // 你的經驗值夠 weapon_to_look_up == entry["name"] && // 武器的名字是對的 convert_to_modifier(entry["plus"]) == required_modifier) { // 加成的方向跟程度是對的 i = j; break; // 找到一個了(但是可能還有更多) } } if (i == -1) continue; // 找不到就試下一個 do { // 已知找到一個的情況下,試圖找更多 entry = weapon_table["actors"][i]; // not_rank_up means there is no link between weapons; // this table is just used to look up modifiers. // so go down the list until there are no more entries for the requested weapon // or until we reach a modifier that requires more points. if (weapon_table["not_rank_up"] && entry["name"] != weapon_to_look_up) break; // ???這個 table 裡的武器不能升級,或是 entry 是 null (boundary check) // otherwise, just go down the list until we reach the end or a weapon which // requires more points. this will possibly upgrade the weapon (e.g. Knight -> Royal). if (this->weapon_points <= entry["value"]) break; // 枚舉到經驗值最高又符合條件的才停 ++i; } while (i < weapon_table["actors"].size); *weapon_to_use_name = entry["name"]; *modifier_to_use = convert_to_modifier(entry["plus"]); return true; // 有找到 } return false; // cannot scale up // 沒找到 } </source> === <code>Ecosystem::LevelSensor::scaleActor</code> === 處理敵人的升級。方法跟上面 <code>LevelSensor::scaleWeapon</code> 處理武器的升級類似。 Pseudocode (1.0.0): <source lang="c++"> if (actor->params["LevelSensorMode"] < 1) return false; if (actor_name.contains("Enemy")) { for (enemy_table : this->byml["enemy"]) { i = -1; for (j = 0; j < enemy_table["actors"].size; ++j) { entry = enemy_table["actors"][j]; if (entry["name"] == actor_name && this->enemy_points > entry["value"]) { i = j; // 名字對,而且經驗值也夠 break; } } if (i == -1) continue; // 找不到換下一個 do { entry = enemy_table["actors"][i]; if (this->enemy_points <= entry["value"]) break; // 有找到就枚舉到經驗值最高又符合條件的才停 ++i; } while (i < enemy_table["actors"].size); *actor_to_use = entry["name"]; return true; } return false; // cannot scale up } if (actor_name.contains("Weapon")) { // 找到敵人後,手上的武器單獨處理 weapon_name = actor->getWeaponName(); modifier = actor->params["SharpWeaponJudgeType"]; if (modifier == WeaponModifier::RandomBlue) modifier = get_random_blue_modifier(actor->getWeaponName()); // 抽獎 if (scaleWeapon(weapon_name, &weapon_to_use, &modifier_to_use)) { actor->setProperty("SharpWeaponJudgeType", modifier_to_use); // 用找的 *actor_to_use = weapon_to_use; return true; // 有找到 } return false; // cannot scale up // 沒找到 } </source> == 大數據 == 精確的數值可以在這裡找到: * [https://docs.google.com/spreadsheets/d/e/2PACX-1vRSlyOD7FLAn1TUBn64Pu8Pld-WOfgcVByuywHMWvBTEV0j8potD1wkBs-MJJXf-gvEkpfItUCMqMk6/pubhtml kill point, enemy scaling and weapon scaling tables] * [https://objmap.zeldamods.org 地圖裡也有]. This makes it possible to see both the required points for enemy/weapon upgrades, as well as all of the special cases extremely easily. == 厄咒加儂 == 厄咒加儂也有升級版,不過是依據的是另一個完全獨立的系統。 具體升級的內容是:神獸裡的厄咒加儂的血量是由玩家打死過多少別的加儂決定的。 <source lang="c++">__int64 SiteBoss::getInitialHP(SiteBoss *this) // 0x71002D01F4 { const int baseHp = Enemy::getInitialHP(this); // 基礎血量(底) const int halfBaseHp = baseHp >> 1; // 除以 2(台) const bool dieGanonWind = hasFlag_Die_PGanonWind(0); // 打過風嗎? const bool dieGanonWater = hasFlag_Die_PGanonWater(0); // 打過水嗎? const bool dieGanonFire = hasFlag_Die_PGanonFire(0); // 打過火嗎? const bool dieGanonElectric = hasFlag_Die_PGanonElectric(0); // 打過雷嗎? const int flags = this->siteBossFlags & 0xFFFFFFFC; // 玩家在哪裡 int multiplier; if ( flags == 4 ) // 城堡裡 multiplier = 3; else if ( flags == 8 ) // 幻影空間 multiplier = 4; else multiplier = dieGanonFire + dieGanonWind + dieGanonWater + dieGanonElectric; return baseHp + multiplier * halfBaseHp; }</source> 換句換說,玩家第一個擊倒的厄咒加儂的血量是 800,下一個 1200,再下一個 1600,最後一個 2000。 === Special case 1: 城堡裡的厄咒加儂 === Castle blights have <code>IsRemainBoss</code> set to false in their root AI parameters (see [[AIDef:AI/SiteBossSpearRoot]] for example), which sets flag 4. 城堡裡的厄咒加儂,不管是第幾隻,血量都是 800+3×400 = 2000。 打死城堡裡的厄咒加儂並不計入經驗值。(相應的計數器不會增加。) === Special case 2: 幻影空間裡的厄咒加儂 === Illusory Realm blights possess the <code>EnemySiteBoss_R</code> actor tag. This causes flag 8 to be set. So they will always have 500+4×250 = 1500 HP. 補充:幻影裡的厄咒加儂基礎血量是 500,其他情況是 800。 Interestingly, the Windblight AI function doesn't check the actor tag but the actor name instead. For flag 8 to be set, the actor name must be <code>Enemy_SiteBoss_Bow_R</code>. <references /> [[Category:Internals{{#translation:}}]] [[Category:Game mechanics{{#translation:}}]]
Navigation menu
Personal tools
English
Create account
Log in
Namespaces
Translate
English
Views
Language statistics
Message group statistics
Export
More
Search
Navigation
Home
Breath of the Wild
Object map
Event viewer
Decomp source
Pseudo-source
Help us!
Wiki
Help
Recent changes
Random page
Community
Discord
BotW Modding Discord
LAS ZeldaMods wiki
CloudModding wikis
BotW Mods
GameBanana (Wii U)
GameBanana (Switch)
Tools
Special pages
Printable version