If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Chuzzle Deluxe

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Chuzzle Deluxe

Developer: Raptisoft Games
Publisher: PopCap Games
Platforms: Windows, Mac OS X
Released in US: May 12, 2005


SourceIcon.png This game has uncompiled source code.
DevTextIcon.png This game has hidden development-related text.
DebugIcon.png This game has debugging material.


Match little fuzzy balls by sliding them across the screen. If you tap on them for a little bit with the mouse, they would sneeze if small or burp if big. Shaking them around rapidly would make them dizzy.

Uncompiled Source Code

Like many Mac distributions of games from PopCap, this one left over a few source code files in the sounds directory. The date of the said source files is November 28, 2007.

buyhandler.h:

#pragma once
#include "stdafx.h"
#include "object.h"
#include "gadget.h"
#include "button.h"
#include "Hyperlink.h"
#include "Editbox.h"
#include "Oscillator.h"

namespace ECommerce
{

class Purchaser;
class BuyHandler_Timebox;
class BuyHandler_RegisterDialog;
class BuyHandler_CountdownBox;
class BuyHandler_ExpireBox;

class BuyHandler :
	public Object
{
public:
	BuyHandler(void);
	virtual ~BuyHandler(void);

	void						Cleanup();

	bool						IsRegistered();
	inline bool					IsPurchased() {return IsRegistered();}
	inline bool					IsExpired() {if (IsRegistered()) return false;return GetTimeRemaining()<=0;}
	int							GetTimeRemaining();
	String						GetTimeRemainingString();
	void						Load();
	void						Save();

	bool						mFirstUpdate;
	virtual void				Update();

	//
	// User interface, to help out with making it all work.
	//
	void						UseESellerate();

	void						StartFreePlayClock();
	void						StopFreePlayClock();

	void						ShowTimebox(float theYPos);
	void						ShowRegisterbox();
	void						ShowCountdownbox();
	void						CloseRegisterbox();
	void						ShowExpirebox();

	inline void					SetCountdownBoxPosition(Point thePos) {mCountdownBoxPos=thePos;}



public:
	int							mFreePlayTimer;
	int							mSaveCounter;
	bool						mTimerStarted;
	bool						mIsPurchased;
	bool						mReopenTimeBox;
	float						mTimeBoxPos;
	float						mTimeBoxFade;
	bool						mCanShowCountdownbox;

	BuyHandler_Timebox			*mTimeBox;
	BuyHandler_RegisterDialog	*mRegisterBox;
	BuyHandler_CountdownBox		*mCountdownBox;
	BuyHandler_ExpireBox		*mExpireBox;

	Point						mCountdownBoxPos;

	Purchaser					*mPurchaser;

};

class BuyHandler_Timebox : public Gadget
{
public:
	BuyHandler_Timebox();
	virtual ~BuyHandler_Timebox(void);

	virtual void				Initialize();
	virtual void				Update();
	virtual void				Draw();

	virtual void				Notify(void *theData);

public:
	TextureSplatter				mSplat;
	Sprite						mBackground[2];

	Font						mFont;

	Button						mBuyButton;

};

class BuyHandler_RegisterDialog : public Gadget
{
public:
	BuyHandler_RegisterDialog();
	virtual ~BuyHandler_RegisterDialog();

	virtual void				Initialize();
	virtual void				Update();
	virtual void				Draw();

	virtual void				Notify(void *theData);


	TextureSplatter				mSplat;
	Sprite						mBackground;
	Font						mFont;

	Hyperlink					mLink;

	EditBox						mNameBox;
	EditBox						mSerialBox;

	SpriteStrip					mUnlock;
	SpriteStrip					mCancel;

	Button						mUnlockButton;
	Button						mCancelButton;
};

class BuyHandler_MessageBox : public Gadget
{
public:
	BuyHandler_MessageBox(String theCaption, String theText);
	virtual ~BuyHandler_MessageBox();

	virtual void				Draw();
	virtual void				Go();

	virtual void				Notify(void *theData);

public:

	TextureSplatter				mSplat;
	Sprite						mBackground;
	SpriteStrip					mOkay;
	Font						mFont;

	String						mCaption;
	String						mText;

	Button						mOkayButton;
};

class BuyHandler_CountdownBox : public Gadget
{
public:
	BuyHandler_CountdownBox(Point thePos);
	virtual ~BuyHandler_CountdownBox();

	virtual void				Update();
	virtual void				Draw();

public:
	TextureSplatter				mSplat;
	Sprite						mBackground;
	Font						mFont;

	Oscillator					mBlink;
};

class BuyHandler_ExpireBox : public Gadget
{
public:
	BuyHandler_ExpireBox();
	virtual ~BuyHandler_ExpireBox();

	virtual void				Draw();
	virtual void				Go();
	virtual void				Update();

	virtual void				Notify(void *theData);

public:

	TextureSplatter				mSplat;
	Sprite						mBackground;
	Tile						mExpired;
	SpriteStrip					mBuyNowButton;
	SpriteStrip					mExitButton;

	Font						mFont;
	Button						mBuyNow;
	Button						mExit;

	String						mCaption;

	float						mFade;
	BuyHandler_RegisterDialog	*mRegisterBox;



};

}

extern ECommerce::BuyHandler gBuy;

CursorHandler.h

#include "stdafx.h"

#pragma once

namespace Sys
{

class CursorManager
{
	//
	// CursorManager is a lot simpler on Mac-- it doesn't run in another thread.  It just draws
	// at the end of the render loop.
	//

public:
	CursorManager(void);
	virtual ~CursorManager(void);

	void				Initialize();
	
	void				Draw();
	void				Load(String theFilename);
	
public:
	SpriteStrip			mCursor;

	//
	// The current cursor in use (this gets set by App)
	//
	int					mCurrentCursor;

};
}

OSX_Utils.h

/*
 *  OSX_Utils.h
 *  Chuzzle
 *
 *  Created by John Raptis on 10/10/07.
 *  Copyright 2007 __MyCompanyName__. All rights reserved.
 *
 */

void OSX_SetCursor(int theCursor);
void OSX_HideCursor();
void OSX_ShowCursor();
void OSX_GetMousePosition(int *theX, int *theY);
bool OSX_IsRightButtonDown();

//
// These functions help us know if a user switch has
// happened!
//
void OSX_SwitchEventsRegister();
bool OSX_ShouldResetVideo();
void OSX_SetShouldResetVideo(bool theState);

The only file with a different header.

Debugging Functions

*** BEGIN RAPTISOFT SESSION ***
*** END RAPTISOFT SESSION ***

In the Japanese or older releases of the game there's a file called DEBUG.TXT that contains Raptisoft sessions likely used for debugging.

Development Strings

SWAPS: %d
FPS: %s
Update: %d%%
Cheats Enabled
%s %s
RaptisoftAppWindow
MAINICON
EXTENDED_INFO
DDRAW
OS
RESOLUTION
%d x %d : %d
SAFEMODE
FULLSCREEN
false
RUNTIME
%.2d:%.2d:%.2d
VERSION
PRODUCT
%s_PLAYS
MillionDollars
%s\raptinfo.dat
PlaysRemaining
Raptisoft\%s
*** BEGIN RAPTISOFT SESSION ***
PNF
Raptisoft Utility
*** END RAPTISOFT SESSION ***
http://www.popcap.com/win32updatecheck2.php?prod=%s&ver=%s
Audio::MusicVolume
Audio::SoundVolume
HWTEST::FailReason
HWTEST::CardGUID
HWTEST::HWTesterVersion
SetRenderState(D3DRENDERSTATE_AMBIENTMATERIALSOURCE)
SetRenderState(D3DRENDERSTATE_DIFFUSEMATERIALSOURCE)
SetRenderState(D3DRENDERSTATE_COLORVERTEX
SetRenderState(D3DRENDERSTATE_DESTBLEND
SetRenderState(D3DRENDERSTATE_SRCBLEND)
SetRenderState(D3DRENDERSTATE_CLIPPING)
SetRenderState(D3DRENDERSTATE_SHADEMODE)
SetRenderState(D3DRENDERSTATE_DITHERENABLE)
SetTextureStageState(D3DDTSS_MINFILTER)
SetTextureStageState(D3DDTSS_MAGFILTER)
VertexBuffer->Unlock
VertexBuffer->Lock
CreateVertexBuffer
CreateSurface(TextureSurface)
DCreateDevice(IID_IDirect3DHALDevice)
CreateSurface(Primary)
SetCooperativeLevel
QueryInterface(IID_IDirect3D7)
GetAvailableVidMem returned %s

Errors

Music Initialization Error: %s
Couldn't initialize 3D support.
Some other mystery problem!
BASS_Init has not been successfully called.
There is insufficent memory.
The file could not be opened.
The file's format is not recognised/supported.
Jukebox Load Error
Song file missing or corrupt from jukebox: %s
Music Interface Error
The BASS music interface could not initialize because:
[%s]
Music will not play during the game.
The device has no 3D support.
The device number specified is invalid.
BASS has already been initialized.
There is no available device driver... the device may already be in use.
The specified format is not supported by the device.
Could not create software render surface: %s
32-Bit (ARGB) texture format not supported
Large textures not supported
24-bit rendering not supported
Low video memory
Not enought video memory
"%s" is an unsupported card

File Names and Paths

c:\GameSrc\cpp\Raptisoft\Chuzzle\Release\Chuzzle.pdb
cached\cacheinfo.cfg
HardwareTestResults\InitialPrimarySurface.bmp
HardwareTestResults\InitialTextureSurface.bmp
App.cpp
Audio.cpp
CursorManager.cpp
DEBUG.TXT
Font.cpp
Music.cpp
ProfileManager.cpp
Registry.cpp
ObjectManager.cpp

Debugging Material

Hmmm...
To do:
Explore the exe for more references. Windows is possibly dummied as there's more strings for "Cheat" in Mac. What do they relate to?

Swaps Display

A simple display is present in the executable. Setting the byte at the memory offset to 1 will show it.

Version Offset
1.0.10 (PopCap.com, Final) 00470D82

Edit Mode

Possibly a UI for editing a mindbender is present in the executable. Setting the byte at the memory offset to 1 will show it.

Version Offset
1.0.10 (PopCap.com, Final) 00436F37

Crash Debugger

ChuzzleDeluxe-CrashDebugger-InitialErrorScreen.png

If the game crashes, a message will appear to alert the player of what happened. It will tell the player to send an error report to Raptisoft, which includes:

  • The exact path to the game's executable, where the crash occurred in the first place.
  • Where the game crashed
  • The name of the game
  • The version of the game
  • The duration of the game's session
  • Whether the game was in full screen or not
  • Whether the game was in safe mode or not
  • The resolution the game was playing at
  • The operating system the player is using
  • The version of DirectDraw the player is using