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!!!