Es/FGD

FGD significa "Forge Game Data" (inglés para datos forgja de juego). Es la extensión para los archivos de definición de juego para . Definen todas de un juego así mapeadores pueden seleccionarlos del editor. Es necesario entender que los FGD son nunca más que una fuente. No puede crear o cambiar entidades por editar los FGD, sólo cambiar lo que busca en el juego. A veces editar revela características o entidades escondidas, pero estos siempre estaba allí y pueden usarse sin FGD actualizados. Para archivos de FGD a medida funcionar en el Hammer, necesitan añadirse en "Tools > Options".
==Historia==
Mientras Hammer originalmente se llamaba Worldcraft, se desarrollaba bajo el nombre "The Forge" (la forja, de ahí que el nombre "Forge Game Data"). Por problemas de marca registrada, el nombre no puede usarse para la versión final de Hammer. Sin embargo, la extensión permanece.
==Formato de archivo==
Un archivo de FGD sigue un formato más o menos sencillo. Es un archivo de script que monta estructuras y relaciones de entidades para Hammer. Las partes diferentes del FGD de (encontrado en su directorio de binarios de SDK, por ejemplo [ruta a Steam]/Steamapps/common/Source SDK Base 2013 Singleplayer/bin/) se explican a continuación.
 //====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======
 //
 // Purpose: Half-Life 2 game definition file (.fgd) 
 //
 //=============================================================================
Comentarios se definen por empezar una línea con //. Pueden precederse por espacios o tabulaciones.
 @include "base.fgd"
Si el juego para que escribe su FGD tiene mucho en común con un otro juego (p. ej. y ), puede include (incluir) un archivo que tiene todas las estructuras comunes definidas en él. Los FGD para tanto Half-Life 2 como Counter-Strike: Source incluyen el archivo y el FGD para incluye el archivo .
 @BaseClass base(BaseNPC) = TalkNPC
 [
 	UseSentence(string) : "Use Sentence"
 	UnUseSentence(string) : "Un-Use Sentence"
 ]
Una BaseClass se usa para montar estructuras que se usan por múltiples entidades diferentes. Se mencionan en una estructura por añadir base(BaseClassName) a la línea de definición principal de la estructura. La estructura BaseClass se define igual que una entidad tradicional en todo sentido. La diferencia sola es que no aparece en las listas de entidades de Hammer. (La estructura de entidad completa le habla a continuación.)
 @PointClass base(Targetname, Origin) studio("ruta/modelo.mdl") = entidad_de_ejemplo : "ejemplo"
 [
 	spawnflags(flags) =
 	[
 		32 : "Un flag" : 0 // 0 significa el flag no se pone por defecto
 		64 : "Otro flag" : 1 // 1 significa el flag se pone por defecto
 	]
 
 	foobarname(string) : "Nombre" : : "Nombre de foobar"
 	foobargroup(string) : "Grupo" : "Squad1" : "Nombre de grupo de foobar"
 	foo(float) "Número de punto flotante" : "100.7" : "Puntos decimales = divertidos"
 	algo(integer) readonly: "primer número" : 0 : "Esto es un número que no puede editarse manualmente"
 	algo2(choices) : "segundo número" : 0 : "Su elección de números!" =
 	[
 		0 : "Defecto"
 		1 : "Algo"
 		2 : "Otra cosa"
 	]
 
 	// Entradas
 	input HagaAlgo(void) : "Haga algo"
 
 	// Salidas
 	output OnAlgoPasó(void) : "Dispara cuando algo pasa"
 	output OnOtraCosa(void) : "Dispara cuando otra cosa pasa"
 ]
Arriba está un ejemplo genérico de una estructura de entidad como definido en los FGD. Lo analicemos poco a poco, empezando con la primera línea:
* @PointClass - El tipo de clase de entidad llama a Hammer como esta entidad puede colocarse.
* @PointClass - Esta entidad existe a un punto en particular no arbitrario. Típicamente se llama un "" (o "point entity" en inglés). Estas entidades se colocan en Hammer por usar la herramienta de entidad ("Entity Tool", ).
* @NPCClass - Esto es una forma de entidad de punto de sastre para entidades de . Es útil junto con el tipo de propiedad npcclass, a continuación.
* @SolidClass - La área de esta entidad se define por el sólido en que se pone. Típicamente se llama un "" ("brush entity" en inglés).
* @KeyFrameClass - Usado por y . Esto causa la propiedad NextKey conectarse cuando la entidad se copia.
* @MoveClass - Usado por y entidades similares. Esto causa la propiedad target conectarse cuando la entidad se copia.
* @FilterClass - Usado por las clases de para definir cuales entidades pueden interactuar uno con el otro por alguna razón. Esto principalmente hace que la entidad muéstrese en propiedades con el tipo filterclass.
* base(Targetname, Origin) - Cosas entre de la declaración de tipo y el carácter "=" ayudan definir propiedades de una entidad y como va a actuar y mostrarse en Hammer. Hay múltiples cosas que pueden usarse aquí. Más que uno de estos pueden usarse si cada separarse por un espacio.
* base( 1Base, 2Base, … ) - Esto lo permite pegar BaseClasses definidas previamente a una entidad. Puede especificar múltiples BaseClasses, separadas por una coma.}
* bbox( min,max ) - Ajusta el tamaño de la caja de rodear de la entidad.
* obb( min,max ) - Idéntico a bbox pero orientado a los ángulos de la entidad.
* color( roj vrd azl ) - Este configuración cambia el color de la caja de wireframe en las vistas 2D de Hammer. Si no está presente, el color se ajuste a magenta. Los valores aquí son los valores de de un color y cada nombre tiene un rango de 0 a 255.
* iconsprite( "ruta/sprite.vmt" ) - Si esto se usa, el sprite especificado se muestra en la vista 3D de Hammer en lugar de una caja de color. Esto funciona junto con los comandos studio() o studioprop(). Si no nombre se ajusta, la propiedad model se usa. Las propiedades scale, rendermode, _light y angles afectan el sprite (si existen).
* sidelist( nombrepropiedad ) - Resalta superficies de sólidos en la propiedad dada (como una lista de identificaciones separada por espacios). Si no se especifica, la propiedad usada es sides (en español, superficies).
* sphere( nombredepropiedad ) - Si una entidad tiene un radio de efecto, p. ej. un ruido, una esfera se muestra en las vistas de Hammer. Si no especifica una propiedad, Hammer busca para una propiedad radius (en español, radio).
* studioprop( "ruta/modelo.mdl" ) - Si esto se usa, la entidad se muestra en la vista 3D como el modelo especificado. Si no especifica un modelo, Hammer busca para una propiedad model. Múltiples modelos pueden definirse. Si existen, las propiedades skin y rendercolor afectan esta propiedad, similar a .
* studio( "ruta/modelo.mdl" ) - Idéntico a studioprop() pero la caja de rodear alrededor de la entidad ignora este modelo. Esto es útil para entidades que no muestran el modelo en juego.
* lightprop( "ruta/modelo.mdl" ) - Idéntico a studioprop(), excepto que la inclinación del modelo es revertida.
* line( color, clave_comienzo, valor_comienzo, clave_fin, valor_fin ) - Dibuja una línea entre de dos entidades. Las propiedades valor aquí dan los nombres para buscar en las propiedades clave en otras entidades. clave generalmente se ajuste a targetname. El color ajusta el color de la línea mientras la entidad no está seleccionada. La segunda entidad se ajusta a esto si no es especificada.
* cylinder( color, clave_comienzo, valor_comienzo, radio_comienzo, clave_fin, valor_fin, radio_fin ) - Dibuja un cilindro entre de dos entidades. Esto es similar a line(), pero con la incorporación de dos propiedades radio que se buscan en las entidades. Estas definen el tamaño de los comienzo y fin del cilindro.
* lightcone( cdv_interior, cdv_exterior, color, escala_inclinación ) - Representa el cono usado en entidades . cdv_interior es la clave para la sección más interior y cdv_exterior es la más exterior. escala_inclinación permite invertir el ángulo de inclinación para representar el cono. Valores se traen de _inner_cone, _cone y _light para cdv_interior, cdv_exterior y escala_inclinación respectivamente si no se especifican. Esto lee muchos valores otros de las propiedades de light_spot.
* frustum( cdv,cerca,lejos,color,escala_inclinación ) - Crea un cono rectangular que extiende de la entidad. cdv define el ángulo de difusión (0-180). cerca y lejos definen cuales distancias se resaltan. color define cual color el cono es. escala_inclinación permite invertir el ángulo de inclinación mientras presentar el cono. Los cuatro primeros valores deben ser nombres de propiedades, mientras el último es un número. Valores se traen de _fov, _nearplane, _farplane y _light para cdv, cerca, lejos y color respectivamente si no se especifican, y escala_inclinación se ajuste a -1.
* halfgridsnap - Mientras mover esta entidad, snapa a la mitad del tamaño del cuadro. Esto es un poco especial porque no trae ni argumentos ni paréntesis.
* wirebox( min,max ) - Dibuja una caja para dos propiedades. Debe definir origin() para permitir mover los puntos.
* size( -x,-y,-z,+x,+y,+z ) - Define el tamaño del cubo por defecto usado cuando ni modelo ni sprite se especifica.
* origin( propiedad ) - Permite posicionar una propiedad de vector en la mapa.
* vecline( propiedad ) - Permite posicionar una propiedad de vector en la mapa. También dibuja una línea de la entidad a la posición.
* axis( propiedad ) - Permite posicionar dos puntos conectados por una línea en la mapa. El valor propiedad se ajuste a "x1 y1 z1, x2 y2 z2".
* worldtext() - Presenta los contenidos del keyvalue "message" en la vista 3D.
Los ayudantes siguientes no traen argumentos y son solo para tipos especificas de entidad:
* decal() - Presenta una calcomanía en superficies próximas. Esto usa la propiedad texture para ajustar la material para usar. (Para )
* overlay() - Presenta una cubierta en una superficie. (Para )
* overlay_transition() - Presenta una cubierta en las intersecciones entre de agua y la costa. (Para )
* light() - Presente en . Su uso es desconocido. 
* sprite() - Presta la material de sprite especificada en el keyvalue "model". (Para y sus variantes; para íconos de entidades, use iconsprite.)
* sweptplayerhull() - Dibuja prismas de tamaño 32×32×72 a dos puntos (point0 y point1), después une esquinas para mostrar el espacio necesitado para una prisma mover a la posición de la otra. También añada ayudantes origin() para esas propiedades. 
* instance() - Presenta la instancia en la mapa. También genera entidades adicionales dinámicamente en acuerdo con los parámetros de la instancia. (Para )
* quadbounds() - Automáticamente ajuste las cuatros esquinas de la cara texturada a guardar. (Para ) 
* entidad_de_ejemplo : "ejemplo" - El nombre de la entidad, seguido por una descripción. La descripción se muestra en Hammer cuando hace clic en el botón Help en el diálogo de propiedades de entidad. Para facilidad visual, la descripción puede atravesar múltiples líneas por unir bloques de texto por el signo más (+). Por ejemplo:
 @PointClass = entidad_de_ejemplo :
 "Esto es un descripción de ejemplo para"+
 "esta entidad de ejemplo. Aparece"+
 "en el diálogo de ayuda para esta entidad."
 [
 propiedades de la entidad van aquí
 ]
* propiedades de entidad - Todo entre del conjunto principal de corchetes se usa para definir las propiedades de la entidad, incluyendo sus entradas y salidas. Esquemas individuales de propiedades consisten en un nombre, una declaración de tipo, un nombre de mostrar, y una descripción. Las propiedades más comunes son:
* string - Esto indica una propiedad del tipo "string" (cadena de caracteres).
:nombre(string) : "Nombre de mostrar" : "Defecto" : "Nombre de mostrar en juego."
* integer - Esto indica una propiedad del tipo "integer" (entero).
:número(integer) : "Número de cosas" : 1 : "Número de cualquier tipo de cosas."
* float - Esto indica una propiedad del tipo "float" (coma flotante). Aunque trata números, su esquema es similar al tipo string. Debe haber comillas alrededor del valor por defecto.
:coma_flotante(float) : "Número de coma flotante" : "1.5" : "Número que necesita un punto decimal."
* boolean - Esto indica una propiedad del tipo "boolean", con un menú desplegable para si/no. Para versiones más viejas de Hammer, use choices en lugar de esto.
:condición(boolean) : "Verdad" : 1 : "Si es verdad o es falso."
:También hay dos tipos comunes de propiedades especiales, choices (elecciones) y flags, que siguen un formato un poco diferente. No funcionan como tipos de entrada/salida.
* choices - Una propiedad de este tipo le permite a Ud. establecer una cantidad de elecciones distintas. Su formato es similar a los otros tipos:
nombre(choices) : "Nombre de mostrar" : "1" =
[
 0 : "algo"
 1 : "otra cosa (defecto)"
 2 : "algo completamente diferente"
]
 También puede usar cadenas de caracteres o floats como valores en lugar de enteros, así:
modelo(choices) : "Modelo" : "models/algo02.mdl" =
[
 "models/algo01.mdl" : "algo"
 "models/algo02.mdl" : "otra cosa (defecto)"
 "models/algo03.mdl" : "algo completamente diferente"
]
* flags - El tipo de propiedades flags le permite a Ud. establecer que aparece en la porción "Flags" del diálogo de propiedades de entidad. Se establece similarmente al tipo choices. Los flags todos son potencias de 2 (2⁰=1, 2¹=2, 2²=4, etc.), y sus valores son o 0 (apagado/falso) o 1 (encendido/verdad). Si no defecto se especifica para un flag, se considera ser apagado.
spawnflags(flags) =
[
 1 : "algo agudo" : 1
 2 : "otra cosa" : 0
 4 : "⸘dijiste qué ahora‽" : 0
 8 : "nada" : 1
]
:También hay una cantidad de tipos de propiedad de propósito especial que modifican la IU de diálogo de propiedades de entidad para permitir navegar fácilmente para archivos o manipular más fácilmente propiedades complejas (como colores o ángulos).
* axis - Añade un ayudante de eje relativo de 2 puntos.
* angle - Añade un artilugio de ángulo para esta propiedad a la IU de diálogo de entidad.
* angle_negative_pitch - Idéntico a angle, excepto que la inclinación es invertida.
* - Añade un botón que abre la IU de elegir color, que traduce el color que Ud. selecciona a un valor RVA de tres números. Permite parámetros extras, p. ej. brillo.
* color1 - Idéntico a color255, excepto que usa una float [0,1] en lugar de un entero (0,255).
* filterclass - Marca la propiedad como ser el nombre del filtro para usar
* instance_file - Añade un botón que abre el navegador de archivos para permitir Ud. navegar para archivos de instancias.
* instance_parm - Usada en para definir variables de arreglar.
* instance_variable - Usada en para ajustar variables de arreglar.
* material - Añade un botón que abre el navegador de materiales.
* node_dest - Añade un cuentagotas para seleccionar un nódulo en la vista 3D.
* node_id - usan esto para el keyvalue "Node ID" para incrementarlo automáticamente con cada nódulo colocado consecutivamente. Parece que no funciona cuando otras entidades lo usan.
* npcclass - Añade un menú desplegable poblado por entidades del tipo NPCClass.
* origin - Añade un ayudante de origen.
* particlesystem - Añade un botón que abre el navegador de partículas para permitirle a Ud. navegar para sistemas de partículas.
* pointentityclass - Añade un menú desplegable poblado por entidades del tipo PointClass.
* scene - Añade un botón que abre el navegador de sonido para permitirle a Ud. navegar para archivos de escena.
* script - Añade un botón que abre el navegador de archivos para permitirle a Ud. navegar para s .
* scriptlist - Añade un botón que abre una lista de VScripts, con botones para añadir/quitar scripts y abrir cada archivo.
* sidelist (lista de superficies) - Añade un cuentagotas para seleccionar una superficie (múltiples con ).
* sound - Añade un botón que abre el navegador de sonido para permitirle a Ud. navegar para scripts de sonido o sonidos crudos.
* sprite - Idéntica a material, excepto que sustituye automáticamente su filtro de búsqueda con sprites/ cuando abre el navegador de materiales, y añade .vmt al fin del nombre de la material.
* decal - Idéntica a material, excepto que sustituye automáticamente su filtro de búsqueda con decals/ cuando abre el navegador de materiales. 
* studio - Añade un botón que abre el navegador de modelos.
* target_destination - Indica que la propiedad es el targetname de una otra entidad.
* target_name_or_class - Indica que la propiedad es el targename o classname de una otra entidad.
* target_source - Indica que la propiedad es un nombre que otras entidades pueden enfocar en.
* vecline - Añade un ayudante absoluto de eje de 1 punto, similar a origin.
* vector - Vector 3D
== Otras secciones de archivos ==
=== Listas de exclusión de materiales ===
Estas listas definen rutas que el navegador de materiales de Hammer no va a usar cuando muestra un selección de texturas. No afecta cuales archivos son actualmente disponible a una mapa.
 @MaterialExclusion
 [
 // Nombres de los subdirectorios de que no queremos cargar
 "debug"
 "engine"
 "hud"
 "vgui"
 ]
=== Personalizar auto-visgrupos ===
Esto permite personalizar la pestaña de visgrupos automáticos de la barra de herramientas Filter Control . El primer título es el nombre del "progenitor", y el siguiente es los "descendientes". Por fin están una lista de clases de entidad que van a colocan en el visgrupo. Si el progenitor ya existe, la entrada nueva va a unirse con las previas (incluyendo la lista de grupos por defecto). Esto permite crear "árboles" con múltiples niveles de agrupación. Si un visgrupo se vuelve totalmente vacío, no va a aparecer en la lista.
{{Note|Puede añadir entidades a grupos existentes. Si el progenitor de un auto-visgrupo es el nombre de un grupo existente, p. ej. "World Details", puede listar su propio entidades juntos a los miembros existente (p. ej. añadir a esa lista al lado de "Props" y {{ent:es|func_detail).
 @AutoVisGroup = "Progenitor"
 [
 "Descendiente 1"
 [
 "nombre de entidad 1"
 "nombre de entidad 2"
 ]
 "Descendiente 2"
 [
 "nombre de entidad 2"
 "nombre de entidad 4"
 ]
 ]
Ejemplo:
 @AutoVisGroup = "Sólidos"
 [
 "Disporadores"
 [
 "trigger_once"
 "trigger_multiple"
 ]
 "Sólidos de herramientas"
 [
 "func_areaportal"
 "func_viscluster"
 ] 
 ]
 
 @AutoVisGroup = "Sólidos de herramientas"
 [
 "Vis Clusters"
 [
 "func_viscluster"
 ]
 ]
== Enlaces externos ==
* SE FGD's FGDs actualizados unos juegos de Valve.
* Forge Game Data Language Resaltado de sintaxis de FGD disponible en formato textmate (compatible con SublimeText)