Help:Patching the motorcycle area checks: Difference between revisions
Help:Patching the motorcycle area checks (view source)
Revision as of 18:38, 29 December 2018
, 5 years agoRideMgr -> 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 && ! | <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> | Either change the condition to be always false, or change <code>MotorcycleMgr::motorcycleCanBeUsed</code> (preferred to avoid side effects): | ||
<source lang="cpp">bool | <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 | 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 | 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 | Found in another MotorcycleMgr member function and also called from the PlayerNormal AI code. | ||
<source lang="cpp">bool | <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; | ||
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 | 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. |