Окно макросов вызывается через меню Tools-Console, или нажатием кнопки на панели. Макросы могут использоваться для нескольких целей: просто для вычислений, с входными данными из таблиц, вводимых с клавиатуры, с результатом выдаваемым в консоль или в окно карты. Также есть возможность модифицировать таблички батл-симулятора "на лету", оптимизируя по результатам вычислений симулятора характеристики кораблей. Стоит отметить, что вывод симулятора в окно карты возможен только при выключенных моделях карты.
   Окно делится на 4 части. Левый верхний угол содержит список функций, которые можно использовать в макросах, список переменных, и список имеющихся макросов. Правый верхний - консоль, в которую идет вывод из макросов и ввод с клавиатуры. Можете попробовать набрать в строчке cocerel и посмотреть окно карты - в нем должны появится подписи под планетами (подробности можно посмотреть выбрав в левом углу макрос и почитать описание в правом нижнем разделе). Для сброса надписей надо выполнить макрос clear. В левом нижнем разделе описан контекст данных батл-симулятора.
   Попробуем написать простейший макрос. Нажимаем правую кнопку мышки в списке макросов, и в появившемся меню выбираем пункт "New proc". В этом же меню можно создать функцию, которую можно использовать в макросе, удалить исходный код макроса, или удалить сам макрос. Вводим имя макроса (для переименования достаточно щелкнуть мышкой по нужному имени). После ввода имени в правом нижнем разделе появляется код-пустышка макроса (сделайте двойной щелчок).
proc test0
* new procedure
* enter your code below
   Вводим нижеследующий код макроса. Макрос подписывает планетки, указывая массу вашего флота, массу флота рас, к которым у вас мир, и массу флота враждебных рас. Если нет желания писать макрос, можете скачать и скопировать его в каталог макросов программы (обычно C:\Program Files\DataArt\GVNG\Macro\). После ввода макроса вызываем контекстное меню в правом нижнем разделе и дважды компилируем код. После этого в окне консоли набираем test0, дожидаемся окончания выполнения, переключаемся на окно карты и наслаждаемся результатом.
   Напомню, что выполнение макроса можно назначить на комбинацию клавиш (хоткей): выбираем File->Options->Hotkeys. Через контекстное меню (правая кнопка мышки) добавляем новый пункт. Ставим Destination = CurrentGame, в поле Action ручками вводим наименование макроса. Выбираем поле Hotkey, и нажимаем нужную комбинацию клавиш. Как видно на картинке, я назначил на Control+Insert - макрос Clear, на Control+Home - test0.
   Для корректной работы макроса необходима версия ГВНГ от 27.08.2009 и позднее.
proc test0
* объявление массивов. Тип array это обычный массив, тип map - массив с текстовыми ключами (ассоциативный).
dim aRace as map
dim aPlanets as map
dim aMass1 as map
dim aMass2 as map
dim aMass3 as map
dim aGr as map
dim aPeace as map
* для начала подсчитаем число планет на карте. 
allpl = 0
* команда запрашивает все поля из таблицы planets в массив PlanetsList
select * from planets to PlanetsList
loop
* считываем очередную планету из массива, до тех пор пока они есть
	readnext aPlanets from PlanetsList else break
	allpl = allpl+1
repeat
* считываем отношение нашей расы к всем остальным расам
select * from races to RacesList
loop
	readnext aRace from RacesList else break
	race = aRace["Name"];
	aPeace[aRace["Name"]] = aRace["Status"]
repeat
* считываем все группы
select * from groups to aGroupList
loop
	readnext aGr from aGroupList else break 
* статус из таблицы рас (-, war, peace)
	status = aPeace[aGr["Owner"]]
* номер планеты, на которой расположена группа
	source = aGr["#Source"]
* в aMass1 считаем массу своих кораблей на очередной планете
	if (status=="-") then aMass1[source]=aMass1[source]+aGr["Mass"] end 
* в aMass2 считаем массу нейтральных кораблей на очередной планете
	if (status=="Peace") then aMass2[source]=aMass2[source]+aGr["Mass"] end 
* в aMass3 считаем массу враждебных кораблей на очередной планете
	if (status=="War") then	aMass3[source]=aMass3[source]+aGr["Mass"] end 
repeat
* теперь подписываем все планеты
for i=0 to allpl
	newCom = ""
* цвет подписи на планетах, где больше наших кораблей зеленый
	newColor = "GreenLT"
* цвет подписи на планетах, где больше нейтральных кораблей желтый
	if (aMass2[i]>aMass1[i] && aMass2[i]>aMass3[i]) then newColor = "Yellow"
* цвет подписи на планетах, где больше враждебных кораблей красный
	if (aMass3[i]>aMass1[i] && aMass3[i]>aMass2[i]) then newColor = "RedLT"
* операция ":" выполняет конкатенацию текстовых строк (если i=100 мы получим строчку "#100")
	pl = "#":i
* округлим выводимую массу функцией round()
	newCom = round(aMass1[i]):":":round(aMass2[i]):":":round(aMass3[i])
* апдейтим поле камент к планете
	update "commentary" pl: " " :newCom
* апдейтим цвет камента на планете
	update "color" pl: " ":newColor 
next i