HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Компьютерные игры > Грязные трюки разработчиков в коде игр
Мои комментарии
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



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

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

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

Часть первая: 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

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 172914

Старое сообщение 10-06-2018 12:06
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


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


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

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

Сообщить модератору | | IP: Записан
Сообщение: 172917

Старое сообщение 10-06-2018 12:19
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



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

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 172918

Старое сообщение 10-06-2018 12:32
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


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


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

Сообщить модератору | | IP: Записан
Сообщение: 172919

Старое сообщение 10-06-2018 12:37
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 172921

Старое сообщение 10-06-2018 13:44
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


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


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

Сообщить модератору | | IP: Записан
Сообщение: 172922

Старое сообщение 10-06-2018 14:00
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



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

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 172928

Старое сообщение 10-06-2018 15:16
-
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4415
Возраст: 34

Рейтинг



Спасибо.

Сообщить модератору | | IP: Записан
Сообщение: 172931

Старое сообщение 10-06-2018 15:58
- За что?
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


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


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

Сообщить модератору | | IP: Записан
Сообщение: 172932

Старое сообщение 10-06-2018 16:03
- За что?
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4415
Возраст: 34

Рейтинг



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

Сообщить модератору | | IP: Записан
Сообщение: 172935

Старое сообщение 10-06-2018 16:10
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 172937

Старое сообщение 10-06-2018 16:18
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4133

Рейтинг



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

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

Сообщить модератору | | IP: Записан
Сообщение: 172940

Старое сообщение 10-06-2018 16:40
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



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

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

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

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 172942

Старое сообщение 10-06-2018 18:35
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


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


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

Сообщить модератору | | IP: Записан
Сообщение: 172943

Старое сообщение 10-06-2018 19:22
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4133

Рейтинг



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

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

Сообщить модератору | | IP: Записан
Сообщение: 172944

Старое сообщение 10-06-2018 19:37
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 19:32. Новая тема    Ответить
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Компьютерные игры > Грязные трюки разработчиков в коде игр
Мои комментарии
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024