Ca:Scripted levels

From X-Moto
Jump to: navigation, search

English - Español

Contents

Introducció

Els Scripts fan que un nivell esdevingui dinàmic. Pots canviar algunes propietats físiques, moure objectes, modificar la logica del joc, etc. Un script esta fet amb el llenguatge Lua i es pot afegir al arxiu del nivell.

La documentació sobre el llenguatge Lua la pots trobar aquí:
http://www.lua.org/manual/5.1/

Per fer un script, has de saber almenys una mica sobre l'arxiu de nivell. Es un arxiu XML. Inclou propietats com el nom del nivell, la seva descripció ... A mès, inclou les definicions dels blocs i les figures. Un bloc es composa per vèrtex que son punts units per formar un polígon.

Per presentar la forma d'escriure un script, lo següent es un nivell basic que utilitzarem d'exemple:

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

Aquest nivell es pot fer fàcilment amb l'xmoto-edit. Inclou un bloc anomenat Block0 que es un quadrat, una maduixa anomenada Strawberry0 i una zona anomenada Zone0. Una zona es una part invisible del nivell que farà que s'executin accions quan el jugador estigui a dins.

Algunes funcions requereixen una mínima versió de l'xmoto per a funcionar. Si fas servir alguna d'aquestes funcions, si us plau, posa aquesta informació en l'arxiu del nivell. Per exemple, per fer que el teu nivell requereixi l'X-Moto 0.2.0, afegeix aquesta linea al codi del teu nivell:

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

Scripted level.jpg

Tot el codi de l'script es llenguatge Lua. Pots trobar la sintaxis aquí. De totes maneres, si esculls incloure l'script dins d'un arxiu XML, els símbols < i > s'han de reemplaçar amb &lt; i &gt;. El codi de l'script es pot afegir entre <script> i </script> dins de l'arxiu del nivell.

Funcions anomenades per l'X-Moto

OnLoad()

Explicació

Aquest funció es anomenada un cop a l'inici del nivell. Has de retornar true si res dolent succeeix.

Exemple d'Script

L'exemple mostra un missatge a l'inici del nivell.

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

Tick()

Explicació

Funció nomenada un cop en cada centèsima de segon. Has de retornar true si res dolen succeeix

Exemple d'Script

Aquest exemple s'iniciara amb gravetat 0 ; desprès, anirà incrementant-se amb el temps. Com que la gravetat de la terra es 9.81, no hi haurà gravetat terrestre fins assolir els 9.81 segons. Fixa't que en l'xmoto la gravetat vertical s'ha de multiplicar per -1 perquè les coordenades de la pantalla estan invertides.

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ó

Aquesta funció es anomenada quan una figura (una maduixa per exemple) es tocada. La figura s'ha de declarar en l'script. Fixa't que el paràmetre <size r> permet escollir el marge de la distancia que es considera per que una figura sigui tocada.

Exemple d'Script

L'exemple mostra un missatge quan es toca una maduixa.

Strawberry0 = {}

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

Zone.OnEnter()

Explicació

Aquesta funció es anomenada quan el jugador entra en una zona.

Exemple d'Script

L'exemple mostra un missatge quan el jugador entra en la zona anomenada Zone0.

Zone0 = {}

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

Zone.OnLeave()

Explicació

Aquesta funció es anomenada quan el jugador surt d'una zona.

Exemple d'Script

L'exemple mostra un missatge quan el jugador surt de la zona anomenada Zone0.

Zone0 = {}

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

OnSomersault(bClockWise)

[require Xmoto >= 0.2.1]

Explicació

Aquesta funció es anomenada cada cop que el jugador fa una tombarella. Si bClockWise es 1 la tombarella segueix les agulles del rellotge, si es 0 es al reves.

Exemple d'Script

L'exemple mostra un missatge quan el jugador fa una tombarella.

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

OnWheel1Touchs(status), OnWheel2Touchs(status)

[require Xmoto >= 0.2.1]

Explicació

Aquesta funció es anomenada cada cop que la roda 1 toca el terra o s'atura per tocar-lo. (l'estatus es 1 si la roda no estava tocant el terra i ara si el toca, i 0 per les demès situacions)

Exemple d'Script

L'exemple mostra la nova màxima durada d'un salt cada cop que es fa un de nou.

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

Funcions de l'X-Moto

GetTime()

Explicació

Retorna el temps transcorregut des de l'inici del nivell.

Exemple d'Script

L'exemple mostra un missatge si el jugador triga mes de 10 segons 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ó

Mostra un missatge en la pantalla. El missatge s'eliminara automàticament desprès de 5 segons. Pots anomenar aquesta funció uns quants cops : els missatges es mostraran tots.

Exemple d'Script

L'exemple mostra alguns missatges al inici de nivell.

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

ClearMessages()

Explicació

Elimina els missatges de la pantalla.

Exemple d'Script

L'exemple mostra com eliminar els missatges de la pantalla i mostrar un de nou en algunes circumstancies.

Zone0 = {}

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

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

SetGravity(x, y)

Explicació

Canvia la gravetat en el joc (horitzontal i vertical).

Exemple d'Script

L'exemple mostra com invertir la gravetat. Fixa't que en l'X-Moto, la gravetat s'ha de multiplicar per -1, perquè les coordinades de la pantalla esta invertides en la direcció y.

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

GetGravity()

Explicació

Retorna el parell (gravetat horitzontal, i gravetat vertical).

Exemple d'Script

L'exemple mostra el vent i la gravetat al inici del nivell.

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

IsPlayerInZone(zone)

Explicació

Retorna true si el jugador esta en la zona especificada.

Exemple d'Script

Aquest exemple es una mica mes complicat. Quan el jugador entra en una zona, la gravetat baixa de mica en mica. Un cop el jugador surt de la zona, la gravetat torna a ser 9.81 gradualment.

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ó

Especifica la posició i la direcció del jugador en el joc. bRight pot ésser 0 o 1.

Exemple d'Script

L'exemple tele-transporta al jugador cada cop que entra en la zona.

Zone0 = {}

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

GetPlayerPosition()

Explicació

Retorna el triplet (x, y, bRight) que dona la posició del jugador en el joc.

Exemple d'Script

Aquest exemple fa que el jugador no sigui incapaç d'agafar una maduixa ;-)

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ó

Especifica la posició d'una figura en les coordenades (x, y) dins del joc.

Exemple d'Script

L'exemple canvia la posició d'una maduixa cada segon.

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ó

Retorna la posició d'una figura dins del joc.

Exemple d'Script

L'exemple mostra una altre manera per moure una maduixa.

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ó

Quan el jugadpr premi la "tecla" especificada, una funció sera anomenada.

Exemple d'Script

L'exemple mostra com canviar la gravetat simplement premen 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ó

Retorna la tecla asociada a una acció. Les possibles accions son Drive, Brake, PullBack, PushForward, ChangeDirection.

Exemple d'Script

L'exemple mostra per pantalla com conduir al principi del nivell.

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

Log(msgs)

Explicació

Registra un missatge en l'xmoto.log.

Exemple d'Script

L'exemple registra el missatge "An error occured" a l'inici del nivell.

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

MoveBlock(block, x, y)

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció permet a l'X-Moto moure un bloc dins d'un nivell. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />). Fixa't que moure un bloc pot ser perillós: assegurat de que el jugador no quedi dins del bloc un cop l'hagis mogut.

Exemple d'Script

En l'exemple, quan el jugador prem la tecla M, el bloc es mou cap a la dreta.

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

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

SetBlockCenter(block, x, y)

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció dona el centre de un bloc relatiu a la posició del bloc (i del nivell si el bloc es troba a la posició (0, 0)). El centre s'utilitza per les funcions SetBlockPos(), GetBlockPos() i SetBlockRotation(). Aquesta funció s'utilitza generalment en la funció Load() perquè no es lògic tornar a canviar el centre (encara així pots canviar-lo si vols).

Exemple d'Script

En l'exemple, s'especifica el centre de un bloc en el centre de un quadrat. Aleshores, quan el jugador premi M, el bloc es posara a sota 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)

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció permet a l'X-Moto moure un bloc segons el seu centre dins d'un nivell. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />). Fixa't que moure un bloc pot ser perillós: assegurat de que el jugador no quedi dins del bloc un cop l'hagis mogut.

Exemple d'Script

En l'exemple, s'especifica el centre de un bloc en el centre de un quadrat. Aleshores, quan el jugador premi M, el bloc es posara a sota 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)

[require Xmoto >= 0.2.0]

Explicació

Aquesta funcio dona la posició d'un bloc donat. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />).

Exemple d'Script

L'exemple mostra com utilitzar aquesta funció com a condició. Ara, pots moure el bloc sota la moto nomes si jugues cap a la dreta.

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)

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció fa rotar als blocs. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />).

Exemple d'Script

En l'exemple, si el jugador deixa premuda la tecla M, el bloc 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)

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció indica a una figura fer cercles durant un temps donat. La posició actual del radi on es troba la figura en el cercle es en la posició initAngle (in rad). La figura farà un cercle calculat en centèsims. L'animació començara en startTime en centèsims i acabara en endTime en centèsims, així doncs, la duració es endTime-startTime/100 segons. Un endTime de 0 significa una animació infinita. Fixa't que pots compondre rotacions i moviments. Fixa't també que un argument negatiu et permet canviar el comportament de l'animació. Per exemple, un període negatiu farà rotar a la figura en el sentit contrari.

Exemple d'Script

L'exemple mostra com de fàcil es moure una maduixa. L'InitAngle es -PI/2 perquè la maduixa esta a la part baixa d'on volem que es mogui.

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

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

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció permet indicar a una figura que faci un moviment durant un temps donat. La longitud del moviment es fX en l'eix X i fY en l'eix Y. La figura farà el moviment en un temps calculat en centèsims/2. L'animació començara en startTime en centèsims i acabara en endTime en centèsims, així doncs, la duració es endTime-startTime/100 segons. Un endTime de 0 significa una animació infinita. Fixa't que pots compondre rotacions i moviments. Fixa't també que un argument negatiu et permet canviar el comportament de l'animació.

Exemple d'Script

L'exemple mostra la composició d'unes animacions.

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

SetDynamicEntityNone(entity)

[require Xmoto >= 0.2.0]

Explicació

Aquesta funcio elimina totes les animacions aplicades a una figura.

Exemple d'Script

L'exemple demana a una figura fer un moviment en primer lloc i despres, fer una rotació. Si el jugador prem la tecla S, la maduixa es 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

function StopAnimation()
  Game.SetDynamicEntityNone("Strawberry0")
end

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

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció permet indicar a un bloc fer un cercle durant un temps donat. La posició actual del radi on es troba la figura en el cercle es en la posició initAngle (in rad). El bloc farà un cercle calculat en centèsims. L'animació començara en startTime en centèsims i acabara en endTime en centèsims, així doncs, la duració es endTime-startTime/100 segons. Un endTime de 0 significa una animació infinita. Fixa't que pots compondre rotacions i moviments. Fixa't també que un argument negatiu et permet canviar el comportament de l'animació. Per exemple, un període negatiu farà rotar a la figura en el sentit contrari. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />). No moguis els blocs massa ràpid, sinó la moto podria travessar el bloc.

Exemple d'Script

L'exemple mostra com moure fàcilment un bloc.

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

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

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció permet indicar a un bloc que faci un moviment durant un temps donat. Un moviment es una seqüència repetitiva d'anada i tornada entre dos punts donats. La longitud del moviment es fX en l'eix X i fY en l'eix Y. L'animació començara en startTime en centèsims i acabara en endTime en centèsims, així doncs, la duració es endTime-startTime/100 segons. Un endTime de 0 significa una animació infinita. Fixa't que pots compondre rotacions i moviments. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />). No moguis els blocs massa ràpid, sinó la moto podria travessar el bloc.

entity: Defineix quina figura es mou
fX: Defineix on de l'eix X la figura es mou
fY: Defineix on de l'eix Y la figura es mou
period: Defineix, quant trigara la figura en tornar al punt d'origen
startTime: Defineix, quan comença el moviment
endTime: Defineix, quan finalitza el moviment

Amb l'objectiu de fer els arxius de repeticions mes petits, hauries d'utilitzar Translation en comptes de la funció MoveBlock. A sota hi ha un exemple de com convertir una funció MoveBlock en una funció Translation.

Exemple d'Script

En l'exemple, el bloc fa un moviment infinit : Es mou des de el punt d'origen (0,0) fins (10,1) en 750ms, i retorna de nou 750ms.

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

Exemple de com convertir una funció MoveBlock en una funció Translation. (mira a continuació):

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

Block0 es mou tota l'estona cap a la dreta: 0.5px cada 1/100s Així que es mou a una velocitat de 300m/60s

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

Aquesta es la funció MoveBlock en la versió de Translation. Es mou 300m a la dreta i 300m de tornada a l'esquerre durant 12000ms. endTime esta a 12000/2=6000, així que el moviment parara tan aviat com Block0 sigui a (300,0)

SetDynamicBlockNone(block)

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció elimina totes les animacions aplicades a un bloc. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />).

Exemple d'Script

En l'exemple, el bloc es mourà fins que el jugador premi 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)

[require Xmoto >= 0.2.0]

Explicació

En alguns nivells, podries necessitar que la càmera estigues mes lluny respecte al jugador. Utilitza aquesta funció per canviar el zoom de la càmera.

Exemple d'Script

L'exemple mostra com un zoom diferent es pot utilitzar per a jugar en el nivell.

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

CameraMove(x, y)

[require Xmoto >= 0.2.0]

Explicació

Per algun nivells concrets, potser vols moure la càmera. Utilitza aquesta funció per fer-ho.

Exemple d'Script

L'exemple mostra com enfocar una altre part del nivell d'on es troba el jugador.

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

GetEntityRadius(entity)

[require Xmoto >= 0.2.0]

Explicació

Retorna el radi d'una figura. Aquest radi s'utilitza per a les col·lisions. Pots utilitzar-lo per les teves pròpies col·lisions o per alguna altre cosa.

Exemple d'Script

L'exemple et mostra el radi d'una maduixa.

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

IsEntityTouched(entity)

[require Xmoto >= 0.2.0]

Explicació

Aquesta funció es anomenada quan una figura es tocada. Peró alguns cops pots voler saber quan una figura no es tocada. Utilitza aquesta funció.

Exemple d'Script

L'exemple mostra com fer una acció quan el jugador no esta tocant 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()

[require Xmoto >= 0.2.1]

Explicació

Si anomenes aquesta funció, el jugador morira. Es interessant si vols que el jugador mori en tocar un enemic. per exemple.

Exemple d'Script

En el següent exemple, el jugador mor quan entri en una zona.

Zone0 = {}

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

KillEntity(entityID)

[require Xmoto >= 0.2.1]

Explicació

Si anomenes aquesta funció, s'eliminara la figura entityID. La figura pot ser una maduixa o qualsevol altre.

Exemple d'Script

En el següent exemple, s'elimina una maduixa quan el jugador entra en la zona Zone0.

Zone0 = {}

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

WinPlayer()

[require Xmoto >= 0.2.1]

Explicació

Si anomenes aquesta funció, el jugador guanyara el joc (fins i tot si queden maduixes pendents).

Exemple d'Script

En el següent exemple, el jugador guanya quan entra en la zona Zone0.

Zone0 = {}

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

RemainingStrawberries()

[require Xmoto >= 0.2.1]

Explicació

Aquesta funció retorna el numero de maduixes pendents en el nivell.

Exemple d'Script

En el següent exemple, quan el jugador entra en la zona Zone0, el numero de maduixes pendents es mostra per pantalla.

Zone0 = {}

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