Help:Patching the motorcycle area checks: Difference between revisions

m
RideMgr -> MotorcycleMgr
imported>Leoetlino
No edit summary
imported>Leoetlino
m (RideMgr -> MotorcycleMgr)
Line 38: Line 38:
Called from the Motorcycle AI root code.
Called from the Motorcycle AI root code.


<source lang="cpp">if ( v6 && !RideMgr::motorcycleCanBeUsed(v6, (float *)&v68, 0LL) )  // 0x71004ADF18
<source lang="cpp">if ( v6 && !MotorcycleMgr::motorcycleCanBeUsed(v6, (float *)&v68, 0LL) )  // 0x71004ADF18
   goto triggerDisappear;</source>
   goto triggerDisappear;</source>
Either change the condition to be always false, or change <code>RideMgr::motorcycleCanBeUsed</code> (preferred to avoid side effects):
Either change the condition to be always false, or change <code>MotorcycleMgr::motorcycleCanBeUsed</code> (preferred to avoid side effects):


<source lang="cpp">bool RideMgr::motorcycleCanBeUsed(RideMgr* this, Vec3 *positions, __int64 a3) // 0x7100679D10
<source lang="cpp">bool MotorcycleMgr::motorcycleCanBeUsed(MotorcycleMgr* this, Vec3 *positions, __int64 a3) // 0x7100679D10
{
{
   if ( (a3 || (a3 = ActorSystem::sInstance->field_C0) != 0)
   if ( (a3 || (a3 = ActorSystem::sInstance->field_C0) != 0)
Line 65: Line 65:
=== Rune UI/sound effect ===
=== Rune UI/sound effect ===


Same climate based check as above, but done in a different RideMgr function. Just change:
Same climate based check as above, but done in a different MotorcycleMgr function. Just change:


<source lang="armasm">.text:0000007100679650 TBNZ            W8, #0, loc_710067965C</source>
<source lang="armasm">.text:0000007100679650 TBNZ            W8, #0, loc_710067965C</source>
Line 75: Line 75:
==== Check 1 ====
==== Check 1 ====


Deep in some RideMgr function, called from the PlayerNormal AI:
Deep in some MotorcycleMgr function, called from the PlayerNormal AI:


<source lang="cpp">else if ( !WorldMgr::sInstance
<source lang="cpp">else if ( !WorldMgr::sInstance
Line 94: Line 94:
==== Check 2 ====
==== Check 2 ====


Found in another RideMgr member function and also called from the PlayerNormal AI code.
Found in another MotorcycleMgr member function and also called from the PlayerNormal AI code.


<source lang="cpp">bool RideMgr::checkUsable2(RideMgr *this, __int64 a2)
<source lang="cpp">bool MotorcycleMgr::checkUsable2(MotorcycleMgr *this, __int64 a2)
{
{
   if ( this->someFlag == 1 )
   if ( this->someFlag == 1 )
     return 0;
     return 0;
   float* v4 = this->gap12C;
   float* v4 = this->gap12C;
   RideMgr::x_7(this, (float *)this->gap12C, (__int64)&this->field_134 + 4);
   MotorcycleMgr::x_7(this, (float *)this->gap12C, (__int64)&this->field_134 + 4);
   if ( a2 || (a2 = ActorSystem::sInstance->field_C0) != 0 )
   if ( a2 || (a2 = ActorSystem::sInstance->field_C0) != 0 )
   {
   {
Line 140: Line 140:
==== 6 or 7 other checks ====
==== 6 or 7 other checks ====


The RideMgr function at 0x7100678E80 (which can be identified with a xref to "GameROMMotorcycle") calls 6 member functions that must all return true; otherwise, the motorcycle cannot be used.
The MotorcycleMgr function at 0x7100678E80 (which can be identified with a xref to "GameROMMotorcycle") calls 6 member functions that must all return true; otherwise, the motorcycle cannot be used.


The first 4 functions appear to be using the Havok AI NavMesh system. Something called “motorcycle shape cast” is used in the 3 other functions.
The first 4 functions appear to be using the Havok AI NavMesh system. Something called “motorcycle shape cast” is used in the 3 other functions.
Anonymous user