GTA Builder Форум

GTA Vice City => Идеи => Тема начата: xanser от Февраль 23, 2014, 08:57:49 pm

Название: Океан 10000x10000 (Реализовано)
Отправлено: xanser от Февраль 23, 2014, 08:57:49 pm
То, что я вижу сложно назвать океаном. Прорисовка внутренней воды ограничена по расстоянию, внешний периметр образует заметные углы. Хотелось бы наблюдать воду до горизонта, хотя бы до границ скайбокса, точнее сферы. Думаю реально расширить внешний периметр и увеличить дисстанцию прорисовки внутреннего. Речь не идет о плавании, только о видимости.

(http://s6.postimg.org/wbwg1xxmp/scr001.jpg) (http://s6.postimg.org/hv96nd85d/scr004.jpg) (http://s6.postimg.org/5s3uzsx35/scr003.jpg)
Название: Re: Океан 10000x10000
Отправлено: Sektor от Февраль 23, 2014, 09:55:33 pm
Интересно какой код за это отвечает, может быть CWorld класс, уж глубже надо исследователь это дело.
Название: Re: Океан 10000x10000
Отправлено: xanser от Февраль 25, 2014, 04:49:52 pm
Все оказалось не сложно, если поискать. Оказывается внешний периметр состоит из пяти уровней воды по 256, можно его отодвинуть и заполнить еще уровнями.
Думаю мозаика близка к завершению. Вид из стратосферы.

(http://s6.postimg.org/6fl58ani9/scr002.jpg) (http://s6.postimg.org/duah0o9dt/scr004.jpg) (http://s6.postimg.org/uteu26v7l/scr001.jpg)
Название: Re: Океан 10000x10000
Отправлено: xanser от Февраль 26, 2014, 04:29:20 pm
Вроде бы получилось.

(http://s6.postimg.org/am5znmn41/scr002.gif)

Код: C++
  1. BYTE  * WaterDraw  = (BYTE *)  0x5C1710;        // блок рисования внешней воды
  2. float   WaterShift;                             // замена переменной сдвига внешней воды
  3.  
  4. void ProtectBYTE(BYTE *Address, BYTE Value)
  5. {
  6.         DWORD OldProtect;       VirtualProtect(Address,sizeof(BYTE),PAGE_READWRITE,&OldProtect);
  7.         *Address = Value;       VirtualProtect(Address,sizeof(BYTE),OldProtect,&OldProtect);
  8. }
  9.        
  10. void ProtectDWORD(DWORD *Address, DWORD Value)
  11. {
  12.         DWORD OldProtect;       VirtualProtect(Address,sizeof(DWORD),PAGE_READWRITE,&OldProtect);
  13.         *Address = Value;       VirtualProtect(Address,sizeof(DWORD),OldProtect,&OldProtect);
  14. }
  15.        
  16. void LoadWater()
  17. {
  18.         BYTE WaterLines = 40;                                           // дополнительные линии внешней воды, добавляются к 5-ти стандартным
  19.         WaterShift = WaterLines*256+2048;                               // сдвиг внешней воды
  20.  
  21.         ProtectDWORD((DWORD*)(WaterDraw+0x9F4), (DWORD)&WaterShift);    // сдвиг северной и южной на запад
  22.         ProtectDWORD((DWORD*)(WaterDraw+0xA41), (DWORD)&WaterShift);    // сдвиг южной на юг
  23.         ProtectDWORD((DWORD*)(WaterDraw+0xC0B), (DWORD)&WaterShift);    // сдвиг северной на север
  24.         ProtectDWORD((DWORD*)(WaterDraw+0xE2B), (DWORD)&WaterShift);    // сдвиг западной на запад
  25.         ProtectDWORD((DWORD*)(WaterDraw+0x100F),(DWORD)&WaterShift);    // сдвиг восточной на восток
  26.         ProtectBYTE(WaterDraw+0xDCB, WaterLines*2+26);                  // пересчет линий внешней воды севера и юга дополнительно на востоке
  27.         ProtectBYTE(WaterDraw+0x11D1,WaterLines+5+8);                   // пересчет линий внешней воды запада и востока, 8 - заполнение внешней водой центра
  28.         ProtectBYTE(WaterDraw+0xDC1, WaterLines+5);                     // пересчет линий внешней воды севера и юга
  29.  
  30. //      *(float *) 0x69CC58 = 0;        // по умолчанию 400, вся вода сдвинута на запад на 400, можно вернуть в центр в 0
  31.  
  32. }
Название: Re: Океан 10000x10000
Отправлено: Sektor от Февраль 26, 2014, 04:53:05 pm
По моему это гениально! Как долго возился с данной задачей?
Название: Re: Океан 10000x10000
Отправлено: xanser от Февраль 26, 2014, 04:57:58 pm
Три последних дня, в воскресенье это была только идея, хотя возникла она очень давно, но не хватало знаний.
Название: Re: Океан 10000x10000
Отправлено: Sektor от Февраль 26, 2014, 05:06:27 pm
Код: C++
  1. .text:005C1710                                                     ; CWaterLevel::RenderWater(void)

Вот эту функцию бы в сорцы переписать, было бы отлично.
Название: Re: Океан 10000x10000
Отправлено: Sektor от Февраль 26, 2014, 05:23:56 pm
Кстати есть предположение, но это пока только догадки, что тут указатель на текстуру:

Код: ASM
  1. .text:005C291B 0C0 A1 8C 85 97 00                                                  mov     eax, ds:dword_97858C
  2. .text:005C2920 0C0 50                                                              push    eax
  3. .text:005C2921 0C4 68 C0 3B 93 00                                                  push    offset qword_933BC0

И скорее всего, возможно этот:

Код: ASM
  1.  mov  eax, ds:dword_97858C

Но могу ошибаться тут уже надо пробовать, на живую...
Название: Re: Океан 10000x10000
Отправлено: xanser от Февраль 27, 2014, 07:33:09 pm
Я немного схитрил, и заполнил внутренние дырки внешней водой. Разницы не видно, но я заметил, что вроде бы подводные объекты пропадают. А внутренняя вода рисуется в радиусе игрока, поэтому там реальные дырки по углам, надо дальше копать, чтобы их залепить по-нормальному.
Название: Re: Океан 10000x10000
Отправлено: xanser от Февраль 28, 2014, 04:20:09 pm
Все, я доделал окончательно. В моем варианте были строки:

Код: C++
  1. ProtectBYTE(WaterDraw+0x11D1,WaterLines+5+8);           // пересчет линий внешней воды запада и востока
  2. ProtectBYTE(WaterDraw+0xDC1, WaterLines+5);             // пересчет линий внешней воды севера и юга

WaterLines это дополнительные внешние линии
+5 это стандартные внешние линии
+8 это дополнительные внешние линии, временно закрывающие центр, теперь я их убрал и расширил видимость центральной части, которая была ограничена радиусом камеры 2000

Код: C++
  1. *(float*)0x69CD7C = 10000;
  2. *(float*)0x69CD80 = 10000;

В итоге весь пазл сложился

(http://s6.postimg.org/exh9qs6td/scr001.jpg)

Ну и наконец итог, которого я ждал 7 лет, прекрасный вид океана!

(http://s6.postimg.org/6t95m1ke9/scr004.jpg)
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: GHOST от Февраль 28, 2014, 10:00:30 pm
xanser мм.. будет ли это в общем доступе для всех.. ?  :o
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: Sektor от Февраль 28, 2014, 10:10:23 pm
Цитировать
Ну и наконец итог, которого я ждал 7 лет

7 лет, не чего себе, а что в этом помогло тебе разобраться?
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: xanser от Март 01, 2014, 05:58:45 am
Не знал с какого боку подойти. Материалы этого сайта подтолкнули что-то изучать, разбирать ассемлерный код, конечно я только в начале этого пути, и больше на интуиции пока, но уже что-то начало получаться. Я тут переписал код без замены переменных, а только заменой значений, сохранив алгоритм самой игры

Код: C++
  1. void ProtectBYTE(BYTE *Address, BYTE Value) {
  2.         DWORD OldProtect;       VirtualProtect(Address,sizeof(BYTE),PAGE_READWRITE,&OldProtect);
  3.         *Address = Value;       VirtualProtect(Address,sizeof(BYTE),OldProtect,&OldProtect);
  4. }
  5. void LoadWater() {
  6.         BYTE * WaterRender = (BYTE *) 0x5C1710;                 // функция рендера воды
  7.         if  (* WaterRender == 0xDE)  WaterRender += 0x20;       // VC 1.1
  8.         BYTE   WaterLines  = 40;                                // количество линий внешней воды 5
  9. //      *(float *)0x69CC58 = 0;                                 // сдвиг всей воды на запад 400
  10.         *(float *)0x69CD7C = 10000;                             // радиус видимости внутренней воды ниже 60 метров (z-15)*800*0.022+1200
  11.         *(float *)0x69CD80 = 10000;                             // радиус видимости внутренней воды выше 60 метров 2000
  12.         *(float *)0x69CDCC = WaterLines*256;                    // сдвиг на количество внешней воды 1280 = 5*256
  13.         ProtectBYTE(WaterRender+0xDC1, WaterLines);             // количество внешней воды севера и юга
  14.         ProtectBYTE(WaterRender+0xDCB,(WaterLines-5)*2+26);     // расширение внешней воды севера и юга на восток
  15.         ProtectBYTE(WaterRender+0xDD3, WaterLines);             // сдвиг внешней воды запада и востока на север
  16.         ProtectBYTE(WaterRender+0x11D1,WaterLines);             // количество внешней воды запада и востока
  17.         ProtectBYTE(WaterRender+0x11DB,WaterLines+16);          // расширение внешней воды запада и востока на север
  18. }

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

(http://media.gtanet.com/gtamodding/archive/3/3a/20120311072722%21Watereditor.jpg)

xanser мм.. будет ли это в общем доступе для всех.. ?  :o

Берите этот код в свои моды, ну или могу скомпилировать в отдельную asi-шку
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: Sektor от Март 01, 2014, 04:22:43 pm
Я постараюсь прикладывать больше усилий, на то что-бы выпускать знания по моддингу. Сейчас на данный момент конечно же и нелегкое положение у меня с финансами. Но имейте введу, что сайт я не когда не брошу и не закрою, я его хорошо оплачиваю и пока отлично удерживаю. Ведь много раз были случаи, когда разрабатывался какой-то мод и потом когда людей начала прижимать жизнь и они шли уже работать, и вскоре сайт с модом становился заброшенным и все. Так вот я такого с этим сайтом не допущу впереди постоянно будут выходить новые материалы и много другого.
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: xanser от Март 01, 2014, 08:26:36 pm
Sektor, подумай, как можно расширить аудиторию, привлечь пользователей, разместить ссылки на таких сайтах как gtaforums и в плане финансирования сайта можно снять с тебя хотя бы частично это бремя, рассмотреть варианты финансовой поддержки сайта, получается ты делаешь работу для всех и сам один за это платишь.
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: mfisto от Март 01, 2014, 09:32:33 pm
Можно также убрать дырки под островами программой WaterEditor, нарисовав полностью черную текстуру, мне кажется они вообще не нужны, кстати появятся птицы над землей.

xanser мм.. будет ли это в общем доступе для всех.. ?  :o
Берите этот код в свои моды, ну или могу скомпилировать в отдельную asi-шку

Конечно надо, выложи как отдельную библиотеку asi)

А по поводу дырок, то их убирать нельзя, а точнее даже необходимо обязательно делать. Например, есть подземная парковка у причала Marina, там рядом стоит яхта Кортеза...Если не сделать дырок то ее затопит...(
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: Sektor от Март 01, 2014, 09:55:29 pm
xanser - да я делал эту кнопку, помощь сайту, потом снес, просто я не думаю что кто-то будет спонсировать сайт, ну мало найдется таких людей...  По хорошему бы тут, конечно было бы классно если бы спонсорские шли бы, также бы работа модераторов и все это можно было бы оплачивать. Ну а так пока сайт держится на энтузиазме, а дальше посмотрим как это будет, в любом случае я буду писать учебные статьи, стараться.  Открыл опрос по поводу спонсирования сайта тут (http://forum.gtabuilder.ru/index.php?topic=169.0), интересно посмотреть реальные голосования...
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: GHOST от Март 02, 2014, 06:14:02 pm
ну или могу скомпилировать в отдельную asi-шку

Вот это вариант очень кстати :) и не только я и многие другие кто все еще играет в Vice City будут вам премного благодарны..
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: xanser от Март 02, 2014, 08:33:25 pm
Мод будет доступен здесь: http://www.gtagarage.com/mods/show.php?id=25707 (http://www.gtagarage.com/mods/show.php?id=25707) после одобрения.
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: GHOST от Март 02, 2014, 08:57:06 pm
Мод будет доступен здесь: [url]http://www.gtagarage.com/mods/show.php?id=25707[/url] ([url]http://www.gtagarage.com/mods/show.php?id=25707[/url]) после одобрения.


Там проверка файлов временами занимает месяцы если не больше. Если не сложно то, перезалей на MediaFire..
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: mike43842 от Март 02, 2014, 09:15:11 pm
можно закинуть на свалку модов, т.е. сюда:
http://www.libertycity.ru/ (http://www.libertycity.ru/)
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: Sektor от Март 02, 2014, 09:59:26 pm
У нас самостоятельный сайт, и свои моды а также моды авторов по их разрешению выложим на GTABuilder.RU в первую очередь.
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: xanser от Март 03, 2014, 05:24:34 am
Ну тогда сюда еще http://www.mediafire.com/download/78fbvd4a0sbro9b/WaterMod.rar (http://www.mediafire.com/download/78fbvd4a0sbro9b/WaterMod.rar)
Если можно перезалить на GTABuilder, будет здорово.
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: mfisto от Март 03, 2014, 05:33:35 am
Ну тогда сюда еще [url]http://www.mediafire.com/download/78fbvd4a0sbro9b/WaterMod.rar[/url] ([url]http://www.mediafire.com/download/78fbvd4a0sbro9b/WaterMod.rar[/url])
Если можно перезалить на GTABuilder, будет здорово.


Выкладывай лучше тут, только так..., зато все сюда побегут скачивать, популярность сайта возрастет) А на GTAgarage...(, там чтойто странно мутно все, кому-то можно остальным нельзя. Я как-то пытался там выкладывать, так и не дождался.
Но в твоих интересах конечно лучше там тоже выложить по идее, так что...
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: xanser от Март 03, 2014, 08:44:15 am
Интерес только в том, чтобы были дополнительные ссылки оттуда на этот сайт, может кто-то придет, да и для поднятия рейтинга в поисковых системах.
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: GHOST от Март 03, 2014, 04:26:34 pm
Написал ThirteenAG`у (известный моддер в GTA-моддинге III/VC) :) и вот что он сказал:

(http://i33.fastpic.ru/big/2014/0303/c4/99afc1a86f626f5f2a5879dd14f8ebc4.jpg)
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: Sektor от Март 03, 2014, 06:42:10 pm
Приятно видеть такие отзывы, о нашем сайте GB.
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: Shagg_E от Апрель 17, 2014, 04:44:05 am
У меня такая проблема(писал в комментах к файлу, но там мой комментарий почему-то не появился - даже со второй попытки):
иногда при поворотах камеры участки воды исчезают :(
Особенно это болезненно выглядит с высоты(собственно, проявлялось вроде всегда только с высоты):
(http://i.gyazo.com/fd4a22373b52b84b736608e619f23441.png)
Я даже предполагаю, отчего это: у каждого участка воды есть центр, и когда этот центр за пределами экрана - участок воды не рендерится.
Такие же проблемы в ГТА бывают с LOD, но там кое-как это можно решить.

Собственно, вопрос: а тут это решаемо? Или никто с этим не сталкивался? Просто это очень режет глаз, особенно когда собираешься делать что-нибудь типа парашюта.
Повторюсь: чтобы глюк появился(по кр. мере так у меня) - нужно на высоте > 400m покрутить камерой, и обязательно какой-нибудь участок воды начнет глючить  :'(
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: xanser от Апрель 17, 2014, 05:04:34 am
Да есть такое, но это вроде не из-за мода, поскольку он просто увеличивает количество квадратиков воды, я не знаю что можно сделать.
Ну хотя сейчас у меня не проявилось, я поставил скайбокс 24000х24000, увеличил видимость до 25000 в timecyc.dat и вся вода на месте.
Есть немного исчезновение внешней воды на краю карты, но там можно не летать.
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: xanser от Май 14, 2014, 02:08:49 pm
DimZet13 прислал мне, что сделал прорисовку воды на клео еще для гта3. Если есть желающие собрать объединенный плагин на обе игры, то код во вложении.
Я давно гта3 не интересуюсь, поэтому не буду заморачиваться.
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: xanser от Сентябрь 13, 2014, 03:54:55 pm
Обнаружил еще такую неприятную вещь:

(http://s6.postimg.org/c7a3julc1/scr_20140913110355486.jpg)

Она связана с тем, что уровень внутренней воды задан в waterpro.dat, у меня 6.0, а уровень внешней воды всегда 0.0

Чтобы это исправить можно привязать все к уровню внутренней воды 0x78D658 (float)
адрес: 0x5C22DE, значение 0x78D658 (юг)
адрес: 0x5C24AE, значение 0x78D658 (север)
адрес: 0x5C26DE, значение 0x78D658 (запад)
адрес: 0x5C28BE, значение 0x78D658 (восток)

Теперь можно смело топить город, меняя значение в 0x78D658, если конечно нет дырок, заданных в waterpro.dat

(http://s6.postimg.org/v0vwgujk1/scr_20140913112249777.jpg)
Название: Re: Океан 10000x10000 (Реализовано)
Отправлено: RangeFar от Сентябрь 16, 2014, 06:22:18 pm
Кошмар, классный мод! Сколько же тут всего нового на этом форуме, капец... давненько я не заходил.