Skip to content

Commit

Permalink
TimeModels unlimited in GTA3 and VC
Browse files Browse the repository at this point in the history
  • Loading branch information
ThirteenAG committed Oct 6, 2014
1 parent 02d129b commit fe22ebb
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 100 deletions.
12 changes: 6 additions & 6 deletions doc/limit_adjuster_gta3vcsa.ini
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ VehicleModels = unlimited
PedModels = unlimited
WeaponModels = unlimited
StaticShadows = 2048
Coronas = 2048
Searchlights = 1024
Coronas = 20048
ScriptSearchLights = 1024
FrameLimit = 105

[VCLIMITS]
PtrNode = 300000
EntryInfoNode = 3200
Peds = 140
;Peds = 140
Vehicles = 110
Buildings = 300000
Treadables = 1
Expand All @@ -49,7 +49,7 @@ AudioScriptObj = 192
ColModel = 10500
AlphaEntityList = 1250
VisibleEntityPtrs = unlimited
TimeModels = 1500
TimeModels = unlimited
OutsideWorldWaterBlocks = 40
StaticShadows = 2048
Coronas = 2048
Expand All @@ -65,7 +65,7 @@ Objects = 9500
Dummys = 22802
AlphaEntityList = 1250
VisibleEntityPtrs = unlimited
TimeModels = 1500
TimeModels = unlimited
OutsideWorldWaterBlocks = 40
StaticShadows = 2048
Coronas = 2048
Expand Down Expand Up @@ -196,7 +196,7 @@ DebugTextKey = 0x74 ; F5 -- Use an VKEY (see http://msdn.microsoft.com/pt-br/li
; ### Coronas
; Maximum amount of coronas
;
; ### Searchlights
; ### ScriptSearchLights
; Maximum amount of searchlights that can be created with opcode 06B1
;
; ### FrameLimit
Expand Down
2 changes: 1 addition & 1 deletion src/Searchlights.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ std::vector<char> aSearchlights;
class SearchlightsSA : public SimpleAdjuster
{
public:
const char* GetLimitName() { return GetGVM().IsSA() ? "Searchlights" : nullptr; }
const char* GetLimitName() { return GetGVM().IsSA() ? "ScriptSearchLights" : nullptr; }

void ChangeLimit(int, const std::string& value)
{
Expand Down
142 changes: 49 additions & 93 deletions src/TimeModels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,117 +5,73 @@
*/
#include "utility/StoreAdjuster.hpp"
#include "utility/dummy_object.hpp"
std::vector<char> stTimeModelInfo;
DWORD jmpAddr;
DWORD IIIvalue;

typedef dummy_object_vmt<0x58, 0x50C0A0> CTimeModelInfo_III;
typedef dummy_object_vmt<0x50, 0x560280> CTimeModelInfo_VC;
typedef dummy_object_vmt<0x24, 0x4C5640> CTimeModelInfo_SA;

void __declspec(naked) asm_50BC78()
struct TimeModelInfoIII : public StoreAdjuster<CTimeModelInfo_III, 0x94076C, 30> // T, pDefaultStore, dwDefaultCapacity
{
_asm
{
add esp, 0Ch
push IIIvalue
push 58h
mov jmpAddr, 0x50BC7F
jmp jmpAddr
}
}

void __declspec(naked) asm_50B9C0()
{
_asm
{
mov eax, IIIvalue
cmp ds : [0x94076C], eax
mov jmpAddr, 0x50B9C7
jmp jmpAddr
}
}

class TimeModelInfoIII : public SimpleAdjuster
{
public:
const char* GetLimitName() { return GetGVM().IsIII() ? "TimeModels" : nullptr; }
void ChangeLimit(int, const std::string& value)
{
IIIvalue = std::stoi(value);
stTimeModelInfo.resize((IIIvalue * 88) + 4);
injector::MakeJMP(0x50BC78, asm_50BC78, true); //injector::WriteMemory(0x50BC7B + 1, std::stoi(value), true);

injector::MakeJMP(0x50B9C0, asm_50B9C0, true);
/*injector::WriteMemory(0x55FEFF + 0x1, std::stoi(value), true);
injector::WriteMemory(0x55F6E0 + 0x6, std::stoi(value), true);
injector::WriteMemory(0x55F6F2 + 0x1, std::stoi(value), true);
injector::WriteMemory(0x560246 + 0x1, std::stoi(value), true);*/

injector::WriteMemory(0x50BC89 + 0x1, &stTimeModelInfo[0] + 4, true);
const char* GetLimitName()
{
return IsIII() ? "TimeModels" : nullptr;
}

injector::WriteMemory(0x50B310 + 0xE6 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x50B5B0 + 0x8B + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x50B5B0 + 0x94 + 0x1, &stTimeModelInfo[0], true);
injector::WriteMemory(0x50B5B0 + 0xB1 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x50B5B0 + 0x23E + 0x2, &stTimeModelInfo[0], true);
//injector::WriteMemory(0x50B9C0 + 0x2, &stTimeModelInfo[0], true); //inject @asm_50B9C0
injector::WriteMemory(0x50B9DD + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x50B9C0 + 0x23 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x50B9C0 + 0x2C + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x50BC00 + 0x96 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x50BC00 + 0xAA + 0x1, &stTimeModelInfo[0], true);
TimeModelInfoIII()
{
this->SetGrower(0x477618);
this->AddPointer(0x50B3F8, 0x0);
this->AddPointer(0x50B63D, 0x0);
this->AddPointer(0x50B645, 0x0);
this->AddPointer(0x50B663, 0x0);
this->AddPointer(0x50B7F0, 0x0);
this->AddPointer(0x50B9C2, 0x0);
this->AddPointer(0x50B9DF, 0x0);
this->AddPointer(0x50B9E5, 0x0);
this->AddPointer(0x50B9EE, 0x0);
//this->AddPointer(0x50BC98, 0x0);
//this->AddPointer(0x50BCAB, 0x0);
//this->AddPointer(0x50BC8A, 0x4);
if (GetLimitName()) injector::MakeNOP(0x50B9D6, 5, true);
}

if (*(DWORD*)0x943098 == 0x4CBEBC20)
{
auto CModelInfo_CModelInfo = (void(__cdecl *)()) 0x50BC00;
CModelInfo_CModelInfo();
}
}
} TimeModelInfoIII;

class TimeModelInfoVC : public SimpleAdjuster
struct TimeModelInfoVC : public StoreAdjuster<CTimeModelInfo_VC, 0x74A6B0, 385> // T, pDefaultStore, dwDefaultCapacity
{
public:
const char* GetLimitName() { return GetGVM().IsVC() ? "TimeModels" : nullptr; }
void ChangeLimit(int, const std::string& value)
{
stTimeModelInfo.resize((std::stoi(value) * 80) + 4);

injector::WriteMemory(0x55FEFF + 0x1, std::stoi(value), true);
injector::WriteMemory(0x55F6E0 + 0x6, std::stoi(value), true);
injector::WriteMemory(0x55F6F2 + 0x1, std::stoi(value), true);
injector::WriteMemory(0x560246 + 0x1, std::stoi(value), true);

injector::WriteMemory(0x55FF10 + 0x1, &stTimeModelInfo[0] + 4, true);
const char* GetLimitName()
{
return IsVC() ? "TimeModels" : nullptr;
}

injector::WriteMemory(0x55F6E0 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55F703 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55F6E0 + 0x29 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55F6E0 + 0x32 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55F820 + 0x4C + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55F820 + 0x55 + 0x1, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55F820 + 0x71 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55F820 + 0x1AC + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55FA40 + 0x154 + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55FEC0 + 0x5D + 0x2, &stTimeModelInfo[0], true);
injector::WriteMemory(0x55FEC0 + 0x71 + 0x1, &stTimeModelInfo[0], true);
TimeModelInfoVC()
{
this->SetGrower(0x48C498);
this->AddPointer(0x55F6E0 + 0x2, 0x0);
this->AddPointer(0x55F703 + 0x2, 0x0);
this->AddPointer(0x55F6E0 + 0x29 + 0x2, 0x0);
this->AddPointer(0x55F6E0 + 0x32 + 0x2, 0x0);
this->AddPointer(0x55F820 + 0x4C + 0x2, 0x0);
this->AddPointer(0x55F820 + 0x55 + 0x1, 0x0);
this->AddPointer(0x55F820 + 0x71 + 0x2, 0x0);
this->AddPointer(0x55F820 + 0x1AC + 0x2, 0x0);
this->AddPointer(0x55FA40 + 0x154 + 0x2, 0x0);
//this->AddPointer(0x55FEC0 + 0x5D + 0x2, 0x0);
//this->AddPointer(0x55FEC0 + 0x71 + 0x1, 0x0);
if (GetLimitName()) injector::MakeNOP(0x55F6FC, 5, true);
}

if (*(DWORD*)0x97F30C == 0x4CBEBC20)
{
auto CModelInfo_CModelInfo = (void(__cdecl *)()) 0x55FEC0;
CModelInfo_CModelInfo();
}
}
} TimeModelInfoVC;

struct TimeModelInfoSA : public StoreAdjuster<CTimeModelInfo_SA, 0xB1C960, 169> // T, pDefaultStore, dwDefaultCapacity
{
const char* GetLimitName()
const char* GetLimitName()
{
return IsSA()? "TimeModels" : nullptr;
}

TimeModelInfoSA()
{
TimeModelInfoSA()
{
this->SetGrower (0x5B3F32);
this->AddPointer(0x4C6459, 0x0);
this->AddPointer(0x4C6470, 0x0);
Expand All @@ -127,6 +83,6 @@ struct TimeModelInfoSA : public StoreAdjuster<CTimeModelInfo_SA, 0xB1C960, 169>
//this->AddPointer(0x856261, 0x0);
this->AddPointer(0x4C6464, 0x4);
this->AddPointer(0x4C66BD, 0x4);
}
}

} TimeModelInfoSA;

0 comments on commit fe22ebb

Please sign in to comment.