Perfect Dark (Nintendo 64, Xbox 360)/PerfectHead
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.
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.
No remnants of the PerfectHead features and code are known to remain in the game, however some dialog related to it can be viewed by using GameShark code 8009EDF8 00?? when playing without an Expansion Pak, where "??" is a number between 00 and 10. 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.
|Load A Saved Head|
|Make A New Head|
|Edit A Loaded Head|
|Edit A PerfectHead|
|Choose slot to edit:|
|Make A New Head|
|Load A Saved Head|
|Where do you want to be able
to use this head?
|Insert your camera into your
Game Boy Pak.
Then, insert your Game Boy Pak
into any controller.
|Game Boy Camera Not Detected!
Please check all connections
and try again.
|More than one camera detected.
Please select which camera you want to use
|Load From Camera|
|Choose picture to read from camera:|
|Insert the Controller Pak
containing the head you
wish to load into any
|Take Another Picture|
|Color Face & Hair|
|Are you sure you want to
remove this head from memory?
|Are you sure you want to
throw away your changes?
|Go Back To Editor|
|You have edited this head.
Do you want to keep your changes?
|Your changes will be kept in memory.
Would you like to save your changes
to the Controller Pak?
|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".
|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.
|Searching for Camera!|
|Checking Controller Pak|
|Auto Camera Adjustment|
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)