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 Twist (Windows)

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Bejeweled Twist

Developer: PopCap Games
Publisher: PopCap Games
Platform: Windows
Released in US: October 27, 2008


ObjectIcon.png This game has unused objects.
MinigameIcon.png This game has unused modes / minigames.
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.
Carts.png This game has revisional differences.


PrereleaseIcon.png This game has a prerelease article
NotesIcon.png This game has a notes page

A Twist on an old series that also introduced dancing fruit.

Sub-Pages

Read about prerelease information and/or media for this game.
Prerelease Info
Miscellaneous tidbits that are interesting enough to point out here.
Notes
DevTextIcon.png
Developer Leftovers

Unused Graphics

planet_inferno.png

BejeweledTwist GFX planet inferno.png

Named planet_inferno.png, this graphic is likely an earlier version of the Firestorm planet's graphic and name. Interestingly, this was reused as another texture for the GravityField visualizer, called gravity_spiraltexture.png, but the texture has motion blur added to it.

BejTwist gravity spiraltexture.png

Texture used in the visualizer

CHAIN GANG.png

"What's a chain gang?"

Chain Reaction's old name might have been Chain Gang, as evident in this unused graphic.

blitzbub.png

BejTwist unused blitzstatusbar.png

This bar under the Blitz button might've been able to be seen at one point. Maybe Blitz was able to be savable and the time left would've shown on this bar, but that wouldn't have been the case because there exists as a "Level" text for it, which likely means this was going to be some sort of Action mode like in Bejeweled 2.

Fruit Gem Challenge Icon

Fruity.

There is one challenge icon for fruit gems. A fruit gem objective exists in the game's code, but it is unused as stated in the Unused Challenges section. It might've meant there was a fruit gem themed planet but might've been scrapped very late into development.

Challenge Score Pod Doors Animation

Open sesame.

There are unused doors for the score pod of the ship. Oddly enough, if you were able to create a custom challenge but there was a bug in the challenge objective, the score pod would show this graphic then the game crashes.

How To Play Navigation Buttons

BejTwist unused howtoplayprevious.png BejTwist unused howtoplaynext.png

These are more rectangular and very early buttons for the How to Play section.

"Action" and "Extreme" Leaderboard Score Titles

Gems, multiplier, action. IT'S EXTREME!!!

This is text for the leaderboard for the two of the unused modes, Action and Extreme. Action could've been like mode from Bejeweled 2, and Extreme maybe would've been Classic mode but, much harder.

"More Games" Button

Hello player. Want to play a game?

There exist another button for the main menu saying "MORE GAMES." This likely took you to PopCap's website (or PopCap's Steam or Origin page if you have either of those distributions of the game) to let you see more of their games like in Bejeweled 1 and 2.

Unused "ECLIPSE" Title

BejTwist UnusedTitleECLIPSE.png

The current game's Eclipse challenge title uses the Continuum font, this uses the same or a similar font used for the challenge planet titles. Perhaps this is just an early graphic or "Eclipse" was a planet name at one point?

Bejeweled 1 Leftovers

editbox.png

You type on this.

For some reason, the Bejeweled 1 edit box is in the game files of Bejeweled Twist, likely for testing reasons. Also the texture is larger in resolution than the original game's.

Oddities

Obscured UFO Texture

BejeweledTwist-unusedtexture.png

Being an obscured sprite of the game, this texture isn't noticed by many. It tends to appear on a UFO sprite upon beating Level 10 of Classic Mode, although it's rather difficult to be seen.

"New Challenge Unlocked" Voice

During sound editing, for some reason this voice clip isn't pitched down by 2 semitones, has weird fade out, and has less reverb and delay than all other voice clips.

Unused Special Gems

Ice Gem

It's getting cold in here...

When matched, an Ice Gem will "freeze" the board, tinting the background blue, pausing the music, and preventing bombs from ticking down for three turns. It will not stop the timer in timer-based modes, however. Unlike all other special gems (even the Skull Gem below), this gem does not have special hover-over text.

This gem can be created in Challenge mode by editing the game's save file (users/{Player's Name}/profile.dat) and configuration file (properties/config.xml). Using a hex editor, open profile.dat and change offset 0x6A from 18 to 58. Then, using a text editor, open config.xml, locate the IceGemsAllowed setting, and change it to true:

<Boolean id="IceGemsAllowed"> true </Boolean>

An Ice Gem can then be created by forming an X shape with a single color of gems. This would have been accompanied by the following tutorial text, though the code to display it seems to have been removed:

"You've created an ICE GEM by making an 'X' with 5 gems. Match it for Time Freeze!"

Ice Gems can only be created in Challenge mode. Even if you edit the configuration files of other modes to enable Ice Gem, the game doesn't recognize X shape matches. This is also the only gem that gives a lavender-colored tutorial text, which is not possible anymore since this gem was scrapped.

Skull Gem

At least it's not a muncher.

The Skull Gem lacks any graphics whatsoever, simply appearing as a blank space on the grid. When you take a turn, it'll start eating the gems below it. When it reaches the bottom, the game will crash (presumably due to a lack of a game over animation for it). It will properly display some special text when hovered over, however:

SKULL GEM
Careful! Skull gems eat downwards. When they reach the bottom, you lose!

Interestingly, leftover tutorial text exists for this gem too:

"What's this? This SKULL is chomping thru your gems! Destroy it before it hits the bottom!"

Also unusually, Classic mode contains settings that would spawn these gems at level 25 or higher, but they are ignored by the game. The game will freeze if the setting is changed.

Angel Gem

Where's the halo?

The Angel Gem would've removed all bombs from the field when matched.

Although it can be placed on the grid, the game would crash as soon as the cursor is moved in-game. The text when hovered over if it wasn't for the crash, however:

ANGEL GEM
Angel Gems are the rarest of all. They are formed by making 4 gems in a 'plus' shape. When detonated they clear all bad gems from the screen.

In the final game, the Challenges ended up taking up this behavior; completing one destroys all Bomb and Doom Gems on the field, as this (supposedly) would have done.

Unused Music Sequences

Sequence 44 in Skaven's section of the music (BejeweledTwist24.mo3) is only placed at the very end of the file, never reached under any circumstances. It sounds like it would've fit in with the Untimed Challenge theme.

Similarly, sequence 45 is located right after 44, and is the last sequence in the file.

This music is named "TROPHYROOM" in music.xml and has offset 100 with tempo 112. "Trophy Room" was a achievement screen of PopCap's previous game "Chuzzle". Although later Bejeweled games do implement an achievement system as Badges, the badge list screen of those games simply use the Main Menu song.

This fanfare is named "HIGHSCORE" in properties/music.xml, with offset 103 and tempo 141. In the final version, there is only "A new highscore" voice if you get a highscore.

This music is named "WHEELINTRO" in music.xml and has offset 104 with tempo 126. While the "wheel" does show up in Bomb Disarm screen, this music is too bright for that scene and probably intended for some kind of bonus stage.

This music is named "WHEELSCORE" in music.xml and has offset 107 with tempo 144. This was also probably intended for some kind of bonus stage, likely when the player is "spinning" a roulette-like thing.

This music is named "BONUSROUND" in music.xml and has offset 108 with tempo 126. This was probably intended for the main theme of bonus stage. Either that, or some sort of "sugar crush".

Unused Sounds

A number of sound effects not used in Bejeweled Twist are also present in the game.

chainx1.ogg

The original pitch for this sound is unheard in the game. It is sped up by a few semitones.

eclipseintro1.ogg

This was possibly meant to be played for unlocking a challenge's Eclipse puzzle. In the final game, nothing in particular plays when the 7th challenge of a planet is beaten.

supergem_create.ogg

Judging from the name, it is likely that this was initially played when a Supernova gem is formed. Additionally, when this sound is slowed down, it sounds to the equivalent of trans_spacenoise.ogg. Further note, this sound was used in the Launch Event of Twist.

tutorial_snap.ogg

Nowhere in the tutorial level plays this sound effect.

whirlpool1.ogg

Perhaps initially played when you complete a level?

Snackers the Cat

I bet he's been snacking on my fruit gems.

Typing 'snackers' while any piece of Coal is on the grid will change all of the Coal into Snackers, Popcap co-founder and Bejeweled creator Jason Kapalka's cat. In order for this to happen, the Gem Rotator must be off the board and there must be at least one Coal on the board. This changes the hover-over text as well:

SNACKERS
This adorable cat can't be matched, but if you startle it with Flame or Lightning, you'll get an awesome bonus!

Additionally, Snackers will purr if you hover over her long enough.

(Source: Popcap Blog)

Unused Configuration Files

Hmmm...
To do:
Describe config_action.xml

In properties directory there are some unused XML files. config_locksmith.xml contains the settings that make Lock Gems appear frequently. While the final game doesn't have a Challenge named "Locksmith", it is possible that the game once had missions that involve Lock Gems.

The following is an example challenge that makes use of config_locksmith.xml:

  <challenge>
    <description>"Destroy as many Lock Gems as possible in 3 minutes"</description>
    <counttitle> "Lock Gems" </counttitle>
    <bestscore> 20 </bestscore>
    <rules> "LockGems>=0, Time<3, CONFIG='properties/config_locksmith.xml', nightmode"</rules>
  </challenge>

There is also an unused gamemode that uses config_casual which can be accessed when modifying any 'savegame_*' files by changing the gamemode byte value (offset 0x04) to zero. Casual gamemode seems to be an easier version of Classic Mode with larger minimum bomb values and Doom gems are not included. One more curious effect when playing on casual mode is that you can't hear any music. Bejeweled Twist will make a new savegame_casual when quitting from the modified saved game playthrough.

Unused Challenge Mode Objectives

There are several objectives and options for Challenge mode that are not used in the final game.

  • Matches represents the number of Gem sets created. Both your own matches and cascades count towards this goal. L or T shaped clear will count as 2 matches.
  • MaxCascade represents the maximum number of cascades created in the current game. This is most likely replaced by Cascade objective with Onemove option, as MaxCascade doesn't display your ongoing cascade progress in realtime.
  • LockGems represents the number of Lock Gems destroyed, which might have been used with config_locksmith.xml.
  • ShardsLost stays at 0 as "Shards" system no longer exists in the final game.
  • BiggestMatchColor seems to represent what colored gem is destroyed in one move. Its value ranges from 0 to 6.
  • SkullGems most likely represents the number of Skull Gems destroyed, but since this gem is scrapped its score stays at 0.
  • Level is always 2 due to Challenge mode's lack of level system. The reason it is always 2 is probably because the most special gems are not allowed to appear on level 1 or lower.
  • DevilGems represents the number of Doom Gems destroyed.
  • AngelGems most likely represents the number of Angel Gems destroyed, but since this gem is scrapped its score stays at 0.
  • CountdownGems represents the number of Bomb Gems destroyed.
  • FruitGems most likely represents the number of Fruit Gems destroyed, but since this gem doesn't appear in challenges its score stays at 0.
  • Icegems represents the number of Ice Gems destroyed. If the player edits the save and config files to unlock Ice Gem creation ability, this objective will work perfectly.
  • CONSTANTCOUNTERS is an option that make Bomb Gems immediately respawn when destroyed. It works similar to its Doom Gems counterpart "constantdoom".

Preserver Objectives

  • OrangeGems and PurpleGems are unused Preserver objectives. When used with the Onboard option, the HUD correctly displays both color of gems.
  • All Preserver objectives, including the unused OrangeGems and PurpleGems, will represent the number of colored gems destroyed if the Onboard option is not used.
  • Coalgems is compatible with the Onboard option, unlike all other special gems.

quitonfail

quitonfail option will instantly end the game if the player breaks any of the mission criteria (e.g. do not use any Lightning Gems). In the following example challenge, the game ends when the player creates a minimum of x5 cascade.

  <challenge>
    <description>"Create a minimum of x5 cascade"</description>
    <counttitle> "Cascades" </counttitle>
    <bestscore>8</bestscore>
    <rules> "Cascades>=0, Cascades<=4, Onemove, quitonfail, nightmode"</rules>
  </challenge>

While this option is technically used in Preserver Eclipse, it is redundant in that mission because the badgem option will always terminate the game when the specified gem is destroyed, even without the quitonfail option.

Unused Text

Hmmm...
To do:
BejeweledTwist.exe has more unused text.

Internal Web Server Text

\\\\sea-popshare\\sandbox\\Game Builds\\BejeweledTwist\\twistdumps_beta4\\
%s_%s.csv

Text for sending a crash log to a web server?

ResourceMan2 Generation Text

The way PopCap internally creates a resources.xml file for locating the game content has been changed, providing this string on every compilation, suggesting a new internal tool was used to generate these files for this game and their later games.

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

Fragments

Strings are found in the game executable. Laser Gem is the initial name for a Lightning Gem. Also includes the number of Ice Gem matches as a configuration?

TimeFreezeMatchCount
LaserGemCascades

donedescription

All challenges (defined in properties/challenges.xml) have an unused property named "donedescription". These messages might have been intended to appear upon completing a mission. The "#" symbols are variables, and programming for it is partially left in the game (see the "Variable replacement" section below).

You destroyed # gems
You destroyed # gems without Lightning
You made 3 red matches in a row
You made 4 orange matches in a row
You made 5 yellow matches in a row
You made 6 green matches in a row
You made 7 blue matches in a row
You made 8 white matches in a row
You made 9 violet matches
You destroyed # coals in 1 move
You destroyed # coals without Lightning
You created a x# chain
You created a x# chain in 5 minutes
You made a x# cascade
You cleared x# gems with no Flame or Lightning
You got # green gems onscreen
You got # red gems onscreen
You got # blue gems onscreen
You got # white and # red gems onscreen
You got # yellow gems onscreen
You got # red and # blue gems onscreen
You got # green, # blue and # red gems onscreen
You detonated # Flame Gems in #
You detonated # Flame Gems in 1 move
You cleared # gems in # moves
You triggered # Lightning Gems in 1 move
You triggered # Flame and # Lightning Gems in 1 move
You cleared # gems in #
You survived # turns
You detonated # Lightning Gems in #
You detonated # Lightning Gems in 1 move
You created # Flame Gems in 1 move
You created # Flame and # Lightning Gems in 1 move
You created # Lightning Gems in 1 move
You created a # gem match
You created an # gem match

Variable Replacement

The programming for handling the "#" symbols in messages partially exists in the game, and can be seen by copy-pasting the donedescription property to description property. The following code is an example of Chain Reaction 1:

  <challenge>
    <description> "You created a x# chain"</description>
    <counttitle> "Chains" </counttitle>
    <donedescription> "You created a x# chain"</donedescription>
    <rules> " MaxChain>=15 " </rules>
  </challenge>

The programming of it only exists for the following challenges. All other missions crash the game when you hover your mouse-cursor on challenges.

  • Chain Reaction
  • Preserver
  • Firestorm (except for "detonate X Flame Gems in 1 move in 5 minutes" missions)
  • Survivor
  • Voltage (except for "detonate X Lightning Gems in 1 move in 5 minutes" missions)

Old Rank Names

A text file exists in the properties folder called ranksold.txt which has older names for ranks during earlier versions of the game before release. Some ranks were either left in or changed in the final game in ranks.txt.

"Trainee", 0
"Newbie", 50000
"Junior Rotator", 100000
"Rotator", 150000
"Senior Rotator", 200000 
"Electro Spinner", 275000
"Spinner", 350000
"Chain Spinner", 425000
"Blast Spinner", 600000
"Senior Spinner", 800000
"Twister", 1000000
"Pyro Twister",		1250000
"Twister Plus",		1500000
"Master Twister",	1750000
"Cryo Spinner",		2000000
"Junior Gemspinner", 2300000
"Electro Gemspinner", 2600000
"Gemspinner", 2900000
"Pyro Gemspinner", 3500000
"Senior Gemspinner", 4000000
"Divine Spinner", 4500000
"Junior Bejeweler", 5000000
"Electro Bejeweler", 5500000
"Bejeweler", 6000000
"Cryo Bejeweler", 6500000
"Super Rotator", 7000000
"Fruit Spinner", 7500000
"Super Twister", 8000000
"Super Bejeweler", 8000000
"Mega Rotator", 8000000
"Mega Spinner", 8000000
"Pyro Twister", 8000000
"Mega Bejeweler", 8000000
"Pyro Rotator", 8000000
"Angelic Twister", 8000000
"Ultra Spinner", 8000000
"Ultra Twister", 8000000
"Ultra Bejeweler", 8000000
"Hyper Rotator", 8000000
"Hyper Spinner", 8000000
"Hyper Twister", 8000000
"Shock Bejeweler", 8000000
"Twistmaster", 8000000
"Twistmaster Plus", 8000000
"Super Twistmaster", 8000000
"Twistmaster Mega", 8000000
"Twistmaster Enduro", 8000000
"Twistmaster Ultra", 8000000
"Twistmaster Hyper", 8000000
"Twistmaster Giga", 8000000
"Twistmaster Supreme", 8000000
"Twistwizard Alpha", 8000000
"Twistwizard Beta", 8000000
"Twistwizard Delta", 8000000
"Twistwizard Omega", 8000000
"Twistwizard Supreme", 8000000
"Junior Spinmaster", 8000000
"Cryo Fruitmaster", 8000000
"Pyro Fruitmaster", 8000000
"Spinmaster Supreme", 8000000
"Jewelkeeper 3rd class", 8000000
"Jewelkeeper 2nd class", 8000000
"Jewelkeeper 1st class", 8000000
"Master Jewelkeeper", 8000000
"Junior Gemmaster", 8000000
"Gemmaster", 8000000
"Senior Gemmaster", 8000000
"Gemmaster Supreme", 8000000
"Twist Hero", 8000000
"Super Twist Hero", 8000000
"Mega Twist Hero", 8000000
"Ultra Twist Hero", 8000000
"Hyper Twist Hero", 8000000
"Ultimate Twist Hero",8000000
"Twist Hero Supreme", 8000000
"Overlord of Twisting", 8000000
"Sultan of Spin", 8000000
"Gem General", 8000000
"Gem King", 8000000
"Ultimate Gem Master", 8000000
"Gem Master Supreme", 8000000

Challenge Description Fragments

There are several fragments of challenge descriptions in the exe file. It suggests that the game could have generated the challenge descriptions automatically. In the final game, the challenge descriptions are written directly to the properties/challenges.xml, and if the description property is missing the game will leave the description blank.

 %d point
 %d counter gem
 with no countdown gems
 %d devil gem
 %d skull gem
 without matching skull gems
 %d fruit gem
 %d angel gem
 %d ice gem
 without matching ice gems
 %d lightning gem
 without matching lightning gems
 %d flame gem
 without matching flame gems
 %d match%s
 without chained moves
 with no shards lost
 %d gem
 in %d moves
 in more than %d moves
 in one move
 in %d minute%s
Match
Score
Make a match of
 at level
 after level
 by level
Reach level
Make a chain of

Night Mode Unlocked Message

There is an unused message regarding unlocking the "Night Mode". Night Mode is the internal name of Eclipse challenges, but none of them are speedrun mode. The final game does not display any special messages upon completing all challenges.

NIGHT MODE UNLOCKED
You've unlocked the Challenge Night Mode!
Each planet now only has one challenge.  How fast can you complete it?

Old Statistics Screen Text

Unused text for the statistics screen exists in the game's executable file, which includes text for the scrapped special gems. The final game only records total points, best single move score, total gems destroyed, and so on.

SUPERNOVAS
CASCADES
BLUE GEMS
ORANGE GEMS
PURPLE GEMS
YELLOW GEMS
GREEN GEMS
WHITE GEMS
RED GEMS
COAL GEMS
TOTAL POINTS
TOTAL LOCK GEMS MATCHED
TOTAL COUNTER GEMS MATCHED
TOTAL SKULL GEMS MATCHED
TOTAL FRUIT GEMS MATCHED
TOTAL DEVIL GEMS MATCHED
TOTAL ANGEL GEMS MATCHED
TOTAL ICE GEMS MATCHED
TOTAL LIGHTNING GEMS MATCHED
TOTAL FLAME GEMS MATCHED
TOTAL GEMS MATCHED
TOTAL GEMS CLEARED
TOTAL FRUIT POINTS
TOTAL COAL POINTS
TOTAL FLAME POINTS
TOTAL LIGHTNING POINTS
CUMULATIVE POINT MULTIPLIER
RANK POINTS
FIRST 3X LEVEL
FIRST 2X LEVEL
WHEEL FIRST LEVEL
WHEEL SPINS
DEATHS BY COUNTER
DEATHS BY SKULL
DEATHS BY DEVIL
SHARDS COUNTERED
SHARDS SKULLED
FIRST SHARD LOST LEVEL
TOTAL SHARDS LOST
BIGGEST CASCADE
BIGGEST CHAIN
TOTAL MATCHES
FIRST ANGELGEM LEVEL
FIRST LIGHTNING GEM LEVEL
FIRST FLAMEGEM LEVEL
FIRST ICEGEM LEVEL
TOTAL TIME (SEC)
TOTAL BAD MOVES
TOTAL MOVES
BEST MOVE (POINTS)
BEST MOVE (GEMS)
MEGAMATCHES
BIGGEST MATCH COLOR
BIGGEST MATCH
LOCK GEMS
COUNTER GEMS
SKULL GEMS
FRUIT GEMS MADE
ANGEL GEMS MADE
ICE GEMS MADE
FLAME GEMS MADE
LIGHTNING GEMS MADE
x10+ CHAINS
x9 CHAINS
x8 CHAINS
x7 CHAINS
x6 CHAINS
x5 CHAINS
x10+ CASCADES
x9 CASCADES
x8 CASCADES
x7 CASCADES
x6 CASCADES
x5 CASCADES
LONGEST ACTION GAME
LONGEST CLASSIC GAME
LONGEST CASUAL GAME
PUZZLE GAMES
ZEN GAMES
ACTION GAMES
CLASSIC GAMES
CASUAL GAMES

Early Mode Names

There is an early list of mode names which does not match with the one in the Old Statistics Screen Text or the final game's roster.

TIMED MODE
FREE MODE
PUZZLE MODE
CREATING MODE

There is also text for saving and editing the "puzzles", which might have been used in the Creating Mode.

PUZZLE %d SAVED
EDIT

Unused Tutorial Fragments

Several tutorial fragments can be found in tutorial.txt.

//title "Lesson 2\nA Fiery Friend"
//levelup

There were supposed to be multiple tutorials? Maybe this explains why skull gems were supposed to appear. Speaking of skull gems...

Tutorial Completion

textbox "You've ^00ff00^graduated^ffffff^ basic training! \n Time to start your first game!" vcenter graduate
textbox "You've ^00ff00^graduated^ffffff^ basic training! \n Time to start your first game!" vcenter graduate
textbox "You've ^00ff00^graduated^ffffff^ basic training! \n Time to start your first game!" vcenter graduate
textbox "You've ^00ff00^graduated^ffffff^ basic training! \n Time to start your first game!" vcenter graduate

A much more different completion text than the final game's, and for some reason this text is duplicated 3 more times.

Skull Gem

One of the skull gem text was already mentioned in the unused gems section, but there was another system that was also going to be explained in the tutorial called "Shards."

//pointat shards
//textbox "If the Skull reaches the bottom, it will destroy one of your Shards!" 6,1
end

Shards were possibly some sort of lives system, sort of like the lawn mowers in Plants vs. Zombies.

Shard System

:shardloss
pointat shards
textbox "Ouch! One of your ^ffff00^SHARDS^ffffff^ was destroyed!" 7,1
textbox "Be careful, if you lose them all, the game's over..." 7,1
end

Apparently Skull gems weren't the only one to destroy shards, bomb gems could too, which meant if you don't successfully disarm a bomb, you only lose a shard.

Action Mode's Game Configuration

Action still has an XML for it's game mode still left in the final release.

<Properties>
	<!-- Number of rows, columns in game board  -->
	<Integer id="GameRows">	8		</Integer>
	<Integer id="GameColumns">	8		</Integer>

  
  
  <!--              COUNTER GEMS                 -->
  <!-- what is the first level they appear on? -->
  <Integer id="CounterFirstLevel"> 2 </Integer>
  
  <!-- what is the value for that first level -->
  <Integer id="CounterBase"> 18 </Integer>
  
  <!-- does this value decrement based on turns or gems? -->
  <Boolean id="CounterTurnBased"> false </Boolean>
  
  <!-- how many level ups until the value changes -->
  <Integer id="CounterLevelsBetweenChange" > 2 </Integer>
  
  <!-- what is the change to the value? -->
  <Integer id="CounterChange"> -1 </Integer>
  
  <!-- what level does this value start to change? -->
  <Integer id="CounterFirstChangeLevel"> 6 </Integer>
  
  <!-- what is the minimum the value can be? -->
  <Integer id="CounterMin"> 10 </Integer>

  
  
  <!-- what is the initial value of the counter as levels increase? -->
  <Integer id="CounterValueFirstLevel"> 2 </Integer>
  
  <!-- what is the value for that first level -->
  <Integer id="CounterValueBase"> 15 </Integer>
  
  <!-- how many level ups until the value changes -->
  <Integer id="CounterValueLevelsBetweenChange" > 2 </Integer>
  
  <!-- what is the change to the value? -->
  <Integer id="CounterValueChange"> -1 </Integer>
  
  <!-- what level does this value start to change? -->
  <Integer id="CounterValueFirstChangeLevel"> 4 </Integer>
  
  <!-- what is the minimum the value can be? -->
  <Integer id="CounterValueMin"> 8 </Integer>
  
  <Integer id="CounterValueMax"> 20 </Integer>


  

  <!--                BAD GEMS              -->
  <!-- how many "bad" gems (skulls, devils, counters, locks) can be on the board at once? -->

  <!-- what is the first level they appear on? -->
  <Integer id="BadGemsOnBoardMaxFirstLevel"> 1 </Integer>
  
  <!-- what is the value for that first level -->
  <Integer id="BadGemsOnBoardMaxBase"> 3 </Integer>
  
  <!-- what is the change to the value? -->
  <Integer id="BadGemsOnBoardMaxChange"> 1 </Integer>
  
  <!-- how many level ups until the value changes -->
  <Integer id="BadGemsOnBoardMaxLevelsBetweenChange" > 3 </Integer>
  
  <!-- what level does this value start to change? -->
  <Integer id="BadGemsOnBoardMaxFirstChangeLevel"> 6 </Integer>

  <!-- what is the maximum the value can be? -->
  <Integer id="BadGemsOnBoardMaxMax"> 15 </Integer>

  
  


  <!-- what is the first level they appear on? -->
  <Integer id="LevelUpPointsFirstLevel"> 1 </Integer>

  <!-- what is the value for that first level -->
  <Integer id="LevelUpPointsBase"> 2000 </Integer>

  <!-- what is the change to the value? -->
  <Integer id="LevelUpPointsChange"> 300 </Integer>




  <!-- gem combo size required to get "amnesty" on bad gem appearing next move -->
  <Integer id="AmnestyGemCount"> 8 </Integer>

  
  <!--               LOCK GEMS                      -->
  <!-- what is the first level they appear on? -->
  <Integer id="LockGemFirstLevel"> 6 </Integer>
  
  <!-- what is the value for that first level -->
  <Integer id="LockGemBase"> 16 </Integer>
  
  <!-- does this value decrement based on turns or gems? -->
  <Boolean id="LockGemTurnBased"> true </Boolean>
  
  <!-- how many level ups until the value changes -->
  <Integer id="LockGemLevelsBetweenChange" > 3 </Integer>
  
  <!-- what is the change to the value? -->
  <Integer id="LockGemChange"> -1 </Integer>
  
  <!-- what is the minimum the value can be? -->
  <Integer id="LockGemMin"> 5 </Integer>
  
  
  <!--                  SKULL GEMS                   -->
  
  <!-- what is the first level they appear on? -->
  <Integer id="SkullsFirstLevel"> 9 </Integer>
  
  <!-- what is the value for that first level -->
  <Integer id="SkullsBase"> 30 </Integer>
  
  <!-- does this value decrement based on turns(true)  or gems (false) ? -->
  <Boolean id="SkullsTurnBased"> true </Boolean>
  
  <!-- how many level ups until the value changes -->
  <Integer id="SkullsLevelsBetweenChange"> 3 </Integer>
  
  <!-- what is the change to the value? -->
  <Integer id="SkullsChange"> -1 </Integer>
  
  <!-- what is the minimum the value can be? -->
  <Integer id="SkullsMin"> 10 </Integer>



  <!--             DEVIL GEMS               -->
  <!-- what is the first level they appear on? -->
  <Integer id="DevilFirstLevel"> 12 </Integer>

  <!-- what is the value for that first level -->
  <Integer id="DevilBase"> 100 </Integer>

  <!-- what is the change to the value? -->
  <Integer id="DevilChange"> -1 </Integer>

  <!-- does this value decrement based on turns or gems? -->
  <Boolean id="DevilTurnBased"> false </Boolean>

  <!-- how many level ups until the value changes -->
  <Integer id="DevilLevelsBetweenChange" > 1 </Integer>

  <!-- what is the minimum the value can be? -->
  <Integer id="DevilMin"> 20 </Integer>


  <!-- what is the first level they appear on? -->
  <Integer id="DevilValueFirstLevel"> 1 </Integer>

  <!-- what is the value for that first level -->
  <Integer id="DevilValueBase"> 10 </Integer>

  <!-- what is the change to the value? -->
  <Integer id="DevilValueChange"> -1 </Integer>

  <!-- how many level ups until the value changes -->
  <Integer id="DevilValueLevelsBetweenChange" > 1 </Integer>

  <!-- what is the minimum the value can be? -->
  <Integer id="DevilValueMin"> 10 </Integer>

  <!--  overall multiplier of points for each move based on what game you're playing -->
  <Integer id="ModeMultiplier"> 3 </Integer>


  <Boolean id="IceGemsAllowed"> true </Boolean>



</Properties>

Diamond Mine Leftovers

<!-- Board.cpp -->
<String id="EXCELLENT">EXCELLENT!</String>
<String id="NO_MOVES">NO MOVES!</String>
<String id="LEVEL">LEVEL %d</String>
<String id="GO">GO!</String>
<String id="TIME_UP">TIME UP!</String>
<String id="GAME_PAUSED">*** GAME PAUSED ***</String>
<String id="CLICK_HERE_TO_CONTINUE">Click Here to Continue!</String>

<!-- HighScoreDialog.cpp  -->
<String id="HSDLG_HIGH_SCORES">HIGH SCORES</String>
<String id="HSDLG_DONE">DONE</String>
<String id="HSDLG_NORMAL">NORMAL</String>
<String id="HSDLG_TIMED">TIMED</String>
<String id="HSDLG_TODAYS_HIGH_SCORE">TODAY'S HIGH SCORE</String>
<String id="HSDLG_EMPTY">- Empty -</String>
<String id="HSDLG_ALL_TIME_HIGH_SCORES">ALL TIME HIGH SCORES</String>

<!-- HighScoreWidget.cpp -->
<String id="HSWIDGET_CLICK_HERE_TO_PLAY_AGAIN">CLICK HERE TO PLAY AGAIN</String>
<String id="HSWIDGET_TIP0">TIP- You can click and drag a gem instead of clicking twice</String>
<String id="HSWIDGET_TIP1">TIP- Fill the bonus bar to proceed to higher-scoring levels</String>
<String id="HSWIDGET_TIP2">TIP- Make cascades of chain-reacting gems for extra points</String>
<String id="HSWIDGET_TIP3">TIP- Create rows of 4 or 5 gems for extra points</String>
<String id="HSWIDGET_TIP4">TIP- Complete 2 rows with one move for bonus points</String>
<String id="HSWIDGET_TIP5">TIP- Replenish the bonus bar in Timetrial by scoring combos</String>
<String id="HSWIDGET_TIP6">TIP- You can click and drag a gem to swap it with another</String>
<String id="HSWIDGET_TIP7">TIP- Press any key to pause the game in Timetrial mode</String>
<String id="HSWIDGET_TIP_DEFAULT">TIP- Visit us online at www.popcap.com for more games!</String>
<String id="HSWIDGET_HIGH_SCORE_OF_THE_DAY_PLACEMENT_PREFIX">You got the highest score of&cr;the day!  For all time, your place was</String>
<String id="HSWIDGET_HIGH_SCORE_OF_THE_DAY_PLACEMENT_SUFFIX">!&cr;&cr;Would you like to register so&cr;you can record your score?</String>
<String id="HSWIDGET_HIGH_SCORE_OF_THE_DAY_REGISTRATION_DIALOG">You got the highest score&cr;of the day!&cr;&cr;Would you like to register so&cr;you can record your score?</String>
<String id="HSWIDGET_HIGH_SCORE_OF_ALL_TIME_REGISTRATION_DIALOG_PREFIX">You got place </String>
<String id="HSWIDGET_HIGH_SCORE_OF_ALL_TIME_REGISTRATION_DIALOG_SUFFIX">in the All-Time Scores!&cr;&cr;Would you like to register so&cr;you can record your score?</String>
<String id="HSWIDGET_HIGH_SCORE_OF_ALL_TIME_PLACEMENT_PREFIX">You got the highest score of&cr;the day! In the All-Time Scores, you made place </String>
<String id="HSWIDGET_HIGH_SCORE_OF_ALL_TIME_PLACEMENT_SUFFIX">!</String>
<String id="HSWIDGET_BEST_TODAY">You got the highest score&cr;of the day!</String>
<String id="HSWIDGET_SCORE_PLACEMENT_PREFIX">In the All-Time Scores you made place </String>
<String id="HSWIDGET_SCORE_PLACEMENT_SUFFIX">!</String>
<String id="HSWIDGET_GAME_OVER">GAME OVER</String>
<String id="HSWIDGET_GAME_DURATION">GAME DURATION</String>
<String id="HSWIDGET_GEMS_CLEARED">GEMS CLEARED</String>
<String id="HSWIDGET_LONGEST_CASCADE">LONGEST CASCADE</String>
<String id="HSWIDGET_BEST_SINGLE_MOVE">BEST SINGLE MOVE</String>
<String id="HSWIDGET_HIGH_SCORES">HIGH SCORES</String>
<String id="HSWIDGET_NORMAL">NORMAL</String>
<String id="HSWIDGET_TIMED">TIMED</String>
<String id="HSWIDGET_TODAYS_HIGH_SCORE">TODAY'S HIGH SCORE</String>
<String id="HSWIDGET_EMPTY">- Empty -</String>
<String id="HSWIDGET_ALL_TIME_HIGH_SCORES">ALL TIME HIGH SCORES</String>

<!-- OptionsDialog.cpp -->
<String id="OPTIONSDLG_OPTIONS">Options</String>
<String id="OPTIONSDLG_DONE">Done</String>
<String id="OPTIONSDLG_HELP">Help</String>
<String id="OPTIONSDLG_REGISTER">Register</String>
<String id="OPTIONSDLG_HIGH_SCORES">High Scores</String>
<String id="OPTIONSDLG_CLICK_HERE_TO_TRY_ALCHEMY">Click Here to Try Alchemy</String>
<String id="OPTIONSDLG_VISIT_POPCAP_FOR_MORE_GAMES">Visit PopCap.com For More Games</String>
<String id="OPTIONSDLG_CHECK_FOR_UPDATES">Check for Updates</String>
<String id="OPTIONSDLG_MUSIC">Music</String>
<String id="OPTIONSDLG_SOUND_FX">Sound Fx</String>
<String id="OPTIONSDLG_FULLSCREEN">Fullscreen</String>
<String id="OPTIONSDLG_CUSTOM_CURSORS">Custom Cursors</String>

<!-- RecordScoreDialog.cpp -->
<String id="RECORDSCOREDLG_HIGH_SCORE">High Score</String>
<String id="RECORDSCOREDLG_ENTER_YOUR_NAME">Enter Your Name</String>

<!-- RegisterDialog.cpp -->
<String id="REGISTER_DIAMOND_MINE">REGISTER DIAMOND MINE</String>
<String id="REGISTER_BEJEWELED">REGISTER BEJEWELED</String>
<String id="CLICK_HERE_TO_REGISTER_ONLINE">Click here to register online</String>
<String id="WEB_BROWSER_WILL_OPEN_NOTICE1">Note - This will open a browser window.</String>
<String id="WEB_BROWSER_WILL_OPEN_NOTICE2">When you have registered, enter your</String>
<String id="WEB_BROWSER_WILL_OPEN_NOTICE3">registration information below.</String>
<String id="REGISTERED_NAME">Registered Name</String>
<String id="LICENSE_CODE">License Code</String>

<!-- TitleScreen.cpp -->
<String id="YOU_MUST_REG1">You must register online now to continue playing Diamond Mine!</String>
<String id="YOU_MUST_REG2">You must register online now to continue playing Bejeweled!</String>
<String id="UNREGISTERED1">UNREGISTERED VERSION - YOU HAVE PLAYED %d TIMES</String>
<String id="UNREGISTERED2">UNREGISTERED VERSION</String>
<String id="THANKS_FOR_REGISTERING">THANKS FOR REGISTERING!</String>
<String id="VERSION">Version</String>
<String id="CLICK_HERE_TO_PLAY">CLICK HERE TO PLAY!</String>
<String id="REGISTER_NOW_TO_REMOVE_THIS_DELAY">REGISTER NOW TO REMOVE THIS DELAY!</String>
<String id="CLICK_HERE_TO_QUIT">CLICK HERE TO QUIT</String>
<String id="CLICK_HERE_TO_REGISTER_NOW">CLICK HERE TO REGISTER NOW!</String>

<!-- WinDMApp.cpp -->
<String id="URL_OPEN_ERROR1">Please open the following URL in your browser:&cr;</String>
<String id="URL_OPEN_ERROR2">&cr;&cr;For your convenience, this URL has already been copied to your clipboard.</String>
<String id="OPEN_BROWSER">OPEN BROWSER</String>
<String id="OPENING_BROWSER">Opening Browser ...</String>
<String id="REGISTRATION_INVALID_DIALOG1">Registration Invalid</String>
<String id="REGISTRATION_INVALID_DIALOG2">The registration number you entered is not valid for that name.&cr;&cr;Make sure the name and registration number are entered correctly.</String>
<String id="REGISTRATION_INVALID_DIALOG3">OK</String>
<String id="HIGH_SCORE">High Score</String>
<String id="CONFIRM_LOAD_DIALOG1">Continue Old Game?</String>
<String id="CONFIRM_LOAD_DIALOG2">Do you want to continue your last game? Your position was saved when you quit. If you do not continue now, that game will be lost.</String>
<String id="UPDATES">Updates</String>
<String id="DO_YOU_WANT_TO_CHECK_FOR_UPDATES_TO_DIAMOND_MINE">Do you want to check for updates and expansion packs for Diamond Mine 2? </String>
<String id="DO_YOU_WANT_TO_CHECK_FOR_UPDATES_TO_BEJEWELED">Do you want to check for updates and expansion packs for Bejeweled 2? </String>
<String id="UPDATES_DESC">New versions may offer new features and bug fixes.  This requires an active Internet connection.</String>
<String id="NEWGAMEDIALOG1">New Game</String>
<String id="NEWGAMEDIALOG2">Are you sure you want to end&cr;the current game?</String>
<String id="CONFIRMNORMALMODE1">Normal Mode</String>
<String id="CONFIRMNORMALMODE2">You must end the current game&cr;to switch to normal mode. Ok?</String>
<String id="CONFIRMTIMEDMODE1">Timed Mode</String>
<String id="CONFIRMTIMEDMODE2">You must end the current game&cr;to switch to timed mode. Ok?</String>
<String id="CONFIRMQUIT1">Are you sure you want to&cr;quit the game?</String>
<String id="CONFIRMQUIT2">&cr;&cr;Your current game in progress&cr;will be saved so you can&cr;continue next time.</String>
<String id="QUIT">Quit</String>
<String id="INSTRUCTIONDIALOG">Swap adjacent gems to create rows of 3 or more!</String>
<String id="DONE">DONE</String>
<String id="COLOR_DEPTH_EXPLANATION1">No Windowed Mode</String>
<String id="COLOR_DEPTH_EXPLANATION2">Windowed mode is only available if your desktop is running in either 16 bit or 32 bit color mode, which it is not.</String>
<String id="YOU_HAVE_PLAYED_DIAMOND_MINE_D_TIMES">You have played Diamond Mine %d times!&cr;&cr;</String>
<String id="YOU_HAVE_PLAYED_BEJEWELLED_D_TIMES">You have played Bejeweled %d times!&cr;&cr;</String>
<String id="YOU_ARE_A_DIAMOND_MINE_AHOLIC">You are a Diamond Mine-aholic!&cr;&cr;</String>
<String id="YOU_ARE_A_BEJEWELAHOLIC">You are a Bejewelaholic!&cr;&cr;</String>
<String id="LOOKS_LIKE_YOU_ARE_ADDICTED">Looks like you are addicted!&cr;&cr;</String>
<String id="ARE_YOU_GETTING_HOOKED">Are you getting hooked?&cr;&cr;</String>
<String id="LOADING_NAG">Register online to remove the loading delay and this screen. 
Registering also unlocks the High Score feature, so you can record your best 
scores!&cr;&cr;Register now?</String>
<String id="REGISTER_NOW">Register Now</String>

Why is there still Diamond Mine strings in default.xml? Unsure.

Revisional Differences

The Steam version of Bejeweled Twist unlocks Blitz mode by default.

(Source: Wario 16)
Hmmm...
To do:
Sound and texture definitions were also changed.

In the CD-ROM version, the textures are uncompressed JPG files, heavily increasing the content size of the game to 200+MB compared to later versions.

(Source: LolHacksRule)

Debugging Material

The game has a small variety of debugging content. As of this game, the PopCap Framework was internally upgraded so both a few new command line parameters and debug keys were added.

Command-line Parameters

The game's executable mentions command lines parameters for starting the game. It's not friendly with commands using spaces, so use = instead. These are:

  • -artres1200: Sets the Art Resolution to 1200, forcing Ultra Resolution (1920x1200) mode, this one is game-specific.
  • -artres768: Sets the Art Resolution to 768, forcing High-Res (1024x768) mode, this one is game-specific.
  • -artres600: Sets the Art Resolution to 600, forcing Normal-Res (800x600) mode, this one is game-specific.
  • -autoplay: Makes the game boot to play the Classic game mode on its own, if a Game Over happens, the process repeats, this one is game-specific.
  • -minidump: Unknown.
  • -ultradump: Unknown.
  • -noacceleration: Doesn't seem to work, likely disables 3D Acceleration.
  • -nod3d9: Boots up the game with the Direct3D 8 graphics API.
  • -playback: Plays recording.dat if its present.
  • -record: Records a file named recording.dat and saves after shutdown of the game, overrides the PopCap Framework version however doesn't appear to work correctly.
  • -skipmenu: Immediately goes to Classic mode, be careful with existing save data as this overwrites it, this one is game-specific.
  • -widescreen: Forces the game into the widescreen mode, even if the player is using windowed mode, this one is game-specific.

Debug Commands

Hmmm...
To do:
Make it possible to see UpdateCount without messing with another value.

F1 was added, being the only debug key not requiring debug keys enabled and a few other debug keys were changed and added. This tends to lower the framerate with 3D Acceleration enabled so use this carefully. It shows a display in this format:

Game Version: %s, Current Time: %s, UpdateCount: %d
%s  %s, ArtRes: %dp
  BackBuffer: %s  DisplayMode: %s
"%s" V.%x D.%x S.%x R.%x "%s" %d.%d.%d.%d
D3D DLL Version: 
%s Build %d %s
CPU %d: "%s" "%s"
MemLoad %d%% Phys %d/%dMB Page %d/%dMB Virt %d/%dMB
D3D Texture Memory: %dkB Drawn (%d%%) / %dkB Alloced / %dkB Wasted (%d%%)
D3D RTPool: Total:%d (%d Full, %d Half, %d Quarter, %d Other); Locked:%d
  • Game Version: Version of the game executable.
  • UpdateCount: A value showing the total number of frames the game engine is running for. The value isn't shown despite it is present in the string and has working code that does get used, if you set address 00767C45 (Final WW) to NOP, you can make it visible at the sacrifice of viewing Current Time.
  • Current Time The current date, 24-hour time and also the year of the device.

The string after is the game window settings. Wide is displayed when the game is widescreen and Windowed appears after if the game is windowed while Fullscreen appears instead if the game is fullscreen. The renderer is next, SW is shown if 3D Acceleration is disabled, being the software renderer while HW DX%i is shown if 3D Acceleration is enabled where %i is 7, 8 or 9, symbolizing DirectX versions. ArtRes is the resolution of textures and animations for the game to use, being either 600, 768 or 1200.

  • BackBuffer: The game resolution in 32 bits and texture format. Only displayed when 3D Acceleration is enabled.
  • DisplayMode: Similar to above but for the monitor, also includes the HZ rate.

The string below is the Graphics Driver information. The first string is the description, next is the vendor ID, device ID, subsystem ID, revision, driver and driver version with the Direct3D DLL version. The below string is displayed when 3D Acceleration is disabled.

No Adapter Info Available
No D3D Version Information Available

The string after is the Windows version, being Windows 97-7, including NT. The below is displayed if the Windows device is unknown while the one underneath would appear on an NT-based device.

Unknown Windows %d.%d
Unknown WinNT %d.%d
  • CPU: Repeats per processor for the device, being the number, name and key name.
  • MemLoad: Memory status, being the % of memory used on the device, available + total physical memory, available + total pagefile memory and available + total virtual memory.
  • D3D Texture Memory: Direct3D texture memory of the device, being ? drawn + percent of ? , allocated memory and wasted memory + percent of wasted memory. Only shows with 3D Acceleration on as the below appears if otherwise.
No D3D Texture Memory Information Available
  • D3D RTPool: Direct3D Render Target Pool, being the entry count, full + half + quarter + other size count and locked count.
  • F3 - Added a unique function to this game when activated, adds a display when in-game.

BejTwist DebugStatsDisplay.png

The top left corner is the name of the visual background. The Japanese and Origin version of the game has added new values.

%s
%d Valid:%d
DrawPrim List(%d/%d) Strip(%d/%d) Fan(%d/%d) FPS:%3.2f SChan:%d
SetRT: %d (-%d), DistMapUsed: %d, SetVS: %d, SetPS: %d

Valid is if the move will be valid based on the cursor's position, changes to 1 if so, while the number to the left of it were the amount of gems eliminated from the current move. Close to the bottom left corner are 3 frame displays. The top display shows the total game time in frames. The left number is a count for consistent matches in the game window. The middle number shows the number of frames before a successful match was made currently. The right number shows the number of frames the player is unable to move during a turn, goes up by failed matches and reopening the game.

  • F8: Added Direct3D Version.
  • CTRL-F8 - Added to enable 3D Acceleration. If disabled, otherwise changes Direct3D's version from 9 and 8, this does NOT restart the game.
  • SHIFT-F8 - Updated to also change the Direct3D version to 9.
  • ALT-F8 - Added to toggle VSync, this does NOT restart the game.

Unused Game Modes

Action Mode

An unused mode found in the game's code. It was most likely similar to Bejeweled's Timed mode and Bejeweled 2's Action or Hyper mode in which the level-up bar is halfway full and slowly empties over time, making the player have to keep making matches before the level-up bar is completely depleted.

Extreme Mode

An unused mode that was essentially the same as Classic Mode, but the Progress Bar was longer than normal.