Жопа бомбит уже, помогите
Когда игрок поворачивает камеру ровно на север, в памяти по адресу 0xB6F258 лежит значение, равное -пи/2 радиан (-90 градусов), вот пруфы
т.е. если записать угол поворота камеры = -90 градусов, она повернется ровно на север.
Опкодер выкладывал функу
:getZAngleBetweenPoints
0063: 0@ -= 2@
0063: 1@ -= 3@
0604: get_Z_angle_for_point 0@ 1@ store_to 4@
0AB2: 1 4@
Эта функция возвращает угол, между двумя игроками, относительно точки на карте, находящейся на севере. Вот для наглядности(угол альфа - то, что вернет эта функция, если передать в нее 3д координаты желтого кружка("я") и оранжевого ("цели")).
Чтоб повернуть камеру ровно на ебучую цель, достаточно записать в память по адресу 0xB6F258 значение, возвращаемое функцией опкодера - 90, переведенное в радианы. И это работает, всё прекрасно наводится, но хуйня в том, что наводит на цель оно ровно ЦЕНТР экрана(так можно на изи аим на снайпу сделать) В других же стволах(кроме снайпы) прицел находится на 20 игровых пикселей правее, чем центр экрана и хуй пойми, как переделать всё под эту ситуацию.
Попробовал сделать так:
Брал игровые 2д 340.0 х 180.0(2д коорды прицела), переводил их в игровые 3д с глубиной, равной расстоянию от камеры до $PLAYER_ACTOR, тем самым получая координаты точки в пространстве, находящейся на месте прицела и передавал эти координаты в функу опкодера вместо своих. Это немного помогло - наводиться стало чуть точнее, чем было до этого, но все же при изменении расстояния от меня до цели, прицел стал чуть убегать вправо. Эту неточность можно было скорректироваь, но корректировать ее, прибавляя для каждого расстояния разные значения - это ебаный бдсм, так быть не должно (хоть и получается более-менее нормально)
Я психанул, отрендерил на экране всю хуйню, с которой работаю
-
зеленый вектор - идет от центра моего скина(Actor.StorePos) к центру скина цели
-
тонкий желтый вектор - идет от прицела до цели
-
жирный желтый вектор - идет от точки, которая находится чуть правее центра моего скина (правее на 20.0 игровых пикселей, что соответствует положению прицела по "у" в 2д) до цели
-
красный вектор - условно идет от камеры до этой же точки, которая находится чуть правее центра моего скина
-
красная тонкая вертикальная линия - середина экрана по "у" (320.0 игровых пикселей)
-
серая тонкая вертикальная линия - положение прицела по "у" в игровых 2д (340.0 пикселей)
Короч хер знает что с этим всем сделать, чтоб на цель наводился именно прицел, а не центр экрана и не точка, находящаяся между прицелом и центром экрана. Предполагаю, что это из за того, что запись в 0xB6F258 значения, равного -90 градусов поворачивает на север именно центр экрана, а не прицел, и потом, естественно, из за этого будет неточность, тогда скажите, какое значение записать в 0xB6F258, чтоб повернуть на север именно ПРИЦЕЛ. Я почти уверен, что дело в этом, но уже рили затрахался всё это перепроверять, хер знает, мб вы свежим взглядом со стороны че-то еще увидите