WoC has wiggling movement in a very specific way to have the fastest movement, which is basically TASonly.
However there's a caveat. The GameCube version is the worst version to do this on due to the lag that the system produces making it harder/annoying to deal with.
It's possible to do on GameCube but preferably either the PS2 or Xbox version is wanted instead.
Edit: Here's a speed script that red made for the
BizHawk Dolphin builds.
If you or someone wants to challenge the game itself.
Download woc.luaLanguage: lua
-- GUI
x_text = 2
y_text = 50
y_space = 30
rec_x = 490
rec_y = 0
diameter = 150
radius = diameter / 2
center_x = rec_x + radius
center_y = rec_y + radius
max_speed = 10
multiplier = radius / max_speed
-- Addresses
x_addr = 0x24CB44
y_addr = x_addr + 4
z_addr = x_addr + 8
xSpeed_addr = 0x24CB50
ySpeed_addr = xSpeed_addr + 4
zSpeed_addr = xSpeed_addr + 8
angle_addr = 0x24CC46
function readFloat(addr)
return mainmemory.readfloat(addr, true)
end
function readShort(addr)
return mainmemory.read_u16_be(addr)
end
function gatherData()
x = readFloat(x_addr)
y = readFloat(y_addr)
z = readFloat(z_addr)
xSpeed = readFloat(xSpeed_addr) * 100
ySpeed = readFloat(ySpeed_addr) * 100
zSpeed = readFloat(zSpeed_addr) * 100
horSpeed = math.sqrt((xSpeed * xSpeed) + (zSpeed * zSpeed))
verSpeed = ySpeed * 100
angle = 90 - ((readShort(angle_addr) * 360) / 0x10000)
if angle < 0 then
angle = angle + 360
end
if angle > 180 then
xSpeed_angle = 270
else
xSpeed_angle = 90
end
end
function drawText(text, k)
gui.drawText(x_text, y_text + k * y_space, text)
end
function drawLine(line_x, line_y, color)
gui.drawLine(center_x, center_y, center_x + line_x, center_y + line_y * -1, color)
end
function drawData()
drawText("Hor Speed: " .. string.format("%.2f", horSpeed), 0)
drawText("Ver Speed: " .. string.format("%.2f", verSpeed), 1)
drawText("Angle: " .. string.format("%.2f", angle), 2)
gui.drawRectangle(rec_x, rec_y, diameter, diameter, "black", "black")
gui.drawEllipse(rec_x, rec_y, diameter, diameter, "white", "black")
hor_x = horSpeed * multiplier * math.cos(math.rad(angle))
hor_y = horSpeed * multiplier * math.sin(math.rad(angle))
if horSpeed > 8.01 then
hor_color = "green"
else
hor_color = "white"
end
drawLine(hor_x, hor_y, hor_color)
drawLine(xSpeed * multiplier, 0, "red")
drawLine(0, zSpeed * multiplier, "red")
end
function main()
while true do
gatherData()
drawData()
emu.frameadvance()
end
end
main()