SCASM 2ª 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

Sintaxis General (continuación)
Escenario Sintético
Escenario Sección 9


Sintaxis General (continuación)

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.

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.