Идея не такая сложная, больше всего беспокоит построение квадратов для маневра боевой единицы, может у кого то были идеи или наработки?
На конкурс начинал пилить пошаговую головоломку с движением "по клеточкам". Игровое поле представлял в виде эдакого простейшего графа. Юниты могли передвигаться только между узлами графа, имеющими связь друг с другом, то есть только вдоль рёбер.
Собственно, если мы знаем в каком узле находится условный герой, то нам легко узнать какие узлы доступны ему для перемещения.
Не знаю как конкретно для шахмат, но, наверное, это типичное решение для подобных задач.
Ну приоритет не глобальный, это именно внутри одной модели порядок геосетов в бленд моде раскидать. Тестил когда-то, вроде работало так, как ожидается.
Priority Plane – Alpha-queued geosets can be made to draw in a specific order with relation to each other in the same model. The lower the value is, the sooner it is rendered. Values between -20 and 20 are regularly used.
Jack-of-shadow, про мдлвис ничего не могу сказать (скрин пеона сделан в ретере после включения Wrap Width/Wrap Height), но в развётке видно, что художник перебрал и слишком уверенно на край залез, так как небольшой сдвиг верхний вершин вниз убирает шов.
Да, шов приходит с другого края, ибо при включённом Wrap UV текстура обёртывается вокруг меша. А при отключённом шва не видно из-за того, что в варкрафте край текстуры растянётся, чтобы закрыть пустоту под развёрткой.
Вот в Maya постое отключение WrapUV не вылечивает шов полностью, так как там шов просто окажется прозрачным. Ну, по крайней мере, у меня так с пеоном вышло.
Но могу сказать, что по ощущениям, майа апи это какая-то прям уродская штука (возможно, так кажется после некоторого знакомства с апи блендера, которое более интуитивное что ли).
WellDoneTrooper, есть еще маловероятный вариант - поиграть с настройками графики, поставить высокие-средние-низкие и потестить, мб что-то влияет. Как моделек, так и текстурок
На дореф патчах настройки детализации текстур нормально работают только с текстурами с длинами сторон, равными степени двойки. В вопросе 1920x1080...
загрузка UI теперь перемещена в main(), что позволяет избежать появления дефолт интерфейса на долю секунды после запуска карты. Inject main/config from WE trigger code
подкорректирован рандом, теперь одинаковые фигуры могут выпадать не более двух раз подряд.
Нужно просто создать война на позиции казармы, и отправить его в другую точку. И повторять это пока не надоест.
Есть два варианта решения задачи по перемещению юнита из одной точки в другую: отдать юниту стандартный приказ двигаться в точку, или же самостоятельно реализовать функцию перемещения юнита в нужную позицию. Примитивнейшая реализация может выглядеть так:
скриншотов нет
function playCinematic()
createBarracks()
SetSkyModel("environment\\sky\\lordaeronsummersky\\lordaeronsummersky")
local t = CreateTimer()
TimerStart(t, 2, false, function()
CinematicModeBJ(true, GetPlayersAll())
createFootmans()
CameraSetupApplyForPlayer(true, gg_cam_Camera_002, Player(0), 0)
CameraSetupApplyForPlayer(true, gg_cam_Camera_003, Player(0), 15)
DestroyTimer(t)
end)
end
function createBarracks()
--если бараки уже стоят, то эта функция не нужна
local barracks = CreateUnit(Player(0), FourCC('hfoo'), 0, 0, bj_UNIT_FACING)
BlzSetUnitSkin(barracks, FourCC('hbar'))
SetUnitScale(barracks, 2, 2, 2)
SetUnitFacing(barracks, 300)
SetUnitAnimation(barracks, "stand work")
end
function createFootmans()
--здесь работаем с пехотинцами
local function createFootman()
--с каждым вызовом этой функции мы создаём нового пехотинца внутри казармы
--включаем для него проигрывание анимации
--и создаём таймер, в котором меняем его положение на карте
local f = CreateUnit(Player(0), FourCC('hfoo'), 0, 0, -90)
SetUnitPathing(f, false)
SetUnitAnimationByIndex(f, 26)
local x = GetUnitX(f)
local tFootman = CreateTimer()
TimerStart(tFootman, 0.015, true, function()
local y = GetUnitY(f)
if y < -3000 then
--при достижении крайней точки удаляем футмана
RemoveUnit(f)
DestroyTimer(tFootman)
return
end
SetUnitPosition(f, x, y - 1.5)
end)
end
createFootman()
local t = CreateTimer()
TimerStart(t, 1.5, true, function()
createFootman()
end)
end
Без конкретной модели сложно что-то точно сказать, но судя по ошибкам, очень похоже, что сцена экспортируется в формате mdx1000, поэтому War3ME на ней и сыпется. Если это так, то поможет отключение галочки Use SkinWeights при экспорте, либо использование War3 Model Editor v1.08 beta, который умеет открывать новые форматы.
открыть в War3ModelEditor и там натягивать текстуры
Текстуры прекрасно натягиваются в самом блендере, во вкладке MDL Material Settings. И в обеих всериях ретеры тоже.
Базовый пример для Reforged. Остерегайтесь залипаний клавиш!
тысячи строк кода
CamKeys = {
--задаём здесь желаемые клавиши на отдаление и приближение
up = OSKEY_ADD,
down = OSKEY_SUBTRACT
}
CamKeysShift = {
--здесь задаём расстояние, на которое будет сдвигаться камера каждый тик таймера
[CamKeys.up] = 7,
[CamKeys.down] = -7,
}
CamKeysState = {
[CamKeys.up] = false,
[CamKeys.down] = false,
}
function initCamKeys()
--инициализация триггоров на клавиши камеры и таймера опроса клавиш
local camTrigger, releaseCamTrigger = CreateTrigger(), CreateTrigger()
for _, value in pairs(CamKeys) do
BlzTriggerRegisterPlayerKeyEvent(camTrigger, GetLocalPlayer(), value, 0, true)
BlzTriggerRegisterPlayerKeyEvent(releaseCamTrigger, GetLocalPlayer(), value, 0, false)
end
TriggerAddCondition(camTrigger, Condition(controlCamKeys))
TriggerAddCondition(releaseCamTrigger, Condition(controlCamKeysRelease))
local t = CreateTimer()
TimerStart(t, 0.01, true, function() setCameraDistance() end)
end
function controlCamKeys()
CamKeysState[BlzGetTriggerPlayerKey()] = true
end
function controlCamKeysRelease()
CamKeysState[BlzGetTriggerPlayerKey()] = false
end
function setCameraDistance()
local shift = 0
for k, v in pairs(CamKeysState) do
local kShift = CamKeysShift[k]
if v then
shift = shift + kShift
end
end
if shift ~= 0 then
SetCameraFieldForPlayer( GetLocalPlayer(), CAMERA_FIELD_TARGET_DISTANCE, GetCameraField(CAMERA_FIELD_TARGET_DISTANCE) + shift, 0.00 )
end
end
Была идея сравнивать с реальным os.time там число и это работает на луа в рефе, скорее всего сравнение с GetTimeOfDay тоже фигня полная, но я это так и не проверил, потому что утратил интерес к данной теме.
os.time() же в секундах возвращает, тогда уж лучше os.clock(), перспективный вариант для фикса мог бы быть
» WarCraft 3 / Шахматы варкрафт 3
Не знаю как конкретно для шахмат, но, наверное, это типичное решение для подобных задач.
» WarCraft 3 / Шахматы варкрафт 3
» Помойка Макебы / Суицидальная атака на Maya API
» Classic Asset Kit Extention / Мастерская
Ред. Makeba
» Classic Asset Kit Extention / Мастерская
» WarCraft 3 / RMS Twilac Edition
Ред. Makeba
» WarCraft 3 / RMS Twilac Edition
» WarCraft 3 / Избавляемся от швов
» Помойка Макебы / Суицидальная атака на Maya API
Ред. Makeba
» WarCraft 3 / Избавляемся от швов
» Помойка Макебы / Суицидальная атака на Maya API
» WarCraft 3 / Белый экран вместо изображения загрузки
» WarCraft 3 / FRAMETRIS (тетрис на фреймах)
Прокрутить к ресурсу
» WarCraft 3 / Как сделать чтоб из казармы выходили воины во время кат сцены
Есть два варианта решения задачи по перемещению юнита из одной точки в другую: отдать юниту стандартный приказ двигаться в точку, или же самостоятельно реализовать функцию перемещения юнита в нужную позицию. Примитивнейшая реализация может выглядеть так:
» WarCraft 3 / Про ландшафт
» WarCraft 3 / Проблемы с экспортом из Блендера в Варкрафт
» WarCraft 3 / Проблемы с экспортом из Блендера в Варкрафт
Ред. Makeba
» WarCraft 3 / Отделения камеры
» WarCraft 3 / Как упростить работу с wordl editor lua?
» WarCraft 3 / Amy Rose (Sonic Heroes)
» WarCraft 3 / RMS Twilac Edition
» WarCraft 3 / RMS Twilac Edition
Прокрутить к ресурсу
» WarCraft 3 / "Пересадка мяса"
» Королевство Нубдерон / Комментарии XGM как смысл жизни #1
» WarCraft 3 / Замедление внутренних таймеров в Рефордже