HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > Xash3D > Немного о том, почему ксаш никогда не будет иметь полной поддержки халфовских дллок
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Немного о том, почему ксаш никогда не будет иметь полной поддержки халфовских дллок

Те, кто успел поработать с движок, наверняка заметили, что ксаш ипользует в качестве игровых дллок обычный SDK от Half-Life, но полной совместимости (т.е. возможности подключать уже скомпилированные библиотеки) там нету. Те товарищи, которые надеялись таким образом подключить свой любимый контер-страйк или опфор, ессно пролетают.
И мне переодически пишут о том, как было бы неплохо замутить прямо-таки совершенно полную поддержку. В ответ на такие просьбы хотелось бы изложить все свои соображения, почему лично я считаю такую поддержку нецелесообразной а в определенных случаях - и невозможной.

Итак:
1. Ксаш поддерживает до 16 бонеконтроллеров и до 16 блендингов анимаций. Эти значения на сервере хранятся в entvars_t, где в оригинале отведено всего по 4 ячейки для каждого. Таким образом сохранить совместимость здесь - просто убить дополнительные возможности.
2. Ксаш использует практически идентичные структуры эдиктов как на клиенте, так и на сервере (благо в ксаше имеется локальный клиентский мир, во многом идентичный серверному, позволяющий осуществлять трасинг как на сервере), в хл1 - костыль, многократная передекларация различных physent_t, cl_entity_t что сбивает с толку начинающих кодеров, да и более опытным не очень удобно. Из-за этого безусловно нарушается совместимость с PM_Move в частности и с кодом всего клиента - вообще.
3. Из-за расширенных возможностей TriAPI (в ксаше это не просто обёртка над вызовов gl-функций), был практически полностью переписан код большинства клиентских эффектов - в частности на клиент были перенесены: весь код темп-энтить, весь код лучей, код создания большинства эффектов через флаги EF_ (партиклы, фонарик).
Разумеется всё это открыло много новых возможностей для кодеров (например добавление новых типов лучей и темп-энтить), но напрочь убило совместимость клиентов.
4. В любом случае я имею крайне смутное представление о генерации WonID и SteamID - без исходников самого Half-Life, я вряд ли бы смог воссоздать их работу, как того требуют библиотеки.
5. Сетевые протоколы ксаша и half-life в любом случае несовместимы.
И не только потому, что я не смог их воссоздать. Ксаш использует более эффективный и экономный протокол, в частности более совершенную модель обмена состоянием энтить, передачи класснеймов по сети (что в свою очередь даёт возможность работы FindEntityByClassname на клиенте).
6. Механизм отсева невидимых энтить на сервере обязан учитывать энтити, видимые сквозь порталы. В любом случае эту функцию придётся немного видоизменить для корректной работы.
7. В оригинальном half-life есть один подлый хак, который определяет тип игры и в зависимости от этого включает те или иные фичи. Для опфора - одно, для натурал селекшен - другое, для контер страйка - третье.
Для того же Decay в engfuncs была добавлена целая пачка новых функций. В любой случае выяснять как работает этот механизм и уж тем более пихать в ксаш чужие хаки (и не факт что это всё еще и заработает правильно), у меня нет никакого желания.
------------------
Таким образом определенная несовместимость - это просто результат эволюции и нововведений и сознательного отказа от некоторых пережитков прошлого прежде всего, а не отказ удовлетворить чьи-то потребности на ровном месте.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 58925

Старое сообщение 21-05-2010 09:26
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
В оригинальном half-life есть один подлый хак, который определяет тип игры и в зависимости от этого включает те или иные фичи. Для опфора - одно, для натурал селекшен - другое, для контер страйка - третье.

Эээ... Какие основания так утверждать? Пример привести можешь?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 58930

Старое сообщение 21-05-2010 10:36
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
XaeroX писал:
Эээ... Какие основания так утверждать? Пример привести можешь?

Надо пнуть фиэктру - он мне давал сцылочку на один буржуйский форум, где был код на эту тему, видимо полученный ревер-инженерингом.
Я сам чуть не попутал.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 58936

Старое сообщение 21-05-2010 11:43
-
CrazyRussian
ололо

Дата регистрации: Apr 2009
Проживает: Город-курорт Ессентуки
Сообщений: 790
Возраст: 31

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
В оригинальном half-life есть один подлый хак, который определяет тип игры и в зависимости от этого включает те или иные фичи. Для опфора - одно, для натурал селекшен - другое, для контер страйка - третье.

Единственное что я видел из похожих вещей - в мануале мода "Public enemy" (как то так он назывался) ребята написали что попросили вальве увеличить значение w_poly при котором игра начинала тормозить, но я читал это несколько лет назад и может быть я что нибудь путаю, может быть они попросили их оптимитизацию какую нибудь сделать, мода того у меня нету, поэтому поглядеть и точно сказать не могу.

__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов

Сообщить модератору | | IP: Записан
Сообщение: 58938

Старое сообщение 21-05-2010 11:47
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
Надо пнуть фиэктру - он мне давал сцылочку на один буржуйский форум, где был код на эту тему, видимо полученный ревер-инженерингом.

Ок, жду.
Цитата:
CrazyRussian писал:
ребята написали что попросили вальве увеличить значение w_poly при котором игра начинала тормозить

Вальве, разумеется, даже не удостоила такую идиотскую просьбу ответом?

Добавлено 21-05-2010 в 18:54:

Все, сажусь писать письмо в вальв, с просьбой прикрутить бамп и отражения для моего мода "хлфх".

__________________

Сообщить модератору | | IP: Записан
Сообщение: 58941

Старое сообщение 21-05-2010 11:54
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


Цитата:
CrazyRussian писал:
попросили вальве увеличить значение w_poly при котором игра начинала тормозить


C++ Source Code:
1
// a point where lags begin
2
#define WPOLY_LAG_LIMIT		3000
3
 
4
...
5
 
6
R_DrawWorld();
7
if ( wPoly >= WPOLY_LAG_LIMIT )
8
  DoLag();
9
 
10
...
11
 
12
SwapBuffers( mainDC );

Сообщить модератору | | IP: Записан
Сообщение: 58951

Старое сообщение 21-05-2010 12:43
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Government-Man

__________________

Сообщить модератору | | IP: Записан
Сообщение: 58955

Старое сообщение 21-05-2010 13:25
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Дядя Миша
Ты про это?

C++ Source Code:
1
// edit: rewritten and optimized.
2
// works with: cs1.6, cz, dod, hl1, tfc, dmc, ts, dmc, ns.
3
void HookThread( void )
4
{
5
  while( !FindWindow( "Valve001", NULL ) ) { Sleep( 50 ); } // no game window?
6
    Sleep( 2000 ); // let the game initialize
7
 
8
  HMODULE hmHW = GetModuleHandle( "hw.dll" );
9
  if( !hmHW )
10
  {
11
    hmHW = GetModuleHandle( "sw.dll" );
12
    if( hmHW )
13
    {
14
      MessageBox( NULL, "Your in Software mode.\nCare to switch to opengl?", "SimpleBaseIII", MB_OK | MB_ICONERROR );
15
      ExitProcess( 0 );
16
    }
17
    MessageBox( NULL, "Are you using Non-Steam?\nBuy the game!", "SimpleBaseIII", MB_OK | MB_ICONERROR );
18
    ExitProcess( 0 );
19
  }
20
 
21
  DWORD dwClientRef = g_Utils.dwFindPattern( (DWORD)hmHW, 0x0122A000, (BYTE*)"\x56\x8B\x74\x24\x00\x56\xE8\x00\x00\x00\x00\x83\xC4\x00\xA3\x00\x00\x00\x00\x85\xC0\x75\x00", "xxxx?xx????xx?x????xxx" );
22
  dwClientRef += 0x45;
23
  exporttable_t *pExport = (exporttable_t*)*(DWORD*)dwClientRef;
24
  while( !pExport->Initialize || !pExport->HUD_GetStudioModelInterface ) { Sleep( 50 ); } // avoid crash
25
 
26
  cl_enginefunc_t *pEngine = NULL;
27
  engine_studio_api_t *pStudio = NULL;
28
  DWORD dwEngineOfs = NULL, dwStudioOfs = NULL;
29
  switch( g_Utils.m_iGame )
30
  {
31
  case GAME_HL:
32
    case GAME_TFC:
33
      case GAME_DOD:
34
          dwEngineOfs = 0x22;
35
        dwStudioOfs = 0x30;
36
        break;
37
      case GAME_TS:
38
        case GAME_DMC:
39
            dwEngineOfs = 0xE;
40
          dwStudioOfs = 0x20;
41
          break;
42
        case GAME_NS:
43
            dwEngineOfs = 0x23;
44
          dwStudioOfs = 0x20;
45
          break;
46
          default: // CS / CZ
47
            dwEngineOfs = 0x1C;
48
          dwStudioOfs = 0x1A;
49
          break;
50
        }
51
      pEngine = (cl_enginefunc_t*)*(DWORD*)( (DWORD)*pExport->Initialize + dwEngineOfs );
52
      pStudio = (engine_studio_api_t*)*(DWORD*)( (DWORD)*pExport->HUD_GetStudioModelInterface + dwStudioOfs );
53
      while( !pEngine->pfnHookEvent || !pStudio->Mem_Calloc ) { Sleep( 50 ); } // avoid crash
54
 
55
  HookClient( pExport );
56
  HookEngine( pEngine );
57
  HookStudio( pStudio );
58
}


>> WonID и SteamID

Это что такое?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 21-05-2010 в 14:23

Сообщить модератору | | IP: Записан
Сообщение: 58962

Старое сообщение 21-05-2010 14:18
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


FiEctro
Откуда этот код? Только не говорите опять про реверс инженеринг, это не смешно.

Цитата:
FiEctro писал:
Это что такое?

Это идентификаторы, по которым Headcrab Frenzy идентифицирует тебя при занесении в таблицу статистики.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 58967

Старое сообщение 21-05-2010 14:25
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



>> Откуда этот код?

От буржуев.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 58969

Старое сообщение 21-05-2010 14:30
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


FiEctro
Спасибо, Адмирал Я.Х., а подробнее?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 58971

Старое сообщение 21-05-2010 14:38
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



XaeroX
Подробнее больше там ничего нет. Ну разве еще это:

C++ Source Code:
1
DWORD*   m_pSlots						= NULL;
2
void*    m_pEngfuncs					= NULL;
3
void*    m_pStudio						= NULL;
4
void*    m_pPmove						= NULL;
5
void*    m_ppinterface					= NULL;
6
void*    m_pPreS_DynamicSound			= NULL;
7
 
8
 
9
bool getstuff_halflife(void)
10
{
11
  char engine_sig[] = "\x89\x74\x24\x5C\x89\x74\x24\x60\x89\x74\x24\x64\x89\x74\x24\x68\x89\x74\x24\x6C\x89\x74\x24\x70\x89\x74\x24\x74\x89\x74\x24\x78\x89\x74\x24\x7C\0";
12
  for(char* engine  = (char*)0x01D00000; (DWORD)engine < 0x2D60000/*ftw*/; engine++)
13
  {
14
    //         if( *(PBYTE)(engine) == 0x68 &&
15
    //             *(PBYTE)(engine + 0x05) == 0xE8 &&
16
    //             *(PBYTE)(engine + 0x0A) == 0x6A &&
17
    //             *(PBYTE)(engine + 0x0B) == 0x07 &&
18
    //             *(PBYTE)(engine + 0x0C) == 0x68 &&
19
    //             *(PBYTE)(engine + 0x11) == 0xFF &&
20
    //             *(PBYTE)(engine + 0x12) == 0x15 &&
21
    //             *(PBYTE)(engine + 0x17) == 0x68)
22
    //         {
23
      //             *(byte**)&m_pEngfuncs = (void*)*(DWORD*)(engine + 0x0D);
24
      //             LOG_RET(m_pEngfuncs);
25
      //         }
26
      if( *(PBYTE)(engine) == 0x68 &&
27
      *(PBYTE)(engine + 0x05) == 0x68 &&
28
      *(PBYTE)(engine + 0x0A) == 0x6A &&
29
      *(PBYTE)(engine + 0x0B) == 0x01 &&
30
      *(PBYTE)(engine + 0x0C) == 0xFF &&
31
      *(PBYTE)(engine + 0x0D) == 0xD0 &&
32
      *(PBYTE)(engine + 0x0E) == 0x83 &&
33
      *(PBYTE)(engine + 0x27) == 0xC3)
34
      {
35
        //*(byte**)&m_pStudio        = (void*)*(DWORD*)(engine + 0x01);
36
        *(byte**)&m_ppinterface    = (byte*)*(DWORD*)(engine + 0x06);
37
      }
38
      if( !memcmp(engine,engine_sig,hack_func->_string->_strlen(engine_sig)) )
39
      {
40
        *(byte**)&m_pSlots               = (byte*)(*(DWORD*)(engine - 0x74));
41
        *(byte**)&m_pEngfuncs            = reinterpret_cast<byte*>((DWORD)engine + (DWORD)0x13417D);
42
        *(byte**)&m_pStudio              = reinterpret_cast<byte*>((DWORD)engine + (DWORD)0x15064D);
43
        *(byte**)&m_pPreS_DynamicSound   = reinterpret_cast<byte*>((DWORD)engine + (DWORD)0x349ED);
44
        *(byte**)&m_pPmove               = reinterpret_cast<byte*>((DWORD)engine + (DWORD)0xFEB69D);
45
 
46
        hack_func->add_log_to_file("m_pSlots 0x%X",             m_pSlots);
47
        hack_func->add_log_to_file("m_pEngfuncs 0x%X",          m_pEngfuncs);
48
        hack_func->add_log_to_file("m_pStudio 0x%X",            m_pStudio);
49
        hack_func->add_log_to_file("m_pPreS_DynamicSound 0x%X", m_pPreS_DynamicSound);
50
        hack_func->add_log_to_file("m_pPmove 0x%X",             m_pPmove);
51
        hack_func->add_log_to_file("m_ppinterface 0x%X",        m_ppinterface);
52
        return true;
53
      }
54
    }
55
    return false;
56
  }

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 58974

Старое сообщение 21-05-2010 14:44
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


FiEctro
Ты скажи, откуда конкретно взял код? Что за сайт, что за люди? Может, это вообще из разряда Дзугаровских недоков?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 58976

Старое сообщение 21-05-2010 14:47
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



XaeroX
С тебя демка волатилы .
http://forum.gamedeception.net/thre...for-DoD-HL1-TFC

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 58977

Старое сообщение 21-05-2010 14:50
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Скорее всего, этот код вовсе не говорит о том, что для модов сделаны хаки. На это есть две причины - очевидная и логическая.
1) Очевидная. Для HL и DMC разные оффсеты, исходники есть для обоих модов. Сравните их таблицы экспорта (можете не париться и сравнивать, хедеры у них в СДК общие).
2) Логическая. Все эти оффсеты - для клиентских дллок, а они у каждого мода разные.
Хотя конечно, я смутно себе представляю, как это работает (а именно - как мы от адреса функции в таблице экспорта дллки перешли к адресу ее параметра путем прибавления довольно странного оффсета).

__________________

Сообщить модератору | | IP: Записан
Сообщение: 58979

Старое сообщение 21-05-2010 15:15
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 17:06. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > Xash3D > Немного о том, почему ксаш никогда не будет иметь полной поддержки халфовских дллок
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024