Todo lo "declarativo" de un mod (lo que no es código) va en archivos .txt dentro de media/scripts/. Siempre con la misma forma:
module MiModulo
{
imports { Base, }
item ... { ... }
model ... { ... }
craftRecipe ... { ... }
fixing ... { ... }
}Puedes repartirlo en varios archivos (items/, models/, recipes/) mientras todos usen el mismo module.
Comida
Ejemplo real: la vienesa de Completos Chilenos.
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,MinutesToCookyMinutesToBurnla hacen cocinable, y se quema si la dejas mucho rato.GoodHot = true: da más ánimo si se come caliente.EvolvedRecipepermite usarla como ingrediente en las recetas "evolutivas" del juego (pizza, guiso...). El número es cuánto aporta.
Bebidas y "lo que queda después"
Melón con Vino es un trago que, al terminarlo, deja la cáscara:
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 = Drinkcambia "Comer" por "Beber" en el menú.ReplaceOnUseentrega otro ítem cuando se acaba: la cáscara.
Armas cuerpo a cuerpo
Un resumen del Sable de Luz. Los campos más 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 (en el suelo y en la mano)
Un ítem puede tener un modelo para cuando está en la mano (StaticModel) y otro para cuando está en el suelo (WorldStaticModel). Se declaran con bloques model:
model MelonConVinoGround
{
mesh = WorldItems/MelonConVino, <- models_X/WorldItems/MelonConVino.x
texture = MelonConVino, <- textures/MelonConVino.png
scale = 1.0,
}Y en el ítem, con el módulo adelante:
StaticModel = Melvin42.MelonConVino,
WorldStaticModel = Melvin42.MelonConVinoGround,Recetas (craftRecipe)
Ejemplo real: armar un completo italiano.
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]acepta cualquiera de los dos: el pan del mod o el pan de hot dog del juego. Así el jugador no queda atrapado buscando un ítem exacto.flags[InheritFoodAge]: el completo sale tan fresco (o tan viejo) como sus ingredientes.Tags = InHandCraftpermite hacerlo con los ítems en la mano, sin mesa.
Y una receta con herramienta que no 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]acepta cualquier destornillador. Todos los tags están en la referencia de tags, y los IDs de los ítems vanilla (Base.X) en la referencia de ítems.mode:keepdevuelve la herramienta;mode:destroyconsume el ítem.SkillRequiredpide nivel de habilidad yxpAwardda experiencia.
El nombre visible de la receta va en Translate/<IDIOMA>/Recipes.json, con la clave igual al nombre de la receta ("SLEnsamblarSable": "Ensamblar sable de luz").
Reparación (fixing)
fixing Fix Sable de Luz
{
Require : SableLuz,
Fixer : Battery; Electricity=2,
Fixer : ElectronicsScrap=2; Electricity=3,
}Cada Fixer es una forma alternativa de reparar: qué material, cuánto, y qué habilidad pide.
Dónde buscar más
La fuente más confiable son los scripts del propio juego: en la carpeta de instalación, media/scripts/. Si quieres saber cómo se hace algo, busca un ítem vanilla parecido. Las guías viejas de internet suelen ser de Build 41 y muchas ya no funcionan.