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

Perfect Dark (Nintendo 64, Xbox 360)/PerfectHead

From The Cutting Room Floor
Jump to navigation Jump to search

This is a sub-page of Perfect Dark (Nintendo 64, Xbox 360).

PerfectHead was a feature which would allow players to import photos from a Game Boy Camera via the Nintendo 64 Transfer Pak and apply them to heads for use on guards in missions and characters in the Combat Simulator. A pre-existing head model would be used as a basis for the new head. A box could be resized to capture a face texture from a photo; the photo's brightness could be adjusted at the same time. The head model itself could be reshaped in eight directions, with an additional depth slider. It was also possible to change the head's coloration and hairstyle. A preview of the head could be seen during the entire process.

The official reason for PerfectHead being scrapped was "insurmountable technical problems" - while the feature was fully functional, it would cause crashes when actually using the heads during gameplay.

(Source: IGN - Perfect Dark Ditches Face Mapping)

The occurrence of the Columbine High School Massacre in the United States just a year prior to the game's release could've also played a part in the feature's removal.

Leftover Text

While no remnants of the PerfectHead features or code are known to remain in the game, some dialogue related to it can be viewed by using GameShark code 8009EDF8 00?? (where "??" is a number between 00 and 10) when playing without an Expansion Pak.

As well, there's some leftover text in the file used for the Combat Simulator and CI Training menus, which can be used to recreate the menus.

PerfectHead
Load A Saved Head
Make A New Head
Edit A Loaded Head
Edit A PerfectHead
Choose slot to edit:
Cancel
Make A New Head
Load A Saved Head
Where do you want to be able

to use this head?

Combat Simulator
All Missions
Both
Cancel
Camera Setup
Insert your camera into your

Game Boy Pak.

Then, insert your Game Boy Pak

into any controller.

OK
Cancel
Error
Game Boy Camera Not Detected!

Please check all connections

and try again.

Cancel
Choose Camera
More than one camera detected.

Please select which camera you want to use

OK
Cancel
Load From Camera
Choose picture to read from camera:
Cancel
Take Picture
Shoot!
Cancel
Keep Picture
Try Again
Load PerfectHead
Insert the Controller Pak

containing the head you

wish to load into any

controller.

Controller Pak:
Cancel
Source:
Pak 1
Pak 2
Pak 3
Pak 4
<none>
PerfectHead Editor
Take Another Picture
Change Head
Position Picture
Color Face & Hair
Shape Head
Remove Head
Cancel Changes
Keep Changes
PerfectDark-ShapeHeadMenu.jpg
Shape Head
Depth
OK
Cancel
PerfectDark-PosImageMenu.jpg
Position Image
Brightness
OK
Cancel
Choose Head
OK
Cancel
Remove PerfectHead
Are you sure you want to

remove this head from memory?

Delete
Cancel
Cancel Changes
Are you sure you want to

throw away your changes?

Throw Away
Go Back To Editor
Save PerfectHead
You have edited this head.

Do you want to keep your changes?

Keep
Revert
Save PerfectHead
Your changes will be kept in memory.

Would you like to save your changes

to the Controller Pak?

Save
Don't Save
Save PerfectHead
You can now save your head on to

a Controller Pak if you wish.

If you want to do this, please

ensure a Controller Pak is inserted

and choose "Save".

Save
Don't Save
Head Complete!
To use your head in the combat simulator,

select the head from the character menu

of the player/simulant settings menu.

Your Mission heads will now appear

in any of the missions you play.

You can now edit your head further if you wish.

Finish
Edit Head
Head Color
Face:
Hairstyle:
OK
Cancel
Style 1
Style 2
Style 3
Style 4
Blonde
Black
Auburn
Blue Rinse
Searching for Camera!
Calibrating Camera
Downloading Image
Loading Image
Saving Image
Transfering Image
Uploading Segment
Checking Controller Pak
Getting PerfectHead
Saving PerfectHead
Auto Camera Adjustment
(Source: GameShark code and scans)

Development Text

803D2368	IG:) style %d gbHead:%d

803D3A10	Pak %d -> Pak_AddOneCameraFile
803D3A30	Pak %d -> Pak_AddOneCameraFile - Making one default camera file
803D3A74	Pak %d -> Pak_AddOneCameraFile : Got Space - No need for resize
803D3AB8	Pak %d -> Pak_AddOneCameraFile : No Space -Need to resize by %d pages
803D3B00	Pak %d -> Pak_AddOneCameraFile - Make of one default camera files failed
803D3B4C	Pak %d -> Pak_AddOneCameraFile : Error - No Room

803D6230	RWI : Cam Alloc : Guid=%d -> Total = %u (%d at %s)
	camdraw.c
	Cam -> Dumping head vertex colour information
	Cam -> Face Col - Pal=%d, Entry=%d, Col=%08x
	Cam -> Hair Col - Pal=%d, Entry=%d, Col=%08x
	Cam_Tick (%d Total Slots)
	Current Camera Slot = %d
	Slot %d -> Active = %d
	camdraw.c
	CAM : Cam_StartCamFileRead - Go
	************ Cam_ActivateAndClearSlot ************ : Slot=%d
	camdraw.c
	camdraw.c
	camdraw.c
	camdraw.c
	camdraw.c
	camdraw.c
	camdraw.c
	Cam_CopyEditorToUndo
	camdraw.c
	Cam_CopyEditor
	camdraw.c
	camdraw.c
	camdraw.c
	camdraw.c
	Cam -> Setting current hair colour to %s
	Cam -> Setting current face colour to %s
	camdraw.c
	Cam_SetAutoDeArtefact -> State = %d
	camdraw.c
	Cam_ClearCameraLoadBuffer -> Camera=%d
	Cam_StartTemp : Need %u bytes for temp cam images buffer
	camdraw.c
	camdraw.c
	camdraw.c
	camdraw.c
	camdraw.c
	Camera -> Cam_Start for Camera %d
	Camera -> Cam_Stop
	Camera -> Cam_Finish - Done
	Camera ->Created a new slot - Id=%d
	Camera -> CD_DeleteSlot - Dumping slot %d
	kg
	Kp
	Ki
	Kd
	tInt
	gocal
	aim CAM : Cam_MakeTextures
	camdraw.c
	pD->ReadMode = %s
	Camera -> Getting Header Info
	Camera -> Item=%d, pD->CamHeader[i]=%d
	Camera -> Found %d Valid images
	Camera -> Item=%d, Valid=%s, Bank=%d
	YES
	NO
	CD_TransferCurrentCacheToEditorAndExit : Player=%d
	Camera -> CD_CycleHandleRead - Need to load up the camera header
	Camera -> CD_CycleHandleRead - Image %d needs loading for editor coppying on menu exit
	Camera -> CD_CycleHandleRead - Error ekCamReadModeExit2 in Null cycle
	CAMERA : COPY SLOT (%d of %s): Slot %d(%s) -> Slot %d(%s)
	ACTIVE 
	NULL
	ACTIVE
	NULL
	RWI : Warning -> Not copying the thumnail texture
	CD_DrawTexture : pTex=%x
	Cam -> WARNING - Not done intensity table recalc :- No samples within treshold
	Camera -> Call to reset auto calibrate
	AC -> ekCamAutoCalStatusReset - pD->tTime = %d, pD->tTimeNxAdd = %d
	Cam 0 -> Time = %d, Target = %d, tInt = %.2f
	Cam 0 -> Too Low -> Adding Time
	Cam 0 -> Too High -> Subbing Time
	Cam -> ekCamAutoCalStatusSettingTime - New time = %d
	%s%sAC -> Gain = %d, Target = %.2f, Int = %.2f
	Auto Calibrate is removing the menu message
	Auto Calibrate is shutting down
	Cam -> Cam_BalanceSlot %d -> tZroShift = %d
	Cam_BuildFaceTexture (slot=%d): %d of %s
	camdraw.c
	camdraw.c
	Cam %d -< Balance : No Data Available
	camdraw.c
	Cam_SetSquashZ : %u, %u, %f
	camdraw.c
	Cam : Alloc for copy of Vtx %d bytes
	CAM : Cam_AllocAndCopyAllVtx -> Ptr all-ready allocted - No extra needed
	camdraw.c
	Cam_RebuildHead : Slot=%d
	Cam -> Cam_ColourHeadOnePart - Remapping %s
	Cam_ColourHead : Face Col = %u, Hair Col = %u
	FACE
	SIDE
	HAIR
	Cam -> Cam_SquashOnePart - pExtents=%08x, pVcopy=%08x, 
	Cam -> Cam_SquashOnePart - Head centre at (%d,%d,%d)
	Cam -> Cam_Scale Param 1 = %s%s.3f
	Cam -> Cam_Scale Param 2 = %s%s.3f
	Cam -> Cam_Scale Param 3 = %s%s.3f
	Cam -> Cam_Scale Param 4 = %s%s.3f
	Cam -> Cam_Scale Param 5 = %s%s.3f
	Cam -> Cam_Scale Param 6 = %s%s.3f
	Cam -> Cam_Scale Param 7 = %s%s.3f
	Cam_DctInitialise_Read -> %x
	Cam_DctUnCompressSlot -> %x
	Cam_LoadFromPakIntoSlot -> Pak=%d, fileGuid=%u, pakGuid=%u, Slot=%d, pS=%x, pE=%x
	camdraw.c
	camdraw.c
	Cam -> Compressing Editor Slot
	Cam -> Trying image compression at quality %u
	Cam -> Failed - Too big - This=%u, Max=%d
	Cam -> Trying lower quality setting
	Cam -> Save Failed - Cant get it small enough - oo-er
	Cam -> Sucess at quality %u - Size=%u, Max=%d
	Cam_SavedEditSlotToParamPakItem -> Save failed
	Camera Save Error Result: %d
803D715C	Magic Guid set to %d

803D7D38	Menu99 -> Calling Camera Module Start
803D7D60	Menu99 -> Calling Camera Module Finish

803D8BC8	GBHead: Call to create head for slot %d (gbheadobjs[slotno]=%x)