Quantcast

Jump to content

» «
Photo

[SA] Find max range between 'camera' and aim point

1 reply to this topic
jackusCTB
  • jackusCTB

    Peon

  • Members
  • Joined: 29 Jun 2012
  • Belgium

#1

Posted 08 July 2013 - 04:47 PM

Hello, using Wesser's Laser functionI wrote the code below. What it does is simply add a red corona and eventually an explosion if you press secondary fire (LCTRL - RALT as default) at player aiming point XYZ coords, at the desired range (in this case, 29@ = 100.0).
What I would like to change about the range, is its value: I prepared these 4 images taken from in-game footage to better explain.

user posted image
user posted image

The explosion doesn't hit the chopper because of the range limitation. The explosion happened 100 metres away from our chopper, while the target chopper was probably 120-150 metres away from us.

user posted image
user posted image

The explosion destroyed the target helicopter because it was exactly at our range of 100 metres.
Let's say we were 50 metres away from the enemy chopper, we wouldn't have destroyed it because the explosion would've been under the stadium roof (100 metres from our chopper)

CODE
{$CLEO .cs}

0000: NOP

{
0@ - Player vehicle
29@ - range
28@ - 'camera' X point
27@ - 'camera' Y point
26@ - 'camera' Z point
22@ - target X point
21@ - target Y point
20@ - target Z point
}

29@ = 100.0 // 100 metres

:check
wait 0
if and
Player.Defined($PLAYER_CHAR)
Actor.DrivingVehicleType($PLAYER_ACTOR, #SPARROW)
jf @check
03C0: 0@ = actor $PLAYER_ACTOR car

:loop
Actor.StorePos($PLAYER_ACTOR, 28@, 27@, 26@)
0AB1: call_scm_func @getAimPoint 4 range 29@ from 28@ 27@ 26@ camera_to 25@ 24@ 23@ point_to 22@ 21@ 20@
04D5: create_corona_at 22@ 21@ 20@ radius 10.0 type 0 flare 0 RGB 255 0 0 // creates a corona 29@ metres away from 'camera' point to aim point
if
00E1: player 0 pressed_key 4
jf @check
020C: create_explosion_with_radius 0 at 22@ 21@ 20@
jump @check

//----------------------------------------------------------

:getAimPoint
{
Parameters:
  Passed:
    0@ - aiming range
    1@ - start point X
    2@ - start point Y
    3@ - start point Z
  Result:
    4@ - camera point X
    5@ - camera point Y
    6@ - camera point Z
    7@ - aim point X
    8@ - aim point Y
    9@ - aim point Z

Example:
  0AB1: call_scm_func @getAimPoint 4 range 20.0 from 0.0 0.0 0.0 camera_to 1@ 2@ 3@ point_to 4@ 5@ 6@
}
0A9F: 12@ = current_thread_pointer
0AB1: call_scm_func @getLocalVarOffset 2 thread 12@ var 4 store_to 10@
0AB1: call_scm_func @getLocalVarOffset 2 thread 12@ var 7 store_to 11@
0AA6: call_method 0x514970 struct 0xB6F028 num_params 6 pop 0 pPoint 11@ pCamera 10@ fOriginZ 3@ fOriginY 2@ fOriginX 1@ fRange 0@ // CCamera__Find3rdPersonCamTargetVector
0AB2: ret 6 4@ 5@ 6@ 7@ 8@ 9@

:getLocalVarOffset
{
Parameters:
  Passed:
    0@ - thread pointer
    1@ - var number
  Result:
    1@ - var value

Example:
  0AB1: call_scm_func @getLocalVarOffset 2 thread 0@ var 0 store_to 1@
}
if
0@ <> 0
then
1@ *= 0x4
0A8E: 2@ = 0@ + 0xDC // mission flag
if
  2@ == 1
then
  1@ += 0xA48960 // mission locals
else
  005A: 1@ += 0@
  1@ += 0x3C
end
else
1@ = 0
end
0AB2: ret 1 1@

jackusCTB
  • jackusCTB

    Peon

  • Members
  • Joined: 29 Jun 2012
  • Belgium

#2

Posted 10 July 2013 - 04:47 PM

-bump-




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users