Ever since I stumbled upon TASVideos, I've wanted to make my own TAS. I tried to find a game that I knew very well, that wouldn't be a long TAS, and that hadn't been done yet that people wanted to see. I finally settled on Space Quest IV. Turns out, this may be the first mouse-based dos game to be TASed.
(Three chickens were harmed in the making of this film)
Game Objectives
- Emulator used: JPC-rr 11.2
- Aims for fastest time
- Manipulates luck (slightly)
- Uses death to save time??
Route Selection
This run turned out to be a lot longer than I had originally anticipated. I figured that if I jumped straight from SQ XII to SQ I and back, the guard in the right hangar would be gone and I could enter Vohaul's complex from there. I TASsed that, just to discover that the guard was still there, and I was shot. So, I then tried jumping straight to the mall and back. Zap! Guard still guarding. Turns out, to get the guard to leave you have to summon the time machine and guards in the mall. To do that, you have to clean out Zondra's bank account. And to do that, you have to save the ladies from the sea slug. So, a trip to SQ X is unavoidable. Still, since the jar of slime is the only real inventory item you need to get to Vohaul, I was able to skip past SQ I, the software store, Radio Shock, as well as bypass catching the bunny.
Emulator Limitations (and Solutions!!)
JPC-rr is a very functional emulator in all aspects except one: mouse support. Unfortunately, in almost all cases, mouse input is faster than keyboard input for this game. As built, JPC-rr comes with a side menu with mouse movement options of Up 10, Up 20, Up 30, Up 40, Up 50
, and corresponding options for down, left and right. The problem is, those increments are too broad for any accurate mouse movement. My initial solution was to alter the extramenu file to add Up 1, Up 2 and Up 5
options (as well as the same for down, left and right). This provided me with a more exacting way of specifying mouse movements. Still, mouse movement was always trial and error and it made TASsing painfully slow. "Up 20? Nope, not enough. Up 20, Up 5? Still not enough. Up 30? Too much. Up 20, Up 5, Up 2? Not enough..." Halfway through TASsing the game this way, I decided I couldn't keep going like this. I needed to find a better way.
Luckily, Ilari included the source code with the emulator. With some poking around, I was able to implement the ability to drag the game's mouse cursor around with my mouse. Click on the the mouse cursor, drag it to your desired location and release. The cursor will move to wherever you want, no menus or guesswork involved. I have no idea if it'll work for other games, but it made TASsing much, much easier for this one. I also added the ability to type in the x and y movement values so you can simply specify 'Move X 17, Y -11'. Finally, I added buttons to move the mouse cursor to the bottom left and right-hand corners. With this new functionality, not only was I able to TAS this game in a quarter of the time it took me before, but I was also to play around with the mouse cursor and do some fun things during player idle times.
I'm sending my changes to Ilari for consideration. If anyone is interested in using my hacked version, let me know and I can send it over to you.
Mouse Cursor Play
To add a little bit of entertainment, I incorporated some mouse cursor play into the run. After reading some of the comments on this submission, I realized that those who had never played the game before might think these movements were originally part of the game! XD There are in fact five different times I added mouse cursor movements to the run for entertainment. For a fun Easter egg hunt, try to find them all. (FYI, The bouncing nose and monorail mouth together only count as one). Some of them are really quick, so blink and you'll miss them!
Xenon Streets
Although it's possible to move diagonally between some screens here, I haven't found a way to move diagonally between the starting screen and the screen with the sewer grate. There's definitely some savings available if someone can figure out a way to do it.
Sewers
Once you approach the slime, it's kind enough to stay still for a few seconds to let you take a sample of it. The unfortunate downside of this is that if you leave the screen before it starts moving again, the game refuses to change screens and just stays stuck on that one screen. I try to get as close as possible to the screen boundary before the slime begins its movement again.
Flight Up to Hangar
This is one of several cut scenes where, no matter how fast you have the speed, you have to wait for the music to finish to continue. In some future scenes, I try to do some inventive things during this idle time. For this one, I decided to just let it play out.
Time Buster 2000 SUX (The time machine)
Welcome to the customizable part of the TAS! Roger enters two codes into the Time Buster (your first code always fails). You can put your own message into this TAS by altering the following lines:
First Time Code
Lines: 1056-7, 1061-2, 1066-7, 1071-2, 1076-7, 1081-2
Second Time Code
Lines: 1104-5, 1109-10, 1114-5, 1119-20, 1124-5, 1129-30
You'll notice for each time code there are six pairs of lines. Each corresponds to an X and Y mouse movement. To customize the time codes, replace each XMOUSEMOTION and YMOUSEMOTION pair with one of the following number pairs:
Letter (X, Y)
- A (-15,10)
- C ( 15,15)
- E (-15,15)
- G (-10,10)
- H ( 10,17)
- I ( 10,10)
- S (-15,17)
- T (-10,15)
- U (-10,17)
- ! ( 15,17)
- ? ( 15,10)
So, for example if you wanted to spell 'ACCESS', you could use:
+# org.jpc.emulator.peripheral.Keyboard XMOUSEMOTION -15
+# org.jpc.emulator.peripheral.Keyboard YMOUSEMOTION 10
...
+# org.jpc.emulator.peripheral.Keyboard XMOUSEMOTION 15
+# org.jpc.emulator.peripheral.Keyboard YMOUSEMOTION 15
...
+# org.jpc.emulator.peripheral.Keyboard XMOUSEMOTION 15
+# org.jpc.emulator.peripheral.Keyboard YMOUSEMOTION 15
...
+# org.jpc.emulator.peripheral.Keyboard XMOUSEMOTION -15
+# org.jpc.emulator.peripheral.Keyboard YMOUSEMOTION 15
...
+# org.jpc.emulator.peripheral.Keyboard XMOUSEMOTION -15
+# org.jpc.emulator.peripheral.Keyboard YMOUSEMOTION 17
...
+# org.jpc.emulator.peripheral.Keyboard XMOUSEMOTION -15
+# org.jpc.emulator.peripheral.Keyboard YMOUSEMOTION 17}}
(Just be sure not to change the numbers represented by #)
Latex Babes of Estros
Simple speed run through this section. Nothing interesting to see here.
Galaxy Galleria
I hate moving sidewalks. Imprecise mouse movements and moving sidewalks make for very tedious TASsing. I optimized Roger's movement as much as I could around here, but I'm sure there are some frames to be saved if someone wants to try their hand at it.
Big and Tall
This store can actually be skipped completely. If you come to the mall first and work at Monolith Burger before you go to the rocky ledge in SQ X, you'll have enough money to buy the women's clothes in Sacks. The robot there doesn't care if you are missing your pant legs, though for some strange reason your pants are fixed when you change out of drag. Unfortunately, the extra hop in the Time Buster takes more time than it saves, so it's not really worth doing.
Monolith Burger
If the Snake Eater TAS can skip the battle with The End by moving the clock forward, I certainly can skip the burger making mini-game. Besides, it'd be really boring to watch. Trust me.
Arcade & Ms. Astro Chicken
This shortcut only works in the disk version of the game. In the CD version, the time police are waiting for you once you finish your game. There are four ways to die in Ms. Astro Chicken, and they each take different amounts of time to process your death:
- Shot by Farmer: Instantaneous
- Caught by Dog: Fast
- Hit by Squirrel: Very Slow
- Hit by Windmill: Very Slow
This is why, on the second life, I avoid the flying squirrel. It's faster to go by a hill with absolutely nothing interesting on it and be shot by a farmer than it is to be hit by the squirrel. Oh, and I egg the dog, not just for fun (though it is fun), but also to make another dog appear right at the start of the third life.
Time Buster 2000 SUX (again...)
Since the time travel sequence only ends after the time travel music is finished playing, I decided to use that time to show something else...
Vohaul's Maze
There are robot drones patrolling the maze, and initially there is one that approaches from the left. Normally, you need to run and hide from this drone. But, if you time it just right, you can safely pass the drone during the screen change. This is one of the few parts of this speed run that I think could only really be done in a TAS.
After going to the mega-computer and flushing the brain (This is your brain on toilets..), I have to dodge another drone. If I could save two more frames between dodging the first drone and the second, I'd be able to use the safely-pass-drone-during-screen-change trick. Unfortunately, no matter how hard I've tried, I've not been able to find those frame savings. If someone is able to find them, they could shave a couple seconds off the run. Even with having to wait for the drone to pass (which takes < 2s), it's still faster than flushing the drone program on the mega-computer (which takes > 3s).
Fight with Vohaul
Regardless of who wins each battle, you have to battle Vohaul five times before he gets pushed into the force field. The final input is closing Roger's son's second gray speech box.
Perhaps a future run of this game might include a TAS of Ms. Astro Chicken. It wouldn't be the most entertaining TAS out there, but it would be interesting to have a TAS nested within a TAS.
Screenshot Suggestions
Here are a few possibilities:
Files:
HDD, 16 tracks, 63 sectors, 16 sides.
Filename | Size | MD5 | Timestamp |
---|
adl.drv | 8040 | d1ea243124c1a982d68373bb8cada130 | 19900101000000 |
cms.drv | 3734 | 83d623646c2c4b46c612e7c4348d8fcc | 19900101000000 |
ibmkbd.drv | 537 | ce095142a4b231a0e5d2e4662b6ea829 | 19900101000000 |
ibmps1.drv | 4364 | d0ed61a57384da298b3996363c1b0fe1 | 19900101000000 |
install.bat | 96 | f8e3f6b5c8210ecfa62de5f530727689 | 19900101000000 |
install.exe | 21239 | aa910d272f361036d6bf0831147af8ca | 19900101000000 |
install.hlp | 7950 | b94b822fe006705bc99cb086d54fd476 | 19900101000000 |
install.scr | 3462 | ef4fdee846ccd9be38419a6e77d87e05 | 19900101000000 |
joystick.drv | 607 | c75b73974160ff652a909a0d01f97214 | 19900101000000 |
mt32.drv | 1989 | 1d7fc0680b9539e93a47221dee01c9f6 | 19900101000000 |
mtblast.drv | 3685 | f57f0c81cdfa68f286191ca6961b1fbb | 19900101000000 |
readme | 196 | f33c7738c90ab5134894e568c28721ad | 19900101000000 |
resource.000 | 173330 | b0fd6032e789321f5c3a60d8bf3d9431 | 19900101000000 |
resource.001 | 1247215 | 3739053944c2b9f921a86c22275ea3d7 | 19900101000000 |
resource.002 | 1218373 | 23d4c18f693823f821fadb02e10ce061 | 19900101000000 |
resource.003 | 1240130 | 4841fcc5643305b25da109bac17a5946 | 19900101000000 |
resource.004 | 1200631 | 7ca0a3722b2a51686fbfe576a3415349 | 19900101000000 |
resource.005 | 1053294 | 2bb5e789e9d18b5171c4acab6d9d2f49 | 19900101000000 |
resource.cfg | 128 | 3d60f01d4adefa13c7693624c01bfaf1 | 19900101000000 |
resource.map | 5928 | 6ea4f337d8d9a5c306f343e86861e9d8 | 19900101000000 |
scidhuv.exe | 104937 | 87e84df2af6cc8650a4f2f9636b12063 | 19900101000000 |
script.000 | 13702 | 8ae526b127371cd7fcd60c1711d2b31f | 19900101000000 |
script.119 | 762 | b101aef83fa0deaec997e9b47413c7a1 | 19900101000000 |
script.120 | 410 | 3a2f3311b5ac633e1769f28448c9d176 | 19900101000000 |
script.405 | 10450 | 26b95a02d4db47e227096284ff8aeed5 | 19900101000000 |
script.410 | 10334 | fab1c7f2ad1537619759e7049ff11b34 | 19900101000000 |
sierra.bat | 25 | 6fa14b7343605530869c747caaec43aa | 19900101000000 |
sierrah.bat | 22 | cb7d55af740b783ef63545a7fc462d0e | 19900101000000 |
sndblast.drv | 9738 | 1a4b2c2e76e1d91d7b037fa2f1db7d2d | 19900101000000 |
sq4.bat | 32 | 207d3bd3a6ae8026d2da84dce6adbf1b | 19900101000000 |
sq4.uhs | 9290 | 592361bf99f09101f07ef8ddd71159e4 | 19900101000000 |
sq4h.bat | 29 | 36d0f1e5ec6b11629c432983c628e809 | 19900101000000 |
sq4rs.bat | 31 | b3f20a957896de527b2132099e573cef | 19900101000000 |
std.drv | 1468 | 1d1626f37396996c94ac51e198b7e2ee | 19900101000000 |
text.000 | 1668 | ed1b5b427985d1e3b8c26d76fd14be3f | 19900101000000 |
text.405 | 53 | a6a2456ab79492026755e9529860aba0 | 19900101000000 |
text.410 | 53 | 9d4805b0941eb48d7317ca15bc8927b9 | 19900101000000 |
version | 7 | 7233646488ab8085557a4b56de9b1bd9 | 19900101000000 |
vga320.drv | 4426 | cc8e04ded65a8f5d58a2dde1bb4e674f | 19900101000000 |
view.992 | 5613 | de92a199b251f9b9cd261cebbf1e1458 | 19900101000000 |
view.993 | 5482 | 2f704aaff9a616347fd4f03befd1ad49 | 19900101000000 |
view.994 | 2245 | 0fefac7c1cf28c33b112522c982e5047 | 19900101000000 |
DarkKobold: Great user feedback on an underrepresented genre! Accepting.
Velitha: Processing... first JPC run I've worked on, so may take a bit.