fastman92

SCMlimits.cpp

Feb 22nd, 2015
247
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "SCMlimits.h"
  2. #include "LimitAdjuster.h"
  3.  
  4. namespace Game_GTASA
  5. {
  6.     unsigned int SCMlimits::iMAINsegmentSize = 200000; 
  7.     unsigned int SCMlimits::iMissionSize = 69000;
  8.     unsigned __int8* SCMlimits::CTheScripts__ScriptSpace = (unsigned __int8*)0xA49960;
  9.  
  10.     // Returns script space size
  11.     unsigned int SCMlimits::GetScriptSpaceSize()
  12.     {
  13.         return SCMlimits::iMAINsegmentSize + SCMlimits::iMissionSize;
  14.     }
  15.  
  16.     // Sets max size of main.scm
  17.     void SCMlimits::SetMaxMAINsegmentSize(int maxMAINsegmentSize)
  18.     {
  19.         SCMlimits::iMAINsegmentSize = maxMAINsegmentSize;
  20.     }
  21.  
  22.     // Sets max size of mission
  23.     void SCMlimits::SetMaxMissionSize(int iMaxMissionSize)
  24.     {
  25.         SCMlimits::iMissionSize = iMaxMissionSize;
  26.     }
  27.  
  28.     // Patches script space limits, should be executed when limits are set.
  29.     void SCMlimits::PatchScriptLimits()
  30.     {
  31.         // CPatch::EnableDebugMode();
  32.  
  33.         if(CPatch::IsDebugModeActive())
  34.         {
  35.             SCMlimits::iMAINsegmentSize = 200000;
  36.             SCMlimits::iMissionSize = 69000;
  37.         }
  38.         else
  39.         {
  40.             if(SCMlimits::iMAINsegmentSize == 200000
  41.                 && SCMlimits::iMissionSize == 69000)
  42.                 return;
  43.         }
  44.  
  45.         // See if sizes are multiplies of 4
  46.         if (SCMlimits::iMAINsegmentSize % 4 != 0 || SCMlimits::iMissionSize % 4 != 0)
  47.         {          
  48.             printf_MessageBox(
  49.                 "'Max size of MAIN segment' and 'Max mission size' have to be multiplies of 4\n"
  50.                 "Given values:\n"
  51.                 "SCMlimits::iMAINsegmentSize = %d\n"
  52.                 "SCMlimits::iMissionSize = %d",
  53.  
  54.                 SCMlimits::iMAINsegmentSize,
  55.                 SCMlimits::iMissionSize
  56.  
  57.                 );
  58.            
  59.             pLimitAdjuster -> TerminateProcess();
  60.         }
  61.        
  62.         unsigned int ScriptSpaceSize = SCMlimits::GetScriptSpaceSize();
  63.  
  64.         if(ScriptSpaceSize > 269000)
  65.             SCMlimits::CTheScripts__ScriptSpace = new unsigned __int8[ScriptSpaceSize];
  66.  
  67.         // Patch references to CTheScripts::ScriptSpace
  68.         #if TRUE
  69.         {
  70.             CPatch::PatchPointer(0x44CA42 + 2, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  71.             CPatch::PatchPointer(0x44CA92 + 2, CTheScripts__ScriptSpace);   // mov     eax, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  72.             CPatch::PatchPointer(0x44CAB1 + 2, CTheScripts__ScriptSpace);   // mov     esi, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[esi]; CTheScripts::ScriptSpace
  73.             CPatch::PatchPointer(0x44CB36 + 2, CTheScripts__ScriptSpace);   // mov     ecx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edi]; CTheScripts::ScriptSpace
  74.             CPatch::PatchPointer(0x44CB58 + 2, CTheScripts__ScriptSpace);   // mov     dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edi], ecx; CTheScripts::ScriptSpace
  75.             CPatch::PatchPointer(0x44CB60 + 2, CTheScripts__ScriptSpace);   // mov     ecx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  76.             CPatch::PatchPointer(0x44CB6B + 2, CTheScripts__ScriptSpace);   // mov     dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax], 0; CTheScripts::ScriptSpace
  77.             CPatch::PatchPointer(0x44CBAD + 2, CTheScripts__ScriptSpace);   // mov     dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edi], ecx; CTheScripts::ScriptSpace
  78.             CPatch::PatchPointer(0x463DAD + 1, CTheScripts__ScriptSpace);   // add     eax, offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  79.             CPatch::PatchPointer(0x463E00 + 3, CTheScripts__ScriptSpace);   // lea     eax, _ZN11CTheScripts11ScriptSpaceE[ecx+edx*8]; CTheScripts::ScriptSpace
  80.             CPatch::PatchPointer(0x463E38 + 3, CTheScripts__ScriptSpace);   // lea     edx, _ZN11CTheScripts11ScriptSpaceE[eax+ecx]; CTheScripts::ScriptSpace
  81.             CPatch::PatchPointer(0x463E51 + 3, CTheScripts__ScriptSpace);   // lea     eax, _ZN11CTheScripts11ScriptSpaceE[ecx+edx]; CTheScripts::ScriptSpace
  82.             CPatch::PatchPointer(0x463FC7 + 2, CTheScripts__ScriptSpace);   // add     ecx, offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  83.             CPatch::PatchPointer(0x463FE9 + 1, CTheScripts__ScriptSpace);   // add     eax, offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  84.             CPatch::PatchPointer(0x4640DE + 2, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  85.             CPatch::PatchPointer(0x464159 + 2, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edx]; CTheScripts::ScriptSpace
  86.             CPatch::PatchPointer(0x464165 + 3, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax+edx*4]; CTheScripts::ScriptSpace
  87.             CPatch::PatchPointer(0x464191 + 3, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax+edx*4]; CTheScripts::ScriptSpace
  88.             CPatch::PatchPointer(0x4641BA + 2, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edx]; CTheScripts::ScriptSpace
  89.             CPatch::PatchPointer(0x46429A + 2, CTheScripts__ScriptSpace);   // mov     eax, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  90.             CPatch::PatchPointer(0x464310 + 3, CTheScripts__ScriptSpace);   // mov     eax, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax+edx*4]; CTheScripts::ScriptSpace
  91.             CPatch::PatchPointer(0x4643C0 + 2, CTheScripts__ScriptSpace);   // mov     dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax], edx; CTheScripts::ScriptSpace
  92.             CPatch::PatchPointer(0x464412 + 2, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edx]; CTheScripts::ScriptSpace
  93.             CPatch::PatchPointer(0x464420 + 3, CTheScripts__ScriptSpace);   // mov     dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax+edx*4], esi; CTheScripts::ScriptSpace
  94.             CPatch::PatchPointer(0x46444C + 3, CTheScripts__ScriptSpace);   // mov     dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax+edx*4], esi; CTheScripts::ScriptSpace
  95.             CPatch::PatchPointer(0x464473 + 2, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edx]; CTheScripts::ScriptSpace
  96.             CPatch::PatchPointer(0x464555 + 2, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  97.             CPatch::PatchPointer(0x4645D0 + 2, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edx]; CTheScripts::ScriptSpace
  98.             CPatch::PatchPointer(0x4645DC + 3, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax+edx*4]; CTheScripts::ScriptSpace
  99.             CPatch::PatchPointer(0x464608 + 3, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax+edx*4]; CTheScripts::ScriptSpace
  100.             CPatch::PatchPointer(0x464631 + 2, CTheScripts__ScriptSpace);   // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edx]; CTheScripts::ScriptSpace
  101.             CPatch::PatchPointer(0x4647CA + 1, CTheScripts__ScriptSpace);   // add     eax, offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  102.             CPatch::PatchPointer(0x46482A + 3, CTheScripts__ScriptSpace);   // lea     eax, _ZN11CTheScripts11ScriptSpaceE[ecx+edx]; CTheScripts::ScriptSpace
  103.             CPatch::PatchPointer(0x464846 + 3, CTheScripts__ScriptSpace);   // lea     eax, _ZN11CTheScripts11ScriptSpaceE[eax+ecx*8]; CTheScripts::ScriptSpace
  104.             CPatch::PatchPointer(0x46485D + 3, CTheScripts__ScriptSpace);   // lea     eax, _ZN11CTheScripts11ScriptSpaceE[edx+eax*4]; CTheScripts::ScriptSpace
  105.             CPatch::PatchPointer(0x466834 + 2, CTheScripts__ScriptSpace);   // lea     eax, _ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  106.             CPatch::PatchPointer(0x468D5D + 1, CTheScripts__ScriptSpace);   // mov     edi, offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  107.             CPatch::PatchPointer(0x468E79 + 1, CTheScripts__ScriptSpace);   // push    offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  108.             CPatch::PatchPointer(0x468ED5 + 1, CTheScripts__ScriptSpace);   // push    offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  109.             CPatch::PatchPointer(0x469448 + 2, CTheScripts__ScriptSpace);   // lea     ecx, _ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  110.             CPatch::PatchPointer(0x5D4C43 + 1, CTheScripts__ScriptSpace + 3);   // mov     eax, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE+3
  111.             CPatch::PatchPointer(0x5D4C92 + 2, CTheScripts__ScriptSpace);   // lea     ecx, _ZN11CTheScripts11ScriptSpaceE[edi]; CTheScripts::ScriptSpace
  112.             CPatch::PatchPointer(0x5D4CAF + 2, CTheScripts__ScriptSpace);   // lea     edx, _ZN11CTheScripts11ScriptSpaceE[edi]; CTheScripts::ScriptSpace
  113.             CPatch::PatchPointer(0x5D4F6A + 1, CTheScripts__ScriptSpace);   // sub     eax, offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  114.             CPatch::PatchPointer(0x5D4F92 + 1, CTheScripts__ScriptSpace);   // sub     eax, offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  115.             CPatch::PatchPointer(0x5D5020 + 2, CTheScripts__ScriptSpace);   // lea     ecx, _ZN11CTheScripts11ScriptSpaceE[edi]; CTheScripts::ScriptSpace
  116.             CPatch::PatchPointer(0x5D503D + 2, CTheScripts__ScriptSpace);   // lea     edx, _ZN11CTheScripts11ScriptSpaceE[edi]; CTheScripts::ScriptSpace
  117.             CPatch::PatchPointer(0x5D534F + 2, CTheScripts__ScriptSpace);   // lea     eax, _ZN11CTheScripts11ScriptSpaceE[edx]; CTheScripts::ScriptSpace
  118.             CPatch::PatchPointer(0x5D537E + 2, CTheScripts__ScriptSpace);   // lea     edx, _ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  119.             CPatch::PatchPointer(0x15620C3 + 2, CTheScripts__ScriptSpace);  // lea     eax, _ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  120.             CPatch::PatchPointer(0x1564F1E + 2, CTheScripts__ScriptSpace);  // mov     ecx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  121.             CPatch::PatchPointer(0x1564FB2 + 2, CTheScripts__ScriptSpace);  // mov     dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edx], 0; CTheScripts::ScriptSpace
  122.             CPatch::PatchPointer(0x1565610 + 1, CTheScripts__ScriptSpace);  // push    offset _ZN11CTheScripts11ScriptSpaceE; CTheScripts::ScriptSpace
  123.             CPatch::PatchPointer(0x1565E20 + 1, CTheScripts__ScriptSpace+3);    // mov     eax, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE+3
  124.             CPatch::PatchPointer(0x1565E25 + 2, CTheScripts__ScriptSpace + 3);  // mov     eax, dword ptr ds:(_ZN11CTheScripts11ScriptSpaceE+3)[eax]
  125.             CPatch::PatchPointer(0x1565E2B + 1, CTheScripts__ScriptSpace + 8);  // add     eax, (offset _ZN11CTheScripts11ScriptSpaceE+8)
  126.             CPatch::PatchPointer(0x1569FF2 + 2, CTheScripts__ScriptSpace);  // mov     ecx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  127.             CPatch::PatchPointer(0x156A082 + 2, CTheScripts__ScriptSpace);  // mov     eax, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  128.             CPatch::PatchPointer(0x156A09F + 2, CTheScripts__ScriptSpace);  // mov     ebx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax]; CTheScripts::ScriptSpace
  129.             CPatch::PatchPointer(0x156AA19 + 2, CTheScripts__ScriptSpace);  // cmp     dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[eax], 1; CTheScripts::ScriptSpace
  130.             CPatch::PatchPointer(0x156E375 + 2, CTheScripts__ScriptSpace);  // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edx]; CTheScripts::ScriptSpace
  131.             CPatch::PatchPointer(0x156F378 + 2, CTheScripts__ScriptSpace);  // mov     edx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE[edx]; CTheScripts::ScriptSpace
  132.             CPatch::PatchPointer(0x156F453 + 1, CTheScripts__ScriptSpace + 3);  // mov     eax, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE+3
  133.             CPatch::PatchPointer(0x156F45C + 2, CTheScripts__ScriptSpace + 3);  // mov     ecx, dword ptr ds:(_ZN11CTheScripts11ScriptSpaceE+3)[eax]
  134.             CPatch::PatchPointer(0x156F462 + 2, CTheScripts__ScriptSpace + 3);  // mov     esi, dword ptr ds:(_ZN11CTheScripts11ScriptSpaceE+3)[ecx]
  135.             CPatch::PatchPointer(0x156F468 + 2, CTheScripts__ScriptSpace + 8);  // add     esi, (offset _ZN11CTheScripts11ScriptSpaceE+8)
  136.             CPatch::PatchPointer(0x156F5A0 + 2, CTheScripts__ScriptSpace + 3);  // mov     ecx, dword ptr ds:_ZN11CTheScripts11ScriptSpaceE+3
  137.             CPatch::PatchPointer(0x156F5A6 + 3, CTheScripts__ScriptSpace + 8);  // mov     ax, word ptr ds:(_ZN11CTheScripts11ScriptSpaceE+8)[ecx]
  138.             CPatch::PatchPointer(0x156F5AD + 2, CTheScripts__ScriptSpace + 8);  // lea     ecx, (_ZN11CTheScripts11ScriptSpaceE+8)[ecx]
  139.         }
  140.         #endif
  141.  
  142.         // Patch sizes of MAIN segment size
  143.         #if TRUE
  144.         {
  145.             CPatch::PatchDWORD(0x468E74 + 1, iMAINsegmentSize); // push    200000          ; len
  146.             CPatch::PatchDWORD(0x468ECE + 1, iMAINsegmentSize); // push    200000          ; len
  147.         }
  148.         #endif
  149.  
  150.         // Patch references to CTheScripts::ScriptSpace + iMissionSize
  151.         #if TRUE
  152.         {
  153.             CPatch::PatchPointer(0x4899D6 + 1, CTheScripts__ScriptSpace + iMAINsegmentSize);    // push    offset unk_A7A6A0
  154.             CPatch::PatchPointer(0x4899F5 + 1, CTheScripts__ScriptSpace + iMAINsegmentSize);    // push    offset unk_A7A6A0
  155.             CPatch::PatchPointer(0x489A0B + 3, CTheScripts__ScriptSpace + iMAINsegmentSize);    // mov     dword ptr [eax+10h], offset unk_A7A6A0
  156.             CPatch::PatchPointer(0x489A5F + 1, CTheScripts__ScriptSpace + iMAINsegmentSize);    // push    offset unk_A7A6A0
  157.             CPatch::PatchPointer(0x489A75 + 1, CTheScripts__ScriptSpace + iMAINsegmentSize);    // push    offset unk_A7A6A0
  158.             CPatch::PatchPointer(0x489A8B + 3, CTheScripts__ScriptSpace + iMAINsegmentSize);    // mov     dword ptr [eax+10h], offset unk_A7A6A0
  159.         }
  160.         #endif
  161.  
  162.         // Patch sizes of mission space
  163.         #if TRUE
  164.         {
  165.             CPatch::PatchDWORD(0x4899D1 + 1, iMissionSize); // push    69000
  166.             CPatch::PatchDWORD(0x489A5A + 1, iMissionSize); // push    69000
  167.              
  168.         }
  169.         #endif
  170.  
  171.         // Patch sizes of CTheScripts::ScriptSpace
  172.         #if TRUE
  173.         {
  174.             CPatch::PatchDWORD(
  175.                 0x401CF8 + 1,
  176.                 ScriptSpaceSize / sizeof(DWORD)
  177.                 );  // mov     ecx, 106B2h
  178.  
  179.         }
  180.         #endif
  181.  
  182.         CPatch::DisableDebugMode();
  183.         CGenericLogStorage::SaveFormattedTextLn(
  184.             "Modified SCM limits:\n"
  185.             " - max size of MAIN segment from main.scm: %d bytes\n"
  186.             " - max size of mission from main.scm: %d bytes\n"
  187.             "Total size of CTheScripts::ScriptSpace: %d bytes"
  188.             ,
  189.             SCMlimits::iMAINsegmentSize,
  190.             SCMlimits::iMissionSize,
  191.             ScriptSpaceSize);
  192.         CGenericLogStorage::WriteLineSeparator();
  193.     }
  194. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×