04C9
Revision as of 01:30, 10 November 2016 by Spaceeinstein (talk | contribs)
- Description
- Checks if the player is in a flying vehicle
- Syntax
- 04C9: player [player handle] in_flying_vehicle
- Parameter
- [player handle]
- The handle of the player
This conditional opcode returns true if the player is in a flying vehicle, either as a driver or a passenger. It behaves the same way as using both opcodes 04AA and 04AC together. This opcode is unsupported in San Andreas and is superseded by opcode 04C8. By default the game will recognize the following list of vehicles as flying vehicles (for which the IS_HELI or IS_PLANE flag is set in the handling.cfg file):
- Hunter
- Maverick
- Police Maverick
- RC Baron
- RC Goblin
- RC Raider
- Sea Sparrow
- Skimmer
- Sparrow
- VCN Maverick
Legacy documentation describes this as applying to just planes.
Disassembled code
This is disassembled code for this opcode from PC v1.0 US.
loc_630F46:
lea eax, [ebp+10h] ; get address of script's current instruction pointer
mov ecx, ebp ; get address of CRunningScript for thiscall
push 1 ; push 1 for one parameter to collect
push eax ; push address of script's current instruction pointer
call CRunningScript::CollectParameters ; call CRunningScript::CollectParameters
mov edi, ds:ScriptParams[0] ; get value of first parameter, the player handle
xor bl, bl ; set compare flag to false
imul edi, 170h
add edi, offset CWorld::Players
mov eax, [edi] ; get address of player ped at CWorld::Players + player handle * 0x170
cmp byte ptr [eax+3ACh], 0 ; offset player ped address by 0x3AC and check whether or not the player ped is in a vehicle
jz short loc_630F9A
mov ecx, [eax+3A8h] ; offset player ped address by 0x3A8 to get address of last entered vehicle for thiscall
test ecx, ecx ; check whether or not the last entered vehicle address is null
jz short loc_630F9A
call CVehicle::GetVehicleAppearance ; call CVehicle::GetVehicleAppearance
cmp eax, 5 ; check whether or not the vehicle is plane
jz short loc_630F98
mov eax, [edi] ; get address of player ped at CWorld::Players + player handle * 0x170
mov ecx, [eax+3A8h] ; offset player ped address by 0x3A8 to get address of last entered vehicle for thiscall
call CVehicle::GetVehicleAppearance ; call CVehicle::GetVehicleAppearance
cmp eax, 3 ; check whether or not the vehicle is heli
jnz short loc_630F9A
loc_630F98:
mov bl, 1 ; set compare flag to true
loc_630F9A:
mov ecx, ebp ; get address of CRunningScript for thiscall
push ebx ; push compare flag
call CRunningScript::UpdateCompareFlag ; call CRunningScript::UpdateCompareFlag
xor al, al ; return 0
Keywords
player, driving, any, plane, heli, helicopter, flying, vehicle