опыты снохождения

опыты снохождения

дегуманизация и скука

в начале месяца я болел, и привычные мои многочасовые съёмочные сеансы были бы не очень кстати. поэтому я решил автоматизировать процесс, соорудить фабрику картинок, где производством изображений будет заниматься случай. bandicam, который я использую для съёмки, может делать снимки автоматически с регулярными интервалами. более сложная задача - автоматизировать поведение игрового персонажа, к которому привязана камера. вообще на этот счёт у меня есть целая книга Ника Кано "game hacking: developing autonomous bots for online games", которая часто оказывалась полезной, но я так и не закончил её штудировать, и навёрстывать это с температурой почему-то показалось мне так себе идеей. я мог бы использовать игру, в которой для таких целей уже есть готовые решения - что-то постарше, где есть attract mode, или скайрим/гта, где есть трейнеры и скрипты, позволяющие передать компьютеру управление протагонистом. однако белый свет сошёлся клином на sleeping dogs, и я на ходу придумывал для неё очень кустарное и очень костыльное решение.

первая ночь

была самой бесхитростной: я поставил трейнер от sneakyevil, позволяющий сменить модель главного героя, выдал ему сигнальный огонь и шляпу и зациклил анимацию ходьбы по лестнице, из-за чего он забавной походкой начал перемещаться по прямой по игровому миру, врезаясь в малейшие препятствия (даже в бордюры) и скользя вдоль них. для большего визуального разнообразия я сломал значение глубины резкости и привязал его к циклически меняющейся переменной, чтобы картинка была то более, то менее размытой.

мне хотелось, чтобы персонаж автоматически менял направление своего движения, и я поставил программу autohotkey, симулирующую нажатия клавиш, и написал для неё скрипт на скорую руку, который нажимал бы клавиши, ответственные за перемещение. однако игра эти виртуальные нажатия не воспринимала. зато их воспринимал cheat engine, и я назначил там горячую клавишу для изменения угла обзора и переписал скрипт для autohotkey так, чтобы он регулярно нажимал её. проблему с направлением движения я решил оставить на следующий раз.

ещё я настроил расстояние от камеры до персонажа и её скорость так, чтобы она, следуя за ним, всегда немного запаздывала, и время от времени смотрела туда, где его уже нет.

после нескольких тестов и телепортаций персонажа я включил в трейнере режим "прохожие нападают на игрока" и отправился спать. игра вылетела приблизительно через час.

(из снимков, получившихся на протяжении каждой ночи, я отобрал по 20 штук - кажется, ровно столько, сколько нужно, чтобы были заметны и разнообразие полученного материала, и его неминуемое однообразие)

вторая ночь

была ночью пассивно-агрессивных прогулок. я пытался через cheat engine найти, как игра отслеживает нажатия клавиш, чтобы симулировать эти нажатия уже через горячие клавиши cheat engine и позволить таким образом autohotkey достучаться до игры. ничего из этой затеи не вышло! вместо этого я нашёл любопытную инструкцию, при отключении которой игра начала считать, что любые нажимаемые игроком клавиши бесконечно удерживаются. нажимаешь клавишу движения один раз - и он движется без конца. нажимаешь клавишу бега - и он перемещается бегом. при этом использование клавиш в игре контекстно-зависимо, поэтому этот подход оказался гораздо более гибким, чем простое зацикливание анимаций через трейнер: клавиша бега, например, ещё отвечает за перепрыгивание препятствий, и, если она удерживается, то при встрече с ними герой будет делать это автоматически. то же с кнопкой удара: герой будет бить, только если рядом есть противник. а кнопка уворота используется также для того, чтобы сесть в ближайшую машину (и, при удержании, тут же выйти из неё, и, если ничто не помешает, тут же снова в неё сесть). таким образом, если нажать их все, персонаж будет динамически взаимодействовать со своим окружением, примитивно реагируя на появление внешних раздражителей.

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

проблему со сменой направления движения я в конце концов решил очевидным способом: нашёл координаты персонажа и рядом с ними - вектор направления (по осям xyz). привязав к нему горячие клавиши и ещё раз переписав скрипт для autohotkey, я смог циклически его изменять. персонаж всё равно мог время от времени где-нибудь застревать и ходить кругами между двумя стенами, но это было уже гораздо лучше, чем то, с чего я начинал.

вместо глубины резкости в эту ночь я варьировал яркость и насыщенность шейдеров - они изменялись синхронно с направлением движения. всё происходящее в сумме ощущалось достаточно динамично, и в эту ночь я решил, что автоматической съёмки раз в минуту мне недостаточно, и выставил в bandicam интервал в 30 секунд.

несколько часов я пристально следил за перемещениями персонажа (ему на руки я с помощью трейнера нацепил координатные оси, а к голове приделал значок диалога), изредка помогая ему, если он застревал. потом я приготовил ужин, поел, глядя в экран, телепортировал персонажа в последний раз и отправился спать. через полтора часа игра вылетела.

третья ночь

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

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

четвёртая ночь

за несколько дней до этого я обсуждал со cpleev тезисы Синди Порембы о внутриигровой фотографии, написанные ещё в 2007, и то как до сих пор для многих (в том числе для большинства тематических сообществ) важным маркером художественности снимка является отсутствие на нём интерфейса игры — потому что снимок без интерфейса больше похож на традиционное фото. мне всегда казалось, что внутриигровая фотография - это не совсем фотография, и меня привлекает в ней во многом именно то, что на фотографию совсем не похоже. интерфейсы, как и сами игры, пластичны, и я часто выбираю не отключать их, а деформировать и акцентировать - поступать с ними так же, как я поступаю с игровым опытом.

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

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

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

Report Page