Modding:Basic Block/es: Difference between revisions

From Vintage Story Wiki
No edit summary
(Updating to match new version of source page)
Tags: Mobile edit Mobile web edit
 
(32 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
<div class="mw-translate-fuzzy">
{{GameVersion|1.15}}
{{GameVersion|1.15}}
__FORCETOC__
__FORCETOC__
</div>


<div class="mw-translate-fuzzy">
Por favor, lee primero el tutorial [[Getting Started with Advanced Modding/es#Dominios|Primeros pasos]], si no lo has hecho ya. Este tutorial debería introducirte en lo básico de añadir un bloque al juego usando archivos JSON. Si quieres añadir un bloque con funcionalidad deberías consultar el tutorial de [[Advanced Blocks|Bloques Avanzados]]. Hay una lista completa de todas las propiedades que se pueden definir dentro del archivo json [[Block Json Properties/es|aquí]].
Por favor, lee primero el tutorial [[Getting Started with Advanced Modding/es#Dominios|Primeros pasos]], si no lo has hecho ya. Este tutorial debería introducirte en lo básico de añadir un bloque al juego usando archivos JSON. Si quieres añadir un bloque con funcionalidad deberías consultar el tutorial de [[Advanced Blocks|Bloques Avanzados]]. Hay una lista completa de todas las propiedades que se pueden definir dentro del archivo json [[Block Json Properties/es|aquí]].
</div>


= Un Bloque Simple =
= Un Bloque Simple =
Line 15: Line 19:
== La Textura ==
== La Textura ==


Utilizaremos esta textura para nuestro bloque: [[File:Gold block.png]].
Utilizaremos esta textura para nuestro bloque: [[File:Gold block.png]]. <br>
(Para crear tus propias texturas, puedes utilizar programas como [https://www.dotpdn.com/downloads/pdn.html/ PaintDotNet(gratuito)], [https://www.piskelapp.com/ Piskel(gratuito)], or [https://github.com/aseprite/aseprite/ Aseprite (código abierto gratuito o precompilado de pago)])


Ahora tenemos que colocar la textura en el lugar adecuado para poder utilizarla más adelante. Por lo tanto tienes que renombrar la textura a <code>mitexturadeoro.png</code> y ponerla dentro de <code>assets/mibloquedeoro/textures/block/</code> en tu espacio de trabajo (tienes que crear esas carpetas primero). <code>mygoldblock</code> será nuestro dominio.
Ahora tenemos que colocar la textura en el lugar adecuado para poder utilizarla más adelante. Por lo tanto tienes que renombrar la textura a <code>mitexturadeoro.png</code> y ponerla dentro de <code>assets/mibloquedeoro/textures/block/</code> en tu espacio de trabajo (tienes que crear esas carpetas primero). <code>mygoldblock</code> será nuestro dominio.
Line 23: Line 28:
Lo siguiente que vamos a necesitar es un archivo json que determinará las propiedades del bloque. Por ahora lo mantendremos sencillo y trabajaremos sólo con propiedades simples. Si quieres hacer cosas más avanzadas, puedes echar un vistazo a [[Block Json Properties/es|Vista general de las propiedades de los bloques]].
Lo siguiente que vamos a necesitar es un archivo json que determinará las propiedades del bloque. Por ahora lo mantendremos sencillo y trabajaremos sólo con propiedades simples. Si quieres hacer cosas más avanzadas, puedes echar un vistazo a [[Block Json Properties/es|Vista general de las propiedades de los bloques]].


Ahora necesitas crear un nuevo archivo json en tu editor (recomendamos usar un editor con resaltado de sintaxis, como [https://notepad-plus-plus.org/ Notepad++] o Visual Studio).
Ahora necesitas crear un nuevo archivo json en tu editor (recomendamos usar un editor con resaltado de sintaxis, como [https://notepad-plus-plus.org/ Notepad++] o [https://www.sublimetext.com/ Sublime Text]. Si vas a tener muchos archivos json o algo de C#, entonces [https://code.visualstudio.com/ Visual Studio Code] es también una buena elección).


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
code: "mibloquedeoro",
"code": "mibloquedeoro",
creativeinventory: { "general": ["*"] },
"creativeinventory": { "general": ["*"] },
blockmaterial: "Stone",
"blockmaterial": "Stone",
drawtype: "Cube",
"drawtype": "Cube",
textures: {
"textures": {
all: { base: "block/mygoldtexture" }
"all": { "base": "block/mygoldtexture" }
},
},
resistance: 3.5,
"resistance": 3.5,
sounds: {
"sounds": {
"place": "game:block/anvil",
"place": "game:block/anvil",
"walk": "game:walk/stone"
"walk": "game:walk/stone"
Line 70: Line 75:
Además necesitas añadir un archivo <code>modinfo.json</code>, echa un vistazo a [[Game_Content_Mod/es|este tutorial]].
Además necesitas añadir un archivo <code>modinfo.json</code>, echa un vistazo a [[Game_Content_Mod/es|este tutorial]].


Para instalar el mod, navega hasta la carpeta [[Vintagestory folder/es|Carpeta Vintagestory]] y colócala dentro de la carpeta de mods.
Para instalar el mod, navega hasta la carpeta [[VintagestoryData folder/es|Carpeta Vintagestory]] y colócala dentro de la carpeta de mods.


[https://wiki.vintagestory.at/images/4/4c/MyGoldBlockMod.zip MyGoldBlockMod.zip]
[https://wiki.vintagestory.at/images/4/4c/MyGoldBlockMod.zip MyGoldBlockMod.zip]
Line 89: Line 94:
Ahora tenemos que añadir esas nuevas texturas al archivo json.
Ahora tenemos que añadir esas nuevas texturas al archivo json.
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
textures: {
"textures": {
all: {  
"all": {  
base: "block/mitexturadeoro",
"base": "block/mitexturadeoro",
alternates: [{base: "block/mitexturadeoro1" }, {base: "block/mitexturadeoro2" }, {base: "block/mitexturadeoro3" }],
"alternates": [{"base": "block/mitexturadeoro1" }, {"base": "block/mitexturadeoro2" }, {"base": "block/mitexturadeoro3" }],
},
},
},
},
Line 113: Line 118:
Así que en primer lugar necesitamos algunas nuevas texturas de nuevo: [[File:Myirontexture.png]] [[File:Myirontexture1.png]] [[File:Myirontexture2.png]] y [[File:Myirontexture3.png]]
Así que en primer lugar necesitamos algunas nuevas texturas de nuevo: [[File:Myirontexture.png]] [[File:Myirontexture1.png]] [[File:Myirontexture2.png]] y [[File:Myirontexture3.png]]


<div class="mw-translate-fuzzy">
Ahora tenemos que cambiar algunas cosas en nuestro archivo json. Podemos añadir todo tipo de grupos diferentes, pero por ahora lo mantendremos simple. Vamos a añadir un grupo llamado <code>type</code>, con los estados <code>oro</code> y <code>hierro</code>. Puedes usar el código de grupo que quieras.
Ahora tenemos que cambiar algunas cosas en nuestro archivo json. Podemos añadir todo tipo de grupos diferentes, pero por ahora lo mantendremos simple. Vamos a añadir un grupo llamado <code>type</code>, con los estados <code>oro</code> y <code>hierro</code>. Puedes usar el código de grupo que quieras.
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
variantgroups: [
"variantgroups": [
{ code: "type", states: ["oro", "hierro"] }
{ "code": "type", "states": ["oro", "hierro"] }
],
],
</syntaxhighlight>
</syntaxhighlight>
</div>


Lo siguiente que tenemos que hacer es establecer las texturas por tipo. Así que eliminamos nuestra propiedad <code>texture</code> y la sustituimos por una nueva propiedad <code>texturesbytype</code>, que nos permitirá establecer diferentes texturas para cada tipo.
Lo siguiente que tenemos que hacer es establecer las texturas por tipo. Así que eliminamos nuestra propiedad <code>texture</code> y la sustituimos por una nueva propiedad <code>texturesbytype</code>, que nos permitirá establecer diferentes texturas para cada tipo.
Line 126: Line 133:
texturesbytype: {
texturesbytype: {
"*-oro": {
"*-oro": {
all: {  
"all": {  
base: "block/mitexturadeoro",
"base": "block/mitexturadeoro",
alternates: [{base: "block/mitexturadeoro1" }, {base: "block/mitexturadeoro2" }, {base: "block/mitexturadeoro3" }],
alternates: [{"base": "block/mitexturadeoro1" }, {"base": "block/mitexturadeoro2" }, {"base": "block/mitexturadeoro3" }],
},
},
},
},
"*-iron": {
"*-iron": {
all: {  
"all": {  
base: "block/mitexturadehierro",
"base": "block/mitexturadehierro",
alternates: [{base: "block/mitexturadehierro1" }, {base: "block/mitexturadehierro2" }, {base: "block/mitexturadehierro3" }],
alternates: [{"base": "block/mitexturadehierro1" }, {"base": "block/mitexturadehierro2" }, {"base": "block/mitexturadehierro3" }],
},
},
}
}
Line 146: Line 153:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
textures: {
textures: {
all: {  
"all": {  
base: "block/mitexturade{type}",
"base": "block/mitexturade{type}",
alternates: [{base: "block/mitexturade{type}1" }, {base: "block/mitexturade{type}2" }, {base: "block/mitexturade{type}3" }],
"alternates": [{base: "block/mitexturade{type}1" }, {"base": "block/mitexturade{type}2" }, {"base": "block/mitexturade{type}3" }],
},
},
},
},
Line 156: Line 163:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
code: "myshinyblock",
"code": "mibloquebrillante",
creativeinventory: { "general": ["*"] },
"creativeinventory": { "general": ["*"] },
variantgroups: [
"variantgroups": [
{ code: "type", states: ["oro", "hierro"] }
{ "code": "type", "states": ["oro", "hierro"] }
],
],
blockmaterial: "Stone",
"blockmaterial": "Stone",
drawtype: "cube",
"drawtype": "cube",
textures: {
"textures": {
all: {  
"all": {  
base: "block/mitexturade{type}",
"base": "block/mitexturade{type}",
alternates: [{base: "block/mitexturade{type}1" }, {base: "block/mitexturade{type}2" }, {base: "block/mitexturade{type}3" }],
"alternates": [{"base": "block/mitexturade{type}1" }, {"base": "block/mitexturade{type}2" }, {"base": "block/mitexturade{type}3" }],
},
},
},
},
resistance: 3.5,
"resistance": 3.5,
sounds: {
"sounds": {
"place": "game:block/anvil",
"place": "game:block/anvil",
"walk": "game:walk/stone"
"walk": "game:walk/stone"
Line 185: Line 192:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
variantgroups: [
variantgroups: [
{ code: "type", states: ["oro", "hierro"] },
{ "code": "type", "states": ["oro", "hierro"] },
{ code: "condition", states: ["bien", "usado"]}
{ "code": "condition", "states": ["bien", "usado"]}
],
],
</syntaxhighlight>
</syntaxhighlight>
Line 193: Line 200:


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
texturesbytype: {
"texturesbytype": {
"*-bueno": {
"*-bueno": {
all: {  
"all": {  
base: "block/mitexturade{type}",
"base": "block/mitexturade{type}",
},
},
},
},
"*-usado": {
"*-usado": {
all: {  
"all": {  
base: "block/mitexturade{type}",
"base": "block/mitexturade{type}",
alternates: [{base: "block/mitexturade{type}1" }, {base: "block/mitexturade{type}2" }, {base: "mitexturade{type}3" }],
alternates: [{"base": "block/mitexturade{type}1" }, {"base": "block/mitexturade{type}2" }, {"base": "mitexturade{type}3" }],
},
},
},
},
Line 214: Line 221:
== Formas Personalizadas ==
== Formas Personalizadas ==


In order to use a custom shape we need to create one first. The engine only supports the model/shape format that's created by the [[VS Model Creator]].
Para poder utilizar una forma personalizada, primero tenemos que crearla. El motor sólo soporta el formato modelo/forma creado por el [[VS Model Creator/es|Creador de modelos VS]].


Once you have created your own shape you need to export it as a json file, create a new folder <code>assets/myshinyblock/shapes/block/</code> and save the file in there. In our example we will use this model [https://wiki.vintagestory.at/images/3/38/Myshinymodel.json Myshinymodel.json] and move it to <code>assets/myshinyblock/shapes/block/myshinymodel.json</code>.
Una vez que hayas creado tu propia forma necesitas exportarla como un archivo json, crea una nueva carpeta <code>assets/mibloquebrillante/shapes/block/</code> y guarda el archivo ahí. En nuestro ejemplo usaremos este modelo [https://wiki.vintagestory.at/images/3/38/Myshinymodel.json Mimodelobrillante.json] y lo moveremos a <code>assets/mibloquebrillante/shapes/block/mimodelobrillante.json</code>. Ahora tenemos que especificar el modelo dentro de nuestro tipo de bloque archivo json.
Now we need to specify the model inside our block type json file.


Therefore we will change the drawtype from <code>cube</code> to <code>json</code>:
<div class="mw-translate-fuzzy">
Por lo tanto cambiaremos el drawtype de <code>cube</code> a <code>json</code>:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
drawtype: "json",
drawtype: "json",
</syntaxhighlight>
</syntaxhighlight>
</div>


and the shape to <code>myshinymodel</code>
<div class="mw-translate-fuzzy">
y la forma a <code>mimodelobrillante</code>
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
shape: { base: "block/myshinymodel" },
shape: { base: "block/mimodelobrillante" },
</syntaxhighlight>
</syntaxhighlight>
</div>


Although this would be enough theoretically, we also should determine this block as being non-solid, to prevent graphical glitches.
<div class="mw-translate-fuzzy">
Aunque en teoría esto sería suficiente, también deberíamos determinar que este bloque no es sólido, para evitar fallos gráficos.
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
sidesolid: {
sidesolid: {
Line 238: Line 249:
},
},
</syntaxhighlight>
</syntaxhighlight>
</div>


So let's run the game. This is how it should look like:
Así que vamos a ejecutar el juego. Así es como debería verse:


[[File:2017-01-12 14-06-27.png|700px]]
[[File:2017-01-12 14-06-27.png|700px]]


== Variants of Custom Shapes ==
== Variantes de formas personalizadas ==


I created another model for the blocks in good condition ([https://wiki.vintagestory.at/images/f/fa/Myshinymodel1.json myshinymodel1.json]), because they should look more awesome, than the ones in used conditions. Therefore we need to copy the json file to <code>assets/myshinyblock/shapes/block/</code> as well.
He creado otro modelo para los bloques en buen estado ([https://wiki.vintagestory.at/images/f/fa/Myshinymodel1.json mimodelobrillante1.json]), porque deben parecer más impresionante, que los que están en condiciones usadas. Por lo tanto tenemos que copiar el archivo json a <code>assets/mibloquebrillante/shapes/block/</code> también.


In order to specify the shape by type we need to remove the property <code>shape</code> and replace it with <code>shapebytype</code>:
<div class="mw-translate-fuzzy">
Para especificar la forma por tipo tenemos que eliminar la propiedad <code>shape</code> y sustituirla por <code>shapebytype</code>:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
shapebytype: {
shapebytype: {
"*-good": {
"*-bien": {
base: "block/myshinymodel1",
base: "block/mimodelobrillante1",
},
},
"*-used": {
"*-usado": {
base: "block/myshinymodel",
base: "block/mimodelobrillante",
},
},
},
},
</syntaxhighlight>
</syntaxhighlight>
</div>


[[File:2017-01-12 14-51-45.png|700px]]
[[File:2017-01-12 14-51-45.png|700px]]
Line 264: Line 278:
Puedes encontrar el mod completo aquí como referencia:
Puedes encontrar el mod completo aquí como referencia:


[https://wiki.vintagestory.at/images/4/42/MyShinyBlockMod.zip MyShinyBlockMod]
[https://wiki.vintagestory.at/images/4/42/MyShinyBlockMod.zip MiBloqueBrillante]


= Seguir avanzando =
= Seguir avanzando =


El ejemplo que se muestra aquí, aunque aparentemente complejo, sólo araña la superficie de lo que los tipos de bloque son capaces de hacer en Vintage Story. Se recomienda encarecidamente que experimentes o al menos te familiarices con todas las propiedades de bloque conocidas antes de pasar a los mods de código. La mejor forma de hacerlo es echar un vistazo a la página '''[[Modding:Block Json Properties/es| Propiedades de los Bloques]]''', que contiene una lista actualizada de todas las propiedades JSON de los bloques incorporadas actualmente al juego. La mayoría de las propiedades de la lista también tienen archivos de referencia que puedes buscar en la carpeta Vintage Story Assets. Si no sabes dónde está, puedes encontrar tutoriales para cada sistema operativo en la página [[Modding:The Asset System/es| Sistema de Recursos]].  
<div class="mw-translate-fuzzy">
El ejemplo que se muestra aquí, aunque aparentemente complejo, sólo araña la superficie de lo que los tipos de bloque son capaces de hacer en Vintage Story. Se recomienda encarecidamente que experimentes o al menos te familiarices con todas las propiedades de bloque conocidas antes de pasar a los mods de código. La mejor forma de hacerlo es echar un vistazo a la página '''[[Modding:Block Json Properties/es| Propiedades de los Bloques]]''', que contiene una lista actualizada de todas las propiedades JSON de los bloques incorporadas actualmente al juego. La mayoría de las propiedades de la lista también tienen archivos de referencia que puedes buscar en la carpeta Vintage Story Assets. Si no sabes dónde está, puedes encontrar tutoriales para cada sistema operativo en la página [[Modding:The Asset System/es| Sistema de Recursos]].
</div>


Si aún no lo has hecho, te sugerimos que también eches un vistazo a las páginas '''[[Modding:Basic Item/es | Items Básicos]]''' y '''[[Modding:Basic Entity/es | Entidades Básicas]]''' para aprender cómo se añaden al juego objetos y entidades JSON simples.  
Si aún no lo has hecho, te sugerimos que también eches un vistazo a las páginas '''[[Modding:Basic Item/es | Items Básicos]]''' y '''[[Modding:Basic Entity/es | Entidades Básicas]]''' para aprender cómo se añaden al juego objetos y entidades JSON simples.  
Line 278: Line 294:
<br><youtube>BAr7etxj-1o</youtube> <youtube>fnFFh_enXiA</youtube>
<br><youtube>BAr7etxj-1o</youtube> <youtube>fnFFh_enXiA</youtube>


<div class="mw-translate-fuzzy">
{{Navbox/modding|Vintage Story}}
{{Navbox/modding|Vintage Story}}
</div>

Latest revision as of 12:54, 28 March 2024

Other languages:

This page was last verified for Vintage Story version 1.15.


Por favor, lee primero el tutorial Primeros pasos, si no lo has hecho ya. Este tutorial debería introducirte en lo básico de añadir un bloque al juego usando archivos JSON. Si quieres añadir un bloque con funcionalidad deberías consultar el tutorial de Bloques Avanzados. Hay una lista completa de todas las propiedades que se pueden definir dentro del archivo json aquí.

Un Bloque Simple

Para empezar vamos a crear algo sencillo. En nuestro ejemplo añadiremos un bloque de oro normal y corriente al juego (será sólo para uso decorativo). Llamemos a este mod MiBloqueDeOro.

Espacio de trabajo

En primer lugar es útil crear una nueva carpeta para mantener todo limpio. Dentro de este espacio de trabajo crearemos el mod en sí, y más tarde lo pondremos en un archivo zip, para poder probarlo y distribuirlo a otras personas.

La Textura

Utilizaremos esta textura para nuestro bloque: Gold block.png.
(Para crear tus propias texturas, puedes utilizar programas como PaintDotNet(gratuito), Piskel(gratuito), or Aseprite (código abierto gratuito o precompilado de pago))

Ahora tenemos que colocar la textura en el lugar adecuado para poder utilizarla más adelante. Por lo tanto tienes que renombrar la textura a mitexturadeoro.png y ponerla dentro de assets/mibloquedeoro/textures/block/ en tu espacio de trabajo (tienes que crear esas carpetas primero). mygoldblock será nuestro dominio.

El Archivo del Bloque

Lo siguiente que vamos a necesitar es un archivo json que determinará las propiedades del bloque. Por ahora lo mantendremos sencillo y trabajaremos sólo con propiedades simples. Si quieres hacer cosas más avanzadas, puedes echar un vistazo a Vista general de las propiedades de los bloques.

Ahora necesitas crear un nuevo archivo json en tu editor (recomendamos usar un editor con resaltado de sintaxis, como Notepad++ o Sublime Text. Si vas a tener muchos archivos json o algo de C#, entonces Visual Studio Code es también una buena elección).

{
	"code": "mibloquedeoro",
	"creativeinventory": { "general": ["*"] },
	"blockmaterial": "Stone",
	"drawtype": "Cube",
	"textures": {
		"all": { "base": "block/mygoldtexture" }
	},
	"resistance": 3.5,
	"sounds": {
		"place": "game:block/anvil",
		"walk": "game:walk/stone"
	}
}

Short explanation of each line:

  • code: Un identificador único para su bloque.
  • creativeinventory: Las pestañas del inventario creativo en las que debe mostrarse el bloque (actualmente sólo hay 1 pestaña disponible).
  • shape: Qué modelo debe utilizar el bloque
  • drawtype: Determina el sistema de dibujo, por ejemplo, utilice 'cube' para cubos completos normales o 'json' para formas creadas a medida.
  • textures: Qué texturas aplicar. En el caso de bloques sencillos, puede definir una única textura para "todas" las caras o definir una para cada cara ('north', 'east', 'west', 'south', 'up', 'down')
  • resistance: Cuántos segundos de tiempo real se tarda en romper el bloque sin herramientas
  • sounds: Los sonidos que se reproducirán al colocar/romper o caminar sobre el bloque. Hay que añadir el prefijo game, ya que nuestro bloque tiene el dominio mibloquedeoro. De lo contrario, intentaría encontrar esos sonidos dentro de nuestro dominio.

Ahora guarda el archivo en tu espacio de trabajo dentro de assets/mibloquedeoro/blocktypes/ y nómbralo mibloquedeoro.json.

Poner nombre al bloque

Para dar un nombre apropiado al bloque, necesitamos crear otro archivo json y guardarlo con la siguiente ruta: assets/mibloquedeoro/lang/en.json

{
	"block-mibloquedeoro": "Bloque de oro"
}

Pruebas/ Distribución

Lo último que tenemos que hacer es crear un archivo zip de la carpeta assets dentro de nuestro espacio de trabajo. O bien utilizas un programa externo (como WinRAR o 7Zip) o haces clic con el botón derecho del ratón en la carpeta assets y pulsas Enviar a -> Carpeta comprimida (zip). Eventualmente puedes renombrar el archivo zip a MiBloqueDeOro.zip. El archivo zip puede ser utilizado para propósitos de prueba o puede enviarlo a otras personas para que puedan utilizarlo también.

Además necesitas añadir un archivo modinfo.json, echa un vistazo a este tutorial.

Para instalar el mod, navega hasta la carpeta Carpeta Vintagestory y colócala dentro de la carpeta de mods.

MyGoldBlockMod.zip

2017-01-10 12-33-45.png.

Sugerencia: Utiliza el comando cliente .tfedit si quieres ajustar la posición, rotación y escala del bloque en Manos, en GUI, al dejarlo caer al suelo o en modo tercera persona.

Propiedades avanzadas

Ahora haremos cosas más avanzadas con nuestro precioso bloque dorado. Añadiremos texturas aleatorias, distintas variantes y formas personalizadas. Así que empecemos.

Texturas Random

Así que en primer lugar necesitamos algunas texturas más. He creado algunas variantes del bloque de oro Gold block.png Mygoldtexture1.png Mygoldtexture2.png Mygoldtexture3.png. Para mantener el nombre de las texturas simple he añadido un número a cada nombre de textura (mitexturadeoro.png,mitexturadeoro1.png,mitexturadeoro2.png y mitexturadeoro3.png)

Ahora tenemos que añadir esas nuevas texturas al archivo json.

	"textures": {
		"all": { 
			"base": "block/mitexturadeoro",
			"alternates": [{"base": "block/mitexturadeoro1" }, {"base": "block/mitexturadeoro2" }, {"base": "block/mitexturadeoro3" }],
		},
	},

Finalmente guárdelo y ejecute Vintagestory de nuevo. Ahora debería ver un resultado como este:

2017-01-10 12-33-45.png.

Por supuesto, puede añadir más textura si lo desea.

Variantes

El oro es lo mejor, pero el hierro también es genial... así que, ¿qué hacemos? Añadamos otra variante de este bloque, porque a todos nos encanta el hierro.

Podría duplicar el archivo blocktype y cambiar el nombre de plata a oro en todos los lugares, o simplemente puede añadir otra variante al blocktype existente.

Variantgroup: Type

Así que en primer lugar necesitamos algunas nuevas texturas de nuevo: Myirontexture.png Myirontexture1.png Myirontexture2.png y Myirontexture3.png

Ahora tenemos que cambiar algunas cosas en nuestro archivo json. Podemos añadir todo tipo de grupos diferentes, pero por ahora lo mantendremos simple. Vamos a añadir un grupo llamado type, con los estados oro y hierro. Puedes usar el código de grupo que quieras.

	"variantgroups": [
		{ "code": "type", "states": ["oro", "hierro"] }
	],

Lo siguiente que tenemos que hacer es establecer las texturas por tipo. Así que eliminamos nuestra propiedad texture y la sustituimos por una nueva propiedad texturesbytype, que nos permitirá establecer diferentes texturas para cada tipo.


	texturesbytype: {
		"*-oro": {
			"all": { 
				"base": "block/mitexturadeoro",
				alternates: [{"base": "block/mitexturadeoro1" }, {"base": "block/mitexturadeoro2" }, {"base": "block/mitexturadeoro3" }],
			},
		},
		"*-iron": {
			"all": { 
				"base": "block/mitexturadehierro",
				alternates: [{"base": "block/mitexturadehierro1" }, {"base": "block/mitexturadehierro2" }, {"base": "block/mitexturadehierro3" }],
			},
		}
	},

Cada grupo se añadirá uno detrás de otro al código de bloques myblockname-mygroup-mysecondgroup. En nuestro ejemplo podemos ahorrarnos escribir unas cuantas letras de más utilizando el comodín *.

También se puede utilizar una definición más compacta. Debido a la forma en que nombramos nuestras texturas podemos usar el marcador de posición {type} para determinar el nombre de la textura, así que en lugar de manejar cada caso individualmente podemos escribirlo así:

	textures: {
		"all": { 
			"base": "block/mitexturade{type}",
			"alternates": [{base: "block/mitexturade{type}1" }, {"base": "block/mitexturade{type}2" }, {"base": "block/mitexturade{type}3" }],
		},
	},

La definición completa del tipo de bloque podría ser la siguiente:

{
	"code": "mibloquebrillante",
	"creativeinventory": { "general": ["*"] },
	"variantgroups": [
		{ "code": "type", "states": ["oro", "hierro"] }
	],
	"blockmaterial": "Stone",
	"drawtype": "cube",
	"textures": {
		"all": { 
			"base": "block/mitexturade{type}",
			"alternates": [{"base": "block/mitexturade{type}1" }, {"base": "block/mitexturade{type}2" }, {"base": "block/mitexturade{type}3" }],
		},
	},
	"resistance": 3.5,
	"sounds": {
		"place": "game:block/anvil",
		"walk": "game:walk/stone"
	}
}

2017-01-10 14-36-58.png

Variantgroup: Condition

Vamos a añadir otro grupo a nuestro bloque, que determinará el estado de este bloque. Habrá dos estados bien y usado. Podemos añadir este grupo añadiendo otra propiedad dentro de variantgroups[].

	variantgroups: [
		{ "code": "type", "states": ["oro", "hierro"] },
		{ "code": "condition", "states": ["bien", "usado"]}
	],

Para terminar de implementar este segundo grupo tenemos que ocuparnos de todos los casos. Queremos que los bloques buenos sólo usen la textura base y que los bloques usados también usen sus texturas aleatorias:

	"texturesbytype": {
		"*-bueno": {
			"all": { 
				"base": "block/mitexturade{type}",
			},
		},
		"*-usado": {
			"all": { 
				"base": "block/mitexturade{type}",
				alternates: [{"base": "block/mitexturade{type}1" }, {"base": "block/mitexturade{type}2" }, {"base": "mitexturade{type}3" }],
			},
		},
	},

Los bloques en buen estado están a la izquierda, mientras que los usados están a la derecha:

2017-01-10 15-02-38.png

Formas Personalizadas

Para poder utilizar una forma personalizada, primero tenemos que crearla. El motor sólo soporta el formato modelo/forma creado por el Creador de modelos VS.

Una vez que hayas creado tu propia forma necesitas exportarla como un archivo json, crea una nueva carpeta assets/mibloquebrillante/shapes/block/ y guarda el archivo ahí. En nuestro ejemplo usaremos este modelo Mimodelobrillante.json y lo moveremos a assets/mibloquebrillante/shapes/block/mimodelobrillante.json. Ahora tenemos que especificar el modelo dentro de nuestro tipo de bloque archivo json.

Por lo tanto cambiaremos el drawtype de cube a json:

	drawtype: "json",

y la forma a mimodelobrillante

	shape: { base: "block/mimodelobrillante" },

Aunque en teoría esto sería suficiente, también deberíamos determinar que este bloque no es sólido, para evitar fallos gráficos.

	sidesolid: {
		all: "false"
	},
	sideopaque: {
		all: "false"
	},

Así que vamos a ejecutar el juego. Así es como debería verse:

2017-01-12 14-06-27.png

Variantes de formas personalizadas

He creado otro modelo para los bloques en buen estado (mimodelobrillante1.json), porque deben parecer más impresionante, que los que están en condiciones usadas. Por lo tanto tenemos que copiar el archivo json a assets/mibloquebrillante/shapes/block/ también.

Para especificar la forma por tipo tenemos que eliminar la propiedad shape y sustituirla por shapebytype:

	shapebytype: {
		"*-bien": {
			base: "block/mimodelobrillante1",
		},
		"*-usado": {
			base: "block/mimodelobrillante",
		},
	},

2017-01-12 14-51-45.png

Descarga de mods

Puedes encontrar el mod completo aquí como referencia:

MiBloqueBrillante

Seguir avanzando

El ejemplo que se muestra aquí, aunque aparentemente complejo, sólo araña la superficie de lo que los tipos de bloque son capaces de hacer en Vintage Story. Se recomienda encarecidamente que experimentes o al menos te familiarices con todas las propiedades de bloque conocidas antes de pasar a los mods de código. La mejor forma de hacerlo es echar un vistazo a la página Propiedades de los Bloques, que contiene una lista actualizada de todas las propiedades JSON de los bloques incorporadas actualmente al juego. La mayoría de las propiedades de la lista también tienen archivos de referencia que puedes buscar en la carpeta Vintage Story Assets. Si no sabes dónde está, puedes encontrar tutoriales para cada sistema operativo en la página Sistema de Recursos.

Si aún no lo has hecho, te sugerimos que también eches un vistazo a las páginas Items Básicos y Entidades Básicas para aprender cómo se añaden al juego objetos y entidades JSON simples.

Sin embargo, si te apetece dar el salto a los mods de código, entonces querrás empezar por configurar tu Entorno de desarrollo.

Vídeo tutorial: Cómo hacer mods sin programar (en ruso)

Gracias a ZigTheHedge por un vídeo tan detallado