Please login or register.

Login with username, password and session length
Advanced search  

News:

IRC channel - server: waelisch.de  channel: #wme (read more)

Author Topic: Dudas tema 3 Wintermute BOOK Online  (Read 14437 times)

0 Members and 1 Guest are viewing this topic.

memphisgraceland

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 5
    • View Profile
Dudas tema 3 Wintermute BOOK Online
« on: March 03, 2011, 06:49:46 PM »

Hola a todos,

estoy siguiendo el manual en ingles de Wintermute y hasta el momento más o menos me voy apañando pero necesito vuestra ayuda para entender bien un par de cosas, ¿podriais explicarme las diferencias entre estos demonios y en que casos se utilizarian cada uno?

Game.AttachScript
Game.DetachScript
Scene.AttachScript
Scene.DetachScript

tampoco tengo muy claro el final del tema 3, no entiendo bien el porque de las modificaciones que se hacen en los scripts bomb.script door.script y exit.script, seria estupendo si alguien pudiera aclararmelo.

Muchisimas gracias!
Logged

HelLRaiseR

  • I don't want to make a Monkey Island clone :(
  • Moderator
  • Frequent poster
  • *****
  • Karma: 4
  • Offline Offline
  • Posts: 270
    • View Profile
    • Adventure Box Studios
Re: Dudas tema 3 Wintermute BOOK Online
« Reply #1 on: March 04, 2011, 05:49:30 PM »

Los dos primeros anexan un script al objeto Game, con lo que dicho script es global y accesible desde cualquier parte del juego hasta que hagas el DetachScript.

Los otros dos lo hacen con el objeto Scene, con las siguientes particularidades (si no me acuerdo mal).

- El script solo es accesible para la escena actual, por ejemplo si el script contiene un metodo llamado hazAlgo() puedes hacer Scene.hazAlgo() pero no escenaX.hazAlgo().
- Si haces un actor.changeScene() y te vas de la escena, el script ya no estará asociado, si quieres volver a usarlo tienes que hacer un Scene.AttachScript de nuevo.

En el final del tema 3 lo que está haciendo es anexar un script a la escena para cambiar el comportamiento de esta en función de si descubres la bomba o no, ¿que parte es la que no entiendes exactamente? A ver si te podemos ayudar.
Logged
Regards,

    Fernando

memphisgraceland

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 5
    • View Profile
Re: Dudas tema 3 Wintermute BOOK Online
« Reply #2 on: March 05, 2011, 08:28:49 PM »

Muchas gracias por tu respuesta y tu ayuda HelLRaiseR, la parte en concreto que no entiendo es porque realiza al final cambios en los scripts de la puerta, la bomba y la salida, por lo poco que he podido entender viene a decir algo así como que en esta escena valen los scripts que hemos ido creando a lo largo del tema pero que en otros casos no, ¿a que casos se refiere?¿o es que lo he entendido mal?, el fragmento es el siguiente:

"On closing of this chapter I’ll introduce a little change to our scheme. This change is not necessary in our example, but it will be necessary in different case. For now we’re testing, if the entity region Door is Active for another decision. But what if we need to apply the similar logic to more than one scene? If we stand in different scene, we logically can’t use entity this way because it’s not anymore part of the current scene.

So what we can do is using a global variable. Let’s make a change to our scripts then!
Last code listing for this script triplet is then (changes in bold):

bomb.script
#include "scripts\base.inc"
 
for (var timer=6;timer>-1;timer = timer -1)  // let's set up a loop which would go down from 6 to 0.
{
   Game.Msg("Countdown: " + timer); //Let's display how much time do we have left.
   Sleep(1000); // Sleep one second (and also hand the game over to other threads)
}
 
Game.Interactive = false; //Death cutsene
actor.Talk("I've just died. Let's try again");
var door = Scene.GetNode("Door");
door.Active = true; // If we die, we need to return the door to its active state or we'll never discover the bomb again.
global doorClicked = false;
Game.ChangeScene("scenes\warehouse\warehouse.scene");
Game.Interactive = true;
door.script
#include "scripts\base.inc"
 
on "LeftClick"   
{
   Game.Interactive = false;    // We want our player to make more things at once and we don't want to be interrupted.
   global doorClicked = true;
   actor.GoToObject(this);
   this.Active = false;  // We disable the door so the hotspot is not visible or active anymore.
   actor.Talk("Oh no. There's a timed bomb attached to the door! I have to find an exit before it explodes.");   
   Scene.AttachScript("scenes\warehouse\scr\bomb.script");
   Game.Interactive = true; // Allow player to play some more.
}
exit.script
#include "scripts\base.inc"
 
on "ActorEntry"
{
   var door = Scene.GetNode("Door");
   Game.Interactive = false;
   global doorClicked;
   if (!doorClicked)
   {
      actor.Talk("I don't want to return to my flat before I am sure I can't enter the warehouse!");
   }   
   else
   {
      Scene.DetachScript("scenes\warehouse\scr\bomb.script");
      actor.Talk("Phew. That was close");
      Game.ChangeScene("scenes\room\room.scene");
   }
   Game.Interactive = true;
}
We’ve seen in this chapter some neat tricks with the way how we can handle the game logic. We’ve also learned some of the important concepts for the tying scene to the code and we are able to use a couple of very basic commands and object methods. But for now we all the time used a lot of prebuilt demo code. Next chapter is all about starting the project from scratch. We’ll build upon this blank project until we create a little feature packed game. So stay tuned, we’re getting into it.
Logged

HelLRaiseR

  • I don't want to make a Monkey Island clone :(
  • Moderator
  • Frequent poster
  • *****
  • Karma: 4
  • Offline Offline
  • Posts: 270
    • View Profile
    • Adventure Box Studios
Re: Dudas tema 3 Wintermute BOOK Online
« Reply #3 on: March 07, 2011, 05:38:59 PM »

Vale, basicamente lo que pasa es que lo hace asi para mostrar el uso de AttachScript, pero no sería necesario usarlo. La explicación requiere algo de tiempo que ahora no tengo, ademas quiero ver el código en detalle, a ver si esta noche o mañana tengo un rato y te cuento bien como va.
Logged
Regards,

    Fernando

memphisgraceland

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 5
    • View Profile
Re: Dudas tema 3 Wintermute BOOK Online
« Reply #4 on: March 08, 2011, 07:17:36 PM »

Muchas gracias de nuevo HelLRaiseR, mientras tanto voy mirando otras cosas.
Logged

HelLRaiseR

  • I don't want to make a Monkey Island clone :(
  • Moderator
  • Frequent poster
  • *****
  • Karma: 4
  • Offline Offline
  • Posts: 270
    • View Profile
    • Adventure Box Studios
Re: Dudas tema 3 Wintermute BOOK Online
« Reply #5 on: March 12, 2011, 04:37:13 PM »

He estado un poco jodido estos dias, este finde me lo miro bien
Logged
Regards,

    Fernando

MMR

  • Global Moderator
  • Frequent poster
  • *
  • Karma: 3
  • Offline Offline
  • Gender: Male
  • Posts: 349
  • http://mmrdeveloper.wordpress.com/
    • View Profile
    • TinyWME
Re: Dudas tema 3 Wintermute BOOK Online
« Reply #6 on: March 14, 2011, 11:56:37 AM »

Hola memphisgraceland,

Completando o más bien intentando explicar de otra manera lo que HellRaiseR ha comentado, la idea de tener estos métodos tanto para el objeto Game como para el Scene, reside en la visibilidad de dichos scripts.

Game.AttachScript hace que dicho script se ejecute de forma global, por tanto su funcionalidad y/o lógica es aplicable/visible a todo el juego.

Por poner un ejemplo sencillo, imagina que quieres llevar un contador global de los segundos que llevas ejecutando el juego, y poder ver dicho resultado desde cualquier sitio. Crearías un nuevo fichero de script con un while(true) dentro y un Sleep de X milisegundos, y dentro de dicho while irías incrementando una variable global que haría de contador. Dicho script lo adjuntarías con Game.AttachScript.

Ahora para el caso de Scene.AttachScript, imagina que tienes 3 escenas diferentes con un objeto especial cada una, de manera que quieres que cuando cojas dicho objeto especial, en la primera escena en la que lo cojas, aparezca ya por siempre un cartelito indicando cualquier cosa (ese cartelito sería una window). Pues bien, puedes programar esa funcionalidad en un script aparte (en lugar de en las 3 escenas), y en la primera escena en la que se coja ese objeto, hacer un Scene.AttachScript, de manera que siempre que entres a esa escena, dicho script estará en ejecución y verás el cartelito ese, mientras que en las otras 2 escenas restantes no lo verás.

No sé, son formas y "funcionalidades" que te da el lenguaje de WME, para hacer realmente lo que imagines :)

Saludos,
Manuel Martos

Logged

memphisgraceland

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 5
    • View Profile
Re: Dudas tema 3 Wintermute BOOK Online
« Reply #7 on: March 16, 2011, 12:03:08 AM »

Creo que más o menos he pillado el concepto, aunque me iria de perlas si pudierais darme algún otro ejemplo ¿el inventario seria un Game.AttachScript?

Muchas gracias por vuestra ayuda y vuestras respuestas.
Logged

MMR

  • Global Moderator
  • Frequent poster
  • *
  • Karma: 3
  • Offline Offline
  • Gender: Male
  • Posts: 349
  • http://mmrdeveloper.wordpress.com/
    • View Profile
    • TinyWME
Re: Dudas tema 3 Wintermute BOOK Online
« Reply #8 on: March 16, 2011, 10:39:02 AM »

Sip, podría hacerse así también.

Aunque nada mejor que mirar el código fuente de la demo de ejemplo que viene con WME  ;)
Logged

memphisgraceland

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 5
    • View Profile
Re: Dudas tema 3 Wintermute BOOK Online
« Reply #9 on: March 22, 2011, 10:18:07 AM »

Pues muchas gracias. Supongo que es mas práctico y aprenderé mas si como dices voy fijándome en la demo.

Logged
 

Page created in 0.136 seconds with 23 queries.