Escenario Sintético
Los comandos siguientes son para el escenario syntético
(secciones 1 a 6). En esta versión uso exactamente la misma sintaxis que Enno
Borgsteede en su BGLGEN. Esto puede cambiar en versiones futuras ya que estos
son los unicos comandos que tienen parametros pero no paréntesis. Puedes poner
estos comandos en cualquier sitio de tu texto fuente excepto dentro de un bloque
Area.
No trabajo mucho con bloques sintéticos. Solo los uso para
dar a mi escenario la altitud correcta con bloques como este ->
block 177 0 0 1111 5.3
Este es un bloque azul (mar) a 5.3 metros de altitud en donde
puedo poner mi escenario encima.
La mejor descripción de estos bloques que he visto viene con
el BGLGEN de Enno Borgsteede. Allí podrás encontrar también un programa (POS.COM)
para calcular el numero de fila y columna de los bloques. Encontrarás un
programa similar (POSPLUS) en el pack de AIRPORT, un fuente de SCASM.
Synth sect row
sect Número de sección (1...6) para los
bloques de escenario sintético. Esta sección se usa para todos los comandos
block que siguen hasta el próximo comando Synth que aparezca.
row número de fila para el bloque
sintético. Esta fila se usa para todos los comandos block hasta el próximo
comando Synth que aparezca.
Block column sel1 sel2 object alt
column. Columna (posición) de este bloque
(decimal).
sel1. Selector 1, numero hexadecimal de 8
bits.
sel2. Selector 2, numero hexadecimal de 8
bits.
object. Patrón para seleccionar un tipo de
objeto, (hexadecimal 16 bits).
alt. altitud por encima de MSL en metros.
Escenario Sección 9
Los siguientes comandos son para la sección del escenario
visual (sección 9). Antes de que puedas usar cualquiera de los siguientes
comandos, debes definir un bloque Area. No se permiten otros comandos dentro de
este bloque.
Area ( type Lat Lon Rng )
Esto indica el comienzo de un bloque de comandos de
escenario visual.
type 5,8,B
Esto simplemente es el primer byte del código hexadecimal.
Los rangos de visibilidad son distintos para cada tipo. No conozco los
límites absolutos. Tengo distintos valores de distintas fuentes de ellos.
5 0 ... 22 km (0 ... 40 km)
8 40 ... 130 km ( invisible 0 ... 40 km )
B 0 ... 255 km (invisible 0 ... 130 km )
He observado que este rango puede verse influenciado por el factor de escala y
los parámetros V# del comando RefPoint().
Lat/Lon Situación de este área.
Rng rango en kilómetros (número entero) Parece que este valor
controla cuanto tiempo se debe mantener este área en el buffer. Esto no
significa automáticamente que los objetos en este Area() se visualicen, ya
que la visibilidad también se controla mediante los parámetros V# en los
puntos de referencia (dentro de este Rng límite). Ya que se dice que el FS5.1
solo puede guardar sobre 256 kbytes de escenario en el buffer, no deberías
usar valores irreales para evitar desperdiciar memoria.
EndA
End_of_Area
Esto define el final de un bloque área. No se genera
código. También puedes ver este comando como un destino especial de salto (jump).
Todos los Jump()s (Saltos) no resueltos y todas las etiquetas 'vacías' ( solo
':' ) son dirigidos aquí.
RefPoint ( type :Label scale Lat Lon [...] )
type Tipo del RefPoint. Hay distintos tipos de
RefPoints como estos:
2 o abs Punto de referencia absoluto,
MSL (nivel del mar). Este tipo se usa si se necesita una elevación absoluta.
La elevación se establece mediante el parámetro "E=". El objeto de
escenario se pone a este nivel, sin tener en cuenta la elevación que dice la
tile del escenario sintético.
7 o rel Punto de referencia relativo,
siempre 0 AGL. La altitud se ajusta al mismo nivel que el bloque sintético en
donde estás. El parámetro "E=" es ignorado por el FS5.
3 o ns Punto de referencia sin
parámetro de escalado. Este tipo se usa a menudo para objetos muy detallados
y complejos. Para poner el factor de escala usa el comando SetScaleX()
:Label nombre simbólico de un destino de salto
(Jump)
scale Factor de escala, si scale = 1 todas las distancias están
en metros. Se admiten valores con coma flotante. Este parámetro no se permite
cuando type vale "ns".
Lat/Lon Posición.
E= ### elevación del punto en metros (MSL), no para tipo 7/rel.
Este comando define un punto de referencia para siguientes
acciones. Todas las distancias introducidas a partir de esta instrucción son
relativas a este punto. Si el FS5 decide que el observador está demasiado
lejos, se produce un salto a :Label y los comandos siguientes no se ejecutan.
Para el selector de tipo de RefPoint simplemente elijo el primer digito
del código hexadecimal generado.
Expertos: Hay dos campos en el registro RefPoint() para
afectar a la visibilidad. Ya que no conozco exactamente lo que significan
simplemente los llamo v1 y v2. Parece que v1= da el rango total de visibilidad
si este valor no es cero.
Valores por defecto son v1= 0 y v2 = 0. Puedes cambiarlos
simplemente poniendo "v1= 123". Fíjate en el espacio entre el igual y
el numero.
SetScale ( :Label V1 V2 scale )
Este comando establece/cambia el factor de escala para
puntos de referencia normales (abs, rel). Si se usan los parametros de test de
rango visuales, se produce un test de rango.
:Label Salta a esta label si el test de rango
es negativo.
V1, V2 parámetros de test de rango visual (usados si no son 0).
Igual que en puntos de referencia.
scale factor de escala (decimal, valor de coma flotante).
SetScaleX ( :Label V1 V2 SX )
Establece un tipo de factor de escala binario para puntos de
referencia tipo 3/ns y 8.
:Label Salta a esta etiqueta si el test de
rango es negativo.
V1, V2 Parámetros del test de rango visual (usados si no valen
0). Igual que en los puntos de referencia.
SX Esto actualmente es el exponente del factor de escala (entero).
El factor de escala verdadero se calcula de la siguiente
forma:
Escala = (2^SX) / 65536
Por Ejemplo: Escala = (2^16) / 65536 = 1
Deduciendo que el factor de escala solo puede tener un valor
que se pueda expresar como una potencia de 2 (dividida por 65536)
Seguramente este tipo de escalas aceleran la velocidad de
cálculo interna ya que la escala se puede obtener mediante shiftado. No
confundir con 2*10^sx.
Points ( firstnum x1 z1 y1 ... xn zn yn )
Este comando construye una tabla de puntos 3D. Normalmente
firstnum deberia ser 0. Valores distintos se usan para cambiar o ampliar una
lista existente. El número de puntos por bloque Area está limitado a 400
(200 en versiones anteriores, 800 en una versión 32-bits).
DefPoint ( index x z y )
Define un punto en la lista de puntos.
index es el número de indice de este punto.
VecPoints ( m firstnum x1 z1 y1 vx1 vz1 vy1 ... xn zn
yn vxn vzn vyn )
VecPoints ( p firstnum x1 z1 y1 el1 hd1 ... xn zn yn eln hdn )
VecPoints ( vattr firstnum x1 z1 y1 ... xn zn yn )
Este comando construye una tabla de puntos de vectores. Los
vectores se usan para sombrear colores con -> ShadedPoly(). Si tienes
objetos no regulares quizás es mejor calcular los vectores manualmente. En
mofo automático el numero de puntos está limitado a 400 en esta versión. La
función automática da la dirección del vector desde el RefPoint A este
punto, pero recuerda que esto es cierto solo para objetos de formas regulares.
Es posible suprimir UN componente del vector mediante el uso de xy xz yz vattr.
Otros valores pueden confundir al ensamblador. Por ejemplo puedes usar
banderas-xy para un tanque de gas cilíndrico.
x# z# y# coordenadas del punto (entero)
vx# vz# vy# componentes de un vector
firstnum numero del primer punto (normalmente 0)
vattr atributos de calculo del vector, como sigue:
(a, xy, xz, yz, p)
el# ángulo de elevación en grados (-90° ...
+90°)
hd# dirección del angulo.
AutoPoints ( firstnum numcount dx1 dz1 dy1 dx2 dz2 dy2 )
Este comando no pinta nada. Solo calcula y llena una tabla
de puntos. Se generan numcount puntos, donde firstnum es el primer punto.
Puedes pensar que esto es un comando que calcule coordenadas de una linea de
puntos de P1 a P2 y luego rellena la lista de puntos.
Nota: En escenarios originales del FS este comando no se
encontró con un numcount superior a 7.
MoveToPt ( # )
Mueve el cursor de dibujo a la coordenada 3d dada por el
punto # (numero) de una lista de puntos 3D que previamente se ha definido
mediante el comando Point().
Para lineas y superficies.
--> Points(), --> VecPoints(), --> StartSurface,
--> EndSurface, --> DrawToPt(), --> ConcavePoly.
DrawToPt ( # [#...#] )
Se ejecuta el comando de dibujado del punto anterior a este
punto #. Los puntos tienen que haberse definido en una lista de puntos 3D.
Este comando se repite para cada # en los corchetes.
StatSurface
Si se introduce este comando, puedes usar los comandos que
siguen para definir una superficie (recubierta de color o un bitmap).
--> EndSurface, --> SurfaceColor(), -->
ConcavePoly, --> Bitmap()
EndSurface
Este comando indica el final de una superficie dibujada
mediante los comandos MoveToPt() y DrawToPt().
MoveTo ( x z y )
Este comando mueve el cursor de dibujado al punto 3D
definido en las coordenadas. Solo para líneas. No mezclar el tipo de
instrucciones MoveTo() / DrawTo() con las instrucciones MoveToPt() / DrawToPt()
y tampoco usarlas para objetos 'sombreados'.
--> LineColor(), --> Brightness(), --> DrawTo()
DrawTo ( x z y )
Se ejecuta un comando de dibujado desde el punto previo a
este punto. Solo para líneas.
--> LineColor(), --> Brightness(), --> MoveTo()
LineColor ( num attr )
Establece el color de las lineas y las lineas de puntos y
puntos simples.
ShadedColor ( num attr )
Establece el color para polígonos sombreados. Parece que
este comando sambien establece el color de la superfície.
SurfaceColor ( num attr )
num código de color
attr atributos del color
F0 --> colores normales
68 --> colores transparentes
69 --> color directo de paleta
Establece el color de polígonos normales y superficies
definidos mediante:
--> StartSurface - Move..() - Draw..() - Endsurface
o
--> Poly()
LoadSurfaceColor ( var )
El código de color de la superficie se lee de una
variable.
LoadShadedColor ( var )
El código de color de sombra se lee de una variable.
LoadLineColor ( var )
El código de color de la linea se lee de una variable.
Bitmap ( name.ext x dx dz dy )
Carga un fichero bitmap (textura) del directorio TEXTURE
activo. En FS5.0 y FS5.0a normalmente es:
"C:\FLTSIM5\TEXTURE"
en FS5.1 podría ser:
"C:\FLTSIM5\TEXTURE"
directorio de texturas general/global
o
"C:\FLTSIM5\MI_ESCENARIO\TEXTURE"
el directorio texture del escenario activo local
Los ficheros bitmap a menudo tienen la extensión '.R8'
pero también hay bitmaps con otras extensiones. Pienso que las extensiones
'.R8' se deberían reservar para texturas "globales" que son
almacenadas en el directorio de texturas general. Por otro lado recomiendo el
uso de tu propia extensión si la textura se supone que no es compartida con
otros escenarios. Así mismo, algunos autores y usuarios prefieren usar la
extensión '.R8' para reconocer fácilmente los ficheros de texturas. También
es importante mencionar estas extensiones en la documentación de los
escenarios.
name.ext El nombre del fichero bitmap. No
puedes especificar ninguna unidad o directorio en esta instrucción. (límite
en el formato BGL)
dx desplazamiento x en unidades RefPoint
dy desplazamiento y
dz desplazamiento z, normalmente 0
x desconocido (decimal) Valores encontrados a
menudo: 0,1,8
Nota: Los bitmaps para el FS5 son un array simple de 256 x
256 pixeles (/texel) usando 1 byte por pixel. Observa la siguiente dirección
de pixel x,y:
superior izquierda 0 0
superior derecha 255 0
inferior izquierda 0 255
inferior derecha 255 255
Por algunas razones los bitmaps dibujados con:
Bitmap() - StartSurface - MovetoPt() - ... - Endsurface
se dibujan de arriba a abajo !
La paleta de colores estándar está guardada en FS5.PAL
(en el directorio FLTSIM5\TEXTURE). No puedes ver/editar estos bitmaps con
programas normales de dibujo pero hay algunos editores de "R8"
disponibles en BBS's de simulación aérea.
RepeatBitmap ( dx dz dy )
Repetir / Reactivar un bitmap ya cargado. Los parámetros
son los mismos que en Bitmap(). Probablemente este parámetro puede reducir el
acceso al HD (?).
BitmapMode ( fist_color )
Preliminar, el nombre puede cambiar en futuras versiones.
(modo de copia de bitmap)
Parece que este comando controla el tratamiento de los
píxeles en un bitmap. Este comando establece el indice del numero del primer
color que se copia en el escenario.
Usar esta instrucción solo con TexPoly().
first_color Valor decimal 0 .. 255. Este es
el numero del primer color a ser copiado. No olvidar cambiar otra vez a 0
(normal) Todos los colores de 0 a este valor parecen volverse transparentes.
Inst_81 ( state ) ; comando antiguo, ya no está soportado.
Smoothing ( state )
Esta instrucción se encuentra muy a menudo a continuación
de la instrucción Bitmap(). Parece que esta instrucción controla el "smoothing"
de las texturas del terreno. Tiene efecto cuando la opción image smoothing
está habilitada en las opciones de pantalla.
--> TexWindow(), --> ShadedTexPoly()
state 0 off 1 on
MoveTexture( x1 y1 x2 y2 )
El nombre puede cambiar en versiónes futuras.
Palette ( name.ext )
El fichero 'name.ext' de paleta de colores se carga en
memoria. No se pueden especificar directorios ni unidades de disco. No se
necesita esta instrucción si se usa la paleta por defecto del FS5 para tus
ficheros de texturas/bitmaps. Nota, si usas el FS5.1 necesitarás el
correspondiente fichero *.HAZ si no, no podrás usar la opción "haze"
con tu escenario.
Brightness ( 1 - 100 )
Este comando establece el brillo de un color. El rango es
del 1 al 100 por ciento.
-> LineColor(), -> Surfacecolor() & Startsurface
... Endsurface
DotLine ( x1 z1 y1 x2 z2 y2 num )
Se dibuja una línea de puntos del punto (x1 z1 y1) al
punto (x2 z2 y2). El numero de puntos es num. El color del punto
se selecciona mediante LineColor()
Dot ( x z y )
Se dibuja un unico punto en la posición (x z y). El color
del punto se selecciona mediante LineColor()
DotPt ( # )
Se dibuja un punto en el punto con el número # de una
lista predefinida de puntos. El comando se repite tantas veces como números
existan entre los paréntesis.
--> LineColor(), --> Points()
BigDot ( size x z y )
Se dibuja un punto grande en las coordenadas (x z y). Este
comando se usa para realizar efectos especiales de luz. Se establece el color
mediante LineColor() Y SurfaceColor(). La función del parámetro size
no está muy clara ahora mismo. Se recomienda un valor de 512 para size.
El formato del parámetro size puede cambiar en versiones futuras.
ConcavePoly
Indica al sistema de dibujado que a
continuación viene un polígono cóncavo.
No funciona con bitmaps en el FS5.0
--> Poly(), --> StartSurface -
Move..() - Draw..()
EndSurface
Poly ( vattr [ vx vz vy len ] pnum1
... pnumn )
Poly ( m vx vz vy len pnum1 ... pnumn )
Poly ( a pnum1 ... pnumn )
Un polígono se dibuja mediante los
puntos pnum1 a pnumn de la lista actual de puntos
y con el color de superficie actual.
Nota: Todos los polígonos son solo
visibles desde un lado. Los parámetros del vector indican la dirección desde
dónde será visible el polígono. El brillo del color usado varia en función
del ángulo de la fuente de luz (el sol, hora del día).
Nota! Parece que el FS5 no puede tratar
mas de 100 vértices en un solo polígono. Por otro lado el compilador SCASM
ahora genera un mensaje de error para cada comando ..Poly().. si se detectan
más de 100 vértices.
-> SurfaceColor(), -> Points()
ShadedPoly ( vattr [ vx vz vy len ]
pnum1 ... pnumn )
ShadedPoly ( m vx vz vy len pnum1 ... pnumn )
ShadedPoly ( a pnum1 ... pnumn )
Se dibuja un polígono sombreado. La
sombra requiere que se definan puntos 3D mediante la instrucción VecPoints()
y ShadedColor().
El sombreado se usa para obtener un
cambio gradual del brillo de un polígono a otro. Esto permite hacer que un
objeto octogonal se vea perfectamente redondo.
-> ShadedColor(), -> VecPoints()
TexWindow ( vattr [ vx vz vy len ] pnum1 ... pnumn )
TexWindow ( m vx vz vy len pnum1 ... pnumn )
TexWindow ( a pnum1 ... pnumn )
pnum# numero (índice) de punto de una lista de
puntos
Define una ventana por la que se muestra un
bitmap. La
ventana no puede ser concava. No usar en el FS6/FS95.
TexPoly ( vattr [ vx vz vy len ] pnum1 bx1 by1 ...
pnumn bxn byn )
TexPoly ( m vx vz vy len pnum1 bx1 by1 ... pnumn bxn byn )
TexPoly ( a pnum1 bx1 by1 ... pnumn bxn byn )
TexPoly ( at pnum1 ... pnumn )
Dibuja un polígono cubierto por un bitmap de textura. Los
puntos deben definirse mediante el comando Point(). El polígono siempre se
dibuja con el mismo brillo, sin tener en cuenta la posición del sol. El
brillo se puede cambiar mediante TexPolyShading() si el bitmap está preparado
para esto (ver TexPolyShading()).
El punto del bitmap bx1-by1 es tied a pnum1 y siguientes.
Con este comando no funciona el smoothing de imagenes. Se puede usar sombreado
de colores mediante TexPolyShading y un bitmap especialmente preparado.
-> Bitmap(), -> Points(), ->
TexPolyShading()
pnum# numero (indice) de punto de una lista
de puntos.
bx# coordenada x del bitmap (0...255)
by# coordenada y del bitmap (0...255)
t,b,r ver vattr, textura automática.
TexPolyShading ( vx vz vy )
TexPolyShading ( p el hd )
Esta instrucción establece la intensidad del sombreado de
bitmaps de edificios (cara#.R8) conjuntamente con polígonos con textura
(TexPoly()). Este sombreado requiere un fichero bitmap preparado especialmente
con 8 áreas una para cada uno de los 8 estados de intensidad.
vx componente del vector x
vz componente del vector z
vy componente del vector y
p tipo de formato -> coordenadas polares, el vector se convertirá
al formato FS5 por el SCASM.
el angulo de elevación
hd angulo de dirección.
ShadedTexPoly ( vattr [ vx vz vy len ] pnum1 bx1 by1
... pnumn bxn byn )
ShadedTexPoly ( m vx vz vy len pnum1 bx1 by1 ... pnumn bxn byn )
ShadedTexPoly ( a pnum1 bx1 by1 ... pnumn bxn byn )
Dibuja un polígono sombreado cubierto con un bitmap de
textura. Los puntos se deben definir mediante el comando VecPoints(). El
sombreado se realiza de forma similar a ShadedPoly(). Los colores del bitmap
por encima de 127 se visualizan en negro!
VecPoints(), Bitmap()
Ver el comando TexPoly() para los parámetros.
VecPoly ( vattr [ dx dz dy vx vz vy ] pnum1 ... pnumn )
VecPoly ( m dx dz dy vx vz vy pnum1 ... pnumn )
VecPoly ( a pnum1 ... pnumn )
Se dibuja un polígono con el punto pnum1 ... pnumn de la
lista actual de puntos y con el color de superficie actual. Este comando es
muy similar al comando Poly() normal. Parece que la unica diferencia reside en
el origen del vector de visibilidad. En modo auto, el SCASM copia las
coordenadas del primer punto (pnum1 -> dx, dz, dy) como punto de origen del
vector y después calcula los componentes del vector (vx, vz, vy) como
siempre.
TexVecPoly ( a pnum1 bx1 by1 ...
pnum# bx# by# )
TexVecPoly ( vattr dx dz dy vx vz vy pnum1 bx1 by1 ... pnum# bx# by# )
Esto es el vector polígono con textura. (VecPoly()) Esta
instrucción dibuja un polígono mediante los puntos pnum1 a pnum#.
Como otros comandos de polígonos con textura, cada punto se combina con un
pixel específico del bitmap.
vattr atributos del vector
(p.ej. 'a') para indicar como debe manejar los datos del vector el SCASM.
a Modo automático, dx, dz, dy, vx, vz, vy se
toman/calculan de los primeros puntos.
m Modo manual, todos los datos del vector se deben
entrar.
t,b,r ver vattr, textura automática.
dx, dz, dy coordenadas de desplazamiento de
un punto en la superfície del polígono. Se puede elegir uno de los puntos
que definen el polígono.
vx, vz, vy Los 3 componentes del vector.
pnum# El numero del punto (definido mediante
Points())
TexRelief ( x y wx wy dx dy px py alt ... px py alt )
Un bitmap cargado se usa para dibujar un relieve con
textura en el suelo. Para este propósito una malla regular de rectángulos es
definida y cada nodo del grid se le asigna una altitud específica y punto de
textura. Nótese, estás especificando el numero de caras de los rectángulos
y el numero de puntos de altitud DEBE coincidir. El grid mas pequeño se
define mediante X=1 y Y=1 y tiene 4 puntos de grid (vertices)! Esta
instrucción se debería usar en una subrutina llamada mediante
PerspectiveCall(). Cuidado! este comando puede convertirse en un asesino de
frames. Esta instrucción también incluye detección de colisión.
PerspectiveCall(), PerspectiveCall2()
x, y numero de rectángulos en la dirección
x e y.
wx ancho del rectángulo en la dirección x (este-oeste)
wy ancho del rectángulo en la dirección y (norte-sur)
dx desplazamiento x de la posición del pixel
0 de textura (relativo al punto de referencia).
dy desplazamiento y de la posición del pixel
0 de textura (relativo al punto de referencia) Nota: El pixel 0 es la esquina
sud-oeste (inferior izquierda) del bitmap.
px coordenada x del pixel de la textura
py coordenada y del pixel de la textura
alt valor de la altitud del pixel dado y del
actual punto de grid (entero).
Jump ( :Label )
La ejecución se continua en la etiqueta :Label. La tabla
de saltos se borra cada vez que se empieza una nueva Area(), por lo que se
puede usar el mismo nombre en distintas areas. Esto también significa que no
se puede saltar fuera de un bloque Area()
VectorJump ( :Label m vx vz vy len )
VectorJump ( :Label a pnum1 pnum2 pnum3 ... )
VectorJump ( :Label p elev_angle heading len )
Los elementos vx, vz e vy
representan un vector en posición rectangularmente en un plano virtual (superfície).
len es una distancia en unidades Refpoint.
Los siguientes comandos se ejecutan si la distancia entre
el observador (aeronave) y el plano virtual medida en vectores de dirección
es más grande que 'dist'. Si no la ejecución continúa en :Label
(salto a :Label)
En algunos casos el plano es idéntico a una de las
superfícies de un objeto que hayas construido. Si es así, puedes usar la
funcionalidad del auto vector para calcular el vector y la distancia.
Solo se tienen que introducir 3 números de puntos de la
superficie del objeto (polígono). Si hay más, los otros serán ignorados.
Nota: Esta instrucción tiene la misma funcionalidad que
GLUE Template en el FSFS Aircraft Factory.
IfVarRange ( :Label Var minval maxval )
Se testea el contenido de la variable var. Si el valor
está entre el rango de minval y maxval la ejecución se continua en la
siguiente instrucción. Si no se salta a :Label.
var numero de variable de FS5 en Hexadecimal.
minval mínimo valor posible (decimal o 0x. Hexadecimal)
maxval máximo valor posible (decimal o 0x. Hexadecimal)
IfVarRange2 ( :Label Var1 minval1 maxval1 var2 minval2
maxval2 )
Solo para 5.1 Las dos condiciones se suman (AND)
IfVarRange3 ( :Label Var1 minval1 maxval1 var2 minval2
maxval2 var3 minval3 maxval3 )
Solo para 5.1 Las tres condiciones se suman (AND)
IfVarAnd ( :Label Var Mask )
El contenido de la variable de FS5 Var se suma (AND) con el
valor de Mask. Si el resultado de esta operación es Verdadero la ejecución
continua en el siguiente comando. Si no la ejecución continua en :Label.
Var numero de variable de FS5 en Hexadecimal.
Mask Máscara de bits, cualquier valor de 16 bits en
hexadecimal.
IfHres ( :Label h s )
Se testea la resolución/tamaño horizontal.
h entero, decimal
s entero, decimal
IfVres ( :Label h s )
Se testea la resolución/tamaño verticall.
h entero, decimal
s entero, decimal
SetVar ( var val )
var numero de variable de FS5 en Hexadecimal
val nuevo valor en decimal (o hexadecimal si empieza con 0x##).
SetVar7E ( var val )
Otra instrucción SetVar(). Solo encontrada en algunos
escenarios. La diferencia con la instrucción normal se desconoce.
Call ( :Label )
Llama la subrutina en :Label. Despues del return de la
subrutina, la ejecución continua con el siguiente comando.
--> Return
Return
Devuelve el control a la siguiente instrucción después
del comando Call(). (regreso de la subrutina). Cada subrutina DEBE acabar con
un comando return
Todas las partes introducidas con un Call deberían
considerarse subrutinas. Muchos mensajes de error de base de datos son por
return olvidados o instrucciones de salto mal puestas.
PerspectiveCall ( :Label )
Usalo para dibujar todos los objetos tridimensionales. Esta
instrucción provoca que el FS5 determine que objetos o partes de objetos
están ocultos o no. No es necesario dibujar superficies planas en el suelo
(de color o bitmap) con esta instrucción.
Secuencia tipica:
;
Area ( ... )
PerspectiveCall ( :House )
Jump ( : )
:House
Perspective
RefPoint ( :H_end ... )
SurfaceColor ( ... )
Poly ( ... )
...
:H_end
Return
...
EndA
PerspectiveCall2 ( :Label )
Implementado para testear, el nombre puede cambiar en
versiones futuras.
Perspective
Este debería ser el primer comando en una subrutina
llamada mediante PerspectiveCall(). Si olvidas este comando no verás nada o
incluso te fallará.
ShadowCall ( :Label )
Se dibuja la sombra de los objetos en :Label. Solo se
debería usar después de PerspectiveCall()
RotatedCall ( :Label xdeg ydeg zdeg )
La subrutina en :Label se llama con las coordenadas
rotadas. El punto de pivot es el RefPoint() activo.
TransformCall ( :Label delta_x delta_z delta_y x_deg
xvar y_deg yvar z_deg zvar )
Esto es una expansión de RotatedCall() Se llama a una
subrutina con las coordenadas transformadas. Esto asume un nuevo punto
temporal de referencia en las distancias delta_# del punto original. Así
mismo el sistema de coordenadas está rotado alrededor de este punto de
acuerdo con los valores #_deg.
Nota: Las sombras producidas por el elemento transformado
también se mueven. Esto puede producir divertidas sombras volantes.
:Label Dirección de la subrutina que se llama con el
sistema de coordenadas transformado.
delta_# desplazamiento lineal del objeto (entero)
#_deg rotación en grados (coma flotante, p.ej. -22.5)
#_var variable (hexadecimal), 0 si no se usa!
CallAsm ( :Label seg )
Llama un programa en ensamblador para 8086 en :Label. No
tengo información sobre el parametro seg (hexadecimal). Establecelo a 1. Las
instrucciones de lenguaje ensamblador solo pueden introducirse usando la
familia de instrucciones Dbx(...). Ignorado por el FS5.
RoadMoveTo ( width delta_x delta_z delta_y )
RoadMoveTo2 ( width delta_x delta_z delta_y )
TaxiMoveTo ( width delta_x delta_z delta_y )
RoadLineTo ( delta_x delta_z delta_y ... )
RoadLineTo2 ( delta_x delta_z delta_y ... )
TaxiLineTo ( delta_x delta_z delta_y ... )
Cada instrucción ..Move.. establece el punto de partida de
la carretera o pista de rodaje relativa al punto de referencia. La
instrucción ...Line... dibuja una carretera o pista de rodaje del punto
previo al punto definido en esta instrucción y almacena sus coordenadas para
que la siguiente instrucción ...Line... lo use como punto de partida.
Durante el ocaso y la noche las carreteras tienen puntos
naranjas y las pistas de rodaje luces azules. El color se puede escoger
mediante SurfaceColor().
width 1/2 ancho en unidades refpoint
(entero). Se pueden usar valores negativos para desactivar las luces.
delta_x distancia del punto de referencia o
del punto previo (entero) en la dirección este-oeste.
delta_z diferencia en altitud, normalmente 0
(entero)
delta_y distancia del punto de referencia o
del punto previo (entero) en la dirección norte-sur.
Nota! Los comandos ...LineTo() son repetidas tantas veces
como trios de coordenadas aparezcan. La diferencia entre Road...To() y Road...To2()
es desconocida para mi.