1 2
9 10 11
15 16
Joined: 10/8/2013
Posts: 126
Link to video Well, found a 3-blocker, but since the spot you get OoB from is too far from the room wall, you'll only be able to explore the open shaft above/below it... so, it's most likely worthless. Unless you can do some block corruption off of that area, to corrupt the area you're in into a more favorable shape or something. Decided to make a poorly TASed vid of it using debug rom anyway, just to share it.
Editor, Player (95)
Joined: 5/27/2006
Posts: 240
Very nice. I was actually messing around with those blocks earlier but concluded nothing could be done, and then I wondered if frozen enemies could be used to facilitate getting oob (in that location and others). I'm feeling more confident now that we'll find other places to get oob.
Joined: 10/8/2013
Posts: 126
Btw, do you know if zeroing the timer could be a thing in ZM too? In ZM, there's a bunch of rooms you can get OoB at (on TAS, only two that I know of for unassisted, one of them before PBs), many of them long. Getting in-bounds is a bit trickier, but some of the rooms where it is possible do lack a ceiling so you can just fall back in, and at least on Debug, I once managed to corrupt 2 consecutive ceiling tiles into a hole, making for an impro way back. Also, yeah, zeroing the timer is basically a very boring thing, but I just find the concept of it amusing enough to actually wanna see it :P
Editor, Player (95)
Joined: 5/27/2006
Posts: 240
It's probably possible, assuming that the RAM for the tile data and save data are laid out in the same way. If you gave me a vbm file of getting out of bounds and back in bounds of a room that's at least three map squares wide, I could look into it. Basically you would save right before the final boss at exactly 80 hours and 0 minutes, go to the necessary room and corrupt the save data out of bounds, then get back in bounds and die (resetting the game would reload the save data). Then your in-game time would just be a few minutes to beat the final boss and escape.
Joined: 10/8/2013
Posts: 126
I dropped a movie file to the ZM topic. Also, yea, in ZM you can only move around in the open area, not the wall (since you can only move straight down while inside a solid object), so that might be an issue. The longest room, for ZM, you can get OoB from is 10 blocks wide, and that was the area where I found it to be possible to corrupt the ceiling blocks into a pathway back in-bounds (using debug, so result may not apply).
Editor, Player (95)
Joined: 5/27/2006
Posts: 240
ZX497 wrote:
I dropped a movie file to the ZM topic. Also, yea, in ZM you can only move around in the open area, not the wall (since you can only move straight down while inside a solid object), so that might be an issue. The longest room, for ZM, you can get OoB from is 10 blocks wide, and that was the area where I found it to be possible to corrupt the ceiling blocks into a pathway back in-bounds (using debug, so result may not apply).
Your x position isn't as important for corrupting memory, so it's not a problem. Anything over 4 or 5 map squares wide isn't any more helpful as far as I can tell. There's nothing after SRAM.
Joined: 10/8/2013
Posts: 126
Link to video Figured out the slope clipping a bit better, so, now it's more versatile for reverse shine charges. Oh yeah, there's reverse shine charging.
going = true

while going do
	ypos = memory.readword(0x0300125C)
	joypad.set(1, {left=1})
	emu.frameadvance()
	joypad.set(1, {left=1})
	emu.frameadvance()

	vba.print(ypos - memory.readword(0x0300125C))
	if ypos - memory.readword(0x0300125C) == 2 or ypos - memory.readword(0x0300125C) == -2 then
		vba.print(ypos)
		going = false
	end
	emu.frameadvance()
end
A very rudimentary LUA-script for finding clip-able slopes. For Fusion, you can almost eye-ball it, tho, cause every slope connection is faulty (or so it seems). Basically, if two slope pieces are connected, and the slope is facing right, there is a clip there.
Editor, Skilled player (1440)
Joined: 3/31/2010
Posts: 2112
ZX497 wrote:
https://www.youtube.com/watch?v=OGtZYyUtl8s I figured out the slope clipping a bit better, so, now it's more versatile for reverse shine charges. Oh yeah, there's reverse shine charging now.
Yo, I just want to drop in and say that you've been doing awesome work on Zero Mission and Fusion. Really looking forward to what an updated TAS of either game might bring.
Editor, Player (95)
Joined: 5/27/2006
Posts: 240
ZX497 wrote:
Basically, if two slope pieces are connected, and the slope is facing right, there is a clip there.
Any two slopes, or does it have to be a steep slope and a gradual slope? I'll have to play around with this.
scrimpeh wrote:
Really looking forward to what an updated TAS of either game might bring.
Not sure any of the most recent stuff will help, but I'm working on a fusion 0% tas and dragonfangs is working on a zm any% tas.
Joined: 10/8/2013
Posts: 126
Any two will work, the slope can retain its angle and still have a clip in there.
Editor, Player (95)
Joined: 5/27/2006
Posts: 240
ZX497 wrote:
Any two will work, the slope can retain its angle and still have a clip in there.
Actually, it looks like it works on any single 45 degree right-facing slope.
Joined: 10/8/2013
Posts: 126
You mean, like the slopes in many save rooms? I counted those as a double, heh. I mean, I don't actually know what kind of piece shapes there are, but it kinda makes sense to me for there to be two pieces there. Like, a smallest possible 45 degree piece you can have would be 1x1, since that always maintains the block formation. For the less angled ones (26-some degrees), the minimum block-size would be 2x1, since otherwise you'd end up with, like, a half-block of height. If you mean those one-block, very tiny 45 degree ones (like in NAV rooms), I haven't been able to work with those.
Joined: 10/8/2013
Posts: 126
Ok, left-facing slopes DO work as well. The script just needs a bit of tweaking.
Joined: 10/8/2013
Posts: 126
going = true
right = false
boost = 2

if memory.readbyte(0x03001256) == 16 then
	right = true
end

while going do
	
	ypos = memory.readword(0x0300125C)
	rpos = ypos
	horpos = memory.readword(0x0300125A)

	for i=1,boost do
		joypad.set(1, {right=1,left=1})
		emu.frameadvance()
	end

	if right == true then
		joypad.set(1, {right=1,left=1})
		emu.frameadvance()
		rpos = memory.readword(0x0300125C)
		emu.frameadvance()
	end

	if horpos == memory.readword(0x0300125A) then
		boost = boost+1
	end

	vba.print(ypos - memory.readword(0x0300125C))
	if ypos - memory.readword(0x0300125C) == 2 or rpos - memory.readword(0x0300125C) == -1 then
		vba.print(ypos)
		going = false
	end
	emu.frameadvance()
end
Updated script. Now it takes into consideration the direction Samus is facing at the start, and will test appropriately from bottom of the slope to the top. When facing right, there is a chance the script will produce a false-positive at the very start of a slope. Also, yeah it's pretty weird you gotta give Samus twice the oomph when going right for her to do anything. EDIT: On further testing, there's a pretty big chance the script actually fails to locate the correct spot going right. Still needs tweaking. Left-facing slopes are horrible. EDIT2: Updated the script again, now it should work regardless of slope angle and direction. It's not exactly the most well thought out one, but functional.
Joined: 10/8/2013
Posts: 126
Ok, you're right about the 1x1 45 degree blocks. Definitely possible to use those for reverse charging. So, it seems it doesn't have to be slopes connected to slopes, just slopes connected to... anything. EDIT: Yep, it's not even limited to 45 degree slopes. ANY SLOPE WILL DO. Any direction, any angle. This suddenly got very versatile.
Joined: 10/8/2013
Posts: 126
Ok, and uhh, yeah this is a thing in ZM too, might even be just as versatile. LATE WAVE is a thing now for ZM hundo, cause the Ridley Speed Jump room just got solved. EDIT: It is just as versatile. For both games, every slope is broken. Basically you stand near the top of a slope piece, facing downwards (like, 2 subpixels down from the highest point of that piece), then do: Fusion: - Jump, jump - Down, release, down - Neutral, neutral, neutral - Forward, forward - Hold back Zero Mission: - Jump - Down, release, down - Forward, forward - Hold back This is just one setup for this, by no means you absolutely have to do it like this (the key point is just hitting a specific part of the slope with morph ball). I just find this one very easy to test with. This also kinda means my script is almost pointless now. There's a clip every 64 vertical subpixels on every slope.
Joined: 10/8/2013
Posts: 126
Also, in Fusion, for steeper slopes (45 degrees), you can use Ball-Jump instead of a bomb explosion for reverse charging. For low-angle slopes, bomb seems to be required. EDIT: nvm. Doesn't quite seem to work with jump ball. Bad testing on my part, I was partially submerged in water.
Editor, Player (95)
Joined: 5/27/2006
Posts: 240
Finding slopes was never really an issue anyway. There's a lua script that outlines them. Anyway, I think I'll make a lua script that automatically finds the right x position, lays the bomb and does the clip. Off the top of my head I can't think of any place this will be useful, but I'll look at all the rooms.
Editor, Player (95)
Joined: 5/27/2006
Posts: 240
-- 11 - / steep slope
-- 12 - \ steep slope
-- 14 - / slight slope
-- 15 - \ slight slope

-- find nearest slope
xPos = math.floor(memory.readword(0x300125A) / 64)
yPos = math.floor(memory.readword(0x300125C) / 64)

width = memory.readbyte(0x3000090)
clipStart = 0x2026000 + (yPos * width + xPos) * 2

slope = 0
offset = 0
while offset < 8 do
	for i=-2,2,2 do
		local clip = memory.readword(clipStart + (i * width) + offset)
		if clip == 0x11 or clip == 0x12 or clip == 0x14 or clip == 0x15 then
			slope = clip
			break
		end
	end
	
	if slope ~= 0 then
		break
	end

	offset = -1 * offset
	if offset >= 0 then
		offset = offset + 2
	end
end

-- exit program if slope not found
if slope == 0 then
	vba.print("No slope detected")
	return
end

-- get direction
dir1 = nil
dir2 = nil

if slope == 0x11 or slope == 0x14 then
	dir1 = 1	-- / slope
else
	dir2 = 1	-- \ slope
end

-- get necessary position
xClip = (xPos + (offset / 2)) * 64 + 31

if dir2 == 1 then
	xClip = xClip + 1
end

-- move to position
xPos = memory.readword(0x300125A)
while xPos ~= xClip do
	if xPos < xClip then
		joypad.set(1, {right=1})
		vba.frameadvance()
	else
		joypad.set(1, {left=1})
		vba.frameadvance()
	end
	xPos = memory.readword(0x300125A)
end

-- set facing direction
vba.frameadvance()
joypad.set(1, {left=dir1, right=dir2})
vba.frameadvance()

-- lay bomb and perform clip
joypad.set(1, {B=1})

for i=0,66 do
	vba.frameadvance()
end

joypad.set(1, {up=1})
vba.frameadvance()
joypad.set(1, {A=1})
vba.frameadvance()
joypad.set(1, {A=1})
vba.frameadvance()
joypad.set(1, {down=1})
vba.frameadvance()
vba.frameadvance()
joypad.set(1, {down=1})
vba.frameadvance()
vba.frameadvance()
vba.frameadvance()
vba.frameadvance()
joypad.set(1, {left=dir1, right=dir2})
vba.frameadvance()
joypad.set(1, {left=dir1, right=dir2})
vba.frameadvance()
for i=0,3 do
	joypad.set(1, {left=dir2, right=dir1})
	vba.frameadvance()
end
joypad.set(1, {up=1})
vba.frameadvance()
joypad.set(1, {A=1})
vba.frameadvance()

vba.pause()
This script will automatically do the slope clip for you. Use it when you're morphed and storing a shinespark while on the slope. Try to position samus in the middle of the block, otherwise it might not work. The script needs a more reliable way of finding the clip location. Edit: Fixed the script. It will now reliably find the nearest slope within a few blocks.
Joined: 10/8/2013
Posts: 126
So regarding the early Nettori / Yakuza fights. I know they're not useful, cause they don't actually advance the sequence when done early, but uhh, my question is, does doing them early softlock the sequence? Like, would it be possible to do them early, then return to where you are supposed to go and still beat the game? I assume it'd softlock the sequence when you are supposed to fight those bosses later, but I dunno.
Editor, Player (95)
Joined: 5/27/2006
Posts: 240
Hm, there's some weird bug on this forum that's messing up the text in my lua script. If you want it, I can put it on pastebin. The only condition for a boss spawning is that you don't have the item it gives you. Therefore, you can fight the boss as many times as you want and still beat it normally later.
Joined: 10/8/2013
Posts: 126
Umm, maybe you're having the same problem I had with that chrono-bomb script I posted like, a year ago or something? I had to check the "Disable HTML in this post" checkbox for the code to show up correctly (might wanna check the BBCode disable box as well). I will take a script, tho, so drop it to pastebin if this doesn't work. For me, just locating the clip spots was the issue more than the clip itself, heh, but it's good to have assets at hand anyway. EDIT: Your script works beautifully now.
Editor, Player (95)
Joined: 5/27/2006
Posts: 240
Another useless glitch: Link to video Setup: Freeze an enemy, then use the diffusion flakes to refreeze it immediately after it unfreezes. If you run off at the exact frame it is refrozen, you'll stay in the air. You can also stay in the air by refreezing (with diffusion flakes) and killing it on the exact same frame. ZX, you may want to see if something similar exists in ZM. Edit: it works with normal ice missiles too, but you have to use the second method, since it's impossible to freeze it while running off of it afaik.
Joined: 10/8/2013
Posts: 126
Yeah I'll take a look at it later when I can. That's really neat tho!
Joined: 7/6/2012
Posts: 84
BioSpark wrote:
Another useless glitch: Link to video Setup: Freeze an enemy, then use the diffusion flakes to refreeze it immediately after it unfreezes. If you run off at the exact frame it is refrozen, you'll stay in the air. You can also stay in the air by refreezing (with diffusion flakes) and killing it on the exact same frame. ZX, you may want to see if something similar exists in ZM. Edit: it works with normal ice missiles too, but you have to use the second method, since it's impossible to freeze it while running off of it afaik.
Does it work similarly to what I found on accident here? https://www.youtube.com/watch?v=YKkkOMYNOtE IIRC dragonfangs said this worked by killing a frozen enemy the frame you land on it, but there wasn't really any application for it.
1 2
9 10 11
15 16