Jump to content

Uncensored Cruis'n USA project - help needed! (Nintendo 64)


CruisnEma
 Share

Recommended Posts

UPDATE:

For the question about restoring the missing ROADKILL feature I have found the ASCII TEXT STRING with the hex editor, that says: "RK SECT NOT VISIBLE" at the offset h5EAA0 (PAL E version) and in opinion of my friend this routine starts at the beginning of the rom when played. RK maybe is for RoadKill... Can you help me please with a debugger?

 

ORIGINAL MESSAGE WITH PATCH ABOUT UNCENSORED TROPHY GIRL:

 

Hello, the project try to restore the censorships of the Nintendo 64 version of Cruis'n USA, that was before made for the arcades. I've fixed 1 of the 3 censorships of this game, then the work is complete at the 33%.

But I would fix also the other censorships.

Censorships:

 
1: The trophy girl that was covered with an orrible grey t-shirt (done, watch the result in the spoiler)

65iq.jpg

 
2: (very important) Roadkill routine (run down deers and cows, not is cruel, but Nintendo have removed them entirely from the tracks).
 
3: The ending with the president, is a cutscene, Nintendo have removed their sprites and voices (but with the soundlist tool of Subdrag I've found the voices into the rom).

Then, I know that the game was censored before the release but that was ready and born uncensored, maybe, and I say maybe, the roadkill routine is only turned off (in the arcade version in the system menu you could do it) and the sprites of the president maybe are present like the voices.

But know the more important thing is to restore the roadkill routine, please can you help me? The roadkill maybe was only turned off, place in random points some deers in the IOWA track and some cow in the INDIANA track, if turned off in the arcade they don't appear exactly like in the censored N64 version.

Then you can help me to fix this problem please? Maybe with a debugger in the IOWA or INDIANA track?

 

 

PATCHES FOR THE FIXED CENSORSHIPS:

Uncensored Trophy girl patches zip:

http://www.mediafire.com/download/idpolu18y1hzw8a/Uncensored%20Cruis'n%20USA%20Project%20patch%20-%20Trophy%20girl.zip

 

P.S. The patches are for the european version and the U (V 1.0) version, not for byteswapped roms, you can use Lunar LIPS for patch them.

 

Link to comment
Share on other sites

Can't help, but I had to drop by because: Cruuuuuuuisinnnn' YeeaaAAYYYHHH—Cruisin' USA, YEAH!

 

YeeaaahhhHHH!! WHOAHH WHOOOaaaHHhhh—whoa Whoa WHoA WHOA whuh WHOOOOAH WhOOooahh...

Wow, cool reply, you are american right? I love the USA and...

...Cruis'n USA!

Link to comment
Share on other sites

I'm a Texan.

 

That's the intro heard in the beginning of Cruisin' USA, and it cracks me up every time I hear it. Kinda stuck in my memory now, thus why I had to write it out. Fond memories of playing through that game with my childhood friend.

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...
  • 3 weeks later...

All games produced by Eurocom use EDL file compression. I know Cruis'n World was two years after USA, but USA was ported by Williams so it's compression is different. I don't know what compression it uses because I fancy Cruis'n World. As far as World goes, Zoinkity made a compressor and a decompresser for EDL compressed games. Again, while all of this is irrelevant as USA uses a different compression, it's just my two cents since I knew a bit about its sequel.

 

Maybe this will help you with your quest on Cruis'n USA. (Attempt mapping out wise, I mean)

  • Like 1
Link to comment
Share on other sites

All games produced by Eurocom use EDL file compression. I know Cruis'n World was two years after USA, but USA was ported by Williams so it's compression is different. I don't know what compression it uses because I fancy Cruis'n World. As far as World goes, Zoinkity made a compressor and a decompresser for EDL compressed games. Again, while all of this is irrelevant as USA uses a different compression, it's just my two cents since I knew a bit about its sequel.

 

Maybe this will help you with your quest on Cruis'n USA. (Attempt mapping out wise, I mean)

Sorry if I answer only now. Tahnks for your help, is precious, but now I've another question to you, what you know about the sequel Cruis'n World?Now I prefer fix the censorships of USA because require less work, but will be interesting also fix also the problems of Cruis'n World. This porting not is only censored, but also full of errors and strange missing things. Like the vocal clips into the tracks (like "New york new York" and "Japan is so cool!") the missing waterfalls in the Hawaii track and the more hard gameplay and the problem with the trophy girl, in the arcade she wear random costumes, in the N64 version wear only the fuchsia bikini and the crowd wear wrong colors clothes. What you know about this version? Can you help me to restore some things? For example I've discovered the roadkill function, can you help me to apply it for all animals in the game? Can you help me to change the drones to reach the original arcade speed, restore the drunken traffic cars and apply the right function to the obastacles? For example in the arcade the french trees are bended if you hit them, and you can slow slightly, in the N64 version if you hit a tree you stop the car and ruin the race. And the other obstacles originally were almost all so as. The original routine is present in the N64 version, but is used only for small bushes and sunflowers. The plain is to fix the objects with the right routine, that is existing into the rom. If this things will be fixed the gameplay will become like the original arcade. I've also the missing sounds (like the vocal clips) converted for the rom, you know how apply them to be eared in the right places?

  • Like 1
Link to comment
Share on other sites


just two simple dumbs to see the OS functions
 
Cruis'n USA

0x8011fbc0,osCreateThread
0x8011fd10,osStartThread
0x8011ffe0,osCreateMesgQueue
0x80120370,osViSetMode
0x801203e0,osViSetSpecialFeatures
0x801205a0,osViSetEvent
0x80120610,osViBlack
0x80120680,alHeapInit
0x801223a0,osEepromProbe
0x80122690,osRecvMesg
0x801227d0,osWritebackDCache
0x80122850,osInvalDCache
0x80122900,osInvalICache
0x80122a90,osSetEventMesg
0x80122b00,osSpTaskYielded
0x80122b80,osViSwapBuffer
0x80122bd0,osViGetCurrentFramebuffer
0x80122bd0,osViGetNextFramebuffer
0x80122c10,osSpTaskYield
0x80122c30,osSendMesg
0x80122d80,osWritebackDCacheAll
0x80122ecc,osSpTaskLoad
0x8012302c,osSpTaskStartGo
0x80123120,osGetTime
0x801231b0,__ull_rshift
0x801231dc,__ull_rem
0x80123218,__ull_div
0x80123254,__ll_lshift
0x80123280,__ll_rem
0x801232bc,__ll_div
0x80123318,__ll_mul
0x80123348,__ull_divremi
0x801233a8,__ll_mod
0x80123444,__ll_rshift
0x80123480,osAiSetFrequency
0x801235e0,alHeapDBAlloc
0x80123640,alUnlink
0x80123670,alLink
0x80123694,alClose
0x801236cc,alInit
0x80123700,osVirtualToPhysical
0x80123780,osAiSetNextBuffer
0x80123830,osAiGetLength
0x80123f10,alSynAddPlayer
0x80123f60,_allocatePVoice
0x80124048,alSynAllocVoice
0x80124190,alSynStartVoiceParams
0x80124280,alSynSetPitch
0x80124310,alSynSetVol
0x801243b0,alSynSetPan
0x80124440,alSynStopVoice
0x801244c0,alSynFreeVoice
0x80124570,alSynSetPriority
0x80124580,osSetTimer
0x80124660,osContStartReadData
0x80124724,osContGetReadData
0x801248c0,osContStartQuery
0x80124944,osContGetQuery
0x80124970,__d_to_ll
0x8012498c,__f_to_ll
0x801249a8,__d_to_ull
0x80124a48,__f_to_ull
0x80124ae4,__ll_to_d
0x80124afc,__ll_to_f
0x80124b14,__ull_to_d
0x80124b48,__ull_to_f
0x80124b80,__osSetSR
0x80124b90,__osGetSR
0x80124ba0,__osSetFpcCsr
0x80124bb0,__osSiRawReadIo
0x80124bb0,__osSpRawReadIo
0x80124c00,__osSiRawWriteIo
0x80124c00,__osSpRawWriteIo
0x801254c0,osMapTLBRdb
0x80125520,osPiRawReadIo
0x801255c0,bzero/_bzero/blkclr/_blkclr
0x80125660,__osDisableInt
0x80125680,__osRestoreInt
0x801256a0,__osDequeueThread
0x801257a0,osGetThreadPri
0x801257c0,osSetThreadPri
0x801258a0,osPiRawStartDma
0x80126040,__osViSwapContext
0x801263a0,osGetCount
0x80126470,__osSiRawStartDma
0x80127e10,__osContRamRead
0x80128390,__osContRamWrite
0x80128740,osEepromWrite
0x801289fc,__osEepStatus
0x80128c20,osEepromRead
0x8012af80,alSynAllocFX
0x8012b020,alMainBusParam
0x8012b050,alMainBusPull
0x8012b170,alLoadParam
0x8012b344,alRaw16Pull
0x8012b81c,alAdpcmPull
0x8012bcc0,alResampleParam
0x8012bdac,alResamplePull
0x8012bfc0,_ldexpf
0x8012bfe8,_frexpf
0x8012c0d4,alEnvmixerParam
0x8012c6cc,alEnvmixerPull
0x8012cc20,alAuxBusParam
0x8012cc50,alAuxBusPull
0x8012cd30,alSaveParam
0x8012cd64,alSavePull
0x8012ce50,__osSiDeviceBusy
0x8012d430,osDestroyThread
0x8012d530,__osSetCompare
0x8012d540,__osContAddressCrc
0x8012d5f0,__osContDataCrc
0x8012e790,alFilterNew
0x8012f3c0,alCopy
0x8012f440,__osGetCause
0x8012f450,__osAtomicDec
0x8012f4b0,lldiv
0x8012f5b0,ldiv
0x8013a580,osViModeNtscLpn1
0x8013a5d0,osViModeNtscLpf1
0x8013a670,osViModeNtscLaf1
0x8013a6c0,osViModeNtscLpn2
0x8013a710,osViModeNtscLpf2
0x8013a760,osViModeNtscLan2
0x8013a7b0,osViModeNtscLaf2
0x8013a800,osViModeNtscHpn1
0x8013a850,osViModeNtscHpf1
0x8013a8a0,osViModeNtscHan1
0x8013a8f0,osViModeNtscHaf1
0x8013a940,osViModeNtscHpn2
0x8013a990,osViModeNtscHpf2
0x8013a9e0,osViModeMpalLpn1
0x8013aa30,osViModeMpalLpf1
0x8013aa80,osViModeMpalLan1
0x8013aad0,osViModeMpalLaf1
0x8013ab20,osViModeMpalLpn2
0x8013ab70,osViModeMpalLpf2
0x8013abc0,osViModeMpalLan2
0x8013ac10,osViModeMpalLaf2
0x8013ac60,osViModeMpalHpn1
0x8013acb0,osViModeMpalHpf1
0x8013ad00,osViModeMpalHan1
0x8013ad50,osViModeMpalHaf1
0x8013ada0,osViModeMpalHpn2
0x8013adf0,osViModeMpalHpf2
0x8013bdb0,__osRcpImTable 

 

 

 

Cruis'n World

 

 

0x80509590,osViBlack
0x80509890,osCreateThread
0x805099e0,osStartThread
0x80509cc0,osSetThreadPri
0x80509da0,osInvalDCache
0x80509e50,osPiStartDma
0x80509f60,osRecvMesg
0x8050a0a0,osGetTime
0x8050a130,osWritebackDCacheAll
0x8050a160,osSendMesg
0x8050a2b0,osCreateMesgQueue
0x8050a2e0,alHeapInit
0x8050a320,osAiSetFrequency
0x8050b720,__CSPPostNextSeqEvent
0x8050c7e0,alCSPNew
0x8050c950,alCSPSetBank
0x8050c950,alSeqpSetBank
0x8050c990,alSndpAllocate
0x8050ca30,alSndpSetSound
0x8050ca50,alSndpDeallocate
0x8050caa0,alSndpGetState
0x8050cac0,alSeqpGetVol
0x8050cac0,alCSPGetVol
0x8050cad0,alSeqpStop
0x8050cad0,alCSPStop
0x8050cb00,alSndpStop
0x8050cb50,alCSeqGetLoc
0x8050cbf0,alCSeqSetLoc
0x8050cdb4,alCSeqNextEvent
0x8050d0ac,alCSeqNew
0x8050d1c0,alCSeqNewMarker
0x8050d32c,alCSeqGetTicks
0x8050d334,alCSeqSecToTicks
0x8050d430,alCSeqTicksToSec
0x8050d49c,__alCSeqNextDelta
0x8050d610,alSeqpSetSeq
0x8050d610,alCSPSetSeq
0x8050d650,alSeqpSetVol
0x8050d650,alCSPSetVol
0x8050d690,alCSPPlay
0x8050d690,alSeqpPlay
0x8050d6c0,alCSPSetChlPriority
0x8050d6c0,alSeqpSetChlPriority
0x8050d710,alSndpSetVol
0x8050d770,__ull_rshift
0x8050d79c,__ull_rem
0x8050d7d8,__ull_div
0x8050d814,__ll_lshift
0x8050d840,__ll_rem
0x8050d87c,__ll_div
0x8050d8d8,__ll_mul
0x8050d908,__ull_divremi
0x8050d968,__ll_mod
0x8050da04,__ll_rshift
0x8050da30,__d_to_ll
0x8050da4c,__f_to_ll
0x8050da68,__d_to_ull
0x8050db08,__f_to_ull
0x8050dba4,__ll_to_d
0x8050dbbc,__ll_to_f
0x8050dbd4,__ull_to_d
0x8050dc08,__ull_to_f
0x8050dc40,guPerspectiveF
0x8050de70,guPerspective
0x8050ded0,guLookAtF
0x8050e188,guLookAt
0x8050e470,guScaleF
0x8050e4c4,guScale
0x8050e9a0,sprintf
0x8050ea20,sqrtf
0x8050ea30,__sinf/fsin/sinf
0x8050ebf0,osWritebackDCache
0x8050ec70,guRotateF
0x8050ee04,guRotate
0x8050ee60,guMtxXFML
0x8050eec0,guMtxCatL
0x8050ef20,guPositionF
0x8050f0d0,guPosition
0x8050f140,sins
0x8050f1b0,coss
0x8050f1e0,__cosf/fcos/cosf
0x8050f3b0,guMtxXFMF
0x8050f450,guMtxCatF
0x8050f5c0,guTranslateF
0x8050f608,guTranslate
0x8050f660,osCreateViManager
0x8050f9c0,osViSetMode
0x8050fa30,osViSetSpecialFeatures
0x8050fbf0,osSetEventMesg
0x8050fc60,osViSetEvent
0x8050fcd0,osSetIntMask
0x8050fd70,osSpTaskYielded
0x8050fe70,osViSwapBuffer
0x805101b0,osDpSetNextBuffer
0x80510260,osSpTaskYield
0x80510280,alSndpSetPitch
0x805102e0,alSndpSetPan
0x80510340,alSndpSetPriority
0x80510370,alSndpPlay
0x80510b80,memcpy
0x80510bac,strlen
0x80510bd4,strchr
0x80510fc0,osPfsNumFiles
0x80511110,osPfsFreeBlocks
0x80511260,osPfsFileState
0x80512590,osPfsAllocateFile
0x80512a14,__osPfsDeclearPage
0x80512d40,osPfsFindFile
0x80512f00,osContStartQuery
0x80512f84,osContGetQuery
0x80513390,__osDisableInt
0x805133b0,__osRestoreInt
0x80513510,__osSetSR
0x80513520,__osGetSR
0x80513530,__osSetFpcCsr
0x80513540,__osSpRawReadIo
0x80513540,__osSiRawReadIo
0x80513590,__osSpRawWriteIo
0x80513590,__osSiRawWriteIo
0x80513ef0,osInvalICache
0x80513f70,osMapTLBRdb
0x80513fd0,osPiRawReadIo
0x80514030,bzero/_bzero/blkclr/_blkclr
0x805140d0,__osDequeueThread
0x805143d0,osGetThreadPri
0x805143f0,osPiRawStartDma
0x80514b90,osJamMesg
0x80514ce0,osPiGetCmdQueue
0x80514d10,osGetCount
0x80515120,alSynDelete
0x80515130,__osProbeTLB
0x805151f0,__osAiDeviceBusy
0x80515220,alSaveNew
0x80515264,alMainBusNew
0x805152b8,alAuxBusNew
0x8051530c,alResampleNew
0x80515394,alLoadNew
0x8051543c,alEnvmixerNew
0x805154e0,init_lpfilter
0x80515580,alFxNew
0x805159c0,alSynAllocFX
0x80515a60,alMainBusParam
0x80515a90,alMainBusPull
0x80515bb0,alLoadParam
0x80515d84,alRaw16Pull
0x8051625c,alAdpcmPull
0x80516700,alResampleParam
0x805167ec,alResamplePull
0x80516a00,_ldexpf
0x80516a28,_frexpf
0x80516b14,alEnvmixerParam
0x8051710c,alEnvmixerPull
0x80517660,alAuxBusParam
0x80517690,alAuxBusPull
0x80517770,alSaveParam
0x805177a4,alSavePull
0x80517830,alEvtqFlushType
0x805178dc,alEvtqFlush
0x8051794c,alEvtqPostEvent
0x80517a70,alEvtqNextEvent
0x80517afc,alEvtqNew
0x80517b70,alSynAddPlayer
0x80517bc0,_allocatePVoice
0x80517ca8,alSynAllocVoice
0x80517df0,alSynStartVoice
0x8051a950,guNormalize
0x8051a9e0,__osGetActiveQueue
0x8051a9e0,osPiGetDeviceType
0x8051a9e0,__osViGetCurrentContext
0x8051a9e0,__osGetCurrFaultedThread
0x8051a9e0,__osViGetNextContext
0x8051a9f0,__osViSwapContext
0x8051ad50,__osSpGetStatus
0x8051ad60,bcopy/_bcopy
0x8051b070,__osSpSetStatus
0x8051b080,__osSpSetPc
0x8051b0c0,__osSpRawStartDma
0x8051b150,__osSpDeviceBusy
0x8051b180,__osDpDeviceBusy
0x8051b5b0,__osSiRawStartDma
0x8051b660,__osContAddressCrc
0x8051b710,__osContDataCrc
0x8051c6e0,osSetTimer
0x8051c7c0,__osSumcalc
0x8051c81c,__osIdCheckSum
0x8051c884,__osRepairPackId
0x8051cc9c,__osCheckPackId
0x8051ce34,__osGetId
0x8051d090,__osCheckId
0x8051d18c,__osPfsRWInode
0x8051d4ac,__osPfsSelectBank
0x8051d760,osPfsChecker
0x8051de24,corrupted_init
0x8051dfd8,corrupted
0x8051e1c0,__osSiDeviceBusy
0x8051eb80,__osResetGlobalIntMask
0x8051ef10,__osSetGlobalIntMask
0x8051ef60,osYieldThread
0x8051efb0,__osSetCompare
0x8051efc0,alFilterNew
0x8051efe0,_doModFunc
0x8051f088,_filterBuffer
0x8051f140,_saveBuffer
0x8051f2c8,_loadBuffer
0x8051f454,_loadOutputBuffer
0x8051f678,alFxParamHdl
0x8051f8d4,alFxParam
0x8051f8ec,alFxPull
0x8051fc30,alCopy
0x8051fcb0,alSeqGetLoc
0x8051fccc,alSeqSetLoc
0x8051fce8,alSeqGetTicks
0x8051fd44,alSeqNextEvent
0x8051fec8,alSeqNewMarker
0x8051ffe8,alSeqSecToTicks
0x805200cc,alSeqTicksToSec
0x80520120,__alSeqNextDelta
0x805201f8,alSeqNew
0x805202d0,alSynSetPriority
0x805202e0,_Litob
0x80520580,_Ldtob
0x80521040,lldiv
0x80521140,ldiv
0x8053c330,osViModeNtscLpn1
0x8053c380,osViModeNtscLpf1
0x8053c420,osViModeNtscLaf1
0x8053c470,osViModeNtscLpn2
0x8053c4c0,osViModeNtscLpf2
0x8053c510,osViModeNtscLan2
0x8053c560,osViModeNtscLaf2
0x8053c5b0,osViModeNtscHpn1
0x8053c600,osViModeNtscHpf1
0x8053c650,osViModeNtscHan1
0x8053c6a0,osViModeNtscHaf1
0x8053c6f0,osViModeNtscHpn2
0x8053c740,osViModeNtscHpf2
0x8053cbf0,osViModeMpalLpn1
0x8053cc40,osViModeMpalLpf1
0x8053cce0,osViModeMpalLaf1
0x8053cd30,osViModeMpalLpn2
0x8053cd80,osViModeMpalLpf2
0x8053cdd0,osViModeMpalLan2
0x8053ce20,osViModeMpalLaf2
0x8053ce70,osViModeMpalHpn1
0x8053cec0,osViModeMpalHpf1
0x8053cf10,osViModeMpalHan1
0x8053cf60,osViModeMpalHaf1
0x8053cfb0,osViModeMpalHpn2
0x8053d000,osViModeMpalHpf2 

 

 

  • Like 1
Link to comment
Share on other sites

The file table was found last night by fkualol and Twili (as well as track table in RAM).

0x80132090
0x80132260
//Track Table (RAM)
 
 I'll need to make a program to make a program to do the work for me instead of mapping out the files by hand like a mad man.
Format

Start 0x80590
End 0x98CC4
The file table is 18734 bytes long (including header)
 
Header: 00 00 30 E6 
 
Example File1:
30 00  02 08  03 01  87 34
XX YY YY YY ZZ AA AA AA
 
X = Unkown
Y = File size
Z = File type?
01
02
03
04
05
06
07
08
09
0B (only saw twice at the beginning)
0C (only saw once)
A = Offset of the file relative to 0x80590
 
File offsets

1 0x98CC4 //Mexico?
2 0x98ECC //Mexico?
3 0x994D4
4 0x996DC
5 0x9A2E4
6 0x9A4EC
7 0x9AEF4
8 0x9B0FC
9 0x9BB04
10 0x9C50C
11 0x9CB14
12 0x9D51C
13 0x9df24
14 0x9E52C
15 0x9F134
15 0x9F73C
15 0x9F944
15 0x9FB74
16 0x9FCFC
17 0x
so on so on so on etc etc
 
Notes: <Playtendo> each track uses 3 files I think
 

Edit:
I added OS Functions of Exotica and updated the archived area: http://en64.net/archives/Cruisn.html
  • Like 1
Link to comment
Share on other sites

  • 4 months later...

There is a way to find specific palettes and textures on Cruis'n World? I would edit the starting flag girl, the trophy girl and the crowd at the finish line.

Try using Tile Layer Pro, or SNESPal.exe which is aimed to finding palettes and tiles in SNES games, but it can be used for just about anything.

 

You can always just use Tile Molester, which you can find any tile. I haven't tested SNESPal.exe on N64 games, but it might work.

Link to comment
Share on other sites

  • 7 months later...
  • 6 months later...

Please can you help me with the censored roadkill feature? I have found the TEXT STRING with the hex editor, that says: "RK SECT NOT VISIBLE" and in opinion of my friend this routine starts at the beginning of the rom when played. RK maybe is for RoadKill... Can you help me please with a debugger?

Link to comment
Share on other sites

  • 5 months later...
 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.