Сборка UQM 0.7.0 (HD) Windows, VisualC++

Вопросы, мысли, скандалы, интриги, расследования
Аватара пользователя
Malin
Сообщения: 2030
Регистрация: 28 май 2023

Сборка UQM 0.7.0 (HD) Windows, VisualC++

Сообщение Malin »

Сборка UQM 0.7.0 (HD)


Информация по сборке как оригинальной UQM 0.7.0, так и UQM 0.7.0 HD. Обе игры используют одинаковые библиотеки поэтому все пункты кроме п.5 у этих версий совпадают.

Система: Windows XP SP3 / Windows 7 / Windows 10
Компилятор: Visual C++ 2008 Express / Visual C++ 2010 Express

Скачать исходники:
UQM 0.7.0-1: https://sourceforge.net/...
Backup: uqm0.7.0-1.zip (Яндекс.Диск)
или UQM 0.7.0 HD: https://sourceforge.net/...
Распаковать в C:\Build\sc2\
Файл C:\Build\sc2\sc2\INSTALL.msvc содержит информацию об установке. Можно почитать блокнотом каким-нибудь. А ещё можно почитать файл INSTALL рядом.

На самом деле путь C:\Build\sc2\ не обязательно должен быть именно таким, можно изменить его тут и далее на любой другой.

Ниже, опираясь на файл INSTALL.msvc, представлено "переваренное мной" руководство:

1. Установка VisualC++ и SDK

1.1. Качаем и устанавливаем Microsoft Visual C++ 2008 Express Edition.
Microsoft Visual C++ 2010 Express
Можно сразу использовать Microsoft VisualC++ 2010 Express (см. заметку внизу поста)

Ссылка из файла не рабочая.
Побродив по интернетам нашёл вот эту: http://microsoft.com/.../VS2008ExpressWithSP1ENUX1504728.iso
На всякий случай backup'ул: MSVC++ 2008 Express (Яндекс.Диск)
Устанавливаем, со всем соглашаемся, регистрировать не обязательно.

1.2. Качаем и устанавливаем Microsoft Windows Platform SDK.
Ссылка конечно же не работает. Я качал от сюда: https://www.microsoft.com/....
Там предложат три образа. Нужен GRMSDKX_EN_DVD.iso.
Backup: GRMSDKX_EN_DVD.iso (Яндекс.Диск)
При установке можно снять галочки с SQL и Silverlight. Остальное не трогать.

Если ругается на отсутствие .NET 4.0: https://www.microsoft.com/ru-ru/Download/confirmation.aspx?id=17718
2. Зависимости.
UQM использует некоторые внешние библиотеки, их мы и будем ставить. Библиотеки будем по возможности складывать в "C:\Build\".

2.1. Нужен SDL. Это библиотека управляющая звуком, вводом и графикой на низком уровне. Ссылка ведёт на сайт, но версии 1.2.14 там уже нет, зато там МНОГО других ссылок. Прошу заметить что нас интересует что-то с VC на конце.
Я использовал SDL-devel-1.2.15-VC.zip
Backup: SDL-1.2.15.rar (Яндекс.Диск)

2.2 Нужен SDL_image. Библиотека для загрузки изображений для SDL.
Ситуация аналогичная. Я качал SDL_image-devel-1.2.12-VC.zip
Backup: SDL_image-1.2.12.rar (Яндекс.Диск)

2.3. Ogg Vorbis - сжиматель звука с потерями.
Ссылка из файла не рабочая. OggVorbis-win32sdk-1.0.1.zip
Backup: OggVorbis-win32sdk-1.0.1.rar (Яндекс.Диск)

2.4. zlib- архиватор.
Сайт по ссылке придуман инопланетянами. Однако одна полезная ссылка там есть: https://github.com/madler/zlib откуда нужно стащить zip при помощи кнопки "Code -> Download ZIP", но он не содержит dll'ки.
Нам нужны ещё и сами библиотеки: https://github.com/.../zlib-1.2.3.win32 откуда я повытягивал dll и lib.
Всё вместе легко и просто у меня: zlib.rar (Яндекс.Диск)

2.5. OpenAL - библиотека работы со звуком
Ссылка из файла не рабочая.
Скачать тут: http://openal.org/downloads/ Нам нужен тот что с пометкой SDK.
Backup: OpenAL11CoreSDK.zip (Яндекс.Диск)
Там не совсем библиотека, а установщик. Устанавливаем, со всем соглашаемся.
После сделать следующее:
- Создать папку "AL" в "C:\Program Files\OpenAL 1.1 SDK\include"
- Копировать все заголовочные файлы *.h из "C:\Program Files\OpenAL 1.1 SDK\include" в эту папку "AL"
3. Исходники UQM и библиотеки

3.1 Исходники мы уже скачали ранее, но на всякий случай выложу всю папку Build как она есть у меня: Build (Яндекс.Диск)
Если будете её качать то все последующие пункты уже выполнены. Однако будьте внимательны, чтобы прописанные мной пути в ниже перечисленных пунктах совпадали с вашими!

3.2 Копируем следующие библиотеки (*.dll - все dll файлы из папки)
- "C:\Build\SDL-1.2.15\lib\x86\SDL.dll"
- "C:\Build\SDL_image-1.2.10\lib\x86\*.dll"
- "C:\Build\oggvorbis-win32sdk-1.0.1\bin\*.dll"
в папку "C:\Build\sc2\sc2\"
4. Настраиваем проект в VisualC++

4.1. Заходим в папку C:\Build\sc2\build\msvc6\ дважды кликаем на "UrQuanMasters.dsp".
Откроется Visual C++ и запросит конвертацию файла VC6.dsp. Соглашаемся.

4.2. Устанавливаем зависимости
- В VisualC++, в панели Solution Explorer ПКМ на проекте 'UrQuanMasters', в контекстном меню выбираем "Properties"
- Откроется окно, в дереве слева выбираем "Configuration Properties -> C/C++ -> General"
- В правой части выбираем "Additional Include Directories" и кликаем на маленькую кнопочку справа "..."
Далее нужно добавить зависимости:
"C:\Build\zlib"
"C:\Build\oggvorbis-win32sdk-1.0.1\include"
"C:\Build\SDL_image-1.2.10\include"
"C:\Build\SDL-1.2.15\include"
"C:\Program Files\OpenAL 1.1 SDK\include"
"C:\Program Files\Microsoft SDKs\Windows\v7.0\Include"
помимо этих у меня уже есть эти две:
..\..\src
..\..\src\regex

4.3. Снова зависимости.
- Там же, слева, в дереве "Configuration Properties -> Linker -> General -> Additional Library Directories -> Кнопка "..."
- Добавить зависимости:
"C:\Build\zlib\lib"
"C:\Build\oggvorbis-win32sdk-1.0.1\lib"
"C:\Build\SDL_image-1.2.10\lib\x86"
"C:\Build\SDL-1.2.14\lib\x86"
"C:\Program Files\OpenAL 1.1 SDK\libs\Win32"
"C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib"

4.4. Удалить ненужные зависимости
- Там же, в "Linker -> Input - > Additional Dependencies"
- Удалить odbc32.lib и odbccp32.lib.
В итоге у меня остались:
SDL.lib
SDLmain.lib
SDL_image.lib
zdll.lib
ws2_32.lib
user32.lib

Если user32.lib нет - добавить насильно.
5. Почти всё. Компилируем проект в VisualC++ (F5) и огребаем ошибок.
UQM 0.7.0-1

У меня их было много, я шаманил как мог, переименовывал папки и бился в истерике. Однако, мне кажется все они будут устранены так как они учтены в пунктах выше, опишу одну важную ошибку:

'vsnprintf' : redefinition; different linkage

Видимо произошёл конфликт новых библиотек и исходников. В итоге я внёс следующие правки в код:

..\src\libs\network\wspiapiwrap.h
Код:

Код: Выделить всё

#	define getaddrinfo WspiapiGetAddrInfo
# define getnameinfo WspiapiGetNameInfo
# define freeaddrinfo WspiapiFreeAddrInfo
void WINAPI WspiapiFreeAddrInfo (struct addrinfo *ai);
int WINAPI WspiapiGetAddrInfo(const char *nodename, const char *servname,
const struct addrinfo *hints, struct addrinfo **res);
int WINAPI WspiapiGetNameInfo (const struct sockaddr *sa, socklen_t salen,
char *host, size_t hostlen, char *serv, size_t servlen, int flags);

Заменил на:

Код: Выделить всё

#include <wspiapi.h>
..\src\libs\uio\utils.c
Удалил функцию:

Код: Выделить всё

static inline int vsnprintf(char *str, size_t size, const char *format, va_list args)
{
int result = _vsnprintf (str, size, format, args);
if (str != NULL && size != 0)
str[size - 1] = '\0';
return result;
}
..\src\port.h

Удалил объявление:

Код: Выделить всё

int vsnprintf(char *str, size_t size, const char *format, va_list args);
После этого всё скомпилировалось! Ура, товарищи! Ура!
Правда это мы скомпилировали отладочную версию, которая вместе с игрой запускает ещё и отладочное окно...
UQM 0.7.0 HD
Чуда не случилось и в этой версии. Сразу вылезла куча ошибок, повидимому связанная с тем что разработчики этой версии перешли на другой компилятор языка Си, от чего появились тысячи каких-то глупых ошибок.

../src/types.h

Убрать препроцессорное условие в этом коде:

Код: Выделить всё

#if !defined(HAVE__BOOL) && !(defined(_MSC_VER) && _MSC_VER >= 1600) // MB: update to work on MSVC 2013 and higher, which already has this defined
typedef unsigned char _Bool;
#endif /* HAVE_BOOL */

В итоге должно получиться это если просто закомментировать:

Код: Выделить всё

//#if !defined(HAVE__BOOL) && !(defined(_MSC_VER) && _MSC_VER >= 1600) // MB: update to work on MSVC 2013 and higher, which already has this defined
typedef unsigned char _Bool;
//#endif /* HAVE_BOOL */
../src/???
Далее могут возникнуть ошибки из-за того что Си не одобряет объявления перемнных не в начале тела блока { }. Таких мест было несколько, да простят меня те кто будут идти по моим стопам за то, что я не приведу их здесь конкретно. Да и если вы идёте по моим стопам то скорее всего знаете что такое объявления перемнных и тело блока. А если не знаете, то как вам удалось добраться до этого этапа???

Пример с ошибкой:

Код: Выделить всё

if (someCondition)
{ //начало тела блока
int i; //Объявление переменной
i += 1; //Исполняемый код
SIZE sizeVar; //перенести к int i; перед всем исполняемым кодом
sizeVar += 1; //Исполняемый код
...
} //конец тела блока
../src/uqm/gendef.c
Не знаю почему, но компилятор не нашёл функции генерации для колоний Зок-Фот-Пиков generateZoqFotPikColony0Functions и generateZoqFotPikColony1Functions. Придётся закоментировать их вызов и объявление:

Код: Выделить всё

//extern GenerateFunctions generateZoqFotPikColony0Functions;
//extern GenerateFunctions generateZoqFotPikColony1Functions;

...

//case ZOQ_COLONY0_DEFINED:
//return &generateZoqFotPikColony0Functions;
//case ZOQ_COLONY1_DEFINED:
//return &generateZoqFotPikColony1Functions;

UPD: сам файл genzoqcolony.c есть в папке ..\src\uqm\planets\generate. Надо добавить его через Solution Explorer в эту папку (Add Existing Item)
6. Компиляция релизной версии
Для того чтобы скомпилировать версию без отладочного окна, нужно следующее.

6.1. Перевести режим сборки с Debug_NoAccel в Release_NoAccel (ищи ниспадающее меню в верхней панели инструментов VisualStudio)

6.2. Повторить пункты 4.2, 4.3, 4.4 для релизной версии (окно свойств проекта в верху имеет также ниспадающее меню выбора режима сборки - выбрать Release_NoAccel)

6.3. В том же окне свойств перейти в Configuration Properties -> Build Events -> Post-Build Event и очистить поля Command Line и Description

Полезности и пояснения
    Скомпилированный файл uqm.exe находится в папке C:\Build\sc2\sc2\. Его можно переместить в ванильную UQM 0.7.0-1 и будет работать.
    Если нужно отладить сборку с аргументами типа --addon russian, то аргументы можно ввести в Configuration Properties -> Debugging -> Command Arguments
    Точка входа в программу main(..) находится в файле uqm.c
Переход на VisualStudio C++ 2010
1. Копировать папку ..\build\msvc6 рядом дав ей название msvc10 для порядку.
2. Запустить ..\build\msvc10\UrQuanMasters.sln в VSC++2010, подождать пока процесс миграции не завершится.
3. Project -> UqQuanMasters Properties -> Configuration Properties -> Debugging -> Command ввести путь до uqm.exe, например C:\Build\sc2\sc2\uqm.exe
    Аватара пользователя
    Vasaka
    MOSC Team
    Сообщения: 3195
    Регистрация: 24 янв 2011

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Vasaka »

    Посмотрел, что основное это Визуал Студио. Она точно не работает под Вайном.
    Аватара пользователя
    Malin
    Сообщения: 2030
    Регистрация: 28 май 2023

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Malin »

    Vasaka писал(а):Хотел для начала ресурсы на планетах поменять. Надоело летать по злачным местам. Что б опять, как в детстве!

    Сделать случайную генерацию?
    На самом деле хорошо бы запустить сборку не 0.7.0, а последнюю HD версию. Жаль не добрался тогда в порыве инициативы до неё.
    Оффтоп
    Аватара пользователя
    Vasaka
    MOSC Team
    Сообщения: 3195
    Регистрация: 24 янв 2011

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Vasaka »

    Сделать случайную генерацию?
    Чтобы сделать случайную генерацию нужно выносить настройки во внешний файл. Иначе придётся каждый раз собирать игру заново. Просто хочу поменять (руками или программно, скорее программно) файл с планетами и потом с изменённым собрать.
    У обычной версии и HD разве не одни и те же файлы ресурсов за исключением картинок?
    Ну и как по мне, лучше сначала обычную версию сделать. Меня тошнит от HD. У меня пропадает всякое желание делать что-либо для того, во что я потом не смогу играть.
    Аватара пользователя
    Malin
    Сообщения: 2030
    Регистрация: 28 май 2023

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Malin »

    Вась, я скомпилировал под win7. С бубном наплясался, устал, опишу процедуру позже.

    Стоит отметить следующее:
      Версия UQM 0.7.0
      Английская
      Отладочная (вылазит доп. окно с отладочной инфой. Надо разбираться как компилить обычную версию)
      Я могу собирать только под винду (под Linux надо собирать на Linux'e ;) Руководство в исходниках есть под minGW)
    Впрочем, сейчас можно опробовать твои хотелки на том что работает уже сейчас :yes:
    Аватара пользователя
    Vasaka
    MOSC Team
    Сообщения: 3195
    Регистрация: 24 янв 2011

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Vasaka »

    Я могу собирать только под винду (под Linux надо собирать на Linux'e Руководство в исходниках есть под minGW)
    Это не нужно. Сейчас люди всё больше играют на Линуксе в Виндовые версии, даже при наличии версии для линукс. Как правило, они работают быстрее, стабильнее и безпроблемней.
    Виндовый УКМ работает в линуксе просто шикарно.


    Впрочем, сейчас можно опробовать твои хотелки на том что работает уже сейчас
    Отлично. Пошёл искать файл, который содержит описание систем, планет и ресурсов на них. :cool:
    Аватара пользователя
    Vasaka
    MOSC Team
    Сообщения: 3195
    Регистрация: 24 янв 2011

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Vasaka »

    Файл, где содержатся координаты звёзд нашёл - plandata.c
    Вот в таком виде там содержится информация (в принципе всё понятно) -

    plandata.c

    Код: Выделить всё

    STAR_DESC starmap_array[] =
    {
    // postfix name index (like 'Normae')
    // prefix name index (like 'Alpha') |
    // alien presence | |
    // owner (unused) | | |
    // x, y star type colour | | | |
    {{5007, 35}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 6, 74},
    {{ 708, 41}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 7, 91},
    {{4714, 78}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 7, 74},
    {{2187, 83}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 0, 126},
    {{2814, 89}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 82},
    {{4244, 91}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 0, 125},
    {{5652, 98}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 0, 124},
    {{2939, 116}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 82},
    {{2771, 146}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 82},
    {{5313, 150}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 6, 73},
    {{ 265, 156}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 92},
    {{4529, 169}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 8, 74},
    {{4911, 180}, MAKE_STAR (GIANT_STAR, ORANGE_BODY, -1), 0, 1, 74},
    {{4747, 221}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 74},
    {{9708, 250}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 0, 112},
    {{4861, 262}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 74},
    {{2908, 269}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), SHOFIXTI_DEFINED, 4, 82},
    {{1855, 270}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 5, 81},
    {{7958, 270}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 8},
    {{5160, 280}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 73},
    {{ 570, 289}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 92},
    {{4923, 294}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), YEHAT_DEFINED, 3, 74},
    {{2820, 301}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 5, 82},
    {{7934, 318}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 8},
    {{8062, 318}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 8},
    {{1116, 334}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 6, 91},
    {{ 803, 337}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 91},
    {{1787, 338}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 6, 81},
    {{ 877, 340}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 91},
    {{5338, 355}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 5, 73},
    {{5039, 373}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 73},
    {{ 843, 380}, MAKE_STAR (GIANT_STAR, ORANGE_BODY, -1), 0, 1, 91},
    {{4872, 408}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 74},
    {{1740, 423}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 7, 81},
    {{4596, 429}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 9, 74},
    {{ 843, 431}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 2, 91},
    {{2156, 440}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 81},
    {{2004, 441}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 81},
    {{ 530, 442}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 92},
    {{ 958, 468}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 5, 91},
    {{2058, 475}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 2, 81},
    {{ 304, 477}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 1, 92},
    {{ 522, 525}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), PKUNK_DEFINED, 3, 92},
    {{2100, 554}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 81},
    {{ 134, 565}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 6, 92},
    {{6858, 577}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), MYCON_TRAP_DEFINED, 0, 123},
    {{5014, 584}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 73},
    {{5256, 608}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 73},
    {{2411, 718}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 9},
    {{2589, 741}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 9},
    {{ 675, 742}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 8, 91},
    {{9292, 750}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 5},
    {{1463, 779}, MAKE_STAR (GIANT_STAR, RED_BODY, -1), 0, 6, 80},
    {{3089, 782}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 4, 9},
    {{2854, 787}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 9},
    {{3333, 801}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 9},
    {{9237, 821}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 5, 5},
    {{9339, 843}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 5},
    {{ 242, 857}, MAKE_STAR (GIANT_STAR, ORANGE_BODY, -1), 0, 3, 90},
    {{1515, 866}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 5, 80},
    {{4770, 895}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 5, 75},
    {{1412, 905}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 80},
    {{4681, 916}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), RAINBOW_DEFINED, 6, 75},
    {{9333, 937}, MAKE_STAR (SUPER_GIANT_STAR, YELLOW_BODY, -1), MELNORME0_DEFINED, 2, 5},
    {{9419, 942}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 5},
    {{ 230, 952}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 2, 90},
    {{ 146, 955}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 90},
    {{4873, 968}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 75},
    {{1559, 993}, MAKE_STAR (SUPER_GIANT_STAR, RED_BODY, -1), MELNORME1_DEFINED, 1, 80},
    {{1895, 1041}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 93},
    {{4337, 1066}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 75},
    {{3732, 1067}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 0, 122},
    {{1579, 1115}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 80},
    {{4875, 1145}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 75},
    {{4604, 1187}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 75},
    {{5812, 1208}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 72},
    {{1312, 1260}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 80},
    {{1916, 1270}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 93},
    {{6562, 1270}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 0, 121},
    {{ 416, 1301}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 0, 120},
    {{3958, 1354}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 89},
    {{4000, 1363}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 89},
    {{1752, 1450}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), SOL_DEFINED, 0, 129},
    {{2187, 1500}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 0, 127},
    {{1806, 1507}, MAKE_STAR (GIANT_STAR, WHITE_BODY, -1), 0, 0, 128},
    {{5708, 1520}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 72},
    {{9469, 1548}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 6},
    {{4333, 1562}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 88},
    {{6041, 1562}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 72},
    {{9375, 1583}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 6},
    {{2881, 1614}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 96},
    {{6083, 1625}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 72},
    {{4250, 1645}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 88},
    {{ 650, 1646}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 7, 85},
    {{9477, 1670}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 6},
    {{2840, 1676}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 96},
    {{9541, 1687}, MAKE_STAR (GIANT_STAR, RED_BODY, -1), 0, 4, 6},
    {{7395, 1687}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 69},
    {{4333, 1687}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), VUX_DEFINED, 2, 88},
    {{9559, 1735}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 6},
    {{ 736, 1737}, MAKE_STAR (GIANT_STAR, BLUE_BODY, -1), 0, 6, 85},
    {{1601, 1746}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 94},
    {{7395, 1750}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 69},
    {{ 951, 1770}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 1, 85},
    {{1666, 1812}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 2, 94},
    {{7187, 1833}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 2, 69},
    {{ 705, 1838}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 5, 85},
    {{1140, 1847}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 85},
    {{6467, 1878}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 71},
    {{2791, 1895}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 96},
    {{6500, 1916}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 71},
    {{5458, 1916}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 0, 119},
    {{1048, 1919}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 85},
    {{3678, 1926}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 99},
    {{3345, 1931}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), START_COLONY_DEFINED, 0, 98},
    {{8187, 1937}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 4, 7},
    {{3352, 1940}, MAKE_STAR (SUPER_GIANT_STAR, WHITE_BODY, -1), MELNORME2_DEFINED, 0, 97},
    {{ 977, 1953}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 85},
    {{4221, 1986}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), MAIDENS_DEFINED, 1, 100},
    {{4500, 2000}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 100},
    {{6833, 2000}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 70},
    {{8163, 2009}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 3, 7},
    {{8080, 2011}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 7},
    {{6036, 2035}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 4, 71},
    {{6479, 2062}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), EGG_CASE1_DEFINED, 3, 71},
    {{2104, 2083}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), ZOQ_SCOUT_DEFINED, 0, 118},
    {{8062, 2083}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 7},
    {{ 270, 2187}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 79},
    {{6500, 2208}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 6, 71},
    {{6291, 2208}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), MYCON_DEFINED, 5, 71},
    {{ 125, 2229}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 79},
    {{ 312, 2250}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 79},
    {{3884, 2262}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 99},
    {{ 742, 2268}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), CHMMR_DEFINED, 0, 117},
    {{2306, 2285}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 95},
    {{2402, 2309}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 95},
    {{6395, 2312}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), SUN_DEVICE_DEFINED, 2, 12},
    {{8875, 2312}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 9, 61},
    {{3551, 2320}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 99},
    {{6208, 2333}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 12},
    {{3354, 2354}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 99},
    {{9909, 2359}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 0, 111},
    {{2298, 2385}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 95},
    {{7020, 2395}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 2, 70},
    {{9038, 2407}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 61},
    {{9375, 2416}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 8, 61},
    {{6500, 2458}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 6, 12},
    {{ 217, 2509}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 78},
    {{3641, 2512}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 86},
    {{5625, 2520}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 14},
    {{3713, 2537}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), ORZ_DEFINED, 3, 86},
    {{3587, 2566}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), ANDROSYNTH_DEFINED, 7, 86},
    {{9291, 2583}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 61},
    {{3654, 2587}, MAKE_STAR (SUPER_GIANT_STAR, GREEN_BODY, -1), MELNORME3_DEFINED, 1, 86},
    {{3721, 2619}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), TAALO_PROTECTOR_DEFINED, 4, 86},
    {{5791, 2625}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 14},
    {{6416, 2625}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 12},
    {{6008, 2631}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), EGG_CASE0_DEFINED, 2, 14},
    {{3608, 2637}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 6, 86},
    {{3499, 2648}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 87},
    {{9479, 2666}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 61},
    {{3668, 2666}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 5, 86},
    {{ 229, 2666}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 78},
    {{8895, 2687}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 7, 61},
    {{ 138, 2696}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 78},
    {{5375, 2729}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 0, 116},
    {{6354, 2729}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), EGG_CASE2_DEFINED, 3, 12},
    {{6458, 2750}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 12},
    {{2458, 2750}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 6, 106},
    {{ 351, 2758}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 2, 78},
    {{7083, 2770}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 70},
    {{3759, 2778}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 87},
    {{9333, 2791}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 61},
    {{3400, 2804}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 87},
    {{9469, 2806}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), DRUUGE_DEFINED, 6, 61},
    {{3619, 2830}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 87},
    {{2208, 2854}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 7, 106},
    {{9250, 2854}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 4, 61},
    {{ 672, 2863}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 7, 78},
    {{ 167, 2875}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 6, 78},
    {{4030, 2887}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 105},
    {{ 384, 2900}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 78},
    {{2727, 2951}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 5, 106},
    {{4645, 2958}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 105},
    {{5625, 2958}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 13},
    {{8270, 2958}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 66},
    {{8291, 2979}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 66},
    {{6020, 2979}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), RAINBOW_DEFINED, 3, 13},
    {{6562, 3020}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 4, 70},
    {{2011, 3043}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 8, 106},
    {{8125, 3083}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 66},
    {{2354, 3166}, MAKE_STAR (GIANT_STAR, YELLOW_BODY, -1), 0, 4, 106},
    {{3833, 3187}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 105},
    {{5812, 3208}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 1, 13},
    {{9000, 3250}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 0, 113},
    {{ 291, 3250}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 84},
    {{ 501, 3259}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 84},
    {{ 791, 3270}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 84},
    {{2354, 3291}, MAKE_STAR (SUPER_GIANT_STAR, RED_BODY, -1), MELNORME4_DEFINED, 1, 106},
    {{1104, 3333}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 4, 84},
    {{2687, 3333}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 106},
    {{3187, 3375}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 107},
    {{1758, 3418}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 108},
    {{2520, 3437}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 106},
    {{8437, 3458}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 64},
    {{8770, 3458}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 64},
    {{3000, 3500}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 107},
    {{ 149, 3519}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 76},
    {{8791, 3541}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 64},
    {{2148, 3551}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 109},
    {{7375, 3562}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 0, 115},
    {{9312, 3562}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 63},
    {{9599, 3583}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 63},
    {{9375, 3604}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 63},
    {{ 90, 3614}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 6, 76},
    {{2770, 3625}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 4, 107},
    {{8708, 3625}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 64},
    {{ 267, 3645}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 76},
    {{1604, 3645}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 108},
    {{2274, 3663}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 109},
    {{ 229, 3666}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), ILWRATH_DEFINED, 1, 76},
    {{3083, 3674}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 107},
    {{2416, 3687}, MAKE_STAR (GIANT_STAR, ORANGE_BODY, -1), SPATHI_DEFINED, 5, 109},
    {{9333, 3708}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 63},
    {{2250, 3708}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 3, 109},
    {{ 288, 3735}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 76},
    {{2354, 3741}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 4, 109},
    {{2583, 3750}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 6, 109},
    {{4125, 3770}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), SYREEN_DEFINED, 0, 114},
    {{ 166, 3770}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 4, 76},
    {{6270, 3833}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 10},
    {{2145, 3916}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 110},
    {{6125, 3937}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 10},
    {{6291, 3937}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 9, 10},
    {{5937, 3937}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), SHIP_VAULT_DEFINED, 5, 10},
    {{2479, 3958}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 7, 109},
    {{ 926, 3972}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 83},
    {{2062, 3991}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 110},
    {{5895, 4020}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 8, 10},
    {{ 285, 4020}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 77},
    {{6062, 4041}, MAKE_STAR (GIANT_STAR, YELLOW_BODY, -1), 0, 1, 10},
    {{2875, 4041}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 20},
    {{8645, 4062}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 65},
    {{ 860, 4065}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 83},
    {{5958, 4083}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 10},
    {{3038, 4083}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 20},
    {{ 291, 4104}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 77},
    {{6166, 4125}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 6, 10},
    {{9812, 4145}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 62},
    {{8520, 4166}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 65},
    {{9573, 4182}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 62},
    {{ 500, 4187}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 77},
    {{2145, 4208}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 110},
    {{6208, 4229}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 7, 10},
    {{2812, 4250}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 7, 20},
    {{2937, 4306}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 4, 20},
    {{9416, 4395}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 62},
    {{2875, 4479}, MAKE_STAR (GIANT_STAR, WHITE_BODY, -1), 0, 1, 20},
    {{ 250, 4583}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 26},
    {{7250, 4583}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 68},
    {{ 479, 4583}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 26},
    {{5708, 4604}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 0, 104},
    {{ 479, 4645}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 26},
    {{2895, 4687}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 6, 20},
    {{2708, 4708}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 5, 20},
    {{ 562, 4708}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 26},
    {{ 416, 4717}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 4, 26},
    {{5094, 4931}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 4, 11},
    {{9000, 5000}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 67},
    {{8958, 5000}, MAKE_STAR (GIANT_STAR, BLUE_BODY, -1), 0, 1, 67},
    {{5006, 5011}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 11},
    {{7312, 5062}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 68},
    {{3679, 5068}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 17},
    {{9062, 5083}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 67},
    {{7416, 5083}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), RAINBOW_DEFINED, 3, 68},
    {{5155, 5122}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 11},
    {{3875, 5145}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 17},
    {{4937, 5145}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 11},
    {{2979, 5166}, MAKE_STAR (GIANT_STAR, ORANGE_BODY, -1), 0, 1, 15},
    {{3035, 5178}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 15},
    {{3994, 5185}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 17},
    {{3541, 5187}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 17},
    {{5977, 5246}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 102},
    {{3770, 5250}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 17},
    {{1520, 5261}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 55},
    {{1613, 5279}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 55},
    {{7020, 5291}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 68},
    {{1416, 5315}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 55},
    {{2993, 5318}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 15},
    {{1425, 5404}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 55},
    {{1854, 5416}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 5, 55},
    {{3625, 5437}, MAKE_STAR (GIANT_STAR, GREEN_BODY, -1), 0, 1, 16},
    {{3416, 5437}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 16},
    {{4000, 5437}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), ZOQFOT_DEFINED, 1, 18},
    {{6270, 5479}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 102},
    {{3583, 5479}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 16},
    {{4083, 5513}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 18},
    {{2159, 5614}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 6, 55},
    {{3937, 5625}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 18},
    {{6014, 5632}, MAKE_STAR (GIANT_STAR, BLUE_BODY, -1), 0, 1, 21},
    {{ 250, 5687}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 25},
    {{3625, 5750}, MAKE_STAR (GIANT_STAR, RED_BODY, -1), 0, 2, 19},
    {{ 371, 5772}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 25},
    {{6107, 5785}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 2, 21},
    {{9645, 5791}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), BURVIXESE_DEFINED, 0, 130},
    {{1545, 5818}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 54},
    {{3750, 5833}, MAKE_STAR (GIANT_STAR, GREEN_BODY, -1), 0, 1, 19},
    {{6301, 5875}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 5, 21},
    {{1923, 5878}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 54},
    {{4625, 5895}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 131},
    {{ 152, 5900}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 25},
    {{5437, 5916}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 33},
    {{1714, 5926}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 54},
    {{6200, 5935}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), SAMATRA_DEFINED, 4, 21},
    {{6429, 5958}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 7, 21},
    {{4729, 5958}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 131},
    {{1978, 5968}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), TALKING_PET_DEFINED, 2, 54},
    {{ 395, 5979}, MAKE_STAR (GIANT_STAR, GREEN_BODY, -1), 0, 1, 22},
    {{ 563, 5980}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 22},
    {{ 456, 5989}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 6, 22},
    {{4625, 6000}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 131},
    {{6166, 6000}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 3, 21},
    {{6496, 6032}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 6, 21},
    {{2228, 6038}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 12, 54},
    {{4583, 6041}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 131},
    {{1558, 6058}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 6, 54},
    {{1902, 6065}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 54},
    {{2159, 6073}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 11, 54},
    {{ 365, 6093}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 22},
    {{ 541, 6145}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 22},
    {{2200, 6176}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 10, 54},
    {{ 729, 6208}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 23},
    {{5250, 6229}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 33},
    {{8166, 6250}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 40},
    {{6215, 6255}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 8, 21},
    {{ 437, 6270}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 22},
    {{5583, 6291}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 33},
    {{1881, 6308}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 8, 54},
    {{1795, 6329}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 7, 54},
    {{2118, 6379}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 9, 54},
    {{ 750, 6458}, MAKE_STAR (GIANT_STAR, WHITE_BODY, -1), 0, 1, 23},
    {{3716, 6458}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 30},
    {{1360, 6489}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 56},
    {{7333, 6500}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 40},
    {{3770, 6500}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 30},
    {{4500, 6500}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 0, 37},
    {{ 187, 6520}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 24},
    {{ 125, 6541}, MAKE_STAR (GIANT_STAR, RED_BODY, -1), 0, 1, 24},
    {{7812, 6562}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 40},
    {{ 770, 6602}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 23},
    {{5910, 6624}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 29},
    {{ 208, 6625}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 24},
    {{2604, 6645}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 101},
    {{1578, 6668}, MAKE_STAR (SUPER_GIANT_STAR, GREEN_BODY, -1), MELNORME5_DEFINED, 1, 56},
    {{5479, 6687}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 33},
    {{ 375, 6716}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 24},
    {{ 312, 6728}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 24},
    {{6020, 6729}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 29},
    {{5062, 6750}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 10, 28},
    {{4208, 6854}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 31},
    {{5145, 6875}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 9, 28},
    {{4291, 6937}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 31},
    {{5145, 6958}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 8, 28},
    {{7208, 7000}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 39},
    {{8625, 7000}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), RAINBOW_DEFINED, 1, 41},
    {{4955, 7034}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 28},
    {{4895, 7041}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 28},
    {{4971, 7104}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 28},
    {{8666, 7104}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 41},
    {{4854, 7125}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 28},
    {{5083, 7145}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 7, 28},
    {{7360, 7184}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 4, 39},
    {{1020, 7187}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 58},
    {{3875, 7187}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 32},
    {{4879, 7201}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 5, 28},
    {{4958, 7229}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 6, 28},
    {{7125, 7250}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 39},
    {{7532, 7258}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 39},
    {{2416, 7291}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 101},
    {{3854, 7291}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 32},
    {{9687, 7333}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 3, 44},
    {{ 395, 7458}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), RAINBOW_DEFINED, 2, 60},
    {{4895, 7458}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 36},
    {{4645, 7479}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 4, 36},
    {{6940, 7514}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 11, 39},
    {{7443, 7538}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 6, 39},
    {{6479, 7541}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 0, 38},
    {{7208, 7541}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 1, 39},
    {{5791, 7583}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 3, 34},
    {{ 333, 7625}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 60},
    {{5958, 7645}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 34},
    {{1041, 7708}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 58},
    {{5875, 7729}, MAKE_STAR (SUPER_GIANT_STAR, YELLOW_BODY, -1), MELNORME6_DEFINED, 1, 34},
    {{1125, 7791}, MAKE_STAR (GIANT_STAR, BLUE_BODY, -1), 0, 1, 58},
    {{4979, 7791}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 2, 36},
    {{4958, 7791}, MAKE_STAR (GIANT_STAR, WHITE_BODY, -1), 0, 1, 36},
    {{6889, 7803}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 10, 39},
    {{7200, 7849}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 8, 39},
    {{7395, 7854}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 7, 39},
    {{9437, 7854}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 44},
    {{2836, 7857}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), RAINBOW_DEFINED, 5, 53},
    {{5375, 7875}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 35},
    {{6187, 7875}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 7, 35},
    {{6041, 7916}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 35},
    {{5979, 7979}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 35},
    {{7083, 7993}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 9, 39},
    {{3270, 8000}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 8, 53},
    {{6104, 8000}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 6, 35},
    {{ 687, 8000}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 59},
    {{ 562, 8000}, MAKE_STAR (GIANT_STAR, GREEN_BODY, -1), URQUAN_WRECK_DEFINED, 1, 59},
    {{5645, 8020}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 35},
    {{1395, 8041}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 4, 58},
    {{8229, 8041}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 43},
    {{2518, 8056}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 3, 53},
    {{5875, 8062}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 35},
    {{8416, 8083}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 43},
    {{9000, 8229}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 44},
    {{3562, 8250}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 9, 53},
    {{5437, 8270}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), RAINBOW_DEFINED, 5, 48},
    {{1520, 8333}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 58},
    {{2771, 8351}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 53},
    {{2535, 8358}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), THRADD_DEFINED, 4, 53},
    {{3151, 8390}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 7, 53},
    {{2362, 8395}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 11, 53},
    {{2822, 8395}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 53},
    {{5500, 8395}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 48},
    {{2536, 8504}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 4, 2},
    {{2582, 8507}, MAKE_STAR (SUPER_GIANT_STAR, YELLOW_BODY, -1), MELNORME7_DEFINED, 1, 2},
    {{8625, 8562}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 6, 3},
    {{4375, 8562}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 0, 50},
    {{2593, 8569}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 2},
    {{2562, 8572}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 2},
    {{8492, 8578}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 7, 3},
    {{1125, 8583}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 6, 58},
    {{8073, 8588}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 46},
    {{8560, 8638}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 3},
    {{8750, 8645}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 5, 3},
    {{5562, 8645}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 48},
    {{2588, 8653}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 14, 53},
    {{2458, 8666}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 10, 53},
    {{7666, 8666}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), RAINBOW_DEFINED, 2, 46},
    {{2776, 8673}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), AQUA_HELIX_DEFINED, 6, 53},
    {{8630, 8693}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), UTWIG_DEFINED, 2, 3},
    {{2310, 8702}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 12, 53},
    {{ 437, 8770}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 57},
    {{8534, 8797}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), RAINBOW_DEFINED, 3, 3},
    {{8588, 8812}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 4, 3},
    {{7187, 8812}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 3, 46},
    {{5475, 8823}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 48},
    {{3050, 8833}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 4, 1},
    {{2831, 8854}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 1},
    {{2300, 8861}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 13, 53},
    {{ 479, 8875}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 57},
    {{2706, 8910}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 2, 1},
    {{ 333, 8916}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 57},
    {{2535, 8917}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 5, 1},
    {{8322, 8934}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 1, 45},
    {{8249, 8958}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 45},
    {{8375, 8958}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 45},
    {{5645, 8979}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 4, 48},
    {{2687, 9000}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 1},
    {{8375, 9041}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 45},
    {{9960, 9042}, MAKE_STAR (GIANT_STAR, WHITE_BODY, -1), RAINBOW_DEFINED, 0, 42},
    {{7354, 9062}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 1, 47},
    {{7833, 9083}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 6, 47},
    {{2581, 9105}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 6, 1},
    {{7545, 9107}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 47},
    {{7414, 9124}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), SUPOX_DEFINED, 2, 47},
    {{8500, 9125}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 45},
    {{ 104, 9125}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 27},
    {{7889, 9181}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 7, 47},
    {{7791, 9187}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 47},
    {{7791, 9229}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 5, 47},
    {{4812, 9270}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 0, 51},
    {{8500, 9372}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), BOMB_DEFINED, 6, 45},
    {{7255, 9374}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 11, 45},
    {{8458, 9393}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 7, 45},
    {{1000, 9395}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 4, 27},
    {{5711, 9475}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 49},
    {{ 62, 9479}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 27},
    {{5989, 9496}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 7, 49},
    {{8000, 9505}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 9, 45},
    {{5329, 9538}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 5, 49},
    {{2916, 9541}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 103},
    {{8296, 9548}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 8, 45},
    {{5600, 9552}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 1, 49},
    {{7664, 9589}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 10, 45},
    {{6125, 9604}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 8, 49},
    {{9144, 9686}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 4},
    {{5781, 9711}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 49},
    {{5229, 9729}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 6, 49},
    {{9120, 9741}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 3, 4},
    {{9186, 9741}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 2, 4},
    {{9159, 9745}, MAKE_STAR (SUPER_GIANT_STAR, BLUE_BODY, -1), MELNORME8_DEFINED, 1, 4},
    {{ 333, 9750}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 0, 0},
    {{9147, 9790}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 4},
    {{5704, 9795}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), VUX_BEAST_DEFINED, 4, 49},
    {{ 333, 9812}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), SLYLANDRO_DEFINED, 2, 27},
    {{1020, 9937}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 7, 27},
    {{ 83, 9979}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 6, 27},
    {{1937, 9979}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 1, 103},
    {{4395, 9979}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 0, 52},

    А вот файл с планетами в системах так и не могу найти.
    Аватара пользователя
    Vasaka
    MOSC Team
    Сообщения: 3195
    Регистрация: 24 янв 2011

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Vasaka »

    Кстати, появилась идея. Вместо того, чтобы перемешивать планеты между системами, можно перемешать системы. Вряд ли кто-то помнит по внешнему виду что это за система и стоит ли её обследовать.
    Есть проблема того, что какие-то сюжетные системы будет сложно найти, но тут или их оставить на тех же местах, или их перемещать в небольшом радиусе от старого места.
    Например, Акуа Хеликс можно спокойно переместить, но так, чтобы оно было внутри границ Траддашей.
    Но похоже к каждому такому элементу потребуется индивидуальный подход.

    Что касается сюжета, то в самом начале, при встрече с командором, или при контакте с лунной базой, можно дать игроку сообщение, что что-то случилось в галактике и звёзды пришли в движение. Мы потеряли ориентиры. Там где раньше были звёзды, теперь пустота и наоборот. И похоже нам заново придётся открывать галактику.
    Я думаю, должно получиться неплохо. :D


    Хотя, если кто-то знает где лежит файл с содержимым систем (планеты, ресурсы), скажите. Это тоже не помешает.
    Аватара пользователя
    Malin
    Сообщения: 2030
    Регистрация: 28 май 2023

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Malin »

    Vasaka писал(а):Хотя, если кто-то знает где лежит файл с содержимым систем (планеты, ресурсы), скажите. Это тоже не помешает.

    Вась, ты не помнишь? Мы же как-то давно это обсуждали, и выяснили что планеты и ресурсы генерятся игрой по зашитому сиду. Только положения звёзд жёстко зашиты в файле что ты указал выше. Звезда которая в этом файле помечена меткой типа SHOFIXTI_DEFINED имеет свою функцию генерации планет, звёзды же без таких меток имеют чисто рандомные (по зашитому сиду) планеты. Ну а так как у всех нас сид один, то и планеты и их ресурсы у всех нас одинаковые.

    Слова, слова... Проведём эксперимент! ;)

    Вот планета Сириус I:
    Изображение
    На изображении слева виден сид в виде A M Q R параметров

    А вот она же (загрузил сохранение) - Сириус I с моим сидом:
    Изображение
    Слева видно на какой конкретно я замел сид.

    Вот система Сириуса:
    Изображение
    Помните, что в оригинале там была всего одна планета?
    Оффтоп

    На счёт звёзд с метками. Слетал в Sol и заснял Марс до:
    Изображение
    и после изменения сида:
    Изображение
    Есть кое-какие изменения, но они не существенные и не должны касаться сюжетных вещей. Как видим, тип ресурсов не поменялся, поменялось только их количество и положение, а также сама карта Марса слегка другая, но та же по тону.

    Любопытно что положение планет в системах тоже берёт свои концы от сида, даже в таких маркированных системах.
    Изображение
    Аватара пользователя
    Vasaka
    MOSC Team
    Сообщения: 3195
    Регистрация: 24 янв 2011

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Vasaka »

    Вась, ты не помнишь?
    Извини, я не помню.

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


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

    В детстве как раз в то время когда я познавал SC2 на 3DO, я был очарован космосом и тогда смело говорил что Сириус моя любимая звезда. И был крайне разочарован тем что в SC2 у неё всего лишь одна какая-то скучная планетка.
    Вот-вот! Один в один мои мысли по этому поводу!

    Помните, что в оригинале там была всего одна планета?
    Это то что нужно! Теоретически мы уже можем собрать совершенно уникальную галактику прямо сейчас? Только, наверное стоит не случайным образом генерировать эти сиды, а переставлять их местами (брать от одной системы и подставлять для другой), чтобы общее количество ресурсов оставалось неизменным. (Это если я правильно понял как всё работает.)

    Напишешь в каком файле это меняется? Я посмотрю, подумаю как лучше их менять.
    Аватара пользователя
    Malin
    Сообщения: 2030
    Регистрация: 28 май 2023

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Malin »

    Vasaka писал(а):Мне почему-то казалось, что я находил в исходниках этот файл когда-то. Может в более ранних версиях игры это именно так и было, а потом переделали?

    Да, да, мы этот plandata.c уже обсуждали и не могли понять, почему в нём есть инфа о звёздах (их положении и типе), но нигде не могли найти инфу о планетах (сколько их, тип, луны, ресурсы, атмосфера и тп.)
    Нет они не переделывали, всё так и было. Кто-то из нас тогда предположил что остальное генерится случайно, просто по одному сиду, жёстко зашитому в код. На самом деле это логично - экономит место на диске и время разработчиков (поди расставь каждый ресурс на каждой планете), возможно они даже подумывали над тем чтобы сделать рогалик из SC2, то есть новая игра генерирует новые планеты и ресурсы на них, за исключением важных систем.
    Vasaka писал(а):Теоретически мы уже можем собрать совершенно уникальную галактику прямо сейчас?

    Фактически я уже собрал, и уже, лично я, могу играть в совершенно новый SC2 :D
    Разве что звёздная карта не поменялась. Зато все советы по "богатым" системам из интернета мне не помогут. Почти как в детстве.
    Vasaka писал(а):Только, наверное стоит не случайным образом генерировать эти сиды, а переставлять их местами (брать от одной системы и подставлять для другой), чтобы общее количество ресурсов оставалось неизменным. (Это если я правильно понял как всё работает.)

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

    ! ОСТОРОЖНО ! Можно сломать мозг!

    В файле uqmdebug.c есть функция UniverseRecurse(..) которая вызывает для каждой звезды из starmap_array из plandata.c функцию starRecurse(..) (uqmdebug.c).
    В ней каждой звезде даются ссылки на функции генерации getGenerateFunctions(..) (gendef.c) по метками XXX_DEFINED. То есть Солнце имеет свою метку SOL_DEFINED и функция getGenerateFunctions(..) возвращает набор функций generateSolFunctions (gensol.c) для того чтобы сгенерировать Солнечную систему. Если полазать в gensol.c по этим функциям то можно найти и создание Марсов с Венерами и задание их атмосфер\тектоник и проча.
    Для звёзд без метки getGenerateFunctions(..) возвращает по default generateDefaultFunctions(..)(gendefault.c). Рассмотрим одну из функций такого дефолтного набора - GenerateDefault_generatePlanets(..) (gendefault.c). Она вызывает GeneratePlanets(..) (gendefault.c), та вызывает RandomContext_Random(..) (random2.c), которая возвращает псевдослучайное число, а также сохраняет его в SysGenRNG (solarsys.c) для генерации следующего в последовательности случайного числа.

    В итоге. Параметры псевдослучайного генератора A, M, Q, R находятся в random2.c.
    Однако там же есть вшитое зерно в RandomContext_New(..), изменение которого никак не влият на игру (я ничего не заметил), и похоже нужна только для выделения памяти под переменную типа struct RandomContext, которая содержит только одно число внутри. Зачем такая конструкция - не понятно. Вообще генерация случайных чисел сделана как-то криво. Вроде стремились создать несколько независимых генераторов (что делать не стоит), а генерят всё общим SysGenRNG. Видимо потому и наворотили адовых коснтрукций - поняли что генератор должен быть один, а прибраться времени не было.

    Однако, искушённый читатель уличит меня: "Где же изначальный сид? A M Q R - это лишь параметры псевдогенератора, которому нужно скормить сида чтобы он выдал число?"
    А сидом являются координаты звезды!
    starRecurse(..) с подвыпердом выдаёт звезде свой сид при помощи GetRandomSeedForStar(..) (solarsys.c), которая стыкует int16 X и Y координаты в uint32.

    То есть менять ресурсы можно несколькими способами:
    1). Параметры генератора (AMQR)
    2). Координаты звезды (плюс минус на единичку подвигал звезду - всё, новая система)
    3). Положение звезды в массиве starmap_array, так как звёзды пробегаются в цикле, то поменяв строчки в массиве, генератор будет проходить их и выдавать сиды в другом порядке.

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

    Ну вроде всё рассказал. Переваривай :)

    Попробовал, компильнуть не отладочную версию - огрёб ошибок - туши свет! Убоялся и поскорее закрыл :mosking:
    На неделе попробую как-нибудь разобраться. Хотя, возможно можно и отладочную версию выцепить, чтобы передать тебе :think:, но это не прилично :secret:

    PS: Кстати, как ты ищешь по файлам? В VisualStudio есть поиск по всему проекту, прыжок к объявлению и поиск всех упоминаний во всех файлах проекта. Ты на Linux ведь не в ручную же в каком-нибудь блокноте ищешь где в каком файле вызывается та или иная функция?
    Ответить