遊戲攻略

飢荒 (Don’t Starve) 食譜代碼深入詳細解析

撰文:a4440

劣勢大概有兩個:第一代碼是英文的,看懂大概需要初中英語水準,有些菜的名字要與漢化版對應起來可能有點難度;第二相比起方便的工具和網頁,代碼並沒有友好的使用者介面,略有點枯燥。

找到代碼檔。以SW為例:進入遊戲安裝資料夾,依次進入:data -> DLC0002 -> scripts

食譜相關代碼檔主要有三個。首先在其中找到cooking.lua,用記事本打開。這裡面記錄的是基本食物的度數屬性。在記事本中搜索《AddIngredientValues》,找到它第一次出現的地方。目前版本大家應該都是:

local fruits = {《pomegranate》, 《dragonfruit》, 《cave_banana》}

AddIngredientValues(fruits, {fruit=1}, true)

從以上這兩行開始,直到最後一行AddIngredientValues出現的位置,之間的內容都是我們關心的食物屬性。這兩行的意思是:

定義fruits為石榴(pomegranate)、火龍果(dragonfruit)、香蕉(cave_banana),所有fruits裡面的食物都有1的果度(即fruit=1)

例如

AddIngredientValues({《durian》}, {fruit=1, monster=1}, true)

這一行是說,榴槤(durian)擁有1果度(fruit=1)以及1怪獸度(monster=1)。

以《–》開頭的一行代碼是注釋,它們不影響遊戲,比如:

— AddIngredientValues({《seeds》}, {seed=1}, true)

這一行加了注釋,所以跟遊戲無關。從這一行可以看出,製作方本來想讓種子也能進鍋,但是後來由於某些原因放棄了。

至此就解釋了怎麼看cooking.lua文件。這些度數起何作用,就要看下一個檔:preparedfoods.lua。

在同樣的位置,我們找到preparedfoods.lua文件,同樣用記事本打開。這個檔就比較明瞭了,在local foods之後的大括弧裡面的,就是我們要的所有菜譜。除了SW的所有新增菜品,還包括原版就有的肉丸等等。

以這道菜為例:butterflymuffin,中文翻譯大概是蝴蝶蛋糕、蝴蝶瑪芬之類,反正就是有個蝴蝶的那道菜,這是原版菜之一。

butterflymuffin =

{

test = function(cooker, names, tags) return names.butterflywings and not tags.meat and tags.veggie end,

priority = 1,

weight = 1,

foodtype = 《VEGGIE》,

health = TUNING.HEALING_MED,

hunger = TUNING.CALORIES_LARGE,

perishtime = TUNING.PERISH_SLOW,

sanity = TUNING.SANITY_TINY,

cooktime = 2,

}

test這行,return後面,end之前的內容(names.butterflywings and not tags.meat and tags.veggie)就是就是合成公式。這個公式是說:需要蝴蝶翅膀(names.butterflywings)、不能有肉類(not tags.meat)、需要有菜類(tags.veggie)。每個and隔開兩個要求,not是說不能有,注意not的運算優先順序要高於and。

後面每一行的解釋:

priority優先度,如果食材適用於烹飪兩個與以上的菜,則選擇優先度高的。如果優先順序相同,則結果隨機,每種結果是等可能的。

weight重量?我並沒有搞懂,但是只有butterflymuffin有這個屬性,總之也不是關注的重點。

foodtype決定烹飪結果的種類,應該是用來判斷維京女能不能吃該食物的。

跳過四行,cooktime決定烹飪時間。

回到前面,health決定回復的血量,hunger決定飽食度,perishtime決定腐爛時間,sanity決定回復SAN量。然而它們都沒有明確寫出來,這就需要我們找第三個檔:tuning.lua。

也是在該資料夾,打開tuning.lua。

比如我們之前看到health = TUNING.HEALING_MED,這一行,要想知道TUNING.HEALING_MED是多少,這時候我們就在tuning.lua裡面搜索《HEALING_MED》。於是我們搜到這一行:

HEALING_MED = 20,

很明顯butterflymuffin具有補血20點的屬性。下面的SAN值回復也是類似。

而飽食度的表示方法稍微複雜一些:

搜索CALORIES_LARGE,找到了

CALORIES_LARGE = calories_per_day/2, — cooked meat

意味著它的飽食度回復量是calories_per_day的二分之一(記得《–》之後的是注釋,不用管它)。

calories_per_day又是多少?再搜索一下,就找到:

local calories_per_day = 75

這就簡單了,75/2=37.5,就是飽食度回復量。

腐爛時間:

PERISH_SLOW = 15total_day_timeperish_warp,

也就是15天腐爛,其他的也類似。

現在回到preparedfoods.lua,接下來選取部分菜譜,繼續解釋公式計算方法和一些稀有的菜品屬性。

蛙腿三明治:

frogglebunwich =

{

test = function(cooker, names, tags) return (names.froglegs or names.froglegs_cooked) and tags.veggie end,

priority = 1,

foodtype = 《MEAT》,

health = TUNING.HEALING_MED,

hunger = TUNING.CALORIES_LARGE,

perishtime = TUNING.PERISH_SLOW,

sanity = TUNING.SANITY_TINY,

cooktime = 2,

},

這個的公式裡面出現了》or》,意味著至少要取生蛙腿(froglegs)或熟蛙腿(froglegs_cooked)中的一個。整個公式是說:有蛙腿(生或熟)且有蔬菜(tags.veggie)。運算優先順序:not > and > or,這裡為了先算or,就把or兩邊的東西用括弧括起來了。

太妃糖:

taffy =

{

test = function(cooker, names, tags) return tags.sweetener and tags.sweetener >= 3 and not tags.meat end,

priority = 10,

foodtype = 《VEGGIE》,

health = -TUNING.HEALING_SMALL,

hunger = TUNING.CALORIES_SMALL*2,

perishtime = TUNING.PERISH_SLOW,

sanity = TUNING.SANITY_MED,

cooktime = 2,

tags = {《honeyed》}

},

這個公式裡面有tags.sweetener >= 3,意味著甜度大於等於3。整個公式是說:甜度大於等於3,且不能有肉(not tags.meat)。那麼這裡就要用到之前cooking.lua裡面的資料了。在cooking.lua裡面搜索sweetener,找到唯一一行:

AddIngredientValues({《honey》, 《honeycomb》}, {sweetener=1}, true)

意味著蜂蜜和蜂房都可以提供1甜度。那麼我們就知道,至少需要三個蜂蜜或蜂房。當然,拿蜂房做菜非常的奢侈。

另外要注意太妃糖裡面health = -TUNING.HEALING_SMALL,這一行。注意等號後面的那個負號,意味著吃太妃糖要損血,減少的血量是HEALING_SMALL,具體值可以在tuning.lua裡面查詢。

茄子飯/茄子煲/茄子雜燴之類的名字:

stuffedeggplant =

{

test = function(cooker, names, tags) return (names.eggplant or names.eggplant_cooked) and tags.veggie and tags.veggie > 1 end,

priority = 1,

foodtype = 《VEGGIE》,

health = TUNING.HEALING_SMALL,

hunger = TUNING.CALORIES_LARGE,

perishtime = TUNING.PERISH_SLOW,

sanity = TUNING.SANITY_TINY,

temperature = TUNING.HOT_FOOD_BONUS_TEMP,

temperatureduration = TUNING.FOOD_TEMP_BRIEF,

cooktime = 2,

},

這裡面出現了稀有的溫度屬性:

temperature = TUNING.HOT_FOOD_BONUS_TEMP,

temperatureduration = TUNING.FOOD_TEMP_BRIEF,

temperature是溫度影響,HOT_FOOD_BONUS_TEMP,可以在tuning.lua裡面搜到是40,顯然吃這個會讓角色體溫升高。相對的還有COLD_FOOD_BONUS_TEMP=-40,意思也不用我說了吧。

temperatureduration是溫度持續時間,可以在tuning.lua裡面搜到FOOD_TEMP_BRIEF = 5。當然數值越長,持續越久。由於沒有裝顯示體溫的mod,也無力測試具體數值,有興趣的話大家可以自己試試。

魚排:

fishsticks =

{

test = function(cooker, names, tags) return tags.fish and names.twigs and (tags.inedible and tags.inedible <= 1) end,

priority = 10,

foodtype = 《MEAT》,

health = TUNING.HEALING_LARGE,

hunger = TUNING.CALORIES_LARGE,

perishtime = TUNING.PERISH_MED,

sanity = TUNING.SANITY_TINY,

cooktime = 2,

tags = {《catfood》}

},

公式裡面出現了tags.inedible,inedible在這裡可以解釋為《不可食度》,唯一具有該度的就是樹枝(twigs)。tags.inedible and tags.inedible <= 1就是說有不可食度大於0,不大於1。整個公式是說:有魚(tags.fish),有樹枝(names.twigs),且不可食度大於0,不大於1。再簡單點講就是有魚,有且僅有一個樹枝。

下面一條tags = {《catfood》},應該與RoG DLC中的貓相關。

SW裡面的咖啡:

coffee =

{

test = function(cooker, names, tags) return names.coffeebeans_cooked and (names.coffeebeans_cooked == 4 or (names.coffeebeans_cooked == 3 and (tags.dairy or tags.sweetener))) end,

priority = 30,

foodtype = 《VEGGIE》,

health = TUNING.HEALING_SMALL,

hunger = TUNING.CALORIES_TINY,

perishtime = TUNING.PERISH_MED,

sanity = -TUNING.SANITY_TINY,

caffeinedelta = TUNING.CAFFEINE_FOOD_BONUS_SPEED,

caffeineduration = TUNING.FOOD_SPEED_LONG,

cooktime = 0.5,

},

相信看到這裡的人應該能看懂公式了:4個烤咖啡豆或者3烤咖啡豆加一乳製品或蜂蜜。

下面比較特殊的兩行:

caffeinedelta = TUNING.CAFFEINE_FOOD_BONUS_SPEED,

caffeineduration = TUNING.FOOD_SPEED_LONG,

咖啡的效果在於加速,caffeinedelta為增加的速度量

tuning.lua中有:

CAFFEINE_FOOD_BONUS_SPEED = 5, — player base speed plus this, 6 is normal walk speed

好心的程式師用注釋告訴我們,普通行走速度為6,喝了咖啡再加5,將近翻倍。

然後持續時間caffeineduration = FOOD_SPEED_LONG = total_day_time / 2,喝咖啡加速效果持續半天。

飢荒 (Don’t Starve) 攻略彙整目錄

Back to top button