Sergei Kushnirenko @dalerank
Люблю (ш)кодить, алгоритмы и старые авто.
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
1. Большая нагрузка приходилась на алгоритм поиска пути, сначала использовал Беллмана, но он зацикливался на перекрестах и петлях, позже был введен A* для расчета перемещения по всей карте, Беллман остался для расчета путей обслуживающего персонала, так как из него можно вытащить информацию о всех проверенных машрутах. Предполагается, что позже он будет вынесен в отдельный поток — задержку в несколько мс на поиске игрок не заметит, но общая картинка будет более плавной.
2. Потом проседания начались при поиске подвижных объектов вокруг, они все были свалены в одном массиве и его перебор обходился дорого, это я обошел введением доп. карты, в которую перед каждым кадром записываются подвижные объекты по тайлам. Это требует времени при старте кадре, но практически убирает фризы при поиске.
3. Основная же нагрузка приходилась на загрузку и поиск текстур, каждый тик что-нибудь да меняется, это победили предварительной загрузкой и введением класса Picture, который реализует своеобразный shared surface, храня указатель на конкретный surface. Еще большего увеличения производительности удастся добиться введением текстурных атласов и сведением текстур анимации в одну.
Пока решено сделать упор на восстановление функционала. Вот, надеюсь я ответил на Ваш вопрос, если есть еще задавайте, постараюсь ответить.
Выскажите предположения, а я потом расскажу, что это оказался за массив )))
Учтите что игра писалась на plain-C, без классов и других плюшек.
Класс GameLoaderC3Sav, который описан в этом файле(loader_sav.cpp) загружает данные из оригинального сохранения Caesar III, часть формата я разобрал, часть не получилось( там где не получилось понять что значит блок данных, я его пропускал pk->skip(106) ),
Про формат, в котором оригинальная игра сохраняет данные известно вот что — это снимок участка памяти, который описывает игровую ситуцию в момент сохранения, как есть ))) но, часть этого участка жмется с помощью библиотеки PKWare Compression Library. Когда понадобилась необходимость грузить оригинальные сейвы, я этот класс написал, а потом перешел к реализации других вещей и подзабросил.
при разборе сейва число 1276 это смещение до координат точки входа кораблей в город
1. Шкодить остался пока я один, двое реверсят оригинал, еще двое правили перевод. Можно забрать таск, тогда рядом с ним будет отображаться имя того, кто делает.
2. Отношусь очень положительно, но без фанатизма, лучше я ченить новое запилю. А пример можно??? стараюсь писать чтобы понятно было. Кудаж без них, например с текстурами зданий нашли алгоритм который автоматически считает смещение относительно начала тайла, с текстурами людей тоже работает, но не со всеми, приходится ручками офсеты править, с мостами вообще беда.
Просто первый раз использую локализацию вне qt приложений, поэтому есть промахи ))) в qt это все намного проще было, спасибо за подсказку
Честно говоря, я не ожидал такого количества откликов, игра довольно старая и, судя по коментариям в стиме, многие о ней не знают.
Спасибо