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

Notes:WWF SmackDown! 2: Know Your Role

From The Cutting Room Floor
Jump to navigation Jump to search

This page contains notes for the game WWF SmackDown! 2: Know Your Role.

Any mentioned file names refer to those files created by RRUnpack. All file data mentioned is little endian.

Cutscene Information

Valid Ids

These are all the valid cutscene ids. Some have multiple entries in emtb.ukn (see below) with different text and sound effects, but are only listed once. Use gameshark code 8009611e xxxx to play them at the next juncture. In file order:

0000 0001 0002 0003 0004 0005 0006 0009 0007 0008 000a 000b 000c 000d 000e 000f 0010 0011 0012 0013 
0014 0015 0016 0017 0018 0019 001a 001b 001c 001d 001e 001f 0020 0021 0022 0023 0024 0025 0026 0027 
0028 0029 002a 002b 002c 002d 002e 002f 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003a 003b 
003c 003d 003e 003f 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 004a 004b 004c 004d 004e 004f 
0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005a 005c 005d 005e 005f 0060 0061 0062 0063 0064 
0065 0066 0067 0068 0069 006a 006b 006c 006e 006f 0070 0071 0072 0074 0079 007e 007f 0080 0081 0082 
0083 0084 0085 0086 0087 0088 0089 008a 008b 008c 008d 008f 0090 0091 0092 0093 0095 0096 0097 0098 
0099 009a 009b 009c 009d 009e 009f 00a0 00a1 00a2 00a3 00a4 00a5 00a6 00a7 00a8 00a9 00aa 00ab 00ac 
00ad 00ae 00b0 00b1 00b2 00b3 00b4 00b6 00bb 00c0 00c1 00c2 00c3 00c4 00c5 00c6 00c7 00c8 00c9 00ca 
00cb 00cc 00cd 00ce 00cf 00d1 00d2 00d3 00d4 00d5 00d7 00d8 00dc 00e1 00e2 00e3 00e4 00e5 00e6 00e7 
00e8 00e9 00ea 00eb 00ec 00ed 00ee 00ef 00f0 00f2 00f3 00f4 00f5 00f6 00f8 00fd 0102 0103 0104 0105 
0106 0107 0108 0109 010a 010b 010c 010d 010e 010f 0110 0111 0113 0114 0115 0116 0117 0119 011e 0123 
0124 0125 0126 0127 0128 0129 012a 012b 012c 012d 012e 012f 0130 0131 0132 0134 0135 0136 0137 0138 
013a 013b 013c 013d 013e 013f 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 014a 014b 014c 014d 
014e 014f 0150 0151 0152 0153 0155 0156 0157 0158 0159 015b 015c 015d 015e 015f 0160 0161 0162 0163 
0164 0165 0166 0167 0168 0169 016a 016b 016c 016d 016e 016f 0170 0171 0172 0173 0174 0176 0177 0178 
0179 017a 017c 017d 017e 017f 0180 0181 0182 0183 0184 0185 0186 0187 0188 0189 018a 018b 018c 018d 
018e 018f 0190 0191 0192 0193 0194 0195 0197 0198 0199 019a 019b 019d 019e 019f 01a0 01a1 01a2 01a3 
01a4 01a5 01a6 01a7 01a8 01a9 01aa 01ab 01ac 01ad 01ae 01af 01b0 01b1 01b2 01b3 01b4 01b5 01b6 01b7 
01b8 01b9 01ba 01bb 01be 01bf 01c0 01c1 01c2 01c5 01c6 01c7 01c8 01c9 01ca 01cb 01cc 01cd 01ce 01cf 
01d0 01d1 01d2 01d3 01d4 01d5 01d6 01d7 01d8 01d9 01da 01db 01dc 01dd 01de 01df 01e0 01e1 01e2 01e3 
01e6 01e7 01e8 01e9 01ea 01ed 01ee 01ef 01f0 01f1 01f2 01f3 01f4 01f5 01f6 01f7 01f8 01f9 01fa 01fb 
01fc 01fd 01fe 01ff 0200 0201 0202 0203 0204 0205 0206 0207 0208 0209 020b 020c 020d 020e 020f 0211 
0212 0213 0214 0215 0216 0217 0218 0219 021a 021b 021c 021d 021e 021f 0220 0221 0222 0223 0224 0225 
0226 0227 0228 0229 022a 022b 022c 022d 022f 0230 0231 0232 0233 0235 0236 0237 0238 0239 023a 023b 
023c 023d 023e 023f 0240 0241 0242 0243 0244 0245 0246 0247 0248 0249 024a 024b 024c 024d 024e 024f 
0250 0251 0252 0253 0256 0257 0258 0259 025a 025d 025e 025f 0260 0261 0262 0263 0264 0265 0266 0267 
0268 0269 026a 026b 026c 026d 026e 026f 0270 0271 0272 0273 0274 0275 0276 0277 0278 0279 027a 027b 
027e 027f 0280 0281 0282 0285 0286 0287 0288 0289 028a 028b 028c 028d 028e 028f 0290 0291 0292 0293 
0294 0295 0296 0297 0298 0299 029a 029b 029c 029d 029e 029f 02a0 02a1 02a3 02a4 02a5 02a6 02a7 02a9 
02aa 02ab 02ac 02ad 02ae 02af 02b0 02b1 02b2 02b3 02b4 02b5 02b6 02b7 02b8 02b9 02ba 02bb 02bc 02bd 
02be 02bf 02c0 02c1 02c2 02c3 02c4 02c5 02c7 02c8 02c9 02ca 02cb 02cc 02cd 02ce 02cf 02d0 02d1 02d2 
02d3 02d4 02d5 02d6 02d7 02d8 02d9 02da 02db 02dc 02dd 02de 02df 02e0 02e1 02e2 02e3 02e4 02e6 02e7 
02e8 02e9 02eb 02ec 02ed 02ee 02ef 02f0 02f1 02f2 02f3 02f4 02f5 02f6 02f7 02f8 02fa 02fb 02fc 02fd 
02ff 0300 0301 0302 0303 0304 0305 0306 0307 0308 0309 030a 030b 030c 030e 030f 0310 0311 0313 0314 
0315 0316 0317 0318 0319 031a 031b 031c 031d 031e 031f 0320 0322 0323 0324 0325 0327 0328 0329 032a 
032b 032c 032d 032e 032f 0330 0331 0332 0333 0334 0336 0337 0338 0339 033b 033c 033d 033e 033f 0340 
0341 0342 0343 0344 0345 0346 0347 0348 034a 034b 034c 034d 034f 0350 0351 0352 0353 0354 0355 0356 
0357 0358 0359 035a 035b 035c 035e 035f 0360 0361 0363 0364 0365 0366 0367 0368 0369 036a 036b 036c 
036d 036e 036f 0370 0372 0373 0374 0375 0377 0378 0379 037a 037b 037c 037d 037e 037f 0380 0381 0382 
0383 0384 0385 0386 0387 0388 0389 038a 038b 038c 038d 038e 038f 0390 0391 0392 0393 0394 0395 0396 
0397 0398 0399 039a 039b 039c 039d 039e 039f 03a0 03a1 03a2 03a3 03a4 03a5 03a6 03a7 03a8 03a9 03aa 
03ab 03ac 03ad 03ae 03af 03b0 03b1 03b2 03b3 03b4 03b5 03b6 03b7 03b8 03b9 03ba 03bb 03bc 03bd 03be 
03bf 03c0 03c1 03c2 03c3 03c4 03c5 03c6 03c7 03c8 03c9 03ca 03cb 03cc 03cd 03ce 03cf 03d0 03d1 03d3 
03d4 03d6 03d7 03d9 03da 03db 03dc 03de 03df 03e1 03e2 03e4 03e5 03e6 03e7 03e8 03e9 03ea 03eb 03ec 
03ed 03ee 03ef 03f0 03f1 03f2 03f3 03f8 03f9 03fa 03fb 03fc 03fd 03fe 03ff 0400 0401 0402 0403 0404 
0405 0406 0407 0408 0409 040a 040c 040d 040e 040f 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 
041a 041b 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 
042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 
0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0450 0451 0452 0453 0454 0455 0456 
0457 0458 0459 045a 045b 045c 045d 045e 045f 0460 0461 0462 0463 0464 0465 0466 0467 0468 0469 046a 
046b 046c 046d 046e 046f 0470 0471 0472 0473 0474 0476 0477 0478 0479 047a 047b 047c 047d 047e 047f 
0480 0481 0482 0483 0484 0485 0486 0487 0488 0489 048a 048b 048c 048d 048e 048f 0490 0491 0492 0493 
0495 0496 0497 0498 049a 049b 049c 049f 04a0 04a1 04a3 04a4 04a5 04a7 04a8 04a9 04aa 04ac 04ad 04ae 
04b1 04b2 04b3 04b5 04b6 04b7 04b9 04ba 04bb 04bd 04be 04c1 04c2 04c3 04c5 04c6 04c7 04c9 04ca 04cb 
04cd 04ce 04d1 04d2 04d3 04d5 04d6 04d7 04d9 04da 04db 04dd 04de 04e1 04e2 04e3 04e5 04e6 04e7 04e9 
04ea 04eb 04ed 04ee 04f1 04f2 04f3 04f5 04f6 04f7 04f9 04fa 04fb 04fd 04fe 0501 0502 0503 0505 0506 
0507 0509 050a 050b 050d 050e 0511 0512 0513 0515 0516 0517 0519 051a 051b 051d 051e 0521 0522 0523 
0525 0526 0527 0529 052a 052b 052d 052e 0531 0532 0533 0535 0536 0537 0539 053a 053b 053d 053e 0541 
0542 0543 0545 0546 0547 0549 054a 054b 054d 054e 0551 0552 0553 0555 0556 0557 0558 0559 055a 055b 
055c 055d 055e 055f 0560 0561 0562 0563 0564 0565 0566 0567 0568 0569 056b 056c 056d 056e 056f 0571 
0572 0574 0575 0577 0579 057a 057b 057f 0581 0582 0583 0584 0589 058a 058b 058c 0591 0592 0593 0597 
0598 0599 059d 059f 05a0 05a1 05a3 05a5 05a6 05a7 05a8 05a9 05ab 05ac 05ad 05ae 05af 05b0 05b1 05b2 
05b3 05b4 05b5 05b6 05b7 05b8 05b9 05ba 05bd 05bf 05c0 05c1 05c2 05c3 05c6 05c8 05c9 05ca 05cb 05cc 
05ce 05cf 05d0 05d1 05d2 05d3 05d4 05d5 05d6 05d7 05d8 05db 05dd 05de 05df 05e0 05e1 05e4 05e6 05e7 
05e8 05e9 05ea 05ec 05ed 05ee 05ef 05f0 05f1 05f2 05f3 05f4 05f5 05f6 05f9 05fb 05fc 05fd 05fe 05ff 
0602 0604 0605 0606 0607 0608 0609 060a 060b 060c 060d 060e 060f 0610 0611 0612 0613 0614 0615 0616 
0617 0618 0619 061a 061b 061c 061d 061e 061f 0620 0621 0622 0623 0624 0625 0626 0627 0628 062a 062b 
062c 062d 062f 0630 0631 0632 0634 0635 0636 0637 0638 0639 063a 063b 063c 063d 063e 063f 0640 0641 
0644 0646 0647 0648 0649 064a 064d 064f 0650 0651 0652 0653 0654 0655 0656 0657 0658 0659 065a 065b 
065c 065d 065e 065f 0660 0661 0662 0663 0664 0665 0666 0667 0668 0669 066a 066b 066c 066d 066e 0671 
0673 0674 0675 0676 0677 067a 067c 067d 067e 067f 0680 0681 0682 0683 0684 0685 0686 0687 0688 0689 
068a 068b 068c 068d 068e 068f 0690 0691 0692 0693 0694 0695 0696 0697 0698 0699 069a 069b 069c 069d 
069e 069f 06a0 06a1 06a2 06a3 06a4 06a5 06a6 06a7 06a8 06a9 06aa 06ab 06ac 06ad 06ae 06af 06b0 06b1 
06b2 06b3 06b4 06b5 06b6 06b7 06b8 06b9 06ba 06bb 06bc 06bd 06be 06bf 06c0 06c1 06c2 06c3 06c4 06c5 
06c6 06c7 06c8 06c9 06ca 06cb 06cc 06cd 06ce 06cf 06d0 06d1 06d2 06d3 06d4 06d5 06d6 06d7 06d8 06d9 
06da 06db 06dc 07b4 06dd 06de 06df 06e0 06e1 06e2 06e3 06e4 06e5 06e6 06e7 06e8 06e9 06ea 06eb 06ec 
06ed 06ee 06ef 06f0 06f1 06f2 06f3 06f4 06f5 06f6 06f7 06f8 06f9 06fa 06fb 06fc 06fd 06fe 06ff 0700 
0701 0702 0703 0704 0705 0706 0707 0708 0709 070a 070b 070c 070d 070e 070f 0710 0711 0712 0713 0714 
0715 0716 0717 0718 0719 071a 071b 071c 071d 071e 071f 0720 0721 0722 0723 0724 0725 0726 0727 0728 
0729 072a 072b 072c 072d 072e 072f 0730 0731 0732 0733 0734 0735 0736 0737 0738 0739 073a 073b 073c 
073d 073e 073f 0740 0741 0742 0743 0744 0745 0746 0747 0748 0749 074a 074b 074c 074d 074e 074f 0750 
0751 0752 0753 0754 0755 0756 0757 0758 0759 075a 075b 075c 075d 075e 075f 0760 0761 0762 0763 0764 
0765 0766 0767 0768 0769 076a 076b 076c 076d 076e 076f 0770 0771 0772 0773 0774 0775 0776 0777 0778 
0779 077a 077b 077c 077d 077e 077f 0780 0781 0782 0783 0784 0785 0786 0787 0788 0789 078a 078b 078c 
078d 078e 078f 0790 0791 0792 0793 0794 0795 0796 0797 0798 0799 079a 079b 07cb 079c 079d 079e 079f 
07a0 07a1 07a2 07a3 07a4 07a5 07a6 07a7 07a8 07a9 07aa 07ab 07ac 07ad 07ae 07af 07b0 07b2 07b3 07b5 
07b6 07b7 07b8 07b9 07ba 07bb 07bc 07bd 07be 07bf 07c0 07c1 07c2 07c3 07c4 07c5 07c6 07c7 07c8 07c9 
07ca 07d0 07d1 07d2 07d3 07d4 07d5 07d6 07d7 07d8 07d9 07da 07dc 07dd 07de 07df 07e2 07e3 07e4 07e5 
07e8 07e9 07ea 07eb 07ed 07ee 07ef 07f0 07f2 07f3 07f4 07f5 07f6 07f7 07f8 07f9 07fa 07fb 07fd 07fe 
07ff 0800 0803 0804 0805 0806 0813 0809 080a 080b 080c 080e 080f 0810 0811 0814 0815 0816 0817 0818 
0819 081a 081b 081d

How They Work

Cutscene data is spread amongst many files. The first, /c2.dpac/CSN/emtb.ukn, houses the static information relating to setup. It is basically a flat array of records 28 bytes in size, terminated by a record filled with 0xff, layed out as such:

struct CutsceneData
{
    ushort unknown; // 2 bytes
    ushort cutsceneId; // 2 bytes
    ushort staggeredTextIds[6]; // 12 bytes
    byte staggeredAudioIds[6]; // 6 bytes
    uint flags; // 4 bytes
};

The first unknown field is an ever increasing index or offset, but for what, is unknown.
cutsceneID identifies this cutscene.
staggeredTextIds controls which text is rendered at various stages of the scene. The values are nothing more than line numbers for /c2.dpac/CSN/evtx.ukn which is a standard Windows text file, minus 1. A value of 999 (0x3e7) indicates no text.
staggeredAudioIds are the same as above except they control which sound to play from XA.pac. A value of 255 (0xff) indicates no sound. Values less than 0x64 are the various character quotes, 0x64-0x74 is match BGM/menu music and 0x75-0x78 is the theme music of the characters in the scene.
flags are seemingly unused, since changing them has no effect. Most are 0 anyway.

The 'staggered' values take effect at progressive points throughout the scene. The first entry indicates the start of the cutscene, and successive entries at predefined points further along. Audio can also be baked in to the cutscene definition. The Raw is Jericho scene on the Unused Text page does this for Jericho's voice clip.

Not defined in this data is which wrestlers are in the scenes. Since almost any wrestler can appear in any scene, this is determined at runtime instead.

When it's time to play a scene in season mode, the known bits of this structure are loaded into memory at 8009611e (for both EU and US games) with some interloping data inbetween like so:

struct LoadedCutsceneData
{
    ushort cutsceneId; // 8009611e
    byte cutsceneCharacters[4]; // 80096120-80096123
    ushort staggeredTextIds[6]; // 80096124-8009612f
    byte staggereAudioIds[6]; // 80096130-80096135
};

The new kid on the block, cutsceneCharacters, controls which wrestlers are inserted into the scene. Each can have upto 4 loaded, though how many are actually used depends on the cutscene. Note that Big Show and Ken Shamrock cannot be used in cutscenes; attempting to use them will revert to The Rock, the default wrestler.

Putting it all together, the Raw is Jericho scene can be triggered as the next scene with the following Gameshark code:

8009611E 0814 or 0815 // cutscene id (there are two for this event)
30096120 0009 // first cutscene character id (Chris Jericho)
80096124 03e7 // disable first stage dialog line (in case the scene we hijacked was going to load one)
80096126 0238 // enable second stage to "MN is Jericho" which is line 569 (0x239 - 1)
30096130 00FF // disable first speech (just in case)
30096131 0011 // Enable Lawler's "Everybody loves this guy" quote

The guts of the cutscene data including camera and character movements, locations, and predefined audio is in the /ev.dpac/evmt/xxxx.pac/0000.ukn files. Working out which of the 104 pac directories a scene's info is in requires some maths.

  • CutsceneId * 0x66666667 = (a 64-bit result)
  • (High 32-bits of result / 8) + cutsceneIdSignBitValue (always 0) + 1 = pac file

Using the example scene again, with its id of 0x814:

  • 0x814 * 0x66666667 = 0x33B3333380c
  • High dword of 33B3333380c = 0x33b
  • 0x33b / 8 = 0x67
  • 0x67 + 0 + 1 = 0x68 (0104.pac)

The format of the 0000.ukn files is as follows:

struct CutDefFileHeader
{
    uint numEntries; // 0x0-0x3
    CutsceneDataEntry entries[numEntries]; // 0x4 - (0x4 + (numEntries * 8))
    // data follows
};

struct CutsceneDataEntry
{
    ushort entryType;
    byte unk1;
    byte unk2;
    ushort fileOffset;
    ushort unk3;
};
  • entryTypes takes only a couple of values. The first 10 entries seem to be special as they use ids 0x100, 0x200 upto 0xa00 that aren't used anywhere else.
  • fileOffset is actually stored as a 20-bit number, and unk3 as 12-bit. The bottom 4 bits of unk3 are the top 4 of the file offset, and need to be shifted out of unk3 to get its true value.

The data pointed at by the reconstituted file offset is a bytecode stream. The code which executes this lives in /(p)exe.dpac/exe/0011.bpe, the exe that displays cutscenes.

Other Stuff

Entrances also use the cutscene bytecode format, and the definition files are situated in the /dent/ent folder. The subfolders contain assets for specific arena entrance nameplates for Wrestlemania, Raw, etc.

The game executables live in /(p)exe.dpac/exe/. These, as well as all others with a BPE extension, are compressed with Yuke's BytePair Encoding. QuickBMS with the Yuke.bmsscript can decompress them.

Their responsibilities are:

  • 0000 - Entrances
  • 0001 - Main Menu
  • 0002 - Season (Menu Parts)
  • 0003 - Create A PPV
  • 0004 - Belt Records
  • 0005 - Rankings
  • 0006 - Title Sequence
  • 0007 - Create A Superstar (Appearance)
  • 0008 - Create a Taunt
  • 0009 - Create a Stable / Manager
  • 0010 - Options Menu
  • 0011 - Season (Cutscenes)
  • 0013 - Create A Superstar (Moves)

Loading screens are compressed TIMs in /LD/Load.

The exe's still has a fair amount of debug spew in them, which can be viewed with pcsx's console output.