Difference between revisions of "0136"
(example) |
m |
||
Line 51: | Line 51: | ||
<span class="c1">// generate larger car explosion</span> | <span class="c1">// generate larger car explosion</span> | ||
[[00AA]]: store_car CAR_HANDLE position_to X_POS Y_POS Z_POS | [[00AA]]: store_car CAR_HANDLE position_to X_POS Y_POS Z_POS | ||
− | [[020C]]: create_explosion <span class="m">5</span> at X_POS Y_POS Z_POS | + | [[020C]]: create_explosion <span class="m">5</span> at X_POS Y_POS Z_POS <span class="c1">// EXPLOSION_HELI</span> |
0136: <span class="k">shake_camera</span> <span class="m">1600</span> with_point X_POS Y_POS Z_POS | 0136: <span class="k">shake_camera</span> <span class="m">1600</span> with_point X_POS Y_POS Z_POS | ||
020B: explode_car CAR_HANDLE | 020B: explode_car CAR_HANDLE | ||
Line 97: | Line 97: | ||
<span class="c1">// generate larger car explosion</span> | <span class="c1">// generate larger car explosion</span> | ||
[[00AA]]: store_car CAR_HANDLE position_to X_POS Y_POS Z_POS | [[00AA]]: store_car CAR_HANDLE position_to X_POS Y_POS Z_POS | ||
− | [[020C]]: create_explosion <span class="m">6</span> at X_POS Y_POS Z_POS | + | [[020C]]: create_explosion <span class="m">6</span> at X_POS Y_POS Z_POS <span class="c1">// EXPLOSION_HELI</span> |
05F5: call_scm_func <span class="nl">@opcode_0136</span> inputs <span class="m">4</span> -- <span class="k">shake_camera</span> <span class="m">1600</span> with_point X_POS Y_POS Z_POS <span class="c1">// 0136 substitute</span> | 05F5: call_scm_func <span class="nl">@opcode_0136</span> inputs <span class="m">4</span> -- <span class="k">shake_camera</span> <span class="m">1600</span> with_point X_POS Y_POS Z_POS <span class="c1">// 0136 substitute</span> | ||
020B: explode_car CAR_HANDLE | 020B: explode_car CAR_HANDLE | ||
Line 111: | Line 111: | ||
<span class="c1">// 2@ - input param (y-coordinate)</span> | <span class="c1">// 2@ - input param (y-coordinate)</span> | ||
<span class="c1">// 3@ - input param (z-coordinate)</span> | <span class="c1">// 3@ - input param (z-coordinate)</span> | ||
− | 0093: <span class="nv">0@</span> = integer_to_float <span class="nv">0@</span> | + | [[0093]]: <span class="nv">0@</span> = integer_to_float <span class="nv">0@</span> |
<span class="nv">0@</span> *= <span class="m">0.001</span> | <span class="nv">0@</span> *= <span class="m">0.001</span> | ||
05E3: call_method <span class="m">0x46FF21</span> <span class="m">0x7E4688</span> num_params <span class="m">4</span> pop <span class="m">0</span> z <span class="nv">3@</span> y <span class="nv">2@</span> x <span class="nv">1@</span> time <span class="nv">0@</span> <span class="c1">// CCamera::CamShake</span> | 05E3: call_method <span class="m">0x46FF21</span> <span class="m">0x7E4688</span> num_params <span class="m">4</span> pop <span class="m">0</span> z <span class="nv">3@</span> y <span class="nv">2@</span> x <span class="nv">1@</span> time <span class="nv">0@</span> <span class="c1">// CCamera::CamShake</span> | ||
− | 05F6: ret <span class="m">0</span> | + | [[0AB2|05F6]]: ret <span class="m">0</span> |
}} | }} | ||
Revision as of 15:10, 15 January 2017
Contents |
- 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 // EXPLOSION_HELI 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 // EXPLOSION_HELI 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
- 0003, shake camera without point