ASM variable for 18hz timer

Horst18519

Moderator
Staff member
Resource contributor
Once again I'm lost when it comes to coding... :eek:

After having spent lots of time on understanding separation planes, conditional tweaking and everything I have another issue I'm lost at: How do I create a running rabbit using the 18hz timer?

I tried the beacnt variable but this doesn't offer the option to "make the rabbit running" (and is too slow), so I think a 18hz timed conditional display is the way to go.

Does someone know the lines to create a simple 18hz timer and make my 8 strobes blink with maybe every tick? (1,2,3,4,5,6,7,8 - pause til 18 - 1,2,3,4...)
 

arno

Administrator
Staff member
FSDevConf team
Resource contributor
Hi,

Tick18 is the variable 05FCh.

If you are happy with 16 instead of 18 ticks, you can use the IFMSK command to check for 0, 1, 2, 3, 4, 5, etc.

So something like this:

Code:
IFMSK lbl01, 5FCh, 0
; first light
IFMSK lbl01, 5FCh, 1
; second light
IFMSK lbl01, 5FCh, 2
; third light
IFMSK lbl01, 5FCh, 3
; fourth light

; etc
 

Horst18519

Moderator
Staff member
Resource contributor
Just to understand what's happening, this is my code at the moment:

IFMSK nextlight1, 5FCh, 0
BGL_LIGHT LIGHT_NAV, -1.192, 0.897, -0.425, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 53

nextlight1 label BGLCODE
IFMSK is some sort of an if trigger - if the value of 5FCh is 0 then go to nextlight1? or is it if not?

Is there a range for the 5FCh var like 0,1 or 0,0 or is there just the option to check if the value is the specific value (3 or 5 or whatever) or not?
 

arno

Administrator
Staff member
FSDevConf team
Resource contributor
Hi,

IFMSK does not check the value of the variable, but it is a mask that checks if certain bits are set or not.

Now that I think about it, it is not as simple as I wrote before :). When the value is 3, the bits for 1 are also set for example. So what I wrote before does not work.

How quick does your rabbit have to run?
 

Horst18519

Moderator
Staff member
Resource contributor
After a few trial-and-errors I have to agree, it's not quite that easy.

The rabbit should run like a realistic approach light rabbit, but if it's a bit faster that's ok.
 

Horst18519

Moderator
Staff member
Resource contributor
Ok, here's my latest code. It actually works :) even though not flawless:

IFMSK light1, 5FCh, 15
BGL_JUMP_32 nextlight1

light1 label BGLCODE
IFMSK nextlight1, 5FCh, 16
BGL_LIGHT LIGHT_NAV, -43.717, 21.991, 483.841, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 61

nextlight1 label BGLCODE



IFMSK light2, 5FCh, 14
BGL_JUMP_32 nextlight2

light2 label BGLCODE
IFMSK nextlight2, 5FCh, 15
BGL_LIGHT LIGHT_NAV, -37.644, 17.273, 412.242, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 60

nextlight2 label BGLCODE



IFMSK light3, 5FCh, 13
BGL_JUMP_32 nextlight3

light3 label BGLCODE
IFMSK nextlight3, 5FCh, 14
BGL_LIGHT LIGHT_NAV, -32.716, 13.521, 356.465, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 59

nextlight3 label BGLCODE



IFMSK light4, 5FCh, 12
BGL_JUMP_32 nextlight4

light4 label BGLCODE
IFMSK nextlight4, 5FCh, 13
BGL_LIGHT LIGHT_NAV, -27.505, 9.738, 297.460, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 58

nextlight4 label BGLCODE



IFMSK light5, 5FCh, 11
BGL_JUMP_32 nextlight5

light5 label BGLCODE
IFMSK nextlight5, 5FCh, 12
BGL_LIGHT LIGHT_NAV, -22.216, 6.283, 237.591, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 57

nextlight5 label BGLCODE



IFMSK light6, 5FCh, 10
BGL_JUMP_32 nextlight6

light6 label BGLCODE
IFMSK nextlight6, 5FCh, 11
BGL_LIGHT LIGHT_NAV, -16.876, 2.447, 177.131, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 56

nextlight6 label BGLCODE



IFMSK light7, 5FCh, 9
BGL_JUMP_32 nextlight7

light7 label BGLCODE
IFMSK nextlight7, 5FCh, 10
BGL_LIGHT LIGHT_NAV, -11.676, 0.897, 118.263, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 55

nextlight7 label BGLCODE



IFMSK light8, 5FCh, 8
BGL_JUMP_32 nextlight8

light8 label BGLCODE
IFMSK nextlight8, 5FCh, 9
BGL_LIGHT LIGHT_NAV, -6.443, 0.897, 59.031, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 54

nextlight8 label BGLCODE



IFMSK light9, 5FCh, 7
BGL_JUMP_32 nextlight9

light9 label BGLCODE
IFMSK nextlight9, 5FCh, 8
BGL_LIGHT LIGHT_NAV, -1.192, 0.897, -0.425, 20, 0.60, 0.40, 0FF9EC6F4h, 0.000000, 0.000000, 1.000000 ; source poly num = 53

nextlight9 label BGLCODE
I've set the lights 2-9 to small font size for better overview.
What I did is this:

I want the individual lights to appear at count 16 and only at count 16. So if the count is above 15 (=16) then the first light appears. But if the count is above 16 (=17 or higher) the light is not called.

The same procedures for the other lights (only appear if higher than 14 but not higher than 15,...).

It works apart from the fact that some of the lights blink twice even though the code seems correct.

I could live with this though as you can't really spot it with the fast movement of the rabbit. :)


Just one thing: is there any way to make the rabbit brighter/bigger? Compared to the other approach lights it appears rather dim.
 

arno

Administrator
Staff member
FSDevConf team
Resource contributor
Hi Thorsten,

I think some blink twice because IFMSK checks for a mask. So you are not checking the value of the timer, but if the bits of that value are set. For example the bits of 8 are also set when the value is 10.

The only work around for this that I can think of at the moment is to use similar interpolation tables as the animations to make a custom counter that runs from 1 to 16 as you want. Then you can just use the normal IFIN1 checks.
 

Horst18519

Moderator
Staff member
Resource contributor
I'm afraid that's beyond my capabilities. :D

But I think I can live with the current situation, I might create a small video if anybody wants to try it too.
 
Hello Guys,


I'm glad to find this rather old topic. I'm working on exactly the same issue.

I was checking on the wiki the pilot activated lights (http://www.fsdeveloper.com/wiki/index.php?title=Pilot_Activated_Lighting).

According the specification of ALFS-II approach light system, there are 21 strobe lights which are called Sequenced Flashing Lights.



"These lights flash in sequence, usually at a speed of two consecutive sequences per second, beginning with the light most distant from the runway and ending at the Decision Bar."

Means 0,024 is our takt time. I have checked the default FS ALFS-II (created by scasm) and it is relatively close to this.

This is way faster than the tick18 which is actually 0,055.

Question is how to do it? How to control it? Any idea?
 
Last edited:

arno

Administrator
Staff member
FSDevConf team
Resource contributor
Hi,

There are some old timer variables, check the fs2000 scenery sdk. I think these are faster than tick 18. But when I tried them some time ago I could not get them to run a normal animation. But for your lights with just using masking it might work.
 

arno

Administrator
Staff member
FSDevConf team
Resource contributor
I guess you just start by trying :). Can't remember if the wiki has some articles about basic asm tweaking that cover this topic.
 
Hi Arno!

As you suggested I've tried to assemble the code by myself. So far I could go:

BGL_JUMP_32 skiptables

light_table_localvars label word
dw 0 ; switch
dw 0 ; flag
dw 0 ; counter

light_table_addone label word
dw 2
dw 0,1,999,1000

skiptables label BGLCODE

LOCAL_BASE_32 light_table_localvars
SETWRD 0h, 1
SETWRD 2h, 0
SETWRD 4h, 0

VAR_BASE_OVERRIDE VAR_BASE_GLOBAL
IFMSK holdlights, 05FCh, 0020h ; add one to the count every 1.78 seconds
IFIN1 skipcount, 2h, 0, 0 ; flag skips the counter until tick18 completes cycle
BGL_INTERPOLATE VAR_BASE_LOCAL, 4h,\
VAR_BASE_LOCAL, 4h,\
VAR_BASE_LOCAL, (offset light_table_addone - light_table_localvars)
SETWRD 2h, 1

skipcount label BGLCODE


IFIN1 lightson, 4h, 1, 1
BGL_LIGHT LIGHT_STROBE, -0.083, 10.103, 0.083, 20, 0.60, 0.60, 0FFDEFF00h, 0.000000, 0.000000, 1.000000 ; source poly num = 1
lightson label BGLCODE

IFIN1 lightson2, 4h, 2, 2
BGL_LIGHT LIGHT_NAV, 39.917, 10.103, 0.083, 20, 0.60, 0.40, 0FFDEFF00h, 0.000000, 0.000000, 1.000000 ; source poly num = 14
lightson2 label BGLCODE

IFIN1 lightson3, 4h, 3, 3
BGL_LIGHT LIGHT_NAV, 79.917, 10.103, 0.083, 20, 0.60, 0.40, 0FFDEFF00h, 0.000000, 0.000000, 1.000000 ; source poly num = 15
lightson3 label BGLCODE

IFIN1 lightson4, 4h, 4, 1000
SETWRD 0h, 0 ; turn the switch off
SETWRD 2h, 0 ; reset the flag
SETWRD 4h, 0 ; reset the counter
lightson4 label BGLCODE

holdlights label BGLCODE
SETWRD 2h, 0 ; reset the flag


BGL_LIGHT LIGHT_STROBE, -0.083, 5.103, 0.083, 20, 1.0, 1.00, 0FFFF0202h, 0.000000, 0.000000, 1.000000 ; source poly num = 1
IFMSK bitsnotset, 05FCh, 0020h
BGL_LIGHT LIGHT_NAV, 39.917, 5.103, 0.083, 20, 0.60, 0.40, 0FFFF0202h, 0.000000, 0.000000, 1.000000 ; source poly num = 14
bitsnotset label BGLCODE
BGL_LIGHT LIGHT_NAV, 79.917, 5.103, 0.083, 20, 0.60, 0.40, 0FFFF0202h, 0.000000, 0.000000, 1.000000 ; source poly num = 15


BGL_RETURN
I've used the wiki tutorial "pilot activated light".

The code is correct in terms of asm language, it is getting assembled. The only problem is, only the first light is blinking, the second and the third not.

What I wanted to have that light_table_localvars 4h space is increasing and checked with IFIN1 to switch on the different lights (at the end it should be 25 different lights) when 26th is reached the counter gets reseted.

Thanks for all your help!
 
Top