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

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

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

Особенности

  1. Система отрисовки пользовательского интерфейса:
    • (+) Основная система;
    • (+) Управление при помощи Jass функций;
    • (+) Поддержка многострочного текста с форматированием;
    • (+) Поддержка .ttf формата шрифтов;
  1. Постобработка:
    • (+) HDR Rendering;
    • (+) ACES Tonemapping and Color Grading;
    • (+) Screen Space Reflections;
    • (+) Temporal Anti-Aliasing;
    • (+) Contact Shadows;
    • (+) Поддержка пользовательских шейдеров;
    • (-) Управление при помощи Jass функций;
  1. Улучшенное освещение:
    • (+) Каскадные тени;
    • (+) Расчёт освещения в линейном пространстве;
    • (+) Physically Based Shading;
    • (+) Поддержка пользовательских шейдеров;
    • (+) Поддержка карт нормалей;
    • (-) Управление при помощи Jass функций;
  1. Прочее:
    • (+) Переход с Direct3D8 на Direct3D9;
    • (+) Поддержка широкоформатных мониторов;
    • (+) Уменьшение задержки между приказами в игре;
    • (+) Запуск более одного экземпляра 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

Установка

Требования:

Распакуйте архив и запустите RenderEdge.exe. При первом запуске появится окно с предложением выбрать расположение файла war3.exe.
Нажмите F7, чтобы показать меню настроек. Изменить настройки также можно в файле RenderEdge.ini.
В редакторе реестра можно включить опцию, позволяющую загружать файл настроек, шейдеры и текстуры из папки с RenderEdge: HKEY_CURRENT_USER\Software\RenderEdge\AllowLocalFiles. Последовательность поиска ресурсов: загруженная карта, папка с RenderEdge, архив RenderEdge_exp.mpq.
Для подключения RenderEdge к Jass New Gen Pack (exp. 2) отредактируйте файл 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

Редактирование шейдеров

Если вы хотите отредактировать шейдеры, то скачайте архив, распакуйте шейдеры, скомпилируйте и поместите их в папку Shaders. Эту папку вы можете импортировать в карту, разместить в папке RenderEdge или в архиве RenderEdge_exp.mpq.

Компиляция из Visual Studio

Добавьте шейдеры в проект, в его свойствах настройте HLSL Compiler следующим образом:





Компиляция с помощью fxc.exe

@echo off
fxc.exe /T fx_2_0 /Fo Standard.cso Shaders\Standard.fx /nologo
fxc.exe /T fx_2_0 /Fo Shadows.cso Shaders\Shadows.fx /nologo
fxc.exe /T fx_2_0 /Fo PostProcess.cso Shaders\PostProcess.fx /nologo
fxc.exe /T fx_2_0 /Fo Skybox.cso Shaders\Skybox.fx /nologo
pause

Примеры

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

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

Следите за разработкой RenderEdge на Trello.
v0.3.0
  * Слияние с экспериментальной версией;
  * Добавлена поддержка Cine Filter;
  * Улучшен Image Based Lighting: генерация BRDF LUT текстуры и использование EnvBRDF функции вместо приближения;
  * Добавлен шейдер ландшафта;
  * Загрузка .ini файла из папки с RenderEdge без флага AllowLocalFiles;
  * Добавлена кнопка перезагрузки шейдеров;
  * Обновлён эффект Bloom;
  * Исправлен баг в лаунчере, из-за которого окно выбора пути к war3.exe не появлялось после переноса варкрафта в другую папку;
  * Исправлено качество теней;
  * Исправлена некорректная дальняя плоскость отсечения теней;
  * Исправлено некорректное название и расширение файлов скриншотов;
  * Исправлена отрисовка пост-эффектов при загрузке карты.

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
  * Первая стабильная версия.

Ссылки



Просмотров: 29 528



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


Бордер #1 - 3 года назад 1
Разве всё это возможно без исходников движка? Надеюсь твой проект не замолчит в один прекрасный момент навсегда
Raised #2 - 3 года назад 1
native float GetMouseTerrainX()
native float GetMouseTerrainY()
native float GetMouseTerrainZ()
Это координаты проекции мыши с экрана на ланд?

native int GetWindowWidth()
native int GetWindowHeight()
Это в пикселях?

Можно ли с помощью этой штуки открутить стандартный UI и нарисовать свой?
ENAleksey #3 - 3 года назад (отредактировано ) 3
  1. Да
  2. Да
  3. Нарисовать свой поверх старого - запросто, а со скрытием стандартного - не помню точно, вроде бы, если скрыть его функцией EnableInterface, то и новый не будет рендерится, но лучше проверить (просто я сам не могу посмотреть - в поезде, на неделю в Питер еду).
Alexander12 #4 - 3 года назад 0
Круто)
Единственно, если перейдешь на ретурн баг то:
  1. Нужен микс/dll)
  2. Найти альтернативу нативкам. (Массивы ловятся тем-же ретурн багом)
Кет #5 - 3 года назад 0
Контролы создаются в экранных координатах, я так полагаю. А в каких единицах и где начало системы координат?
Raised #6 - 3 года назад (отредактировано ) 4
Кет, скорее всего верхний левый угол - (0;0) Это вроде как устоявшийся стандарт
darkowlom #7 - 3 года назад 1
GF RaiseD, это называется левосторонняя система координат
Bornikkeny #8 - 3 года назад 0
Меня всё беспокоит вопрос связанный с мультилеером. Пробовал синхронизовать данные игроков от GetMouseX,Y с помощью приказов, но нет. Всегда дизсинхронизация.
Alexander12 #9 - 3 года назад 0
Меня всё беспокоит вопрос связанный с мультилеером. Пробовал синхронизовать данные игроков от GetMouseX,Y с помощью приказов, но нет. Всегда дизсинхронизация.
приказы должно идти локально от игрока, а не стандартными функциями..
IceFog #10 - 3 года назад 0
Мод не работает.
Запускаю с правами администратора, InstallPath содержит путь к игре,
но сколько раз не перезапускай, тестовая карта не открывается.
ENAleksey #11 - 3 года назад 0
IceFog, не надо запускать от админа, если поставить соответствующую галочку в свойствах war3.exe, то при запуске RenderEdge.exe будет вылетать ошибка.
IceFog #12 - 3 года назад 0
У меня стояла галочка "запустить в режиме совместимости", которая и требовала права админа.
Убрал её и начало работать, но нестабильно. За 12 запусков успешно лишь 7.
Почему при запуске RenderEdge.exe или war3.exe с правами админа мод не работает?
ENAleksey #13 - 3 года назад (отредактировано ) 1
IceFog, сам не понимаю, но, кажется, я понял: до внедрения библиотеки нужно снимать ограничения на доступ. Это также должно решить проблему с запуском со второго раза. Сейчас не смогу проверить, через недельку посмотрю.
Bornikkeny #14 - 3 года назад 0
Alexander12, я тупой)
FistBlooD #15 - 3 года назад 0
Текст ни в какую не хочет отображаться, ни через приведенный в карте-примере GUI.Text ни самописным методом. И нативка IsMouseOverUI() всегда выдает true, независимо от того над каким гуишником находится, дефолтным либо кастомным.
ENAleksey #16 - 3 года назад (отредактировано ) 2
FistBlooD, а у меня текст создаётся:
GUI.Text(0.5, 0.5, 0.12, 0.04 * aspectRatio, "Test", 0xffffffff);
А с функцией IsMouseOverUI() действительно какая-то проблема. Хотя, если использовать её в библиотеке RenderEdge.dll, а не из игры, то всё работает правильно. И вообще что-то странное творится:
bool jNATIVE jIsMouseOverUI()
{
	return bIsMouseOverUI;
}
Что бы я не подставлял вместо bIsMouseOverUI, всегда возвращается true (даже если пишу false).
FistBlooD #17 - 3 года назад (отредактировано ) 0
ENAleksey, Может отображение текста требует каких либо редистрибутивов? На данный момент использую старенький ноут на котором пришлось обновлять семерку до SP1 для запуска RenderEdge. Соответственно редистов установлено по минимуму.
И еще заметил небольшой нюанс- GetMouseTerrainX() и его аналоги не обновляются если курсор находится над кастомным UI.
ENAleksey #18 - 3 года назад (отредактировано ) 2
Может отображение текста требует каких либо редистрибутивов?
Нет, текст рендерится точно так же, как и картинки. Скорее всего я где-то накосячил, и теперь мод не может найти и загрузить RenderEdge.mpq, в котором и лежит текстура шрифта. Решить проблему может перемещение всех файлов из папки RenderEdge в папку с варкрафтом.
FistBlooD:
GetMouseTerrainX() и его аналоги не обновляются если курсор находится над кастомным UI
Это я сделал специально для того, чтобы при нажатии на элементы кастомного гуи не выделялись юниты под ними. Чтобы это отключить, нужно найти в методах OnMouseMove, OnMouseDown и OnMouseUp функцию BlockMouse и закомментировать её.
native BlockMouse(bool bBlock) - блокирует входные сообщения от мыши (перемещение, нажатия), передаваемые в игру. Например, при наведении на иконки стандартного интерфейса, не будет появляться их описание.
FistBlooD #19 - 3 года назад 0
ENAleksey, Перемещение всего в папку с варом помогло. Теперь отображается на ура.
С мышой все понятно.
ENAleksey, Еще вопрос- текст доступен только в 1 экземпляре или я что-то делаю не так?
CtrlSetRect(texts[1].GetID(), mX + 16, mX + w, mY + 16, mY + 30)
CtrlSetText(texts[1].GetID(), false, nGetItemName(Slot[i]), nGetItemColor(Slot[i]));
            
CtrlSetRect(texts[2].GetID(), mX + 16, mX + w, mY + 32, mY + 44)
CtrlSetText(texts[2].GetID(), false, nGetItemLevel(Slot[i]), 0xFFFFFFFF);
И что из этого получается:
ENAleksey #20 - 3 года назад (отредактировано ) 2
FistBlooD, можете скинуть карту? Всё должно корректно работать, а может и нет... На данный момент текстом крайне неудобно пользоваться: нельзя изменить размер шрифта, нельзя писать на русском (хотя сам GUI поддерживает русский язык, вся проблема в преобразовании jass string в char*), нет поддержки форматирования строки.

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

Скачать RenderEdge.
Скачать тестовую карту.
  • Исправлена ошибка с загрузкой RenderEdge.mpq (теперь мод можно без проблем размещать в любой папке);
  • Исправлен баг в функции CtrlSetText, при котором все элементы GUI, использующие текстуру шрифта, имели одинаковый текст;
  • Изменена функция CtrlSetText - убран аргумент "argb", отвечающий за цвет создаваемого текста, вместо этого используйте функцию CtrlSetColor (текст по умолчанию белый);
  • Изменена функция CtrlSetDepth - тип аргумента "depth" изменён на real.
native void CtrlSetText(int id, bool autoResize, string text) // autoResize: если true, то элемент GUI подгоняется под введённую строку текста, иначе текст растягивается по размеру элемента GUI.
native void CtrlSetDepth(int id, float fDepth) // Определяет порядок поиска элементов GUI функцией CtrlGetFromMousePoint. Чем значение fDepth меньше, тем элемент расположен ближе к экрану (1.0 по умолчанию).
Кет #21 - 3 года назад 0
А шрифт какой используется? Вижу, что вроде не FritzQuadrata, как в варике стандартно, странное решение.
FistBlooD #22 - 3 года назад (отредактировано ) 3
ENAleksey, Проверю на работоспособность в 0.0.2а, но более чем уверен что проблема исчерпана.
За пару свободных минут перевел текст на новые функции, выглядит конечно не ахти, но допиливание внешнего вида дело времени. Главное что работает как надо. Ну и от русского текста на время придется избавиться.
ENAleksey #23 - 3 года назад (отредактировано ) 3
Кет, на данный момент использую bitmap font (название шрифта не знаю), так как чтение из него намного легче реализовать, чем писать целую систему для загрузки .ttf.
FistBlooD, да, у данного метода полно недостатков, и ситуация никак не изменится, пока я не реализую поддержку .ttf. Появилась идея использовать стандартные функции отрисовки текста, завтра буду пробовать реализовать вывод текста данным способом.

Кстати, полезна ли будет функция вращения элементов GUI? Просто я уже давно сделал такую возможность, осталось только добавить соответствующую нативку. И на данный момент контролы вращаются только относительно левой верхней вершины, надо будет исправить.

Кажется, я нашёл способ чтения русских символов из jass String, завтра проверю.
FistBlooD #24 - 3 года назад 0
ENAleksey, Думаю такая функция была бы удобна. Т.к. сейчас для каждого изображения угла и бордера используется отдельный экземпляр (верхний, нижний и т. п.) Да и в общем имела бы широкий спектр применения.
Кет #25 - 3 года назад 0
ENAleksey, тогда понятно =( Жду TTF, удачной разработки =)
ENAleksey #26 - 3 года назад (отредактировано ) 2

Обновление v0.0.2a (без изменения версии)

Скачать RenderEdge.dll
  • Добавлена новая native функция CtrlSetAngle.
native void CtrlSetAngle(int id, float fAngle) // устанавливает угол поворота элемента GUI (в радианах).
ENAleksey #27 - 3 года назад 4

Обновление v0.0.2b

Скачать RenderEdge.
Скачать тестовую карту.
  • Исправлена проблема, при которой не получалось запустить мод с первого раза;
  • Улучшен debug log.
ENAleksey #28 - 3 года назад (отредактировано ) 9
Обновил до версии v0.0.3a, скачать можно будет после утверждения новой версии ресурса. Об изменениях напишу завтра-послезавтра.
Потихоньку создаю проект на сайте, переделываю все накопившиеся ресурсы проекта.

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

  • Реализовано чтение настроек из реестра;
  • Добавлены функции CtrlGetHeight и CtrlGetWidth для получения ширины элемента GUI после применения функции CtrlSetText с аргументом "autoResize" == true;
  • Исправлено растягивание полосок здоровья на широкоформатных экранах;
  • Отключена функция EnableDebug, теперь включение режима отладки осуществляется из редактора реестра;
  • Улучшена совместимость с JNGP;
  • Улучшен debug log.
Tumart #29 - 3 года назад 0
ENAleksey, КРУТО! спасибо) А можно сделать чтоб курсор нормально отображался, поверх интерфейса или это в следующей версии?
ENAleksey #30 - 3 года назад (отредактировано ) 0
Tumart, курсор и так поверх интерфейса отображается. Если у вас курсор отображается под интерфейсом, скиньте, пожалуйста, скриншот с данной проблемой.
Tumart #31 - 3 года назад (отредактировано ) 0
ENAleksey, после сохранения карты в редакторе вообще перестало запускаться. Ни сохраненная карта, ни изначальная.
ENAleksey, запустил с другой папки все заработало, только вместо скрина рабочий стол..
Курсор по прежнему под нестандартным интерфейсом.
ENAleksey #32 - 3 года назад 0
Tumart, игра вылетает с ошибкой? Или что-то другое? Указали путь к war3.exe при первом запуске? Использовали ли whack.lua?
Tumart #33 - 3 года назад 0
ENAleksey, да все сделал по инструкции. Ошибок нет.
ENAleksey #34 - 3 года назад 0
Tumart, варкрафт не сможет захватит изображение, так что используйте стороннее решение, например, Fraps или ножницы Винды.
Tumart #35 - 3 года назад 0
ENAleksey, Вот
ENAleksey #36 - 3 года назад 0
Tumart, странно, такого быть точно не должно. Спасибо за то, что сообщили, буду исправлять. Позже свяжусь с вами, чтобы узнать поподробнее о том, из-за чего могла возникнуть проблема.
Пожалуйста, напишите, кто ещё пробовал запускать, есть ли у кого-нибудь такая же проблема?
Tumart #37 - 3 года назад 0
ENAleksey, низнаю я пока один пробывал.
Ige #38 - 3 года назад (отредактировано ) 0
  • Скачал RenderEdge и карту из шапки
  • Указал путь к варику при первом запуске
  • Запустил тестовую карту через варкрафт (не через редактор)
Tumart #39 - 3 года назад 0
Ige, в первый раз сделал также и все равно курсор был под интерфейсом.
Ige #40 - 3 года назад 2
Заметил вот такой небольшой баг
Навел мышку на юнита, а затем увел ее над кнопкой
ENAleksey #41 - 3 года назад 1
Ige, ну это не баг, просто, как я уже писал, я блокирую все сообщения, передаваемые в игру при наведении на элементы GUI. Если не хотите, чтобы это происходило, закомментируйте функцию BlockMouse в методе OnMouseMove. Либо при наведении на контрол нужно сначала отключить данную функцию, а затем сразу же включить, это должно исправить проблему, позже сам попробую.

Кстати, добавил описание каждой native функции.

Если после перезагрузки компьютера RenderEdge.exe снова требует указать путь к war3.exe, сообщите мне, такого быть не должно.
ENAleksey #42 - 3 года назад 0

Уезжаю отдыхать, обновлений месяц не будет.
Raised #43 - 3 года назад 0
ENAleksey, хорошо отдохнуть. Не дождался, удалился в UDK.
ScorpioT1000 #44 - 3 года назад (отредактировано ) 0
Почему не написать это как встроенную систему, нежели внешний exe/dll файл?) этот "вирус" никто не будет скачивать.
Почитай полезную информацию об эксплоите.
ENAleksey #45 - 3 года назад (отредактировано ) 0
ScorpioT1000, читал, Александр также постоянно уговаривает сделать всё внутри варкрафта, точнее карты. Но я уже решил делать всё в виде сторонней библиотеки, так как это намного легче, и не нужно тратить время на перевод всего кода на ассемблер, в коем я вообще не силён.
этот "вирус" никто не будет скачивать.
"ладно, да и я не особо рассчитывал, что моим модом кто-то будет пользоваться, всё делал ради улучшения своих навыков в программировании, компьютерной графике и reverse engineer'инге".
Почему не написать это как встроенную систему, нежели внешний exe/dll файл?)
Это уже сам Александр хотел делать, надеюсь, он поскорее возьмётся непосредственно за реализацию и доведёт дело до конца, не забросив всё на полпути.
Кристофер #46 - 3 года назад 0
этот "вирус" никто не будет скачивать.
Говори за себя. Я скачаю, когда более-менее сделают.
ScorpioT1000 #47 - 3 года назад (отредактировано ) 5
ENAleksey, я не знаю, кто такой Александр, но если дистрибьюция карт сейчас в этой игре, которой более 15 лет, почти на нуле, то у дистрибьюции твоего бинарника по сути вообще нет будущего. Либо тебе надо сделать какие-либо workaround'ы, чтобы игра (карта) могла работать и без твоих функций и это не было бы частью обязательного функционала. Например, сделать функции-обертки на jass, когда не работают wasd, использовать стрелки и т.п. Здесь надо довольно много думать.
Что касается UI, есть DGUI, я бы лучше копал в эту сторону, опять-же, можно сделать твой модуль UI как перформанс-буст для DGUI и чтобы оно продолжало работать без бинарника, но с ограничениями.
Кристофер, "Я" - в софтвейр продакшене понятие малозначительное =)
ENAleksey #48 - 3 года назад (отредактировано ) 0
я не знаю, кто такой Александр
надо сделать какие-либо workaround'ы, чтобы игра (карта) могла работать и без твоих функций и это не было бы частью обязательного функционала
Кастомные нативки и так не являются обязательными, кто хочет, тот их и использует. Я их добавил только ради удобства, основной же целью моего мода является улучшение графики игры (смотри список особенностей мода), что реализовать, используя ретурн баг, практически нереально. Также я работаю над расширенной экспериментальной версией RenderEdge, а особенности, которые в ней представлены, без сторонних расширений вообще не реализовать.
Вот все возможности двух версий RenderEdge, но они уже очень сильно устарели: www.hiveworkshop.com/threads/reverse-engineer-game-dll.268718/pa...
ScorpioT1000 #49 - 3 года назад 0
Кастомные нативки и так не являются обязательными, кто хочет, тот их и использует.
я имею ввиду, определение факта присутствия библиотеки в реальном времени
ENAleksey #50 - 3 года назад (отредактировано ) 0
ScorpioT1000, теперь понял. Но чем вас не устаревает текущий вариант? Можно конечно с помощью РБ в карте определять, установлен ли RenderEdge, и в зависимости от этого загружать в игру .dll или нет. Но зачем такие сложности? Намного легче просто запускать варкрафт через кастомный .exe файл, при этом игра не будет потреблять лишние ресурсы, если карта не использует возможности, предоставленные модом. Может я вас опять не так понял? Опишите, пожалуйста, поэтапно, как в идеале вы видите установку RenderEdge, создание карты с его использованием и её запуск.
Tumart #51 - 3 года назад 0
ENAleksey, такой вопрос в будущем будет ли возможность вывода текста на любом языке. И все эти функции в мультиплеере надо через GetLocalPlayer юзать?
ENAleksey #52 - 3 года назад (отредактировано ) 0
будет ли возможность вывода текста на любом языке
Она уже есть, но только внутри самой библиотеки. Единственная проблема - корректное получение информации из jass'овской строки. Я постараюсь поскорее избавиться от неё, тем более разработчик YDWE уже предложил мне вариант реализации, но я пока еще не знаю, будет ли он работать.
И все эти функции в мультиплеере надо через GetLocalPlayer юзать?
По идее да, но я пока ещё не пробовал запускать игру с модом в сетевом режиме.
Tumart #53 - 3 года назад 0
ENAleksey, кстати после переустановки варика выскакивает такое сообщение и путь выбрать не предлагает. И можно еще сделать чтоб в два и более окна можно было запускать.
Исправил путь в реестре на нужный. Перезапускал несколько раз,теперь карта не запускается.
ENAleksey #54 - 3 года назад 0
Tumart, спасибо, что сообщили о проблеме, в следующей версии сделаю проверку на существование файла war3.exe при каждом запуске RenderEdge, если не найден - повторный вывод окошка выбора пути.
Tumart:
Исправил путь в реестре на нужный. Перезапускал несколько раз,теперь карта не запускается.
Надпись в углу появляется при запуске? Вы как-либо изменяли карту? Прикрепите, пожалуйста, скриншот редактора реестра по пути HKEY_CURRENT_USER\SOFTWARE\RenderEdge и напишите корректный путь к папке с варкрафтом.
Tumart:
И можно еще сделать чтоб в два и более окна можно было запускать.
Сделаю в следующей версии.
Tumart #55 - 3 года назад 0
ENAleksey, надпись появляется. Карту не изменял. Путь прописан корректно.
ENAleksey #56 - 3 года назад 0
Tumart, скиньте, пожалуйста, файл RenderEdge.txt из папки с модом (либо из папки с варкрафтом: не помню точно, в какой версии сделал создание лога в папке с RenderEdge).
И как вы запускаете карту? Из редактора?
Tumart #57 - 3 года назад 0
Запускаю через RenderEdge.exe
ENAleksey #58 - 3 года назад (отредактировано ) 0
Tumart, ошибок в логе никаких не вижу, разве что не всегда отображается версия RenderEdge, но в остальном всё в порядке.
Попробуйте создать новую карту, в которой вызываются две функции: CtrlCreateInstance() и GetTriggerKey(), предварительно скопировав все нативки себе в карту, и посмотрите, запустится ли она. Если нет, то попробуйте отключать их по одной, пока не запустится.
ENAleksey #59 - 3 года назад 0

Два небольших опроса

  • Нужно ли добавить функцию, приостанавливающую текущий поток, аналогичную Sleep(float ms) в c++?
Опрос: Добавить Sleep(real ms)?

Всего проголосовали: 17
  • Нужно ли добавить функцию, которая будет срабатывать при отрисовке каждого кадра?
Опрос: Добавить TriggerRegisterFrameUpdateEvent(trigger trig)?

Всего проголосовали: 17
Пока сам не знаю, будет ли от них польза. Высказывайте своё мнение, нужно добавлять данные функции или же нет? Так же предлагайте свои варианты, что ещё можно реализовать?
Кет #60 - 3 года назад 0
FrameUpdateEvent можно использовать для динамической отрисовки чего-либо, это круто!
Tumart #61 - 3 года назад 0
Еще бы неплохо было добавить функцию динамической смены модели курсора например native void SetMouseCursorIco(string s). А так обе фунции за. Да и вообще чем больше функционала тем лучше.
ENAleksey #62 - 3 года назад (отредактировано ) 2
добавить функцию динамической смены модели курсора
Обязательно сделаю, я уже добавлял функцию скрытия курсора, единственной проблемой было то, что для определения того, что рендерится именно курсор, я использовал кастомную модель с пятью вершинами вместо четырёх. Если не получится реализовать отлов отрисовки стандартного курсора, то придётся использовать кастомную модель, импортированную в RenderEdge.mpq и заменяющую прежнюю модель. Но, уверен, можно будет обойтись и без этого.
Барин #63 - 3 года назад 0
Возможно ли убрать ограничение вара на 64 фпс?
koloff #64 - 3 года назад (отредактировано ) 3
Живут же люди, мне, блин, стабильно, что бы, хотя бы 24 кадра в секунду, при записи выдавало, не добиться. А тут, 64 кадра не устраивает=(
Tumart #65 - 3 года назад 0
ENAleksey, еще бы в основной версии пригодились бы функции полного скрытия интерфейса, а также возможность регулировать размер, расположение и частичное или полное скрытие миникарты. Например чтобы можно было сделать форму миникарты круглой, и зум юзать, чтоб миникарта например показывалась не полностью, а в зависимости от месторасположения определенного юнита(в некоей области). И если возможно сделать сейв систему в которую можно записывать\считывать данные в мультиплеере. Также не плохо было бы сделать подключение доп архивов, чтоб можно было не волноваться за размер карты на подобие .mix с той только разницей, если возможно чтоб в редакторе отображались модели, иконки и т.д из архива.
ENAleksey #66 - 3 года назад 1
функции полного скрытия интерфейса, а также возможность регулировать размер, расположение и частичное или полное скрытие миникарты
Сделаю.
Tumart:
Например чтобы можно было сделать форму миникарты круглой, и зум юзать, чтоб миникарта например показывалась не полностью, а в зависимости от месторасположения определенного юнита(в некоей области).
А это уже любой пользователь сможет сделать самостоятельно, используя GUI систему. Мне же придётся только добавить доступ к динамической текстуре, отображающей определенную область вокруг заданной точки на карте.
Tumart:
И если возможно сделать сейв систему в которую можно записывать\считывать данные в мультиплеере.
Это я делать не буду, так как систему загрузки и сохранения для мультиплеера можно сделать самостоятельно, без использования сторонних расширений.
Tumart:
Также не плохо было бы сделать подключение доп архивов, чтоб можно было не волноваться за размер карты на подобие .mix с той только разницей, если возможно чтоб в редакторе отображались модели, иконки и т.д из архива.
Тоже сделаю, а вот возможность подгрузки дополнительного контента из .mpq в редактор карт я сделаю только после того, как возьмусь за модификацию World Editor.
Tumart #67 - 3 года назад 0
ENAleksey, а вот не давно вопрос был "Можно ли снять ограничение на размер карты", вы говорили что попробуете сделать это в JNGP. Было бы интересно узнать результат.
ENAleksey #68 - 3 года назад 1
Tumart, даже не пробовал, так как уверен, что это невозможно:
Если не сделали фикс на большее увеличения размера карты, значит на то есть какая-то причина.
Да и поважнее дела были.
ENAleksey #69 - 2 года назад (отредактировано ) 8
такой вопрос в будущем будет ли возможность вывода текста на любом языке
Она уже есть, но только внутри самой библиотеки. Единственная проблема - корректное получение информации из jass'овской строки
Готово. Строка jass представлена в UTF-8 кодировке, я добавил функцию конвертации массива символов из UTF-8 в ASCII, теперь можно без проблем получить jass строку на исходном языке, а не только на английском.
Сейчас буду добавлять поддержку TTF формата шрифтов. Огромное спасибо пользователю d.m.k с сайта gamedev.ru за предоставленный пример использования FreeType, это позволит мне быстрее реализовать загрузчик TTF шрифтов и новый визуализатор текста для GUI системы.
После этого можно будет переходить ко второму этапу работы над RenderEdge - добавлять HDR Rendering и пост-эффекты.
прикреплены файлы
Vitalik8 #70 - 2 года назад -3
Сделай, возможность изменять иконку мини карты во время игры
И кстати если можешь увеличь количество игроков с 12 на 24 или больше
Mexaz #71 - 2 года назад 5
Vitalik8:
И кстати если можешь увеличь количество игроков с 12 на 24 или больше
И вот как это относится к рендерингу? Но, если надо больше игроков, то в этих ваших интернетах полно других движков, некоторые из которых предоставляют возможность подключения до 10к игроков одновременно.
Vitalik8 #72 - 2 года назад -1
Тогда добавь возможность считывать время реальное
Условие юнит находится на суша/мелководье/глубоководье
ELB359 #73 - 2 года назад 0
Карта, при открытии в редакторе, пустая, а в игре вообще нельзя запустить. При этом установилось все нормально, надпись есть.
ENAleksey #74 - 2 года назад 0
ELB359, в смысле пустая? Возможно произошёл сбой при скачивании карты, попробуйте скачать заново.
ELB359 #75 - 2 года назад 0
ENAleksey, пробовал, но еще попробую. И нативки использовать тоже не получается.
ENAleksey, извиняюсь, теперь все вижу, видимо сам где-то затупил)
ENAleksey #76 - 2 года назад (отредактировано ) 4

Новости

Реализовал загрузчик .ttf шрифтов, правда, только системных (по умолчанию использую Consolas). Загружать из файлов тоже можно, но только не со всеми это проходит успешно. Например, после загрузки стандартного шрифта варкрафта FRIZQT__.TTF, он оказывается пустым, а при загрузке других шрифтов варкрафта игра вообще вылетает. Постараюсь решить эту проблему в будущем.


Также добавил поддержку многострочного текста (при ограничении ширины) и форматирования (регистр не имеет значения):
  • Переход на новую строку - "|n";
  • Смена цвета текста - "|cAARRGGBB";
  • Полужирный шрифт - "|b";
  • Курсив - "|i";
  • Сброс к стандартному цвету текста, обычному шрифту - "|r".
Осталось реализовать выравнивание текста (справа / по центру / по всей ширине) и корректное вращение многострочного текста.
прикреплены файлы
ENAleksey #77 - 2 года назад (отредактировано ) 13

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

Возможны вылеты во время загрузки карты!
  • Реализовано корректное получение информации из jass строки (поддержка всех языков, а не только английского);
  • Изменено название функции 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 после переустановки Warcraft по другому пути;
  • Добавлена поддержка TTF шрифтов (FreeType);
  • Добавлена поддержка многострочного текста и форматирования ("|n" (на новую строку), "|cAARRGGBB" (изменить цвет), "|b" (полужирный шрифт), "|i" (наклонный шрифт), "|r" (сброс к стандартному цвету текста и обычному шрифту));
  • Уменьшена задержка отдачи приказов юнитам в одиночной игре;
  • Добавлен логотип проекта;
  • Уменьшен размер RenderEdge.mpq;
  • Улучшен debug log.
native void CtrlSetText(int id, string text, bool bWrap) // bWrap: если текст заходит за пределы ширины, заданной при создании элемента GUI, то происходит переход на новую строку
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 GUISetFont(string name, int size) // Устанавливает шрифт для всех текстовых элементов GUI (по умолчанию используется "Consolas" с размером 13)


Полноценный Widescreen fix!

У меня только что получилось реализовать фикс для широкоформатных мониторов, теперь экран не выглядит растянутым на мониторах с отношением сторон равным 16:9!
Сейчас буду дорабатывать фикс, например, нужно немного отдалить камеру и добавить поддержку любого отношения сторон монитора (16:10, 21:9), динамическую подстройку под текущий размер окна.
прикреплены файлы
AlakFrost #78 - 2 года назад 2
Наконец в 4к поиграю на варике.
Raised #79 - 2 года назад 2
Там не камеру отдалять нужно, а гуи нормальный.
Это сообщение удалено
ENAleksey #81 - 2 года назад (отредактировано ) 0
Кстати, только что с Ильёй (darkowlom) доработали фикс, теперь игра адекватно себя ведёт при изменении размера окна. Осталось ещё немного протестировать его, чтобы убедиться, что всё будет работать при любом разрешении экрана, выбранном в игре, и при любом разрешении монитора.
GF RaiseD:
Там не камеру отдалять нужно, а гуи нормальный.
С этим будет посложнее, но будем стараться переделать на нормальный, не растянутый.
ENAleksey #82 - 2 года назад (отредактировано ) 14

Обновление v0.1.0a (без изменения версии)

Скачать RenderEdge.dll (ссылка на скачививание в комментарии #77 обновлена).
  • Реализована поддержка широкоформатных мониторов;
Скриншоты игры при разных отношениях сторон:
прикреплены файлы
Raised #83 - 2 года назад (отредактировано ) 3
Охохо. Warcraft 3 Unofficial Patch...

Это бы доработать, и разместить отдельным модулем.
Bornikkeny #84 - 2 года назад 1
Вот бы насильно заставить установить этот патч во все Варкрафты. Мил стал бы чуточку лучше.
Кет #85 - 2 года назад 0
давайте его близзам отошлём
Bornikkeny #86 - 2 года назад 0
Кет:
давайте его близзам отошлём
c Cat'a петиция!
Vitalik8 #87 - 2 года назад 0
Можешь сделать что б когда открывается меню паузы кнопки пассивными ставали
EfReeZe #88 - 2 года назад 0
ENAleksey, как же ты хорош - пойду протестирую))
Если одним словом оценивать - удобно. Разве что проблема с отображением заставки главного меню в нижней части экрана.
darkowlom #89 - 2 года назад 0
EfReeZe, уже пофикшено
Arctide #90 - 2 года назад 0
ENAleksey, проблемка, как решить?
прикреплены файлы
darkowlom #91 - 2 года назад 2
TripleKor, установи распространяемый пакет майкрософт содержащий библиотеку, название не вспомню, но по запросу библиотеки найдешь
ENAleksey #92 - 2 года назад 0
Arctide #93 - 2 года назад (отредактировано ) 0
darkowlom, спасибо, помогла установка обновления винды, ибо на висту x86 - VS 2015 не ставится :c
ScorpioT1000 #94 - 2 года назад 6
TripleKor, попробуй на win 98))00нолик
Кристофер #95 - 2 года назад 0
Такое предложение - сделать возможность в редакторе выделять несколько элементов. Экспорт/Удаление/Копирование станет гораздо быстрее.
Melissa #96 - 2 года назад (отредактировано ) 0
Скачать RenderEdge.
Нельзя ли поддержку 32-биток добавить? Ибо не все компьютеры, на которых играют в Warcraft 3 имеют 4+ ГБ оперативки
И да, у меня две оси ХР и 7 обе 32, так что хрю хрю.
прикреплены файлы
ENAleksey #97 - 2 года назад (отредактировано ) 0
Melissa, 32-битные поддерживаются, а вот XP - нет. Чтобы RenderEdge работал на XP, нужно просто пересобрать .exe с соответствующим параметром совместимости, вроде всё хорошо, игра начинает запускаться, но .dll не внедряется. Возможно я использую какие-то несовместимые с XP функции в методе InjectDLL, позже буду разбираться.
Такое предложение - сделать возможность в редакторе выделять несколько элементов. Экспорт/Удаление/Копирование станет гораздо быстрее.
Выделение каких элементов, GUI? Всё это можно реализовать самостоятельно с помощью функций, которые уже существуют.
Melissa #98 - 2 года назад 0
ENAleksey, Понятно.
А возможно сделать чтобы камера не возвращалась к стандартной после использования inset/delete или колёсика? или это уже реализовано?
ENAleksey #99 - 2 года назад 0
Melissa, в смысле?) Она всегда стандартная, я её никак не изменял.
Melissa #100 - 2 года назад (отредактировано ) 0
ENAleksey, я про:
Когда нажимаешь insert/delete или pageup/pagedown - ты поворачиваешь камеру в игре. Но стоит отпустить кнопки - камера возвращается к нормальной. Убрать бы это возвращение, перенести на клавишу какую,что ли..
ENAleksey #101 - 2 года назад 2
Melissa, для этого можно просто написать свою систему на jass. Можно сделать ещё лучше - вращение камеры по двум осям при зажатой клавише мыши.
ENAleksey #103 - 2 года назад 0
Melissa, я её уже делал, так что в следующей версии добавлю данную систему в карту-пример.
А что насчёт запуска на Win7? Всё должно отлично работать.
Lotus101 #105 - 2 года назад 0
Просто красавы! Жду новые версии.
ELB359 #106 - 2 года назад 0
Если я использую в карте эту библиотеку, то эту карту мало кто сможет запустить кроме меня, да?
darkowlom #107 - 2 года назад 1
ELB359, только те у кого есть мод, при желании можно вывести сообщение о необходимости мода в описании
Возможно в будущем получится реализовать интеграцию в карту, но пока не планируется
ELB359 #108 - 2 года назад 0
darkowlom, спасибо. Кстати, а нет ли планов как-то объединить мод с JNGP?
Bornikkeny #109 - 2 года назад 0
ELB359:
darkowlom, спасибо. Кстати, а нет ли планов как-то объединить мод с JNGP?
предлагаю подождать релиз xgm.guru/p/wc3/160205
ELB359 #110 - 2 года назад 0
Bornikkeny, я к тому, что если люди способны даже нативки в вар добавить, что просто очень круто, то почему бы не упаковать все это во что-то вроде патча 1.27?
Bornikkeny #111 - 2 года назад 0
ELB359:
Bornikkeny, я к тому, что если люди способны даже нативки в вар добавить, что просто очень круто, то почему бы не упаковать все это во что-то вроде патча 1.27?
Unofficialpatch? Не плохая идея.
darkowlom #112 - 2 года назад 2
Bornikkeny, мы втроем работаем в смежных областях и контактируем между собой, в некоторых вопросах.
Bornikkeny #113 - 2 года назад 0
darkowlom:
Bornikkeny, мы втроем работаем в смежных областях и контактируем между собой, в некоторых вопросах.
Если что, я тоже начал изучать Return bug. Скорее всего, даже если Alexander12 не внедрит свою систему в ретурн баг, то это сделаю я (попытаюсь) :D
darkowlom #114 - 2 года назад 0
Bornikkeny, чтобы долго не ковырялся, - я могу выполнить байткод джазза из массива, но ассемблер не выполниться. Пока нет возможности записать в память процесса, там протект есть - если это обойти то никаких проблем с подключением длл не будет, куда писать и как уже известно
alexprey #115 - 2 года назад 0
Постарайтесь склеиться с mix файлом. Он вариком автоматически подгружается, так что думаю, что есть шанс разобраться и вклеить туда запуск своего кода
Lotus101 #116 - 2 года назад 0
Подскажите это тоже варкрафт на этом моде? www.youtube.com/watch?v=rgfdcEqJa4o
darkowlom #117 - 2 года назад 0
Lotus101, это старая эксперементальная версия
Lotus101 #118 - 2 года назад 0
darkowlom:
Lotus101, это старая эксперементальная версия
Но тем не менее это варкрафт?
darkowlom #119 - 2 года назад 0
alexprey, микс грузится только при запуске игры из папки варика, склеиться не получится, а вызвать эту функцию без доступа к асму невозможно, джаззкал выполняет псевдокод
Lotus101, тем не менее да
Lotus101 #120 - 2 года назад 0
darkowlom:
alexprey, микс грузится только при запуске игры из папки варика, склеиться не получится, а вызвать эту функцию без доступа к асму невозможно, джаззкал выполняет псевдокод
Lotus101, тем не менее да
Это же потрясающе, эта версия сможет со временем тоже иметь все эти функции?
darkowlom #121 - 2 года назад 0
Lotus101, список функций есть выше, эти тоже включены
alexprey #122 - 2 года назад 0
микс грузится только при запуске игры из папки варика
я просто не особо понимаю как работает механизм вшивания в процесс вара, поэтому такие вопросы: Надо подконнекчиваться к вару до его запуска, чтобы все работало?
Lotus101 #123 - 2 года назад 0
darkowlom:
Lotus101, список функций есть выше, эти тоже включены
Я не силен в джассе, но преобразовать в свою карту умею. Мне бы хотелось добавить в карту систему перемещения камеры от 3 лица на правую кнопку мыши и чтобы она двигалась плавно за героем, и передвижение героя на клавиши wasd, можете ли вы добавить это в мод или функции написать?
darkowlom #124 - 2 года назад 0
alexprey, если микс, то во время запуска его подтянет, или же внешне подключить библиотеку. Чтоыб запустить из игры нужно внедрить свой ассемблер в код игры и вызвать его, для этого надо записать в память при помощи ретурн бага, это возможно, но как - непонятно. Из обычного массива можно вызвать байткод джазза, чтобы куда-то подписать асм нужно присвоить массиву адресс какой-то внутренней функции, записать туда и вызвать из джазза
ELB359 #125 - 2 года назад 0
А как узнать игрока, который сделал клик мышью?
ENAleksey #126 - 2 года назад (отредактировано ) 2
Кстати, а нет ли планов как-то объединить мод с JNGP?
Для подключения 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

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
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
Постарайтесь склеиться с mix файлом. Он вариком автоматически подгружается, так что думаю, что есть шанс разобраться и вклеить туда запуск своего кода
Пробовал, но что-то не получалось, возможно, из-за того, что загрузка mix файлов происходит после создания Direct3D, а для работы мода нужно перехватить эту функцию до её вызова.
Возможно, сделаю два способа внедрения RenderEdge: (Или лучше оставить только один вариант?)
  • Запуск через .exe;
  • Внедрение библиотеки в игру с помощью d3d8.dll/d3d9.dll в паке с варкрафтом.
Я не силен в джассе, но преобразовать в свою карту умею. Мне бы хотелось добавить в карту систему перемещения камеры от 3 лица на правую кнопку мыши и чтобы она двигалась плавно за героем, и передвижение героя на клавиши wasd, можете ли вы добавить это в мод или функции написать?
Я уже добавил вращение и приближение камеры при зажатом Ctrl и правой клавише мыши. Выложу обновлённую карту-пример вместе со следующей версией мода. Но если надо сейчас, то вот код (ещё изменится):
» Камера
library Camera initializer Camera_Init
{
    private float facing = 0.0;
    private float aoa = 0.0;
    private float curCamDist = 0.0;

    private float cameraTime = 0.03125;
    private float sens = 0.05;

    private bool bRBM = false;
    private bool bCtrlPressed = false;


    private void OnMouseMove()
    {
        if (bCtrlPressed && bRBM)
        {
            int centerX = GetWindowWidth()/2;
            int centerY = GetWindowHeight()/2;
            float deltaX = I2R(centerX - GetMouseX()) * sens;
            float deltaY = I2R(centerY - GetMouseY()) * sens;
            
            if (GetMouseX() != centerX)
            {
                facing += deltaX;
                if (facing > 360.0)   { facing -= 360.0; }
                elseif (facing < 0.0) { facing += 360.0; }

                SetCameraFieldForPlayer(Player(0), CAMERA_FIELD_ROTATION, facing, cameraTime);
            }
            
            if (GetMouseY() != centerY)
            {
                aoa += deltaY;
                if (aoa > 360.0)     { aoa = 360.0; }
                elseif (aoa < 275.0) { aoa = 275.0; }
                
                SetCameraFieldForPlayer(Player(0), CAMERA_FIELD_ANGLE_OF_ATTACK, aoa, cameraTime);
            }
            
            SetMousePos(centerX, centerY);
        }
    }

    private void OnKeyboardDown()
    {
        if (GetTriggerKey() == 17 && !IsKeyDown(1) && !IsKeyDown(2))
        {
			curCamDist = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE);
            BlockMouse(true);
            //ShowCursor(false);
            bCtrlPressed = true;
        }
    }

    private void OnKeyboardUp()
    {
        if (GetTriggerKey() == 17)
        {
            BlockMouse(false);
            //ShowCursor(true);
            bCtrlPressed = false;
        }
    }
                
    private void OnMouseDown()
    {
        bRBM = true;
        if (bCtrlPressed)
        {
            facing = GetCameraField(CAMERA_FIELD_ROTATION) * bj_RADTODEG;
            aoa = GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK) * bj_RADTODEG;
            SetMousePos(GetWindowWidth()/2, GetWindowHeight()/2);
        }
    }
            
    private void OnMouseUp()
    {
        bRBM = false;
    }

    private void OnWheelEvent()
    {
        if (bCtrlPressed)
        {
            curCamDist -= I2R(GetWheelDelta()) * 0.5;
            if (curCamDist < 300.0)
            {
                curCamDist = 300.0;
            }
            elseif (curCamDist > 3000.0)
            {
                curCamDist = 3000.0;
            }
            SetCameraFieldForPlayer(Player(0), CAMERA_FIELD_TARGET_DISTANCE, curCamDist, cameraTime);
        }
    }

    //===========================================================================
    private void Camera_Init()
    {
        trigger temp = CreateTrigger();
        TriggerRegisterTimerEvent(temp, cameraTime, true);
        TriggerAddAction(temp, function OnMouseMove);
        //TriggerRegisterMouseMoveEvent(temp);

        temp = CreateTrigger();
        TriggerAddAction(temp, function OnKeyboardDown);
        TriggerRegisterKeyEvent(temp, KEY_Any, EVENT_Down);

        temp = CreateTrigger();
        TriggerAddAction(temp, function OnKeyboardUp);
        TriggerRegisterKeyEvent(temp, KEY_Any, EVENT_Up);
	
        temp = CreateTrigger();
        TriggerAddAction(temp, function OnMouseDown);
        TriggerRegisterMouseEvent(temp, MB_Right, EVENT_Down);
	
        temp = CreateTrigger();
        TriggerAddAction(temp, function OnMouseUp);
        TriggerRegisterMouseEvent(temp, MB_Right, EVENT_Up);
	
        temp = CreateTrigger();
        TriggerAddAction(temp, function OnWheelEvent);
        TriggerRegisterMouseWheelEvent(temp);
    }
}
Готовую систему перемещения камеры от первого лица (легко переделать для третьего лица) можно взять отсюда, в RenderEdge есть все необходимые функции для реализации.
прикреплены файлы
ELB359 #127 - 2 года назад 0
ENAleksey, я про то, что бы эти новые нативки JNGP видел. Возможно ли?
darkowlom #128 - 2 года назад (отредактировано ) 0
ELB359, он их и так видит, прописываешь в коде карты
native void CtrlSetText(int id, string text, bool bWrap)
ELB359 #129 - 2 года назад 0
darkowlom, я не так выразился, автодополнение в JNGP знает только стандартные функции.
darkowlom #130 - 2 года назад 0
ELB359, зачем это нужно? подсветка нативки? Толку мало
Lotus101 #131 - 2 года назад (отредактировано ) 0
ENAleksey:
Кстати, а нет ли планов как-то объединить мод с JNGP?
Для подключения 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

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
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
Постарайтесь склеиться с mix файлом. Он вариком автоматически подгружается, так что думаю, что есть шанс разобраться и вклеить туда запуск своего кода
Пробовал, но что-то не получалось, возможно, из-за того, что загрузка mix файлов происходит после создания Direct3D, а для работы мода нужно перехватить эту функцию до её вызова.
Возможно, сделаю два способа внедрения RenderEdge: (Или лучше оставить только один вариант?)
  • Запуск через .exe;
  • Внедрение библиотеки в игру с помощью d3d8.dll/d3d9.dll в паке с варкрафтом.
Я не силен в джассе, но преобразовать в свою карту умею. Мне бы хотелось добавить в карту систему перемещения камеры от 3 лица на правую кнопку мыши и чтобы она двигалась плавно за героем, и передвижение героя на клавиши wasd, можете ли вы добавить это в мод или функции написать?
Я уже добавил вращение и приближение камеры при зажатом Ctrl и правой клавише мыши. Выложу обновлённую карту-пример вместе со следующей версией мода. Но если надо сейчас, то вот код (ещё изменится):
» Камера
library Camera initializer Camera_Init
{
    private float facing = 0.0;
    private float aoa = 0.0;
    private float curCamDist = 0.0;

    private float cameraTime = 0.03125;
    private float sens = 0.05;

    private bool bRBM = false;
    private bool bCtrlPressed = false;


    private void OnMouseMove()
    {
        if (bCtrlPressed && bRBM)
        {
            int centerX = GetWindowWidth()/2;
            int centerY = GetWindowHeight()/2;
            float deltaX = I2R(centerX - GetMouseX()) * sens;
            float deltaY = I2R(centerY - GetMouseY()) * sens;
            
            if (GetMouseX() != centerX)
            {
                facing += deltaX;
                if (facing > 360.0)   { facing -= 360.0; }
                elseif (facing < 0.0) { facing += 360.0; }

                SetCameraFieldForPlayer(Player(0), CAMERA_FIELD_ROTATION, facing, cameraTime);
            }
            
            if (GetMouseY() != centerY)
            {
                aoa += deltaY;
                if (aoa > 360.0)     { aoa = 360.0; }
                elseif (aoa < 275.0) { aoa = 275.0; }
                
                SetCameraFieldForPlayer(Player(0), CAMERA_FIELD_ANGLE_OF_ATTACK, aoa, cameraTime);
            }
            
            SetMousePos(centerX, centerY);
        }
    }

    private void OnKeyboardDown()
    {
        if (GetTriggerKey() == 17 && !IsKeyDown(1) && !IsKeyDown(2))
        {
			curCamDist = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE);
            BlockMouse(true);
            //ShowCursor(false);
            bCtrlPressed = true;
        }
    }

    private void OnKeyboardUp()
    {
        if (GetTriggerKey() == 17)
        {
            BlockMouse(false);
            //ShowCursor(true);
            bCtrlPressed = false;
        }
    }
                
    private void OnMouseDown()
    {
        bRBM = true;
        if (bCtrlPressed)
        {
            facing = GetCameraField(CAMERA_FIELD_ROTATION) * bj_RADTODEG;
            aoa = GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK) * bj_RADTODEG;
            SetMousePos(GetWindowWidth()/2, GetWindowHeight()/2);
        }
    }
            
    private void OnMouseUp()
    {
        bRBM = false;
    }

    private void OnWheelEvent()
    {
        if (bCtrlPressed)
        {
            curCamDist -= I2R(GetWheelDelta()) * 0.5;
            if (curCamDist < 300.0)
            {
                curCamDist = 300.0;
            }
            elseif (curCamDist > 3000.0)
            {
                curCamDist = 3000.0;
            }
            SetCameraFieldForPlayer(Player(0), CAMERA_FIELD_TARGET_DISTANCE, curCamDist, cameraTime);
        }
    }

    //===========================================================================
    private void Camera_Init()
    {
        trigger temp = CreateTrigger();
        TriggerRegisterTimerEvent(temp, cameraTime, true);
        TriggerAddAction(temp, function OnMouseMove);
        //TriggerRegisterMouseMoveEvent(temp);

        temp = CreateTrigger();
        TriggerAddAction(temp, function OnKeyboardDown);
        TriggerRegisterKeyEvent(temp, KEY_Any, EVENT_Down);

        temp = CreateTrigger();
        TriggerAddAction(temp, function OnKeyboardUp);
        TriggerRegisterKeyEvent(temp, KEY_Any, EVENT_Up);
	
        temp = CreateTrigger();
        TriggerAddAction(temp, function OnMouseDown);
        TriggerRegisterMouseEvent(temp, MB_Right, EVENT_Down);
	
        temp = CreateTrigger();
        TriggerAddAction(temp, function OnMouseUp);
        TriggerRegisterMouseEvent(temp, MB_Right, EVENT_Up);
	
        temp = CreateTrigger();
        TriggerAddAction(temp, function OnWheelEvent);
        TriggerRegisterMouseWheelEvent(temp);
    }
}
Готовую систему перемещения камеры от первого лица (легко переделать для третьего лица) можно взять отсюда, в RenderEdge есть все необходимые функции для реализации.
Ок спасибо, вот еще что думаю, можно ли сделать как в шутере за счет вашей функции определения положения мышки? Я просто сам не могу придумать как сделать полет пули в выбранную точку на экране, а если это обычный предмет, то чтобы он еще падал со временем. И подскажи пжл как установить этот шарпкрафт, на том сайте вроде как нету пояснений для установки.
ELB359 #132 - 2 года назад 0
Lotus101, думаю, варкрафт слишком неудобен для этого, почему бы юнити не использовать?
Lotus101 #133 - 2 года назад 0
ELB359:
Lotus101, думаю, варкрафт слишком неудобен для этого, почему бы юнити не использовать?
Хочу сделать рпг картой с такой камерой, но там у парочки героев будет скил кинуть кинжал, ну и будет тупо если он просто полетит прямо от героя.
ENAleksey #134 - 2 года назад 0
Lotus101, посмотри эту систему, либо сделай сам. Для движения снарядов нужно написать всего-лишь одну-две формулы. Ещё можешь посмотреть наработки для Unreal Engine, Unity, либо прочитать книги по игровой физике.
Lotus101 #135 - 2 года назад 0
ENAleksey:
Lotus101, посмотри эту систему, либо сделай сам. Для движения снарядов нужно написать всего-лишь одну-две формулы. Ещё можешь посмотреть наработки для Unreal Engine, Unity, либо прочитать книги по игровой физике.
Спасиб, а как установить и пользоваться sharpcraft знаешь?
ssbbssc #136 - 2 года назад 0
На скринах с гером на панели приказов от нас замазали что-то вкусное
ENAleksey #137 - 2 года назад (отредактировано ) 0
ssbbssc, если вы про миникарту, то это я случайно нажал на кнопку скрытия ландшафта и долго не мог понять, в чём дело :)
Кет #138 - 2 года назад 0
ENAleksey, про красные квадраты справа ятп
ENAleksey #139 - 2 года назад 0
Кет, а, это вообще старая версия.
Здесь я просто показал, что можно заменить стандартные кнопки приказов на свои.
ENAleksey #140 - 2 года назад (отредактировано ) 11
Кстати, вот пример того, как выглядит моя старая карта после переноса на RenderEdge (пока без графических улучшений и пост-эффектов) + демонстрация одной из предстоящих фичей:
прикреплены файлы
16GB #141 - 2 года назад 0
ENAleksey,
сколько фпс в игре? 30?
ENAleksey #142 - 2 года назад (отредактировано ) 4
16GB, 60 fps. Но это пока без улучшения графики, хотя, если постараться, то можно и после добавления шейдеров оптимизировать так, чтобы fps не уменьшился.
Простите, удалил, так как не туда запостил
karaulov #143 - 2 года назад (отредактировано ) 1
А как запустить это можно?! :)
Запускал из папки с игрой, из отдельной папки, с другого диска. Запускается обычный варкрафт и карта пример не открывается.
Версия игры 1.26a, Windows 7 x32
Запустилось с другого диска. Но лучше бы я не запускал. Загрузилось главное меню, я нажал "выйти", рабочий стол подвис, диспетчер задач не открывался пришлось перезагружать кнопкой. 2 РАЗА! :)
xZUKMANx #144 - 2 года назад 0
karaulov:
А как запустить это можно?! :)
Запускал из папки с игрой, из отдельной папки, с другого диска. Запускается обычный варкрафт и карта пример не открывается.
Версия игры 1.26a, Windows 7 x32
Запустилось с другого диска. Но лучше бы я не запускал. Загрузилось главное меню, я нажал "выйти", рабочий стол подвис, диспетчер задач не открывался пришлось перезагружать кнопкой. 2 РАЗА! :)
У меня похожая проблема. Первый раз запускается обычный вк3, закрываю его. Запускаю второй раз - игра висит, переключаюсь на диспетчер задач и обратно в игру - все ок.
1.26, win10x64
darkowlom #145 - 2 года назад 0
xZUKMANx, насколько мне известно данная проблема уже решена
ENAleksey #146 - 2 года назад (отредактировано ) 9
xZUKMANx, да, она уже давно решена. Но я пока не знаю, стоит ли выкладывать текущую версию или нужно добавить ещё несколько возможностей (тени, пост-эффекты).

Пока реализовано следующее, осталось реализовать то, что помечено восклицательными знаками:
v0.1.1a
  ! 1.27a patch support;
  * Direct3D9 support;
  ! Windows XP support;
  ! HDR Rendering;
  ! Post Process Effects: ;
  * Блокировка функции CtrlGetFromPoint, если игра на паузе;
  * Показ GUI только после завершения загрузки карты;
  * Исправлена проблема, связанная с тем, что ширина и высота текстуры были перепутаны;
  * Исправлен слишком большой FoV камеры при использовании Windescreen Fix;
  * Fixed an issue where it was not possible to launch the application on the first try;
  ! Исправлены вылеты во время загрузки карты;
  * Updated FreeType to 2.7;
  * Launching more than one instance of war3.exe;
  * RenderEdge.dll optimization;
  * Fixed safety issues;
  * Updated project logo and app icon;
  * Improved debug log.
Lotus101 #147 - 2 года назад (отредактировано ) 0
Что-то я давно не заходил в редактор, в редакторе вкладке render edge есть, галочки стоят, сам рендер работает, но когда нажимаю проверка просто запускается рендер в главном меню, а самой проверки карты нет, раньше все было нормально, wehack.lua заново скачал и установил. Помогите исправить пожалуйста.
Поправка, переместил папку с рендером из рабочего стола в путь только с анлийскими буквами, теперь все нормально, как-то так)
Vitalik8 #148 - 2 года назад 2
на сколько готова следуйщая версия?
ENAleksey #149 - 2 года назад (отредактировано ) 5
Vitalik8, в данный момент работаю только над экспериментальной версией, добавляю пост-эффекты, дорабатываю шейдер освещения. Последняя неделя выдалась крайне продуктивной:
  • сегодня реализовал туман (линейный и два вида экспоненциального (в варкрафте они не работали корректно), завтра собираю добавить ещё один способ расчёта тумана, основного на высоте) и Туман Войны (позже ещё доработаю);
  • вчера реализовал сглаживание (SMAA) и Film Grain;
  • в начале недели добавил поддержку точечных источников света, теперь и они используют попиксельное освещение;
  • ранее улучшил качество теней, реализовал HDR Rendering, улучшил качество SSAO, добавил Lens Flares, LUT Color Correction и поддержку sRGB.
Нужно ещё много всего реализовать и улучшить то, что уже есть. Самое главное - оптимизировать способ отлова информации о моделях, которую я использую для рендеринга теней, так как именно этот этап самый прожорливый во всём pipeline'е.
Скоро выложу экспериментальную версию, мне понадобятся добровольцы с ПК различной мощности для тестирования мода на производительность.
А основную версию, думаю, не выложу пока не исправлю вылеты при запуске карт, которые используют функции отрисовки текста из RenderEdge. К этому времени, может быть, перенесу GUI систему на шейдеры.
Кристофер #150 - 2 года назад 2
ENAleksey, я доброволец с ПК очень низкой мощности. :)
mishanka122 #151 - 2 года назад 2
ENAleksey, Тоже могу подоброволить.
DemonoiD #152 - 2 года назад (отредактировано ) 4
А кто-нибудь случаем не видел микс-архива (года так 2014), когда пытались в war3 перекинуть переделанные модельки wow'a? Им вроде как раз рендера и освещения не хватало, поэтому они ушли в sc2. Тут графон, судя по скринам, стал как в mount and blade. И это для чертовой стратегии 2001 года.
С появлением шейдеров, нормального освещения и теней в этой модификации, можно переродить не только war3, но и небо и даже Аллаха.
Tumart #153 - 2 года назад 4
ENAleksey, вот такой вопрос. Могли бы вы сделать отдельную версию с минимальным набором функционала на основе РБ и инжекта в саму карту, чтобы все работало без дополнительных ресурсов? Расчет для обычных карт, чтобы можно было выполнять такие действия как полностью скрыть интерфейс/отображение стандартных текстов типа Меню, Атака и прочее(также блокировка подобных кнопок), отрисовка нестандартного интерфейса/текста, отлов событий клавиатуры/мыши, получение координат курсора/текущего разрешения и т.д. Был бы очень признателен(думаю не я один).
Lotus101 #154 - 2 года назад 0
Тоже не прочь протестировать, пк немого выше средней мощности.
DemonoiD:
А кто-нибудь случаем не видел микс-архива (года так 2014), когда пытались в war3 перекинуть переделанные модельки wow'a? Им вроде как раз рендера и освещения не хватало, поэтому они ушли в sc2. Тут графон, судя по скринам, стал как в mount and blade. И это для чертовой стратегии 2001 года.
С появлением шейдеров, нормального освещения и теней в этой модификации, можно переродить не только war3, но и небо и даже Аллаха.
Не знаю про микс патч, но тебе может это понравится
прикреплены файлы
DemonoiD #155 - 2 года назад (отредактировано ) 2
Lotus101, микс-архив! Это просто архив с моделями и иконками, которые заменяют стандартные модели и иконки во всех картах war3. Фактически, полностью меняют графику.
Ну вот и опять же, твой скрин. Были бы тени, немного "мыльца" и нормальное небо, я бы не узнал в нем war3. А прикинь, как божественно все это бы смотрелось с видом сверху?
Alexander12 #156 - 2 года назад 4
Tumart:
ENAleksey, вот такой вопрос. Могли бы вы сделать отдельную версию с минимальным набором функционала на основе РБ и инжекта в саму карту, чтобы все работало без дополнительных ресурсов? Расчет для обычных карт, чтобы можно было выполнять такие действия как полностью скрыть интерфейс/отображение стандартных текстов типа Меню, Атака и прочее(также блокировка подобных кнопок), отрисовка нестандартного интерфейса/текста, отлов событий клавиатуры/мыши, получение координат курсора/текущего разрешения и т.д. Был бы очень признателен(думаю не я один).
Если кто-то убедлит рубатл вернуться на 1.26, либо большенство картостроителей останутся на 1.26, то займусь данным вопросом.
ENAleksey #157 - 2 года назад (отредактировано ) 15
Были бы тени, немного "мыльца" и нормальное небо, я бы не узнал в нем war3
Так? :)
Сглаживание плохо работает с хроматическими аберрациями, вот скриншоты без них:
А вот туман:
Могли бы вы сделать отдельную версию с минимальным набором функционала на основе РБ и инжекта в саму карту, чтобы все работало без дополнительных ресурсов?
Можно сделать, но только без графических фишек, в том числе без отрисовки нового интерфейса, так как хук на direct3d нужно ставить при инициализации игры, а с помощью РБ библиотеку можно подгрузить только при инициализации карты. Я уже выкладывал карту на РБ, которая внедряла мою библиотеку с widescreen fix'ом:
» раскрыть
awesomesk1ll, да, здесь нет ничего сложного, для начала экспортируем dll из карты, а потом загружаем её с помощью LoadLibraryA. Сейчас скину карту с загрузкой моей библиотеки, в которой реализован Widescreen Fix.

Скачать (поддерживаются версии 1.26a и 1.27а).
Правда, я сделал инициализацию библиотеки с помощью вызова экспортируемой функции из dll, чтобы передать в неё версию варкрафта, но это можно делать и внутри библиотеки: вызывать только LoadLibraryA, а всё остальное делать в теле функции DllMain.
прикреплены файлы
Это сообщение удалено
Karp #159 - 2 года назад 3
DemonoiD #160 - 2 года назад (отредактировано ) 0
ENAleksey, ты главное скажи, что все это отрисовывается в реальном времени и тратит очень мало ресурсов. А так же может легко поставится поверх war3 без нарушения "лицензии" в виде замены библиотеки или чего-то подобного.
Скриншоты - это конечно хорошо, но я могу модельками так же сделать ;)
Поверх war3 для всех карт*
Tiodor #161 - 2 года назад 2
фпс: 6, не очень вдохновляет)
DemonoiD:
Скриншоты - это конечно хорошо, но я могу модельками так же сделать ;)
хотел бы я глянуть как можно так просто моделькиами сделать)
Tumart #162 - 2 года назад (отредактировано ) 0
ENAleksey, жаль конечно. Без отрисовки пользовательского интерфейса это теряет смысл, по крайней мере для меня (
ELB359 #163 - 2 года назад (отредактировано ) 0
Это все здорово, однако, больше жду расширения именно скриптовой части - все эти новые нативки. Кстати, я так и не получил ответа, как понять, какой игрок нажал на клавишу?
DemonoiD #164 - 2 года назад (отредактировано ) 0
Tiodor, берешь модельки тени и вставляешь, без задней мысли, выкладывая из них любую тень.
Туман? Изменение цвета тумана войны тоже возможно. Будет выглядеть примерно так же.
Единственное чего не было - это мыльца. Ибо war3 для хардкорных геймеров, а не консольщиков.
Но и это можно обойти, если использовать качественные модели и правильный ракурс.
ENAleksey #165 - 2 года назад (отредактировано ) 3
хотел бы я глянуть как можно так просто моделькиами сделать)
Команда Warcraft 3 Reborn так и делала:
как понять, какой игрок нажал на клавишу?
Данные, возвращаемые функциями GetTriggerKey, TriggerRegisterKeyEvent, будут действовать для каждого игрока по отдельности. С их помощью не получится узнать, какую кнопку нажал другой игрок, но можно отправлять данные на сервер или просто синхронизировать, например, с помощью юнитов (при нажатии клавиши создаём юнита с рав-кодом, зависящим от нажатой клавиши). Если вы имели ввиду, как сделать так, чтобы функции срабатывали только у определённого игрока, то просто сравниваем с GetLocalPlayer().
прикреплены файлы
DemonoiD #166 - 2 года назад 0
ENAleksey, мы можем найти все модельки этой команды и запилить за пару дней обновленный war3 с твоими функциями теней и мыльца с помощью одного mpq и библиотеки? Я готов написать всем в мире обзорщикам, чтобы они пропиарили xgm и постримили такой war.
ENAleksey #167 - 2 года назад (отредактировано ) 0
DemonoiD, нет, это их проект, для начала нужно спросить разрешение у них самих. Они работают над своей версией библиотеки и я им иногда помогаю. Как только я закончу работу над RenderEdge, выложу исходники в открытый доступ, кто захочет, сможет модифицировать код и использовать у себя в проектах.
DemonoiD #168 - 2 года назад 0
ENAleksey, они вроде перешли над sc2. А я хочу обновленный war3 :(
darkowlom #169 - 2 года назад 3
DemonoiD, мы будем выпускать мод и на старкрафт и на варкрафт, в соответствующей последовательности
DemonoiD #170 - 2 года назад 3
darkowlom, тогда я счастлив и спокоен. Делайте уже быстрее. Прошло почти 4 года. Я не хочу умереть раньше, чем увижу новое солнце Лордерона. Говорят, на небесах, все только о нем и говорят. Не хочу выглядеть дураком
Lotus101 #171 - 2 года назад 0
Alexander12:
Если кто-то убедлит рубатл вернуться на 1.26, либо большенство картостроителей останутся на 1.26, то займусь данным вопросом.
А чем 1.27б плох? Официальные сервера и рубатл на нем сидят.
Alexander12 #172 - 2 года назад (отредактировано ) 2
чем 1.27б плох? Официальные сервера и рубатл на нем сидят.
там нет доступ на запись в память, поэтому можно сделать на 1.26.. да народ с рубатла уходят уже из за патча. за 1.26 - будующее.
ENAleksey, а что с фпсом?
Lotus101 #173 - 2 года назад 0
Alexander12:
чем 1.27б плох? Официальные сервера и рубатл на нем сидят.
там нет доступ на запись в память, поэтому можно сделать на 1.26.. да народ с рубатла уходят уже из за патча. за 1.26 - будующее.
Может близзарды заметят ваш мод и оптимизируют будущие патчи под него, учитывая что они потихоньку стали выпускать патчи
Alexander12 #174 - 2 года назад 0
Lotus101:
Alexander12:
чем 1.27б плох? Официальные сервера и рубатл на нем сидят.
там нет доступ на запись в память, поэтому можно сделать на 1.26.. да народ с рубатла уходят уже из за патча. за 1.26 - будующее.
Может близзарды заметят ваш мод и оптимизируют будущие патчи под него, учитывая что они потихоньку стали выпускать патчи
Зачем ? на 1.27b + ничего не перенесешь, в том числе и отрисовку интерфейса, без внешних прог. и на 1.26 можно сделать больше, чем близард
ENAleksey #175 - 2 года назад 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 - 2 года назад 0
ENAleksey, я думал, такой угол обзора и был задуман :'(
ENAleksey #177 - 2 года назад (отредактировано ) 0
EfReeZe, я его исправил, но не сильно) Я просто попытался подогнать значения так, чтобы по вертикали поле зрения было таким же, как и без фикса.
Кристофер #178 - 2 года назад 0
ENAleksey, при нажатии на галочки "Attach unit" и "Show text" вылезает фатал. В остальном всё отлично. :)
ENAleksey #179 - 2 года назад (отредактировано ) 0
Кристофер, попробуй запустить игру в debug режиме, после этого повтори то, что привело к вылету, и скинь мне файл RenderEdge.log в личку.
DemonoiD #180 - 2 года назад 2
ENAleksey, xpшка ещё вполне жива, особенно в деревнях. Так что поддержку хотелось бы, но в последний момент.
Lotus101 #181 - 2 года назад 0
Огромное спасибо авторам за новую версию, вращение и приближение камеры при зажатом ctrl, и самое главное за возможность запускать сразу несколько копий варкрафта, такую фичу долго искал, но нигде больше нету. Теперь можно тестировать карты одному) Просьба к вам, в дальнейшем добавить возможность включения мода в самом варкрафте, без запуска вашего приложения, хочется поиграть с исправленным соотношением по сети, но айкап, гарена и рубатл запускаются только через стандартный war3.exe
ENAleksey #182 - 2 года назад 0
Lotus101, привет, я уже скидывал версию на основе Memory Hack с Widescreen Fix:
xgm.guru/p/renderedge/basic?postid=340425#comment157 (в конце комментария)
Скорее всего не будет работать по сети, но зато не надо запускать игру через сторонний лончер.
Кристофер #183 - 2 года назад 0
ENAleksey, т.е., вращение камеры невозможно будет использовать в мультиплеерных картах?
ENAleksey #184 - 2 года назад (отредактировано ) 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 - 2 года назад 0
ENAleksey, может лучше свой движок делать?)
awesomesk1ll #186 - 2 года назад 2
На айкапе можно как то запустить это дело? интересует анлимит фпс и графон посимпотичнее :) (освещение и другие плюшки)
NCrashed #187 - 2 года назад 6
ENAleksey, только недавно ознакомился с проектом. Это потрясающий результат, движок визуально теперь выглядит на современном уровне. И очень рад, что варкрафт сообщество ещё не померло.
PK_demon #188 - 2 года назад 0
Прочитал вроде все хорошо, но так и не понял - а для какого патча?
А то у меня крашит игра при изменение/включении некоторых функций в карте-примере.
Стоит 1.26 патч, могу только галочку с показать/скрыть текст жмакать.
Остальные две - фатал.
DemonoiD #189 - 2 года назад 6
5 месяцев назад я написал, что графон стал как в mount and blade. Недавно скачал M&B. Забираю свои слова назад. Там графон хуже.
ENAleksey #190 - 2 года назад (отредактировано ) 11
DemonoiD, спасибо за такие слова. Кстати, экспериментальная версия уже готова, скоро выложу, а пока вот пара скриншотов:
прикреплены файлы
AlakFrost #191 - 2 года назад (отредактировано ) 0
С ФПС все так же? Имхо нормали на тайлах не самый лучший ход, спекулял и карты высот как в вове ещё бы было норм. Проблема тайлов в швах, нормал МАП и швы дадут адовую картинку.
DemonoiD #192 - 2 года назад (отредактировано ) 0
ENAleksey, круги збс. А вот земля чего-то блестит. Не сразу отличил от растекшегося от жары молочного шоколада. Надеюсь это можно поправить новой текстуркой земли.
Причем хочется добавить, что блеск от солнца очень и очень органично смотрится на крышах зданий.
А потом я ещё подумал. Может функцию к земле добавить? Ведь раскаленная пустыня все же блестит. И снег блестит. А вот земля как-то не очень. Возможность поставить пользователю, делающему карту, true/false на каждую типовую текстурину почвы было бы неплохо.
Кристофер #193 - 2 года назад 0
На деревьях чутка странно тень смотрится - как порченные выглядят.
ENAleksey #194 - 2 года назад (отредактировано ) 0
Xin, с выключенными пост-эффектами, точечными источниками света и включенными тенями выдаёт 100 фпс на моём слабом ноутбуке.
Xin, Кристофер, никакких швов на ландшафте не будет, если карты нормалей делать тайлящимися. В данном примере я использовал одну текстуру с нормалями для всех объектов:
DemonoiD, всё это настраивается, правда, на данный момент только для всех объектов одновременно, без индивидуальной настройки. Это будет реализовано после того, как я смогу найти способ записи и чтения кастомной информации в mdx файлах.
прикреплены файлы
AlakFrost #195 - 2 года назад 0
Окей. Как подключить карту нормалей к тому или иному объекту? Как вы это реализовали?
ENAleksey #196 - 2 года назад 0
Xin, я и говорю, что пока никак) Для всех объектов используется одна и та же текстура нормалей, я пока не могу различать объекты/модели.
Хотя я могу отличить только юнитов от ландшафта, а на самом ланде не могу определить какой тайл сейчас используется.
AlakFrost #197 - 2 года назад 0
Хмм понято. Просто лично по моему мнению идеальный вариант будет вывести данную надстройку на уровень того, что сделали близзард с вовом, хотя движек один и тот же, что ВОВ что вар3. Не вижу большого смысла париться с нормально мапами в целом.
ENAleksey #198 - 2 года назад (отредактировано ) 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 - 2 года назад (отредактировано ) 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 - 2 года назад (отредактировано ) 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.
прикреплены файлы
alexprey #201 - 2 года назад 0
Огонь! И не надо извращаться с глючным DGUI :D
Кет #202 - 2 года назад (отредактировано ) 0
только надо вынудить игрока установить рендер эдж =/
alexprey #203 - 2 года назад 0
Кет, впаривать не карту, а полноценную игру) Как доту первую впаривают сразу вместе с кастомным варом
ENAleksey #204 - 2 года назад (отредактировано ) 3
Извиняюсь, забыл проверить выравнивание относительно других элементов UI. Исправлено. Также исправлено отображение неправильной версии RenderEdge (v0.2.2a) в левом верхнем углу.

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

  • Исправлено выравнивание относительно других элементов интерфейса.
» Используемый код
function TestAlignment takes nothing returns nothing
    local integer parentId = 1000 // -1

    call CtrlNew(1000, 100, 200, 400, 400)
    call CtrlSetTexture(1000, "Textures\\white.blp")
    call CtrlSetColor(1000, 0xA0FFFFFF)

    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, parentId, ALIGN_TOPLEFT)
    call CtrlSetAlignment(1002, parentId, ALIGN_TOP)
    call CtrlSetAlignment(1003, parentId, ALIGN_TOPRIGHT)
    call CtrlSetAlignment(1004, parentId, ALIGN_LEFT)
    call CtrlSetAlignment(1005, parentId, ALIGN_CENTER)
    call CtrlSetAlignment(1006, parentId, ALIGN_RIGHT)
    call CtrlSetAlignment(1007, parentId, ALIGN_BOTTOMLEFT)
    call CtrlSetAlignment(1008, parentId, ALIGN_BOTTOM)
    call CtrlSetAlignment(1009, parentId, ALIGN_BOTTOMRIGHT)
endfunction
прикреплены файлы
ENAleksey #205 - 2 года назад (отредактировано ) 7

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

  • Добавлена новая native функция SetPortrait;
  • Функция CtrlSetSize теперь не изменяет ширину или высоту, если вы установите соответствующий аргумент равным -1;
  • Изменено имя функции CtrlSetAlignment на CtrlSetAnchor;
  • Изменён способ исправления ширины полосок здоровья;
  • Исправлено выравнивание динамических элементов по отношению к другим элементам пользовательского интерфейса;
  • Исправлена высота wrapped текста;
  • Исправлена высота wrapped текста при динамическом изменении ширины;
  • Исправлены проблемы с безопасностью. Если жирный, курсивный или полужирный курсивный шрифт недоступен, используется обычный шрифт.
Также, карта-пример была переписана, используя только vJass для большей совместимости.
Melissa #206 - 2 года назад 0
Можно сделать чтобы при галочке Default Render можно было скрыть интерфейс "disable ui"? Хочу поиграть в Dualism без всякого интерфейса и с возможностью кликать куда угодно, но без галки Default Render 13 фпс...
ENAleksey #207 - 2 года назад (отредактировано ) 1
Melissa, немного не в ту тему написал.
В экспериментальной версии эта галочка просто отключает отображение интерфейса, при этом на все кнопки всё ещё можно нажать. Я скоро добавлю функцию для полного скрытия интерфейса в основную версию, но не факт, что в следующую. Могу сделать отдельную версию, точнее модификацию Widescreen fix, но при этом будут проблемы, например будет скрыт весь интерфейс, даже меню.
ENAleksey #208 - 2 года назад (отредактировано ) 3

Обновление v.0.2.5a

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

Функция CtrlSetFont(int id, string fontName, int iSize) устанавливает шрифт для указанного элемента интерфейса. По умолчанию используется Consolas с высотой 13.
» Код
private function TestFonts takes nothing returns nothing
    call CtrlNew(1001, 400, 300, 0, 0)
    call CtrlSetFont(1001, "Arial", 16)
    call CtrlSetText(1001, "Arial 16", false)

    call CtrlNew(1002, 400, 335, 0, 0)
    call CtrlSetFont(1002, "Consolas", 11)
    call CtrlSetText(1002, "Consolas 11", false)

    call CtrlNew(1003, 400, 350, 0, 0)
    call CtrlSetFont(1003, "Segoe Script", 20)
    call CtrlSetText(1003, "Segoe Script 20", false)

    call CtrlNew(1004, 500, 315, 0, 0)
    call CtrlSetFont(1004, "Times New Roman", 18)
    call CtrlSetText(1004, "Times New Roman 18", false)

    call CtrlNew(1005, 400, 380, 0, 0)
    call CtrlSetFont(1005, "Jokerman", 35)
    call CtrlSetText(1005, "Jokerman 35", false)

    call CtrlNew(1006, 400, 440, 0, 0)
    call CtrlSetFont(1006, "Harrington", 30)
    call CtrlSetText(1006, "Harrington 30", false)
endfunction

Функция GUILoadFont(string fileName) загружает в память шрифт из карты или архивов игры.
Например, так можно загрузить стандартный шрифт варкрафта:
call GUILoadFont("Fonts\\FRIZQT__.ttf")
Затем его можно будет установить для какого-нибудь элемента интерфейса (его имя Nimrod MT). Единственное - стандартный шрифт варкрафта не поддерживает Bold и Italic.
прикреплены файлы
Кет #209 - 2 года назад (отредактировано ) 0
ENAleksey, имхо было бы логичней стандартным сделать Fritz Quadrata (шрифт интерфейса WC3). Ты его не используешь, потому что там одно начертание?
ENAleksey #210 - 2 года назад (отредактировано ) 0
Кет, сначала так и хотел сделать. Да, отказался из-за того, что доступно только одно начертание, при этом шрифт ещё и выглядит не очень приятно (но это чисто мое мнение).
FTFire #211 - 2 года назад 0
ENAleksey, Можешь сделать скрытие интерфейса файлом?Наподобие widescreen fix,буду очень благодарен.
ENAleksey #212 - 1 год назад (отредактировано ) 6
Clamp, NanO, доступа к компьютеру сейчас нет, когда приеду домой (10 числа), смогу точнее написать код:
» раскрыть
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


integer address_SetFramePoint = GameBase + 0x606770 // 1.26a
integer address_GetGameUI = GameBase + ? // Нужно будет поискать адрес через IDA Pro


function SetFramePoint takes integer pFrame, integer point, integer pParentFrame, integer relativePoint, real offsetX, real offsetY returns nothing
	call CallThisCallWith6Args(address_SetFramePoint, pFrame, point, pParentFrame, relativePoint, cleanInt(realToIndex(offsetX)), cleanInt(realToIndex(offsetY)), 1)
endfunction

function GetGameUI takes integer a1, integer a2 returns nothing
    call CallFastCallWith2Args(address_GetGameUI, a1, a2)
endfunction


function HideBlackBorders takes nothing returns nothing
    // точно не помню, как в мемхаке работать с указателями, вроде бы, через массив Memory
	local integer pBordersFrame = Memory[Memory[GetGameUI(0, 0)/4]/4 + 239] + 180 // *((int*)GetGameUI(0, 0) + 239) + 180
	local integer pWindowFrame = GetGameUI(0, 0) + 180

	call SetFramePoint(pBordersFrame, ANCHOR_TOPRIGHT, pWindowFrame, ANCHOR_TOPRIGHT, 0.0, 0.0) // верхняя граница
	call SetFramePoint(pBordersFrame, ANCHOR_BOTTOMLEFT, pWindowFrame, ANCHOR_BOTTOMLEFT, 0.0, 0.0) // нижняя граница
endfunction
NanO #213 - 1 год назад 0
Подскажи, что в написанном коде надо доработать, чтобы оно заработало и какой конечный результат получится :)
ENAleksey #214 - 1 год назад 0
NanO, нужно как-то переписать эту строку на jass с помощью массива Memory, там вроде где-то нужно делить на 4, где-то умножать, чтобы получить указатель или разыменовать его:
local integer pBordersFrame = *((int*)GetGameUI(0, 0) + 239) + 180
Можно спросить у Лича или Караулова.
NanO #215 - 1 год назад 0
ENAleksey:
NanO, нужно как-то переписать эту строку на jass с помощью массива Memory, там вроде где-то нужно делить на 4, где-то умножать, чтобы получить указатель или разыменовать его:
local integer pBordersFrame = *((int*)GetGameUI(0, 0) + 239) + 180
Можно спросить у Лича или Караулова.
Я просто не особо шарю в jass, никогда не ковырял его.
Напиши плиз их ники точно, я постучусь в ЛС попрошу помочь.
Подскажи, какой в итоге результат то?)
Оно уберет интерфейс или что?
Как примерно будет выглядеть?
ENAleksey #216 - 1 год назад (отредактировано ) 3
Я уже написал Караулову, может быть ответить.
В результате пропадут чёрные полосы сверху и снизу экрана, будет выглядеть примерно так:
NanO #217 - 1 год назад 0
А какие минусы?
Не следил просто за разработкой последние года, не в курсе всех этих вещей.
Для мемхака используется внешнее ПО или нет?
То есть достаточно просто написать код и иницилизировать его в карте, или вместе с картой будет необходимо предоставлять конечному пользователю дополнительное ПО?
ENAleksey #218 - 1 год назад (отредактировано ) 3
Дополнительное ПО не нужно распространять вместе с картой (но можно). Просто копируем нужный код в карту и сохраняем.
NanO #219 - 1 год назад 0
Угу, ознакомился.
То есть для моих целей нужна просто либа, которую загружаем в карту, и компилятор, который нужен для разработки.
Слушай, очень крутая вещь.
Оно в мультиплеере типа тоже работает? (мне не надо, чисто любопытно)
Надеюсь, чувак ответит и смогу вечером прикрутить к своему квесту. Было бы очень здорово дать больше пространства игроку + к тому же, как я понимаю, если убрать интерфейс, то площадь рендеринга(поправь, если не так называю) увеличится и это так же поможет с проблемой вайд скрина (изображение растянутое)?
ENAleksey #220 - 1 год назад 0
NanO, если не к спеху, то я могу сделать dll, которая будет содержать widescreen fix и убранные полоски. Эту библиотеку можно будет просто импортировать в карту, а с помощью мемхака подгружать её в игру. Но домой приеду только 10 августа.
Я такое уже делал, правда без удаления полосок. Посмотри 157 комментарий из этой темы, там есть карта для загрузки под спойлером.
NanO #221 - 1 год назад 0
ENAleksey:
NanO, если не к спеху, то я могу сделать dll, которая будет содержать widescreen fix и убранные полоски. Эту библиотеку можно будет просто импортировать в карту, а с помощью мемхака подгружать её в игру. Но домой приеду только 10 августа.
Я такое уже делал, правда без удаления полосок. Посмотри 157 комментарий из этой темы, там есть карта для загрузки под спойлером.
Там чисто вайдскрин фикс?
Не особо к спеху, к 10 августа подождет, это все равно не главное.
Как будет что-то готовое, сделаю видео того, что делаю, скину тебе, если заинтересует, то поможешь с этим dll :)
Deal?
Кет #222 - 1 год назад 0
ENAleksey, а можно таким образом какие-то Custom Natives твои импортировать?
karaulov #223 - 1 год назад (отредактировано ) 0
Memory[Memory[GetGameUI(0, 0)/4]/4 + 239]/4 + 45
наверно так? если нужно через Memory массив читать
Адрес должен получится для чтения через Memory[]
или
Memory[Memory[GetGameUI(0, 0)/4]/4 + 239] + 180
если нужен реальный адрес
ENAleksey #224 - 1 год назад 0
NanO, ок.
Кет, вряд ли, так как jass код начинает выполняться только при инициализации карты, следовательно dll с нативками подгрузится ещё позже, а добавлять их можно только до инициализации.
Clamp #225 - 1 год назад (отредактировано ) 0
dll с нативками подгрузится ещё позже
Подгрузка много времени занимает?
Если нет, то можно попробовать в config (эта функция вызывается при при выборе карты в списке) вписать действие на подгрузку и небольшую задержку.

В теории при подгрузке карты в списке карт игра подвиснет на время задержки и подгрузит dll.
ENAleksey #226 - 1 год назад (отредактировано ) 0
Clamp, карта просто не запустится, будет вылетать в меню, если в ней используются кастомные нативки, которые ещё не добавлены в варкрафт, а с помощью мемхака их можно добавить только после загрузки карты.
Clamp #227 - 1 год назад 0
ENAleksey, смотри: функция "config" содержит в себе такие вещи, как название карты, количество игроков на карте и т.д., и вызывается при выборе карты в списке карт, даже не при создании лобби. При запуски карты из лобби вызывается функция "main", в неё действительно тыкаться мало смысла даже в теории.
alexprey #228 - 1 год назад 0
Clamp, есть вероятность, что перед вызовом конфига и происходит проверка jass файла
Clamp #229 - 1 год назад 0
alexprey, сейчас уже не найду, давно было, но вроде как читал, что проверяется только код, который вызывается напрямую из "config" и "main", а всё, что вызывается через "ExecuteFunc" проверкой обходится.
Могу быть неправ, впрочем.
NanO #230 - 1 год назад 0
Не знаю как вы, но я жду 10-го числа и надеюсь получить отдельным ресурсом в рамках этого проекта наработку, чтобы убрать интерфейс :)
ENAleksey #231 - 1 год назад (отредактировано ) 1
NanO, отдельным ресурсом выкладывать не буду, я только обновлю код из моего комментария выше (а тебе уже помогу доработать код и добавить ещё несколько нужных фич). И этот код не убирает интерфейс полностью, а только скрывает чёрные полосы, хотя скрыть весь интерфейс тоже можно (посмотрите видео в начале темы).
Но у метода, который я сейчас использую, есть недостаток - скрывается абсолютно весь интерфейс, даже меню. Потом я его доработаю и добавлю функцию для частичного скрытия интерфейса в основную версию RenderEdge. Кстати любой элемент можно переместить или скрыть с помощью функции SetFramePoint (код выше), главное - знать его адрес. Вот результат использования этой функции:
ENAleksey #232 - 1 год назад (отредактировано ) 3
NanO, Clamp, готово. Работает только на версии 1.26a:
2 комментария удалено
FTFire #235 - 1 год назад 0
ENAleksey, Хотел спросить а перемещение элементов например мини-карты,инвентаря есть в MemoryHack?Если есть можешь подсказать код?
ENAleksey #236 - 1 год назад 0
FTFire, лучше задавать вопросы относительно MemoryHack в соответствующей теме.
Вот код для миникарты:
function SetMinimap takes real x, real y, real size returns nothing
    local integer pMinimapFrame = ReadGameUIArray(240) + 180
    local integer pParentFrame = ReadGameUIArray(263) + 180

    call SetFramePoint(pMinimapFrame, FRAME_BOTTOMLEFT, pParentFrame, FRAME_BOTTOMLEFT, x, 0.6 - y - size)
    call SetFramePoint(pMinimapFrame, FRAME_TOPRIGHT, pParentFrame, FRAME_BOTTOMLEFT, x + size, 0.6 - y)
endfunction
Про инвентарь не знаю, нужно искать либо в IDA Pro, либо методом подбора значения в функции ReadGameUIArray.
Nelloy #237 - 1 год назад (отредактировано ) 0
Возможно ли встроить весь GUI API внутрь карты? То есть без отдельной библиотеки или с распаковкой из самой карты
Кет #238 - 1 год назад 0
Nelloy, я уже две недели назад спрашивал -_- Ответ:
карта просто не запустится, будет вылетать в меню, если в ней используются кастомные нативки, которые ещё не добавлены в варкрафт, а с помощью мемхака их можно добавить только после загрузки карты.
Nelloy #239 - 1 год назад (отредактировано ) 0
Имел ввиду переписать нативки через мемхак, есть хотя бы теоретическая возможность?
Nelloy #241 - 1 год назад (отредактировано ) 0
Clamp, чтобы не привязываться к какому бы то ни было ресурсу, требующему отдельной установки
Как вариант выгружать библиотеку средствами мемхака, а нативки вызывать неявно через ExecuteFunc.
Второй вариант: собранную библиотеку внедрять в карту побайтно, сделав асемблерную вставку, должно работать, но надо знать куда втыкать
по идее есть 2 исхода для первого варианта, на первом запуске карты народ будет ловить десинк или же все сразу заведется
Так что думаю вполне реально сделать отрисовку кастомного UI таким образом
Clamp #242 - 1 год назад 0
Nelloy, нативки и так в игре есть, зачем их переписывать вообще?
Или ты про нативки RenderEdge?
Nelloy #243 - 1 год назад 0
Clamp, Конечно про него)
ENAleksey #244 - 1 год назад (отредактировано ) 2
Nelloy:
Возможно ли встроить весь GUI API внутрь карты? То есть без отдельной библиотеки или с распаковкой из самой карты
Караулов уже сделал это в своей библиотеке, нужно просто скачать её, импортировать себе в карту, а затем извлечь и загрузить её с помощью Memory Hack:
Как вариант выгружать библиотеку средствами мемхака, а нативки вызывать неявно через ExecuteFunc.
Можно в динамической библиотеке экспортировать нужные функции, а потом выполнять их как-то так:
address_GetWindowX = GetModuleProcAddress("RenderEdge_mini.dll", "GetWindowX")

function GetWindowX takes nothing returns integer
    return std_call1(address_GetWindowX, 0)
endfunction
Vitalik8 #245 - 1 год назад 0
На Windows 8.1 после сворачивании игры в варик не зайти чорный екран
ENAleksey #246 - 1 год назад 0
Vitalik8, покажи, пожалуйста, скрин папки с варкрафтом.
Vitalik8 #247 - 1 год назад 0
ENAleksey, вот
прикреплены файлы
ENAleksey #248 - 1 год назад 0
Vitalik8, а где RenderEdge.exe? Лучше все файлы RenderEdge поместить в отдельную папку. И ещё, скинь, пожалуйста, RenderEdge.log.
Vitalik8 #249 - 1 год назад 0
ENAleksey, убрал файлы и кинул скрин папки с RenderEdge и RenderEdge.log
ENAleksey, на Windows 7 все работало
прикреплены файлы
ENAleksey #250 - 1 год назад 0
Vitalik8, после переноса файлов в одну папку чёрный экран так же появляется?
Vitalik8 #251 - 1 год назад 0
ENAleksey, я не переносил файлы, а удалил с папки с варом, а сам RenderEdge запускал с отдельной папки
ENAleksey, говорю же на Windows 7 у меня все работало а вчера 8.1 поставил и вот такое
ENAleksey #252 - 1 год назад 0
Возможно, проблема может быть вызвана .mix файлам в папке с варкрафтом, попробуй убрать их оттуда.
Vitalik8 #253 - 1 год назад (отредактировано ) 0
ENAleksey, не из-за них, пробовал, скорее всего что винда 8.1
3 комментария удалено
Vitalik8 #257 - 1 год назад -1
Можешь добавить функцию что мол юнит находится в глубине, мелководье или суше?
Кет #259 - 1 год назад 2
Vitalik8, прошу читать и понимать, для чего вообще сделана эта библиотека. Это не тема «функции на заказ».