Автор Тема: Сцена Главного Меню  (Прочитано 9773 раз)

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Сцена Главного Меню
« : Май 16, 2016, 01:47:59 am »
Бывает - делаешь что-то важное(диплом, например) - а какая-нибудь безумная идея заполняет разум, не давая ничего сделать(прав был Лёнчик). Пару дней назад такой стала для меня идея мини-сценки в главном меню игры, по типу многих современных(и не очень) игр.
Выглядит это примерно так:
! No longer available


Выложил на сайт тестовую версию, там же - сурсы.
В принципе - поскольку делалось это изначально для своей мини-глобалки - я добился желаемого результата, однако идея сделать версию "для всех" стала следующей на очереди безумных идей, а тут возникает несколько проблем(все они прописаны в ридми, но я продублирую с комментариями):
- Меню выбора скина игрока вызывает краш игры. Это происходит потому, что меню использует другой img архив, нежели игра.
Игра подгружает модель игрока до того, как я подменяю img-архив. А после подмены, какие-то оффсеты не совпадают и у игры возникает конфликт на ровном месте. Но тут можно заблочить это меню путем временной переделки кнопки вызова этого меню: чтобы кнопка "Player Skin Setup" вела не в соответствующее меню, а обратно в опции. Но я не знаю нужного адреса памяти.
- "Main Menu Scene" не совместим с плагином "GInput". GInput просто блокирует всё это.
Тут фигня какая-то - не знаю, почему так происходит.
- "Тяжелые" модели коллизии для "Main Menu Scene" вызывают краш при загрузке новой игры. Так что, пожалуйста, не используйте их.
Одна и та же col-модель(даже "тяжелая") может спокойно позволять загружать новую игру снова и снова(простейший пример - та недавняя сборка с каньоном - ссылка в конце сообщения), однако если сунуть таковую в кол меню - новая игра потом не загрузится. Но это мелочь - всё равно в меню желательно использовать максимально простую и "легкую" сцену для быстрой первоначальной загрузки.
Ну, и - на десерт:
- Загрузка сохранений вызывает краш. Это потому, что игра уже "загружена"(для "Main Menu Scene") и новый scm скрипт "Main Menu Scene" не совместим с сохранением. По этой причине, меню загрузки сохранений заблокировано, так что вам придется запускать новую игру, чтобы загрузить сохранение после этого.
Это большая проблема для почти для всех. Не для меня - поскольку в моей мини-глобалке не будет сохранений, но для всех остальных вариант "запускать новую игру, чтобы загрузить сохранение после этого" может оказаться крайне геморройным. Да и мне самому играть в оригинальный Вайс из-за этого становится неудобно.
Это - основная причина создания темы. Можно сделать рандомные сцены, экспериментировать со звуками, пунктами меню и прочими фантазиями, но без решения этой проблемы дальнейшее развитие проекта бесполезно, ибо любые прикольные менюшки не стоят такого геморроя при загрузки сохранений.

Нужно как-то убедить игру, что игра не начата и чтобы при загрузке сохранения игра загружала всё заного, как в случае старта новой игры. Но я понятия не имею, как это сделать(хоть подозреваю, что это возможно).

Есть второй вариант - остановить выполнение scm путем выставления 0x44FEDD на 0(вернуть - 1), и создавать сценки, к примеру, на Lua, НО! Это половина решения, ибо остается аналогичная проблема с картой! Т.е. нужно всё равно найти способ заставить игру перезагрузить всё.
Есть еще вариант - взять предыдущий вариант и просто не использовать новую карту. Но это уныло, и глупо, ибо меню будет загружаться также долго, как и сама игра(скорость загрузки и была изначальной причиной создания своей карты).

Короче - не знаю, что делать... Во вложении дубликат исходника, что идет в комплекте с модом(если кому понадобится глянуть по-быстрому)

P.S. Также - подозреваю, что весь плагин написан через одно место, поэтому буду не против, если кто-нибудь переделает всё основательно. Вообще - это типа "open-source", так что, кто захочет - может сделать и опубликовать новую версию самостоятельно. Надеюсь - в финале мы получим что-то стоящее.
« Последнее редактирование: Май 16, 2016, 01:58:45 am от Shaggy »

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Сцена Главного Меню
« Ответ #1 : Май 27, 2016, 08:02:37 am »
- Меню выбора скина игрока вызывает краш игры. Это происходит потому, что меню использует другой img архив, нежели игра.
Игра подгружает модель игрока до того, как я подменяю img-архив. А после подмены, какие-то оффсеты не совпадают и у игры возникает конфликт на ровном месте.

Может быть эту проблему получится решить не заменой img-архива, а подключением его как дополнительного в gta_vc.dat в самом верху через строку CDIMAGE data\maps\menu\menu.img, туда же перенести содержимое menu.dat.
А вообще для чего выделять второй img, разве в сцене используется карта не из gta3.img?

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

Игра подгружает модель игрока до того, как я подменяю img-архив.
Ты же можешь менять адреса еще до вызова SetTimer(0,0, 0, (TIMERPROC)MainMenuScene), добавь перед ним все, что нужно сразу подменить.
« Последнее редактирование: Май 27, 2016, 08:18:28 am от xanser »

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Сцена Главного Меню
« Ответ #2 : Май 27, 2016, 10:44:27 am »
Игра подгружает модель игрока до того, как я подменяю img-архив.
Ты же можешь менять адреса еще до вызова SetTimer(0,0, 0, (TIMERPROC)MainMenuScene), добавь перед ним все, что нужно сразу подменить.
Действительно(протупил чет): это решит проблему со скином, но всё же главная проблема - с сейвами...

UPD: Ах, да - тут проблема: в этом случае уже в "нормальной" игре выбор скина будет вызывать краш, т.к. в меню выбора скина будет загружаться моделька по старому оффсету из img меню, т.е. - несуществующая в "нормальной" игре моделька.
Но в любом случае, скин - это фигня, нужно решить сейвы, т.е. - полную перезагрузку ресурсов при загрузке сейва, как при начале новой игры.
« Последнее редактирование: Май 27, 2016, 03:40:19 pm от Shaggy »

Оффлайн GeniusZ

  • Призрак
  • Сообщений: 29
  • Репутация: +0/-0
    • Просмотр профиля
Re: Сцена Главного Меню
« Ответ #3 : Ноябрь 12, 2016, 11:00:01 am »
Радар и худ можно было убрать в menu.scm, а не в исходнике плагина

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Сцена Главного Меню
« Ответ #4 : Ноябрь 12, 2016, 10:54:33 pm »
Худ в scm не убирается в Вайсе(стандартными опкодами) - только через память. Поэтому делал сразу через плагин.
Но вообще - это тестовая версия, в сейчас уже всё с этим ок. Вообще - программная часть закончена, сейчас пилю тестовые менюшки, заодно корректирую по-немногу плагин. Скоро выложу финалку.

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичок
  • *****
  • Сообщений: 176
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Сцена Главного Меню
« Ответ #5 : Ноябрь 12, 2016, 11:30:54 pm »
Мы ждем)
I know everything and nothing...

Оффлайн DK

  • Новичок
  • **
  • Сообщений: 234
  • Репутация: +328/-0
    • dk22pac
    • Просмотр профиля
Re: Сцена Главного Меню
« Ответ #6 : Ноябрь 13, 2016, 09:58:58 pm »
Самый оптимальный вариант - отрендерить нужную сцену в камеру и отобразить полученную картинку в меню как бэкграунд.
И не будет никаких проблем с сейвами, худами и прочими вещами.

На написание такого плагина уйдёт день, ещё день на подготовку моделек и тесты.
2 дня получается.
У тебя сколько ушло, Shagg?  :P
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Сцена Главного Меню
« Ответ #7 : Ноябрь 14, 2016, 02:27:20 am »
Самый оптимальный вариант - отрендерить нужную сцену в камеру и отобразить полученную картинку в меню как бэкграунд.
И не будет никаких проблем с сейвами, худами и прочими вещами.

На написание такого плагина уйдёт день, ещё день на подготовку моделек и тесты.
2 дня получается.
У тебя сколько ушло, Shagg?  :P
2 дня :D Ну, первоначальную версию(0.1) придумал и сделал за 2 дня, пусть и с кучей проблем)

Тут один нюанс. Изначально я это сделал для своего мода, а там ни скинов, ни сейвов нет, поэтому вышеописанные проблемы таковыми не являлись и всё работало, как задумано, но...мне вдруг приспичило сделать полноценный инструмент для модмейкеров, чтобы "киданул файлы - и всё заработало". В финалке можно будет "собирать" в каждом меню "мини-гта", т.е. сцены со сложными скриптами и катсценами(скоро покажу примеры). И таких меню можно пихать в спец. папку сколько угодно: каждый раз запускается рандомная. Фактически, получился какой-то модлоадер ;D
Из-за того, что на C++ по-факту начал писать недавно, то всё это дело(базовую) я писал 3 месяца(многие вещи, типа поиска файла по имени, делал впервые), а следующие 3 - устранял косяки, расширял функционал, снова устранял косяки и снова устранял косяки, ибо их было выше крыши. Сейчас вроде всё ок, но по-ходу создания тестовых менюшек, может еще что-то обнаружиться...

Так что в целом я этим занимаюсь 6 месяцев. Чувствую, что больше не полезу писать плагины(слишком затягивает, а мне ведь нужно глобалку свою допилить)..

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Сцена Главного Меню
« Ответ #8 : Ноябрь 14, 2016, 04:21:36 am »
Самый оптимальный вариант - отрендерить нужную сцену в камеру и отобразить полученную картинку в меню как бэкграунд
DK, можно подробнее описать, что имеется ввиду, последовательность сохраненных кадров-картинок или типа видео в бэкграунде, или камера может хранить какую-то память сцены и воспроизводить, не очень понятно...

Оффлайн DK

  • Новичок
  • **
  • Сообщений: 234
  • Репутация: +328/-0
    • dk22pac
    • Просмотр профиля
Re: Сцена Главного Меню
« Ответ #9 : Ноябрь 14, 2016, 08:47:30 pm »
Камера хранит изображение сцены, которую ты в неё рендеришь.
Надо создать отдельную камеру, рендерить в неё нужные обьекты, и выводить полученное изображение с камеры как спрайт.

По такому принципу работают зеркала в gta sa, только там текстура с камеры цепляется на 3д-плоскость.

Я уже набросал кое-какой код (рабочий), нужно только с моделями решить вопрос.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Сцена Главного Меню
« Ответ #10 : Ноябрь 14, 2016, 10:59:45 pm »
Я был бы только "за" нормально написанный плагин, но всё же закончу работу, чтобы не пропадало добро. Только из-за отсутствия аналогов я начал работу над этим.
Единственный, как мне кажется, минус варианта, предложенного DK - это бОльшая сложность создания самих сцен для рядового модмейкера...

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Сцена Главного Меню
« Ответ #11 : Ноябрь 15, 2016, 04:13:30 am »
DK, немного уже не по теме, но хотелоь бы побольше узнать о таких возможностях камеры, я именно с этим прицелом и поднял вопрос, хорошо бы создать отдельную тему. К примеру интересно, камера хранит только изображение, которое видит пользователь, или можно рендерить любое направление, например задние зеркала получается нужно рендерить где-то в фоновом режиме, пока основная камера показывает изображение впереди. У меня почти получилось создать зеркало заднего вида как элемент HUDа, но как передать туда другую камеру, я не разобрался. Ты еще рассказывал про тень из mvl, что она тоже получена с отдельной камеры, вообще широкие возможности открываются...

Оффлайн GeniusZ

  • Призрак
  • Сообщений: 29
  • Репутация: +0/-0
    • Просмотр профиля
Re: Сцена Главного Меню
« Ответ #12 : Ноябрь 15, 2016, 08:18:20 pm »
А возможно ли реализовать рендер с нескольких камер на один экран? (теоритически)

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Сцена Главного Меню
« Ответ #13 : Ноябрь 18, 2016, 12:43:16 am »
Цитировать
А возможно ли реализовать рендер с нескольких камер на один экран? (теоритически)
Теоретически и практически да, но возиться придется над этим не мало. Однако, нужно же еще захватывать педов/транспорт, а не просто карту. Если быть точным, то на один экран имеется введу, где-то еще была бы область для вывода изображения из второй камеры, ну это в обычный вертекс рендерится как из вариантов.

Оффлайн DK

  • Новичок
  • **
  • Сообщений: 234
  • Репутация: +328/-0
    • dk22pac
    • Просмотр профиля
Re: Сцена Главного Меню
« Ответ #14 : Ноябрь 19, 2016, 01:23:30 pm »
DK, немного уже не по теме, но хотелоь бы побольше узнать о таких возможностях камеры, я именно с этим прицелом и поднял вопрос, хорошо бы создать отдельную тему. К примеру интересно, камера хранит только изображение, которое видит пользователь, или можно рендерить любое направление, например задние зеркала получается нужно рендерить где-то в фоновом режиме, пока основная камера показывает изображение впереди. У меня почти получилось создать зеркало заднего вида как элемент HUDа, но как передать туда другую камеру, я не разобрался. Ты еще рассказывал про тень из mvl, что она тоже получена с отдельной камеры, вообще широкие возможности открываются...
Новая камера не будет свзяана с основной.
Для зеркала, надо будет развернуть камеру в противоположную сторону, относительно автомобиля.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv