FGD

From Valve Developer Community
< Es
Jump to navigation Jump to search
English (en)Español (es)Português do Brasil (pt-br)中文 (zh)Translate (Translate)
Info content.png
This page has not been fully translated.

You can help by finishing the translation.

Also, please make sure the article tries to comply with the alternate languages guide.

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 Hammer(en). Definen todas entidades(en) 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".

Note.pngNota:Los FGD se cargan en orden alfabética. Si no usa @include "base.fgd" al inicio de su FGD y se carga antes de base.fgd, puede tener errores.
Pendiente: Source 2 añade características extras al formato de FGD. Documéntelos.

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 Half-Life 2 Half-Life 2 (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. Half-Life 2 Half-Life 2 y Counter-Strike: Source Counter-Strike: Source), 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 base.fgd y el FGD para Half-Life 2: Deathmatch Half-Life 2: Deathmatch incluye el archivo halflife2.fgd(en).

@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 "entidad de punto(en)" (o "point entity" en inglés). Estas entidades se colocan en Hammer por usar la herramienta de entidad ("Entity Tool", Shift+E).
  • @NPCClass - Esto es una forma de entidad de punto de sastre para entidades de NPC(en). 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 "entidad de sólido(en)" ("brush entity" en inglés).
  • @KeyFrameClass - Usado por move_rope y keyframe_rope. Esto causa la propiedad NextKey conectarse cuando la entidad se copia.
  • @MoveClass - Usado por path_track y entidades similares. Esto causa la propiedad target conectarse cuando la entidad se copia.
  • @FilterClass - Usado por las clases de filtro(en) 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 English de la entidad.
Confirmar:is "caja de rodear" the correct translation of "bounding box?"
  • 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 RVA(en) 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 prop_dynamic.
Note.pngNota:Si tiene una entidad con la propiedad angles que quiere poder girar en Hammer por el ratón (en lugar de solo por editar propiedades) puede necesitar añadir esta propiedad.
  • 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 light_spot. 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.
Pendiente: what is the correct translation of "to snap" in this context? and is "argumento" the correct translation of an argument to a computer function?
  • 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() (solo en CS:GO rama de motor) - Presenta los contenidos del keyvalue "message" en la vista 3D.

Los ayudantes siguientes no traen argumentos y son solo para tipos especificas de entidad:

Confirmar:is "ayudante" the correct translation for a "helper" in this sense?
  • decal() - Presenta una calcomanía en superficies próximas. Esto usa la propiedad texture para ajustar la material para usar. (Para infodecal)
Confirmar:is "calcomanía" the correct translation for "decal" here?
  • overlay() - Presenta una cubierta en una superficie. (Para info_overlay)
  • overlay_transition() - Presenta una cubierta en las intersecciones entre de agua y la costa. (Para info_overlay_transition)
Confirmar:is "cubierta" the correct translation for "overlay" here?
  • light() - Presente en light. Su uso es desconocido.
    Pendiente: Descubra cual esto hace.
  • sprite() - Presta la material de sprite especificada en el keyvalue "model". (Para env_sprite 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.
    Pendiente: ¿es para cuales entidades?
  • instance() - Presenta la instancia English en la mapa. También genera entidades adicionales dinámicamente en acuerdo con los parámetros de la instancia. (Para func_instance)
  • quadbounds() - Automáticamente ajuste las cuatros esquinas de la cara texturada a guardar. (Para func_breakable_surf)
    Pendiente: ¿también controla esto el keyvalue "error"?
Confirmar:is "a guardar" the correct translation of "on save" here?
  • 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 (en todos juegos desde Alien Swarm)(también en Garry's Mod) - 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
]
Note.pngNota:spawnflags siempre es el nombre de esta propiedad. Crear una propiedad de tipo flags con cualquier otro nombre resulta en ella apareciendo como un keyvalue de tipo entero normal.
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.
  • color255 - 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 func_instance_parms para definir variables de arreglar.
Confirmar:is "variables de arreglar" the correct translation of "fixup variables?"
  • instance_variable - Usada en func_instance 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 (en todos juegos desde Alien Swarm) - Nódulos(en) 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 (en todos juegos desde Alien Swarm) - Añade un botón que abre el navegador de partículas para permitirle a Ud. navegar para sistemas de partículas.Template:Bugfix:es
  • 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 (en todos juegos desde Left 4 Dead 2) - Añade un botón que abre el navegador de archivos para permitirle a Ud. navegar para VScript(en)s English.
  • scriptlist (en todos juegos desde Left 4 Dead 2) - 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 Ctrl).
  • sound - Añade un botón que abre el navegador de sonido para permitirle a Ud. navegar para scripts de sonido English 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.
    Note.pngNota:A veces, la material que Ud. quiere va a estar en overlays/ o una carpeta totalmente diferente.
  • 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.

Note.pngNota:Cualquier carpeta llamada models/ siempre se excluye, a pesar de que ajusta aquí.
@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 English. 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 func_brush 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'sEnglish FGDs actualizados unos juegos de Valve.
  • Forge Game Data Language English Resaltado de sintaxis de FGD disponible en formato textmate (compatible con SublimeText)