TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #3296: marzojr's Genesis ColinC10's Sonic VR in 07:52.72

Console: Sega Genesis
Game name: ColinC10's Sonic VR
Game version: any v1.0
ROM filename: Sonic VR.bin
Branch:
Emulator: (unknown)
Movie length: 07:52.72
FrameCount: 28363
Re-record count: 6168
Author's real name: Marzo Junior
Author's nickname: marzojr
Submitter: marzojr
Submitted at: 2011-09-22 22:44:44
Text last edited at: 2014-12-25 22:06:55
Text last edited by: CoolKirby
Download: Download (3055 bytes)
Status: decision: rejected
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:
The maker of Robotnik's Revenge and Sonic 1 and 2 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|0.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

Level Time
level000 2.68s
level001 4.04s
level002 5.78s
level003 4.58s
level004 0.53s
level005 4.25s
level006 4.13s
level007 20.83s
level008 2.93s
level009 9.36s
level010 4.04s
level011 3.35s
level012 4.00s
level013 2.60s
level014 7.63s
level015 1.68s
level016 1.88s
level017 2.29s
level018 8.76s
level019 3.38s
level020 5.83s
level021 5.98s
level022 10.09s
level023 5.81s
level024 6.46s
level025 12.38s
level026 6.68s
level027 8.98s
level028 3.81s
level029 8.53s
level030 5.03s
level031 4.34s
level032 24.28s
level033 2.43s
level034 9.98s
level035 8.51s
level036 16.96s
level037 5.13s
level038 6.75s
level039 28.41s
Total 4:45.26

From which it follows that level loading times, as well as the menus, take up 3:07.44.

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.


Similar submissions (by title and categories where applicable):