Advertisement
Dimitri_UA

prj_sum: gta_sa.exe | 0x70A960 CShadows::RenderStoredShadows

Jun 4th, 2012
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 23.85 KB | None | 0 0
  1. int __cdecl CShadows::RenderStoredShadows()
  2. {
  3.   int numShadows; // ecx@1
  4.   int zero; // ebx@1
  5.   char *v2; // eax@2
  6.   int v3; // edx@2
  7.   int v4; // edi@4
  8.   int shadowOffset; // ebp@5
  9.   char *v6; // esi@6
  10.   float pShadowTexture; // ebx@8
  11.   CRegisteredShadow *pShadow; // edi@11
  12.   float pShadowCenterPosition.y; // edx@11
  13.   long double v10; // fst7@11
  14.   long double Y1; // fst6@11
  15.   int shadowZpos; // eax@11
  16.   long double v13; // fst6@11
  17.   long double SectorL_X; // fst7@11
  18.   long double SectorL_Y; // fst7@14
  19.   long double SectorU_X; // fst7@17
  20.   long double SectorU_Y; // fst7@20
  21.   float _SectorL_Y_int; // ecx@26
  22.   int _CornerL_X; // ebx@27
  23.   float _SectorL_X_int; // eax@28
  24.   int v21; // ecx@31
  25.   bool v22; // ecx@31
  26.   signed int v23; // eax@33
  27.   int streamSector; // eax@35
  28.   int shadowData; // ecx@35
  29.   int sectorNum; // eax@35
  30.   unsigned __int8 v27; // sf@45
  31.   unsigned __int8 v28; // of@45
  32.   int _numIndices; // edx@54
  33.   signed int _numVerts; // ecx@54
  34.   int v31; // ebx@54
  35.   int v32; // edi@54
  36.   unsigned __int64 v33; // qax@54
  37.   long double v34; // fst7@54
  38.   unsigned __int64 v35; // qax@54
  39.   long double v36; // fst7@54
  40.   unsigned __int64 v37; // qax@54
  41.   long double v38; // fst7@54
  42.   long double v39; // fst6@54
  43.   int v40; // ebx@67
  44.   int v41; // edi@67
  45.   long double v42; // fst7@67
  46.   long double v43; // fst6@67
  47.   float v44; // edx@67
  48.   long double v45; // fst4@67
  49.   float v46; // eax@67
  50.   float v47; // ST68_4@67
  51.   long double v48; // fst5@67
  52.   long double v49; // fst4@67
  53.   int v50; // edx@67
  54.   long double v51; // fst7@67
  55.   long double v52; // fst6@67
  56.   float v53; // ecx@67
  57.   int v54; // ST38_4@67
  58.   int v55; // ST34_4@67
  59.   long double v56; // fst7@67
  60.   long double v57; // fst7@67
  61.   long double v58; // fst6@67
  62.   float v59; // ecx@67
  63.   float v60; // edx@67
  64.   long double v61; // fst4@67
  65.   long double v62; // fst5@67
  66.   long double v63; // fst4@67
  67.   long double v64; // fst5@67
  68.   float v65; // ecx@67
  69.   float v66; // eax@67
  70.   int v67; // ST24_4@67
  71.   long double v68; // fst7@67
  72.   int v69; // ST20_4@67
  73.   int v70; // edx@67
  74.   long double v71; // fst7@67
  75.   long double v72; // fst7@67
  76.   long double v73; // fst6@67
  77.   float v74; // eax@67
  78.   long double v75; // fst4@67
  79.   float v76; // ecx@67
  80.   float v77; // ST68_4@67
  81.   long double v78; // fst5@67
  82.   long double v79; // fst4@67
  83.   long double v80; // fst3@67
  84.   long double v81; // fst5@67
  85.   float v82; // eax@67
  86.   int v83; // ST10_4@67
  87.   int v84; // ST0C_4@67
  88.   long double v85; // fst7@67
  89.   long double v86; // fst7@67
  90.   long double v87; // fst6@67
  91.   signed int v88; // edx@67
  92.   float v89; // ecx@67
  93.   long double v90; // fst4@67
  94.   long double v91; // fst5@67
  95.   long double v92; // fst4@67
  96.   unsigned __int64 v93; // qax@67
  97.   long double v94; // fst5@67
  98.   long double v95; // fst7@67
  99.   long double v96; // fst6@67
  100.   long double v97; // fst6@67
  101.   int result; // eax@75
  102.   int v99; // [sp-Ch] [bp-114h]@37
  103.   int v100; // [sp-8h] [bp-110h]@37
  104.   int colorType; // [sp+4h] [bp-104h]@37
  105.   float _SectorL_X; // [sp+1Ch] [bp-ECh]@11
  106.   float _SectorL_Y; // [sp+1Ch] [bp-ECh]@14
  107.   float _SectorU_X; // [sp+1Ch] [bp-ECh]@17
  108.   float _SectorU_Y; // [sp+1Ch] [bp-ECh]@20
  109.   float __SectorL_Y_int_old; // [sp+1Ch] [bp-ECh]@26
  110.   int __SectorL_Y_int_olde; // [sp+1Ch] [bp-ECh]@56
  111.   int CornerU_X; // [sp+20h] [bp-E8h]@11
  112.   int CornerU_Y; // [sp+24h] [bp-E4h]@11
  113.   signed int CornerU_Ya; // [sp+24h] [bp-E4h]@55
  114.   char buf; // [sp+2Bh] [bp-DDh]@36
  115.   int temp_CornerL_X; // [sp+2Ch] [bp-DCh]@11
  116.   int CornerL_Y; // [sp+30h] [bp-D8h]@11
  117.   float v114; // [sp+34h] [bp-D4h]@67
  118.   float SectorL; // [sp+38h] [bp-D0h]@15
  119.   float SectorU_Y_int; // [sp+3Ch] [bp-CCh]@21
  120.   float v117; // [sp+40h] [bp-C8h]@8
  121.   float SectorU_X_int; // [sp+44h] [bp-C4h]@18
  122.   int v119; // [sp+48h] [bp-C0h]@67
  123.   float v120; // [sp+4Ch] [bp-BCh]@7
  124.   float v121; // [sp+50h] [bp-B8h]@52
  125.   int v122; // [sp+54h] [bp-B4h]@52
  126.   float SectorL_X_int; // [sp+58h] [bp-B0h]@12
  127.   int v124; // [sp+5Ch] [bp-ACh]@52
  128.   float shadowCenterPosition.x; // [sp+60h] [bp-A8h]@11
  129.   float pShadowYpos; // [sp+64h] [bp-A4h]@11
  130.   int _shadowZpos; // [sp+68h] [bp-A0h]@11
  131.   int v128; // [sp+6Ch] [bp-9Ch]@4
  132.   float v129; // [sp+70h] [bp-98h]@67
  133.   float v130; // [sp+74h] [bp-94h]@67
  134.   float v131; // [sp+78h] [bp-90h]@67
  135.   float v132; // [sp+7Ch] [bp-8Ch]@67
  136.   float v133; // [sp+80h] [bp-88h]@67
  137.   float v134; // [sp+84h] [bp-84h]@67
  138.   float v135; // [sp+88h] [bp-80h]@54
  139.   float v136; // [sp+8Ch] [bp-7Ch]@67
  140.   float v137; // [sp+90h] [bp-78h]@67
  141.   float v138; // [sp+94h] [bp-74h]@67
  142.   int v139; // [sp+98h] [bp-70h]@54
  143.   float v140; // [sp+9Ch] [bp-6Ch]@67
  144.   float v141; // [sp+A0h] [bp-68h]@67
  145.   float v142; // [sp+A4h] [bp-64h]@67
  146.   float v143; // [sp+A8h] [bp-60h]@67
  147.   float v144; // [sp+ACh] [bp-5Ch]@67
  148.   float v145; // [sp+B4h] [bp-54h]@67
  149.   float v146; // [sp+B8h] [bp-50h]@67
  150.   float v147; // [sp+C0h] [bp-48h]@67
  151.   float v148; // [sp+C4h] [bp-44h]@67
  152.   float v149; // [sp+CCh] [bp-3Ch]@67
  153.   float v150; // [sp+D0h] [bp-38h]@67
  154.   float v151; // [sp+D8h] [bp-30h]@67
  155.   float v152; // [sp+E4h] [bp-24h]@67
  156.   float v153; // [sp+F0h] [bp-18h]@67
  157.   float v154; // [sp+FCh] [bp-Ch]@67
  158.  
  159.   zero = 0;
  160.   numIndices = 0;
  161.   numVerts = 0;
  162.   (*(RwEngineInstance + 0x20))(rwRENDERSTATEZWRITEENABLE, rwRENDERSTATENARENDERSTATE);
  163.   (*(RwEngineInstance + 0x20))(rwRENDERSTATEZTESTENABLE, 1);
  164.   (*(RwEngineInstance + 0x20))(rwRENDERSTATEVERTEXALPHAENABLE, 1);
  165.   (*(RwEngineInstance + 0x20))(rwRENDERSTATEFOGENABLE, 0);
  166.   (*(RwEngineInstance + 0x20))(rwRENDERSTATETEXTUREADDRESS, 3);
  167.   (*(RwEngineInstance + 0x20))(rwRENDERSTATECULLMODE, 1);
  168.   (*(RwEngineInstance + 0x20))(rwRENDERSTATEALPHATESTFUNCTIONREF, 0);
  169.   (*(RwEngineInstance + 0x20))(rwRENDERSTATETEXTUREFILTER, 2);
  170.   numShadows = createdShadowsInFrame;
  171.   if ( createdShadowsInFrame > 0 )
  172.   {
  173.     v2 = &aShadows[50];
  174.     v3 = createdShadowsInFrame;
  175.     do
  176.     {
  177.       *v2 &= 0xFDu;
  178.       v2 += 52;                                 // sizeof(CRegisteredShadow)
  179.       --v3;
  180.     }
  181.     while ( v3 );
  182.   }
  183.   v4 = 0;
  184.   v128 = 0;
  185.   if ( numShadows > 0 )
  186.   {
  187.     shadowOffset = 0;
  188.     do
  189.     {
  190.       v6 = &aShadows[shadowOffset + 36];
  191.       if ( !(aShadows[shadowOffset + 50] & 2) )
  192.       {
  193.         CShadows::setBlending(v6[10]);
  194.         (*(RwEngineInstance + 32))(1, **v6);
  195.         LODWORD(v120) = v4;
  196.         if ( v4 < createdShadowsInFrame )
  197.         {
  198.           LODWORD(pShadowTexture) = &aShadows[shadowOffset + 36];
  199.           LODWORD(v117) = &aShadows[shadowOffset + 36];
  200.           do
  201.           {
  202.             if ( v6[10] == *(LODWORD(pShadowTexture) + 10) && *v6 == *LODWORD(pShadowTexture) )
  203.             {
  204.               pShadow = (LODWORD(pShadowTexture) - 36);
  205.               LODWORD(pShadowCenterPosition.y) = *(LODWORD(pShadowTexture) - 36 + 4);
  206.               v10 = fabs(*(LODWORD(pShadowTexture) - 16)) + fabs(*(LODWORD(pShadowTexture) - 24));
  207.               Y1 = *(LODWORD(pShadowTexture) - 12);
  208.               LODWORD(shadowCenterPosition.x) = *(LODWORD(pShadowTexture) - 36);
  209.               shadowZpos = *(LODWORD(pShadowTexture) - 36 + 8);
  210.               v13 = fabs(Y1) + fabs(*(LODWORD(pShadowTexture) - 20));
  211.               pShadowYpos = pShadowCenterPosition.y;
  212.               _shadowZpos = shadowZpos;
  213.               *&temp_CornerL_X = shadowCenterPosition.x - v10;// Переменная позже используется для других целей
  214.               *&CornerU_X = shadowCenterPosition.x + v10;
  215.               *&CornerL_Y = pShadowCenterPosition.y - v13;
  216.               *&CornerU_Y = pShadowCenterPosition.y + v13;
  217.               SectorL_X = *&temp_CornerL_X * 0.02 + 60.0;// Макс. размер карты в СА - (-3000.0 ; 3000.0)
  218.               _SectorL_X = SectorL_X;           // Таким образом, мы получаем сначала коодинаты в районе (-60.0 ; 60.0),
  219.               if ( floor(SectorL_X) <= 0 )      // а после прибавления 60.0 - (0.0 ; 120.0)
  220.                 LODWORD(SectorL_X_int) = 0;
  221.               else
  222.                 LODWORD(SectorL_X_int) = floor(_SectorL_X);
  223.               SectorL_Y = *&CornerL_Y * 0.02 + 60.0;// :5 +60.0
  224.               _SectorL_Y = SectorL_Y;
  225.               if ( floor(SectorL_Y) <= 0 )
  226.                 SectorL = 0.0;
  227.               else
  228.                 LODWORD(SectorL) = floor(_SectorL_Y);
  229.               SectorU_X = *&CornerU_X * 0.02 + 60.0;
  230.               _SectorU_X = SectorU_X;
  231.               if ( floor(SectorU_X) >= 119 )
  232.                 LODWORD(SectorU_X_int) = 119;
  233.               else
  234.                 LODWORD(SectorU_X_int) = floor(_SectorU_X);
  235.               SectorU_Y = *&CornerU_Y * 0.02 + 60.0;
  236.               _SectorU_Y = SectorU_Y;
  237.               if ( floor(SectorU_Y) >= 119 )
  238.                 LODWORD(SectorU_Y_int) = 119;
  239.               else
  240.                 LODWORD(SectorU_Y_int) = floor(_SectorU_Y);
  241.               if ( ms_nCurrentScanCode >= 65535u )
  242.               {
  243.                 CWorld::ClearScanCodes();
  244.                 LOWORD(ms_nCurrentScanCode) = 1;
  245.               }
  246.               else
  247.               {
  248.                 LOWORD(ms_nCurrentScanCode) = ms_nCurrentScanCode + 1;
  249.               }
  250.               _SectorL_Y_int = SectorL;
  251.               __SectorL_Y_int_old = SectorL;
  252.               if ( SLODWORD(SectorL) <= SLODWORD(SectorU_Y_int) )
  253.               {
  254.                 _CornerL_X = temp_CornerL_X;
  255.                 do
  256.                 {
  257.                   _SectorL_X_int = SectorL_X_int;
  258.                   SectorL = SectorL_X_int;
  259.                   if ( SLODWORD(SectorL_X_int) <= SLODWORD(SectorU_X_int) )
  260.                   {
  261.                     temp_CornerL_X = LODWORD(_SectorL_Y_int) & ((SLODWORD(_SectorL_Y_int) <= 0) - 1);
  262.                     while ( 1 )
  263.                     {
  264.                       v22 = SLODWORD(_SectorL_X_int) < 0;
  265.                       LOBYTE(v22) = SLODWORD(_SectorL_X_int) <= 0;
  266.                       v21 = LODWORD(_SectorL_X_int) & (v22 - 1);
  267.                       if ( v21 >= 119 )
  268.                         v21 = 119;
  269.                       v23 = temp_CornerL_X;
  270.                       if ( temp_CornerL_X >= 119 )
  271.                         v23 = 119;
  272.                       sectorNum = v21 + 120 * v23;
  273.                       shadowData = pShadow->shadowData;
  274.                       streamSector = 8 * sectorNum + 0xB7D0B8;
  275.                       if ( shadowData )
  276.                       {
  277.                         CShadows__CastPedShadowSectorList(
  278.                           streamSector,
  279.                           *&_CornerL_X,
  280.                           *&CornerL_Y,
  281.                           *&CornerU_X,
  282.                           *&CornerU_Y,
  283.                           &shadowCenterPosition.x,
  284.                           *&pShadow->X1,
  285.                           *&pShadow->Y1,
  286.                           pShadow->X2,
  287.                           pShadow->Y2,
  288.                           pShadow->intensity,
  289.                           pShadow->rChannel,
  290.                           pShadow->gChannel,
  291.                           pShadow->bChannel,
  292.                           pShadow->zDistance,
  293.                           pShadow->field_20,
  294.                           0,
  295.                           shadowData,
  296.                           &buf);
  297.                       }
  298.                       else
  299.                       {
  300.                         colorType = v6[10];
  301.                         v100 = pShadow->field_20;
  302.                         v99 = pShadow->zDistance;
  303.                         if ( pShadow->flags & 4 )
  304.                           CShadows::CastShadowSectorList1(
  305.                             streamSector,
  306.                             _CornerL_X,
  307.                             CornerL_Y,
  308.                             CornerU_X,
  309.                             CornerU_Y,
  310.                             &shadowCenterPosition.x,
  311.                             *&pShadow->X1,
  312.                             *&pShadow->Y1,
  313.                             *&pShadow->X2,
  314.                             *&pShadow->Y2,
  315.                             pShadow->intensity,
  316.                             pShadow->rChannel,
  317.                             pShadow->gChannel,
  318.                             pShadow->bChannel,
  319.                             *&v99,
  320.                             *&v100,
  321.                             0,
  322.                             &buf,
  323.                             colorType);
  324.                         else
  325.                           CShadows::CastShadowSectorList(
  326.                             streamSector,
  327.                             _CornerL_X,
  328.                             CornerL_Y,
  329.                             CornerU_X,
  330.                             CornerU_Y,
  331.                             &shadowCenterPosition.x,
  332.                             *&pShadow->X1,
  333.                             *&pShadow->Y1,
  334.                             *&pShadow->X2,
  335.                             *&pShadow->Y2,
  336.                             pShadow->intensity,
  337.                             pShadow->rChannel,
  338.                             pShadow->gChannel,
  339.                             pShadow->bChannel,
  340.                             *&v99,
  341.                             *&v100,
  342.                             0,
  343.                             &buf,
  344.                             colorType);
  345.                       }
  346.                       ++LODWORD(SectorL);
  347.                       if ( SLODWORD(SectorL) > SLODWORD(SectorU_X_int) )
  348.                         break;
  349.                       _SectorL_X_int = SectorL;
  350.                     }
  351.                     _SectorL_Y_int = __SectorL_Y_int_old;
  352.                   }
  353.                   ++LODWORD(_SectorL_Y_int);
  354.                   __SectorL_Y_int_old = _SectorL_Y_int;
  355.                 }
  356.                 while ( SLODWORD(_SectorL_Y_int) <= SLODWORD(SectorU_Y_int) );
  357.                 pShadowTexture = v117;
  358.               }
  359.               *(LODWORD(pShadowTexture) + 14) |= 2u;
  360.             }
  361.             LODWORD(pShadowTexture) += 52;
  362.             v28 = __OFSUB__(LODWORD(v120) + 1, createdShadowsInFrame);
  363.             v27 = LODWORD(v120)++ + 1 - createdShadowsInFrame < 0;
  364.             v117 = pShadowTexture;
  365.           }
  366.           while ( v27 ^ v28 );
  367.           zero = 0;
  368.         }
  369.         if ( numVerts != zero && RwIm3DTransform(&pVerts, numVerts, zero, 1u) )
  370.         {
  371.           RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, indices, numIndices);
  372.           RwIm3DEnd();
  373.         }
  374.         numIndices = zero;
  375.         numVerts = zero;
  376.       }
  377.       if ( v6[14] & 1
  378.         && sub_6E8580(shadowCenterPosition.x, pShadowYpos, _shadowZpos, &v121, &v124, &v122)
  379.         && v121 < *(v6 - 7) )
  380.       {
  381.         v117 = fabs(*(v6 - 4)) + fabs(*(v6 - 6));
  382.         v120 = fabs(*(v6 - 3)) + fabs(*(v6 - 5));
  383.         v32 = 2 * floor((*(v6 - 9) - v117) * 0.5);
  384.         v33 = floor((*(v6 - 8) - v120) * 0.5);
  385.         v34 = v117 + *(v6 - 9);
  386.         LODWORD(SectorL_X_int) = 2 * v33;
  387.         v35 = ceil(v34 * 0.5);
  388.         v36 = v120 + *(v6 - 8);
  389.         v31 = 2 * v35;
  390.         v139 = 2 * v35;
  391.         v37 = ceil(v36 * 0.5);
  392.         v38 = *(v6 - 5);
  393.         v39 = *(v6 - 6);
  394.         LODWORD(v117) = 2 * v37;
  395.         v135 = v38 * v38 + v39 * v39;
  396.         v120 = *(v6 - 3) * *(v6 - 3) + *(v6 - 4) * *(v6 - 4);
  397.         _numIndices = 0;
  398.         _numVerts = 0;
  399.         numIndices = 0;
  400.         numVerts = 0;
  401.         CornerL_Y = v32;
  402.         if ( v32 <= v31 )
  403.         {
  404.           do
  405.           {
  406.             CornerU_Ya = LODWORD(SectorL_X_int);
  407.             if ( SLODWORD(SectorL_X_int) <= SLODWORD(v117) )
  408.             {
  409.               __SectorL_Y_int_olde = CornerL_Y + 2;
  410.               *&temp_CornerL_X = CornerL_Y;
  411.               SectorU_X_int = 1.0 / v120;
  412.               SectorL = 1.0 / v135;
  413.               SectorU_Y_int = (CornerL_Y + 2);
  414.               do
  415.               {
  416.                 if ( _numIndices + 6 >= 0x1000u )
  417.                 {
  418.                   if ( _numVerts && RwIm3DTransform(&pVerts, _numVerts, 0, 1u) )
  419.                   {
  420.                     RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, indices, numIndices);
  421.                     RwIm3DEnd();
  422.                   }
  423.                   _numIndices = 0;
  424.                   _numVerts = 0;
  425.                   numIndices = 0;
  426.                   numVerts = 0;
  427.                 }
  428.                 if ( _numVerts + 4 >= 0x800u )
  429.                 {
  430.                   if ( _numVerts && RwIm3DTransform(&pVerts, _numVerts, 0, 1u) )
  431.                   {
  432.                     RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, indices, numIndices);
  433.                     RwIm3DEnd();
  434.                   }
  435.                   _numIndices = 0;
  436.                   _numVerts = 0;
  437.                   numIndices = 0;
  438.                   numVerts = 0;
  439.                 }
  440.                 v40 = 2 * _numIndices + 0xC4B958;
  441.                 v114 = v121;
  442.                 v41 = 36 * _numVerts + 0xC4D958;
  443.                 dword_C40410 = 6;
  444.                 dword_C40414 = 4;
  445.                 sub_6E8550(CornerL_Y, CornerU_Ya, &v114, v124, v122);
  446.                 v42 = *(v6 - 4);
  447.                 v43 = *(v6 - 3);
  448.                 LODWORD(v44) = *(v6 - 6);
  449.                 v45 = CornerU_Ya;
  450.                 LODWORD(v46) = *(v6 - 5);
  451.                 v119 = *&aShadows[shadowOffset + 44];
  452.                 v143 = v44;
  453.                 v47 = v45;
  454.                 v144 = v46;
  455.                 v151 = *&temp_CornerL_X - *(v6 - 9);
  456.                 v48 = v45 - *(v6 - 8);
  457.                 v49 = -*(v6 - 7);
  458.                 v129 = *&temp_CornerL_X - *(v6 - 9);
  459.                 v130 = v47 - *(v6 - 8);
  460.                 v131 = -*(v6 - 7);
  461.                 BYTE3(v44) = 0;
  462.                 *(&v44 + 1) = (v119 * 0.60000002);
  463.                 LOBYTE(v44) = aShadows[shadowOffset + 47];
  464.                 v50 = aShadows[shadowOffset + 49] | ((aShadows[shadowOffset + 48] | (LODWORD(v44) << 8)) << 8);
  465.                 *(v41 + 28) = ((v48 * v43 + v151 * v42 + v49 * 0.0) * SectorU_X_int + 1.0) * 0.5;
  466.                 *(v41 + 24) = v50;
  467.                 v51 = v130 * v144 + v129 * v143;
  468.                 v52 = v131 * 0.0;
  469.                 v53 = v121;
  470.                 *v41 = temp_CornerL_X;
  471.                 v54 = v122;
  472.                 *(v41 + 4) = LODWORD(v47);
  473.                 v55 = v124;
  474.                 *(v41 + 32) = 0.5 - (v51 + v52) * SectorL * 0.5;
  475.                 v56 = v114;
  476.                 v114 = v53;
  477.                 *(v41 + 8) = v56 + 0.059999999;
  478.                 sub_6E8550(__SectorL_Y_int_olde, CornerU_Ya, &v114, v55, v54);
  479.                 v57 = *(v6 - 4);
  480.                 v58 = *(v6 - 3);
  481.                 LODWORD(v59) = *(v6 - 6);
  482.                 LODWORD(v60) = *(v6 - 5);
  483.                 v61 = SectorU_Y_int - *(v6 - 9);
  484.                 v119 = *&aShadows[shadowOffset + 44];
  485.                 v147 = v59;
  486.                 v148 = v60;
  487.                 v153 = v61;
  488.                 v62 = v47 - *(v6 - 8);
  489.                 v63 = -*(v6 - 7);
  490.                 v132 = SectorU_Y_int - *(v6 - 9);
  491.                 v133 = v47 - *(v6 - 8);
  492.                 v134 = -*(v6 - 7);
  493.                 BYTE3(v59) = 0;
  494.                 *(&v59 + 1) = (v119 * 0.60000002);
  495.                 LOBYTE(v59) = aShadows[shadowOffset + 47];
  496.                 v64 = (v153 * v57 + v62 * v58 + v63 * 0.0) * SectorU_X_int + 1.0;
  497.                 *(v41 + 60) = aShadows[shadowOffset + 49] | ((aShadows[shadowOffset + 48] | (LODWORD(v59) << 8)) << 8);
  498.                 v65 = SectorU_Y_int;
  499.                 v66 = v121;
  500.                 *(v41 + 64) = v64 * 0.5;
  501.                 *(v41 + 36) = LODWORD(v65);
  502.                 v67 = v122;
  503.                 v68 = v132;
  504.                 *(v41 + 40) = LODWORD(v47);
  505.                 v69 = v124;
  506.                 v70 = CornerL_Y;
  507.                 *(v41 + 68) = 0.5 - (v68 * v147 + v133 * v148 + v134 * 0.0) * SectorL * 0.5;
  508.                 v71 = v114;
  509.                 v114 = v66;
  510.                 *(v41 + 44) = v71 + 0.059999999;
  511.                 CornerU_Ya += 2;
  512.                 sub_6E8550(v70, CornerU_Ya, &v114, v69, v67);
  513.                 v72 = *(v6 - 4);
  514.                 v73 = *(v6 - 3);
  515.                 LODWORD(v74) = *(v6 - 6);
  516.                 v75 = CornerU_Ya;
  517.                 LODWORD(v76) = *(v6 - 5);
  518.                 v119 = *&aShadows[shadowOffset + 44];
  519.                 v145 = v74;
  520.                 v77 = v75;
  521.                 v146 = v76;
  522.                 v152 = *&temp_CornerL_X - *(v6 - 9);
  523.                 v78 = v75 - *(v6 - 8);
  524.                 v79 = -*(v6 - 7);
  525.                 v136 = *&temp_CornerL_X - *(v6 - 9);
  526.                 v137 = v77 - *(v6 - 8);
  527.                 v138 = -*(v6 - 7);
  528.                 BYTE3(v76) = 0;
  529.                 *(&v76 + 1) = (v119 * 0.60000002);
  530.                 LOBYTE(v76) = aShadows[shadowOffset + 47];
  531.                 v80 = v78;
  532.                 v81 = v152 * v72;
  533.                 v82 = v121;
  534.                 *(v41 + 96) = aShadows[shadowOffset + 49] | ((aShadows[shadowOffset + 48] | (LODWORD(v76) << 8)) << 8);
  535.                 *(v41 + 72) = temp_CornerL_X;
  536.                 v83 = v122;
  537.                 *(v41 + 76) = LODWORD(v77);
  538.                 v84 = v124;
  539.                 *(v41 + 100) = ((v81 + v80 * v73 + v79 * 0.0) * SectorU_X_int + 1.0) * 0.5;
  540.                 *(v41 + 104) = 0.5 - (v136 * v145 + v137 * v146 + v138 * 0.0) * SectorL * 0.5;
  541.                 v85 = v114;
  542.                 v114 = v82;
  543.                 *(v41 + 80) = v85 + 0.059999999;
  544.                 sub_6E8550(__SectorL_Y_int_olde, CornerU_Ya, &v114, v84, v83);
  545.                 v86 = *(v6 - 4);
  546.                 v87 = *(v6 - 3);
  547.                 v88 = *&aShadows[shadowOffset + 44];
  548.                 LODWORD(v89) = *(v6 - 5);
  549.                 v90 = SectorU_Y_int - *(v6 - 9);
  550.                 LODWORD(v149) = *(v6 - 6);
  551.                 v150 = v89;
  552.                 v154 = v90;
  553.                 v119 = v88;
  554.                 v91 = v77 - *(v6 - 8);
  555.                 v92 = -*(v6 - 7);
  556.                 v140 = SectorU_Y_int - *(v6 - 9);
  557.                 v141 = v77 - *(v6 - 8);
  558.                 v142 = -*(v6 - 7);
  559.                 v93 = (v88 * 0.60000002);
  560.                 HIDWORD(v93) = aShadows[shadowOffset + 48];
  561.                 HIWORD(v89) = 0;
  562.                 BYTE1(v89) = v93;
  563.                 LODWORD(v93) = aShadows[shadowOffset + 49];
  564.                 v94 = v154 * v86 + v91 * v87;
  565.                 *v40 = 0;
  566.                 *(v40 + 8) = 3;
  567.                 LOBYTE(v89) = aShadows[shadowOffset + 47];
  568.                 *(v41 + 136) = ((v94 + v92 * 0.0) * SectorU_X_int + 1.0) * 0.5;
  569.                 *(v41 + 132) = v93 | ((HIDWORD(v93) | (LODWORD(v89) << 8)) << 8);
  570.                 *(v41 + 108) = LODWORD(SectorU_Y_int);
  571.                 v95 = v140 * v149;
  572.                 v96 = v141;
  573.                 *(v41 + 112) = LODWORD(v77);
  574.                 v97 = v96 * v150;
  575.                 *(v40 + 2) = 1;
  576.                 *(v40 + 4) = 2;
  577.                 *(v40 + 6) = 1;
  578.                 *(v40 + 10) = 2;
  579.                 *(v41 + 140) = 0.5 - (v95 + v97 + v142 * 0.0) * SectorL * 0.5;
  580.                 *(v41 + 116) = v114 + 0.059999999;
  581.                 sub_7077A0();
  582.                 _numIndices = numIndices;
  583.                 _numVerts = numVerts;
  584.               }
  585.               while ( CornerU_Ya <= SLODWORD(v117) );
  586.               v31 = v139;
  587.             }
  588.             CornerL_Y += 2;
  589.           }
  590.           while ( CornerL_Y <= v31 );
  591.           if ( _numVerts && RwIm3DTransform(&pVerts, _numVerts, 0, 1u) )
  592.           {
  593.             RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, indices, numIndices);
  594.             RwIm3DEnd();
  595.           }
  596.         }
  597.         numIndices = 0;
  598.         numVerts = 0;
  599.         zero = 0;
  600.       }
  601.       v4 = v128 + 1;
  602.       shadowOffset += 0x34u;
  603.       ++v128;
  604.     }
  605.     while ( v128 < createdShadowsInFrame );
  606.   }
  607.   (*(RwEngineInstance + 0x20))(rwRENDERSTATEVERTEXALPHAENABLE, zero);
  608.   (*(RwEngineInstance + 0x20))(rwRENDERSTATEZWRITEENABLE, 1);
  609.   (*(RwEngineInstance + 0x20))(rwRENDERSTATEZTESTENABLE, 1);
  610.   (*(RwEngineInstance + 0x20))(rwRENDERSTATETEXTUREADDRESS, 1);
  611.   result = (*(RwEngineInstance + 0x20))(rwRENDERSTATECULLMODE, 2);
  612.   createdShadowsInFrame = zero;
  613.   return result;
  614. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement