Log in

View Full Version : Timer/animation control?


OldCoder
01-31-17, 11:26 AM
Hi guys,

I need to figure out how to add a timer for a python script. Many of the scripts refer to TimerID_SomeTimeName with a decimal identifier.

It looks like timers (which seem to trigger animation callbacks) might be set up via one of the tools, eg Goblin Editor or something but I can't find it.

Can somebody help point the way please?

THE_MASK
01-31-17, 05:27 PM
I guess that its not people ignoring the question . Probably no one knows the answer .

OldCoder
02-01-17, 10:01 AM
Thanks Sober.

Ok, so I think the question might be answered a different way; how do people animate items in the menus? eg, stuff moving up/down? That might help me if somebody knows how menu item animation is put together.

THE_MASK
02-01-17, 02:49 PM
Have you used the menu editor ?. I'm not saying I know how to move menu items up/down though .

OldCoder
02-01-17, 03:52 PM
I have been into the menu editor but not being too familiar with it its difficult to know if I'm looking in the right places. I can't find anything in there that describes animation. But for example some of the buttons in the game are animated like the dive ones. It's driving me mad not finding what I'm looking for!!!

SkyBaron
02-01-17, 04:55 PM
When I was learning scripting for SH5 I came across two timer implementations, but have never used them.

There's a high precision timer provided by TDW called TDWHPT with methods like Start(), Stop(), Reset() etc. There's no documentation, you'll have to learn how it works from the scripts. Take a look at Page layout.py or Page Default Hud.py (TWOS mod.) This one is used all over the scripts.


clr.AddReference( "TDWHPT" )
from TheDarkWraith.SilentHunter5 import TDWHPT

# create the high precision game timer
global Pagelayout_HPTimer
Pagelayout_HPTimer = TDWHPT( Menu, Game, Pagelayout_GameTimerEvent )



There seems to be a "default" timer as well that uses StartAnimation(), StopAnimationsWithID() and TimerIDs, but I'm not sure how this one works.

OldCoder
02-01-17, 06:40 PM
Hi SkyBaron,

Thanks for the pointer; TDWHPT seems to be the timer library (the dll) created by TDW.

Then we have all the different instances of timers (which are the TimerID_something) located around the python scripts; the scripts calling the TDWHPT API calls of etc StartAnimation(), StopAnimationsWithID() etc, to make them functional.

So... I need to figure out how to create a new instance of TimerID, and this is the problem. I've searched high and low across the forum and trying to figure out how to create a timer. So far, no progress. After Enigma, if you fancy a challenge, I'm sure it will benefit everybody in the long run if we can work it out (before i lose my marbles).

OldCoder
02-01-17, 07:47 PM
Progress!

I focused on the subtitles timer, since it's a very simple script, and went hunting.

See screenshot, animation array 0 id:

https://s28.postimg.org/cgx8n2b19/timer1.jpg


.... maps to the TimerID within the Python script:

TimerID_Update = 90797097

That's enough for tonight but it's only a matter of time now.

OldCoder
02-02-17, 05:44 AM
Spoke too soon; that's just showing me the currently loaded/running timer active on the subtitles page. Disappointing...

OldCoder
02-02-17, 06:22 AM
Ok I'm starting to think these timer id's are just arbitrary unique numbers, possibly created via a hash generator. Reason for that thought is I changed the existing timer id's directly in the Subtitles python file and the animation detail in the script editor showed the new id. Script didn't barf like mine did, so maybe I've been barking up the wrong tree and maybe just need to figure out what I did wrong in the script.

This thread reads like diary of a noob.

OldCoder
02-02-17, 09:29 AM
SO after many hours I have it working now, a script using the TimerID. I had been led down the wrong path by trying to start the animation from the initialisation function. After defining the TimerID value, wait until StartGame before trying to start the animation, otherwise the animation system doesn't recognise the id and throws an error.

Now I know this info I will probably write a tutorial about it all if anyone's interested in how to use timers in their scripts.