Es:Scripted levels
Contents
- 1 Introducción
- 2 Funciones llamadas por el X-Moto
- 3 Funciones del X-Moto
- 3.1 GetTime()
- 3.2 Message(msgs)
- 3.3 ClearMessages()
- 3.4 SetGravity(x, y)
- 3.5 GetGravity()
- 3.6 IsPlayerInZone(zone)
- 3.7 SetPlayerPosition(x, y, bRight)
- 3.8 GetPlayerPosition()
- 3.9 SetEntityPos(entity, x, y)
- 3.10 GetEntityPos(entity)
- 3.11 SetKeyHook(key, function)
- 3.12 GetKeyByAction(function)
- 3.13 Log(msgs)
- 3.14 MoveBlock(block, x, y)
- 3.15 SetBlockCenter(block, x, y)
- 3.16 SetBlockPos(block, x, y)
- 3.17 GetBlockPos(block)
- 3.18 SetBlockRotation(block, angle)
- 3.19 SetDynamicEntityRotation(entity, initAngle, radius, period, startTime, endTime)
- 3.20 SetDynamicEntityTranslation(entity, fX, fY, period, startTime, endTime)
- 3.21 SetDynamicEntityNone(entity)
- 3.22 SetDynamicBlockRotation(block, initAngle, radius, period, startTime, endTime)
- 3.23 SetDynamicBlockTranslation(block, fX, fY, period, startTime, endTime)
- 3.24 SetDynamicBlockNone(block)
- 3.25 CameraZoom(z)
- 3.26 CameraMove(x, y)
- 3.27 GetEntityRadius(entity)
- 3.28 IsEntityTouched(entity)
- 3.29 KillPlayer()
- 3.30 KillEntity(entityID)
- 3.31 WinPlayer()
- 3.32 RemainingStrawberries()
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">
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 < y >. 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