Very cool! I was considering starting to work on one of my own, but yours does pretty much everything I was thinking about at the start. There are a lot of things you can/could do with it to make it more customizable.
With a bit of editing on the achievement bar sprite and the sprite code you can have it show the achievement name and the icon as well. It didn't take too much work (graphics took longer) to get everything to fit.
I did throw in a couple things. I changed the size of the achievement bar sprite and icon so you can have long achievement names show up. It uses a gradient box to cover the background a bit to ensure the text of the name can be seen.
Note: I changed a couple of variables around for my own readability.
Cache.clear # quick hack, blting/txt on sprite doesn't remove changes when you use the images again.
@sprite = Sprite_Base.new
@sprite.bitmap = Cache.picture(AchievementGraphic)
# reduced the achievement icon to 64x64 for the sake of ease.
@achievement_icon = Bitmap.new(64,64)
@achievement_icon = Cache.picture(Achievements[id])
src_rect = Rect.new(0,0,64,64)
@sprite.bitmap.blt(7,11,@achievement_icon,src_rect) #copy the image to the sprite so the image fits in the box on the sprite bg.
# grab the achievement's name, build a gradient rect to go behind it.
achievement_text = Achievements[id]
gradient_rect = Rect.new(0,0,0,0)
gradient_rect = @sprite.bitmap.text_size(achievement_text)
gradient_rect.x = 70
gradient_rect.y = 25
gradient_rect.width = gradient_rect.width + 15
# sprite coords - left side of screen, high enough to be above the menu/status windows in battle
@sprite.z = 300
@sprite.x = 10
@sprite.y = 200
@timer = AchievementDecay #added timer constant
@leaving = false
@finished = false
AchieveRing.play #achievement sound
I did a test and you can also have it pop the achievement inside a battle scene, the same code in the switch interpreter works fine. I did have to move the achievement sprite to somewhere else on the screen so it wouldn't cover stuff up though. It can be a bit buggy though if the achievement pops right at the end of battle while still in the scene.
Your script is really good and there is some stuff you could end up adding to it for customization for the end user. There are lots of little things you could add as well (rewards for completing them, points or items or gold or whatever). Keep it up, it's definitely a good framework.