HLFX.Ru Forum Страницы (3): [1] 2 3 »
Показать все 39 сообщений этой темы на одной странице

HLFX.Ru Forum (http://hlfx.ru/forum/index.php)
- Компьютерные игры (http://hlfx.ru/forum/forumdisplay.php?forumid=19)
-- Грязные трюки разработчиков в коде игр (http://hlfx.ru/forum/showthread.php?threadid=5124)


Отправлено Дядя Миша 10-06-2018 в 12:06:

Грязные трюки разработчиков в коде игр

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

Пост будет обновляться по мере чтения. (комментарии имеют то же название, что и сами истории)

Часть первая: https://habr.com/post/328552/

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

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

Езда в нетрезвом виде
Кому-то очень сильно не хотелось подключать хидер, либо оффсет головного мозга. Это вот как раз тот случай, когда надо на мороз.

Десятичный код
А в ксаше тоже такое гамно есть, правда оно обвёрнуто в
#ifdef HACKS_RELATED_HLMODS

Все знаки говорят «нет-нет»
Тут немного подробнее, т.к. речь идёт о хорошо знакомом коде. В Q3 все события помещаются в пул событий и потом последовательно обрабатываются. Иногда это просто параметр, а иногда - кусок памяти, например с пакетом сетевого буффера. Очевидным решением было бы выделять маленький кусочек памяти на 4 байта и передавать его, но это бы привело к фрагментации памяти и замедлило бы скорость. Т.е. это хак ради оптимизации. Я такое не очень жалую, лично для меня проще заменить аргументы в "нескольких сотнях функций", потому что в реальности эта замена занимает 5-6 минут от силы. Иное дело, если мы нарушаем целостность API таким образом. Но здесь об этом речи не идёт.

Липкие жулики
иерархическое дерево ориентированных граничных контуров - это Axis Aligned Bounding Box Tree судя по всему. В квейках подобные деревья используютс для быстрого поиска энтити во время трассировки, чтобы уже конкретно с ней проверить точную коллизию. Если хотите посмотреть как выглядит трасса только по этому дереву без дополнительных проверок - в моём VHLT с тенями, установите для env_static "zhlt_shadowmode" "0". Короче говоря использовать подобное дерево для конечной проверки коллизий можно лишь в том случае если у вас архитектура не сложнее уровней первого вольфенштейна. А упоминание хавока вообще ни к селу ни к городу. Прилипание к стенкам это общая проблема большинства коллижен-детекторов, обычно с нею борются вводя охранный контур в 1 см\пиксель\юнит, чтобы успеть задетектировать начало столкновения. Во втором и третьем квейке, как я уже упоминал в коде физики введён маленький овербоунс, чтобы игрока, прилипшего к стенке тут же от нее оттолкнуло. Вообщем это не частная проблема неизвестного анонимуса и не грязный трюк. Тут каждый извращается как может.

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

В гневе я страшен
К программированию прямого отношения это не имеет, это скорее грязный психологический трюк. Не знаю, прокатит ли такое с нашим менталитетом. Если мне доведётся сделать что-то подобное, то вместо фотографии я запишу на микрофон как я страшно кричу, уверен это гораздо действенее. Ну или помните как DJ Грув страшно кричал, када ему всякую попсу предлагали поставить? Вот типа тово

Антигерой программирования
Это очень спорная тема с технической точки зрения. Дело в том, что массив объявленный статически, при условии отсутствии к нему обращений оптимизируется компилятором таким образом, что вообще не занимает память. На достоверность истории можно положиться лишь в том случае, если старые компиляторы не умели этого делать.

Часть вторая: https://habr.com/post/343516/

День, когда у Super Time Force сели батарейки
память перемотки - это Undo buffer. Ктож там эти статьи переводит-та... Вообще такие геймплейные задачи втупую не решаются. Хрен его знает что там было на самом деле и почему они сделали так. Слишком мало информации. Но вводить игрока в заблуждение индикатором разряда батарей это низко и подло ящитаю.

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

Унесённые бе́лками
Ну в халфе тоже всё завязано на тайминг анимаций, ничего необычного. Я уже молчу про баг, который недавно Ксерокс раскопал, что там доворот до ideal_yaw считается с неправильной скоростью. В халфе, я имею в виду.

Рекламофобия
Вот тут я вообще не понял ни причины ни решения. Либо перевод кривой, либо что-то такое, с чем я не сталкивался.

И… снято!
Пример того как временные хаки поселяются навсегда.

Чёрный лёд, белый шум
Вообще говоря весьма много эффектов базируются на привязке\трансформации положения камеры игрока. Вы думаете как зеркало устроено? Это просто трансформация камеры зеркального прохода о плоскость зеркальной поверхности. Это абсолютно нормальный подход, ни о каком хаке, тем более грязном речи не идёт. Мы же не считаем хаком спрайты, которые всегда ориентированы на камеру игрока. Я ж говорю, путаница с терминами.

Отправляйся прямиком в тюрьму
Перевод скорее всего кривой, ребята просто написали враппер.

DLL-it yourself
Про совпадающие наборы инструкций я кое-что слышал, но на практике не сталкивался. Не знаю что тут грязного или трюкового.

Мост слишком далеко?
К коду не имеет отношения, но если человек не силён в моделировании, то что ему остаётся?

Звучит неплохо!
Да тоже нормальное решение. У меня на Aureal Vortex если _snd_mixahead равен 0.1 звук дико хрипит. Поэтому в ксаше, я подкрутил квар до 0.12 и все хрипы полностью прошли. Я не знаю с чем это связано, может с деградацией железа, может с обновлением винды, но точно помню что раньше ничего не хрипело и со значением 0.1

Часть третья: https://habr.com/post/344822/

Про экран загрузки
Ксаш такое проделывает когда переключается между играми. Но между уровнями это маразам. Очевидно здесь всё пошло не так с самого начала.

ОЗУ и Крэш
С нехваткой памяти рано или поздно каждый столкнётся. Памяти всегда нехватает.

Внимание к деталям
Турки атомстили немцам за своего дедушку, а немцы даже ни о чём не догадались.

Важен не размер...
Это маркетинговые штучки на самом деле. Потому что карты на 512мб дороже стоят.

Куча мучений
Отпечатки для уменьшения фрагментации тоже нормальный подход, хотя и не всегда применимый.

Пакуем пиксели
Это называется реверс-инжинеринг, если вдруг кто не в курсе, что вряд ли

Just brew it
Ничего не могу сказать, слишком переврано всё.

Четвертая часть: https://habr.com/post/358704/

Благодарим за игру!
Стрёмная хрень на самом деле. А если память повреждалась не при выходе, а задолго до? Тут нечем гордится, идиотизм какой-то.

Стопроцентно чистые фруктовые соки
Хотел бы я конечно узнать какой именно движок они имели в виду. Но описанная ситуация вполне реальная. А вот кто в ней виноват - авторы движка или рассказчик понять невозможно.

Перемотка вперёд
Я уже смутно помню то время, но в NBA JAM TE была батарейка, а не флэш-память. То есть либо третья черепашка брешет, либо моя память. К тому же на территории России поддельные китайские картриджы были вообще без батареек, естественно и там ничерта не сохранялось. То есть дважды печалька.

Задымление
Иными словами нарисовать кучу партиклей на PS2 дешевле, чем две комнаты. Что-то с филлрейтом интересное. Или опять враньё и неточности.

… а может сюда?
Похоже на заметание мусора под диван.

Подстандарт
Это соотношения сторон экрана вообще жуткая головная боль.

Стремление к константам
#define true false // happy debugging!

Реальность кусается
Я в новом билде ксаша кидаю исключение во время ошибки в var-args. Настала полная гармония. До сих пор удивляюсь почему такое простое решение мне так долго не приходило в голову. Теперь если там неправильные аргументы, вместо сообщения выводится "exception in vsnpritnf" и васякот.

Ваши данные готовы
под дурацкие требования всегда появляются еще более идиотские хаки.

Камера-обскура
Вот до чего доводит поиск класса камеры в исходниках Ку3!

Хексапильность
Ну то же что и с EMM386. По рукам лопатой и на мороз.

Короткий стек
Прикольно.

Назад к основам
Да иногда вот так смотришь и думаешь, ну всё же одинаковое, ну почему по разному. А когда находишь причину долго смеешься.

Мойщики окон
В этой истории самое главное, что они потом сделали нормальное исправление, а не оставили как есть на 20 лет.

Результаты могут отличаться
Ну вот очередные хитрости, на очередные идиотские ограничения.

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page


Отправлено Government-Man 10-06-2018 в 12:19:

Цитата:
Дядя Миша писал:
либо оффсет головного мозга. Это вот как раз тот случай, когда надо на мороз


Ну зачем сразу на мороз-то? Пусть человек пишет например систему сериализации. Правда в унреале (вот эта штука GEngineLoop именно оттуда) уже есть такая система...

ЗЫ. Я хз может это связано с тем что энджин-луп живет в модуле Launch а доступ туда пытаются получить из кода игры...

__________________
Vladimir Putin's paternal grandfather, Spiridon Ivanovich Putin (1879–1965), was employed at Vladimir Lenin's dacha at Gorki as a cook, and after Lenin's death in 1924, he continued to work for Lenin's wife, Nadezhda Krupskaya. He would later cook for Joseph Stalin when the Soviet leader visited one of his dachas in the Moscow region. Spiridon later was employed at a dacha belonging to the Moscow City Committee of the Communist Party of the Soviet Union, at which the young Putin would visit him.


Отправлено Дядя Миша 10-06-2018 в 12:32:

Цитата:
Government-Man писал:
Пусть человек пишет например систему сериализации

В сериализации тоже можно всё оформить в красивую табличку с offsetof.
Если человек куда-то лезет по оффсетам не имея на то реальной причины - это сразу на мороз. Родина ему компилятор дала не для этого.

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page


Отправлено Government-Man 10-06-2018 в 12:37:

Цитата:
Дядя Миша писал:
В сериализации тоже можно всё оформить в красивую табличку


Прошлый век жы
Сейчас модно использовать кодогенерацию для этого.

__________________
Vladimir Putin's paternal grandfather, Spiridon Ivanovich Putin (1879–1965), was employed at Vladimir Lenin's dacha at Gorki as a cook, and after Lenin's death in 1924, he continued to work for Lenin's wife, Nadezhda Krupskaya. He would later cook for Joseph Stalin when the Soviet leader visited one of his dachas in the Moscow region. Spiridon later was employed at a dacha belonging to the Moscow City Committee of the Communist Party of the Soviet Union, at which the young Putin would visit him.


Отправлено Дядя Миша 10-06-2018 в 13:44:

Ну ладно, три части прокомментировал, четайте. Четвертую попозжа.

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page


Отправлено Government-Man 10-06-2018 в 14:00:

Цитата:
Дядя Миша писал:
Ну в халфе тоже всё завязано на тайминг анимаций, ничего необычного.


Ну одно дело если у монстра что-то завязано на тайминг своих же анимаций. Совсем другое - когда у тебя стоящая где-то на уровне крыса активирует триггер.

__________________
Vladimir Putin's paternal grandfather, Spiridon Ivanovich Putin (1879–1965), was employed at Vladimir Lenin's dacha at Gorki as a cook, and after Lenin's death in 1924, he continued to work for Lenin's wife, Nadezhda Krupskaya. He would later cook for Joseph Stalin when the Soviet leader visited one of his dachas in the Moscow region. Spiridon later was employed at a dacha belonging to the Moscow City Committee of the Communist Party of the Soviet Union, at which the young Putin would visit him.


Отправлено Дядя Миша 10-06-2018 в 15:16:

Цитата:
Government-Man писал:
Совсем другое - когда у тебя стоящая где-то на уровне крыса активирует триггер.

вообще-то халфовские эвенты позволяют активировать цели на карте. Барник на c1a0 поворачивает своё кресло таким образом, если не знал.

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page


Отправлено Crystallize 10-06-2018 в 15:58:

Спасибо.


Отправлено Government-Man 10-06-2018 в 16:03:

Цитата:
Дядя Миша писал:
Барник на c1a0 поворачивает своё кресло таким образом


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

__________________
Vladimir Putin's paternal grandfather, Spiridon Ivanovich Putin (1879–1965), was employed at Vladimir Lenin's dacha at Gorki as a cook, and after Lenin's death in 1924, he continued to work for Lenin's wife, Nadezhda Krupskaya. He would later cook for Joseph Stalin when the Soviet leader visited one of his dachas in the Moscow region. Spiridon later was employed at a dacha belonging to the Moscow City Committee of the Communist Party of the Soviet Union, at which the young Putin would visit him.


Отправлено Crystallize 10-06-2018 в 16:10:

Прочитав все статьи я понял ваше презрение к интеллекту аудитории Хабра.


Отправлено XaeroX 10-06-2018 в 16:18:

Все эти хаки произрастают из одного - непонимания важности организации грамотного рабочего процесса.
Вы не поверите, сколько людей до сих пор - и у нас (что ожидаемо), и на Западе (увы) - не осознают необходимость банальных вещей типа обязательного код-ревью, юнит-тестов и code coverage, чёткого стиля кодирования и линтеров. Поначалу головокружение от успехов - "пока в Вилларибо покрывают код тестами, в Виллабаджо уже релиз, и считают хрустящие купюры". Но жизнь не простит небрежности. Через год в Вилларибо будут спокойно и без овертаймов выкатывать апдейт за апдейтом, а в Виллабаджо будут ночами приделывать головы к поездам (или наоборот).

__________________
So she began again: 'Où est ma chatte?' which was the first sentence in her French lesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver all over with fright. 'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt the poor animal's feelings. 'I quite forgot you didn't like cats.'


Отправлено nemyax 10-06-2018 в 16:40:

Цитата:
Government-Man писал:
Но вот если бы анимация барника на одном конце карты активировала какой-нибудь левый скрипт на другом ее конце - это было бы уже крайне неочевидным решением.

О, такого полно в миссиях к классическим Thief-ам.


Отправлено Дядя Миша 10-06-2018 в 18:35:

Цитата:
Government-Man писал:
Но вот если бы анимация барника на одном конце карты активировала какой-нибудь левый скрипт на другом ее конце - это было бы уже крайне неочевидным решением

Технически никто не мешает такое сделать например - возможность есть.
Да наш Доктор Тресни обязательно бы сделал.

Добавлено 10-06-2018 в 21:35:

Я дописал комментарии, наслаждайтесь.

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page


Отправлено Government-Man 10-06-2018 в 19:22:

Цитата:
Дядя Миша писал:
Технически никто не мешает такое сделать например - возможность есть.


Так технически есть возможность и к переменным по оффсетам обращаться. Но ты почему-то хочешь за такое на мороз выгонять.

__________________
Vladimir Putin's paternal grandfather, Spiridon Ivanovich Putin (1879–1965), was employed at Vladimir Lenin's dacha at Gorki as a cook, and after Lenin's death in 1924, he continued to work for Lenin's wife, Nadezhda Krupskaya. He would later cook for Joseph Stalin when the Soviet leader visited one of his dachas in the Moscow region. Spiridon later was employed at a dacha belonging to the Moscow City Committee of the Communist Party of the Soviet Union, at which the young Putin would visit him.


Отправлено nemyax 10-06-2018 в 19:37:

Цитата:
Government-Man писал:
Так технически есть возможность и к переменным по оффсетам обращаться. Но ты почему-то хочешь за такое на мороз выгонять.

Можно же хотя бы похожий структ объявить и не издеваться.


Временная зона GMT. Текущее время 20:44. Страницы (3): [1] 2 3 »
Показать все 39 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Chain Studios © 2005-2018