Pull to refresh
203
0.1
Sergei Kushnirenko @dalerank

Люблю (ш)кодить, алгоритмы и старые авто.

Имя enum'a C++ в рантайме

Reading time 10 min
Views 3.5K
Abnormal programming *Open source *C++ *

Получение имени типа, не важно это структура или перечисление, в C++ — проблема. То, что тривиально известно компилятору на этапе парсинга исходников, не получится перевести в человеко-читаемый вид в рантайме. Можно использовать std::type_info::name, который не является переносимым решением, потому что зависит от реализации манглинга в компиляторе. Некоторые компиляторы (например, MSVC, IBM, Oracle) создают "удобное" имя типа, а вот gcc и clang, возвращают искаженное имя, котороe можно преобразовать в удобочитаемую форму с помощью дополнительных функций, например abi::__cxa_demangle. Чтобы вся эта магия работала нужно подключить RTTI, который тоже не всегда доступен, а иногда и вообще-то вреден, потому что сжирает драгоценную производительность, но можно сделать по другому.

follow the white rabbit
Total votes 7: ↑7 and ↓0 +7
Comments 11

Кручу, верчу, imgui loader нарисовать хочу…

Reading time 7 min
Views 4.1K
Open source *Programming *C++ *Interfaces *

В одном из сайд-проектов с использованием imgui понадобилась "вертячка" (loader, spinner, анимация загрузки). Из коробки этот ui-фреймворк таких виджетов не предоставляет, поэтому решил сделать свой: код простой, математики почти нет. Показал ocornut-y, ему тоже понравилось, теперь базовый виджет на очереди интеграции в imgui. Поискал интересные спинеры на разных сайтах для веб-интерфейсов - десятки видов на любой вкус и цвет, есть и 3д, но все в основном или пререндеры в виде (gif) или векторные анимации, которые для отрисовки требует отдельного фреймворка вроде cairo, а алгоритмов или описания как это работает, почти нет. Все спинеры сделаны в стиле "что вижу, то и пою", немного математики синусы/косинусы для координат, и тестировать пока не будет похоже на решение от UI дизайнера. Да-да, я понимаю, что когда космические корабли бороздят просторы большого театра DALL·E 2 рисует "улыбку мадонны", писать что-то на плюсах, да еще для UI...

Много анимаций, мало кода
Total votes 22: ↑22 and ↓0 +22
Comments 4

Торопиться не надо… (Про спинлоки)

Reading time 13 min
Views 7.2K
Open source *System administration *C++ *

После небольшой статьи про особенности при работе с кэшем (https://habr.com/ru/post/687146/) мне в личку прилетело несколько замечаний про работу спинлоков и приглашение на собес от пчелайнов, приятно, что технические статьи читают не только технари... лирика. Возвращаясь к обсуждению спинлоков, вышедших за рамки хабра, если это вызвало интерес, почему бы не написать про работу с этими примитивами синхронизации. Тема действительно интересная, да и разработчики придумали более десятка разновидностей спинлоков под разные вкусы и нужды. Все опять будет с тестами и примерами работы. @tbl Линус действительно прав, в юзерспейсе спинлоки "зло злющее", но как обычно есть нюансы...

Читать далее
Total votes 22: ↑22 and ↓0 +22
Comments 8

Cache pollution? Запасайтесь тестами

Reading time 16 min
Views 7.1K
Programming *C++ *Game development *Algorithms *

Всем ведь приходилось заниматься улучшением производительности? Для игр особенно актуально, ну может какая-то три-в-ряд не страдает этим. Как обычно серебряной пули нет, начинаем со структур данных, алгоритмов, спускаемся ниже если не помогает, придумываем SoA, AoS шаблоны. Если проблема не решается, подтягиваем профайлеры и предметно разбираем узкие места, но все чтобы мы не делали зачастую таким узким местом всегда будет "железо". Можно сколько угодно оптимизировать другие места, но CPU c его гигагерцами будет простаивать 90% времени если его неправильно "кормить" данными. Одной (только одной из проблем) проблемой организации эффективной работы с данными будет меньше, если знать и уметь работать с кэшами разных уровней. Тут на вики описано, как "на пальцах" быстренько убить перф на обходе массива, простого и общего решения для такого обхода нет. Можно и дальше увеличивать размер кэша, что собственно и делают (гдето здесь на хабре была новость, что Интел при переходе на L1 кэш размером 32кб, заново спроектировал блок доступа к нему, сорян не нашел ссылку), но это дорого, неэффективно на масштабах современных процов, и всегда найдутся данные, которые этот кэш отравят, опять. Интересно как починить? го под кат...

Читать далее
Total votes 41: ↑41 and ↓0 +41
Comments 7

Анастасия, извините, наболело…

Reading time 2 min
Views 18K
Personnel Management *
Наверное любая большая компания, с большим объемом найма, пытается привлечь новых сотрудников разными способами, это скорее всего подразумевает большое количество HR-спецов. Пропорционально растет и шанс того, что какой-то из них дико «лажанет» с неподходящим кандидатом. Думаю, это просто вопрос времени… Уважаемые hr'ы, ну загляните в профиль того человека, к которому обращаетесь, перед отсылкой спама. К вам ведь будут относиться также, и даже если не к вам лично, то к фирме, приславшей такое, уважения у потенциального кандидата точно будет меньше. Надеюсь у компании, в которой собрались лучшие IT-профессионалы восточной Европы, найдется возможность сделать своих HR не менее профессиональными.

Читать дальше →
Total votes 63: ↑35 and ↓28 +7
Comments 55

Timetracker для Youtrack: DIY

Reading time 5 min
Views 3.6K
Open source *C++ *Agile *DIY
Есть замечательное приложение T-REC позволяющее трэкать время, потраченное на задачи в Youtrack, и записывающее его в таску. Но автор забросил его больше двух лет назад, плюс старые зависимости, постоянная загрузка одного ядра (тут видимо виноват electron) и периодические падения привели к тому, что пользоваться им стало «неудобно». Решил написать свой, с тем же функционалом, только на плюсах, так появился Honsu…


Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Comments 0

Когда хочется красивый GUI, а gpu нет

Reading time 3 min
Views 16K
Vector graphics *C++ *
Обычно для рабочих утилит не требуется вменяемый UI, с кнопками, списками, окнами, поддержкой мыши и прочей мелочевкой, большинство рабочих «хотелок» можно упаковать в скрипты и иногда запускать их с параметром --help, и так будет даже правильней с точки зрения настройки и масштабирования. Все становится хуже, когда тулами начинают пользоваться не только команда разработки, но и сторонние люди. А они не всегда готовы вникать в стройные мысли, уложенные в строчки кода. И тогда приходится городить UI, а он у разработчиков выходит обычно простой, квадратный, функциональный и совсем скучный. Некоторое время назад я работал над небольшой системой управления вентиляцией/обогрева/камерами и еще того «что придумает вон тот дядечка в желтой каске» для подземной автостоянки.


Читать дальше →
Total votes 34: ↑33 and ↓1 +32
Comments 22

Caesar3 все таки open

Reading time 2 min
Views 20K
Open source *Game development *C *Game design *


Некоторое время назад, примерно с 2008 года, у меня был хобби-проект по воссозданию довольно знаменитого конце ХХ века ситибилдера Caesar III ©, в процессе работы над игрой был написан ряд статей по механике игры и её внутреннему устройству (например эта).
Дайте же сорцы, наконец
Total votes 76: ↑76 and ↓0 +76
Comments 30

Caesar III: game loop

Reading time 27 min
Views 68K
Open source *C++ *Game development *
Если бы меня спросили, какая часть технической реализации игры «Цезарь» мне интересна больше других, я бы вспомнил о расчете одного «дня» городской жизни. Отдельные компоненты математической модели города тоже интересны в реализации, но эти «шестеренки» будут крутиться только в сборе. Большая часть игры проходит внутри «игрового цикла», в котором проводятся вычисления параметров компонентов, выполняются перемещения игровых объектов, создаются новые события и объекты. Если вам интересно узнать, как была устроена симуляция города в одной из лучших игр 1998 года — добро пожаловать под кат. Описания, псевдокод и схемы помогут вам лучше узнать об используемых алгоритмах.


Читать дальше →
Total votes 151: ↑150 and ↓1 +149
Comments 26

Ремейк Caesar III: математическая модель города

Reading time 6 min
Views 66K
Open source *Game development *
Я помню как играл первый раз в Цезарь 3, это удивительно умная и сбалансированная игра, создает чувство, что город живет своей жизнью и после завершения миссии. Можно провести часы, наблюдая за городом и не вмешиваться в его жизнь: плебеи будут бегать по городу в поисках работы, а патриции жаловаться на неважные условия жизни, торговцы, школьники, лодки, жрецы — этот мир замирает лишь в минуты пауз, давая игроку возможность продумать следующий шаг. Исследуя внутренние алгоритмы игры, я не перестаю удивляться с какой точностью авторы сложили кусочки мозаики, под названием «баланс». За время, проведенное над восстановлением кода оригинальной игры скопилось достаточно материала по макромеханике игры, которым я хочу поделиться с хабрасообществом.


Plebs are needed!
Total votes 142: ↑141 and ↓1 +140
Comments 78

Да будет брошен жребий ©

Reading time 1 min
Views 6.7K
Self Promo
Приветствую хабражителей.

Я думаю, многие из вас читали мои статьи по реверсу цезаря (тыц, тыц, тыц, еще одна и про андроид), мне действительно нравится эта игра, и желание запускать ее на современных компьютерах побудило меня заняться исследованием, а впоследствии и программированием своей реализации. И хотя сейчас есть оригинальный цезарь на gog.com, и проблема запуска на современных PC была решена, я ушел чуть дальше, и сделал порт на linux, mac, android и haiku, в планах портировать и на другие платформы: так маленькое хобби выросло в полноценный проект.

Но, конечно, не все так просто, начали писать владельцы марки. Мой проект был и дальше останется некоммерческим и open source, но для запуска ремейка нужны текстуры оригинальной игры (т.е. сначала нужно купить у них), все равно договариваться они не хотят ни в какую.
И сейчас я стою на распутье — плюнуть на годы труда или рискнуть довести идею до ума и возможно сделать что-то прекрасное. И если программирование я уж потяну сам — без дизайна жить не сладко, энтузиастов кисти и карандаша пока не нашлось.
В итоге я планирую запустить кампанию на indiegogo, в которой хочу собрать средства на создание игры в духе цезаря, с новой графикой, с возможностью подключения старых кампаний от оригинальной игры. Хотелось бы получить мнение сообщества — продолжать ли дело? Имеет ли смысл затевать все это или заняться более земными вещами?


Обсудить
Total votes 56: ↑53 and ↓3 +50
Comments 35

Портирование любимой игры под Android

Reading time 12 min
Views 136K
Open source *Game development *
Создание игры процесс захватывающий и познавательный. Особенно это заметно, когда ремейк «классики» делаешь сам, руководствуясь идеями оригинала и десятками часов, потраченных на прохождение кампании. У меня не было сколь-нибудь значимого опыта разработки для Android'a, поэтому создание работающего «как надо» приложения для планшета поначалу выглядело довольно туманно, но от этого не менее притягательно. При наличии времени и возможностей, можно стряхнуть пыль со старых игр, подмазать и подклеить, добавив поддержку «больших» разрешений и окажется, что они выглядят не хуже современных продуктов, выложенных на маркете, даже с палитрой RGB565 без альфа-канала. Я предполагал, что будут подводные камни и заботливо спрятанные грабли, которые лежат тихонько во время разработки, но больно лупят по голове, стоит запустить игру на реальном железе. Чего сильно не хватало, так это отладчика, а возникающие проблемы лишь укрепили желание достичь поставленной цели. Под катом будет рассказ о том, как это все заработало.

image
Ave, Caesar
Total votes 83: ↑82 and ↓1 +81
Comments 19

Генерация больших карт в ремейке игры «Caesar III(с)»

Reading time 3 min
Views 29K
Open source *C++ *Game development *
Если вы любитель игры «Caesar III», то наверняка замечали то, с каким старанием и вниманием к мелочам сделаны карты кампании, да и свободного режима тоже. Природные пейзажи, на которых игрок возводит «новый Рим», выглядят вполне реалистично (в рамках игры): ручейки впадают в реки и озера, реки текут через всю карту, а в лесах бродят «бессмертные» овцы, иногда забредая на луга и мешая строить фермы, чайки кружат над местами скопления рыбы, а иногда по реке проплывает неудачливый моряк на останках корабля. Скальные массивы окружены деревьями, а земля покрыта ковром сочной зеленой травы. У всей этой чудной картинки есть недостаток, размер карты не превышает 160х160 тайлов, в статье я расскажу как сделал генерацию карт больших размеров.


Все дороги ведут в Рим
Total votes 75: ↑72 and ↓3 +69
Comments 20

Продолжаем разбирать Caesar III© (Игровая механика)

Reading time 15 min
Views 92K
Open source *Game development *
Алгоритмы получения текстур игры Caesar III© и отрисовки города разобраны, осталась самая «сладкая» часть, которая притягивает «древнеримских архитекторов» уже больше 15 лет — игровая логика. Используя различные подходы к анализу игры, выношу на ваш суд результат этого небольшого исследования. Я заранее прошу прощения за большую статью, но, как говорится, слов из песни не выкинешь. В заключении будет несколько слов о судьбе исходников, восстановленных из исполняемого файла оригинальной игры.


Все гениальное просто
Total votes 114: ↑113 and ↓1 +112
Comments 26

Reverse-инжиниринг Caesar III (часть 2, Рисование города)

Reading time 4 min
Views 44K
Open source *Game development *Reverse engineering *
Надеюсь, предыдущий пост Back-инжиниринг Caesar III, где был описан алгоритм получения текстур из ресурсов оригинальной игры, был благосклонно встречен хабражителями. В этой статье я опишу формат карт, алгоритм выбора и порядок тайлов для отрисовки, формирование итоговой текстуры.



Как это устроено
Total votes 110: ↑109 and ↓1 +108
Comments 55

Back-инжиниринг Caesar III

Reading time 11 min
Views 72K
Open source *Game development *
Мне нравится играть в игры, особенно в экономические стратегии, хочу рассказать про градостроительный симулятор из детства — Caesar III, как принято говорить, тёплый и ламповый. Игра была выпущена в 1998 году, знатоками своего дела, Impressions Games. Это экономический симулятор управления древнеримским городом в реальном времени. Через много лет я решил вновь пройти её, а затем постараться продлить удовольствие от игры, посмотреть ресурсы и вникнуть в игровую логику с точки зрения программиста.

Под катом я опишу процесс извлечения текстур, поиск игровых алгоритмов и расскажу как хобби превратилось в самостоятельный проект. А еще будет палитра RGB555, IDA, HexRays и немного кода.

Посмотреть, что под капотом
Total votes 144: ↑140 and ↓4 +136
Comments 101

Information

Rating
2,733-rd
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Game Developer
Senior
From 300,000 ₽
Git
C++
Multiple thread
Applied math
OOP