require 'winapi' fceuxWindowDY = 0; fceuxWindowDX = 0; MIN_JUMP_POWER = -20; function jumpingWindow() desktopWidth, desktopHeight = winapi.get_desktop_window():get_bounds(); fceuxWindow = winapi.find_window("FCEUXWindowClass", nil); fceuxWindowX, fceuxWindowY = fceuxWindow:get_position(); fceuxWindowWidth, fceuxWindowHeight = fceuxWindow:get_bounds(); fceuxWindowDY = fceuxWindowDY + 1; -- gravity fceuxWindowY = fceuxWindowY + fceuxWindowDY; if (fceuxWindowY + fceuxWindowHeight >= desktopHeight and fceuxWindowDY >= 0) then fceuxWindowY = desktopHeight - fceuxWindowHeight - 1; -- bounce from floor fceuxWindowDY = (0 - fceuxWindowDY) * 0.9; if (fceuxWindowDY > MIN_JUMP_POWER) then fceuxWindowDY = MIN_JUMP_POWER - math.random(10); end fceuxWindowDX = math.random(-7, 7); end fceuxWindowX = fceuxWindowX + fceuxWindowDX; if ((fceuxWindowX < 0 and fceuxWindowDX < 0) or (fceuxWindowX + fceuxWindowWidth >= desktopWidth and fceuxWindowDX > 0)) then -- bounce from sides fceuxWindowDX = 0 - fceuxWindowDX; end fceuxWindow:resize(fceuxWindowX, fceuxWindowY, fceuxWindowWidth, fceuxWindowHeight); end emu.registerbefore(jumpingWindow);