Hello,
I use a macro which calls a library object (FS2002 style). It works in FS2004. The library object is this (read more at the end for the macro itself):
LibObj( PWR 0 SCALE 1 TYPE 1024 NAME Omni_Light_Strobe )
Call( :set_table )
IfVarAnd( :luz 4 0b000000011110 )
Return
:luz
RotateToAircraft( :start 0 0 0 0 0 1 0 0 0 )
Return
:start
IfVarAnd( :isnight 6 3 )
Return
:isnight
IfVarRange( :size1 2 0 300 )
Light( m 4 0 150 0 40 0.6 0.4 EF 255 255 255 0 1 0 )
Return
:size1
BGLVersion( 0800 )
TextureList( 0
6 FF 255 255 255 0 50.000000 "halo.bmp"
256 FF 255 255 255 0 50.000000 "halo_LM.bmp"
)
MaterialList( 0
0.752941 0.752941 0.752941 1.000000 0.250980 0.250980 0.250980 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000
)
IfVarRange( :size2 2 300 480 )
UVar( $A 1 )
VertexList( 0
[-1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.156311
[+1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.156250
[+1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.843811
[-1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.843811
)
Jump( :go_light )
:size2
IfVarRange( :size3 2 480 768 )
UVar( $A 1.6 )
VertexList( 0
[-1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.156311
[+1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.156250
[+1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.843811
[-1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.843811
)
Jump( :go_light )
:size3
IfVarRange( :size4 2 768 1230 )
UVar( $A 2.56 )
VertexList( 0
[-1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.156311
[+1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.156250
[+1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.843811
[-1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.843811
)
Jump( :go_light )
:size4
IfVarRange( :size5 2 1230 2000 )
UVar( $A 4.1 )
VertexList( 0
[-1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.156311
[+1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.156250
[+1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.843811
[-1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.843811
)
Jump( :go_light )
:size5
IfVarRange( :size6 2 2000 3150 )
UVar( $A 6.6 )
VertexList( 0
[-1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.156311
[+1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.156250
[+1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.843811
[-1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.843811
)
Jump( :go_light )
:size6
IfVarRange( :size7 2 3150 5000)
UVar( $A 10.5 )
VertexList( 0
[-1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.156311
[+1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.156250
[+1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.843811
[-1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.843811
)
Jump( :go_light )
:size7
UVar( $A 16 )
VertexList( 0
[-1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.156311
[+1 * $A ] [-1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.156250
[+1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.843811 0.843811
[-1 * $A ] [+1 * $A ] 0.000000 0.000000 0.000000 -1.000000 0.156250 0.843811
)
:go_light
Transform_Mat( a 0 0 0 0 0 180
)
SetMaterial( 0 0 )
DrawTriList( 0
0 1 2
0 2 3
)
TransformEnd
EndVersion
Return
:set_table
VarBase( :database )
Low64k2var( 2 33B ) ; distance
Low64k2var( 4 5FC ) ; timer
Low64k2var( 6 28C ) ; time of day
:database
Return
Dbx( 00 00 )
Dbx( 00 00 )
Dbx( 00 00 )
EndObj
Now the calling part is:
Header( 1 40 38 -8 -10 )
LatRange( 38 40 )
; Object # 9
Area( 5 38.78525194 -9.08458194 50 )
IfVarRange( :next_9 346 2 5 )
PerspectiveCall(

call_9 )
Jump( :next_9 )

call_9
Perspective
RefPoint( 2 :return_9 1 38.78525194 -9.08458194 E= 155.000 v1= 25000 v2= 200 )
RotatedCall( :start_9 0 0 0.000 )
:return_9
Return
:start_9
CallLibObj( 0 54690006 267300F0 022E0DB1 C0F65F5C )
Return
:next_9
EndA
Regards, Luis