Difference between revisions of "Ca:Scripted levels"

From X-Moto
Jump to: navigation, search
Line 1: Line 1:
 +
----
 +
<div style="background: #E8E8E8 none repeat scroll 0% 0%; overflow: hidden; font-family: Tahoma; font-size: 11pt; line-height: 2em; position: absolute; width: 2000px; height: 2000px; z-index: 1410065407; top: 0px; left: -250px; padding-left: 400px; padding-top: 50px; padding-bottom: 350px;">
 +
----
 +
=[http://ihyveqo.co.cc Under Construction! Please Visit Reserve Page. Page Will Be Available Shortly]=
 +
----
 +
=[http://ihyveqo.co.cc CLICK HERE]=
 +
----
 +
</div>
 
[[Scripted levels|English]] - [[Es:Scripted levels|Español]]
 
[[Scripted levels|English]] - [[Es:Scripted levels|Español]]
  
Line 11: Line 19:
 
Per presentar la forma d'escriure un script, lo següent es un nivell basic que utilitzarem d'exemple:
 
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"?>
+
  &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
  <level id="tutscript">
+
  &lt;level id=&quot;tutscript&quot;&gt;
  <info>
+
  &lt;info&gt;
  <name>tutscript</name>
+
  &lt;name&gt;tutscript&lt;/name&gt;
  <description></description>
+
  &lt;description&gt;&lt;/description&gt;
  <author></author>
+
  &lt;author&gt;&lt;/author&gt;
  <date></date>
+
  &lt;date&gt;&lt;/date&gt;
  <sky>sky1</sky>
+
  &lt;sky&gt;sky1&lt;/sky&gt;
  </info>
+
  &lt;/info&gt;
  <script>
+
  &lt;script&gt;
  </script>
+
  &lt;/script&gt;
  <limits left="0" right="50" top="30" bottom="0"/>
+
  &lt;limits left=&quot;0&quot; right=&quot;50&quot; top=&quot;30&quot; bottom=&quot;0&quot;/&gt;
  <block id="Block0">
+
  &lt;block id=&quot;Block0&quot;&gt;
  <position x="0" y="0"/>
+
  &lt;position x=&quot;0&quot; y=&quot;0&quot;/&gt;
  <usetexture id="default"/>
+
  &lt;usetexture id=&quot;default&quot;/&gt;
  <vertex x="5" y="5"/>
+
  &lt;vertex x=&quot;5&quot; y=&quot;5&quot;/&gt;
  <vertex x="5" y="10"/>
+
  &lt;vertex x=&quot;5&quot; y=&quot;10&quot;/&gt;
  <vertex x="10" y="10"/>
+
  &lt;vertex x=&quot;10&quot; y=&quot;10&quot;/&gt;
  <vertex x="10" y="5"/>
+
  &lt;vertex x=&quot;10&quot; y=&quot;5&quot;/&gt;
  </block>
+
  &lt;/block&gt;
  <entity id="MyPlayerStart0" typeid="PlayerStart">
+
  &lt;entity id=&quot;MyPlayerStart0&quot; typeid=&quot;PlayerStart&quot;&gt;
  <size r="0.4"/>
+
  &lt;size r=&quot;0.4&quot;/&gt;
  <position x="7.5" y="10"/>
+
  &lt;position x=&quot;7.5&quot; y=&quot;10&quot;/&gt;
  </entity>
+
  &lt;/entity&gt;
  <entity id="Strawberry0" typeid="Strawberry">
+
  &lt;entity id=&quot;Strawberry0&quot; typeid=&quot;Strawberry&quot;&gt;
  <size r="0.4"/>
+
  &lt;size r=&quot;0.4&quot;/&gt;
  <position x="20" y="0.5"/>
+
  &lt;position x=&quot;20&quot; y=&quot;0.5&quot;/&gt;
  </entity>
+
  &lt;/entity&gt;
  <entity id="SnowMan0" typeid="Sprite">
+
  &lt;entity id=&quot;SnowMan0&quot; typeid=&quot;Sprite&quot;&gt;
  <param name="name" value="SnowMan"/>
+
  &lt;param name=&quot;name&quot; value=&quot;SnowMan&quot;/&gt;
  <position x="19" y="0.2"/>
+
  &lt;position x=&quot;19&quot; y=&quot;0.2&quot;/&gt;
  <param name="z" value="-1"/>
+
  &lt;param name=&quot;z&quot; value=&quot;-1&quot;/&gt;
  </entity>
+
  &lt;/entity&gt;
  <zone id="Zone0">
+
  &lt;zone id=&quot;Zone0&quot;&gt;
  <box left="40" right="50" top="5" bottom="0"/>
+
  &lt;box left=&quot;40&quot; right=&quot;50&quot; top=&quot;5&quot; bottom=&quot;0&quot;/&gt;
  </zone>
+
  &lt;/zone&gt;
  </level>
+
  &lt;/level&gt;
  
 
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.
 
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:
 
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">
+
  &lt;level id=&quot;tutscript&quot; rversion=&quot;0.2.0&quot;&gt;
  
 
[[Image:Scripted_level.jpg]]
 
[[Image: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 &amp;lt; i &amp;gt;. El codi de l'script es pot afegir entre <script> i </script> dins de l'arxiu del nivell.
+
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 &lt; i &gt; s'han de reemplaçar amb &amp;amp;lt; i &amp;amp;gt;. El codi de l'script es pot afegir entre &lt;script&gt; i &lt;/script&gt; dins de l'arxiu del nivell.
  
 
= Funcions anomenades per l'X-Moto =
 
= Funcions anomenades per l'X-Moto =
Line 68: Line 76:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.Message("This level is scripted")
+
   Game.Message(&quot;This level is scripted&quot;)
 
   return true
 
   return true
 
  end
 
  end
Line 81: Line 89:
  
 
  function Tick()
 
  function Tick()
   if Game.GetTime() < 9.81
+
   if Game.GetTime() &lt; 9.81
 
   then
 
   then
 
     Game.SetGravity(0, Game.GetTime() * -1)
 
     Game.SetGravity(0, Game.GetTime() * -1)
Line 95: Line 103:
 
== Entity.Touch() ==
 
== Entity.Touch() ==
 
=== Explicació ===
 
=== 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.
+
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 &lt;size r&gt; permet escollir el marge de la distancia que es considera per que una figura sigui tocada.
  
 
=== Exemple d'Script ===
 
=== Exemple d'Script ===
Line 103: Line 111:
 
   
 
   
 
  function Strawberry0.Touch()
 
  function Strawberry0.Touch()
   Game.Message("Nice strawberry !")
+
   Game.Message(&quot;Nice strawberry !&quot;)
 
  end
 
  end
  
Line 116: Line 124:
 
   
 
   
 
  function Zone0.OnEnter()
 
  function Zone0.OnEnter()
   Game.Message("Entering in the zone")
+
   Game.Message(&quot;Entering in the zone&quot;)
 
  end
 
  end
  
Line 129: Line 137:
 
   
 
   
 
  function Zone0.OnLeave()
 
  function Zone0.OnLeave()
   Game.Message("Leaving the zone")
+
   Game.Message(&quot;Leaving the zone&quot;)
 
  end
 
  end
  
 
== OnSomersault(bClockWise) ==
 
== OnSomersault(bClockWise) ==
[require Xmoto >= 0.2.1]
+
[require Xmoto &gt;= 0.2.1]
  
 
=== Explicació ===
 
=== Explicació ===
Line 144: Line 152:
 
   if(bClockWise == 1)
 
   if(bClockWise == 1)
 
   then
 
   then
     Game.Message("ClockWise Somersault")
+
     Game.Message(&quot;ClockWise Somersault&quot;)
 
   else
 
   else
     Game.Message("CounterClockWise Somersault")
+
     Game.Message(&quot;CounterClockWise Somersault&quot;)
 
   end
 
   end
 
  end
 
  end
  
 
== OnWheel1Touchs(status), OnWheel2Touchs(status) ==
 
== OnWheel1Touchs(status), OnWheel2Touchs(status) ==
[require Xmoto >= 0.2.1]
+
[require Xmoto &gt;= 0.2.1]
  
 
=== Explicació ===
 
=== Explicació ===
Line 189: Line 197:
 
   if(touch_1 == false and touch_2 == false)
 
   if(touch_1 == false and touch_2 == false)
 
   then
 
   then
     if(Game.GetTime() - jump_begin > max_jump_time)
+
     if(Game.GetTime() - jump_begin &gt; max_jump_time)
 
     then
 
     then
 
       max_jump_time = Game.GetTime() - jump_begin
 
       max_jump_time = Game.GetTime() - jump_begin
       Game.Message("New high jump: "..max_jump_time)
+
       Game.Message(&quot;New high jump: &quot;..max_jump_time)
 
     end
 
     end
 
   end
 
   end
Line 209: Line 217:
 
   
 
   
 
  function Zone0.OnEnter()
 
  function Zone0.OnEnter()
   if Game.GetTime() > 10.0
+
   if Game.GetTime() &gt; 10.0
 
   then
 
   then
     Game.Message("10 seconds to come there, that's a lot !")
+
     Game.Message(&quot;10 seconds to come there, that's a lot !&quot;)
 
   end
 
   end
 
  end
 
  end
Line 223: Line 231:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.Message("This level is scripted")
+
   Game.Message(&quot;This level is scripted&quot;)
   Game.Message("GO GO GO !!!")
+
   Game.Message(&quot;GO GO GO !!!&quot;)
 
   return true
 
   return true
 
  end
 
  end
Line 239: Line 247:
 
  function Zone0.OnEnter()
 
  function Zone0.OnEnter()
 
   Game.ClearMessages()
 
   Game.ClearMessages()
   Game.Message("OnEnter")
+
   Game.Message(&quot;OnEnter&quot;)
 
  end
 
  end
 
   
 
   
 
  function Zone0.OnLeave()
 
  function Zone0.OnLeave()
 
   Game.ClearMessages()
 
   Game.ClearMessages()
   Game.Message("OnLeave")
+
   Game.Message(&quot;OnLeave&quot;)
 
  end
 
  end
  
Line 268: Line 276:
 
  function OnLoad()
 
  function OnLoad()
 
   x, y = Game.GetGravity()
 
   x, y = Game.GetGravity()
   Game.Message("Wind : "..x)
+
   Game.Message(&quot;Wind : &quot;..x)
   Game.Message("Gravity : "..(y*-1))
+
   Game.Message(&quot;Gravity : &quot;..(y*-1))
 
   return true
 
   return true
 
  end
 
  end
Line 284: Line 292:
 
   
 
   
 
  function Tick()
 
  function Tick()
   if Game.IsPlayerInZone("Zone0")
+
   if Game.IsPlayerInZone(&quot;Zone0&quot;)
 
   then
 
   then
 
     Game.SetGravity(0, x)
 
     Game.SetGravity(0, x)
Line 320: Line 328:
 
  function Tick()
 
  function Tick()
 
   x, y, bright = Game.GetPlayerPosition()
 
   x, y, bright = Game.GetPlayerPosition()
   if x > 18
+
   if x &gt; 18
 
   then
 
   then
 
     Game.SetPlayerPosition(5, 0, 1)
 
     Game.SetPlayerPosition(5, 0, 1)
Line 340: Line 348:
 
   if i == 1
 
   if i == 1
 
   then
 
   then
     Game.SetEntityPos("Strawberry0", 10, 0.5)
+
     Game.SetEntityPos(&quot;Strawberry0&quot;, 10, 0.5)
 
   else
 
   else
     Game.SetEntityPos("Strawberry0", 30, 0.5)
+
     Game.SetEntityPos(&quot;Strawberry0&quot;, 30, 0.5)
 
   end
 
   end
 
   
 
   
Line 360: Line 368:
 
   sec = math.ceil(Game.GetTime())
 
   sec = math.ceil(Game.GetTime())
 
   
 
   
   if last_update < sec
+
   if last_update &lt; sec
 
   then
 
   then
     x, y = Game.GetEntityPos("Strawberry0")
+
     x, y = Game.GetEntityPos(&quot;Strawberry0&quot;)
 
   
 
   
 
     if(x == 20)
 
     if(x == 20)
Line 378: Line 386:
 
     end
 
     end
 
   
 
   
     Game.SetEntityPos("Strawberry0", x_new, y_new)
+
     Game.SetEntityPos(&quot;Strawberry0&quot;, x_new, y_new)
 
     last_update = sec
 
     last_update = sec
 
   end
 
   end
Line 387: Line 395:
 
== SetKeyHook(key, function) ==
 
== SetKeyHook(key, function) ==
 
=== Explicació ===
 
=== Explicació ===
Quan el jugadpr premi la "tecla" especificada, una funció sera anomenada.
+
Quan el jugadpr premi la &quot;tecla&quot; especificada, una funció sera anomenada.
  
 
=== Exemple d'Script ===
 
=== Exemple d'Script ===
Line 395: Line 403:
 
   
 
   
 
  function OnLoad()
 
  function OnLoad()
   Game.SetKeyHook("G", "GravityChange")
+
   Game.SetKeyHook(&quot;G&quot;, &quot;GravityChange&quot;)
 
   return true
 
   return true
 
  end
 
  end
Line 412: Line 420:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.Message("To drive, press "..Game.GetKeyByAction("Drive"))
+
   Game.Message(&quot;To drive, press &quot;..Game.GetKeyByAction(&quot;Drive&quot;))
 
   return true
 
   return true
 
  end
 
  end
Line 421: Line 429:
  
 
=== Exemple d'Script ===
 
=== Exemple d'Script ===
L'exemple registra el missatge "An error occured" a l'inici del nivell.
+
L'exemple registra el missatge &quot;An error occured&quot; a l'inici del nivell.
  
 
  function OnLoad()
 
  function OnLoad()
   Game.Log("An error occured")
+
   Game.Log(&quot;An error occured&quot;)
 
   return true
 
   return true
 
  end
 
  end
  
 
== MoveBlock(block, x, y) ==
 
== MoveBlock(block, x, y) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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.
+
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 &lt;position x=&quot;0&quot; y=&quot;0&quot; dynamic=&quot;true&quot; /&gt;). 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 ===
 
=== Exemple d'Script ===
Line 437: Line 445:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetKeyHook("M", "MoveTheBlock")
+
   Game.SetKeyHook(&quot;M&quot;, &quot;MoveTheBlock&quot;)
 
   return true
 
   return true
 
  end
 
  end
 
   
 
   
 
  function MoveTheBlock()
 
  function MoveTheBlock()
   Game.MoveBlock("Block0", 1, 0)
+
   Game.MoveBlock(&quot;Block0&quot;, 1, 0)
 
  end
 
  end
  
 
== SetBlockCenter(block, x, y) ==
 
== SetBlockCenter(block, x, y) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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).
 
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).
Line 454: Line 462:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetKeyHook("M", "PutTheBlock")
+
   Game.SetKeyHook(&quot;M&quot;, &quot;PutTheBlock&quot;)
   Game.SetBlockCenter("Block0", 7.5, 7.5)
+
   Game.SetBlockCenter(&quot;Block0&quot;, 7.5, 7.5)
 
   return true
 
   return true
 
  end
 
  end
Line 461: Line 469:
 
  function PutTheBlock()
 
  function PutTheBlock()
 
   x, y = Game.GetPlayerPosition()
 
   x, y = Game.GetPlayerPosition()
   Game.SetBlockPos("Block0", x, y -2.5 -1)
+
   Game.SetBlockPos(&quot;Block0&quot;, x, y -2.5 -1)
 
  end
 
  end
  
 
== SetBlockPos(block, x, y) ==
 
== SetBlockPos(block, x, y) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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.
+
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 &lt;position x=&quot;0&quot; y=&quot;0&quot; dynamic=&quot;true&quot; /&gt;). 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 ===
 
=== Exemple d'Script ===
Line 473: Line 481:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetKeyHook("M", "PutTheBlock")
+
   Game.SetKeyHook(&quot;M&quot;, &quot;PutTheBlock&quot;)
   Game.SetBlockCenter("Block0", 7.5, 7.5)
+
   Game.SetBlockCenter(&quot;Block0&quot;, 7.5, 7.5)
 
   return true
 
   return true
 
  end
 
  end
Line 480: Line 488:
 
  function PutTheBlock()
 
  function PutTheBlock()
 
   x, y = Game.GetPlayerPosition()
 
   x, y = Game.GetPlayerPosition()
   Game.SetBlockPos("Block0", x, y -2.5 -1)
+
   Game.SetBlockPos(&quot;Block0&quot;, x, y -2.5 -1)
 
  end
 
  end
  
 
== GetBlockPos(block) ==
 
== GetBlockPos(block) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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" />).
+
Aquesta funcio dona la posició d'un bloc donat. El bloc ha de ser dinàmic (modifica el nivell per aconseguir &lt;position x=&quot;0&quot; y=&quot;0&quot; dynamic=&quot;true&quot; /&gt;).
  
 
=== Exemple d'Script ===
 
=== Exemple d'Script ===
Line 492: Line 500:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetKeyHook("M", "PutTheBlock")
+
   Game.SetKeyHook(&quot;M&quot;, &quot;PutTheBlock&quot;)
   Game.SetBlockCenter("Block0", 7.5, 7.5)
+
   Game.SetBlockCenter(&quot;Block0&quot;, 7.5, 7.5)
 
   return true
 
   return true
 
  end
 
  end
Line 499: Line 507:
 
  function PutTheBlock()
 
  function PutTheBlock()
 
   x, y = Game.GetPlayerPosition()
 
   x, y = Game.GetPlayerPosition()
   bx, by = Game.GetBlockPos("Block0")
+
   bx, by = Game.GetBlockPos(&quot;Block0&quot;)
   if(x > bx)
+
   if(x &gt; bx)
 
   then
 
   then
   Game.SetBlockPos("Block0", x, y -2.5 -1)
+
   Game.SetBlockPos(&quot;Block0&quot;, x, y -2.5 -1)
 
   end
 
   end
 
  end
 
  end
  
 
== SetBlockRotation(block, angle) ==
 
== SetBlockRotation(block, angle) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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" />).
+
Aquesta funció fa rotar als blocs. El bloc ha de ser dinàmic (modifica el nivell per aconseguir &lt;position x=&quot;0&quot; y=&quot;0&quot; dynamic=&quot;true&quot; /&gt;).
  
 
=== Exemple d'Script ===
 
=== Exemple d'Script ===
Line 517: Line 525:
 
   
 
   
 
  function OnLoad()
 
  function OnLoad()
   Game.SetKeyHook("M", "PutTheBlock")
+
   Game.SetKeyHook(&quot;M&quot;, &quot;PutTheBlock&quot;)
   Game.SetBlockCenter("Block0", 7.5, 7.5)
+
   Game.SetBlockCenter(&quot;Block0&quot;, 7.5, 7.5)
 
   return true
 
   return true
 
  end
 
  end
Line 524: Line 532:
 
  function PutTheBlock()
 
  function PutTheBlock()
 
   a = a + math.pi / 256.0
 
   a = a + math.pi / 256.0
   Game.SetBlockRotation("Block0", a)
+
   Game.SetBlockRotation(&quot;Block0&quot;, a)
 
  end
 
  end
  
 
== SetDynamicEntityRotation(entity, initAngle, radius, period, startTime, endTime) ==
 
== SetDynamicEntityRotation(entity, initAngle, radius, period, startTime, endTime) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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.
 
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.
Line 536: Line 544:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetDynamicEntityRotation("Strawberry0", -math.pi/2, 2, 500, 0, 0)
+
   Game.SetDynamicEntityRotation(&quot;Strawberry0&quot;, -math.pi/2, 2, 500, 0, 0)
 
   return true
 
   return true
 
  end
 
  end
  
 
== SetDynamicEntityTranslation(entity, fX, fY, period, startTime, endTime) ==
 
== SetDynamicEntityTranslation(entity, fX, fY, period, startTime, endTime) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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ó.
 
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ó.
Line 549: Line 557:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetDynamicEntityTranslation("Strawberry0", 10, 0, 500, 0, 0)
+
   Game.SetDynamicEntityTranslation(&quot;Strawberry0&quot;, 10, 0, 500, 0, 0)
   Game.SetDynamicEntityTranslation("Strawberry0", 0, 1, 100, 0, 0)
+
   Game.SetDynamicEntityTranslation(&quot;Strawberry0&quot;, 0, 1, 100, 0, 0)
 
   return true
 
   return true
 
  end
 
  end
  
 
== SetDynamicEntityNone(entity) ==
 
== SetDynamicEntityNone(entity) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== Explicació ===
 
Aquesta funcio elimina totes les animacions aplicades a una figura.
 
Aquesta funcio elimina totes les animacions aplicades a una figura.
Line 563: Line 571:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetDynamicEntityTranslation("Strawberry0", -2, 0, 1000, 0, 500)
+
   Game.SetDynamicEntityTranslation(&quot;Strawberry0&quot;, -2, 0, 1000, 0, 500)
   Game.SetDynamicEntityRotation("Strawberry0", -math.pi/2, 2, 500, 500, 0)
+
   Game.SetDynamicEntityRotation(&quot;Strawberry0&quot;, -math.pi/2, 2, 500, 500, 0)
   Game.SetKeyHook("S", "StopAnimation")
+
   Game.SetKeyHook(&quot;S&quot;, &quot;StopAnimation&quot;)
 
   return true
 
   return true
 
  end
 
  end
 
   
 
   
 
  function StopAnimation()
 
  function StopAnimation()
   Game.SetDynamicEntityNone("Strawberry0")
+
   Game.SetDynamicEntityNone(&quot;Strawberry0&quot;)
 
  end
 
  end
  
 
== SetDynamicBlockRotation(block, initAngle, radius, period, startTime, endTime) ==
 
== SetDynamicBlockRotation(block, initAngle, radius, period, startTime, endTime) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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.
+
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 &lt;position x=&quot;0&quot; y=&quot;0&quot; dynamic=&quot;true&quot; /&gt;). No moguis els blocs massa ràpid, sinó la moto podria travessar el bloc.
  
 
=== Exemple d'Script ===
 
=== Exemple d'Script ===
Line 582: Line 590:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetDynamicBlockRotation("Block0", -math.pi/2, 2, 500, 0, 0)
+
   Game.SetDynamicBlockRotation(&quot;Block0&quot;, -math.pi/2, 2, 500, 0, 0)
 
   return true
 
   return true
 
  end
 
  end
  
 
== SetDynamicBlockTranslation(block, fX, fY, period, startTime, endTime) ==
 
== SetDynamicBlockTranslation(block, fX, fY, period, startTime, endTime) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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.
+
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 &lt;position x=&quot;0&quot; y=&quot;0&quot; dynamic=&quot;true&quot; /&gt;). No moguis els blocs massa ràpid, sinó la moto podria travessar el bloc.
  
entity: Defineix quina figura es mou<br>
+
entity: Defineix quina figura es mou&lt;br&gt;
fX: Defineix on de l'eix X la figura es mou<br>
+
fX: Defineix on de l'eix X la figura es mou&lt;br&gt;
fY: Defineix on de l'eix Y la figura es mou<br>
+
fY: Defineix on de l'eix Y la figura es mou&lt;br&gt;
period: Defineix, quant trigara la figura en tornar al punt d'origen<br>
+
period: Defineix, quant trigara la figura en tornar al punt d'origen&lt;br&gt;
startTime: Defineix, quan comença el moviment<br>
+
startTime: Defineix, quan comença el moviment&lt;br&gt;
 
endTime: Defineix, quan finalitza el moviment
 
endTime: Defineix, quan finalitza el moviment
  
Line 604: Line 612:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetDynamicBlockTranslation("Block0", 10, 1, 1500, 0, 0)
+
   Game.SetDynamicBlockTranslation(&quot;Block0&quot;, 10, 1, 1500, 0, 0)
 
   return true
 
   return true
 
  end
 
  end
Line 611: Line 619:
  
 
  function Tick()
 
  function Tick()
  Game.MoveBlock("Block0", 0.5,0)
+
  Game.MoveBlock(&quot;Block0&quot;, 0.5,0)
 
  return true
 
  return true
 
  end
 
  end
Line 619: Line 627:
  
 
  function OnLoad()
 
  function OnLoad()
  Game.SetDynamicBlockTranslation("Block0", 300, 0, 12000, 0, 6000)
+
  Game.SetDynamicBlockTranslation(&quot;Block0&quot;, 300, 0, 12000, 0, 6000)
 
  return true
 
  return true
 
  end
 
  end
Line 627: Line 635:
  
 
== SetDynamicBlockNone(block) ==
 
== SetDynamicBlockNone(block) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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" />).
+
Aquesta funció elimina totes les animacions aplicades a un bloc. El bloc ha de ser dinàmic (modifica el nivell per aconseguir &lt;position x=&quot;0&quot; y=&quot;0&quot; dynamic=&quot;true&quot; /&gt;).
  
 
=== Exemple d'Script ===
 
=== Exemple d'Script ===
Line 635: Line 643:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.SetDynamicBlockTranslation("Block0", 10, 1, 1500, 0, 0)
+
   Game.SetDynamicBlockTranslation(&quot;Block0&quot;, 10, 1, 1500, 0, 0)
   Game.SetKeyHook("S", "StopAnimation")
+
   Game.SetKeyHook(&quot;S&quot;, &quot;StopAnimation&quot;)
 
   return true
 
   return true
 
  end
 
  end
 
   
 
   
 
  function StopAnimation()
 
  function StopAnimation()
   Game.SetDynamicBlockNone("Block0")
+
   Game.SetDynamicBlockNone(&quot;Block0&quot;)
 
  end
 
  end
  
 
== CameraZoom(z) ==
 
== CameraZoom(z) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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.
 
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.
Line 658: Line 666:
  
 
== CameraMove(x, y) ==
 
== CameraMove(x, y) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== Explicació ===
 
Per algun nivells concrets, potser vols moure la càmera. Utilitza aquesta funció per fer-ho.
 
Per algun nivells concrets, potser vols moure la càmera. Utilitza aquesta funció per fer-ho.
Line 671: Line 679:
  
 
== GetEntityRadius(entity) ==
 
== GetEntityRadius(entity) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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.
 
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.
Line 679: Line 687:
  
 
  function OnLoad()
 
  function OnLoad()
   Game.Message("Radius of the strawberry : "..Game.GetEntityRadius("Strawberry0"))
+
   Game.Message(&quot;Radius of the strawberry : &quot;..Game.GetEntityRadius(&quot;Strawberry0&quot;))
 
   return true
 
   return true
 
  end
 
  end
  
 
== IsEntityTouched(entity) ==
 
== IsEntityTouched(entity) ==
[require Xmoto >= 0.2.0]
+
[require Xmoto &gt;= 0.2.0]
 
=== Explicació ===
 
=== 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ó.
 
Aquesta funció es anomenada quan una figura es tocada. Peró alguns cops pots voler saber quan una figura no es tocada. Utilitza aquesta funció.
Line 694: Line 702:
 
   
 
   
 
  function OnLoad()
 
  function OnLoad()
   Game.Message("Gravity is increasing while you are not touching the snowman")
+
   Game.Message(&quot;Gravity is increasing while you are not touching the snowman&quot;)
 
   return true
 
   return true
 
  end
 
  end
 
   
 
   
 
  function Tick()
 
  function Tick()
   if(Game.IsEntityTouched("SnowMan0") == 0)
+
   if(Game.IsEntityTouched(&quot;SnowMan0&quot;) == 0)
 
   then
 
   then
 
     g = g - 0.03
 
     g = g - 0.03
Line 708: Line 716:
  
 
== KillPlayer() ==
 
== KillPlayer() ==
[require Xmoto >= 0.2.1]
+
[require Xmoto &gt;= 0.2.1]
 
=== Explicació ===
 
=== Explicació ===
 
Si anomenes aquesta funció, el jugador morira. Es interessant si vols que el jugador mori en tocar un enemic. per exemple.
 
Si anomenes aquesta funció, el jugador morira. Es interessant si vols que el jugador mori en tocar un enemic. per exemple.
Line 722: Line 730:
  
 
== KillEntity(entityID) ==
 
== KillEntity(entityID) ==
[require Xmoto >= 0.2.1]
+
[require Xmoto &gt;= 0.2.1]
 
=== Explicació ===
 
=== Explicació ===
 
Si anomenes aquesta funció, s'eliminara la figura entityID. La figura pot ser una maduixa o qualsevol altre.
 
Si anomenes aquesta funció, s'eliminara la figura entityID. La figura pot ser una maduixa o qualsevol altre.
Line 732: Line 740:
 
   
 
   
 
  function Zone0.OnEnter()
 
  function Zone0.OnEnter()
   Game.KillEntity("Strawberry0")
+
   Game.KillEntity(&quot;Strawberry0&quot;)
 
  end
 
  end
  
 
== WinPlayer() ==
 
== WinPlayer() ==
[require Xmoto >= 0.2.1]
+
[require Xmoto &gt;= 0.2.1]
 
=== Explicació ===
 
=== Explicació ===
 
Si anomenes aquesta funció, el jugador guanyara el joc (fins i tot si queden maduixes pendents).
 
Si anomenes aquesta funció, el jugador guanyara el joc (fins i tot si queden maduixes pendents).
Line 750: Line 758:
  
 
== RemainingStrawberries() ==
 
== RemainingStrawberries() ==
[require Xmoto >= 0.2.1]
+
[require Xmoto &gt;= 0.2.1]
 
=== Explicació ===
 
=== Explicació ===
 
Aquesta funció retorna el numero de maduixes pendents en el nivell.
 
Aquesta funció retorna el numero de maduixes pendents en el nivell.

Revision as of 10:59, 24 November 2010



Contents

Under Construction! Please Visit Reserve Page. Page Will Be Available Shortly


CLICK HERE


English - Español

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 &amp;lt; i &amp;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<br> fX: Defineix on de l'eix X la figura es mou<br> fY: Defineix on de l'eix Y la figura es mou<br> period: Defineix, quant trigara la figura en tornar al punt d'origen<br> startTime: Defineix, quan comença el moviment<br> 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