Jump to content


Photo

High Resolution Timer


  • Please log in to reply
37 replies to this topic

#1 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 24 June 2006 - 09:31 PM

I felt this merited its own topic as the other topic is really old and I did a complete rewrite of the DLL, so it's almost like it's brand new.

http://gm.ultimatepr...x.php?page=DLLs

This is HighResTimer2.dll. I completely rewrote the DLL from scratch. This DLL is for high accuracy time measurement in GM. The major motivation behind this rewrite was to make it easier to use and provide ways to avoid GM's horrible numerical precision. Included in the download is the DLL, a set of scripts for the DLL, a small documentation file, and the source code to the DLL.
  • 0

#2 Ravotus

Ravotus

    GMC Member

  • GMC Member
  • 327 posts

Posted 24 June 2006 - 09:56 PM

Your link is broken. When I download it and open the file in a hex editor I find a php error message.
  • 0

#3 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 24 June 2006 - 10:04 PM

I fixed that already. It was a naming issue (case matters, imagine that).
  • 0

#4 Ravotus

Ravotus

    GMC Member

  • GMC Member
  • 327 posts

Posted 24 June 2006 - 11:40 PM

Ah, ok, gotta love case sensativity.

As far as the dll itself, cool, nice use of std::map and std::queue. You may want to rename the __getId function to just getId, as functions that begin with underscores are usually supposed to be reserved compiler and/or operating system functions.
  • 0

#5 TheParkinator

TheParkinator

    GMC Member

  • New Member
  • 103 posts

Posted 25 June 2006 - 11:25 PM

Hey this is fantastic, I needed something like this for a long time.

Now I can use milliseconds timing woohoo!

Edit: works great!

Edited by TheParkinator, 25 June 2006 - 11:56 PM.

  • 0

#6 bd13

bd13

    GMC Member

  • New Member
  • 37 posts

Posted 26 June 2006 - 03:11 AM

just out of curiosity, how is this different from GM's current_time variable?

thanks
  • 0

#7 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 26 June 2006 - 03:21 AM

I explained that in the documentation.

GM's current_time variable only gets incremented about once every 16 ms. This is pretty poor if you want to take care of timing in GM yourself (for example, by drawing everything as fast as possible, but keeping everything moving the same speed no matter the fps). Not only can this DLL go down to millisecond accuracy, it can go to microsecond accuracy. This is about 16700 times more accurate than current_time.

Edited by Yourself, 26 June 2006 - 03:40 AM.

  • 0

#8 bd13

bd13

    GMC Member

  • New Member
  • 37 posts

Posted 26 June 2006 - 03:15 PM

holy ****! i never knew that... and here i was basing all the timing and movement of my multiplayer game off current_time. i need to try out your dll and see if it makes any difference in my game (if it does i doubt it would be that noticeable) but at least now the timing will be spot on.

you rock! awesome work.
  • 0

#9 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 26 June 2006 - 03:26 PM

Well, when I included the marker feature in the game, I was thinking of multiplayer games. For example, when measuring the ping time of another player. You could create a marker and send a ping packet (that packet could contain the id of the marker), then when the ping packet comes back, it's a simple matter to see how much time has passed since the marker was set. The major advantage being that the numerical accuracy of GM doesn't get in the way here. A big problem with current_time is that there are some people (like me) who leave their computer on all the time. This causes them to have a really high uptime and the current_time variable gets very large. For example, the current_time variable on my computer is about 2927400000. If you're at all familiar with GM's poor numerical accuracy, you'll know that any math done with this number won't be very accurate as it is well beyond 16777216 (this is about GM's limit for accurate math). So, because I leave my computer on all the time, it can cause certain bugs when playing games. This DLL can solve that, because it does the important math itself and that's really accurate. The only problem I could imagine happening is if the counter goes over its max (in which case it'll just roll back to 0, temporarily causing some weird numbers to be returned). However, in order for this to happen, I'd have to leave my computer on for about 163000 years. I don't think that's going to happen, so it's not much of a problem.
  • 0

#10 bd13

bd13

    GMC Member

  • New Member
  • 37 posts

Posted 26 June 2006 - 04:38 PM

thats awesome, not only did you make the res on the timer about 5 magnitudes (i think thats right... ) higher that GM's current_time BUT you also made the upper limit so high that, for all purposes, it will basically run forever w/o troubles.

i would like to implement this in my game, but my only problem is that i have already used the current_time variable extensively throughout my game. so much in fact that it would be a nightmare to go through and change all the current_time variables to some function or variable that is based off your timer.

do you know of a way to do a massive "replace string" in GM to just change all the current_time vars in my game to something else. i know it sounds a little far fetched but if there is a way that would be great. otherwise it will be a real pain to change the timing in my game from current_time to your dll.

One last question: is the call to your dll fast enough to be called multiple times every step (@ 60fps)?

thanks
  • 0

#11 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 26 June 2006 - 05:02 PM

One last question: is the call to your dll fast enough to be called multiple times every step (@ 60fps)?


Yes, it's relatively fast. I made a little demo program to test the DLL and I was calling it about 4000 times per second. However, this isn't the most accurate measure of speed as I was doing other operations in GM (drawing text, constructing strings) at the time. I made another quick speed test where I created a marker and then entered a while loop which would loop for one second (measured since the marker was created). In the loop it would simply increment a counter by one (since each iteration of the loop called the DLL once). After the loop finished I just looked at the counter to see how many times it had called the DLL. I tested it a couple times and every time it called the DLL about 66000 times per second. So, the DLL is plenty fast.
  • 0

#12 Timmo

Timmo

    GMC Member

  • New Member
  • 558 posts
  • Version:GM:HTML5

Posted 20 February 2007 - 04:36 PM

how can i use this to measure function time?
  • 0

Posted Image Posted Image


#13 tha master

tha master

    GMC Member

  • New Member
  • 84 posts

Posted 21 February 2007 - 06:16 AM

hmmm i don't get how to use this :D can anyone make a example plz :D ?

Edited by tha master, 21 February 2007 - 06:17 AM.

  • 0
Working on my new website: http://demontunes.com/
Posted Image

#14 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 21 February 2007 - 03:35 PM

What don't you understand? The DLL is really very simple. The readme explains all the functions provided and what they're for.
  • 0

#15 oakwhiz

oakwhiz

    GMC Member

  • New Member
  • 268 posts

Posted 02 March 2007 - 04:16 AM

Cool GEX, I will probably use it.
  • 0

#16 dark_master4

dark_master4

    GMC Member

  • GMC Member
  • 1232 posts
  • Version:GM:Studio

Posted 20 May 2007 - 04:12 PM

I ran into a problem. I only get multiples of 32 with your DLL. I call the hrt_time_now(), then run code, then call hrt_time_now() to get how much time the code took to execute and even if I let the resolution to default 1000000, I get 0, 32 or 64... What's happening? Should I use the hrt_time_delta() instead of time_now (which I assigned to a variable of course)? I guess time_now is supposed to work too, no?
  • 0

My YoYoGames Marketplace (Has scripts, shaders and poker chips)


GM:Studio
Desktop Intel i5-4440 3.1ghz, 8gb RAM, NVIDIA GeForce GTX 770 2gb
Laptop AMD Athlon x64 2.1ghz, 4gb RAM, 256mb shared VRAM


#17 raist

raist

    GMC Member

  • New Member
  • 77 posts

Posted 20 May 2007 - 09:16 PM

good work! and great idea with markers!
it works, and whole .dll is really useful ;)
  • 0

#18 aeharding

aeharding

    GMC Member

  • New Member
  • 462 posts

Posted 22 May 2007 - 02:29 AM

VERY good! (Although I probably will not use it :) )
  • 0

#19 Alex

Alex

    3lite Member

  • New Member
  • 3098 posts

Posted 29 May 2007 - 03:31 AM

Cheers Yourself, this is exactly what I needed!
  • 0

#20 Tehsalemplz

Tehsalemplz

    GMC Member

  • New Member
  • 646 posts

Posted 04 July 2007 - 06:53 PM

Well, I was having tons of trouble with the markers. Turns out, it doesn't work. Try putting gamestart=hrt_marker_set() and hrt_set_resolution(1000) in the create event and then drawing string(hrt_marker_delta(gamestart)/1000). That should return the number of seconds the game has been open, right? It ALWAYS draws 0. No matter what. I came up with a manual fix, gamestart=hrt_time_now() and hrt_time_now()-gamestart, but it was a pain in the ***. I had assumed that it would work that way, but there is no documentation so I may be wrong.
  • 0

#21 WarriorArtiste

WarriorArtiste

    3d Creator

  • New Member
  • 1032 posts

Posted 28 July 2008 - 04:45 PM

I found that it did not update any faster than using Gm's built in FPS counter. I am using it incorrectly or what?
  • 0
Ultimate 3D 2.1 April 2, 2008!

-33% of the population are Zoogles, 34% of the population are Yoodles, and 100-(34+33)% of the population are noodles. If you put this in your signature, I'm alright with that, if not, that's fine too.

#22 Mnementh

Mnementh

    15151

  • GMC Elder
  • 6400 posts
  • Version:GM:Studio

Posted 28 July 2008 - 04:46 PM

You are.
  • 0

#23 WarriorArtiste

WarriorArtiste

    3d Creator

  • New Member
  • 1032 posts

Posted 28 July 2008 - 04:49 PM

You are.


I use hrt_time_delta/resolution*originalfps in the begin step of the player to adjust its speed. Above it I have: room_speed=random(50)+10 to simulate random latency.

Edited by WarriorArtiste, 28 July 2008 - 04:50 PM.

  • 0
Ultimate 3D 2.1 April 2, 2008!

-33% of the population are Zoogles, 34% of the population are Yoodles, and 100-(34+33)% of the population are noodles. If you put this in your signature, I'm alright with that, if not, that's fine too.

#24 Sindarin

Sindarin

    Indie Game Developer

  • New Member
  • 1644 posts
  • Version:GM:HTML5

Posted 28 July 2008 - 05:36 PM

I am aware that GM's alarms are not machine speed independant. Which mean in slower machines will run slower and in faster machines faster.
Is this dll machine speed independant?
Can it be used as an accurate alarm event or it's just for benchmarking?
  • 0
GM 8.1 / GM:HTML5 User

#25 WarriorArtiste

WarriorArtiste

    3d Creator

  • New Member
  • 1032 posts

Posted 28 July 2008 - 05:39 PM

I am aware that GM's alarms are not machine speed independant. Which mean in slower machines will run slower and in faster machines faster.
Is this dll machine speed independant?
Can it be used as an accurate alarm event or it's just for benchmarking?


It's supposed to retrieve the computer's built in precision timer.

Edited by WarriorArtiste, 28 July 2008 - 06:35 PM.

  • 0
Ultimate 3D 2.1 April 2, 2008!

-33% of the population are Zoogles, 34% of the population are Yoodles, and 100-(34+33)% of the population are noodles. If you put this in your signature, I'm alright with that, if not, that's fine too.

#26 Andreas_oj

Andreas_oj

    GMC Member

  • New Member
  • 146 posts

Posted 07 August 2008 - 11:46 PM

A big problem with current_time is that there are some people (like me) who leave their computer on all the time. This causes them to have a really high uptime and the current_time variable gets very large. For example, the current_time variable on my computer is about 2927400000. If you're at all familiar with GM's poor numerical accuracy, you'll know that any math done with this number won't be very accurate as it is well beyond 16777216 (this is about GM's limit for accurate math). So, because I leave my computer on all the time, it can cause certain bugs when playing games. This DLL can solve that, because it does the important math itself and that's really accurate.

Ah, can't believe I haven't thought of this. I've had a weird problem with my online game for a long time, and this just explains everything! :D
I'll definitely be using this dll again. (Yes I once used it, but thought changing to current_time didn't make any noticeable difference)

Edit: The link is wrong, takes me to your blog. http://gm.ultimatepr...x.php?page=DLLs is the one? ;) (www. vs gm.)

Edited by Andreas_oj, 08 August 2008 - 03:40 PM.

  • 0


#27 dender

dender

    GMC Member

  • New Member
  • 308 posts

Posted 10 August 2008 - 02:19 PM

well I don't really get it.
Like with what I have to divide my speed to set it into delta time accordingly ?
I set it up tried to move player in different fps but speed changes, ofcourse.

example could really help here... :blink:

Edited by dender, 10 August 2008 - 02:20 PM.

  • 0

#28 dender

dender

    GMC Member

  • New Member
  • 308 posts

Posted 11 August 2008 - 08:38 PM

Okei, searched in internet for delta time and figured out formula like:

speed * (1/(fps+1))

But how the hell I could use this ext inside this forumla. I've tried to replace (1/(fps+1)) part for hrt_time_delta() but nothing. I don't know if I'm even calling those things right. Thats why the help file isn't really helping...
  • 0

#29 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 11 August 2008 - 08:55 PM

hrt_time_delta() returns a number which is equal to the integer closest to hrt_get_resolution()*seconds where seconds is the number of seconds since the last time hrt_time_delta() was called. If you call it once at the beginning of each step, it will tell you how much time the last step took to execute. If you express all your speeds in pixels/second (as opposed to GM's usual pixels/step) you can use the delta time you recorded (which is in units of seconds/step) to get a speed in pixels/step. It is not the job of the manual to describe how to do this unit conversion since it's very straight-forward.
  • 0

#30 dender

dender

    GMC Member

  • New Member
  • 308 posts

Posted 12 August 2008 - 12:45 PM

well it's not.
I have rewritten this post many many times and It's driving me nuts.

As you said:

If you express all your speeds in pixels/second (as opposed to GM's usual pixels/step) you can use the delta time you recorded (which is in units of seconds/step) to get a speed in pixels/step.

But I can't have a clue how large value I have to insert, to move with the same rate as 4 pixels per step according to 60 fps, for example.

Like even when i do know what is the rate for "pixels per second" the formula would be?:

pixels_per_step = pixels_per_sec/hrt_time_delta()

Also observing hrt_time_delta() value, it doesn't seem to be in seconds at all :S. Like does really my every step take about 4000 seconds to complete, something like 1 hour ??

Just for now I have able to finally rupture all my wireing in my brain and can't make out any formula anymore. Just the question remains in which way I have to calculate "pixels per step" using this hrt_time_delta().

Edited by dender, 12 August 2008 - 02:08 PM.

  • 0

#31 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 12 August 2008 - 04:50 PM

But I can't have a clue how large value I have to insert, to move with the same rate as 4 pixels per step according to 60 fps


4 pixels/step and 60 steps/second. It should be pretty obvious from here how to make that into pixels/second. It's the same way you convert between any two systems of measurement; e.g. miles/hour to meters/second. It's the same process. If you don't know how to do this, I fear public schooling is more of a waste of time than I previously imagined.

Like even when i do know what is the rate for "pixels per second" the formula would be?:

pixels_per_step = pixels_per_sec/hrt_time_delta()


No. Think about. If less time passes between steps, this formula would make the object move more. If somehow 0 time passed between two steps, you'd expect nothing to move (since no time has passed), but this formula will just blow up. If a lot of time passes, the object will hardly move at all. This is exactly opposite of what you want to happen. Also, look at the units:

(pixels/second)/(second/step) = pixels*steps/second2

Those units don't make a whole lot of sense. You want the units of seconds to "disappear". You need to cancel them out. What can you do with (pixels/second) and (second/step) to cancel out the seconds?

Also observing hrt_time_delta() value, it doesn't seem to be in seconds at all


I never said it was. I said previously:

hrt_time_delta() returns a number which is equal to the integer closest to hrt_get_resolution()*seconds where seconds is the number of seconds since the last time hrt_time_delta() was called.


It has a factor of hrt_get_resolution() in it that you need to cancel out to get a time in seconds.
  • 0

#32 dender

dender

    GMC Member

  • New Member
  • 308 posts

Posted 12 August 2008 - 05:13 PM

Okei, after taking into concider new stuff this is what I cam up with, but doesn't really work. The "Delta Time in seconds" show big 0.

Room Start
global.delta_in_sec = 0// Updated in begin step: hrt_time_delta()/hrt_get_resolution()
global.n_fps = 60 //used to calculate pixels/sec. This would be the room_speed in what I want objects to move like

Begin Step
hrt_time_delta()
//Updating delta time which is in seconds now
global.delta_in_sec = hrt_time_delta()/hrt_get_resolution()

In my engne there is no actual pixel/step movement. Kinda like force movement. Certain amount of force is moving the player (Using GMPhysics v4...)

So this is how I try to make it in delta time..
This part of the script is being moved in Step event:
var pix_sec, pix_step;

move_force = (get_body_density(h)-0.8) 

pix_sec = move_force*global.n_fps //Calculate pixels per second movement.
pix_step = pix_sec * global.delta_in_sec //Now we get pixels per step independent from GM-s fps.
move_force = pix_step //changing our calculation back to movement.

Thats the calculation part. The first flaw is somewhere in the delta_in_sec variable, because this shows up to be 0.

Edited by dender, 12 August 2008 - 06:02 PM.

  • 0

#33 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 12 August 2008 - 06:43 PM

hrt_time_delta()
//Updating delta time which is in seconds now
global.delta_in_sec = hrt_time_delta()/hrt_get_resolution()


Why are you calling the function twice in a row? The second time you call it will give you the time since you last called it which was one line ago.
  • 0

#34 dender

dender

    GMC Member

  • New Member
  • 308 posts

Posted 12 August 2008 - 07:02 PM

mm didn't realise that it would "call" it again. Just wanted to use it as part of calculation.
So removed the first call. delta time in seconds is now 0.02.
It seems to be working...

Anyways thanks for helping me! Sorry if i sounded stupid, but coming back from a months long break things begin to fall back in place again :whistle:.

I ask that right now it affects movement and my physics solving accuracy, but what about rendering? This seems to be still in fps... Do I need to disable automatic draw and create my own corresponded to delta time? And then what do I have to knkow before doing it.
I have tried it, but it seems I cant get rid of frames per second measurement. Like need to go on more like "frames per step_execution_time"? But alarm variable doesn't count float/demical numbers.

Edited by dender, 13 August 2008 - 04:19 PM.

  • 0

#35 dender

dender

    GMC Member

  • New Member
  • 308 posts

Posted 16 August 2008 - 09:23 AM

Little question. I did my render system like so:

Create
room_speed = 120 /sets room speed every time room begins
alarm[0]=1

Alarm[0]
screen_redraw()
if global.delta_time!=0{
alarm[0]=global.delta_time*(room_speed+30)
}else{
alarm[0]=1
}

Now everytime when I call screen_redraw it also calls Begin Step at that/some time ??

Edited by dender, 16 August 2008 - 06:33 PM.

  • 0

#36 LaLaLa

LaLaLa

    GMC Member

  • New Member
  • 511 posts
  • Version:GM8

Posted 24 December 2008 - 07:32 AM

I sort of have three questions, the first being why in the initilization script for this DLL is argument0 used for the value of the "dll" variable and checked to see if it is a real value? Does this mean if you call hrt_init(123) it will be fine but hrt_init("abc") will fail? Also I have a weird problem when I try to set the resolution of the DLL to the computer's frequency (to get the greatest precision) right after initilizing the DLL. For some reason (after some random checking) it sets the resolution to 3? This is all in the room creation code; but if I only init. it here and set the res later in an object, it is fine. What is this about? Lastly, would simply using var_fps=hrt_get_resolution()/hrt_time_delta() and setting things like var_x+=1/var_fps be an efficient and accurate way to use delta time?

BTW on Yourself's sig, I think using round() on random numbers would be fine, wouldn't it? Wouldn't floor() be wrong to use, or will the upper limit never be returned, unlike 0?

Edited by LaLaLa, 24 December 2008 - 07:34 AM.

  • 0

Posted ImagePosted Image
GM Ray Tracer (Multi-threaded version)| Batch Explorer (soon) | TI-Basic IDE (soon) | Mandelbrot Set Renderer (soon) |Image Set Viewer


#37 IceMetalPunk

IceMetalPunk

    InfiniteIMPerfection

  • GMC Elder
  • 9603 posts
  • Version:GM:Studio

Posted 24 December 2008 - 10:29 AM

I sort of have three questions, the first being why in the initilization script for this DLL is argument0 used for the value of the "dll" variable and checked to see if it is a real value? Does this mean if you call hrt_init(123) it will be fine but hrt_init("abc") will fail? Also I have a weird problem when I try to set the resolution of the DLL to the computer's frequency (to get the greatest precision) right after initilizing the DLL. For some reason (after some random checking) it sets the resolution to 3? This is all in the room creation code; but if I only init. it here and set the res later in an object, it is fine. What is this about? Lastly, would simply using var_fps=hrt_get_resolution()/hrt_time_delta() and setting things like var_x+=1/var_fps be an efficient and accurate way to use delta time?

BTW on Yourself's sig, I think using round() on random numbers would be fine, wouldn't it? Wouldn't floor() be wrong to use, or will the upper limit never be returned, unlike 0?

I can answer these questions:

1) The initialization script checks to see if you've entered a string path for the DLL. If you haven't (in which case, GM returns a real-value 0 for argument0), it defaults to the working directory and default filename. It's just for flexibility, so you can move/rename the DLL if you want.

2) You did use hrt_set_resolution(hrt_get_frequency()), right? I'm not sure what's going on here, but it wouldn't affect your game too much if you set the resolution in some object's CREATE event and worked with it elsewhere, such as the STEP or DRAW events, would it?

3) No. If you tried it that way (assuming you skip execution when delta=0), then you'd always be moving at 1px/second. Pretty slow. Not to mention that if delta=0, you'd be skipping frames or killing your game. You'd probably want to use delta time like this:

var_fps=hrt_time_delta()/hrt_get_resolution();

Notice that my var_fps is the same as 1 over your var_fps? The only difference is that mine will never have a divide by 0 issue, so no game killing or frame skipping.

Also, the speeds should now be recalculated not in px/step, but in px/second. Then you can simply do this:

x+=X_SPEED_IN_PX/SEC * var_fps;
y+=Y_SPEED_IN_PX/SEC * var_fps;

This will keep your object moving at a constant speed regardless of frame rate (i.e. lagging makes it jumpy instead of skipping frames).

As a rule of thumb, converting your habits of px/step into px/second is as simple as multiplying them by your usual room_speed. I usually use a room_speed of 30fps, so if I wanted something to move at 4px/step (normally) I'd use a value of 120px/seconds with this DLL (40*30=120).

I've got to say, Yourself, I've heard about this DLL many times, but never thought much of it. But now that I've used it for myself, I see how useful it could be. Great job!

-IMP :D :D

*EDIT* As to your off-topic question about his signature: using round(random(x)) will return any number between 0 and x, including 0 and x. Notice that's x+1 possible results. Since the normal uses of rounded-off random numbers expect x possibilities, not x+1, it's easier to use floor() and avoid any potential headaches such a miscalculation could create. As for ceil(), since most computer-related lists (arrays and all types of data structures) are 0-based, it's better to leave 0 in the picture...which ceil() won't.

Edited by IceMetalPunk, 24 December 2008 - 10:32 AM.

  • 0

:GM123: Are you an artist who likes creating original creature designs? Maybe you can help out with Elementa here! Give it a look; you might like the idea :)

:bunny: :excl: :bunny: :excl: :bunny: :excl: :bunny: :excl: :bunny: :excl: :bunny: :excl: :bunny: :excl: :bunny: :excl: :bunny: :excl: :bunny:


#38 Lazy Brain Games

Lazy Brain Games

    GMC Member

  • GMC Member
  • 173 posts

Posted 09 September 2011 - 03:20 AM

I'm trying to work with this thing, I have a notion of how this works, but I'm kind of struggling to comprehend how to use this dll exactely. From what I can tell from the info, I'm supposed to use the hrt_init to set up the global variables, but after setting it up, I keep getting errors whenever I try to call a function (hrt_set_function, hrt_get_frequency) I just kicks out an Unknown variable error. Is there a example or anything available?

Thanks!

-JB

[EDIT]
Got it working, this thing is awesome!

Edited by Lazy Brain Games, 11 September 2011 - 09:13 AM.

  • 0