Stardew Valley 運勢系統代碼圖文分析詳解

我4月末入手stardew valley,玩了一個檔。基本上能玩的元素都玩到了,覺得這個遊戲的許多地方都很有趣,重要的是這個遊戲是xna的,因此想看一下。在網上也沒有什麼比較好的關於運勢系統的分析攻略,所以就選擇了這個來分析。現場碼字可能比較慢

首先打開遊戲中的人物狀態這裡,發現有5個人物的屬性等級,farming,mining,foraging,fishing,combat這5個技能類型,在這裡我發現其實同等級的技能類型不止有5個,而是6個。

第六個是Luck,也就是幸運等級,只不過這個不會顯示在玩家可見的狀態列裡。

這就解釋了吃某一些料理的時候會增加人物的運氣等級,其實增加的就是這個屬性

通過代碼發現,這個運氣等級其實和我們每天早起看電視的那個運氣並不是同個東西。
在代碼中顯示:運氣等級在代碼中的名稱叫做:LuckLevel,而每日的運氣名稱叫做:dailyLuck,許多取決於運氣的幾率事件都是將這兩個運氣值同時進行計算的。
這段代碼顯示的就是每天在電視上看到的內容,會根據每日隨機的運勢值來進行顯示

那每日運勢這個東西是如何計算的呢

是這一句話進行隨機的。
意思大概是,會首先在0.0-1.0之間進行隨機一個數位,如果這個數位小於0.8,同時玩家是有“魅力”的,這樣的話那運氣是固定為0.1,也就是“非常開心”,但這個還不是最幸運的情況,最幸運需要到0.12。如果這個數字大於0.8,或者玩家不是“有魅力的”,那麼就會對玩家再進行一次隨機,相當於是在-0.1-0.1之間隨機。這個概率就比較平均了。
在遊戲中,我們一般會遇到幾種運勢:
1.精靈非常開心(大於0.07)
2.精靈很開心(0.02-0.07)
3.命運掌握在自己手中(-0.02-0.02)
4.精靈不太開心(-0.02–0.07)
5.搗蛋(小於-0.07)
但是,在代碼中發現還有三種不同的運勢,我是沒有遇到過,不知道有沒有人玩到過這三種運勢:
1.The spirits are joyous! Someone gave them a nice offering today, and they are very pleased.意思大概是今天精靈極開心,會帶給你特別好的一天。(0.12)
2.This is rare. The spirits feel absolutely neutral today.
意思說這很罕見。今天的精靈絕對中立。(0.00)
3.The spirits are furious. Apparently someone tried to give them a worthless offering… Hmm. It’s unwise to play jokes on the spirits!
意思是精靈很憤怒。顯然有人試圖給他們糟糕的東西,給精靈開這個玩笑很不明智!(-0.12)
不過,在代碼中分析,按照正常的隨機演算法,是不會出現0.12或者-0.12的,不知道這是不是作者沒完成的設定,或者我還沒有發現。而0.00這個值是可以出現的,和它自己說的一樣,這個確實比較罕見(0.5%幾率)。
還有就是最上面說的玩家是有“魅力”的,這個時候,有90%的幾率是好運(80+20*50%)。那什麼是有魅力的呢,這個我還沒有仔細的分析過,貌似只有作者Debug的時候才用到,或者與創建人物時寫的那個”喜愛的東西“有關。

那這個運勢都會影響什麼東西:
1.動物出產的產品
2.礦洞死亡後物品掉落
3.夏天的閃電
4.作物收穫
5.蟹籠
6.送禮
7.敲碎石頭後掉落物品

我先去上課了,下午有空更

回來了,開更。

1.運勢對動物出產的產品的影響
每個動物在購買/出生後會有一個開心值,代碼中叫happiness。初始值是0xff(255)。也就是你每天摸動物之後,動物頭上會出現一個心,就是代表這個動物的開心情況以及表示動物增加了開心值(表示一團亂麻的時候也會加開心值),開心值和點擊動物出現的資訊裡面的心(好感度)是不一樣的兩個東西。
開心值<30 : look sad
30<開心值<200 : look fine
開心值>200 :looks really happy today!
根據觀察發現好感度的取值是0-1000,對應0-5心。
根據演算法,目前來看,是否產出物品完全與開心值有關,當動物的開心值高於150時產出概率是100%,當小於150時,值越小產出幾率越小(75開心值產出率為50%)。
而運勢僅僅是在動物有產出的情況下,決定了產出特殊物品的概率(鴨毛、兔腳)。
產出特殊產品的演算法的大概意思是:
鴨子:
當動物開心值大於200時
((開心值+好感度)/5000 + 今日的運勢)+(玩家幸運等級*0.01)
當動物開心值小於200時
((好感度-開心值)/5000 + 今日的運勢)+(玩家幸運等級*0.01)
兔子:
當動物開心值大於200時
((開心值+好感度)/5000 + 今日的運勢)+(玩家幸運等級*0.02)
當動物開心值小於200時
((好感度-開心值)/5000 + 今日的運勢)+(玩家幸運等級*0.02)
根據實際情況估算一下:
某天,一隻鴨子的好感為3心,開心值滿,你的幸運等級預設為1的情況,這只兔子在不同的運勢情況(取中間值)下產出情況為:
非常開心:26.6%
開心:22.6%
命運在自己手中:18.1%
不開心:13.6%
搗蛋:9.6%
兔子同理。可見運勢對動物產出的影響還是很大的。


2.運勢對礦洞死亡後物品掉落的影響
相信大家都在礦洞裡掛過,我也掛過兩次,一次掉了武器(我 的黑曜石劍啊啊),還有一次掉了背包裡的不少東西(包括我給penny送禮用的好幾十個甜瓜)。
這個礦洞死亡掉落也是和運勢有關的:
首先死亡掉落有限制:
1.工具不能掉
2.特定武器不能掉(編號為47,編號為4的武器,可能是初始武器,沒仔細研究)
3.戒指不能掉
4.掉的物品都是可丟棄的,也就是可以把它丟垃圾桶的
這是四條限制,滿足這四條限制後,就會對每個這樣的物品進行一個演算法:
(0.25-幸運等級*0.05)-今日的運勢
滿足條件的會掉落。
不同的運勢的掉落率(預設幸運等級為1):
非常開心:11.5%
開心:15.5%
命運在自己手中:20%
不開心:24.5%
搗蛋:28.5%
不過估計一般也沒人運氣不好的時候下礦吧。


3.閃電出現幾率的影響
上面說的是對夏天閃電出現的影響,我也忘了是不是只有夏天才有閃電,總之,前提就是那種會打閃電的天氣。在這種天氣的情況下,閃電出現就可以產電池組,所以和雞下不下蛋一個道理吧,都是和運勢有關。
這個比較簡單:
在這種天氣下,你在戶外,而且不在沙漠,不同運勢在每個時間點產生閃電的幾率為:
非常開心:31%
開心:27%
命運在自己手中:22.5%
不開心:18%
搗蛋:14%

4.作物收穫
這個比較有意思了,不知道有沒有大神知道這個dwoop是什麼聲音,我認為這裡作者就是閑著沒事玩了一下,沒什麼實際的意義。
按代碼分析,作物收穫的時候應該有一個特效,就是周邊會散落作物的”殘骸“(吃東西的時候也有,不過不知道是不是同一種用法),基本上是產生就消失了,絕大多數玩家都不會在意的細節。而在收穫作物的時候,有大概0.06%的幾率會讓這個”殘骸“產生的數量翻倍。這個幾率會受到運勢的影響。不說了,作者自娛自樂。

更正一個錯誤,蟹籠出產物和運勢無關,我之前看錯了

5.運勢對送禮好感度的影響
運勢本身其實對一份禮物給NPC所增加的好感度不會有影響。好感度系統僅有一處是和運勢有關的。研究完之後,我發現作者心機婊。
條件是,當你已經結婚了之後,再給單身的人送禮,會有幾率不被配偶發現,並且不會降低好感度(30)。這個幾率是:
非常開心:79.5%
開心:75.5%
命運在自己手中:71%
不開心:66.5%
搗蛋:62.5%

晚上接著更

回來了,下面是運勢對於挖礦系統的影響。這裡我發現運勢會影響三個方面:
1.特殊礦石的爆出數量
2.經驗的獲得(影響挖礦等級)
3.暴擊率
首先來說特殊礦石的爆出數量

代碼比較複雜不多過解釋,直接說結果(默認無技能,就是那個5級10級學一次的,會有影響):
受到影響的礦石種類:
1.鐵(380)
2.石頭(390)
3.銅(378)
4.金(384)
5.銥(386)
當挖礦等級與幸運等級都為1級時,
挖普通石頭礦,有50%幾率出1個石頭,50.5%幾率出兩個,0.501%幾率出三個,0.005%的幾率出四個(我概率學的不好,差不多就是這樣。。算暈了),這個幾率會因為挖礦等級與幸運等級的提升而增加,貌似增加的還不小(從萬分之0.5到千分之0.5,。這樣)
挖其他的礦,33%幾率1個,33%幾率兩個,33%幾率三個,出四個,五個是可以發生的事件,等級高,學了技能出四個並不特別意外,要是技能等級低的情況下出了5個那你基本和彩票中獎一樣了。
礦石出產數量不因為類型不同而相異

2.經驗的增加
預設挖礦等級,幸運等級為1.每挖一塊石頭有幾率加5點經驗
這個幾率為:
非常開心:5.24%
開心:5.14%
命運在自己手中:5.03%
不開心:4.92%
搗蛋:4.82%
這裡可以發現,其實挖礦等級,幸運等級越高,增加經驗的幾率就越大,最大為5.55%
影響不大

3.暴擊率。
這個也是和每日運勢不相關的
假設暴擊率為20%,那麼幸運等級1-10的情況的暴擊率為:20.5%-25%。也就是說,暴擊幾率的值並不完全取決於裝備上顯示的值,這個基礎暴擊率越高增幅越大,假設暴擊率為50%的時候,
真實暴擊率為:
51.25%-62.5%,還取決於幸運值,
所以,走暴擊流的別忘了同時要增加幸運等級!

補充幾點後來的發現:
1.砍樹的時候,今日運勢好,會額外掉1快木頭(5%),運勢等級高也會掉(4%-40%)
2.挖農場裡的石頭,計算方式同上
3.礦洞中出現特殊寶石(五彩碎片,鑽石,精煉石英等)的幾率會受運勢影響,這個有空再說。稍微透漏一下,在今日運氣值滿,採礦,幸運等級都為1的情況下,五彩碎片的出現幾率為0.565%。平均200層一個,這個東西出現的最高概率為0.7%。
4.賭博,這個遊戲出現賭博的地方也就是地下賭場了(沒賭過,具體情況不知道),運氣好賭的好(廢話)。代碼發現,賭博是有機會中爆炸大獎的,這個大獎在最佳運勢的情況下(每日運勢滿,運氣等級滿),中獎的幾率是驚人的0.00929%。有興趣可以試一試,by the way 第二大獎幾率為0.0929%約等於千分之一,坑爹。
5.礦洞中出現礦石的幾率。這個不想算了,自然是運勢越好刷的越多,上面說的那個是敲碎了礦石之後爆的數量,這個是每一層的整礦數量。
6.翻垃圾桶出東西的幾率:分別為28.5%,24.5%,20%,15.5%,11.5%。翻垃圾桶被人看見了,那個人好感度-25
7.釣魚出寶箱的幾率,和翻垃圾桶翻出東西來的幾率一樣。至於說運勢好,釣出垃圾的幾率小,我在代碼中暫時還沒有發現有這個設定。釣魚這系統感覺有不少可研究之處,我還沒有仔細的看過釣魚系統的代碼,以後看了會再分析。

運勢系統的分析暫時就這些了!以後再遇到就補充。我目前在分析星露穀物語這款遊戲的全部代碼,遇到有趣的東西(比如作者的彩蛋)就會發到貼吧裡,以後可能還會寫一些關於好感系統,釣魚系統之類的原始程式碼分析,希望大家多多支持!

看到了有人問這個運勢等級怎麼提升,我翻看了一下代碼,發現提升方式只有吃+幸運的料理,直接加等級,有持續時間。
作者在設計的時候,其實是有想可以提升幸運等級的,他在代碼裡的設定就是挖蚯蚓,挖一個加25經驗值,挖40個幸運等級就滿了。但是不知道為什麼,這種增加方式被作者自己遮罩掉了。
(增加經驗的方法名是gainExperience(),兩個參數,第一個增加哪個技能的經驗,第二個是增加的值,luckLevel這個是5,作者的寫法是

但是!!在gainExperience這個方法裡,第一句是一個判斷

所以結論就是,目前沒有發現可以增加幸運等級的手段(除了吃料理)。這可能是作者目前沒完成的一項設定。
這裡發現失落之書的爆率是20%,如果失落之書全了,那麼再挖到都會變成混合種子。冬天挖的東西作者有過調整,山藥是40%,冬根更高。

來源:星露穀物語吧 作者:I獨I孤I蒗I