LINUX.ORG.RU
ФорумGames

Half-Life + Android

 , ,


0

2

А что, если портировать Half-Life под Android
Ну движок портирован под Linux
Вот для Android-x86 есть ARM-ретранслятор, который умеет ARM приложения в x86 системе
А есть ли аналог, только наоборот
Взят двигло Half-Life, запустить его через какой-нибудь ретранслятор/эмулятор? Сильна ли будет потеря скорости?
А то вроде бы нынче девайсы мощные, а игр нормальных нету
Doom и Quake уже наскучили

Норкоманов полон тред.

ubuntuawp, если ты действительно считаешь что статически ретранслировать X86 -> ARM да ещё и с кучей WinAPI'змов плёвое дело и по плечу любому программисту - тебе к врачу. Тебя, как дилетанта, точно характеризует вот эта строка:

Я не программист

Notaz (хардкорный С-шный кодер и знаток ARM Assembler'а) потратил целых полгода на то, что рекомпилировать какой-то там StarCraft под ARM, в котором значительно меньше кодовая база. В итоге у него получилось то, что сорец игры хрен прочтёшь нормально, ибо там:

int sub_401310(int a1, int a2)
{
  u32 eax = (u32)a1;
  u32 ecx;
  u32 edx;
  u32 esi;
  u32 edi;

  if (eax != 0)
    goto loc_40131D;
  eax = (u32)a2;  // arg_0
  eax += 4;

loc_40131D:
  esi = *(u32 *)(eax);
  if (esi == 0)
    goto loc_401351;
  edx = *(u32 *)(eax+4);
  if ((s32)edx > 0)
    goto loc_40132F;
  edx = ~edx;
  goto loc_40133A;

loc_40132F:
  edi = *(u32 *)(esi+4);
  ecx = eax;
  ecx -= edi;
  edx += ecx;

loc_40133A:
  *(u32 *)(edx) = esi;
  ecx = *(u32 *)(eax);
  edx = *(u32 *)(eax+4);
  *(u32 *)(ecx+4) = edx;
  *(u32 *)(eax) = 0;
  *(u32 *)(eax+4) = 0;

loc_401351:
  return eax;
}
на over9000 строк, а исправлять баги в таком коде ой как сложно. Кстати, из-за широкой огласки сего поделия автор теперь может получить нехилый такой иск от Blizzard. К тому же от WinAPI'змов он не избавился - линкует армовский libwine.

Если ты думаешь о эмуляции x86 -> ARM то играбельность трехмерной игры подобного типа отсутствует вообще (максимум 0.5 fps) даже на ультрауберновых и молодежных десятиядерных Android-смартфонах. К тому же запускают сначала оффтоп 95 через QEMU, а в нём уже Half-Life. Комментарии излишни. А нормальный бинарный ретранслятор (он ведь там хардварный, да?) есть только в процессорах от Intel, и делался он бородатыми спецами со знанием дела, ибо без него Intel бы села в лужу, так как никому нафиг не нужны Android-девайсы только с джава-приложениями без крутых игрушек. Обратного нормального бинарного ретранслятора не существует, кроме кучки гиков он никому не нужен.

Как было сказано выше, единственная зацепка - Xash3D, но ты иди и попробуй его портировать хотя бы на Linux. Кроме WinAPI'змов там еще всякие специфичные для MSVC компилятора вещи и + OpenGL, к которому придется писать враппер для Android. Ах да, еще там нужно избавится от зависимости к libvgui (или как-то так).

Так что только такими способами ты можешь поиграть в Half-Life на своем Android-девайсе:

  1. (самый легкий) Оплатить полностью всю работу автора Xash3D по переносу кода Win -> Android (необходимо энное количество килобаксов + предоставление девайса). Тут нужно уточнить, что автор Xash3D был согласен на его перенос на Android, но никто так и не захотел оплатить его работу, хотя он запросил весьма скромную для такой работы цену;
  2. (средней трудности) Выучить C/C++ на должном уровне за 21 день и начать читать код Xash3D перед сном и в туалете. Когда ты станешь понимать то, как движок работает, держать его концепцию в голове, можете начинать портировать на gcc. Почему на gcc? Потому что шаг от Linux до Android небольшой да и дебажить код будет намного проще. После переписывания кода под Linux и тестирования сборки, ответвляешься от кода и пишешь враппер OpenGL -> OpenGL | ES, затем учитывая нюансы разработки приложений с помощью Android NDK - портируешь код на Android, попутно добавляя сенсорное управление. Итог - рабочие версии движка под Linux (которая теперь никому нафиг не нужна) и под Android. Сколько на это уйдет времени лет - зависит от твоих возможностей;
  3. (тяжелый, Zen and Notaz way) Выучить C/C++ на должном уровне, изучить работу Notaz'a и начать статическое рекомпилирование Half-Life, получив ~10 километров листинга на X86 assembler, с помощью инструментов и долгих зимних вечеров переводить сгенерированный hex-rays'ом псевдокод на вменяемый C, попутно компилируя на ARM (с линковкой Winelib) и отлавливая баги. Достигнув дзена, выложить своё творение, попутно молясь о том, чтоб Valve тебя не засудили.
  4. (идиотский) Взять Linux X86 бинарь Half-Life, отпилить от него Steam, запустить в QEMU и радоваться слайдшоу;
  5. (томительный) Подождать N-ое количество лет, когда Valve откроет исходники Half-Life и энтузиасты портируют его на Android. Напомню, что Valve отдали исходники Half-Life на растерзание людям, которые делают кооперативный мод для HL - Sven Coop.

Сейчас этот тред - калька вот этого (т. е - «хочуу погонять в халву на своем крутом девайсе кто знаит как помагите))))»).

Поэтому прошу ТС и всех страждущих, прежде чем плодить такие треды, хорошенько подумайте и ответьте на следующие вопросы: среди халферов полно сильных и способных кодеров и даже спецов по Reverse Engineering'у; так почему они тогда не переписали игру под Android? Cмогу ли я, создав очередной тред про портирование, достичь играбельного запуска этой игры на своём девайсе?

Так что лучше заниматься реальными вещами, а не плодить очередной хотелкотред. К примеру, у вас под боком пытаются достичь реального, а не туманного и попытаться запустить Tegra's 4 Half-Life 2 на отличном от Nvidia Shield ARM-девайсе. Возможно, человеку нужны тестеры или какая-нибудь помощь.

Полностью солидарен с i-rinat'ом:

Если действительно хочешь, сделаешь. Понятное дело, что не быстро. Заодно и научишься. Ну а если ты не хочешь заниматься этим год, может и порт не так уж и нужен?

Так же для страждущих, предоставляю познавательное и интересное чтиво:

  1. Как делался порт Starcraft x86 Binary -> x86 Asm Sources -> C Sources -> ARM Binary (i.e. Pandora port), интервью с Notaz'ом;
  2. Топик-обсуждение порта, Notaz поясняет некоторые вещи;
  3. Возможен ли запуск Half-Life на ARM девайсе? e.g Pandora, Android etc;
  4. Попытки портирования Xash3D под Linux;
  5. Обсуждение возможности портирования Xash3D под Android.
EXL ★★★★★
()
Ответ на: комментарий от EXL

О, спасибо
Ждем когда порт HL2/Portal на Tegra портируют на Adreno/Mali/e.t.c и уже присобачить HL:S (версия HL для Source-движка)
Я как понял, нахер эту халфу на Android
Уж луче поиграть в нее на Windows-планшете...

ubuntuawp ★★
() автор топика

Андроид не потянет. Сядет батарейка через час. К тому же там управление тру про, пальцем ничего не сделать. Затея похвальна, но очень максималистична...

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

Нехилая такая простыня текста, видать наболело. Спасибо за ссылки, почитать о том, как Xash3D под Android портировали, было очень познавательно. Тему на openpandora я ещё не осилил, но похоже, что самое интересное — как он dynarec в SC обнаруживал и обходил — Notaz не рассказал.

«Я не программист, но там всё просто: надо взять то, другое и всё собрать. Я бы сделал, но я не программист.» «25 тысяч за порт это дорого, вот 8-11 — нормально.» Это потрясающе и ужасающе одновременно.

i-rinat ★★★★★
()

Все препятствия исчерпаны.
Есть xash - немного кривая реализация goldsrc с открытым кодом. Просто кто-то должен взяться и портировать это на linux(или хотя-бы заставить собираться с winelib). Ещё как вартант - собрать под WinRT.
Для работы графики потребуется модифицировать wine для работы с Regal. Код эмуляции WGL есть и в Wine, и в Regal. Нужно его прочитать внимательно и состыковать.
Остаётся библиотека vgui. Её можно отреверсить или реализовать, API доступно.

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