the cutting room mirror

Puyo Puyo Tsuu (Arcade)

Careful, you'll lose an eye.

This page or section needs more images.
There's a whole lotta words here, but not enough pictures. Please fix this.

This page or section needs more audio.
There's a whole lotta words here, but not enough audio. Please fix this.
Specifically: The arcade version has unused audio clips that were carried over to the Genesis version. Upload them.

The second game in the Puyo Puyo series. Its addition of the rather simple offset rule completely revolutionized the game, and would come to define the series.

Copy Protection#

Puyo Puyo Tsuu features a few anti-piracy measures built into the game.

Sega Protection IC Detection#

All System C2 games feature an Altera MAX EPM5032 that is responsible for handling some video controls, but it also contains a 256 x 4 bit table of values unique to each game. Reads from $800001 return a 4-bit value, the index of which is calculated from both the second-to-last thing written to $800001 (upper four bits) and the previously returned value (lower four bits). It is up to the game to implement consequences should the protection check fail, as the C2 hardware will not lock up in such a circumstance. Some of the responsible code is obfuscated through relative addressing of unclear addresses.

Disabling Garbage#

Puyo Puyo Tsuu's innovation over Puyo Puyo is that the garbage system has Sousai, the ability to return garbage, in addition to the pre-existing garbage system. If the game's table of expected return values does not match what the game reads, it will set memory address $FFA026 to 1, which disables the garbage system entirely. This effectively transforms a match into two single-player practice matches, making the game nearly unplayable. This subtle change means it is easy to burn the ROMs to a C2 board and think it's working initially, only to find later that the game isn't working correctly.

Copy Protection Protection#

If a would-be bootlegger modifies the protection check routine, the garbage system will be made to work again. However, the protection check itself has an anti-tampering detection, run right before a match begins. This anti-tampering detection will once more set the "no-garbage" flag at $FFA026, and will also set an additional flag to indicate tampering. That flag makes the game lock up when the player wins a match.

The game is not truly frozen, as elements continue to animate, but the player sprites will never appear on-screen to say a losing phrase and fall off before proceeding. Instead, the losing player's lost animation will play in the center portrait, and both sides remain empty forever.

Debug Menu#

A debug menu titled "MODE SELECT" is hidden below the "BACKUP DATA CLEAR" option in the test menu. It can be accessed by putting the following cheat in MAME's puyopuy2.xml cheat file:

<cheat desc="Unlock Debug Menu">
    <comment>Select the invisible option at the bottom of Test Menu</comment>
    <script state="run">
        <action>maincpu.mb@002AF6=09</action>
    </script>
</cheat>

(Source: pcheat0914)

Changes made in this menu are saved to the backup RAM of the arcade board, and will remain active until you change the debug options again or clear the backup RAM via the "BACKUP DATA CLEAR" option. The "MEMORY SWITCH CLEAR" option in the "CUSTOM" menu does not reset the debug options.

Debug Options#

EXIT#

Return to the main menu.

UNIT#

Rule lock and customize option. When this option has a non-zero value, the game rule is locked to the one you selected and/or customized, regardless of the current game mode. When you change this option, the settings from "LINK VOLM" to "RATE TYPE" will be changed based on the UNIT you selected. You can make additional changes to your liking, but your changes will be erased if you select other UNITs.

UNIT

LINK VOLM

HARD

PRICE

OJAMA SCORE

RATE TYPE

Used in...

0

004

NORMAL

070

000

1

(Default; Rules are not locked and your changes are ignored)

1

004

NORMAL

070

000

1

2P Normal Rule

2

002

SPECIAL

070

000

1

Unused

3

003

NORMAL

070

030

1

Unused

4

004

SPECIAL

140

010

1

2P Hard Puyo Rule

5

004

SPECIAL

180

030

2

Unused?

6

004

NORMAL

120

050

2

2P Point Puyo Rule

7

004

NORMAL

180

030

3

1P Point Puyo Rule

8

004

FUTA

120

010

3

1P Hard Puyo Rule #1

9

004

SPECIAL

120

010

3

1P Hard Puyo Rule #2

A

004

NORMAL

120

000

3

1P Normal Rule

B

004

FUTA

100

010

1

Unused?

This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: I'm not really sure if UNIT 5 and B are unused or not.

Select the number of Puyos required to clear the group of it. The only value used during normal game play is obviously 004, but you can change it from 001 to 072.

HARD#

Select the toughness of Nuisance Puyo.

  • NORMAL: Regular Nuisance Puyo only.
  • FUTA: Hard Puyos on top row, the rest are regular Nuisance Puyos.
  • SPECIAL: Hard Puyo only.

PRICE#

Select the points required to send one Nuisance Puyo. Ranges from 001 to 255.

OJAMA SCORE#

Select the bonus points given from clearing the Nuisance Puyo. Ranges from 000 to 255.

RATE TYPE#

Select which Chain Power Table to use.

  • 1:Multiplayer Normal
  • 2:Multiplayer Point Puyo
  • 3:Singleplayer

CPU PLAYER#

Select the demo play AI. Ranges from 000 to 031. Default is 023 (Witch). Masked Satan (032) is strangely absent from this setting.

ZSTAGE#

Level select for single player mode. This doesn't seem to include any secret boss fights or Masked Satan fights.

The game starts from various number of Stage numbers. If you beat the game while skipping earlier stages (ex. directly starting from final boss and winning), you will see bunch of bogus fight records against various characters such as Skeleton-T, Samurai Mole, and Masked Satan.

ZSTAGE

Level

Stage

Notes

ZSTAGE

Level

Stage

Notes

OFF

1

1

(Default)

016

3

3

Start from Level 3

000

1

1

Start from Level 1

017

3

4

001

1

2

018

3

5

002

1

3

019

3

6

003

1

4

020

3

7

004

1

5

021

3

8

005

1

6

022

4

4

Start from Level 4

006

1

7

023

4

5

007

1

8

024

4

6

008

1

9

025

4

7

009

2

2

Start from Level 2

026

4

8

010

2

3

027

5

5

Start from Level 5

011

2

4

028

5

6

012

2

5

029

5

7

013

2

6

030

6

6

vs. Schezo Wegey

014

2

7

031

6

7

vs. Rulue

015

2

8

032

6

8

vs. Satan

MONSTER#

Lock the opponent character to the specific one. If you select someone other than Satan and Masked Satan then beat the game, you will get a bad ending, because the game chooses the ending based on what character you fought during the final battle.

MONSTER

Name

MONSTER

Name

OFF

(Default; No opponent lock)

016

Panotty

000

Will O Wisp

017

Sasori Man

001

Momomo

018

Suketoudara

002

Nohoho

019

Uroko Sakana Bito

003

Nomi

020

Harpy

004

Skeleton-T

021

Parara

005

Mini Zombie

022

Dragon

006

Nasu Grave

023

Witch

007

Sukiyapodes

024

Pakista

008

Samurai Mole

025

Draco Centaur

009

Mummy

026

Rulue

010

Owl Bear

027

Minotaur

011

Baromett

028

Zoh Daimaoh

012

Trio the Banshee

029

Mamono

013

Fufufu

030

Schezo Wegey

014

Cait Sith

031

Satan

015

Zombie

032

Masked Satan

FLAME#

Unknown. This is the only option that does not get saved to the backup RAM. Default value is 000 and the range is 000 to 013.