Introducción a la integración de scripts en un motor de juegos
Un lenguaje de “script”, es un lenguaje de programación interpretado por la computadora, es decir, que no requiere compilación.
Actualmente, incluir algún lenguaje de este tipo, en juegos, es muy común por la motivación de otorgar a diseñadores de niveles la posibilidad de agregar comportamientos a objetos o personajes sin necesidad de pasar por un proceso de “compilación” y sin afectar la estabilidad del juego. Además, los lenguajes de scripts suelen ser lenguajes de muy alto nivel, muy productivos en cuanto a generación de código se refiere y con estructuras de datos muy flexibles y fáciles de utilizar.
Por supuesto que realizar una tarea X utilizando un script tomará más tiempo que si hubiese sido codificada en lenguaje C, además es posible que los autores de dichos scripts - no siendo programadores expertos - tampoco realicen las tareas del modo mas eficiente posible.Sin embargo, los scripts suelen ejecutarse en threads de baja prioridad separados del bucle principal, por lo tanto un mal desempeño de los mismos no deberÃa afectar de manera notoria la performance del juego todo. Además, tampoco realizaremos con scripts tareas propias del motor (o al menos no crÃticas).
Este tutorial expone las caracterÃsticas fundamentales de tres exponentes de los lenguajes de scripts utilizados en juegos: Python, Lua y AngelScript. De cada uno de estos lenguajes se detalla como embeberlo en una librerÃa C++ y como realizar la intercomunicación básica con el lenguaje.
Los lenguajes de script
Existen dos alternativas a la hora de incorporar un motor de script dentro de nuestro motor:
Crear nuestro propio lenguaje de scripting: Hace no mucho tiempo era común encontrar juegos, que si utilizaban scripts, implementaban un lenguaje propietario.
Lo positivo de esta estrategia es que las caracterÃsticas del script serán exactamente las que necesitemos, la integración con el motor serÃa mayor y los cambios requeridos al motor de scripting podrÃan hacerse efectivas en los tiempos que maneje el proyecto.
Lo negativo es que deberemos invertir un esfuerzo no menor en creación de todo el subsistema relacionado a scripting (definición del lenguaje, intérprete y/o compilador JIT, documentación, etc), luego deberemos mantener todo ese subsistema (solucionar bugs, agregar nuevas caracterÃsticas, etc). Además serÃa lógico que no siendo nosotros programadores expertos en la implementación de este tipo de herramientas (ni siendo nuestro motivación principal serlo) muy probablemente los scripts sean mas lentos o requieran más CPU y/o memoria que otros creados y mantenidos por equipos especializados.
Ejemplos de este acercamiento son los juegos Quake (QuakeC), Unreal (UnrealScript), Torque Script (Torque).
Utilizar un motor de scripts ya existente: Utilizar algún motor de scripting ya existente en el mercado es la opción más popular de estos dÃas.
Como positivo podemos destacar que utilizarÃamos un lenguaje documentado, del cual es posible encontrar gente capacitada en el mercado, que posee años de uso en la comunidad y que ha sido probado en otros proyectos de manera exitosa (muy posiblemente en juegos).
El lado negativo es que no controlaremos su estado de desarrollo (será imposible - o al menos más difÃcil - agregar nuevas caracterÃsticas y solucionar errores), la integración con nuestro motor podrÃa ser más dificultosa y no quedar tan elegante.
Ejemplos de este acercamiento son los juegos “FreedomForce” (Python) y “Escape from Monkey Island” (Lua). Versiones anteriores del juego Monkey Island utilizaban un motor de scripting propietario llamado SCUMM (Script Creation Utility for Maniac Mansion).
Especificar que alternativa es “la mejor” serÃa un error, ya que muchos son los factores y variables que entran en juego al momento de tomar una decisión. Sin embargo, en el ámbito del desarrollo independiente, hobbysta o de micro emprendimientos la segunda opción suele ser la más aconsejada ya que el recurso mas escaso de todos es el tiempo.
En este documento veremos como realizar la integración de tres de los lenguajes de scripting más populares en juegos de hoy dÃa:
. Python (http://www.python.org)
. Lua (http://www.lua.org)
. AngelScript (http://www.angelcode.com/angelscript)
Existen, por supuesto, muchos otros lenguajes que es posible integrar como:
. Perl (http://www.perl.com)
. Tcl (http://tcl.sourceforge.net)
. Ruby (http://www.ruby-lang.org)
. Java (http://java.sun.com)
. CSL (http://csl.sourceforge.net)
. CINT (http://root.cern.ch/root/Cint.html)
. Small (http://www.compuphase.com/small.htm)




Hehe, flor de articulo. Todavia no lo termine de leer, pero muy buen tema!
Epa! Crei que tenias abandonada la pagina pero no, estabas haciendo un super articulo. Buenisimo!
[…] Este artÃculo completa el que publiqué la semana pasada y que puede acceder haciendo click aquÃ. […]