Forgot password?
login to RetroAchievements:

Midnight Magic


Posted: 09 Jan, 2019 08:28
Last Edit: 15 Jan, 2019 17:59
Official Topic Post for discussion about
Created 9 Jan, 2019 08:28 by

1. Midnight Magic (1984) (Atari) (PAL) [!].a26
midnight magic (pinball wizard) (1984) (atari, glenn axworthy) (cx26129) (pal).bin
RA Checksum: da732c57697ad7d7af414998fa527e75
CRC32 Checksum: 6CF038FA

2. Midnight Magic (USA).a26
Midnight Magic (1984) (Atari).a26
midnight magic (pinball wizard) (1984) (atari, glenn axworthy) (cx26129).bin
RA Checksum: f1554569321dc933c87981cf5c239c43
CRC32 Checksum: 5C5447B9


Posted: 10 Jan, 2019 07:17
Last Edit: 10 Jan, 2019 13:14
As a new developer I was unaware of the standard procedure regarding the development of cheevos so I didn't realise that it was standard practice to post the plan here first (I only found the relevant wiki page hidden while I was actually looking for something else). My apologies.

As it stands I've already created most of the cheevos and uploaded them to Unofficial, so here they are:

Bump me up (5) - Light up all three bumpers
Flash - aaa-aaaaah! (50) - Reach such a high score that it breaks the table
I meant to do that (10) - Lose a ball with a score of 000000 (one-player mode only)
Making me dizzy (10) - Spin the spinner 250 times in a single game
Pinball amateur (5) - Score 50,000 points
Pinball fan (10) - Score 100,000 points
Pinball god (20) - Score 600,000 points
Pinball wizard (20) - Score 200,000 points
Quad jeopardy (20) - Get a 4x multiplier
Show-off! (20) - Score 40,000 points without losing a ball
Target dropped (10) - Hit all five drop targets (and get a 2x multiplier in the process)
Triple jeopardy (20) - Get a 3x multiplier
Unhinged (10) - Hit the spinner so hard that it spins 50 times on its own
Five times' a charm (30) - Get the fifth and final multiplier
Ball saved! (10) - Activate the ball saver

[s]There's also one that I included before I realised that two-player cheevos were frowned upon, feel free to delete it.

Friendly competition (5) - Start a two player game[/s] (this has been replaced now)

I've notated all of the relevant addresses on the server (including some that I never used). I've playtested all of these (including leaving the game in demo mode for a couple of hours) and they seem relatively reliable at this point.

The "Flash - aaa-aaaaah!" cheevo is a little hacky in that it relies on a colour cycling effect that is otherwise never used in the game except to signal that the score has reached its maximum and has cycled back to 0. I tried using delta to measure the score between two frames (making sure that the game was "active" in the process) but the cheevo would be triggered prematurely when launching the game with an existing score.

"I meant to do that" isn't a "play bad" cheevo per se. It's actually not that easy to get as the ball will generally hit some kind of bumper on the way down, so it's a bit of a gag that relies on precise metering of the plunger.

"Unhinged" was a pain in the arse and required a lot of attempts to get right. Basically, the game has a 1-byte marker indicating speed (poking 0x5f with a value > 0x0 will get the spinner spinning and cause the game to decrease it by one every few games) and another 4-bit marker (0x15) indicating the current binary state of the spinner (something akin to "front" and "back"). The chosen solution in the end was to have the cheevo count the number of spins by alternately detecting whether 0x15 has changed, and resetting the hit counter if 0x5f=0. At the 11th hour I realised that I also needed a condition to detect if the spinner had been hit twice as this cheevo could have been triggered by hitting the spinner several times in quick succession (I checked this with a delta test between two frames that the speed of the spinner hadn't increased).

I'd like to add a leaderboard for the game (one for the main score, perhaps another for score with just one ball) although there's an issue to consider here with how the game handles scores: the score is stored as a 24-bit value, each byte directly representing two digits of the score. The score can only reach a maximum of 999,999 before it cycles around back to 0. It's not all that easy to get 999,999 points, but it's not impossible that enough people might get that score to make the leaderboards fairly worthless without further modification.

There's no register in the game that detects how many times it has cycled around, so this would have to be detected using the RA API if possible (it is possible to detect if the game has cycled back to 0). I think a workable solution here would be to test for when this score cycling occurs, increment a hit counter by one every time it does, and add 1 million points for each hit in this way. Possible?

Edit: Replaced the "Friendly competition" cheevo with a 5x multiplier one, plus an extra cheevo for the ball saved feature:

Five times' a charm (30) - Get the fifth and final multiplier
Ball saved! (10) - Activate the ball saver

Thanks to televandalist in Discord for the feedback.

Posted: 10 Jan, 2019 23:10
Nice...welcome to RA!


login to RetroAchievements:
or create a new account