[RenderEdge] Основная версия

» опубликован

Актуальная версия v0.2.7a

Особенности

  1. Система отрисовки пользовательского интерфейса:
    • (+) Основная система;
    • (+) Управление при помощи Jass функций;
    • (+) Поддержка многострочного текста с форматированием;
    • (+) Поддержка .ttf формата шрифтов;
  1. Постобработка:
    • (-) HDR Rendering;
    • (-) Пост-эффекты;
    • (-) Управление при помощи Jass функций;
  1. Улучшенное освещение:
    • (-) Попиксельное освещение;
    • (-) Поддержка .dds/.blp2 формата текстур для .mdx/.mdl моделей;
    • (-) Поддержка пользовательских шейдеров;
    • (-) Генерация кубических карт окружения;
    • (-) Shadow Mapping;
    • (-) Поддержка карт нормалей;
  1. Совместимость:
    • (+) Поддержка Direct3D8;
    • (+) Поддержка Direct3D9;
    • (+) Поддержка широкоформатных мониторов;
  1. Прочее:
    • (+) Уменьшение задержки между приказами в игре;
    • (+) Запуск более одного экземпляра war3.exe одновременно.

Скриншоты

Custom Natives

» Дополнительные константы
// TriggerRegisterMouseEvent & TriggerRegisterKeyEvent
constant integer MB_Left = 0
constant integer MB_Middle = 1
constant integer MB_Right = 2
constant integer MB_X1 = 3
constant integer MB_X2 = 4
constant integer KEY_Any = -1
constant integer EVENT_Down = 0
constant integer EVENT_Up = 1

// CtrlSetAnchor & SetPortrait
constant integer ANCHOR_TOPLEFT = 0
constant integer ANCHOR_TOP = 1
constant integer ANCHOR_TOPRIGHT = 2
constant integer ANCHOR_LEFT = 3
constant integer ANCHOR_CENTER = 4
constant integer ANCHOR_RIGHT = 5
constant integer ANCHOR_BOTTOMLEFT = 6
constant integer ANCHOR_BOTTOM = 7
constant integer ANCHOR_BOTTOMRIGHT = 8
» Mouse API
native int GetMouseX() // Возвращает положение курсора в экранных координатах
native int GetMouseY()
native int GetMouseXRelative()
native int GetMouseYRelative()
native float GetMouseTerrainX() // Возвращает проекцию позиции курсора на ландшафт
native float GetMouseTerrainY()
native float GetMouseTerrainZ()
native bool IsMouseOverUI() // Находится ли курсор над стандартным интерфейсом или нет?
native void BlockMouse(bool bBlock) // Блокирует входные сообщения от мыши (перемещение, нажатия), передаваемые в игру
native int GetWheelDelta() // Возвращает направление/скорость вращения колёсика мыши (положительное значение указывает на то, что колесо вращается вперед)
native void SetMousePos(int x, int y) // Устанавливает положение курсора
native void TriggerRegisterMouseWheelEvent(trigger trig) // Триггер срабатывает при прокрутки колёсика мыши
native void TriggerRegisterMouseMoveEvent(trigger trig) // Триггер срабатывает при перемещении курсора
native void TriggerRegisterMouseEvent(trigger trig, int iButton, int state) // Триггер срабатывает при нажатии (state == 0) / отпуске (state == 1) кнопки iButton (поставьте iButton == -1, чтобы отлавливать все кнопки мыши)
» Keyboard API
native int GetTriggerKey() // Возвращает последнюю нажатую клавишу
native bool IsKeyDown(int iKey) // Нажата ли клавиша?
native void TriggerRegisterKeyEvent(trigger trig, int iKey, int state) // Триггер срабатывает при нажатии (state == 0) / отпуске (state == 1) клавиши iKey (поставьте iKey == -1, чтобы отлавливать любые клавиши)
» Window API
native int GetWindowWidth() // Возвращает ширину экрана в полноэкранном режиме, либо ширину окна в оконном
native int GetWindowHeight()
native int GetWindowX() // Возвращает координаты окна
native int GetWindowY()
native void TriggerRegisterWindowResizeEvent(trigger trig) // Триггер срабатывает при изменении размера окна
» GUI API
native void CtrlNew(int id, int offsetX, int offsetY, int width, int height) // Создаёт новый экземпляр элемента GUI (id >= 0)
native void CtrlSetText(int id, string text, bool bWrap) // bWrap: если текст заходит за пределы ширины, заданной при создании элемента GUI, то происходит переход на новую строку
native void CtrlSetColor(int id, int argb) // Красит элемент GUI в заданный цвет
native void CtrlSetAnchor(int id, int parentId, int anchor) // Выравнивание элемента. Установите parentId = -1, чтобы выравнивание шло относительно всего окна
native void CtrlSetTexture(int id, string filename) // Устанавливает текстуру элемента
native void CtrlSetSize(int id, int width, int height) // Устанавливает размер элемента. Функция не изменяет ширину или высоту, если установить соответствующий аргумент равным -1;
native void CtrlSetPosition(int id, int offsetX, int offsetY) // Устанавливает позицию элемента
native void CtrlShow(int id, bool isShow) // Показывает (true) / скрывает (false) элемент GUI
native void CtrlSetDepth(int id, float fDepth) // Определяет порядок поиска элементов GUI функцией CtrlGetFromMousePoint. Чем значение fDepth меньше, тем элемент расположен ближе к экрану (1.0 по умолчанию)
native void CtrlSetAngle(int id, float fAngle) // Устанавливает угол поворота элемента GUI (в радианах)
native int CtrlGetWidth(int id)
native int CtrlGetHeight(int id) // Используется, чтобы узнать высоту элемента GUI после применения функции CtrlSetText с аргументом "bWrap" == true
native int CtrlGetFromPoint(int x, int y) // Возвращает элемент, расположенный по заданным координатам (если такого нет, возвращает -1)
native bool CtrlIsText(int id) // Является ли элемент GUI текстом?
native void CtrlSetFont(int id, string fontName, int size) // Устанавливает шрифт для указанного элемента GUI (по умолчанию используется "Consolas" с размером 13)
native void GUILoadFont(string fileName) // Загружает шрифт по указанному пути в память
» Misc API
native float GetFPS() // Возвращает количество кадров в секунду
native float GetDeltaTime() // Возвращает количество времени, затрачиваемое на отрисовку одного кадра (в секундах)
native int COLOR_ARGB(int a, int r, int g, int b) // Переводит цвет из ARGB формата в шестнадцатеричное значение
native void EnableVsync(bool bEnable) // Включает/выключает вертикальную синхронизацию
native void TriggerRegisterFrameUpdateEvent(trigger trig) // Триггер срабатывает каждый кадр
native bool IsGamePaused() // Находится ли игра на паузе?
native void SetBlackBorders(float upper, float bottom) // Изменяет расположение чёрных границ по оси y (значения находятся в промежутке от 0.0 до 0.6). Значения по умолчанию - upper = -0.02, bottom = 0.13.
native void SetPortrait(int anchor, int x, int y, int width, int height) // Устанавливает расположение и ширину портрета в пикселях. Выравнивание идёт относительно всего окна.
» Lighting API
N/A
» Post-processing API
N/A

Установка


Требования:

  • Архив можно извлечь в любое место;
  • При первом запуске нужно указать расположение war3.exe;
  • Индикатором того, что мод был успешно запущен, является надпись "RenderEdge" с текущей версией мода в левом верхнем углу экрана;
  • Для запуска в режиме отладки измените значение параметра "Debug" на "1" (HKEY_CURRENT_USER\SOFTWARE\RenderEdge);
  • Для подключения RenderEdge к Jass New Gen Pack (exp. 2) скачайте и замените файл wehack.lua в папке с JNGP (заменяет вкладку с RtC). Либо отредактируйте его самостоятельно:
» wehack.lua
Пример того, как выглядит wehack.lua после редактирования
-- # begin RenderEdge #
RenderEdgePath = grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "InstallPath")
haveRenderEdge = grim.exists(RenderEdgePath .. "\\RenderEdge.exe")

function toggleRenderEdgeDebug(checked)
    if checked then
		grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug", 1)
	else
		grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug", 0)
	end
end

function toggleRenderEdgeAllowLocalFiles(checked)
    if checked then
		grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "AllowLocalFiles", 1)
	else
		grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "AllowLocalFiles", 0)
	end
end

if haveRenderEdge then
	RenderEdgeMenu = wehack.addmenu("RenderEdge")
	
	RenderEdgeEnabled = TogMenuEntry:New(RenderEdgeMenu, "Run with RenderEdge", nil, true)
	
	RenderEdgeDebug = TogMenuEntry:New(RenderEdgeMenu, "Debug Mode", 
	    function(self) toggleRenderEdgeDebug(self.checked) end, false)
	if grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug") == 1 then
		wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeDebug, 1)
	else
		wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeDebug, 0)
	end
	
	RenderEdgeAllowLocalFiles = TogMenuEntry:New(RenderEdgeMenu, "Allow Local Files", 
	    function(self) toggleRenderEdgeAllowLocalFiles(self.checked) end, false)
	if grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "AllowLocalFiles") == 1 then
		wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeAllowLocalFiles, 1)
	else
		wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeAllowLocalFiles, 0)
	end
end
-- # end RenderEdge #

function testmap(cmdline)
	if haveRenderEdge and RenderEdgeEnabled.checked then
		local pos = string.find(cmdline, ".exe")
		cmdline = string.sub(cmdline, 5 + pos)
		cmdline = RenderEdgePath .. "RenderEdge.exe " .. cmdline
	end
	
	if wh_opengl.checked then
		cmdline = cmdline .. " -opengl"
	end
	if wh_window.checked then
		cmdline = cmdline .. " -window"
	end
	wehack.execprocess(cmdline)
end

Примеры

Карта написана на vJass и содержит демонстрацию использования всех функций RenderEdge. Карта обновляется каждый раз, при выпуске новой версии RenderEdge.
Особенности карты:
  • Система пользовательского интерфейса (виджеты: Label, Button, Dragbox, Checkbox, Horizontal Slider);
  • Редактирование стандартного интерфейса;
  • Система управления камерой.

Список изменений

v0.2.7a
  * Обновлён RenderStage Controller (улучшен перехват отрисовки стандартного интерфейса);
  * Исправлены баги в JassAPI (некорректная конвертация real <=> float);
  * Исправлены баги в функциях CtrlSetDepth и CtrlSetAngle;
  * Исправлены слайдеры и чекбоксы в карте-примере;
  * Добавлены описания .exe и .dll файлов.

v0.2.6a
  * Убран лимит на размер 512p в .blp тексурах (спасибо Karaulov`у);
  * Добавлена новая native функция CtrlSetZOrder (порядок отрисовки элементов интерфейса);
  * Добавлена новая native функция EnableAnisoFiltering (возможность установить анизотропную фильтрацию текстур);
  * Добавлена новая native функция HideInterface;
  * Добавлены новые native функции: EditMinimap, EditCommandBarButton, EditHeroBarButton, EditItemBarButton, EditMinimapButton и EditUpperButtonBarButton;
  * Изменено название функций SetPortrait и SetBlackBorders на EditPortrait и EditBlackBorders;
  * Исправлено большое количество багов в RenderEdge_loader.dll и RenderEdge.exe;
  * Исправлен некорректный перенос строки при использовании символа "|n" во wrapped тексте;
  * Исправлено большое количество багов в GUI-системе (например, баг с функцией CtrlSetTexture при перезапуске карты);
  * Оптимизирована GUI-система. Некоторые функции переписаны с нуля;
  * Оптимизированы менеджеры шрифтов и текстур;
  * Обновлены detours.lib и libjpeg.lib до последней версии;
  * Улучшен и оптимизирован debug log.

v0.2.5a
  * Добавлена новая native функция GUILoadFont;
  * Добавлена новая native функция CtrlSetFont;
  * Удалена функция GUISetFont;
  * Исправлены вылеты при установке некоторых шрифтов (например, "Times New Roman");
  * Исправлена высота однострочного текста;

v0.2.4a
  * Добавлена новая native функция SetPortrait;
  * Функция CtrlSetSize теперь не изменяет ширину или высоту, если вы установите соответствующий аргумент равным -1;
  * Изменено имя функции CtrlSetAlignment на CtrlSetAnchor;
  * Изменён способ исправления ширины полосок здоровья;
  * Исправлено выравнивание динамических элементов по отношению к другим элементам пользовательского интерфейса;
  * Исправлена высота wrapped текста;
  * Исправлена высота wrapped текста при динамическом изменении ширины;
  * Исправлены проблемы с безопасностью. Если жирный, курсивный или полужирный курсивный шрифт недоступен, используется обычный шрифт.

v0.2.3b
  * Исправлено выравнивание относительно других элементов интерфейса.

v0.2.3a
  * Добавлена новая native функция CtrlSetSize;
  * добавлена новая native функция CtrlSetAlignment;
  * Функции CtrlSetPosition и CtrlNew теперь принимают offsetX и offsetY вместо x и y;
  * Удалена функция CtrlSetRect.

v0.2.2a
  * Добавлена новая native функция IsGamePaused;
  * Добавлена новая native функция SetBlackBorders;
  * Обновлен Jass API, исправлены некоторые баги связанные с пользовательскими нативными функциями;
  * Исправлены нативные функции, которые принимают аргументы тира boolean;
  * Исправлено повторное добавление триггеров функциями TriggerRegister#Event после перезапуска карты;
  * Функция EnableVsync теперь работает без необходимости сворачивать игру;
  * Исправлена ошибка, при которой новые элементы GUI не имели зеленой текстуры по умолчанию;
  * Улучшен debug log. Лог файл очищается, если размер превышает 100 КБ.

v0.2.1b
  * Исправлены вылеты при вызове функций CtrlSetText, CtrlSetTexture и GUISetFont (проблема с конвертацией UTF-8 в ASCII);
  * Удалено нестабильное нововведение из предыдущей версии: "Убрано стандартное ограничение минимальной дистанции камеры до цели";
  * Обновлён FreeType до версии 2.8;
  * Обновлён RenderEdge_loader.dll. Теперь он ищет RenderEdge_exp.dll, если не нашёл, то запускает RenderEdge.dll;
  * Добавлен счётчик памяти, используемой варкрафтом;
  * Оптимизация GUI системы;
  * Оптимизация Widescreen fix;
  * Оптимизация debug log. Система отладки переписана с нуля.

v0.2.1a
  * Обновлён Widescreen Fix. Вертикальный угол обзора больше не зависит от ширины экрана;
  * Снято ограничение на максимальный FPS, теперь он может подниматься выше 64 с выключенным vsync (спасибо Karaulov'у);
  * Убрано стандартное ограничение минимальной дистанции камеры до цели (было 100.0, теперь можно установить до 0.01);
  * Использование более точного формата буфера глубины, если поддерживается. Используйте SetCameraField(ConvertCameraField(7), value, time), чтобы изменить ближнюю плоскость отсечения камеры (100.0 по умолчанию);
  * Добавлена новая native функция TriggerRegisterFrameUpdateEvent. Триггер срабатывает каждый кадр (задержка меньше 0.001 секунд);
  * Добавлена новая native функция EnableVsync (включено по умолчанию);
  * Добавлены новые native функции GetWindowX и GetWindowY;
  * Добавлены новые native функции GetMouseXRelative и GetMouseYRelative;
  * Функции GetMouseX и GetMouseY теперь возвращают координаты без отсечения границами окна;
  * Изменено название функции FPS на GetFPS;
  * Изменено название функции DeltaTime на GetDeltaTime;
  * Функция GetDeltaTime теперь возвращает секунды вместо миллисекунд;
  * Улучшен debug log. Лог файл очищается при превышении размера в 1 MB.

v0.2.0a
  * Поддержка Direct3D9;
  * Блокировка функции CtrlGetFromPoint, если игра на паузе;
  * Показ GUI только после загрузки карты;
  * Исправлен баг, связанный с тем, что ширина и высота текстур были перепутаны;
  * Исправлен слишком большой угол обзора при использовании Widescreen Fix;
  * Исправлена проблема, связанная с тем, что невозможно было запустить приложение с первой попытки;
  * Обновлён FreeType до версии 2.7;
  * Запуск более одного экземпляра war3.exe одновременно;
  * Оптимизация RenderEdge.dll;
  * Исправлены проблемы безопасности;
  * Обновлено лого проекта, и добавлен значок приложения;
  * Улучшен debug log;

v0.1.0a
  * Реализована поддержка широкоформатных мониторов;
  * Реализовано корректное получение информации из jass строки (поддержка всех языков, а не только английского);
  * Добавлена поддержка TTF шрифтов, используя FreeType (https://www.freetype.org/);
  * Добавлена поддержка многострочного текста и форматирования ("|n" (на новую строку), "|cAARRGGBB" (изменить цвет), "|b" (полужирный шрифт), "|i" (наклонный шрифт), "|r" (сброс к стандартному цвету текста и обычному шрифту));
  * Уменьшена задержка отдачи приказов юнитам в одиночной игре;
  * Исправлена проблема, связанная с невозможностью запустить RenderEdge после переустановки Warcraft по другому пути;
  * Изменено название функции CtrlCreateInstance на CtrlNew;
  * Изменена функция CtrlSetText(int id, bool autoResize, string text) на CtrlSetText(int id, string text, bool bWrap);
  * Изменена функция CtrlGetFromMousePoint() на CtrlGetFromPoint(int x, int y);
  * Добавлена новая native функция GUISetFont;
  * Добавлена новая native функция CtrlIsText;
  * Функция IsMouseOverUI теперь работает корректно;
  * Удалена функция CtrlSetSolidColor, вместо этого используйте белую текстуру ("Textures\\white.blp") и функцию CtrlSetColor(int argb);
  * Добавлен логотип проекта;
  * Уменьшен размер RenderEdge.mpq;
  * Улучшен debug log.

v0.0.3a
  * Реализовано чтение настроек из реестра;
  * Добавлены функции CtrlGetHeight и CtrlGetWidth для получения ширины элемента GUI после применения функции CtrlSetText с аргументом "autoResize" == true;
  * Исправлено растягивание полосок здоровья на широкоформатных экранах;
  * Отключена функция EnableDebug, теперь включение режима отладки осуществляется из редактора реестра;
  * Улучшена совместимость с JNGP;
  * Улучшен debug log.

v0.0.2b
  * Исправлена проблема, при которой не получалось запустить мод с первого раза;
  * Улучшен debug log.

v0.0.2a
  * Исправлена ошибка с загрузкой RenderEdge.mpq, теперь мод можно без проблем размещать в любой папке;
  * Исправлен баг в функции CtrlSetText, при котором все элементы GUI, использующие текстуру шрифта, имели одинаковый текст;
  * Изменена функция CtrlSetText - убран аргумент "argb", отвечающий за цвет создаваемого текста, вместо этого используйте функцию CtrlSetColor (текст по умолчанию белый);
  * Изменена функция CtrlSetDepth - тип аргумента "depth" изменён на real;
  * Добавлена новая native функция CtrlSetAngle;
  * Удалена функция CtrlSetCallback.

v0.0.1a
  * Первая стабильная версия.


Просмотров: 20 964



» Лучшие комментарии


mishanka122 #151 - 1 год назад 2
ENAleksey, Тоже могу подоброволить.
DemonoiD #152 - 1 год назад (отредактировано ) 4
А кто-нибудь случаем не видел микс-архива (года так 2014), когда пытались в war3 перекинуть переделанные модельки wow'a? Им вроде как раз рендера и освещения не хватало, поэтому они ушли в sc2. Тут графон, судя по скринам, стал как в mount and blade. И это для чертовой стратегии 2001 года.
С появлением шейдеров, нормального освещения и теней в этой модификации, можно переродить не только war3, но и небо и даже Аллаха.
Tumart #153 - 1 год назад 4
ENAleksey, вот такой вопрос. Могли бы вы сделать отдельную версию с минимальным набором функционала на основе РБ и инжекта в саму карту, чтобы все работало без дополнительных ресурсов? Расчет для обычных карт, чтобы можно было выполнять такие действия как полностью скрыть интерфейс/отображение стандартных текстов типа Меню, Атака и прочее(также блокировка подобных кнопок), отрисовка нестандартного интерфейса/текста, отлов событий клавиатуры/мыши, получение координат курсора/текущего разрешения и т.д. Был бы очень признателен(думаю не я один).
Lotus101 #154 - 1 год назад 0
Тоже не прочь протестировать, пк немого выше средней мощности.
DemonoiD:
А кто-нибудь случаем не видел микс-архива (года так 2014), когда пытались в war3 перекинуть переделанные модельки wow'a? Им вроде как раз рендера и освещения не хватало, поэтому они ушли в sc2. Тут графон, судя по скринам, стал как в mount and blade. И это для чертовой стратегии 2001 года.
С появлением шейдеров, нормального освещения и теней в этой модификации, можно переродить не только war3, но и небо и даже Аллаха.
Не знаю про микс патч, но тебе может это понравится
прикреплены файлы
DemonoiD #155 - 1 год назад (отредактировано ) 2
Lotus101, микс-архив! Это просто архив с моделями и иконками, которые заменяют стандартные модели и иконки во всех картах war3. Фактически, полностью меняют графику.
Ну вот и опять же, твой скрин. Были бы тени, немного "мыльца" и нормальное небо, я бы не узнал в нем war3. А прикинь, как божественно все это бы смотрелось с видом сверху?
Alexander12 #156 - 1 год назад 4
Tumart:
ENAleksey, вот такой вопрос. Могли бы вы сделать отдельную версию с минимальным набором функционала на основе РБ и инжекта в саму карту, чтобы все работало без дополнительных ресурсов? Расчет для обычных карт, чтобы можно было выполнять такие действия как полностью скрыть интерфейс/отображение стандартных текстов типа Меню, Атака и прочее(также блокировка подобных кнопок), отрисовка нестандартного интерфейса/текста, отлов событий клавиатуры/мыши, получение координат курсора/текущего разрешения и т.д. Был бы очень признателен(думаю не я один).
Если кто-то убедлит рубатл вернуться на 1.26, либо большенство картостроителей останутся на 1.26, то займусь данным вопросом.
ENAleksey #157 - 1 год назад (отредактировано ) 15
Были бы тени, немного "мыльца" и нормальное небо, я бы не узнал в нем war3
Так? :)
Сглаживание плохо работает с хроматическими аберрациями, вот скриншоты без них:
А вот туман:
Могли бы вы сделать отдельную версию с минимальным набором функционала на основе РБ и инжекта в саму карту, чтобы все работало без дополнительных ресурсов?
Можно сделать, но только без графических фишек, в том числе без отрисовки нового интерфейса, так как хук на direct3d нужно ставить при инициализации игры, а с помощью РБ библиотеку можно подгрузить только при инициализации карты. Я уже выкладывал карту на РБ, которая внедряла мою библиотеку с widescreen fix'ом:
» раскрыть
awesomesk1ll, да, здесь нет ничего сложного, для начала экспортируем dll из карты, а потом загружаем её с помощью LoadLibraryA. Сейчас скину карту с загрузкой моей библиотеки, в которой реализован Widescreen Fix.

Скачать (поддерживаются версии 1.26a и 1.27а).
Правда, я сделал инициализацию библиотеки с помощью вызова экспортируемой функции из dll, чтобы передать в неё версию варкрафта, но это можно делать и внутри библиотеки: вызывать только LoadLibraryA, а всё остальное делать в теле функции DllMain.
прикреплены файлы
Это сообщение удалено
Karp #159 - 1 год назад 3
DemonoiD #160 - 1 год назад (отредактировано ) 0
ENAleksey, ты главное скажи, что все это отрисовывается в реальном времени и тратит очень мало ресурсов. А так же может легко поставится поверх war3 без нарушения "лицензии" в виде замены библиотеки или чего-то подобного.
Скриншоты - это конечно хорошо, но я могу модельками так же сделать ;)
Поверх war3 для всех карт*
Tiodor #161 - 1 год назад 2
фпс: 6, не очень вдохновляет)
DemonoiD:
Скриншоты - это конечно хорошо, но я могу модельками так же сделать ;)
хотел бы я глянуть как можно так просто моделькиами сделать)
Tumart #162 - 1 год назад (отредактировано ) 0
ENAleksey, жаль конечно. Без отрисовки пользовательского интерфейса это теряет смысл, по крайней мере для меня (
ELB359 #163 - 1 год назад (отредактировано ) 0
Это все здорово, однако, больше жду расширения именно скриптовой части - все эти новые нативки. Кстати, я так и не получил ответа, как понять, какой игрок нажал на клавишу?
DemonoiD #164 - 1 год назад (отредактировано ) 0
Tiodor, берешь модельки тени и вставляешь, без задней мысли, выкладывая из них любую тень.
Туман? Изменение цвета тумана войны тоже возможно. Будет выглядеть примерно так же.
Единственное чего не было - это мыльца. Ибо war3 для хардкорных геймеров, а не консольщиков.
Но и это можно обойти, если использовать качественные модели и правильный ракурс.
ENAleksey #165 - 1 год назад (отредактировано ) 3
хотел бы я глянуть как можно так просто моделькиами сделать)
Команда Warcraft 3 Reborn так и делала:
как понять, какой игрок нажал на клавишу?
Данные, возвращаемые функциями GetTriggerKey, TriggerRegisterKeyEvent, будут действовать для каждого игрока по отдельности. С их помощью не получится узнать, какую кнопку нажал другой игрок, но можно отправлять данные на сервер или просто синхронизировать, например, с помощью юнитов (при нажатии клавиши создаём юнита с рав-кодом, зависящим от нажатой клавиши). Если вы имели ввиду, как сделать так, чтобы функции срабатывали только у определённого игрока, то просто сравниваем с GetLocalPlayer().
прикреплены файлы
DemonoiD #166 - 1 год назад 0
ENAleksey, мы можем найти все модельки этой команды и запилить за пару дней обновленный war3 с твоими функциями теней и мыльца с помощью одного mpq и библиотеки? Я готов написать всем в мире обзорщикам, чтобы они пропиарили xgm и постримили такой war.
ENAleksey #167 - 1 год назад (отредактировано ) 0
DemonoiD, нет, это их проект, для начала нужно спросить разрешение у них самих. Они работают над своей версией библиотеки и я им иногда помогаю. Как только я закончу работу над RenderEdge, выложу исходники в открытый доступ, кто захочет, сможет модифицировать код и использовать у себя в проектах.
DemonoiD #168 - 1 год назад 0
ENAleksey, они вроде перешли над sc2. А я хочу обновленный war3 :(
darkowlom #169 - 1 год назад 3
DemonoiD, мы будем выпускать мод и на старкрафт и на варкрафт, в соответствующей последовательности
DemonoiD #170 - 1 год назад 3
darkowlom, тогда я счастлив и спокоен. Делайте уже быстрее. Прошло почти 4 года. Я не хочу умереть раньше, чем увижу новое солнце Лордерона. Говорят, на небесах, все только о нем и говорят. Не хочу выглядеть дураком
Lotus101 #171 - 1 год назад 0
Alexander12:
Если кто-то убедлит рубатл вернуться на 1.26, либо большенство картостроителей останутся на 1.26, то займусь данным вопросом.
А чем 1.27б плох? Официальные сервера и рубатл на нем сидят.
Alexander12 #172 - 1 год назад (отредактировано ) 2
чем 1.27б плох? Официальные сервера и рубатл на нем сидят.
там нет доступ на запись в память, поэтому можно сделать на 1.26.. да народ с рубатла уходят уже из за патча. за 1.26 - будующее.
ENAleksey, а что с фпсом?
Lotus101 #173 - 1 год назад 0
Alexander12:
чем 1.27б плох? Официальные сервера и рубатл на нем сидят.
там нет доступ на запись в память, поэтому можно сделать на 1.26.. да народ с рубатла уходят уже из за патча. за 1.26 - будующее.
Может близзарды заметят ваш мод и оптимизируют будущие патчи под него, учитывая что они потихоньку стали выпускать патчи
Alexander12 #174 - 1 год назад 0
Lotus101:
Alexander12:
чем 1.27б плох? Официальные сервера и рубатл на нем сидят.
там нет доступ на запись в память, поэтому можно сделать на 1.26.. да народ с рубатла уходят уже из за патча. за 1.26 - будующее.
Может близзарды заметят ваш мод и оптимизируют будущие патчи под него, учитывая что они потихоньку стали выпускать патчи
Зачем ? на 1.27b + ничего не перенесешь, в том числе и отрисовку интерфейса, без внешних прог. и на 1.26 можно сделать больше, чем близард
ENAleksey #175 - 1 год назад 11
Я всё-таки решил выложить текущую версию, она ещё находится в разработке, поэтому многие функции из экспериментальной версии ещё не перенесены (вообще никакие). Но в то же время она более стабильная, чем предыдущая.
Скачать (карта-пример внутри).
Список изменений (v0.2.0dev):
  • (+) Поддержка Direct3D9;
  • (+) Блокировка функции CtrlGetFromPoint, если игра на паузе;
  • (+) Показ GUI только после загрузки карты;
  • (+) Исправлен баг, связанный с тем, что ширина и высота текстур были перепутаны;
  • (+) Исправлен слишком большой угол обзора при использовании Widescreen Fix;
  • (+) Исправлена проблема, связанная с тем, что невозможно было запустить приложение с первой попытки;
  • (+) Обновлён FreeType до версии 2.7;
  • (+) Запуск более одного экземпляра war3.exe одновременно;
  • (+) Оптимизация RenderEdge.dll;
  • (+) Исправлены проблемы безопасности;
  • (+) Обновлено лого проекта, и добавлен значок приложения;
  • (+) Улучшен debug log;
  • (-) Исправлены вылеты игры при загрузке карты;
  • (-) Поддержка ВарКрафта версии 1.27a (1.27b?);
  • (-) Поддержка Windows XP (нужно ли?);
  • (-) HDR Rendering;
  • (-) Post Process Effects;
  • (-) ShaderSetInt/Float/Bool/Texture;
  • (-) Анизотропная фильтрация текстур;
  • (-) SetLightDirection/Diffuse/Ambient.
прикреплены файлы
EfReeZe #176 - 1 год назад 0
ENAleksey, я думал, такой угол обзора и был задуман :'(
ENAleksey #177 - 1 год назад (отредактировано ) 0
EfReeZe, я его исправил, но не сильно) Я просто попытался подогнать значения так, чтобы по вертикали поле зрения было таким же, как и без фикса.
Кристофер #178 - 1 год назад 0
ENAleksey, при нажатии на галочки "Attach unit" и "Show text" вылезает фатал. В остальном всё отлично. :)
ENAleksey #179 - 1 год назад (отредактировано ) 0
Кристофер, попробуй запустить игру в debug режиме, после этого повтори то, что привело к вылету, и скинь мне файл RenderEdge.log в личку.
DemonoiD #180 - 1 год назад 2
ENAleksey, xpшка ещё вполне жива, особенно в деревнях. Так что поддержку хотелось бы, но в последний момент.
Lotus101 #181 - 1 год назад 0
Огромное спасибо авторам за новую версию, вращение и приближение камеры при зажатом ctrl, и самое главное за возможность запускать сразу несколько копий варкрафта, такую фичу долго искал, но нигде больше нету. Теперь можно тестировать карты одному) Просьба к вам, в дальнейшем добавить возможность включения мода в самом варкрафте, без запуска вашего приложения, хочется поиграть с исправленным соотношением по сети, но айкап, гарена и рубатл запускаются только через стандартный war3.exe
ENAleksey #182 - 1 год назад 0
Lotus101, привет, я уже скидывал версию на основе Memory Hack с Widescreen Fix:
xgm.guru/p/renderedge/basic?postid=340425#comment157 (в конце комментария)
Скорее всего не будет работать по сети, но зато не надо запускать игру через сторонний лончер.
Кристофер #183 - 1 год назад 0
ENAleksey, т.е., вращение камеры невозможно будет использовать в мультиплеерных картах?
ENAleksey #184 - 1 год назад (отредактировано ) 9

Обновление 0.2.1a

Скачать (карта-пример внутри)
  • Обновлён Widescreen Fix. Вертикальный угол обзора больше не зависит от ширины экрана;
  • Снято ограничение на максимальный FPS, теперь он может подниматься выше 64 с выключенным vsync (спасибо Karaulov'у);
  • Убрано стандартное ограничение минимальной дистанции камеры до цели (было 100.0, теперь можно установить до 0.01);
  • Использование более точного формата буфера глубины, если поддерживается. Используйте SetCameraField(ConvertCameraField(7), value, time), чтобы изменить ближнюю плоскость отсечения камеры (100.0 по умолчанию);
  • Добавлена новая native функция TriggerRegisterFrameUpdateEvent. Триггер срабатывает каждый кадр (задержка меньше 0.001 секунды);
  • Добавлена новая native функция EnableVsync (включено по умолчанию);
  • Добавлены новые native функции GetWindowX и GetWindowY;
  • Добавлены новые native функции GetMouseXRelative и GetMouseYRelative;
  • Функции GetMouseX и GetMouseY теперь возвращают координаты без отсечения границами окна;
  • Изменено название функции FPS на GetFPS;
  • Изменено название функции DeltaTime на GetDeltaTime;
  • Функция GetDeltaTime теперь возвращает секунды вместо миллисекунд;
  • Улучшен debug log. Лог файл очищается при превышении размера в 1 MB.
прикреплены файлы
Tiodor #185 - 1 год назад 0
ENAleksey, может лучше свой движок делать?)
awesomesk1ll #186 - 1 год назад 2
На айкапе можно как то запустить это дело? интересует анлимит фпс и графон посимпотичнее :) (освещение и другие плюшки)
NCrashed #187 - 1 год назад 6
ENAleksey, только недавно ознакомился с проектом. Это потрясающий результат, движок визуально теперь выглядит на современном уровне. И очень рад, что варкрафт сообщество ещё не померло.
PK_demon #188 - 11 месяцев назад 0
Прочитал вроде все хорошо, но так и не понял - а для какого патча?
А то у меня крашит игра при изменение/включении некоторых функций в карте-примере.
Стоит 1.26 патч, могу только галочку с показать/скрыть текст жмакать.
Остальные две - фатал.
DemonoiD #189 - 11 месяцев назад 6
5 месяцев назад я написал, что графон стал как в mount and blade. Недавно скачал M&B. Забираю свои слова назад. Там графон хуже.
ENAleksey #190 - 11 месяцев назад (отредактировано ) 11
DemonoiD, спасибо за такие слова. Кстати, экспериментальная версия уже готова, скоро выложу, а пока вот пара скриншотов:
прикреплены файлы
AlakFrost #191 - 11 месяцев назад (отредактировано ) 0
С ФПС все так же? Имхо нормали на тайлах не самый лучший ход, спекулял и карты высот как в вове ещё бы было норм. Проблема тайлов в швах, нормал МАП и швы дадут адовую картинку.
DemonoiD #192 - 11 месяцев назад (отредактировано ) 0
ENAleksey, круги збс. А вот земля чего-то блестит. Не сразу отличил от растекшегося от жары молочного шоколада. Надеюсь это можно поправить новой текстуркой земли.
Причем хочется добавить, что блеск от солнца очень и очень органично смотрится на крышах зданий.
А потом я ещё подумал. Может функцию к земле добавить? Ведь раскаленная пустыня все же блестит. И снег блестит. А вот земля как-то не очень. Возможность поставить пользователю, делающему карту, true/false на каждую типовую текстурину почвы было бы неплохо.
Кристофер #193 - 11 месяцев назад 0
На деревьях чутка странно тень смотрится - как порченные выглядят.
ENAleksey #194 - 11 месяцев назад (отредактировано ) 0
Xin, с выключенными пост-эффектами, точечными источниками света и включенными тенями выдаёт 100 фпс на моём слабом ноутбуке.
Xin, Кристофер, никакких швов на ландшафте не будет, если карты нормалей делать тайлящимися. В данном примере я использовал одну текстуру с нормалями для всех объектов:
DemonoiD, всё это настраивается, правда, на данный момент только для всех объектов одновременно, без индивидуальной настройки. Это будет реализовано после того, как я смогу найти способ записи и чтения кастомной информации в mdx файлах.
прикреплены файлы
AlakFrost #195 - 11 месяцев назад 0
Окей. Как подключить карту нормалей к тому или иному объекту? Как вы это реализовали?
ENAleksey #196 - 11 месяцев назад 0
Xin, я и говорю, что пока никак) Для всех объектов используется одна и та же текстура нормалей, я пока не могу различать объекты/модели.
Хотя я могу отличить только юнитов от ландшафта, а на самом ланде не могу определить какой тайл сейчас используется.
AlakFrost #197 - 11 месяцев назад 0
Хмм понято. Просто лично по моему мнению идеальный вариант будет вывести данную надстройку на уровень того, что сделали близзард с вовом, хотя движек один и тот же, что ВОВ что вар3. Не вижу большого смысла париться с нормально мапами в целом.
ENAleksey #198 - 11 месяцев назад (отредактировано ) 0

Обновление 0.2.1b

Если вы устанавливали предыдущие версии RenderEdge, то перед запуском обязательно удалите данный раздел в редакторе реестра: HKEY_CURRENT_USER\Software\RenderEdge
  • Исправлены вылеты при вызове функций CtrlSetText, CtrlSetTexture и GUISetFont (проблема с конвертацией UTF-8 в ASCII);
  • Удалено нестабильное нововведение из предыдущей версии: "Убрано стандартное ограничение минимальной дистанции камеры до цели";
  • Обновлён FreeType до версии 2.8;
  • Обновлён RenderEdge_loader.dll. Теперь он ищет RenderEdge_exp.dll, если не нашёл, то запускает RenderEdge.dll;
  • Добавлен счётчик памяти, используемой варкрафтом;
  • Оптимизация GUI системы;
  • Оптимизация Widescreen fix;
  • Оптимизация debug log. Система отладки переписана с нуля.
прикреплены файлы
ENAleksey #199 - 10 месяцев назад (отредактировано ) 2

Обновление v0.2.2a

  • Добавлена новая native функция IsGamePaused;
  • Добавлена новая native функция SetBlackBorders;
  • Обновлен Jass API, исправлены некоторые баги связанные с пользовательскими нативными функциями;
  • Исправлены нативные функции, которые принимают аргументы типа boolean;
  • Исправлено повторное добавление триггеров функциями TriggerRegister#Event после перезапуска карты;
  • Функция EnableVsync теперь работает без необходимости сворачивать игру;
  • Исправлена ошибка, при которой новые элементы GUI не имели зеленой текстуры по умолчанию;
  • Улучшен debug log. Лог файл очищается, если размер превышает 100 КБ.
Теперь вы можете изменить черные границы динамически:
Чтобы скрыть чёрные полосы сверху и снизу, вызовите функцию SetBlackBorders(float upper, float bottom), где upper и bottom установите равными 0.0. Значения по умолчанию: upper = -0.02, bottom = 0.13.
прикреплены файлы
ENAleksey #200 - 10 месяцев назад (отредактировано ) 5

Обновление v0.2.3a

  • Добавлена новая native функция CtrlSetSize;
  • добавлена новая native функция CtrlSetAlignment;
  • Функции CtrlSetPosition и CtrlNew теперь принимают offsetX и offsetY вместо x и y;
  • Удалена функция CtrlSetRect.
Видео - демонстрация графического интерфейса и управления камерой:

Использование функции CtrlSetAlignment

» Используемый код
private function TestAlignment takes nothing returns nothing
    call CtrlNew(1001,  0,   0,  64, 64) // TOPLEFT
    call CtrlNew(1002, -32,  0,  64, 64) // TOP
    call CtrlNew(1003, -64,  0,  64, 64) // TOPRIGHT
    call CtrlNew(1004,  0,  -32, 64, 64) // LEFT
    call CtrlNew(1005, -32, -32, 64, 64) // CENTER
    call CtrlNew(1006, -64, -32, 64, 64) // RIGHT
    call CtrlNew(1007,  0,  -64, 64, 64) // BOTTOMLEFT
    call CtrlNew(1008, -32, -64, 64, 64) // BOTTOM
    call CtrlNew(1009, -64, -64, 64, 64) // BOTTOMRIGHT

    call CtrlSetAlignment(1001, -1, ALIGN_TOPLEFT)
    call CtrlSetAlignment(1002, -1, ALIGN_TOP)
    call CtrlSetAlignment(1003, -1, ALIGN_TOPRIGHT)
    call CtrlSetAlignment(1004, -1, ALIGN_LEFT)
    call CtrlSetAlignment(1005, -1, ALIGN_CENTER)
    call CtrlSetAlignment(1006, -1, ALIGN_RIGHT)
    call CtrlSetAlignment(1007, -1, ALIGN_BOTTOMLEFT)
    call CtrlSetAlignment(1008, -1, ALIGN_BOTTOM)
    call CtrlSetAlignment(1009, -1, ALIGN_BOTTOMRIGHT)
endfunction
constant integer ALIGN_TOPLEFT = 0
constant integer ALIGN_TOP = 1
constant integer ALIGN_TOPRIGHT = 2
constant integer ALIGN_LEFT = 3
constant integer ALIGN_CENTER = 4
constant integer ALIGN_RIGHT = 5
constant integer ALIGN_BOTTOMLEFT = 6
constant integer ALIGN_BOTTOM = 7
constant integer ALIGN_BOTTOMRIGHT = 8

native CtrlSetAlignment takes integer id, integer parentId, integer alignment returns nothing
Чтобы выравнивание шло относительно всего окна, установите parentId равным -1.
прикреплены файлы