Хранилище Макросов СС2

Из оригинальной страницы
http://www.greycitadel.com/greycitadel/cc2macros.nsf
Моргана Олдена.

Рекомендую иногда заглядывать на оригинальную страницу - там бывают обновления и дополнения, правда я их почти сразу добавляю сюда. Туда же можно отправить свой собственный макрос - если вы все-таки сможете его написать. И, конечно, приходится благодарить Моргана Олдена - как бы мы без него жили?

Что такое макрос?

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

Макросы записаны в текстовых файлах с расширением '.mac '. Вы можете хранить много макросов в одном файле, но вы можете загружатьтолько один файл одновременно. Заданный по умолчанию макро-файл - ' Fcw32.mac ', он загружается когда вы запускаете CC2. Вы можете загружать другие макро-файлы, печатая ' LOADMAC ' в командной строке, или выбрав в меню: Options --> Macros --> Load Macros. Чтобы увидеть содержание вашего текущего макро-файла, Вы можете напечатать ' EDITMAC ', или использовать меню: Options --> Macros --> Edit Macros.

Как использовать Хранилище Макросов?

Скопируйте макрос, который вы хотели бы использовать в текстовый файл. Будьте внимательны, сделайте это точно; сохраните каждый пробел и знак, поскольку все они необходимы для работы. Оставьте пару дополнительных линии в конце файла. Дайте этому файлу имя с расширением mac ('файл.mac'), и переместите его в корневой каталог CC2. Запустив CC2 выберите в меню: Options --> Macros --> Load Macros, выберите ваш файл и нажмите OK. Теперь, чтобы запустить макрос из этого файла, только напечатайте в командной строке название макроса. Вот и все.

Многие стандартные команды CC2 фактически являются макросами, то есть если вы загружаете новый, не стандартный, макро-файл, эти команды больше не будут работать. Получить все стандартные макросы назад, вы можете только загрузив стандартный макро-файл 'Fcw32.mac'. Или, что гораздо удобнее, вы можете добавить новые макросы к этому, заданному по умолчанию, файлу, и иметь все доступные макросы. Если вы делаете это, очень рекомендуется сделать резервный 'fcw32.mac' файл, чтобы была возможность восстановить его если случится что-то непредвиденное.

Название Макроса | Автор | Краткое Описание
Разное | Разные | Эти несколько макросов облегчают работу и заменяют некоторые стандартные операции.
Границы Карты | ProFantasy | Эти три макроса позволяют изобразить границы карт (Map Border) для карты, города и подземелья.
Сменить все цвета | ProFantasy | Этот макрос меняет один цвет на другой на всей карте.
Стена Города 1 | Morgan Olden | Этот макрос преобразовывает имеющуюся линию в изображение стены города
Стена Города 2 | Morgan Olden | Рисование городской стены с башнями.
Стена Города 3 | Morgan Olden | Изображение городской стены с башнями. (высоко детализованное, с зубцами)
Стена Города 4 | Morgan Olden | Как и Стена Города 1, этот макрос преобразовывает плавную линию на карте в полную городскую стену такую, как Стена Города 3
Стена Города 5 | Morgan Olden | Изображение городской стены с башнями (высоко детализованное, с зубцами), но не ставит башни в углах.
Башня Стены Города | Morgan Olden | Изображает зубчатые башни в стиле макроса 'Стена Города 5'. Можно выбрать количество сторон и городской стиль крыши.
Парапет 1 | Morgan Olden | Изображает зубчатый парапет между двумя точками.
Парапет 2 | Morgan Olden | Преобразует существующую линию в парапет зубчатой стены. Работает на открытые и закрытые объекты.
Парапет 3 | Morgan Olden | Изображает парапет зубчатой стены как изломаную полосу. Включает удачные построения углов и возможность закрытия парапета.
Цвет 1 на Цвет 2 | Morgan Olden | Меняет второй цвет изображения (например контур), на первый (заливку).
Изогнутая Лестница | Ralf Schemmann | Этот макрос рисует лестницу переменной длинны по дуге. Это очень полезно для изображения планов башен и подобных зданий. Стиль рисунка подобен символам лестниц ПроФэнтези в Dungeon Designer 2 пакете.
Лестницы | Morgan Olden | Изображает лестницу как обыкновенную полосу. Три стиля: деревянная, камeнная или простая.
Скрыть все - Показать все | ProFantasy | Этот макрос скрывает-открывает все слои (Layers).
Спрятать слой при открытии карты | Anna M. Dobritt | Этот макрос позволяет скрыть и заморозить указаннный слой при открытии карты. Полезно для Мастера, если требуется показать подземелье игрокам, скрыв все ловушки (слой 'TRAPS').
Переключение Заливка-Нет заливки | ProFantasy | Переключает два стиля залики - Есть заливка-Нет заливки
Расширяющаяся Река 1 | Morgan Olden | Изображение плавной, постепенно расширяющейся реки.
Клавишный Макрос | ProFantasy | Позволяет задавать запуск конкретной команды комбинацией клавиш.
Палисад 1 | Morgan Olden | Преобразование существующей линии в палисад. Палисад выглядит как цепь кругов различного размера с контуром.
Палисад 2 | Morgan Olden | Изображение палисада, также как изображение линии. Палисад выглядит как цепь кругов различного размера с контуром.
Дощатый Настил 1 | Morgan Olden | Преобразование линии или плавной линии в дощатый настил.
Дощатый Настил 2 | Morgan Olden | Преобразование линии или плавной линии в дощатый настил. Улучшенная версия Дощатого Настила 1, может также испльзоваться для изображения деревянных мостков, парапетов стен, или сходней.
Гребень | ProFantasy | Добавление перпендикулярных полос различной длинны на существующую линию для создания 'Линии Гребня'.
Расширение Реки | ProFantasy | Создание реки: синей плавной полосы увеличивающейся ширины.
Деревья | Morgan Olden | Изображение деревьев изменяющегося размера и угла поворота на один клик.
Двери-Окна | Jonas Eckerman | Этот макрос позволяет вставлять в стены двери и окна, разрывая их в этом месте. Вложенный архив содержит сам макрос, вложения для помещение в меню, и каталог символов окон и дверей.
Чернильная Линия 1 | Morgan Olden | Рисует линию с эффектом 'ручного изображения'.
Чернильная Линия 2 | Morgan Olden | Преобразовывает имеющуюся линию или плавную линию в линию с эффектом 'ручного изображения'.
Pointillism1 | Morgan Olden | Изображает pointillism style линию с эффектом изменяющейся тени по одной стороне линии или плавной линии. (не знаю что такое pointillism)
Разрывы на линии | Morgan Olden | Этот макрос ставит на указанной линии разрывы различной длинны.
Ручная линия 2 | Morgan Olden | Изображает линию, как будто бы нарисованную от руки.
Каменная стена | Morgan Olden | Преобразует закрытый объект в стену из каменных блоков.
Край каменной стены | Morgan Olden | Делает серию 'каменных блоков' как край каменной стены.
Одиночная каменная стена | Morgan Olden | Изображает серию каменных блоков. Работает как 'Линия', и позволяет создавать ломаные стены. Версия 1.1
Одиночная каменная стена - преобразование | Morgan Olden | Преобразование линии в серию каменных блоков.
Плиты пола | Morgan Olden | Устанавливает символы плит пола в случайном порядке.
Стена пещеры | Morgan Olden | Создает край стены, как натуральную стену пещеры. Версия 1.1
Навигационная граница карты (автоматическая) | Morgan Olden | Создает границы карты с 'навигационными шкалами'.
Навигационная граница карты (ручная) | Morgan Olden | Создает границы карты с 'навигационными шкалами'. Позволяет задавать свои параметры.
Изломаная дорога 1 | Morgan Olden | Преобразовывает линию или ломаную линию в 'изломаную дорогу'.
Изломаная дорога 2 | Morgan Olden | Изображает изломаную дорогу указанной ширины как линию.
Изломаная дорога 3 | Morgan Olden | Улучшенная версия, объединившая в себе макросы 'Изломаная дорога 1' и 'Изломаная дорога 2'.
Паутина от трех точек | Morgan Olden | Изображает паучью паутину зацепленную за три точки.
Звезда1 | Morgan Olden | Изображает полигон в виде правильной звезды с заданным количеством лучей, а также внутренним и внешним диаметром.
Ссылки | Matthew Lynn | Этот скрипт позволяет обозначать комнаты, строения или позиции на карте символами с числами, и создает ссылки от них на карту или файл.
Случайные дома по улице | Scott Murray | Устанавливает случайным образом дома из прилагающегося каталога по правой стороне указаной улицы.
Вставить часть | Darren Hill | Некоторые макросы или скрипты требуют наличия на карте определенных символов, заливок и стилей. Следующие три скрипта разработаны для того чтобы сделать количество операций при изготовлении карты как можно меньшим (а не кликать отдельно на каждый символ).
Техника смены макросов | Darren Hill | Некоторые предпочитают хранить макросы в разных файлах (например "usermacro.mac"), для того чтобы не редактировать официальный файл макросов (fcw32.mac). К несчастью, для того чтобы выполнить хоть один из этих макросов, требуется вручную переключить файлы макросов, выполнить макрос, и затем переключить обратно на стандартный файл макросов. Следующая техника позволяет вам устанавливая макро файл делать это автоматически из скрипта: вы создаете короткий и простой скрипт для каждого макроса во втором макро файле, а он заботится о переключении макросов за вас.
Смешаный лес | Greg Hazzard | Этот макрос основан на макросе Моргана Олдена "Деревья", и используется для установки на карту отдельных деревьев. Он смешивает лиственные и хвойные деревья в процентном соотношении, базирующемся на количестве хвойных деревьев введенном на старт макроса.
Туман войны | Darren Hill (с помощью Peter Olsson) | Вам наверное когда-нибудь хотелось показать игрокам лишь определенную часть карты, скрыв все остальное? Этот макрос позволяет вам оставить открытой лишь часть карты, скрыв все остальное серым экраном - туманом войны.
Смешаный лес - расширено | Den Wailhorn (Morgan Olden+Greg Hazzard) | Этот макрос основан на макросах Моргана Олдена "Деревья" и Грега Хазарда "Смешаный лес", и используется для установки на карту отдельных деревьев. Он смешивает лиственные и хвойные деревья в указанном порядке, базирующемся на выбранном количестве хвойных или лиственных деревьев введенном на старте макроса.
Горная гряда | неизвестен | Этот скрипт взят мною неизвестно откуда. Работает просто - проводим полосу, запускаем макрос, и получаем горы стоящие по этой полосе.

Скопировано у Sylvain Robert, The Wanderer

Перевод и размещение Den Please activate Java...


Границы Карты

Название | Границы Карты
Автор | ProFantasy
Команда | CBORDER, DBORDER, MBORDER
Описание | Эти три макроса позволяют изобразить границы карт (Map Border) для карты, города и подземелья.
Инструкции | Четвертый макрос требуется для работы остальных трех.
Вложение | нет

Код
MACRO CBORDER
GN hicolor 249
GN locolor 246
BORDER
ENDM

MACRO DBORDER
GN hicolor 42
GN locolor 39
BORDER
ENDM

MACRO MBORDER
GN hicolor 87
GN locolor 85
BORDER
ENDM

MACRO BORDER
RDOFF
SHOW MAP BORDER
LWIDTH 0
LSTYLE SOLID
FSTYLE SOLID
RDON
GP p1 0,0
GP p1 ^D Bottom-left corner [0,0]:
GP p2 250,150
GP p2 ^D Top-right corner [1000,800]:
GETX x1 p1
GETY y1 p1
GETX x2 p2
GETY y2 p2
GV doff (x2-x1)/50
SELBYP
POLY x2,y1 p2 x1,y2 x1-doff,y2+doff x2+doff,y2+doff x2+doff,y1-doff;
CHANGEFS SOLID
CHANGEC locolor
CHANGEL MAP BORDER
POLY x1-doff,y2+doff x1-doff,y1-doff x2+doff,y1-doff x2,y1 p1 x1,y2;
CHANGEFS SOLID
CHANGEC hicolor
CHANGEL MAP BORDER
LINE p1 x2,y1 p2 x1,y2 p1;
CHANGEC 0
CHANGEL MAP BORDER
LINE x1-doff,y1-doff x2+doff,y1-doff x2+doff,y2+doff x1-doff,y2+doff x1-doff,y1-doff;
CHANGEC 0
CHANGEL MAP BORDER
ORIGIN p1
SELBYD
ENDM

Submitter Info
Name: | Morgan Olden
eMail: | molden@rogers.com
Please activate Java...


Горная гряда

Название | Горная гряда
Автор | Неизвестен
Команда | MTNSDEN
Описание | Этот скрипт взят мною неизвестно откуда. Работает просто - проводим полосу, запускаем макрос, и получаем горы стоящие по этой полосе.
Инструкции | При запуске макрос сначала запрашивает минимальное и максимальное расстояние между символами, затем минимальный и максимальный разброс символов от линии, а потом предлагает выбрать полосу или плавную полосу для установке гор по ней. По собственному опыту скажу, что сначала надо провести короткую линию, и попробовать на ней подобрать оптимальные значения переменных. Лишь потом стоит использовать этот макрос на карте. И помните о масштабе символов! Он может отличаться на вашей карте. По окончании работы макроса у вас получится великолепный вариант горной гряды, который станет идеальным после минимальной доработки - сдвижения символов немного в сторону. Внимание! Не забывайте, что символы гор ставятся сверху вниз, чтобы не перекрывать друг друга. Так что и полосу надо проводить хотя бы с минимальным дифферентом сверху вниз. Примечание: Вставлять весь скрипт в файл макроса не имеет смысла. Все и так отлично работает.
Вложение | Архив с каталогом символов гор и скриптом. Символы помещаем в папку CC2\Parts, скрипт в папку CC2\Scripts. После этого все работает
Код
MACRO MTNSDEN
PARTM #Parts/Mountains.FCW
1 0 0,0;
SCRIPTM #Scripts/Mountains.scr
ENDM

Submitter Info
Name: | unknown
eMail: | unknown


Гребень

Название | Гребень
Author | ProFantasy
Команда | RIDGE5
Описание | Добавление перпендикулярных полос различной длинны на существующую линию для создания 'Линии Гребня'.
Instructions | Попробуйте 2,1,1 для начальных установок и корректируйте в зависимости от результата. Работает лучше всего с линией. Необходим макрос TLEN.
Вложение | нет

Код
MACRO TLEN
GDIST leng % 0 p % 1 p
GV leng leng*100
ENDM

MACRO RIDGE5
GDIST rd ^DDistance between ridges:
GDIST rl ^DLength of ridges:
GV ratio ^DRatio of largest/smallest:
GE p ^DSelect entity:
GP pside ^D Select side:
tlen
GV per 100*rd/leng
GV tper per/2
GV cper tper
:1ridge5
IFP tper-100 eridge5
GP ip % tper p
GBRNG b ip PRP ip pside
GV b b+0
GV cper tper
IFN (cper-50) 2ridge5
GV cper 100-cper
:2ridge5
GV cl (rl*cper/100)*ratio+rl
LINE ip <b,cl

GV tper tper+per
GO 1ridge5
:eridge5


Изломаная дорога 1

Название | Изломаная дорога 1
Автор | Morgan Olden
Команда | roughpath1
Description | Преобразовывает линию или плавную линию в дорогу меняющейся ширины.
Инструкции | Этот макрос создает цепь слитых полигонов, отчего и создается эффект 'изломаности'. Используйте временный слой, для теста макроса, а потом переместите результат в нужный слой. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (roughpath1.scr) содержит макрос.
Код
macro roughpath1
ecoff
rdoff
gv mcoLW 10
gv mcoLW ^DPath width? (10)
gv mcoPR 1
gv mcoPR ^DPath roughness? (.9=smoother, 1.1=rougher) (1)
gv mcoPC 1
gv mcoPC ^DPath complexity (.9=less nodes, 1.1=more nodes) (1)
gv mcoPC 1/mcoPC
ge mcoEntity ^DSelect object to convert:
iferr mcoDONE
gdist mcoDist % 0 mcoEntity % .1 mcoEntity
gv mcoUnit 100/(mcoDist*1000)
gp mcoP1 % 0 mcoEntity
gbrng mcoB12 mcoP1 % .01 mcoEntity
random mcoR1
random mcoR2
gp mcoP1a ref mcoP1 <mcoB12+90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR1-.5))
gp mcoP1b ref mcoP1 <mcoB12-90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR2-.5))
gv mcoStep mcoLW*mcoPC*mcoUnit
gv mcoStep2 mcoStep
:mcoSEGLOOP
gp mcoP3 % mcoStep mcoEntity
gp mcoP4 % mcoStep2 mcoEntity
ifp mcoStep-100 mcoDONESEGLOOP
ifp mcoStep2-100 mcoDONESEGLOOP
random mcoR1
random mcoR2
gbrng mcoB12 % mcoStep mcoEntity % mcoStep+.01 mcoEntity
gp mcoP3a ref mcoP3 <mcoB12+90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR1-.5))
gp mcoP3b ref mcoP4 <mcoB12-90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR2-.5))
poly mcoP1a mcoP1b mcoP3b mcoP3a;
gp mcoP1a mcoP3a
gp mcoP1b mcoP3b
random mcoR1
random mcoR2
gv mcoStep2 mcoStep+((mcoLW/2)+(mcoLW/2*mcoR2))*mcoPC*mcoUnit
gv mcoStep mcoStep+((mcoLW/2)+(mcoLW/2*mcoR1))*mcoPC*mcoUnit
go mcoSEGLOOP
:mcoDONESEGLOOP
gbrng mcoB12 % 99.9 mcoEntity % 100 mcoEntity
gp mcoP2 % 100 mcoEntity
poly mcoP1a mcoP1b ref mcoP2 <mcoB12-90,mcoLW/2 ref mcoP2 <mcoB12+90,mcoLW/2;
:mcoDONE
rdon
econ


Изломаная дорога 2

Название | Изломаная дорога 2
Автор | Morgan Olden
Команда | roughpath2
Description | Изображает дорогу меняющейся ширины, как линию.
Инструкции | Этот макрос создает цепь слитых полигонов, отчего и создается эффект 'изломаности'. Используйте временный слой, для теста макроса, а потом переместите результат в нужный слой. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (roughpath2.scr) содержит макрос.
Код
macro roughpath2
ecoff
rdoff
gv mcoLW 10
gv mcoLW ^DPath width? (10)
gv mcoPR 1
gv mcoPR ^DPath roughness? (.9=smoother, 1.1=rougher) (1)
gv mcoPC 1
gv mcoPC ^DPath complexity (.9=less nodes, 1.1=more nodes) (1)
gv mcoPC 1/mcoPC
gp mcoP1 ^DStart path...
iferr mcoDONE
line mcoP1 ^DNext point... (right click ends);
undo
gp mcoP2 @0,0
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcoDONE
lstyle solid;fstyle solid;lwidth 0
gbrng mcoB12 mcoP1 mcoP2
random mcoR1
random mcoR2
gp mcoP1a ref mcoP1 <mcoB12+90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR1-.5))
gp mcoP1b ref mcoP1 <mcoB12-90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR2-.5))
gv mcoStep mcoLW*mcoPC
gv mcoStep2 mcoStep
go mcoSEGLOOP
:mcoLINELOOP
line mcoP1 ^DNext point... (right click ends);
undo
gp mcoP2 @0,0
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcoCLEANUP
gbrng mcoB12 mcoP1 mcoP2
gv mcoStep mcoLW*mcoPC
gv mcoStep2 mcoStep
:mcoSEGLOOP
gp mcoP3 ref mcoP1 <mcoB12,mcoStep
gp mcoP4 ref mcoP1 <mcoB12,mcoStep2
gdist mcoD13 mcoP1 mcoP3
ifp mcoD13-mcoD12 mcoDONESEGLOOP
gdist mcoD14 mcoP1 mcoP4
ifp mcoD14-mcoD12 mcoDONESEGLOOP
random mcoR1
random mcoR2
gp mcoP3a ref mcoP3 <mcoB12+90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR1-.5))
gp mcoP3b ref mcoP4 <mcoB12-90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR2-.5))
poly mcoP1a mcoP1b mcoP3b mcoP3a;
gp mcoP1a mcoP3a
gp mcoP1b mcoP3b
random mcoR1
random mcoR2
gv mcoStep2 mcoStep+((mcoLW/2)+(mcoLW/2*mcoR2))*mcoPC
gv mcoStep mcoStep+((mcoLW/2)+(mcoLW/2*mcoR1))*mcoPC
go mcoSEGLOOP
:mcoDONESEGLOOP
gp mcoP1 mcoP2
go mcoLINELOOP
:mcoCLEANUP
poly mcoP1a mcoP1b ref mcoP2 <mcoB12-90,mcoLW/2 ref mcoP2 <mcoB12+90,mcoLW/2;
:mcoDONE
rdon
econ


Изломаная дорога 3

Название | Изломаная дорога 3
Автор | Morgan Olden
Команда | roughpath3
Описание | Улучшенная версия, объединившая в себе макросы 'Изломаная дорога 1' и 'Изломаная дорога 2'.
Инструкции | Этот макрос заменяет макросы 'Изломаная дорога 1' и 'Изломаная дорога 2'. Он запрашивает объект для преобразования, если объект не выбран, то макрос стартует изображение. Обновления: - Все объекты изображенные макросом объединены в один объект. - Свойства изображения (толщина, цвет линии и т.п.) восстанавливаются. - Свойства макроса сохраняются. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (roughpath3.scr) содержит макрос.
Код
macro roughpath3
ecoff
rdoff
point 10001,10001;
golayer MacroConstruction
scriptm #roughpath-vars.scr
ifdef mcoVarsOK mcoDoneVarCheck
:mcoDefineVars
gv mcoLW 10
gv mcoLW ^DPath width? (10)
gv mcoPR 1
gv mcoPR ^DPath roughness? (.9=smoother, 1.1=rougher) (1)
gv mcoPC 1
gv mcoPC ^DPath complexity (.9=less nodes, 1.1=more nodes) (1)
gv mcoPC 1/mcoPC
savevars roughpath-vars
gw mcoVarsOK OK
go mcoStart
:mcoDoneVarCheck
gv mcoUseDefault 1
gv mcoUseDefault ^DUse saved settings? (1=yes - default - click) (0=no)
ifz mcoUseDefault mcoDefineVars
:mcoStart
ge mcoEntity ^DSelect object to convert:
iferr mcoDrawPath
gdist mcoDist % 0 mcoEntity % .1 mcoEntity
gv mcoUnit 100/(mcoDist*1000)
gp mcoP1 % 0 mcoEntity
gbrng mcoB12 mcoP1 % .01 mcoEntity
random mcoR1
random mcoR2
gp mcoP1a ref mcoP1 <mcoB12+90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR1-.5))
gp mcoP1b ref mcoP1 <mcoB12-90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR2-.5))
gv mcoStep mcoLW*mcoPC*mcoUnit
gv mcoStep2 mcoStep
:mcoSEGLOOP
gp mcoP3 % mcoStep mcoEntity
gp mcoP4 % mcoStep2 mcoEntity
ifp mcoStep-100 mcoDONESEGLOOP
ifp mcoStep2-100 mcoDONESEGLOOP
random mcoR1
random mcoR2
gbrng mcoB12 % mcoStep mcoEntity % mcoStep+.01 mcoEntity
gp mcoP3a ref mcoP3 <mcoB12+90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR1-.5))
gp mcoP3b ref mcoP4 <mcoB12-90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR2-.5))
poly mcoP1a mcoP1b mcoP3b mcoP3a;
gp mcoP1a mcoP3a
gp mcoP1b mcoP3b
random mcoR1
random mcoR2
gv mcoStep2 mcoStep+((mcoLW/2)+(mcoLW/2*mcoR2))*mcoPC*mcoUnit
gv mcoStep mcoStep+((mcoLW/2)+(mcoLW/2*mcoR1))*mcoPC*mcoUnit
go mcoSEGLOOP
:mcoDONESEGLOOP
gbrng mcoB12 % 99.9 mcoEntity % 100 mcoEntity
gp mcoP2 % 100 mcoEntity
poly mcoP1a mcoP1b ref mcoP2 <mcoB12-90,mcoLW/2 ref mcoP2 <mcoB12+90,mcoLW/2;
go mcoDone
:mcoDrawPath
gp mcoP1 ^DStart path...
iferr mcoDONE
line mcoP1 ^DNext point... (right click ends);
undo
gp mcoP2 @0,0
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcoDONE
lstyle solid;fstyle solid;lwidth 0
gbrng mcoB12 mcoP1 mcoP2
random mcoR1
random mcoR2
gp mcoP1a ref mcoP1 <mcoB12+90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR1-.5))
gp mcoP1b ref mcoP1 <mcoB12-90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR2-.5))
gv mcoStep mcoLW*mcoPC
gv mcoStep2 mcoStep
go mcoSEGLOOP2
:mcoLINELOOP
line mcoP1 ^DNext point... (right click ends);
undo
gp mcoP2 @0,0
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcoCLEANUP
gbrng mcoB12 mcoP1 mcoP2
gv mcoStep mcoLW*mcoPC
gv mcoStep2 mcoStep
:mcoSEGLOOP2
gp mcoP3 ref mcoP1 <mcoB12,mcoStep
gp mcoP4 ref mcoP1 <mcoB12,mcoStep2
gdist mcoD13 mcoP1 mcoP3
ifp mcoD13-mcoD12 mcoDONESEGLOOP2
gdist mcoD14 mcoP1 mcoP4
ifp mcoD14-mcoD12 mcoDONESEGLOOP2
random mcoR1
random mcoR2
gp mcoP3a ref mcoP3 <mcoB12+90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR1-.5))
gp mcoP3b ref mcoP4 <mcoB12-90,(mcoLW*.75)+(mcoLW*.25*mcoPR*(mcoR2-.5))
poly mcoP1a mcoP1b mcoP3b mcoP3a;
gp mcoP1a mcoP3a
gp mcoP1b mcoP3b
random mcoR1
random mcoR2
gv mcoStep2 mcoStep+((mcoLW/2)+(mcoLW/2*mcoR2))*mcoPC
gv mcoStep mcoStep+((mcoLW/2)+(mcoLW/2*mcoR1))*mcoPC
go mcoSEGLOOP2
:mcoDONESEGLOOP2
gp mcoP1 mcoP2
go mcoLINELOOP
:mcoCLEANUP
poly mcoP1a mcoP1b ref mcoP2 <mcoB12-90,mcoLW/2 ref mcoP2 <mcoB12+90,mcoLW/2;
:mcoDone
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
:mcoabort
selby1
keep 10001,10001
erase 10001,10001
selrest
rdon
econ


Навигационная граница карты (автоматическая)

Название | Навигационная граница карты (автоматическая)
Автор | Morgan Olden
Команда | nauticalborderA
Описание | Создает границы карты с 'навигационными шкалами'. Настройки немного подстраиваются сами под стандартные шаблоны карт.
Инструкции | Введите ширину границы карты, и основной цвет. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (frame-chart.scr) содержит макрос.
Код
macro nauticalchartA
ecoff
gv mcoT 10
gv mcoT ^DFrame thickness (10):
gv mcoCOLOR 0
gv mcoCOLOR ^DColor (0):
gp mcoP1 ^DTop left point of frame:
lwidth 0;fstyle hollow;lstyle solid
box mcoP1 ^DBottom right point of frame:
selbyp
erase
gp mcoP4 @0,0
GETX mcoX1 mcoP1
GETX mcoX2 mcoP4
GETY mcoY1 mcoP1
GETY mcoY2 mcoP4
gp mcoP2 mcoX2,mcoY1
gp mcoP3 mcoX1,mcoY2
gp mcoP5 (mcoX1-(mcoT/2)),(mcoY1+(mcoT/2))
gp mcoP6 (mcoX2+(mcoT/2)),(mcoY1+(mcoT/2))
gp mcoP7 (mcoX1-(mcoT/2)),(mcoY2-(mcoT/2))
gp mcoP8 (mcoX2+(mcoT/2)),(mcoY2-(mcoT/2))
gp mcoP9 (mcoX1+(mcoT/2)),(mcoY1-(mcoT/2))
gp mcoP10 (mcoX2-(mcoT/2)),(mcoY1-(mcoT/2))
gp mcoP11 (mcoX1+(mcoT/2)),(mcoY2+(mcoT/2))
gp mcoP12 (mcoX2-(mcoT/2)),(mcoY2+(mcoT/2))
gp mcoP13 (mcoX1-(mcoT/4)),(mcoY1+(mcoT/4))
gp mcoP14 (mcoX2+(mcoT/4)),(mcoY1+(mcoT/4))
gp mcoP15 (mcoX1-(mcoT/4)),(mcoY2-(mcoT/4))
gp mcoP16 (mcoX2+(mcoT/4)),(mcoY2-(mcoT/4))
lwidth 0;lstyle solid
fstyle hollow;color 0
box mcoP5 mcoP8
box mcoP9 mcoP12
box mcoP1 mcoP4
gv mcoS .1
gdist mcoTD1 mcoP1 mcoP4
:mcoSCALELOOP
gv mcoS mcoS*10
ifp (mcoTD1/mcoS)-200 mcoSCALELOOP
gdist mcoTD1 mcoP9 mcoP10
gdist mcoTD2 mcoP9 mcoP11
gp mcoVARP1 ref mcoP9 <0,mcoS
:mcoloop1
line mcoVARP1 ref mcoVARP1 <90,mcoT/2;
line ref mcoVARP1 <-90,mcoTD2 ref mcoVARP1 <-90,mcoTD2+(mcoT/2);
gp mcoVARP1 ref mcoVARP1 <0,mcoS
gdist mcoTD3 mcoP9 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop1done
ifz mcoTD1-mcoTD3 mcoloop1done
go mcoloop1
:mcoloop1done
gdist mcoTD1 mcoP9 mcoP10
gdist mcoTD2 mcoP9 mcoP11
gp mcoVARP1 ref mcoP9 <90,mcoT/2
:mcoloop1a
line mcoVARP1 ref mcoVARP1 <90,mcoT/2;
line ref mcoVARP1 <-90,mcoTD2+mcoT ref mcoVARP1 <-90,mcoTD2+mcoT+(mcoT/2);
gp mcoVARP1 ref mcoVARP1 <0,mcoS*5
gdist mcoTD3 ref mcoP9 <90,mcoT/2 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop1adone
ifz mcoTD1-mcoTD3 mcoloop1adone
go mcoloop1a
:mcoloop1adone
gdist mcoTD1 mcoP10 mcoP12
gdist mcoTD2 mcoP10 mcoP9
gp mcoVARP1 ref mcoP10 <270,mcoS
:mcoloop2
line mcoVARP1 ref mcoVARP1 <0,mcoT/2;
line ref mcoVARP1 <180,mcoTD2 ref mcoVARP1 <180,mcoTD2+(mcoT/2);
gp mcoVARP1 ref mcoVARP1 <270,mcoS
gdist mcoTD3 mcoP10 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop2done
ifz mcoTD1-mcoTD3 mcoloop2done
go mcoloop2
:mcoloop2done
gdist mcoTD1 mcoP10 mcoP12
gdist mcoTD2 mcoP10 mcoP9
gp mcoVARP1 ref mcoP10 <0,mcoT/2
:mcoloop2a
line mcoVARP1 ref mcoVARP1 <0,mcoT/2;
line ref mcoVARP1 <180,mcoTD2+mcoT ref mcoVARP1 <180,mcoTD2+mcoT+(mcoT/2);
gp mcoVARP1 ref mcoVARP1 <270,mcoS*5
gdist mcoTD3 ref mcoP10 <270,mcoT/2 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop2adone
ifz mcoTD1-mcoTD3 mcoloop2adone
go mcoloop2a
:mcoloop2adone
lwidth mcoT/10;fstyle solid;color mcoCOLOR
gdist mcoTD1 mcoP9 mcoP10
gdist mcoTD2 mcoP9 mcoP11
gp mcoVARP1 ref mcoP9 <90,mcoT*.75
:mcoloop3
gp mcoVARP1 ref mcoVARP1 <0,mcoS*5
gdist mcoTD3 ref mcoP9 <90,mcoT*.75 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop3end
ifz mcoTD1-mcoTD3 mcoloop3end
gp mcoVARP2 ref mcoVARP1 <180,mcoS*5
line mcoVARP1 mcoVARP2;
line ref mcoVARP1 <270,mcoTD2+(mcoT*1.5) ref mcoVARP2 <270,mcoTD2+(mcoT*1.5);
gp mcoVARP1 ref mcoVARP1 <0,mcoS*5
gdist mcoTD3 ref mcoP9 <90,mcoT*.75 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop3done
ifz mcoTD1-mcoTD3 mcoloop3done
go mcoloop3
:mcoloop3end
gp mcoVARP2 ref mcoVARP1 <180,mcoS*5
line ref mcoP10 <90,mcoT*.75 mcoVARP2;
line ref mcoP12 <270,mcoT*.75 ref mcoVARP2 <270,mcoTD2+(mcoT*1.5);
:mcoloop3done
gdist mcoTD1 mcoP10 mcoP12
gdist mcoTD2 mcoP10 mcoP9
gp mcoVARP1 ref mcoP10 <0,mcoT*.75
:mcoloop3a
gp mcoVARP1 ref mcoVARP1 <270,mcoS*5
gdist mcoTD3 ref mcoP10 <0,mcoT*.75 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop3adone
ifz mcoTD1-mcoTD3 mcoloop3adone
gp mcoVARP1 ref mcoVARP1 <270,mcoS*5
gdist mcoTD3 ref mcoP10 <0,mcoT*.75 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop3aend
ifz mcoTD1-mcoTD3 mcoloop3aend
gp mcoVARP2 ref mcoVARP1 <90,mcoS*5
line mcoVARP1 mcoVARP2;
line ref mcoVARP1 <180,mcoTD2+(mcoT*1.5) ref mcoVARP2 <180,mcoTD2+(mcoT*1.5);
go mcoloop3a
:mcoloop3aend
gp mcoVARP2 ref mcoVARP1 <90,mcoS*5
line ref mcoP12 <0,mcoT*.75 mcoVARP2;
line ref mcoP11 <180,mcoT*.75 ref mcoVARP2 <180,mcoTD2+(mcoT*1.5);
:mcoloop3adone
lwidth 0;color 0
box mcoP5 mcoP9
box mcoP6 mcoP10
box mcoP7 mcoP11
box mcoP8 mcoP12
selbyd
econ


Навигационная граница карты (ручная)

Название | Навигационная граница карты (ручная)
Автор | Morgan Olden
Команда | nauticalborderM
Описание | Создает границы карты с 'навигационными шкалами'. Позволяет задавать свои параметры.
Инструкции | Настроек гораздо больше чем в автоматической версии. Вам может понадобиться несколько экспериментов перед рисованием - используйте временный слой, чтобы легче было удалять. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (frame-chart-manual.scr) содержит макрос.
Код
macro nauticalchartM
ecoff
gv mcoT 10
gv mcoT ^DFrame thickness (10):
gv mcoCOLOR 0
gv mcoCOLOR ^DColor (0):
gv mcoST 10
gv mcoST ^DSmall tick spacing (10):
gv mcoLT 50
gv mcoLT ^DLarge tick spacing (50):
gv mcoGRID 500
gv mcoGRID ^DGrid line spacing (default=500, none=0)
ifz mcoGRID mcoCONTROL1
gv mcoGRIDC 0
gv mcoGRIDC ^DGrid line color (0):
:mcoCONTROL1
gp mcoP1 ^DTop left point of frame:
lwidth 0;fstyle hollow;lstyle solid
box mcoP1 ^DBottom right point of frame:
selbyp
erase
gp mcoP4 @0,0
GETX mcoX1 mcoP1
GETX mcoX2 mcoP4
GETY mcoY1 mcoP1
GETY mcoY2 mcoP4
gp mcoP2 mcoX2,mcoY1
gp mcoP3 mcoX1,mcoY2
gp mcoP5 (mcoX1-(mcoT/2)),(mcoY1+(mcoT/2))
gp mcoP6 (mcoX2+(mcoT/2)),(mcoY1+(mcoT/2))
gp mcoP7 (mcoX1-(mcoT/2)),(mcoY2-(mcoT/2))
gp mcoP8 (mcoX2+(mcoT/2)),(mcoY2-(mcoT/2))
gp mcoP9 (mcoX1+(mcoT/2)),(mcoY1-(mcoT/2))
gp mcoP10 (mcoX2-(mcoT/2)),(mcoY1-(mcoT/2))
gp mcoP11 (mcoX1+(mcoT/2)),(mcoY2+(mcoT/2))
gp mcoP12 (mcoX2-(mcoT/2)),(mcoY2+(mcoT/2))
gp mcoP13 (mcoX1-(mcoT/4)),(mcoY1+(mcoT/4))
gp mcoP14 (mcoX2+(mcoT/4)),(mcoY1+(mcoT/4))
gp mcoP15 (mcoX1-(mcoT/4)),(mcoY2-(mcoT/4))
gp mcoP16 (mcoX2+(mcoT/4)),(mcoY2-(mcoT/4))
lwidth 0;lstyle solid
fstyle hollow;color 0
box mcoP5 mcoP8
box mcoP9 mcoP12
box mcoP1 mcoP4
gdist mcoTD1 mcoP9 mcoP10
gdist mcoTD2 mcoP9 mcoP11
gp mcoVARP1 ref mcoP9 <0,mcoST
:mcoloop1
line mcoVARP1 ref mcoVARP1 <90,mcoT/2;
line ref mcoVARP1 <-90,mcoTD2 ref mcoVARP1 <-90,mcoTD2+(mcoT/2);
gp mcoVARP1 ref mcoVARP1 <0,mcoST
gdist mcoTD3 mcoP9 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop1done
ifz mcoTD1-mcoTD3 mcoloop1done
go mcoloop1
:mcoloop1done
gdist mcoTD1 mcoP9 mcoP10
gdist mcoTD2 mcoP9 mcoP11
gp mcoVARP1 ref mcoP9 <90,mcoT/2
:mcoloop1a
line mcoVARP1 ref mcoVARP1 <90,mcoT/2;
line ref mcoVARP1 <-90,mcoTD2+mcoT ref mcoVARP1 <-90,mcoTD2+mcoT+(mcoT/2);
gp mcoVARP1 ref mcoVARP1 <0,mcoLT
gdist mcoTD3 ref mcoP9 <90,mcoT/2 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop1adone
ifz mcoTD1-mcoTD3 mcoloop1adone
go mcoloop1a
:mcoloop1adone
gdist mcoTD1 mcoP10 mcoP12
gdist mcoTD2 mcoP10 mcoP9
gp mcoVARP1 ref mcoP10 <270,mcoST
:mcoloop2
line mcoVARP1 ref mcoVARP1 <0,mcoT/2;
line ref mcoVARP1 <180,mcoTD2 ref mcoVARP1 <180,mcoTD2+(mcoT/2);
gp mcoVARP1 ref mcoVARP1 <270,mcoST
gdist mcoTD3 mcoP10 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop2done
ifz mcoTD1-mcoTD3 mcoloop2done
go mcoloop2
:mcoloop2done
gdist mcoTD1 mcoP10 mcoP12
gdist mcoTD2 mcoP10 mcoP9
gp mcoVARP1 ref mcoP10 <0,mcoT/2
:mcoloop2a
line mcoVARP1 ref mcoVARP1 <0,mcoT/2;
line ref mcoVARP1 <180,mcoTD2+mcoT ref mcoVARP1 <180,mcoTD2+mcoT+(mcoT/2);
gp mcoVARP1 ref mcoVARP1 <270,mcoLT
gdist mcoTD3 ref mcoP10 <270,mcoT/2 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop2adone
ifz mcoTD1-mcoTD3 mcoloop2adone
go mcoloop2a
:mcoloop2adone
lwidth mcoT/10;fstyle solid;color mcoCOLOR
gdist mcoTD1 mcoP9 mcoP10
gdist mcoTD2 mcoP9 mcoP11
gp mcoVARP1 ref mcoP9 <90,mcoT*.75
:mcoloop3
gp mcoVARP1 ref mcoVARP1 <0,mcoLT
gdist mcoTD3 ref mcoP9 <90,mcoT*.75 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop3end
ifz mcoTD1-mcoTD3 mcoloop3end
gp mcoVARP2 ref mcoVARP1 <180,mcoLT
line mcoVARP1 mcoVARP2;
line ref mcoVARP1 <270,mcoTD2+(mcoT*1.5) ref mcoVARP2 <270,mcoTD2+(mcoT*1.5);
gp mcoVARP1 ref mcoVARP1 <0,mcoLT
gdist mcoTD3 ref mcoP9 <90,mcoT*.75 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop3done
ifz mcoTD1-mcoTD3 mcoloop3done
go mcoloop3
:mcoloop3end
gp mcoVARP2 ref mcoVARP1 <180,mcoLT
line ref mcoP10 <90,mcoT*.75 mcoVARP2;
line ref mcoP12 <270,mcoT*.75 ref mcoVARP2 <270,mcoTD2+(mcoT*1.5);
:mcoloop3done
gdist mcoTD1 mcoP10 mcoP12
gdist mcoTD2 mcoP10 mcoP9
gp mcoVARP1 ref mcoP10 <0,mcoT*.75
:mcoloop3a
gp mcoVARP1 ref mcoVARP1 <270,mcoLT
gdist mcoTD3 ref mcoP10 <0,mcoT*.75 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop3adone
ifz mcoTD1-mcoTD3 mcoloop3adone
gp mcoVARP1 ref mcoVARP1 <270,mcoLT
gdist mcoTD3 ref mcoP10 <0,mcoT*.75 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop3aend
ifz mcoTD1-mcoTD3 mcoloop3aend
gp mcoVARP2 ref mcoVARP1 <90,mcoLT
line mcoVARP1 mcoVARP2;
line ref mcoVARP1 <180,mcoTD2+(mcoT*1.5) ref mcoVARP2 <180,mcoTD2+(mcoT*1.5);
go mcoloop3a
:mcoloop3aend
gp mcoVARP2 ref mcoVARP1 <90,mcoLT
line ref mcoP12 <0,mcoT*.75 mcoVARP2;
line ref mcoP11 <180,mcoT*.75 ref mcoVARP2 <180,mcoTD2+(mcoT*1.5);
:mcoloop3adone
lwidth 0;color 0
box mcoP5 mcoP9
box mcoP6 mcoP10
box mcoP7 mcoP11
box mcoP8 mcoP12
ifz mcoGRID mcoCONTROL2
lwidth 0;color mcoGRIDC
gdist mcoTD1 mcoP9 mcoP10
gdist mcoTD2 mcoP9 mcoP11
gp mcoVARP1 mcoP9
:mcoloop4
gp mcoVARP1 ref mcoVARP1 <0,mcoGRID
gdist mcoTD3 mcoP9 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop4done
ifz mcoTD1-mcoTD3 mcoloop4done
line mcoVARP1 ref mcoVARP1 <270,mcoTD2;
go mcoloop4
:mcoloop4done
gdist mcoTD1 mcoP10 mcoP12
gdist mcoTD2 mcoP10 mcoP9
gp mcoVARP1 mcoP10
:mcoloop4a
gp mcoVARP1 ref mcoVARP1 <270,mcoGRID
gdist mcoTD3 mcoP10 mcoVARP1
ifn mcoTD1-mcoTD3 mcoloop4adone
ifz mcoTD1-mcoTD3 mcoloop4adone
line mcoVARP1 ref mcoVARP1 <180,mcoTD2;
go mcoloop4a
:mcoloop4adone
:mcoCONTROL2
selbyd
econ


Расширение Реки

Название | Расширение Реки
Автор | ProFantasy
Команда | QR
Описание | Создание реки: синей плавной полосы увеличивающейся ширины.
Инструкции | Макрос Расширение Реки - напечатайте QR, чтобы начать макрос - это устанавливает ширину линии в 2.00. Начните рисовать вашу реку - три точки в продолжение (это изменяетт ширину линии и вы может начинать следующую секцию в конечной точке первой секции) и рисуйте дальше - три точки для изображения новой секции. Если вы хотите изменить речную ширину с 2, то вручную установите ширину в 4, но макрос после запуска снова начнется с 2.
Вложение | нет

Код
MACRO RW
LAYER WATER/RIVERS
COLOR 69
FSTYLE SOLID
LSTYLE SOLID
APND rwftime -1
GV rwftime rwftime
IFZ rwftime+1 rwfirsttime
IFZ rww-2 1rw
IFZ rww-2.5 2rw
IFZ rww-3 3rw
IFZ rww-3.5 4rw
GV rww 2
GO erw
:1rw
GV rww 2.5
GO erw
:2rw
GV rww 3
GO erw
:3rw
GV rww 3.5
GO erw
:4rw
GV rww 4
GO erw
:rwfirsttime
GV rwftime rwftime-1
GN rww 2
:erw
LWIDTH rww
SELBYD
ENDM

MACRO QR
RW
GP rsp @0,0
GP rsp ^D 1st point[@0,0]:
SPLINE rsp


Расширяющаяся Река 1

Название | Расширяющаяся Река 1
Автор | Morgan Olden
Команда | iriver1
Описание | Изображение плавной, постепенно расширяющейся реки.
Инструкции | Я признаю, что этот макрос немного темпераментный, конфликтует с другими объектами, иногда включая их в себя. По этой причине попытайтесь не рисовать реку поверх других объектов, или используйте временный слой, закрепляя другие командой freeze. Макрос запрашивает стартовую ширину реки, и размер увеличения этой ширины на каждой точке. Далее рисуйте реку, помня, что форма будет приглажена в конце, так что углы будут закруглены. Только поэкспериментируйте немного сначала.
Вложение | нет

Код
macro iriver1
ecoff
selbyp
lstyle solid
lwidth 0
color 0
gv w 0
gv wi 1
gv w ^DStarting width (0):
ifz w setwidthtomin
ifn w setwidthtomin
go control1
:setwidthtomin
gv w .01
:control1
gv wi ^DIncrease width per node (1):
ifn wi setincreasetomin
go control2
:setincreasetomin
gv wi 0
:control2
gp p1 ^DPoint 1:
iferr abort
gp p2 ^DPoint 2:
iferr abort
color 16
line p1 p2;
color 0
GBRNG b12 p1 p2
gp r1 ref p1 <b12-90,w/2
gp l1 ref p1 <b12+90,w/2
gp p3 ^DNext point:
erase;
iferr abort
gp sl l1
gp sr r1
gv w w+wi
:loop
GBRNG b12 p1 p2
GBRNG b23 p2 p3
gcos wcs 90-((b12-b23-180)/2)
gv aw 1/wcs*(w/2)
gp r2 ref p2 <(b12+b23)/2+90,aw
gp l2 ref p2 <(b12+b23)/2-90,aw
color 16
line p2 p3;
color 0
gp p4 ^DNext point:
iferr done
erase;
line l1 l2;
line r1 r2;
gv w w+wi
gp p1 p2
gp p2 p3
gp p3 p4
gp l1 l2
gp l2 l3
gp r1 r2
gp r2 r3
goto loop
:done
erase;
line l1 l2;
line r1 r2;
GBRNG b23 p2 p3
gp r3 ref p3 <b23-90,w/2
gp l3 ref p3 <b23+90,w/2
line l2 l3;
line r2 r3;
selby1
ltp sl p1
stc sl
ltp sr p1
stc sr
line sl sr;
line l3 r3;
selbye
fstyle solid
mpoly2 l3 sr;
selby1
changec l3 3
:abort
selbyd
econ


Смешаный лес

Название | Смешаный лес
Автор | Greg Hazzard
Команда | MIXFRST
Описание | Этот макрос основан на макросе Моргана Олдена "Деревья", и используется для установки на карту отдельных деревьев. Он смешивает лиственные и хвойные деревья в процентном соотношении, базирующемся на количестве хвойных деревьев введенном на старт макроса.
Инструкции | При запуске макрос запрашивает количество хвойных деревьев - в процентном соотношении от лиственных. Введите число от 0 до 100, где 0 это отсутствие хвойных деревьев, а 100 это только хвойные деревья. Точность распределения достигается опытным путем. Макрос берет стандартные символы деревьев СС2, но для этого оны должны быть хоть раз использованы на карте. Можно просто открыть каталог, и кликнуть по разу на каждое дерево. К сведению - это символ абстрактной елки 'C Tree' и лиственного дерева 'D Tree'. Если есть желание повозиться, и расширить возможности макроса, то поступаем следующим образом. Пользуясь менеджером символов, который появился в версиях CC2 Pro очень легко переименовать подобные символы из каталога деревьев фэнтези, поставить десяток-другой, потом вернуть им имена, и переименовать следующую пару...
Вложение | Нет
Код
MACRO MIXFRST
ECOFF
GV weight ^DEnter the weight of coniferous trees(0-100):
GV WEIGHT WEIGHT/100
GV SCALE ^DEnter the scale of the symbols:
:LOOP
GP CONT ^D(left=continue, right=quit)
IFERR DONE
RANDOM NUMBER
IFP NUMBER-WEIGHT SYMBOL2
:SYMBOL1
SYMBOL;C Tree;SCALE;SCALE;0;^DLoc:;
GO LOOP
:SYMBOL2
SYMBOL;D Tree;SCALE;SCALE;0;^DLoc:;
GO LOOP
:DONE
ECON
ENDM

Submitter Info
Name: | Greg Hazzard
eMail: | thedarkelf@aelfen.net


Смешаный лес 2

Название | Смешаный лес - расширено
Автор | Den Wailhorn (Morgan Olden+Greg Hazzard)
Команда | DENFRST
Описание | Этот макрос основан на макросах Моргана Олдена "Деревья" и Грега Хазарда "Смешаный лес", и используется для установки на карту отдельных деревьев. Он смешивает лиственные и хвойные деревья в указанном порядке, базирующемся на выбранном количестве хвойных или лиственных деревьев введенном на старте макроса.
Инструкции | При запуске макрос просит ввести номер первого символа дерева, сообщая при этом, что символы с 1 по 6 - лиственные, а с 7 по 12 - хвойные. Таким образом вы легко можете установить желаемое соотношение лиственных и хвойных деревьев! Выбрав первой цифрой 1, второй 6 - вы получите лиственный лес, 7 и 12 - хвойный лес, а поиграв между 1 и 12 - любое процентное соотношение. Примечание: У меня макрос в процессе работы периодически выдает ошибку "loop: no definition exist", природу которой я постичь не могу. Скорее всего она вызвана некорректным вызовом символа, но доказательств тому нет. Однако эта ошибка не критична в работе макроса, просто забиваем диалог и спокойно продолжаем, как будто ничего не случилось. И не надо пугаться - есть вариант, что на другой машине, или на другой карте, этой ошибки не будет... Хотя вряд ли...
Вложение | Архив содержит вырезанные из стандартного каталога растительности "Символ Сет 1 - Фэнтези" лиственные и хвойные деревья. Его содержимое надо поместить в папку CC2\Parts.
Код
macro DENFRST
GOLAYER VEGETATION
ecoff
PARTM #Parts/F-Trees.FCW
1 0 0,0;
gv small 1
gv large 12
gv scale 1
gv small ^D First tree number: (1-6 - Decid, 7-12 Pine)
gv large ^D Last tree number: (from smallest to 12)
GV scale ^D Symbol scale (1):
ifn large-small done
:loop
gp cont ^D Place trees (left=continue, right=quit)
iferr done
random symbolnum
gv symbolnum (symbolnum*(large-small+1))+(small-1)
ifp symbolnum-11 symbol12
ifp symbolnum-10 symbol11
ifp symbolnum-9 symbol10
ifp symbolnum-8 symbol9
ifp symbolnum-7 symbol8
ifp symbolnum-6 symbol7
ifp symbolnum-5 symbol6
ifp symbolnum-4 symbol5
ifp symbolnum-3 symbol4
ifp symbolnum-2 symbol3
ifp symbolnum-1 symbol2
:symbol1
symbol;F-Decid tree 1;scale;scale;0;^D Place tree;
go loop
:symbol2
symbol;F-Decid tree 2;scale;scale;0;^D Place tree;
go loop
:symbol3
symbol;F-Decid tree 3;scale;scale;0;^D Place tree;
go loop
:symbol4
symbol;F-Decid tree 4;scale;scale;0;^D Place tree;
go loop
:symbol5
symbol;F-Decid tree 5;scale;scale;0;^D Place tree;
go loop
:symbol6
symbol;F-Decid tree 6;scale;scale;0;^D Place tree;
go loop
:symbol7
symbol;F-Pine tree 1;scale;scale;0;^D Place tree;
go loop
:symbol8
symbol;F-Pine tree 2;scale;scale;0;^D Place tree;
go loop
:symbol9
symbol;F-Pine tree 3;scale;scale;0;^D Place tree;
go loop
:symbol10
symbol;F-Pine tree 4;scale;scale;0;^D Place tree;
go loop
:symbol11
symbol;F-Pine tree 5;scale;scale;0;^D Place tree;
go loop
:symbol12
symbol;F-Pine tree 6;scale;scale;0;^D Place tree;
go loop
:done
econ
endm

Submitter Info
Name: | Greg Hazzard
eMail: | thedarkelf@aelfen.net


Затененная линия

Название | Затененная линия
Автор | Morgan Olden
Команда | Pointillism1
Описание | Изображает затененную линию с эффектом изменяющейся тени по одной стороне линии или плавной линии.
Инструкции | Выбирайте настройки очень аккуратно! Макрос рисует множество точек для создания эффекта. Проверьте сначала на маленькой зоне. Макрос создает свой временный слой. Но удалять каждую точку отдельно очень сложно!
Вложение | (none)
Код
MACRO pointillism1
ecoff
gv mcoWIDTH 10
gv mcoDM 1
gv mcoWIDTH ^DWidth of shading (10):
gv mcoDM ^DDensity modifier (1=normal, .5=half density, 2=double density) (1):
gv mcoSPACING mcoWIDTH/30*(1/mcoDM)
ge mcoentity ^DSelect object to draw shading along:
iferr mcodone
gp mcoP1 % 0 mcoentity
line mcoP1 ^DWhich side to shade?;
selbyp
erase
gp mcoP2 @0,0
gbrng mcoTEST1 mcoP1 % 1 mcoentity
gbrng mcoTEST2 mcoP1 mcoP2
ifn mcoTEST1-mcoTEST2 mcoCONTROL1
gv mcoSIDE -1
go mcoCONTROL2
:mcoCONTROL1
gv mcoSIDE -1
ifn mcoTEST1-mcoTEST2+180 mcoCONTROL2
gv mcoSIDE 1
:mcoCONTROL2
gdist mcoentitylen % 0 mcoentity % 1 mcoentity
gv mcoentitylen mcoentitylen*100
gv mcounit 100/mcoentitylen
gv mcoD1Cur 0
:mcoloop
gp mcoP1 % mcoD1Cur*mcounit mcoentity
gbrng mcoB1 mcoP1 % (mcoD1Cur*mcounit)+.01 mcoentity
RANDOM mcoRAND1
RANDOM mcoRAND2
RANDOM mcoRAND3
RANDOM mcoRAND4
point ref mcoP1 <mcoB1+(90*mcoSIDE),(mcoWIDTH*mcoRAND1);
point ref mcoP1 <mcoB1+(90*mcoSIDE),(mcoWIDTH*mcoRAND2/2);
point ref mcoP1 <mcoB1+(90*mcoSIDE),(mcoWIDTH*mcoRAND3/5);
gv mcoD1Cur mcoD1Cur+(mcoSPACING*mcoRAND4)
ifp mcoD1Cur-mcoentitylen mcodoneloop
go mcoloop
:mcodoneloop
:mcodone
selbyd
econ


Разрывы на линии

Название | Разрывы на линии
Автор | Morgan Olden
Команда | randombreaks
Описание | Этот макрос ставит вместо указанной линии или плавной линии разрывы различной длинны.
Инструкции | Другие объекты пересекающие рабочую линию нарушают работу макроса. Рекомендую оставить рабочий объект в отдельном слое, спрятать остальные, а по окончании работы макроса переместить результат в нужный слой.
Вложение | (none)
Код
MACRO randombreaks
ecoff
gv mcominskip 0
gv mcomaxskip 1
gv mcomingap 0
gv mcomaxgap 1
gv mcominskip ^DMin segment length: (0)
gv mcomaxskip ^DMax segment length: (1)
gv mcomingap ^DMin gap length: (0)
gv mcomaxgap ^DMax gap length: (1)
:mcodoagain
ge mcoentity ^DSelect line to split:
iferr mcodone
gdist mcolen % 0 mcoentity % 1 mcoentity
gp mcoP1 % 0 mcoentity
:mcoloop
ge mcoentity mcoP1
gdist mcolen % 0 mcoentity % 1 mcoentity
gv mcounit 1/mcolen
RANDOM mcogap
RANDOM mcoskip
gv mcoskippc (mcominskip+((mcomaxskip-mcominskip)*mcoskip))*mcounit
gv mcogappc ((mcominskip+((mcomaxskip-mcominskip)*mcoskip))+(mcomingap+((mcomaxgap-mcomingap)*mcogap)))*mcounit
ifp mcogappc-100 mcodoneloop
gp mcoP2 % mcoskippc mcoentity
gp mcoP3 % mcogappc mcoentity
break mcoentity mcoP2 mcoP3
gp mcoP1 mcoP3
go mcoloop
:mcodoneloop
go mcodoagain
:mcodone
econ


Ручная линия 2

Название | Ручная линия 2
Автор | Morgan Olden
Команда | sketch2
Описание | Изображает линию, как будто бы нарисованную от руки. Detail:
Инструкции | Изменяет линию или плавную линию в подобие проштрихованой линии. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (sketch2.scr) содержит макрос.
Код
macro sketch2
ecoff
rdoff
gv mcoDense 1
gv mcoDense ^DSketch density: (i.e. 1 line every x units) (1)
gv mcoLength 10
gv mcoLength ^DSketch line length: (i.e. Each sketch line is x units long) (10)
gv mcoWidth 1
gv mcoWidth ^DWidth of sketch: (1)
ge mcoentity ^DEntity to draw along:
iferr mcodone
gdist mcoentitylen % 0 mcoentity % .1 mcoentity
gv mcoentitylen mcoentitylen*1000
gv mcounit 100/mcoentitylen
gv mcoSP 0
gp mcoP1 % 0 mcoentity
:mcoloop
RANDOM mcoRLS
gv mcoRLS (mcoRLS*mcoDense/2)+(mcoDense/2)
RANDOM mcoRLE
gv mcoRLE (mcoRLE*mcoLength/2)+(mcoLength/2)
RANDOM mcoROSS
RANDOM mcoROSE
gv mcoROSS (mcoROSS-.5)*mcoWidth
gv mcoROSE (mcoROSE-.5)*mcoWidth
gv mcoSP mcoSP+(mcoRLS*mcounit)
gv mcoEP mcoSP+(mcoRLE*mcounit)
ifp mcoEP-100 mcodoneloop
gp mcoP1 % mcoSP mcoentity
gp mcoP2 % mcoEP mcoentity
gbrng mcoB12 mcoP1 mcoP2
gp mcoP1 ref mcoP1 <mcoB12+90,mcoROSS
gp mcoP2 ref mcoP2 <mcoB12+90,mcoROSE
line mcoP1 mcoP2;
go mcoloop
:mcodoneloop
line mcoP1 % 100 mcoentity;
:mcodone
rdon
econ


Чернильная линия 1

Название | Чернильная линия 1
Автор | Morgan Olden
Команда | inkyline1
Описание | Рисует линию с эффектом 'ручного изображения'.
Инструкции | Макрос изображает серию коротких линий различной толщины.
Вложение | (none)
Код
MACRO inkyline1
ecoff
gv mcoLW 1
gv mcoLW ^DLine thickness? (1)
gv mcoSmooth .5
gv mcoSmooth ^DSmoothness from 0 to 1 (0=smooth, 1=rough, .5=default)
gv mcoSmooth mcoSmooth*2
gv mcoVari .5
gv mcoVari ^DVariation from 0 to 1 (0=fine, 1=course, .5=default)
gv mcoVari mcoVari+.5
gp mcoP1 ^DPoint 1:
iferr mcodone
lwidth 0
:mcodoagain
line mcoP1 ^DPoint 2:;
undo
gp mcoP2 @0,0
gp mcoCP mcoP1
gp mcoPP mcoP1
gbrng mcoB12 mcoP1 mcoP2
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcodone
:mcoloop
RANDOM mcoR1
gv mcoR1 mcoR1*mcoVari*mcoLW*10
RANDOM mcoR2
gv mcoR2 mcoR2*mcoSmooth*mcoLW
gp mcoCP ref mcoCP <mcoB12,mcoR1
gdist mcoD1C mcoP1 mcoCP
ifn mcoD12-mcoD1C mcodoneloop
lwidth mcoR2
line mcoPP mcoCP;
gp mcoPP mcoCP
go mcoloop
:mcodoneloop
line ref mcoCP <mcoB12+180,mcoR1 mcoP2;
gp mcoP1 mcoP2
go mcodoagain
:mcodone
econ


Чернильная линия 2

Название | Чернильная линия 2
Автор | Morgan Olden
Команда | inkyline2
Описание | Преобразовывает имеющуюся линию или плавную линию в линию с эффектом 'ручного изображения'.
Инструкции | Макрос изображает серию коротких линий различной толщины вместо существующей линии или ломаной линии.
Вложение | (none)
Код
MACRO inkyline2
ecoff
gv mcoLW 1
gv mcoLW ^DLine thickness? (1)
gv mcoSmooth .5
gv mcoSmooth ^DSmoothness from 0 to 1 (0=smooth, 1=rough, .5=default)
gv mcoSmooth mcoSmooth*2
gv mcoVari .5
gv mcoVari ^DVariation from 0 to 1 (0=fine, 1=course, .5=default)
gv mcoVari mcoVari+.5
ge mcoentity ^DEntity to draw along:
iferr mcodone
gdist mcoentitylen % 0 mcoentity % .1 mcoentity
gv mcoentitylen mcoentitylen*1000
gv mcounit 100/mcoentitylen
gv mcoCP 0
gp mcoP1 % 0 mcoentity
:mcoloop
RANDOM mcoR1
gv mcoR1 mcoR1*mcoVari*mcoLW*10
RANDOM mcoR2
gv mcoR2 mcoR2*mcoSmooth*mcoLW
gv mcoCP mcoCP+(mcoR1*mcounit)
ifp mcoCP-100 mcodoneloop
gp mcoP2 % mcoCP mcoentity
lwidth mcoR2
line mcoP1 mcoP2;
gp mcoP1 mcoP2
go mcoloop
:mcodoneloop
line mcoP1 % 100 mcoentity;
:mcodone
lwidth 0
econ


Башня Стены Города

Название | Башня Стены Города
Автор | Morgan Olden
Команда | citywalltower
Описание | Изображает зубчатые башни в стиле макроса 'Стена Города 5'. Можно выбрать количество сторон и городской стиль крыши.
Инструкции | Этот макрос предоставляет богатые возможности выбора - 1. Цвет парапета (стандарт - темно-серый) 2. Цвет плоской крыши (стандарт - светло-серый) 3. Количество сторон (стандарт 4; выберите '0' для круглой башни) 4. Плоская или покатая крыша 5. Стиль покатой крыши (стандартный или городской - для городского необходим установленный 'City Designer 2') 6. Название городского стиля (просто набейте название стиля, как 'House Settings' в 'House' диалоге) 7. Ширина прохода между покатой крышей и парапетом. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (CityWallTower.scr) содержит макрос.
Код
macro CityWallTower
ecoff
rdoff
point 10001,10001;
golayer MacroConstruction
scriptm #CityWallTower-vars.scr
ifdef mcoCityWallTowerVarsOK mcoDoneVarCheck
:mcoDefineVars
gv mcoColDS 14
gv mcoColLS 251
gcol mcoColDS ^DParapet colour? (14)
gcol mcoColLS ^DFlat roof colour? (251)
gv mcoTowerSides 4
gn mcoTowerSides ^DHow many sides? (0=circle)
ifz mcoTowerSides-1 mcoCleanup
ifz mcoTowerSides-2 mcoCleanup
gv mcoRS 1
gv mcoRS ^DFlat or Peaked roof? (0=flat, 1=peaked,default)
ifz mcoRS mcoSkipRoofVars
gv mcoRoofStyle 0
gv mcoRoofStyle ^DRoof style? (0=default 1=CD House style) (0)
ifz mcoRoofStyle mcoSkipCDHouseStyle
houseload ^DCityDesigner House style?
:mcoSkipCDHouseStyle
gv mcoWW 0
gv mcoWW ^D Walkway Width: (0)
:mcoSkipRoofVars
gw mcoCityWallTowerVarsOK OK
savevars CityWallTower-vars
go mcoStart
:mcoDoneVarCheck
gv mcoUseDefault 1
gv mcoUseDefault ^DUse saved settings? (1=yes - default - click) (0=no)
ifz mcoUseDefault mcoDefineVars
:mcoStart
selbyp
gv mcoBLeg 0
gv mcoFirstTime 0
gv mcoColDR 11
gv mcoColLR 10
color mcoColLS
lwidth 0
lstyle solid
fstyle solid
gp mcoCP 10001,10001
gp mcoCP ^DTower centre:
gdist mcoTestDist 10001,10001 mcoCP
ifz mcoTestDist mcoCleanup
ifz mcoTowerSides mcodrawcircletower
rpoly mcoTowerSides mcoCP ^DTower size and orientation:
color 0
gp mcoOP @0,0
gdist mcoTestDist mcoCP mcoOP
ifz mcoTestDist mcoCleanup
gdist mcoOD mcoCP mcoOP
gbrng mcoOrient mcoCP mcoOP
gv mcoAngle 360/mcoTowerSides
gp mcoP1 mcoOP
gp mcoP2 ref mcoCP <mcoOrient-(mcoAngle),mcoOD
gdist mcoD12 mcoP1 mcoP2
GBRNG mcoB12 mcoP1 mcoP2
gp mcoP1L ref mcoP1 <mcoB12+90,1.5
gp mcoP1LC ref mcoP1 <mcoB12+90,1.25
gp mcoFirstPoint mcoP1
gp mcoFirstPointL mcoP1L
gp mcoFirstPointLC mcoP1LC
gv mcoFirstBrng mcoB12
gp mcoP3 ref mcoCP <mcoOrient-(mcoAngle*2),mcoOD
gdist mcoD23 mcoP2 mcoP3
gv mcoSideCount 3
:mcoloop
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23 mcoP2 mcoP3
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw 1/mcowcs*(1.5)
gv mcoawCren 1/mcowcs*(1.25)
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2LC ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoawCren
lwidth 0
poly mcoP1L mcoP2L mcoP2 mcoP1;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop
gn mcoLoopCount (mcoD12LC-11.25)/7.5
ifz mcoFirstTime mcoControl1
gn mcoLoopCount (mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5 mcoP1LC ref mcoP1LC <mcoB12,5;
:mcoControl1
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop
ifn mcoLoopCount mcoDoneCrenLoop
gv mcoCrenDist (mcoD12LC-11.25)/mcoLoopCount
gv mcoCurLen 6.25
ifz mcoFirstTime mcoCrenLoop
gv mcoCrenDist (mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC <mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop
:mcoDoneCrenLoop
lwidth 0
ifz mcoSideCount-mcoTowerSides mcoDone
gv mcoSideCount mcoSideCount+1
gp mcoP4 ref mcoCP <mcoOrient-(mcoAngle*(mcoSideCount-1)),mcoOD
gdist mcoD34 mcoP3 mcoP4
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp mcoP3 mcoP4
gp mcoP1L mcoP2L
gp mcoP2L mcoP3L
gp mcoP1LC mcoP2LC
gp mcoP2LC mcoP3LC
gv mcoBLeg mcoB12
gv mcoFirstTime 1
goto mcoloop
:mcoDone
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp mcoP3 mcoFirstPoint
gp mcoP1L mcoP2L
gp mcoP2L mcoP3L
gp mcoP1LC mcoP2LC
gp mcoP2LC mcoP3LC
gv mcoBLeg mcoB12
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23 mcoP2 mcoP3
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw 1/mcowcs*(1.5)
gv mcoawCren 1/mcowcs*(1.25)
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2LC ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoawCren
lwidth 0
poly mcoP1L mcoP2L mcoP2 mcoP1;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop3
gn mcoLoopCount (mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5 mcoP1LC ref mcoP1LC <mcoB12,5;
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop3
ifn mcoLoopCount mcoDoneCrenLoop3
gv mcoCrenDist (mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop3
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC <mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop3
:mcoDoneCrenLoop3
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp mcoP3 mcoP4
gp mcoP1L mcoP2L
gp mcoP2L mcoP3L
gp mcoP1LC mcoP2LC
gp mcoP2LC mcoP3LC
gv mcoBLeg mcoB12
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23 mcoFirstBrng
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw 1/mcowcs*(1.5)
gv mcoawCren 1/mcowcs*(1.25)
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2LC ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoawCren
lwidth 0
poly mcoP1L mcoP2L mcoP2 mcoP1;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop4
gn mcoLoopCount (mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5 mcoP1LC ref mcoP1LC <mcoB12,5;
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop4
ifn mcoLoopCount mcoDoneCrenLoop4
gv mcoCrenDist (mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop4
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC <mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop4
:mcoDoneCrenLoop4
lwidth 2.5
path ref mcoP2LC <mcoB12-180,5 mcoP2LC ref mcoP2LC <mcoB23,5;
changec2 mcoColDS
:mcoRoofConstruction
ifz mcoRS mcoCleanup
gcos mcoCOS mcoAngle/2
gv mcoCOS 1/mcoCOS
gv mcoID mcoOD-(mcoWW*mcoCOS)
ifz mcoRoofStyle-1 mcoCleanup
gv mcoC 0
lwidth 0;fstyle solid;lstyle solid;color 0
poly
mcoCP
:mcoRoofLoop1
ref mcoCP <mcoOrient-(mcoAngle*mcoC),mcoID
gv mcoC mcoC+1
ifp .5-(mcoC/mcoTowerSides) mcoRoofLoop1

changec2 mcoColDR
poly
mcoCP
ref mcoCP <mcoOrient-(mcoAngle*(mcoC-1)),mcoID
:mcoRoofLoop2
ref mcoCP <mcoOrient-(mcoAngle*mcoC),mcoID
gv mcoC mcoC+1
ifp mcoTowerSides-mcoC+1 mcoRoofLoop2

changec2 mcoColLR
lwidth 1
gv mcoC 1
:mcoRidgeLoop1
line mcoCP ref mcoCP <mcoOrient-(mcoAngle*mcoC),mcoID;
changec2 mcoColDR
gv mcoC mcoC+1
ifp .5-(mcoC/mcoTowerSides) mcoRidgeLoop1
changec2 mcoColLR
:mcoRidgeLoop2
line mcoCP ref mcoCP <mcoOrient-(mcoAngle*mcoC),mcoID;
changec2 mcoColLR
gv mcoC mcoC+1
ifp mcoTowerSides-mcoC+1 mcoRidgeLoop2
changec2 mcoColLR
lwidth 0
rpoly mcoTowerSides mcoCP ref mcoCP <mcoOrient+(mcoAngle/2),2
changec2 mcoColLR
go mcoCleanup

:mcodrawcircletower
cirp mcoCP ^DTower diameter:
gp mcoOP @0,0
gdist mcoTestDist mcoCP mcoOP
ifz mcoTestDist moAbort
erase
gv mcoTW mcoTestDist*2
lwidth 0;color mcoColLS;fstyle solid;cird mcoTW mcoCP;
lwidth 1.5;color 0;cird mcoTW mcoCP;
changec2 mcoColDS
gv mcoOutsideTW mcoTW+.75
gn mcoOutsideCirc mcoOutsideTW*3.1416/7.5
gv mcoOneArcUnit 360/mcoOutsideCirc/7.5
gv mcocurrentangle 0
:mcocirccrenloop
lwidth 2.5;color 0;fstyle solid
arcr mcoCP mcoOutsideTW/2 mcocurrentangle (mcocurrentangle+(mcoOneArcUnit*5))
|changec2 mcoColDS
gv mcocurrentangle (mcocurrentangle+(mcoOneArcUnit*7.5))
ifp mcocurrentangle-360 mcodonecirccrenloop
go mcocirccrenloop
:mcodonecirccrenloop
ifz mcoRS mcoCleanup
ifz mcoRoofStyle mcoDefaultCircRoof
gv mcoTowerSides 15
gv mcoAngle 360/mcoTowerSides
gv mcoOrient 90
gv mcoOD mcoTW/2
gcos mcoCOS mcoAngle/2
gv mcoCOS 1/mcoCOS
gv mcoID mcoOD-(mcoWW*mcoCOS)
go mcoCleanup
:mcoDefaultCircRoof
lwidth 0;fstyle solid
color mcoColLR;cird mcoTW-(mcoWW*2) mcoCP;
color mcoColDR
arcw mcoCP (mcoTW-(mcoWW*2))/2 200 350
|color 0;fstyle hollow;cird mcoTW-(mcoWW*2) mcoCP;
go mcoCleanup

:mcoCleanup
lwidth 0
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
ifz mcoRoofStyle mcoAbort
:mcoCDHouseStyle
gv mcoC 0
housem 8
:mcoCDRoofLoop
ref mcoCP <mcoOrient-(mcoAngle*mcoC),mcoID
gv mcoC mcoC+1
ifn mcoC-mcoTowerSides mcoCDRoofLoop

mcoCP;
:mcoabort
selby1
keep 10001,10001
erase 10001,10001
selrest
rdon
econ


Деревья

Название

Деревья
Автор | Morgan Olden
Команда | TREES
Описание Ставит один из 19 древесных символов из CD2 'Miscellaneous' каталога наугад, вращает его на случайное количество градусов, и затем позволяет вам поставить его.
Инструкции Макрос запрашивает два значения определяющих диапазон символов, которые Вы желаете разместить. Например, вы можете ставить только символы от 'Tree3' до 'Tree7'. В этом случае надо выбрать:

Smallest tree size: (1-19) 3
Largest tree size: (smallest-19) 7

Макрос продолжает выбирать символы, пока вы не щелкнете правой кнопкой мыши во время запроса:

(left=continue, right=quit)

Примечание: Перед использованием макроса, придется загрузить 'Miscellaneous' каталог , и 'выбрать' все символы, которые Вы будете использовать. (То есть для вышеупомянутого примера, кликните на каждый из символов от 'Tree3' до 'Tree7', сбросьте правым кликом 'finish', и тогда напечатайте 'tree' в командной строке чтобы начать макрос.)

Изменение для использования других символов

Этот макрос может легко быть изменен для использования с другими символами. Просто отредактируйте макрос, начиная со строки 34:

:symbol1
symbol;Tree1;1;1;angle;^DLoc:;
go loop
:symbol2
symbol;Tree2;1;1;angle;^DLoc:;
go loop
:symbol3
symbol;Tree3;1;1;angle;^DLoc:;
go loop
:symbol4
...
...
...

Для этой секции, и каждой из подобных секций, которые следуют, измените текст, обозначенный выше красным цветом (Tree1, Tree2, и т.д.) на название другого символа. Название секции указывает диапазон числа, которому символ будет соответствовать (то есть если вы запускаете макрос с минимумом/максимумом 1 и 5, будут использованы символы из секций от 1 до 5).
Вложение | нет

Код
macro TREES
ecoff
gv small 1
gv large 19
gv small ^DSmallest tree size: (1-19)
gv large ^DLargest tree size: (smallest-19)
ifn large-small done
:loop
gp cont ^D(left=continue, right=quit)
iferr done
random symbolnum
random angle
gv symbolnum (symbolnum*(large-small+1))+(small-1)
gv angle angle*360
ifp symbolnum-18 symbol19
ifp symbolnum-17 symbol18
ifp symbolnum-16 symbol17
ifp symbolnum-15 symbol16
ifp symbolnum-14 symbol15
ifp symbolnum-13 symbol14
ifp symbolnum-12 symbol13
ifp symbolnum-11 symbol12
ifp symbolnum-10 symbol11
ifp symbolnum-9 symbol10
ifp symbolnum-8 symbol9
ifp symbolnum-7 symbol8
ifp symbolnum-6 symbol7
ifp symbolnum-5 symbol6
ifp symbolnum-4 symbol5
ifp symbolnum-3 symbol4
ifp symbolnum-2 symbol3
ifp symbolnum-1 symbol2
:symbol1
symbol;Tree1;1;1;angle;^DLoc:;
go loop
:symbol2
symbol;Tree2;1;1;angle;^DLoc:;
go loop
:symbol3
symbol;Tree3;1;1;angle;^DLoc:;
go loop
:symbol4
symbol;Tree4;1;1;angle;^DLoc:;
go loop
:symbol5
symbol;Tree5;1;1;angle;^DLoc:;
go loop
:symbol6
symbol;Tree6;1;1;angle;^DLoc:;
go loop
:symbol7
symbol;Tree7;1;1;angle;^DLoc:;
go loop
:symbol8
symbol;Tree8;1;1;angle;^DLoc:;
go loop
:symbol9
symbol;Tree9;1;1;angle;^DLoc:;
go loop
:symbol10
symbol;Tree10;1;1;angle;^DLoc:;
go loop
:symbol11
symbol;Tree11;1;1;angle;^DLoc:;
go loop
:symbol12
symbol;Tree12;1;1;angle;^DLoc:;
go loop
:symbol13
symbol;Tree13;1;1;angle;^DLoc:;
go loop
:symbol14
symbol;Tree14;1;1;angle;^DLoc:;
go loop
:symbol15
symbol;Tree15;1;1;angle;^DLoc:;
go loop
:symbol16
symbol;Tree16;1;1;angle;^DLoc:;
go loop
:symbol17
symbol;Tree17;1;1;angle;^DLoc:;
go loop
:symbol18
symbol;Tree18;1;1;angle;^DLoc:;
go loop
:symbol19
symbol;Tree19;1;1;angle;^DLoc:;
go loop
:done
econ


Дощатый Настил 1

Название

Дощатый Настил 1
Автор | Morgan Olden
Команда | BOARDWALK1
Описание Рисует дощатый настил по линии или плавной линии.

Инструкции Макрос запрашивает 5 пунктов информации, как показано ниже. Значения по умолчанию обозначены в скобках, и производят дощатый настил, подобный изображенному выше.
  1. Average board width. (1.5) - Средняя ширина доски.
  2. Gap between boards. (.2) - Щель между досками.
  3. Width of the boardwalk. (5) - Ширина настила.
  4. Boardwalk edges: smooth or jagged (jagged) - Края настила (ровные или неровные)
  5. Boardwalk color (single or tri-color). (single) - Цвет настила (одинарный или тройной)

Макрос спрашивает об объекте, по которому будет рисоваться дощатый настил. Пожалуйста обратите внимание, что объект, который Вы выбираете, будет включен в дощатый настил. Доски будут изображены изменяющихся размеров, в среднем обозначенной ширины. Доски на неровном дощатом настиле лягут с вариантом до +/- половину фута по ширине в любую сторону.

Для лучшего результата, выберите линии и плавные линии для объекта. При использовании плавных линий, делать кривые настолько плавными насколько возможно. Более узкие правления и дощатые настилы обратятся с крутыми кривыми лучше. У макроса бывают сбои, если угол излома близок даже к 90 градусам, или радиус плавной линии слишком мал.

Этот макрос также конфликтует с объектом, если под ним уже что-то нарисовано. В этом случае рекомендуется рисовать дощатый настил на временном слое, при замораживании всех других слоев.

Другая возможная причина сбоев - слишком большое отдаление от дощатого настила в процессе преобразования. Если макрос сбоит, попытайтесь снова после изменения масштаба изображения ближе к объекту преобразования.

Возможности:

Чтобы изменить цвета, отредактируйте строки 3 и 4 макроса. 'McoBcol' - цвет доски, 'mcoRcol' - цвет основы. Отредактировать значения по умолчанию можно на строках с 6 по 9.

Трехцветный дощатый настил создается случайным образом изменяя цвет досок на 1 или 2 значения выше (то есть 41 или 42). Если вы измените значение для mcoBcol, изменится и цвет досок.

Измените строку 43 для изменения ширины досок:

gv mcorand1 (rand1-.5)*.2

Измените красную цифру (.2). Эта цифра представляет процент расширения или сужения от заявленной средней ширины доски. В этом случае, доски могут быть сдвинуты до 20% больше или меньше ширины заказанной пользователем.

Измените строки 44 и 45 для варианта сдвига досок относительно центра (только для неровных краев настила)

gv mcoAddWidthL AddWidth*(rand2-.5)*.5
gv mcoAddWidthR AddWidth*(rand3-.5)*.5

Измените значения выделеные красным (.5). Эта цифра представляет максимальное различие в длине доски, выраженной в футах. В этом случае, доски отличаются по длине до половины фута.
Вложение | нет
Code
macro BOARDWALK1
ecoff
gv mcoBcol 40
gv mcoRcol 36
lwidth 0;lstyle solid;fstyle solid;color 0
gv mcoavgwidth 1.5
gv mcogapwidth .2
gv mcoBWwidth 5
gv mcoAddWidth 1
gv mcoVariColor 0
gv mcoavgwidth ^DAverage board width (1.5):
gv mcogapwidth ^DGap between boards (.2):
gv mcoBWwidth ^DWidth of the boardwalk (5):
gv mcoAddWidth ^DBoardwalk edges: (smooth=0, jagged=1)
gv mcoVariColor ^DBoardwalk color: (1 color=0, tri-colored=1)
ge mcoentity ^DSelect object to draw a boardwalk along:
iferr mcodone
gp mcoentityP % 0 mcoentity
selby1
changec mcoentityP 0
selbyp
changefs solid
changelw .5
changec2 mcoRcol
gdist mcoentityPlen % 0 mcoentityP % .01 mcoentityP
gv mcoentityPlen mcoentityPlen*10000
gv mcounit 100/mcoentityPlen
gv mcoD1Cur 0
gp mcoP1 % 0 mcoentityP
gp mcoP2 % 100 mcoentityP
gbrng mcosegbrng mcoP1 % 1 mcoentityP
gp mcoL1 ref mcoP1 <mcosegbrng+90,mcoBWwidth/2
gp mcoR1 ref mcoP1 <mcosegbrng-90,mcoBWwidth/2
lwidth .5
offsetcpy (mcoBWwidth/2)-1 mcoP1 mcoL1
offsetcpy (mcoBWwidth/2)-1 mcoP1 mcoR1
lwidth 0
:mcoloop
RANDOM mcorand1
RANDOM mcorand2
RANDOM mcorand3
RANDOM mcorand4
gv mcorand1 (mcorand1-.5)*.4
gv mcoAddWidthL mcoAddWidth*(mcorand2-.5)*.5
gv mcoAddWidthR mcoAddWidth*(mcorand3-.5)*.5
gv mcopostwidth mcoavgwidth+(mcoavgwidth*mcorand1)
gp mcoP1 % (mcoD1Cur+(mcopostwidth))*mcounit mcoentityP
gbrng mcosegbrng mcoP1 % (mcoD1Cur+(mcopostwidth))*mcounit+.01 mcoentityP
gp mcoL2 ref mcoP1 <mcosegbrng+90,(mcoBWwidth/2)
gp mcoR2 ref mcoP1 <mcosegbrng-90,(mcoBWwidth/2)
gbrng mcoBL12 mcoL1 mcoL2
gbrng mcoBR12 mcoR1 mcoR2
gdist mcoDL12 mcoL1 mcoL2
gdist mcoDR12 mcoR1 mcoR2
gv mcoDL12 mcoDL12-mcogapwidth
gv mcoDR12 mcoDR12-mcogapwidth
ifn mcoDL12 mcocontrol1
ifn mcoDR12 mcocontrol2
go mcocontrol3
:mcocontrol1
gv mcoDL12 0
go mcocontrol3
:mcocontrol2
gv mcoDR12 0
:mcocontrol3
gp mcoL1a ref mcoL1 <mcosegbrng-90,mcoAddWidthL
gp mcoR1a ref mcoR1 <mcosegbrng+90,mcoAddWidthR
gv mcoBcolDraw mcoBcol
ifz mcoVariColor mcocontrol4
ifn mcorand4-.5 mcocontrol4
gv mcoBcolDraw mcoBcolDraw+1
ifn mcorand4-.75 mcocontrol4
gv mcoBcolDraw mcoBcolDraw+1
:mcocontrol4
poly mcoL1a ref mcoL1a <mcoBL12,mcoDL12 ref mcoR1a <mcoBR12,mcoDR12 mcoR1a;
selbyp
changec2 mcoBcolDraw
selby1
gp mcoL1 mcoL2;gp mcoR1 mcoR2
gv mcoD1Cur mcoD1Cur+mcopostwidth
ifp mcoD1Cur-mcoentityPlen+(1.3*mcoavgwidth) mcodoneloop
go mcoloop
:mcodoneloop
gbrng mcosegbrng % 99.99 mcoentityP mcoP2
gp mcoL2 ref mcoP2 <mcosegbrng+90,(mcoBWwidth/2)
gp mcoR2 ref mcoP2 <mcosegbrng-90,(mcoBWwidth/2)
poly mcoL1 mcoL2 mcoR2 mcoR1;
selbyp
changec2 mcoBcol
:mcodone
selbyd
econ


Дощатый Настил 2

Название

 Дощатый Настил 2
Автор | Morgan Olden
Команда | BOARDWALK2
Описание Преобразование линии или плавной линии в дощатый настил. Улучшенная версия Дощатого Настила 1, может также испльзоваться для изображения деревянных мостков, парапетов стен, или сходней.

Инструкции Новое:
  • Меньше ошибок в процессе работы.
  • Сохраняются настройки.
  • Больше возможностей выбора (можно сравнивать цвета).
  • Все объекты изображенные макросом по окончании работы макроса группируются.

Инструкции:

Макрос запрашивает шесть пунктов информации, как указано ниже. Стандартные величины указаны в скобках, при этих значениях настил выглядит как на приведенных изображениях.
  1. Average board width. (1.5) - Средняя ширина доски
  2. Gap between boards. (.2) - Щель между досками
  3. Width of the boardwalk. (5) - Ширина настила
  4. Boardwalk edges: smooth or jagged (jagged) - Края настила (ровные или неровные)
  5. Boardwalk color: boards (40) - Цвет досок
  6. Boardwalk color: rails (36) - Цвет направляющих

Макрос спрашивает об объекте, по которому будет рисоваться дощатый настил. Пожалуйста обратите внимание, что объект, который Вы выбираете, будет включен в дощатый настил. Доски будут изображены изменяющихся размеров, в среднем обозначенной ширины. Доски на неровном дощатом настиле лягут с вариантом до +/- половину фута по ширине в любую сторону.

Для лучшего результата, выберите линии и плавные линии для объекта. При использовании плавных линий, делать кривые настолько плавными насколько возможно. Более узкие правления и дощатые настилы обратятся с крутыми кривыми лучше. У макроса бывают сбои, если угол излома близок даже к 90 градусам, или радиус плавной линии слишком мал.

Все объекты изображенные макросом по окончании работы макроса группируются.

В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.

Вложение | Файл скрипта (boardwalk2.scr) содержит макрос.
Код
macro BOARDWALK2
ecoff
gl mcoCredits ---Macro design by Morgan Olden (C)2001---
rdoff
point 10001,10001;
golayer MacroConstruction
scriptm #boardwalk-vars.scr
ifdef mcoVarsOK mcoDoneVarCheck
:mcoDefineVars
gv mcoavgwidth 1.5
gv mcogapwidth .2
gv mcoBWwidth 5
gv mcoAddWidth 1
gv mcoBcol 40
gv mcoRcol 36
gv mcoavgwidth ^DAverage board width (1.5):
gv mcogapwidth ^DGap between boards (.2):
gv mcoBWwidth ^DWidth of the boardwalk (5):
gv mcoAddWidth ^DBoardwalk edges: (smooth=0, jagged=1)
gv mcoBcol ^DColour of boards (40):
gv mcoRcol ^DColour of rails (36):
gw mcoVarsOK OK
savevars boardwalk-vars
go mcoStart
:mcoDoneVarCheck
gv mcoUseDefault 1
gv mcoUseDefault ^DUse saved settings? (1=yes - default - click) (0=no)
ifz mcoUseDefault mcoDefineVars
:mcoStart
lwidth 0.5;lstyle solid;fstyle solid;color 0
ge mcoentity ^DSelect object to draw a boardwalk along:
iferr mcodone
selbyp
gdist mcoentitylen % 0 mcoentity % 1 mcoentity
gv mcoentitylen mcoentitylen*100
gv mcounit 100/mcoentitylen
gv mcoD1Cur 0
gp mcoP1 % 0 mcoentity
gv mcoC 0
path
:mcoCentreRailLoop
% mcoC*mcounit mcoentity
gv mcoC mcoC+mcoavgwidth
ifn mcoC-mcoentitylen mcoCentreRailLoop
% 100 mcoentity;
changec2 mcoRcol
gv mcoC 0
path
:mcoLeftRailLoop
gp mcoTP % mcoC*mcounit mcoentity
gbrng mcoTB mcoTP % (mcoC*mcounit)+.1 mcoentity
ref mcoTP <mcoTB+90,(mcoBWwidth/2)-1
gv mcoC mcoC+mcoavgwidth
ifn mcoC-mcoentitylen mcoLeftRailLoop
gbrng mcoTB % 99.9 mcoentity % 100 mcoentity
ref % 100 mcoentity <mcoTB+90,(mcoBWwidth/2)-1;
changec2 mcoRcol
gv mcoC 0
path
:mcoRightRailLoop
gp mcoTP % mcoC*mcounit mcoentity
gbrng mcoTB mcoTP % (mcoC*mcounit)+.1 mcoentity
ref mcoTP <mcoTB-90,(mcoBWwidth/2)-1
gv mcoC mcoC+mcoavgwidth
ifn mcoC-mcoentitylen mcoRightRailLoop
gbrng mcoTB % 99.9 mcoentity % 100 mcoentity
ref % 100 mcoentity <mcoTB-90,(mcoBWwidth/2)-1;
changec2 mcoRcol
gbrng mcosegbrng mcoP1 % .01 mcoentity
gp mcoL1 ref mcoP1 <mcosegbrng+90,mcoBWwidth/2
gp mcoR1 ref mcoP1 <mcosegbrng-90,mcoBWwidth/2
lwidth 0
:mcoloop
RANDOM mcorand1
RANDOM mcorand2
RANDOM mcorand3
gv mcorand1 (mcorand1-.5)*.4
gv mcoAddWidthL mcoAddWidth*(mcorand2-.5)*.5
gv mcoAddWidthR mcoAddWidth*(mcorand3-.5)*.5
gv mcopostwidth mcoavgwidth+(mcoavgwidth*mcorand1)
gp mcoP1 % (mcoD1Cur+(mcopostwidth))*mcounit mcoentity
gbrng mcosegbrng mcoP1 % (mcoD1Cur+(mcopostwidth))*mcounit+.01 mcoentity
gp mcoL2 ref mcoP1 <mcosegbrng+90,(mcoBWwidth/2)
gp mcoR2 ref mcoP1 <mcosegbrng-90,(mcoBWwidth/2)
gbrng mcoBL12 mcoL1 mcoL2
gbrng mcoBR12 mcoR1 mcoR2
gdist mcoDL12 mcoL1 mcoL2
gdist mcoDR12 mcoR1 mcoR2
gv mcoDL12 mcoDL12-mcogapwidth
gv mcoDR12 mcoDR12-mcogapwidth
ifn mcoDL12 mcocontrol1
ifn mcoDR12 mcocontrol2
go mcocontrol3
:mcocontrol1
gv mcoDL12 0
go mcocontrol3
:mcocontrol2
gv mcoDR12 0
:mcocontrol3
gp mcoL1a ref mcoL1 <mcosegbrng+90,mcoAddWidthL
gp mcoR1a ref mcoR1 <mcosegbrng-90,mcoAddWidthR
poly mcoL1a ref mcoL1a <mcoBL12,mcoDL12 ref mcoR1a <mcoBR12,mcoDR12 mcoR1a;
changec2 mcoBcol
gp mcoL1 mcoL2;gp mcoR1 mcoR2
gv mcoD1Cur mcoD1Cur+mcopostwidth
ifp mcoD1Cur-mcoentitylen+(1.3*mcoavgwidth) mcodoneloop
go mcoloop
:mcodoneloop
gp mcoP2 % 100 mcoentity
gbrng mcosegbrng % 99 mcoentity mcoP2
gp mcoL2 ref mcoP2 <mcosegbrng+90,(mcoBWwidth/2)
gp mcoR2 ref mcoP2 <mcosegbrng-90,(mcoBWwidth/2)
poly mcoL1 mcoL2 mcoR2 mcoR1;
changec2 mcoBcol
:mcodone
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
:mcoabort
selby1
keep 10001,10001
erase 10001,10001
selrest
rdon
econ


Палисад 1

Название | Палисад 1
Автор | Morgan Olden
Команда | PALISADE1
Описание | Преобразование существующей линии в палисад. Палисад выглядит как цепь кругов различного размера с бордюром.
Инструкции | Возможности: 1. Макрос запрашивает средний диаметр бревна палисада, и рисует палисад модифицируя это значение на +/-30%. 2. Можно изменить стандартные цвета палисада, отредактировав линию 3 и 4 макроса. LPC - цвет бревна, OPC - цвет контура.
Вложение | нет

Код
Macro PALISADE1
ecoff
gv LPC 44
gv OPC 36
lwidth 0;lstyle solid
gv avgwidth 1
gv avgwidth ^DAverage post width:
ge entity ^DSelect object to draw a palisade along:
gdist entitylen % 0 entity % 1 entity
gv entitylen entitylen*100
gv unit 100/entitylen
gv D1Cur 0
:loop
RANDOM rand1
gv rand1 (rand1*.3)-.3
gv postwidth avgwidth+(avgwidth*rand1)
color LPC;fstyle solid
cird postwidth % (D1Cur+(postwidth/2))*unit entity;
color OPC;fstyle hollow
cird postwidth % (D1Cur+(postwidth/2))*unit entity;
gv D1Cur D1Cur+postwidth
ifp D1Cur-entitylen+(1.3*avgwidth) doneloop
go loop
:doneloop
color LPC;fstyle solid
cird (entitylen-D1cur) % (D1Cur+(entitylen-D1cur)/2)*unit entity;
color OPC;fstyle hollow
cird (entitylen-D1cur) % (D1Cur+(entitylen-D1cur)/2)*unit entity;
selbyd
econ


Плаисад 2

Название | Палисад 2
Автор | Morgan Olden
Команда | PALISADE2
Описание | Изображение палисада, как рисование линии. Палисад появляется как цепь кругов изменяющейся ширины с контуром.
Инструкции | Возможности: 1. Макрос запрашивает средний диаметр бревна палисада, и рисует палисад модифицируя это значение на +/-30%. 2. Можно изменить стандартные цвета палисада, отредактировав линию 3 и 4 макроса. LPC - цвет бревна, OPC - цвет контура.
Вложение | нет

Код
Macro PALISADE2
ecoff
gv LPC 44
gv OPC 36
lwidth 0;lstyle solid
gv avgwidth 1
gv avgwidth ^DAverage post width:
gp P1 ^DFirst point:
:segmentloop
line P1 ^DNext point:;
|gp P2 @0,0
gdist testdist P1 P2
ifz testdist donesegmentloop
selbyp;erase
gbrng B12 P1 P2
gdist D12 P1 P2
gv D1Cur 0
:loop
RANDOM rand1
gv rand1 (rand1*.3)-.3
gv postwidth avgwidth+(avgwidth*rand1)
color LPC;fstyle solid
cird postwidth ref P1 <B12,D1Cur+(postwidth/2);
color OPC;fstyle hollow
cird postwidth ref P1 <B12,D1Cur+(postwidth/2);
gv D1Cur D1Cur+postwidth
ifp D1Cur-D12+(1.3*avgwidth) doneloop
go loop
:doneloop
color LPC;fstyle solid
cird (D12-D1cur) ref P1 <B12,D1Cur+(D12-D1cur)/2;
color OPC;fstyle hollow
cird (D12-D1cur) ref P1 <B12,D1Cur+(D12-D1cur)/2;
gp P1 P2
go segmentloop
:donesegmentloop
selbyd
econ


Парапет 1

Название | Парапет 1
Автор | Morgan Olden
Команда | PARAPET1
Описание | Изображает зубчатый парапет между двумя точками.
Instructions | Макрос не имеет настроек. Просто укажите две точки и ждите пока макрос работает. Макрос рисует зубцу вверху, если точки стоят слева направо - на приведенном рисунке левая точка первая. Макрос изображает 5-футовые зубцы и 2.5-футовые промежутки между ними. Для смены цвета парапета измените значение 'ColDS' на третьей строке макроса.
Вложение | Нет
Код
//Morgan Olden (June 2000)
macro PARAPET1
ecoff
gv ColDS 18
gp P1 ^DPoint 1:
iferr done
gp P2 ^DPoint 2:
iferr done
color ColDS;lwidth 1.5;fstyle solid;lstyle solid
line P1 P2;
color 0;fstyle hollow
line P1 P2;
gdist DTS P1 P2
gv DTS DTS-12.5
gv remainder DTS
:remainderloop
ifz remainder doneremainderloop
ifn remainder-7.5 doneremainderloop
gv remainder remainder-7.5
go remainderloop
:doneremainderloop
gbrng CrenBrng P1 P2
gp P1 ref P1 <(CrenBrng+90),.5
gp P2 ref P2 <(CrenBrng+90),.5
gp Cren1 ref P1 <CrenBrng,(remainder/2)+7.5
gv CrenTDist DTS-remainder
lwidth 2.5;color ColDS;fstyle solid
line P1 ref P1 <CrenBrng,5+(remainder/2);
color 0;fstyle hollow
line P1 ref P1 <CrenBrng,5+(remainder/2);
gp CrenS Cren1
ifn DTS-7.5 control1
:loop
gp Cren2 ref Cren1 <CrenBrng,5
lstyle solid;color ColDS;lwidth 2.5;fstyle solid;line Cren1 Cren2;
color 0;fstyle hollow;line Cren1 Cren2;
gdist CrenDist CrenS Cren2
ifn CrenTDist-CrenDist-7.5 control1
gp Cren1 ref Cren1 <CrenBrng,7.5
go loop
:control1
lwidth 2.5;color ColDS;fstyle solid
line P2 ref P2 <CrenBrng+180,5+(remainder/2);
color 0;fstyle hollow
line P2 ref P2 <CrenBrng+180,5+(remainder/2);
:done
econ


Парапет 2

Название | Парапет 2
Автор | Morgan Olden
Команда | parapet2
Описание | Преобразует существующую линию в парапет зубчатой стены. Работает на открытые и закрытые объекты.
Инструкции | Версия 2.0 Полностью измененный макрос, заменяющий старую версию и работающий на закрытые объекты. Должен работать немного лучше своего предшественника. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (parapet2.scr) содержит макрос.
Код
macro parapet2
ecoff
rdoff
point 10001,10001;
golayer MacroConstruction1
golayer MacroConstruction
:mcoStart
gv mcoColDS 18
gv mcoColLS 16
ge mcoEntity ^DEntity
iferr mcoDone
gp mcoP1 % 0 mcoentity
line mcoP1 ^DWhich side to crenelate?;
selbyp
erase
gp mcoP2 @0,0
gbrng mcoTEST1 mcoP1 % 1 mcoentity
gbrng mcoTEST2 mcoP1 mcoP2
ifp mcoTEST1-mcoTEST2 mcoControl1
gv mcoSIDE -1
ifp mcoTEST2-mcoTEST1-180 mcoControl2
gv mcoSIDE 1
go mcoControl2
:mcoControl1
gv mcoSIDE 1
ifp mcoTEST1-mcoTEST2-180 mcoControl2
gv mcoSIDE -1
:mcoControl2
gv mcoClosed 1
gdist mcoTestDist % 0 mcoEntity % 100 mcoEntity
ifz mcoTestDist mcoControl3
gv mcoClosed 0
:mcoControl3
gdist mcoTotLen % 0 mcoEntity % .1 mcoEntity
gv mcoTotLen mcoTotLen*1000
gv mcoUnit 100/mcoTotLen
gv mcoremainder mcoTotLen-(2.5*mcoClosed)
gv mcosegments 0
:mcoremainderloop
ifn mcoremainder-7.5 mcodoneremainderloop
gv mcosegments mcosegments+1
gv mcoremainder mcoremainder-7.5
go mcoremainderloop
:mcodoneremainderloop
gv mcopartlen ((mcoTotLen-(2.5*mcoClosed))-((mcosegments-1)*2.5))/mcosegments
gv mcoPartFrag mcopartlen/5
selby1
CHANGEC mcoentity 0
CHANGEC2 mcoentity mcoColDS
CHANGELW mcoentity 1.5
CHANGEFS mcoentity SOLID
selbyp
lwidth 2.5;fstyle solid;color 0
gv mcoLC (2.5*mcoClosed)
:mcoLoop
gbrng mcoB1 % mcoLC*mcoUnit mcoEntity % (mcoLC*mcoUnit)+.01 mcoEntity
gp mcoP1 ref % mcoLC*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+mcoPartFrag)*mcoUnit mcoEntity % ((mcoLC+mcoPartFrag)*mcoUnit)+.01 mcoEntity
gp mcoP2 ref % (mcoLC+mcoPartFrag)*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+(mcoPartFrag*2))*mcoUnit mcoEntity % ((mcoLC+(mcoPartFrag*2))*mcoUnit)+.01 mcoEntity
gp mcoP3 ref % (mcoLC+(mcoPartFrag*2))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+(mcoPartFrag*3))*mcoUnit mcoEntity % ((mcoLC+(mcoPartFrag*3))*mcoUnit)+.01 mcoEntity
gp mcoP4 ref % (mcoLC+(mcoPartFrag*3))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+(mcoPartFrag*4))*mcoUnit mcoEntity % ((mcoLC+(mcoPartFrag*4))*mcoUnit)+.01 mcoEntity
gp mcoP5 ref % (mcoLC+(mcoPartFrag*4))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+(mcoPartFrag*5))*mcoUnit mcoEntity % ((mcoLC+(mcoPartFrag*5))*mcoUnit)+.01 mcoEntity
gp mcoP6 ref % (mcoLC+(mcoPartFrag*5))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
path mcoP1 mcoP2 mcoP3 mcoP4 mcoP5 mcoP6;
changec2 mcoColDS
gv mcoLC mcoLC+mcopartlen+2.5
ifn mcoLC-mcoTotLen+8 mcoLoop
gbrng mcoB1 % mcoLC*mcoUnit mcoEntity % (mcoLC*mcoUnit)+.01 mcoEntity
gp mcoP1 ref % mcoLC*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+mcoPartFrag)*mcoUnit mcoEntity % ((mcoLC+mcoPartFrag)*mcoUnit)+.01 mcoEntity
gp mcoP2 ref % (mcoLC+mcoPartFrag)*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+(mcoPartFrag*2))*mcoUnit mcoEntity % ((mcoLC+(mcoPartFrag*2))*mcoUnit)+.01 mcoEntity
gp mcoP3 ref % (mcoLC+(mcoPartFrag*2))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+(mcoPartFrag*3))*mcoUnit mcoEntity % ((mcoLC+(mcoPartFrag*3))*mcoUnit)+.01 mcoEntity
gp mcoP4 ref % (mcoLC+(mcoPartFrag*3))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+(mcoPartFrag*4))*mcoUnit mcoEntity % ((mcoLC+(mcoPartFrag*4))*mcoUnit)+.01 mcoEntity
gp mcoP5 ref % (mcoLC+(mcoPartFrag*4))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % 99.99 mcoEntity % 100 mcoEntity
gp mcoP6 ref % 100 mcoEntity <mcoB1+(90*mcoSIDE),.5
path mcoP1 mcoP2 mcoP3 mcoP4 mcoP5 mcoP6;
changec2 mcoColDS
:mcodone
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
front
:mcoabort
selby1
keep 10001,10001
erase 10001,10001
selrest
rdon
econ


Парапет 3

Название | Парапет 3
Автор | Morgan Olden
Команда | parapet3
Описание | Изображает парапет зубчатой стены как линию. Включает удачные построения углов и возможность закрытия парапета.
Инструкции | Версия 1.1 Исправлены ошибки и добавлена возможность выбора цвета. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (parapet3.scr) содержит макрос.
Код
parapet3
ecoff
rdoff
point 10001,10001;
golayer MacroConstruction
:mcoStart
gv mcoBLeg 0
gv mcoFirstTime 0
gv mcoColDS 14
gv mcoColLS 251
gcol mcoColDS ^DDark stone colour? (14)
gcol mcoColLS ^DLight stone colour? (251)
color 0
lwidth 0
lstyle solid
fstyle solid
selbyp
gp mcoP1 ^DPoint 1:
iferr mcoabort
gp mcoP2 ^DPoint 2:
line mcoP1 mcoP2;
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcoabort
GBRNG mcoB12 mcoP1 mcoP2
gp mcoP1L ref mcoP1 <mcoB12+90,1.5
gp mcoP1LC ref mcoP1 <mcoB12+90,1.25
gp mcoFirstPoint mcoP1
gp mcoFirstPointL mcoP1L
gp mcoFirstPointLC mcoP1LC
gv mcoFirstBrng mcoB12
gp mcoP3 mcoP2
gp mcoP3 ^DNext Point:
line mcoP2 mcoP3;
gdist mcoD23 mcoP2 mcoP3
ifz mcoD23 mco2PointCrenelation
:mcoloop
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23 mcoP2 mcoP3
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw 1/mcowcs*(1.5)
gv mcoawCren 1/mcowcs*(1.25)
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2LC ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoawCren
lwidth 0
poly mcoP1L mcoP2L mcoP2 mcoP1;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop
gn mcoLoopCount (mcoD12LC-11.25)/7.5
ifz mcoFirstTime mcoControl1
gn mcoLoopCount (mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5 mcoP1LC ref mcoP1LC <mcoB12,5;
:mcoControl1
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop
ifn mcoLoopCount mcoDoneCrenLoop
gv mcoCrenDist (mcoD12LC-11.25)/mcoLoopCount
gv mcoCurLen 6.25
ifz mcoFirstTime mcoCrenLoop
gv mcoCrenDist (mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC <mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop
:mcoDoneCrenLoop
lwidth 0
gp mcoP4 mcoP3
gp mcoP4 ^DNext Point
line mcoP3 mcoP4;
gdist mcoD34 mcoP3 mcoP4
ifz mcoD34 mcodone
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp mcoP3 mcoP4
gp mcoP1L mcoP2L
gp mcoP2L mcoP3L
gp mcoP1LC mcoP2LC
gp mcoP2LC mcoP3LC
gv mcoBLeg mcoB12
gv mcoFirstTime 1
goto mcoloop
:mcoDone
askbox
Closed Loop
Do you want to create a
closed crenelation loop?

iferr mcoEndCrenelation
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp mcoP3 mcoFirstPoint
gp mcoP1L mcoP2L
gp mcoP2L mcoP3L
gp mcoP1LC mcoP2LC
gp mcoP2LC mcoP3LC
gv mcoBLeg mcoB12
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23 mcoP2 mcoP3
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw 1/mcowcs*(1.5)
gv mcoawCren 1/mcowcs*(1.25)
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2LC ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoawCren
lwidth 0
poly mcoP1L mcoP2L mcoP2 mcoP1;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop3
gn mcoLoopCount (mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5 mcoP1LC ref mcoP1LC <mcoB12,5;
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop3
ifn mcoLoopCount mcoDoneCrenLoop3
gv mcoCrenDist (mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop3
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC <mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop3
:mcoDoneCrenLoop3
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp mcoP3 mcoP4
gp mcoP1L mcoP2L
gp mcoP2L mcoP3L
gp mcoP1LC mcoP2LC
gp mcoP2LC mcoP3LC
gv mcoBLeg mcoB12
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23 mcoFirstBrng
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw 1/mcowcs*(1.5)
gv mcoawCren 1/mcowcs*(1.25)
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2LC ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoawCren
lwidth 0
poly mcoP1L mcoP2L mcoP2 mcoP1;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop4
gn mcoLoopCount (mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5 mcoP1LC ref mcoP1LC <mcoB12,5;
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop4
ifn mcoLoopCount mcoDoneCrenLoop4
gv mcoCrenDist (mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop4
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC <mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop4
:mcoDoneCrenLoop4
lwidth 2.5
path ref mcoP2LC <mcoB12-180,5 mcoP2LC ref mcoP2LC <mcoB23,5;
changec2 mcoColDS
go mcoDoneCrenLoop2
:mcoEndCrenelation
gp mcoP3L ref mcoP3 <mcoB23+90,1.5
gp mcoP3LC ref mcoP3 <mcoB23+90,1.25
poly mcoP2L mcoP3L mcoP3 mcoP2;
changec2 mcoColDS
lwidth 2.5
gdist mcoD23LC mcoP2LC mcoP3LC
ifz mcoD23LC-7.5 mcoDoneCrenLoop2
gn mcoLoopCount (mcoD23LC-11.25)/7.5
path ref mcoP2LC <mcoB12-180,5 mcoP2LC ref mcoP2LC <mcoB23,5;
changec2 mcoColDS
ifz mcoLoopCount mcoCrenEndcap
ifn mcoLoopCount mcoCrenEndcap
gv mcoCrenDist (mcoD23LC-11.25)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop2
line ref mcoP2LC <mcoB23,mcoCurLen ref mcoP2LC <mcoB23,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop2
:mcoCrenEndcap
line mcoP3LC ref mcoP3LC <mcoB23-180,3.75;
changec2 mcoColDS
line mcoFirstPointLC ref mcoFirstPointLC <mcoFirstBrng,3.75;
changec2 mcoColDS
:mcoDoneCrenLoop2
go mcoParapet3Cleanup
:mco2PointCrenelation
GBRNG mcoB12 mcoP1 mcoP2
gp mcoP1L ref mcoP1 <mcoB12+90,1.5
gp mcoP1LC ref mcoP1 <mcoB12+90,1.25
gp mcoP2L ref mcoP2 <mcoB12+90,1.5
gp mcoP2LC ref mcoP2 <mcoB12+90,1.25
gdist mcoD12LC mcoP1LC mcoP2LC
lwidth 0
poly mcoP1L mcoP2L mcoP2 mcoP1;
changec2 mcoColDS
lwidth 2.5
ifz mcoD12LC-7.5 mcoDoneCrenLoop5
gn mcoLoopCount (mcoD12LC+2.5)/7.5
ifz mcoLoopCount mcoDoneCrenLoop5
ifn mcoLoopCount mcoDoneCrenLoop5
gv mcoCrenDist (mcoD12LC+2.5)/mcoLoopCount
gv mcoCurLen 0
:mcoCrenLoop5
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC <mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop5
:mcoDoneCrenLoop5
gl spacer line
:mcoParapet3Cleanup
lwidth 0
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
:mcoabort
selby1
keep 10001,10001
erase 10001,10001
selrest
rdon
econ


Случайные дома по улице

Название

 Случайные дома по улице
Aвтор | Scott Murray
Команда | RSYMSTREET
Описание | Устанавливает случайным образом дома из прилагающегося каталога по правой стороне указаной улицы. Дома устанавливаются отдельно на внутренней кривой, чтобы уменьшить перекрытие построек.
Инструкции Вы конечно спросите - на хрена писать этот макрос, когда есть подобная команда в CD2 (City Designer2). Дело в том что стандартная команда создает дома сделанные из тысяч простых объектов, которые быстро раздувают файловый размер и делают карты слишком большими на выходе. Устанавливая символ в 0.13Kb этот макрос делает ссылку на объект дома 200Kb, что позволяет существенно сократить размер файла.

Символы устанавливаются вдоль указанного объекта (линии или плавной линии) используя динамическое расстояние, чтобы оставить дистанцию между домами на вогнутй стороне плавной линии. Большое количество настроек позволяют сильно изменить вид конечной улицы без модификации макроса.

При первом запуске макроса в данной сессии, вам придется ответить 'Да'|'Нет' в диалоге запрашивающем, хотите вы загрузить необходимые символы. Ответив 'Да' вы увидите диалог, в котором вам надо будет найти и загрузить прилагаемый каталог символов. Когда вы загрузите необходимые символы, макрос будет работать корректно. Если вы захотите сами загрузить эти символы, вы можете использовать стандартную команду СС2 'INSSDEF'.
Маленькая проблемка: для использования макроса требуется наличие слоев города, которые есть в каждом шаблоне City Designer 2. Иначе рекомендуется добавить эти слои.
Слои используемые символами CD2...
STRUCTURES (COLORS)
STRUCTURES (FILL STYLE)
STRUCTURES (OUTLINE)
STRUCTURES (SHADING)

При первом запуске макроса вам придется ответить на несколько вопросов для определения стиля символов, которые будут устанавливаться. Стандартные значения прописаны для стандартного прилагающегося каталога символов, если вы сделаете свой каталог, вам придется изменять эти параметры. Вы можете вернуться в этот раздел установки введя отрицательную величину для каждого расстояния со средней линии или расстояния домов, также можно вручную изменить величины в 'rsymstreet-vars.scr' файле.

В прилагающемся каталоге используются три стиля домов, но вы можете оставить только один или два, если просто повторите установки. В наличии имеются следующие стили:
Первый: (стандарт = соломенный)
Второй: (стандарт = кирпичный)
Третий: (стандарт = черепичный)

Количество вариантов домов: (стандарт = 11)
Прилагаемый каталог содержит именно такое количество разных вариантов домов. Произвольное имя символа выбирается из случайного числа от первого, до введенного вами. Делая собственный заказ вы должны убедиться, что он соответствует формату [тип строения][номер] где нет пробелов или нуля. Например 'thatch9' - подходит, но 'thatch09' или 'tile 1' являются неподходящими идеями.

Размер ширины символов: (стандарт = 60)
В работе макроса подразумеваются две категории размера символов - ширина и узость. Эта установка - ширина символов, будет общей для ширины всех ваших символов.

Размер узости символов: (стандарт = 30)
Такой будет узость всех ваших символов.

Максимум узких символов: (стандарт = 3)
Это значение отделяет количество узких от количества широких символов. Макрос следит за шириной символов выполняя чек минимума на эту величину, так что все узкие символы должны иметь меньшие номера. (если у вас есть 3 узких символа и 7 символов домов этого типа, надо ввести здесь 3, чтобы отразить, что узкие символы - sym1, sym2, и sym3).

Глубина символов: (стандарт = 60)
Это значение используется, для определения обратной ширины домов, чтобы предохраниться от перекрытия на их углах. Оно должно отразить максимальную глубину вашего символа установленного в начале на дальней стороне.

Если макрос прежде выполнялся, то величины устанавливающие значения символов загрузятся из файла и вам все будет подсказано...

Дистанция от центра дороги: (стандарт = 20, отрицательное значение позволяет менять сохраненные установки)
Это значение - половина общей ширины вашей завершенной дороги, расстояние от центра стартового объекта вдоль которого вы хотите устанавливать символы домов. Ввод отрицательной величины возвратит вас в программу ввода настройки основных параметров.

Дистанция между домами: (стандарт = 10, отрицательное значение позволяет менять сохраненные установки)
Это значение - расстояние между символами домов, которое макрос будет держать как минимум. Малые радиусы плавных линий на внутренних сторонах все равно сократят расстояние между домами несмотря на эту предосторожность. Ввод отрицательной величины возвратит вас в программу ввода настройки основных параметров.

После введения всех параметров макрос начинает работу.
Выберите дорогу вдоль правой стороны которой будут ставиться дома:
Очень важно чтобы вы выбрали правую сторону. Макрос легко поставит дома и по левой стороне дороги, но расстояние вычислится для правой стороны. Напоминая о правой стороне я имею ввиду, что курсор должен находиться немного правее от объекта.

Символы с контрольными точками могут иногда повести себя неожиданно, случайно скрипт встретит незначительные проблемы с символами. Они могут вызвать, которая не повлияет на общее выполнение макроса.
Если выбранный объект имеет общую стартовую и конечную точку (закольцован), то CC2 может избрать неожиданную стартовую точку и, соответственно, неправильно определить правую сторону объекта, и ошибочно выполнить макрос.
Я предпочитаю, чтобы использовать этот макрос как скрипт, но у вас не должно быть проблем с выполнением его как макроса.
Вложение
rsymstreet.zip
Код
macro RSYMSTREET
ecoff
ifdef sm_varOK sm_TheStart
ASKBOX;Insert Symbol Definitions;Insert symbol definitions for;the macro with INSSDEF?;
iferr sm_tryloadvars
inssdef
:sm_tryloadvars
scriptm #rsymstreet-vars.scr
ifdef sm_varOK sm_TheStart
:sm_loadvars
gl sm_type1 thatch
gl sm_type1 ^D1st of 3 building types: (default = thatch)
gl sm_type2 tile
gl sm_type2 ^D2nd of 3 building types: (default = tile)
gl sm_type3 slate
gl sm_type3 ^D3rd of 3 building types: (default = slate)
gn sm_numsymshapes 11
gn sm_numsymshapes ^DNumber of buiding shapes each type has: (default = 11)
ifn sm_numsymshapes sm_TheEnd
gv sm_widesym 60
gv sm_widesym ^DWidth of the wide symbols: (default = 60)
ifn sm_widesym sm_TheEnd
gv sm_narrowsym 30
gv sm_narrowsym ^DWidth of the narrow symbols: (default = 30)
ifn sm_narrowsym sm_TheEnd
gv sm_lastnarrowsym 3
gv sm_lastnarrowsym ^DLast narrow symbol number: (default = 3)
gv sm_depthsym 60
gv sm_depthsym ^DDepth of the symbols: (default = 60)
ifn sm_depthsym sm_TheEnd
gw sm_varOK OK
savevars #rsymstreet-vars
:sm_TheStart
gv sm_centerline 20
gv sm_centerline ^DDistance from centerline of road: (default = 20, negative value to change saved settings)
ifn sm_centerline sm_loadvars
gv sm_spacer 10
gv sm_spacer ^DDistance between houses: (default = 10, negative value to change saved settings)
ifn sm_spacer sm_loadvars
gr sm_entity ^DSelect road to draw houses along (click along the right side):
iferr sm_TheEnd
gdist sm_entitylen % 0 sm_entity % 1 sm_entity
gv sm_entitylen sm_entitylen*100
gv sm_unit 100/sm_entitylen
gv sm_D1Cur 0
gv sm_next 1
:sm_SymPlacementLoop
random sm_rndsymnum
gn sm_symnum (sm_rndsymnum*sm_numsymshapes)+0.5
random sm_rndsymtype
gn sm_symtype (sm_rndsymtype*3)+0.5
gl sm_symname sm_type1
ifz sm_symtype-1 sm_skipsymname
gl sm_symname sm_type2
ifz sm_symtype-2 sm_skipsymname
gl sm_symname sm_type3
:sm_skipsymname
apnd sm_symname sm_symnum
gv sm_width sm_narrowsym
ifn sm_symnum-sm_lastnarrowsym-0.5 sm_skipwide
gv sm_width sm_widesym
:sm_skipwide
gv sm_addfrontage 0
ifz sm_next sm_checkbackyard
GBRNG sm_perpAngle % sm_D1Cur*sm_unit sm_entity % (sm_D1Cur+0.01)*sm_unit sm_entity
GP sm_yardcornerA REF % sm_D1Cur*sm_unit sm_entity
<(sm_perpAngle-90),sm_centerline+sm_depthsym
:sm_checkbackyard
ifp sm_D1Cur+sm_width+sm_addfrontage-sm_entitylen sm_TheEnd
GBRNG sm_perpAngle % (sm_D1Cur+sm_width+sm_addfrontage)*sm_unit sm_entity % (sm_D1Cur+sm_width+sm_addfrontage+0.01)*sm_unit sm_entity
GP sm_yardcornerB REF % (sm_D1Cur+sm_width+sm_addfrontage)*sm_unit sm_entity
<(sm_perpAngle-90),sm_centerline+sm_depthsym
GDIST sm_backfence sm_yardcornerA sm_yardcornerB
ifp sm_backfence-sm_width sm_putdownsym
gv sm_addfrontage 0.5+sm_addfrontage+(sm_width-sm_backfence)
go sm_checkbackyard
:sm_putdownsym
gv sm_D1Cur sm_D1Cur+((sm_width+sm_addfrontage)/2)
symbol;sm_symname;1;1;0;% sm_D1Cur*sm_unit sm_entity;sm_centerline;
gv sm_D1Cur sm_D1Cur+((sm_width+sm_addfrontage)/2)+sm_spacer
GP sm_yardcornerA sm_yardcornerB
GDIST sm_next sm_yardcornerA sm_yardcornerB
iferr sm_TheEnd
go sm_SymPlacementLoop
:sm_TheEnd
econ
endm

Submitter Info
Name: | Scott Murray
eMail: | scott@blarg.net


Стена Города 1

Название | Стена Города 1
Автор | Morgan Olden
Команда | citywall1
Описание | Этот макрос преобразовывает имеющуюся линию в изображение стены города
Инструкции | Этот макрос облегчает и автоматизирует процедуру описанную Линдой Кекуму на Странице ПроФэнтези Макрос просит пользователя выбрать отдельный объект (линию) для преобразования, и запрашивает толщину парапета и стены.
Вложение | нет

Код
MACRO citywall1
GE WallSource ^DSelect entity to convert to City Wall:
IFERR gotoend
GV WallWidth 10
GV ParapetWidth 2
GV WallWidth ^DWall width (10):
IFZ WallWidth gotoend
GV ParapetWidth ^DParapet width (2):
IFZ ParapetWidth gotoend
SELBY1
CHANGEC WallSource 18
SELBYP
CHANGELW WallWidth
CHANGEFS SOLID
COPY 0,0 0,0;
CHANGEC 0
CHANGEFS HOLLOW
COPY 0,0 0,0;
CHANGEC 16
CHANGELW WallWidth-(ParapetWidth*2)
CHANGEFS SOLID
COPY 0,0 0,0;
CHANGEC 0
CHANGEFS HOLLOW
SELBYD
REDRAW
:gotoend


Стена Города 2

Название

Стена Города 2
Автор | Morgan Olden
Команда | CITYWALL2
Описание Рисование городской стены с башнями.
Инструкции Этот макрос запрашивает пять пунктов информации, затем позволяет пользователю выбирать ряд точек. Макрос рисует городскую стену между каждой точкой, и вставляет башни на каждой точке. Вид стены и башен зависит от обеспеченной информации (значения по умолчанию в скобках):

1. Wall width. (10) - Толщина стены
2. Parapet width. (2) - Ширина парапета
3. Tower width. (20) - Размер башни
4. Tower style (square or circle) (circle) - Стиль башни (квадратный или круглый)
5. Roof style (flat or peaked) (peaked) - Стиль верха башни (плоская или островерхняя)

Для работы необходимы все три макроса, но два из них работают по вызову от основного.

Примечания:

1. Левый клик рисует сегмент стены, правый ее завершает, и подставляет башню.

2. Квадратные башни автоматически выравнивают себя под углом средним между двумя смежными стенами.

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

4. Размеры парапета добавляются и к стене, и к башне. Башни с установленными на максимуме крышами все равно будут иметь парапет.

5. Минимальный размер башни равен ширине стены, но для лучших результатов рекомендуется выбирать ширину башни по крайней мере вдвое больше ширины стены.
Вложение | нет

Код
macro CITYWALL2
ecoff
rdoff
gv WW 10
gv PW 2
gv TW 20
gv TS 1
gv RS 0
gv WW ^DEnter wall width:
gv PW ^DEnter parapet width:
gv TW ^DEnter tower width:
gv TS ^DChose tower style (square=0, circle=1):
gv RS ^DChose tower roof style (peaked=0, flat=1):
ifn TW-WW control1
go control2
:control1
gv TW WW
:control2
gp P1 ^DFirst point:
line P1 ^DNext point:;
gp P2 @0,0
selbyp;erase;
gp wallpoint1 P1;gp wallpoint2 P2
drawwall
gbrng towerbrng P1 P2
gp towercenter P1
drawtower
:loop
line P2 ^DNext point:;
gp P3 @0,0
gdist testdist P2 P3
ifz testdist laststep
selbyp;erase;
gp wallpoint1 P2;gp wallpoint2 P3
drawwall
gbrng B12 P1 P2
gbrng B23 P2 P3
gv towerbrng (B12+B23)/2
gsin offset (B12-B23)
ifp offset control5
gv offset 0-offset
:control5
ifn offset-.8 control6
gv towerbrng towerbrng+45
:control6
gp towercenter P2
drawtower
gp P1 P2;gp P2 P3
go loop
:laststep
|gp towercenter P2
gbrng towerbrng P1 P2
drawtower
selbyd
econ
rdon
endm

macro DRAWTOWER
ifz TS drawsquaretower
:drawcircletower
ifz RS circlepeakroof
:circleflatroof
lwidth 0;color 18;fstyle solid;cird TW towercenter;
color 0;fstyle hollow;cird TW towercenter;
color 16;fstyle solid;cird TW-(PW*2) towercenter;
color 0;fstyle hollow;cird TW-(PW*2) towercenter;
go done
:circlepeakroof
lwidth 0;color 18;fstyle solid;cird TW towercenter;
color 10;cird TW-(PW*2) towercenter;
color 11
arcw towercenter (TW-(PW*2))/2 200 350
|color 0;fstyle hollow;cird TW towercenter;
cird TW-(PW*2) towercenter;
go done
:drawsquaretower
ifz RS squarepeakroof
:squareflatroof
gp TP1 ref towercenter <towerbrng+45,TW*.7010
gp TP2 ref towercenter <towerbrng+135,TW*.7010
gp TP3 ref towercenter <towerbrng+225,TW*.7010
gp TP4 ref towercenter <towerbrng+315,TW*.7010
lwidth 0;color 18;fstyle solid;poly TP1 TP2 TP3 TP4;
color 0;fstyle hollow;poly TP1 TP2 TP3 TP4;
gp TP1 ref towercenter <towerbrng+45,(TW-(PW*2))*.7010
gp TP2 ref towercenter <towerbrng+135,(TW-(PW*2))*.7010
gp TP3 ref towercenter <towerbrng+225,(TW-(PW*2))*.7010
gp TP4 ref towercenter <towerbrng+315,(TW-(PW*2))*.7010
color 16;fstyle solid;poly TP1 TP2 TP3 TP4;
color 0;fstyle hollow;poly TP1 TP2 TP3 TP4;
go done
:squarepeakroof
gp TP1 ref towercenter <towerbrng+45,TW*.7010
gp TP2 ref towercenter <towerbrng+135,TW*.7010
gp TP3 ref towercenter <towerbrng+225,TW*.7010
gp TP4 ref towercenter <towerbrng+315,TW*.7010
lwidth 0;color 18;fstyle solid;poly TP1 TP2 TP3 TP4;
color 0;fstyle hollow;poly TP1 TP2 TP3 TP4;
gp TP1 ref towercenter <towerbrng+45,(TW-(PW*2))*.7010
gp TP2 ref towercenter <towerbrng+135,(TW-(PW*2))*.7010
gp TP3 ref towercenter <towerbrng+225,(TW-(PW*2))*.7010
gp TP4 ref towercenter <towerbrng+315,(TW-(PW*2))*.7010
lwidth 0;color 10;fstyle solid;poly TP1 TP2 TP3;
color 11;poly TP3 TP4 TP1;
color 0;fstyle hollow;poly TP1 TP2 TP3 TP4;
line TP1 TP3;
line TP2 TP4;
go done
:done
endm

macro DRAWWALL
lwidth WW;color 18;lstyle solid;fstyle solid;line wallpoint1 wallpoint2;
color 0;fstyle hollow;line wallpoint1 wallpoint2;
color 16;fstyle solid;lwidth WW-(PW*2);line wallpoint1 wallpoint2;
color 0;fstyle hollow;line wallpoint1 wallpoint2;


Стена Города 3

Название

Стена Города 3
Автор | Morgan Olden
Команда | CITYWALL3
Описание Изображение городской стены с башнями. (высоко детализованное, с зубцами)
Инструкции CITYWALL3

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

1. Wall width. (10) - Толщина стены
2. Parapet both sides? (Both) - Парапет на обоих сторонах? (на обоих)
3. Parapet width. (2) - Ширина парапета
4. Tower width. (Wall width x 2) - Размер башни (вдвое больше толщины стены)
5. Tower style. (square or circle) (circle) - Стиль башни (квадратный или круглый)
6. Roof style. (flat or peaked) (peaked) - Стиль верха башни (плоская или покатая)
7. Roof walkway width. (5) (Optional: if 'peaked roof' is selected) - Ширина прохода башни (если выбрана покатая крыша)

Все макросы, найденные в секции 'Код' необходимы для корректной работы, но только макросы 'CITYWALL3' и 'CITYWALL3TOWER' могут запускаться из командной строки. Для лучших результатов, создайте отдельный макро-файл для этого макроса, и загружайте этот файл когда собираетесь рисовать городские стены.

Примечания:

1. Левый клик рисует сегмент стены, правый ее завершает, и подставляет башню.

2. Квадратные башни автоматически выравнивают себя под углом средним между двумя смежными стенами.

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

4. Размеры парапета добавляются и к стене, и к башне. Башни с установленными на максимуме крышами все равно будут иметь парапет.

5. Минимальный размер башни равен ширине стены, но для лучших результатов рекомендуется выбирать ширину башни по крайней мере вдвое больше ширины стены.

CITYWALL3TOWER

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

1. Tower width. (20) - Размер башни
2. Tower style. (square or circle) (circle) - Стиль башни (квадратный или круглый)
3. Roof style. (flat or peaked) (peaked) - Стиль верха башни (плоская или островерхняя)
4. Roof walkway width. (5) (Optional: if 'peaked roof' is selected) - Ширина прохода башни (если выбрана островерхняя крыша)
Вложение | нет

Код
macro CITYWALL3
ecoff
rdoff
gv ColDS 18
gv ColLS 16
gv ColDR 11
gv ColLR 10
gv WW 10
gv sides 1
gv TWW 5
gv TS 1
gv RS 0
gv WW ^DEnter wall width:
gv sides ^DParapet on both sides? (one side=0, both=1)
gv TW WW*2
gv TW ^DEnter tower width:
ifn TW-20 control1
go control2
:control1
gv TW 20
:control2
gv TS ^DChose tower style (square=0, circle=1):
gv RS ^DChose tower roof style (peaked=0, flat=1):
ifz RS askwalkwaywidth
go skipwalkwaywidth
:askwalkwaywidth
gv TWW ^DTower walkway width (defalt=5, none=0):
:skipwalkwaywidth
gp P1 ^DFirst point:
line P1 ^DNext point:;
gp P2 @0,0
selbyp;erase;
gp wallpoint1 P1;gp wallpoint2 P2
drawwall3
gbrng towerbrng P1 P2
gp towercenter P1
drawtower3
:loop
line P2 ^DNext point:;
gp P3 @0,0
gdist testdist P2 P3
ifz testdist laststep
selbyp;erase;
gp wallpoint1 P2;gp wallpoint2 P3
drawwall3
gbrng B12 P1 P2
gbrng B23 P2 P3
gv towerbrng (B12+B23)/2
gsin offset (B12-B23)
ifp offset control5
gv offset 0-offset
:control5
ifn offset-.8 control6
gv towerbrng towerbrng+45
:control6
gp towercenter P2
drawtower3
gp P1 P2;gp P2 P3
go loop
:laststep
|gp towercenter P2
gbrng towerbrng P1 P2
drawtower3
selbyd
econ
rdon
endm

macro DRAWTOWER3
ifz TS drawsquaretower
:drawcircletower
lwidth 0;color ColLS;fstyle solid;cird TW towercenter;
lwidth 1.5;color ColDS;cird TW towercenter;
color 0;fstyle hollow;cird TW towercenter;
gv OutsideTW TW+.75
gv OutsideCirc OutsideTW*3.1416
gv counter 0
:circcounterloop
gv counter counter+1
gv OutsideCirc OutsideCirc-7.5
ifz OutsideCirc donecirccounterloop
ifn OutsideCirc-7.5 donecirccounterloop
go circcounterloop
:donecirccounterloop
gv OneArcUnit 360/counter/7.5
gv currentangle 0
:circcrenloop
lwidth 2.5;color ColDS;fstyle solid
arcr towercenter OutsideTW/2 currentangle (currentangle+(OneArcUnit*5))
|color 0;fstyle hollow
arcr towercenter OutsideTW/2 currentangle (currentangle+(OneArcUnit*5))
|gv currentangle (currentangle+(OneArcUnit*7.5))
ifp currentangle-360 donecirccrenloop
go circcrenloop
:donecirccrenloop
ifz RS circlepeakroof
:circleflatroof
go done
:circlepeakroof
lwidth 0;fstyle solid
color ColLR;cird TW-(TWW*2) towercenter;
color ColDR
arcw towercenter (TW-(TWW*2))/2 200 350
|color 0;fstyle hollow;cird TW-(TWW*2) towercenter;
go done
:drawsquaretower
gp TP1 ref towercenter <towerbrng+45,TW*.70711
gp TP2 ref towercenter <towerbrng+135,TW*.70711
gp TP3 ref towercenter <towerbrng+225,TW*.70711
gp TP4 ref towercenter <towerbrng+315,TW*.70711
lwidth 0;color ColLS;fstyle solid;poly TP1 TP2 TP3 TP4;
lwidth 1.5;color ColDS;poly TP1 TP2 TP3 TP4;
color 0;fstyle hollow;poly TP1 TP2 TP3 TP4;
gp TP1 ref TP1 <towerbrng+45,.5303301
gp TP2 ref TP2 <towerbrng+135,.5303301
gp TP3 ref TP3 <towerbrng+225,.5303301
gp TP4 ref TP4 <towerbrng+315,.5303301
gdist DTS TP1 TP2
gv DTS DTS-12.5
gv remainder DTS
:remainderloop
ifz remainder doneremainderloop
ifn remainder-7.5 doneremainderloop
gv remainder remainder-7.5
go remainderloop
:doneremainderloop
gv CrenBrng towerbrng-90
gp Cren1 ref TP1 <CrenBrng,(remainder/2)+7.5
gv CrenTDist DTS-remainder
lwidth 2.5;color ColDS;fstyle solid
path ref TP1 <CrenBrng-90,5+(remainder/2) TP1 ref TP1 <CrenBrng,5+(remainder/2);
color 0;fstyle hollow
path ref TP1 <CrenBrng-90,5+(remainder/2) TP1 ref TP1 <CrenBrng,5+(remainder/2);
DRAWCRELLELATION
gv CrenBrng towerbrng
gp Cren1 ref TP2 <CrenBrng,(remainder/2)+7.5
lwidth 2.5;color ColDS;fstyle solid
path ref TP2 <CrenBrng-90,5+(remainder/2) TP2 ref TP2 <CrenBrng,5+(remainder/2);
color 0;fstyle hollow
path ref TP2 <CrenBrng-90,5+(remainder/2) TP2 ref TP2 <CrenBrng,5+(remainder/2);
DRAWCRELLELATION
gv CrenBrng towerbrng+90
gp Cren1 ref TP3 <CrenBrng,(remainder/2)+7.5
lwidth 2.5;color ColDS;fstyle solid
path ref TP3 <CrenBrng-90,5+(remainder/2) TP3 ref TP3 <CrenBrng,5+(remainder/2);
color 0;fstyle hollow
path ref TP3 <CrenBrng-90,5+(remainder/2) TP3 ref TP3 <CrenBrng,5+(remainder/2);
DRAWCRELLELATION
gv CrenBrng towerbrng+180
gp Cren1 ref TP4 <CrenBrng,(remainder/2)+7.5
lwidth 2.5;color ColDS;fstyle solid
path ref TP4 <CrenBrng-90,5+(remainder/2) TP4 ref TP4 <CrenBrng,5+(remainder/2);
color 0;fstyle hollow
path ref TP4 <CrenBrng-90,5+(remainder/2) TP4 ref TP4 <CrenBrng,5+(remainder/2);
DRAWCRELLELATION
ifz RS squarepeakroof
:squareflatroof
go done
:squarepeakroof
gp TP1 ref towercenter <towerbrng+45,(TW-(TWW*2))*.70711
gp TP2 ref towercenter <towerbrng+135,(TW-(TWW*2))*.70711
gp TP3 ref towercenter <towerbrng+225,(TW-(TWW*2))*.70711
gp TP4 ref towercenter <towerbrng+315,(TW-(TWW*2))*.70711
lwidth 0;color ColLR;fstyle solid;poly TP1 TP2 TP3;
color ColDR;poly TP3 TP4 TP1;
color 0;fstyle hollow;poly TP1 TP2 TP3 TP4;
line TP1 TP3;
line TP2 TP4;
color ColDR;fstyle solid;lwidth 1;line towercenter TP4;
color 0;fstyle hollow;lwidth 1;line towercenter TP4;
color ColLR;fstyle solid;lwidth 1;line towercenter TP2;
color 0;fstyle hollow;lwidth 1;line towercenter TP2;
color ColLR;fstyle solid;lwidth 1;line TP1 TP3;
color 0;fstyle hollow;lwidth 1;line TP1 TP3;
go done
:done
endm

macro DRAWWALL3
color 0;lwidth 0;fstyle solid
gbrng B12 wallpoint1 wallpoint2
gdist Dist12 wallpoint1 wallpoint2
gp L1 ref wallpoint1 <B12+90,WW/2
gp R1 ref wallpoint1 <B12-90,WW/2
color ColLS;lstyle solid;fstyle solid;lwidth WW;line wallpoint1 wallpoint2;
color ColDS;lwidth 1.5;line L1 ref L1 <B12,Dist12;
line R1 ref R1 <B12,Dist12;
color 0;fstyle hollow;line L1 ref L1 <B12,Dist12;
line R1 ref R1 <B12,Dist12;
gp Cren1 ref L1 <B12+90,.5
gv CrenBrng B12
gv CrenTDist Dist12
DRAWCRELLELATION
ifz sides done
gp Cren1 ref R1 <B12-90,.5
gv CrenBrng B12
gv CrenTDist Dist12
DRAWCRELLELATION
:done
endm

macro DRAWCRELLELATION
gp CrenS Cren1
:loop
gp Cren2 ref Cren1 <CrenBrng,5
lstyle solid;color ColDS;lwidth 2.5;fstyle solid;line Cren1 Cren2;
color 0;fstyle hollow;line Cren1 Cren2;
gdist CrenDist CrenS Cren2
ifn CrenTDist-CrenDist-7.5 control1
gp Cren1 ref Cren1 <CrenBrng,7.5
go loop
:control1
endm

macro CITYWALL3TOWER
ecoff
rdoff
gv ColDS 18
gv ColLS 16
gv ColDR 11
gv ColLR 10
gv TWW 5
gv TW 20
gv TS 1
gv RS 0
gv TW ^DEnter tower width:
ifn TW-20 control1
go control2
:control1
gv TW 20
:control2
gv TS ^DChose tower style (square=0, circle=1):
gv RS ^DChose tower roof style (peaked=0, flat=1):
ifz RS askwalkwaywidth
go loop
:askwalkwaywidth
gv TWW ^DTower walkway width (defalt=5, none=0):
:loop
gp towercenter ^DPick tower center:
iferr done
ifz TS-1 control3
line towercenter ^DTower angle:;
gp anglereference @0,0
selbyp;erase;
gbrng towerbrng towercenter anglereference
:control3
drawtower3
go loop
:done
selbyd
econ


Стена Города 4

Название | Стена Города 4
Автор | Morgan Olden
Команда | CITYWALL4
Описание | Как и CITYWALL1, этот макрос преобразовывает имеющуюся плавную линию в изображение стены города, эта стена выглядит как в CITYWALL3, то есть с зубцами и т.п.
Инструкции | Перед указанием плавной линии, которую вы хотите преобразовать в городсую стену, надо указать ширину стены. Используйте макрос CITYWALLTOWER3, чтобы установить башни на стену. Этот макрос может иногда работать со сбоями, если имеются другие объекты, поверх которых будет рисоваться стена. Если дело обстоит так, лучше рисовать стену на временном слое (layer Temporary), при замораживании (freeze) всех других слоев. Другая возможная причина сбоев - слишком большое отдаление от стены в процессе преобразования. Если макрос сбоит, попытайтесь снова после изменения масштаба изображения ближе к объекту преобразования.
Вложение | нет

Код

macro CITYWALL4
ecoff
gv mcoColDS 18
gv mcoColLS 16
gv mcogap 2.5
gv mcoWW 10
gv mcoWW ^DWall width (10):
ge mcoentity ^DSelect line to convert:
iferr mcodone
gp mcooriginal % 0 mcoentity
selby1
gbrng mcoB1 % 0 mcoentity % .001 mcoentity
lstyle solid;color 0;lwidth 2.5;fstyle solid
offset ((mcoWW/2)+.5) % 0 mcoentity ref % 0 mcoentity <mcoB1+90,1
selbyp
changec2 mcoColDS
ge mcoentity ref % 0 mcoentity <mcoB1+90,((mcoWW/2)+.5)
selby1
STC mcoentity
front mcoentity
gdist mcoremainder % 0 mcoentity % 1 mcoentity
gv mcoremainder (mcoremainder*100)-5
gv mcosegments 0
:mcoremainderloop
ifn mcoremainder-7.5 mcodoneremainderloop
gv mcosegments mcosegments+1
gv mcoremainder mcoremainder-7.5
go mcoremainderloop
:mcodoneremainderloop
Citywall4a
ge mcoentity mcooriginal
offset ((mcoWW/2)+.5) % 0 mcoentity ref % 0 mcoentity <mcoB1-90,1
selbyp
changec2 mcoColDS
ge mcoentity ref % 0 mcoentity <mcoB1-90,((mcoWW/2)+.5)
selby1
STC mcoentity
front mcoentity
gdist mcoremainder % 0 mcoentity % 1 mcoentity
gv mcoremainder (mcoremainder*100)-5
gv mcosegments 0
:mcoremainderloop2
ifn mcoremainder-7.5 mcodoneremainderloop2
gv mcosegments mcosegments+1
gv mcoremainder mcoremainder-7.5
go mcoremainderloop2
:mcodoneremainderloop2
Citywall4a
selby1
ge mcoentity mcooriginal
CHANGEC mcoentity 0
CHANGEC2 mcoentity mcoColDS
CHANGELW mcoentity (mcoWW+1.5)
CHANGEFS mcoentity SOLID
selbyp
copy 0,0 0,0;
CHANGEC2 mcoColLS
CHANGELW (mcoWW-1.5)
:mcodone
selbyd
econ
endm

macro CITYWALL4A
gdist mcolen % 0 mcoentity % 1 mcoentity
gv mcopartlen ((mcolen*100)-((mcosegments-1)*mcogap))/mcosegments
gp mcoP1 % 0 mcoentity
:mcoloop
ge mcoentity mcoP1
gdist mcolen % 0 mcoentity % 1 mcoentity
gv mcounit 1/mcolen
gp mcoP2 % (mcopartlen*mcounit) mcoentity
gp mcoP3 % ((mcopartlen+mcogap)*mcounit) mcoentity
break mcoentity mcoP2 mcoP3
gv mcosegments mcosegments-1
ifz mcosegments-1 mcodoneloop
gp mcoP1 mcoP3
go mcoloop
:mcodoneloop


Стена Города 5

Название

Стена Города 5
Автор | Morgan Olden
Команда | citywall5
Описание Изображение городской стены с башнями (высоко детализованное, с зубцами), но не ставит башни в углах.
Инструкции Этот макрос работает как и Городская Стена 3, но есть и некоторые отличия:
    1. Нет башен - в углах ставит зубец парапета.
    2. Сохранение настроек - макрос запоминает последние использованные настройки.
    3. Выбор цветов - вы можете сами указать желаемые цвета.
    4. Группировка - после завершения работы макроса созданные объекты сгруппированы, что облегчает их редактирование.
    5. Восстановление всех значений (заливка, толщина, стиль линии и т.п.) к исходным на момент запуска макроса.
В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (citywall5.scr) содержит макрос.
Код
macro CityWall5
ecoff
rdoff
point 10001,10001;
golayer MacroConstruction
scriptm #citywall5-vars.scr
ifdef mcoCityWall5VarsOK mcoDoneVarCheck
:mcoDefineVars
gv mcoWW 10
gv mcoRCren 1
gv mcoLCren 1
gv mcoColDS 14
gv mcoColLS 251
gcol mcoColDS ^DDark stone colour? (14)
gcol mcoColLS ^DLight stone colour? (251)
gv mcoWW ^DWall width (10)
gv mcoRCren ^DRight side crenelation? (1=yes, 0=no)
gv mcoLCren ^DLeft side crenelation? (1=yes, 0=no)
gw mcoCityWall5VarsOK OK
savevars citywall5-vars
go mcoStart
:mcoDoneVarCheck
gv mcoUseDefault 1
gv mcoUseDefault ^DUse saved settings? (1=yes - default - click) (0=no)
ifz mcoUseDefault mcoDefineVars
:mcoStart
gv mcoBLeg 0
gv mcoFirstTime 0
color 0
lwidth 0
lstyle solid
fstyle solid
selbyp
gp mcoP1 ^DPoint 1:
iferr mcoabort
gp mcoP2 ^DPoint 2:
line mcoP1 mcoP2;
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcoabort
GBRNG mcoB12 mcoP1 mcoP2
gp mcoP1R ref mcoP1 <mcoB12-90,mcoWW/2
gp mcoP1L ref mcoP1 <mcoB12+90,mcoWW/2
gp mcoP1Rint ref mcoP1 <mcoB12-90,(mcoWW/2)-1.5
gp mcoP1Lint ref mcoP1 <mcoB12+90,(mcoWW/2)-1.5
gp mcoP1RC ref mcoP1 <mcoB12-90,(mcoWW/2)-.25
gp mcoP1LC ref mcoP1 <mcoB12+90,(mcoWW/2)-.25
gp mcoP3 mcoP2
gp mcoP3 ^DNext Point:
line mcoP2 mcoP3;
gdist mcoD23 mcoP2 mcoP3
ifz mcoD23 mcoControl1
gp mcoPsl mcoP1L
gp mcoPsr mcoP1R
:mcoloop
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23 mcoP2 mcoP3
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw 1/mcowcs*(mcoWW/2)
gv mcoawint 1/mcowcs*((mcoWW/2)-1.5)
gv mcoawCren 1/mcowcs*((mcoWW/2)-.25)
gp mcoP2R ref mcoP2 <(mcoB12+mcoB23)/2+90,mcoaw
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2Rint ref mcoP2 <(mcoB12+mcoB23)/2+90,mcoawint
gp mcoP2Lint ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoawint
gp mcoP2RC ref mcoP2 <(mcoB12+mcoB23)/2+90,mcoawCren
gp mcoP2LC ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoawCren
poly mcoP1L mcoP2L mcoP2R mcoP1R;
changec mcoColLS
line mcoP1L mcoP2L;
line mcoP1R mcoP2R;
ifz mcoRCren mcoDoneCrenLoop1
poly mcoP1R mcoP2R mcoP2Rint mcoP1Rint;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12RC mcoP1RC mcoP2RC
ifz mcoD12RC-7.5 mcoDoneCrenLoop1
gn mcoLoopCount (mcoD12RC-12.5)/7.5
path ref mcoP1RC <mcoBLeg-180,5*mcoFirstTime mcoP1RC ref mcoP1RC <mcoB12,5;
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop1
ifn mcoLoopCount mcoDoneCrenLoop1
gv mcoCrenDist (mcoD12RC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop1
line ref mcoP1RC <mcoB12,mcoCurLen ref mcoP1RC <mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop1
:mcoDoneCrenLoop1
ifz mcoLCren mcoDoneCrenLoop2
lwidth 0
poly mcoP1L mcoP2L mcoP2Lint mcoP1Lint;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop2
gn mcoLoopCount (mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5*mcoFirstTime mcoP1LC ref mcoP1LC <mcoB12,5;
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop2
ifn mcoLoopCount mcoDoneCrenLoop2
gv mcoCrenDist (mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop2
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC <mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop2
:mcoDoneCrenLoop2
lwidth 0
gp mcoP4 mcoP3
gp mcoP4 ^DNext Point
line mcoP3 mcoP4;
gdist mcoD34 mcoP3 mcoP4
ifz mcoD34 mcodone
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp mcoP3 mcoP4
gp mcoP1L mcoP2L
gp mcoP1R mcoP2R
gp mcoP1Lint mcoP2Lint
gp mcoP1Rint mcoP2Rint
gp mcoP1RC mcoP2RC
gp mcoP1LC mcoP2LC
gv mcoBLeg mcoB12
gv mcoFirstTime 1
goto mcoloop
:mcoDone
gv mcoFT1 1
go mcoControl2
:mcoControl1
gp mcoP2 mcoP1
gp mcoP2L mcoP1L
gp mcoP2R mcoP1R
gp mcoP2RC mcoP1RC
gp mcoP2LC mcoP1LC
gp mcoP2Lint mcoP1Lint
gp mcoP2Rint mcoP1Rint
gbrng mcoB23 mcoP2 mcoP3
gv mcoFT1 0
:mcoControl2
gp mcoP3R ref mcoP3 <mcoB23-90,mcoWW/2
gp mcoP3L ref mcoP3 <mcoB23+90,mcoWW/2
gp mcoP3Rint ref mcoP3 <mcoB23-90,(mcoWW/2)-1.5
gp mcoP3Lint ref mcoP3 <mcoB23+90,(mcoWW/2)-1.5
gp mcoP3RC ref mcoP3 <mcoB23-90,(mcoWW/2)-.25
gp mcoP3LC ref mcoP3 <mcoB23+90,(mcoWW/2)-.25
poly mcoP2L mcoP3L mcoP3R mcoP2R;
changec mcoColLS
line mcoP2L mcoP3L;
line mcoP2R mcoP3R;
ifz mcoRCren mcoDoneCrenLoop3
poly mcoP2R mcoP3R mcoP3Rint mcoP2Rint;
changec2 mcoColDS
lwidth 2.5
gdist mcoD23RC mcoP2RC mcoP3RC
ifz mcoD23RC-7.5 mcoDoneCrenLoop3
gn mcoLoopCount (mcoD23RC-12.5)/7.5
path ref mcoP2RC <mcoB12-180,5*mcoFT1 mcoP2RC ref mcoP2RC <mcoB23,5;
changec2 mcoColDS
ifz mcoLoopCount mcoCrenEndcap1
ifn mcoLoopCount mcoCrenEndcap1
gv mcoCrenDist (mcoD23RC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop3
line ref mcoP2RC <mcoB23,mcoCurLen ref mcoP2RC <mcoB23,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop3
:mcoCrenEndcap1
line mcoP3RC ref mcoP3RC <mcoB23-180,5;
changec2 mcoColDS
:mcoDoneCrenLoop3
ifz mcoLCren mcoDoneCrenLoop4
lwidth 0
poly mcoP2L mcoP3L mcoP3Lint mcoP2Lint;
changec2 mcoColDS
lwidth 2.5
gdist mcoD23LC mcoP2LC mcoP3LC
ifz mcoD23LC-7.5 mcoDoneCrenLoop4
gn mcoLoopCount (mcoD23LC-12.5)/7.5
path ref mcoP2LC <mcoB12-180,5*mcoFT1 mcoP2LC ref mcoP2LC <mcoB23,5;
changec2 mcoColDS
ifz mcoLoopCount mcoCrenEndcap2
ifn mcoLoopCount mcoCrenEndcap2
gv mcoCrenDist (mcoD23LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop4
line ref mcoP2LC <mcoB23,mcoCurLen ref mcoP2LC <mcoB23,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount mcoCrenLoop4
:mcoCrenEndcap2
line mcoP3LC ref mcoP3LC <mcoB23-180,5;
changec2 mcoColDS
:mcoDoneCrenLoop4
lwidth 0
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
:mcoabort
selby1
keep 10001,10001
erase 10001,10001
selrest
rdon
econ


Двери-Окна

Название

Двери-Окна
Автор | Jonas Eckerman
Команда | WallFeature, JWinM, JWinS, JWinD, JDoorWC, JDoorWO, JDoorWSC, etc, etc
Описание Макрос помещает окна и двери (или другие вещи, если кто-то хочет его изменить) на стенах, а также может разрывать стену если хотите. Этот макрос точно работает с Dungeon Designer 2, но я не знаю будет ли он работать без DD2.

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

Самый простой способ начать использовать макрос - вставить содержимое "Wall Features Menu.txt" в меню 'Dungen.mnu' (если вы имеете DD2, иначе вставляете это в FCW32.MNU), и вставить "Wall Features Macro.txt" в FCW32.MAC (я предпочитаю вставлять свой материал где-нибудь в конце файла). Также не забудьте сделать копии первоначальных файлов, на случай если вам понадобится восстановить их.

Прежде, чем макрос будет использоваться с картой, символы из каталога должны быть добавлены к этой карте. Самый простой способ делать это - загрузить каталог символов (Wall Features.fsc) и выбрать символы, которые будут использоваться на карте. Посмотрев в макросах можно найти макрос использующий символы, и добавить подобный сюда. Этот путь непростой, но потом можно будет просто добавлять все символы в этот путь, и не думать больше относительно этого.

Следующий макрос включает:

Окна: Одинарное, Стандартное и Двойное.
Деревянные двери: Стандартная, Двойная, Закрытая Стандартная, Закрытая Двойная.

Возможно делать собственные символы и изменять существующие, чтобы использовать с главным макросом, но каждый должен будет иметь свой маленький макрос для использования. Символ для этого макроса должен быть 4' шириной и 1' толщиной. Контрольная точка символа важна, поскольку он будет помещен в точке, определенной при работе макроса. Для окна, закрытой двери, и т.п., контрольная точка символа должна быть помещена в середине левой стороны. Для открытой двери она должна быть помещена в верхний левый угол. Для полностью измененного (или отраженного) символа, используемого для второй двери двойной двери (или безотносительно) контрольная точка должна быть помещена в середину правой стороны, или верхнего правого угла.

Закрытая дверь, окно, и т.п.:
----------------------------------
|
x
|
----------------------------------

Открытая дверь, и т.п.:
x---------------------------------
|
|
|
----------------------------------

При запуске макроса имеются несколько переменных, которые должны быть установлены перед запросом главного макроса. Они следующие:

jwsym: Символ, который нужно использовать.
jwbrk: 0 - не разрывать стену, остальные цифры - разрывать.
jwaa: Угол, под которым символ должен сходиться со стеной.
jwdf: 0 обычный символ, остальные цифры - двойной символ. Смотри jwsymr.
jwsymr: Используется при создании двойной стены (окна). Иначе не нужен.
Вложение | Это вложение (WallFeatures.zip) включает и сам макрос.

Код
//Uses JWALLFEATURE to create a simple window.
MACRO JWINM
GL jwsym JWinM
GV jwbrk 0
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a standard window.
MACRO JWINS
GL jwsym JWinS
GV jwbrk 0
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a double window.
MACRO JWIND
GL jwsym JWinD
GV jwbrk 0
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a simple window and break the wall.
MACRO JWINMB
GL jwsym JWinM
GV jwbrk 1
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a standard window and break the wall.
MACRO JWINSB
GL jwsym JWinS
GV jwbrk 1
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a double window and break the wall.
MACRO JWINDB
GL jwsym JWinD
GV jwbrk 1
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a closed wooden door and break the wall.
MACRO JDOORWC
GL jwsym JDoorWC
GV jwbrk 1
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a closed strong wooden door and break the wall.
MACRO JDOORWSC
GL jwsym JDoorWSC
GV jwbrk 1
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a closed metal door and break the wall.
MACRO JDOORMC
GL jwsym JDoorMC
GV jwbrk 1
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a closed stone door and break the wall.
MACRO JDOORSC
GL jwsym JDoorSC
GV jwbrk 1
GV jwaa 0
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create an open wooden door and break the wall.
MACRO JDOORWO
GL jwsym JDoorWO
GV jwbrk 1
GV jwaa 40
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create an open strong wooden door and break the wall.
MACRO JDOORWSO
GL jwsym JDoorWSO
GV jwbrk 1
GV jwaa 40
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create an open metal door and break the wall.
MACRO JDOORMO
GL jwsym JDoorMO
GV jwbrk 1
GV jwaa 40
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create an open stone door and break the wall.
MACRO JDOORSO
GL jwsym JDoorSO
GV jwbrk 1
GV jwaa 40
GV jwdf 0
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a closed double wooden door and break the wall.
MACRO JDDOORWC
GL jwsym JDoorWC
GL jwsymr JRDoorWC
GV jwbrk 1
GV jwaa 0
GV jwdf 1
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a closed double strong wooden door and break the wall.
MACRO JDDOORWSC
GL jwsym JDoorWSC
GL jwsymr JRDoorWSC
GV jwbrk 1
GV jwaa 0
GV jwdf 1
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a closed double metal door and break the wall.
MACRO JDDOORMC
GL jwsym JDoorMC
GL jwsymr JRDoorMC
GV jwbrk 1
GV jwaa 0
GV jwdf 1
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create a closed double stone door and break the wall.
MACRO JDDOORSC
GL jwsym JDoorSC
GL jwsymr JRDoorSC
GV jwbrk 1
GV jwaa 0
GV jwdf 1
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create an open double wooden door and break the wall.
MACRO JDDOORWO
GL jwsym JDoorWO
GL jwsymr JRDoorWO
GV jwbrk 1
GV jwaa 40
GV jwdf 1
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create an open double strong wooden door and break the wall.
MACRO JDDOORWSO
GL jwsym JDoorWSO
GL jwsymr JRDoorWSO
GV jwbrk 1
GV jwaa 40
GV jwdf 1
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create an open double metal door and break the wall.
MACRO JDDOORMO
GL jwsym JDoorMO
GL jwsymr JRDoorMO
GV jwbrk 1
GV jwaa 40
GV jwdf 1
JWALLFEATURE
ENDM

//Uses JWALLFEATURE to create an open double stone door and break the wall.
MACRO JDDOORSO
GL jwsym JDoorSO
GL jwsymr JRDoorSO
GV jwbrk 1
GV jwaa 40
GV jwdf 1
JWALLFEATURE
ENDM

//Places a symbol with the right scale and such between two points.
//If jwbrk is not zero, it will make a wall break.
MACRO JWALLFEATURE
GOLAYER Wall Features
IFERR errjw
GV jwww ^DThickness:
IFZ jwww errjw
IFN jwww errjw
:noswjw1
GE jwe1 ON ^DStart point:
GP jwp1 jwe1
IFERR errjw
GP jwp2 ON ^DEnd point:
IFERR errjw
GDIST jwwl jwp1 jwp2
GBRNG jwwa jwp1 jwp2
IFZ jwdf nojwdf1
GV jwwl jwwl*0.5
:nojwdf1
GV jwua jwwa+jwaa
GV jwwa jwwa+0
GV jwsx jwwl/4'
GV jwsy jwww/1'
IFZ jwbrk nobrkjw
BREAK jwe1 jwp1 jwp2
IFERR errjw
:nobrkjw
GL comm SYMBOL
APND comm
APND comm jwsym
comm
jwsx
jwsy
jwua
jwp1;
IFERR errjw
IFZ jwdf errjw
GV jwua jwwa-jwaa
GL comm SYMBOL
APND comm
APND comm jwsymr
comm
jwsx
jwsy
jwua
jwp2;
:errjw
ENDM

Submitter Info
Name: | Jonas Eckerman
eMail: | jonas@truls.org


Изогнутая Лестница

Название | Изогнутая Лестница
Автор | Ralf Schemmann
Команда | CSTAIR
Описание | Этот макрос рисует лестницу переменной длинны по дуге. Это очень полезно для изображения планов башен и подобных зданий. Стиль рисунка подобен символам лестниц ПроФэнтези в Dungeon Designer 2 пакете.
Инструкции | Макрос спрашивает ширину лестницы, глубину ступеней в градусах, центр дуги и начало-конец лестницы. Может потребоваться немного экспериментов чтобы получить представление того, что производит этот макрос. Этот макрос для работы нуждается в другом макросе от ПроФэнтези: MBH (сделать черным и полым). Этот макрос должен присутствовать в вашем макро-файле для корректной работы.
Вложение | нет

Код
// Insert macro MBH here - not included for Copyright reasons
//the next macro draws a staircase along an arc
//by Ralf Schemmann

MACRO CSTAIR
RDOFF
COLOR 16
FSTYLE Solid
LSTYLE Solid
GV sw1 ^DStair width:
GV stw1 ^DStep depth:
LWIDTH sw1
IFERR edg
GP p1 ^DCenter:
IFERR edg
GP p2 ^DStarting point:
IFERR edg
ARCS p1 p2 ^D
UNDO
GP p3 @0,0
ARCS p1 p2 p3
ARCS p1 p2 p3
MBH
GDIST r1 p1 p2
GBRNG a1 p1 p2
GBRNG a2 p1 p3
GV b1 a1+0
GV b2 a2+0
GV b3 b2-1
GV stepi 1.0
IFP stw1-b3 edg
:step
COLOR 14
FSTYLE Solid
GV a3 b2-(stw1*stepi)+(stw1*1/3)
ARCR p1 r1 a1 a3
ESC
COLOR 16
GV a4 b2-(stw1*stepi)
ARCR p1 r1 a1 a4
ESC
ARCR p1 r1 a1 a4
ESC
MBH
GV stepi stepi+1.0
IFP (b2-(stw1*stepi))-b1 step

:edg
REDRAW
SELBYD
RDON
ENDM

Submitter Info
Name: | Ralf Schemmann
eMail: | ralf@fb1.uni-siegen.de


Каменная стена

Название | Каменная стена
Автор | Morgan Olden
Команда | blockwall
Описание | Преобразует закрытый объект в стену из каменных блоков.
Инструкции | В макросе используются стили заливки, сначала необходимо 'Вставить как часть' следующий файл: Потом стереть получившиеся три квадрата, а после этого ваша карта будет содержать символы-стили заливки 'StoneFill1', 'StoneFill2', 'BlockFill', 12 символов плит пола. Этот макрос хорошо сочетается с макросом Block Wall Edging. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Стили заливки (Dungeon_Fills_and_Symbols1.FCW) включенные в макрос. Файлы скрипта (BlockWall1-Dark.scr, BlockWall1-Light.scr) содержат макрос.
Код
macro blockwalldark
ecoff
rdoff
GE mcoWallSource ^DSelect entity to convert to Block Wall:
IFERR mcogotoend
SELBY1
CHANGEC2 mcoWallSource 251
SELBYP
CHANGEC 0
CHANGELW 0
CHANGEFS SOLID
COPY 0,0 0,0;
CHANGEFS StoneFill2
COPY 0,0 0,0;
CHANGEFS BlockFill1
CHANGEC 0
SELBYD
REDRAW
:mcogotoend
rdon
econ
endm

macro blockwalllight
ecoff
rdoff
GE mcoWallSource ^DSelect entity to convert to Block Wall:
IFERR mcogotoend
SELBY1
CHANGEC2 mcoWallSource 254
SELBYP
CHANGEC 0
CHANGELW 0
CHANGEFS SOLID
COPY 0,0 0,0;
CHANGEFS StoneFill1
COPY 0,0 0,0;
CHANGEFS BlockFill1
CHANGEC 245
SELBYD
REDRAW
:mcogotoend
rdon
econ


Край каменной стены

Название | Край каменной стены
Автор | Morgan Olden
Команда | blockedgedark
Описание | Делает серию 'каменных блоков' как край каменной стены.
Инструкции | В макросе используются стили заливки, сначала необходимо 'Вставить как часть' следующий файл: Потом стереть получившиеся три квадрата, а после этого ваша карта будет содержать символы-стили заливки 'StoneFill1', 'StoneFill2', 'BlockFill', 12 символов плит пола. Этот макрос хорошо сочетается с макросом BLOCKWALL Макрос запрашивает конечные точки края стены. Правый клик - выход. Ставьте его по часовой стрелке вокруг комнаты, чтобы край стены был обращен в нужную сторону. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Стили заливки (Dungeon_Fills_and_Symbols1.FCW) включенные в макрос. Файлы скрипта (BlockEdge1-Dark.scr, BlockEdge1-Light.scr) содержат макрос.
Код
MACRO blockedgedark
ecoff
rdoff
selsave
:mcoMacroRepeat
point 10001,10001;
golayer MacroConstruction
gp mcoP1 ^DPoint 1:
iferr mcoDONE
line mcoP1 ^DPoint 2:;
undo
gp mcoP2 @0,0
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcoDONE
gbrng mcoB12 mcoP1 mcoP2
gv mcoCP 0
gv mcoBaf mcoB12+90
RANDOM mcoR1
:mcoLOOP
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
RANDOM mcoR6
RANDOM mcoR7
gv mcoBde mcoB12+90+((mcoR3-.5)*5)
gp mcoPa ref mcoP1 <mcoB12,mcoCP
gp mcoPb ref mcoPa <mcoB12-45,.3+(mcoR4*.4)
gp mcoPd ref mcoP1 <mcoB12,mcoCP+1+(mcoR1*3)
gp mcoPc ref mcoPd <mcoB12-135,.3+(mcoR5*.4)
gp mcoPe ref mcoPd <mcoBde,1+(mcoR2*3)+(mcoR6*.5)
gp mcoPf ref mcoPa <mcoBaf,1+(mcoR2*3)+(mcoR7*.5)
lwidth 0
color 251
fstyle solid
poly mcoPa mcoPb mcoPc mcoPd mcoPe mcoPf;
color 0
fstyle StoneFill2
poly mcoPa mcoPb mcoPc mcoPd mcoPe mcoPf;
gv mcoBaf mcoBde
gv mcoCP mcoCP+1+(mcoR1*3)
RANDOM mcoR1
ifp mcoD12-(mcoCP+1+(mcoR1*3) mcoLOOP
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
RANDOM mcoR6
RANDOM mcoR7
gp mcoPa mcoPd
gp mcoPb ref mcoPa <mcoB12-45,.3+(mcoR4*.4)
gp mcoPd mcoP2
gp mcoPc ref mcoPd <mcoB12-135,.3+(mcoR5*.4)
gp mcoPe ref mcoPd <mcoB12+90,1+(mcoR2*3)+(mcoR6*.5)
gp mcoPf ref mcoPa <mcoBaf,1+(mcoR2*3)+(mcoR7*.5)
lwidth 0
color 251
fstyle solid
poly mcoPa mcoPb mcoPc mcoPd mcoPe mcoPf;
color 0
fstyle StoneFill2
poly mcoPa mcoPb mcoPc mcoPd mcoPe mcoPf;
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
selby1
keep 10001,10001
erase 10001,10001
go mcoMacroRepeat
:mcoDONE
selrest
rdon
econ
endm

macro blockedgelight
ecoff
rdoff
selsave
:mcoMacroRepeat
point 10001,10001;
golayer MacroConstruction
gp mcoP1 ^DPoint 1:
iferr mcoDONE
line mcoP1 ^DPoint 2:;
undo
gp mcoP2 @0,0
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcoDONE
gbrng mcoB12 mcoP1 mcoP2
gv mcoCP 0
gv mcoBaf mcoB12+90
RANDOM mcoR1
:mcoLOOP
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
RANDOM mcoR6
RANDOM mcoR7
gv mcoBde mcoB12+90+((mcoR3-.5)*5)
gp mcoPa ref mcoP1 <mcoB12,mcoCP
gp mcoPb ref mcoPa <mcoB12-45,.3+(mcoR4*.4)
gp mcoPd ref mcoP1 <mcoB12,mcoCP+1+(mcoR1*3)
gp mcoPc ref mcoPd <mcoB12-135,.3+(mcoR5*.4)
gp mcoPe ref mcoPd <mcoBde,1+(mcoR2*3)+(mcoR6*.5)
gp mcoPf ref mcoPa <mcoBaf,1+(mcoR2*3)+(mcoR7*.5)
lwidth 0
color 254
fstyle solid
poly mcoPa mcoPb mcoPc mcoPd mcoPe mcoPf;
color 245
fstyle StoneFill1
poly mcoPa mcoPb mcoPc mcoPd mcoPe mcoPf;
gv mcoBaf mcoBde
gv mcoCP mcoCP+1+(mcoR1*3)
RANDOM mcoR1
ifp mcoD12-(mcoCP+1+(mcoR1*3) mcoLOOP
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
RANDOM mcoR6
RANDOM mcoR7
gp mcoPa mcoPd
gp mcoPb ref mcoPa <mcoB12-45,.3+(mcoR4*.4)
gp mcoPd mcoP2
gp mcoPc ref mcoPd <mcoB12-135,.3+(mcoR5*.4)
gp mcoPe ref mcoPd <mcoB12+90,1+(mcoR2*3)+(mcoR6*.5)
gp mcoPf ref mcoPa <mcoBaf,1+(mcoR2*3)+(mcoR7*.5)
lwidth 0
color 254
fstyle solid
poly mcoPa mcoPb mcoPc mcoPd mcoPe mcoPf;
color 245
fstyle StoneFill1
poly mcoPa mcoPb mcoPc mcoPd mcoPe mcoPf;
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
selby1
keep 10001,10001
erase 10001,10001
go mcoMacroRepeat
:mcoDONE
selrest
rdon
econ


Лестницы

Название | Лестницы
Aвтoр | Morgan Olden
Кoмaнда | Stairs
Описание | Изображает лестницу как обыкновенную полосу. Три стиля: деревянная, камeнная или простая.
Инструкции | Измените следующие настройки: Ширина лестницы (стандарт 5) Глубина ступеней (стандарт 1) Стиль лестницы: деревянная, каменная или обычная (стандарт 'деревянная') В дополнение к макросу включен и скрипт с кодом (смотри вложение ниже) Для запуска скрипта, cкoпиpyйте его на свой компьютер, наберите в командной строке СС2 команду 'script', и выберите сохраненный файл.
Вложение | Вложение (Stairs.scr) включено в макрос. Смотри выше.
Кoд
gl mcoCredits ---Macro design by Morgan Olden (C)2002---
ecoff
rdoff
point 10001,10001;
golayer MacroConstruction
scriptm #vars-Stairs.scr
ifdef mcoVarsOK mcoDoneVarCheck
:mcoDefineVars
gv mcoW 5
gv mcoSD 1
gv mcoStyle 1
gv mcoW ^DStaircase width? (5)
gv mcoSD ^DStep depth? (1)
gv mcoStyle ^DStyle? (1=Wood,default 2=Stone 3=Plain)
gv mcoCol1 39
gv mcoCol2 36
ifz mcoStyle-1 mcoDoneStyleSelect
gv mcoCol1 253
gv mcoCol2 248
ifz mcoStyle-2 mcoDoneStyleSelect
gv mcoCol1 15
gv mcoCol2 15
:mcoDoneStyleSelect
gw mcoVarsOK OK
savevars vars-Stairs
go mcoStart
:mcoDoneVarCheck
gv mcoUseDefault 1
gv mcoUseDefault ^DUse saved settings? (1=yes - default - click) (0=no)
ifz mcoUseDefault mcoDefineVars
:mcoStart
fstyle Solid;lwidth 0
gp mcoP1 ^DPoint:
iferr mcoAbort
gp mcoP1a mcoP1
DBLN mcoW mcoP1 ^DNext point:;
|gp mcoP2 @0,0
gdist mcoD12 mcoP1 mcoP2
ifz mcoD12 mcoAbort
selbyp;erase
GBRNG mcoB12 mcoP1 mcoP2
gp mcoP1R ref mcoP1 <mcoB12-90,mcoW/2
gp mcoP1L ref mcoP1 <mcoB12+90,mcoW/2
gp mcoP1aR mcoP1R
gp mcoP1aL mcoP1L
:mcoLoop
DBLN mcoW mcoP1a mcoP2 ^DNext point:;
|gp mcoP3 @0,0
selbyp;erase
gdist mcoD23 mcoP2 mcoP3
ifz mcoD23 mcoClose
selbyp;erase
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23 mcoP2 mcoP3
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gtan mcowtn 90-((mcoB12-mcoB23-180)/2)
gv mcoaw (mcoW/2)/mcowcs
gv mcoaw2 (mcoW/2)*mcowtn
gp mcoP2R ref mcoP2 <(mcoB12+mcoB23)/2+90,mcoaw
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2inner mcoP2L
gv mcoX -1
ifp mcoaw2 mcoControl1
gv mcoaw2 mcoaw2*-1
gp mcoP2inner mcoP2R
gv mcoX 1
:mcoControl1
gp mcoP2a ref mcoP2 <(mcoB12-180),mcoaw2
gp mcoP2aR ref mcoP2a <mcoB12-90,mcoW/2
gp mcoP2aL ref mcoP2a <mcoB12+90,mcoW/2
gp mcoP2b ref mcoP2 <(mcoB23),mcoaw2
gp mcoP2bR ref mcoP2b <mcoB23-90,mcoW/2
gp mcoP2bL ref mcoP2b <mcoB23+90,mcoW/2
gl rem ----------------------------Draw straight length entities
color mcoCol1
poly mcoP2aR mcoP1aR mcoP1aL mcoP2aL;
gdist mcoDP1aP2a mcoP1a mcoP2a
gn mcoSteps mcoDP1aP2a/mcoSD
ifp mcoSteps mcoDoneCalcSteps
gn mcoSteps 1
:mcoDoneCalcSteps
gv mcoCount 0
:mcoStepLoop
gv mcoCount mcoCount+1
gp mcoStepP ref mcoP1a <mcoB12,(mcoDP1aP2a/mcoSteps)*mcoCount
gp mcoStepPa ref mcoP1a <mcoB12,((mcoDP1aP2a/mcoSteps)*mcoCount)-((mcoDP1aP2a/mcoSteps)/4)
ifp mcoStyle-2 mcoSkipStepShadow
color mcoCol2
poly ref mcoStepP <mcoB12+90,mcoW/2
ref mcoStepPa <mcoB12+90,mcoW/2
ref mcoStepPa <mcoB12-90,mcoW/2
ref mcoStepP <mcoB12-90,mcoW/2;
:mcoSkipStepShadow
color 0
line ref mcoStepP <mcoB12+90,mcoW/2 ref mcoStepP <mcoB12-90,mcoW/2;
ifp mcoSteps-mcoCount mcoStepLoop
line mcoP2aR mcoP1aR mcoP1aL mcoP2aL;
gl rem ----------------------------Draw corner entities
gv mcoA1 mcoB12-mcoB23
ifp mcoA1 mcoSkipAngleAdjust1
gv mcoA1 mcoA1*-1
:mcoSkipAngleAdjust1
ifn mcoA1-180 mcoSkipAngleAdjust2
gv mcoA1 360-mcoA1
:mcoSkipAngleAdjust2
ifz mcoA1 mcoSkipCorner
gn mcoSteps ((3.1416*mcoW)/360*mcoA1)/mcoSD
ifp mcoSteps mcoDoneCalcSteps2
gv mcoSteps 1
:mcoDoneCalcSteps2
gv mcoCount 0
gp mcoSP1 ref mcoP2inner <mcoB12+(90*mcoX),mcoW
:mcoCornerLoop
gv mcoCount mcoCount+1
gp mcoSP2 ref mcoP2inner <mcoB12-(mcoA1/mcoSteps*mcoCount*mcoX)+(90*mcoX),mcoW
gdist mcoDSP12 mcoSP1 mcoSP2
gbrng mcoBSP12 mcoSP1 mcoSP2
color mcoCol1
poly mcoP2inner mcoSP1 mcoSP2;
ifp mcoStyle-2 mcoSkipCornerShadow
color mcoCol2
poly mcoP2inner ref mcoSP1 <mcoBSP12,mcoDSP12*.75 mcoSP2;
:mcoSkipCornerShadow
color 0
line mcoP2inner mcoSP1 mcoSP2;
gp mcoSP1 mcoSP2
ifp mcoSteps-mcoCount mcoCornerLoop
:mcoSkipCorner
gl rem ----------------------------Get ready for next segment
gp mcoP1 mcoP2
gp mcoP1R mcoP2R
gp mcoP1L mcoP2L
gp mcoP1aR mcoP2bR
gp mcoP1aL mcoP2bL
gp mcoP2 mcoP3
gp mcoP1a mcoP2b
go mcoLoop
:mcoClose
GBRNG mcoB12 mcoP1 mcoP2
gp mcoP2R ref mcoP2 <mcoB12-90,mcoW/2
gp mcoP2L ref mcoP2 <mcoB12+90,mcoW/2
gp mcoP2a mcoP2
gp mcoP2aR mcoP2R
gp mcoP2aL mcoP2L
gl rem ----------------------------Draw last straight length entities
color mcoCol1
poly mcoP2aR mcoP1aR mcoP1aL mcoP2aL;
gdist mcoDP1aP2a mcoP1a mcoP2a
gn mcoSteps mcoDP1aP2a/mcoSD
ifp mcoSteps mcoDoneCalcSteps3
gn mcoSteps 1
:mcoDoneCalcSteps3
gv mcoCount 0
:mcoStepLoop2
gv mcoCount mcoCount+1
gp mcoStepP ref mcoP1a <mcoB12,(mcoDP1aP2a/mcoSteps)*mcoCount
gp mcoStepPa ref mcoP1a <mcoB12,((mcoDP1aP2a/mcoSteps)*mcoCount)-((mcoDP1aP2a/mcoSteps)/4)
ifp mcoStyle-2 mcoSkipStepShadow2
color mcoCol2
poly ref mcoStepP <mcoB12+90,mcoW/2
ref mcoStepPa <mcoB12+90,mcoW/2
ref mcoStepPa <mcoB12-90,mcoW/2
ref mcoStepP <mcoB12-90,mcoW/2;
:mcoSkipStepShadow2
color 0
line ref mcoStepP <mcoB12+90,mcoW/2 ref mcoStepP <mcoB12-90,mcoW/2;
ifp mcoSteps-mcoCount mcoStepLoop2
line mcoP2aR mcoP1aR mcoP1aL mcoP2aL;
selby1
keep 10001,10001
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
:mcoabort
selby1
keep 10001,10001
erase 10001,10001
selrest
rdon
econ


Одиночная каменная стена

Название | Одиночная каменная стена
Автор | Morgan Olden
Команда | singleblockwall
Описание | Изображает серию каменных блоков. Работает как 'Линия', и позволяет создавать ломаные стены. Версия 1.1
Инструкции | Это очень большой по размерам макрос, его лучше использовать как скрипт, чтобы не забивать fcw32.mac файл. Макрос работает как 'Линия' рисуя серию каменных блоков. Можно использовать как край стены, как стену или как объект - ширина изменяется. Вы можете быстро и просто изобразить стену с красивым краем или просто протянуть от стены до стены. Это версия 1.1 макроса, содержащая небольшие исправления и дополнения. Вы можете изменить цвета, и настройки сохранятся до выхода из СС2. Эти же настройки использует и вариант 'Преобразование' этого макроса. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (BlockWall-SingleCourse.scr) содержит макрос.
Код
macro singleblockwall
ecoff
point 10001,10001;
golayer MacroConstruction
scriptm #blockwall-singlecourse-variables.scr
ifdef mcoVarsOK mcoDoneVarCheck
:mcoDefineVars
gv mcoC1 250
gv mcoC2 251
gv mcoC3 252
gv mcoCOut 0
gcol mcoC1 ^DColor 1: (250)
gcol mcoC2 ^DColor 2: (251)
gcol mcoC3 ^DColor 3: (252)
gcol mcoCOut ^DOutline color: (0)
gv mcow 1
gv mcow ^DWidth: (1)
gw mcoVarsOK OK
savevars blockwall-singlecourse-variables
go mcoStart
:mcoDoneVarCheck
gv mcoUseDefault 1
gv mcoUseDefault ^DUse saved settings? (1=yes - default - click) (0=no)
ifz mcoUseDefault mcoDefineVars
:mcoStart
selbyp
fstyle solid
lstyle solid
lwidth 0
color 0
gp mcoP1 ^DPoint 1:
iferr mcoabort
line mcoP1 ^DPoint 2:;
undo
gp mcoP2 @0,0
GDIST mcoBtest mcoP1 mcoP2
ifz mcoBtest mcoabort
gv mcoFIRSTTIME 0
gv mcoOffSet mcow
gp mcoP1a mcoP1
:mcoloop
GBRNG mcoB12 mcoP1 mcoP2
line mcoP2 ^DNext point:;
undo
gp mcoP3 @0,0
GDIST mcoBtest mcoP2 mcoP3
ifz mcoBtest mcodone
GBRNG mcoB23 mcoP2 mcoP3
ifz mcoB12-mcoB23-180 mcodone
ifz mcoB23-mcoB12-180 mcodone
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw 1/mcowcs*(mcow/2)
gp mcoP2R ref mcoP2 <(mcoB12+mcoB23)/2+90,mcoaw
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
RANDOM mcoR1
gp mcoP1b ref mcoP1 <mcoB12,mcoOffSet+(mcoR1*mcow*2)
gp mcoP1bR ref mcoP1b <mcoB12-90,mcow/2
gp mcoP1bL ref mcoP1b <mcoB12+90,mcow/2
ifz mcoFIRSTTIME mcoCONTROL2
gbrng mcoB1aL1L mcoP1aL mcoP1L
gbrng mcoB1aR1R mcoP1aR mcoP1R
gbrng mcoB1bL1L mcoP1bL mcoP1L
gbrng mcoB1bR1R mcoP1bR mcoP1R
gbrng mcoB1aLR mcoP1aL mcoP1aR
gbrng mcoB1bLR mcoP1bL mcoP1bR
RANDOM mcoR1
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
RANDOM mcoR6
RANDOM mcoR7
RANDOM mcoR8
RANDOM mcoR9
RANDOM mcoR10
RANDOM mcoR11
RANDOM mcoR12
gp mcoPP1 ref mcoP1aR <mcoB1aR1R+((mcoR1-.5)*10),(mcow/10)+(mcow/10*mcoR4)
gp mcoPP2 ref mcoP1aR <mcoB1aLR-180,(mcow/10)+(mcow/10*mcoR5)
gp mcoPP3 ref mcoP1aL <mcoB1aLR,((mcow/10)+(mcow/10*mcoR6)
gp mcoPP4 ref mcoP1aL <mcoB1aL1L+((mcoR4-.5)*10),(mcow/10)+(mcow/10*mcoR7)
gp mcoPP5 ref mcoP1L <mcoB1aL1L-180+((mcoR5-.5)*10),(mcow/10)+(mcow/10*mcoR8)
gp mcoPP6 ref mcoP1L <mcoB1bL1L-180+((mcoR6-.5)*10),(mcow/10)+(mcow/10*mcoR9)
gp mcoPP7 ref mcoP1bL <mcoB1bL1L+((mcoR7-.5)*10),(mcow/10)+(mcow/10*mcoR10)
gp mcoPP8 ref mcoP1bL <mcoB1bLR,(mcow/10)+(mcow/10*mcoR11)
gp mcoPP9 ref mcoP1bR <mcoB1bLR-180,(mcow/10)+(mcow/10*mcoR12)
gp mcoPP10 ref mcoP1bR <mcoB1bR1R+((mcoR10-.5)*10),(mcow/10)+(mcow/10*mcoR1)
gp mcoPP11 ref mcoP1R <mcoB1bR1R-180+((mcoR11-.5)*10),(mcow/10)+(mcow/10*mcoR2)
gp mcoPP12 ref mcoP1R <mcoB1aR1R-180+((mcoR12-.5)*10),(mcow/10)+(mcow/10*mcoR3)
poly mcoPP1 mcoPP2 mcoPP3 mcoPP4 mcoPP5 mcoPP6 mcoPP7 mcoPP8 mcoPP9 mcoPP10 mcoPP11 mcoPP12;
RANDOM mcoRCOL
changec mcoCOut
changec2 mcoC1
ifn mcoRCOL-.3 mcoDONECOL1
changec2 mcoC2
ifn mcoRCOL-.6 mcoDONECOL1
changec2 mcoC3
:mcoDONECOL1
go mcoCONTROL3
:mcoCONTROL2
gp mcoP1b mcoP1
gv mcoFIRSTTIME 1
:mcoCONTROL3
gv mcoOffSet mcoaw
ifp mcoaw mcoCONTROL1
gv mcoOffSet mcoaw*(0-1)
:mcoCONTROL1
RANDOM mcoR1
gp mcoP1a ref mcoP2 <mcoB12-180,mcoOffSet+(mcoR1*mcow*2)
gp mcoP1aR ref mcoP1a <mcoB12-90,mcow/2
gp mcoP1aL ref mcoP1a <mcoB12+90,mcow/2
:mcoBlockLine1
gdist mcoD1b1a mcoP1b mcoP1a
gv mcoCur 0
gp mcoPBLS mcoP1b
:mcoStraightBlockLoop
RANDOM mcoR1
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
RANDOM mcoR6
RANDOM mcoR7
RANDOM mcoR8
RANDOM mcoR9
RANDOM mcoR10
RANDOM mcoR11
RANDOM mcoR12
gv mcoCur mcoCur+mcow+(mcoR1*2*mcow)
ifn mcoD1b1a-mcoCur-(1*mcow) mcoDONEBLOCKLOOP
gp mcoPBLE ref mcoP1b <mcoB12,mcoCur
gp mcoPBLSL ref mcoPBLS <mcoB12+90,mcow/2
gp mcoPBLSR ref mcoPBLS <mcoB12-90,mcow/2
gp mcoPBLEL ref mcoPBLE <mcoB12+90,mcow/2
gp mcoPBLER ref mcoPBLE <mcoB12-90,mcow/2
gp mcoPBL1 ref mcoPBLSL <mcoB12-90,(mcow/10)+(mcow/10*mcoR1)
gp mcoPBL2 ref mcoPBLSL <mcoB12+((mcoR2-.5)*40),(mcow/10)+(mcow/10*mcoR3)
gp mcoPBL3 ref mcoPBLEL <mcoB12+180+((mcoR4-.5)*40),(mcow/10)+(mcow/10*mcoR5)
gp mcoPBL4 ref mcoPBLEL <mcoB12-90,(mcow/10)+(mcow/10*mcoR6)
gp mcoPBL5 ref mcoPBLER <mcoB12+90,(mcow/10)+(mcow/10*mcoR7)
gp mcoPBL6 ref mcoPBLER <mcoB12+180+((mcoR8-.5)*40),(mcow/10)+(mcow/10*mcoR9)
gp mcoPBL7 ref mcoPBLSR <mcoB12+((mcoR10-.5)*40),(mcow/10)+(mcow/10*mcoR11)
gp mcoPBL8 ref mcoPBLSR <mcoB12+90,(mcow/10)+(mcow/10*mcoR12)
poly mcoPBL1 mcoPBL2 mcoPBL3 mcoPBL4 mcoPBL5 mcoPBL6 mcoPBL7 mcoPBL8;
RANDOM mcoRCOL
changec mcoCOut
changec2 mcoC1
ifn mcoRCOL-.3 mcoDONECOL2
changec2 mcoC2
ifn mcoRCOL-.6 mcoDONECOL2
changec2 mcoC3
:mcoDONECOL2
gp mcoPBLS mcoPBLE
go mcoStraightBlockLoop
:mcoDONEBLOCKLOOP
gp mcoPBLE mcoP1a
gp mcoPBLSL ref mcoPBLS <mcoB12+90,mcow/2
gp mcoPBLSR ref mcoPBLS <mcoB12-90,mcow/2
gp mcoPBLEL ref mcoPBLE <mcoB12+90,mcow/2
gp mcoPBLER ref mcoPBLE <mcoB12-90,mcow/2
gp mcoPBL1 ref mcoPBLSL <mcoB12-90,(mcow/10)+(mcow/10*mcoR1)
gp mcoPBL2 ref mcoPBLSL <mcoB12+((mcoR2-.5)*30),(mcow/10)+(mcow/10*mcoR3)
gp mcoPBL3 ref mcoPBLEL <mcoB12+180+((mcoR4-.5)*30),(mcow/10)+(mcow/10*mcoR5)
gp mcoPBL4 ref mcoPBLEL <mcoB12-90,(mcow/10)+(mcow/10*mcoR6)
gp mcoPBL5 ref mcoPBLER <mcoB12+90,(mcow/10)+(mcow/10*mcoR7)
gp mcoPBL6 ref mcoPBLER <mcoB12+180+((mcoR8-.5)*30),(mcow/10)+(mcow/10*mcoR9)
gp mcoPBL7 ref mcoPBLSR <mcoB12+((mcoR10-.5)*30),(mcow/10)+(mcow/10*mcoR11)
gp mcoPBL8 ref mcoPBLSR <mcoB12+90,(mcow/10)+(mcow/10*mcoR12)
poly mcoPBL1 mcoPBL2 mcoPBL3 mcoPBL4 mcoPBL5 mcoPBL6 mcoPBL7 mcoPBL8;
RANDOM mcoRCOL
changec mcoCOut
changec2 mcoC1
ifn mcoRCOL-.3 mcoDONECOL3
changec2 mcoC2
ifn mcoRCOL-.6 mcoDONECOL3
changec2 mcoC3
:mcoDONECOL3
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp mcoP1R mcoP2R
gp mcoP1L mcoP2L
goto mcoloop
:mcodone
gp mcoP2R ref mcoP2 <mcoB23-90,mcow/2
gp mcoP2L ref mcoP2 <mcoB23+90,mcow/2
ifz mcoFIRSTTIME mcoDONECOL4
RANDOM mcoR1
gp mcoP1b ref mcoP1 <mcoB12,mcoOffSet+(mcoR1*mcow*2)
gp mcoP1bR ref mcoP1b <mcoB12-90,mcow/2
gp mcoP1bL ref mcoP1b <mcoB12+90,mcow/2
gbrng mcoB1aL1L mcoP1aL mcoP1L
gbrng mcoB1aR1R mcoP1aR mcoP1R
gbrng mcoB1bL1L mcoP1bL mcoP1L
gbrng mcoB1bR1R mcoP1bR mcoP1R
gbrng mcoB1aLR mcoP1aL mcoP1aR
gbrng mcoB1bLR mcoP1bL mcoP1bR
RANDOM mcoR1
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
RANDOM mcoR6
RANDOM mcoR7
RANDOM mcoR8
RANDOM mcoR9
RANDOM mcoR10
RANDOM mcoR11
RANDOM mcoR12
gp mcoPP1 ref mcoP1aR <mcoB1aR1R+(mcoR1*10),(mcow/10)+(mcow/10*mcoR4)
gp mcoPP2 ref mcoP1aR <mcoB1aLR-180,(mcow/10)+(mcow/10*mcoR5)
gp mcoPP3 ref mcoP1aL <mcoB1aLR,(mcow/10)+(mcow/10*mcoR6)
gp mcoPP4 ref mcoP1aL <mcoB1aL1L+(mcoR4*10),(mcow/10)+(mcow/10*mcoR7)
gp mcoPP5 ref mcoP1L <mcoB1aL1L-180+(mcoR5*10),(mcow/10)+(mcow/10*mcoR8)
gp mcoPP6 ref mcoP1L <mcoB1bL1L-180+(mcoR6*10),(mcow/10)+(mcow/10*mcoR9)
gp mcoPP7 ref mcoP1bL <mcoB1bL1L+(mcoR7*10),(mcow/10)+(mcow/10*mcoR10)
gp mcoPP8 ref mcoP1bL <mcoB1bLR,(mcow/10)+(mcow/10*mcoR11)
gp mcoPP9 ref mcoP1bR <mcoB1bLR-180,(mcow/10)+(mcow/10*mcoR12)
gp mcoPP10 ref mcoP1bR <mcoB1bR1R+(mcoR10*10),(mcow/10)+(mcow/10*mcoR1)
gp mcoPP11 ref mcoP1R <mcoB1bR1R-180+(mcoR11*10),(mcow/10)+(mcow/10*mcoR2)
gp mcoPP12 ref mcoP1R <mcoB1aR1R-180+(mcoR12*10),(mcow/10)+(mcow/10*mcoR3)
poly mcoPP1 mcoPP2 mcoPP3 mcoPP4 mcoPP5 mcoPP6 mcoPP7 mcoPP8 mcoPP9 mcoPP10 mcoPP11 mcoPP12;
RANDOM mcoRCOL
changec mcoCOut
changec2 mcoC1
ifn mcoRCOL-.3 mcoDONECOL4
changec2 mcoC2
ifn mcoRCOL-.6 mcoDONECOL4
changec2 mcoC3
:mcoDONECOL4
ifp mcoFIRSTTIME mcoCONTROL9
gp mcoP1b mcoP1
:mcoCONTROL9
gp mcoP1a mcoP2
gbrng mcoB12 mcoP1b mcoP1a
gdist mcoD1b1a mcoP1b mcoP1a
gv mcoCur 0
gp mcoPBLS mcoP1b
:mcoStraightBlockLoop2
RANDOM mcoR1
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
RANDOM mcoR6
RANDOM mcoR7
RANDOM mcoR8
RANDOM mcoR9
RANDOM mcoR10
RANDOM mcoR11
RANDOM mcoR12
gv mcoCur mcoCur+mcow+(mcoR1*2*mcow)
ifn mcoD1b1a-mcoCur-1 mcoDONEBLOCKLOOP2
gp mcoPBLE ref mcoP1b <mcoB12,mcoCur
gp mcoPBLSL ref mcoPBLS <mcoB12+90,mcow/2
gp mcoPBLSR ref mcoPBLS <mcoB12-90,mcow/2
gp mcoPBLEL ref mcoPBLE <mcoB12+90,mcow/2
gp mcoPBLER ref mcoPBLE <mcoB12-90,mcow/2
gp mcoPBL1 ref mcoPBLSL <mcoB12-90,(mcow/10)+(mcow/10*mcoR1)
gp mcoPBL2 ref mcoPBLSL <mcoB12+((mcoR2-.5)*40),(mcow/10)+(mcow/10*mcoR3)
gp mcoPBL3 ref mcoPBLEL <mcoB12+180+((mcoR4-.5)*40),(mcow/10)+(mcow/10*mcoR5)
gp mcoPBL4 ref mcoPBLEL <mcoB12-90,(mcow/10)+(mcow/10*mcoR6)
gp mcoPBL5 ref mcoPBLER <mcoB12+90,(mcow/10)+(mcow/10*mcoR7)
gp mcoPBL6 ref mcoPBLER <mcoB12+180+((mcoR8-.5)*40),(mcow/10)+(mcow/10*mcoR9)
gp mcoPBL7 ref mcoPBLSR <mcoB12+((mcoR10-.5)*40),(mcow/10)+(mcow/10*mcoR11)
gp mcoPBL8 ref mcoPBLSR <mcoB12+90,(mcow/10)+(mcow/10*mcoR12)
poly mcoPBL1 mcoPBL2 mcoPBL3 mcoPBL4 mcoPBL5 mcoPBL6 mcoPBL7 mcoPBL8;
RANDOM mcoRCOL
changec mcoCOut
changec2 mcoC1
ifn mcoRCOL-.3 mcoDONECOL5
changec2 mcoC2
ifn mcoRCOL-.6 mcoDONECOL5
changec2 mcoC3
:mcoDONECOL5
gp mcoPBLS mcoPBLE
go mcoStraightBlockLoop2
:mcoDONEBLOCKLOOP2
gp mcoPBLE mcoP1a
gp mcoPBLSL ref mcoPBLS <mcoB12+90,mcow/2
gp mcoPBLSR ref mcoPBLS <mcoB12-90,mcow/2
gp mcoPBLEL ref mcoPBLE <mcoB12+90,mcow/2
gp mcoPBLER ref mcoPBLE <mcoB12-90,mcow/2
gp mcoPBL1 ref mcoPBLSL <mcoB12-90,(mcow/10)+(mcow/10*mcoR1)
gp mcoPBL2 ref mcoPBLSL <mcoB12+((mcoR2-.5)*30),(mcow/10)+(mcow/10*mcoR3)
gp mcoPBL3 ref mcoPBLEL <mcoB12+180+((mcoR4-.5)*30),(mcow/10)+(mcow/10*mcoR5)
gp mcoPBL4 ref mcoPBLEL <mcoB12-90,(mcow/10)+(mcow/10*mcoR6)
gp mcoPBL5 ref mcoPBLER <mcoB12+90,(mcow/10)+(mcow/10*mcoR7)
gp mcoPBL6 ref mcoPBLER <mcoB12+180+((mcoR8-.5)*30),(mcow/10)+(mcow/10*mcoR9)
gp mcoPBL7 ref mcoPBLSR <mcoB12+((mcoR10-.5)*30),(mcow/10)+(mcow/10*mcoR11)
gp mcoPBL8 ref mcoPBLSR <mcoB12+90,(mcow/10)+(mcow/10*mcoR12)
poly mcoPBL1 mcoPBL2 mcoPBL3 mcoPBL4 mcoPBL5 mcoPBL6 mcoPBL7 mcoPBL8;
RANDOM mcoRCOL
changec mcoCOut
changec2 mcoC1
ifn mcoRCOL-.3 mcoDONECOL6
changec2 mcoC2
ifn mcoRCOL-.6 mcoDONECOL6
changec2 mcoC3
:mcoDONECOL6
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
:mcoabort
selby1
keep 10001,10001
erase 10001,10001
selrest
econ


Одиночная каменная стена - преобразование

Название | Одиночная каменная стена - преобразование
Автор | Morgan Olden
Команда | singleblockwallconvert
Описание | Преобразование линии в серию каменных блоков.
Инструкции | Работает как 'Одиночная каменная стена' только по готовой линии. Смотри 'Одиночная каменная стена' для информации. Макрос использует теже настройки что и базовый вариант этого макроса. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта BlockWall-SingleCourse-Convert.scr) содержит макрос.
Код
macro singleblockwallconvert
ecoff
point 10001,10001;
golayer MacroConstruction
scriptm #blockwall-singlecourse-variables.scr
ifdef mcoVarsOK mcoDoneVarCheck
:mcoDefineVars
gv mcoC1 250
gv mcoC2 251
gv mcoC3 252
gv mcoCOut 0
gcol mcoC1 ^DColor 1: (250)
gcol mcoC2 ^DColor 2: (251)
gcol mcoC3 ^DColor 3: (252)
gcol mcoCOut ^DOutline color: (0)
gv mcow 1
gv mcow ^DWidth: (1)
gw mcoVarsOK OK
savevars blockwall-singlecourse-variables
go mcoStart
:mcoDoneVarCheck
gv mcoUseDefault 1
gv mcoUseDefault ^DUse saved settings? (1=yes - default - click) (0=no)
ifz mcoUseDefault mcoDefineVars
:mcoStart
selbyp
fstyle solid
lstyle solid
lwidth 0
color 0
ge mcoEntity ^DSelect entity to convert.
iferr mcoDONE
glen mcoTotLen mcoEntity
gv mcoUnit 100/mcoTotLen
gp mcoP1 % 0 mcoEntity
gbrng mcoB1 mcoP1 % .01 mcoEntity
gv mcoCur 0
:mcoStraightBlockLoop
RANDOM mcoRLen
RANDOM mcoR1
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
RANDOM mcoR6
RANDOM mcoR7
RANDOM mcoR8
RANDOM mcoR9
RANDOM mcoR10
RANDOM mcoR11
RANDOM mcoR12
gv mcoCur mcoCur+mcow+(mcoRLen*2*mcow)
ifn mcoTotLen-mcoCur-(1*mcow) mcoDONEBLOCKLOOP
gp mcoP2 % mcoCur*mcoUnit mcoEntity
gbrng mcoB2 mcoP2 % (mcoCur*mcoUnit)+.01 mcoEntity
gbrng mcoB12 mcoP1 mcoP2
gp mcoP1L ref mcoP1 <mcoB1+90,mcow/2
gp mcoP1R ref mcoP1 <mcoB1-90,mcow/2
gp mcoP2L ref mcoP2 <mcoB2+90,mcow/2
gp mcoP2R ref mcoP2 <mcoB2-90,mcow/2
gp mcoPBL1 ref mcoP1L <mcoB1-90,(mcow/10)+(mcow/10*mcoR1)
gp mcoPBL2 ref mcoP1L <mcoB12+((mcoR2-.5)*40),(mcow/10)+(mcow/10*mcoR3)
gp mcoPBL3 ref mcoP2L <mcoB12+180+((mcoR4-.5)*40),(mcow/10)+(mcow/10*mcoR5)
gp mcoPBL4 ref mcoP2L <mcoB2-90,(mcow/10)+(mcow/10*mcoR6)
gp mcoPBL5 ref mcoP2R <mcoB2+90,(mcow/10)+(mcow/10*mcoR7)
gp mcoPBL6 ref mcoP2R <mcoB12+180+((mcoR8-.5)*40),(mcow/10)+(mcow/10*mcoR9)
gp mcoPBL7 ref mcoP1R <mcoB12+((mcoR10-.5)*40),(mcow/10)+(mcow/10*mcoR11)
gp mcoPBL8 ref mcoP1R <mcoB1+90,(mcow/10)+(mcow/10*mcoR12)
poly mcoPBL1 mcoPBL2 mcoPBL3 mcoPBL4 mcoPBL5 mcoPBL6 mcoPBL7 mcoPBL8;
RANDOM mcoRCOL
changec mcoCOut
changec2 mcoC1
ifn mcoRCOL-.3 mcoDONECOL2
changec2 mcoC2
ifn mcoRCOL-.6 mcoDONECOL2
changec2 mcoC3
:mcoDONECOL2
gp mcoP1 mcoP2
gv mcoB1 mcoB2
go mcoStraightBlockLoop
:mcoDONEBLOCKLOOP
gp mcoP2 % 100 mcoEntity
gbrng mcoB2 % 99.99 mcoEntity mcoP2
gbrng mcoB12 mcoP1 mcoP2
gp mcoP1L ref mcoP1 <mcoB1+90,mcow/2
gp mcoP1R ref mcoP1 <mcoB1-90,mcow/2
gp mcoP2L ref mcoP2 <mcoB2+90,mcow/2
gp mcoP2R ref mcoP2 <mcoB2-90,mcow/2
gp mcoPBL1 ref mcoP1L <mcoB1-90,(mcow/10)+(mcow/10*mcoR1)
gp mcoPBL2 ref mcoP1L <mcoB12+((mcoR2-.5)*40),(mcow/10)+(mcow/10*mcoR3)
gp mcoPBL3 ref mcoP2L <mcoB12+180+((mcoR4-.5)*40),(mcow/10)+(mcow/10*mcoR5)
gp mcoPBL4 ref mcoP2L <mcoB2-90,(mcow/10)+(mcow/10*mcoR6)
gp mcoPBL5 ref mcoP2R <mcoB2+90,(mcow/10)+(mcow/10*mcoR7)
gp mcoPBL6 ref mcoP2R <mcoB12+180+((mcoR8-.5)*40),(mcow/10)+(mcow/10*mcoR9)
gp mcoPBL7 ref mcoP1R <mcoB12+((mcoR10-.5)*40),(mcow/10)+(mcow/10*mcoR11)
gp mcoPBL8 ref mcoP1R <mcoB1+90,(mcow/10)+(mcow/10*mcoR12)
poly mcoPBL1 mcoPBL2 mcoPBL3 mcoPBL4 mcoPBL5 mcoPBL6 mcoPBL7 mcoPBL8;
RANDOM mcoRCOL
changec mcoCOut
changec2 mcoC1
ifn mcoRCOL-.3 mcoDONECOL6
changec2 mcoC2
ifn mcoRCOL-.6 mcoDONECOL6
changec2 mcoC3
:mcoDONECOL6
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
:mcoabort
selby1
keep 10001,10001
erase 10001,10001
selrest
econ


Плиты пола

Название | Плиты пола
Автор | Morgan Olden
Команда | randomtiles1
Описание | Устанавливает символы плит пола в случайном порядке.
Инструкции | Выбирает уже имеющиеся символы плит пола в случайном порядке и случайном повороте. В макросе используются стили заливки, сначала необходимо 'Вставить как часть' следующий файл: Потом стереть получившиеся три квадрата, а после этого ваша карта будет содержать символы-стили заливки 'StoneFill1', 'StoneFill2', 'BlockFill', 12 символов плит пола. Добавить контуры плитам пола взорвав их, и использовав команды OUTLINE или OUTLINE2. После установки плит пола можно использовать символ 'тени' (TileShading) для создания эффекта дополнительного объема - только не ошибитесь с углом поворота. Используйте '0' в графе угла поворота. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файлы скрипта (randomtiles1.scr)содержат макрос. Стили заливки (Dungeon_Fills_and_Symbols1.FCW) включенные в макрос.
Код
macro randomtiles1
ecoff
gv mcoScale 1
gv mcoScale ^DScale factor (1):
:mcoloop
gp mcocont ^D(left=continue, right=quit)
iferr mcodone
random mcosymbolnum
random mcoR1
gv mcosymbolnum mcosymbolnum*12
gv mcoangle 0
ifn mcoR1-.25 mcoDONEROTATING
gv mcoangle 90
ifn mcoR1-.5 mcoDONEROTATING
gv mcoangle 180
ifn mcoR1-.75 mcoDONEROTATING
gv mcoangle 270
:mcoDONEROTATING
ifp mcosymbolnum-11 mcosymbol12
ifp mcosymbolnum-10 mcosymbol11
ifp mcosymbolnum-9 mcosymbol10
ifp mcosymbolnum-8 mcosymbol9
ifp mcosymbolnum-7 mcosymbol8
ifp mcosymbolnum-6 mcosymbol7
ifp mcosymbolnum-5 mcosymbol6
ifp mcosymbolnum-4 mcosymbol5
ifp mcosymbolnum-3 mcosymbol4
ifp mcosymbolnum-2 mcosymbol3
ifp mcosymbolnum-1 mcosymbol2
:mcosymbol1
symbol;Tile1;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol2
symbol;Tile2;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol3
symbol;Tile3;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol4
symbol;Tile4;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol5
symbol;Tile5;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol6
symbol;Tile6;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol7
symbol;Tile7;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol8
symbol;Tile8;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol9
symbol;Tile9;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol10
symbol;Tile10;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol11
symbol;Tile11;1;1;mcoangle;^DLoc:;
go mcoloop
:mcosymbol12
symbol;Tile12;1;1;mcoangle;^DLoc:;
go mcoloop
:mcodone


Стена пещеры

Название | Стена пещеры
Автор | Morgan Olden
Команда | cliffface1
Описание | Создает край стены, как натуральную стену пещеры. Версия 1.1
Инструкции | Этот макрос создает эффект 'стены пещеры' по стороне линии, плавной линии или полигона. Установите ширину (по умолчанию 3), варианты ширины или 'ломаность' (по умолчанию 0.5, меньше - плавно, больше - изломано) и размер сегмента (по умолчанию 10). Это версия 1.1 макроса, содержащая небольшие исправления и дополнения. Вы можете сменить цвета и все настройки сохраняются до выхода из СС2. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (cliffface1.scr) содержит макрос.
Код
macro cliffface1
ecoff
point 10001,10001;
golayer MacroConstruction
scriptm #cliffface-variables.scr
ifdef mcoVarsOK mcoDoneVarCheck
:mcoDefineVars
gv mcoCol1 250
gv mcoCol2 251
gv mcoCol3 252
gv mcoCOut 0
gcol mcoCol1 ^DColor 1: (250)
gcol mcoCol2 ^DColor 2: (251)
gcol mcoCol3 ^DColor 3: (252)
gcol mcoCOut ^DOutline color: (0)
gv mcoCW 3
gv mcoCW ^DCliff Width: (3)
gv mcoVA .5
gv mcoVA ^DWidth variance: (.5)
gv mcoSL 10
gv mcoSL ^DSegment length: (10)
gw mcoVarsOK OK
savevars #cliffface-variables
go mcoStart
:mcoDoneVarCheck
gv mcoUseDefault 1
gv mcoUseDefault ^DUse saved settings? (1=yes - default - click) (0=no)
ifz mcoUseDefault mcoDefineVars
:mcoStart
ge mcoentity ^DSelect object to draw a cliff/cave wall along:
iferr mcodone
gdist mcoentitylen % 0 mcoentity % 1 mcoentity
gv mcoentitylen mcoentitylen*100
gv mcounit 100/mcoentitylen
gv mcoCur 0
gp mcoP1 % 0 mcoentity
gbrng mcoB1 mcoP1 % .01 mcoentity
RANDOM mcoR1
RANDOM mcoR2
gp mcoPa ref mcoP1 <mcoB1+90,((mcoR1-.5)*(mcoCW*mcoVA))+mcoCW
gp mcoPa2 mcoPa
gp mcoPb ref mcoP1 <mcoB1-90,((mcoR2-.5)*(mcoCW*mcoVA))+mcoCW
gp mcoPb2 mcoPb
color 0
lwidth 0
fstyle solid
selbyp
:mcoLOOP1
RANDOM mcoR1
RANDOM mcoR2
RANDOM mcoR3
RANDOM mcoR4
RANDOM mcoR5
gv mcoCur mcoCur+(((mcoR1*mcoSL)+(mcoSL*.3))*mcoUnit)
ifn 100-mcoCur mcoDONELOOP1
gbrng mcoB1 mcoP1 % mcoCur+.01 mcoentity
gp mcoP1 % mcoCur mcoentity
gp mcoP2 ref mcoP1 <mcoB1-180,(mcoR2*3)
ifn mcoR3-.5 mcoControl1
gp mcoP2 % mcoCur mcoentity
gp mcoP1 ref mcoP2 <mcoB1-180,(mcoR2*3)
:mcoControl1
gp mcoPc ref mcoP1 <mcoB1-90,((mcoR4-.5)*(mcoCW*mcoVA))+mcoCW
gp mcoPd ref mcoP2 <mcoB1+90,((mcoR5-.5)*(mcoCW*mcoVA))+mcoCW
poly mcoPa mcoPb mcoPc mcoPd;
RANDOM mcoR1
changec2 mcoCol1
ifn mcoR1-.3 mcoColBreak1
changec2 mcoCol2
ifn mcoR1-.6 mcoColBreak1
changec2 mcoCol3
:mcoColBreak1
gw mcoNUL nul
:mcoBreak1
RANDOM mcoRTEST
ifn mcoRTEST-.8 mcoBreak2
gbrng mcoBbc mcoPb mcoPc
gdist mcoDbc mcoPb mcoPc
gbrng mcoBba mcoPb mcoPa
gdist mcoDba mcoPb mcoPa
RANDOM mcoR1
RANDOM mcoR2
poly ref mcoPb <mcoBba,(mcoDba*mcoR1*.5)+(mcoDba*.3) mcoPb2 mcoPb ref mcoPb <mcoBbc,((mcoDbc*mcoR2*.3)+(mcoDbc*.1))*(mcoCW/10);
RANDOM mcoR1
changec2 mcoCol1
ifn mcoR1-.3 mcoColBreak2
changec2 mcoCol2
ifn mcoR1-.6 mcoColBreak2
changec2 mcoCol3
:mcoColBreak2
go mcoBreak3
:mcoBreak2
ifn mcoRTEST-.6 mcoBreak3
gbrng mcoBad mcoPa mcoPd
gdist mcoDad mcoPa mcoPd
gbrng mcoBab mcoPa mcoPb
gdist mcoDab mcoPa mcoPb
RANDOM mcoR1
RANDOM mcoR2
poly ref mcoPa <mcoBab,(mcoDab*mcoR1*.5)+(mcoDab*.3) mcoPa2 mcoPa ref mcoPa <mcoBad,((mcoDad*mcoR2*.3)+(mcoDad*.1))*(mcoCW/10);
RANDOM mcoR1
changec2 mcoCol1
ifn mcoR1-.3 mcoBreak3
changec2 mcoCol2
ifn mcoR1-.6 mcoBreak3
changec2 mcoCol3
:mcoBreak3
gbrng mcoBda mcoPd mcoPa
gdist mcoDda mcoPd mcoPa
gbrng mcoBcb mcoPc mcoPb
gdist mcoDcb mcoPc mcoPb
RANDOM mcoR1
gp mcoPa2 ref mcoPd <mcoBda,((mcoDda*mcoR1*.3)+(mcoDda*.1))*(mcoCW/10)
gp mcoPb2 ref mcoPc <mcoBcb,((mcoDcb*mcoR1*.3)+(mcoDcb*.1))*(mcoCW/10)
gp mcoPa mcoPd
gp mcoPb mcoPc
go mcoLOOP1
:mcoDONELOOP1
gp mcoP1 % 100 mcoentity
gp mcoPc ref mcoP1 <mcoB1-90,((mcoR4-.5)*(mcoCW*mcoVA))+mcoCW
gp mcoPd ref mcoP1 <mcoB1+90,((mcoR5-.5)*(mcoCW*mcoVA))+mcoCW
poly mcoPa mcoPb mcoPc mcoPd;
RANDOM mcoR1
changec2 mcoCol1
ifn mcoR1-.3 mcodone
changec2 mcoCol2
ifn mcoR1-.6 mcodone
changec2 mcoCol3
:mcodone
selbyl
changel MacroConstruction
like
10001,10001
selbyp
group
selby1
keep 10001,10001
erase 10001,10001
selrest
rdon
econ


Вставить часть

Название | Вставить часть
Aвтoр | Darren Hill
Команда | разные
Описание | Некоторые макросы или скрипты требуют наличия на карте определенных символов, заливок и стилей. Следующие три скрипта разработаны для того чтобы сделать количество операций при изготовлении карты как можно меньшим (а не кликать отдельно на каждый символ).
Инструкции | Первое - необходимые части файлов: Для макросов 'Каменная стена', 'Край каменной стены' и 'Одиночная каменная стена': "Dungeon_fills_and_Symbols1.fcw". Для макросов 'Деревья', 'Купа деревьев' и 'Изломаная дорога': "Trees_and_road.fcw" Для макросов 'Двери-Окна': "Wallfeaturespart.fcw" Примечание: Я не создавал символы в этих файлах, я только добавил их на чистые карты чтобы создать части (за исключением заливок и символов подземелья, которые сделал Морган Олден) . Эти части файлов должны находиться в папке 'CC2/Parts' для корректной работы скрипта (или вам понадобится модифицировать скрипт - это совсем не сложное задание). Скрипты для загрузки этих частей даны ниже, преобразовать их в макросы достаточно просто. Например : Macro InsertTrees PARTM #Parts\Trees_and_road.fcw 1 0 0,0 SELBYP ERASE SELBYD EndM Этот процесс добавляет на карту часть с символами деревьев и стирает ее - при этом все символы, стили и заливки остаются на карте.
Вложение | Смотри выше.
Submitter Info
Name: | Darren Hill
eMail: | Darren Hill


Звезда1

Название | Звезда1
Автор | Morgan Olden
Команда | star1
Описание | Изображает полигон в виде правильной звезды с заданным количеством лучей, а также внутренним и внешним диаметром.
Инструкции | Выберите четыре значения: 1. Количество лучей. 2. Место для центра. 3. Внешний диаметр. 4. Внутренний диаметр. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (star1.scr) содержит макрос.
Код
macro star1
ecoff
lwidth 0
selsave
selbyp
gv mcoPoints ^DHow many points?
gp mcoPC ^DCentre point:
rpoly mcoPoints mcoPC ^DOuter diameter:
gp mcoPO @0,0
gdist mcoDO mcoPC mcoPO
ifz mcoDO mcoDone
erase
cirp mcoPC ^DInner diameter:
gp mcoPI @0,0
gdist mcoDI mcoPC mcoPI
ifz mcoDO-mcoDI mcoDone
erase
ifn mcoDO-mcoDI mcoDone
gv mcoC 0
gbrng mcoBase mcoPC mcoPO
poly
:mcoLoop
ref mcoPC <((360/mcoPoints/2)*mcoC)+mcoBase,mcoDO
ref mcoPC <((360/mcoPoints/2)*(mcoC+1))+mcoBase,mcoDI
gv mcoC mcoC+2
ifp (mcoPoints*2)-mcoC mcoLoop

:mcoDone
selrest
econ


Клавишный макрос

Название | Клавишный макрос
Автор | ProFantasy
Команда | <variable>
Описание | Позволяет задавать запуск конкретной команды комбинацией клавиш.
Инструкции | (this is just 1 example) - ничего, относящегося к делу
Вложение | нет

Код
MACRO XY
SCALEXY


Паутина от трех точек

Название | Паутина от трех точек
Автор | Morgan Olden
Команда | 3pointweb
Описание | Изображает паучью паутину зацепленную за три точки.
Инструкции | Обозначьте три точки - вот и все. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
Вложение | Файл скрипта (3pointweb.scr) содержит макрос.
Код
macro 3pointweb
ecoff
rdoff
gp mcoP1 ^DWeb point 1 (of 3):
iferr mcoDONE
gp mcoP2 ^DWeb point 2 (of 3):
iferr mcoDONE
gp mcoP3 ^DWeb point 3 (of 3):
iferr mcoDONE
gdist mcoD12 mcoP1 mcoP2
gdist mcoD23 mcoP2 mcoP3
gdist mcoD31 mcoP3 mcoP1
gbrng mcoB12 mcoP1 mcoP2
gbrng mcoB23 mcoP2 mcoP3
gbrng mcoB31 mcoP3 mcoP1
gp mcoP1a ref mcoP1 <mcoB12,mcoD12*.3
gp mcoP1b ref mcoP1 <mcoB12,mcoD12*.5
gp mcoP1c ref mcoP1 <mcoB12,mcoD12*.7
gp mcoP2a ref mcoP2 <mcoB23,mcoD23*.3
gp mcoP2b ref mcoP2 <mcoB23,mcoD23*.5
gp mcoP2c ref mcoP2 <mcoB23,mcoD23*.7
gp mcoP3a ref mcoP3 <mcoB31,mcoD31*.3
gp mcoP3b ref mcoP3 <mcoB31,mcoD31*.5
gp mcoP3c ref mcoP3 <mcoB31,mcoD31*.7
gdist mcoD12b mcoP1 mcoP2b
gdist mcoD23b mcoP2 mcoP3b
gdist mcoD31b mcoP3 mcoP1b
gbrng mcoB12b mcoP1 mcoP2b
gbrng mcoB23b mcoP2 mcoP3b
gbrng mcoB31b mcoP3 mcoP1b
gp mcoP4 ref mcoP3 <mcoB31b,mcoD31b/3*2
gdist mcoD14 mcoP1 mcoP4
gdist mcoD24 mcoP2 mcoP4
gdist mcoD34 mcoP3 mcoP4
gbrng mcoB14 mcoP1 mcoP4
gbrng mcoB24 mcoP2 mcoP4
gbrng mcoB34 mcoP3 mcoP4
gdist mcoD41a mcoP4 mcoP1a
gdist mcoD41c mcoP4 mcoP1c
gdist mcoD42a mcoP4 mcoP2a
gdist mcoD42c mcoP4 mcoP2c
gdist mcoD43a mcoP4 mcoP3a
gdist mcoD43c mcoP4 mcoP3c
gbrng mcoB41a mcoP4 mcoP1a
gbrng mcoB41c mcoP4 mcoP1c
gbrng mcoB42a mcoP4 mcoP2a
gbrng mcoB42c mcoP4 mcoP2c
gbrng mcoB43a mcoP4 mcoP3a
gbrng mcoB43c mcoP4 mcoP3c
spoly ref mcoP1 <mcoB14,mcoD14*.8 ref mcoP2 <mcoB24,mcoD24*.8 ref mcoP3 <mcoB34,mcoD34*.8;
spoly ref mcoP1 <mcoB14,mcoD14*.6 ref mcoP2 <mcoB24,mcoD24*.6 ref mcoP3 <mcoB34,mcoD34*.6;
spoly ref mcoP1 <mcoB14,mcoD14*.4 ref mcoP2 <mcoB24,mcoD24*.4 ref mcoP3 <mcoB34,mcoD34*.4;
spoly ref mcoP1 <mcoB14,mcoD14*.2 ref mcoP2 <mcoB24,mcoD24*.2 ref mcoP3 <mcoB34,mcoD34*.2;
line mcoP1 ref mcoP1 <mcoB12b,mcoD12b*.9;
line mcoP2 ref mcoP2 <mcoB23b,mcoD23b*.9;
line mcoP3 ref mcoP3 <mcoB31b,mcoD31b*.9;
line mcoP4 ref mcoP4 <mcoB41a,mcoD41a*.72;
line mcoP4 ref mcoP4 <mcoB41c,mcoD41c*.72;
line mcoP4 ref mcoP4 <mcoB42a,mcoD42a*.72;
line mcoP4 ref mcoP4 <mcoB42c,mcoD42c*.72;
line mcoP4 ref mcoP4 <mcoB43a,mcoD43a*.72;
line mcoP4 ref mcoP4 <mcoB43c,mcoD43c*.72;
arc3 mcoP1 ref mcoP3 <mcoB31b,mcoD31b*.9 mcoP2
arc3 mcoP2 ref mcoP1 <mcoB12b,mcoD12b*.9 mcoP3
arc3 mcoP3 ref mcoP2 <mcoB23b,mcoD23b*.9 mcoP1
:mcoDONE
rdon
econ


Переключение Заливка-Нет заливки

Название | Переключение Заливка-Нет заливки
Автор | ProFantasy
Команда | FILLTOG
Описание | Переключает два стиля залики - Есть заливка-Нет заливки.
Инструкции | Иконка:
Вложение | нет

Код
MACRO FILLTOG
APND ftftime -1
GV ftftime ftftime
IFZ ftftime+1 ftfirsttime
IFZ fs 1filltog
GV fs 0
FSTYLE Solid
GO efilltog
:1filltog
GV fs 1
FSTYLE Hollow
:ftfirsttime
GV ftftime ftftime-1
GL fs 1
FSTYLE Hollow
:efilltog


Простые макросы

Прислано Саймоном Роджерсом <simon@profantasy.com> on 12/15/1998 12:00:00 AM.

//Улучшенный макрос MBH
//Сделать последний изображенный объект черным и без заливки.

MACRO MBH
SELBYP
CHANGEC 0
CHANGEFS Hollow
SELBYD
ENDM
// This shows how to see if it is the first time it (or related macros) have been run
//Use a different variable to firsttime for different checks
//Improved version

MACRO FTE
GV firsttime -1
GV firsttime firsttime*secondtime
IFP firsttime 2fte
GV secondtime -1
:1fte
MSGBOX
First time
It's the first time!

GO efte
:2fte
MSGBOX
First time
It's not my first time!

:efte
ENDM 		//Set variable Colord to be a dark color
//Makes the last drawn entity solid and color Colord

MACRO MDS
SELBYP
CHANGEC Colord
CHANGEFS Solid
SELBYD
ENDM
//Set variable Colorl to be a light color
//Makes the last drawn entity solid and color Colorl

MACRO MDS
SELBYP
CHANGEC Colorl
CHANGEFS Solid
SELBYD
ENDM
//If you want to keep the current layer, color, etc,
//then restore it later, use KP to save the settings then
//RS to restore them. Note that it doesn't work if there is
//an entity at -10000,-10000

MACRO KP
POINT -10000,-10000
ENDM

MACRO RS
KEEP -10000,-10000
SELBY1
ERASE
SELBYD


Цвет 1 на Цвет 2

Название | Цвет 1 на Цвет 2
Автор | Morgan Olden
Команда | C1TOC2
Описание | Меняет второй цвет изображения (например контур), на первый (заливку).
Инструкции | My first commision! Thank's for the idea, Christof. (ничего относящегося к делу)
Вложение | нет

Код

macro C1TOC2
ge entity ^DSelect entity:
iferr done
selby1
CHANGEC2 entity;like entity
:done
selbyd


Скрыть все - Показать все

Название | Скрыть все - Показать все
Автор | ProFantasy
Команда | HIDETOG
Описание | Этот макрос - переключатель, который скрывает все слои кроме текущего и SymbolDefinition, или открывает все слои.
Инструкции | Иконка:
Вложение | нет

Код
MACRO HIDETOG
APND hstime -1
GV hstime hstime
IFZ hstime+1 hsfirsttime
IFZ hst 1hidetog
GV HST 0
SHOWA
GO ehidetog
:1hidetog
GV HST 1
HIDEA
SHOW SYMBOL DEFINITION>
:hsfirsttime
GV hsftime hsftime-1
GL HST 1
HIDEA
SHOW SYMBOL DEFINITION
:ehidetog


Сменить все цвета

Название | Сменить все цвета
Автор | ProFantasy
Команда | CC
Описание | Этот макрос меняет один цвет на другой на всей карте.
Инструкции | Пожалуйста обратите внимание - ВСЕ в слое 'TEMPORARY' будет стерто. Вы должны переименовать All 256 colors.fcw на allcolors.fcw
Вложение | нет

Код
MACRO CC
LAYER TEMPORARY
PARTM;#allcolors;1;0;0,0;
SELBYC
CHANGEC 77 78
CHANGEC 75 76
SELBYL
ERASE TEMPORARY
SELBYD
REDRAW


Спрятать слой при открытии карты

Название | Спрятать слой при открытии карты
Автор | Anna M. Dobritt
Команда | MAPA
Описание | Этот макрос позволяет скрыть и заморозить указаннный слой при открытии карты. Полезно для Мастера, если требуется показать подземелье игрокам, скрыв все ловушки (слой 'TRAPS').
Инструкции | Слой MAP LINKS - Это слой, который открывается как выбранный. Вы можете изменить название слоя. HIDEA - Скрыть ВСЕ слои. Выможете заменить эту команду на ту, которая нужна вам, например - HIDE BUILDINGS и т.п. (HIDE *LAYER NAME*) FREEZEA - Заморозить все, кроме выбранного слоя.
Вложение | нет

Код
MACRO MAPA
RDOFF
GFNOP fname *.fcw
IFERR emapa
LOADM fname
LAYER MAP LINKS
HIDEA
FREEZEA
RDON
:emapa
ENDM

Submitter Info
Name: | Anna M. Dobritt
eMail: | dorzil@aol.com


Ссылки

Название | Ссылки
Автор | Matthew Lynn
Команда | не требуется
Описание | Этот скрипт позволяет обозначать комнаты, строения или позиции на карте символами с числами, и создает ссылки от них на карту или файл.
Инструкции | Для нормальной работы этот скрипт требует наличия двух символов на карте. Просто откройте прилагаемый каталог, и кликните на оба символа - они добавятся на вашу карту.
Вложение | Hotspotmaker.zip - это и есть архив со скриптом и необходимым каталогом.
Код

Нажмите: 'Файл' ==> 'Скрипт', найдите его и запустите.

Submitter Info
Name: | Matthew Lynn
eMail: | N/A


Техника смены макросов

Название | Техника смены макросов
Aвтор | Darren Hill
Команда | не требуется
Описание | Некоторые предпочитают хранить макросы в разных файлах (например "usermacro.mac"), для того чтобы не редактировать официальный файл макросов (fcw32.mac). К несчастью, для того чтобы выполнить хоть один из этих макросов, требуется вручную переключить файлы макросов, выполнить макрос, и затем переключить обратно на стандартный файл макросов. Следующая техника позволяет вам устанавливая макро файл делать это автоматически из скрипта: вы создаете короткий и простой скрипт для каждого макроса во втором макро файле, а он заботится о переключении макросов за вас.
Инструкции | У меня есть макрос Citywall3 - я решил, что не хочу загромождать им официальный макро файл, так что я записываю его во второй макро файл - usermacro.mac. Я создаю второй короткий макрос в том же файле : Macro CW3 CityWall3 LoadMacM #fcw32.mac EndM И в завершение я пишу скрипт с такими командами: ------ LoadMacM #UserMacro.mac cw3 ------ (эти ---- знаки выделяют начало и конец скрипта - не включайте их в код скрипта). Когда вы выполняете макрос, он изменяет загруженный на данный момент макро файл, выполняет макрос cw3, который сам выполняет макрос citywall3, а затем переключает макро файл обратно на стандартный. Во всяком случае в теории. Есть небольшой глюк: часто после первого клика мыши сначала выдается сообщение об ошибке - проигнорируйте ее, запустите снова и все заработает... Надеюсь... Я включил в архив скрипт и пример макро файла (содержащего Citywall 2, 3 и 4 макросы из этого хранилища).
Вложение | Смотри выше.
Submitter Info
Name: | Darren Hill
eMail: | Darren Hill


Туман войны

Название | Туман войны
Автор | Darren Hill (с помощью Peter Olsson)
Команда | win
Описание | Вам наверное когда-нибудь хотелось показать игрокам лишь определенную часть карты, скрыв все остальное? Этот макрос позволяет вам оставить открытой лишь часть карты, скрыв все остальное серым экраном - туманом войны.
Инструкции | Внимание: этот макростребует для работы фоновой заливки в слое Background - это стандарт шаблонов CC2-Pro. Макрос создает слой FogOfWar если его не существует, или стирает все объекты в существующем. Затем он запрашивает конечные точки ломаной полосы - по окончании сделайте правый клик, и все за пределами этой зоны покроется серым туманом войны. (Примечание: при копировании нижеизложенного кода, убедитесь что строка "APND;Pts; " оканчивается на пробел) Также прилагается и файл скрипта.
Вложение | Вложение (PCWindow.scr) содержит скрипт с кодом макроса. PCWindow.scr
Код
MACRO win
:PCWindow
ECOFF
SELSAVE
GOLAYER FogOfWar
GOLAYER Background
SELBYL
SETLAYER FogOfWar
GP Pt ^D1st point:
IFERR Done
GL Pts Pt
:Loop
ERASE FogOfWar
REDRAW
PATH Pts;
GP Pt ^DNext point [done]:
IFERR OutOfLoop
APND;Pts;
APND;Pts;Pt
IFP 1 Loop
:OutOfLoop
ERASE FogOfWar
LAYERCPY Background
FogOfWar
POLY Pts;
MPOLY FogOfWar
SELBYP
CHANGEFS Solid
CHANGEC 16
REDRAW
:Done
SELREST
ECON
ENDM

Submitter Info
Name: | Darren Hill
eMail: | starscape@btinternet.com