25/04/2022
Si alguna vez te has preguntado si el scripting es una buena idea para los mods de Knights of the Old Republic (KotOR), la respuesta corta es un rotundo y absoluto sí. De hecho, es la pieza clave que diferencia un simple cambio de texturas de una expansión de contenido que puede añadir horas de juego. El scripting es el cerebro detrás de la operación; es lo que permite que tus ideas cobren vida, que los personajes reaccionen, que las misiones progresen y que el universo del juego se sienta dinámico y receptivo. Adentrarse en él puede parecer intimidante, especialmente para quienes nunca han escrito una línea de código, pero es la herramienta más poderosa a disposición de un modder. En este artículo, desglosaremos qué es el scripting en el contexto de KotOR, por qué es tan crucial y cómo funciona dentro del legendario motor Odyssey de BioWare.

- Entendiendo el Corazón del Juego: El Motor Odyssey
- Los Ladrillos de Construcción: Formatos y Plantillas
- El Lenguaje de la Creación: Introducción al Scripting con NSS
- Poniendo los Scripts en Acción: Disparadores y Eventos
- Dando Voz a tu Creación: El Sistema de Diálogos
- Preguntas Frecuentes (FAQ)
- Conclusión: Tu Imaginación es el Único Límite
Entendiendo el Corazón del Juego: El Motor Odyssey
Tanto KotOR como su secuela, The Sith Lords (TSL), funcionan con el motor Odyssey, una versión modificada y extendida del motor Aurora que dio vida a Neverwinter Nights. Esta herencia es una gran noticia para los modders, ya que significa que muchas de las estructuras y lógicas son similares. Entender cómo está organizado el juego a nivel de archivos es el primer paso para poder modificarlo eficazmente. El juego no es una entidad única e intocable; es una colección de archivos, archivos dentro de otros archivos, y tú puedes cambiar casi todos ellos.
La Estructura de Archivos: ¿Dónde Vive Todo?
Los archivos del juego están empaquetados en grandes "archivos" comprimidos, principalmente con formatos como BIF, RIM y ERF. Piensa en ellos como grandes cajas de almacenamiento. Dentro de estas cajas, encontrarás todo lo que compone el juego: modelos 3D, texturas, sonidos, y por supuesto, los scripts que dictan el comportamiento de todo.
Sin embargo, la carpeta más importante para cualquier modder es una que, irónicamente, viene vacía: la carpeta override. Su nombre lo dice todo. Cualquier archivo que coloques en esta carpeta sobreescribirá al archivo con el mismo nombre que se encuentre en los archivos principales del juego. Es el lienzo en blanco del modder. Cuando el juego necesita cargar un recurso (un personaje, un script, un objeto), primero mira en la carpeta `override`. Si lo encuentra allí, lo usa. Si no, busca en sus archivos BIF originales. Esta simple jerarquía es la base de casi todo el modding de KotOR.
Los Módulos: Los Escenarios del Juego
El juego está dividido en "módulos". Cada módulo es, en esencia, un nivel o área, como la cubierta superior de Taris o el enclave Jedi de Dantooine. Cada módulo contiene sus propios scripts, diálogos y plantillas de objetos o personajes que solo se usan en esa área específica. Esto mantiene el juego organizado y eficiente.
Los Ladrillos de Construcción: Formatos y Plantillas
Para modificar el juego, necesitas entender sus "ladrillos" fundamentales. La gran mayoría de los archivos de datos que definen cómo son las cosas en KotOR utilizan un formato llamado GFF (Generic File Format). Es un sistema flexible de pares clave-valor, muy parecido a un XML o JSON, que describe las propiedades de cualquier cosa imaginable.
Plantillas GFF: El ADN de KotOR
Las plantillas son los planos de todo lo que existe en el juego. Cuando ves un soldado Sith, el juego no está generando sus estadísticas y equipo de la nada; está instanciando una plantilla de "soldado Sith". Estas plantillas definen todo, desde la salud y el equipo de un personaje hasta la dificultad para abrir una puerta.
Aquí tienes una tabla con algunas de las plantillas más comunes con las que te encontrarás:
| Extensión de Archivo | Tipo de Plantilla | Descripción |
|---|---|---|
| .utc | Creature (Criatura) | Define personajes y NPCs, desde un Wookiee hasta Darth Malak. Incluye su inventario, estadísticas, scripts de IA y apariencia. |
| .uti | Item (Objeto) | Define cualquier objeto, ya sea un sable de luz, un medpac o una armadura. Especifica sus propiedades, bonificaciones y modelo. |
| .utd | Door (Puerta) | Define las propiedades de una puerta, como si está cerrada con llave, la dificultad para abrirla o si lleva a otra área. |
| .utp | Placeable (Colocable) | Objetos estáticos en el mundo con los que se puede interactuar, como contenedores, terminales de ordenador o elementos decorativos. |
| .utt | Trigger (Disparador) | Áreas invisibles que ejecutan un script cuando el jugador entra, sale o interactúa con ellas. Son cruciales para las misiones. |
| .utm | Merchant (Mercader) | Define la tienda de un PNJ, incluyendo qué objetos vende y si su inventario es limitado o se repone. |
Archivos 2DA: Las Hojas de Cálculo del Juego
Los archivos 2DA (Two-Dimensional Array) son esencialmente hojas de cálculo que el juego usa para equilibrar y definir reglas globales. Hay un 2DA para las clases de personajes, otro para los talentos, otro para las apariencias... casi todo lo que tiene que ver con reglas sistémicas se encuentra en estos archivos. Modificar un 2DA puede tener efectos globales, como cambiar la progresión de niveles de todos los Jedi del juego.
El Lenguaje de la Creación: Introducción al Scripting con NSS
Llegamos al núcleo del asunto. El scripting es lo que da vida a todas estas plantillas y estructuras. KotOR utiliza un lenguaje de scripting llamado NSS (Neverwinter Script). Es un lenguaje similar a C, diseñado para ser relativamente simple pero muy potente dentro del contexto del juego.
¿Cómo es un Script de NSS?
Un script es un archivo de texto plano que contiene una serie de instrucciones. Estas instrucciones se ejecutan cuando ocurre un evento específico en el juego. Por ejemplo, un script puede ejecutarse cuando hablas con un PNJ, cuando abres un cofre o cuando entras en una habitación.
El código en sí se compone de variables (para almacenar información como números o texto), estructuras condicionales (si ocurre X, haz Y; si no, haz Z) y bucles (repite esta acción varias veces). Pero lo más importante son las "Engine Actions" o Acciones del Motor.
Acciones del Motor: Tus Superpoderes como Modder
Las Acciones del Motor son funciones predefinidas que te permiten interactuar directamente con el juego. Hay cientos de ellas. ¿Quieres que un personaje se mueva a un punto específico? Hay una acción para eso. ¿Quieres añadir un objeto al inventario del jugador? Hay una acción para eso. ¿Quieres iniciar un combate, mostrar un mensaje en pantalla o cambiar la alineación del jugador hacia el Lado Oscuro? Sí, hay acciones para todo eso.
Por ejemplo, una acción simple como `GiveItemToObject(oPlayer, "g_i_medpac01");` le daría al jugador (oPlayer) un medpac regular. Combinando estas acciones con lógica condicional, puedes crear secuencias complejas. Por ejemplo:
if (GetAlignmentGood(oPlayer) > 75) { GiveItemToObject(oPlayer, "k_sp_holocron"); }
Este simple fragmento de código comprobaría si la alineación "Buena" del jugador es superior a 75 y, si es así, le entregaría un objeto llamado "k_sp_holocron". ¡Acabas de crear una recompensa de misión exclusiva para jugadores del Lado Luminoso!
Compilando tus Scripts
El juego no puede leer directamente los archivos de texto NSS que escribes. Primero, debes "compilarlos" a un formato binario que el motor pueda entender, llamado NCS. Para ello se utilizan herramientas como `nwnnsscomp`. Este paso convierte tus instrucciones legibles por humanos en un código optimizado que el juego puede ejecutar rápidamente.
Poniendo los Scripts en Acción: Disparadores y Eventos
Un script no sirve de nada si no se ejecuta nunca. La belleza del motor Odyssey es la cantidad de formas que tienes para "disparar" tus scripts.
- Diálogos: Esta es la forma más común. Puedes adjuntar un script a una línea de diálogo específica. Cuando el jugador elige esa opción, el script se ejecuta. Así es como se entregan recompensas de misiones, se actualizan los diarios y se inician combates.
- Triggers (UTT): Como mencionamos antes, son volúmenes invisibles en el mapa. Puedes colocar uno en la entrada de una cueva y asignarle un script que haga aparecer a tres Kinrath cuando el jugador lo cruce. ¡Emboscada instantánea!
- Scripts de Objetos: Puedes hacer que un script se ejecute cuando se usa un objeto, como un datapad que inicia una nueva entrada en el diario.
- Eventos del Motor: El juego tiene eventos predefinidos para casi todo. `OnEnter` se ejecuta cuando un PNJ entra en una zona, `OnDamaged` cuando es herido, y `OnHeartbeat` se ejecuta a intervalos regulares (cada 6 segundos), ideal para lógicas de IA o efectos que deben comprobarse constantemente.
Dando Voz a tu Creación: El Sistema de Diálogos
Los diálogos son el alma de un RPG como KotOR. Crear nuevas conversaciones es fundamental para contar historias. El sistema de diálogos está ingeniosamente dividido en dos tipos de archivos:
- Archivos DLG: Estos archivos, en formato GFF, contienen la estructura de la conversación. Son como un diagrama de flujo que define qué personaje dice qué, qué opciones de respuesta tiene el jugador y a qué línea de diálogo lleva cada opción. También es aquí donde se enlazan los scripts para que se ejecuten en puntos concretos de la conversación.
- Archivo TLK (Talk Table): Este es un único archivo masivo que contiene el texto real de todas las líneas de diálogo del juego, en un idioma específico. El archivo DLG no contiene el texto "¡Por la República!", sino una referencia a la línea 54321 del archivo TLK, donde se encuentra ese texto. Este sistema permite que el juego soporte múltiples idiomas simplemente cambiando el archivo TLK.
Los modders a menudo incrustan el texto directamente en el archivo DLG para simplificar, especialmente si el mod es solo en inglés. Sin embargo, para proyectos más grandes y multilingües, modificar el archivo TLK es el camino a seguir.
Preguntas Frecuentes (FAQ)
¿Necesito ser un programador experto para usar scripting?
No. El lenguaje NSS fue diseñado para ser accesible. Si bien tener experiencia en programación ayuda, muchos modders han aprendido desde cero. Comienza con scripts simples, como dar un objeto o mover a un personaje, y ve construyendo desde ahí. La comunidad de modding de KotOR tiene décadas de conocimiento y tutoriales disponibles.
¿Qué herramientas necesito para empezar?
Principalmente necesitarás el KotOR Tool (o su equivalente para TSL) para extraer los archivos del juego y ver cómo están hechos los scripts y plantillas originales. También necesitarás un compilador de NSS como `nwnnsscomp` y un editor de texto simple como Notepad++ para escribir tu código.
¿Es muy difícil aprender el lenguaje NSS?
Tiene una curva de aprendizaje, pero es más suave que la de lenguajes de programación modernos y de propósito general. La clave es que solo necesitas aprender las partes del lenguaje que son relevantes para modificar el juego. No necesitas saber sobre algoritmos complejos, solo cómo usar las Acciones del Motor para lograr tus objetivos.
¿Puedo romper mi juego haciendo scripting?
Sí, es posible. Un script mal escrito puede causar que el juego se bloquee o que una misión se vuelva imposible de completar. Por eso es crucial usar la carpeta `override` y hacer copias de seguridad. Si un script causa problemas, simplemente elimínalo de la carpeta `override` para restaurar el comportamiento original del juego. Siempre prueba tus mods a fondo.
Conclusión: Tu Imaginación es el Único Límite
Volviendo a la pregunta inicial: ¿es el scripting una buena idea? Es la mejor idea si quieres dejar tu propia marca en la galaxia de Star Wars. Es la diferencia entre pintar un droide de otro color y construir un droide completamente nuevo con su propia personalidad, misiones y diálogos. Requiere paciencia y voluntad de aprender, pero el resultado es la capacidad de contar tus propias historias en uno de los universos de rol más queridos de todos los tiempos. El motor Odyssey te da las herramientas; el scripting te permite usarlas para construir mundos.
Si quieres conocer otros artículos parecidos a Mods de KotOR: El poder del scripting explicado puedes visitar la categoría Modding.
