Servidores y comunidad

Nombrar y versionar mapas GMod: prefijo, nombre de archivo, actualizaciones

Nombrar un mapa de GMod: prefijo, nombre de archivo, versiones y por qué una actualización nunca debe conservar el nombre antiguo. Con los archivos asociados.

Un mapa de GMod recibe un nombre de archivo formado por minúsculas, dígitos y guiones bajos, con el prefijo del modo de juego al principio y una etiqueta de versión al final, por ejemplo rp_harbourtown_v2. Cada cambio publicado recibe un nombre nuevo. El motivo: el cliente y el servidor identifican un mapa por su nombre de archivo, y quien ya tiene un archivo con ese nombre no descarga uno nuevo. Si los dos archivos difieren, el intento de conexión termina con un mensaje de error.

Prefijos: qué hace GMod realmente con ellos

El prefijo es una convención, no un interruptor. En el código Lua que viene con el juego se evalúa en un sitio: el menú principal lo usa para ordenar los mapas en categorías, y oculta los mapas que empiezan por sdk_, test_ o vst_. La asignación está en garrysmod/lua/menu/getmaps.lua. Ahí, el prefijo es todo lo que hay hasta el primer guion bajo, este incluido, y el nombre se convierte antes a minúsculas. Además, cada modo de juego puede registrar sus propios patrones mediante la clave maps de su archivo de texto. Sandbox registra ^gm_|^gmod_|^phys_, TTT registra ^ttt_.

PrefijoCategoría en el menú
gm_, gmod_, phys_Sandbox
ttt_Trouble in Terrorist Town
rp_Roleplay
zs_, zm_, zombiesurvival_Zombie Survival
ph_Prop Hunt
surf_Surf
bhop_Bunny Hop
de_, cs_Counter-Strike

Todo lo que no coincide con ningún patrón acaba en «Other». Mientras el modo de juego Murder no esté instalado, eso incluye mu_: el prefijo no está en la lista que viene con el juego. Murder registra por su cuenta ^md_|^mu_|^murder_ mediante su clave maps. Qué modo de juego funciona en un servidor lo fija el parámetro de arranque +gamemode, no el mapa. Elige el prefijo del modo para el que está hecho el mapa.

Reglas para el nombre de archivo

  • Solo minúsculas. Linux distingue entre mayúsculas y minúsculas, Windows no. Un RP_Town.bsp que carga en tu equipo no lo encuentra un servidor Linux ni un servidor web de FastDL como rp_town.bsp. Al crear un addon de Workshop, gmad.exe marca las mayúsculas con [Filename contains captial letters].
  • Sin espacios, letras acentuadas ni caracteres especiales. El nombre del mapa es un argumento de comandos de consola como changelevel y forma parte de la dirección de FastDL. En la consola, un espacio separa argumentos; en una dirección web hay que codificarlo. Con a a z, 0 a 9 y _ evitas las dos cosas.
  • Corto y único. Este artículo no da un límite fijo de longitud, porque no se pudo encontrar ninguna fuente fiable para GMod. Si tu mapa se llama igual que un mapa muy extendido de otra persona, tienes el mismo conflicto que con dos versiones bajo un mismo nombre.
  • Decídelo antes de generar los cubemaps. Los cubemaps se guardan en el pakfile en materials/maps/<mapname>/. Consulta arreglar cubemaps y reflejos.

Un esquema de versiones que aguanta

El motor no impone ninguna etiqueta de versión. Los siguientes sufijos son práctica de la comunidad:

SufijoSignificadoUso
_a1, _a2Alphapruebas de layout, todavía sin detalle
_b1, _b2Betajugable, sigue cambiando
_rc1Release candidatese da por terminada salvo que aparezca otro bug
_v1, _v2Releaseversiones publicadas, numeradas de forma consecutiva
_final«final»mejor evitarlo

_final es una trampa, porque después de la versión final a menudo aparece otro bug. Entonces el siguiente archivo se llama _final2 o _final_fix, y nadie puede saber por el nombre cuál es más reciente. Para la mayoría de los proyectos basta con _b1, _b2 durante las pruebas y después _v1, _v2, _v3.

Sube el número también con las correcciones pequeñas, porque cada cambio produce un archivo distinto.

Qué pasa cuando dos archivos comparten nombre

Al conectarse, el cliente comprueba si ya tiene maps/<mapname>.bsp. Si el archivo falta, lo descarga y lo guarda en garrysmod/download/maps. Si está, el cliente no descarga nada, y el motor solo compara la suma de comprobación con la del servidor. Si las dos difieren, el intento de conexión termina con un mensaje de esta forma:

Your map [maps/rp_harbourtown_v2.bsp] differs from the server's.

El jugador tiene entonces que borrar el archivo antiguo a mano, y muy pocos lo saben. La misma confusión se produce por otras vías:

  • FastDL: El espacio web todavía tiene el .bsp.bz2 antiguo, mientras que el servidor de juego ya tiene el BSP nuevo. Cada jugador nuevo descarga el archivo equivocado.
  • Workshop: Steam actualiza a los suscriptores automáticamente. Según la wiki de GMod, un servidor comprueba sus addons en cada reinicio. Si sigue funcionando con la versión antigua, o host_workshop_autoupdate está en 0, el cliente y el servidor tienen archivos distintos con el mismo nombre.
  • Workshop y FastDL mezclados: Algunos jugadores tienen el mapa de Workshop, otros de download/maps. Con un solo nombre, nadie puede saber quién tiene qué versión.
  • Datos guardados del servidor: DarkRP guarda los ajustes de las puertas, las posiciones de jail y los spawns de los jobs por nombre de mapa, y las puertas además por el ID de la entity del mapa. Si una actualización con el mismo nombre cambia las entities, las entradas antiguas pueden apuntar a las puertas equivocadas.

Un nombre de archivo nuevo elimina todo eso: el archivo antiguo se queda en el disco del jugador, pero ya no estorba. La configuración del servidor, FastDL y Workshop se explica en instalar un mapa de GMod en un servidor.

Qué lleva el nombre del mapa y hay que renombrar con él

Renombrar un BSP en el explorador de archivos no basta. Según la Valve Developer Community, los modelos y los props pierden entonces sus reflejos de cubemap, porque el motor busca los cubemaps en el pakfile bajo el nombre de archivo del BSP. La forma limpia: renombrar el VMF y compilar de nuevo. Después, estos archivos cambian de nombre con él:

ArchivoContenido
maps/<mapname>.navNavmesh para Nextbots
maps/graphs/<mapname>.ainGrafo de nodos para los NPC clásicos
scripts/soundscapes_<mapname>.txtSoundscapes del mapa
maps/<mapname>_level_sounds.txtSoundscripts del mapa
maps/<mapname>_particles.txtManifiesto de partículas del mapa
maps/thumb/<mapname>.pngMiniatura en la selección de mapas
maps/<mapname>_ttt.txtScript de armas y spawns para TTT

A eso se suma todo lo que contiene el nombre como texto: el mapa inicial en la configuración del servidor, las listas de votación de mapas y el código Lua que compara game.GetMap() con un nombre fijo. No copies el .ain; deja que el BSP nuevo lo genere desde cero, como se describe en navmesh y AI nodes. El orden de compilación, cubemaps, empaquetado y pruebas se muestra en la checklist previa a la publicación.

Changelog: qué ganan con él los compradores y los propietarios de servidor

Un nombre de archivo nuevo supone trabajo para los propietarios de servidor: cambiar el mapa inicial, actualizar FastDL, volver a fijar las posiciones. Un changelog les dice si merece la pena. Las entradas útiles responden a cuatro preguntas:

  • ¿Qué se ha corregido y qué hay de nuevo?
  • ¿Han cambiado puertas, spawns u otras entities, de modo que haya que volver a fijar los datos guardados del servidor?
  • ¿Hace falta contenido nuevo o distinto?
  • ¿Se han regenerado el navmesh y el grafo de nodos?

Para los compradores, el historial de versiones es además una señal de que el mapa se mantiene. En bspmarket.de envías una versión nueva en el área de Creator con un número de versión y un changelog opcional. Se revisa antes de publicarse y después aparece en la página de producto, en «Versiones y registro de cambios». Las actualizaciones son gratuitas para los compradores. Qué más debe tener una buena página de producto se explica en vender mapas de GMod.

Preguntas frecuentes

¿Tengo que crear un elemento nuevo de Workshop para cada versión?

No. Las normas de Workshop para GMod recomiendan publicar las versiones nuevas como actualización del elemento existente. Aun así, dale al BSP que contiene el nuevo nombre de versión: así nadie puede confundir dos versiones, y los servidores solo tienen que ajustar su mapa inicial. En cualquier caso, un servidor solo recoge la actualización cuando se reinicia. Según la wiki de GMod, un servidor que todavía ejecuta una versión más antigua del mapa puede impedir que los jugadores entren. El proceso se describe en subir un mapa de GMod a Workshop.

¿Qué prefijo uso si el mapa encaja en varios modos de juego?

El del modo para el que está hecho en primer lugar. El prefijo determina la categoría en el menú y lo que esperan los jugadores. Un mapa rp_ se puede iniciar igualmente en Sandbox.

¿Qué hago con las versiones antiguas en el servidor y en FastDL?

Bórralas en cuanto el servidor haya pasado a la versión nueva, incluidos el .bsp.bz2 y los archivos .nav y .ain antiguos. Las copias antiguas en los equipos de los jugadores no hacen daño, porque tienen otro nombre.