Pull to refresh
372
35.1
Sergei Kushnirenko @dalerank

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

Send message
хм… попытаюсь попроще ответить, есть игровой «tick», событие, которое доставляется каждому объекту в игре, таких тиков в одной секунде реального должно быть около 30, чтобы игрок не заметил детерминированности игрового времени.
1. Большая нагрузка приходилась на алгоритм поиска пути, сначала использовал Беллмана, но он зацикливался на перекрестах и петлях, позже был введен A* для расчета перемещения по всей карте, Беллман остался для расчета путей обслуживающего персонала, так как из него можно вытащить информацию о всех проверенных машрутах. Предполагается, что позже он будет вынесен в отдельный поток — задержку в несколько мс на поиске игрок не заметит, но общая картинка будет более плавной.
2. Потом проседания начались при поиске подвижных объектов вокруг, они все были свалены в одном массиве и его перебор обходился дорого, это я обошел введением доп. карты, в которую перед каждым кадром записываются подвижные объекты по тайлам. Это требует времени при старте кадре, но практически убирает фризы при поиске.
3. Основная же нагрузка приходилась на загрузку и поиск текстур, каждый тик что-нибудь да меняется, это победили предварительной загрузкой и введением класса Picture, который реализует своеобразный shared surface, храня указатель на конкретный surface. Еще большего увеличения производительности удастся добиться введением текстурных атласов и сведением текстур анимации в одну.

Пока решено сделать упор на восстановление функционала. Вот, надеюсь я ответил на Ваш вопрос, если есть еще задавайте, постараюсь ответить.
Нет конечно, именно «отрисовка» происходит для тайлов, которые попадают в viewport камеры, а обновление данных да, происходит для всех тайлов. Думаете стоит добавить описание этого алгоритма в статью???
Да, я вроде нажал «ответить», а он почему то в корень сообщение поставил )))
Все изображения взяты из ресурсов игры, и ворота и «покоцанные» ворота, которые накладываются поверх нормальных. Оригинальный размер текстур меньше, поэтому привел к размерам, удобным для отображения статье, иллюстрация с воротами и колесницей в игре работает, так как описано.
Честно признаюсь, мне с андроидом довольно тяжело работать, нынешние планшетные игры далеко ушли от обычных пк-шных, и в плане интерфейса, и тем более в плане управления. Я добавил несколько кнопок, которые должны упростить игру на планшетах… да только, сколько не меняй спойлер на «девятке», феррари она не станет )))
Нет, что вы, никаких упреков и обид, я предложил рассмотреть физический смысл этой переменной с учетом технических возможностей того времени ))) Не критикуют только мертых, проект открытый я буду только рад, если вы поможете сделать его лучше
А вот так понятнее будет int y_humant[100]??? так он описывается в оригинальной игре.
Выскажите предположения, а я потом расскажу, что это оказался за массив )))
Учтите что игра писалась на plain-C, без классов и других плюшек.
К сожалению, по другому не получилось реализовать класс загрузки сейвов оригинала)))

Класс GameLoaderC3Sav, который описан в этом файле(loader_sav.cpp) загружает данные из оригинального сохранения Caesar III, часть формата я разобрал, часть не получилось( там где не получилось понять что значит блок данных, я его пропускал pk->skip(106) ),
Про формат, в котором оригинальная игра сохраняет данные известно вот что — это снимок участка памяти, который описывает игровую ситуцию в момент сохранения, как есть ))) но, часть этого участка жмется с помощью библиотеки PKWare Compression Library. Когда понадобилась необходимость грузить оригинальные сейвы, я этот класс написал, а потом перешел к реализации других вещей и подзабросил.

при разборе сейва число 1276 это смещение до координат точки входа кораблей в город
0. Спасибо на добром слове. Просто нашлись люди (Gregoire Athanase), который написал рендер и базовые алгоритмы. Pecunia и Gecube восстанавливают исходники оригинала, другие тоже свою лепту вносили, список можно в кредитсах в игре посмотреть. Както так сложилось, что все это взлетело
1. Шкодить остался пока я один, двое реверсят оригинал, еще двое правили перевод. Можно забрать таск, тогда рядом с ним будет отображаться имя того, кто делает.
2. Отношусь очень положительно, но без фанатизма, лучше я ченить новое запилю. А пример можно??? стараюсь писать чтобы понятно было. Кудаж без них, например с текстурами зданий нашли алгоритм который автоматически считает смещение относительно начала тайла, с текстурами людей тоже работает, но не со всеми, приходится ручками офсеты править, с мостами вообще беда.
Нет, не разыгрываю )))
Просто первый раз использую локализацию вне qt приложений, поэтому есть промахи ))) в qt это все намного проще было, спасибо за подсказку
Нет, они генерятся автоматически, я вам в личку скинул ссылку на гугл таблицу, собственно изменять надо её, при построении релиза скрипт парсит эту таблицу и формирует локализации, вот так немного, до этого я использовал libgettext, но на винде и маке наблюдались баги с определением системной кодировки, в общем решил отказаться и от самой либы, и от автоопределения
Спасибо за баг, там должна выводиться другая подсказка
Да, после перехода на разрешения больше 1024х768, места стало действительно больше, и даже пустые места образовались, спасибо за новые идеи, попробую их встроить для удобства. Кнопки ± на клавиатуре меняют скорость игры. F10 скриншот, f5/f9 быстрая сохранение/загрузка. Перемещeние стрелками и WASD. Хм, набралось достаточно, надо бы добавить хелп в игре, чтоли )))
Честно говоря, я не ожидал такого количества откликов, игра довольно старая и, судя по коментариям в стиме, многие о ней не знают.
Благодарю, есть локализации для русского, немецкого, шведского и испанского полностью, румынского и французского частично. Подробно о том, как устроена локализация написано здесь
оу! Т.е. фреймворки ставятся простым переносом в папку???
Спасибо
еще один баг найден, спасибо )))
возможно под маком есть какие-то особенности??? вообще игра проверяет каталог для сейвов на старте, и создает его в случае отсутствия, добавлю на всякий случай в баги, может еще у кого проявится.
Да, Император, достойный продолжатель серии, только боевку наоборот почти выпилили из игры
Caesar III, CivCity: Rome и Stronghold писались одним и тем же программером, Саймоном Бредбери(Simon Bradbury)

Information

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

Specialization

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