Es:Scripted levels

From X-Moto
Jump to: navigation, search

English - Català

Contents

Introducción

Los Scripts hacen que un nivel sea dinámico. Puedes cambiar algunas propiedades físicas, mover objetos, modificar la lógica del juego, etc. Un script está hecho con el lenguaje Lua y se puede añadir al archivo del nivel.

La documentación sobre el lenguaje Lua la puedes encontrar aquí:
http://www.lua.org/manual/5.1/

Para hacer un script, has de saber al menos un poco sobre el archivo de nivel. Es un archivo XML. Incluye propiedades como el nombre del nivel, su descripción ... Además, incluye las definiciones de los bloques y las figuras. Un bloque se compone por vértices que son puntos unidos para formar un polígono.

Para presentar la forma de escribir un script, lo siguiente es un nivel básico que utilizaremos de ejemplo:

<?xml version="1.0" encoding="utf-8"?>
<level id="tutscript">
<info>
<name>tutscript</name>
<description></description>
<author></author>
<date></date>
<sky>sky1</sky>
</info>
<script>
</script>
<limits left="0" right="50" top="30" bottom="0"/>
<block id="Block0">
<position x="0" y="0"/>
<usetexture id="default"/>
<vertex x="5" y="5"/>
<vertex x="5" y="10"/>
<vertex x="10" y="10"/>
<vertex x="10" y="5"/>
</block>
<entity id="MyPlayerStart0" typeid="PlayerStart">
<size r="0.4"/>
<position x="7.5" y="10"/>
</entity>
<entity id="Strawberry0" typeid="Strawberry">
<size r="0.4"/>
<position x="20" y="0.5"/>
</entity>
<entity id="SnowMan0" typeid="Sprite">
<param name="name" value="SnowMan"/>
<position x="19" y="0.2"/>
<param name="z" value="-1"/>
</entity>
<zone id="Zone0">
<box left="40" right="50" top="5" bottom="0"/>
</zone>
</level>

Este nivel se puede hacer fácilmente con el xmoto-edit. Incluye un bloque llamado Block0 que es un cuadrado, una fresa llamada Strawberry0 y una zona llamada Zone0. Una zona es una parte invisible del nivel que hará que se ejecuten acciones cuando el jugador esté a dentro.

Algunas funciones requieren una mínima versión del xmoto para funcionar. Si haces servir alguna de estas funciones, por favor, pon esta información en le archivo del nivel. Por ejemplo, para hacer que tu nivel requiera el X-Moto 0.2.0, añade esta linea al código de tu nivel:

<level id="tutscript" rversion="0.2.0">

Scripted level.jpg

Todo el código del script es lenguaje Lua. Puedes encontrar la sintaxis aquí. De todas maneras, si escoges incluir el script dentro de un archivo XML, los símbolos < y > se han de reemplazar con &lt; y &gt;. El código del script se puede añadir entre <script> y </script> dentro de archivo de nivel.

Funciones llamadas por el X-Moto

OnLoad()

Explicación

Esta función es llamada una vez al inicio del nivel. Has de retornar true si nada malo sucede.

Ejemplo de Script

El ejemplo muestra un mensaje al inicio del nivel.

function OnLoad()
  Game.Message("This level is scripted")
  return true
end

Tick()

Explicación

Función llamada una vez cada centésima de segundo. Has de retornar true si nada malo sucede.

Ejemplo de Script

Este ejemplo se iniciara con gravedad 0 ; después, irá incrementándose con el tiempo. Como la gravedad de la tierra es 9.81, no habrá gravedad terrestre hasta alcanzar los 9.81 segundos. Fíjate que en el X-Moto la gravedad vertical se ha de multiplicar por -1 porqué las coordenadas de la pantalla están invertidas.

function Tick()
  if Game.GetTime() < 9.81
  then
    Game.SetGravity(0, Game.GetTime() * -1)
  end
  return true
end

function Load()
  Game.SetGravity(0, 0)
  return true
end

Entity.Touch()

Explicación

Esta función es llamada cuando una figura (una fresa por ejemplo) es tocada. La figura se ha de declarar en el script. Fíjate que el parámetro <size r> permite escoger el margen de la distancia que se considera para que una figura sea tocada.

Ejemplo de Script

El ejemplo muestra un mensaje cuando se toca una fresa.

Strawberry0 = {}

function Strawberry0.Touch()
  Game.Message("Nice strawberry !")
end

Zone.OnEnter()

Explicación

Esta función es llamada cuando el jugador entra en una zona.

Ejemplo de Script

El ejemplo muestra un mensaje cuando el jugador entra en la zona llamada Zone0.

Zone0 = {}

function Zone0.OnEnter()
  Game.Message("Entering in the zone")
end

Zone.OnLeave()

Explicación

Esta función es llamada cuando el jugador sale de una zona.

Ejemplo de Script

El ejemplo muestra un mensaje cuando el jugador sale de la zona llamada Zone0.

Zone0 = {}

function Zone0.OnLeave()
  Game.Message("Leaving the zone")
end

OnSomersault(bClockWise)

[requiere Xmoto >= 0.2.1]

Explicación

Esta función se llamada cada vez que el jugador hace una voltereta. Si bClockWise es 1 la voltereta sigue las agujas del reloj, si es 0 es al revés.

Ejemplo de Script

El ejemplo muestra un mensaje cuando el jugador hace una voltereta.

function OnSomersault(bClockWise)
  if(bClockWise == 1)
  then
    Game.Message("ClockWise Somersault")
  else
    Game.Message("CounterClockWise Somersault")
  end
end

OnWheel1Touchs(status), OnWheel2Touchs(status)

[requiere Xmoto >= 0.2.1]

Explicación

Esta función es llamada cada vez que la rueda 1 toca la tierra o se detiene para tocarla. (el estatus es 1 si la rueda no estaba tocando la tierra y ahora si lo toca, y 0 para las demás situaciones)

Ejemplo de Script

El ejemplo muestra la nueva máxima durada de un salto cada vez que es hace uno nuevo.

max_jump_time = 1.0 -- start at 1 to not count smaller jumps
jump_begin    = 0.0
touch_1  = false
touch_2 = false

function OnWheel1Touchs(bStatus)
  if(bStatus == 1)
  then
    updateMax()
    touch_1 = true
  else
    touch_1 = false
    jump_begin = Game.GetTime()
  end
end

function OnWheel2Touchs(bStatus)
  if(bStatus == 1)
  then
    updateMax()
    touch_2 = true
  else
    touch_2 = false
    jump_begin = Game.GetTime()
  end
end

function updateMax()
  if(touch_1 == false and touch_2 == false)
  then
    if(Game.GetTime() - jump_begin > max_jump_time)
    then
      max_jump_time = Game.GetTime() - jump_begin
      Game.Message("New high jump: "..max_jump_time)
    end
  end
end

Funciones del X-Moto

GetTime()

Explicación

Retorna el tiempo transcurrido desde el inicio del nivel.

Ejemplo de Script

El ejemplo muestra un mensaje si el jugador tarda mas de 10 segundos en entrar en una zona.

Zone0 = {}

function Zone0.OnEnter()
  if Game.GetTime() > 10.0
  then
    Game.Message("10 seconds to come there, that's a lot !")
  end
end

Message(msgs)

Explicación

Muestra un mensaje en la pantalla. El mensaje se eliminara automáticamente después de 5 segundos. Puedes llamar a esta función unas cuantas veces : los mensajes se mostraran todos.

Ejemplo de Script

El ejemplo muestra algunos mensajes al inicio del nivel.

function OnLoad()
  Game.Message("This level is scripted")
  Game.Message("GO GO GO !!!")
  return true
end

ClearMessages()

Explicación

Elimina los mensajes de la pantalla.

Ejemplo de Script

El ejemplo muestra como eliminar los mensajes de la pantalla y mostrar uno nuevo en algunas circunstancias.

Zone0 = {}

function Zone0.OnEnter()
  Game.ClearMessages()
  Game.Message("OnEnter")
end

function Zone0.OnLeave()
  Game.ClearMessages()
  Game.Message("OnLeave")
end

SetGravity(x, y)

Explicación

Cambia la gravedad en el juego (horizontal y vertical).

Ejemplo de Script

El ejemplo muestra como invertir la gravedad. Fíjate que en el X-Moto, la gravedad se ha de multiplicar por -1, porque las coordinadas de la pantalla están invertidas en la dirección y.

function OnLoad()
  Game.SetGravity(0, 9.81)
  return true
end

GetGravity()

Explicación

Retorna el par (gravedad horizontal, y gravedad vertical).

Ejemplo de Script

El ejemplo muestra el viento y la gravedad al inicio del nivel.

function OnLoad()
  x, y = Game.GetGravity()
  Game.Message("Wind : "..x)
  Game.Message("Gravity : "..(y*-1))
  return true
end

IsPlayerInZone(zone)

Explicación

Retorna true si el jugador esta en la zona especificada.

Ejemplo de Script

Este ejemplo es un poco mas complicado. Cuando el jugador entra en una zona, la gravedad baja poco a poco. Una vez el jugador sale de la zona, la gravedad vuelve a ser 9.81 gradualmente.

Zone0 = {}
x = -9.81

function Tick()
  if Game.IsPlayerInZone("Zone0")
  then
    Game.SetGravity(0, x)
    x = x + 0.1
  end

  return true
end

function Zone0.OnLeave()
  x = -9.81
  Game.SetGravity(0, x)
end

SetPlayerPosition(x, y, bRight)

Explicación

Especifica la posición y la dirección del jugador en el juego. bRight puede ser 0 o 1.

Ejemplo de Script

El ejemplo tele-transporta al jugador cada vez que entra en la zona.

Zone0 = {}

function Zone0.OnEnter()
  Game.SetPlayerPosition(5, 0, 1)
end

GetPlayerPosition()

Explicación

Retorna el trio (x, y, bRight) que da la posición del jugador en el juego.

Ejemplo de Script

Este ejemplo hace que el jugador no sea capaz de coger una fresa ;-)

function Tick()
  x, y, bright = Game.GetPlayerPosition()
  if x > 18
  then
    Game.SetPlayerPosition(5, 0, 1)
  end

  return true
end

SetEntityPos(entity, x, y)

Explicación

Especifica la posición de una figura en las coordenadas (x, y) dentro del juego.

Ejemplo de Script

El ejemplo cambia la posición de una fresa cada segundo.

function Tick()
  i,f = math.mod(math.ceil(Game.GetTime()), 2)

  if i == 1
  then
    Game.SetEntityPos("Strawberry0", 10, 0.5)
  else
    Game.SetEntityPos("Strawberry0", 30, 0.5)
  end

  return true
end

GetEntityPos(entity)

Explicación

Retorna la posición de una figura dentro del juego.

Ejemplo de Script

El ejemplo muestra otra manera para mover una fresa.

last_update = 0

function Tick()
  sec = math.ceil(Game.GetTime())

  if last_update < sec
  then
    x, y = Game.GetEntityPos("Strawberry0")

    if(x == 20)
    then
      x_new = 25
    else
      x_new = 20
    end

    if(y == 0.5)
    then
      y_new = 2
  else
      y_new = 0.5
    end

    Game.SetEntityPos("Strawberry0", x_new, y_new)
    last_update = sec
  end

  return true
end

SetKeyHook(key, function)

Explicación

Cuando el jugador pulse la "tecla" especificada, una función sera llamada.

Ejemplo de Script

El ejemplo muestra como cambiar la gravedad simplemente apretando una tecla.

g = -9.81

function OnLoad()
  Game.SetKeyHook("G", "GravityChange")
  return true
end

function GravityChange()
  g = g * -1
  Game.SetGravity(0, g)
end

GetKeyByAction(function)

Explicación

Retorna la tecla asociada a una acción. Las posibles acciones son Drive, Brake, PullBack, PushForward, ChangeDirection.

Ejemplo de Script

El ejemplo muestra por pantalla como conducir al principio del nivel.

function OnLoad()
  Game.Message("To drive, press "..Game.GetKeyByAction("Drive"))
  return true
end

Log(msgs)

Explicación

Registra un mensaje en el xmoto.log.

Ejemplo de Script

El ejemplo registra el mensaje "An error occured" al inicio del nivel.

function OnLoad()
  Game.Log("An error occured")
  return true
end

MoveBlock(block, x, y)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función permite al X-Moto mover un bloque dentro de un nivel. El bloque ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />). Fíjate que mover un bloque puede ser peligroso: comprueba que el jugador no quede dentro del bloque una vez lo hayas movido.

Ejemplo de Script

En el ejemplo, cuando el jugador pulsa la tecla M, el bloque se mueve hacia la derecha.

function OnLoad()
  Game.SetKeyHook("M", "MoveTheBlock")
  return true
end

function MoveTheBlock()
  Game.MoveBlock("Block0", 1, 0)
end

SetBlockCenter(block, x, y)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función da el centro de un bloque relativo a la posición del bloque (y del nivel si el bloque se encuentra en la posición (0, 0)). El centro se utiliza para las funciones SetBlockPos(), GetBlockPos() y SetBlockRotation(). Esta función se utiliza generalmente en la función Load() porque no es lógico volver a cambiar el centro (aun así puedes cambiarlo si quieres).

Ejemplo de Script

En el ejemplo, se especifica el centro de un bloque en el centro de un cuadrado. Entonces, cuando el jugador pulse M, el bloque se pondrá debajo del jugador.

function OnLoad()
  Game.SetKeyHook("M", "PutTheBlock")
  Game.SetBlockCenter("Block0", 7.5, 7.5)
  return true
end

function PutTheBlock()
  x, y = Game.GetPlayerPosition()
  Game.SetBlockPos("Block0", x, y -2.5 -1)
end

SetBlockPos(block, x, y)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función permite al X-Moto mover un bloque según su centro dentro de un nivel. El bloque ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />). Fíjate que mover un bloque puede ser peligroso: comprueba que el jugador no quede dentro del bloque una vez lo hayas movido.

Ejemplo de Script

En el ejemplo, se especifica el centro de un bloque en el centro de un cuadrado. Entonces, cuando el jugador pulse M, el bloque se pondrá debajo del jugador.

function OnLoad()
  Game.SetKeyHook("M", "PutTheBlock")
  Game.SetBlockCenter("Block0", 7.5, 7.5)
  return true
end

function PutTheBlock()
  x, y = Game.GetPlayerPosition()
  Game.SetBlockPos("Block0", x, y -2.5 -1)
end

GetBlockPos(block)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función da la posición de un bloque dado. El bloque ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />).

Ejemplo de Script

El ejemplo muestra como utilizar esta función como una condición. Ahora, puedes mover el bloque debajo de la moto tan solo si juegas hacia la derecha.

function OnLoad()
  Game.SetKeyHook("M", "PutTheBlock")
  Game.SetBlockCenter("Block0", 7.5, 7.5)
  return true
end

function PutTheBlock()
  x, y = Game.GetPlayerPosition()
  bx, by = Game.GetBlockPos("Block0")
  if(x > bx)
  then
  Game.SetBlockPos("Block0", x, y -2.5 -1)
  end
end

SetBlockRotation(block, angle)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función hace rotar los bloques. El bloque ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />).

Ejemplo de Script

En el ejemplo, si el jugador deja apretada la tecla M, el bloque rotara.

a = 0

function OnLoad()
  Game.SetKeyHook("M", "PutTheBlock")
  Game.SetBlockCenter("Block0", 7.5, 7.5)
  return true
end

function PutTheBlock()
  a = a + math.pi / 256.0
  Game.SetBlockRotation("Block0", a)
end

SetDynamicEntityRotation(entity, initAngle, radius, period, startTime, endTime)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función indica a una figura hacer círculos durante un tiempo dado. La posición actual del radio donde se encuentra la figura en el circulo es en la posición initAngle (in rad). La figura hará un circulo calculado en centésimas. La animación empezará en startTime en centésimas y acabará en endTime en centésimas, así pues, la duración es endTime-startTime/100 segundos. Un endTime de 0 significa una animación infinita. Fíjate que puedes componer rotaciones y movimientos. Fíjate también que un argumento negativo te permite cambiar el comportamiento de la animación. Por ejemplo, un periodo negativo hará rotar a la figura en el sentido contrario.

Ejemplo de Script

El ejemplo muestra como de fácil es mover una fresa. L'InitAngle es -PI/2 porque la fresa esta en la parte baja de donde queremos que se mueva.

function OnLoad()
  Game.SetDynamicEntityRotation("Strawberry0", -math.pi/2, 2, 500, 0, 0)
  return true
end

SetDynamicEntityTranslation(entity, fX, fY, period, startTime, endTime)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función permite indicar a una figura que haga un movimiento durante un tiempo dado. La longitud del movimiento es fX en el eje X y fY en el eje Y. La figura hará el movimiento en un tiempo calculado en centésimas/2. La animación empezara en startTime en centésimas y acabara en endTime en centésimas, así pues, la duración es endTime-startTime/100 segundos. Un endTime de 0 significa una animación infinita. Fíjate que puedes componer rotaciones y movimientos. Fíjate también que un argumento negativo te permite cambiar el comportamiento de la animación.

Ejemplo de Script

El ejemplo muestra la composición de unas animaciones.

function OnLoad()
  Game.SetDynamicEntityTranslation("Strawberry0", 10, 0, 500, 0, 0)
  Game.SetDynamicEntityTranslation("Strawberry0", 0, 1, 100, 0, 0)
  return true
end

SetDynamicEntityNone(entity)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función elimina todas las animaciones aplicadas a una figura.

Ejemplo de Script

El ejemplo pide a una figura hacer un movimiento en primer lugar y después, hacer una rotación. Si el jugador pulsa la tecla S, la fresa se quedara quieta.

function OnLoad()
  Game.SetDynamicEntityTranslation("Strawberry0", -2, 0, 1000, 0, 500)
  Game.SetDynamicEntityRotation("Strawberry0", -math.pi/2, 2, 500, 500, 0)
  Game.SetKeyHook("S", "StopAnimation")
  return true
end

SetDynamicBlockRotation(block, initAngle, radius, period, startTime, endTime)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función permite indicar a un bloque hacer un circulo durante un tiempo dado. La posición actual del radio donde se encuentra la figura en el circulo es en la posición initAngle (in rad). El bloque hará un circulo calculado en centésimas. La animación empezara en startTime en centésimas y acabara en endTime en centésimas, así pues, la duración es endTime-startTime/100 segundos. Un endTime de 0 significa una animación infinita. Fíjate que puedes componer rotaciones y movimientos. Fíjate también que un argumento negativo te permite cambiar el comportamiento de la animación. Por ejemplo, un período negativo hará rotar a la figura en el sentido contrario. El bloque ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />). No muevas los bloque muy rápido, sino la moto podría traspasar el bloque.

Ejemplo de Script

El ejemplo muestra como mover fácilmente un bloque.

function OnLoad()
  Game.SetDynamicBlockRotation("Block0", -math.pi/2, 2, 500, 0, 0)
  return true
end

SetDynamicBlockTranslation(block, fX, fY, period, startTime, endTime)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función permite indicar a un bloque hacer un movimiento durante un tiempo dado. Un movimiento es una secuencia repetitiva de ida y vuelta entre dos puntos dados. La longitud del movimiento es fX en el eje X y fY en el eje Y. La animación empezara en startTime en centésimas y acabara en endTime en centésimas, así pues, la duración es endTime-startTime/100 segundos. Un endTime de 0 significa una animación infinita. Fíjate que puedes componer rotaciones y movimientos. El bloque ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />). No muevas los bloque muy rápido, sino la moto podría traspasar el bloque.

entity: Define que figura se mueve
fX: Define donde del eje X la figura se mueve
fY: Define donde del eje Y la figura se mueve
period: Define, cuanto tardara la figura en volver al punto de origen
startTime: Define, cuando empezara el movimiento
endTime: Define, cuando finalizara el movimiento Con el objetivo de hacer los archivos de repeticiones mas pequeños, deberías utilizar Translation en lugar de la función MoveBlock. Mas abajo hay un pequeño ejemplo sobre como convertir una función MoveBlock en una función Translation.

Ejemplo de Script

En el ejemplo, el bloque hace un movimiento infinito : Se mueve desde el punto de origen (0,0) hasta (10,1) en 750ms, y retorna de nuevo 750ms.

function OnLoad()
  Game.SetDynamicBlockTranslation("Block0", 10, 1, 1500, 0, 0)
  return true
end

Ejemplo de como convertir una función MoveBlock en una función Translation. (mira a continuación):

function Tick()
Game.MoveBlock("Block0", 0.5,0)
return true
end

Block0 se mueve todo el rato hacia la derecha: 0.5px cada 1/100s Así que se mueve a una velocidad de 300m/60s

function OnLoad()
Game.SetDynamicBlockTranslation("Block0", 300, 0, 12000, 0, 6000)
return true
end

Esta es la función MoveBlock en la versión de Translation. Se mueve 300m a la derecha y 300m de vuelta a la izquierda durante 12000ms. endTime esta a 12000/2=6000, así que el movimiento parara tan pronto como Block0 este en (300,0)

SetDynamicBlockNone(block)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función elimina todas las animaciones aplicadas a un bloque. El bloque ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />).

Ejemplo de Script

En el ejemplo, el bloque se moverá hasta que el jugador pulse la tecla S.

function OnLoad()
  Game.SetDynamicBlockTranslation("Block0", 10, 1, 1500, 0, 0)
  Game.SetKeyHook("S", "StopAnimation")
  return true
end

function StopAnimation()
  Game.SetDynamicBlockNone("Block0")
end

CameraZoom(z)

[requiere Xmoto >= 0.2.0]

Explicación

En algunos niveles, podrías necesitar que la cámara esté mas lejos respecto al jugador. Utiliza esta función para cambiar el zoom de la cámara.

Ejemplo de Script

El ejemplo muestra como un zoom diferente se puede utilizar para jugar en el nivel.

function OnLoad()
  Game.CameraZoom(-0.05)
  return true
end

CameraMove(x, y)

[requiere Xmoto >= 0.2.0]

Explicación

Para algunos niveles concretos, quizás quieres mover la cámara. Utiliza esta función para hacerlo.

Ejemplo de Script

El ejemplo muestra como enfocar otra parte del nivel de donde se encuentra el jugador.

function OnLoad()
  Game.CameraMove(0, 3)
  return true
end

GetEntityRadius(entity)

[requiere Xmoto >= 0.2.0]

Explicación

Retorna el radio de una figura. Este radio se utiliza para las colisiones. Puedes utilizarlo para tus propias colisiones o para otra cosa.

Ejemplo de Script

El ejemplo te muestra el radio de una fresa.

function OnLoad()
  Game.Message("Radius of the strawberry : "..Game.GetEntityRadius("Strawberry0"))
  return true
end

IsEntityTouched(entity)

[requiere Xmoto >= 0.2.0]

Explicación

Esta función es llamada cuando una figura es tocada. Pero algunas veces puede querer saber cuando una figura no es tocada. Utiliza esta función.

Ejemplo de Script

El ejemplo muestra como hacer una acción cuando el jugador no esta tocando una figura.

g = -9.81

function OnLoad()
  Game.Message("Gravity is increasing while you are not touching the snowman")
  return true
end

function Tick()
  if(Game.IsEntityTouched("SnowMan0") == 0)
  then
    g = g - 0.03
    Game.SetGravity(0, g);
  end
  return true
end

KillPlayer()

[requiere Xmoto >= 0.2.1]

Explicación

Si llamas a esta función, el jugador morirá. Es interesante si quieres que el jugador muera en tocar un enemigo, por ejemplo.

Ejemplo de Script

En el siguiente ejemplo, el jugador muere cuando entra en una zona.

Zone0 = {}

function Zone0.OnEnter()
  Game.KillPlayer()
end

KillEntity(entityID)

[requiere Xmoto >= 0.2.1]

Explicación

Si llamas a esta función, se eliminara la figura entityID. La figura puede ser una fresa o cualquier otra.

Ejemplo de Script

En el siguiente ejemplo, se elimina una fresa cuando el jugador entra en la zona Zone0.

Zone0 = {}

function Zone0.OnEnter()
  Game.KillEntity("Strawberry0")
end

WinPlayer()

[requiere Xmoto >= 0.2.1]

Explicación

Si llamas a esta función, el jugador ganara la partida (incluso si quedan fresas pendientes).

Ejemplo de Script

En el siguiente ejemplo, el jugador gana cuando entra en la zona Zone0.

Zone0 = {}

function Zone0.OnEnter()
  Game.WinPlayer()
end

RemainingStrawberries()

[requiere Xmoto >= 0.2.1]

Explicación

Esta función retorna el numero de fresas pendientes en el nivel.

Ejemplo de Script

En el siguiente ejemplo, cuando el jugador entra en la zona Zone0, el numero de fresas pendientes se muestra por pantalla.

Zone0 = {}

function Zone0.OnEnter()
  Game.Message(Game.RemainingStrawberries())
end