Very interesting! Looking forward to your progress.
One crucial feature to implement right now would be robust rerecording (saving and loading a state without interrupting the demo recording and without the risk of desynching).
Aside from that, a way of monitoring game variables would be immensely helpful.
not sure what problem your talking about. All this is really doing is acting like one of those old school slow-mo controllers that just paused and unpaused really rapidly. The frame advance is pretty much like the script you guys were talking about.
Quote:
One crucial feature to implement right now would be robust rerecording (saving and loading a state without interrupting the demo recording and without the risk of desynching).
its all got to be done in a hackish way. And chances it might not be able to work. Although they give you the code to create your own mods, theres alot they dont give you. Alot of stuff that would make this real easy isnt delt with by the mod dlls. Hell, ive been scratchin my head for a while now on how to figure out if the game is paused or not.
also i want to figure out how to trim all the paused data out of the demo file. As of now you can view both styles: 'playdemo' runs the demo and shows the pauses being used and 'viewdemo' playes it back at normal rate. Although the option of being able to watch the run from the eyes of the TAS runner would be kinda cool, as mentioned above filesizes of demo files can grow quite rapidly. Thats not really an issue since i doubt it would ever increase past the rate of what a video capture would be
not sure what problem your talking about. All this is really doing is acting like one of those old school slow-mo controllers that just paused and unpaused really rapidly. The frame advance is pretty much like the script you guys were talking about.
Quote:
One crucial feature to implement right now would be robust rerecording (saving and loading a state without interrupting the demo recording and without the risk of desynching).
its all got to be done in a hackish way. And chances it might not be able to work. Although they give you the code to create your own mods, theres alot they dont give you. Alot of stuff that would make this real easy isnt delt with by the mod dlls. Hell, ive been scratchin my head for a while now on how to figure out if the game is paused or not.
also i want to figure out how to trim all the paused data out of the demo file. As of now you can view both styles: 'playdemo' runs the demo and shows the pauses being used and 'viewdemo' playes it back at normal rate. Although the option of being able to watch the run from the eyes of the TAS runner would be kinda cool, as mentioned above filesizes of demo files can grow quite rapidly. Thats not really an issue since i doubt it would ever increase past the rate of what a video capture would be
Is there a way you could throw the frames being recorded on-screen as some kind of hud overlay or something? That would be extremely useful.
Great idea. That shouldnt be hard at all to put in. Well a frame counter would be simple, just not sure if various fps might effect the number. But any computer built in the last 10 years could play this game full speed. Either way, error or no error, it would still be a good way to keep track with how long youve been recording
Got a cool new feature in there now. The laser pointer allows you to point out where you want to look next frame. no more guessing during pauses. heres a vid to show it off
Got a cool new feature in there now. The laser pointer allows you to point out where you want to look next frame. no more guessing during pauses. heres a vid to show it off
Forgive the pun, but, that looks fanTAStic - I am looking forward to watching more.
Wow cool to see that working Did the game provide functions to do that? Or did you have to simulate the whole hting? (or work out with trial&error ofc...)
Hope you'll get re-recording working some day... that'll probably be the biggest TAS feature (even in frame-advance you don't know the best moment to turn a corner... you need to try several possibilities to do that :))
Is there any way to figure out a perfect bunnyhop-turn? Maybe it can be automated as well? (i.e. for each frame, figure out how much to turn for optimal speed gain)
edit: If you get some bunny hopping stuff working (or if you don't, try manually).... maybe it's possible to do forward/straightline bunny-hops by alternating the direction of the bunnyhop every frame? might look twitchy in 1st person view though, depending on the required turning angle (but it'll look awesome in 3rd person :D)
No. Well sortof. The pointer was found by mistake. While in frame mode you can shoot while the game is paused and each weapon does some unique strange things. They dont really fire, and in a demo playback its like nothing happened, because nothing did. The egon beam was the only thing that moved around while paused. I looked through the code for a while to see why this worked and the others like the gauss beam didnt. Couldnt find a solution. Both code for traceline's were the same. Puzzled i was, but i knew it could be done somehow. In the end what i did was take the raw mouse info thats updated per frame, do some fancy trig stuff to the info, and figure out where to put the dot. It doesnt take into account of recoil or other viewchanging effects but it shouldnt be hard to incorporate those.
Finding out weither the game is paused or not was a crazy hack. No function within the game dlls can figure this out. I tried many things. The game timer is the onlything that always keeps going, but stops during a pause. The problem is it doesnt really stop. It flickers around 0.0000XXX. So what i had originaly was some sloppy mess of gettting how long it took last frame, getting the game time of last frame, adding them together to get what this frames game time should be, if its under that then were paused. But it was error prone. Wouldnt always give the correct result and wasnt precise to the frame.
So back to the drawing board. Using 'Cheat Engine' i found a variable that controls the pause. That var is located in the hw.dll(dont have source for that). Dll's are loaded to different locations each time the game is run, but this variable offset stays the same. So i have to find the loaction of where the dll was loaded, the add the offset of the pause var to that. Then read that chunk of mem. Using that method works like a charm, unfortunatly might break compatibility with anyone using a different version of that dll.
Quote:
Hope you'll get re-recording working some day
me to. But seeing as the demo recording is almost like the pause situation, and the demo recording is alot more complicated than one boolean value, im not sure how to do this yet. The only way i think i can do it is by recording to a certain name on load, lets say 'demo01'. if you reload that save, when it starts up it records 'demo01' still. Lets say you advance farther in the run and your happy with the progress. You then save. This ends the recording of 'demo01' and starts recording 'demo02'. Everytime you quickload from that save it starts at 'demo02', presurving 'demo01'. And that continues upwards. Problem with this is it doesnt offer the flexibility that some emulators have. But i think this would work still.
Quote:
Is there any way to figure out a perfect bunnyhop-turn?
ya ive thought about that. Ill be working on that soon. Still thinking of the best way to implement various 'perfect' scripts.
Right now im working on getting an ingame display that shows vaious counters. Like the frame count that DemonStrate mentioned. But also others like countdowns to the the next availible weapon fire, holster/unholster times, reload times, times untill grenade detonates or tripmine becomes solid. Basicaly anything that could seem usefull. Also movment speeds and what not
Is there any way to figure out a perfect bunnyhop-turn? Maybe it can be automated as well? (i.e. for each frame, figure out how much to turn for optimal speed gain)
That's a pretty cool idea, it shouldn't be too hard to find the "perfect angle" if it was possible see the player speed. Then you might be able to find the sweet-spot/angle to turn quite easily. Would it be possible too see the player speed/acceleration using some ingame display?
This mod has SO much potential. I will probably install HL again tomorrow and try it out.
Would it be possible too see the player speed/acceleration using some ingame display?
yup. almost all working. Got a custom menu in now that doesnt record during demos. Just used now to display timers so far such as the current game time/frame number aand cooldowns for pri/sec weapons. Speed is on the todo as well as grenade times and other stuff that might be easily worked into it. Any other suggestions about usefull info that should be monitored are greatly welcomed.
Quote:
it shouldn't be too hard to find the "perfect angle" if it was possible see the player speed
Now i havnt really looked to greatly into this part yet. I need to figure out the actuall numbers on how the crazy bunnyhop circle jump works. How sv_airaccelerate works into the equation. And how to find the perfect jump. Now it was mentioned here earlier that a tas run might be hard to watch seeing at the camera would go crazy left right to build up speed, but the more im slowing things down im thinking it might not work like that. But ill figure that all out when i look at that section of code, for now all i can do is speculate. Still trying to think of a good way to incorporate those type of scripts. Perfect circle jumping, frame perfect forward gauss jumps. Do i hard code these or allow the old scripts to work somehow with the constant pausing. The guass jump is the next thing after the 'stats' menu. I think that would be the easiest of the usefull scripts to implement. Then ill go from there.
Quote:
I will probably install HL again tomorrow and try it out.
hopefully by tommorow night ill have a new build up on moddb. The one on there doesnt have the laser pointer or anything, just has the slowing and frame advance. Which i guess is something to get used to in the meantime. And install the steam version or some other version? id like to know at which version downward my code breaks. Not so i can fix it lol, just curiosity.
Quote:
I threw up a thread on TASVideos for the project:
cool. And ya with that thought, most games with some portion of code released could be made TASible one way or another. Source would be easier than hl1 would be. Im suprised that this hasnt really been done before. Correct me if im wrong, as id like to see those TASed PC games, and the options availible for that game.
And install the steam version or some other version? id like to know at which version downward my code breaks. Not so i can fix it lol, just curiosity.
So you want me to try it out on the steam version? I was going to install the non-steam version, but I could try either one...
Any other suggestions about usefull info that should be monitored are greatly welcomed.
Player's Coordinates (X, Y, Z) + Velocity (X, Y, Z) + Speed (Magnitude) Perhaps a list of enemy's health... although there may be too many instances to display them all, and maybe it's too hard to figure out which ones are useful? A list of each weapon's damage (although tbh a TASer should know it by heart :D)
Quote from TimEh:
I need to figure out the actuall numbers on how the crazy bunnyhop circle jump works.
Depending on the inner workings... maybe the 'perfect angle' is not the same for every frame this also might be related to frame-by-frame imperfection... Not sure how you managed frame-advance, but if you chose an arbitrary gametime framerate (probably 20/30/60 fps) then it's probably that different rates provide slightly better bunnyhops
Quote from TimEh:
most games with some portion of code released could be made TASible one way or another.
So you want me to try it out on the steam version?
after rereading, i guess i didnt really explain that properly. Its made and tested for the steam version, so trying the non steam one would be helpfull.
I think displaying the health and mabey other info of the currently aimed at enemy wouldnt be to hard. Or the enemy under the pointer. Not sure how it would read out with gonarch but every other enemy should work.
Nope. Its a seperate mod of its own. Its not writen in a way that you could fire up counterstrike(or anyother mod) and use it to your advantage. And to be honest i dont think you can be vac-banned unless you play on a vac enabled server. Which i highly doubt happens in a single player game.
Okay i tested it here are some things (i played on steaM)
It does work on Windows 7 X64 Ultimate. What i couldnt get to work was the "laser-point-mod" and bunny hop thingy. Cause i do not know how to use them, and i couldnt find them binded anywhere.. And once when i loaded a save file i couldnt look up or down just left and right, but i just loaded again and it was fixed.
ya the laser mod update hasnt been released yet. thats just the basic frame skip one. ill be uploading that one tonite. Which includes the new menu viewed here
all the bindable keys are in the options menu for easy access