Cars is a DS game consisting of multiple minigames. While the goal of each individual minigame varies, the main goal of the game itself is to complete the Piston Cup, and win against Chick Hicks.

Game objectives

  • Emulator used: DeSmuME_0.9.11_x86
  • Fastest time completion

Comments

When the movie Cars 3 was announced, I decided to "celebrate" by making a TAS of this game. The DS version was chosen because I actually played the game before, so I'd thought it'd be "easier". Due to terrible memory, I accidentally started the first several minigames with DeSmuME 0.9.11, which has save bugs. If anyone has trouble replaying the file, delete the save file for this game in the battery folder. Be sure to pause as soon as the movie is played, then make a savestate at the first frame, and immediately reload it again! Sorry about that.

Minigame comments

Gesundheit!

Rounds: 3
For the first minigame, the purpose is to dodge cars while you reach the end point with 3 other pals. The only things that are actually manipulatable is lag and the car spawns. This minigame almost made me want to quit TASing this. Sorry for the 4 minutes of boredom.

Flo's V6 Cafe

Rounds: 4
In Flo's V6 Cafe, you're tasked to quickly refill the patron's gas by rubbing them with the stylus. Each have a time limit, so they must be done quickly or else they'll leave. Flo's cafe has 16 car slots, and while you're supposed to rub the cars multiple times, in a TAS this could be done in ~3-5 frames in general. Like the previous minigame, I'm able to manipulate their placement. Moving around may cause lag, so I try not to make them spawn in such a way that it lags when I move to/away from them.
Moving back and forth between stalls pauses thier timers. Since the minigame will only proceed after the round's amount of cars filled is reached, I messed around a bit with the later rounds to create a sense of "emergency". This does not lose time unless you reach 6 cars at once, which is the max amount of cars which can appear at one time.

That Blinkin' Light

Rounds: 4
The streetlight blinks in a random order, and you're supposed to follow said order. Each round has it's own 3 rounds. I manipulated the light pattern by delaying when to tap in order to avoid the same light blinking twice in a row. If a light blinks twice in a row, I'm unable to click on it again for a while. The only other thing to look out for is making sure the stoplight doesn't swing too much, else it makes certain lights unclickable.

Piston Cup 1

Laps: 6
Unlike most racing games, the goal here is to KO Chick Hicks within the given number of laps. The first race has 6 laps. For this and all other cups, every 2 laps, you are taken to the pit to replace your wheels. As that takes far too long, I instead KO Chicks within 2 laps. This is one of few moments in the game where it's mostly TAS-only.
Each of the 4 wheels starts with 255 HP. Getting hit loses 10 HP for a specific wheel, allowing me to inflict 20 damage every cooldown. Since me and the opponent both have the exact same health, to avoid killing myself too soon, I push Chicks towards other cars as well.

Highway Hassle

Rounds: 5
A straightforward minigame where you toss colored trophies to their corresponding corners. The only main thing to watch out for is to not tap them to early, since this glitches them and makes them disappear. I'm sorry for the lackluster minigames so far. It's more hectic in real time than in frame advance.

World's Best Backwards Driver

Rounds: 5
The goal of this minigame is to collect "stars" by launching Mater backwards up a ramp. The stage is won if the target amount of stars is achieved. Getting the bonus stars by landing on the purple strip in the meter is only worth it after round 1 due to the increased height along with lag. The hardest part of this minigame was reducing the lag due to the bonus stars.

Fishin' Mater

Rounds: 5
Here you play as Mater, using his hook to pick up garbage along the river. If an object reaches the right of the screen, it'll warp back to the left after a while. The order of objects fished was chosen such that there's no delay after finishing reeling in the current trash. If the circle at the bottom turns red, the line breaks, so I'm forced to delay 1 frame for heavier objects to make it green again.

Piston Cup 2

Laps: 8
Despite the different map layout shown in the upper right corner, the gameplay remains the same. In others, despite showing a rectangular arena, for this round you still drive straight ahead without ever turning. While we both have the same amount of health as before, Chicks can now use a side tackle move that inflicts 50 damage per wheel. This makes the previous strategy trickier.
A minor note: for some reason, after the first cup, it appears it's faster to start the Piston Cup at the car selection screen with "A" rather than the stylus.

Casa Della Tires

Rounds: 5
I'm supposed to throw tires by flicking the stylus to form a straight pile. When the pile is low, I'm able to throw once every 108 frames or so (taking account the fact if I threw early now, the next tire would have to be delayed before thrown.) As the pile reaches 25 tires, the wind starts having a larger effect, forcing me to wait up to 10 frames before tossing.
By the way, even with the wind, you're still unable to toss 2 wheels back to back without waiting 100+ frames. Oh, and you toss straight up always; there's no way to throw "diagonally" to mass spam tires meaningfully.

Ramone Style

Rounds: 5
Basically, Blinkin' Lights minigame but with music. This time, each round has 5 sub-rounds. I'm also unable to speed the dial up, so speedwise, it's slower than Blinkin' Lights. So "enjoy" the 25 rounds of dancing cars I guess. Sorry about that.

Tractor Tippin'

Rounds: 3
You move around as Mater, using the mic to wake up the tractors while avoiding Frank, the giant red tractor. Because of how slow Mater is, I try to route it such that he won't backtrack. This is also the reason I initially moved backwards in round 3.
Unlike most of the other minigames, this one does not unlock new rounds for this after the first completion.

Piston Cup 3

Laps: 10
While the method of knocking Chicks out is the same as before, I'm unable to splice the previous Cup inputs due to difference in the cars that appear here. Also the racetrack is now ramp shaped.

The Drive-In

Rounds: 5
This minigame is a sliding puzzle. You move cars around to clear a path for Lighting to rejoin his friend. Now, while this may sound like a "easy" minigame to TAS, it turned out that this minigame requires plenty of luck.
When you start the minigame at the first screen, the entire 5 rounds are determined at once. The only manipulation between rounds is the color of cars which appear; the puzzle itself remains fixed. That means I'm forced to delay to entering the minigame at the intro screen to change the puzzle order. Additionally, while rounds 1-4 all share the same "pool" of possible puzzles, round 5 has it's own pool to choose from.
I made a list of each possible puzzle, and there appears to be 10 different puzzles in rounds 1-4, and 7 unique ones exclusive to the last round. I named them by the moves needed, and made a list of the first 99 frames to delay: https://docs.google.com/spreadsheets/d/1Hc8PwEJaGfee_QsRWfSCVj0Am6XfURmP-XeinDqC_Y0/edit?usp=sharing
From that list, you can see that each "group" of rounds will not repeat the same type of puzzles; Eg. the puzzle that needs 6 moves to solve may appear twice, but it will be a completely different layout that also needs 6 moves. Each additionally move generally costs ~8-10 frames more, so delaying too much will actually end up losing time. For reference, I made a google drive folder showing each possible puzzle: https://drive.google.com/open?id=0B-2O13fpsnI4U2xRc1BRN3B1SzA
This is also the reason why I took the one with 46 moves, rather than wait longer for a better set.

Hydraulic Jump Jam

Rounds: 4
Here you touch the screen when Ramone is at the bottom to make him jump up high. Points are rewarded based on height, and if the correct shape is drawn, an additional 500 points are rewarded. Points for the height are capped at the height of 1000 in the sign, so to reduce the time landing, I always try to jump the minimum amount.
When you get the shape to draw at the very top height, I waited a bit before drawing to reduce lag.

Willys Butte

Rounds: 4
You control Lighting, racing against Mater backwards for 3 laps. Each additional round adds more obstacles, but the distance is the same. Moving around does not lose time, so I drove around like a drunk.
To migate lag, each round I drove into Mater to push him offscreen fast. Jumping over obstacles slow you down, so I took frequent near misses to avoid them instead.

Piston Cup 4

Laps: 12
In the final race against Chick Hicks, the racetrack is now triangular. Chicks is also more aggressive in his attack frequency. Luckily, the trick with trapping him behind another car prevents him from attacking you, so I initially waited a bit before striking. After this race, the credits roll.

Fog: Judging.
Fog: You win! The game play was quite boring, but this seems well optimized.
Accepting for Vault.
feos: Pub.

adelikat: This movie suffers from the save ram bug that affects all Desmume 9.11 movies. To sync: delete the save file, open desmume, open the rom, open the movie and quickly pause, create a savestate and load that savestate, and it should sync from there.


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15628
Location: 127.0.0.1
This topic is for the purpose of discussing #5551: jlun2's DS Cars in 36:31.69
Skilled player (1743)
Joined: 9/17/2009
Posts: 4986
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I'll make them temp encode, since sync is tricky. Also lua script I used to display things: Download cars.lua
Language: lua

--[[ 14 00000 0228AABA b s 0 car 1 00001 0228B1DA b s 0 car 2 00002 0228B67E b s 0 car 3 1 00003 0228BB0A b s 0 car 4 00004 0228BFBE b s 0 car 5 00005 0228C42E b s 0 car 6 00006 0228C8CA b s 0 car 7 00007 0228CD56 b s 0 car 8 00008 00000000 S S 0 ---------------------------- 00009 0228D1E2 b s 0 car 9 0000A 0228D66E b s 0 car 10 0000B 0228DB12 b s 0 car 11 0000C 0228DF9E b s 0 car 12 0000D 0228E452 b s 0 car 13 0000E 0228E8C2 b s 0 car 14 0000F 0228ED5E b s 0 car 15 00010 0228F22E b s 0 car 16 car 16 - car 15 = 4D0 car 15 - car 14 = 49C car 14 - car 13 = 470 car 13 - car 12 = 4B4 car 12 - car 11 = 48C car 11 - car 10 = 4A4 car 10 - car 9 = 48C car 9 - car 8 = 48C car 8 - car 7 = 48C car 7 - car 6 = 49C car 6 - car 5 = 470 car 5 - car 4 = 4B4 car 4 - car 3 = 48C car 3 - car 2 = 4A4 car 2 - car 1 = 720 02170590 pointer? this value + 818 is car 1 state +0x1A for meter ]]-- local pointer_flo = 0x02170590 --Pointer for Flo's VB Cafe minigame local car_offset = {0x818, 0x720, 0x4A4, 0x48C, 0x4B4, 0x470, 0x49C, 0x48C, 0x48C, 0x48C, 0x4A4, 0x48C, 0x4B4, 0x470, 0x49C, 0x4D0 } --Add to each other, starting from pointer + 0x818 for car 1 local car_states = {0,0,0,0,0,0,0,0}--addresses of states local color = {"Blue","Yellow","Green","Green"} function update() local ptr1 = memory.readlongsigned(pointer_flo) if ptr1 ~= 0 then car_states[1] = ptr1+car_offset[1] for i = 2, 16 do car_states[i] = car_states[i-1] + car_offset[i] end end end function flo_fn() local ptr1 = memory.readlongsigned(pointer_flo) if ptr1 ~= 0 then update() for i = 0, 7 do local state = memory.readbyte(car_states[i+1]) local hp = string.format('%.6f',memory.readdword(car_states[i+1]+0x18)/4096.0) gui.drawtext(0,0+10*i,"Car"..i..": "..state.." "..hp,color[state]) end for i = 8, 15 do local state = memory.readbyte(car_states[i+1]) local hp = string.format('%.6f',memory.readdword(car_states[i+1]+0x18)/4096.0) gui.drawtext(120,0+10*(i-8),"Car"..i..": "..state.." "..hp,color[state]) end end end function piston_fn() --[[4 tires: Up left, Up right, Lower left, Lower right. All start at 255 HP "Real addresses" Cup 1 local Mcqueen = {0x0221B8DC, 0x0221B8DD, 0x0221B8DE, 0x0221B8DF} local Chicks = {0x02232A48, 0x02232A49, 0x02232A4A, 0x02232A4B} Cup 2 local Mcqueen = {0x022018AC, 0x022018AD, 0x022018AE, 0x022018AF} local Chicks = {0x02231FAC, 0x02231FAD, 0x02231FAE, 0x02231FAF} Cup 4 local McQueen local Chicks = {0x02231E50, 0x02231E51, 0x02231E52, 0x02231E53} ]]-- local Mcqueen = {0x021FDF94, 0x021FE26C, 0x021FE3EC, 0x021FE56C} local Chicks = {0x021FEC6C, 0x021FEE08, 0x021FEFA4, 0x021FF140} local coord = {0,20,0,20,10,10,20,20} local total_hp = 0 local total_hp2 = 0 gui.drawtext(0,0,"McQueen","Red") gui.drawtext(60,0,"Chicks","Green") for i = 1,4 do local hp = memory.readbyte(Mcqueen[i]) local hp2 = memory.readbyte(Chicks[i]) total_hp = total_hp+memory.readbyte(Mcqueen[i]) total_hp2 = total_hp2+memory.readbyte(Chicks[i]) gui.drawtext(coord[i],coord[i+4],hp,"Red") gui.drawtext(coord[i]+60,coord[i+4],hp2,"Green") end gui.drawtext(0,30,"Total:"..total_hp,"Red") gui.drawtext(60,30,"Total:"..total_hp2,"Green") end function sherif_fn() local hook = 0x021F3598 gui.drawtext(0,0,"Hook Y: "..memory.readdword(hook)/4096.0) end function tractor_fn() local Matter_X = 0x021EBA8C local Matter_Y = 0x021EBA90 gui.drawtext(0,0,"X: "..memory.readdword(Matter_X)/4096.0) gui.drawtext(0,10,"Y: "..memory.readdword(Matter_Y)/4096.0) end Z_Best = 0 function hydro_fn() local color = "Yellow" local Z = memory.readlongsigned(0x021EAFD4)/4096.0 -- Z --local Z2 = 0x021EAFD8 -- Z (score check) local Z_Speed = memory.readlongsigned(0x021EAFDC)/4096.0 -- Z Speed local Press = memory.readbyte(0x021EAFEC) --Press with stylus at 1 if (Z_Best <Z> 0 then color = "Green" else color = "Yellow" end gui.drawtext(0,0, "Z: "..Z.."("..Z_Speed..")",color) gui.drawtext(0,10, "Highest: "..Z_Best,color) end function willys_fn() local goal = 5762240/4096.0 --The progress meter resets at this value. Convert it to fixed point local progress = memory.readlongsigned(0x021EB420)/4096.0 local speed = memory.readlongsigned(0x021EB42C)/4096.0 gui.drawtext(0,0, "Percentage: "..(progress/goal*100).."%") gui.drawtext(0,10, "Progress: "..progress.."("..(progress*4096)..")") gui.drawtext(0,20, "Speed: "..speed) end gui.register(piston_fn)
Looks really bad, because I can't seem to figure out mingame IDs. So you have to manually change the last line to change the display.
Experienced player (691)
Joined: 11/23/2013
Posts: 2239
Location: Guatemala
I can't wait for the Cars 2 TAS (and the encode).
Here, my YouTube channel: http://www.youtube.com/user/dekutony
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15628
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [3443] DS Cars by jlun2 in 36:31.69