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??

Comments

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!

Area-Specific Comments

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.

Other Comments

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.
FilenameSizeMD5Timestamp
adl.drv8040d1ea243124c1a982d68373bb8cada13019900101000000
cms.drv373483d623646c2c4b46c612e7c4348d8fcc19900101000000
ibmkbd.drv537ce095142a4b231a0e5d2e4662b6ea82919900101000000
ibmps1.drv4364d0ed61a57384da298b3996363c1b0fe119900101000000
install.bat96f8e3f6b5c8210ecfa62de5f53072768919900101000000
install.exe21239aa910d272f361036d6bf0831147af8ca19900101000000
install.hlp7950b94b822fe006705bc99cb086d54fd47619900101000000
install.scr3462ef4fdee846ccd9be38419a6e77d87e0519900101000000
joystick.drv607c75b73974160ff652a909a0d01f9721419900101000000
mt32.drv19891d7fc0680b9539e93a47221dee01c9f619900101000000
mtblast.drv3685f57f0c81cdfa68f286191ca6961b1fbb19900101000000
readme196f33c7738c90ab5134894e568c28721ad19900101000000
resource.000173330b0fd6032e789321f5c3a60d8bf3d943119900101000000
resource.00112472153739053944c2b9f921a86c22275ea3d719900101000000
resource.002121837323d4c18f693823f821fadb02e10ce06119900101000000
resource.00312401304841fcc5643305b25da109bac17a594619900101000000
resource.00412006317ca0a3722b2a51686fbfe576a341534919900101000000
resource.00510532942bb5e789e9d18b5171c4acab6d9d2f4919900101000000
resource.cfg1283d60f01d4adefa13c7693624c01bfaf119900101000000
resource.map59286ea4f337d8d9a5c306f343e86861e9d819900101000000
scidhuv.exe10493787e84df2af6cc8650a4f2f9636b1206319900101000000
script.000137028ae526b127371cd7fcd60c1711d2b31f19900101000000
script.119762b101aef83fa0deaec997e9b47413c7a119900101000000
script.1204103a2f3311b5ac633e1769f28448c9d17619900101000000
script.4051045026b95a02d4db47e227096284ff8aeed519900101000000
script.41010334fab1c7f2ad1537619759e7049ff11b3419900101000000
sierra.bat256fa14b7343605530869c747caaec43aa19900101000000
sierrah.bat22cb7d55af740b783ef63545a7fc462d0e19900101000000
sndblast.drv97381a4b2c2e76e1d91d7b037fa2f1db7d2d19900101000000
sq4.bat32207d3bd3a6ae8026d2da84dce6adbf1b19900101000000
sq4.uhs9290592361bf99f09101f07ef8ddd71159e419900101000000
sq4h.bat2936d0f1e5ec6b11629c432983c628e80919900101000000
sq4rs.bat31b3f20a957896de527b2132099e573cef19900101000000
std.drv14681d1626f37396996c94ac51e198b7e2ee19900101000000
text.0001668ed1b5b427985d1e3b8c26d76fd14be3f19900101000000
text.40553a6a2456ab79492026755e9529860aba019900101000000
text.410539d4805b0941eb48d7317ca15bc8927b919900101000000
version77233646488ab8085557a4b56de9b1bd919900101000000
vga320.drv4426cc8e04ded65a8f5d58a2dde1bb4e674f19900101000000
view.9925613de92a199b251f9b9cd261cebbf1e145819900101000000
view.99354822f704aaff9a616347fd4f03befd1ad4919900101000000
view.99422450fefac7c1cf28c33b112522c982e504719900101000000

DarkKobold: Judging.

DarkKobold: Great user feedback on an underrepresented genre! Accepting.

Velitha: Processing... first JPC run I've worked on, so may take a bit.


Editor, Publisher, Player (47)
Joined: 10/15/2021
Posts: 376
For anyone wanting to playback this movie, RESOURCE.CFG in the Space Quest IV files must contain only the following.
videoDrv = VGA320.DRV
soundDrv = SNDBLAST.DRV
kbdDrv = IBMKBD.DRV
mouseDrv = STDMOUSE.DRV
joyDrv = NO
memoryDrv = ARM.DRV
Editor, Publisher, Player (47)
Joined: 10/15/2021
Posts: 376
4K 60 FPS YouTube encode: Link to video
Active player (279)
Joined: 11/21/2023
Posts: 42
Location: RNG Bullet Hell
New shortcut skips 5 minutes. https://www.youtube.com/watch?v=_VKPNAVkrxQ
GJTASer2018
He/Him
Joined: 1/24/2018
Posts: 304
Location: Stafford, NY
alexheights1 wrote:
New shortcut skips 5 minutes.
More specifically, it looks like there's a way to get out of bounds in the hangar and straight into Vohaul's Maze from the start of the run! This would cut out anything to do with the Time Buster 2000 - just get to the hangar, OOB trick to get into the maze, get through it and fight Vohaul, that's it!
c-square wrote:
Yes, standard runs are needed and very appreciated here too
Dylon Stejakoski wrote:
Me and the boys starting over our games of choice for the infinityieth time in a row because of just-found optimizations
^ Why I don't have any submissions despite being on the forums for years now...
Active player (279)
Joined: 11/21/2023
Posts: 42
Location: RNG Bullet Hell
The route was improved even more and the RTA time is now 2:19. https://www.youtube.com/watch?v=YBM90pbaWls