El engine a usar es AGS 2.71 o posterior, si tienes el AGS 2.62 y te niegas totalmente a entender una nueva e incluso mucho más simple estructura de script, no lo hagas, vas a ver que no cambia tanto, ademas esta explicada cada funcion.
Si tienen una gran parte hecha en AGS 2.62 no hay problemas en usar la última versión, sólo tienen que abrir el juego desde ags 2.71, destildar “Enforce object-based scripting” y “Enforce new-style Strings” en “General Setting” y no va a hacer falta cambiar todo lo ya hecho.
Si ya empezaste un juego tendrías que eliminar todas las guías relacionadas con los modos de cursor (usar, hablar, etc.) y con el inventario, y todo el script relacionado con ellas.
Sino, puedes elegir default game o empty game. Si eliges empty no habrá ningún gráfico hecho, ni personajes, ni inventarios.
Si elegiste default debes eliminar todas las guías ( para ello vayan a GUI > Delete selected GUI) menos la 0. En “Sprite manager” > Defaults ya no necesitarás los frames 2040 a 2053.
También en el global script, borrá todo desde la función “interface_click” (línea 69 hasta la última). y también un poco mas abajo en la función “on_key_press” elimina el keycode 9 (toda la línea 43). Y por ultimo la función “show_inventory_window” (línea 17 a 32)
NOTA: Si van a guiarse por los numeros de línea, por favor sigan el mismo orden.
Si elegistes empty borrá la función interface click en el “global script” (línea 54 a 58 )
Les daré las proporciones usadas en Monkey Island 2 para que tengan una idea, pero no necesariamente tienen que usarse las mismas. Click acá para ver los tamaños (tengan en cuenta sólo el color de la resolución que van a usar) se modifican con Width (ancho) y Height (Alto).
Proximamente tendrán las posiciones X e Y, se modifican con X position e Y position.
Repito, no necesariamente deben usar las mismas medidas.
Entonces, tomen una guía (la 0 si usaron Default Game), la nombramos SCUMMBAR, les damos las medidas, en Visible pongan Normal.
Hagan los botones con
, como “script name” le daremos el nombre de la acción antepuesto de una b (bMirar, bSubir, bEtc
; y para Coger bAgarrar, porque sin querer lo hice así). Si van a hacer lo de Acciones Predefinidas, deben tener imagen (Image y Mouseover Image).
Una etiqueta de texto (label) con
, que dirá todo lo que hacemos (ir a, agarrar cabeza de búfalo, etc). No pongan texto, en “Align” pongan Centre, y en “script name” Barra.
Y por último el inventario con
, y en “script name” Inv.
Para los diálogos hagan una guía con el tamaño y posición de la anterior, pero sin botones ni nada. Y en Visible pongan Popup Modal. Luego en “General Settings” tilden “Text Windows Use GUI” y pongan el número de la guía.
Los números de colores estan en Palette (el 0 es transparente).
En General Settings donde dice “When Interface disabled” pongan GUIs Unchanged, para que las guías no cambien en modo Espera.
IMPORTANTE: Para estas guías las imagenes de los rooms necesitaran un franja negra abajo, porque sino no se verá la pantalla. Por ejemplo si hicieron una imagen de 320×200, van a tener ke agregarle una franja negra abajo de 56 pixeles de alto, por lo que les quedaría una imagen de 320×256.
Si van a “Cursors” verán todos los modos disponibles, los cuales no son suficientes. Sin embargo, es mejor usar uno para mas de una acción y luego diferenciarlo como más adelante se mostrará. Porque si creamos uno nuevo, no aparecerá en las interacciones y habría que diferenciarlo de todos modos en la interacción “any click“.
Entonces, renombren cada uno:
Cursor 0: Ir a
Cursor 1: Mirar
Cursor 2: UsarDar
Cursor 3: Hablar
Cursor 4: Usar inv
Cursor 5: Agarrar
Cursor 6: Puntero
Cursor 7: Espera
Cursor 8: AbrirCerr
Cursor 9: EmpTirar
En el script se nombran igual, pero antepuesto de eMode y sin espacios, por ej. eModeIra
Si quieren que sea como Lucas Arts, todos los cursores tendrían el mismo gráfico (excepto el 7, que sería un gráfico vacío). Al hacerlo si empezastes con Default Game ya puedes borrar los frames 2054 a 2061.
Tampoco cambiaría el cursor al elegir un ítem del inventario, para esto último vamos a “General Settings” y tildamos “Don´t use inventory graphics as cursors“, en la sección “Inventory“.
NOTA:
Si quieren usar mas modos, como encender y apagar, usen cursores ya creados.
Si quieren usar menos, aparte de cambiarlos, tendrían que fijarse los scripts donde influyen y cambiarlos.
Ante cualquier duda pregunten acá mismo
PARA NOVATOS: En una misma línea, todo lo escrito luego de // no va a tener efecto en el juego, solo es para anotar cosas. Yo lo usaré para explicar, pueden borrarlo o dejarlo así, no influirá en nada.
Otra cosa: Todo lo que queremos poner para una condición (if o else) o para una función va entre llaves “{ }”;. Verán varias veces que dentro de la misma hay otra condición, por lo tanto, se abrirá una llave dentro de otra y puede ser mucho peor, y es raro que cierren todas juntas. Así que presten atención. ![]()
Si una condición o función no tiene llaves solo el primer comando se considerará dentro de esta.
Cada comando debe terminar con un punto y coma ( ; )
y algo muy básico a tener en cuenta para todo lenguaje… el 1 quiere decir si, verdadero, y el 0 no, falso
Para el texto de Barra usé dos Strings (variables que contienen texto):
Acción: Para las acciones (dar objeto a,mirar,tirar,usar objeto con,etc)
Objetivo: Sólo contiene lo que estamos apuntando (lampara,pared,puerta,etc)
Ambas deben ser declaradas, para ello vamos al Global Script y la línea 2 escribimos:
String Accion, Objetivo;
No olviden poner String con mayúsculas, si lo ponen con minúsculas estarían declarando el tipo de string anterior (AGS 2.7 o anterior) por lo tanto muchos comandos no servirían.
Ahora haremos el script que cambia el modo de cursor al apretar un botón, para ello vamos a la guía SCUMMBAR, y en cada botón (excepto bSubir y bBajar) hacemos doble click, presionamos OK. Nos llevará a una función, entre las llaves de esta escribimos dos cosas:
mouse.mode = el modo que le corresponde seguido de ; (para Hablar sería “Hablar con” )
Por ejemplo para Empujar sería:
function empujar_Click(GUIControl *control, MouseButton button){
mouse.Mode = eModeEmpTirar;
Accion = “Empujar”;
}
Bueno, luego de hacer eso con todos los botones, hagan lo mismo con Subir pero en lugar de lo anterior, entre las llaves pongan:
Inv.ScrollUp();
y para el botón Bajar:
Inv.ScrollDown();
Ambos son para desplazarse en el inventario.
<%pagebreak(Página 2 – Terminando con lo más básico)%>
Conozcamos un poco la función on_mouse_click, en ella escribimos todo lo que queremos que haga al hacer cualquier click, excepto click sobre una guía. Para distinguir si es derecho o izquierdo tiene la variable button, esta varía entre:
eMouseLeft (izquierdo) y
eMouseRight (derecho)
Para poder poner que hacer al clickear el inventario, tilden la opción “Handle inventory clicks in script” en “General Settings“, entonces tendremos dos variantes más.
eMouseLeftinv (izquierdo en inventario)
eMouseRightInv (derecho en inventario)
También tenemos eMouseWheelNorth y eMouseWheelSouth, si tildamos “Enable mouse wheel support” en “General Settings” pero no lo usaremos.
Vayan a ella [ "global script" > "function on_mouse_click" ], verán que primero se comprueba si el juego está pausado, luego se comprueba el click izquierdo con else if y después el derecho con sólo un else. Esto es para qué ningún click tenga efecto si el juego esta en pausa, ya que else quiere decir sino.
Basta de tanta charla y comenzemos:
En un juego de LucasArts luego de hacer click izquierdo, por mas que se este apuntando hacia la nada, vuelve al modo de cursor “Ir a“. Entonces, reemplazen todo lo que está dentro de eMouseLeft por eso, quedaría así:
else if (button == eMouseLeft) { // si se hace click izquierdo:
ProcessClick(mouse.x, mouse.y, mouse.Mode ); //Ejecuta un click en ubicación del mouse, en el modo actual
mouse.Mode = eModeIra; //cambia el cursor a modo Ir a
Accion = “Ir a”; //cambia la String acción
}
Para el click derecho (si es sólo un else agrégenle if (button == eMouseRight)) por ahora solo pondremos que vuelva al modo de cursor “Ir a“, quedaría así:
else if (button == eMouseRight){
mouse.Mode = eModeIra;
Accion = “Ir a”;}
Para el click derecho en el inventario (si no está agrégenlo) por ahora lo mismo que antes pero con “Mirar“:
else if (button == eMouseRightInv){
mouse.Mode = eModeMirar;
Accion = “Mirar”;}
Lo compicado viene ahora, el click izquierdo en el inventario:
En un juego de LucasArts, si hay una interacción con el ítem en modo Usar, se corre esa interacción.
Si el modo no es usar o dar se corre la interacción en el modo que está.
Para ambos casos vuelve a modo Ir a.
Si es modo Usar (sin interacción) o Dar, el ítem pasa a ser ítem activo.
Todo esto que dije es solo si no hay un ítem activo, si sí es así simplemente ejecuta la interacción en modo “Usar inv“.
Y todo esto solo si clickeamos sobre algún ítem, porque puede ser que clickemos sobre el inventario pero sobre ningún ítem.
Leanlo hasta entenderlo bien, luego leanlo en script:
else if (button == eMouseLeftInv){
InventoryItem *item=InventoryItem.GetAtScreenXY(mouse.x,mouse.y);//Nombra el ítem bajo el mouse como item
if (item != null){// si “item” no es nulo:
if(mouse.Mode != eModeUsarinv){//si no hay inventario activo:
if((Accion.Contains(“Usar” )==0)||(Accion.Contains(“Dar” ) == 0)){//si el modo es Usar:
item.RunInteraction(eModeUsarDar);//correr esa interacción
Accion = String.Format(“%s %s “,Accion,Objetivo);//(explicaré esto luego)
if(Accion.Contains(“Usar” )==0)Accion = Accion.Append(“con” );//si es usar agrega “con”
if(Accion.Contains(“Dar” )==0)Accion = Accion.Append(“a” );//si es dar agrega “a”
mouse.Mode = eModeUsarinv;//Modo = Usar inv
player.ActiveInventory = item;//convertir “item” en el inventario activo
}//cierra “si el modo es dar”
else //sino (si no es modo usar ni dar)
{item.RunInteraction(mouse.Mode);//corre interacción en modo actual
mouse.Mode = eModeIra;//cambia el modo
Accion = “Ir a”;}//cambia la String Accion
}//cierra “si no hay inventario activo”
else {//sino (si sí hay inventario activo)
item.RunInteraction(eModeUsarinv);//corre interacción en modo Usar inv
mouse.Mode = eModeIra;//cambia el modo
Accion = “Ir a”;}//cambia la String Accion
}//Cierra “si ítem no es nulo”
}//Cierra click izquierdo en inventario
El primer comando es un puntero, estos son nuevos a partir de AGS 2.7. La mayoría de las veces se usan para interactuar con algo que se encuentra en ciertas coordenadas, las del mouse en este caso.
String.Format transforma un texto en una String, dentro de él se puede colocar cualquier tipo de variable (usando %s para Strings y %d para variables numéricas como int,short,char). Luego del texto entre comillas se nombra cada variable antepuesta de una coma. En este caso solo usamos una.
Para comprobar Usar o Dar no usé el modo de cursor, porque sería UsarDar para ambos. En lugar de eso usé Contains, que comprueba si una String contiene cierto texto (o String), y devuelve como valor su ubicacion, 0 sería al principio, y si el texto no está es -1.
Podés también agregar interacciones en modo Usar o Dar a los inventarios, y hacer por ejemplo que el no quiera usar o dar cierto inventario. como en monkey island, donde el personaje dice: “mi instinto pirata me dice que no deberia usarlo”
IMPORTANTE:
En la nueva actualizacion de este tutorial, si hacen lo que dije en el parrafo anterior, se va a ejecutar tal accion, pero de todos modos el item se va a poner como activo. Para que no lo haga crearemos una función:
char exmodo;
functionCasoInv(){
if(exmodo==1){Accion = “Ir a”; //Si el exmodo es Ir a: Cambia la String Accion
mouse.Mode=eModeIra;} //cambia el modo
Debe ir arriba de todo, porque antes de que empiece la funcion tambien declaramos una variable numerica, del tipo char porque es la que menos recursos usa, tambien es la que menor cantidad de valores puede tomar (desde 0 hasta 255), pero eso no importa para este uso.
asi que coloquenla entre la linea 2 y lo que le sigue.
Esta funcion se va a repetir constantemente. Entonces para que, al correr una interaccion con Usar o Dar en un inventario, no ponga ese inventario como activo vamos a tener que colocar al final del script de la interaccion el comando:
exmodo=1;
pero por ahora no funciona, en el proximo titulo haremos que funcione.
Estuvimos todo el tiempo cambiando la String Accion, ahora es momento de Objetivo. Esto no es tan simple, porque para asignar a una String el nombre de un objeto personaje o hotspot no se usa el mismo código que para el inventario.
Entonces sería así (todavía no lo coloquen en ningún lado):
if (GetLocationType(mouse.x,mouse.y) != eLocationNothing)//si el mouse NO está sobre nada o una guía:
Objetivo = Game.GetLocationName(mouse.x, mouse.y);//Objetivo = Nombre de lo que esta bajo el mouse
else { //sino: (si el mouse sí esta sobre una guía o sobre nada)
InventoryItem *item = InventoryItem.GetAtScreenXY(mouse.x,mouse.y);
//nombra al item bajo el mouse como “item”
if (item!=null) // si “item” no es nulo:.
Objetivo = item.Name; //Objetivo = nombre de “item”
else //sino (si el “item” sí es nulo)
Objetivo= “”;//Objetivo = nada
}
Ya varían las dos variables como debe ser, pero si prueban el juego notarán que la barra de acción no cambia ¡Claro! porque nunca le dijimos al script que las Strings sean parte del texto de Barra.
Para cambiar el texto de un Label como Barra debemos usar el mismo método que para cambiar una String, ya que desde AGS 2.71 se comporta como tal.
Tanto esto como el script de Objetivo es algo que debe correr todo el tiempo, repetidamente y sin parar, por lo tanto iría en la función repeatedly_execute. Pero antes, para que quede más prolijo, haremos una función propia. Entonces vamos justo arriba de repeatedly_execute (arriba de #sectionstart repeatedly_execute) y ponemos function ActualizarBarra(){} y entre las llaves ponemos lo mencionado anteriormente de objetivo.
Luego, como ya dijimos antes, hay que asignarle el texto a Barra como si fuera una String, esto sería así:
Barra.Text=Accion;
Barra.Text=Barra.Text.Append(” ” );
Barra.Text=Barra.Text.Append(Objetivo);
Append agrega el texto o String que se le pide. Se pensaría que, como se repite todo el tiempo, se agregaría infinitamente un espacio y la String Objetivo, pero al cambiarse el texto de Barra por Accion borra lo anterior, entonces nunca se agrega mas de una vez. O sea, sin la primer línea ese error si ocurriría.
Una alternativa mas corta es el comando ya mencionado String.Format, quedaría todo en una sola línea:
Barra.Text=String.Format (“%s %s”,Accion,Objetivo);
La función completa sería así:
function
ActualizarBarra(){
if (GetLocationType(mouse.x,mouse.y) != eLocationNothing)
Objetivo = Game.GetLocationName(mouse.x, mouse.y);
else {
InventoryItem *item = InventoryItem.GetAtScreenXY(mouse.x,mouse.y);
if (item!=null)Objetivo = item.Name;
else Objetivo= “”;}
CasoInv();
Barra.Text=String.Format(“%s %s”,Accion,Objetivo);}
Como ven agregamos a lo ultimo CasoInv, lo que se hace al agregar esto es “llamar” a la función CasoInv que hace un rato habiamos hecho, hacer que esa funcion tenga efecto en algo.
Para que esta función se ejecute y además para que lo haga repetidamente vamos a repeatedly_execute y escribimos ActualizarBarra();
Nuevamente estamos “llamando” a una función. Ahora si Actualizar Barra se va a ejecutar, y a la vez CasoInv se ejecutara porque Actualizar Barra se esta ejecutando.
Y para que no haya errores al principio del juego iremos a la funcion gamestart y pondremos:
Accion = “Ir a”;
1.Las funciones propias que hacemos también pueden retornar un valor, y así poder usarla en un if. Esto es gracias al comando return. Una vez que este se ejecutó todos los comandos posteriores dentro de la función son ignorados.
2. Una función puede tener su propia variable, como Button en on_mouse_click. El valor de esta se asignaría cuando la llamamos.
Por ejemplo para el comando Say debemos colocar entre comillas el texto que queremos que diga el personaje, en realidad lo que estamos haciendo es darle un valor (en este caso una cadena de caracteres) a la variable message, que es una String.
En realidad Say es una funcion como las que hacemos, pero está oculta.
Para que lo entiendan mejor llevemoslo a la práctica:
Para distinguirlos podemos usar Accion.Contains como ya hicimos en on_mouse_click, pero haremos una función propia para no tener que escribir tanto.
El modo será comprobado con su primer letra (excepto Agarrar, que usará la g).
Pero no vamos a crear ninguna variable, vamos a usar la variable game.used_mode, que es una variable que indica justamente el modo con que se hizo el ultimo click, pero sin distinguir los “modos con cursores iguales”, al cambiar su valor corregiremos eso
algo que tienen que tener en cuenta, es que para asignarle como valor una letrar a una variable numerica solo tienen que poner la letra o carácter entre apostrofes, porque en realidad son numeros tambien, especificamente:
del 65 al 90 son de la ‘A’ a la ‘Z’
del 33 al 58 son de la ‘a’ a la ‘z’
La variable va a tomar su valor desde la funcion on_mouse_click, en la version anterior de este tutorial lo hacia en la misma funcion que hicimos, pero nose porque desde ags 2.71 eso no funciona siempre…
en “mouse left” quedaría asi
else if (button == eMouseLeft) { // si se hace click izquierdo:
ProcessClick(mouse.x,mouse.y,mouse.Mode); //Ejecuta un click en ubicación del mouse, en el modo actual
if(Accion.Contains(“Coger” )==0)game.used_mode = ‘g’;si es modo Agarrar usedmode es ‘g’
else game.used_mode = Accion.Chars[0]+32; //sino, usedmode es el primer caracter de Accion
mouse.Mode = eModeIra; //cambia el cursor a modo Ir a
Accion = “Ir a”; //cambia la String accion
}
Chars retorna la letra de la ubicación indicada entre corchetes (en este caso: la primer letra). El -32 convierte la letra de Modo a mayúsculas, de lo contrario no sería comparable con la de Acción.
y en “mouse Leftinv”….
else if (button == eMouseLeftInv){
InventoryItem *item=InventoryItem.GetAtScreenXY(mouse.x,mouse.y);//Nombra el ítem bajo el mouse como item
if (item != null){// si “item” no es nulo:
if(mouse.Mode != eModeUsarinv){//si no hay inventario activo:
if(Accion.Contains(“Coger” )==0)game.used_mode = ‘g’;//si es modo Agarrar usedmode es ‘g’
else game.used_mode = Accion.Chars[0]+32; //sino, usedmode es el primer caracter de Accion
if((Accion.Contains(“Usar” )==0)||(Accion.Contains(“Dar” ) == 0)){//si el modo es Usar:
item.RunInteraction(eModeUsarDar);//correr esa interacción
Accion = String.Format(“%s %s “,Accion,Objetivo);//(explicaré esto luego)
if(Accion.Contains(“Usar” )==0)Accion = Accion.Append(“con” );//si es usar agrega “con”
if(Accion.Contains(“Dar” )==0)Accion = Accion.Append(“a” );//si es dar agrega “a”
mouse.Mode = eModeUsarinv;//Modo = Usar inv
player.ActiveInventory = item;//convertir “item” en el inventario activo
}//cierra “si el modo es dar”
else //sino (si no es modo usar ni dar)
{item.RunInteraction(mouse.Mode);//corre interacción en modo actual
mouse.Mode = eModeIra;//cambia el modo
Accion = “Ir a”;}//cambia la String Accion
}//cierra “si no hay inventario activo”
else {//sino (si sí hay inventario activo)
game.used_mode = ‘v’;//le da el valor ‘i’ a used_mode
item.RunInteraction(eModeUsarinv);//corre interacción en modo Usar inv
mouse.Mode = eModeIra;//cambia el modo
Accion = “Ir a”;}//cambia la String Accion
}//Cierra “si ítem no es nulo”
}//Cierra click izquierdo en inventario
en este ultimo hay dos caminos por los que puede tomar un valor, o bien cuando no hay inventario activo (y tomara como valor el modo) o bien cuando hay inventario activo y se hace click sobre otro inventario, y tomará como valor la ‘v’, por si alguna vez tienen que usarlo para algo.
entonces nuestra funcion quedaría asi:
function Modo(char modo){
if(modo==game.used_mode)return 1;}
la variable que esta dentro de la funcion, llamada modo (es de tipo char porque no usaremos numeros muy grandes), tomará el valor que le digamos cuando “llamemos” a nustra funcion. Por ejemplo cuando queramos comprobar si el modo es tirar, tendriamos que poner if(Modo(‘t’)==1){//interaccion al tirar} , entonces modo tomaria el valor ‘t’ y lo compararía con el valor de game.used_mode, si son iguales se corre la interaccion, sino no.
Como esta función no depende de ninguna mas que de on_mouse_click pueden ponerla donde quieran siempre y cuando este abajo de on_mouse_click
El script de objetos y hotspots se ubica en el “Room Script“, no en el “Global Script“. Entonces, para que funcione en cualquier Room, vamos al “Script Header” y ponemos:
import function Modo(char modo);
Ahora ya pueden distinguirlos. Veamos un ejemplo así queda claro:
Vayan a las interacciones de un hotspot. Click derecho en “EmpTirar Object” > “New run script action“, escriban:
if(Modo(‘e’)){
player.Say(“Empujando…” );//el personaje dice: Empujando
}
if(Modo(‘t’)){
player.Say(“Tirando…” );//el personaje dice: Tirando
}
¡Listo! Si no estas acostumbrado a las interacciones con script verás que, al seleccionar las acciones sin script, abajo dice “Text script equivalent code“. Eso ayudará mucho.
Recuerda: La letra siempre entre apóstrofes.
<%pagebreak(Buen Funcionamiento y Uso)%>
Hasta acá hemos hecho lo básico, la barra ya es 100% funcional, ahora recordemos como usar cada función:
1 ¿Sabés hacer una interacción? si sabés salteate este punto =P, sino escuchá…
> Haz click en un Objeto, Personaje, Hotspot o Inventario. Luego en “Interaction”.
> Verás todos los modos de cursor, Haz click derecho en el que necesites cambiar.
> Ahora tenés dos caminos, “New action” o “New Run Script actión” (por Script o no).
> Luego usá los comandos que tenés disponibles, cabe aclarar que por Script se puede hacer mucho más.
> Luego tené en cuenta que los comandos se ejecutarán en el orden que están, por eso luego tenés las opciones “Add action after this…” y “Add action before this…”
2 Para distinguir entre Modos que tengan cursores iguales usen la función Modo.
Por ejemplo: Vayan a las interacciones de un hotspot, hagan click derecho en “EmpTirar Object” y pongan “new run script action”, y usen:
if(Modo(‘e’)){
…//Aquí irían las acciones al empujar
}
if(Modo(‘t’)){
…//Aquí irían las acciones al tirar
}
3 Puedes poner una interaccion en un inventario tanto para el modo Dar como para el modo Usar, y hacer que el inventario se ponga activo igual o no.
Solo si queres que el inventario no se ponga como activo vas a tener que poner como comando adicional exmodo=1
Por ejemplo, para que el personaje diga “No quiero dar mi tijera a nadie” (y no ponga la tijera como inventario activo), vamos a la tijera, click en “Interaction”, luego click derecho en “UsarDar inventory item”, y click en “New Run Script actión” y escribir…
if(Modo(‘d’)){
player.Say(“No quiero dar mi tijera a nadie”);//Aquí irían las demas acciones al tirar
exmodo=1; //Para que no ponga la tijera como inventario activo
}
Otro ejemplo, supongamos que tenemos una moneda, y queremos que al Usarla se ponga como inventario activo pero que el personaje advierta: “Usala con cuidado” entonces habría que hacer todo lo mismo que con la tijera, pero en el script poner
if(Modo(‘u’)){
player.Say(“Usala con cuidado”);//Aquí irían las demas acciones al tirar
}
y en este caso NO hay que poner exmodo=1; porque sino no podriamos usar la moneda con ningun objeto.
4 Las demas cosas funcionan por sí solas.
Para que todo funcione bien tengan en cuenta que:
1 La letra de la función Modo debe ser en minúsculas y entre apostrofes.
}
2 Toda modificación a la String Accion (on_mouse_click , CasoInv y botones de la guia) debe empezar en Mayúsculas.
Por ejemplo:
3 Por la forma en que fué hecho este script, el inventario activo sólo está vacío al principio del juego o cuando una interaccion hace que lo pierda.
Así que si, por cualquier cosa, quieren usar el script:
if(player.activeinv==null)
fíjense que talvez tengan que reemplazarlo por
if(mouse.Mode!=eModeUsarinv)
4 Al terminar el juego destilden “debug mode” en General Settings, ya que este sirve para cuando se esta desarrollando el juego, para cambiar de room, ver las áreas caminables, tener todo el inventario, etc. con solo una combinacion de teclas.
IMPORTANTE: La barra aún tiene ciertas situaciones en las que hay incoherencia (por así decirlo) , si no van a continuar con la parte avanzada de este tutorial les recomiendo que hagan al menos la primer página, en la que se corrigen estos “errores”.
amigo tengo una pregunta si kiero cambiar el inventario q estan al estilo de sierra al estilo de lucasarts como hago?? :S
no es algo tan simple, estoy haciendo un tutorial, pero mientras podes ir sacandote las dudas llendo a la sección de AGS en nuestro foro
http://www.groggames.com.ar/smf/