SCASM 1ª Parte
Principal ] Página Superior ] Sugerencias ] Links ] Contenido del Web ] Buscar en mi Web ]


Traducción del documento SCASM extraído de wings.ark.com
Copyright © por Manfred Moldenhauer. Traducción © 2000 Joan Josep González Figueras

SCASM 1.7 & 2.0

Contenido

Introducción
Créditos & Instalación
Como arrancar el ensamblador de escenarios
Parámetros [opcional]
Instalar tu Escenario
Convenciones Usadas
Sintaxis General


Introducción

SCASM es un programa simple para generar ficheros BGL para el FS5. Yo lo llamo un ensamblador porque genera un registro de datos por cada comando. Todavía tiene algunas limitaciones. Una de las limitaciones es que solo puede manejar un registro de rango de Latitud y este registro es el mismo para Ayudas de Navegación y escenario visual (sección 9). Para solucionar este problema he creado SCLINK, un linkador de BGLs. Perdón, pero no existe ningún tutorial todavía. Cada escenario que crees con este programa debe empezar con el comando Header seguido del comando LatRange. Entonces ya puedes poner cualquier comando en cualquier orden o secuencia con una excepción. Los comandos de escenario visual deben aparecer solo dentro de bloques de área, y en estos bloques no se pueden poner otros comandos.

volver al contenido

Créditos & Instalación

Ver ScReadMe.TXT (este fichero no he podido encontrarlo en wings.ark.com puede que venga con el SCASM).

volver al contenido

Como arrancar el ensamblador de escenarios:

scasm <fichero_entrada> <fichero_salida> [<parámetro>]

Ejemplo:

scasm ejemplo.txt ejemplo.bgl

En caso de errores el código de retorno es 1 si no 0 (para ficheros batch). Para el fichero de entrada se admite cualquier extensión, pero debe ser un fichero ASCII puro. Yo sugiero la extensión .SCA para código independiente y .SCM para ficheros de macros. También se debe poner la extensión .BGL para el fichero de salida.

Si el segundo nombre de fichero se omite, SCASM coge el nombre del primero y le pone la extensión .BGL.

volver al contenido

Parámetros [opcional]

-l (ele)

Hace que el SCASM genere un fichero de nombre SCAERROR.LOG, que contiene los mensajes de error, si hay alguno, pero no las líneas normales de estadísticas.

-i

No me gusta este parámetro! Hace que SCASM suprima todos los errores "integer number expected" (se esperaba número entero) para mantener la compatibilidad con versiones antiguas. Por lo que, recomiendo mucho no usarlo de forma general, ya que el resultado puede diferir de lo que esperabas y puede causar otros problemas. Por cierto, el formato de un numero normalmente es chequeado cuando el FS5 requiere un numero entero. SCASM no tiene problemas con numeros de coma flotante!

-f

Este parámetro deshabilita el chequeo de formato de números. (esto es si un numero decimal se espera que se introduzca como un numero hexadecimal en el formato 0x0A). Este parámetro solo se necesita para evitar problemas con ceros sobrantes Y letras en minúscula para números hexadecimales.

-m

Este parámetro activa la generación del fichero de mapa (.MPF). Esto es para un próximo analizador de ficheros .BGL. No se usa para nada por el momento.

Usuarios de AIRPORT: Si se quiere usar SCASM 1.7 con Airport 1.23 (o anterior) se pueden poner estos parámetros en una variable de entorno. Solo añadir la línea:

SET SCASM=-i -f

en el AUTOEXEC.BAT o poner esto mismo en el prompt de MS-DOS.

Usa estas opciones solo si tienes problemas de compatibilidad.

volver al contenido

Instalar tu Escenario

Ver el fichero SC_HINTS.TXT

volver al contenido

Convenciones Usadas

Lat

Latitud Geográfica. Valores positivos al Norte del Ecuador, valores negativos al Sur del Ecuador.

Lon

Longitud. Valores positivos al Este de Grenwich, valores negativos al Oeste de Grenwich.
Los valores de Lat/Lon se asume que son en grados (0..180) : minutos (0..60) : segundos (0..60).decimales_de_ segundos
Se aceptan las letras N/S, E/W, +/-
Las posiciones que no se usen se pueden omitir.

Ejemplos:    53:30:30.0 // N53:30.5 // +53.50833 son los mismos valores y son correctos.

la distancia x es en dirección este - oeste (entero)
la distancia y es en dirección norte - sur (entero)
la distancia z es la altitud, elevación (entero)

:Label

Nombre para el destino de un salto (hasta 15 caracteres). No se puede salir de un bloque Area() con un salto, por lo que las :Labels solo son validas dentro de un bloque. Se debe poner el carácter ':' pero el nombre se puede omitir. En este caso el salto se dirige al final del bloque (->EndA). Una :Label como definicion del destino de un salto deberia introducirse en una sola linea y deberia empezar en la primera columna.

Los nombres de las Label distinguen mayusculas y minusculas.
El numero de Labels permitidas por bloque estan limitadas a 400.
El numero de referencias a Labels esta limitado a 600.

$varname (versión 1.7 o posterior)

Variables definidas por el usuario (no variables del FS5) para almacenar algun resultado de un parámetro de cálculo para uso posterior o para pasar valores frecuentes a las macros. El nombre de la variable debe empezar con el carácter "$", pero no usar otros caracteres especiales en el nombre para evitar confusiones en su evaluación.

vx

Componente x de un vector

vy

Componente y de un vector

vz

Componente z de un vector

Un vector consta de estos 3 componentes. La suma geométrica (3D) de estos componentes se normaliza a 32767 (máximo valor positivo en un entero). Los vectores se usan para definir una dirección en el mundo 3D, por ejemplo para indicar desde que lado la superficie de un objeto se puede ver.

len

Esta es la longitud o distancia en unidades RefPoint. Si el factor de escala del punto de referencia es uno, las unidades RefPoint se dan en metros. Cuando se usa con vectores este factor se puede ver como la longitud del vector. Se puede tomar 'len' como un valor de coma flotante.

vattr

Atributos de Vectores para calculo automático de vectores. En el FS5 los vectores se usan para indicar direcciones en el mundo 3D. En muchos casos el programa puede calcular estos vectores. El parámetro 'vattr' se usa para controlar este calculo.

Se asume que el RefPoint esta en el centro del objeto que se quiere construir, entonces el programa se puede hacer una idea de la direccion del vector. Si quieres dibujar una casa y el RefPoint está fuera o en una esquina no se puede usar el calculo automático.

m

manual, se tiene que calcular los componentes del vector uno mismo (por defecto).

a

automatico. Todos los componentes (vx, vz, vy y len, si se necesitan) se calculan por el programa.

z

El vector solo tiene componente z. (los puntos directos hacia arriba en el aire). No se calcula el vector pero se calcula la len.

xy

Solo se calcula el componente z-y. z siempre es 0.

xz

Solo el componente x-z.

yz

Solo el componente y-z

Estos tres componentes vattr son utiles para VectorPoints()  en objetos de formas regulares (por ejemplo redondas) conjuntamente con ShadedPoly().

au

automático, pero el vector siempre apunta hacia arriba. Esto significa que si el componente-z es negativo, el vector esta invertido.

ad

automático, pero el vector siempre apunta hacia abajo. Si el componente-z es positivo, el vector se invierte.

ai

útil para dibujar los muros interiores de casas y hangares. El vector siempre esta invertido.

p

se usan coordenadas polares para el siguiente vector. (ángulo de elevación, dirección, [longitud]). El programa convierte esto en el formato vector BGL.

t

habilita el calculo automático del Point Texture para cualquier ..TexPoly. El SCASM intenta usar el mapa de textura entero, pero el ratio de aspecto se mantiene. Solo válido con ..TexPoly.

b

Igual que el anterior, pero el ratio de aspecto de la textura no se mantiene. Esto puede dar un escalado distinto para el bitmap en las direcciones x e y. Solo válido con ..TexPoly.

r

Este flag invierte el bitmap en la dirección y (arriba/abajo). Solo válido con  ..TexPoly.

( )

Si un comando requiere parámetros estos DEBEN introducirse entre paréntesis. DEBE haber como mínimo un espacio entre el paréntesis y el primer/último parámetro.

{ }

La versión actual de SCASM no puede tratar corchetes anidados. Ya que algunos usuarios quieren incluirlos en los nombres de radio ayudas o en mensajes ATIS, convierte los corchetes en paréntesis.

[ ]

En la descripción de comandos:
Si encuentras un nombre de parámetro entre estos corchetes en una descripción de un comando el parámetro es opcional y se puede omitir.

[ ]

En el código SCASM, estos corchetes ejecutan el evaluador de expresiones. Esto permite hacer cálculos simples con los parámetros. Nota: esto no funciona con ningún parámetro de frecuencia.

;

Indica que el texto siguiente es un comentario. Cuidado cuando se use entre paréntesis ya que el resto entero de la línea se ignora. Utiliza la siguiente línea para el resto de parámetros y para cerrar el paréntesis para evitar confundir al compilador de escenarios.

_

Underscores (guion bajo) se convierten a espacio ' ' solo en strings de nombres de radio ayudas y en mensajes ATIS.

#

Este parámetro simboliza un contador numérico en algun parámetro. Por ejemplo OBI# puede reemplazarse por OBI1 o OBI2.

hex

Algunos parámetros se requiere que sean en hexadecimal. Ya que el SCASM se espera recibir este formato no se necesitan caracteres adicionales para indicarlo. Por lo que simplemente pon C1, no C1h. Para evitar el riesgo de confusión en operadores, deberías usar mayúsculas para números hexadecimales. Si no sabes usar hexadecimales puedes calcularlos mediante la calculadora que viene con el Windows. Solo tienes que cambiarla de estándar a científica en su menú de opciones.

@

Carácter especial para generar etiquetas ambiguas en macros. (ver macro())

Letras en Mayúsculas

Las letras en mayúsculas se usan en este documento solo para una mejor visión. El ensamblador de escenarios NO distingue entre mayúsculas y minúsculas excepto en las nombres de etiquetas.

volver al contenido

Sintaxis General

Header ( type [*] TopLat BottomLat RightLon LeftLon )

Este comando DEBE ser el primero en el fichero (principal) de tu escenario. Este genera la cabecera del fichero BGL que define el perímetro del área cubierta por el fichero de escenario.

Los valores de Lat/Lon deben estar en el formato DD:MM:SS.SSSS

type de 1 a 4, este número tiene algo que ver con los ficheros .VIS. Los siguientes valores se asocian con:

1 Escenario Visual (sección 9), bloques sinteticos (secc. 1..6)
2 Mundo Crop Duster, no usar este valor.
3 Radio ayudas como, VOR, ILS, NDB, Radiobalizas.
4 Menú de aeropuertos, ATIS.

Parece que estos números informan al FS5 la importancia de la información contenida en estos y cada cuanto buscar en estos ficheros para actualizar los escenarios. Por lo tanto se deberían poner todos los objetos visibles en el tipo 1 y la información u objetos menos importantes como datos de land-me en ficheros de tipo 4. Pero si se diseñan escenarios pequeños se puede poner todo en un solo fichero.

* Si se pone el carácter asterisco no se testea el correcto orden de RightLon y LeftLon. Esta opción solo la necesitarás si tu escenario cruza la linea de fecha (meridiano 180). Normalmente no se usa!

LatRange ( BottomLat TopLat)

Este comando debe seguir al comando Header. En esta versión solo se puede poner un solo comando LatRange. En esta versión el registro LatRange se usa para todas las secciones del BGL.

Menu ( Cadena Titulo del Escenario )

Si quieres definir algunas posiciones de comienzo que puedan ser elegidas del menú de aeropuertos utiliza este comando. La longitud está limitada a 20 caracteres ahora. Utiliza corchetes '{' en vez de paréntesis '(' si son parte del título. En esta versión solo se puede poner un solo comando menu().

MenuEntry ( Lat Lon alt hdg COMfrq NAV1frq OBI1 Nav2frq OBI2 Text Info String, max 40 caracteres)

Datos para una situación de partida. DEBE existir un comando menu(..) en el fichero ANTES del comando MenuEntry (..), si no obtendrás una secuencia de error del SCASM. La cadena de información está limitada a 40 caracteres.

Lat Latitud
Lon Longitud
alt Altitud en metros. Si se pone a 0 el FS5 automaticamente se ajustará al nivel del suelo. Se aceptan números con coma flotante.
hdg Rumbo (magnético) en drados -> 23.33
COMfrq Frecuencia de la radio COM -> 123.40 (el primer dígito se ignora)
NAV#frq Frecuencia de la radio NAV#. -> 116.30
OBI# Valores en grados del OBI# -> 271

NDB ( Freq Rng ID Name Lat Lon Elev )

Este comando define un NDB

Freq Frecuencia en kc, rango de 200.0 a 526.5
Rng Rango en Nm (número entero)
ID Código id en 5 caracteres del NDB
Name Nombre de máximo 24 caracteres, si se quieren incluir espacios usa el '_' en donde quieras ponerlos.
Lat Latitud de la posición del NDB
Lon Longitud de la posición del NDB
Elev Elevación (MSL) en metros (número entero)

VOR ( Frq Rng Flags Magvar ID Name Lat Lon Elev Hdg )

Define un VOR.
Para detalles de los parámetros ver el comando ILS(..)

ILS ( Frq Rng Flags Magvar ID Name Lat Lon Elev Hdg ; localizer Lat Lon Elev Slope ; GP )

Define un ILS.

Frq Frecuencia en mc -> 113.45
rango de frecuencias VOR 108.0 ... 117.975
rango de frecuencias ILS 108.0 ... 111.975
Rng Rango en Nm (número entero)

Nota: Se pueden poner valores superiores a 255. Parece que el FS5 puede tratarlos, pero el display del DME siempre mostrará 99 si se sobrepasa este valor.

Flags Se acepta cualquier valor de dos dígitos hexadecimal.
80 Habilita el Localizador.
40 Habilita la senda de planeo.
10 El DME está en la posición del transmisor de la senda de planeo.
01 DME habilitado.
02 Desconocido, encontrado a menudo.
08 DME deshabilitado (-> 09 es un DME sin VOR)

Magvar Variación magnética (p.ej. -3.7). Solo para VOR. Normalmente 0 para ILS. Si se pone 0 el VOR/ILS está alineado con el norte verdadero. Para obtener una lectura del receptor NAV que corresponda con la brújula se debería introducir la variación magnética. Esto da al VOR el mismo error que la brújula.

ID Código, hasta 5 caracteres.
Name Nombre, hasta 24 caracteres. Utiliza '_' en vez de espacios en blanco.
Lat Latitud
Lon Longitud
Elev Elevación en metros (MSL, número entero)
Hdg Rumbo (verdadero) en grados (Solo para ILS, siempre 0 para un VOR) -> 144.1
Slope Angulo de descenso del transmisor de senda -> 3.0

Nota: Existe un problema conocido con la senda en el emisferio sur en el FS5.0 y FS5.0a.

IM (Lat Long Elev )
MM ( Lat Long Elev )
OM (Lat Long Elev )

Balizas de marca.

IM Baliza interior
MM Baliza media
OM Baliza Exterior
Lat Latitud
Long Longitud
Elev Elevación en metros (MSL, número entero)

ATIS ( Rng Lat Lon Frq RW1 RW2 RW3 RW4 Text )

Rng Rango en Km (número entero)
Lat/Lon Posición del ATIS
Frq Frecuencia en Kc 123.45 Rango de frecuencias COM 118.0 ... 137.0 Mc.
RW1 Pista en uso para vientos de dirección 0...89º
RW2 Pista en uso para vientos de dirección 90...179º
RW3 Pista en uso para vientos de dirección 180...269º
RW4 Pista en uso para vientos de dirección 270...359º
Text Cualquier mensaje ATIS que quieras. Los siguientes caracteres especiales el FS5 los sustituye por los siguientes textos:

%A " weather -"
%B " observation "
%C " ##:## zulu "
%D ---
%E " Temperature ## F -"
%F " Information "
%G " Landing and departing runway # -"
%H " Advise controller "
%I   " Altimeter ##.## -"
%J " Visibility ## -"
%K " winds $$$$ - "
%L " Measured ceiling ###### $$$$,"
%M " on initial contact "

Nota: Si tienes que poner mensajes muy largos los puedes partir en varias líneas. Todos los <CR/LF> dentro de los paréntesis de esta instrucción se convertirán en un espacio. El tamaño del buffer de entrada es de aproximadamente 4000 caracteres pero parece que la versión actual del FS5.0 solo puede tratar 255 caracteres. Si necesitas usar paréntesis en el texto pon en su lugar llaves '{'. Así mismo los '_' y los caracteres de línea nueva se convierten en espacios.

LandMe ( Lat1 Long1 Elev1 ID1 Lat2 Long2 Elev2 ID2 Airport name Rwy )

Este es el registro para la opción de menu Land Me en el FS5. Esta opción solo está disponible con la Cessna que viene por defecto.

Lat#/Lon# Define la posición de los puntos de aterrizaje para cada final de pista.
Elev Elevación de los puntos de aterrizaje en metros (MSL). -> 17.3
ID# ID de la pista de este punto de aterrizaje.

TimeZone ( TopLat BottomLat RightLon LeftLon minutes ds1 ds2 )

Define una zona rectangular de Hora. Asegúrate de que no se cruza la línea de cambio de fecha (meridiano 180) por el área definida.

minutes Diferencia de tiempo en minutos de UTC (GMT).
ds1 Relacionado con el cambio de hora del verano (comienzo?)
ds2 Relacionado con el cambio de hora del verano (final?)

ds1, ds2 no está completamente testeado, pon a 0 si no hay dst, valores encontrados en ficheros originales: 0,0 1,1 2,0 2,1 2,2 1,4 1,3 1,0.

include ( filename.ext )

Incluye un fichero de texto. Simplemente el fichero se copia en el codigo principal. El fichero incluido no puede contener otro fichero incluido. Se acepta cualquier nombre correcto de fichero. La llamada a un fichero de macro está permitida. Esto hace posible hacer un fichero principal parecido a

Header( ... )
LatRange( ...)
Include( ... )
...
Include( ... )

con todos los comandos en los ficheros include().

macro ( filename.scm p1 ... pn )

Esto es una macro llamada a escenario visual. Llama la macro con hasta 30 parámetros (dímelo si necesitas más). p1 a pn es cualquier texto de hasta 14 caracteres. No se permiten espacios, paréntesis o '%'. Una macro no puede llamar a otra macro o un fichero include.

El fichero de la macro puede contener cualquier comando de escenario VISUAL. Cada vez que se encuentra el texto '%#', este se reemplaza por el parámetro número # de la llamada de la macro. El contador de parámetros empieza por 1.

ejemplo:
llamada macro: macro ( ejemplo.scm param1 param2 )

fichero macro: Area ( 5 %1 %2 20 )
%1 es sustituido por param1
%2 es sustituido por param2

Translación condicional de macros (pseudo comando, MacroIf):

mif ( %# ) El parámetro de la macro # se testea. Si su valor NO es 0 (=Verdadero) los comandos que le siguen son interpretados. No se soportan mif() anidados. Solo se testea el 0, pero se pueden instroducir expresiones lógicas (por ejemplo con operadores relacionales) si están dentro de corchetes.

mif ( [%3 >= 2] )

melse es opcional. Si la condición mif() es FALSA se interpreta esta sección.

mifend indica el final de la translación condicional.

Nota: En muchos casos las macros tendrán un bloque entero Area(). Pero si estás utilizando macros para generar código dentro del area de la misma macro mas de una vez y la macro tiene definiciones de etiquetas puedes tener un error de etiqueta duplicada (duplicated label error). Para evitar esto se puede poner el carácter especial @ en el nombre de la etiqueta. Este caracter hace que el SCASM incluya el contador interno de macros en en nombre de la etiqueta durante la translación de la macro. Debido a que el contador es un codigo de 3 digitos, el nombre está limitado a 12 caracteres.

ejemplo:
Label@ se expande en :Label1095 durante la translación de la macro número 95.

CopyRight ( cualquier texto hasta 80 caracteres )

Este texto se inserta en el fichero de salida. No se necesitan subrayados bajos.

Gen Excl ( name.BGL mask TopLat1 BottomLat1 RightLon1 LeftLon1 TopLat2 Bottomlat2 RightLon2 LeftLon2

name nombre del fichero *.BGL generado (p.ej. LEBLEXC.BGL)
LL1 Lat/Lon Bordes de la cabecera del fichero BGL; igual que en Header()
LL2 Lat/Lon Bordes del escenario (normalmente igual a LL1)
mask un valor hexadecimal de 16 bits para indicar datos del CD a suprimir. Cualquier combinación de los de aqui abajo se permite.

01 Sin escenario visual, pistas.
02 Sin VOR, ILS
04 Sin NDB
08 Sin ATIS

otros bits no encontrados todavia. Para excluir escenarios añadidos simplemente pon F en la mascara. Parece que no todas las combinaciones son posibles.

Genera un pequeño fichero bgl para suprimir areas por defecto especificas del CD del FS5.1. Parece que estos ficheros tienen efectos sobre todos los demas ficheros que no están en el mismo directorio que este fichero. Se puede definir mas de un fichero exclude para el mismo escenario pero ve con cuidado cuando definas el area que cubren. Mueve estos ficheros al mismo directorio que el resto de tus bgl de tu escenario.

Nota: no se pueden inhabilitar escenarios synteticos (incluyendo montañas) con estos ficheros. ver SC_HINTS.TXT para más información.

Uvar ( $name value ) versiones 1.7 expandidas

Este es un comando interno del SCASM para definir variables de usuario. Este comando no tiene ningún efecto sobre el código BGL. Las variables de usuario pueden ser usadas por expertos para una mayor flexibilidad en calculos de parámetros.

Nota: variables que se definan dentro de un bloque Area() solo son validas dentro de este Area() pero otras variables siempre son válidas.

Map ( stat )

 Este es otro comando interno que puede ser usado para suprimir el mapa de generación para algunas partes del fichero de codigo fuente.

stat 1 = on, 0 = off

Recibirás mas información con el programa que necesita la opción map.


El contenido de esta página es Copyright © 1998, 1999 wings.ark.com, y no puede reproducirse de cualquier forma sin el consentimiento escrito de los propietarios de wings.ark.com.