19/01/2012
En el vasto universo del modding de videojuegos, hay archivos que, a pesar de su aparente simplicidad, esconden un poder inmenso para transformar la experiencia del jugador. Uno de estos archivos es, sin duda, el GameMenu.res. Si alguna vez has jugado a un título del motor Source como Half-Life 2, Portal o Counter-Strike: Source y te has preguntado cómo los modders añaden nuevas opciones al menú principal, estás en el lugar correcto. Este archivo de texto es la llave maestra que controla los botones, las opciones y la estructura del menú del juego, y dominarlo te abrirá un nuevo mundo de personalización.

Esta guía completa te llevará de la mano a través de todos los secretos del `GameMenu.res`. Desde su ubicación y estructura básica hasta los parámetros y comandos más avanzados que puedes utilizar. Exploraremos ejemplos prácticos, te daremos consejos para evitar errores comunes y, al final, serás capaz de crear menús personalizados que se adapten perfectamente a tus necesidades o a las de tu propio mod.
El archivo `GameMenu.res` es un simple documento de texto que actúa como un plano para el menú principal y el menú de pausa del juego. A diferencia de otros recursos del juego que pueden estar compilados o en formatos binarios complejos, este archivo se puede abrir y editar con cualquier editor de texto básico, como el Bloc de Notas de Windows, aunque se recomienda encarecidamente usar editores más avanzados como Notepad++ o Visual Studio Code para una mejor visualización de la sintaxis.
Su función principal es definir qué botones aparecen en el menú, qué texto muestran, qué acción realizan cuando se hace clic en ellos y bajo qué condiciones son visibles (por ejemplo, solo en el modo multijugador o solo cuando se está dentro de una partida).

Normalmente, encontrarás este archivo en la siguiente ruta dentro del directorio de tu juego o mod:
[Directorio del juego o mod]/resource/GameMenu.res
Es fundamental que, antes de realizar cualquier modificación, hagas una copia de seguridad del archivo original. Un simple error de sintaxis, como una comilla o una llave mal cerrada, puede hacer que el menú del juego no se cargue correctamente o que el juego se cierre inesperadamente.
La Estructura Básica: Entendiendo la Sintaxis
A primera vista, el contenido del archivo puede parecer un poco intimidante, pero su estructura es bastante lógica. Todo el contenido está dentro de un bloque principal llamado `"GameMenu"`. Dentro de este bloque, cada elemento del menú se define en su propio bloque, identificado por una clave única (que puede ser un número o un nombre descriptivo).
Veamos un ejemplo simple de un botón del menú de Half-Life 2:
"2" { "label" "#GameUI_GameMenu_Disconnect" "command" "Disconnect" "OnlyInGame" "1" "notsingle" "1" }Analicemos este bloque:
- "2": Es el identificador único de este elemento del menú.
- "label": Define el texto que se mostrará en el botón. El símbolo `#` indica que el texto (`GameUI_GameMenu_Disconnect`) no es literal, sino una clave que el juego buscará en sus archivos de idioma para mostrar el texto traducido correspondiente ("Desconectar" en español).
- "command": Es la acción que se ejecutará al pulsar el botón. En este caso, el comando `Disconnect` desconecta al jugador del servidor actual.
- "OnlyInGame": Este es un parámetro condicional. Al tener el valor `"1"` (verdadero), indica que este botón solo será visible cuando el jugador esté dentro de una partida, no en el menú principal.
- "notsingle": Otro parámetro condicional. Con el valor `"1"`, asegura que el botón no aparezca en partidas de un solo jugador.
Parámetros Clave para la Personalización
Para tener un control total sobre tu menú, necesitas conocer los diferentes parámetros que puedes utilizar. A continuación, se detallan los más importantes y su función.

| Parámetro | Descripción |
|---|---|
| label | El texto que se muestra en el botón. Si comienza con '#', busca una clave de localización. |
| command | La acción a ejecutar. Puede ser un comando interno del menú o un comando de la consola. |
| notsingle | Si se establece en "1", el botón no se mostrará en el modo de un solo jugador. |
| notmulti | Si se establece en "1", el botón no se mostrará en el modo multijugador. |
| OnlyInGame | Si se establece en "1", el botón solo será visible cuando el jugador esté dentro de una partida. |
| NotInGame | Lo opuesto a `OnlyInGame`. Si se establece en "1", el botón solo se verá en el menú principal. |
| ConsoleOnly | Si se establece en "1", el botón solo se mostrará en las versiones de consola del juego (ej. Xbox 360). |
| MenuCategory | Permite agrupar botones en diferentes categorías o submenús, muy útil para menús complejos. |
| ExcludeFromMenuCategory | Permite ocultar un botón cuando se está en una categoría de menú específica. |
Comandos: El Poder de la Interacción
El parámetro `command` es el que da vida a los botones. No todos los comandos de la consola funcionan directamente aquí, pero hay una lista de comandos específicos del menú, además de una forma de ejecutar comandos de consola.
| Comando | Función que Desencadena |
|---|---|
| ResumeGame | Cierra el menú y vuelve al juego (si se está en una partida). |
| Disconnect | Desconecta del servidor actual en una partida multijugador. |
| Quit | Muestra el diálogo de confirmación para salir del juego. |
| OpenNewGameDialog | Abre la ventana para iniciar una nueva partida. |
| OpenLoadGameDialog | Abre la ventana para cargar una partida guardada. |
| OpenSaveGameDialog | Abre la ventana para guardar la partida actual. |
| OpenOptionsDialog | Abre el menú de opciones del juego. |
| OpenServerBrowser | Abre el explorador de servidores multijugador. |
| OpenAchievementsDialog | Muestra la lista de logros del juego. |
Ejecutando Comandos de Consola
Una de las funciones más potentes es la capacidad de ejecutar cualquier comando de la consola. Esto se logra usando el prefijo `engine`.
Por ejemplo, si quieres un botón que conecte directamente a un servidor específico, podrías usar:
"command" "engine connect 192.168.1.100"
O si quieres un botón para activar el modo de trucos:
"command" "engine sv_cheats 1"
Esta flexibilidad permite crear botones para casi cualquier función que se te ocurra, desde cargar un mapa específico hasta ejecutar un script de configuración.

Análisis del Ejemplo Avanzado: Half-Life 2 (20th Anniversary)
La actualización del 20º Aniversario de Half-Life 2 introdujo un `GameMenu.res` mucho más complejo y poderoso, que es un excelente caso de estudio.
"GameMenu" { "Main_1" { "label" "#GameUI_HalfLife2" "command" "SwitchExpansion hl2" "NotInGame" "1" "MenuCategory" "main" } "Pause_1" { "label" "#GameUI_GameMenu_ResumeGame" "command" "ResumeGame" "OnlyInGame" "1" } // ... más entradas }Este ejemplo nos muestra varias técnicas avanzadas:
- Identificadores Descriptivos: En lugar de números ("1", "2"), se usan nombres como `"Main_1"` y `"Pause_1"`. Esto hace que el archivo sea mucho más fácil de leer y mantener.
- Separación de Contextos: Utiliza `OnlyInGame` y `NotInGame` para definir conjuntos de botones completamente diferentes para el menú principal y el menú de pausa.
- Categorías de Menú: El uso de `"MenuCategory"` y comandos como `"SwitchExpansion hl2"` o `"SwitchCategory main"` permite crear una navegación compleja. El menú puede mostrar diferentes conjuntos de botones dependiendo de si has seleccionado jugar a Half-Life 2, Episode One o Episode Two, todo desde la misma interfaz.
Preguntas Frecuentes (FAQ)
Generalmente se encuentra en la carpeta `resource` dentro del directorio principal de tu juego o mod basado en el motor Source.
¿Necesito un programa especial para editarlo?
No, cualquier editor de texto plano funciona. Sin embargo, se recomienda usar uno con resaltado de sintaxis como Notepad++ o Visual Studio Code para evitar errores.

Casi siempre, esto se debe a un error de sintaxis. Revisa cuidadosamente tu archivo en busca de llaves `{ }` o comillas `"` que no estén cerradas correctamente. Compara tu archivo con la copia de seguridad para encontrar el error.
¿Qué significa el símbolo '#' antes del texto en el parámetro `label`?
Indica que el texto es una clave de localización. El juego buscará esta clave en sus archivos de idioma (como `gameui_spanish.txt`) para mostrar el texto traducido correspondiente. Si escribes un texto sin el '#', se mostrará de forma literal.
¿Puedo usar esto en cualquier juego?
Este sistema es específico del motor Source de Valve. Otros juegos y motores utilizan sistemas completamente diferentes para sus menús, como archivos `.swf` (Flash) en juegos como Skyrim o sistemas basados en blueprints y archivos `.pak` en juegos con Unreal Engine.
El archivo `GameMenu.res` es una herramienta de personalización increíblemente accesible y potente para cualquiera que trabaje con el motor Source. Ya sea que quieras añadir un simple atajo a tu servidor favorito, limpiar el menú de opciones que nunca usas, o diseñar una interfaz compleja para tu propio mod, todo comienza con este humilde archivo de texto. Ahora que conoces su estructura, sus parámetros y sus comandos, te animamos a experimentar. Recuerda siempre hacer una copia de seguridad y, sobre todo, ¡diviértete dándole tu toque personal a tus juegos favoritos!
Si quieres conocer otros artículos parecidos a Guía Definitiva del Archivo GameMenu.res puedes visitar la categoría Modding.
