Difference between revisions of "02DE"

From GTAMods Wiki
Jump to navigation Jump to search
(added lcs)
m
Line 72: Line 72:
 
     jz      short loc_456066
 
     jz      short loc_456066
 
     mov    edx, [ebx+3A8h]                  ; offset player address by 0x3A8 to get address of last entered car
 
     mov    edx, [ebx+3A8h]                  ; offset player address by 0x3A8 to get address of last entered car
     test    edx, edx                          ; checks whether or not the last entered car address is null
+
     test    edx, edx                          ; check whether or not the last entered car address is null
 
     jz      short loc_456066
 
     jz      short loc_456066
 
     movsx  edi, word ptr [edx+5Ch]          ; offset last entered car address by 0x5C to get the model index of the car
 
     movsx  edi, word ptr [edx+5Ch]          ; offset last entered car address by 0x5C to get the model index of the car
Line 96: Line 96:
  
 
== See also ==
 
== See also ==
 +
* {{Icon|3}} [[0295]], checks if the vehicle is a taxi
 
* {{Icon|SA}} [[0602]], checks if the character is in a taxi
 
* {{Icon|SA}} [[0602]], checks if the character is in a taxi

Revision as of 06:26, 9 November 2016

GTA III Vice City IS_PLAYER_IN_TAXI


Description
Checks if the player is in a taxi
Syntax
02DE:   player [player handle] in_taxi
Parameter
[player handle]
The handle of the player

This conditional opcode returns true if the player is in a taxi. It recognizes the following as taxis:

GTA III Vice City Liberty City Stories
Id Name Id Name Id Name
110 Taxi 150 Taxi 151 Taxi
128 Cabbie 168 Cabbie 166 Cabbie
148 Borgnine 188 Zebra Cab 181 Bickle'76
216 Kaufman Cab

Disassembled code

These are disassembled code for this opcode both from PC v1.0 US.

GTA III

loc_446A93:
    lea     eax, [edi+10h]                    ; get address of script's current instruction pointer
    mov     ecx, edi                          ; get CRunningScript pointer 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     ecx, ds:ScriptParams[0]           ; get value of first parameter, the player handle
    xor     al, al                            ; set compare flag to false
    imul    ecx, 4Fh
    mov     esi, ds:CWorld::Players[ecx*4]    ; get address of the player at CWorld::Players + player handle * 0x4F * 4
    cmp     byte ptr [esi+314h], 0            ; offset player address by 0x314 and check whether or not the player is in car
    jz      short loc_446ADC
    mov     edx, [esi+310h]                   ; offset player address by 0x310 to get address of last entered car
    movsx   ebx, word ptr [edx+5Ch]           ; offset last entered car address by 0x5C to get the model index of the car
    cmp     ebx, 6Eh                          ; compare model index with 0x6E, Taxi
    jz      short loc_446ADA
    cmp     ebx, 80h                          ; compare model index with 0x80, Cabbie
    jz      short loc_446ADA
    cmp     ebx, 94h                          ; compare model index with 0x94, Borgnine
    jnz     short loc_446ADC
loc_446ADA:
    mov     al, 1                             ; set compare flag to true
loc_446ADC:
    mov     ecx, edi                          ; get CRunningScript pointer for thiscall
    push    eax                               ; push compare flag
    call    CRunningScript::UpdateCompareFlag ; call CRunningScript::UpdateCompareFlag
    xor     al, al                            ; return 0

Vice City

loc_45600E:
    lea     eax, [ebp+10h]                    ; get address of script's current instruction pointer
    mov     ecx, ebp                          ; get CRunningScript pointer 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     ecx, ds:ScriptParams[0]           ; get value of first parameter, the player handle
    xor     al, al                            ; set compare flag to false
    imul    ecx, 2Eh
    mov     ebx, ds:CWorld::Players[ecx*8]    ; get address of the player at CWorld::Players + player handle * 0x2E * 8
    cmp     byte ptr [ebx+3ACh], 0            ; offset player address by 0x3AC and check whether or not the player is in car
    jz      short loc_456066
    mov     edx, [ebx+3A8h]                   ; offset player address by 0x3A8 to get address of last entered car
    test    edx, edx                          ; check whether or not the last entered car address is null
    jz      short loc_456066
    movsx   edi, word ptr [edx+5Ch]           ; offset last entered car address by 0x5C to get the model index of the car
    cmp     edi, 96h                          ; compare model index with 0x96, Taxi
    jz      short loc_456064
    cmp     edi, 0A8h                         ; compare model index with 0xA8, Cabbie
    jz      short loc_456064
    cmp     edi, 0BCh                         ; compare model index with 0xBC, Zebra Cab
    jz      short loc_456064
    cmp     edi, 0D8h                         ; compare model index with 0xD8, Kaufman Cab
    jnz     short loc_456066
loc_456064:
    mov     al, 1                             ; set compare flag to true
loc_456066:
    mov     ecx, ebp                          ; get CRunningScript pointer for thiscall
    push    eax                               ; push compare flag
    call    CRunningScript::UpdateCompareFlag ; call CRunningScript::UpdateCompareFlag
    xor     al, al                            ; return 0

Keywords

check, player, driving, taxi, cab, cabbie

See also

  • GTA III 0295, checks if the vehicle is a taxi
  • San Andreas 0602, checks if the character is in a taxi