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 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 |
PerfectHead Editor |
|---|
Take Another Picture |
Change Head |
Position Picture |
Color Face & Hair |
Shape Head |
Remove Head |
Cancel Changes |
Keep Changes |
Shape Head |
|---|
Depth |
OK |
Cancel |
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)