Tudo o que é "declarativo" em um mod (o que não é código) fica em arquivos .txt dentro de media/scripts/. Sempre com o mesmo formato:
module MiModulo
{
imports { Base, }
item ... { ... }
model ... { ... }
craftRecipe ... { ... }
fixing ... { ... }
}Você pode dividir isso em vários arquivos (items/, models/, recipes/), desde que todos usem o mesmo module.
Comida
Exemplo real: a salsicha (vienesa) do Completos Chilenos (o completo é o cachorro-quente chileno).
item Vienesa
{
DisplayCategory = Food,
ItemType = base:food,
Icon = Vienesa,
FoodType = Meat,
Weight = 0.1,
DaysFresh = 5,
DaysTotallyRotten = 9,
HungerChange = -8,
Calories = 150,
Carbohydrates = 2,
Lipids = 13,
Proteins = 6,
IsCookable = true,
GoodHot = true,
MinutesToCook = 10,
MinutesToBurn = 30,
CookingSound = FryingFood,
EvolvedRecipe = Pizza:8;Stew:8;Pie:8;Stir fry:8;Pasta:8;Rice:8,
}IsCookable,MinutesToCookeMinutesToBurnfazem ela ser cozinhável, e ela queima se você deixar tempo demais.GoodHot = true: melhora mais o humor se for comida quente.EvolvedRecipepermite usá-la como ingrediente nas receitas "evolutivas" do jogo (pizza, ensopado...). O número é quanto ela contribui.
Bebidas e "o que sobra depois"
Melón con Vino é um drinque que, quando termina, deixa a casca:
item MelonConVino
{
ItemType = base:food,
Tags = base:alcoholicbeverage,
ThirstChange = -40,
Alcoholic = TRUE,
AlcoholPower = 0.3,
EatType = Candrink,
CustomContextMenu = Drink,
CustomEatSound = DrinkingFromCan,
ReplaceOnUse = Melvin42.MelonCascara,
...
}CustomContextMenu = Drinktroca "Comer" por "Beber" no menu.ReplaceOnUseentrega outro item quando ele acaba: a casca.
Armas corpo a corpo
Um resumo do Sable de Luz. Os campos mais importantes:
item SableLuz
{
ItemType = base:weapon,
DisplayCategory = Weapon,
Categories = LongBlade,
SubCategory = Swinging,
TwoHandWeapon = true,
MinDamage = 8,
MaxDamage = 14,
MaxRange = 2.0,
MaxHitCount = 10,
CriticalChance = 35.0,
ConditionMax = 30,
ConditionLowerChanceOneIn = 30,
SwingAnim = Bat,
SwingSound = SableLuzSwing,
HitSound = SableLuzHit,
...
}Modelos 3D (no chão e na mão)
Um item pode ter um modelo para quando está na mão (StaticModel) e outro para quando está no chão (WorldStaticModel). Eles são declarados com blocos model:
model MelonConVinoGround
{
mesh = WorldItems/MelonConVino, <- models_X/WorldItems/MelonConVino.x
texture = MelonConVino, <- textures/MelonConVino.png
scale = 1.0,
}E no item, com o módulo na frente:
StaticModel = Melvin42.MelonConVino,
WorldStaticModel = Melvin42.MelonConVinoGround,Receitas (craftRecipe)
Exemplo real: montar um completo italiano (cachorro-quente chileno com abacate, tomate e maionese).
craftRecipe MakeCompletoItaliano
{
timedAction = Making,
time = 60,
Tags = InHandCraft;Cooking,
category = Cooking,
xpAward = Cooking:3,
inputs
{
item 1 [CompleteItaliano.PanCompleto;Base.BunsHotdog_single] flags[InheritFoodAge;ItemCount],
item 1 [CompleteItaliano.Vienesa;Base.Hotdog_single] flags[InheritFoodAge;ItemCount],
item 1 [CompleteItaliano.Palta;Base.Avocado] flags[InheritFoodAge;ItemCount],
item 1 [Base.Tomato] flags[InheritFoodAge;ItemCount],
item 2 [Base.MayonnaiseFull],
}
outputs
{
item 1 CompleteItaliano.CompletoItaliano,
}
}[A;B]aceita qualquer um dos dois: o pão do mod ou o pão de cachorro-quente do jogo. Assim o jogador não fica preso procurando um item exato.flags[InheritFoodAge]: o completo sai tão fresco (ou tão velho) quanto os ingredientes.Tags = InHandCraftpermite fazer com os itens na mão, sem mesa.
E uma receita com ferramenta que não se gasta:
craftRecipe SLEnsamblarSable
{
timedAction = MakingElectrical,
time = 400,
Tags = AnySurfaceCraft,
category = Electrical,
SkillRequired = Electricity:3,
xpAward = Electricity:30,
inputs
{
item 1 tags[base:screwdriver] mode:keep,
item 1 [SL.EmpunaduraSable],
item 1 [SL.CristalKyber],
item 2 [Base.Battery] mode:destroy,
}
outputs
{
item 1 SL.SableLuz,
}
}tags[base:screwdriver]aceita qualquer chave de fenda. Todas as tags estão na referência de tags, e os IDs dos itens vanilla (Base.X) na referência de itens.mode:keepdevolve a ferramenta;mode:destroyconsome o item.SkillRequiredexige um nível de habilidade expAwarddá experiência.
O nome visível da receita fica em Translate/<IDIOMA>/Recipes.json, com a chave igual ao nome da receita ("SLEnsamblarSable": "Ensamblar sable de luz"). Para português, use a pasta PTBR (por exemplo, "SLEnsamblarSable": "Montar sabre de luz").
Conserto (fixing)
fixing Fix Sable de Luz
{
Require : SableLuz,
Fixer : Battery; Electricity=2,
Fixer : ElectronicsScrap=2; Electricity=3,
}Cada Fixer é uma forma alternativa de consertar: qual material, quanto e qual habilidade exige.
Onde procurar mais
A fonte mais confiável são os scripts do próprio jogo: na pasta de instalação, media/scripts/. Se quiser saber como algo é feito, procure um item vanilla parecido. Os guias antigos da internet costumam ser do Build 41, e muitos já não funcionam.