MINI DOOM  C++    5     
 


   MINI DOOM.  C++      ,     .              , ThreadSanitizer   ,  .  -   ,     PSX-Doom, ,    .     ,    ,     ,   .      : CMake, , -, clang-tidy, Debug  Release.     Doom  ,   .      GitHub. 18+.





 

MINI DOOM  C++    5     





 



    MINI DOOM.  C++  .        :   Z-,   ,  ,   ,  ,   ,      .

  : , ,     ,       .  ,      ,   .  12   ,    .




 


  1.      18:  C++  ,       .

  2.      913:   Windows, ,  ,   , .

  3.     1419: , , ,   , .

  4.  -    2025: , , ,  , .

  5. ,       2629: , , , CMake  .

     GitHub: https://github.com/RushSex/MiniDoom.  examples/chNN   ,    examples/ch29/doom.   README      Visual Studio 2026.      ,       ,       .




 V. ,    



  ,      : , , , , .            :  ,    .      ,  ,        .

     ,     .    ,    . :   , ,  .   ,  ,     .  , ,       : CMake, , ,  .




 26.   



  Doom  .  :    ,   ,      .  :  ,    ,   .       ,     .

    ,         ,      , ,     ,         .            .




   


     .    -,   ,    .     :         - .      (sample  ),        .








 26.1     :     



     22 050      ,    Doom (11 025),   ,  - (44 100).     float  ?1  1,      16-   ?32 768  32 767.   26.1  :     ,   .           ,   ,    22 050     11 .       .




 


 ,    ,     ,    .          ,   0  1.    ,  .   ,        26.1.








 26.1  , ,       



  ,  ,  .    ?1  1      , ,  :    .  ( )   +1  ?1     , 8-.          (440 )  16- :         ,     22 050 / 440 ? 50 .

   :     .        .        , , , 800   ,     ,   :     .   sample and hold,       .       26.2.








 26.2     .     




  


     .     :     ,    .          ,     .   :    ()     ,  26.3.








 26.3  :      



     .   ,     .       26.2,  5768:  y        a.     :   -      (  ),        ( ).     cutoff,   a    :   ,  - .








 26.2      



   .      :   (,    , ), ,     ,  26.3.         from  to:        ,      .








 26.3     



      , constexpr-    SoundId.   ,  26.4.     :  , , .








 26.4  : , , , 



 12  using enum Shape  C++20:      Noise  Shape::Noise.       .

    26.5.      ,    freq / kSampleRate (     )       .  ,   :      0,8,         ,   .








 26.5     








 26.5 ()     



 104106.     ,   : from  (to / from)^u.    ,   : 110 ? 220   220 ? 440     , .          ,     .

 107111.     1,  :   ,  ,    .    sample and hold.

 93.       ,   ,     ,        .      ,      22.

,  .       WAV-   26.6.      ,   ch26/wav:   .








 26.6         WAV








 26.4     WAV-: ,  , 



  26.4    :    ,     ,      .     :      ,       .














     :  ,  ,  ,  .   ,           .   :          . ,   ,  ,  26.7.








 26.7  :    



     (Voice):      ,     . play  , mix     :        ,   ,    .      std::erase_if.    16:   ,   . Doom         8 .

 26  .     0,8    1,6,  16-     32 767.    std::clamp     26.2,    .  clamp    :   ,     .

 :   ,   ? Game                  ,     12.     :  ,  0,75   26.8.








 26.8     :  ,  



        16 .  , , ,      sound. openDoor  ,     ,   ,    ,    .

         takeSounds:








 26.9      



std::exchange(sounds_, {})     :   sounds_     ,    .     .      .

,  26.10,     25                .    :  .








 26.10     



 t 0.02       .     :   0,80,  0,75,       0,38.

 t 0.33     , ,   .

 t 0.50    ( 30)  1,00,   .   monster_pain:   .

 t 0.73  0.87   :            .

 still playing: 1          .




 


    : 22 050   ,  .          .      :   ,   , Windows  .      ,    ,    .   (thread).

          :       .      ,        ,    .  C++20    : std::jthread t().  j   join:   jthread ,  ,    .  std::thread      .

 ,          .   ,  26.11:          .








 26.11   ,  



  2 000 000.    ,       .   ,  ++counter     ,  :    ,  ,  .         ,      ,    ,  26.5.








 26.5   :     ,     



    (data race):       ,     .   C++     ,     . ,   ,    . ,     ,    :     .

     .           .   ,    ,  : ThreadSanitizer.          ,  26.12.








 26.12  ThreadSanitizer  



         ,    .      :    ,   ,   .    :  T2  counter   16,   T1      11,      .  ,    26.5.

   (mutex,  mutual exclusion   ).     :   ,    ,    .  C++    std::scoped_lock:   ,  .  RAII   7    ,     .  26.13.








 26.13      








 ,    mutex_      play,  mix,   playing,     . play   , mix   ,      .      26.6.








 26.6       



 ,    :      update,  .     ,      .         ,      .




waveOut:   


     Windows.  ,       waveOut,  Windows 3.1.   :      ,          WHDR_DONE  .    ,       ,  26.7:  ,    ,   .








 26.7     :      



   26.14.    ,    Windows;    Linux   ,   main_win32.cpp.








 26.14   : waveOut   








 26.14 ()   : waveOut   



 1416.       : thread_  ,   run.  std::stop_token   jthread:    ,    .  jthread   request_stop,   ,  run .     .

 2833. waveOutOpen        done  ,   .     (   ,   ),  :   ,   .

 4553   .   :          .  ,  Windows   ,    20 ,     .

 5459.     : waveOutReset     ,      .     run,  ,  Windows    ,      .








 main_win32.cpp   ,  26.15:  , ,        update.








 26.15     








 26.16    



   main      : audio   mixer,  mixer   bank.     :   ,   ,    .  ,    ,    - .











 


    : 22 050     ?1  1,    16- .

  : , , , ;     ,    .

       ;    constexpr-, using enum  .

       std::clamp.    ; std::exchange   .

     : std::jthread   , std::stop_token   .

        ; std::scoped_lock    .   ThreadSanitizer.

 waveOut:    .       .







 26.1. ?  26.17.








 26.17    ?



 26.2. .   std::clamp    ,  26.18.  1,5  ,     -  , 32 767.   ?








 26.18   +  =   ?



 26.3. .   :        . :       atan2,  waveOut   .

 26.4..  Mixer::playing    .   ?     ?







 26.1.  . std::clamp   ,    .    std::tanh(sum):      ,      1.      .

 26.2.  .        ,   ,    . :    bob_   22   .

 26.3.    .      ,    monster_pain  . ,         :      .




 27. HUD  



       -:       ,     ,     .    ,   ,      .    ,        .

 :  -  ,   Doom,    ,    .    ,  App.       PlayStation- Doom, ,   .    ,     ,     .




  .


   .

   ,     (https://www.litres.ru/book/aleksey-primak/mini-doom-sovremennyi-c-cherez-igru-tom-5-shum-svet-i-final-74670708/)  .

      Visa, MasterCard, Maestro,    ,   ,     ,  PayPal, WebMoney, ., QIWI ,       .


