Difference between revisions of "0414"
Jump to navigation
Jump to search
m |
m |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
− | {{Icon| | + | __NOTOC__ |
− | + | {{OpCode | |
− | + | | games = {{Icon|t}} | |
− | + | | command = SET_FREE_HEALTH_CARE | |
− | + | | description = Enables a free hospital visit for the player | |
− | + | | syntax1 = 0414: set_player [''player handle''] single_free_treatment [''int''] | |
− | + | | p1t = [''player handle''] | |
− | + | | p1d = The [[0053|handle of the player]] | |
− | + | | p2t = [''int''] | |
− | + | | p2d = 0 = disable (default), {{hint|1|or any value other than 0}} = enable | |
− | + | | native = [[SET_FREE_HEALTH_CARE]] | |
− | + | }} | |
− | |||
− | This opcode sets a free hospital visit for the player. When enabled, if the player is wasted, he will not lose any weapons or cash after respawning. The free treatment works once only, so to allow free treatment again, you have to enable it through this opcode again. This opcode was | + | This opcode sets a free hospital visit for the player. When enabled, if the player is wasted, he will not lose any weapons or cash after respawning. The free treatment works once only, so to allow free treatment again, you have to enable it through this opcode again. This opcode was never called in the [[Main.scm|original script]] of GTA III. The value set with this opcode is saved in [[Saves (GTA 3)#Block 16: Player Info|block 16 of the save file]] in GTA III, [[Saves (GTA VC)#Block 18: Player Info|block 18]] in Vice City, and [[Saves (GTA SA)#Block 15: Player Info|block 15]] in San Andreas. |
== Disassembled code == | == Disassembled code == | ||
− | + | These are disassembled code for this opcode both from PC v1.0 US. | |
+ | === GTA III === | ||
+ | <syntaxhighlight lang="nasm"> | ||
+ | loc_588D32: | ||
+ | lea eax, [ebp+10h] ; get address of script's current instruction pointer | ||
+ | mov ecx, ebp ; get address of script for thiscall | ||
+ | push 2 ; push 2 for two parameters to collect | ||
+ | push eax ; push address of script's current instruction pointer | ||
+ | call CRunningScript::CollectParameters ; call CRunningScript::CollectParameters(uint *,short) | ||
+ | mov eax, ds:ScriptParams[0] ; get value of first parameter, the player handle | ||
+ | imul eax, 13Ch | ||
+ | add eax, offset CWorld::Players ; get address of the player at CWorld::Players + player handle * 0x13C | ||
+ | cmp ds:ScriptParams[1], 0 ; check whether or not value of second parameter is 0 | ||
+ | jz short loc_588D61 | ||
+ | mov byte ptr [eax+117h], 1 ; offset player address by 0x117 and set to enable free health care | ||
+ | jmp short loc_588D68 | ||
+ | loc_588D61: | ||
+ | mov byte ptr [eax+117h], 0 ; offset player address by 0x117 and set to disable free health care | ||
+ | loc_588D68: | ||
+ | xor al, al ; return 0 | ||
+ | </syntaxhighlight> | ||
+ | |||
=== Vice City === | === Vice City === | ||
− | <syntaxhighlight lang=" | + | <syntaxhighlight lang="nasm"> |
− | + | loc_608BCE: | |
− | + | lea eax, [ebx+10h] ; get address of script's current instruction pointer | |
− | + | mov ecx, ebx ; get address of script for thiscall | |
− | + | push 2 ; push 2 for two parameters to collect | |
− | + | push eax ; push address of script's current instruction pointer | |
− | + | call CRunningScript::CollectParameters ; call CRunningScript::CollectParameters(uint *,short) | |
− | ; | + | mov eax, ds:ScriptParams[0] ; get value of first parameter, the player handle |
− | + | imul eax, 170h | |
− | + | add eax, offset CWorld::Players ; get address of the player at CWorld::Players + player handle * 0x170 | |
− | + | cmp ds:ScriptParams[1], 0 ; check whether or not value of second parameter is 0 | |
− | + | jz short loc_608C00 | |
− | + | mov byte ptr [eax+146h], 1 ; offset player address by 0x146 and set to enable free health care | |
− | + | jmp short loc_608C07 | |
− | + | align 10h | |
− | + | loc_608C00: | |
− | + | mov byte ptr [eax+146h], 0 ; offset player address by 0x146 and set to disable free health care | |
− | + | loc_608C07: | |
− | + | xor al, al ; return 0 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Keywords == | == Keywords == | ||
set, toggle, player, free, treatment, hospital, wasted, healthcare | set, toggle, player, free, treatment, hospital, wasted, healthcare | ||
− | |||
− |
Latest revision as of 04:03, 24 May 2017
- Description
- Enables a free hospital visit for the player
- Syntax
- 0414: set_player [player handle] single_free_treatment [int]
- Parameter
- [player handle]
- The handle of the player
- [int]
- 0 = disable (default), 1 = enable
- Native analog
- SET_FREE_HEALTH_CARE
This opcode sets a free hospital visit for the player. When enabled, if the player is wasted, he will not lose any weapons or cash after respawning. The free treatment works once only, so to allow free treatment again, you have to enable it through this opcode again. This opcode was never called in the original script of GTA III. The value set with this opcode is saved in block 16 of the save file in GTA III, block 18 in Vice City, and block 15 in San Andreas.
Disassembled code
These are disassembled code for this opcode both from PC v1.0 US.
GTA III
loc_588D32:
lea eax, [ebp+10h] ; get address of script's current instruction pointer
mov ecx, ebp ; get address of script for thiscall
push 2 ; push 2 for two parameters to collect
push eax ; push address of script's current instruction pointer
call CRunningScript::CollectParameters ; call CRunningScript::CollectParameters(uint *,short)
mov eax, ds:ScriptParams[0] ; get value of first parameter, the player handle
imul eax, 13Ch
add eax, offset CWorld::Players ; get address of the player at CWorld::Players + player handle * 0x13C
cmp ds:ScriptParams[1], 0 ; check whether or not value of second parameter is 0
jz short loc_588D61
mov byte ptr [eax+117h], 1 ; offset player address by 0x117 and set to enable free health care
jmp short loc_588D68
loc_588D61:
mov byte ptr [eax+117h], 0 ; offset player address by 0x117 and set to disable free health care
loc_588D68:
xor al, al ; return 0
Vice City
loc_608BCE:
lea eax, [ebx+10h] ; get address of script's current instruction pointer
mov ecx, ebx ; get address of script for thiscall
push 2 ; push 2 for two parameters to collect
push eax ; push address of script's current instruction pointer
call CRunningScript::CollectParameters ; call CRunningScript::CollectParameters(uint *,short)
mov eax, ds:ScriptParams[0] ; get value of first parameter, the player handle
imul eax, 170h
add eax, offset CWorld::Players ; get address of the player at CWorld::Players + player handle * 0x170
cmp ds:ScriptParams[1], 0 ; check whether or not value of second parameter is 0
jz short loc_608C00
mov byte ptr [eax+146h], 1 ; offset player address by 0x146 and set to enable free health care
jmp short loc_608C07
align 10h
loc_608C00:
mov byte ptr [eax+146h], 0 ; offset player address by 0x146 and set to disable free health care
loc_608C07:
xor al, al ; return 0
Keywords
set, toggle, player, free, treatment, hospital, wasted, healthcare