No Man's Sky "Центрирование мыши"

Я не понимаю как все спокойно годами играют в игру, где реализовано на столько издевательское решение управления камерой мышью, эмитирующей аналоговый стик.

Может у меня у одного всё на столько плохо? Но по мне так очень неудобно каждый раз возвращать не только мышку к центру, но и стараться отцентрировать условный стик.
Есть у меня и геймпад, но играть в No Man's Sky на геймпаде, тоже сомнительное удовольствие.

По такому поводу я решил сделать собственный костыль в меру своих способностей.

Суть её работы проста и заключается лишь в одной функции: постоянно возвращать курсор мыши к центру экрана.

Значение первого поля (на скриншоте имеет значение «2») — интервал в миллисекундах, через который происходит возврат курсора.
Значение второго и третьего полей (при запуске автоматически берут разрешение экрана) — разрешение, в рамках которых определяется центр. Изменение этих значений позволяет смещать центр в случае необходимости.
Play (меняется на Pause) — запуск/остановка постоянного центрирования.
Exit — выход.

Горячие клавиши
Пробел — Play/Pause.
F5 — Exit.
Вверх/вниз, влево/вправо — менять значение разрешения.
Галочки на «Shift», «Ctrl» и «Alt» определяют какие клавиши необходимо зажать для срабатывания горячих клавиш. То есть, если галочки стоят так же, как на скриншоте, то, например, сочетание Ctrl+Alt+Пробел будет запускать и останавливать центрирование.

И да, я пробовал рекомендацию по изменению значений в файле конфигураций на -50. В моём случае это приводит к инвертированию осей мыши. И если верх/низ я могу инвертировать обратно, то лево/право уже нет.

Комментарии: 8
Ваш комментарий

Не совсем понял. В каких местах нужно центрирование? Много, конечно, не играл в игру, часов 40 может, но не видел проблем с мышью.

1

В моём случае оно необходимо во всех местах от начала запуска и до выхода на рабочий стол. Не знаю как у других, но у меня эта игра воспринимает мышку исключительно как имитацию пальца на аналоговом стике. Соответственно, движения мыши относительно центра экрана у меня отклоняют условный аналоговый стик игры.

0

Кстати, с этой утилитой мне удавалось нормально играть на домашнем компьютере через АниДеск.

0

Так центрирование в игре вроде есть же

0

Вроде есть, но работает оно плохо. А если играть через удалённый доступ, то его недостаточно.

1

Спасибо, как то было подобное нужно, но уже не помню для чего. Скачаю, пусть полежит до случая.

0

Не знаю на сколько это связано, но у меня игра иногда просто бросает курсор вверх-вправо
Это не зависит ни от компа на котором я играю, ни от мышки которой я играю - то есть меняя полностью железо - я вернулся в игру и столкнулся с той же самой проблемой
В процессе это раздражает, когда я иду прямо и тут резко начинаю идти и смотреть непонятно куда
В полёте это тоже происходит, курсор отбрасывает периодически верх-право

0

Решил таки потестить у себя эту софтину, попытаться пролечить баг в игре
Начну с конца - не помогло, камеру / курсор всё равно бросает
Так что проблема явно в другом

Дальше тех. часть, через что я заставил себя пройти, чтобы это выяснить
Кому не интересно - можно не читать

Даже не запуская игру - нашёл баг в этой софтине
Точнее, это не баг, а недоработка
У меня три монитора, первый стоит справа, и пиксельное пространство центрального, на котором я играю - находится в минусе, это видно на моём скриншоте

В программе указать отрицательное число - нельзя, а мне надо в моём случае, 1920-1920*2= -1920
Так что надо менять порядок мониторов
Либо - поправить тулзу, так что реквестирую сорцы, или исправление
Забегая наперёд скажу, что и сорцы, и исправление я уже замутил себе сам

Я попытался через CheatEngine ввести отрицательное число, получил значение где-то на грани 2^32-1, то есть разраб тулзы зачем-то использует тип данных unsinged int вместо обычного инта ... Самонадеянно, однако
Попытался изменить тип данных для значения - тоже не даёт ничего, видать функция в программе тоже принимает unsigned int ... Дважды самонадеянно

Судя по размеру исполняемого файла - сделан он на шарпе, так что я расчехлил некогда скачанный декомпилятор (ILSpy, качал в 2017 году)
И да, у нас тут uint'ы во всей их красе )
Точнее не так, там - decimal, которые автор зачем-то обрезает от нуля, но сам метод дальше принимает обычный int, что выглядит довольно странно
Скорее всего просто в свойствах элемента указан диапазон от нуля до 9999
Ещё более смешно это выглядит, учитывая шаг стрелок - по 10 пунктов )
Я вот честно не помню, какие там значения по умолчанию, может зря гоню на автора

ILSpy не позволяет перекомпилировать, поэтому я скачал dnSpy, метод cursorToCenter(), ввёл суда свои цифры вместо тех, что считываются с полей ввода
У меня это -960, 540
По хорошему - это надо делать файлом, в котором описывается рабочее пространство, в данном конкретном случае достаточно двух цифр - расчётные координаты центра нужного монитора, которые (координаты) будут независимы от конфигурации мониторов
Можно конечно усложнить рабочими отрицательными разрешениями - но большого смысла в этом нет, к тому же не понятно на что делать, мониторы могут стоять не только горизонтально, но ещё и вертикально

Мне как водится, лень, потому что и так работает как надо - центрирует на втором мониторе
Потому что реально по хорошему - нужно разрешить ввод отрицательных чисел и желательно через файл, разбираться с этим я желанием не горю
В идеале программа должна сама считывать конфигурацию мониторов, и при вариантах больше одного - спрашивать у пользователя, на каком мониторе нужно центровать

Но принципиально - не должно быть таких багов, требующих применение таких костылей
Да ещё и не помогает это центрирование, лично мне, проблема всё равно остаётся актуальной, на форумах либо не то, либо на вопросы нет никаких ответов, и так уже несколько лет, куда писать с этим багом - решительно непонятно

0