EDuke32 Changelog Unofficial archive

Build 9003

20 May 2020 · 48 commits by 3 authors · GIT

Builds by month 106 builds

Original log file · 20200520-9003.txt
commit 48c8d3b4b265836e7e092b7553e16bd68fc1728e
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Thu May 21 01:32:40 2020 -0500

    SW: Remove pre-release software warning

commit aee713b59a65d0a0f81c20c48b9499f5fb132927
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Sun May 17 23:52:33 2020 -0500

    Synchronize file extensions for GRP scanning between Duke 3D and SW
    
    This way running both from the same folder won't invalidate the cache.

commit ba2dc697888a08ad4d32bed719a7a52ff387d5e2
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Sun May 17 23:50:24 2020 -0500

    SW: Add forgotten call to FreeGroupsCache()

commit f8286c718e6df26020858cdddc36927a73186f07
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Sun May 17 23:47:42 2020 -0500

    SW: Fix warning: function 'MNU_ClearFlags' is not needed and will not be emitted [-Wunneeded-internal-declaration]

commit 0e93318436a613fe568a36b5cd9cacd1a9745ebc
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Tue Feb 18 23:59:55 2020 -0600

    SW: Fix music volume slider

commit 7c9331a210179565844f5f6272063f807f2d5c48
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Tue Feb 18 23:34:57 2020 -0600

    SW: Add FOV slider

commit 3e9cbdd65d5b11d43cce8b140f43cae274c2d0e2
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Tue Feb 18 22:54:19 2020 -0600

    SW: Add "Game Saved" message

commit c1db471ddf59eae082ae0e206ea292f0f7f60679
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Tue Feb 18 21:50:20 2020 -0600

    SW: Fall back gracefully if map mirror tags are not fully correct

commit 1fe56a76475a359ae27bd49b5f50891c6a05c9c1
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Tue Feb 18 21:08:00 2020 -0600

    SW: Instrument Saveables with debug_break

commit c19a28c851801f0b12f6757b3d57678b5e8ddadf
Author: Evan Ramos <hendricks266@gmail.com>
Date:   Tue Feb 18 20:55:05 2020 -0600

    SW: Add PanelSpriteFunc values to saveables

commit 07df0ebb7c7680a6b307527f72135efa6f3ae9a7
Author: NY00123 <ny00@outlook.com>
Date:   Sun May 3 00:20:48 2020 +0300

    SW: Afraid that we should disable almost all kinds of SOs in multiplayer
    for now, due to possible jitters. Currently leaving remote-controlled SOs.

commit bb3ead12e92b9551ae4f44f8648b38f3a79a0315
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 18:47:30 2020 +0300

    SW: Call FunctionKeys from getinput only if the latter is called
    from faketimerhandler. This should fix the timing of playing an
    RTS file's sound and sending the corresponding message.

commit 5e14c8f909de86ad7f2c6378d9fdb9fa18550b85
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 18:46:55 2020 +0300

    SW: Fix aiming in coop view

commit 00ed85d50b7b34cf3fa573b1645299c9d9bd6c85
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 18:10:48 2020 +0300

    SW: Don't interpolate a non-remote sector object controlled
    by the player. Make sure looking up/down is still smooth.

commit 5ea24e8277fb6694bcf635e0d0512c3e2a37db5b
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 16:35:46 2020 +0300

    SW: Disable interpolation of sector objects that
    don't move as smooth as possible in multiplayer

commit cac10455d271603af794407e83330b1112564a4c
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 15:11:08 2020 +0300

    Store sector object interpolation data in saved game

commit 8a4c9ba0e3c9a4b21307ede02f2a9f54905aca60
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 15:05:18 2020 +0300

    Remove the preceding sprite interpolation functions, not needed anymore

commit 95485ac55eb6b1604d068768e06b3508df66f90f
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 14:29:12 2020 +0300

    SW: Let's make use of interpso.*. Still need to do a few more things.

commit b7dbf622167c1e9d6d4e8f0de31978efda174f65
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 13:03:53 2020 +0300

    Add Sector Object interpolation menu toggle; Still having no impact.

commit d3c0b9e1e6f9269057c22ba92fc048f5425b26d2
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 12:28:49 2020 +0300

    SW: Add the currently-unused interpso.* files, enabling interpolation
    of sector objects as whole groups of points and sprite angles.
    
    The following goals are intended to be achieved with this code:
    - Make it easy to let the user toggle sector object interpolation.
    - Interpolate the angles of sprites carried by sector objects.
    - Use the right amount of samples for interpolating a sector object,
    depending on the players' locations, as done in the checks within
    DoSector. Unfortunately, modifying DoSector itself to
    unconditionally call MoveSectorObjects(sop, synctics) technically
    changes the way sectors move (in the logical sense), and was
    found out to make a specifically constructed user map unbeatable.
    - Make it easy to disable interpolation of a whole sector object in
    case of a need. This is especially important if such an object
    is controlled by a player in multiplayer, mostly since this
    isn't compatible with the way player prediction is working.

commit 9ea0503b06386c0351434ee65a4339bde2a0a0db
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 12:12:28 2020 +0300

    SW: Add the currently unused InterpolateSO option.
    A known issue, which also applies to existing settings like the voxel
    toggle, is that its value gets written to the saved game, and when such
    a game is loaded, the its value gets overwritten by the one in the
    saved game. Options should move to settings.cfg later, anyway.

commit c7125c9dd0d12afa4bdb99df6820d503358625cd
Author: NY00123 <ny00@outlook.com>
Date:   Fri May 1 00:56:26 2020 +0300

    SW: Add the oangdiff field to USER struct as suggested by Hendricks,
    and use it in MovePoints. This will be used for interpolating
    the angles of sprites carried by SOs soon.

commit 999a491c716b3b152f31332618ed2c9bdea12da0
Author: NY00123 <ny00@outlook.com>
Date:   Sun Apr 19 21:27:33 2020 +0300

    SW: Interpolate the player's bob_z, based on suggestion by Striker.
    Using pp instead of ppp seems to work better with prediction.

commit 2b1a271cb2f457dbd1aa5ad3f65f81a4cb8318f4
Author: NY00123 <ny00@outlook.com>
Date:   Sun Apr 19 21:16:56 2020 +0300

    sw/src/network.cpp: Disable most of the packet transmission
    debug messages unless NET_DEBUG_MSGS is defined

commit c3773c20d7ae29b32d0a31e26edc69c8cc9e295e
Author: NY00123 <ny00@outlook.com>
Date:   Sun Apr 19 21:15:57 2020 +0300

    sw/src/draw.cpp: Import from Duke3D the Polymost shadow drawing hacks

commit dbf1e37362ccf5f01422aa8d897ea0e5bf197a47
Author: NY00123 <ny00@outlook.com>
Date:   Sun Apr 19 00:58:45 2020 +0300

    sw/src/network.cpp: Fix waitforeverybody in Master/Slave
    modes. This uses SVN r1135 and r1143 as a reference.

commit 6f4e768620e20768202dc80e5c171490374871a4
Author: NY00123 <ny00@outlook.com>
Date:   Sat Apr 18 23:54:28 2020 +0300

    sw/src/network.cpp: Fix sending of messages in Master/Slave.
    Thanks Dynamo for spotting the bug.

commit 4a8175566f84a2b12aee4b654c218c240a3036e1
Author: NY00123 <ny00@outlook.com>
Date:   Sat Apr 18 17:38:31 2020 +0300

    sw/src/draw.cpp:analyzesprites: Interpolate other players' sprites, in a
    similar manner to what's done in Duke3D (with the addition of the angle).
    
    There seem to be some jitters with this, mostly in Master/Slave mode.
    Decreasing PAKRATE in mmulti.cpp might also increase the frequency
    of this occuring in Peer-2-Peer mode.

commit 989cc96dfa8869602632be6fa7ff67e5f0d0cb39
Author: NY00123 <ny00@outlook.com>
Date:   Sat Apr 18 14:01:35 2020 +0300

    sw/src/jsector.cpp:JS_DrawMirrors: Make camera oscilation
    less dependent on the frame rate.
    It would probably be better to update this from the game loop side,
    like in Duke3D, but it's still better than the preceding situation.

commit 9d6c8da02de3f2fb87f4a502cdbc3f25885b2696
Author: Mitchell Richters <mjr4077au@gmail.com>
Date:   Sat Apr 18 11:10:35 2020 +0300

    SW: Q16.16 refinements in DoPlayerDeathFollowKiller.

commit 1f5442791246b0a5204a5c676adc420c03cff360
Author: Mitchell Richters <mjr4077au@gmail.com>
Date:   Sat Apr 18 11:03:00 2020 +0300

    SW: Add GetDeltaQ16Angle.

commit 4c71e46e32da29901eb059b336dcb1b1cec24f05
Author: NY00123 <ny00@outlook.com>
Date:   Sat Apr 18 01:55:39 2020 +0300

    Add PedanticQ16AngleFloor to sw/src/game.h and use it in DoPlayerTurn

commit 0c6a86e0bcd9a5aed07e53166da2576738a74b38
Author: NY00123 <ny00@outlook.com>
Date:   Sat Apr 18 00:47:17 2020 +0300

    SW: Remove drive_oangvel from PLAYERstruct. We can use local variables instead.

commit b2b278767c43995f8fa00543fcbccaf46957f8f6
Author: NY00123 <ny00@outlook.com>
Date:   Sat Apr 18 00:10:55 2020 +0300

    SW - Hopefully a better way to decide if getinput should call
    DoPlayerTurn/DoPlayerHorizon while input is tied to the frame rate:
    Introduce the new player flags PF2_INPUT_CAN_TURN and PF2_INPUT_CAN_AIM.
    Set PF2_INPUT_CAN_TURN if DoPlayerTurn can be called outside
    of getinput. Similarly set PF2_INPUT_CAN_AIM if DoPlayerHorizon
    can be called in this manner.
    getinput will only call DoPlayerTurn/DoPlayerHorizon
    if PF2_INPUT_CAN_TURN/PF2_INPUT_CAN_AIM is set. These flags are reset
    right before the call to the player's current DoPlayerAction function.
    
    For one example in which this assists, it's not always the
    case that DoPlayerDeathFollowKiller may call DoPlayerTurn,
    even if we assume that pp->input.q16angvel is never zero.

commit dd867e71fff0a6d7609c5604252ca35db6e995b7
Author: NY00123 <ny00@outlook.com>
Date:   Sat Apr 18 00:09:27 2020 +0300

    SW: Temporarily lock angle and horiz right upon player death

commit f2d8af9bc19d326223c2ded23983538e255a54b5
Author: NY00123 <ny00@outlook.com>
Date:   Fri Apr 17 17:33:20 2020 +0300

    sw/src/draw.cpp:drawscreen: Don't interpolate while the game is paused

commit bcddc01a99651a1b41de29b1913d4a4634b91c5f
Author: NY00123 <ny00@outlook.com>
Date:   Fri Apr 17 23:33:10 2020 +0300

    sw/src/game.cpp: Remove unused ReloadPromptMode variable

commit 3cdeeab05899171e0b983e5a4f883e6cd0b4fb2f
Author: NY00123 <ny00@outlook.com>
Date:   Fri Apr 17 17:31:23 2020 +0300

    Minor SW cleanup: Have a single declaration of
    GamePaused within game.h. Do the same with ReloadPrompt.

commit 30eb858f81fdd0483c1f74f291fca3a3e93457f8
Author: NY00123 <ny00@outlook.com>
Date:   Fri Apr 17 16:26:12 2020 +0300

    SW: Migrate the player's RevolveAng field to Q16.16 format.
    This fixes truncations of q16ang in MovePlayer. One known
    fixed issue is a minor micro-shaking effect, reproduced
    while standing on a non-moving SO (e.g., the bus in level 1).
    The latter is also related to the use of camq16ang.
    
    Based in idea on patch from mjr4077au.

commit 82c02f4200ab59d18506ab324aa54ae5626d9639
Author: NY00123 <ny00@outlook.com>
Date:   Fri Apr 17 16:24:25 2020 +0300

    sw/src/draw.cpp:drawscreen: Use GetQ16AngleFromVect for pointing
    at a remote-controlled SO. In case PedanticMode == FALSE, this
    leads to small improvements with aiming at the car in EXAMPLE.MAP.

commit bdd4cd86fbb86a99b35a4dd63a7aaa94acd66586
Author: NY00123 <ny00@outlook.com>
Date:   Sat Apr 18 10:43:54 2020 +0300

    Add GetQ16AngleFromVect wrapper function to sw/src/game.h

commit 9bdb87cea937307907daf0db1fb1fc40f3a7e45f
Author: NY00123 <ny00@outlook.com>
Date:   Fri Apr 17 16:21:22 2020 +0300

    Add gethiq16angle and the getq16angle wrapper to the engine

commit c8887525e5045ea4d6eb7181eb848c372fb569a9
Author: NY00123 <ny00@outlook.com>
Date:   Thu Apr 16 21:43:14 2020 +0300

    SW: Lock angle and horiz right after teleporting to sprite

commit 1a3c9e3a15ba788607dfd96ebcc75a2198be6d69
Author: NY00123 <ny00@outlook.com>
Date:   Thu Apr 16 02:24:21 2020 +0300

    sw/src/draw.cpp:drawscreen: Removing the check that pp->sop_control
    is non-null seems to resolve the newly introduced interpolation
    issue for looking up/down while controlling a sector object.
    We can also remove the PF_DEAD test, since
    game.cpp:getinput should lock any kind of aiming.
    
    src/src/game.cpp:getinput: We now, however, need to further
    lock turning here while controlling a sector object.

commit 5e6acf23dfff91a30a55977aa2c36c783fc0f76d
Author: NY00123 <ny00@outlook.com>
Date:   Thu Apr 16 02:12:32 2020 +0300

    SW: Ensure the player's rendering angle is in sync with a rotating
    sector. This re-introduces the angle interpolation in drawscreen
    while sector object interpolation is in use.
    
    A side-effect of this is that looking up/down is now less smooth
    while controlling a sector object (e.g., a turret).

commit 966e9bdb5328806ca163537bab134b2c9787c4bd
Author: NY00123 <ny00@outlook.com>
Date:   Wed Apr 15 18:42:15 2020 +0300

    sw/src/track.cpp:MovePlayer: We also need to update pp->camq16ang here.
    Note that this angle is currently not interpolated,
    as done for the sector.

commit bf31bc2987a3eccd31d343622327bd4ee0f9c5a1
Author: NY00123 <ny00@outlook.com>
Date:   Wed Apr 15 14:45:19 2020 +0300

    sw/src/track.cpp:MovePlayer: Missed this in preceding interpolation fixes

commit ab8aee8e378a5bac027ec56a84268fa2f134ca07
Author: NY00123 <ny00@outlook.com>
Date:   Wed Apr 15 13:21:11 2020 +0300

    sw/src/track.cpp: If interpolation is enabled, also cover
    the SO's midpoint. Fixes aiming at a remote controlled SO.

See https://voidpoint.io/terminx/eduke32 for more details.

Synchronize file extensions for GRP scanning between Duke 3D and SW

Evan Ramos (Hendricks266) 17 May 2020, 23:52 UTC−5 aee713b

This way running both from the same folder won't invalidate the cache.

SW

Afraid that we should disable almost all kinds of SOs in multiplayer

NY00123 3 May 2020, 00:20 UTC+3 07df0eb

for now, due to possible jitters. Currently leaving remote-controlled SOs.

SW Fix

Call FunctionKeys from getinput only if the latter is called

NY00123 1 May 2020, 18:47 UTC+3 bb3ead1

from faketimerhandler. This should fix the timing of playing an RTS file's sound and sending the corresponding message.

SW Engine

Don't interpolate a non-remote sector object controlled

NY00123 1 May 2020, 18:10 UTC+3 00ed85d

by the player. Make sure looking up/down is still smooth.

SW Engine

Disable interpolation of sector objects that

NY00123 1 May 2020, 16:35 UTC+3 5ea24e8

don't move as smooth as possible in multiplayer

Engine

Store sector object interpolation data in saved game

NY00123 1 May 2020, 15:11 UTC+3 cac1045
Engine

Remove the preceding sprite interpolation functions, not needed anymore

NY00123 1 May 2020, 15:05 UTC+3 8a4c9ba
SW

Let's make use of interpso.*. Still need to do a few more things.

NY00123 1 May 2020, 14:29 UTC+3 95485ac
Engine

Add Sector Object interpolation menu toggle; Still having no impact.

NY00123 1 May 2020, 13:03 UTC+3 b7dbf62
SW Engine

Add the currently-unused interpso.* files, enabling interpolation

NY00123 1 May 2020, 12:28 UTC+3 d3c0b9e

of sector objects as whole groups of points and sprite angles. The following goals are intended to be achieved with this code: - Make it easy to let the user toggle sector object interpolation. - Interpolate the angles of sprites carried by sector objects. - Use the right amount of samples for interpolating a sector object, depending on the players' locations, as done in the checks within DoSector. Unfortunately, modifying DoSector itself to unconditionally call MoveSectorObjects(sop, synctics) technically changes the way sectors move (in the logical sense), and was found out to make a specifically constructed user map unbeatable. - Make it easy to disable interpolation of a whole sector object in case of a need. This is especially important if such an object is controlled by a player in multiplayer, mostly since this isn't compatible with the way player prediction is working.

SW Engine

Add the currently unused InterpolateSO option.

NY00123 1 May 2020, 12:12 UTC+3 9ea0503

A known issue, which also applies to existing settings like the voxel toggle, is that its value gets written to the saved game, and when such a game is loaded, the its value gets overwritten by the one in the saved game. Options should move to settings.cfg later, anyway.

SW Engine

Add the oangdiff field to USER struct as suggested by Hendricks,

NY00123 1 May 2020, 00:56 UTC+3 c7125c9

and use it in MovePoints. This will be used for interpolating the angles of sprites carried by SOs soon.

SW

Interpolate the player's bob_z, based on suggestion by Striker.

NY00123 19 Apr 2020, 21:27 UTC+3 999a491

Using pp instead of ppp seems to work better with prediction.

sw/src/network.cpp: Disable most of the packet transmission

NY00123 19 Apr 2020, 21:16 UTC+3 2b1a271

debug messages unless NET_DEBUG_MSGS is defined

Engine

sw/src/draw.cpp: Import from Duke3D the Polymost shadow drawing hacks

NY00123 19 Apr 2020, 21:15 UTC+3 c3773c2
Fix

sw/src/network.cpp: Fix waitforeverybody in Master/Slave

NY00123 19 Apr 2020, 00:58 UTC+3 dbf1e37

modes. This uses SVN r1135 and r1143 as a reference.

Fix

sw/src/network.cpp: Fix sending of messages in Master/Slave.

NY00123 18 Apr 2020, 23:54 UTC+3 6f4e768

Thanks Dynamo for spotting the bug.

Engine

sw/src/draw.cpp:analyzesprites: Interpolate other players' sprites, in a

NY00123 18 Apr 2020, 17:38 UTC+3 4a81755

similar manner to what's done in Duke3D (with the addition of the angle). There seem to be some jitters with this, mostly in Master/Slave mode. Decreasing PAKRATE in mmulti.cpp might also increase the frequency of this occuring in Peer-2-Peer mode.

sw/src/jsector.cpp:JS_DrawMirrors: Make camera oscilation

NY00123 18 Apr 2020, 14:01 UTC+3 989cc96

less dependent on the frame rate. It would probably be better to update this from the game loop side, like in Duke3D, but it's still better than the preceding situation.

Add PedanticQ16AngleFloor to sw/src/game.h and use it in DoPlayerTurn

NY00123 18 Apr 2020, 01:55 UTC+3 4c71e46
SW

Remove drive_oangvel from PLAYERstruct. We can use local variables instead.

NY00123 18 Apr 2020, 00:47 UTC+3 0c6a86e

SW - Hopefully a better way to decide if getinput should call

NY00123 18 Apr 2020, 00:10 UTC+3 b2b2787

DoPlayerTurn/DoPlayerHorizon while input is tied to the frame rate: Introduce the new player flags PF2_INPUT_CAN_TURN and PF2_INPUT_CAN_AIM. Set PF2_INPUT_CAN_TURN if DoPlayerTurn can be called outside of getinput. Similarly set PF2_INPUT_CAN_AIM if DoPlayerHorizon can be called in this manner. getinput will only call DoPlayerTurn/DoPlayerHorizon if PF2_INPUT_CAN_TURN/PF2_INPUT_CAN_AIM is set. These flags are reset right before the call to the player's current DoPlayerAction function. For one example in which this assists, it's not always the case that DoPlayerDeathFollowKiller may call DoPlayerTurn, even if we assume that pp->input.q16angvel is never zero.

SW

Temporarily lock angle and horiz right upon player death

NY00123 18 Apr 2020, 00:09 UTC+3 dd867e7

sw/src/draw.cpp:drawscreen: Don't interpolate while the game is paused

NY00123 17 Apr 2020, 17:33 UTC+3 f2d8af9

sw/src/game.cpp: Remove unused ReloadPromptMode variable

NY00123 17 Apr 2020, 23:33 UTC+3 bcddc01

Minor SW cleanup: Have a single declaration of

NY00123 17 Apr 2020, 17:31 UTC+3 3cdeeab

GamePaused within game.h. Do the same with ReloadPrompt.

SW Fix

Migrate the player's RevolveAng field to Q16.16 format.

NY00123 17 Apr 2020, 16:26 UTC+3 30eb858

This fixes truncations of q16ang in MovePlayer. One known fixed issue is a minor micro-shaking effect, reproduced while standing on a non-moving SO (e.g., the bus in level 1). The latter is also related to the use of camq16ang. Based in idea on patch from mjr4077au.

sw/src/draw.cpp:drawscreen: Use GetQ16AngleFromVect for pointing

NY00123 17 Apr 2020, 16:24 UTC+3 82c02f4

at a remote-controlled SO. In case PedanticMode == FALSE, this leads to small improvements with aiming at the car in EXAMPLE.MAP.

Add GetQ16AngleFromVect wrapper function to sw/src/game.h

NY00123 18 Apr 2020, 10:43 UTC+3 bdd4cd8
Engine

Add gethiq16angle and the getq16angle wrapper to the engine

NY00123 17 Apr 2020, 16:21 UTC+3 9bdb87c
SW Engine

Lock angle and horiz right after teleporting to sprite

NY00123 16 Apr 2020, 21:43 UTC+3 c888752
Engine

sw/src/draw.cpp:drawscreen: Removing the check that pp->sop_control

NY00123 16 Apr 2020, 02:24 UTC+3 1a3c9e3

is non-null seems to resolve the newly introduced interpolation issue for looking up/down while controlling a sector object. We can also remove the PF_DEAD test, since game.cpp:getinput should lock any kind of aiming. src/src/game.cpp:getinput: We now, however, need to further lock turning here while controlling a sector object.

SW Engine

Ensure the player's rendering angle is in sync with a rotating

NY00123 16 Apr 2020, 02:12 UTC+3 5e6acf2

sector. This re-introduces the angle interpolation in drawscreen while sector object interpolation is in use. A side-effect of this is that looking up/down is now less smooth while controlling a sector object (e.g., a turret).

Engine

sw/src/track.cpp:MovePlayer: We also need to update pp->camq16ang here.

NY00123 15 Apr 2020, 18:42 UTC+3 966e9bd

Note that this angle is currently not interpolated, as done for the sector.

Fix

sw/src/track.cpp:MovePlayer: Missed this in preceding interpolation fixes

NY00123 15 Apr 2020, 14:45 UTC+3 bf31bc2
Fix

sw/src/track.cpp: If interpolation is enabled, also cover

NY00123 15 Apr 2020, 13:21 UTC+3 ab8aee8

the SO's midpoint. Fixes aiming at a remote controlled SO.