Меня зовут Скофард (на ник не смотрите, это мой старый псевдоним), и на протяжении всего своего стажа картостроения я занимаюсь чем угодно, но не разработкой своих карт, а реализацией некоторых своих идей в Warcraft 3 World Editor.
Врать не буду, кое-какие карты удостоились звания "долгострой", но проблема в том, что я делаю всё один и, следовательно, быстро выдыхаюсь и вовсе бросаю это дело в виду нерентабельности в моём узком кругу. Но всё это предыстория, давайте уже к делу.
Хочу предупредить, что идея пришла спонтанно и всё сделано мной автономно, так что обошлось всё без скриншотов, но с видео-демонстрацией того, что получилось.
Загорелось мне сделать карту в стиле старенькой RTS Dune II: Building of the Dynasty для DOS, также известной, как Dune II: The Battle for Arrakis для Sega Mega Drive. Как многие, наверное, помнят, в этой стратегии здания и фундамент можно строить только на скалах. И я начал думать над тем, как реализовать всю эту тягомотину, и могу ли я в принципе это сделать, и чтобы получилось аутентично.
Началось всё с идеи одной карты, название которой я не помню - там земля порчи была заменена на текстуру полей из тайлсета Деревня, и на эту порчу ставилась ферма, которая давала золото (вроде бы). И я сделал следующее:
Началось всё с идеи одной карты, название которой я не помню - там земля порчи была заменена на текстуру полей из тайлсета Деревня, и на эту порчу ставилась ферма, которая давала золото (вроде бы). И я сделал следующее:
Событие - Map Initialization
Действия - Change terrain type at Center of Region to Калимдор: камень using variation -1 in an area of size 2 and shape Квадрат
Действия - Change terrain type at Center of Region to Калимдор: камень using variation -1 in an area of size 2 and shape Квадрат
Это всё сработало, вот только это всё было не то. Да, строить можно, но представляя, какой простынёй кода это обернётся, я вернулся к раздумьям, потому что параллельно этому нашёл функцию Turn Terrain Pathing On/Off. Это меня обрадовало, по началу, но ненадолго. Все мои старания превратить воздействие на конкретную точку в воздействие на область не увенчались успехом, как и изучение Jass (да, я до сих пор его не знаю, я казуальщик GUIшник), так что я вернулся к способу, который сработал изначально.
Я накопал информацию о картах путей, и уже было загорелся идеей рисования карты путей... Как понимаете, эту идею я тоже отбросил: текстура пути, где разрешено строительство, игнорируется текстурой камня, где по умолчанию синяя текстура пути (запрет на стройку). К тому же, она не вязалась с идеей рандомной генерации карты, а было важно совместить текстуру, на которой нельзя строить, и эту самую генерацию.
Сначала было хотел сделать упор на текстуру Калимдор: тёмная пустыня, но как тогда ограничить возможность игрока строить на Калимдор: пустыня? И завела меня дорога в список условий, где была проверка на тип текстуры ландшафта. И тогда я подумал: "А что, если..." и начал сделать триггер отмены стройки:
Я накопал информацию о картах путей, и уже было загорелся идеей рисования карты путей... Как понимаете, эту идею я тоже отбросил: текстура пути, где разрешено строительство, игнорируется текстурой камня, где по умолчанию синяя текстура пути (запрет на стройку). К тому же, она не вязалась с идеей рандомной генерации карты, а было важно совместить текстуру, на которой нельзя строить, и эту самую генерацию.
Сначала было хотел сделать упор на текстуру Калимдор: тёмная пустыня, но как тогда ограничить возможность игрока строить на Калимдор: пустыня? И завела меня дорога в список условий, где была проверка на тип текстуры ландшафта. И тогда я подумал: "А что, если..." и начал сделать триггер отмены стройки:
Событие - A unit Начинает строительство
Действия -
If
Terrain type at Position of Constructing Structure равно Калимдор: пустыня
If
Terrain type at Position of Constructing Structure равно Калимдор: пустыня
Then
Display to Player Group (Owner of Triggering Unit) the text: текст
Play Sound
Select Constructing Structure for Owner of Triggering Unit/Constructing Structure
Wait for 0.01 seconds
Force Owner of Triggering Unit to press Escape/Cancel
Display to Player Group (Owner of Triggering Unit) the text: текст
Play Sound
Select Constructing Structure for Owner of Triggering Unit/Constructing Structure
Wait for 0.01 seconds
Force Owner of Triggering Unit to press Escape/Cancel
Else
Do nothing
Do nothing
Это всё не дословное повторение моих вчерашних экспериментов, но тут и так довольно большой текст вырисовывается.
В общем, получилось у меня, чтобы здание отменялось, но работник не выбирается обратно (да и как-то всё равно на данном этапе). Самое главное: перед сном мне пришла идея объединить рандом генерацию и этот триггер. Собственно, рандомная генерация получилась вот так:
Событие - Map Initialization
Действия
For each (Integer A) from 1 to 20, do:
Change terrain type at Random point in Playable map area to Калимдор: камень using variation -1 in an area of size Random integer number between 2 and 6 and shape Круг
Действия
For each (Integer A) from 1 to 20, do:
Change terrain type at Random point in Playable map area to Калимдор: камень using variation -1 in an area of size Random integer number between 2 and 6 and shape Круг
Для чего я всё это вообще расписываю?
Таким образом я решил проверить, понимает ли триггер отмены строительства, что земля под зданием создана триггером, или оно будет судить по свойствам исходной текстуры почвы. Оказалось, что триггер берёт то, что сейчас нарисовано, а не издевательски отменяет здание, так как свойства пустыни всё ещё работают. Вот и получилось - простенько, аутентично и, по возможности, без простыни действий. Единственное, что сложно контролировать рандомность генерации, из-за чего куски пригодной для строительства почвы иногда сливаются естественно, а иногда выглядят как нелепые "круглые" островки, но с квадратами получается ещё хуже.
Вот результат моих трудов:
Спасибо, что прочитали. Мне хотелось с кем-нибудь поделиться своими успехами.

WC3




Но и ваш метод рушится о мелочь, которую можно прозвать "свойства исходного ландшафта". То есть, если просто нарисовать землю обычным способом, то действительно, всё сработает как вы и сказали. Но вот если создать ландшафт искусственно, через триггеры, то всё не будет работать. Если покрыть землю "песком", то тогда нигде нельзя будет строить, даже если нарисовать "камни". А если поверх камней триггернуть "песок", то всё равно можно будет строить везде.
На скалах строить можно, на песке - нет. Если планируется возведение фундамента путем перекрашивания ландшафта, то ничего и не поменяется, на фундаменте/скалах строить можно, на песке нет.
Или все-таки планируется возможность динамической смены песка и скал?
Скалы рисуются в рандомных местах и размере. Можно, конечно, ввести проверку на всю карту (как-то, но можно - утверждать не буду, вам лучше знать) и поставить флаг на "можно строить" на триггерных скалах и "нельзя строить" на песке. Вот только среди действий я не видел сканирование игровой карты или выбор всех её точек и проверки, есть там скала или нет.
Ред. Makeba
В многоэтажной тдшке также делалось, чтобы на дорожке для крипов нельзя было строитьВо-вторых, размер кругов определяется рандомным целочисленным относительно центра (как в редакторе рисует). Тут нельзя отследить размеры круга, соответственно и флаги будут поставлены только в центр этих кругов
Прозрачная текстура пути, однозначно, со зданиями работает. И я даже был близок к наложению текстуры низкой торцевой стены на круг наг из Затопленного города, но тут нужно заниматься высчитыванием относительно центра "плиты". Так что, нет - если и бывать карте, как Дюна, то явно без каких-то механик
Ред. Makeba