Bip bop con
LIKO-12

Un ordenador de juguete

Una charla por Ciro Durán (@chiguire)
ciro.duran@gmail.com
FLISOL Madrid 2018
¡Esta charla tiene notas! Presiona 's' para leerlas.

Orden

  • ¿Qué es LIKO-12?
  • Hola mundo en LIKO-12
  • Programando en LIKO-12
  • Editores
  • Sistema operativo DiskOS
  • ¿Qué puedo hacer?

¿Qué es LIKO-12?

LIKO-12 al iniciar

Especificaciones

Componente Información
CPU LuaJIT (Lua 5.1)
GPU Pantalla 192x128 4-Bit
Mapa 144x128 celdas (255 tiles)
HDD 2x discos 25MB
Entrada Teclado, ratón, touch y control
LIKO-12 al iniciar
Editor de sprites
Editor de código

Hola mundo en LIKO-12

(Primer intento)


-- Hola Mundo 1
clear(0)
print("HOLA FLISOL!",50,50)
line(12, 12, 50, 60)
						

Código disponible en https://pastebin.com/5pmdw4cL
Córrelo en LIKO-12 con pastebin get 5pmdw4cL hola1.lk12

Hola Flisol 1

Hola mundo en LIKO-12

(Segundo intento)


-- Hola Mundo 2
function _init()
 clear(0)
end

function _draw()
 print("HOLA FLISOL!",50,50)
 line(12, 12, 50, 60)
end

function _update()
end
						

Código disponible en https://pastebin.com/C801GkkQ
Córrelo en LIKO-12 con pastebin get C801GkkQ hola2.lk12

Hola Flisol 2

Hola mundo en LIKO-12

(Tercer intento)


-- Hola Mundo

n = 1
COLORS = {2,4,3,5,6,8,7,9}
max = 30
angulo = 60
speed = 15
timer = speed
x = 0     -- a llenar en _init()
y = 0     -- a llenar en _init()
radio = 0 -- a llenar en _init()

function puntoCirc(x,y,r,angulo_rad)
 return
  x+math.sin(angulo_rad)*r,
  y+math.cos(angulo_rad)*r
end

function screenDims()
 return {
  x = screenWidth()/2,
  y = screenHeight()/2,
  radio = (screenHeight() < 
   screenWidth()) and
   (screenHeight()/2*0.9) or
   (screenWidth()/2*0.9)
 }
end

function _init()
 clear(0)
 dims = screenDims()
 x = dims.x
 y = dims.y
 radio = dims.radio
end

function _draw()
 clear(0)
 for i=1,n do
  coloralt=(i%#COLORS)+1
  a = math.rad(i*360/max + angulo)
  b = math.rad(i*360/max - angulo)
  p1_x, p1_y = puntoCirc(x,y,radio,a)
  p2_x, p2_y = puntoCirc(x,y,radio,b)
  line(p1_x,p1_y,p2_x,p2_y,coloralt)
 end
 print(
  "HOLA FLISOL!",
  screenWidth()/2 - 28,
  screenHeight()/2
 )
end

function _update()
 if timer > 0 then
  timer = timer - 1
  if timer == 0 then
   n = n + 1
   timer = speed
  end
 end
end
						

Código disponible en https://pastebin.com/x7wuaWTH
Córrelo en LIKO-12 con pastebin get x7wuaWTH hola3.lk12

Hola mundo en LIKO-12

Hola Flisol 3, animado

Programando en LIKO-12

(Vou baixar a Lua)

Logo de Lua, lenguaje de programación

https://www.lua.org/

Algunas operaciones gráficas

clear(colorn)
Limpia la pantalla
print(texto, x, y, [color])
Imprime texto en posición
line(x1,y1,x2,y2,[color])
Trazar una línea
Sprite(tileID,x,y,[rotacion])
Dibuja un sprite en posición
map(x,y,tx1,ty1,tx2,ty2)
Dibuja un mapa
mset(x,y,tile)/mget(x,y)
Manipular el mapa
clip(x1,y1,x2,y2)
Dibuja solo sobre esta área
cam(...)
Operaciones de cámara

Librerías externas incluidas

  • Middleclass: para tener clases y subclases
    
    local Fruta = class("Fruta") -- clase llamada "Fruta"
    Fruta.static.mivalor = 2 -- valores y métodos estáticos
    function Fruta:initialize(color) -- ...
    local Mango = class("Mango", Fruta) -- subclase
    							
  • Bump: colisiones simples, AABB (Axis-aligned bounding box).
  • JSON: "como su nombre lo dice"
  • Lume: complementa la librería estándar de Lua, muy útil para operar con tablas.

Editores

Sprites

Editor de sprites

Sprites

Editor de sprites con sprites de ejemplo

Código

Editor de código

Código

Editor de código con código de ejemplo

Mapas

Editor de mapas

Mapas

Editor de mapas con mapa de ejemplo

Sonido

Editor de sonido

Música (en desarrollo)

Editor de sonido

...pero se puede generar con código


Audio.generate(1,250,1) -- para tocar una nota
Audio.generate()        -- para parar
						

DiskOS, el sistema operativo

DiskOS

¿Qué puedo hacer?

Instalar y correr ejemplos y juegos

En la consola:

install_demos

install_games

Erni's Iceberg (WIP), por Thirite

Clon de frogger

Este juego y código están disponibles en http://github.com/chiguire/sapper

Documentación y comunidad

itch.io https://ramilego4game.itch.io/liko12
Wiki http://liko-12.readthedocs.io/en/latest/
Twitter https://twitter.com/ramilego4game
Discord https://discord.gg/GDtHrsJ
Trello https://trello.com/b/bHo8Y9sx/liko-12
Github https://github.com/RamiLego4Game/LIKO-12
Email ramilego4game@gmail.com

¿Preguntas?

¡Muchas gracias!

Estas láminas (y sus notas) están disponibles en http://ciroduran.com/talks/2018/liko12/es

Estoy en Twitter: @chiguire

Correo electrónico: ciro.duran@gmail.com