HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Xash3D (https://hlfx.ru/forum/forumdisplay.php?forumid=14)
-- GL_StudioDrawShadows - обратная сторона (https://hlfx.ru/forum/showthread.php?threadid=2814)
Отправлено Дядя Миша 09-05-2011 в 15:04:
GL_StudioDrawShadows - обратная сторона
Как известно в HL данная функция выключена, хотя сами тени, конечно никуда не делись и могут быть вызваны при помощи известного хака, который прыгает через возврат и позволяет вызвать функцию.
Я в ксаше пытался проэмулировать подобное поведение, но толи ума не хватило, толи там какая-то хитрость есть, но в общем и целом ничего не вышло. Есть желающие повозиться с этой бедой?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено fire64 09-05-2011 в 18:41:
Я кстати понять не могу, зачем они отключили вызов теней, но при этом оставили их рабочий код ?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено XaeroX 09-05-2011 в 18:41:
fire64
Когда ты какую-то фичу отключаешь - то полностью вырезаешь её код?
Отправлено fire64 09-05-2011 в 18:47:
XaeroX, если я не планирую вернуть её позже, то да.
Иначе со временем код превратится в помойку из старого неработающего кода.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено Дядя Миша 09-05-2011 в 18:50:
Цитата:
XaeroX писал:
Когда ты какую-то фичу отключаешь - то полностью вырезаешь её код?
Я так скажу. Если эта фича умещается в одной функции и не тянет за собой никаких изменений - почему бы и не удалить полностью.
Но мне другое непонятно. Зачем ВООБЩЕ надо было отключать тени?
Кому они мешали?
Добавлено 09-05-2011 в 22:50:
ЗЫ. Adamix наговнял вот такое вот чудо, которое даже работает, но мне оно не нравится. Совсем не нравится
C++ Source Code:
1 | static void GL_StudioDrawShadow( void ) |
3 | // big hack for some other shadows hack. |
47 | if( true )// r_shadows.value ) |
49 | StudioDrawShadow( m_pStudioHeader, g_bonestransform ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено fire64 09-05-2011 в 19:10:
А в чем смысл забивать функцию nop'ами ?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено XaeroX 09-05-2011 в 19:16:
Меня больше беспокоит строчка "pop ecx".
Отправлено Дядя Миша 09-05-2011 в 19:28:
Цитата:
XaeroX писал:
Меня больше беспокоит строчка "pop ecx".
ну ничего страшного. подумаешь, будет stack underflow, всего-то делов 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 10-05-2011 в 02:45:
А стенсил буффер в Ксаше включен? Чтобы хакнутую opengl32.dll для теней БУзера или неба из Паранойи не волочить за модом?
Отправлено FiEctro 10-05-2011 в 05:50:
>> Но мне другое непонятно. Зачем ВООБЩЕ надо было отключать тени?
Кому они мешали?
Плоские и мерцающие
. Видимо валв они бесили, потом в контерстрайке были другие тени, такие спрайтики под ногами игроков.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено adamix 10-05-2011 в 07:12:
Предлагайте свои идеи, чем можно занять первые 32 байта в функции без асма.
__________________
Законы математики, имеющие какое-либо отношение к реальному миру, ненадежны; а надежные математические законы не имеют отношения к реальному миру. © Альберт Эйнштейн
Отправлено Дядя Миша 10-05-2011 в 08:23:
Цитата:
Ku2zoff писал:
А стенсил буффер в Ксаше включен?
ну он через квар gl_stencilbits настраивается. Впрочем параноя без своей любимой дллки серавно не заработает - она же ищет волшебное gl-расширение PARANOIA_HACKS_V1.
И тени бузера тоже не заработают.
Цитата:
adamix писал:
Предлагайте свои идеи
моя идея посмотреть чем они заняты в оригинальной функции.
Правда её сначала нужно найти, но это уже дело техники.
Я начал поиски с DispatchStudioEvent.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 10-05-2011 в 08:32:
Цитата:
adamix писал:
Предлагайте свои идеи, чем можно занять первые 32 байта в функции без асма.
Ты для начала объясни, с чего ты взял, что твой код на асме займет первые 32 байта в функции? Причем на всех компиляторах и всех конфигурациях (дебаг, релиз).
Отправлено Ku2zoff 10-05-2011 в 08:35:
>>Впрочем параноя без своей любимой дллки серавно не заработает
Ну дык её клиент можно перекомпилить если чо.
>>И тени бузера тоже не заработают.
Они и с дллкой криво работают, я об этом уже писал.
Отправлено adamix 10-05-2011 в 08:37:
Цитата:
XaeroX писал:
Ты для начала объясни, с чего ты взял, что твой код на асме займет первые 32 байта в функции?
ЕМНИП, канпелятор не оптимизирует асм. Ну там не 32, чуть больше. суть в том, что после джампа мы должны оказатся на 32 байте.__________________
Законы математики, имеющие какое-либо отношение к реальному миру, ненадежны; а надежные математические законы не имеют отношения к реальному миру. © Альберт Эйнштейн
Отправлено Ku2zoff 10-05-2011 в 08:42:
>>Плоские и мерцающие
У некоторых товарищей (и у меня раньше, когда радеон был) на радеонах они не мерцают. А то, что не на поверхности не ложаться, да плохо.
Отправлено XaeroX 10-05-2011 в 08:47:
Ну и не проще ли было сделать обёртку - naked-функцию, вписать в ее начало нужное число нопов, потом свой пролог и вызов обычной функции? Если в релиз-версии компилятор всунет свой пролог до твоего асм-кода, все изломается.
Отправлено Дядя Миша 10-05-2011 в 10:35:
Цитата:
Ku2zoff писал:
Они и с дллкой криво работают, я об этом уже писал.
очнись! в релизной версии это было исправлено.
Вообщем путём нехитрова реверс-инжинеринга я восстановил (частично) функцию StudioDrawShadows. Выглядит она вот так
C++ Source Code:
1 | void __cdecl R_StudioDrawShadows() |
3 | int rendermode; // ecx@3 |
4 | float shadow_alpha; // ST18_4@4 |
5 | float shadow_alpha2; // ST14_4@4 |
6 | GLenum depthmode; // [sp+14h] [bp-8h]@6 |
7 | GLenum depthmode2; // [sp+14h] [bp-8h]@10 |
9 | qglDepthMask( GL_TRUE ); |
11 | if( r_shadows.value != 0.0f ) |
13 | if( iCurrentMovetype != MOVETYPE_FLY ) |
15 | rendermode = m_pCurrentEntity->baseline.rendermode; |
17 | if( rendermode == kRenderNormal ) |
19 | shadow_alpha = 1.0 - r_shadowalpha->value * 0.5f; |
20 | qglDisable( GL_TEXTURE_2D ); |
21 | qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); |
22 | qglEnable( GL_BLEND ); |
23 | shadow_alpha2 = 1.0 - shadow_alpha; |
25 | qglColor4f( 0.0f, 0.0f, 0.0f, shadow_alpha2 ); |
27 | if( flt_100DB994 == 0.0 || flt_107BA8A8 < 0.5 ) |
29 | else depthmode = GL_GREATER; |
30 | qglDepthFunc( depthmode ); |
34 | if( flt_100DB994 == 0.0 || flt_107BA8A8 < 0.5 ) |
35 | depthmode2 = GL_LEQUAL; |
37 | depthmode2 = GL_GEQUAL; |
39 | qglDepthFunc( depthmode2 ); |
40 | qglEnable( GL_TEXTURE_2D ); |
41 | qglDisable( GL_BLEND ); |
43 | qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); |
45 | if( flt_100DAF14 != 0.0 ) |
46 | qglShadeModel( GL_SMOOTH ); |
Ну а дальше - дело техники 
Добавлено 10-05-2011 в 14:35:
ЗЫ. отсюда кстати и становится ясно, что push ecx 1 - это вызов qglDepthMask, который в хаке пропускается и восстановить регистр надо вручную.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 10-05-2011 в 11:43:
Дядя Миша
Нет никакой гарантии, что в твоем ехешнике этот же самый код будет работать, с теми же оффсетами. Этот хак привязан к конкретному машинному коду, а он зависит от кучи вещей - компилятора, уровня оптимизации и т.п.
Отправлено Дядя Миша 10-05-2011 в 12:19:
Цитата:
XaeroX писал:
Нет никакой гарантии, что в твоем ехешнике этот же самый код будет работать, с теми же оффсетами
гарантии конечно нет. Однако работает 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 10-05-2011 в 12:33:
Дядя Миша промежуточные билды движка будут? А то ждать до сентября долго
А adamix'овскую версию я не хочу качать, мало ли чо там.
Отправлено Дядя Миша 10-05-2011 в 13:18:
Цитата:
Ku2zoff писал:
промежуточные билды движка будут?
будут но без сорцев и в комплекте с ксаш-модом с сорцами.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'