sábado, 26 de diciembre de 2015

Minetest Modding (III) - CraftItems

En el capítulo anterior vimos como registrar nodos. Dijimos que un nodo es un bloque que podemos colocar. Ahora veremos los craftItems o elementos de crafteo que se usan como ingredientes para generar otros objetos, o bien para el uso del jugador como la comida.

Comiendo nubes rosas

Como veréis funciona de una forma muy parecida a los nodos. Si para los primeros usábamos el método (o para nosotros instrucción) minetest.register_node, para un elemento de crafteo usaremos minetest.register_craftitem y con una sintaxis muy parecida... veamos un ejemplo.

Vamos a crear una nube rosa que nos de vida al comerla:

unchi64.png

minetest.register_craftitem("furnimod:unchi", {
    description = "Unchi",
    inventory_image = "unchi64.png",
    on_use = minetest.item_eat(20)
})

Casi todo lo anterior ya sabemos como funciona del capítulo anterior.

Aquí lo que hacemos diferente es utilizar un evento (nosotros lo denominaremos acción) llamado on_use.

Lo que hace un evento es que cuando se da la acción (en este caso usar) se dispara un método o instrucción de los más de 170 que hay, que en este caso es comer. En vez de on_use que dispara el evento al pulsar el botón izquierdo del ratón, podríamos haber usado otros eventos como on_place que dispara la acción con el botón derecho, o on_drop que lo dispara cuando lo soltamos con la [Q].

Es decir: Podríamos crear un objeto que se comiera con la [Q] en lugar de con el botón izquierdo.

El parámetro que tiene mintest.item_eat es 20. Un corazón son dos puntos. Así que 20 son diez corazones. Podemos hacer que nuestra comida recupere los corazones que queramos cambiando el parámetro.

Pero podríamos hacer más cosas con minetest.item_eat. Mirad esto:

fly64.png

minetest.register_craftitem("furnimod:fly", {
    description = "Fly",
    inventory_image = "fly64.png",
    stack_max = 50
})

minetest.register_craftitem("furnimod:unchi", {
    description = "Unchi",
    inventory_image = "unchi64.png",
    on_use = minetest.item_eat(1,"furnimod:fly")
})

Definimos dos craftItems uno llamado Fly y otro, que ya conocemos, Unchi. Si os fijáis en el evento on_use de la nube rosa, además de darnos medio corazón de vida al comerla, añade a nuestro inventario una mosca. Es el efecto que podemos utilizar para que al comer pan nos queden migas, al comer un pollo aparezca en nuestro inventario huesos o al comer una manzana un logo de Apple.

stack_max

Además si os fijáis en el código de la mosca aparece un nuevo atributo llamado stack_max. Nos dice que en una misma casilla del inventario sólo podemos llevar 50 moscas. Esto mismo lo podemos usar en los nodos, como en el Pink Block del capítulo anterior.

stack_max = numero     (Si no lo ponemos coge 99)

liquids_pointable

Es un valor booleano, que como sabemos puede coger los valores de verdadero (true) y falso (false). Indica si con el objeto podemos apuntar sobre los líquidos para hacer algo. Un ejemplo es el cubo que trae minetest 'de fábrica' (el empty bucket) que se llena al usarlo sobre agua o lava, otro ejemplo podría ser una caña para pescar (total ya tenemos las moscas como cebo) o un extintor para detener la lava o una varita mágica para congelar el agua... lo que se os ocurra...   :-)

liquids_pointable = false  //   liquids_pointable = true    (Si no ponemos nada es false)


Crafteando

Vamos a construir un pico rosa. La verdad es que no sabemos. Pero una buena estrategia en el modding y en la programación en general es buscar en el interné código que haga lo que queremos y aplicar las modificaciones necesarias.

Mirad en este enlace tenemos el código que minetest usa para las herramientas. Lo que haremos es buscar el código del pico de madera (pick_wood), copiarlo en nuestro init.lua y modificar lo necesario.

Nos quedará así:

minetest.register_tool("furnimod:pick_pink", { 
    description = "Pink Pickaxe", 
    inventory_image = "pinkpick64.png", 
    tool_capabilities = { 
        full_punch_interval = 1.2, 
        max_drop_level=0, 
        groupcaps={ 
            cracky = {times={[3]=1.60}, uses=10, maxlevel=1}, 
        }, 
        damage_groups = {fleshy=2}, 
    }, 
}) 

Como veis hemos cambiado el nombre (junto al MOD), la descripción y la imagen. Lo demás no sabemos qué hace, pero podemos asegurar que funcionará igual que el pico de madera. Podemos investigar cambiando cosas: por ejemplo, uses = 10 tiene toda la pinta de referirse a la resistencia de nuestro pico. Experimentad!

pinkpick64.png

Ahora que ya tenemos el pico definido vamos a craftearlo:

minetest.register_craft({
    output = "furnimod:pick_pink",
    recipe = {
        {"furnimod:unchi", "furnimod:unchi", "furnimod:unchi"},
        {"", "default:stick", ""},
        {"", "default:stick", ""}
    }
})

Como veis es muy sencillo de entender:

En output ponemos el objeto a crear. Si hubiéramos puesto output = "furnimod:pick_pink 99" nos hubiera creado 99 unidades en lugar de una, aunque como los picos no son apilables no tiene mucho sentido.

Y en recipe ponemos los elementos en el orden que los pondríamos en la mesa de crafteo. Si en un cuadrado no va nada ponemos ("").  Y ya está.


Para una espada (esa le definís vosotros que ya sabéis) si hacemos lo siguiente obligamos que se tenga que craftear en el centro:

minetest.register_craft({
    output = "furnimod:sword_pink",
    recipe = {
        {"", "furnimod:unchi", ""},
        {"", "furnimod:unchi", ""},
        {"", "default:stick", ""}
    }
})

o a la derecha:

minetest.register_craft({
    output = "furnimod:sword_pink",
    recipe = {
        {"", "" ,"furnimod:unchi"},
        {"", "" ,"furnimod:unchi"},
        {"", "" ,"default:stick"}
    }
})

o si nos da igual si derecha, izquierda o centro o no votáis (sí, acabamos de salir de elecciones):

minetest.register_craft({
    output = "furnimod:sword_pink",
    recipe = {
        {"furnimod:unchi"},
        {"furnimod:unchi"},
        {"default:stick"}
    }
})

Como nota final añadir que este tipo de elementos de crafteo se conoce como Shaped. Es decir, que tiene que ponerse en una posición determinada para obtener un nuevo elemento. Los que no es necesario poner en un lugar determinado se conocen como Shapeless y es necesario indicarlo.

Por ejemplo, yo quiero que con tres nubes rosas obtenga una nube azul. Haríamos algo parecido a esto:

minetest.register_craft({
    type = "shapeless",
    output = "furnimod:unchi_blue",
    recipe = {
        {"furnimod:unchi", "furnimod:unchi", "furnimod:unchi"}
    }
})

Veis que fácil...   hemos indicado que el elemento de crafteo es de tipo shapeless.

Cocinando

Sí, señor@s. Ha llegado el momento de cocinar.

Los elementos que se cocinan también se identifican con un tipo y en este caso es cooking.

¿Recordáis el bloque rosa del anterior capítulo? Teníamos el problema de cómo lo introducíamos en el juego en modo NO creativo. Pues muy sencillo. ¿Que tal si cocinamos nubes rosas para obtener una suerte de adobe rosa?


Nuevamente el código es muy sencillo y con lo que ya sabemos casi autoexplicativo.

minetest.register_craft({
    type = "cooking",
    output = "furnimod:pinkblock",
    recipe = "furnimod:unchi",
    cooktime = 10,
})

¿Qué hemos hecho aquí?

Por un lado decimos que el elemento es de tipo cooking.

En recipe (receta) le damos el nombre del ingrediente que vamos a cocinar (recordad que siempre precedido del nombre del MOD) y en output el resultado de la cocción.

Cooktime es el número de segundos que tardará en aparecer el nuevo elemento. Si no ponemos nada tardará 3 segundos.

De esta manera ya podemos introducir el bloque rosa en un juego no creativo de nuestro servidor de minetest. Y como sois muy listos habréis pensado... pero furni, tío... ¿Y como introducimos la nube rosa? Buah... chupao... sólo tenéis que cargar un MOD de animales, en el que por ejemplo haya una vaca y modificar su código para que al matarla nos de nubes rosas...


Ya bueno... os prometo que más adelante seréis capaces de hacerlo...  :-)


Fuel

Para finalizar este capítulo que empieza a ser un poco denso, hablar del fuel. El fuel es otro tipo. Y funciona como el carbón en el horno. Podríamos hacer que nuestra nube rosa en lugar de ingrediente fuera combustible...

minetest.register_craft({
    type = "fuel",
    recipe = "furnimod:unchi",
    burntime = 30,
})

burntime es el tiempo que nuestro combustible estará quemando, así con un tiempo de combustión de 30, podremos obtener 10 elementos con un tiempo de cocinado (cooktime) de tres.

Y ya está!!!!!

Ya podemos empezar a crear nuestros objetos para minetest!!!



lunes, 21 de diciembre de 2015

Minetest Modding (II) - Registrando nodos

En nuestra introducción habíamos empezado creando un nodo con el siguiente código:

minetest.register_node("furnimod:pinkblock", {
    description = "Pink Block",
    tiles = {"unchitexture.png"},
    is_ground_content = true,
    groups = {cracky=3, stone=1}
})

¿Qué es esto? 

Realmente es la llamada a un método con la sintaxis:

minetest.register_node("nombre", {definición del nodo})

Si habéis oído hablar de la programación orientada a objetos y de las clases, podríamos decir que minetest es la clase y register_node uno de sus más de 150 métodos.  (Vedlos AQUÍ). A nosotros nos vale con pensar que es una orden o instrucción.

Esta orden tiene unos parámetros. Cada método tiene los suyos. Éste en concreto tiene dos:  un texto que lo reconocemos como tal porque va entre comillas y una tabla que la reconocemos porque va entre llaves {}.

El primer parámetro (en mi ejemplo "furnimod:pinkblock")  define el nombre del nodo o bloque y es lo que utilizaremos para referirnos a él. Imaginaos que tengo una varita mágica que lo que hace es crear una pinkblock cada vez que la uso. Posiblemente en algún lugar de mi MOD tendré un código que diga algo como:   Al_usar_la_varita = minetest.crear_nodo("furnimod:pinkblock").

Fijaos en el uso del nombre del MOD que precede al del bloque. Siempre debe ponerse al referirnos a un nodo. Esto es así para evitar que venga un espabilao y cree un nodo con el mismo nombre que el nuestro y haga que Minetest explote.

El segundo parámetro corresponde a un tabla. Una tabla es un montón variable de elementos separados por comas. En este caso lo que hace cada uno de los elementos de la tabla es definir una propiedad de nuestro nodo. Hemos dicho que la tabla es conjunto variable de elementos porque sólo hemos puesto las propiedades que queríamos definir. Hay muchas más. Incluso podríamos definirlas nosotros...

Definición del nodo

En el ejemplo hemos definido cuatro propiedades del nodo (fijaos que se separan por comas)

Description

Fácil. Su descripción. Es el texto que sale, por ejemplo, cuando apuntamos a un nodo dentro de su inventario y muestra el nombre. Como texto que es, va entre comillas.

Tiles

Es el dibujito o textura de nuestro nodo que corresponde a una imagen que tenemos en la carpeta textures de nuestro MOD. Como es el nombre de un archivo es un texto y va entre comillas. Además como está entre llaves nos indica que es una tabla. ¿Y que nos sugiere? Nos sugiere que un nodo tiene seis caras, por lo que podría haberme creado seis texturas diferentes y poner:

tiles = {
        "unchitexture_up.png",
        "unchitexture_down.png",
        "unchitexture_right.png",
        "unchitexture_left.png",
        "unchitexture_back.png",
        "unchitexture_front.png"
    }

Is_ground_content

Fijaos que le estamos diciendo que es TRUE o verdadero. Podríamos decirle que es FALSE o falso y ya está. No podemos decirle otra cosa, es lo que se conoce como un valor Booleano o Lógico.

De todas formas fijaos como estamos usando el símbolo igual ( = ) durante todo el rato. No es un igual como el de las matemáticas viene a ser algo como Tal cosa coge el valor de tal otra.

Lo que hace este propiedad es declarar que nuestro nodo es un suelo y sirve para que el generador de mapas lo tenga en cuenta. Realmente no vale de mucho. Pensad que cuando se cargan los MODs el mapa ya está generado. Entonces ¿por qué lo ponemos?. Pues porque hay que hacer las cosas bien. Imaginad que alguien hace un MOD llamado justicia_divina y que destruye todo lo que hay en una región excepto el suelo. ¿Nos gustaría que se respetara nuestro bloque?  Pues eso... además... nada nos asegura que en un futuro los MOD's se carguen antes de la generación del mapa o que el mapa se genere mientras jugamos... y entonces nos gustaría que nuestro bloque apareciera, ¿no?  Pues eso. Hay que hacer las cosas bien.

Groups

Muy bien. Ya habéis visto que es una tabla. A los grupos ya les entraremos con mayor enjundia, de hecho lo haremos AQUÍ. Pero vamos, lo que viene a decir lo que tenemos es que el bloque se destruye con un pico y que además es una piedra. El hecho de decirle que es una piedra implica por ejemplo, que tenga en cuenta nuestro nodo para Craftear aquellos objetos que precisan piedras, pero no importe cual.

Otras propiedades de los nodos

Inventory_image

Minetest crea automáticamente un cubo para representar a nuestro nodo en el inventario. Pero nosotros podemos querer que se muestre otra cosa. Para ello ponemos el dibujito en la carpeta de texturas de nuestro MOD e incluimos la propiedad en la tabla de definiciones (recordad que se separan por comas)

inventory_image = "miTextura.png"

Wield_image

Funciona de la misma manera que el anterior pero en este caso definimos la textura que queremos mostrar cuando llevamos el objeto en la mano.

wield_image = "miTextura.png"

Walkable

Nos indica si se puede atravesar o no el nodo. Esto nos afecta a nosotros, a los mobs y a cualquier cosa que se mueva. Sin embargo deja construir encima... Imaginad que creáis un nodo con la misma textura que tiene la CobbleStone pero con la propiedad walkable a FALSE. ¡Podríamos construir una cueva cerrada con puertas secretas combinando ambos bloques!

walkable = false     //    walkable = true      //  Si no se pone está a true

Recordad que los valores booleanos no llevan comillas (no son textos).

Pointable

Significa que no se puede apuntar sobre el nodo. Si no se puede apuntar no se puede destruir ni se puede construir sobre él. Ni en modo creativo. Así que mucho cuidado al usarlo. Imagina que queremos construir un juego con algo que no se pueda destruir. En modo Creativo tenemos este parámetro a TRUE, pero antes de distribuir el juego a nuestros amigos lo cambiamos a FALSE. También podríamos diseñar un MOD de protección en el que tuviéramos un bloque que cambiara esta propiedad a los nodos de su alrededor.

pointable = false     //    pointable = true     //  Si no se pone está a true

Diggable

A efectos prácticos es como el anterior. Si lo ponemos a FALSE no se deja picar.  En cambio al poderse seleccionar podremos construir encima. Cuando lo picamos desaparece y vuelve a aparecer al instante. Es el estado en el que se colocan los nodos de los MOD's de protección más conocidos.

diggable = false     //    diggable = true     //  Si no se pone está a true

Buildable_to

Si queremos situar un bloque al lado de otro, seleccionamos una de sus caras y pulsamos el botón derecho del ratón. El nuevo bloque aparecerá a continuación. ¿Qué pasaría si el bloque original tuviera el parámetro buildable_to a TRUE?  Pues que cuando colocáramos el nuevo bloque éste sustituiría al anterior en lugar de colocarse a continuación. Esto es lo que sucede con el agua. Si yo tengo un agujero lleno de agua y le meto un bloque, éste sustituye al agua... no queda flotando encima...

buildable_to = false     //    buildable_to = true     //  Si no se pone está a false

Drop

Por norma general obtenemos el nodo sobre el que picamos. Pero hay casos en el que obtenemos otro objeto distinto (como por ejemplo al picar sobre un bloque de carbón). Para ello sólo debemos definir el objeto que queramos que nos de...

drop = "default:nyancat"

Como veis, ponemos el nombre del MOD delante. El MOD default hace referencia a los elementos que lleva Minetest  'de fábrica'. Es decir, sin que le hayamos instalado nada.

Y con esto creo que ya vale por hoy... en el siguiente capítulo veremos los craftItems es decir, los elementos que no sirven para construir pero sí para craftear o para comer...

Nos vemos!!!

miércoles, 16 de diciembre de 2015

Minetest Modding (I) - Último Capítulo

Pues sí queridos amigos, hemos llegado al último capítulo de esta serie dedicada a Minetest. Que sí, que Minetest molaba mucho: hemos construido mundos fantabulosos y somos unos hachas construyendo complicadas maquinarias con Mesecons. Pero Minetest se nos queda corto. No es suficiente para nosotros necesitamos algo más. Necesitamos nuestro propio Minetest.

Minetest ha muerto, viva Minetest.

Así que aquí empezamos una nueva serie de tutoriales que denominaremos como Minetest Avanzado y que pretende adentrarnos en el mundo del Modding. ¿Qué significa ese palabro? Pues que vamos a coger Minetest y lo vamos a poner patas arriba o lo que es lo mismo, vamos a crear nuestros propios MOD's.

Evidentemente esto comporta escribir código puro y duro en un lenguaje de programación llamado Lua. En un principio no será necesario saber programar en él, pero nos acercaremos a conceptos básicos de la programación como las variables o los métodos. 

Pero bueno... eso ya se irá viendo... podría hacer aquí un extenso discurso sobre objetivos y demás pero yo tengo ganas de empezar... ¿y vosotros?

Nuestro primer MOD

Ya sabéis como funciona esto... vamos a la carpeta en la que tenemos instalado Minetest, entramos en la carpeta mods y creamos una carpeta que se llame como nuestro MOD, en mi caso voy a crear una carpeta llamada furnimod. Dentro de furnimod crearemos una carpeta llamada textures.

La carpeta textures

Nada que no sepáis... Ya habíamos modificado texturas AQUÍ. Como imagináis, es la carpeta que alberga las texturas que son imágenes con los dibujos que vemos en los bloques o nodos.

Las imágenes deben ser archivos .png de un tamaño de 16x16 o 32x32 o 64x64 o una potencia de 2 cualquiera por si misma. Lo que sean potencias de dos es un tema recurrente en la informática y tiene a ver con eso de que los ordenadores trabajan con unos y ceros. En términos de eficiencia deberíamos trabajar con 16x16 o 32x32, aunque si la imagen no queda bien definida podéis trabajar con otros tamaños. La premisa siempre será la misma... experimentad.

Yo voy a trabajar con esta textura:  
unchitexture.png

Evidentemente os invito a que creéis y no os limitéis a reproducir lo que pone aquí... ¿lo he dicho antes? Experimentad.

Recordad que hemos de trabajar con algún programa de dibujo que nos permita obtener transparencias como el Paint.NET o el GIMP. Nada de usar el Paint de Windows. También podéis usar un programa de dibujo on-line como Queeky.

El archivo init.lua

Este archivo contiene nuestro código y se coloca en la carpeta principal de nuestro MOD. En mi caso será furnimod. Es un archivo de texto plano que podéis escribir con el bloc de notas de Windows. Nada de usar editores de texto modernos como los de Word o herramientas similares. De hecho, lo ideal sería usar un editor pensado para código que nos ayudara identificando las instrucciones con colorines. El que yo uso (y no me llevo comisión) es Notepad ++. Tenéis también AQUÍ varias opciones para editar el código en linea.

Así que creáis el dichoso fichero init.lua, copiáis el siguiente código en él y guardáis.

minetest.register_node("furnimod:pinkblock", {
    description = "Pink Block",
    tiles = {"unchitexture.png"},
    is_ground_content = true,
    groups = {cracky=3, stone=1}
})


Si ahora entramos en Minetest y pulsamos Configurar sobre nuestra partida, (tal y como se cuenta AQUÍ ), aparecerá nuestro MOD que debemos activar.




Una vez entremos en el juego en modo creativo, observaremos con entusiasmo y admiración que aparece nuestro bloque.


Además podréis hacer con él construcciones bonitas. Sí. Furni os quiere ti@s...


Y hasta aquí esta breve introducción al modding. Si sois alumn@s aplicados, posiblemente os estaréis preguntando qué significa todo ese código que habéis metido en el init.lua. Muy bien. Esa es la actitud.

Como podéis imaginar... éste y otros enigmas se irán resolviendo en futuros capítulos de este Tutorial de Minetest Modding.  Oh yeah!

domingo, 13 de diciembre de 2015

Videojuegos para padres y maestros - Minetest (IX) - WorldEdit (y 3)

Los que seguís habitualmente este especie de curso de Minetest os sorprenderá ver el salto argumental al volver a WorldEdit, pero es que dentro de las actividades que realizamos en el CoderDojo de Medialab-Prado Madrid a propuesta de un Ninja, surgió la actividad que os voy a proponer y que me pareció muy interesante.

De Madrid al cielo

Para realizar esta actividad debéis tener instalado WorldEdit, pinchando AQUÍ os explico cómo podrán facerlo vuesas mercedes... (sí, hoy me siento épico)

Lo primero de todo es construir un muro, con lo que pondremos una fila de 8 bloques de piedra o de algo que quede bien para construir un rascacielos... buscad una gran llanura ya que la construcción va a ser tocha...


Ahora con el 1 y 2 (si no sabéis de que os hablo mirad AQUÍ) seleccionaremos toda la fila y la apilaremos sobre si misma (en el eje de la y) por ejemplo 4 veces.

//stack y 4



Ahora haremos las ventanas. Las podéis hacer haciendo trampas (o sea picando) o seleccionarlas con el 1 y 2 y rellenarlas de aire o cristal...

//set air  o   //set glass



Ahora seleccionaremos toda la pared y la apilaremos una vez sobre la derecha. El problema radica en que no sabemos si la derecha es el eje x (Este), el z (Norte), el -x (Oeste) o el -Z (Sur). Pulsando el [F5] podremos averiguarlo. Sin embargo es más sencillo colocarnos mirando hacia donde queremos que la estructura se apile y usar la ? (Hacia donde miremos)



//stack ? 1


Ahora seleccionamos tooooda la pared y la apilamos hacia el fondo una vez, de manera que nos quede una pared de dos bloques de espesor... (ahora veréis para qué...)

//stack ? 1



Seleccionamos la nueva pared (la del fondo) y ahora es donde aplicamos la magia:

//rotate y 90



Impresionante no? Aquí lo que hemos hecho es poner una bisagra vertical (y) en el 2 y rotar la estructura seleccionada 90 grados. Para que os funcione como a mí, es importante que cuando seleccionéis la segunda pared, el 2 esté a la derecha.

Si no os ha salido bien con //rotate y -90 volverá a su sitio.

Y ahora a hacer el bestia...

Seleccionamos toooooooda la estructura y la copiamos digamos 20 bloques pal fondo (?)

//copy ? 20



Veis como queda? 
El siguiente paso es obvio... seleccionaremos toda la nueva estructura que hemos creado y la giraremos 180 grados.

//rotate y 180


Como al hacer esto hemos arrasado con todo lo que había por en medio es posible que nuestra nueva estructura esté llena de cosas que no queremos con lo que seleccionamos todo el interior (las paredes no) y lo llenamos de aire para vaciarlo. Puede que para poder seleccionar el interior debáis poner un bloque para poder seleccionarlo como hago en la siguiente imagen...


Ahora rellenamos todo de aire:

//set air

También podemos aprovechar para poner un suelo bonito o algo...


Fijaos que NO hemos rellenado todo el suelo, hemos dejado una fila por abajo y a la derecha sin poner nada. Como podéis imaginar ahí van las paredes.

Ahora seleccionaremos la estructura nuevamente, per dejaremos sin seleccionar la fila de abajo y la de la derecha del todo como hemos hecho en el suelo...


Como imagináis el siguiente paso consistirá en mover la nueva estructura ya rotada sobre la original. Si la hubiéramos seleccionado toda, estaríamos copiando el aire que corresponde a las paredes antiguas, con lo que al mover nos las cargaríamos. Otra estrategia hubiera sido mover la nueva estructura un bloque más hacia atrás y uno a la izquierda para no pisar las paredes originales.

Ahora nos colocamos tras la pared que queremos empujar de la nueva estructura (donde la estrella)...


Y si antes habíamos copiado 20 para aquí, ahora movemos 20 para allá...

//move ? 20


Ahora nos toca decorar nuestra casita, no debemos olvidarnos de poner antorchas ni la escalera. Fijaos como en la escalera hemos hecho un bujero en el suelo... Por cierto, es curioso como el corrector no me señala la palabra bujero... He consultado y es de los pocos vulgarismos que la RAE aún no acepta. Os lo juro por un bocata de almóndigas.



Ahora seleccionamos todo, todo, todo y apilamos 20 para arriba!!!

//stack y 20





Y ya lo tenemos... ahora sólo queda añadir detalles de calidad como la puerta... tapar el agujerito de la escalera... y personalizar cada piso!!!!!!

A más ver!!! 


viernes, 11 de diciembre de 2015

Segundos pinitos en Scratch

Vimos AQUI mi primer acercamiento a Scratch... un mes justo después he sido capaz de hacer esto:



Sirva de ejemplo de lo sencilla que es esta herramienta para que un tarugo como yo, haga estos progresos en un mes... XD Que sí... que lo de las entradas dedicadas al Scratch está pendiente... Nos vemos!!!

sábado, 14 de noviembre de 2015

Videojuegos para padres y maestros - Minetest (VI) - Texturas - PureBDCraft

Un Minetest más bonico

¿Cansado del aspecto visual de su Minetest? ¿Le gustaría que su Minetest rejuveneciera y sea más hermoso y la envidia de sus vecinos? No se preocupe, con el nuevo tratamiento de belleza PureBDCraft ud. levantará admiración por dónde vaya... Veámos un ejemplo:

Julito F.R. antes de nuestro tratamiento de Belleza lucía así:

Antes:


Tras nuestro revolucionario sistema de belleza Julito F.R. alcanzó este aspecto:

Después:



Y todo gracias a nuestro producto estrella:

PureBDCraft

Que Minetest es un montón de cubos es una afirmación que a estas alturas no sorprenderá a nadie. Ahora bien ¿qué hace que cada cubo (correctamente llamado nodo) sea visualmente diferente de otro? ¿Qué cambia entre una madera o una piedra? Pues una imagen que le pegamos encima. Sí, sí... un .jpg o .bmp de los de toda la vida... de esos que podemos editar o dibujar nosotros mismos con cualquier programa de dibujo como el Paint de Windows.

Y eso es PureBDCraft: un señor que se ha dedicado a repintar todas las imágenes de Minetest. A esas imágenes las llamaremos texturas.

¿Y cómo instalo mi pack de texturas?

Lo primero es descargarlo, claro, y lo podéis hacer desde el siguiente enlace:


Huelga decir que debéis tener la última versión de Minetest instalada y bla, bla, bla...

En el momento de construir este tutorial existen dos versiones la de 512 x 512 pixeles y la de 256 x 256 que es la recomendada, la otra tiene mayor calidad, pero necesitas un maquinón. 

Decir que cuando pulséis sobre el enlace saltará publicidad. Deberéis esperar unos segundos hasta que en la esquina superior derecha salga este cartel.


Se descargará un archivo comprimido que deberéis descomprimir. Se generará una carpeta que se debe pegar dentro de la carpeta textures que se encontrará dentro de la carpeta dónde hemos instalado Minetest.


Si ahora entráis en la carpeta que acabáis de crear entenderéis como funcionan las texturas.

Guay furni... pero esto como se usa...

Entramos en Minetest y seleccionamos nuestro juego de la manera habitual y en la pestaña texturas escogemos las que acabamos de instalar.



Y ahora... a jugar!



Modificación de texturas

Habíamos entrado antes a ver las texturas que albergaba el paquete que habíamos instalado. Volved a esa carpeta (os recuerdo que está en la carpeta textures de Minetest) y seleccionad una de las texturas que aparecen. Guardaos una copia para no hacer un estropicio. Abrimos la textura con un programa de dibujo y la modificamos... por ejemplo:



Observemos el efecto en el juego:


Es importante que para editar el dibujo usemos un editor de gráficos que permita usar transparencias, como por ejemplo Paint.Net para windows o alguno en línea como https://pixlr.com/express/ http://www.queeky.com/app. La cosa está en que el fondo del dibujo NO debe ser blanco, sino transparente y eso es algo que el Paint de Windows no sabe hacer.

Y nada más os dejo para que junto con vuestr@s chaval@s os dediquéis a hacer maldades... y no quiero dar ideas...




A más ver!!!

miércoles, 11 de noviembre de 2015

Mis pinitos en Scratch

Una entrada muy breve... no me he podido resistir a publicar esto...

Estaría bien tratar aquí también el tema del Scratch, no?

Sólo como demo... mi primer pinito en Scratch...

La animación comenzará en cuanto pulséis la tecla [ESPACIO]. También podéis cambiar el escenario con los botones de la parte superior derecha de la pantalla.

Disfrutadlo!!!  O no... XD


sábado, 24 de octubre de 2015

Videojuegos para padres y maestros - Minetest (V) - Instalar juegos - Carbone NG

Una buena manera de empezar

A estas alturas ya sabemos lo que es un MOD. Ahora imaginaos que me pego la paliza de instalar los MOD's más chulis que encuentre y crear un Minetest espectacular. Aquí puedo hacer los dos cosas, convertirnos en Ebenezer Scrooge y atesorarlo para nosotros o compartirlo con el mundo.

Pues bien, en este sentido alguien ha recopilado unos cuantos MOD's y ha creado un juego llamado Carbone NG que no es más que el Minetest original ampliado y que desde aquí recomendamos instalarlo para empezar a disfrutar del juego desde nuestros primeros pasitos.

Carbone NG

La instalación de los juegos es muy parecida a la de los MOD's, que ya vimos AQUÍ. Para el caso concreto de Carbone NG lo podremos descargar desde este enlace.

A la derecha del todo veréis el botón para iniciar la descarga.


Recordad que para descargarlo es importante que tengamos la última versión de Minetest instalada.

Buscamos el archivo bajado que si no lo han cambiado se llamará carbone-ng-master.zip y lo descomprimimos, cosa que nos creará una carpeta llamada posiblemente carbone-ng-master.

Lo primero que tenemos que hacer es asegurarnos que hemos creado la carpeta buena. Es decir, no vale que dentro de la carpeta carbone-ng-master haya otra que se llame igual. Sólo sabremos que la carpeta que buscamos es la buena si dentro tiene varios archivos y una carpeta llamada mods y otra menu. Cuando ya tengamos claro que carpeta es la buena, la renombramos a carbone-ng. 

¿Que por qué renombramos la carpeta?  Pues porque lo pone en las instrucciones de instalación del propio carbone. Y una de las cosas que he aprendido durante largos años de pelearme con los ordenadores es que si lo pone es por algo y si no pueden pasar cosas así...



Ahora debéis dirigiros a la carpeta dónde instalasteis Minetest y que si seguisteis este manual lo tendréis colgado en la raíz de vuestro disco y se llamará minetest y buscáis en su interior una carpeta que se llame games. Ahí dentro es dónde pegareis tal cual la carpeta carbone-ng. !Y ya hemos acabado!

NOTA CULTURAL: En el pleistoceno a las carpetas se les llamaba directorios.


Jugando con Carbone NG

Abrimos nuestro Minetest y como somos harto perspicaces reparamos en que algo ha cambiado...


No tenemos más que seleccionarlo, crear una nueva partida y darle caña.

¿Qué hay de nuevo, viejo?

Dadle, al inventario, dadle al inventario (tecla [I])

Yo creo que lo más divertido es experimentar, dejad a l@s chaval@s que descubran las nuevas funciones, aunque os voy a dar alguna indicación.

Reparad en que tenemos objetos nuevos experimentad con el destornillador (screwdriver) o con la dinamita (TNT)

Y reparad también en que en la parte inferior tenemos una barra con botones que hacen lo siguiente:

El icono que NO tiene el interrogante es nuestra mesa de crafteo, sirve para transformar unos elementos en otros tal y como hemos hecho siempre.

El icono con el interrogante es una pasada. Si seleccionamos un elemento de la derecha.. ¡¡¡Nos dice cómo craftearlo!!!!


La casita con la flecha roja permite guardar el sitio en el que nos encontramos y al que ahora llamaremos home. Hace lo mismo que en el chat (tecla [T]) escribimos el comando /sethome.

La casita con la flecha verde nos retornará a la posición guardada con el botón anterior. Corresponde al comando de chat /home.


El día y la noche. Es fácil intuir que hacen... nos llevan a las seis de la mañana (Dios mío qué espanto) o a las nueve de la noche.



Manda todo nuestro inventario a la basurilla y cuando digo todo, es todo. ¿Pero lo podremos recuperar? Claro que no. Si no... ¿qué sentido tiene un botón que podemos pinchar por error?


Si Labordeta levantara la cabeza. Podemos craftear bolsas y mochilas que podemos guardar con este botón. A su vez estas bolsas y mochilas pueden contener más objetos. Es decir... ¡¡¡ampliamos nuestro inventario!!!  Lo que tengamos en la mochila NO lo perderemos si pulsamos sobre la basurilla.

Podemos construir botas, cascos, armaduras, escudos, pantalones... armadura en general... Con este botón nos lo podremos equipar. ¿El objetivo?  Zurrarnos con los demás.


Este icono nos lleva al menú de WorldEdit. WorldEdit es un Mod que nos ayuda a construir el mundo. Pero no os preocupéis... furni lo cuenta todo AQUI.


Y con esto ya podéis jugar mucho. De todas formas ya sabéis ampliar Minetest con juegos y MOD's y es más, sobre un juego podéis tambien instalar MOD's, así que os animo a experimentar con vuestr@s chaval@s y construir un mundo ideal...


Podéis acceder a todas las entregas de esta especie de tutorial AQUI...

domingo, 6 de septiembre de 2015

Videojuegos para padres y maestros - Minetest (XV) - Mesecons (y 5)

Normalmente si tenéis los conocimientos previos necesarios, podéis seguir cualquier capítulo de esta especie de cursillo de manera independiente... sin embargo... éste que estáis leyendo precisa ver el anterior. Así que lo tenéis AQUÍ

Estuvimos viendo como podemos usar el Microcontroller de Mesecons para encender los puertos que queremos en función de si un puerto está activo o no.

Pues bien, también lo podemos hacer al revés... es decir, activar o no un puerto en función de los demás. Para ello usaremos condiciones lógicas que corresponden a las puertas lógicas que vimos en ESTE CAPÍTULO. (Ahí se explica más a fondo).

Veámoslo: 

NOT (!)

Si queremos activar el puerto B si el puerto A NO está activado:

off(B) if(!A) on(B);

AND (&)

Activamos el puerto B si el puerto A está activado Y el puerto C también:

off(B) if(A&C) on(B);

Activamos el puerto B si el puerto A está activado Y el puerto C NO lo está:

off(B) if(A&!C) on(B);

OR (|)

Activamos el puerto B si el puerto A está activo O el puerto C está activo (o los dos)

off(B) if(A|C) on(B);

El simbolito éste lo tenéis en la tecla [1] con el [Alt Gr] pulsado...


XOR (~)

Activamos el puerto B si el puerto A está activo O el puerto C está activo (pero NO los dos)

off(B) if(A~C) on(B);

Para conseguir este símbolo, lo mejor es que lo copiéis de esta página y lo peguéis pulsando  [CTRL + V] en Minetest o bien podéis pulsar [Alt Gr] + [4].

Igual (=)

Activamos el puerto B si el puerto A y el puerto C son iguales.

off(B) if(A=C) on(B);

Borriquito como tú

Contemplad esta creación:



Si yo quisiera pintar un A, debería iluminar los cubos con los números 1,2,3 y 5.  ¿Qué cubos debería pintar para el resto de vocales? 

Volvamos al ejercicio anterior.... ¿Hay algo que nos impida que el 1 sea la A, el 2 la E, el 3 la I?

Recopilemos:


¿Recordáis la tabla anterior?  La hemos ampliado con las luces a encender...  Podéis imaginar que la estrategia que vamos a usar es un microcontroller conectado a las luces 1, otro a las 2, otro a las 3... y que recibirá la letra pulsada y encenderá las luces si corresponde. ¿Y como metemos la letra pulsada al microcontroller?   La tenemos del ejercicio anterior.  Recordáis que habían unas luces que se encendían en función de tener un 1, un 2... es decir... una A, una E...

Pues bien... quitamos la luz A y conectamos el cable que la iluminaba con cada uno de los puertos A de los nuevos microcontroller. Hacemos lo mismo con las luces C y D. De esta manera cada microcontroller ya sabe que letra le está entrando...

Igual para que quede un poco más limpio tendréis que pasar cables bajo el suelo... es cuestión de hacer y deshacer hasta que os satisfaga el resultado...



Conectamos una luz a cada puerto libre (el B) y ahora ¿qué código ponemos?  No hay una solución única... pero el proceso mental es el mismo... se trata de agrupar de alguna manera todas las salidas. Es razonamiento puro...


Vemos que los 1 se encienden cuando A=1 y además cuando A es 0 y al mismo tiempo C es 1 o D es 1, pero no los dos a la vez, o sea un XOR.

Así que, en función a este razonamiento, el código del microcontroller que ilumina los 1 será:

off(B) if(A) on(B); if(!A&C~D) on(B);

Si venís del ámbito informático seguro que se os ocurre meterlo todo en un sólo if... el problema es que necesitaríamos paréntesis y estos no se admiten. Otra cosa importante es pensar en no preguntar sólo por los ceros, ya que en origen el microcontroller está apagado y ¡todo es cero!

Para los siguientes microcontrollers yo he escogido una solucion, pero podría existir otra más mejor. De todas maneras no estaría de más tratar de comprenderlas.

Microcontroller 1:  off(B) if(A) on(B); if(!A&C~D) on(B);
Microcontroller 2:  off(B) if(!A&!C&D) on(B); if(!A&C&!D) on(B); if(A&!D) on(B);
Microcontroller 3:  off(B) if(C~D&!A) on(B);
Microcontroller 4:  off(B) if(A) on(B); if(!A&C&!D) on(B);
Microcontroller 5:  off(B) if(D) on(B); if(A&!C&!D) on(B);

Conectad los puertos B de cada microcontroller a una luz (como en el afoto de arriba) y probad que se enciendan las luces deseadas...

Gran remate final y no estamos en rebajas

1.- Quitamos las luces de prueba.
2.- Montamos el 8 del principio del artículo.
3.- Unimos los cubos del mismo número (Todos los 1 con un cable, los 2 con otro)
4.- Unimos el cable que une los unos con el microcontroller 1, el cable que une los doses con el microcontroller 2 y así todos... 

Paciencia... no es fácil... usad aislantes y trabajad bajo el suelo si es necesario... mirad la que he liao:


Para guiar los cables podéis construir columnas de tierra (que luego podéis eliminar) y muy importante usar la herramienta del destornillador (buscadla en el inventario) que permite rotar los elementos para que se coloquen en la posición deseada.


¿El resultado?   


Como podéis imaginar, se podría hacer lo mismo con los números... aunque se complica un poco ya que las agrupaciones de los palos tienen que ser más pequeñas... pensadlo... además sólo podréis representar hasta el número siete...  ¿Qué por qué?  Completad la tabla y lo veréis...

Y nada más... evidentemente este ejercicio es muy complicado pero tiene razonamientos lógicos profundos que pueden ser un reto para l@s chaval@s de mayor edad...

En el próximo capítulo algo más de Microcontroller...

Un besín.