What are the secret achievements in Super Meat Boy?

Super Meat Boy has just been updated with new achievements, and though they are listed on the steam achievements page, they have no accompanying text on how to unlock them.\

The original secret achievements, the so-called cryptic, glitched achievements have already been identified elsewhere on this site.

Some, such as the "Rare, Medium, Medium Well, and Well Done" achievements seem similar to the "Medium Rare" achievement (added for the steam summer camp event).

Others, such as the "Well look at you!", "Seneca Falls", and the "Suffragette" achievement also have no unlock text, and they do not appear to be similar to existing achievements, either.

What do I have to do to earn these achievements?


Solution 1:

The update notes say:

  • Added 4 more achievements along the same lines as the "Medium Rare" achievement added last week
  • Renamed "Medium Rare" achievement to "Medium Well"

Since they are along the same lines as the previous achievement, they mean the player should complete both the light world and the dark world of a chapter, and the sum of the best times for that chapter should be lower than some threshold. Here are the descriptions of each one:

  • Rare - Spend as little time as possible in The Forest (around 320 seconds)
  • Medium Rare - Spend as little time as possible in The Hospital (around 430 or 460 or 490 seconds)
  • Medium - Spend as little time as possible in The Salt Factory (around 570 seconds)
  • Medium Well - Spend as little time as possible in Hell (around 500 or 550 seconds)
  • Well Done - Spend as little time as possible in The Rapture (around 740 seconds or more)

About the old secret achievements:

  • Suffragette - Complete the light world of the Cotton Alley
  • Seneca Falls - Complete the dark world of the Cotton Alley
  • Well look at you! - Input the petaphile code to play with Tofu Boy

Sources:

  • Super Meat Boy Wikia
  • SteamStats
  • Steam Forums

Note about the times for the achievements: Many people use Super Meat Boy Stats (old repo at Google Code, new repo at GitHub) program to find out how much time they have spent on each chapter. However, the reported total time is not exactly accurate because "it counts 15 secs per completed warp zone", and people posting their total times didn't mention if the warp zone time has been subtracted or not. For this reason, the times I posted above might be quite inaccurate.

Solution 2:

I'm a little late to the party, but I've been working on these achievements. I use a mac most of the time, and I was having a hard time getting Super Meat Boy Stats to work under osx, so I wrote a little python script to get my total times for each area. I thought someone else might also find this useful:

http://pastebin.com/DmsHfPhU (and also copied below)

Use: python %script% %savegame.dat%

EDIT:

Here is my best guesses for each time, based on my own experience:

  • Rare: 265
  • Medium Rare: 445
  • Medium: 515
  • Medium Well: 500
  • Well Done: 690-695 (I went from 697 to 688 when I got this)

I also updated the script to not include warp times, since people've said they've gotten these without even unlocking all the warps.

from sys import argv
import struct

totalDeathsOffset = 8
chapterInfoStart = 28
chapterInfoOffset = 12
levelOffset = 12
levelStart = 0x88
TheGuyWarpZoneStart = 0xF10
ZoneNames = ['Forest      ', 
     'Hospital    ', 
     'Salt Factor ', 
     'Hell        ', 
     'Rapture     ', 
     'The End     ', 
     'Cotton Alley']

def maxLevelCount(zone):
    if zone != 5:
        return 20
    else:
        return 5

def maxWarpCount(zone):
    if zone < 5:
        return 12
    else:
        return 0

def toInt32(lst,offset):
    s = lst[offset:offset+4]
    return struct.unpack("<L",s)[0]

def getLevelInfo(save, zone, level, kind):
    offset = 0
    if kind == 2 and zone == 4 and level >= 3 and level <= 5:
        offset = TheGuyWarpZoneStart + (level - 3)*levelOffset
    else:
        chapterOffset = 0
        for i in range(zone):
            chapterOffset += (maxLevelCount(i)*2+maxWarpCount(i))*levelOffset
        levelOffset2 = (level + maxLevelCount(zone) * kind)*levelOffset
        offset = levelStart + chapterOffset + levelOffset2
    time = struct.unpack("<f", save[offset:offset+4])[0]
    return time

def getLevels(save, zone, kind):
    levels = []
    if kind < 2:
        for i in range(maxLevelCount(zone)):
            levels.append(getLevelInfo(save, zone, i, kind))
    else:
        for i in range(maxWarpCount(zone)):
            levels.append(getLevelInfo(save, zone, i, kind))
    return levels

def readChapter(save, n):
    offset = chapterInfoStart + (n * chapterInfoOffset)

    data = struct.unpack("bbbbb", save[offset:offset+5])

    lightLevels = getLevels(save, n, 0)
    darkLevels = getLevels(save, n, 1)
    warpLevels = getLevels(save, n, 2)

    #print n, data
    #print lightLevels
    #print darkLevels
    #print warpLevels
    print "Total Time (", ZoneNames[n] ,"): ", sum(lightLevels)+ sum(darkLevels) #+sum(warpLevels)

def readstats(spath):
    blist = []
    with open(spath, "rb") as f:
        blist = f.read()

    totalDeaths = toInt32(blist, totalDeathsOffset)

    print "Total Deaths:", totalDeaths

    chapters = []
    for i in range(7):
        chapters.append(readChapter(blist, i))

def main():
    if len(argv) > 1:
        readstats(argv[1])

if __name__ == "__main__":
    main()