Introducción

En Estado de la Señal los datos de las señales SRC y OUT de un puzle se definen utilizando sencillos scripts escritos en Lua. El código Lua hace 3 cosas:

1) especifica el número de canales SRC y OUT y el número total de ciclos;
2) determina los valores numéricos de cada ciclo en los canales SRC y OUT;
3) devuelve estos datos en forma de tabla Lua al juego.

A continuación, te mostramos un ejemplo de código básico del puzle de la primera historia de Estado de la Señal:


sstate.setSignalSpecs(1,2,50)
for i=0, 49
do
  sstate.setSrc(0,i,i+1)
  sstate.setOut(0,i,i+1)
  sstate.setOut(1,i,i+1)
end
return sstate.signals()
                

sstate.setSignalSpecs(1,2,50) indica que este puzle tiene 1 canal SRC, 2 canales OUT y una longitud de señal total de 50 ciclos. El código debe detallar el número de canales SRC y OUT, así como el número de ciclos.

Dentro del bucle, sState.setSrc(0,i,i+1) determina, para el canal SRC 1 (los valores del índice son cero dentro del código), que el valor en el ciclo sea i+1. Si el código no especifica otros valores en cualquier ciclo, el juego lo interpretará como 0.

Al final del bucle, return sstate.signals() devuelve la información al juego. El código debe incluir esta línea al final.

sstate es un módulo que introduce el intérprete de Lua del juego. Este proporciona diferentes funciones útiles para programar el código de los datos de la señal. Dichas funciones se explican más adelante.

Recuerda que el código Lua del juego se ejecuta en un entorno de pruebas utilizando el intérprete Moonsharp, por lo que tendrás acceso ilimitado a la librería estándar de Lua. Además, aún se puede acceder a las librerías básicas, como por ejemplo la librería de matemáticas. Dirígete a https://www.lua.org/manual/5.2/ para obtener más información sobre el lenguaje de programación Lua.

sstate.setSignalSpecs(srcCount, outCount, timesteps)

Indica el número de canales SRC y OUT, así como el número de ciclos. No puede haber más de 4 canales SRC y 4 canales OUT y el número total de canales no debe ser superior a 5. Además, no puede haber más de 150 ciclos.


sstate.setSrcCount(srcCount)

Indica el número de canales SRC. No puede haber más de 4 canales SRC.


sstate.setOutCount(outCount)

Indica el número de canales OUT. No puede haber más de 4 canales OUT.


sstate.setSignalLength(length)

Indica el número de ciclos. No puede haber más de 150 ciclos.


sstate.getSrcCount()

Devuelve el número de canales SRC. Se debe haber indicado el valor previamente.


sstate.getOutCount()

Devuelve el número de canales OUT. Se debe haber indicado el valor previamente.


sstate.getSrc(srcChannel, timestep)

Devuelve el valor del canal SRC determinado en el ciclo proporcionado. Se debe haber indicado el valor previamente.


sstate.getOut(srcChannel, timestep)

Devuelve el valor del canal OUT determinado en el ciclo proporcionado. Se debe haber indicado el valor previamente.


sstate.getSignalLength()

Devuelve el número de ciclos. Se debe haber indicado el valor previamente.


sstate.signals()

Devuelve la tabla que contiene los datos de la señal determinados. El código debe acabar en return sstate.signals().


sstate.setSrc(channel, timestep, value)

Establece el valor del canal SRC y del ciclo determinados. Este valor debe encontrarse entre -100 y 100.


sstate.setOut(channel, timestep, value)

Establece el valor del canal OUT y del ciclo determinados. Este valor debe encontrarse entre -100 y 100.


sstate.attenuator(input, attValue)

Simula el comportamiento de un módulo atenuador y devuelve su salida. El valor de entrada debería ser un número entero entre -100 y 100. attValue debería ser un valor decimal entre -1 y 1. Recuerda que durante el juego el módulo atenuador solo permite valores con un decimal.


sstate.vca(input,cv)

Simula el comportamiento de un módulo VCA y devuelve su salida. El valor de entrada debería ser un número entero entre -100 y 100.


sstate.andGate(in1,in2)

Simula el comportamiento de un módulo AND y devuelve su salida. El valor de entrada debería ser un número entero entre -100 y 100.


sstate.orGate(in1,in2)

Simula el comportamiento de un módulo OR y devuelve su salida. El valor de entrada debería ser un número entero entre -100 y 100.


sstate.notGate(in)

Simula el comportamiento de un módulo NOT y devuelve su salida. El valor de entrada debería ser un número entero entre -100 y 100.


sstate.xorGate(in1,in2)

Simula el comportamiento de un módulo XOR y devuelve su salida. El valor de entrada debería ser un número entero entre -100 y 100.


sstate.toBool(input)

El resultado será verdadero si el valor de entrada es superior a 0, si no, será falso.


sstate.sign(input)

El resultado será -1 si el valor de entrada es inferior a 0, 1 si es superior a 0 y 0 si es igual a 0.


Ejemplos de código


Prueba de VCA


sstate.setSignalSpecs(2,1,50)
for i=0, 49
do
  val = math.random(-16,16)*5
  val2 = math.random(0,5)*20
  sstate.setSrc(0,i,val)
  sstate.setSrc(1,i,val2)
  sstate.setOut(0,i,sstate.vca(val,val2))
end
return sstate.signals()
                

Dron explorador


sstate.setSignalSpecs(1,1,50)
val1 = 0
val2 = 0
for i=0, 49
do  
	val3 = math.random(-30,30)
  	sstate.setSrc(0,i,val3)
	if val3 > val2 and val3 > val1 then
		sstate.setOut(0,i,val3)
	elseif val2 > val1 and val2 > val3 then
		sstate.setOut(0,i,val2)
	else
		sstate.setOut(0,i,val1)
	end
	val1 = val2
	val2 = val3
end
return sstate.signals()
                

Sámpler


sstate.setSignalSpecs(1,1,50)
ctr = 0
for i=0, 49
do 
	if 7 >= i then
		sstate.setSrc(0,i,math.random(25,80))
	else
		sstate.setSrc(0,i,0)
	end
	sstate.setOut(0,i,sstate.getSrc(0,ctr))
	ctr = ctr + 1
	if ctr >= 8 then
		ctr = 0
	end
end
return sstate.signals()