Submission Text Full Submission Page
The maker of Robotnik's Revenge and Sonic 1 and 2 [Moderator Edit: Do not link to websites that host copyright protected materials (e.g. game ROMs)] has done it again: a delicious new hack named Sonic VR that sees Sonic go through 40 mini-levels that range in difficulty from trivially easy to maddeningly difficult -- all without rings, shields, power-ups or time limit. Each level is a mini-puzzle, and requires knowledge of the physics of Sonic games in order to win. With TAS abilities, Sonic blasts through these 40 levels, sometimes reaching the finish line before you can see what is going on.
Note: This is a TAS of a hack of a hack of Sonic 2; an IPS patch for the hack is available here.
Warning: If you haven't played the hack yet, I suggest you try it before watching the TAS.

Game objectives

  • Emulator used: Gens 11b + S2Camhack + SolidityViewer + (partial)HitboxDisplay + LUA HUD for Genesis Sonic games
  • Aims for fastest time (includes "No death" and "No damage")
  • Abuses programming errors in the game (a lot)

Comments

This hack really sounds best with Kega Fusion; the sound from Gens doesn't really do it justice. Try playing it on Kega; the music is so good you won't be sorry.
There aren't any places to zip; I managed to get into a few walls, ceilings and floors but none led to anything -- in most cases, Sonic just fell to his death, while in others, he zipped a few tiles and then fell to his death.
Level009.bin -- Casino Nightmare -- is a nightmare to TAS. I managed to do that clean exit by sheer luck my first time through. Luckly, I was recording and saved it, as I have been completely unable to reproduce it since: I wasted over 3000 rerecords on that last room alone while trying to do it again, after reaching the room 1 second earlier.
The hack is not very hex friendly -- there is random in-level lag, possibly due to either the ROM banking, the music, the background swapping or all of them. If you compensate for this lag (a boring chore), it will synch.
I could not find a timer of any sort -- so comparing level times (or even listing them) depends on an arbitrarily-defined starting and ending point for the level. I used the following Lua script to determine the length of any level:
local level_started = false
local first_frame = -1
local boringmodes = {0,4,0x10,0x14,0x18,0x1c,0x20,0x24,0x28}
function disable_hud()
	local mode = memory.readbyte(0xfff600)
	for _,m in ipairs(boringmodes) do
		if mode == m then
			return true
		end
	end
	if mode == 0x8c then
		local time = memory.readlong(0xfffe22)
		return not (time > 0 and time < 5)
	end
	return false
end

gens.registerafter(function()
	if level_started then
		if memory.readbyte(0xFFFFB000) == 0 and level_started ~= false then
			print(string.format("|level%03d|MODULE ERROR for `frames`: Missing parameter value for amount00:00.00|", level, movie.framecount() - first_frame))
			level_started = false
		end
	else
		if disable_hud() ~= true and memory.readbyte(0xFFFFB000) ~= 0 then
			if level == -1 then
				print("! Timetable\n||Level||Time||")
			end
			level = level + 1
			level_started = true
			first_frame = movie.framecount()
		end
	end
end)
The script times the length from the time you can first control Sonic to the time when you lose control of Sonic; while it might be slightly better to time the exact moment you touch the giant ring, you can still die up until the point I chose to base time on.
Running this script alongside the movie leads to the following times:

Timetable

LevelTime
level00000:02.68s
level00100:04.05s
level00200:05.78s
level00300:04.58s
level00400:00.53s
level00500:04.25s
level00600:04.13s
level00700:20.83s
level00800:02.93s
level00900:09.37s
level01000:04.05s
level01100:03.35s
level01200:04.00s
level01300:02.60s
level01400:07.63s
level01500:01.68s
level01600:01.88s
level01700:02.30s
level01800:08.77s
level01900:03.38s
level02000:05.83s
level02100:05.98s
level02200:10.10s
level02300:05.82s
level02400:06.47s
level02500:12.38s
level02600:06.68s
level02700:08.98s
level02800:03.82s
level02900:08.53s
level03000:05.03s
level03100:04.35s
level03200:24.28s
level03300:02.43s
level03400:09.98s
level03500:08.52s
level03600:16.97s
level03700:05.13s
level03800:06.75s
level03900:28.42s
Total04:45.27
From which it follows that level loading times, as well as the menus, take up 03:07.45.

Other comments

Thanks to Nitsuja and Upthorn for making the camera hack/solidity viewer, and thanks to ColinC10 for the hack. Thanks also goes for Sonic Retro and the Sonic Scene for making such hacks possible. Also, thanks to Noob Irdoh for suggesting pressing buttons early on in the menu screens.

Mukki: Judging...
Mukki: In these submissions both the run and the hack are to be judged. While most commented that the run itself was well made, the overwhelming majority of those that commented on the hack itself responded negatively. The problems cited were that the visual style was distracting and that the levels design did not make for a good TAS. My own opinion of this was a 'meh'; the music was great, but I am sympathetic to the problems outlined by other users (though I don't hold this opinion as strongly as the no voters), mainly I disliked that this hack took the large and non-linear levels that make Sonic TASes interesting and replaced them with the opposite. Either way, the response to this run falls short of the standard of approval required for a hack on this site. Therefore I am rejecting this submission.