We just reached 30,000 articles on this wiki! 🥳
If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
This article has a talk page!

Bejeweled 3 (Windows, Mac OS X)

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Bejeweled 3

Developer: PopCap Games
Publisher: PopCap Games
Platforms: Windows, Mac OS X
Released in US: December 7, 2010


AreasIcon.png This game has unused areas.
CodeIcon.png This game has unused code.
ObjectIcon.png This game has unused objects.
GraphicsIcon.png This game has unused graphics.
MusicIcon.png This game has unused music.
SoundIcon.png This game has unused sounds.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.
RegionIcon.png This game has regional differences.


PrereleaseIcon.png This game has a prerelease article
BugsIcon.png This game has a bugs page

Hmmm...
To do:
The Mac version on Steam has cheat keys enabled. More info: 1 2 3 4 5 6

Bejeweled 3 is the third (or fifth?) game of popular match-3 puzzle series.

As with most of PopCap's other games, this game packs most of the resources to a single file named "main.pak". You can extract the resources by using QuickBMS with this plugin. You can also repack the files by using "PopPak.exe" that is included in PopCap Games Framework.

Contents

Sub-Pages

Read about prerelease information and/or media for this game.
Prerelease Info
Read about notable bugs and errors in this game.
Bugs

Unused Graphics

Early Exit Button

Goodbye

This graphic would have suited the main title screen of Blitz and in this game too, if 3D Acceleration isn't active, due to it having a different floor backdrop. Instead, these games opted for a simple text icon saying "Quit."

Checkpoint Marker

If you die, you can restart from here. Oh, you don't have extra lives?

Usage unknown. Probably was a spot to keep track of your Quest progress?

Detonator

Scrapped because it's too ugly.

This very out-of-place looking Detonate button is NOT a leftover from the Windows version of Bejeweled Blitz. Blitz had a far more intricate detonator button than this. It may have been likely this was used to detonate a BOMB rather than using the detonator powerup, but in the bomb quests you immediately lose the mission and don't get a chance to disarm a bomb. Also, matchless move code exists, so it may have been planned to have a Classic-like mode, but you can make matchless moves and bombs would spawn.

Doom Gem

His count won't decrease, as you can't move gems freely.

This is in a leftover from Bejeweled Blitz, identical to that game's files. Bomb Gems made an appearance in this game, but Doom Gems did not. Also, Doom Gem code does exist in this game.

Replay Button

Replay your best moments.

These ARE NOT buttons from Bejeweled Twist. These are different textures which might've had a purpose for a Scoreboard screen like how Twist did at some point.

Clockwork Textures

Unused textures for a clock object. Possibly an unused timer.

Bejeweled Blitz Leftovers

Green Question

Help?????

This is a leftover from Bejeweled Blitz's Mystery Gem boost. This is also very similar to Poker mode's wildcard, but the wildcard uses a different graphic than this one.

Silver Coin (Stats)

Shiny.

In the dialog folder, there exists both graphics for both the Silver coin and Gold coin from Blitz.

Gold Coin (Stats)

Extra shiny. Not as shiny as a Shiny Mew though.

Regional Differences

Unused Images

Bej3 Incredible.png
Bej3 Astonishing.png

Unused compliments found in Bejeweled 3's Japanese translation. These images do not appear in the Western-language versions.

Unused Special Gems

Doom Gem

OCD-unfriendly.

What appears to be scrapped from Bejeweled Twist, this gem is incorrectly positioned on the board by default. Like Twist, the gem locks itself into place, but it is not possible to decrement the counter on this gem, as the mechanics differ from Twist.

Two types of the Doom Gem exist; 01 being the numberless version, that'll still explode when its counter is not set, and 03 displays the countdown.

Leftovers from Bejeweled Blitz (Windows)

Multplier Gem

Shiny shiny...

Even though it lacks the graphics for the bonus multiplier display, the mechanics still function; the game will indeed multiply the score by the multiplier given, until the game's ended. This is not limited to the 8x bonus Blitz had.

Scrambler, Detonator and Coin Gems

Both available to be set as gem types, these don't have custom graphics on their own and so appear to be a normal gem, until hovered over which can be identified via the flavour text.

The detonator gem appears to be non-working even when other special gems are on the board, but the scrambler gem does scramble the board, for two turns. scramble.wav plays when the gem is clicked on.

The coin gem has the score base value of 300x[Level Number], while playing diamond_mine_treasurefind.ogg when matched, which is completely similar to the sound effect in Blitz.

Mystery Gem

Doesn't give you any special gem...

Similar to the Doom Gem, it's locked into place and won't swap with neighboring gems, and refuses to match with same colored gems. The board can not level up with this gem present, even when the progress bar is full.

Unused Quests

Inside main.pak, there is a "properties" directory which has configuration files.

  • defaultquest.cfg: Early Quest mode configurations
  • quest.cfg: Final Quest mode configurations
  • secret.cfg: Secret modes configurations (Poker, Butterflies, Ice Storm, and Diamond Mine)
  • speed.cfg: Lightning mode configurations
  • badges.txt: Badge requirements
  • ranks.txt: Rank names
  • tips.txt: Tip of the day (Appears during loading screen)
  • music.xml: Music configurations
  • resources.xml: Location of resources

There are two different Quest mode configuration files: defaultquest.cfg and quest.cfg. Only quest.cfg is used by the actual Quest mode. defaultquest.cfg has early designs of Quest mode. It's not used by the game by any normal means. However, it IS still loaded by the game, and partly used by the Debug Menu

There are 21 missions in defaultquest.cfg. The only way to play them is by hacking the current quest.cfg.

12 missions can be played without problems. 3 missions require the use of the debug menu because one must bypass the Quest Menu. 4 missions require repairing in order to play. 2 missions are unplayable.

All but 4 missions select the background randomly, unlike the final game's missions.

Mission #1: Lead to Gold - Any match

Welcome to a strange world
Fill the grid with gold by making matches.

This type of mission is completely unused in the final game. It's similar to Alchemy, but the matches do not turn entire rows/columns to gold.

Your goal is to fill the entire grid to gold within 1 minute. The time limit is short, but fortunately, the outer grids are already gold from the start.

You can't play this mission without using the debug menu, because the game crashes when you open up the Quest Mode menu. The reason of the crash is probably because the final game no longer has the icon for these type of missions.

Mission #2: Lead to Gold - Yellow matches

Before the match After the match
Yellow only? Really?
Oh.
Fill the grid with gold by making yellow matches.

This type of mission is also completely unused in the final game, and can only be played via the debug menu. Only yellow gem matches can turn the grids to gold, but if you do it, it will turn 8 surrounding grids to gold too, similar to how Flame Gems work.

You can't die in this mission; there are no time or move limits.

Mission #3: Lead to Gold - Columns & Rows

Fill the grid with gold by making matches.

This is almost the same as the final game's Alchemy mission. However, you have only 1 minute as opposed to 1:30.

Mission #4: Wall Blast

Can you see where the last breakable wall is?
Destroy the wall with special gems.

This looks similar to the final's one, but there are twists: Most walls are invisible. Some visible walls can't be destroyed. It selects the wall patterns from one of the 3 different maps. There are no time or move limits, but you are still vulnerable to the frustration of invisible/unbreakable walls.

This is one of the four missions that has non-random background. It has background #0, which is same as the final's Wall Blast missions.

Mission #5: Time Bomb

Destroy 10 bomb gems by matching them before the countdown reaches zero!

This is almost the same as the final game's same mission. You have to destroy 10 bomb gems before any countdown to zero. Each bomb has 20 moves countdown.

Mission #6: Time Bomb (Real time)

Destroy 10 bomb gems by matching them before the countdown reaches zero!

This is almost the same as the final game's Time Bomb II mission, but new bombs drop more frequently. You have to destroy 10 bomb gems before any countdown to zero. Each bomb has 60 seconds.

Mission #7: Inferno

Match 200 gems before the flames reach the top of the board!

Inferno is the internal name of Ice Storm mode. So you see ice instead of fire. Strangely, there are no ice bars here, most likely because it lacks the mandatory settings for today's Ice Storm mission.

Mission #8: Balance

Collect 25 red and 25 blue gems, but don't let the weights get too unbalanced!

This is a slightly easier version of the final's Balance III. You have to clear 25 red and blue gems instead of 30.

Mission #9: Stratamax

Clear 100 gems in 20 moves.

This is an easy version of the final's Stratamax missions.

Mission #10: Butterflies

Catch 20 butterflies before they escape the top of the board!

This is a slightly harder version of the final's first Butterflies mission. You have to catch 20 butterflies instead of 15.

Mission #11: Avalanche

Clear 100 gems without allowing the board to fill up. Each move adds 5 gems.

This is very similar to the final's Avalanche IV, but you only need 100 gems instead of 110.

Mission #12: Butterflies + Wall

Invisible walls are back! Now with butterflies!
Knock down the wall and capture any butterflies before they escape.

Two challenges in one mission! Surprisingly, it can be played WITHOUT the debug menu. It uses the Butterflies icon and music.

You must battle against invisible/unbreakable walls (patterns are selected from 3 different maps) while catching the butterflies.

Mission #13: Lead to Gold + Time bomb

Alchemists vs Terrorists
Fill the grid with gold by making matches.

Another mixed challenge. This one crashes the Quest Menu and requires the debug menu, because it uses the scrapped Gold system which is the same as the first mission.

You must battle against an unlimited amount of bomb gems (20 moves) and fill the entire grid to gold. The bomb gems do not appear until the first move.

Mission #14: Buried Treasures

Find buried treasures within 50 moves! Avoid the skull!

It crashes the game if you simply copy paste the configurations from defaultquest.cfg. To repair, use the following configurations instead:

Quest "Buried Treasures"
    Description = "Find buried treasures within 50 moves! Avoid the skull!"
    Challenge = "Move Limit"
    Goal = "Hidden Objects"
    ItemSet = "3"
    Moves = 50;

You have to find 4 treasures in 50 moves, instead of 120 or 90 seconds. The "skull" feature is removed from the final game, but probably a bad thing would have happened when you uncover it.

Mission #15: Sandstorm

Find buried treasures! They cover back up over time. Avoid the skull!

It crashes the game by default, too. Use the following configurations to repair it:

Quest "Sandstorm"
    Description = "Find buried treasures! They cover back up over time. Avoid the skull!"
    Challenge = "Time Limit"
    Goal = "Hidden Objects"
    ItemSet = "3"
    Time = 120
    RefillRateSec = 20.00;

You have to find 4 treasures within 2 minutes. The sand refills after 20 seconds. This is the early version of Sandstorm II. It has a longer time limit (Sandstorm II has only 1:30) but has a faster sand refill rate (Refill starts after 30 seconds in Sandstorm II).

Mission #16: Poker

Oops!
Description:
 Score 200 points before running out of hands.

HelpText:
 Assemble the best hand possible out of 5 cards! Every
 match reveals a new card of the color of the gem you
 swapped. Mouse over the score sheet on the left to
 see a description of each valid hand.
 
 You have 10 hands to score 200 points.  Good luck!

It crashes the game if you simply copy paste the configurations from defaultquest.cfg. To repair, use the following configurations instead:

Quest "Poker"
    Description = "Score 200 points before running out of hands."
    HelpText = "Assemble the best hand possible out of 5 cards! Every match reveals a new card of the color of the gem you swapped. Mouse over the score sheet on the left to see a description of each valid hand.\n\nYou have 10 hands to score 200 points. Good luck!"
    Challenge = "Poker"
    HyperMixers = true
    Goal = 200
    Hands = 10
    FlameBonus = 5
    StarBonus = 5
    HandValues = "0, 0, 5, 10, 25, 40, 75";

The value for hands are quite different from the final's Poker missions. Pair and Spectrum are worth 0 points. If your hand ends in Pair or Spectrum, "No Score" will be displayed, but the bonus for special gems are still added.

This mission has detailed help text, unlike most others.

Mission #17: Gold Rush

Yes, the casino had a diamond mine.
Break through the rock to collect diamonds before timer runs out!

You have to mine 15 gold nuggets within 2 minutes. The game play is similar to the final's Gold Rush missions, but visuals are not. It uses Alchemy/Buried Treasure/Sandstorm music, and background #9 (Poker).

Mission #18: Scrolling Gold Rush

Break through the rock to collect diamonds before timer runs out!

It uses the Gold Rush icon, but crashes the game if you try to enter it. It appears to be an early version of the Diamond Mine secret game.

Mission #19: Lead to Gold - Othello

Flip the gold tile twice to earn gold.

This is an early version of Alchemy III. You have 60 seconds instead of 30 moves, and cascades do not turn grids to lead or gold.

When played without repairing, you win the game instantly as soon as you enter here. To actually play this mission, replace the following line:

Target = 100;

with

Squares = 64;

Mission #20: Ice Storm

Description:
 Match 100 gems before ice reaches the top of the board!
HelpText:
 Ice is creeping up the board. Knock ice down by
 making matches above or below it. Match 100 gems
 before ice reaches the top of the board!

It seems this mission was created after the name of Ice Storm was finalized. It works better than Inferno mission; the ice bars are actually working. Either by a mistake or a testing purpose, only 10 gems (not 100) are required to win the game.

It uses background #16 (One of the Classic/Zen only backgrounds).

Mission #21: Diamond Mine

Description:
 Mine all rocks and gold above the line before time runs out!
HelpText:
 Dig through rocks and gold by matching gems near
 them. Clear above the line before time runs out to
 keep mining. The deeper you mine the better your
 score!

It's the revised version of Scrolling Gold Rush. It crashes the game if you try to enter it. It has high-score related settings and several Artifact related settings. It uses background #3 (Buried Treasure/Sandstorm).

Unused Quest Options

Common Options

There are some common options that can be defined in any quests and secret modes. Some of them are not used by any of quests or secret modes.

WantPointComplements

# WantPointComplements		true/false		turn on voice point-based complements (default is off)

It will display the complements ("Good!", "Awesome!", etc) when you destroy a large number of gems in a single move or when you make a big cascade.

RecordHighScores

# RecordHighScores		true/false		game should record high scores

It controls whether to show the stats screen after finishing a game. The default is false for quests, and true for secret games.

This setting can lead to two different unused things. When set to true in a quest, it will show the unused stats screen. When set to false in a secret mode, it will enable access to the debug menu.

ColorCountTarget and ColorCountTargetSec

# ColorCountTarget		integer			number of colors to change to
# ColorCountTargetSec	number			seconds until color target is reached

These options are mentioned only in defaultquest.cfg, and does nothing when used.

Unused Challenge Types

The following are unused Challenge types for Quest Mode that can only be found in the game's executable.

BUTTERFLY

This is the alias of Butterflies challenge type. Everything is the same as Butterflies, except for the lack of a quest icon.

No Lose

"No Lose" challenge type actually appears several times in the final game's quest file, but ignored by the game as it is quickly overwritten by another challenge type.

As the name suggests, this challenge features no hazards, and possibly used by the developers for testing.

Unlike other challenges, the progress bar is shown below the game board like Classic/Zen modes. In other challenges, the progress bar is shown inside of the score display.

BAD MOVE LIMIT

The game ends after the player makes a certain number of bad moves. The number of bad moves so far made is not displayed to the screen. It is otherwise the same as the "No Lose" challenge type, including the position of the progress bar.

The number of bad moves allowed is defined by an otherwise unused "BadMovesAllowed" option:

BadMovesAllowed = [Integer]

Unused Goal Types

The following are unused Goal types for Quest Mode that can only be found in the game's executable.

DETONATOR

The goal is to destroy 20 gems in 1 move. If a cascade ends before reaching 20 gems, the score becomes zero. For 20-gems-requirement, none of the known options seem to change this.

ARSENAL

The goal is keep a certain number of Flame Gems on the screen. The score increases when you create Flame Gems, and decreases by destroying them. The number of Flame Gems required is defined by the "Gems" option.

SCORE

Probably, the goal is to score a certain number of points. However, no known actions give you points. The required number of points is defined by an otherwise unused "Score" option:

Score = [Integer]

FIRESTORM

The goal is to create a certain number of Flame Gems. You don't have to detonate them; just create them. The required number of Flame Gems is defined by an otherwise unused "FlameGems" option:

FlameGems = [Integer]

PRESERVER

The goal is to keep a certain number of certain colored gems on the screen. The score increases when the required colored gems appear on the screen, and decreases by destroying them. The number of required gems is defined by the "Gems" option. The gem color is defined by an otherwise unused "Color" option:

Color = [Integer] (0:Red, 1:White, 2:Green, 3:Yellow, 4:Purple, 5:Orange, 6:Blue)

HIDDEN GEMS and HIDDEN GRID

HIDDEN GEMS HIDDEN GRID
Gray rectangle gems.
Gray rectangle grids.

The goal is the same as the "Clear Gems" goal type; clear a required number of gems to win. However, when an otherwise unused "HidePerMatch" option has a non-zero value, most of the board is covered with gray rectangles.

HidePerMatch = 1

All gray rectangles reappear each time you make a match. However, the gray rectangles are removed from nearby cleared gems (this includes your match, cascades, and newly generated gems). The difference between two goal types is whether or not you can see the gem color by trying to make a bad move. In HIDDEN GEMS, it's impossible due to the rectangles moving along gems. In HIDDEN GRID, it's possible; the rectangles do not move.

Another option named "HidePerUpdate" exists. Using this will cover the entire board with gray rectangles that cannot be removed.

HidePerUpdate = 1

SURVIVAL

Probably, the intended goal is to survive a certain number of seconds. However, nothing happens when the required time is passed. The required time is defined by an otherwise unused "SurviveSec" option:

SurviveSec = [Integer]

In the game, the goal is set to (SurviveSec * 100). For example, if SurviveSec is 60, it will display 6000 as the goal. Although the progress bar constantly fills, the score never increases. If the progress bar becomes full, the bar resets.

Other Unused Options

StartingMoney

This option sets the initial amount of score ("Money") in Poker quests.

StartingMoney = [Integer]

Unknown Options

Elementary, my dear Cactus.
This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: Figure out the functions of these options.

The following are other unused options. Those functions are currently unknown.

GemsPerLevel
MaxActiveColCount
FireSpeedIncrLevel
LevelDurationSec
LevelProgress
TimePenalty

Unused Quest Mode Stats Screen

This screen can be enabled by adding the following line after each "Quest" line, in quest.cfg:

RecordHighScores = true

After being enabled, this screen will be activated when the player completes or fails a mission. It has a "New Quest" button (used only in this screen) instead of the "Badges" button.

The buttons do not work as intended; "New Quest" and "Main Menu" buttons will crash the game. "Play Again" button will nearly freeze the game screen, however the player can still exit to the quest menu by pushing the Escape key, which will bring the pause screen. "Play Again" button will still crash the game if the bomb is exploded in Time Bomb missions, as the explosion unloads the board graphics from RAM.

Missions of Butterflies, Poker, and Ice Storm will display some statistics. All other type of missions (including Gold Rush for unknown reason) will show an empty screen.

Debug Menu

Something went wrong.

Debug menu can be enabled by adding the following line after each "Quest" line, in secret.cfg:

RecordHighScores = false

After enabled, go to any of 4 secret modes, then get a Game Over, and you'll be in the debug menu!

When you enter the debug menu, you are at the Secret Games debug menu, but there are lots of mess in the screen. Click the "Back" button to access the main debug menu and clean up the mess.

Please note when you play games from debug menu, you must disable "Animate Background" option to avoid huge slowdowns.

The regular backgrounds are not loaded when playing from the debug menu. Instead the game uses the static screen shot of Secret Games debug menu as a background.

Main Debug Menu

The shortcuts.
  • Play Classic: Starts Classic mode.
  • Time Bonus: Starts Lightning mode.
  • Tug of War: Crashes the game. (Removed mode?)
  • Play Zen: Starts Zen mode.
  • Play Quests: Takes you to normal Quest mode menu.
  • Secret Modes: Takes you to Secret Games debug menu, but without the mess in the screen.
  • [Bunch of small buttons]: Quest mode shortcut. The quest names are loaded from defaultquest.cfg, but actual quest configurations are loaded from quest.cfg. So, if you click "Lead to Gold - Any match" button, you'll be taken to the first Butterflies mission. The game will crash upon completion of the mission.
  • Main Menu: Takes you to Secret Games debug menu.
  • Quit: Quits the game without confirming.

Secret Games Debug Menu

Clean and simple.
  • Poker: Starts Poker mode.
  • Butterflies: Starts Butterflies mode.
  • Ice Storm: Starts Ice Storm mode.
  • Diamond Mine: Starts Diamond Mine mode.
  • Back: Takes you to the main debug menu.

Unused Text

This Quest needs help text. Insert a
HelpText parameter in the appropriate
quest .XML file

This help text appears when you click the quest objective in most of the unused quests. Please note the final game does not use XML for quest mode configurations.

Scrambles all gems on the board.
Detonates all Special Gems on the board.
Creates a random Special Gem at game start.
Creates a x2 Multiplier at game start.
Adds 5 seconds to the end of the game.
Scrambler
Detonator
Mystery Gem
Free Multiplier
+5 Seconds
MULTIPLIER GEM
Randomly drops onto your board. Match it to increase your score multiplier by 1!
COIN
Clear this Gem to collect the coin inside! Save money to buy Boosts!

Leftover text from Bejeweled Blitz.

<!-- DO NOT EDIT THIS FILE. This file is generated by ResourceGen3.  Any changes will be overwritten! -->

The generation note in resources.xml was changed in Mac version and future releases, also having more parameters. Possibly from Resource Generator 3.

Unused Music Sequences

Several unused music strings can be found in the main Bejeweled3_suite.mo3 file.

Sequences 22 to 27. Uniquely, outside of this game it is listed in Bejeweled 3's Bandcamp OST as a "bonus track" with the name Gems of Glass.

Sequences 90 to 94, that is apparent that were initially part of Zen's music, judging from the Pattern Name from the remastered OST file.

Sequences 96 to 105 are all linked together, with the majority of them appearing to be left unfinished as fragments.

Offset 96, with tempo 176, which perhaps might suggest to be an earlier version of Avalanche/Stratamax's music. In the tracker file of the remastered OST, this is named "Hoppers."

Offset 97, with tempo 112. In the tracker file of the remastered OST, this is named "Waiting." Perhaps this was an early loading screen theme?

Offset 98 to 99, with tempo 112. In the tracker file of the remastered OST, this is named "Dumb Theme."

Offset 100, with tempo 112. In the tracker file of the remastered OST, this is named "Das Boat." Quest Level music perhaps?

Offset 101, with tempo 120. In the tracker file of the remastered OST, this is named "Celt Hero." Maybe was going to be used as another Quest theme due to Celt meaning "A cut stone for use as a tool."

Offset 102, with tempo 128.

Offset 103, with tempo 128. In the tracker file of the remastered OST, this is named "Slow Theme Test."

Offset 104, with tempo 144. In the tracker file of the remastered OST, this is named "Zeitgeist 1." Likely another early version of Stratamax/Avalanche's theme due to similar instruments used.

Offset 105, with tempo 96. In the tracker file of the remastered OST, this is named "Vangalis Herp Derp." Despite the funny sounding name, this might've been used for Diamond Mine or the Gold Rush and Buried Treasure/Sandstorm quests due to this theme having similar instruments used.

Unused Sounds

Most sound effects here are leftovers from Bejeweled Blitz. Bejeweled 3 was built from Blitz, so it makes sense why these are left over.

Bejeweled Blitz Leftovers

coin_created.wav

This was played when Coin gems were to appear on the board in Blitz, but they are unused since there is no currency system.

scramble.wav

This was played in Blitz when you activated the Scrambler powerup, no powerups exist.

background_change.ogg

This sounds plays when you activated a multiplier gem, and the background would change based on what multiplier. Multiplier gem code exists, but is unused in Lightning mode. (Previously from the "Blitz" mode from Bejeweled Blitz.)

multiplier_appears.ogg

This plays in Blitz when a multiplier appears on the board.

multiplier_hurrahed.ogg

Lastly, this plays whenever a multiplier gem during Last Hurrah is cleared.


However, there is one sound that is not in Blitz that is new in 3.

sin500.ogg

An unused 500hz sinewave. Unknown purpose.

Debug Commands

Hmmm...
To do:
There may be more in the final game, class sub_5B8E50 in IDA for v1.0.6.6126 (PC) is the debug key detector function, in it it suggests there's more keypresses that may or not work.
  • A (Reload all resources?)
  • W (Widget inspector?)
  • B (Breakpoint?)
  • P (PDB symbol related?)

Check the debug build of the advertising library in the JP ver for debug-only commands, as it includes the debug framework (base/pl_d.dll, base/pcon/pl/dll and fp_d.dll). I excluded the ones from the public framework here.

  • S (Reload scenery?)
  • F9 (Render flag toggle?)

Pressing CTRL-ALT-D will play a sound to indicate debug key input is enabled, allowing options of typing unique keys for debugging displays or mechanisms, another use will disable it, a few were upgraded and few were removed as the framework got an overhaul since Blitz. Note on Mac only the first two and most from the framework have an effect, but any one involving a visual will be very small on 1920x1200 mode.

  • F1 - Fixed a issue preventing UpdateCount from being displayed however a character at the end appears after the current version. DesktopRes and CustomCursors were added to show the resolution of the desktop and whether custom cursors are on or off.
  • F3 - Compared to Blitz, Updated to include X and Y offsets of a current match in brackets.

Bej3DebugDisplay.png

  • Shift-F8 - No longer restarts the game in the pause menu, do not use this with 3D Acceleration enabled on the main menu as it crashes the game.

Command-Line Launch Options

The game uses most of the typical PopCap Framework launch options, some like -webroot were ported from Bejeweled Blitz with no working functionality but a couple are unique. -record, -recnum, -playnum, -demofile and -play to load demo files were removed from the framework.

Argument Description Screenshot (if necessary)
-600 Forces the game to run at the "Normal" resolution mode (800x600). N/A
-768 Forces the game to run at the "High" resolution mode (1024x768). N/A
-1200 Forces the game to run at the "Ultra" resolution mode (1920x1200). N/A
-classic When the game starts, it will skip the main menu and jump to the Classic mode. N/A
-speed When the game starts, it will skip the main menu and jump to the Lightning mode. N/A
-quest When the game starts, it will skip the main menu and jump to the Quest mode. N/A
-wide Forces the game into the widescreen mode, even if the player is using windowed mode. Bejeweled 3-DebuggingCommand-Wide.png
-zen When the game starts, it will skip the main menu and jump to the Zen mode. N/A
-testbkg Loads a specific background with said images from a PopAnim Module file after starting a game mode. Example use: testbkg=images\1200\backgrounds\main_menu\main_menu.pam Bej3 DebuggingCommand Testbkg.png
-nod3d9 Boots up the game with the Direct3D 8 graphics API. N/A

Development leftovers

Stats Dump Function

Hmmm...
To do:
What else does it do and what content does the file contain?

On Windows builds of the game, the game's Bej3App class contains a function to dump stats to PopCap's internal network share which is called when quitting the game, surprisingly not cut from retail. While being hard to know what it actually does, strings for it are below. It calls OPTIONS before doing anything else. The first string is the computer name while the last string is the selected profile of the user.

SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName
ComputerName

\\sea-popshare\shares\Game Builds & Betas\Bejeweled 3\stats\statsdump1\
%s_%s.txt
ab

Debug Advertising Library

In the Japanese version, libraries for handling advertising are present. While advertising libraries are largely uninteresting, it also uses a debug build of the private framework and has symbol files, having most content stripped from release builds.

CFGASM file

Hmmm...
To do:
This IS referenced by the debug framework build from the JP ver.

default.cfgasm is present in the Chinese and Japanese version, it has a plaintext numeric list of content from the compatibility configuration file that has no use from the game.

0:	Load Const Int "4318"
3:	Store Var "VENDOR_NVIDIA" [0:0]
6:	Pop
7:	Load Const Int "4098"
10:	Store Var "VENDOR_ATI" [0:2]
13:	Pop
14:	Load Const Int "32902"
17:	Store Var "VENDOR_INTEL" [0:4]
20:	Pop
21:	Load Const Int "4153"
24:	Store Var "VENDOR_SIS" [0:6]
27:	Pop
28:	Load Const Int "4139"
31:	Store Var "VENDOR_MATROX" [0:8]
34:	Pop
35:	Jmp @145
37:	Load Property "compat_IsVista" [0:15]
40:	Jf @111
42:	Load Property "compat_AppSysMemTotalMB" [0:12]
45:	Load Const Int "768"
48:	CmpGE
49:	Copy
50:	Jf @60
52:	Pop
53:	Load Property "compat_AppOrigScreenHeight" [0:14]
56:	Load Const Int "1050"
59:	CmpGE
60:	Copy
61:	Jf @71
63:	Pop
64:	Load Property "compat_AppVidMemory" [0:10]
67:	Load Const Int "192"
70:	CmpGE
71:	Jf @79
73:	Load Const Int "1200"
76:	Ret
77:	Jmp @109
79:	Load Property "compat_AppSysMemTotalMB" [0:12]
82:	Load Const Int "512"
85:	CmpGT
86:	Copy
87:	Jf @97
89:	Pop
90:	Load Property "compat_AppOrigScreenHeight" [0:14]
93:	Load Const Int "600"
96:	CmpGT
97:	Jf @105
99:	Load Const Int "768"
102:	Ret
103:	Jmp @109
105:	Load Const Int "600"
108:	Ret
109:	Jmp @141
111:	Load Property "compat_AppSysMemTotalMB" [0:12]
114:	Load Const Int "512"
117:	CmpGT
118:	Copy
119:	Jf @129
121:	Pop
122:	Load Property "compat_AppOrigScreenHeight" [0:14]
125:	Load Const Int "600"
128:	CmpGT
129:	Jf @137
131:	Load Const Int "768"
134:	Ret
135:	Jmp @141
137:	Load Const Int "600"
140:	Ret
141:	Load Const Bool "false"
144:	Ret
145:	Load Const Int "0"
148:	Store Property "shader_whiteout_fallback" [0:29]
151:	Pop
152:	Load Const Int "0"
155:	Store Property "shader_sidebar_p_fallback" [0:31]
158:	Pop
159:	Load Const Int "0"
162:	Store Property "shader_sidebar_tube_p_fallback" [0:33]
165:	Pop
166:	Load Const Int "0"
169:	Store Property "shader_sidebar_engine_p_fallback" [0:35]
172:	Pop
173:	Load Const Int "0"
176:	Store Property "shader_cube_p_fallback" [0:37]
179:	Pop
180:	Load Const Int "0"
183:	Store Property "shader_rainbow_cube_p_fallback" [0:39]
186:	Pop
187:	Jmp @382
189:	Load Property "compat_D3DVendorID" [0:18]
192:	Store Var "vendor" [9:0]
195:	Pop
196:	Load Property "compat_D3DDeviceID" [0:19]
199:	Store Var "device" [9:1]
202:	Pop
203:	Load Const Int "4"
206:	Store Var "maxstages" [9:2]
209:	Pop
210:	Load Var "vendor" [9:0]
213:	Load Var "VENDOR_INTEL" [0:4]
216:	CmpEQ
217:	Jf @237
219:	Load Property "compat_D3DPSVersion" [0:28]
222:	Load Const Float "1.000000"
225:	CmpLT
226:	Jf @235
228:	Load Const Int "1"
231:	Store Var "maxstages" [9:2]
234:	Pop
235:	Jmp @253
237:	Load Property "compat_D3DPSVersion" [0:28]
240:	Load Const Float "1.000000"
243:	CmpLT
244:	Jf @253
246:	Load Const Int "2"
249:	Store Var "maxstages" [9:2]
252:	Pop
253:	Load Var "maxstages" [9:2]
256:	Load Const Int "2"
259:	CmpEQ
260:	Jf @285
262:	Load Const Int "2"
265:	Store Property "shader_whiteout_fallback" [0:29]
268:	Pop
269:	Load Const Int "2"
272:	Store Property "shader_sidebar_p_fallback" [0:31]
275:	Pop
276:	Load Const Int "2"
279:	Store Property "shader_rainbow_cube_p_fallback" [0:39]
282:	Pop
283:	Jmp @322
285:	Load Var "maxstages" [9:2]
288:	Load Const Int "1"
291:	CmpEQ
292:	Jf @322
294:	Load Const Int "3"
297:	Store Property "shader_whiteout_fallback" [0:29]
300:	Pop
301:	Load Const Int "3"
304:	Store Property "shader_sidebar_p_fallback" [0:31]
307:	Pop
308:	Load Const Int "2"
311:	Store Property "shader_sidebar_tube_p_fallback" [0:33]
314:	Pop
315:	Load Const Int "3"
318:	Store Property "shader_rainbow_cube_p_fallback" [0:39]
321:	Pop
322:	Load Const String "maxstages = "
325:	Load Var "maxstages" [9:2]
328:	Add
329:	Log
330:	Load Const String "shader_whiteout = "
333:	Load Property "shader_whiteout_fallback" [0:29]
336:	Add
337:	Log
338:	Load Const String "shader_sidebar_p = "
341:	Load Property "shader_sidebar_p_fallback" [0:31]
344:	Add
345:	Log
346:	Load Const String "shader_sidebar_tube_p = "
349:	Load Property "shader_sidebar_tube_p_fallback" [0:33]
352:	Add
353:	Log
354:	Load Const String "shader_sidebar_engine_p = "
357:	Load Property "shader_sidebar_engine_p_fallback" [0:35]
360:	Add
361:	Log
362:	Load Const String "shader_cube_p = "
365:	Load Property "shader_cube_p_fallback" [0:37]
368:	Add
369:	Log
370:	Load Const String "shader_rainbow_cube_p = "
373:	Load Property "shader_rainbow_cube_p_fallback" [0:39]
376:	Add
377:	Log
378:	Load Const Bool "false"
381:	Ret
382:	Jmp @420
384:	Load Property "compat_D3DVendorID" [0:18]
387:	Load Var "VENDOR_SIS" [0:6]
390:	CmpEQ
391:	Copy
392:	Jt @402
394:	Pop
395:	Load Property "compat_D3DVendorID" [0:18]
398:	Load Var "VENDOR_MATROX" [0:8]
401:	CmpEQ
402:	Jf @412
404:	Load Const String "Returning Is3DSupported false due to SIS or Matrox hardware"
407:	Log
408:	Load Const Bool "false"
411:	Ret
412:	Load Const Bool "true"
415:	Ret
416:	Load Const Bool "false"
419:	Ret
420:	Jmp @463
422:	Load Property "compat_D3DVendorID" [0:18]
425:	Load Var "VENDOR_NVIDIA" [0:0]
428:	CmpEQ
429:	Jf @455
431:	Load Property "compat_IsVista" [0:15]
434:	Copy
435:	Jf @445
437:	Pop
438:	Load Property "compat_D3DDriverVersion" [0:25]
441:	Load Const String "7.15.10.9686"
444:	CmpEQ
445:	Jf @455
447:	Load Const String "Returning Is3DRecommended false due to bad default Vista driver for nVidia cards"
450:	Log
451:	Load Const Bool "false"
454:	Ret
455:	Load Const Bool "true"
458:	Ret
459:	Load Const Bool "false"
462:	Ret
463:	Jmp @473
465:	Load Const Bool "false"
468:	Ret
469:	Load Const Bool "false"
472:	Ret
473:	Jmp @520
475:	Load Property "compat_IsVista" [0:15]
478:	Load Const Bool "false"
481:	CmpEQ
482:	Copy
483:	Jt @493
485:	Pop
486:	Load Property "compat_AppVidMemory" [0:10]
489:	Load Const Int "0"
492:	CmpEQ
493:	Jf @499
495:	Load Const Bool "true"
498:	Ret
499:	Load Property "compat_AppVidMemory" [0:10]
502:	Load Const Int "92"
505:	CmpLT
506:	Jf @512
508:	Load Const Bool "false"
511:	Ret
512:	Load Const Bool "true"
515:	Ret
516:	Load Const Bool "false"
519:	Ret
520:	Jmp @567
522:	Load Property "compat_IsVista" [0:15]
525:	Load Const Bool "false"
528:	CmpEQ
529:	Copy
530:	Jt @540
532:	Pop
533:	Load Property "compat_AppVidMemory" [0:10]
536:	Load Const Int "0"
539:	CmpEQ
540:	Jf @546
542:	Load Const Bool "true"
545:	Ret
546:	Load Property "compat_AppVidMemory" [0:10]
549:	Load Const Int "192"
552:	CmpLT
553:	Jf @559
555:	Load Const Bool "false"
558:	Ret
559:	Load Const Bool "true"
562:	Ret
563:	Load Const Bool "false"
566:	Ret
567:	Jmp @585
569:	Load Property "compat_D3DInterface" [0:17]
572:	Load Const Int "0"
575:	CmpGT
576:	Jf @581
578:	Call @189
580:	Pop
581:	Load Const Bool "false"
584:	Ret

Blender file

Elementary, my dear Cactus.
This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: Find out what distribution had this file first if possible.

The root of the game data from the Japanese and Chinese distributions have a Blender file titled Gems.blend possibly related to how PopCap made the Gems with their animations. It only works on Blender 2.73 as it crashes in modern Blender. A compilation location shows they were made in the following directory, suggesting this file was copied over from Bejeweled Twist.

d:\popcap\Resources\Bejeweled Twist\Gems\
r\.r\scripts\
/usr/home/intrr/blender/blend/
/Users/ton/Desktop/

Unused code

Resource Generator 3

There is code for executing a program called Rg3Win.exe in a folder outside the game directory being \bin\ResourceGen3\. It's possible it relates to a file called Bej3.rg3watch and also resprops\resprops.txt as well as properties\resources.xml, in the Mac version, the same code is copied, without any changes to load a version of the tool for Mac if it is present.

Resource Streams Manager

Hmmm...
To do:
Any other classes? Check the JP ver for symbols to check.

The game executable mentions a class named ResStreamsManager. This class is used in games past this one and console ports to load RSB and RSG files (in RSB or outside) that contain the game data, but the code to read them is not present nor are those files used in the game.

Apple CAF File Support

The Mac version has code to read .caf files yet the game uses .ogg.

Revisional Differences

  • The Steam version of the game was compiled with a newer version of the PopCap framework, given by there are some related strings are exclusively present.