Really Bad Eggs
Really Bad Eggs is a remake of Super Foul Egg, itself a clone of Puyo Puyo released for the Commodore Amiga in 1995.
Coloured eggs drop down the screen in pairs. They can be rotated in clockwise and anticlockwise directions. The objective is to arrange eggs of the same colour so that their edges touch and the eggs connect. When four or more eggs of the same colour are connected in a chain, the eggs disappear from the grid and any eggs above them drop down to fill the vacated space. Scores increase dramatically if:
- More than four eggs are connected in a single chain;
- Several chains are removed at once;
- The removal of a chain causes eggs to fall, which in turn makes additional chains of eggs.
Really Bad Eggs features three basic game types. The first is a single-player practice mode. Play continues until the grid fills with eggs to the point that no more eggs can be placed.
The second is a two-player mode against the CPU. Each time chains are made in this mode, garbage eggs are dumped into the opponent's grid. These grey eggs do not connect with other eggs in the grid and can only be removed by creating chains with eggs adjacent to them. The number of garbage eggs generated by chains is related to the number of blocks removed in those chains, so creating more chains, longer chains or sequences of chains will create more garbage eggs.
The last mode is a two player game. Two human players battle it out on one DS. The player on the left uses the up, down, left, right and L buttons. The player on the right uses the A, B, X, Y and R buttons.
When the game is booted up a menu system is presented. Use the d-pad to choose from the highlighted options. Press A to accept the selected option and move to the next menu. Press B to return to the previous menu. Press Start to accept all currently-selected options and skip straight to the game.
The menus are as follows:
- Game Type: Choose from the practice game type, the easy/medium/hard player-vs-AI types, or the two-player game.
- Speed: Choose the speed at which the eggs drop down the grid. Faster speeds mean less time to think.
- Height: Choose the starting height. The number corresponds to the rows of garbage eggs added to the grid at the start of the game. More rows mean the game is initially faster paced and harder.
- Colours: The number of different colours of eggs in the game. Each additional colour reduces the chance of a particular colour egg being created, making it more difficult to set up elaborate sequences of egg chains.
Controls - Practice and Vs CPU Modes
- Move shape left: Left
- Move shape right: Right
- Drop shape: Down
- Rotate clockwise: A
- Rotate anticlockwise: B
- Pause/unpause: Start
- Select: Quit to menu (when paused)
Controls - Two-Player Mode
- Move shape left: Left
- Move shape right: Right
- Drop shape: Down
- Rotate clockwise: L
- Rotate anticlockwise: Up
- Move shape left: Y
- Move shape right: A
- Drop shape: B
- Rotate clockwise: R
Rotate anticlockwise: X
- Quit to menu (when paused): Select
The formula for each chain is:
10 * eggs * (eggs - 3) * sequence
- eggs is the number of eggs in the chain;
- (eggs - 3) is the number of extra eggs in the chain above the 4 minimum;
- sequence is the number of times the grid has chained and dropped in sequence.
If a player explodes a chain of 4 red eggs and a chain of 5 green eggs simultaneously, he gets the following scores:
10 * 4 * (4 - 3) * 1 = 40 10 * 5 * (5 - 3) * 1 = 100
He gets a total of 140 points for the two chains.
The grid drops down to fill in any gaps, and in doing so creates another chain of 4 blue eggs. These explode giving the following score:
10 * 4 * (4 - 3) * 2 = 80
He gets 10 points for each egg (10 * 4 = 40). The chain includes only the minimum number of eggs (4 - 3) so he gets no bonus there. However, this is the second set of chains exploded, so the final score is doubled (40 * 2 = 80). The running total so far is 220.
The grid drops to fill in any gaps again, and two more chains are created: 6 yellow eggs and 5 orange eggs. The scores this time are:
10 * 6 * (6 - 3) * 3 = 540 10 * 5 * (5 - 3) * 3 = 300
The total for these two chains is 840, giving an overall score of 1060.
Play then resumes, and the sequence multiplier resets to 1.
The number of garbage eggs generated by chains is calculated via two forumulae. For the first group of chains the formula is:
blocks - 3
If the player creates a chain of 5 blocks, the garbage created is:
5 - 3 = 2
If the player creates a chain of 5 blocks and a chain of 6 blocks simultaneously, the garbage created is:
5 + 6 - 3 = 8
In subsequent groups of chains, the formula is as follows:
blocks - 4 + 6
So, if the player creates a chain of 5 blocks, which falls to create a chain of 7 blocks, the formulae are:
5 - 3 = 1 (first chain) 7 - 4 + 6 = 9 (second chain) = 10 (total)
Really Bad Eggs vs Super Foul Egg
There are a number of differences between Really Bad Eggs and Super Foul Egg. The game does not include a "hard drop" option, in which pressing "Down" to drop a pair of eggs causes them to drop all of the way to the bottom of the grid, even if the Down button is subsequently released. It only features "soft drop", in which releasing "Down" stops the shape from falling. This is solely because I loathe the hard drop feature.
Really Bad Eggs is written for a 66MHz computer in C++, whilst Super Foul Egg was written for a 7.1MHz computer in AMOS (compiled BASIC). The remake is noticably faster and smoother.
Garbage eggs are supposed to be removed from the grid when the eggs adjacent to them explode. However, Super Foul Egg features at least one situation in which adjacent garbage eggs are incorrectly left in play.
Garbage eggs in Super Foul Egg are added to random columns. In Really Bad Eggs, these eggs are added to the lowest columns first. If there are two or more columns with the same lowest height, the leftmost column receives the garbage egg.
The bitmap for the green egg with connections at the bottom, left and right is missing from Super Foul Egg. As it is on-screen for a total of 1/50th of a second it is doubtful that anyone has ever noticed this, but Really Bad Eggs includes the correct graphic.
The incoming garbage egg display isn't always cleared correctly. Really Bad Eggs fixes this.
Really Bad Eggs vs Puyo Puyo
Though I am a huge fan of Super Foul Egg, I have never really enjoyed any of the official versions of Puyo Puyo. Most of my annoyance with the games stems from their emphasis on very long anime interludes between very short gameplay sessions.
I had a look around at some Puyo Puyo fan sites whilst writing Really Bad Eggs to see how SFE differed from the original. Below are some conscious decisions I've made to embrace or abandon Puyo Puyo features.
Recent versions of Puyo Puyo have added the ability to create defensive garbage eggs. For example, suppose my enemy dumps 10 garbage eggs on me, but before they appear I dump 5 garbage eggs on him. The game subtracts my outgoing eggs (5) from the incoming eggs (10) to give me 5 garbage eggs and my enemy none This sounded like a great feature. I implemented it and immediately hated it.
I modelled the algorithm for scoring on online descriptions of Puyo Puyo. However, it is slightly simplified. The algorithm for generating garbage is the same as Super Foul Egg's. I tried the Puyo Puyo algorithm and found that it did not work as well (at least it didn't with the modified scoring algorithm - the garbage egg count is a function of the score in Puyo Puyo, whilst it is a function of the number of eggs exploded/sequenced in SFE).
From what I read online, garbage eggs in Puyo Puyo are added to the columns with the fewest eggs (ie. the lowest columns) first. Really Bad Eggs does the same.
The original Puyo Puyo games feature steadily more advanced AI enemies. Really Bad Eggs features just one kind of AI that can be told to hesitate instead of move. The AI is fairly primitive and will only consider the potential connections made by moving and rotating the current set of live eggs. It does not plan based on the next block nor try to create sequences of chains. Despite this, it is smart enough to beat me yet not so good that it beats me every time I play it. I am sure that seasoned Puyo Puyo players will be able to run rings around it.
To play the game you will need a flash cart and a DS or a DS emulator such as DeSmuME. To compile the sourcecode you will need to install devKitARM and the WoopsiGfx library.
Credits and Acknowledgements
- Coding, reverse engineering and remixing - Antony Dzeryn
- Original graphics and sounds - David & Michael Hay
- Simian Zombie logo and title screen - John Clay
Contact me at firstname.lastname@example.org.