BLADE.EXE Blueprint

Here is a partially unrolled loop that illustrates the sub-system initialization and the game loop.
WinMain                   // Application entry point
{
     ...                  // Check if application is already running
     ...                  // Check command line parameters (SITCOM, SHORTY, MST3K)
     sub_410060           // GetModule and parse MAX_MEM command line parameter
     sub_466970           // Registers the window class and create a Window
        sub_466A34        // SetForegroundWindow
        sub_41A7F0        // Initialize DirectDraw 640x480x16

     sub_4101D0           // Find/set Application Path and CD-ROM path
        sub_41031C        // SetCurrentDirectory

     ...                  // Check for save game files "save\\*.sav"
     
     sub_42C8E0           // Initialize sub-systems
     {
           sub_42B0A0( dword_480630 )   // Initialize time structure
           
           sub_438E20( dword_481930 )   // Initialize MIX module
           sub_438F30( "STARTUP.MIX")   // Load "STARTUP.MIX"
           
           sub_42A590( )                // Initialize GAMEINFO.DAT data structure
           sub_429F9C( "GAMEINFO.DAT" ) // Load "GAMEINFO.DAT" from file
           sub_42A5F4()                 // Check OS information
           sub_42A640()                 // Check total and available memory
           
           sub_424590( dword_4804C0 )   // Initialize datetime data structure

           sub_42B1EC( dword_480640 )   // Initialize DirectDraw Surface
           sub_42B1EC( dword_480644 )
           sub_42B1EC( dword_480648 )
           sub_42B1EC( dword_48064C )

           ...                          // Initialize LUT
           
           if( save files are found )
           {
                 sub_45EE60             // Load "10PT.FON" and display "SPLASH.IMG"
           }


           ...                          // Initialize Combat Cover Waypoint data structure [dword_47F8A0]
           ...                          // Initialize Combat Flee Waypoint data structure [dword_47F8A0]
           ...                          // Initialize Global Variables data structure [dword_482CDC]
           
           sub_40DEF0( dword_47F3E0 )   // Initialize AI-ACT%d.DLL data structure
 
           sub_4475C0( dword_48ECC0, timeGetTime( ) ) // Set time
           
           sub_401090( dword_47F098, 1.0 )  // LUT
           sub_401090( dword_47F09C, 4.0 )  // LUT
           sub_401090( dword_47F0A0, 12.0 ) // LUT

           sub_42A9E0( dword_480610 )       // Initialize Game Flag data structure
           sub_42FEC0( dword_4812F0 )       // Initialize World data structure

           sub_410440( dword_488460 )       // Setup DirectSound
           sub_4526E0( dword_48ED00 )       // Sound Effects data structure
           sub_43A4C8( dword_48CB48 )       // Music data structure
           sub_45E0C0( dword_490C60 )       // Speech data structure
           sub_40ED88( dword_487F80 )       // Ambient Sound data structure

           sub_42EB04()                     // Parse BLADE.INI

           sub_438F30( "MUSIC.MIX", 0 )     // Load "MUSIC.MIX"
           sub_438F30( "SFX.MIX", 0 )       // Load "SFX.MIX"
           sub_438F30( "SPCHSFX.TLK", 1 )   // Load "SPCHSFX.MIX"

           ...                              // Initialize Actor data structures
           ...                              // Initialize Player [Actor: McCoy]

           sub_4427B4( dword_48CB90 )       // Initialize Police Maze data structure

           sub_4601D0( dword_483600, "ACTORS" )    // Text Resource ACTORS.TR[E]
           sub_4601D0( dword_483608, "CRIMES" )    // Text Resource CRIMES.TR[E]
           sub_4601D0( dword_483604, "CLUETYPE" )  // Text Resource CLUETYPE.TR[E]
           sub_4601D0( dword_48360C, "KIA" )       // Text Resource KIA.TR[E]
           sub_4601D0( dword_483610, "SPINDEST" )  // Text Resource SPINDEST.TR[E] (Spinner destination)
           sub_4601D0( dword_483614, "VK" )        // Text Resource VK.TR[E] (Voight-Kampff)
           sub_4601D0( dword_483618, "OPTIONS" )   // Text Resource OPTIONS.TR[E]

           sub_41B0E4( dword_4800F4, "DLGMENU" )   // Initialize the dialog menu

           ...                                     // Set/Scene database

           sub_430B80( dword_4816F8 )              // KIA data structure
           sub_45E4D0( dword_48354C )              // Spinner data structure
           sub_41CEA0( dword_480190 )              // Elevator data structure
           sub_449480( dword_482C34 )              // Score data structure

           sub_428C30( dword_4805F0 )              // Font data structure
           ...                                     // Load font "KIA6PT.FON"

           ...                                     // Initialize and load "SHAPES.SHP"

           sub_41DC90( dword_480378 )              // ESPER data structure
           sub_4645D8( dword_4837C0 )              // Voight-Kampff data structure

           sub_454340( dword_4831D4 )                               // DAT data structure
           sub_4117C0( dword_4831D4, "index.dat", dword_490C80 )    // Load "index.dat"
           if( Full HDFrames is 1 )                                 // Load "hdframes.dat"
                 sub_412054( dword_4831D4, "hdframes.dat" )         
           else
                 sub_411D88( dword_4831D4, "hdframes.dat" )
           sub_411F20( dword_4831D4, "coreanim.dat" )               // Load "coreanim.dat"

           sub_414FF0( dword_47F870, "CLUES", gameInfoData->base12 )  // Initialize CLUES data structure

           sub_4515F0( dword_482F78, -1, -1 )       // Initialize Object data structure

           sub_44DA04( "_INIT.DLL" )                // Bind "_INIT.DLL"
           {
                SCRIPT_Initialize_Game()            
                {
                      Assign_Player_Gun_Hit_Sounds( 0, 517, 518, 519 );
                      Assign_Player_Gun_Hit_Sounds( 1, 520, 521, 522 );
                      Assign_Player_Gun_Hit_Sounds( 2, 523, 524, 525 );
                      Assign_Player_Gun_Miss_Sounds( 0, 526, 527, 528 );
                      Assign_Player_Gun_Miss_Sounds( 1, 529, 530, 531 );
                      Assign_Player_Gun_Miss_Sounds( 2, 532, 533, 534 );

                      sub_402DE0( ) // Clear Global variables | set default global variables | set score
                      sub_402ED0( ) // Clear and set Game Flags | Do random query
                      sub_403110( ) // Clear actor clue database
                      sub_4031A0( ) // Set actor clue database
                      sub_4148E0( ) // Set world waypoints
                      sub_410500( ) // Set scene database
                      sub_411374( ) // Set crime database
                      sub_402CF0( ) // Set spinner destinations
                      sub_401E14( ) // Set actor friendliness
                      sub_4012B0( ) // Set actor combat aggressiveness
                      sub_401CAC( ) // Set actor honesty
                      sub_401CC8( ) // Set actor intelligence
                      sub_401DF8( ) // Set actor stability
                      sub_40141C( ) // Set actor health
                      sub_412960( ) // Set combat waypoints
                      sub_4132B8( ) // Set combat flee waypoints
                      sub_402DC0( ) // shadows
                }
           }

           sub_40E020( dword_47F3E0, 1 )    // Bind "AI-ACT%d.DLL"
           sub_42E048()                     // 
           {
                AI_DLL_Initialize(actor_id) // Initialize actor AI
                     AI_DLL_Change_Animation_Mode        
           }
     }

     ...                                 // Check error stack

     if( save files are found )
     {
          sub_431040( dword_4816F8 )     // Load KIA dialog for save games
     }
     else
     {
          sub_449118( 1 )                // Initialize first time
     }

 
     sub_437870( )                       // Game Loop
     {
          sub_4378A4()
          {
               sub_466E4C( )             // Windows Message Pump
               if( game change )
               {
                    sub_42ADE8( dword_48C870 ) // Initialize | Remove looping sounds | load SET DLL
               }

               if( save game )
               {
                    sub_449290( dword_4808F4, 0 )       // Save Game
               }

               sub_45C038( ); // Sound
               if ( KIA active)  
               {
                    sub_431590( dword_4816F8 )          // Process KIA
                    return
               }

               if ( Spinner active)  
               {
                    sub_45EB4C( dword_48354C )          // Process Spinner
                    sub_40F698( dword_487F80 )          // Ambient sound
                    return
               }

               if ( ESPER active)  
               {
                    sub_41E754( dword_480378 )          // Process ESPER 
                    return
               }

               if ( Voight-Kampff active)  
               {
                    sub_461CCC( dword_4837C0 )          // Process Voight-Kampff
                    sub_40F698( dword_487F80 )          // Ambient sound
                    return
               }

               if ( Elevator active )  
               {
                    sub_41D650( dword_480190 )          // Process Elevator 
                    sub_40F698( dword_487F80 )          // Ambient sound
                    return
               }

               if ( Score active )  
               {
                    sub_44975C( dword_482C34 )          // Process Score 
                    sub_40F698( dword_487F80 )          // Ambient sound
                    return
               }

               if( Scene )
               {
                    sub_449EC8( )                       // SCRIPT_Player_Walked_In
               }

               ...                                      // if dialog is not active process actors

               sub_442844( dword_48CB90 )               // Police Maze

               sub_45C038( );                           // Sound
               sub_40F698( dword_487F80 );              // Ambient Sounds

               sub_451F8C( dword_482F78, 0 )            // Scene obstacles

               ...                                      // Process actor animation

               sub_43076C( dword_4812F0 );              // Process World

               ...                                      // if Dialog menu is active process 
          }
     }


     sub_42E0F8( )          // Shutdown sub-systems
     sub_41A994( )          // Shutdown DirectDraw

}