Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I finally ended the 2nd world! I also managed to save 1 frame in the 1st world. Currently 641 frames ahead of the published run. WIP
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
New Wip! ChangeLog: *World 3 Driving stage(The Long Road) (almost) same as before *Stage 3-2 (On the Walk Again?) redone with new strategy *Added brief Pause at Stage 3-4 (Yoodle a Sea Doo) that replaces a slight delay during the next stage *Boss Battle redone *Applied Pause Trick to save one frame.
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Sad, Happy? News: I found yet another improvement to the run, this time for every single boss battle. Unfortunately, when I tried to hex it in, it caused more lag in every stage, thus meaning I have to redo worlds 2 - 4 again. The improvement btw, involves pausing during a Boss Battle to speed it up. Thanks to this trick, it is now possible to enter a battle regardless of the length of the battle intro. Edit: Wip
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Great news! The newest VBA version removes alot of lag from the game! I know emulation flaws shouldn't count as an "improvement", but since it is supposingly more accurate, I guess I can use it! Here's a WIP of the first world made from scratch, using all the tricks I know so far along with vba-v24m-svn422. Edit: And here's world 2.
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I'm about to finish World 3! I'll post the WIP once I'm done, but for now, here's a screenshot of frame 37447: Edit: World 3 done.
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I'm almost done World 4! It's pretty much the same as the published run, however. Edit: Done World 4!
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Am I the only one who is interested in Spongebob? LOL Anyway, I'm almost done world 5. One more thing. I discovered that the run is HIGHLY improvable. It not due to unused tricks or sloppiness however. I found out that completing a stage differently, despite ending the same frame, causes different amounts of lag in the future. It could be in the next stage, or even the next world. This seems to happen alot in the autoscrollers, giving me another reason why to hate them; the can't be easily hexed in. >.>
Editor, Experienced player (608)
Joined: 11/8/2010
Posts: 4012
I haven't been watching the WIPs, since I've been working on my own TAS, but I'm glad you're making such progress improving the published run! I'm planning to watch the run when it's done, so I look forward to the submission! It's too bad the autoscrollers cause you so much trouble with lag, but it's a good thing there aren't more of them. The GBA version of Creature from the Krusty Krab is mostly autoscrollers, so I fear that game won't ever make for an interesting TAS. Good luck reducing the lag!
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Thanks for the reply, CoolKirby! I've been trying for at least an hour trying to find an exit or something useful at the OoB areas in the Clyclops battle, but without luck. The WIP is here. I'm going to just fight the boss normally, since I can't seem to find a glitched exit.
Editor, Experienced player (608)
Joined: 11/8/2010
Posts: 4012
How does the game determine if a glitched exit will appear out of bounds or not? Can it be manipulated somehow? (I've never TASed this game, so I don't know how it works.)
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
CoolKirby wrote:
How does the game determine if a glitched exit will appear out of bounds or not? Can it be manipulated somehow? (I've never TASed this game, so I don't know how it works.)
Idk. All I'm sure is that for the same stage, they appear in similar places. For example, I was lucky enough to save alot of frames in the world 4 stage "Trench Bottom" because the glitched exit appeared at a closer spot. In World 3, the stage "Sea Cave" had several glitched exits, but most of them were too far away. So I guess it depends on the stage and luck. Edit: Here's the Wip for World 5.
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I can't find a single glitched exit at the second last stage of World 6. I'll continue on to the last boss. Edit: Ok, done! I'm writing the submission text now.
Experienced player (630)
Joined: 11/23/2013
Posts: 2208
Location: Guatemala
So apparently the Spanish text is the fastest text in this game. https://www.speedrun.com/The_SpongeBob_SquarePants_Movie_GBA/thread/dafua I don't know if it's any faster on a TAS since you have to select the language first at the start of a TAS timed run. It seems a cutscene is missing on the non English versions as well.
Here, my YouTube channel: http://www.youtube.com/user/dekutony
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Kurabupengin wrote:
So apparently the Spanish text is the fastest text in this game. https://www.speedrun.com/The_SpongeBob_SquarePants_Movie_GBA/thread/dafua I don't know if it's any faster on a TAS since you have to select the language first at the start of a TAS timed run. It seems a cutscene is missing on the non English versions as well.
That's awesome. I guess that's one motivating factor to resync it in BizHawk lol
Joined: 7/11/2018
Posts: 6
There's some cool new stuff that us non-TAS runners have discovered. In any level with the wind mechanic, you can glitch yourself into a wall that's to the left of you by just dashing into it at a specific point of the wind cycle. This will transport you to the top of the wall immediately. In the Trench Bottom stage, this trick can be used at the very beginning of the stage to get out of bounds and find the exit trigger fairly quickly. Here's a video of that: https://www.youtube.com/watch?v=pF-mONtCHHo So, I can't say I know a lot about how games actually work, but isn't this out of bounds area the game's RAM? I'm probably too optimistic here, but if that's the case, it might be possible to edit the memory values in that area to achieve some fancy stuff, like a credits warp, for example...
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Nice find. I have no idea if there's any memory corruption OoB, but if anyone could figure it out, it would be nice, since it's possible to go OoB at the very first stage.
Joined: 7/11/2018
Posts: 6
So, I've managed to make my game look like this by fooling around OoB: https://media.discordapp.net/attachments/441010589163323394/534841397455355934/2019-01-15_at_22-08-31.jpg That's memory corruption, right? For a credits warp, the 030025C0 address would have to be manipulated to 3.
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
NoControl wrote:
So, I've managed to make my game look like this by fooling around OoB: https://media.discordapp.net/attachments/441010589163323394/534841397455355934/2019-01-15_at_22-08-31.jpg That's memory corruption, right? For a credits warp, the 030025C0 address would have to be manipulated to 3.
If you ever encounter that again, can you please post which X/Y location did you encounter that from? So far on the first stage, I've seen: * Infinite shell spot at X 65251, Y 1057279 (need to land on an OOB platform to the far left of the stage, then walk a bit to the right to X == 10, fall a bit, then move back left to get there. Jumping and moving left resets the game. * A non reset crash at X 65048 Y 1051344 (Use Patrick's pants and fly left). Edit: Input file reaching it for 2.8 BizHawk https://cdn.discordapp.com/attachments/537350250805985301/1057858832468037662/SpongeBob_SquarePants_Movie_The_USA_OoB_1-1.bk2 * Infinite shell + some wierd downward warp thing at X 58200 Y 1059770. Touching it warps you to 268446719 in Y. The X/Y addresses I used are 0x1642, 0x1702, both in IWRAM. Changing them don't change Spongebob's position though. Do you know any addresses that does? Edit: X: 0x3728, Y: 0x372C seems to work for this purpose (at least for 1st stage I tried). The number is huge in comparison though. Can make a script to fly around and see what other things are there. Download sp.lua
Language: lua

memory.usememorydomain("IWRAM") local Addresses = { display_x = 0x1642, display_y = 0x1702, game_state = 0x25C0, x = 0x3728, y = 0x372C } --function for checking an input with how many frames to delay function inputdelay(inputs, delay) local is = input.get() local start = false if inputs ~= nil and (is[tostring(inputs)] ~=nil) then --console.log(is) --debugging while (delay > 0) do emu.frameadvance() delay = delay -1 end start = true return start end return start end while true do local x = memory.read_u32_le(Addresses.x) local y = memory.read_u32_le(Addresses.y) local display_x = memory.read_u32_le(Addresses.display_x) local display_y = memory.read_u32_le(Addresses.display_y) local x_speed = 6 local y_speed = 16 if (joypad.getimmediate().R == true) then if (joypad.getimmediate().Left == true) then x = memory.read_u32_le(Addresses.x)-65536*x_speed elseif (joypad.getimmediate().Right == true) then x = memory.read_u32_le(Addresses.x)+65536*x_speed else x = memory.read_u32_le(Addresses.x) end if (joypad.getimmediate().Down == true) then y = memory.read_u32_le(Addresses.y)+65536*y_speed elseif (joypad.getimmediate().Up == true) then y = memory.read_u32_le(Addresses.y)-65536*y_speed else y = memory.read_u32_le(Addresses.y) end memory.write_u32_le(Addresses.x,x) memory.write_u32_le(Addresses.y,y) end gui.text(0,20, "X:"..display_x.." Y:"..display_y) gui.text(0,40, "State: "..memory.read_u8(Addresses.game_state)) emu.frameadvance() end
Hold R then move around to "Fly". Change x_speed/y_speed to make spongebob move around faster. Use this to explore OoB quickly Using this script, I discovered a end stage trigger at Netpune's Wrath, but I have no idea how to reach it legit. If you can somehow go OoB, there's also an end stage trigger at: * Dennis (Very far from stage, to the left) * Ice Cream Monster (Very close to stage, both sides) * Return of Dennis Can't find any at Thug Fish, Thug Tug Thug, Cyclops
Joined: 7/11/2018
Posts: 6
jlun2 wrote:
If you ever encounter that again, can you please post which X/Y location did you encounter that from?
Will do! If I remember correcty, it happened in level 6-4. That script is awesome btw. There are some interesting addresses I've found myself: For me, the Y address that can change Sponge's position is 0300372E. There are addresses that determine how far the camera will follow Sponge, even OoB - 03001650 (downward), 030015FC, 03001D80, 030025B0 When Sponge hits an exit trigger: 030072AC (I like setting a breakpoint there, so I can take my time to write down the coordinates of an OoB exit) Also, here is a list of all OoB exits I've found so far (coordinates are taken from the 0300372A/E addresses): https://drive.google.com/open?id=1gRJtfXyrY7JgvrZ7sJzRSFaR0_mMubZ6
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Thanks. In addition to the above, it appears 0x3710 IWRAM is Spongebob's ID. For the bosses (except the first), all IWRAM. 0x383C - ID 0x3854 - X 0x3858 - Y Regarding your coordinates, I'm not sure if 0x372E is good for Y; That's half the address for 0x372C, so when I go up/down hill or jump out of bounds, the number goes crazy and jumps to some large value. Also, using the address, I realize the lowest I managed to go in terms of 0x372E is 11263 in stage 1, yet the values in the document are in the 30 and 40 thousands. How did you manage to do that? There seems to be either a large "kill zone", or a large area of flat land at this Y coordinate. If possible, can you please make an input file on how you managed to get there?
Joined: 7/11/2018
Posts: 6
jlun2 wrote:
Regarding your coordinates, I'm not sure if 0x372E is good for Y; That's half the address for 0x372C, so when I go up/down hill or jump out of bounds, the number goes crazy and jumps to some large value. Also, using the address, I realize the lowest I managed to go in terms of 0x372E is 11263 in stage 1, yet the values in the document are in the 30 and 40 thousands. How did you manage to do that? There seems to be either a large "kill zone", or a large area of flat land at this Y coordinate. If possible, can you please make an input file on how you managed to get there?
Huh, that's pretty strange. Here's a video of me exploring the oob area with the camera following me. https://youtu.be/Hs8T_zDGJx0 I've slightly altered your script so it goes like this:
memory.usememorydomain("IWRAM")
local Addresses = {
display_x = 0x3728,
display_y = 0x372E,
game_state = 0x25C0,
x = 0x3728,
y = 0x372C
}
--function for checking an input with how many frames to delay
function inputdelay(inputs, delay)
	local is = input.get()
	local start = false
	if inputs ~= nil and (is[tostring(inputs)] ~=nil) then
		--console.log(is)	--debugging
		while (delay > 0) do
			emu.frameadvance()
			delay = delay -1
		end
		start = true
		return start
	end
	return start
end

while true do
	local x = memory.read_u32_le(Addresses.x)
	local y = memory.read_u32_le(Addresses.y)
	local display_x = memory.read_u32_le(Addresses.display_x)
	local display_y = memory.read_u32_le(Addresses.display_y)
	local x_speed = 6
	local y_speed = 16
		-- if inputdelay("C",30) then
			-- memory.writebyte(Addresses.State,7)	--Instant recruit
		-- elseif inputdelay("V",30) then
			-- memory.writebyte(Addresses.State,8)	--Instant win (5 for xp, 8 for item interface)
		-- elseif inputdelay("B",10) then
			-- memory.writebyte(Addresses.Win,1)
			-- memory.writebyte(Addresses.State,5)
			-- --toggle = (toggle == 0) and 1 or 0
			-- --if toggle == 0 then toggle = 1 else toggle = 0 end
		-- end
	if (joypad.getimmediate().R == true) then
		if (joypad.getimmediate().Left == true) then
			x = memory.read_u32_le(Addresses.x)-65536*x_speed
		elseif (joypad.getimmediate().Right == true) then
			x = memory.read_u32_le(Addresses.x)+65536*x_speed
		else
			x = memory.read_u32_le(Addresses.x)
		end
		if (joypad.getimmediate().Down == true) then
			y = memory.read_u32_le(Addresses.y)+65536*y_speed
		elseif (joypad.getimmediate().Up == true) then
			y = memory.read_u32_le(Addresses.y)-65536*y_speed
		else
			y = memory.read_u32_le(Addresses.y)
		end
		
		memory.write_u32_le(Addresses.x,x)
		memory.write_u32_le(Addresses.y,y)
	end
		gui.text(0,40, "X:"..display_x.." Y:"..display_y)
		gui.text(0,60, "State: "..memory.read_u8(Addresses.game_state))
		emu.frameadvance()
end
Also, I have some bk2 movies of the (so far) fastest to reach oob exit in level 4-2 and 4-3. https://drive.google.com/open?id=17QFp_TrFGL3eBYAkT8OGPM2wJLmz69fT https://drive.google.com/open?id=1HnI5R0ye9vrpNVScTSh_qPlCIAkmqYli The one for 4-3 only works in the EU version of the game, interestingly.
Joined: 7/11/2018
Posts: 6
Just realized you were talking specifically about stage 1-1. I found these exits using a method I call "drilling". Basically, I freeze the value of 030071B0 (spongebob's damage state) to be permanently 1, that way you can bypass the kill layers. Then I freeze 03003737 (downward momentum) to a high number, so spongebob is clipping through everything. It's quite an efficient way to find the coordinates of oob exit, but of course says nothing about whether or how they are actually reachable.
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
dekutony wrote:
So apparently the Spanish text is the fastest text in this game. https://www.speedrun.com/The_SpongeBob_SquarePants_Movie_GBA/thread/dafua I don't know if it's any faster on a TAS since you have to select the language first at the start of a TAS timed run. It seems a cutscene is missing on the non English versions as well.
So I went and timed every single cutscene + language select: https://docs.google.com/spreadsheets/d/1MDCpHPKPsZwSwkdnv0sDYyfh9pTGp5Zq5Zws9YJZXoo/edit#gid=0 At a glance, Spanish is fastest. There's 1 giant problem however. In the EU version, the game lags more than U. Which means in reality it's very possible the time difference is extremely close. I have to sync the game twice to truly find out. I managed to sync the game up to 1-4. I saved 60 frames so far on 1-1, so I need to check the other stages a bit. The fastest RTA run right now is 33 minutes compared to the TAS 28 minutes, so there's definitely more improvements. https://www.speedrun.com/tssmgba/run/yo7g380m
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Some stuff On Yoodle a Seadle (3-4), you can clip out of bounds using those bones, but you instantly die. If you used the moustache, you can avoid instant death since you go through the bones: There's some addresses in EWRAM that is related to OoB tiles. Testing on 1-3, this spot At X: 7312, Y: 11775, corresponds to this address in EWRAM 0x02F7F1 values 0xF8-0xFF makes it a goal 0x10-0x17 is damage 0x20-0x27 is that secret passage reveal jingle if you press Up 0x30-0x37 - small 12 unit hill The addresses starting from 0x02D4A0 to 0x035490 seems to start from 0 on start, then gets slowly filled up with something. I don't understand what it is, but it changes to a different address once everything gets filled up. https://cdn.discordapp.com/attachments/537350250805985301/1058622153475493918/SpongeBob_SquarePants_Movie_The_USA_2-3_Oob.bk2 There's an OoB exit 17,000 units under the stage. it takes so long to the point by the time I reach there I would've beaten both 2-3, 2-4 normally. I wasn't able to replicate this using passwords to directly skip to the stage, so I suspect it's likely in the area above (0x02D4A0) There's an infinite shell spot in 1-1 OoB https://cdn.discordapp.com/attachments/537350250805985301/1057858832468037662/SpongeBob_SquarePants_Movie_The_USA_OoB_1-1.bk2 The 5-1 cutscene that gets skipped in EU actually exists translated: There are scenes in which EU (english) is actually slower than (U). For instance: