En la entrega anterior de esta extensa guía nos acercamos a los scripts explicando qué son los GPRMs y los SPRMs. Ya se pudo ver entonces lo complicado de hacer scripts para los profanos en programación. No obstante, creemos que la mejor manera de aprenderlos es desarrollando ejemplos prácticos, así que en esta ocasión vamos a realizar un DVD que contenga un test de preguntas y respuestas. Algo a lo que podemos encontrar multitud de usos en nuestros DVDs.

Hagamos antes de nada una síntesis de la intención del script: Queremos realizar un test de 10 preguntas con tres posibles respuestas cada una. Una vez realizado el test aparecerá una pantalla valorando al usuario según el resultado final. Al final del artículo tienes un enlace de descarga con el proyecto que hemos utilizado para este ejemplo.

Utilizaremos para ello un único script que contendrá 23 órdenes o comandos. Nos nutriremos del SPRM 8, aquél que retiene el valor del último botón realzado en el DVD. Además haremos uso de 3 GPRMs, esas memorias en las que podemos guardar cualquier dato. Necesitaremos uno para guardar en él el valor del SPRM 8, otro para ir sumando el valor de cada respuesta, y otro para ir contando las veces que se ejecuta el script. Comencemos.
Lo primero que vamos a hacer es cambiar el nombre a los GPRMs que utilizaremos. Esto facilitará nuestra comprensión a la hora de elaborar el script, puesto que si dejamos sus nombres originales (GPRM 0, GPRM 1, GPRM 2, etc), tendremos que estar recordando cuál es el cometido de cada uno de ellos mientras confeccionamos el script. Así que lo mejor es llamar a los GPRMs con un nombre que tenga que ver con su cometido. Al GPRM 0 le vamos a llamar “Último botón pulsado”, al GPRM 1 “SUMA”, y al GPRM 2 “Contador”. Recordemos de paso que los GPRMs se pueden utilizar en el orden que queramos, y para lo que queramos.

Para cambiarles el nombre seleccionamos el icono del disco en la pestaña Outline. De este modo el Inspector pasará a mostrar los parámetros del disco. En la pestaña Advanced del Inspector del disco veremos un apartado llamado “GPRM Variable Names”. Ahí tenemos los 8 GPRMs de los que disponemos en todas las autorías de DVD, numerados del 0 al 7. Para poder cambiarles el nombre, pulsamos en la pequeña flecha a la izquierda de cada uno para que se despliegue su actual nombre, y sobre éste hacemos doble-clic y comenzamos a escribir el nuevo. Pulsamos Enter para confirmarlo.

Ahora toca hacer las pantallas con las preguntas y respuestas. Haremos menús de la manera habitual, uno por cada pregunta. En este caso cada pregunta lleva tres posibles respuestas, así que haremos tres botones, uno para cada respuesta. Hay un pequeño matiz respecto a los menús habituales: es crucial crear los botones en el orden correcto. Como veremos más adelante, los botones tienen un valor basado en el orden en el que se crearon. Si observamos el Inspector de cada botón, veremos que al margen del nombre que nosotros queramos darle, existe uno que no podemos cambiar, autoasignado por DVD Studio Pro y marcado con un corchete: Button #: 1, Button #: 2, etc.

Ese nombre es el que condicionará el valor del SPRM 8, así que como en este caso vamos a hacer un único script que nos sirva para todos los menús, tendremos que tener esto en cuenta a la hora de crear los botones. Como veremos más adelante, utilizaremos el primer botón creado como el que contiene la respuesta correcta, así que tengamos esa única precaución, la de que el primer botón que creemos de cada menú, sea el que contiene la respuesta correcta. Para los otros dos botones no importa el orden. Por ejemplo, si en un menú la respuesta correcta vamos a ponerla la segunda, crearemos primero ese botón, y después los otros dos. Los botones los conectaremos posteriormente todos ellos al único script que haremos, así que de momento los dejamos sin conectar hasta que tengamos el script.
Igualmente crearemos las cuatro pantallas de mensaje según el resultado, tipo “BIEN, MAL, REGULAR”, etc. También lo haremos mediante contenedores de menús. Se mostrará la pantalla de “EXCELENTE” si la puntuación final es igual a 10 (tenemos diez preguntas), “MUY BIEN” si el valor es de 8 ó 9, “BIEN” si es de 5, 6 ó 7, y “FATAL” si el resultado es igual o menor que 4.

Ya hemos preparado el terreno, ahora hagamos el script. Por defecto los proyectos nuevos no contienen ningún script, así que habrá que crearlo para después configurarlo. Para ello haremos clic sobre el icono de “Add Script”, situado en la barra superior de herramientas, o bien acudiremos al menú Project -> Add to Project -> Script, o bien con el atajo Comando+’.
Aparecerá entonces el nuevo script en su carpeta correspondiente de la pestaña Outline, que contiene todos los elementos de nuestro proyecto. Seguidamente le hacemos doble-clic a su nombre para cambiárselo. En esta ocasión le hemos llamado “Script Puntuaciones”.
Primera línea: contabilizar las veces que se ejecuta el script
Hacemos doble-clic sobre su icono para que aparezca el editor de scripts, la pestaña donde lo configuraremos. Por defecto aparece con un primer y único comando llamado Nop (No Operation). Lo seleccionamos para modificarlo en su Inspector. La primera orden que va a cumplir este script va a ser la de sumar un valor de 1 y guardarlo en el GPRM llamado “Contador”; así, se irán contabilizando las veces que se ejecuta el script, lo que permitirá saber si hemos llegado a la pregunta número 10 para finalizar el test. Procedamos: en el Inspector del comando Nop, cambiemos el apartado Command por “Set GPRM” (se utiliza cuando queremos guardar algo en un GPRM). En Operation elegimos “Add” (sumar), en Source Type ponemos “Immediate”, que se utiliza cuando queremos escribir una cifra directamente en Source Value, donde situaremos un valor de 1. En Target (destino), elegimos el GPRM llamado “Contador”. Hecho, hemos sumado un valor de 1 y lo hemos guardado en el GPRM “Contador”. O mejor dicho, esto sucederá cada vez que se ejecute el script, de tal forma que si se reproduce por ejemplo 6 veces, el GPRM “Contador” tendrá un valor de 6.

Segunda línea: retener el valor del último botón pulsado
Para crear una línea nueva en el script pulsamos el botón + del editor de scripts (“Add New Command”, añadir nuevo comando).

De nuevo aparece Nop como comando, así que lo seleccionamos y en su Inspector lo cambiamos por Set GPRM (otra vez queremos guardar algo en un GPRM). En Operation ponemos esta vez “mov”, porque queremos “mover” algo al GPRM. En Source Type (tipo de fuente) fijamos SPRM, porque lo que queremos mover al GPRM está en un SPRM. En Source Value ponemos el SPRM 8, que, recordemos, es el que tiene la misión de retener el valor del último botón realzado por el usuario. Por último, en Target (destino), elegimos el GPRM llamado “Último botón pulsado”.

Tercera línea: dividir el valor del GPRM “Último botón pulsado” entre 1024
Como los valores del SPRM 8 se miden en incrementos de 1024 (botón 1=1024, botón 2=2048, etc), vamos a facilitar su comprensión para el resto del script dividiendo su valor entre 1024. Así podremos leerlo posteriormente en valores de 1, 2, 3, etc, correspondiente a cada botón. Un pequeño capricho que nos permitimos. Creamos una tercera línea y esta vez fijamos los siguientes parámetros:
- Command: Set GPRM (Comando: Asignar algo en un GPRM)
- Operation: Div (Operación: Dividir)
- Source Type: Immediate (Tipo de fuente: Directa)
- Source Value: 1024 (Valor de la fuente: 1024)
- Target: Último botón pulsado (Destino: Último botón pulsado)

Resumen: Cogemos el valor del GPRM “Último botón pulsado” y lo dividimos entre 1024.
Cuarta línea: Sumamos un valor de 1 si la respuesta es correcta
A la respuesta correcta le vamos a dar 1 punto, y a las incorrectas 0, así que la siguiente línea se va a encargar de sumar 1 y guardarlo en el GPRM “SUMA”, si el usuario pulsó el botón con la respuesta correcta. Creamos nueva línea con los siguientes parámetros:
- Command: Set GPRM (Comando: Asignar algo en un GPRM)
- Operation: Add (Operación: Sumar)
- Source Type: Immediate (Tipo de fuente: Directa)
- Source Value: 1 (Valor de la fuente: 1)
- Target: SUMA (Destino: SUMA)
Novedad. Esta operación se ejecutará sólo si se cumple una condición: que el usuario haya pulsado el botón con la respuesta correcta. Cuando queremos poner una condición para que se ejecute algo en un script, tendremos que activar la casilla “Compare Command”. Así se activará el apartado “Execute if” (Ejecutar si…). Fijaremos para esta cuarta línea los siguientes parámetros:
- Execute if: Último botón pulsado (Ejecutar si “Último botón pulsado”)
- Is: = (es igual)
- To: Immediate (a directamente)
- With value: 1 (con valor de 1)

Resumen: Si el último botón pulsado tiene un valor de 1 (el de la respuesta correcta), sumar un valor de 1 y guardarlo en el GPRM “SUMA”.
Quinta línea: Sumamos un valor de 0 si la respuesta es incorrecta
Haremos lo mismo que para la línea anterior, con la salvedad de que sumaremos 0 si el botón pulsado no es el de la respuesta correcta, es decir, las respuestas incorrectas no puntúan. Como el botón con la respuesta buena ha de tener un valor de 1 (porque lo creamos el primero), los otros dos botones con la respuesta incorrecta deberán tener un valor de 2 ó 3, o sea, ser igual o superior a 2. Pongamos en esta quinta línea los siguientes parámetros:
- Command: Set GPRM (Comando: Asignar algo en un GPRM)
- Operation: Add (Operación: Sumar)
- Source Type: Immediate (Tipo de fuente: Directa)
- Source Value: 0 (Valor de la fuente: 0)
- Target: SUMA (Destino: SUMA)
Condición (Compare Command):
- Execute if: Último botón pulsado (Ejecutar si “Último botón pulsado”)
- Is: >= (es mayor o igual)
- To: Immediate (a directamente)
- With value: 2 (con valor de 2)

Resumen: Si el último botón pulsado tiene un valor igual o mayor a 2 (los de la respuesta incorrecta), sumar un valor de 0 y guardarlo en el GPRM “SUMA”.
Líneas 6 a 14: Saltar a la pregunta siguiente
Ahora es cuando agradecemos aquella primera línea del script, donde se contabilizan las veces que éste se ha ejecutado, a través del GPRM llamado “Contador”. Estas líneas le dirán al script que salte a uno u otro menú, dependiendo de en qué número de pregunta estemos, o lo que es lo mismo, de cuántas veces se ha reproducido el script. Así, si el Contador tiene un valor de 1, será porque hemos reproducido el script una vez, y pasaremos a la pregunta 2; pasaremos a la 3 si el valor es de 2, y así sucesivamente hasta la pregunta 10, para la que tendremos un valor de 9.
Así que la línea 6 tendrá los siguientes parámetros:
- Command: Jump (Comando: Saltar)
- Jump to: Pregunta 2 (Saltar a la Pregunta 2)
Condición:
- Execute if: Contador (Ejecutar si el Contador…)
- Is: = (Es igual)
- To: Immediate (a una cifra directa)
- With Value: 1 (Con un valor de 1)

Resumen: Saltar al menú Pregunta 2 si el Contador equivale a 1.
Haremos lo respectivo para las siguientes preguntas, de la línea 7 a la 14. Es bueno saber que se pueden copiar y pegar líneas de un script para agilizar su edición. Simplemente seleccionamos la línea que queremos repetir, la copiamos (Comando+C), y pegamos (Comando+V). Así se creará una nueva línea igual a la copiada y seleccionándola podremos modificarla en su Inspector.
Línea 15: Acudir a la línea 16 si el contador es igual a 10
Ahora, si el valor del contador equivale a 10, será porque hemos reproducido el script 10 veces, o lo que es lo mismo, hemos respondido a todas las respuestas. En esta ocasión utilizaremos el comando “Go to”, que se utiliza para saltar a una línea dentro de un script. Recordemos que un script puede contener hasta 124 líneas o comandos. En esta ocasión el script saltará a la línea 16 si el Contador tiene un valor de 10. O sea, la línea 16 en adelante sólo se ejecutarán en el caso de que el Contador haya llegado hasta 10. Parámetros:
- Command: Go to (Comando: Acudir a)
- Line Number: 16 (Número de línea: 16)
Condición:
- Execute if: Contador (Ejecutar si el Contador
- Is: = (Es igual a)
- To: Immmediate (una cifra directa)
- With Value: 10 (con un valor de 10).

Resumen: Acudir a la línea 16 si el valor de Contador es igual a 10
Línea 16: Resetear el contador
Algo muy habitual cuando se utilizan contadores dentro de un script es ponerlo de nuevo a cero, por si queremos volver a ejecutarlo. En este caso resetearemos el Contador por si el usuario desea repetir el test, de tal modo que el Contador comience de cero. Resetear un GPRM es muy sencillo:
- Command: Set GPRM (Asignar algo en un GPRM)
- Operation: Mov (Operación: Mover)
- Source Type: Immediate (Tipo de fuente: cifra directa)
- Source Value: 0 (Valor de la fuente: 0)
- Target: Contador (Destino: Contador)

Resumen: Mover un valor de 0 al GPRM Contador
En esta ocasión no se tiene que cumplir ninguna condición, puesto que a esta línea sólo llegaremos en el caso de que el Contador tenga un valor de 10, como ordenamos en la línea anterior.
Línea 17: Acudir a la pantalla EXCELENTE si la suma es igual a 10
Ya sólo nos falta que el script acuda a una de las cuatro pantallas de valoración final del test dependiendo del resultado final. Recordemos que las respuestas correctas puntúan con un valor de 1, y las incorrectas con 0, por lo que un valor final de 10 en la suma equivale a todas las respuestas acertadas. Parámetros para esta línea:
- Command: Jump (Comando: Saltar)
- Jump to: EXCELENTE (Saltar al menú EXCELENTE)
Condición:
- Execute if: SUMA (Ejecutar si la SUMA…)
- Is: = (Es igual)
- To: Immediate (a una cifra directa)
- With Value: 10 (Con un valor de 10)

Resumen: Saltar al menú EXCELENTE si el valor de la SUMA es igual a 10
Líneas 18 y 19: Acudir a la pantalla MUY BIEN si la suma es igual a 8 ó 9
Lo mismo para estas dos líneas, en este caso acudiendo al menú MUY BIEN si la suma final es igual a 8 (línea 19) ó 9 (línea 18).
- Command: Jump (Comando: Saltar)
- Jump to: MUY BIEN (Saltar al menú MUY BIEN)
Condición:
- Execute if: SUMA (Ejecutar si la SUMA…)
- Is: = (Es igual)
- To: Immediate (a una cifra directa)
- With Value: 9 (Con un valor de 9)

Cambiaremos únicamente el valor de “With Value” a 8 para la línea 19.
Líneas 20, 21 y 22: Acudir a la pantalla BIEN si la suma es igual a 5, 6 ó 7
De nuevo, acto repetitivo, acudiendo al menú BIEN si la suma equivale a 5, 6, ó 7. Parámetros para la línea 20:
- Command: Jump (Comando: Saltar)
- Jump to: BIEN (Saltar al menú BIEN)
Condición:
- Execute if: SUMA (Ejecutar si la SUMA…)
- Is: = (Es igual)
- To: Immediate (a una cifra directa)
- With Value: 7 (Con un valor de 7)

Lo mismo para las líneas 21 (with value 6) y 22 (with value 5).
Línea 23: Acudir a la pantalla FATAL si la suma es igual o inferior a 4
Última línea del script para cuando la suma final sea igual o inferior a 4:
- Command: Jump (Comando: Saltar)
- Jump to: FATAL (Saltar al menú FATAL)
Condición:
- Execute if: SUMA (Ejecutar si la SUMA…)
- Is: <= (Es menor o igual)
- To: Immediate (a una cifra directa)
- With Value: 4 (Con un valor de 4)

Último paso: Conectar el script
Por último sólo nos queda conectar el script a todos los botones de las respuestas de cada uno de los menús. Es decir, cuando el usuario pulse en cualquier respuesta, se ejecutará el script, y será éste quien determine si pasamos a la pregunta siguiente si el valor del Contador es inferior a 10, o bien pasemos a una de las pantallas de valoración final (Excelente, bien, etc), si el Contador equivale a 10. Por el camino habrá guardado un valor de 0 ó 1 en la SUMA dependiendo de si se pulsó el botón correcto o no.
Podemos conectar los botones al script de cualquiera de las formas habituales: en el Inspector de cada botón, arrastrando el script y soltándolo sobre cada botón, o en la pestaña Connections.

Uso del Simulator
Como dijimos en el capítulo anterior el Simulator de DVD Studio Pro se convierte en un gran aliado durante toda la elaboración de los scripts. Gracias a él podemos ir comprobando si todo funciona en cualquier momento. Recordemos que en el Simulator podemos ver los valores actuales de los SPRMs y los GPRMs. Para ello abrimos el Simulator y pulsamos el botón “i” de Info. Entonces aparecerá una bandeja lateral con los diferentes valores de dichas memorias de registro.

Proyecto con ejemplo para descargar
Puedes descargarte el proyecto final de DVD Studio Pro con el ejemplo que hemos elaborado para este artículo pulsando aquí. Ahí verás tanto la confección de este script como alguna sorpresa que desarrollaremos en futuras entregas en finalcutpro.es. Además, a la derecha de cada línea del script, en el apartado Comment, hemos anotado indicaciones para facilitar su comprensión. De paso, te invitamos a que realices el test con el Simulator, a ver qué nota sacas y nos cuentas.


Nota a pie de página
Se ruega la comprensión del lector si algo no se entiende bien dado lo complejo de exponer el universo de los scripts y el esfuerzo que supone explicarlos de la mejor forma posible. Quizá esto explique la escasa o nula información existente en castellano e incluso en inglés relativa a los scripts desde hace años, no tanto por un celo de compartir cierta información, como por lo complicado en ocasiones de transmitirla.
17 comentarios
Esto ya es para leerlo con calma, pero ya tengo ganas de ponerme a probar cositas.
Muchas gracias
Vale no podía esperar más así que he sacado tiempo de dónde no había. ¡Felicidades! Un gran artículo, yo al menos lo he entendido todo, o casi todo, lo único que no entiendo muy bien es la línea tres, la de dividir el valor de GPRM, pero el resto… perfecto.
En cuanto al test, debo decir que he fallado un poco, me ha salido un BIEN, pero bueno, el próximo saldrá mejor.
Gracias Silvia :-).
La línea 3:
El SPRM 8 es el encargado de memorizar el valor del último botón realzado, pero no los contabiliza como botón 1, 2, 3, etc, sino como 1024, 2048, 3072, etc. Si no hubiéramos hecho la línea 3 (que es prescindible), en las siguientes líneas tendríamos que tener en cuenta que el botón 1 no tiene un valor de 1, sino de 1024, el 2 de 2048, el 3 de 3072, etc. O sea, hacemos esa división entre 1024 para simplificar el resto de líneas del script, simplemente. No sé si así queda claro.
Saludos, compañera :-)
Clarísimo, muchas gracias.
Llego hasta tu página a partir de tu comentario el 7 de agosto en aquella antigua entrada de mi blog; » Un puente… una baranda…»
Agradezco tus palabras
Las fotos del Bilbao antiguo que me preguntabas las saqué de mi archivo del ordenador, pero no recuerdo si en origen son de las que escanee de los cientos de fotos y postales antiguas que coleccioné a lo largo de años o las había sacado de Internet. Las tengo todas juntas.
Tu página me supera… no se de que hablais, he de reconocer mi ignorancia en esos temas.
Un saludo desde el Muno de los Sueños
hola, solo queria decir que no me funciona el proyecto que propones aqui, ya que muchas veces el script te da excelente cuando solo has acertado una por ejemplo, a veces en lugar de darte un resultado se queda en negro y pausado.
me da la sensacion de que no es nada preciso este script.
remarco que lo he seguido al pie de la letra y lo he hecho 3 veces, y no funciona correctamente.
me he asegurado de que el boton 1 de cada menu sea el de la respuesta correcta.
podrias decirme que es lo que puede pasar o faltar en este tuto para que no se ejecute correctamente??
gracias.
ya se lo que ocurre aunque no se como resolverlo,
lo que ocurre es que la primera vez que se hace el test todo funciona perfectamente,pero cuando llegas a una de las pantallas de resultado y le das a repetir test, se pone el contador a cero pero lo que no se pone a cero es la suma, que es lo que luego hace que no funcione nada.
he mirado pero no veo de momento la forma de resetear la suma cuando pulsas en el boton repetir test.
podeis ayudarme??
Cierto, resetea la SUMA al tiempo que se resetea el contador, basta con añadir una línea más después de la 16 que resetea el contador.
Saludos
hola pedro, eso que me cuentas lo he intentado añadiendo una linea más «mov SUMA, 0» pero no funciona asi.
al final he conseguido que me funcione creando otro script aparte con esta linea «mov SUMA, 0» y añadiendoselo como pre-script al menu principal, o tambien añadiendoselo como pre-script a cada uno de los menus de «excelente»»bien» etc.
pero sigue dando problemas, ya que al probarlo con el simulator va perfecto.
la cosa es que le doy a «build» para que me cree la carpeta video_ts y asi probarlo con el reproductor de mac.
el primer test me lo hace bien, pero los siguientes en lugar de salir las pantallas de resultado el dvd se pausa y se queda en negro.
seguire investigando a ver que narices le pasa a esto.. pero si se os ocurre que puede ocasionar esta cosa rariiiisima os agradeceria la ayuda.
por cierto Pedro, eso que me dices lo intente y tampoco funciona, ya que como se reproducen en orden, si la linea siguiente a la 16 meto la de resetear la SUMA siempre saldria el resultado de FATAL, puesto que antes de llegar a las ordenes de a que menu seguir le estamos diciendo que se ponga a cero.
saludos y gracias por responder.
bueno, siento ser pesado, pero es que hay cosas que me descuadran totalmente.
he conseguido que funcione perfectamente.
le doy al simulator y va perfecto con los pre-scripts de reseteo de suma.
pero cuando lo reproduzco con el reproductor de dvd ya sea del mac o la tv no funciona el reseteo de suma.
que pasa aqui??
el proyecto lo he creado de cero 3 veces por si era algo de corrupcion de archivos pero no…..
vale, resuelto esta, hay que añadir mas cosas a este proyecto para que se ejecute perfectamente.
un saludo.
Excelente articulo sr Pedro Alvera, muchas gracias esta muy bien explicado y sencillo ya que solo se usaron menus. :-) Felicitaciones.
Hola, estoy por hacer la autoria de dvd de un concierto en HDV que edite, exporte cada cancion y luego los converti a mpeg.
Ya tengo creado todo el DVD con DVD Studio Pro, pero no puedo lograr (una vez grabado) q el reproductor de dvd lea los tracks como capitulos, es decir q al pasar al siguiente track, se lea el numero correspondiente al orden de cada uno (1, 2, 3 etc) no se si se entiende bien.
Muchas gracias x toda tu ayuda!!
Es que me temo que si son diferentes tracks, no son capítulos. Los capítulos se marcan mediante «chapter markers» en el Timeline de cada track con la tecla M.
Lo voy a explicar de otra manera x q no se si fui claro:
una vez grabado el DVD y montado en un reproductor al pasar cada tema (con next o prev.) no figuran como capitulo 1, 2, 3, 4, etc. , es decir lo numeros correspondientes segun cada tema, q se deberian ver en el display del reproductor junto al timecode, por el contrario siempre figura 01 como si fuera siempre 1 capitulo
ACLARACION: llamo capitulos a cada track (cada cancion)
quisiera saber como setear las teclas de title y menu