LINUX.ORG.RU

Xash3D на SDL2

 , ,


3

5

Доброго времени суток, ЛОР. На этот раз я не пришел показывать вам свой десктоп, рабочий стол или как вам угодно это называть, поэтому заранее извиняюсь за оскорбленные чувства прекрасного.

Несколько месяцев назад я загорелся мыслью о том, что неплохо было бы иметь свободный движок первой халфы под линукс. Вспомнил, что существует проект Xash3D.

Сначала хотел его собрать с winelib, но эта идея быстро ушла, заменив собой идею порта на SDL2. Ну и так веселее, так как практически ни одну из нужных мне технологии я не знал, окромя C и C++.

В целом, сейчас работают уже многие вещи: рендеринг графики, звук, ввод с клавиатуры и мыши, поэтому проехать на поезде с c0a0 до c0a0e возможно, но дальше уже ничего не сделаешь. Неведомым мне образом не работает половина скриптов, поэтому Барни просто не открывает вам дверь поезда, а жидкости выглядят... ужасно. Короче говоря, работы еще много и очень много.

После того, как движок будет адекватно работать со стимовскими библиотеками, обрабатывать AVI видео, MP3 и так далее, у меня в целях или отвязывание клиентской библиотеки и движка от VGUI(благо, вся она есть прямо в репе вальвы в SDK, ибо откомпилированная оттуда она работает), или написание собственного VGUI. А все для чего — я всего лишь хочу поиграть в старую добрую халфу на Android. В первом случае я потеряю совместимость со многими модами(если еще не потерял, лол), а во втором не потеряю и будет чем гордиться.

Ну и это, исходный код у меня на гитхабе и битбакете, а Славя — няшка. :3

>>> Просмотр (1600x900, 849 Kb)

★★★★★

Проверено: Licwin ()

Ответ на: комментарий от EXL

В SDL2 уже устаревшая прослойка связи с андроедом, без которой в крайних версиях NDK можно обойтись :) (deprecated методы в jni) хотя правильно написанные на ц или плюсах проги работают почти без переделок (добавляется обертка над main и «мелочи» - типа обработки ресурсов и подключения .so).

slackwarrior ★★★★★
()
Ответ на: комментарий от a1batross

Когда на гит заглядывал, там только sln вместо мейкфайлов было.
Оно на vgui2 или на старой версии?
Хочется на arm попробовать.

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

vgui1. На моей репе сейчас всё собирается. =)

Надо бы новую ветку с новой версией ксаша завести, а то там оказалось больше проблем, чем я думал.

a1batross ★★★★★
() автор топика
Ответ на: комментарий от thunar

qmake. Порядок такой — mainui, engine. Второй линкуется с vgui.so. Ну и папочка valve.

a1batross ★★★★★
() автор топика
Ответ на: комментарий от a1batross

Есть бинарный vgui2 вроде в hl2 от тегры. А первый только 486 и на какую-то консоль. Хотя можно ещё попытаться через ida «перекомпилить».
А вообще - заменить все функции на стабы и возращать нули, вдруг прокатит?

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

много писать прийдётся:

На самом деле еще больше. Надо же еще реализовать то, что просит клиентская библиотека. Сам-то ксаш, думаю, не проблемно отвязать от vgui, если понадобится.

a1batross ★★★★★
() автор топика
Ответ на: комментарий от a1batross

Клиент же не собирается т.к там есть попытки приведения указателей к целому:

entity.cpp:734:112: ошибка: cast from «TEMPENTITY* {aka tempent_s*}» to «int» loses precision [-fpermissive]
     pTemp->entity.origin[1] += pTemp->entity.baseline.origin[1] * frametime + 4 * sin( client_time * 30 + (int)pTemp );

valve молодцы. Что они пытались сделать? Случайное число? Указатель??? В Синус???????

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от mittorn

А вот дальше уже стабовый вгуй не прокатывает. Клиент собрал (там только одна ошибка была), но он не загружается. Меню как выяснилось тоже не работает. При подсовывании его на место memcpy по нулю проходит.

mittorn ★★★★★
()
Ответ на: комментарий от a1batross

Нет, не смеюсь. Не знаю кто виноват, но в винде на моей железке нормально идёт Мафия 2, а нативная стимовская версия hl1 под линь иногда лагает. И фпс в районе 30-50.

При этом линёвый результат в Uningine Vally ниже на 10-15% на интегрированной графике чем в винде. Дискретная в лине по факту не работает.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)

кто такая Славя? вон та страшненькая девочка с косой?

odii
()
Ответ на: комментарий от kirill_rrr

Подозрительно. У меня быстрее всего работает халфа под вайном, причем лучше, чем в вин7.

odii, ага.

mittorn, мда, лучше уже реверсить. Есть чего почитать по этой теме?

a1batross ★★★★★
() автор топика
Ответ на: комментарий от a1batross

Для сишных биюлтотек я обычно создавал врапперы, вызывающие функции через dlsym и отслеживал/изменял данные в них налету.
Но не знаю, пойдёт ли для плюсовых.
Разумеется ещё поможет gdb.
Имхо намного лучше написать с нуля всё, что нужно xash и клиенту. Исходники же есть. А поведение оригинала изучать через gdb.

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

Тогда уж лучше по хедерам восстановить всё. Хотя бы все это будет немного, но читабельнее.

a1batross ★★★★★
() автор топика
Ответ на: комментарий от a1batross

Разумеется по хедерам. По сути нужно для каждого хедера (там есть уже скелеты классов) написать функции. Скорее всего к каждому хедеру cpp-файл.
Сначала стабы (чтобы слинковать), возвращающие какое-нибудь релевантное значение, а потом их заменять на реальную функциональность по востребованию. Сначала должно заработать меню, потом уже по кускам клиент восстанавливать. Моды вроде cs скорее всего не заработают.
https://developer.valvesoftware.com/wiki/Category:VGUI
Весь vgui скорее всего не потребуется, т.к наибольшая часть там - графический тулкит, из которого реально используется только hud и рисование текста. Так что писать надо те функции, которые требуются при линковке.

mittorn ★★★★★
()
Ответ на: комментарий от a1batross

Уже обсуждали на hlfx, что это за 5 минут делается.

mittorn ★★★★★
()
Ответ на: комментарий от a1batross

Вайн кстати тоже чего то не работает. Даже стыдно как то, ведь впервые с халвой (хл2 эп0) я столкнулся в вайне (вайн 1.1, nv gf6600, asp12, дрова из репы) и всё нормально работало.

kirill_rrr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.