The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск движка Free Heroes of Might and Magic II 0.9, opennews (??), 07-Фев-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


10. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +2 +/
Сообщение от A.Stahl (ok), 07-Фев-21, 15:29 
Проверил: полноэкранного режима нет, первый экран масштабируется, а сама игра и внутриигровое меню -- нет. На мониторах высокого разрешения неиграбельно.
С поддержкой кодировок тоже всё плохо: загрузил первую попавшуюся карту и увидел мусор вместо текста.
Ответить | Правка | Наверх | Cообщить модератору

13. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +2 +/
Сообщение от Аноним (13), 07-Фев-21, 15:33 
Сейчас нет поддержки никогда.
Ответить | Правка | Наверх | Cообщить модератору

14. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Аноним (13), 07-Фев-21, 15:34 
*Юникода
Ответить | Правка | Наверх | Cообщить модератору

15. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +3 +/
Сообщение от sirDranik (ok), 07-Фев-21, 15:36 
Игра поддерживает только английский пока что. До локализаций еще далеко, т.к. хватает других проблем.
Касаемо поддержки высоких разрешений, игра на данный момент больше заточена для запуска на родном или хотя бы низких разрешениях. На 4К нет никакого смысла запускать такую графику. Масштабирование такого пиксельарта - все равно что запускать на низком разрешении.
Впрочем, как закроем все баги и проблемы будем непременно работать и над подобными вопросами...
Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

22. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +1 +/
Сообщение от BeOS (?), 07-Фев-21, 15:55 
Ара, а это что? https://qube.ru/files/images/heroes2.preview.png
Ответить | Правка | Наверх | Cообщить модератору

24. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от BeOS (?), 07-Фев-21, 15:56 
https://qube.ru/files/images/heroes2.png
Ответить | Правка | Наверх | Cообщить модератору

41. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +1 +/
Сообщение от sirDranik (ok), 07-Фев-21, 16:33 
Господи, вы где эту старую версию нашли? )
Текущий код практически наполовину переписан, поэтому, к сожалению, поддержки неоригинального шрифта временно нет.
Ответить | Правка | Наверх | Cообщить модератору

28. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Аноним (30), 07-Фев-21, 16:04 
Какой движок для рендеринга при прекрасной растровой графике?
Вы о чем?
Тем более нет поддержки 4к. Чего там рендерить то?
Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

42. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от sirDranik (ok), 07-Фев-21, 16:36 
Поправьте меня, если я, вдруг, могу ошибиться в чем-то... Все равно, какая ни была бы графика её все равно нужно отрисовываться как-то. В игре есть циклические анимации, которые тоже нужно как-то генерировать. Ведь сама игра - это не перечень картинок, которые сменяются одна за другой, а нужно то, что будет генерировать изображение, видимое Вами на экране.
Ответить | Правка | Наверх | Cообщить модератору

103. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +1 +/
Сообщение от x0r (??), 07-Фев-21, 21:22 
Для масштабирования есть алгоритмы hq2x hq3x, а может что и лучше есть
Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

143. "Выпуск движка Free Heroes of Might and Magic II 0.9"  –3 +/
Сообщение от srgazh (ok), 08-Фев-21, 01:11 
Лупа?)))
Ответить | Правка | Наверх | Cообщить модератору

148. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +2 +/
Сообщение от Ordu (ok), 08-Фев-21, 03:06 
> Масштабирование такого пиксельарта - все равно что запускать на низком разрешении.

Эмм... Не знаю, как другие, а я ужасно не люблю менять разрешения видеокарты. Баги линуксовой графики начинают лезть изо всех щелей. Alt-TAB выполняется хрен его знает сколько, иногда разрешение обратно не переключается, приходится xrandr'ом править.

Кроме того, растягивание картинки на весь экран посредством изменения разрешения под разрешение оригинальной игры часто сплющивает картинку, и получается уродство. Возможно, это как-нибудь можно исправить, правильным образом прописав modeline для Xorg, чтоб 640x480 растягивался бы по вертикали на всю высоту экрана, а по ширине не на всю, а пропорционально растяжению по высоте, оставляя по бокам две чёрные неиспользуемые полосы. Наверное так можно, но я блин не копенгаген во всех этих modeline, там всё сложно и чтобы только понять какое число зачем нужно, надо полчаса читать статью, а чтобы высчитать/подобрать нужные значения ещё полчаса. И при этом, я не уверен, что задуманное возможно.

Гляньте на openxcom. Конкретно на экран тактического боя. Там много всяких разных настроек, которые позволяют, скажем, получить спрайты отрисованные на экране один-в-один, без масштабирования, но просто этих спрайтов больше влезает, и на мелких картах можно чуть-ли не всю карту на экране видеть без скролла. Можно масштабировать спрайты, чтобы они не столь мелкие были (dpi мониторов всё ж подрос с тех пор, и 1-в-1 всё ж мелковато выходит).

Openxcom близок к идеалу в моём понимании того, как надо делать клоны старых игр. Единственное чего мне там не хватает, независимого масштабирования для спрайтов контролов. Чтобы я кнопки мог бы нарисовать большими, а всё остальное помельче.

> Впрочем, как закроем все баги и проблемы будем непременно работать и над подобными вопросами...
> закроем все баги и проблемы
> все

вы оптимисты, я посмотрю. :)

Может я не прав, но мне кажется, что простейшее решение не так сложно, и делается за полчаса. Надо создать фулскрин окошко, а дальше посмотреть на сколько надо растянуть по x и y, чтобы заполнить весь экран, выбрать из двух коэффициентов меньший, помножить на него GL_PROJECTION, а затем проставить viewport так, чтобы он по центру располагался. Хотя там баги полезут с мышой, которая входит за границы viewport'а, так? Ну может быть да, тогда прежде чем заниматься этим, следует подождать решения всех багов и проблем.

Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

174. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +1 +/
Сообщение от sirDranik (ok), 08-Фев-21, 10:33 
Вы залезьте и посмотрите, сколько проблем проект унаследовал из прошлого. Мы бы и рады заняться подобными вопросами...
Но по мне, пускай лучше игра пока работает вообще в 640х480, но идеально, чем поддерживает высокие разрешения и скейлинг, но будет полна багов и вылетов.
Если у кого-то есть желание заняться подобным - да милости просим! Просто пока в приоритете более насущные проблемы.
Ответить | Правка | Наверх | Cообщить модератору

210. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Ordu (ok), 08-Фев-21, 18:35 
> Вы залезьте и посмотрите, сколько проблем проект унаследовал из прошлого.

Заглянул в screen.h/.cpp... БЛИИИН! Там динамический диспатч для всех этих Display/RenderEngine/Cursor... Это при том, что Display создаётся синглетоном, в единственном экземпляре, из единственной реализации. Для RenderEngine две реализации, но из них выбирается ровно одна _статически_ посредством #ifdef'а. Там везде так? В смысле, там бывают где-нибудь в других местах не виртуальные методы? Я уж не говорю inline методы, но хотя бы на статическом диспатче.

И... меня озадачило -- там в RenderEngine::render выполняется memcpy над какими-то пикселями в количестве display.width()*display.height() и ни одного вызова OpenGL... Я в этих SDL_Surface не секу, конечно, наверное чего-то не понимаю, но у меня в голове сформировалась дикая идея, что оно рисует в память, а потом отрисованный фрейм отправляет в видеокарту битмапом. Так ли это?

Ответить | Правка | Наверх | Cообщить модератору

215. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +1 +/
Сообщение от o_O (?), 08-Фев-21, 19:18 
Все изображения в fheroes2 хранятся в специальном "двух-слойном" формате. Первый слой содержит индексы палитры, второй слой отвечает за преобразование пикселей. Конечный результат, который представляет собой Display класс, рассматривается как 8-битное изображение на основе палитры. Класс Display - синглетон, так как всего существует одно окно приложения.
Изображение копируется только для случаев, если видеокарта поддерживает режим палитры, в противном случае изображение преобразуется в RGB/RGBA формат перед отправкой на GPU. OpenGL кода нет, но его можно спокойно добавить как наследованный от BaseRenderEngine класс.
RenderEngine является тоже синглетоном в некотором роде. Причин, по которым делать множественные копии данного класса, нет. ifdef используется для разделения SDL1 и SDL2 и это сделать на уровне source file.

Что вас смущается с дизайном данного кода?

Ответить | Правка | Наверх | Cообщить модератору

221. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +1 +/
Сообщение от Ordu (ok), 08-Фев-21, 20:37 
> Что вас смущается с дизайном данного кода?

1. Зачем там виртуальность на виртуальности виртуальностью погоняет? Чтоб динамический диспатч и кеш-промахов побольше?

2. Нахрена OpenGL код добавлять в "наследованный от BaseRenderEngine класс", если можно добавить его в BaseRenderEngine? Может есть отдалённые планы запускать fheroes2 на устройствах на которых нет OpenGL? Это на каких, интересно? Но если и есть, то вот когда до этого дойдёт дело, можно будет добавить "#ifdef NO_OPENGL" и сделать так, как на том устройстве принято, а не усложнять код сегодня, причём усложнять и сорцы, и рантайм. Развели понимаете жабу с её динамизмом там, где всё решается статическим полиморфизмом. При том, что на данный момент и в обозримом будущем полиморфизм тут не нужен. Да, что там Java, я на во все щели динамичном lisp'е напишу с меньшим количеством рантайм диспатча. Как так можно ваще писать на C++?

3. Синглетон -- это разновидность глобальной переменной, что есть суксь и зашквар. Людям сказали, что глобальная переменная плохо. Они не поняли почему, но чтобы не палиться, прекратили использовать глобальные переменные. А поскольку без глобальных переменных не умают, придумали обходной манёвр -- синглетон. Те же яйца, вид в профиль. Только код стал ещё более нечитаемым, и вместо обращения к глобальной переменной display теперь везде вызов Display::instance().

4. В частности использование синглетона приводит к тому, что создание его глобальной^W static переменной оторвано по времени от инициализации, что, в частности, приводит к тому, что на инициализированность её нельзя положиться, откуда лезут _рантайм_ проверки вида if(_window != NULL). Я не думаю, что это сильно влияет на производительность (особенно на фоне рендера в память с пересылкой битмапа), но в любом случае захламляет код ненужными проверками.

5. Зачем копировать спрайты? Пиксельный шейдер может выбрать нужную текстуру с учётом времени (дабы анимацию изобразить), получить из текстуры индекс цвета пикселя, извлечь RGBA цвет из палитры по индексу цвета, наложить сверху заданное преобразование, и отдать видеокарте готовый пиксель. При необходимости, его можно и сглаживающие фильтры научить накладывать, дабы квадратов на экране было бы поменьше (хотя для этого, я подозреваю, придётся рендерить в два этапа -- сначала в текстуру на весь экран, а потом натягивать эту текстуру на экран, фильтруя квадраты). Добавь к этому z-buffer, и он решит проблем перекрытия одних спрайтов другими. То есть, CPU может вообще простаивать, лениво гоняя по шине до видеокарты по три байта на кадр.

6. На счёт этого я не уверен, но тем не менее меня это смущает: зачем держать в сорцах код для SDL1, если есть код для SDL2? SDL2 портируема в не меньшей степени, чем SDL1. Если у кого-то в системе его нет, то можно либо вытянуть скриптом сборки, собрать и слинковать статически с экзешником, либо посоветовать пользователю обновить систему, наконец. Раз в десять лет не помешает.

Не, я как бы понимаю, что коду хренова туча лет, и этот "C с классами" подражающий джаве -- это прям-таки образцовый код для 90-х, написанный согласно топовым рекомендациям топовых гуру C++ тех времён. И тут нет особых претензий к автору кода -- он, видимо, начитался учебников, и в качестве практики написал этот код. Может он с джавы на C++ пересаживался, вот и писал Java код на C++. Но сегодня на дворе не 90-е. И нулевые кончились больше десяти лет назад.

Возможно и неиспользование шейдеров в силу той же причины -- древности кода: шейдеры ведь в начале нулевых где-то появились? И, возможно, только к концу нулевых стали must have фичой для видеокарт, на наличие которой можно полагаться. Хотя, мне кажется, даже на OpenGL 1.2 без всяких шейдеров можно выкрутится, и свалить на видеокарту всё это копирование пикселей. Придётся повозиться, причём на каждый кадр придётся, но, я думаю, что раз в десять нагрузку на CPU можно снизить легко. Более того, я уверен, что HOMM2 нихрена ничего не копировал в видеопамять на каждый чих, он копировал данные из одного места видеопамяти в другое, по 8 пикселей за один movsb. Возможно даже с наложением вот тех самых преобразований, о которых ты упоминаешь выше. То есть HOMM2 рендерил, как минимум, на порядок быстрее, чем fheroes2, несмотря на то, что вместо GPU у него был VGA.

Ответить | Правка | Наверх | Cообщить модератору

227. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от o_O (?), 09-Фев-21, 04:06 
Давайте так: напишите, пожалуйста, работающий код для OpenGL, как оно должно работать. Многие вещи, указанные вами, основаны только на предположениях. Если же не можете, то попрошу попридержать критику и не писать ерунду.
Абстракция класса была сделана для того, чтобы скрыть SDL от всего остального. OpenGL в коде нет. Для мобильных устройств свой OpenGL. Оригинальная игра никакие вычисления на GPU не делала, советую глянуть в исходники. Генерация картинки была на CPU.
Попрошу высказывания о некоторых аспектах ООП высказывать на специализированных форумах.
Ответить | Правка | Наверх | Cообщить модератору

228. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Ordu (ok), 09-Фев-21, 05:11 
> Давайте так: напишите, пожалуйста, работающий код для OpenGL, как оно должно работать.

Ты действительно этого хочешь? Я как-то начал ревёрсить supaplex, и у меня к нему вроде как даже написан код, который в OpenGL засовывает палитрованные спрайты и получает на выходе картинку. А, не, не в OpenGL, а в gfx-rs, который типа вулкана, но одевается на любой API, в том числе и на OpenGL. Но он хранит все спрайты статично в видеопамяти, там и там шейдер выполняет преобразования палитры в RGB, в процессе текстурирования квадратов на экране.

Он довольно сраный код, потому что моей задумкой было изначально получить API аналогичный VGA, который бы сваливал всю работу на GPU, чтобы переписывать досовый 16-битный асм с минимумом изменений. Но потом, я понял, что это не обязательно и пошёл другим путём. Но не стал переписывать уже написанное. Но тем не менее, он вполне рисовал, и даже некоторые VGA трюки, типа палитровой анимации работали.

Там правда нет двуслойных спрайтов, но... эмм... если ты сведёшь задачу к минимуму, чтобы мне не надо было ковыряться в недрах говнокода fheroes2, чтобы понять, что там за форматы данных, и как вообще взаимодействовать с этим говнокодом... например, если ты дашь мне пачку спрайтов, и плюс сопутствующую информацию типа палитр, внятное описание всего этого, и ответишь на мои вопросы по всему этому, то я наверное смогу найти время, чтобы написать тебе демку, которая всё это отрисует видеокартой. И будет перерисовывать видеокартой. Насчёт 3 байтов по шине на кадр, я правда наврал, но то что она будет пересылать по шине на порядки меньше чем 640x480*4 бита на кадр, это совершенно точно.

Я могу написать такую демку, чтоб понятно было, и даж могу это попробовать на C++ сделать, а не на расте, если ты вежливо попросишь.

> Многие вещи, указанные вами, основаны только на предположениях.

Ты про то, как HOMM2 отрисовывал? Да, это предположения, но я ковырялся в некоторых досовых играх, и дохрена читал про VGA. Я представляю как рендер делался тогда. Плюс, я точно помню, что HOMM2 вполне шли на 386. Хотя они умудрялись тормозить там... Ну хз, хз. Но вообще, не использовать VGA, используя VGA, элементарно не выйдет. А если все четыре битовые плоскости грузить из CPU в видеокарту на каждый кадр, то... Ну может тогда и получатся такие тормоза. хз. Но если и так, это лишь говорит, что оригинальная игра тоже совершенно не умела в рендер.

> Абстракция класса была сделана для того, чтобы скрыть SDL от всего остального.

Ой, так я же не возражаю против "абстракции класса" или инкапсуляции низлежащих API. Я возражаю против неумеренного и абсолютно неуместного использования virtual. И против глобальных переменных. И против if(ptr==NULL).

> OpenGL в коде нет.

Совершенно зря.

> Для мобильных устройств свой OpenGL.

Он не настолько другой. Почти то же самое. Немного порезан, насколько я помню. По-моему, даже не столько порезан, сколько оттуда выкинуты нахрен все эти glVertex, glNormal, glTexCoords и прочие функции нужные для собирания данных в один большой массив, с которым GPU сможет работать. Но они и не нужны, массивы эти можно собрать хоть статически.

> Оригинальная игра
> никакие вычисления на GPU не делала, советую глянуть в исходники. Генерация
> картинки была на CPU.

Во-первых, я не говорил о том, что оригинальная игра отрисовывала на GPU. Так сказать было бы глупостью: тогда не было никаких GPU. Но тогда был VGA, который позволял в разы уменьшить количество пересылаемых данных между CPU и видеокартой, по сравнению с заливкой в видеокарту каждого пикселя каждого кадра. Во-вторых, что за исходники? Сорцы HOMM2? Я б глянул. Где их взять?

> Попрошу высказывания о некоторых аспектах ООП высказывать на специализированных форумах.

Не учите меня жить.

Ответить | Правка | Наверх | Cообщить модератору

261. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Аноним (-), 12-Фев-21, 02:38 
> 6. На счёт этого я не уверен, но тем не менее меня
> это смущает: зачем держать в сорцах код для SDL1, если есть
> код для SDL2? SDL2 портируема в не меньшей степени, чем SDL1.

Есть некая разница между теорией и практикой.

> Если у кого-то в системе его нет, то можно либо вытянуть
> скриптом сборки, собрать и слинковать статически с экзешником, либо посоветовать пользователю

Затем что есть системы где SDL2 нет. Или с ним свои проблемы (в дебиане SDL2 с теми еще багами). Но да, чтобы об этом догадываться надо было иметь какое-то отношение к обсуждаемой области и посмотреть как оно в диком виде.

> обновить систему, наконец. Раз в десять лет не помешает.

Ну, обнови мне Nokia N900 на котором оно, допустим, работает и доставляет. SDL2 там, вроде, нет. На что его обновлять? На ведроид троянский? Так что девам респект за поддержку SDL1. Это улучшает портабельность. А господа теоретики с бзиком по эстетике обычно добиваются что их идеальный код просто даром никому не упал. Зато код офигенный.

Ответить | Правка | К родителю #221 | Наверх | Cообщить модератору

262. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Ordu (ok), 12-Фев-21, 04:19 
>> Если у кого-то в системе его нет, то можно либо вытянуть
>> скриптом сборки, собрать и слинковать статически с экзешником, либо посоветовать пользователю
> Затем что есть системы где SDL2 нет. Или с ним свои проблемы
> (в дебиане SDL2 с теми еще багами). Но да, чтобы об
> этом догадываться надо было иметь какое-то отношение к обсуждаемой области и
> посмотреть как оно в диком виде.

Собрать SDL2 без багов и статически влинковать в бинарь fheroes2.

>> обновить систему, наконец. Раз в десять лет не помешает.
> Ну, обнови мне Nokia N900 на котором оно, допустим, работает и доставляет.
> SDL2 там, вроде, нет.

И что, не собрать никак?

> А господа теоретики с бзиком по эстетике обычно добиваются что их идеальный код просто даром никому не упал.

Код либо упал, либо не упал. Если он упал, то значит бзик на эстетике приведёт к тому, что остальные начнут шевелить пятой точкой, и запиливать SDL2 туда, где его нет. Что полезная деятельность, идущая на пользу всем. Без этого, они так и останутся тупыми потребитлями, жрущими то, что дают.

Ответить | Правка | Наверх | Cообщить модератору

236. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Аноним (13), 09-Фев-21, 12:35 
Да, всё  рисует в памяти.
Оригинальный проект бегал в том числе на WinCE наладонниках и Симбианах. Был ли там OpenGL? Был ли OpenGL в ранних версиях SDL1? Поэтому есть мнение, что это вот всё тяжкое наследие нулевых годов.
Ответить | Правка | К родителю #210 | Наверх | Cообщить модератору

237. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Ordu (ok), 09-Фев-21, 12:44 
> Был ли OpenGL в ранних версиях SDL1?

Никогда не задумывался об этом? Был? Я всегда думал об SDL как об обёртке над OpenGL, призванной упростить создание OpenGL контекста и дать возможность создавать его кроссплатформенно.


Ответить | Правка | Наверх | Cообщить модератору

244. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Аноним (244), 09-Фев-21, 14:06 
Да вот не берусть 100% утверждать Может и был. Но не на всех платформах он был с ускорением. В WinCE он тоже появился не сразу, ЕМНИП. Может, поэтому он в проекте и не использовался.
Ответить | Правка | Наверх | Cообщить модератору

198. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Аноним (198), 08-Фев-21, 14:55 
В линуксячей версии разрешение так и меняется. Окно растягивается в фуллскрин, потом ставится вьюпорт по центру. Переключение режима видеокарты только в оффтопике.
Ответить | Правка | К родителю #148 | Наверх | Cообщить модератору

207. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Ordu (ok), 08-Фев-21, 16:36 
> В линуксячей версии разрешение так и меняется. Окно растягивается в фуллскрин, потом
> ставится вьюпорт по центру. Переключение режима видеокарты только в оффтопике.

Я пробовал некоторое время назад, и чёт у меня не шло... Я не помню что.

Ответить | Правка | Наверх | Cообщить модератору

173. "Выпуск движка Free Heroes of Might and Magic II 0.9"  +/
Сообщение от Онаним (?), 08-Фев-21, 10:30 
xBRZ не пробовали?
Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру