Clamp #1 - 19 часов назад 1

» WarCraft 3 / Отлов уровня воды

Как вариант - покрасить всю глубокую воду определённым тайлом и отлавливать именно его.
Clamp #2 - 1 день назад 1

» WarCraft 3 / создание нового героя если уровень героя больше 50

Можно и так, я привык писать их как надо, а то ГОВНОКОДА полно
На самом деле, сущности с одинаковым назначением стоит держать в одном месте, но в GUI это по большому счёту фломастеры.
ApoloZ2:
как сделать чтобы только 1 раз высвечивал?
Действие - триггеры - Turn this trigger off.
Clamp #4 - 3 дня назад (отредактировано ) 0

» Dota 2 / Результаты конкурса героев Dota 2

На мой взгляд, самый классный герой получился у Toadcop (что неудивительно), остальные участники фантазию при разработке практически не применяли.
Самым качественным в плане фактической реализации считаю громовержца от Diaboliko, но преимущественно не из-за механик способностей, а из-за весьма грамотного применения мемхака в них.
Самый (и единственный) достойный подход к визуализации споосбностей показал quq_CCCP, здесь даже говорить нечего.
По балансу судить не берусь. По-хорошему, чтобы давать здесь хоть какую-нибудь оценку, нужно иметь груши для биться с личными и суммарными счётчиками DPS.

Также лично мне казалось, что "концепция" и "актуальность в доте" должны были быть разными пунктами. Разумеется, Баланар будет актуален в доте, ведь он уже в ней есть, но сама по себе концепция "а давайте переделаем то, что есть" не может представлять заметной ценности.
Clamp #5 - 4 дня назад 0

» Dota 2 / Результаты конкурса героев Dota 2

ну и офк залей сейчас своего героя идк
К окончанию конкурса не успел запилить визуал абилам, не успел => забил. Постараюсь на этой или следующей неделе допилить и выложить, но хз как получится, очень уж дофига дел запланировано. Могу описание залить :D
Clamp #6 - 4 дня назад 0

» Dota 2 / Результаты конкурса героев Dota 2

В видео за сталкера стоит "Баланс: 1/10", хотя говорится о 10. Ну ё-моё.

Ну и показывать спелы, не описывая их механику - такая себе идея, кмк.
У героя Toadcop'а даже ульт не показали.

Ололо, я разочарован, надо было отправить свою недоделку.
Clamp #7 - 4 дня назад (отредактировано ) 5

» WarCraft: Armies Of Azeroth / Главная страница

3 года уже делают
*Штирлиц ещё никогда не был так близок к провалу*
Clamp #10 - 6 дней назад 0

» WarCraft 3 / Проблема с работой библиотеки

пустые integer по дефолту равны
тому, что было в памяти на момент её выделения под переменную. Выделение памяти и её очистка - разные процессы, именно поэтому считается хорошим тоном задавать значения перед тем, как планируешь их использовать.
Clamp #11 - 6 дней назад (отредактировано ) 0

» WarCraft 3 / Магма

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

Господа, без обсуждений личных дел на публике, пожалуйста. Если эффект в базе - значит, он туда попал не просто так.
Clamp #12 - 6 дней назад (отредактировано ) 3

» WarCraft 3 / Магма

На гифке вспышка будто пролагивает в начале.
Волну лавы я бы сделал так, чтобы не строго на одной линии умирали источники частиц, а полукругом. Или как-нибудь бы избавился от вспышки по этой линии в конце, чтобы частицы просто затухали, долетая туда. Предлагаю сделать 2 вида частиц - первые со вспышкой, умирают в рандомные периоды, вторые - без вспышки, умирают строго через затухание на определённой дистанции.
Clamp #13 - 6 дней назад 0

» Clamp'ова кухня / Clamp's Physics Engine

хороший стиль, код реально чистый.
Посмотрев некоторые исходники, я пришёл к выводу, что это просто невероятный комплимент.
Clamp #14 - 6 дней назад (отредактировано ) 0

» WarCraft 3 / Конфликт имён, библиотеки, области

Не пользуйтесь scope, это deprecated фича vJass, она не несёт никакой практической пользы, только усложняет и запутывает структуру кода.
Clamp #16 - 1 неделю назад (отредактировано ) 0

» Clamp'ова кухня / Clamp's Physics Engine

обработка объектов идет в PhysObj
В нём писывается логика движения, однако свой .update() он самостоятельно никаким образом не вызывает.

Кстати, технически вектор "impulse" выражает m*v, поскольку в карте-примере из поста масса фактически не имеет значения (видимо, просто забыл удалить её из кода) и её хранение отдельным используемым скаляром приведёт только к увеличению числа рассчётов; при увеличении функционала, например, при добавлении взаимных столкновений, массу нужно будет вынести из вектора в отдельный скаляр, а вектор назвать "velocity". Показанная карта-пример, конечно, не лучшая из возможных, но, на мой взгляд, вполне адекватна (если оставить за скобками утверждение о полноценности модели в ней).

Попробую популярно пояснить лежащий в основе архитектуры подход.
Физический объект является описанием поведения игрового объекта (behavior; VisObj и DmgObj - тоже behavior по сути), он содержит в себе только те данные, которые касаются непосредственно связанного с физикой поведения игрового объекта (определение и движение объекта в пространстве), и никаких более. Этими данными являются: радиус-вектор, вектор импульса, радиус столкновений и логика движения. Последнюю в теории можно вынести из объекта, но тогда система несколько потеряет в модульности. Кроме того, хранить логику движения внутри метода полезно тем, что в случае её отсутствия/отключения у какого-либо объекта код движения даже читаться не будет.
Как абсолютно верно заметил Doc, результаты движения должны обрабатываться не в движимом теле или его компоненте, а в движущей системе, так как в результате перемещения игрового объекта он может вступить в те или иные взаимодействия с другими сущностями, обладающими физическим компонентом. Их сам по себе объект обработать не способен и не должен быть способен, он не "божественный".
Сам игровой объект - оболочка, через которую связаны все его компоненты. Система обработки ("стак" в GameField) обращается к нему с командой на апдейт, все взаимодействия между компонентами производятся в нём и нигде более.

Замечание про именование как причину ошибки было хорошим, однако в целом советую более вдумчиво анализировать архитектуру перед тем, как высказаться о её несостоятельности или неверном распределении функциональной нагрузки по её элементам.

Оптимизация это вообще дело последнее, которое выполняется уже после реализации всего, что хотели реализовать, поскольку добавлять что-нибудь еще к оптимизированному коду - это чистое мучение.
В карте-примере отсутствует преждевременная оптимизация. Ощущение её наличия могло возникнуть из-за того, что данные, которые никак не задействованы в логике примера, были удалены из неё целиком. Массу вот только пропустил.
Clamp #18 - 1 неделю назад (отредактировано ) 0

» Clamp'ова кухня / Clamp's Physics Engine

Да, и еще: 9,8 - это для метров. В варике 1 единица расстояния это вовсе не метр, а гораздо меньшая величина.
Это вполне очевидно. Выставил 9.8, визуально результат меня устроил, с чего бы менять?

В бонусе - тебе не придется перерасчитывать величину gravity каждый раз, когда ты меняешь tickrate.
Такой себе по ценности, одно дополнительное деление и одно дополнительное умножение раз в практически никогда процессор сможет выдержать.
обязательно должен везде делится на tickrate
Точно! Каждое деление вектора на число - это три операции деления, каждый объект описывается двумя векторами, то есть всего шесть операций деления. Достаточно согласиться с твоим предложением, и их количество вырастает до девяти, что не то, чтобы критично, но в 1.5 раза тяжелее без каких-либо профитов вообще.
Кроме того, в самом коде физического компонента объекта логика описывается пусть с уже обмусоленной ошибкой, но всё-таки универсально: при обновлении объекта он смещается в направлении суммирующей на её величину, а скейлинг этой величины под тикрейт - работа контроллера, который обрабатывает этот объект и устанавливает сам тикрейт.
Clamp #19 - 1 неделю назад 0

» WarCraft 3 / Юниты самовольно убегают

Почему это происходит?
Потому что они принадлежат нейтрально-агрессивному игроку.
Clamp #21 - 1 неделю назад 0

» WarCraft 3 / Не работает триггерный спелл.

» Код
function CreepSpellActions takes nothing returns boolean
    local unit Dummy = null
    local real CasterX = GetUnitX(GetTriggerUnit())
    local real CasterY = GetUnitY(GetTriggerUnit())
    local real TargetX = GetUnitX(GetFilterUnit())
    local real TargetY = GetUnitY(GetFilterUnit())
    if IsUnitEnemy(GetFilterUnit(), Player(10)) then
        set Dummy = CreateUnit(Player(10), 'e004', CasterX, CasterY, bj_RADTODEG*Atan2(TargetY - CasterY, TargetX - CasterX))
        call IssuePointOrder(Dummy, "attackground", TargetX, TargetY)
        call UnitApplyTimedLife(Dummy, 'BTLF', 3)
        set Dummy = null
    endif
    return false
endfunction

function CreepSpellActivation takes nothing returns nothing
    local group TempGroup = CreateGroup()
    local real CasterX = GetUnitX(GetTriggerUnit())
    local real CasterY = GetUnitY(GetTriggerUnit())
    call GroupEnumUnitsInRange(TempGroup, CasterX, CasterY, 1500, function CreepSpellActions)
    call DestroyGroup(TempGroup)
    set TempGroup = null
endfunction

function CreepSpellFilter takes nothing returns boolean
    return GetUnitUserData(GetTriggerUnit()) == 1 and GetSpellAbilityId() == 'A002'
endfunction

function InitTrig_CreepSpell takes nothing returns nothing
    set gg_trg_CreepSpell = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(10), EVENT_PLAYER_UNIT_SPELL_EFFECT, function CreepSpellFilter)
    call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
Специально везде разжевал и ввёл переменные с нормальными названиями. Если бы их вводил и нормально называл самостоятельно, вопроса даже не возникло бы.
Clamp #22 - 1 неделю назад 0

» WarCraft 3 / надоедливый баг

Проблема решается очень просто: отключите оптимизацию скрипта в парсере cJass.
Велики шансы на то, что ниже по коду значение в [1] просто-напросто нигде не используется, и поэтому оптимизатор выпиливает его инициализацию.

Нужен С-подобный синтаксис - пиши на ZINC.
Purge it with fire!
Clamp #23 - 1 неделю назад (отредактировано ) 2

» Way of Others / Главная страница

Наиболее успешны будут переводы на корейский и китайский, судя по количеству активных игроков.
Clamp #24 - 1 неделю назад (отредактировано ) 0

» Clamp'ова кухня / Clamp's Physics Engine

Sergarr:
gravity = 9.8/tickrate;
постоянная гравитации ну никак не может зависеть от внутренней частоты работы физ. системы
Каждые 1/tickrate секунды запускается обработка списка снарядов. Ускорение свободного падение (как и любое) измеряется в "метров в секунду за секунду", то есть в "изменении скорости за секунду". А за 1/tickrate секунды скорость изменится на 1/tickrate от полного значения.
И еще, то, что в системе называется "impulse", это на самом деле должно называться "velocity", потому что импульс это масса*скорость, отсюда кстати и та вышеуказанная ошибка с умножением на массу.
Вполне вероятно, что так и есть, исходную версию начинал писать через импульсы.
Clamp #25 - 1 неделю назад 2

» WarCraft 3 / Огненный купол

На гифке не очень понятно, что это купол, Но сам эффект на высоте, как и всегда!
Clamp #26 - 2 недели назад 0

» Clamp'ова кухня / Clamp's Physics Engine

если претендуешь на понятный код то естественно называть нужно своими именами.
Справедливо.
Уничтожаться ниче офк не должно, какого фига физический объект должен за это отвечать?
написал было возражение, но потом призадумался и передумал...


ЕМНИП, операции с базовыми типами (int, float, ...) напрямую обрабатываются, без дополнительных обёрток. Идея как раз заключалась в том, что всё, кроме визуала (юнит + эффект) хранится и обрабатывается в виде конструкций из этих базовых типов, даже запилил квадтри (только понятия не имел, что оно так называется) для упихивания "своих" декораций. Но, увы, там нашёлся баг, локализацию которого я счёл неоправданно трудоёмкой после ряда попыток и вовсе отказался от идеи юзать дудады.

единственное, что в нем хорошего это стиль
Вот это, должен признаться, нормально так огрело. Действительно, ничего больше?
Clamp #27 - 2 недели назад (отредактировано ) 0

» Clamp'ова кухня / Clamp's Physics Engine

ты просто сам попробуй не трогая основной код реализовать пару спеллов
Реализовал, потом мб залью мапу (если допилю).
Тут даже такие банальности как то, что гравитация это скаляр, а не вектор.
Исходно делал как раз через вектор, но не смог найти векторному выражению никаких применений, и перевёл в скаляр, хз.
Ты понимаешь вообще что там было основано на входе в ректангл только чтобы максимально перенести отсеивание колижнов в нативный код?
Тащемта, да, и это вроде где-то обсуждалось даже активно
зачем-то есть настраиваемый тикрейт
Глубоко в концепции это задумывалось как метод снизить нагрузку через снижение тикрейта при повышении количества объектов, но позже эмперически выяснил, что сам факт наличия такого числа юнитов оказывает на нагрузку несравнимо большее влияние, за сим оставил.

На самом деле, если бы не "ненужный пафос", то хрена-с-два я бы дождался здесь хоть какого-нибудь code review от практикующего специалиста, так что хз даже про его "нужность" или "ненужность". Хотя метод, конечно, не самый красивый, тут каюсь и приношу извинения.

При чем тут стек
Копипаста со статьи Скорпа, я знаю, что такое стак, но не увидел никакой проблемы в именовании, простите, если задел в нежных чувствах =)
с тем же успехом можно было слить все эти чайлд структуры в основную и ничего бы не изменилось.
стало бы нечитаемо, лол
На деле, это использую примерно так: есть набор пресозданых "визобжей" и дамагов, сам "физобж" варится по требованиям и на него вешаются копии нужных мне кусков конфигурации. Не помню, как это "правильно" называется, допустим, "factory" (надеюсь, не задел в нежных чувствах, если ошибся ;D)
Doc:
вот с этого просто в АХАХАХА
Ничего не могу сказать, действительно обосрался в полный рост \о/
Как-то получилось, что в игре выглядит нормально, "да и хер с ним, не буду трогать"
объект который весит меньше будет медленнее падать?
Там же проекция на ось z, то есть технически это ускорение падения, а не наоборот.
Снаряды тупо всегда уничтожают себя при колижне с юнитами.
А что им ещё делать, лол?

Если в сухом остатке, то действительно спасибо за то, что понатыкал в несколько куч, учту. Хотел бы попросить менее эмоционально и более предметно потыкать, по возможности, но само собой настаивать не могу.
Clamp #28 - 2 недели назад 0

» Мастерская girvel-а / Хочу сделать игру #4. Онлайн стратегия с грабежом корованов

Цель в игре достаточно условна - построить сильнейшую империю
Если в игре уже есть хотя бы одна сильная империя, то шансы остальных игроков превзойти её станут реальными только после ухода владельца в длительный АФК (что неизбежно случится, так как любая игра без вызовов скучна).
Clamp #29 - 2 недели назад (отредактировано ) 0

» Мастерская girvel-а / Хочу сделать игру #4. Онлайн стратегия с грабежом корованов

girvel, если твоя цель отдалена от тебя больше, чем на месяц и при этом ты не вкладывал в неё бабло, то эта цель никогда не будет достигнута в полном объёме, а значит, детально её формулировать бессмысленно.

Не надо строить себе идеалы =)

С точки зрения игрока замечу, что если матч условно-бесконечен, и никаких целей не обозначено, то играть я в такое не буду. Всё-таки стратегия - это не РПГ, в ней сложно провести более-менее прямую ассоциацию между собой и аж целой нацией, чтобы просто продолжать "жить" в игре.
Clamp #31 - 2 недели назад 0

» Game Dev / Поиск ближайшей точки к кривой

Очень сомневаюсь в "нельзя".
Собственно, я говорил про "в общем виде", когда ещё не было внесено никаких уточнений. И да, действительно, "в общем виде" в целом редко что оказывается "льзя".
Советую спросить не здесь, а на stackoverflow/math.stackexchange
Совет дня, если честно.
Clamp #32 - 2 недели назад (отредактировано ) 4

» Мастерская girvel-а / Хочу сделать игру #4. Онлайн стратегия с грабежом корованов

подразумевают
Кто подразумевает? "Мультиплеерная игра" это (дословно) "игра со множеством игроков", а "онлайн-игра", опять-таки дословно, это "игра по интернету". Если каким-то образом удаётся эти понятия сравнивать, то я уже представляю громкость, с которой будет рваться шаблон при фразе "мультиплеерная онлайн-игра".

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

Сделай играбельный прототип, а не заводи долгострой на годы вперёд, это то, с чего нужно начинать, и то, что я имел в виду под "начинать тоже надо уметь правильно".
Clamp #34 - 2 недели назад 0

» Clamp'ова кухня / Clamp's Physics Engine

Если кому-нибудь зачем-нибудь понадобится, то по отдельной просьбе закину код системы в сам ресурс.
Clamp #35 - 2 недели назад 0

» Game Dev / Поиск ближайшей точки к кривой

Devion, как именно располагается и чем задаётся вектор камеры относительно кривой? Модель плоская или всё-таки пространственная?
Clamp #36 - 2 недели назад (отредактировано ) 2

» Мастерская girvel-а / Хочу сделать игру #4. Онлайн стратегия с грабежом корованов

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

В целом, по поводу всей кучи идей могу дать один совет: как минимум для начала выпили всё лишнее, и сконцентрируй все свои силы на одном-единственном, лишь бы доделать его до конца. При распылении на различные параллельные работы, эффективность и достижимый прогресс падают в квадратичной зависимости от количества этих работ.

Два главных навыка в геймдеве (да и вообще в чём угодно): уметь начать и уметь доделывать. Если с первым у большинства проблем не возникает (хотя, на самом деле, начинать тоже надо уметь правильно), то второе обычно постепенно теряется за дымкой множества идей, возникших по ходу процесса.
Это я к чему? К тому, что сделай сначала единственный стиль, но выдрочи его так, чтобы он работал идеально, и только потом приделывай альтернативы, заодно и баланс будет намного проще поддерживать.
Clamp #37 - 2 недели назад (отредактировано ) 0

» WarCraft 3 / Дисплей

Sergey105, это неисправимо, особенности движка.
Можно переделать все build-in сообщения об ошибках и эмулировать условия их появления, но это будет несравнимо более геморройнее без сколько-нибудь значительного выхлопа.
Clamp #38 - 2 недели назад 0

» WarCraft 3 / Дисплей

Выше я написал самый известный/популярный вариант эмуляции дефолтной внутриигровой ошибки, который ещё в далёком 2005 году придумал Vexorian.
Clamp #39 - 2 недели назад (отредактировано ) 2

» WarCraft 3 / Дисплей

library SimulateError
{
    private sound errorSound = CreateSoundFromLabel("InterfaceError", false, false, false, 10, 10);

    void UserInterfaceError(player targetPlayer, string errorText) {
        if (GetLocalPlayer() == targetPlayer) {
            ClearTextMessages();
            DisplayTimedTextToPlayer(targetPlayer, 0.52, -1.00, 2.00, "|cffffcc00" + errorText + "|r");
            StartSound(errorSound);
        }
    }
}
Clamp #41 - 2 недели назад 3

» WarCraft 3 / Разведчик Высших эльфов.

Давайте договоримся, что вы сначала решаете, что является финальной версией, и только потом запрашиваете публикацию, окей?
Clamp #42 - 2 недели назад 0

» WarCraft 3 / 9. Расширяющие функции

GetLocalPlayer, пробегись по всем пунктам статьи, вычитай косяки и логические несостыковки, потом отпишись в ЛС.
Clamp #43 - 2 недели назад 2

» Game Dev / Поиск ближайшей точки к кривой

Doc, очевидно, что если известен порядок кривой, то она строится по известной формуле =)
Clamp #44 - 2 недели назад (отредактировано ) 0

» Game Dev / Поиск ближайшей точки к кривой

Насколько мне известно, в общей виде - нельзя. Если вкратце опишешь, какую проблему решаешь, то есть вероятность найти альтернативные варианты.
Clamp #45 - 2 недели назад 1

» WarCraft 3 / 9. Расширяющие функции

Расширяющие функции, это собой вид статических функций
Полагаю, тут должно быть "особый"