0136

From GTAMods Wiki
Revision as of 12:17, 14 January 2017 by Spaceeinstein (talk | contribs) (example)
Jump to navigation Jump to search

GTA III SHAKE_CAM_WITH_POINT


Description
Shakes the in-game camera
Syntax
0136: shake_camera [int] with_point [flt1] [flt2] [flt3]
Parameter
[int]
Intensity and duration of the shaking
[flt1]
X-coordinate
[flt2]
Y-coordinate
[flt3]
Z-coordinate

This opcode shakes the in-game camera for a while. The higher the integer value is, the more and the longer the camera shakes. The shaking of the camera depends if the camera's location, not the player's location, is within 100 units of the specified coordinates point. The duration and intensity is independent of that point. Leaving or entering the area after the opcode is called does not change the behavior of the shaking. This opcode was never called in the original script of GTA III.

Example

The following example spawns a Trashmaster close to the player. If the Trashmaster's health is below 90%, it creates an explosion larger than a regular car explosion.

// set constants
const
CAR_MODEL = #TRASH
CAR_HANDLE = 0@
X_POS = 1@
Y_POS = 2@
Z_POS = 3@
HAS_EXPLODED = 4@
end

// spawn vehicle
0247: request_model CAR_MODEL
038B: load_requested_models
0054: store_player $PLAYER_CHAR position_to X_POS Y_POS Z_POS
X_POS += 4.0
00A5: CAR_HANDLE = create_car CAR_MODEL at X_POS Y_POS Z_POS

HAS_EXPLODED = false
while true
    wait 10
    if
        HAS_EXPLODED == false
    then
        if
            8119:   not car CAR_HANDLE wrecked
        then
            if
                8185:   not car CAR_HANDLE health >= 900
            then
                // generate larger car explosion
                00AA: store_car CAR_HANDLE position_to X_POS Y_POS Z_POS
                020C: create_explosion 5 at X_POS Y_POS Z_POS
                0136: shake_camera 1600 with_point X_POS Y_POS Z_POS
                020B: explode_car CAR_HANDLE
                HAS_EXPLODED = true
            end
        end
    end
end

For Vice City

This opcode does not exist in Vice City but it is possible to recreate this opcode since camera shaking based on location is already featured in the game (like when cars explode). Vice City improved upon this feature in that the initial duration and intensity of the shaking is dependent on the camera's distance from the point. The following example is a stand-alone CLEO script for Vice City tested on US v1.0 and should work similarly to the example above.

{$CLEO .cs}

// set constants
const
CAR_MODEL = #TRASH
CAR_HANDLE = 0@
X_POS = 1@
Y_POS = 2@
Z_POS = 3@
HAS_EXPLODED = 4@
end

// spawn vehicle
0247: request_model CAR_MODEL
038B: load_requested_models
0054: store_player $PLAYER_CHAR position_to X_POS Y_POS Z_POS
X_POS += 4.0
00A5: CAR_HANDLE = create_car CAR_MODEL at X_POS Y_POS Z_POS

HAS_EXPLODED = false
while true
    wait 10
    if
        HAS_EXPLODED == false
    then
        if
            8119:   not car CAR_HANDLE wrecked
        then
            if
                8185:   not car CAR_HANDLE health >= 900
            then
                // generate larger car explosion
                00AA: store_car CAR_HANDLE position_to X_POS Y_POS Z_POS
                020C: create_explosion 6 at X_POS Y_POS Z_POS
                05F5: call_scm_func @opcode_0136 inputs 4 -- shake_camera 1600 with_point X_POS Y_POS Z_POS  // 0136 substitute
                020B: explode_car CAR_HANDLE
                HAS_EXPLODED = true
            end
        end
    end
end

:opcode_0136
// 0@ - input param (intensity/duration)
// 1@ - input param (x-coordinate)
// 2@ - input param (y-coordinate)
// 3@ - input param (z-coordinate)
0093: 0@ = integer_to_float 0@
0@ *= 0.001
05E3: call_method 0x46FF21 0x7E4688 num_params 4 pop 0 z 3@ y 2@ x 1@ time 0@  // CCamera::CamShake
05F6: ret 0

Keywords

shake, jostle, cam, camera, point

See also

  • GTA III Vice City San Andreas 0003, shake camera without point