1 2 3 4 5 6 7 8
Joined: 7/6/2012
Posts: 84
Hm I don't disagree with your idea of using a pre-completed file to accomplish 100%; it'd also encourage more team diversity (i.e. requiring more exploration and/or power-based teams), though I'm not entirely familiar with chao placements and strats. It'd also be cool to see the TAS ringcounts for the autoscrolling minigames ;) ( This is all i've managed for ring attacks on console but i'm lazy to do the last 2 )
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
I'd love to start working on Sonic Advance 3 TASing. I probably wouldn't do a full game run, maybe only individual levels but still I'm wondering if anyone has any information on important values/addresses to watch. Also I agree with Paused here, I really do feel that a full game TAS with all characters unlocked would provide for more entertainment. I for one would love to see Route 99 Act 2 completed with the optimal team (S+C i think) in the fastest possible timing.
Active player (360)
Joined: 12/17/2013
Posts: 74
Location: Argentina
I have him as a future project, can be optimized enough and some zones can be improved, but I'm with 3 current projects at once and leave for later or latest by next year this proyect. I am willing to contribute in this project to help finish it
Current Projects: - GBA: Advance Wars 2: Black Hole Rising Future Proyects: - Genesis games - GBA games
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
GoddessMaria15 wrote:
Is there a lua script or any addresses for Speed and positioning?
local Xvelocity = 0x030015D8
local Yvelocity = 0x030015DA
local Timer = 0x0300094E

while true do

-- gui hud
gui.opacity(0.70)
gui.drawbox(161,3,230,29,"#00008b", "#dcdcdc")

gui.text(165,5, "Xvelocity: " ..memory.readwordsigned(0x030015D8))
gui.text(165,13, "Yvelocity: " ..memory.readwordsigned(0x030015DA))
gui.text(165,21, "Timer: " ..memory.readword(0x0300094E))

vba.frameadvance()
end
Here's the .lua I put together with little to no coding knowledge. I didn't write it myself, I copied it from Mukki's SA2 lua and simply ported in the different addresses for this game. No idea how to search for X/Y position, could anyone help out? Really appreciated. _____________________ EDIT: And here's my first ever attempt at TASing this game: Link to video Not very good, and it loses to nitsuja's 0:39.43 timing (T+S), but this could give real-time speedrunners a good idea on S+C's potential on this stage. EDIT #2: Sorry for the spam, here's another one of Route 99 Act 1 with Amy+Sonic, beats the current TAS by half a second but can be improved a lot more. Link to video And another one - [TAS] Sonic Advance 3 - Route 99 Act 2 (S+C) - 0:34.55 Link to video
AntyMew
It/Its
Encoder, Player (35)
Joined: 10/22/2014
Posts: 425
Dashjump wrote:
No idea how to search for X/Y position, could anyone help out? Really appreciated.
Position is a signed 3-byte int, subpixels is an unsigned byte X pos: 0x030015D1 x sub: 0x30015D0 y pos: 0x30015D5 y sub: 0x030015D4 Since VBA doesn't have a 3-byte read function, you can use this function instead
local function read3bytesigned(addr)
	local hi = memory.readbytesigned(addr + 2)
	local lo = memory.readword(addr)
	return bit.lshift(hi, 16) + lo
end
Just a Mew! 〜 It/She ΘΔ 〜
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
Anty-Lemon wrote:
Dashjump wrote:
No idea how to search for X/Y position, could anyone help out? Really appreciated.
Position is a signed 3-byte int, subpixels is an unsigned byte X pos: 0x030015D1 x sub: 0x30015D0 y pos: 0x30015D5 y sub: 0x030015D4 Since VBA doesn't have a 3-byte read function, you can use this function instead
local function read3bytesigned(addr)
	local hi = memory.readbytesigned(addr + 2)
	local lo = memory.readword(addr)
	return bit.lshift(hi, 16) + lo
end
Thanks, I really appreciate your reply, but how exactly do I add this into my existing lua script? I don't have any knowledge of scripts at all, all I did was copy over another lua and substitute the addresses. As a reference, here's the Sonic Advance 2 .lua script by Mukki, which I used to create the SA3 lua: Edit: I've tried making this. Is it correct?
local Xpixel = 0x030015D1
local Xsubpixel = 0x030015D0
local Xposition
local Ypixel = 0x030015D5
local Ysubpixel = 0x030015D4 
local Yposition
local Xvelocity = 0x030015D8
local Yvelocity = 0x030015DA
local Timer = 0x0300094E

local function read3bytesigned(Xpixel)
   local hi = memory.readbytesigned((Xpixel) + 2)
   local lo = memory.readword(Xpixel)
   return bit.lshift(hi, 16) + lo
end

local function read3bytesigned(Ypixel)
   local hi = memory.readbytesigned((Ypixel) + 2)
   local lo = memory.readword(Ypixel)
   return bit.lshift(hi, 16) + lo
end

while true do

-- gui hud
gui.opacity(0.70)
gui.drawbox(145,3,239,45,"#00008b", "#dcdcdc")

Xposition = memory.readbyte(Xpixel) + (memory.readbyte(Xsubpixel)/256)
gui.text(149,5, "X-Position: " ..Xposition)
Yposition = memory.readbyte(Ypixel) + (memory.readbyte(Ysubpixel)/256)
gui.text(149,13, "Y-Position: " ..Yposition)
gui.text(149,21, "Xvelocity: " ..memory.readwordsigned(0x030015D8))
gui.text(149,29, "Yvelocity: " ..memory.readwordsigned(0x030015DA))
gui.text(149,37, "Timer: " ..memory.readword(0x0300094E))

vba.frameadvance()
end
AntyMew
It/Its
Encoder, Player (35)
Joined: 10/22/2014
Posts: 425
You're misunderstanding functions. The idea is to define it, then use it later on. For example, in the following code, foo is set to 2
local function inc(num)
    return num + 1
end

foo = inc(1)
Anyway, I've rewritten Mukki's script entirely. You can use this instead:
local function GetPosition(addr)
   local pos = bit.lshift(memory.readbytesigned(addr + 3), 16) + memory.readword(addr + 1)
   local subpix = memory.readbyte(addr)
   return string.format('%1.3f', pos + subpix / 256)
end

gui.opacity(0.70)

gui.register(function()
	gui.drawbox(156, 3, 230, 45, "#00008b", "#dcdcdc")
	gui.text(160, 5, "X Pos: " .. GetPosition(0x030015D0))
	gui.text(160, 13, "X Vel: " .. memory.readwordsigned(0x030015D8))
	gui.text(160, 21, "Y Pos: " .. GetPosition(0x030015D4))
	gui.text(160, 29, "Y Vel: " .. memory.readwordsigned(0x030015DA))
	gui.text(160, 37, "Timer: " .. memory.readword(0x0300094E))
end)
Just a Mew! 〜 It/She ΘΔ 〜
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
Anty-Lemon wrote:
-snip-
Thanks a lot! Yeah, I don't have any knowledge of coding/programming in the slightest. It's hard to start learning everything from scratch too. Once again, you've really helped me a lot, thank you.
Joined: 7/6/2012
Posts: 84
Nice IL TAS's, DashJump. For reference, those team selections are already known and implemented in TSC ILs, and also some runs I do. For reference you can watch my ILs: https://www.youtube.com/playlist?list=PL3pBMjeS6rYhtATXYSp6sMrRoZuNBzOJV Werster has a set of ILs too, which I learned off of: https://www.youtube.com/playlist?list=PLKdCHbtiZdhDpMCXisUDPj48dX6aaE1vn Also, for Ocean Base 3, have you considered using cheese for the speed shoes? I do that in real time runs and it's consistent, but I'm not sure if there's a way to use cheese while maintaining boost mode. Also, unrelated, but it'd be great if you could somehow replicate this and figure out why/how this happens: https://www.youtube.com/watch?v=6Gpzeugs6fM I can imagine that it would be faster for chaos angel 2. Good luck!
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
kirbymastah wrote:
Nice IL TAS's, DashJump. For reference, those team selections are already known and implemented in TSC ILs, and also some runs I do. For reference you can watch my ILs: https://www.youtube.com/playlist?list=PL3pBMjeS6rYhtATXYSp6sMrRoZuNBzOJV Werster has a set of ILs too, which I learned off of: https://www.youtube.com/playlist?list=PLKdCHbtiZdhDpMCXisUDPj48dX6aaE1vn Also, for Ocean Base 3, have you considered using cheese for the speed shoes? I do that in real time runs and it's consistent, but I'm not sure if there's a way to use cheese while maintaining boost mode. Also, unrelated, but it'd be great if you could somehow replicate this and figure out why/how this happens: https://www.youtube.com/watch?v=6Gpzeugs6fM I can imagine that it would be faster for chaos angel 2. Good luck!
Yeah, I subscribed to you a few days ago, I think. I probably won't be doing any more Sonic Advance 3 TASes because nitsuja already has really well-optimized runs on most levels. I'll only do a TAS of a certain stage it I realize that another team is better at that stage (like how Qwerty used K+A in Ocean Base 2). I tried using the Chao attack for the shoes, but I couldn't maintain boost mode that way. Although I'm not sure if losing boost mode could help save time. It seems that TAS-wise, T+S still wins over S+C on this stage (as it probably should, as T+S is in my opinion the most broken team in this game). I couldn't replicate that rail glitch, or rather, I couldn't be bothered to find out the proper position to do the glitch, lol. To me, it looked like you have to somehow get your character (not Knuckles) onto the rail somehow, while still riding on Knuckles' back.
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
Link to video Hi everyone, I've decided to start working on a 100% TAS of this game. Hoping to get some feedback from viewers as I post my WIPs here. My strategy in each zone, in a nutshell, would be: 1) collect all Chao in each Act 2) collect the Zone Chao 3) go back to one Act, get a key 4) complete the Special Stage with as many rings as possible, get the Emerald 5) defeat the zone boss. Does anyone know if the key appears immediately in the level after all 10 Chao are collected? If that works, I won't have to reenter the level to get the key. Not related to my run, but I've tried playing back nitsuja's any% run on vba, and the emulator doesn't recognise the Reset function somehow. When he resets after the Route 99 boss, my emulator just runs the movie without the reset and it desyncs from there. Anyone can help out with this?
Joined: 5/9/2005
Posts: 752
Ooo, really excited to follow this. For your key question, they do spawn in acts as soon as the Chao are all collected. No need to replay acts. So of course map Chao should be grabbed before entering the 3rd Act you do of a Zone. I'm assuming from that question you are not aware of the SDA run by mike89 here. (or on his YouTube.) Even if you don't watch the video, I'd check his notes as I do recall it has some info on how the keys seem to spawn. As for your issues with the VBA and the reset, some versions of the emulator just don't support resets in the movie recording. When I have a sec I'll try and find you one that did. I forget if it was a standard feature in the later builds or not. Edit; Looking at my files back at home, I've always had the 1.7.2. re recording v19.2 version for messing around with his run. But after a quick test knowing that, the first download under 'old downloads' at the emu resources on here, http://tasvideos.org/EmulatorResources/VBA.html , the 1.7.2 v19.4.zip, got past R99 boss to the character select and back to Sunset hill. I'm sure there is a better option, but till someone more knowledgeable gets back to you should be good to go with with that.
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
Thanks for the info! I really appreciate your effort to check out the emulator version. I'll test it out soon! I was stupid enough to not do my research before starting on the run, and I only saw mike89's run after I uploaded that WIP. I've already done some hex editing and do R99 Act 3 first, then followed by 2 and 1 in that order. Will be replacing my previous video with a fully completed Route 99 zone (link will be updated in my previous post). The Route 99 boss was an absolute nightmare to optimise. I only managed to save 3 frames from nitsuja's run of the same boss, due to discovering a trick where jumping higher into the G-mel boss arena makes him spawn earlier. It's a shame that the maps on TSC don't show key locations. I'll probably have to collect all the 10 chao in a zone during a test run then map out all the possible key locations myself.
Joined: 7/6/2012
Posts: 84
Dashjump wrote:
I only managed to save 3 frames from nitsuja's run of the same boss, due to discovering a trick where jumping higher into the G-mel boss arena makes him spawn earlier.
Took me forever to figure out how quartz and RPGnutter got 0:58 in the route 99 boss... Jumping before the gemerl fight seemed to save like 0.5 seconds as opposed to just running into the fight. I suspect this is the case for all gemerl fights, but I always jumped to accelerate in the other fights so it was never an issue outside of route 99 boss. So how do you plan on timing this run? I mentioned this in a youtube comment but I might as well bring it up here. Nitsuja's any% TAS prioritized clearing each level with the fastest in-game time, which encouraged a bit more team diversity, so it'd be nice if you followed that. However, there's a good chunk of content outside the main acts, so I don't think that method of timing is really the best idea in the world.
Joined: 5/9/2005
Posts: 752
A pleasure to help out how I can. It is a run I've been looking forward to seeing.
Dashjump wrote:
It's a shame that the maps on TSC don't show key locations. I'll probably have to collect all the 10 chao in a zone during a test run then map out all the possible key locations myself.
Just to save you a little time in having to collect the Chao to map out the 2 sets of Key spawns, nitsuja did post a .vbm of the Nonaggression boss fight (which of course has all Emeralds and thus Chao already collected.) in his submission notes for his Any%. Can just fast forward through the fights and credits and have all acts spawning keys ready to test. Dehacked link of it is here; http://dehacked.2y.net/microstorage.php/info/1856/Sonic%20Advance%203%20%28U%29%20%28M6%29nonaggression.vbm On the topic, of ingame vs real time, I'd personally prefer in game again for the diversity as Kirby mentioned, though I can understand choosing the alternative.
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
@kirbymastah: it doesn't save that much time, I'm afraid. The idea is to scroll the screen higher so Gmel kinda "drops" quicker. Anyway, the time savings from that alone is very minimal compared to your positioning (and the boss's positioning) after the last hit. Hence why it took me way over 2 hours to perfect the Route 99 boss, haha :P @Paused: Yeah, I'm already using a 100% game completed snapshot to map out the important keys. As I'm typing this I've already completed Sunset Hill 1 and 2 (both stages each have timings of 30.XX). About the movie objectives, I'll be following nitsuja's same goals, which are:
Goals In order of highest to lowest priority, the goals were: beat all levels from a new game without playing any level twice fastest (sum of) in-level times fastest time
And of course, with a 100% completion on top of that list!
Joined: 7/6/2012
Posts: 84
Dashjump wrote:
@kirbymastah: it doesn't save that much time, I'm afraid. The idea is to scroll the screen higher so Gmel kinda "drops" quicker. Anyway, the time savings from that alone is very minimal compared to your positioning (and the boss's positioning) after the last hit. Hence why it took me way over 2 hours to perfect the Route 99 boss, haha :P @Paused: Yeah, I'm already using a 100% game completed snapshot to map out the important keys. As I'm typing this I've already completed Sunset Hill 1 and 2 (both stages each have timings of 30.XX). About the movie objectives, I'll be following nitsuja's same goals, which are:
Goals In order of highest to lowest priority, the goals were: beat all levels from a new game without playing any level twice fastest (sum of) in-level times fastest time
And of course, with a 100% completion on top of that list!
If I were you, I'd probably finish TAS'ing a level that needs Sonic in the lead to unlock a character. In other words, don't forget :P
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
Link to video Part 2! I've already completed Sunset Hill zone (yeah, I'm really free at work :P). I originally wanted to do Acts 1 and 2, then end with Act 3. This is because one of the key locations is right beside the 3rd Chao in Act 3. However I learned the hard way that, somehow, keys near your character don't seem to "spawn" immediately, no matter what. The only way would be to die and respawn at a checkpoint to make the key appear, which is a lot slower. This forced a re-route, doing acts 3-1-2 in that order. The act 1 and act 3 timings bother me somehow, being 0:30.23 and 1:00.82 respectively (dammit, why can't I get a nice sub?!) I've no plans to redo them yet, as I've spent quite a lot of effort optimizing them. For the special stage, the 2nd part has a series of 3 grey enemies lined up in a row, killing one of which will give you 5 rings. I've tried, but it seems impossible to kill more than one in any row. Finally, the boss fight - yet another absolute nightmare. The first 7 hits are child's play, but the last hit is so damn random. Depending on how you attack him on the last hit, he can bounce around randomly after dying, causing a lot of variation to the final time. Miraculously, I manage to pull off a hit which caused a much shorter delay before regaining my controls. I'm really satisfied with the final time (0:34.40, compared to nitsuja's 0:34.72). Another small point I'd like to add for the boss fight is that I intentionally took a few hits, to abuse the invincibility to land some tricky hits much easily (unlike nitsuja, who didn't take damage even once in the boss). Thanks for reading my long rant, hope you enjoy my WIPs! :D EDIT: I just noticed the delay in pressing A to exit the dialogue at 2:10 (video timing). This problem came about because of hex editing. Specifically, I originally started with Act 1, followed by acts 2 and 3. The chao collected at 2:10 was the 1st chao i collected, and somehow the dialogue would scroll some 30 frames longer than it would if I picked it up later. I tried hex editing away the 30-frame delay, and this unfortunately caused the Sunset Hill boss to desync because of randomness. I had to re-instate the delay to make it sync back.
Joined: 7/6/2012
Posts: 84
I'm pretty sure how far the sunset hill boss gets knocked back is random with each hit so yeah it's really obnoxious to fight him... You probably already know about my special stage ILs, but in case you didn't, it's on my IL playlist - https://www.youtube.com/playlist?list=PL3pBMjeS6rYhtATXYSp6sMrRoZuNBzOJV For Special Stage 3, I have no idea if it's possible to get a 269 or not; there's a ring I miss when bopping the second black bomb, but I've never been able to get that. Perhaps you can find out a way to do that? Special Stage 4 could probably be improved in my IL, but I've never been able to get those rings I missed. Special Stage 5 should be maxed at 275 Special Stage 6, 234 is possible Special Stage 7, eff this
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
I managed to get that ring you missed in SS3, for a total of 269. Looks like you just need really good positioning. No uploads today, but I'm done with Ocean Base zone except the boss (which I'm dreading). Timings so far: Ocean Base 3 - 0:50.53 (T+S) Ocean Base 1 - 0:45.07 (K+T) Ocean Base 2 - 1:14.13 (S+T) Ocean Base boss - 0:39.10 (S+K) >> improved 2 frames from nitsuja's TAS This will be the first (and I hope the only) zone which I use 4 different teams, one for each act and the boss. Kind of a bummer because this is also the most inconveniently structured zone overworld...
Joined: 7/6/2012
Posts: 84
Dashjump wrote:
Timings so far: Ocean Base 3 - 0:50.53 (T+S) Ocean Base 1 - 0:45.07 (K+T) Ocean Base 2 - 1:14.13 (S+T) This will be the first (and I hope the only) zone which I use 4 different teams, one for each act and the boss. Kind of a bummer because this is also the most inconveniently structured zone overworld...
Dat team diversity :O
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
Progress so far, listing levels in order (will update this post): Route 99 Act 3 - 0:48.68 (T+S) Route 99 Act 2 - 0:44.05 (T+S) Route 99 Act 1 - 0:40.07 (T+S) Route 99 Boss - 0:57.28 (T+S) Sunset Hill Act 3 - 1:00.82 (S+T) Sunset Hill Act 1 - 0:30.23 (T+S) Sunset Hill Act 2 - 0:31.93 (T+S) Sunset Hill Boss - 0:34.40 (T+S) Ocean Base Act 3 - 0:50.53 (T+S) Ocean Base Act 1 - 0:45.07 (K+T) Ocean Base Act 2 - 1:14.13 (S+T) Ocean Base Boss - 0:39.10 (S+K) Toy Kingdom Act 3 - 1:04.88 (S+T) Toy Kingdom Act 2 - 0:53.42 (T+S) Toy Kingdom Act 1 - 0:39.83 (T+S) Toy Kingdom Boss - 1:23.47 (T+S) Twinkle Snow Act 1 - 0:56.17 (T+S) Twinkle Snow Act 2 - 0:53.62 (T+S) Twinkle Snow Act 3 - 0:52.72 (T+S) Twinkle Snow Boss - 0:36.73 (T+S) Cyber Track Act 2 - 0:36.23 (T+S) Cyber Track Act 1 - 0:37.45 (K+S) Cyber Track Act 3 - 1:28.33 (S+T) Cyber Track Boss - 0:46.62 (K+A) Chaos Angel Act 2 - 1:35.90 (S+C) And the special stages ring counts: SS1 - 240 SS2 - 263 SS3 - 269 SS4 - 284 SS5 - 275 SS6 - 324 Link to video Part 3 + part 4! Time for more commentary... The beginning of OB3 may look a little sloppy, but that's because I have to wait for the moving block cycle anyway. That underwater stretch with the 2nd Chao took me a really long time to optimise and it's one of the many times I wish I used S+T instead, but T+S is definitely faster because of the many boost jumps. OB1 requires Knuckles, and I touch a checkpoint and abuse death to save both real time and a huge chunk of in-game time. OB2 was pretty straightforward, S+T to make high jumps. I also collect the key in OB2 instead of OB3. Both levels' keys don't take up any extra time to collect, but I have to do OB3 first to avoid an additional reset to change teams. As for the Ocean base boss, it was particularly difficult to manipulate him to be on the far right corner for the last hit (that's why there's a slight delay in the 7th hit). Managed to save 2 frames from nitsuja's timing. Toy Kingdom required a lot of route planning. I mapped out a few key locations in the 3 acts, and found that act 1 and act 3 both have convenient key locations from the last chao to the goal ring. But act 3 requires a team switch to S+T, so I do act 3 first to avoid an additional reset back to T+S for the boss. For the zone boss, I actually had fun doing this. nitsuja used delayed hits at certain points to manipulate his attacks, but I instead land every hit as early as possible while using other movements to manipulate the attacks. I also do the "always kill the 3 small enemies popping out" thing that nitsuja did, and torture Sonic to death wherever possible. I managed to save a whopping 15 frames on this boss. That's it for today! Twinkle Snow zone looks really difficult to run through, but I'll try my best. Will map out some keys before working on it.
Joined: 5/9/2005
Posts: 752
Wow Dashjump, you're racing through this, and doing quality work as you do. Looking great. I hadn't considered death abuse in this at all; good thinking. Somewhat hoping you get to show off more than Tails/Sonic in Twinkle Snow, but what I recall little chance of that.
Dashjump
He/Him
Experienced player (578)
Joined: 8/18/2012
Posts: 82
Yeah, my schedule is kinda free at the moment, so I'm putting quite a lot of time into this TAS daily. If everything goes well it should be done in 2-3 weeks at most. I would love to use other teams wherever possible too, but ultimately T+S is always faster because of 1) their faster spindash-fly-land-jump start, 2) Ability to "control" jumping distance with flight, without losing any speed, 3) that broken boost-off-downhill glitch, which combined with flying, makes T+S the most broken team in the game. A+S may be faster in certain stages because of the hammer attack boosting springs' velocity and jump height (which I've done in a separate Route 99 Act 1 IL). However I noticed that this isn't very useful for every spring; I know for a fact that the springs in Sunset Hill Act 2 (which uses A+S for the real time record) only give you a burst of speed for 1 frame. Adding a reset to switch to a slower team only piles on more real time and in-game time, which I feel isn't worth the little bit of entertainment. I'd rather do IL TASes like my first few uploads, showing different teams.
Joined: 5/9/2005
Posts: 752
Do you mind posting the input files for those ILs? I'd just like to see what you did.
1 2 3 4 5 6 7 8