HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- 3d небо из Spirit of HL в SDK2.3 (https://hlfx.ru/forum/showthread.php?threadid=4267)
Отправлено vitoss 28-01-2014 в 09:39:
3d небо из Spirit of HL в SDK2.3
Пишу в новую тему, чтобы имелась возможность грамотно редактировать текст.
Ребят, излагаю подробно, как я вставлял 3д небо из спирита в свой мод на базе SDK 2.3. Я конечно полный ноль в программировании, но делаю все предельно аккуратно, и сосредоточенно, параллельно изучая язык C++. Не судите строго.
Наверняка для таких опытных дядек как вы будет не сложно увидеть где я промахнулся, и как довести дело до ума. И когда все заработает, с вашей помощью, из этой темы получится как раз так и хороший, работающий тутор для новичков.
Поехали!
В серверной части:
Идем в effects.cpp и в самом низу добавляем класс:
C++ Source Code:
2 | class CEnvSky : public CBaseEntity |
9 | void CEnvSky :: Activate ( void ) |
11 | pev->effects |= EF_NODRAW; |
12 | pev->nextthink = gpGlobals->time + 1.0; |
17 | void CEnvSky :: Think () |
19 | MESSAGE_BEGIN(MSG_BROADCAST, gmsgSetSky, NULL); |
20 | WRITE_BYTE(1); // mode |
21 | WRITE_COORD(pev->origin.x); // view position |
22 | WRITE_COORD(pev->origin.y); |
23 | WRITE_COORD(pev->origin.z); |
27 | LINK_ENTITY_TO_CLASS( env_sky, CEnvSky ); |
[/COLOR]
затем идем в player.cpp и после строки
C++ Source Code:
Вставляем:
C++ Source Code:
[COLOR=blue]int gmsgSetSky = 0; [/COLOR] |
Далее в том же файле, после строки
C++ Source Code:
gmsgSelAmmo = REG_USER_MSG("SelAmmo", sizeof(SelAmmo)); |
вставляем:
C++ Source Code:
gmsgSetSky = REG_USER_MSG( "SetSky", 7 );[/color] |
На этом с серверной частью закончено (НАДЕЮСЬ) , компилируем
Идем в Клиентский длл
тут немного побольше копи-пасты
Открываем hud.cpp
находим C++ Source Code:
//DECLARE_MESSAGE(m_Logo, Logo) |
int __MsgFunc_ResetHUD(const char *pszName, int iSize, void *pbuf) |
return gHUD.MsgFunc_ResetHUD(pszName, iSize, pbuf ); |
и после этого кода вставляем код для нашего 3д-неба:
C++ Source Code:
[color=blue]int __MsgFunc_SetSky(const char *pszName, int iSize, void *pbuf) |
gHUD.MsgFunc_SetSky( pszName, iSize, pbuf ); |
В этом же файле находим срочку:
C++ Source Code:
и после нее вставляем нашу:
C++ Source Code:
HOOK_MESSAGE( SetSky );[/color] |
Теперь идем в файл hud.h
и перед строчкой:
C++ Source Code:
вставляем:
C++ Source Code:
#define SKY_ON 1 [/color] |
в этом же файле, теперь после строки:
C++ Source Code:
int GetNumWidth(int iNumber, int iFlags); |
вставляем:
C++ Source Code:
дальше, в этом же файле, находим:
C++ Source Code:
int _cdecl MsgFunc_Concuss( const char *pszName, int iSize, void *pbuf ); |
и ниже вставляем:
C++ Source Code:
void _cdecl MsgFunc_SetSky( const char *pszName, int iSize, void *pbuf ); |
теперь идем в файл hud_msg.cpp
находим:
C++ Source Code:
void CHud :: MsgFunc_InitHUD( const char *pszName, int iSize, void *pbuf ) |
и после открывающей скобки ниже добавляем:
C++ Source Code:
m_iSkyMode = SKY_OFF;[/color] |
ДОЛЖНО ПОЛУЧИТЬСЯ:
C++ Source Code:
1 | void CHud :: MsgFunc_InitHUD( const char *pszName, int iSize, void *pbuf ) |
6 | // prepare all hud data |
7 | HUDLIST *pList = m_pHudList; |
12 | pList->p->InitHUDData(); |
16 | //Probably not a good place to put this. |
17 | pBeam = pBeam2 = NULL; |
и после данного кода ниже вставляем:
C++ Source Code:
2 | void CHud :: MsgFunc_SetSky( const char *pszName, int iSize, void *pbuf ) |
4 | // CONPRINT("MSG:SetSky"); |
5 | BEGIN_READ( pbuf, iSize ); |
7 | m_iSkyMode = READ_BYTE(); |
8 | m_vecSkyPos.x = READ_COORD(); |
9 | m_vecSkyPos.y = READ_COORD(); |
10 | m_vecSkyPos.z = READ_COORD(); |
На этом пока всё,
уважаемые кодеры, помогите плиз доделать тутор
Отправлено XaeroX 28-01-2014 в 09:52:
Поиск m_vecSkyPos и m_iSkyMode по клиентскому проекту нашёл только вышеперечисленные строки?
Почему тебя совершенно не смущает, что в переменную m_vecSkyPos что-то записывается, но нигде не читается?
__________________
Отправлено vitoss 28-01-2014 в 10:04:
Цитата:
XaeroX писал:
Поиск m_vecSkyPos и m_iSkyMode по клиентскому проекту нашёл только вышеперечисленные строки?
Почему тебя совершенно не смущает, что в переменную m_vecSkyPos что-то записывается, но нигде не читается?
Цитата:
vitoss писал:
Не судите строго.
щас проверю
Добавлено 28-01-2014 в 18:04:
ПРОДОЛЖЕНИЕ
открываем view.cpp
находим C++ Source Code:
void V_CalcNormalRefdef ( struct ref_params_s *pparams ) |
и в самый конец
вставляем:
C++ Source Code:
2 | if (gHUD.m_iSkyMode == SKY_ON && pparams->nextView == 0) |
4 | pparams->vieworg[0] = gHUD.m_vecSkyPos.x; |
5 | pparams->vieworg[1] = gHUD.m_vecSkyPos.y; |
6 | pparams->vieworg[2] = gHUD.m_vecSkyPos.z; |
потом в этом же файле находим C++ Source Code:
view = gEngfuncs.GetViewModel(); |
и после нее вставляем:
C++ Source Code:
2 | if (gHUD.m_iSkyMode == SKY_ON) |
4 | savedviewmodel = view->model; |
Компилируем, однако, небо все еще не отображается
Отправлено XaeroX 28-01-2014 в 10:35:
В общем, ход рассуждений я тебе показал.
Тыкать носом в каждую переменную, которую надо дополнительно "пробить", у меня желания нет. Если у кого есть - you are welcome.
__________________
Отправлено vitoss 28-01-2014 в 11:01:
Цитата:
XaeroX писал:
В общем, ход рассуждений я тебе показал.
Тыкать носом в каждую переменную, которую надо дополнительно "пробить", у меня желания нет. Если у кого есть - you are welcome.
Понятное дело
Все равно большое спасибо, Xaerox, за подсказки!
Отправлено vitoss 28-01-2014 в 17:47:
ВСЕ!! МОЖНО СЧИТАТЬ ТУТОР ЗАКОНЧЕНЫМ И РАБОЧИМ!!!
я просто все это время компилировал cl_dll не в ту папку....
Отправлено Government-Man 28-01-2014 в 19:29:
В спирите плохое небо - там прострая проекция. Какое небо в новом ксаше не знаю, а вот в "Мести тещи" небо как в HL2 - оно трехмерное и выглядит как часть основной геометрии.
Отправлено Дядя Миша 28-01-2014 в 19:34:
Цитата:
Government-Man писал:
Какое небо в новом ксаше не знаю
Ты и ксаш-мод то не качал, иначе бы не говорил такого.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Government-Man 28-01-2014 в 19:37:
Цитата:
Дядя Миша писал:
Ты и ксаш-мод то не качал, иначе бы не говорил такого.
Мод не качал, потому и говорю, что не знаю. Может там тоже хорошее небо. Но тут чувак из спирита небо переносит - оно ж там фейковое.
Отправлено Дядя Миша 28-01-2014 в 19:44:
Найди границу между небом и реальным уровнем
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено vitoss 28-01-2014 в 20:06:
а что за месть тещи?
Отправлено Дядя Миша 28-01-2014 в 20:23:
Мод Government-Man, который он пытался выдать за чужой.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Government-Man 28-01-2014 в 21:12:
Цитата:
Дядя Миша писал:
Мод Government-Man, который он пытался выдать за чужой.
Ну да, ну да. Знаешь, если следовать твоей логике, то мотороллер - тоже того чувака, который объяву разместил.
Цитата:
Дядя Миша писал:
Найди границу между небом и реальным уровнем
А слабо сделать так, чтобы цытадель посреди уровня прямо из земли росла, причем земля была бы уровнем, а цытадель - небом?
Отправлено pRoxxx 28-01-2014 в 22:16:
Цитата:
Government-Man писал:
А слабо сделать так, чтобы цытадель посреди уровня прямо из земли росла, причем земля была бы уровнем, а цытадель - небом?
Мне нет.
Отправлено Дядя Миша 29-01-2014 в 15:46:
Цитата:
Government-Man писал:
Знаешь, если следовать твоей логике, то мотороллер - тоже того чувака, который объяву разместил.
Следственные мероприятия с чуваком проводили? С тобой тоже нет.
Цитата:
Government-Man писал:
А слабо сделать так, чтобы цытадель посреди уровня прямо из земли росла, причем земля была бы уровнем, а цытадель - небом?
Не вижу в этом реальной необходимости, ведь коллидить с такой цитаделью не получится. Идея неба в том, чтобы реалистично рисовать удалённые объекты, до которых нельзя добраться. А если она растёт посреди уровня, то до нее можно добраться и убедиться, что она ненастоящяя. К тому же я не вполне понимаю задумку, небо ведь не пишется в Z-Buffer.
Добавлено 29-01-2014 в 19:46:
Цитата:
pRoxxx писал:
Мне нет.
Ну тебя никто за язык не тянул - делай __________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'