mirror of
https://github.com/CookiePLMonster/SilentPatch.git
synced 2024-12-28 23:03:01 +05:00
Initial committ
This commit is contained in:
commit
62052759e1
23 changed files with 3667 additions and 0 deletions
190
.gitignore
vendored
Normal file
190
.gitignore
vendored
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Nn]ormal/
|
||||||
|
[Nn]ightly/
|
||||||
|
output/
|
||||||
|
symbols/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
build/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
#NUNIT
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
|
||||||
|
*.cso
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_i.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# JustCode is a .NET coding addin-in
|
||||||
|
.JustCode
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
*.ncrunch*
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
|
||||||
|
# NuGet Packages Directory
|
||||||
|
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
|
||||||
|
#packages/*
|
||||||
|
## TODO: If the tool you use requires repositories.config, also uncomment the next line
|
||||||
|
#!packages/repositories.config
|
||||||
|
|
||||||
|
# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
|
||||||
|
# This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented)
|
||||||
|
!packages/build/
|
||||||
|
|
||||||
|
# Windows Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Windows Store app package directory
|
||||||
|
AppPackages/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
sql/
|
||||||
|
*.Cache
|
||||||
|
ClientBin/
|
||||||
|
[Ss]tyle[Cc]op.*
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file to a newer
|
||||||
|
# Visual Studio version. Backup files are not needed, because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
App_Data/*.mdf
|
||||||
|
App_Data/*.ldf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# Windows detritus
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
# Windows image file caches
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
|
||||||
|
# Folder config file
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Recycle Bin used on file shares
|
||||||
|
$RECYCLE.BIN/
|
114
IIIFix/IIIFix.vcxproj
Normal file
114
IIIFix/IIIFix.vcxproj
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\SilentPatch\dllmain.cpp" />
|
||||||
|
<ClCompile Include="..\SilentPatch\Timer.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<MASM Include="..\SilentPatch\win2000.asm" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\SilentPatch\MemoryMgr.h" />
|
||||||
|
<ClInclude Include="..\SilentPatch\Timer.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{652975D8-60B0-48E4-A973-4F10BA54FFCB}</ProjectGuid>
|
||||||
|
<RootNamespace>IIIFix</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<TargetExt>.asi</TargetExt>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<TargetExt>.asi</TargetExt>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
<PreprocessorDefinitions>SILENTPATCH_III_VER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>D:\RWSDK\Graphics\rwsdk\include\d3d9</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<MinimumRequiredVersion>5.0</MinimumRequiredVersion>
|
||||||
|
<EntryPointSymbol>
|
||||||
|
</EntryPointSymbol>
|
||||||
|
<AdditionalDependencies>Winmm.lib</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /y "$(TargetPath)" "D:\gry\Steam\steamapps\common\Grand Theft Auto 3\SilentPatchIII.asi"</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||||
|
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
|
<PreprocessorDefinitions>SILENTPATCH_III_VER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>D:\RWSDK\Graphics\rwsdk\include\d3d9</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<MinimumRequiredVersion>5.0</MinimumRequiredVersion>
|
||||||
|
<EntryPointSymbol>
|
||||||
|
</EntryPointSymbol>
|
||||||
|
<AdditionalDependencies>Winmm.lib</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /y "$(TargetPath)" "D:\gry\Steam\steamapps\common\Grand Theft Auto 3\SilentPatchIII.asi"</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
38
IIIFix/IIIFix.vcxproj.filters
Normal file
38
IIIFix/IIIFix.vcxproj.filters
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\SilentPatch\dllmain.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\SilentPatch\Timer.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<MASM Include="..\SilentPatch\win2000.asm">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</MASM>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\SilentPatch\MemoryMgr.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\SilentPatch\Timer.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
118
SAFix/SAFix.vcxproj
Normal file
118
SAFix/SAFix.vcxproj
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{D3E18BC0-A120-451D-A16A-F77072625D66}</ProjectGuid>
|
||||||
|
<RootNamespace>SAFix</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<TargetExt>.dll</TargetExt>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<TargetExt>.dll</TargetExt>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<PreprocessorDefinitions>SILENTPATCH_SA_VER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>D:\RWSDK\Graphics\rwsdk\include\d3d9</AdditionalIncludeDirectories>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<MinimumRequiredVersion>5.0</MinimumRequiredVersion>
|
||||||
|
<AdditionalDependencies>winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /y "$(TargetPath)" "D:\gry\GTA San Andreas clean\SilentPatchSA.asi"</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
|
<PreprocessorDefinitions>SILENTPATCH_SA_VER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<AdditionalIncludeDirectories>D:\RWSDK\Graphics\rwsdk\include\d3d9</AdditionalIncludeDirectories>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<MinimumRequiredVersion>5.0</MinimumRequiredVersion>
|
||||||
|
<AdditionalDependencies>winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /y "$(TargetPath)" "D:\gry\GTA San Andreas clean\SilentPatchSA.asi"</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\SilentPatch\dllmain.cpp" />
|
||||||
|
<ClCompile Include="..\SilentPatch\General.cpp" />
|
||||||
|
<ClCompile Include="..\SilentPatch\ModelInfoSA.cpp" />
|
||||||
|
<ClCompile Include="..\SilentPatch\StdAfx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\SilentPatch\Timer.cpp" />
|
||||||
|
<ClCompile Include="..\SilentPatch\Vehicle.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\SilentPatch\win2000.asm" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\SilentPatch\General.h" />
|
||||||
|
<ClInclude Include="..\SilentPatch\LinkList.h" />
|
||||||
|
<ClInclude Include="..\SilentPatch\Maths.h" />
|
||||||
|
<ClInclude Include="..\SilentPatch\MemoryMgr.h" />
|
||||||
|
<ClInclude Include="..\SilentPatch\ModelInfoSA.h" />
|
||||||
|
<ClInclude Include="..\SilentPatch\StdAfx.h" />
|
||||||
|
<ClInclude Include="..\SilentPatch\Timer.h" />
|
||||||
|
<ClInclude Include="..\SilentPatch\Vehicle.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
68
SAFix/SAFix.vcxproj.filters
Normal file
68
SAFix/SAFix.vcxproj.filters
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\SilentPatch\dllmain.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\SilentPatch\General.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\SilentPatch\Vehicle.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\SilentPatch\StdAfx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\SilentPatch\Timer.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\SilentPatch\ModelInfoSA.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\SilentPatch\win2000.asm">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\SilentPatch\MemoryMgr.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\SilentPatch\General.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\SilentPatch\Vehicle.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\SilentPatch\LinkList.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\SilentPatch\Maths.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\SilentPatch\StdAfx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\SilentPatch\Timer.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\SilentPatch\ModelInfoSA.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
32
SilentPatch.sln
Normal file
32
SilentPatch.sln
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||||
|
# Visual Studio 2010
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IIIFix", "IIIFix\IIIFix.vcxproj", "{652975D8-60B0-48E4-A973-4F10BA54FFCB}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCFix", "VCFix\VCFix.vcxproj", "{374D4CB4-548A-4DA0-AB68-8EA356424626}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SAFix", "SAFix\SAFix.vcxproj", "{D3E18BC0-A120-451D-A16A-F77072625D66}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{652975D8-60B0-48E4-A973-4F10BA54FFCB}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{652975D8-60B0-48E4-A973-4F10BA54FFCB}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{652975D8-60B0-48E4-A973-4F10BA54FFCB}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{652975D8-60B0-48E4-A973-4F10BA54FFCB}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{374D4CB4-548A-4DA0-AB68-8EA356424626}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{374D4CB4-548A-4DA0-AB68-8EA356424626}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{374D4CB4-548A-4DA0-AB68-8EA356424626}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{374D4CB4-548A-4DA0-AB68-8EA356424626}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{D3E18BC0-A120-451D-A16A-F77072625D66}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{D3E18BC0-A120-451D-A16A-F77072625D66}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{D3E18BC0-A120-451D-A16A-F77072625D66}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{D3E18BC0-A120-451D-A16A-F77072625D66}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
12
SilentPatch/General.cpp
Normal file
12
SilentPatch/General.cpp
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
#include "General.h"
|
||||||
|
|
||||||
|
// Wrappers
|
||||||
|
WRAPPER bool CalcScreenCoors(const CVector& vecIn, CVector* vecOut) { WRAPARG(vecIn); WRAPARG(vecOut); EAXJMP(0x71DAB0); }
|
||||||
|
WRAPPER void LoadingScreenLoadingFile(const char* pText) { WRAPARG(pText); EAXJMP(0x5B3680); }
|
||||||
|
|
||||||
|
WRAPPER void CEntity::UpdateRW() { EAXJMP(0x446F90); }
|
||||||
|
WRAPPER void CEntity::RegisterReference(CEntity** pAddress) { WRAPARG(pAddress); EAXJMP(0x571B70); }
|
||||||
|
WRAPPER void CEntity::CleanUpOldReference(CEntity** pAddress) { WRAPARG(pAddress); EAXJMP(0x571A00); }
|
||||||
|
WRAPPER void CEntity::Render() { EAXJMP(0x534310); }
|
283
SilentPatch/General.h
Normal file
283
SilentPatch/General.h
Normal file
|
@ -0,0 +1,283 @@
|
||||||
|
#ifndef __GENERAL
|
||||||
|
#define __GENERAL
|
||||||
|
|
||||||
|
class CSimpleTransform
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CVector m_translate;
|
||||||
|
float m_heading;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CRGBA
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BYTE r, g, b, a;
|
||||||
|
|
||||||
|
inline CRGBA() {}
|
||||||
|
|
||||||
|
inline CRGBA(const CRGBA& in)
|
||||||
|
: r(in.r), g(in.g), b(in.b), a(in.a)
|
||||||
|
{}
|
||||||
|
|
||||||
|
inline CRGBA(const CRGBA& in, BYTE alpha)
|
||||||
|
: r(in.r), g(in.g), b(in.b), a(alpha)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
inline CRGBA(BYTE red, BYTE green, BYTE blue, BYTE alpha = 255)
|
||||||
|
: r(red), g(green), b(blue), a(alpha)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
friend CRGBA Blend(const CRGBA& One, T OneStrength, const CRGBA& Two, T TwoStrength)
|
||||||
|
{ T TotalStrength = OneStrength + TwoStrength;
|
||||||
|
return CRGBA( ((One.r * OneStrength) + (Two.r * TwoStrength))/TotalStrength,
|
||||||
|
((One.g * OneStrength) + (Two.g * TwoStrength))/TotalStrength,
|
||||||
|
((One.b * OneStrength) + (Two.b * TwoStrength))/TotalStrength,
|
||||||
|
((One.a * OneStrength) + (Two.a * TwoStrength))/TotalStrength); }
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
friend CRGBA Blend(const CRGBA& One, T OneStrength, const CRGBA& Two, T TwoStrength, const CRGBA& Three, T ThreeStrength)
|
||||||
|
{ T TotalStrength = OneStrength + TwoStrength + ThreeStrength;
|
||||||
|
return CRGBA( ((One.r * OneStrength) + (Two.r * TwoStrength) + (Three.r * ThreeStrength))/TotalStrength,
|
||||||
|
((One.g * OneStrength) + (Two.g * TwoStrength) + (Three.g * ThreeStrength))/TotalStrength,
|
||||||
|
((One.b * OneStrength) + (Two.b * TwoStrength) + (Three.b * ThreeStrength))/TotalStrength,
|
||||||
|
((One.a * OneStrength) + (Two.a * TwoStrength) + (Three.a * ThreeStrength))/TotalStrength); }
|
||||||
|
|
||||||
|
void BaseColors__Constructor();
|
||||||
|
};
|
||||||
|
|
||||||
|
class CRect
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
float x1, y1;
|
||||||
|
float x2, y2;
|
||||||
|
|
||||||
|
inline CRect() {}
|
||||||
|
inline CRect(float a, float b, float c, float d)
|
||||||
|
: x1(a), y1(b), x2(c), y2(d)
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CPlaceable
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
CSimpleTransform m_transform;
|
||||||
|
CMatrix* m_pCoords;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Line up the VMTs
|
||||||
|
virtual ~CPlaceable() {}
|
||||||
|
|
||||||
|
inline CPlaceable() {}
|
||||||
|
|
||||||
|
explicit inline CPlaceable(int dummy)
|
||||||
|
{
|
||||||
|
// Dummy ctor
|
||||||
|
UNREFERENCED_PARAMETER(dummy);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline CVector* GetCoords()
|
||||||
|
{ return m_pCoords ? reinterpret_cast<CVector*>(&m_pCoords->matrix.pos) : &m_transform.m_translate; }
|
||||||
|
inline CMatrix* GetMatrix()
|
||||||
|
{ return m_pCoords; }
|
||||||
|
inline CSimpleTransform& GetTransform()
|
||||||
|
{ return m_transform; }
|
||||||
|
inline float GetHeading()
|
||||||
|
{ return m_pCoords ? atan2(-m_pCoords->GetUp()->x, m_pCoords->GetUp()->y) : m_transform.m_heading; }
|
||||||
|
|
||||||
|
inline void SetCoords(const CVector& pos)
|
||||||
|
{ if ( m_pCoords ) { m_pCoords->matrix.pos.x = pos.x; m_pCoords->matrix.pos.y = pos.y; m_pCoords->matrix.pos.z = pos.z; }
|
||||||
|
else m_transform.m_translate = pos; }
|
||||||
|
inline void SetHeading(float fHeading)
|
||||||
|
{ if ( m_pCoords ) m_pCoords->SetRotateZOnly(fHeading); else m_transform.m_heading = fHeading; }
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: May not be the best place to put it?
|
||||||
|
class NOVMT CEntity : public CPlaceable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void Add_CRect();
|
||||||
|
virtual void Add();
|
||||||
|
virtual void Remove();
|
||||||
|
virtual void SetIsStatic(bool);
|
||||||
|
virtual void SetModelIndex(int nModelIndex);
|
||||||
|
virtual void SetModelIndexNoCreate(int nModelIndex);
|
||||||
|
virtual void CreateRwObject();
|
||||||
|
virtual void DeleteRwObject();
|
||||||
|
virtual CRect GetBoundRect();
|
||||||
|
virtual void ProcessControl();
|
||||||
|
virtual void ProcessCollision();
|
||||||
|
virtual void ProcessShift();
|
||||||
|
virtual void TestCollision();
|
||||||
|
virtual void Teleport();
|
||||||
|
virtual void SpecialEntityPreCollisionStuff();
|
||||||
|
virtual void SpecialEntityCalcCollisionSteps();
|
||||||
|
virtual void PreRender();
|
||||||
|
virtual void Render();
|
||||||
|
virtual void SetupLighting();
|
||||||
|
virtual void RemoveLighting(bool bRemove=true);
|
||||||
|
virtual void FlagToDestroyWhenNextProcessed();
|
||||||
|
|
||||||
|
//private:
|
||||||
|
RpClump* m_pRwObject; // 0x18
|
||||||
|
|
||||||
|
/********** BEGIN CFLAGS (0x1C) **************/
|
||||||
|
unsigned long bUsesCollision : 1; // does entity use collision
|
||||||
|
unsigned long bCollisionProcessed : 1; // has object been processed by a ProcessEntityCollision function
|
||||||
|
unsigned long bIsStatic : 1; // is entity static
|
||||||
|
unsigned long bHasContacted : 1; // has entity processed some contact forces
|
||||||
|
unsigned long bIsStuck : 1; // is entity stuck
|
||||||
|
unsigned long bIsInSafePosition : 1; // is entity in a collision free safe position
|
||||||
|
unsigned long bWasPostponed : 1; // was entity control processing postponed
|
||||||
|
unsigned long bIsVisible : 1; //is the entity visible
|
||||||
|
|
||||||
|
unsigned long bIsBIGBuilding : 1; // Set if this entity is a big building
|
||||||
|
unsigned long bRenderDamaged : 1; // use damaged LOD models for objects with applicable damage
|
||||||
|
unsigned long bStreamingDontDelete : 1; // Dont let the streaming remove this
|
||||||
|
unsigned long bRemoveFromWorld : 1; // remove this entity next time it should be processed
|
||||||
|
unsigned long bHasHitWall : 1; // has collided with a building (changes subsequent collisions)
|
||||||
|
unsigned long bImBeingRendered : 1; // don't delete me because I'm being rendered
|
||||||
|
unsigned long bDrawLast :1; // draw object last
|
||||||
|
unsigned long bDistanceFade :1; // Fade entity because it is far away
|
||||||
|
|
||||||
|
unsigned long bDontCastShadowsOn : 1; // Dont cast shadows on this object
|
||||||
|
unsigned long bOffscreen : 1; // offscreen flag. This can only be trusted when it is set to true
|
||||||
|
unsigned long bIsStaticWaitingForCollision : 1; // this is used by script created entities - they are static until the collision is loaded below them
|
||||||
|
unsigned long bDontStream : 1; // tell the streaming not to stream me
|
||||||
|
unsigned long bUnderwater : 1; // this object is underwater change drawing order
|
||||||
|
unsigned long bHasPreRenderEffects : 1; // Object has a prerender effects attached to it
|
||||||
|
unsigned long bIsTempBuilding : 1; // whether or not the building is temporary (i.e. can be created and deleted more than once)
|
||||||
|
unsigned long bDontUpdateHierarchy : 1; // Don't update the aniamtion hierarchy this frame
|
||||||
|
|
||||||
|
unsigned long bHasRoadsignText : 1; // entity is roadsign and has some 2deffect text stuff to be rendered
|
||||||
|
unsigned long bDisplayedSuperLowLOD : 1;
|
||||||
|
unsigned long bIsProcObject : 1; // set object has been generate by procedural object generator
|
||||||
|
unsigned long bBackfaceCulled : 1; // has backface culling on
|
||||||
|
unsigned long bLightObject : 1; // light object with directional lights
|
||||||
|
unsigned long bUnimportantStream : 1; // set that this object is unimportant, if streaming is having problems
|
||||||
|
unsigned long bTunnel : 1; // Is this model part of a tunnel
|
||||||
|
unsigned long bTunnelTransition : 1; // This model should be rendered from within and outside of the tunnel
|
||||||
|
/********** END CFLAGS **************/
|
||||||
|
|
||||||
|
WORD RandomSeed; // 0x20
|
||||||
|
short m_nModelIndex; // 0x22
|
||||||
|
void* pReferences; // 0x24
|
||||||
|
void* m_pLastRenderedLink; // 0x28
|
||||||
|
WORD m_nScanCode; // 0x2C
|
||||||
|
BYTE m_iplIndex; // 0x2E
|
||||||
|
BYTE m_areaCode; // 0x2F
|
||||||
|
CEntity* m_pLod; // 0x30
|
||||||
|
BYTE numLodChildren; // 0x34
|
||||||
|
char numLodChildrenRendered; // 0x35
|
||||||
|
|
||||||
|
//********* BEGIN CEntityInfo **********//
|
||||||
|
BYTE nType : 3; // what type is the entity // 0x36 (2 == Vehicle)
|
||||||
|
BYTE nStatus : 5; // control status // 0x36
|
||||||
|
//********* END CEntityInfo ************//
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit inline CEntity(int dummy)
|
||||||
|
: CPlaceable(dummy)
|
||||||
|
{
|
||||||
|
// Dummy ctor
|
||||||
|
}
|
||||||
|
|
||||||
|
inline short& ModelIndex()
|
||||||
|
{ return m_nModelIndex; };
|
||||||
|
inline short GetModelIndex()
|
||||||
|
{ return m_nModelIndex; }
|
||||||
|
|
||||||
|
void UpdateRW();
|
||||||
|
void RegisterReference(CEntity** pAddress);
|
||||||
|
void CleanUpOldReference(CEntity** pAddress);
|
||||||
|
};
|
||||||
|
|
||||||
|
class NOVMT CPhysical : public CEntity
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
float pad1; // 56
|
||||||
|
int __pad2; // 60
|
||||||
|
|
||||||
|
unsigned int b0x01 : 1; // 64
|
||||||
|
unsigned int bApplyGravity : 1;
|
||||||
|
unsigned int bDisableFriction : 1;
|
||||||
|
unsigned int bCollidable : 1;
|
||||||
|
unsigned int b0x10 : 1;
|
||||||
|
unsigned int bDisableMovement : 1;
|
||||||
|
unsigned int b0x40 : 1;
|
||||||
|
unsigned int b0x80 : 1;
|
||||||
|
|
||||||
|
unsigned int bSubmergedInWater : 1; // 65
|
||||||
|
unsigned int bOnSolidSurface : 1;
|
||||||
|
unsigned int bBroken : 1;
|
||||||
|
unsigned int b0x800 : 1; // ref @ 0x6F5CF0
|
||||||
|
unsigned int b0x1000 : 1;//
|
||||||
|
unsigned int b0x2000 : 1;//
|
||||||
|
unsigned int b0x4000 : 1;//
|
||||||
|
unsigned int b0x8000 : 1;//
|
||||||
|
|
||||||
|
unsigned int b0x10000 : 1; // 66
|
||||||
|
unsigned int b0x20000 : 1; // ref @ CPhysical__processCollision
|
||||||
|
unsigned int bBulletProof : 1;
|
||||||
|
unsigned int bFireProof : 1;
|
||||||
|
unsigned int bCollisionProof : 1;
|
||||||
|
unsigned int bMeeleProof : 1;
|
||||||
|
unsigned int bInvulnerable : 1;
|
||||||
|
unsigned int bExplosionProof : 1;
|
||||||
|
|
||||||
|
unsigned int b0x1000000 : 1; // 67
|
||||||
|
unsigned int bAttachedToEntity : 1;
|
||||||
|
unsigned int b0x4000000 : 1;
|
||||||
|
unsigned int bTouchingWater : 1;
|
||||||
|
unsigned int bEnableCollision : 1;
|
||||||
|
unsigned int bDestroyed : 1;
|
||||||
|
unsigned int b0x40000000 : 1;
|
||||||
|
unsigned int b0x80000000 : 1;
|
||||||
|
|
||||||
|
CVector m_vecLinearVelocity; // 68
|
||||||
|
CVector m_vecAngularVelocity; // 80
|
||||||
|
CVector m_vecCollisionLinearVelocity; // 92
|
||||||
|
CVector m_vecCollisionAngularVelocity; // 104
|
||||||
|
CVector m_vForce; // 0x74
|
||||||
|
CVector m_vTorque; // 0x80
|
||||||
|
float fMass; // 0x8C
|
||||||
|
float fTurnMass; // 0x90
|
||||||
|
float m_fVelocityFrequency; // 0x94
|
||||||
|
float m_fAirResistance; // 0x98
|
||||||
|
float m_fElasticity; // 0x9C
|
||||||
|
float m_fBuoyancyConstant; // 0xA0
|
||||||
|
|
||||||
|
CVector vecCenterOfMass; // 0xA4
|
||||||
|
DWORD dwUnk1; // 0xB0
|
||||||
|
void* unkCPtrNodeDoubleLink; // 0xB4
|
||||||
|
BYTE byUnk: 8; // 0xB8
|
||||||
|
BYTE byCollisionRecords: 8; // 0xB9
|
||||||
|
BYTE byUnk2: 8; // 0xBA (Baracus)
|
||||||
|
BYTE byUnk3: 8; // 0xBB
|
||||||
|
|
||||||
|
float pad4[6]; // 0xBC
|
||||||
|
|
||||||
|
float fDistanceTravelled; // 0xD4
|
||||||
|
float fDamageImpulseMagnitude; // 0xD8
|
||||||
|
CEntity* damageEntity; // 0xDC
|
||||||
|
BYTE pad2[28]; // 0xE0
|
||||||
|
CEntity* pAttachedEntity; // 0xFC
|
||||||
|
CVector m_vAttachedPosition; // 0x100
|
||||||
|
CVector m_vAttachedRotation; // 0x10C
|
||||||
|
BYTE pad3[20]; // 0x118
|
||||||
|
float fLighting; // 0x12C col lighting? CPhysical::GetLightingFromCol
|
||||||
|
float fLighting_2; // 0x130 added to col lighting in CPhysical::GetTotalLighting
|
||||||
|
BYTE pad3a[4]; // 0x134
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Temp
|
||||||
|
CPhysical()
|
||||||
|
: CEntity(0) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(CEntity) == 0x38, "Wrong size: CEntity");
|
||||||
|
static_assert(sizeof(CPhysical) == 0x138, "Wrong size: CPhysical");
|
||||||
|
|
||||||
|
#endif
|
134
SilentPatch/LinkList.h
Normal file
134
SilentPatch/LinkList.h
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
#ifndef __LINKLIST__
|
||||||
|
#define __LINKLIST__
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class CLink
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline void Insert(CLink<T>* pAttach) {
|
||||||
|
pAttach->m_pNext = m_pNext;
|
||||||
|
m_pNext->m_pPrev = pAttach;
|
||||||
|
|
||||||
|
pAttach->m_pPrev = this;
|
||||||
|
m_pNext = pAttach;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Remove(void) {
|
||||||
|
m_pNext->m_pPrev = m_pPrev;
|
||||||
|
m_pPrev->m_pNext = m_pNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline T& V(void) {
|
||||||
|
return m_pItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
T m_pItem; // 0-4
|
||||||
|
// an item
|
||||||
|
CLink<T>* m_pPrev; // 4-8
|
||||||
|
//next link in the list
|
||||||
|
CLink<T>* m_pNext; // 8-12
|
||||||
|
//prev link in the list
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class CLinkList {
|
||||||
|
public:
|
||||||
|
CLinkList(void)
|
||||||
|
: m_plnLinks(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Init(int nNumLinks) {
|
||||||
|
m_plnLinks = new CLink<T>[nNumLinks];
|
||||||
|
|
||||||
|
m_lnListHead.m_pNext = &m_lnListTail;
|
||||||
|
m_lnListTail.m_pPrev = &m_lnListHead;
|
||||||
|
|
||||||
|
m_lnFreeListHead.m_pNext = &m_lnFreeListTail;
|
||||||
|
m_lnFreeListTail.m_pPrev = &m_lnFreeListHead;
|
||||||
|
|
||||||
|
for(int i = nNumLinks - 1; i >= 0; i--) {
|
||||||
|
m_lnFreeListHead.Insert(&m_plnLinks[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shutdown(void) {
|
||||||
|
delete[] m_plnLinks;
|
||||||
|
|
||||||
|
m_plnLinks = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
CLink<T>* InsertSorted(const T& pItem) {
|
||||||
|
CLink<T>* pLink = m_lnFreeListHead.m_pNext;
|
||||||
|
|
||||||
|
if(pLink == &m_lnFreeListTail) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
pLink->m_pItem = pItem;
|
||||||
|
|
||||||
|
pLink->Remove();
|
||||||
|
|
||||||
|
CLink<T>* pInsertAfter = &m_lnListHead;
|
||||||
|
|
||||||
|
while(pInsertAfter->m_pNext != &m_lnListTail && pInsertAfter->m_pNext->m_pItem < pItem) {
|
||||||
|
pInsertAfter = pInsertAfter->m_pNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
pInsertAfter->Insert(pLink);
|
||||||
|
|
||||||
|
return pLink;
|
||||||
|
}
|
||||||
|
|
||||||
|
CLink<T>* Insert(const T& pItem) {
|
||||||
|
CLink<T>* pLink = m_lnFreeListHead.m_pNext;
|
||||||
|
|
||||||
|
if(pLink == &m_lnFreeListTail) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
pLink->m_pItem = pItem;
|
||||||
|
|
||||||
|
pLink->Remove();
|
||||||
|
m_lnListHead.Insert(pLink);
|
||||||
|
|
||||||
|
return pLink;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Clear(void) {
|
||||||
|
while(m_lnListHead.m_pNext != &m_lnListTail) {
|
||||||
|
m_lnListHead.m_pNext->Remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Remove(CLink<T>* pLink) {
|
||||||
|
pLink->Remove();
|
||||||
|
m_lnFreeListHead.Insert(pLink);
|
||||||
|
}
|
||||||
|
|
||||||
|
CLink<T>* Next(CLink<T>* pCurrent) {
|
||||||
|
if(pCurrent == 0) {
|
||||||
|
pCurrent = &m_lnListHead;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pCurrent->m_pNext == &m_lnListTail) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return pCurrent->m_pNext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CLink<T> m_lnListHead; // 0-12
|
||||||
|
//head of the list of active links
|
||||||
|
CLink<T> m_lnListTail; // 12-24
|
||||||
|
//tail of the list of active links
|
||||||
|
CLink<T> m_lnFreeListHead; // 24-36
|
||||||
|
//head of the list of free links
|
||||||
|
CLink<T> m_lnFreeListTail; // 36-48
|
||||||
|
//tail of the list of free links
|
||||||
|
CLink<T>* m_plnLinks; // 48-52
|
||||||
|
//pointer to actual array of links
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
370
SilentPatch/Maths.h
Normal file
370
SilentPatch/Maths.h
Normal file
|
@ -0,0 +1,370 @@
|
||||||
|
#ifndef __MATHS__H
|
||||||
|
#define __MATHS__H
|
||||||
|
|
||||||
|
#define RAD_TO_DEG (180.0/M_PI)
|
||||||
|
#define DEG_TO_RAD (M_PI/180.0)
|
||||||
|
|
||||||
|
class CVector
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
float x, y, z;
|
||||||
|
|
||||||
|
CVector()
|
||||||
|
{}
|
||||||
|
|
||||||
|
CVector(float fX, float fY, float fZ=0.0f)
|
||||||
|
: x(fX), y(fY), z(fZ)
|
||||||
|
{}
|
||||||
|
|
||||||
|
CVector(const RwV3d& rwVec)
|
||||||
|
: x(rwVec.x), y(rwVec.y), z(rwVec.z)
|
||||||
|
{}
|
||||||
|
|
||||||
|
CVector& operator+=(const CVector& vec)
|
||||||
|
{ x += vec.x; y += vec.y; z += vec.z;
|
||||||
|
return *this; }
|
||||||
|
CVector& operator+=(const RwV3d& vec)
|
||||||
|
{ x += vec.x; y += vec.y; z += vec.z;
|
||||||
|
return *this; }
|
||||||
|
CVector& operator-=(const CVector& vec)
|
||||||
|
{ x -= vec.x; y -= vec.y; z -= vec.z;
|
||||||
|
return *this; }
|
||||||
|
CVector& operator-=(const RwV3d& vec)
|
||||||
|
{ x -= vec.x; y -= vec.y; z -= vec.z;
|
||||||
|
return *this; }
|
||||||
|
|
||||||
|
inline float Magnitude()
|
||||||
|
{ return sqrt(x * x + y * y + z * z); }
|
||||||
|
inline float MagnitudeSqr()
|
||||||
|
{ return x * x + y * y + z * z; }
|
||||||
|
inline CVector& Normalize()
|
||||||
|
{ float fInvLen = 1.0f / Magnitude(); x *= fInvLen; y *= fInvLen; z *= fInvLen; return *this; }
|
||||||
|
|
||||||
|
friend inline float DotProduct(const CVector& vec1, const CVector& vec2)
|
||||||
|
{ return vec1.x * vec2.x + vec1.x * vec2.y + vec1.z * vec2.z; }
|
||||||
|
friend inline CVector CrossProduct(const CVector& vec1, const CVector& vec2)
|
||||||
|
{ return CVector( vec1.y * vec2.z - vec1.z * vec2.y,
|
||||||
|
vec1.z * vec2.x - vec1.x * vec2.z,
|
||||||
|
vec1.x * vec2.y - vec1.y * vec2.x); }
|
||||||
|
|
||||||
|
friend inline CVector operator*(const CVector& in, float fMul)
|
||||||
|
{ return CVector(in.x * fMul, in.y * fMul, in.z * fMul); }
|
||||||
|
friend inline CVector operator+(const CVector& vec1, const CVector& vec2)
|
||||||
|
{ return CVector(vec1.x + vec2.x, vec1.y + vec2.y, vec1.z + vec2.z); }
|
||||||
|
friend inline CVector operator+(const CVector& vec1, const RwV3d& vec2)
|
||||||
|
{ return CVector(vec1.x + vec2.x, vec1.y + vec2.y, vec1.z + vec2.z); }
|
||||||
|
friend inline CVector operator-(const CVector& vec1, const CVector& vec2)
|
||||||
|
{ return CVector(vec1.x - vec2.x, vec1.y - vec2.y, vec1.z - vec2.z); }
|
||||||
|
friend inline CVector operator-(const CVector& vec1, const RwV3d& vec2)
|
||||||
|
{ return CVector(vec1.x - vec2.x, vec1.y - vec2.y, vec1.z - vec2.z); }
|
||||||
|
friend inline CVector operator-(const CVector& vec)
|
||||||
|
{ return CVector(-vec.x, -vec.y, -vec.z); }
|
||||||
|
};
|
||||||
|
|
||||||
|
class CVector2D
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
float x, y;
|
||||||
|
|
||||||
|
CVector2D()
|
||||||
|
{}
|
||||||
|
|
||||||
|
CVector2D(float fX, float fY)
|
||||||
|
: x(fX), y(fY)
|
||||||
|
{}
|
||||||
|
|
||||||
|
CVector2D& operator+=(const CVector2D& vec)
|
||||||
|
{ x += vec.x; y += vec.y;
|
||||||
|
return *this; }
|
||||||
|
CVector2D& operator-=(const CVector2D& vec)
|
||||||
|
{ x -= vec.x; y -= vec.y;
|
||||||
|
return *this; }
|
||||||
|
|
||||||
|
inline float Magnitude()
|
||||||
|
{ return sqrt(x * x + y * y); }
|
||||||
|
inline float MagnitudeSqr()
|
||||||
|
{ return x * x + y * y; }
|
||||||
|
inline CVector2D& Normalize()
|
||||||
|
{ float fInvLen = 1.0f / Magnitude(); x *= fInvLen; y *= fInvLen; return *this; }
|
||||||
|
|
||||||
|
friend inline float DotProduct(const CVector2D& vec1, const CVector2D& vec2)
|
||||||
|
{ return vec1.x * vec2.x + vec1.x * vec2.y; }
|
||||||
|
|
||||||
|
friend inline CVector2D operator*(const CVector2D& in, float fMul)
|
||||||
|
{ return CVector2D(in.x * fMul, in.y * fMul); }
|
||||||
|
friend inline CVector2D operator+(const CVector2D& vec1, const CVector2D& vec2)
|
||||||
|
{ return CVector2D(vec1.x + vec2.x, vec1.y + vec2.y); }
|
||||||
|
friend inline CVector2D operator-(const CVector2D& vec1, const CVector2D& vec2)
|
||||||
|
{ return CVector2D(vec1.x - vec2.x, vec1.y - vec2.y); }
|
||||||
|
friend inline CVector2D operator-(const CVector2D& vec)
|
||||||
|
{ return CVector2D(-vec.x, -vec.y); }
|
||||||
|
};
|
||||||
|
|
||||||
|
class CMatrix
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RwMatrix matrix;
|
||||||
|
RwMatrix* pMatrix;
|
||||||
|
BOOL haveRwMatrix;
|
||||||
|
|
||||||
|
public:
|
||||||
|
inline CMatrix()
|
||||||
|
: pMatrix(nullptr), haveRwMatrix(FALSE)
|
||||||
|
{}
|
||||||
|
|
||||||
|
inline CMatrix(RwMatrix* pMatrix, bool bHasMatrix=false)
|
||||||
|
: pMatrix(nullptr)
|
||||||
|
{ Attach(pMatrix, bHasMatrix); }
|
||||||
|
|
||||||
|
inline CMatrix(const CMatrix& theMatrix)
|
||||||
|
: pMatrix(nullptr), haveRwMatrix(FALSE), matrix(theMatrix.matrix)
|
||||||
|
{}
|
||||||
|
|
||||||
|
inline CMatrix(const CVector& vecRight, const CVector& vecUp, const CVector& vecAt, const CVector& vecPos)
|
||||||
|
{
|
||||||
|
matrix.right.x = vecRight.x;
|
||||||
|
matrix.right.y = vecRight.y;
|
||||||
|
matrix.right.z = vecRight.z;
|
||||||
|
|
||||||
|
matrix.up.x = vecUp.x;
|
||||||
|
matrix.up.y = vecUp.y;
|
||||||
|
matrix.up.z = vecUp.z;
|
||||||
|
|
||||||
|
matrix.at.x = vecAt.x;
|
||||||
|
matrix.at.y = vecAt.y;
|
||||||
|
matrix.at.z = vecAt.z;
|
||||||
|
|
||||||
|
matrix.pos.x = vecPos.x;
|
||||||
|
matrix.pos.y = vecPos.y;
|
||||||
|
matrix.pos.z = vecPos.z;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ~CMatrix()
|
||||||
|
{ if ( haveRwMatrix && pMatrix )
|
||||||
|
RwMatrixDestroy(pMatrix); }
|
||||||
|
|
||||||
|
friend inline CMatrix operator*(const CMatrix& Rot1, const CMatrix& Rot2)
|
||||||
|
{ return CMatrix( CVector(Rot1.matrix.right.x * Rot2.matrix.right.x + Rot1.matrix.right.y * Rot2.matrix.up.x + Rot1.matrix.right.z * Rot2.matrix.at.x + Rot2.matrix.pos.x,
|
||||||
|
Rot1.matrix.right.x * Rot2.matrix.right.y + Rot1.matrix.right.y * Rot2.matrix.up.y + Rot1.matrix.right.z * Rot2.matrix.at.y + Rot2.matrix.pos.y,
|
||||||
|
Rot1.matrix.right.x * Rot2.matrix.right.z + Rot1.matrix.right.y * Rot2.matrix.up.z + Rot1.matrix.right.z * Rot2.matrix.at.z + Rot2.matrix.pos.z),
|
||||||
|
CVector(Rot1.matrix.up.x * Rot2.matrix.right.x + Rot1.matrix.up.y * Rot2.matrix.up.x + Rot1.matrix.up.z * Rot2.matrix.at.x + Rot2.matrix.pos.x,
|
||||||
|
Rot1.matrix.up.x * Rot2.matrix.right.y + Rot1.matrix.up.y * Rot2.matrix.up.y + Rot1.matrix.up.z * Rot2.matrix.at.y + Rot2.matrix.pos.y,
|
||||||
|
Rot1.matrix.up.x * Rot2.matrix.right.z + Rot1.matrix.up.y * Rot2.matrix.up.z + Rot1.matrix.up.z * Rot2.matrix.at.z + Rot2.matrix.pos.z),
|
||||||
|
CVector(Rot1.matrix.at.x * Rot2.matrix.right.x + Rot1.matrix.at.y * Rot2.matrix.up.x + Rot1.matrix.at.z * Rot2.matrix.at.x + Rot2.matrix.pos.x,
|
||||||
|
Rot1.matrix.at.x * Rot2.matrix.right.y + Rot1.matrix.at.y * Rot2.matrix.up.y + Rot1.matrix.at.z * Rot2.matrix.at.y + Rot2.matrix.pos.y,
|
||||||
|
Rot1.matrix.at.x * Rot2.matrix.right.z + Rot1.matrix.at.y * Rot2.matrix.up.z + Rot1.matrix.at.z * Rot2.matrix.at.z + Rot2.matrix.pos.z),
|
||||||
|
CVector(Rot1.matrix.pos.x * Rot2.matrix.right.x + Rot1.matrix.pos.y * Rot2.matrix.up.x + Rot1.matrix.pos.z * Rot2.matrix.at.x + Rot2.matrix.pos.x,
|
||||||
|
Rot1.matrix.pos.x * Rot2.matrix.right.y + Rot1.matrix.pos.y * Rot2.matrix.up.y + Rot1.matrix.pos.z * Rot2.matrix.at.y + Rot2.matrix.pos.y,
|
||||||
|
Rot1.matrix.pos.x * Rot2.matrix.right.z + Rot1.matrix.pos.y * Rot2.matrix.up.z + Rot1.matrix.pos.z * Rot2.matrix.at.z + Rot2.matrix.pos.z)); };
|
||||||
|
|
||||||
|
friend inline CVector operator*(const CMatrix& matrix, const CVector& vec)
|
||||||
|
{ return CVector(matrix.matrix.up.x * vec.y + matrix.matrix.right.x * vec.x + matrix.matrix.at.x * vec.z + matrix.matrix.pos.x,
|
||||||
|
matrix.matrix.up.y * vec.y + matrix.matrix.right.y * vec.x + matrix.matrix.at.y * vec.z + matrix.matrix.pos.y,
|
||||||
|
matrix.matrix.up.z * vec.y + matrix.matrix.right.z * vec.x + matrix.matrix.at.z * vec.z + matrix.matrix.pos.z); };
|
||||||
|
|
||||||
|
inline CVector* GetRight()
|
||||||
|
{ return reinterpret_cast<CVector*>(&matrix.right); }
|
||||||
|
inline CVector* GetUp()
|
||||||
|
{ return reinterpret_cast<CVector*>(&matrix.up); }
|
||||||
|
inline CVector* GetAt()
|
||||||
|
{ return reinterpret_cast<CVector*>(&matrix.at); }
|
||||||
|
inline CVector* GetPos()
|
||||||
|
{ return reinterpret_cast<CVector*>(&matrix.pos); }
|
||||||
|
|
||||||
|
inline void SetTranslateOnly(float fX, float fY, float fZ)
|
||||||
|
{ matrix.pos.x = fX; matrix.pos.y = fY; matrix.pos.z = fZ; }
|
||||||
|
|
||||||
|
inline void SetRotateX(float fAngle)
|
||||||
|
{ SetRotateXOnly(fAngle); matrix.pos.x = 0.0f; matrix.pos.y = 0.0f; matrix.pos.z = 0.0f; }
|
||||||
|
inline void SetRotateY(float fAngle)
|
||||||
|
{ SetRotateYOnly(fAngle); matrix.pos.x = 0.0f; matrix.pos.y = 0.0f; matrix.pos.z = 0.0f; }
|
||||||
|
inline void SetRotateZ(float fAngle)
|
||||||
|
{ SetRotateZOnly(fAngle); matrix.pos.x = 0.0f; matrix.pos.y = 0.0f; matrix.pos.z = 0.0f; }
|
||||||
|
inline void SetRotate(float fAngleX, float fAngleY, float fAngleZ)
|
||||||
|
{ SetRotateOnly(fAngleX, fAngleY, fAngleZ); matrix.pos.x = 0.0f; matrix.pos.y = 0.0f; matrix.pos.z = 0.0f; }
|
||||||
|
inline void SetTranslate(float fX, float fY, float fZ)
|
||||||
|
{ matrix.right.x = 1.0f; matrix.right.y = 0.0f; matrix.right.z = 0.0f;
|
||||||
|
matrix.up.x = 0.0f; matrix.up.y = 1.0f; matrix.up.z = 0.0f;
|
||||||
|
matrix.at.x = 0.0f; matrix.at.y = 0.0f; matrix.at.z = 1.0f;
|
||||||
|
SetTranslateOnly(fX, fY, fZ); }
|
||||||
|
|
||||||
|
inline void SetUnity()
|
||||||
|
{
|
||||||
|
matrix.right.x = 1.0f; matrix.right.y = 0.0f; matrix.right.z = 0.0f;
|
||||||
|
matrix.up.x = 0.0f; matrix.up.y = 1.0f; matrix.up.z = 0.0f;
|
||||||
|
matrix.at.x = 0.0f; matrix.at.y = 0.0f; matrix.at.z = 1.0f;
|
||||||
|
matrix.pos.x = 0.0f; matrix.pos.y = 0.0f; matrix.pos.z = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void SetScale(float fScale)
|
||||||
|
{
|
||||||
|
matrix.right.x = fScale; matrix.right.y = 0.0f; matrix.right.z = 0.0f;
|
||||||
|
matrix.up.x = 0.0f; matrix.up.y = fScale; matrix.up.z = 0.0f;
|
||||||
|
matrix.at.x = 0.0f; matrix.at.y = 0.0f; matrix.at.z = fScale;
|
||||||
|
matrix.pos.x = 0.0f; matrix.pos.y = 0.0f; matrix.pos.z = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void RotateX(float fAngle)
|
||||||
|
{
|
||||||
|
CMatrix RotationMatrix;
|
||||||
|
RotationMatrix.SetRotateX(fAngle);
|
||||||
|
*this = *this * RotationMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void RotateY(float fAngle)
|
||||||
|
{
|
||||||
|
CMatrix RotationMatrix;
|
||||||
|
RotationMatrix.SetRotateY(fAngle);
|
||||||
|
*this = *this * RotationMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void RotateZ(float fAngle)
|
||||||
|
{
|
||||||
|
CMatrix RotationMatrix;
|
||||||
|
RotationMatrix.SetRotateZ(fAngle);
|
||||||
|
*this = *this * RotationMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Rotate(float fAngleX, float fAngleY, float fAngleZ)
|
||||||
|
{
|
||||||
|
CMatrix RotationMatrix;
|
||||||
|
RotationMatrix.SetRotate(fAngleX, fAngleY, fAngleZ);
|
||||||
|
*this = *this * RotationMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void SetRotateXOnly(float fAngle)
|
||||||
|
{
|
||||||
|
matrix.right.x = 1.0f;
|
||||||
|
matrix.right.y = 0.0f;
|
||||||
|
matrix.right.z = 0.0f;
|
||||||
|
|
||||||
|
matrix.up.x = 0.0f;
|
||||||
|
matrix.up.y = cos(fAngle);
|
||||||
|
matrix.up.z = sin(fAngle);
|
||||||
|
|
||||||
|
matrix.at.x = 0.0f;
|
||||||
|
matrix.at.y = -sin(fAngle);
|
||||||
|
matrix.at.z = cos(fAngle);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void SetRotateYOnly(float fAngle)
|
||||||
|
{
|
||||||
|
matrix.right.x = cos(fAngle);
|
||||||
|
matrix.right.y = 0.0f;
|
||||||
|
matrix.right.z = sin(fAngle);
|
||||||
|
|
||||||
|
matrix.up.x = 0.0f;
|
||||||
|
matrix.up.y = 1.0f;
|
||||||
|
matrix.up.z = 0.0f;
|
||||||
|
|
||||||
|
matrix.at.x = -sin(fAngle);
|
||||||
|
matrix.at.y = 0.0f;
|
||||||
|
matrix.at.z = cos(fAngle);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void SetRotateZOnly(float fAngle)
|
||||||
|
{
|
||||||
|
matrix.at.x = 0.0f;
|
||||||
|
matrix.at.y = 0.0f;
|
||||||
|
matrix.at.z = 1.0f;
|
||||||
|
|
||||||
|
matrix.up.x = -sin(fAngle);
|
||||||
|
matrix.up.y = cos(fAngle);
|
||||||
|
matrix.up.z = 0.0f;
|
||||||
|
|
||||||
|
matrix.right.x = cos(fAngle);
|
||||||
|
matrix.right.y = sin(fAngle);
|
||||||
|
matrix.right.z = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void SetRotateOnly(float fAngleX, float fAngleY, float fAngleZ)
|
||||||
|
{
|
||||||
|
matrix.right.x = cos(fAngleZ) * cos(fAngleY) - sin(fAngleZ) * sin(fAngleX) * sin(fAngleY);
|
||||||
|
matrix.right.y = cos(fAngleZ) * sin(fAngleX) * sin(fAngleY) + sin(fAngleZ) * cos(fAngleY);
|
||||||
|
matrix.right.z = -cos(fAngleX) * sin(fAngleY);
|
||||||
|
|
||||||
|
matrix.up.x = -sin(fAngleZ) * cos(fAngleX);
|
||||||
|
matrix.up.y = cos(fAngleZ) * cos(fAngleX);
|
||||||
|
matrix.up.z = sin(fAngleX);
|
||||||
|
|
||||||
|
matrix.at.x = sin(fAngleZ) * sin(fAngleX) * cos(fAngleY) + cos(fAngleZ) * sin(fAngleY);
|
||||||
|
matrix.at.y = sin(fAngleZ) * sin(fAngleY) - cos(fAngleZ) * sin(fAngleX) * cos(fAngleY);
|
||||||
|
matrix.at.z = cos(fAngleX) * cos(fAngleY);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Attach(RwMatrix* pMatrix, bool bHasMatrix)
|
||||||
|
{
|
||||||
|
if ( this->pMatrix && haveRwMatrix )
|
||||||
|
RwMatrixDestroy(this->pMatrix);
|
||||||
|
|
||||||
|
this->pMatrix = pMatrix;
|
||||||
|
haveRwMatrix = bHasMatrix;
|
||||||
|
|
||||||
|
Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void AttachRw(RwMatrix* pMatrix, bool bHasMatrix)
|
||||||
|
{
|
||||||
|
if ( this->pMatrix && haveRwMatrix )
|
||||||
|
RwMatrixDestroy(this->pMatrix);
|
||||||
|
|
||||||
|
this->pMatrix = pMatrix;
|
||||||
|
haveRwMatrix = bHasMatrix;
|
||||||
|
|
||||||
|
UpdateRW();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Detach()
|
||||||
|
{
|
||||||
|
if ( pMatrix )
|
||||||
|
{
|
||||||
|
if ( haveRwMatrix )
|
||||||
|
RwMatrixDestroy(pMatrix);
|
||||||
|
pMatrix = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void UpdateRW() const
|
||||||
|
{
|
||||||
|
if ( pMatrix )
|
||||||
|
UpdateRwMatrix(pMatrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Update()
|
||||||
|
{
|
||||||
|
UpdateMatrix(pMatrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void UpdateMatrix(RwMatrix* pMatrix)
|
||||||
|
{
|
||||||
|
matrix.right = pMatrix->right;
|
||||||
|
matrix.up = pMatrix->up;
|
||||||
|
matrix.at = pMatrix->at;
|
||||||
|
matrix.pos = pMatrix->pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void UpdateRwMatrix(RwMatrix* pMatrix) const
|
||||||
|
{
|
||||||
|
pMatrix->right = matrix.right;
|
||||||
|
pMatrix->up = matrix.up;
|
||||||
|
pMatrix->at = matrix.at;
|
||||||
|
pMatrix->pos = matrix.pos;
|
||||||
|
RwMatrixUpdate(pMatrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CopyToRwMatrix(RwMatrix* pMatrix) const
|
||||||
|
{
|
||||||
|
pMatrix->right = this->pMatrix->right;
|
||||||
|
pMatrix->up = this->pMatrix->up;
|
||||||
|
pMatrix->at = this->pMatrix->at;
|
||||||
|
pMatrix->pos = this->pMatrix->pos;
|
||||||
|
RwMatrixUpdate(pMatrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CopyOnlyMatrix(const CMatrix& from)
|
||||||
|
{
|
||||||
|
matrix = from.matrix;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
118
SilentPatch/MemoryMgr.h
Normal file
118
SilentPatch/MemoryMgr.h
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
#ifndef __MEMORYMGR
|
||||||
|
#define __MEMORYMGR
|
||||||
|
|
||||||
|
#define WRAPPER __declspec(naked)
|
||||||
|
#define EAXJMP(a) { _asm mov eax, a _asm jmp eax }
|
||||||
|
#define WRAPARG(a) UNREFERENCED_PARAMETER(a)
|
||||||
|
|
||||||
|
#define NOVMT __declspec(novtable)
|
||||||
|
#define SETVMT(a) *((DWORD_PTR*)this) = (DWORD_PTR)a
|
||||||
|
|
||||||
|
// A macro used to inject method pointers
|
||||||
|
#define InjectMethod(address, hook, nType) { void* __funcPtr; { _asm mov eax, offset hook _asm mov __funcPtr, eax } \
|
||||||
|
Memory::InjectHook(address, __funcPtr, nType); }
|
||||||
|
#define InjectMethodVP(address, hook, nType) { void* __funcPtr; { _asm mov eax, offset hook _asm mov __funcPtr, eax } \
|
||||||
|
MemoryVP::InjectHook(address, __funcPtr, nType); }
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PATCH_CALL,
|
||||||
|
PATCH_JUMP,
|
||||||
|
PATCH_NOTHING,
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace Memory
|
||||||
|
{
|
||||||
|
template<typename T, typename AT>
|
||||||
|
inline void Patch(AT address, T value)
|
||||||
|
{ *(T*)address = value; }
|
||||||
|
|
||||||
|
template<typename AT>
|
||||||
|
inline void Nop(AT address, unsigned int nCount)
|
||||||
|
// TODO: Finish multibyte nops
|
||||||
|
{ memset((void*)address, 0x90, nCount); }
|
||||||
|
|
||||||
|
template<typename AT, typename HT>
|
||||||
|
inline void InjectHook(AT address, HT hook, unsigned int nType=PATCH_NOTHING)
|
||||||
|
{
|
||||||
|
switch ( nType )
|
||||||
|
{
|
||||||
|
case PATCH_JUMP:
|
||||||
|
*(BYTE*)address = 0xE9;
|
||||||
|
break;
|
||||||
|
case PATCH_CALL:
|
||||||
|
*(BYTE*)address = 0xE8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*(DWORD*)((DWORD)address + 1) = (DWORD)hook - (DWORD)address - 5;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace MemoryVP
|
||||||
|
{
|
||||||
|
template<typename T, typename AT>
|
||||||
|
inline void Patch(AT address, T value)
|
||||||
|
{
|
||||||
|
DWORD dwProtect[2];
|
||||||
|
VirtualProtect((void*)address, sizeof(T), PAGE_EXECUTE_READWRITE, &dwProtect[0]);
|
||||||
|
*(T*)address = value;
|
||||||
|
VirtualProtect((void*)address, sizeof(T), dwProtect[0], &dwProtect[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename AT>
|
||||||
|
inline void Nop(AT address, unsigned int nCount)
|
||||||
|
// TODO: Finish multibyte nops
|
||||||
|
{
|
||||||
|
DWORD dwProtect[2];
|
||||||
|
VirtualProtect((void*)address, nCount, PAGE_EXECUTE_READWRITE, &dwProtect[0]);
|
||||||
|
memset((void*)address, 0x90, nCount);
|
||||||
|
VirtualProtect((void*)address, nCount, dwProtect[0], &dwProtect[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename AT, typename HT>
|
||||||
|
inline void InjectHook(AT address, HT hook, unsigned int nType=PATCH_NOTHING)
|
||||||
|
{
|
||||||
|
DWORD dwProtect[2];
|
||||||
|
switch ( nType )
|
||||||
|
{
|
||||||
|
case PATCH_JUMP:
|
||||||
|
VirtualProtect((void*)address, 5, PAGE_EXECUTE_READWRITE, &dwProtect[0]);
|
||||||
|
*(BYTE*)address = 0xE9;
|
||||||
|
break;
|
||||||
|
case PATCH_CALL:
|
||||||
|
VirtualProtect((void*)address, 5, PAGE_EXECUTE_READWRITE, &dwProtect[0]);
|
||||||
|
*(BYTE*)address = 0xE8;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
VirtualProtect((void*)((DWORD)address + 1), 4, PAGE_EXECUTE_READWRITE, &dwProtect[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*(DWORD*)((DWORD)address + 1) = (DWORD)hook - (DWORD)address - 5;
|
||||||
|
if ( nType == PATCH_NOTHING )
|
||||||
|
VirtualProtect((void*)((DWORD)address + 1), 4, dwProtect[0], &dwProtect[1]);
|
||||||
|
else
|
||||||
|
VirtualProtect((void*)address, 5, dwProtect[0], &dwProtect[1]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Old code, remove asap
|
||||||
|
#define patch(a, v, s) _patch((void*)(a), (DWORD)(v), (s))
|
||||||
|
#define patchf(a, v) _patch((void*)(a), (float)(v))
|
||||||
|
#define nop(a, v) _nop((void*)(a), (v))
|
||||||
|
#define call(a, v, bAddCall) _call((void*)(a), (DWORD)(v), (bAddCall))
|
||||||
|
#define charptr(a, v) _charptr((void*)(a), (const char*)(v))
|
||||||
|
|
||||||
|
__declspec(deprecated) inline void _patch(void* pAddress, DWORD data, DWORD iSize)
|
||||||
|
{
|
||||||
|
switch(iSize)
|
||||||
|
{
|
||||||
|
case 1: *(BYTE*)pAddress = (BYTE)data;
|
||||||
|
break;
|
||||||
|
case 2: *(WORD*)pAddress = (WORD)data;
|
||||||
|
break;
|
||||||
|
case 4: *(DWORD*)pAddress = (DWORD)data;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
41
SilentPatch/ModelInfoSA.cpp
Normal file
41
SilentPatch/ModelInfoSA.cpp
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#include "StdAfx.h"
|
||||||
|
#include "ModelInfoSA.h"
|
||||||
|
|
||||||
|
void CVehicleModelInfo::FindEditableMaterialList()
|
||||||
|
{
|
||||||
|
std::pair<CVehicleModelInfo*,int> MatsPair = std::make_pair(this, 0);
|
||||||
|
|
||||||
|
RpClumpForAllAtomics(reinterpret_cast<RpClump*>(pRwObject), GetEditableMaterialListCB, &MatsPair);
|
||||||
|
|
||||||
|
if ( m_pVehicleStruct->m_nNumExtras > 0 )
|
||||||
|
{
|
||||||
|
for ( int i = 0; i < m_pVehicleStruct->m_nNumExtras; i++ )
|
||||||
|
GetEditableMaterialListCB(m_pVehicleStruct->m_apExtras[i], &MatsPair);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nPrimaryColor = -1;
|
||||||
|
m_nSecondaryColor = -1;
|
||||||
|
m_nTertiaryColor = -1;
|
||||||
|
m_nQuaternaryColor = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
RpAtomic* CVehicleModelInfo::GetEditableMaterialListCB(RpAtomic* pAtomic, void* pData)
|
||||||
|
{
|
||||||
|
RpGeometryForAllMaterials(RpAtomicGetGeometry(pAtomic), GetEditableMaterialListCB, pData);
|
||||||
|
return pAtomic;
|
||||||
|
}
|
||||||
|
|
||||||
|
RpMaterial* CVehicleModelInfo::GetEditableMaterialListCB(RpMaterial* pMaterial, void* pData)
|
||||||
|
{
|
||||||
|
if ( RpMaterialGetTexture(pMaterial) )
|
||||||
|
{
|
||||||
|
if ( !strncmp(RwTextureGetName(RpMaterialGetTexture(pMaterial)), "vehiclegrunge256", 16) )
|
||||||
|
{
|
||||||
|
std::pair<CVehicleModelInfo*,int>* pMats = static_cast<std::pair<CVehicleModelInfo*,int>*>(pData);
|
||||||
|
|
||||||
|
if ( pMats->second < 32 )
|
||||||
|
pMats->first->m_apDirtMaterials[pMats->second++] = pMaterial;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pMaterial;
|
||||||
|
}
|
282
SilentPatch/ModelInfoSA.h
Normal file
282
SilentPatch/ModelInfoSA.h
Normal file
|
@ -0,0 +1,282 @@
|
||||||
|
#ifndef __MODELINFO
|
||||||
|
#define __MODELINFO
|
||||||
|
|
||||||
|
#include "General.h"
|
||||||
|
|
||||||
|
// TODO: Move to a separate file?
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
CVector vecMin;
|
||||||
|
CVector vecMax;
|
||||||
|
CVector vecOffset;
|
||||||
|
FLOAT fRadius;
|
||||||
|
} CBoundingBox;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
CVector vecCenter;
|
||||||
|
float fRadius;
|
||||||
|
} CColSphere;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
CVector min;
|
||||||
|
CVector max;
|
||||||
|
} CColBox;
|
||||||
|
|
||||||
|
|
||||||
|
/*typedef struct
|
||||||
|
{
|
||||||
|
unsigned short v1;
|
||||||
|
unsigned short v2;
|
||||||
|
unsigned short v3;
|
||||||
|
EColSurface material;
|
||||||
|
CColLighting lighting;
|
||||||
|
} CColTriangle;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
BYTE pad0 [ 12 ];
|
||||||
|
} CColTrianglePlane;*/
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char version[4];
|
||||||
|
DWORD size;
|
||||||
|
char name[0x18];
|
||||||
|
} ColModelFileHeader;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
WORD numColSpheres;
|
||||||
|
WORD numColBoxes;
|
||||||
|
WORD numColTriangles;
|
||||||
|
BYTE ucNumWheels;
|
||||||
|
BYTE pad3;
|
||||||
|
CColSphere* pColSpheres;
|
||||||
|
CColBox* pColBoxes;
|
||||||
|
void* pSuspensionLines;
|
||||||
|
void* pUnknown;
|
||||||
|
void* pColTriangles;
|
||||||
|
void* pColTrianglePlanes;
|
||||||
|
} CColData;
|
||||||
|
|
||||||
|
class CColModel
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CBoundingBox boundingBox;
|
||||||
|
BYTE level;
|
||||||
|
BYTE unknownFlags;
|
||||||
|
BYTE pad [ 2 ];
|
||||||
|
CColData* pColData;
|
||||||
|
|
||||||
|
public:
|
||||||
|
~CColModel()
|
||||||
|
{
|
||||||
|
// Dirty!
|
||||||
|
((void(__thiscall*)(CColModel*))0x40F700)(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator delete(void* ptr);
|
||||||
|
};
|
||||||
|
|
||||||
|
class C2dEffect
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CVector vecPos;
|
||||||
|
BYTE bType;
|
||||||
|
DWORD nCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CTimeInfo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
unsigned char bTimeOn, bTimeOff;
|
||||||
|
signed short nPairedModel;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CTimeInfo(signed short nModel)
|
||||||
|
: nPairedModel(nModel)
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct UpgradePosnDesc
|
||||||
|
{
|
||||||
|
CVector m_vPosition;
|
||||||
|
CVector m_qRotation;
|
||||||
|
float imag;
|
||||||
|
int m_dwParentComponentId;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CAtomicModelInfo;
|
||||||
|
class CDamageAtomicModelInfo;
|
||||||
|
class CLodAtomicModelInfo;
|
||||||
|
|
||||||
|
class CBaseModelInfo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
unsigned int ulHashKey; // +4 Generated by CKeyGen::GetUppercaseKey(char const *) called by CBaseModelInfo::SetModelName(char const *)
|
||||||
|
unsigned short usNumberOfRefs: 16; // +8
|
||||||
|
short usTextureDictionary: 16; // +10
|
||||||
|
unsigned char ucAlpha: 8; // +12
|
||||||
|
|
||||||
|
unsigned char ucNumOf2DEffects: 8; // +13
|
||||||
|
unsigned short usUnknown: 16; // +14 Something with 2d effects
|
||||||
|
|
||||||
|
unsigned char ucDynamicIndex: 8; // +16
|
||||||
|
|
||||||
|
unsigned char dwUnknownFlag9: 1; // +17
|
||||||
|
unsigned char dwUnknownFlag10: 1;
|
||||||
|
unsigned char dwUnknownFlag11: 1;
|
||||||
|
unsigned char dwUnknownFlag12: 1;
|
||||||
|
unsigned char dwUnknownFlag13: 1;
|
||||||
|
unsigned char dwUnknownFlag14: 1;
|
||||||
|
unsigned char dwUnknownFlag15: 1;
|
||||||
|
unsigned char dwUnknownFlag16: 1;
|
||||||
|
|
||||||
|
// Flags used by CBaseModelInfo
|
||||||
|
unsigned char bHasBeenPreRendered: 1; // +18
|
||||||
|
unsigned char bAlphaTransparency: 1;
|
||||||
|
unsigned char bIsLod: 1;
|
||||||
|
unsigned char bDontCastShadowsOn: 1;
|
||||||
|
unsigned char bDontWriteZBuffer: 1;
|
||||||
|
unsigned char bDrawAdditive: 1;
|
||||||
|
unsigned char bDrawLast: 1;
|
||||||
|
unsigned char bDoWeOwnTheColModel: 1;
|
||||||
|
|
||||||
|
unsigned char dwUnknownFlag25: 1; // +19
|
||||||
|
unsigned char dwUnknownFlag26: 1;
|
||||||
|
unsigned char dwUnknownFlag27: 1;
|
||||||
|
unsigned char bSwaysInWind: 1;
|
||||||
|
unsigned char bCollisionWasStreamedWithModel: 1; // CClumpModelInfo::SetCollisionWasStreamedWithModel(unsigned int)
|
||||||
|
unsigned char bDontCollideWithFlyer: 1; // CAtomicModelInfo::SetDontCollideWithFlyer(unsigned int)
|
||||||
|
unsigned char bHasComplexHierarchy: 1; // CClumpModelInfo::SetHasComplexHierarchy(unsigned int)
|
||||||
|
unsigned char bWetRoadReflection: 1; // CAtomicModelInfo::SetWetRoadReflection(unsigned int)
|
||||||
|
CColModel* pColModel; // +20 CColModel: public CBoundingBox
|
||||||
|
float fLodDistanceUnscaled; // +24 Scaled is this value multiplied with flt_B6F118
|
||||||
|
RwObject* pRwObject; // +28
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~CBaseModelInfo() {}
|
||||||
|
virtual CAtomicModelInfo* AsAtomicModelInfoPtr() { return nullptr; }
|
||||||
|
virtual CDamageAtomicModelInfo* AsDamageAtomicModelInfoPtr() { return nullptr; }
|
||||||
|
virtual CLodAtomicModelInfo* AsLodAtomicModelInfoPtr() { return nullptr; }
|
||||||
|
virtual unsigned char GetModelType()=0;
|
||||||
|
virtual CTimeInfo* GetTimeInfo() { return nullptr; }
|
||||||
|
virtual void Init();
|
||||||
|
virtual void Shutdown();
|
||||||
|
virtual void DeleteRwObject()=0;
|
||||||
|
virtual int GetRwModelType()=0;
|
||||||
|
virtual RpAtomic* CreateInstance_(RwMatrix* pMatrix)=0;
|
||||||
|
virtual RpAtomic* CreateInstance()=0;
|
||||||
|
virtual void SetAnimFile(const char* pName) { UNREFERENCED_PARAMETER(pName); }
|
||||||
|
virtual void ConvertAnimFileIndex() {}
|
||||||
|
virtual int GetAnimFileIndex() { return -1; }
|
||||||
|
|
||||||
|
CBaseModelInfo()
|
||||||
|
: usNumberOfRefs(0), usTextureDictionary(-1)
|
||||||
|
{}
|
||||||
|
|
||||||
|
inline CColModel* GetColModel() { return pColModel; }
|
||||||
|
inline unsigned int GetHash() { return ulHashKey; }
|
||||||
|
inline short GetTextureDict() { return usTextureDictionary; }
|
||||||
|
|
||||||
|
void RecalcDrawDistance(float fOldDist);
|
||||||
|
void SetTexDictionary(const char* pDict);
|
||||||
|
void AddRef();
|
||||||
|
};
|
||||||
|
|
||||||
|
class CClumpModelInfo : public CBaseModelInfo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int nAnimIndex;
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual unsigned char GetModelType() override { return 5; }
|
||||||
|
virtual void Init() override;
|
||||||
|
virtual void DeleteRwObject() override;
|
||||||
|
virtual int GetRwModelType() override { return rpCLUMP; }
|
||||||
|
virtual RpAtomic* CreateInstance_(RwMatrix* pMatrix) override;
|
||||||
|
virtual RpAtomic* CreateInstance() override;
|
||||||
|
virtual void SetAnimFile(const char* pName) override;
|
||||||
|
virtual void ConvertAnimFileIndex() override;
|
||||||
|
virtual int GetAnimFileIndex() override { return nAnimIndex; }
|
||||||
|
virtual CColModel* GetBoundingBox() { return pColModel; }
|
||||||
|
virtual void SetClump(RpClump* pClump);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CVehicleModelInfo : public CClumpModelInfo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RpMaterial* m_pPlateMaterial;
|
||||||
|
char m_plateText[8];
|
||||||
|
char field_30;
|
||||||
|
unsigned char m_nPlateType;
|
||||||
|
char m_nGameName[8];
|
||||||
|
unsigned int m_dwType;
|
||||||
|
float m_fWheelSizeFront;
|
||||||
|
float m_fWheelSizeRear;
|
||||||
|
unsigned short m_wWheelModelId;
|
||||||
|
unsigned short m_wHandlingIndex;
|
||||||
|
unsigned char m_nNumDoors;
|
||||||
|
unsigned char m_nClass;
|
||||||
|
unsigned char m_nFlags;
|
||||||
|
unsigned char m_nWheelUpgradeClass;
|
||||||
|
unsigned short m_wTimesUsed;
|
||||||
|
unsigned short m_wFrq;
|
||||||
|
union{
|
||||||
|
unsigned int m_dwCompRules;
|
||||||
|
struct{
|
||||||
|
unsigned int m_nExtraA_comp1 : 4;
|
||||||
|
unsigned int m_nExtraA_comp2 : 4;
|
||||||
|
unsigned int m_nExtraA_comp3 : 4;
|
||||||
|
unsigned int m_nExtraA_rule : 4;
|
||||||
|
unsigned int m_nExtraB_comp1 : 4;
|
||||||
|
unsigned int m_nExtraB_comp2 : 4;
|
||||||
|
unsigned int m_nExtraB_comp3 : 4;
|
||||||
|
unsigned int m_nExtraB_rule : 4;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
float m_fBikeSteerAngle;
|
||||||
|
|
||||||
|
class CVehicleStructure{
|
||||||
|
public:
|
||||||
|
CVector m_avDummyPosn[15];
|
||||||
|
UpgradePosnDesc m_aUpgrades[18];
|
||||||
|
RpAtomic* m_apExtras[6];
|
||||||
|
unsigned char m_nNumExtras;
|
||||||
|
unsigned int m_dwMaskComponentsDamagable;
|
||||||
|
} *m_pVehicleStruct;
|
||||||
|
|
||||||
|
char field_60[464];
|
||||||
|
RpMaterial* m_apDirtMaterials[32];
|
||||||
|
unsigned char m_anPrimaryColors[8];
|
||||||
|
unsigned char m_anSecondaryColors[8];
|
||||||
|
unsigned char m_anTertiaryColors[8];
|
||||||
|
unsigned char m_anQuaternaryColors[8];
|
||||||
|
unsigned char m_nNumColorVariations;
|
||||||
|
unsigned char m_nLastColorVariation;
|
||||||
|
signed char m_nPrimaryColor;
|
||||||
|
signed char m_nSecondaryColor;
|
||||||
|
signed char m_nTertiaryColor;
|
||||||
|
signed char m_nQuaternaryColor;
|
||||||
|
short m_awUpgrades[18];
|
||||||
|
short m_awRemapTxds[5];
|
||||||
|
class CAnimBlock* m_pAnimBlock;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void FindEditableMaterialList();
|
||||||
|
|
||||||
|
static RpAtomic* GetEditableMaterialListCB(RpAtomic* pAtomic, void* pData);
|
||||||
|
static RpMaterial* GetEditableMaterialListCB(RpMaterial* pMaterial, void* pData);
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(CBaseModelInfo) == 0x20, "Wrong size: CBaseModelInfo");
|
||||||
|
static_assert(sizeof(CClumpModelInfo) == 0x24, "Wrong size: CClumpModelInfo");
|
||||||
|
static_assert(sizeof(CVehicleModelInfo) == 0x308, "Wrong size: CvehicleModelInfo");
|
||||||
|
|
||||||
|
#endif
|
1
SilentPatch/StdAfx.cpp
Normal file
1
SilentPatch/StdAfx.cpp
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#include "StdAfx.h"
|
25
SilentPatch/StdAfx.h
Normal file
25
SilentPatch/StdAfx.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#pragma warning(disable:4481) // nonstandard extension used: override specifier 'override'
|
||||||
|
#pragma warning(disable:4401) // member is bit field
|
||||||
|
#pragma warning(disable:4733) // handler not registered as safe handler
|
||||||
|
#pragma warning(disable:4725) // instruction may be inaccurate on some Pentiums
|
||||||
|
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
#define _USE_MATH_DEFINES
|
||||||
|
|
||||||
|
#define WINVER 0x0501
|
||||||
|
#define _WIN32_WINNT 0x0501
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <limits>
|
||||||
|
#include <utility>
|
||||||
|
#include <mmsystem.h>
|
||||||
|
|
||||||
|
#define RwEngineInstance (*rwengine)
|
||||||
|
#define RWFRAMESTATICPLUGINSSIZE 24
|
||||||
|
|
||||||
|
#include <rwcore.h>
|
||||||
|
#include <rpworld.h>
|
||||||
|
|
||||||
|
#include "MemoryMgr.h"
|
||||||
|
#include "Maths.h"
|
185
SilentPatch/Timer.cpp
Normal file
185
SilentPatch/Timer.cpp
Normal file
|
@ -0,0 +1,185 @@
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
#include "Timer.h"
|
||||||
|
|
||||||
|
float* CTimer::ms_fTimeScale;
|
||||||
|
float* CTimer::ms_fTimeStep;
|
||||||
|
float* CTimer::ms_fTimeStepNotClipped;
|
||||||
|
bool* CTimer::m_UserPause;
|
||||||
|
bool* CTimer::m_CodePause;
|
||||||
|
int* CTimer::m_snTimeInMilliseconds;
|
||||||
|
int* CTimer::m_snPreviousTimeInMilliseconds;
|
||||||
|
int* CTimer::m_snTimeInMillisecondsNonClipped;
|
||||||
|
int* CTimer::m_snTimeInMillisecondsPauseMode;
|
||||||
|
unsigned int* CTimer::m_FrameCounter;
|
||||||
|
|
||||||
|
static gtaTimer timerFunction;
|
||||||
|
static unsigned int suspendDepth;
|
||||||
|
static long long timerFreq;
|
||||||
|
static long long oldTime, suspendTime;
|
||||||
|
|
||||||
|
static long long cyclesTime, cyclesTimeNonClipped, cyclesTimePauseMode, cyclesPreviousTime;
|
||||||
|
|
||||||
|
static long long QPC()
|
||||||
|
{
|
||||||
|
LARGE_INTEGER Counter;
|
||||||
|
QueryPerformanceCounter(&Counter);
|
||||||
|
return Counter.QuadPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long long OldTimer()
|
||||||
|
{
|
||||||
|
TIMECAPS caps;
|
||||||
|
long long nTime;
|
||||||
|
|
||||||
|
timeGetDevCaps(&caps, sizeof(TIMECAPS));
|
||||||
|
timeBeginPeriod(caps.wPeriodMin);
|
||||||
|
nTime = timeGetTime();
|
||||||
|
timeEndPeriod(caps.wPeriodMin);
|
||||||
|
return nTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void InitTimerFunc()
|
||||||
|
{
|
||||||
|
if ( timerFunction )
|
||||||
|
return;
|
||||||
|
|
||||||
|
LARGE_INTEGER Frequency;
|
||||||
|
if ( QueryPerformanceFrequency(&Frequency) )
|
||||||
|
{
|
||||||
|
timerFreq = Frequency.QuadPart / 1000;
|
||||||
|
timerFunction = QPC;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
timerFreq = 1;
|
||||||
|
timerFunction = OldTimer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void (__stdcall *AudioResetTimers)(unsigned int);
|
||||||
|
extern bool* bSnapShotActive;
|
||||||
|
|
||||||
|
void CTimer::Initialise()
|
||||||
|
{
|
||||||
|
suspendDepth = 0;
|
||||||
|
*ms_fTimeScale = *ms_fTimeStep = 1.0f;
|
||||||
|
*m_UserPause = false;
|
||||||
|
*m_CodePause = false;
|
||||||
|
*m_snTimeInMilliseconds = 0;
|
||||||
|
*m_snPreviousTimeInMilliseconds = 0;
|
||||||
|
*m_snTimeInMillisecondsNonClipped = 0;
|
||||||
|
*m_FrameCounter = 0;
|
||||||
|
|
||||||
|
InitTimerFunc();
|
||||||
|
|
||||||
|
oldTime = timerFunction();
|
||||||
|
AudioResetTimers(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTimer::Suspend()
|
||||||
|
{
|
||||||
|
if ( suspendDepth++ == 0 )
|
||||||
|
{
|
||||||
|
#ifdef SILENTPATCH_VC_VER
|
||||||
|
// MVL fix
|
||||||
|
InitTimerFunc();
|
||||||
|
#endif
|
||||||
|
suspendTime = timerFunction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTimer::Resume()
|
||||||
|
{
|
||||||
|
if ( --suspendDepth == 0 )
|
||||||
|
{
|
||||||
|
#ifdef SILENTPATCH_VC_VER
|
||||||
|
// MVL fix
|
||||||
|
InitTimerFunc();
|
||||||
|
#endif
|
||||||
|
oldTime = timerFunction() - suspendTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int CTimer::GetCyclesPerFrame()
|
||||||
|
{
|
||||||
|
#ifdef SILENTPATCH_VC_VER
|
||||||
|
// MVL fix
|
||||||
|
InitTimerFunc();
|
||||||
|
#endif
|
||||||
|
return static_cast<unsigned int>(timerFunction() - oldTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int CTimer::GetCyclesPerMillisecond()
|
||||||
|
{
|
||||||
|
return static_cast<unsigned int>(timerFreq);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTimer::Update()
|
||||||
|
{
|
||||||
|
#ifdef SILENTPATCH_VC_VER
|
||||||
|
// CTimer::Initialise workaround
|
||||||
|
static bool bIntialisedIt = false;
|
||||||
|
|
||||||
|
if ( !bIntialisedIt )
|
||||||
|
{
|
||||||
|
Initialise();
|
||||||
|
bIntialisedIt = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
*m_snPreviousTimeInMilliseconds = *m_snTimeInMilliseconds;
|
||||||
|
cyclesPreviousTime = cyclesTime;
|
||||||
|
|
||||||
|
long long nCurTime;
|
||||||
|
float nDelta;
|
||||||
|
|
||||||
|
nCurTime = timerFunction();
|
||||||
|
nDelta = (nCurTime - oldTime) * *ms_fTimeScale;
|
||||||
|
oldTime = nCurTime;
|
||||||
|
|
||||||
|
//*m_snTimeInMillisecondsPauseMode += nDelta;
|
||||||
|
cyclesTimePauseMode += static_cast<long long>(nDelta);
|
||||||
|
|
||||||
|
if ( *m_UserPause || *m_CodePause )
|
||||||
|
*ms_fTimeStep = 0.0f;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*ms_fTimeStep = (nDelta/timerFreq) * 0.05f;
|
||||||
|
cyclesTime += static_cast<long long>(nDelta);
|
||||||
|
cyclesTimeNonClipped += static_cast<long long>(nDelta);
|
||||||
|
//*m_snTimeInMilliseconds += nDelta;
|
||||||
|
//*m_snTimeInMillisecondsNonClipped += nDelta;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SILENTPATCH_III_VER
|
||||||
|
if ( *ms_fTimeStep < 0.01f && !*m_UserPause && !*m_CodePause )
|
||||||
|
#else
|
||||||
|
if ( *ms_fTimeStep < 0.01f && !*m_UserPause && !*m_CodePause && !*bSnapShotActive )
|
||||||
|
#endif
|
||||||
|
*ms_fTimeStep = 0.01f;
|
||||||
|
|
||||||
|
*ms_fTimeStepNotClipped = *ms_fTimeStep;
|
||||||
|
|
||||||
|
if ( *ms_fTimeStep > 3.0f )
|
||||||
|
*ms_fTimeStep = 3.0f;
|
||||||
|
|
||||||
|
/*if ( *m_snTimeInMilliseconds - *m_snPreviousTimeInMilliseconds > 60 )
|
||||||
|
*m_snTimeInMilliseconds = *m_snPreviousTimeInMilliseconds + 60;*/
|
||||||
|
if ( cyclesTime - cyclesPreviousTime > 60 * timerFreq )
|
||||||
|
cyclesTime = cyclesPreviousTime + (60 * timerFreq);
|
||||||
|
|
||||||
|
*m_snTimeInMillisecondsPauseMode = static_cast<int>(cyclesTimePauseMode / timerFreq);
|
||||||
|
*m_snTimeInMilliseconds = static_cast<int>(cyclesTime / timerFreq);
|
||||||
|
*m_snTimeInMillisecondsNonClipped = static_cast<int>(cyclesTimeNonClipped / timerFreq);
|
||||||
|
|
||||||
|
++(*m_FrameCounter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTimer::RecoverFromSave()
|
||||||
|
{
|
||||||
|
cyclesTime = *m_snTimeInMilliseconds * timerFreq;
|
||||||
|
cyclesPreviousTime = *m_snPreviousTimeInMilliseconds * timerFreq;
|
||||||
|
cyclesTimePauseMode = *m_snTimeInMillisecondsPauseMode * timerFreq;
|
||||||
|
cyclesTimeNonClipped = *m_snTimeInMillisecondsNonClipped * timerFreq;
|
||||||
|
}
|
30
SilentPatch/Timer.h
Normal file
30
SilentPatch/Timer.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef __TIMER
|
||||||
|
#define __TIMER
|
||||||
|
|
||||||
|
typedef long long(*gtaTimer)();
|
||||||
|
|
||||||
|
class CTimer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static float* ms_fTimeScale;
|
||||||
|
static float* ms_fTimeStep;
|
||||||
|
static float* ms_fTimeStepNotClipped;
|
||||||
|
static bool* m_UserPause;
|
||||||
|
static bool* m_CodePause;
|
||||||
|
static int* m_snTimeInMilliseconds;
|
||||||
|
static int* m_snPreviousTimeInMilliseconds;
|
||||||
|
static int* m_snTimeInMillisecondsNonClipped;
|
||||||
|
static int* m_snTimeInMillisecondsPauseMode;
|
||||||
|
static unsigned int* m_FrameCounter;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void Initialise();
|
||||||
|
static void Suspend();
|
||||||
|
static void Resume();
|
||||||
|
static unsigned int GetCyclesPerFrame();
|
||||||
|
static unsigned int GetCyclesPerMillisecond();
|
||||||
|
static void Update();
|
||||||
|
static void RecoverFromSave();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
120
SilentPatch/Vehicle.cpp
Normal file
120
SilentPatch/Vehicle.cpp
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
#include "Vehicle.h"
|
||||||
|
#include "Timer.h"
|
||||||
|
|
||||||
|
WRAPPER void CVehicle::SetComponentAtomicAlpha(RpAtomic* pAtomic, int nAlpha) { WRAPARG(pAtomic); WRAPARG(nAlpha); EAXJMP(0x6D2960); }
|
||||||
|
WRAPPER void CVehicle::Render() { EAXJMP(0x6D0E60); }
|
||||||
|
|
||||||
|
static RwObject* GetCurrentAtomicObjectCB(RwObject* pObject, void* data)
|
||||||
|
{
|
||||||
|
if ( RpAtomicGetFlags(pObject) & rpATOMICRENDER )
|
||||||
|
*static_cast<RwObject**>(data) = pObject;
|
||||||
|
return pObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CHeli::Render()
|
||||||
|
{
|
||||||
|
double dRotorsSpeed, dMovingRotorSpeed;
|
||||||
|
|
||||||
|
m_nTimeTillWeNeedThisCar = *CTimer::m_snTimeInMilliseconds + 3000;
|
||||||
|
|
||||||
|
if ( m_fRotorSpeed > 0.0 )
|
||||||
|
dRotorsSpeed = min(1.7 * (1.0/0.22) * m_fRotorSpeed, 1.5);
|
||||||
|
else
|
||||||
|
dRotorsSpeed = 0.0;
|
||||||
|
|
||||||
|
dMovingRotorSpeed = dRotorsSpeed - 0.4;
|
||||||
|
if ( dMovingRotorSpeed < 0.0 )
|
||||||
|
dMovingRotorSpeed = 0.0;
|
||||||
|
|
||||||
|
int nStaticRotorAlpha = static_cast<int>(min((1.5-dRotorsSpeed) * 255.0, 255));
|
||||||
|
int nMovingRotorAlpha = static_cast<int>(min(dMovingRotorSpeed * 175.0, 175));
|
||||||
|
|
||||||
|
if ( m_pCarNode[11] )
|
||||||
|
{
|
||||||
|
RpAtomic* pOutAtomic = nullptr;
|
||||||
|
RwFrameForAllObjects(m_pCarNode[11], GetCurrentAtomicObjectCB, &pOutAtomic);
|
||||||
|
if ( pOutAtomic )
|
||||||
|
SetComponentAtomicAlpha(pOutAtomic, nStaticRotorAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m_pCarNode[13] )
|
||||||
|
{
|
||||||
|
RpAtomic* pOutAtomic = nullptr;
|
||||||
|
RwFrameForAllObjects(m_pCarNode[13], GetCurrentAtomicObjectCB, &pOutAtomic);
|
||||||
|
if ( pOutAtomic )
|
||||||
|
SetComponentAtomicAlpha(pOutAtomic, nStaticRotorAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m_pCarNode[12] )
|
||||||
|
{
|
||||||
|
RpAtomic* pOutAtomic = nullptr;
|
||||||
|
RwFrameForAllObjects(m_pCarNode[12], GetCurrentAtomicObjectCB, &pOutAtomic);
|
||||||
|
if ( pOutAtomic )
|
||||||
|
SetComponentAtomicAlpha(pOutAtomic, nMovingRotorAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m_pCarNode[14] )
|
||||||
|
{
|
||||||
|
RpAtomic* pOutAtomic = nullptr;
|
||||||
|
RwFrameForAllObjects(m_pCarNode[14], GetCurrentAtomicObjectCB, &pOutAtomic);
|
||||||
|
if ( pOutAtomic )
|
||||||
|
SetComponentAtomicAlpha(pOutAtomic, nMovingRotorAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
CEntity::Render();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPlane::Render()
|
||||||
|
{
|
||||||
|
double dRotorsSpeed, dMovingRotorSpeed;
|
||||||
|
|
||||||
|
m_nTimeTillWeNeedThisCar = *CTimer::m_snTimeInMilliseconds + 3000;
|
||||||
|
|
||||||
|
if ( m_fPropellerSpeed > 0.0 )
|
||||||
|
dRotorsSpeed = min(1.7 * (1.0/0.31) * m_fPropellerSpeed, 1.5);
|
||||||
|
else
|
||||||
|
dRotorsSpeed = 0.0;
|
||||||
|
|
||||||
|
dMovingRotorSpeed = dRotorsSpeed - 0.4;
|
||||||
|
if ( dMovingRotorSpeed < 0.0 )
|
||||||
|
dMovingRotorSpeed = 0.0;
|
||||||
|
|
||||||
|
int nStaticRotorAlpha = static_cast<int>(min((1.5-dRotorsSpeed) * 255.0, 255));
|
||||||
|
int nMovingRotorAlpha = static_cast<int>(min(dMovingRotorSpeed * 175.0, 175));
|
||||||
|
|
||||||
|
if ( m_pCarNode[11] )
|
||||||
|
{
|
||||||
|
RpAtomic* pOutAtomic = nullptr;
|
||||||
|
RwFrameForAllObjects(m_pCarNode[11], GetCurrentAtomicObjectCB, &pOutAtomic);
|
||||||
|
if ( pOutAtomic )
|
||||||
|
SetComponentAtomicAlpha(pOutAtomic, nStaticRotorAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m_pCarNode[13] )
|
||||||
|
{
|
||||||
|
RpAtomic* pOutAtomic = nullptr;
|
||||||
|
RwFrameForAllObjects(m_pCarNode[13], GetCurrentAtomicObjectCB, &pOutAtomic);
|
||||||
|
if ( pOutAtomic )
|
||||||
|
SetComponentAtomicAlpha(pOutAtomic, nStaticRotorAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m_pCarNode[12] )
|
||||||
|
{
|
||||||
|
RpAtomic* pOutAtomic = nullptr;
|
||||||
|
RwFrameForAllObjects(m_pCarNode[12], GetCurrentAtomicObjectCB, &pOutAtomic);
|
||||||
|
if ( pOutAtomic )
|
||||||
|
SetComponentAtomicAlpha(pOutAtomic, nMovingRotorAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m_pCarNode[14] )
|
||||||
|
{
|
||||||
|
RpAtomic* pOutAtomic = nullptr;
|
||||||
|
RwFrameForAllObjects(m_pCarNode[14], GetCurrentAtomicObjectCB, &pOutAtomic);
|
||||||
|
if ( pOutAtomic )
|
||||||
|
SetComponentAtomicAlpha(pOutAtomic, nMovingRotorAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
CVehicle::Render();
|
||||||
|
}
|
141
SilentPatch/Vehicle.h
Normal file
141
SilentPatch/Vehicle.h
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
#ifndef __VEHICLE
|
||||||
|
#define __VEHICLE
|
||||||
|
|
||||||
|
#include "General.h"
|
||||||
|
|
||||||
|
struct CVehicleFlags
|
||||||
|
{
|
||||||
|
//0x428
|
||||||
|
unsigned char bIsLawEnforcer: 1; // Is this guy chasing the player at the moment
|
||||||
|
unsigned char bIsAmbulanceOnDuty: 1; // Ambulance trying to get to an accident
|
||||||
|
unsigned char bIsFireTruckOnDuty: 1; // Firetruck trying to get to a fire
|
||||||
|
unsigned char bIsLocked: 1; // Is this guy locked by the script (cannot be removed)
|
||||||
|
unsigned char bEngineOn: 1; // For sound purposes. Parked cars have their engines switched off (so do destroyed cars)
|
||||||
|
unsigned char bIsHandbrakeOn: 1; // How's the handbrake doing ?
|
||||||
|
unsigned char bLightsOn: 1; // Are the lights switched on ?
|
||||||
|
unsigned char bFreebies: 1; // Any freebies left in this vehicle ?
|
||||||
|
|
||||||
|
//0x429
|
||||||
|
unsigned char bIsVan: 1; // Is this vehicle a van (doors at back of vehicle)
|
||||||
|
unsigned char bIsBus: 1; // Is this vehicle a bus
|
||||||
|
unsigned char bIsBig: 1; // Is this vehicle big
|
||||||
|
unsigned char bLowVehicle: 1; // Need this for sporty type cars to use low getting-in/out anims
|
||||||
|
unsigned char bComedyControls: 1; // Will make the car hard to control (hopefully in a funny way)
|
||||||
|
unsigned char bWarnedPeds: 1; // Has scan and warn peds of danger been processed?
|
||||||
|
unsigned char bCraneMessageDone: 1; // A crane message has been printed for this car allready
|
||||||
|
// unsigned char bExtendedRange: 1; // This vehicle needs to be a bit further away to get deleted
|
||||||
|
unsigned char bTakeLessDamage: 1; // This vehicle is stronger (takes about 1/4 of damage)
|
||||||
|
|
||||||
|
//0x42A
|
||||||
|
unsigned char bIsDamaged: 1; // This vehicle has been damaged and is displaying all its components
|
||||||
|
unsigned char bHasBeenOwnedByPlayer : 1;// To work out whether stealing it is a crime
|
||||||
|
unsigned char bFadeOut: 1; // Fade vehicle out
|
||||||
|
unsigned char bIsBeingCarJacked: 1;
|
||||||
|
unsigned char bCreateRoadBlockPeds : 1;// If this vehicle gets close enough we will create peds (coppers or gang members) round it
|
||||||
|
unsigned char bCanBeDamaged: 1; // Set to FALSE during cut scenes to avoid explosions
|
||||||
|
// unsigned char bUsingSpecialColModel : 1;
|
||||||
|
// Is player vehicle using special collision model, stored in player strucure
|
||||||
|
unsigned char bOccupantsHaveBeenGenerated : 1; // Is true if the occupants have already been generated. (Shouldn't happen again)
|
||||||
|
unsigned char bGunSwitchedOff: 1; // Level designers can use this to switch off guns on boats
|
||||||
|
|
||||||
|
//0x42B
|
||||||
|
unsigned char bVehicleColProcessed : 1;// Has ProcessEntityCollision been processed for this car?
|
||||||
|
unsigned char bIsCarParkVehicle: 1; // Car has been created using the special CAR_PARK script command
|
||||||
|
unsigned char bHasAlreadyBeenRecorded : 1; // Used for replays
|
||||||
|
unsigned char bPartOfConvoy: 1;
|
||||||
|
unsigned char bHeliMinimumTilt: 1; // This heli should have almost no tilt really
|
||||||
|
unsigned char bAudioChangingGear: 1; // sounds like vehicle is changing gear
|
||||||
|
unsigned char bIsDrowning: 1; // is vehicle occupants taking damage in water (i.e. vehicle is dead in water)
|
||||||
|
unsigned char bTyresDontBurst: 1; // If this is set the tyres are invincible
|
||||||
|
|
||||||
|
//0x42C
|
||||||
|
unsigned char bCreatedAsPoliceVehicle : 1;// True if this guy was created as a police vehicle (enforcer, policecar, miamivice car etc)
|
||||||
|
unsigned char bRestingOnPhysical: 1; // Dont go static cause car is sitting on a physical object that might get removed
|
||||||
|
unsigned char bParking : 1;
|
||||||
|
unsigned char bCanPark : 1;
|
||||||
|
unsigned char bFireGun: 1; // Does the ai of this vehicle want to fire it's gun?
|
||||||
|
unsigned char bDriverLastFrame: 1; // Was there a driver present last frame ?
|
||||||
|
unsigned char bNeverUseSmallerRemovalRange: 1;// Some vehicles (like planes) we don't want to remove just behind the camera.
|
||||||
|
unsigned char bIsRCVehicle: 1; // Is this a remote controlled (small) vehicle. True whether the player or AI controls it.
|
||||||
|
|
||||||
|
//0x42D
|
||||||
|
unsigned char bAlwaysSkidMarks: 1; // This vehicle leaves skidmarks regardless of the wheels' states.
|
||||||
|
unsigned char bEngineBroken: 1; // Engine doesn't work. Player can get in but the vehicle won't drive
|
||||||
|
unsigned char bVehicleCanBeTargetted : 1;// The ped driving this vehicle can be targetted, (for Torenos plane mission)
|
||||||
|
unsigned char bPartOfAttackWave: 1; // This car is used in an attack during a gang war
|
||||||
|
unsigned char bWinchCanPickMeUp: 1; // This car cannot be picked up by any ropes.
|
||||||
|
unsigned char bImpounded: 1; // Has this vehicle been in a police impounding garage
|
||||||
|
unsigned char bVehicleCanBeTargettedByHS : 1;// Heat seeking missiles will not target this vehicle.
|
||||||
|
unsigned char bSirenOrAlarm: 1; // Set to TRUE if siren or alarm active, else FALSE
|
||||||
|
|
||||||
|
//0x42E
|
||||||
|
unsigned char bHasGangLeaningOn: 1;
|
||||||
|
unsigned char bGangMembersForRoadBlock : 1;// Will generate gang members if NumPedsForRoadBlock > 0
|
||||||
|
unsigned char bDoesProvideCover: 1; // If this is false this particular vehicle can not be used to take cover behind.
|
||||||
|
unsigned char bMadDriver: 1; // This vehicle is driving like a lunatic
|
||||||
|
unsigned char bUpgradedStereo: 1; // This vehicle has an upgraded stereo
|
||||||
|
unsigned char bConsideredByPlayer: 1; // This vehicle is considered by the player to enter
|
||||||
|
unsigned char bPetrolTankIsWeakPoint : 1;// If false shootong the petrol tank will NOT Blow up the car
|
||||||
|
unsigned char bDisableParticles: 1; // Disable particles from this car. Used in garage.
|
||||||
|
|
||||||
|
//0x42F
|
||||||
|
unsigned char bHasBeenResprayed: 1; // Has been resprayed in a respray garage. Reset after it has been checked.
|
||||||
|
unsigned char bUseCarCheats: 1; // If this is true will set the car cheat stuff up in ProcessControl()
|
||||||
|
unsigned char bDontSetColourWhenRemapping : 1;// If the texture gets remapped we don't want to change the colour with it.
|
||||||
|
unsigned char bUsedForReplay: 1; // This car is controlled by replay and should be removed when replay is done.
|
||||||
|
};
|
||||||
|
|
||||||
|
class NOVMT CVehicle : public CPhysical
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
BYTE __pad1[752];
|
||||||
|
CVehicleFlags m_nVehicleFlags;
|
||||||
|
BYTE __pad2[160];
|
||||||
|
signed int m_nTimeTillWeNeedThisCar;
|
||||||
|
BYTE __pad4[56];
|
||||||
|
CEntity* pDamagingEntity;
|
||||||
|
BYTE __pad3[144];
|
||||||
|
|
||||||
|
public:
|
||||||
|
CVehicleFlags& GetVehicleFlags()
|
||||||
|
{ return m_nVehicleFlags; }
|
||||||
|
CEntity* GetDamagingEntity()
|
||||||
|
{ return pDamagingEntity; }
|
||||||
|
|
||||||
|
virtual void Render() override;
|
||||||
|
|
||||||
|
static void SetComponentAtomicAlpha(RpAtomic* pAtomic, int nAlpha);
|
||||||
|
};
|
||||||
|
|
||||||
|
class NOVMT CAutomobile : public CVehicle
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BYTE paddd[172];
|
||||||
|
RwFrame* m_pCarNode[20]; // May be wrong?
|
||||||
|
BYTE padding[432];
|
||||||
|
float m_fRotorSpeed;
|
||||||
|
BYTE __moarpad[312];
|
||||||
|
|
||||||
|
public:
|
||||||
|
};
|
||||||
|
|
||||||
|
class NOVMT CHeli : public CAutomobile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void Render() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class NOVMT CPlane : public CAutomobile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BYTE __pad[60];
|
||||||
|
float m_fPropellerSpeed;
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void Render() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(CVehicle) == 0x5A0, "Wrong size: CVehicle");
|
||||||
|
static_assert(sizeof(CAutomobile) == 0x988, "Wrong size: CAutomobile");
|
||||||
|
|
||||||
|
#endif
|
1207
SilentPatch/dllmain.cpp
Normal file
1207
SilentPatch/dllmain.cpp
Normal file
File diff suppressed because it is too large
Load diff
12
SilentPatch/win2000.asm
Normal file
12
SilentPatch/win2000.asm
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
.model flat
|
||||||
|
.data
|
||||||
|
__imp__EncodePointer@4 dd dummy
|
||||||
|
__imp__DecodePointer@4 dd dummy
|
||||||
|
EXTERNDEF __imp__EncodePointer@4 : DWORD
|
||||||
|
EXTERNDEF __imp__DecodePointer@4 : DWORD
|
||||||
|
.code
|
||||||
|
dummy proc
|
||||||
|
mov eax, [esp+4]
|
||||||
|
ret 4
|
||||||
|
dummy endp
|
||||||
|
end
|
108
VCFix/VCFix.vcxproj
Normal file
108
VCFix/VCFix.vcxproj
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{374D4CB4-548A-4DA0-AB68-8EA356424626}</ProjectGuid>
|
||||||
|
<RootNamespace>VCFix</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<TargetExt>.asi</TargetExt>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<TargetExt>.asi</TargetExt>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>SILENTPATCH_VC_VER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<AdditionalIncludeDirectories>D:\RWSDK\Graphics\rwsdk\include\d3d9</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<MinimumRequiredVersion>5.0</MinimumRequiredVersion>
|
||||||
|
<AdditionalDependencies>Winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /y "$(TargetPath)" "D:\gry\Steam\steamapps\common\Grand Theft Auto Vice City\SilentPatchVC.asi"</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>SILENTPATCH_VC_VER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
|
<AdditionalIncludeDirectories>D:\RWSDK\Graphics\rwsdk\include\d3d9</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<MinimumRequiredVersion>5.0</MinimumRequiredVersion>
|
||||||
|
<AdditionalDependencies>Winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /y "$(TargetPath)" "D:\gry\Steam\steamapps\common\Grand Theft Auto Vice City\SilentPatchVC.asi"</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\SilentPatch\MemoryMgr.h" />
|
||||||
|
<ClInclude Include="..\SilentPatch\Timer.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\SilentPatch\dllmain.cpp" />
|
||||||
|
<ClCompile Include="..\SilentPatch\Timer.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<MASM Include="..\SilentPatch\win2000.asm">
|
||||||
|
<FileType>Document</FileType>
|
||||||
|
</MASM>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
38
VCFix/VCFix.vcxproj.filters
Normal file
38
VCFix/VCFix.vcxproj.filters
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\SilentPatch\MemoryMgr.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\SilentPatch\Timer.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\SilentPatch\dllmain.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\SilentPatch\Timer.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<MASM Include="..\SilentPatch\win2000.asm">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</MASM>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
Loading…
Reference in a new issue