Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
I've been looking forward to this submission for quite a while. What an amazingly high quality TAS, especially considering it's your first one here!
One "Hell yes!" vote from me. :)
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
Hurray! I'm always glad to know others find this kind of thing interesting.
I'm sure changing the CPUDivider (increasing the CPU clock speed) would have a direct impact on the speed of entry and text display. I'm not quite sure what you mean by "display resources", but I doubt emulating a CGA monitor as opposed to a VGA monitor would make any difference.
As for exact values, an input keystroke takes exactly 0.66666 ms to enter, or roughly 4.8% of a frame. Put another way, you can type a maximum of 21 keys per frame. Certain keystrokes (such as the arrow keys) take twice as long, so alternates should be used if possible when making a TAS.
How long it takes for the game to register the keystroke depends on the game. In this game, each key takes 1.3 ms to register, meaning approximately 11 characters can be registered per frame.
How fast the game outputs descriptions is variable. There seems to be a certain amount of time to process a command, followed by anywhere between 1 and 5 lines of output per frame. If you go past a full screen of descriptions, there's a one frame pause to clear the "[MORE]" message. Stopping to set up for the next input also takes up part of a frame.
In the end, I can see an argument that saving a few lines of descriptions may be worth a few more input letters, but there doesn't seem to be an exact measurement as to where that boundary lies.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
When creating a TAS aimed at the vault, does spending frames to enter a character name count against the "fastest completion" criteria? Or to put it another way, can a vaulted run be obsoleted by a faster run wherein the only savings are not spending time entering a name?
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
Wow! Well done. I'm really impressed with all the work you've put into this, and how you're squeezing every last frame from it. Your lua-fu is especially strong, and puts mine to shame. I think I'm going to copy some of your code for runs in the future. ;)
At the normal CPU divider, frames are roughly 14 ms long. However, inputs often register at many intervals during those 14 ms. I had to do the same thing with the cd-man TAS, often padding input with space bar to try and position my directional input exactly where I wanted it.
TASScript allows you to precisely define your input down to the sub-millisecond, avoiding the need for padding inputs. However, since you only need to do this at the start of a few stages, it may not be worth switching emulator versions just for that. On the other hand, if you want to avoid having to redo the entire TAS all over again, it may well be worth giving it a try.
Another thing to keep in mind is that the directional arrows take twice as long to register in JPC-rr than other keys. There may be some tiny savings by using the number pad or other key input instead of the arrow keys.
Still eagerly awaiting the submission!
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
Is that doable? If someone tells me how, I'll export the console and post it.
Ha ha ha! Yes, that was certainly a painful exercise. But even that would now be a lot easier with TASScript. :)
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
I agree that, for those with no experience with the game, this has zero entertainment value (and I’ve been pleasantly surprised at how many yes votes this TAS has actually received). That said, there have been many submissions over the years that have had negative entertainment value, or have been painfully sub-optimal, and I think those would be better contenders for the award.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
Yup, you beat me to it. I tried that and it didn't work for the version I had, but someone could possibly obsolete this run using an earlier version. Also, at least one other version mixes up the second verse of the poem, making the shortest word "thou" instead of "Bleem", saving a keystroke there too.
Good catch. Yes, in this case it's clear it's worth spending the extra character to type "gown". Get all has you try to get the screwdriver, the toothbrush and the telephone, each with a description about how you can't get them.
That was a conscious choice to avoid having to type out "cheese" again, but I didn't take into account the extra two characters for the wait. You're right, it's possible typing the two extra characters may be faster than the extra turn waiting.
For this one, I think we can certainly say yours is faster. For some reason I was under the impression you got points for asking about your home, but it turns out that's not the case.
I have a feeling there are a bunch of small improvements to be found in here. Unfortunately, I don't have time currently to hunt them out or make the updates. However, TASScript makes it pretty easy to make the updates, so you or anyone else is very welcome to take the existing script and make improvements! I'll be happy to give pointers.
You're quite welcome! I'm hoping this is just the first of more to come.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
I also compared a few levels of this with the existing publication, and this one just isn't up to par with the existing one. Still, I appreciate the work that went in to this, and I hope you can take that experience and apply it to another game.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
You're quite welcome, Svimmer. I tried running the demo in JPC-rr and got an Missing Operation IllegalStateException. That's using JPC-rr 11.2, it's possible it's supported in a later version.
I hope someone more knowledgeable about these sorts of things can help figure this out, and make your wish for an AitD TAS a reality!
Object in invalid state for operation (Missing Operation: 0xfeb)
writeOperation of org.jpc.emulator.memory.codeblock.optimised.RealModeUDecoder <RealModeUDecoder>
decodeOpcode of org.jpc.emulator.memory.codeblock.optimised.RealModeUDecoder <RealModeUDecoder>
decode of org.jpc.emulator.memory.codeblock.optimised.RealModeUDecoder <RealModeUDecoder>
getNext of org.jpc.emulator.memory.codeblock.optimised.RealModeUDecoder <RealModeUDecoder>
buildCodeBlockBuffers of org.jpc.emulator.memory.codeblock.optimised.OptimisedCompiler <OptimisedCompiler>
getRealModeCodeBlock of org.jpc.emulator.memory.codeblock.optimised.OptimisedCompiler <OptimisedCompiler>
getRealModeCodeBlock of org.jpc.emulator.memory.codeblock.DefaultCodeBlockFactory <DefaultCodeBlockFactory>
tryRealModeFactory of org.jpc.emulator.memory.codeblock.CodeBlockManager <CodeBlockManager>
getRealModeCodeBlockAt of org.jpc.emulator.memory.codeblock.CodeBlockManager <CodeBlockManager>
executeReal of org.jpc.emulator.memory.LazyCodeBlockMemory <LazyCodeBlockMemory>
executeReal of org.jpc.emulator.memory.PhysicalAddressSpace <PhysicalAddressSpace>
executeReal of org.jpc.emulator.PC <PC>
execute of org.jpc.emulator.PC <PC>
main of org.jpc.plugins.PCControl <PCControl>
run of org.jpc.pluginsbase.Plugins$PluginThread <Plugins>
It runs fine in DosBox. More investigation is needed to figure out why JPC-rr is throwing the error, but this at least gives someone a place to start from.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
I can confirm this works (with commas)
This only works up to the pickup part. For example, the first commands in the game chain like this "N,N,U,GET EGG" and that works. But this gives an error: "N,N,U, GET EGG,D"
Sounds great! FYI, if we have to do much RNG digging, my part may have to wait until the new year, as my free time is very limited right now.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
Happy to have the help! It looks like I might have bitten off more than I can chew. There’s a bunch of things that have to go just right on the run (killing the Troll in one hit, getting the egg stolen early, not getting hurt by the thief x2, having candles blown out on one particular move) that it’s going to take a lot of work finding the right starting clock time to set the RNG properly.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
I'm doing a Zork I run (yes, really!), specifically a 100% run aiming for vault. One big question I have, though is: What's the end screen for this game? I could pull up the score screen after hitting a score of 350 to show that I've achieved 100%, but that still leaves a few screens untraversed in the game. Since they don't count for score, one could argue that they aren't really needed to "beat" the game.
Alternatively, I could end after it dumps you to the command prompt, but it would make for a very confusing and even less entertaining run, and there'd be no easy way for viewers to verify that 100% was actually reached.
On a separate topic, I don't see any specific glitches that will help me out in this run, though feel free to suggest.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
That's really cool, I didn't know you could do that. You’re right, submission would be tricky. There might be differences between the verification movies and the actual runs because of the extra image being attached. Probably a marathon run is the best way to go with all four games loaded onto one image.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
I hope so. That would certainly make things a lot easier.
The fight against your doppelganger. In that one, having super low stats would actually be a benefit, allowing you to lose faster.
I agree, this is a special case where starting with the character from the previous game is a valid, and even encouraged, entry point to the game. As with any save game start TAS, it would require a verification movie. The bigger trick is somehow extracting the save file from the verification movie so you can use it (not an issue for a marathon run).
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
QFGs 1 and 2 you can get away without combat. QFG 3 has two combats that would be mandatory in a TAS. One of them you want to lose anyway, so there's no issue there, but the other one is quite a tough one, and the only way around it is to take the time to get a dispel potion (which would be way out of the way).
A QFG 3 run will take some time because that combat will require substantial RNG manipulation.
Until a shortcut is found in QFG 4, I think there's at least one combat that's mandatory there too.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
Interestingly, it's actually the opposite. Every time you do a room transition, the game nudges the clock counter forward or backwards by 1 unit(=24 seconds in-game time). What determines the direction of the nudge is the current value of the clock counter. If the counter is even, it adds one to make it odd. If the counter is odd, it subtracts one to make it even.
By doing room transitions when the clock counter is even, I keep nudging the clock forward towards nightfall, which ends up saving about 70 seconds over just waiting around. Of course, you can also exploit the same trick to make time stand still, by always transitioning on the odd counter numbers.
Active player, Experienced Forum User, Published Author
(372)
Joined: 9/25/2011
Posts: 652
Maybe some day. First we have to finish each game individually to see how each ticks. Also, the marathon run would have to be different enough that it wouldn't look just like staking each individual TAS back-to-back. Hopefully there are some glitches in the export/import processes to exploit. :)