Advertisement
Guest User

When The Blue Chips Are Down

a guest
Nov 22nd, 2015
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. After a few days of experimenting, I decided to just look at the code like a normal person.
  2.  
  3. The mission is split into several states, which are selected with a switch. When a state is completed, it sets itself up to execute the next state and proceed with the execution.
  4.  
  5. When it reaches a certain state, it will trigger a special cutscene, which in itself is composed of several states. This isn't a normal cutscene skippable by normal means, so the programmers had to come up with a way for players to be able to skip the cutscene.
  6.  
  7. if ((l_U1064 < 16) AND (l_U1064 > 3))
  8. {
  9. if (NOT IS_SCREEN_FADING())
  10. {
  11. if (NOT IS_SCREEN_FADED_OUT())
  12. {
  13. if (sub_34009())
  14. {
  15. INCREMENT_INT_STAT( 372, 1 );
  16. l_U906 = 1;
  17. l_U1064 = 16;
  18. }
  19. }
  20. }
  21. }
  22.  
  23. l_U1064 is the variable that handles the cutscene's state. sub_34009 is the method that checks for certain keys pressed. In this case, spacebar (or sprint, dunno if it matters) and left mouse button. l_U906 is a variable better named "has_player_skipped_cutscene"
  24.  
  25. So basically this means "if the cutscene state is higher than 3 and lower than 16, if the screen isn't fading in or out, and it's not fully faded out (which means it must be fully faded in), if the player has skipped the cutscene, go to cutscene state 16"
  26.  
  27. After this code is executed it enters the switch. This would be fine with the exception of one detail.
  28.  
  29. When cutscene state 3 ends, it sets l_U1064 to 4. cutscene state 3 has executed a fadein instruction, which means the cutscene can't be skipped until the fade ends. This fade will be completed in the next state. So the following code will execute
  30.  
  31. case 4:
  32. if (IS_SCREEN_FADED_IN())
  33. {
  34. sub_16164( "E1S3p5_CHP", ref l_U917, 6, 1 );
  35. GET_GAME_TIMER( ref l_U525 );
  36. l_U1064 = 6;
  37. }
  38.  
  39. How cute. It's loading an audio file. This wouldn't be problematic, usually. Let's skip the cutscene then.
  40.  
  41. case 16:
  42. [...]
  43. if (NOT (sub_17379( l_U917 )))
  44. {
  45. GET_GAME_TIMER( ref l_U526 );
  46. l_U527 = l_U526 - l_U525;
  47. if ((l_U906 == 1) || (l_U527 > 10000))
  48. {
  49. DO_SCREEN_FADE_OUT( 3000 );
  50. while (IS_SCREEN_FADING_OUT())
  51. {
  52. WAIT( 0 );
  53. }
  54. STOP_STREAM();
  55. l_U1064 = 15;
  56. }
  57. }
  58.  
  59. And we've finally reached the problem. sub_17379 is a function that checks if a sound file is being played. If there is no sound file loaded in l_U917 isn't being played, it enters the block, checks l_U906 == 1 (which is true since we skipped the cutscene), fades out, and continues to end the mission.
  60.  
  61. However, the sound file was loaded already. Or at least the game was told to load it. And when does it load? Exactly when the fade in ends, which is exactly when we can skip the cutscene.
  62.  
  63. This means that in order to skip the cutscene, you have to press the proper key to skip it as soon as it fades in (frame perfect wink wink), before the dialogue starts playing. So yeah, just spam spacebar(or whatever the fuck) as hard as you can and hope your HDD is smoking a cigarette instead of doing its job to skip this cutscene.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement