Глядя на труды других, я решил тоже внести свою лепту и написать урок по созданию своего меню.
Меню будет в формате ПКМ
Вот мой пример:
И так, давайте приступим..
Для работы нам потребуется:
1. Текстовый редактор. Я буду использовать Notepad++ 2. Графический редактор. Я буду использовать Adobe Photoshop CC 3. Программа Convertor TX
Мы будем редактировать три файла, это: 1. mainmenu.c Находится в "..\PROGRAM\interface\" 2. mainmenu.ini Находится в "..\RESOURCE\INI\interfaces\" 3. common.ini Находится в "..\RESOURCE\INI\texts\"
[MAIN] ;item = VIDEO,VIDEOBASE ;item = SLIDEPICTURE,BACKSLIDE item = PICTURE,BACKPICTURE //картинка, в данном случае наш background item = PICTURE,SEADOGSLOGO //картинка, лого (не знаю зачем оно тут, но пусть будет)
item = TITLE,TITLE // текстовое поле 1 item = TITLE,TITLE_2 //текстовое поле 2 ;item = TEXTBUTTON,B_NET //кнопка сетевой игры item = TEXTBUTTON,B_NEWGAME //кнопка новой игры ;item = TEXTBUTTON,B_RESUMEGAME //кнопка продолжить игру item = TEXTBUTTON,B_LOAD //кнопка загрузить игру ;item = TEXTBUTTON,B_SAVE //кнопка сохранить игру item = TEXTBUTTON,B_OPTIONS //кнопка опции item = TEXTBUTTON,B_CREDITS //кнопка авторы item = PC,TEXTBUTTON,B_QUIT //кнопка выхода ;item = 410,LANG,Russian,GLOWS,LOGOGLOWS_RUS item = 120,RECTANGLE,CONFIRM_RECTANGLE item = 130,FORMATEDTEXT,TEXTWINDOW item = 132,TEXTBUTTON,CONFIRM_YES_BUTTON //кнопка подтверждения да item = 132,TEXTBUTTON,CONFIRM_NO_BUTTON // кнопка подтверждения нет item = 132,TEXTBUTTON,STOP_OK //кнопка стоп item = 132,TEXTBUTTON,STOP_EXIT //остановить и выйти start = B_NEWGAME //начать новую игру
Тем самым мы включили сами кнопочки, которые мы потом будем использовать.
[TITLE] position = 0,0,800,600 textureName = interfaces\title.tga
и удаляем их
Далее нам нужна картинка которую мы будем использовать в качестве фона Фон создадим в фотошопе, размер изображения должен быть 1024х1024 пикселов и в формате *.tga Я назвал свою картинку myMenuBackGround.tga вы можете назвать её по своему, главное потом не ошибиться при добавлении Далее нам нужно её отконвертировать в формат .tx Ставим вот такие параметры:
Это нужно для того, чтобы она корректно отображалась в самой игре. Конвертируем в папку RESOURCE\Textures\INTERFACES\
Далее идём в файл mainmenu.ini и находим следующие строки:
Код
[BACKPICTURE] position = 5,20,635,460 textureName = interfaces\mainback\mb1.tga ;textureName = interfaces\ship copy.tga ;textureRect = 0,0,1,1 color = 84,128,128,128
Меняем их на
Код
[BACKPICTURE] textureName = interfaces\myMenuBackGround.tga //путь до картинки
Далее идём в файл mainmenu.c Ищем следующие строчки:
// boal ver num --> CreateString(true,"VerNum", VERSION_NUMBER1 + GetVerNum(), FONT_NORMAL, COLOR_NORMAL, 780, 580, SCRIPT_ALIGN_RIGHT, 0.9); // boal ver num <--
//ResetSoundScheme(); ResetSound(); // new // ВВОД СВОИХ СХЕМ В ЗАВИСИМОСТИ ОТ ПОГОДЫ (BY LOKK) if (Whr_IsRain()) { if (Whr_IsNight()) { SetSoundScheme("mainmenu_night_rain"); } else { SetSoundScheme("mainmenu_day_rain"); } } else { if (Whr_IsNight()) { SetSoundScheme("mainmenu_night"); } else { SetSoundScheme("mainmenu_day"); }
// boal ver num --> CreateString(true,"","Корсары:",FONT_CAPTION,COLOR_NORMAL,605,165,SCRIPT_ALIGN_LEFT,2); CreateString(true,"КТ","Карибские Тайны",FONT_CAPTION,COLOR_NORMAL,570,200,SCRIPT_ALIGN_LEFT,1.6); CreateString(true,"Version",VERSION_NUMBER1 + GetVerNum(),FONT_NORMAL,COLOR_NORMAL,400,545,SCRIPT_ALIGN_CENTER,0.9); CreateString(true,"KORSAR328","KORSAR328",FONT_NORMAL,COLOR_NORMAL,400,560,SCRIPT_ALIGN_CENTER,0.9); CreateString(true,"site",VERSION_NUMBER3,FONT_NORMAL,COLOR_NORMAL,400,575,SCRIPT_ALIGN_CENTER,0.9); // boal ver num <--
SetEventHandler("backgroundcommand","ProcCommand",0); ResetSound(); // new GameInterface.SavePath = "SAVE"; oldMusicID = 0; musicName = ""; SetMusic("music_MainMenu"); //музыка в главном меню, прописана в music_aliases.ini }
значения в их порядке "видимость" "краткое значение строки" "полное значение строки которое будет отображаться в главном меню" "шрифт текста" "цвет текста" "отступ слева" "отступ сверху" "положение текста" "размер текста"
Цитаташрифт текста ()
Я пока нашёл только два, но наверное есть и ещё FONT_NORMAL - обычный печатный текст FONT_CAPTION - текст составленный из букв, которые находятся в файле
Цитатацвет текста ()
С цветом такая же история COLOR_NORMAL - обычный белый цвет COLOR_MONEY - золотистый цвет
Цитатаположение текста ()
С положением текста дело обстоит проще, тут достаточно знать азы работы с CSS SCRIPT_ALIGN_LEFT - текст слева SCRIPT_ALIGN_CENTER - текст по центру SCRIPT_ALIGN_RIGHT - текст справа
case "B_NEWGAME": NewGamePress(); break; case "B_LOAD": LoadPress(); break; case "B_SAVE": SavePress(); break; case "B_OPTIONS": OptionsPress(); break; //case "Multiplayer": MultiPress(); break; case "B_CREDITS": CreditsPress(); break; case "Exit": SetEventHandler("frame","QuitPress",0); break; } }
Это нужно для того, чтобы при нажатии на открытые нами кнопки, они открывали соответствующие окна. Например, при нажатии на кнопку "Новая игра" Открывалось окно выбора персонажа и т.д. Далее ищем строки:
Удаляем Саму функцию MainMenu_CreateShip() не трогайте, иначе крашнется Далее открываем файл common.ini Находим строку
Код
string = titleGameMenu," Игровое меню "
Ниже по аналогии создаём свою
Код
string = titleMainMenu," Главное меню "
Это заголовок окна. Если мы сейчас в таком виде запустим игру то увидим следующее:
А именно что кнопки стоят не правильно Давайте поставим их на то место, где они и должны стоять в данном уроке: Для этого заходим снова в mainmenu.ini Находим строку [B_NEWGAME] далее идут описания этой кнопки, находим строку position
Цитата
Разберёмся в позицией:
Позиция пишется по такому принципу: "отступ с лева до левого края", "отступ сверху до верхнего края", "отступ слева до правого края", "отступ сверху до нижнего края"
Теперь поставим координаты для этой кнопки как у меня в примере: 560,240,780,270 Далее находим следующие поля и ставим им следующие координаты: [B_LOAD]==>560,280,780,310 [B_OPTIONS]==>560,320,780,350 [B_CREDITS]==>560,360,780,390 [B_QUIT]==>560,400,780,430
Сохраняем.
Запускаем игру и видим что всё работает отлично
Скрин из лаборатории:
Подведём итоги, сегодня вы узнали способ создания меня для игры Корсары. Есть ещё второй способ создания меню, с использованием локации, но я с ним не разбирался, поэтому ничего сказать по этому поводу не могу.
С вами был korsar328, если возникнут трудности - пишите в комментарии, я или другие корсары по мере возможностей дадут ответ на ваш вопрос.
Весьма годный материал. Тем не менее, нуждается в незначительном редактировании. Я бы подписал с помощью комментариев строки в .ini и .c файлах. Чтобы объяснить совсем уж малознакомому с этими скриптами начинающему мододелу, что где находится и зачем это надо. Особенно это касается .ini-файлов. Я на первых порах очень жёстко терялся в смысле этих строк...
Цитатаkorsar328 ()
Ставим вот такие параметры
Если мне память не изменяет, для 1024х1024 лучше ставить mips=8. Там прямая пропорциональность: чем больше формат изображения - тем больше и значение mips. Об этом ещё когда-то Tymofei писал на форумах. По Convertor TX есть небольшой мини-мануал, это оттуда.
И напоследок позволю себе включить "режим зануды" и немного придраться... Мне кажется, но в данном меню текст внизу лучше разместить на фоне однотонного цвета где-нибудь слева или справа внизу. В нынешней редакции этот текст перекрывает рисунок компаса. Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
значения в их порядке "видимость" "краткое значение строки" "полное значение строки которое будет отображаться в главном меню" "шрифт текста" "цвет текста" "отступ слева" "отступ сверху" "положение текста" "размер текста"
Цитаташрифт текста ()
Я пока нашёл только два, но наверное есть и ещё FONT_NORMAL - обычный печатный текст FONT_CAPTION - текст составленный из букв, которые находятся в файле
Цитатацвет текста ()
С цветом такая же история COLOR_NORMAL - обычный белый цвет COLOR_MONEY - золотистый цвет
Цитатаположение текста ()
С положением текста дело обстоит проще, тут достаточно знать азы работы с CSS SCRIPT_ALIGN_LEFT - текст слева SCRIPT_ALIGN_CENTER - текст по центру SCRIPT_ALIGN_RIGHT - текст справа
Добавлено (10.08.2018, 00:49) --------------------------------------------- Nathaniel, А по поводу комментариев в файлах, я считаю что можно методом тыка разобраться, просто блочить строку и смотреть что исчезнет, потом уже разбираться что к чему
Далеко не все знают о CSS, не учили английский, не знают про left, right и прочее. Я бы это тоже в первый пост добавил... Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Полезный урок! Пусть час не пробил, жди, не уставая, Пусть лгут лжецы, не снисходи до них; Умей прощать и не кажись, прощая, Великодушней и мудрей других.
Киплинг
Сообщение отредактировал Alister18 - Понедельник, 23.12.2019, 23:17
// boal ver num --> CreateString(true,"","Корсары:",FONT_CAPTION,COLOR_NORMAL,605,165,SCRIPT_ALIGN_LEFT,2); CreateString(true,"гпк","Город Потеряных Короблей",FONT_CAPTION,COLOR_NORMAL,570,200,SCRIPT_ALIGN_LEFT,1.6); CreateString(true,"Version",VERSION_NUMBER1 + GetVerNum(),FONT_NORMAL,COLOR_NORMAL,400,545,SCRIPT_ALIGN_CENTER,0.9); CreateString(true,"KORSAR328","KORSAR328",FONT_NORMAL,COLOR_NORMAL,400,560,SCRIPT_ALIGN_CENTER,0.9); CreateString(true,"site",VERSION_NUMBER3,FONT_NORMAL,COLOR_NORMAL,400,575,SCRIPT_ALIGN_CENTER,0.9); // boal ver num <--
SetEventHandler("backgroundcommand","ProcCommand",0); ResetSound(); // new GameInterface.SavePath = "SAVE"; oldMusicID = 0; musicName = ""; SetMusic("music_MainMenu"); //музыка в главном меню, прописана в music_aliases.ini }
case "B_NEWGAME": NewGamePress(); break; case "B_LOAD": LoadPress(); break; case "B_SAVE": SavePress(); break; case "B_OPTIONS": OptionsPress(); break; //case "Multiplayer": MultiPress(); break; case "B_CREDITS": CreditsPress(); break; case "Exit": SetEventHandler("frame","QuitPress",0); break; } }
[MAIN] ;item = VIDEO,VIDEOBASE ;item = SLIDEPICTURE,BACKSLIDE item = PICTURE,BACKPICTURE //картинка, в данном случае наш background item = PICTURE,SEADOGSLOGO //картинка, лого (не знаю зачем оно тут, но пусть будет)
item = TITLE,TITLE // текстовое поле 1 item = TITLE,TITLE_2 //текстовое поле 2 ;item = TEXTBUTTON,B_NET //кнопка сетевой игры item = TEXTBUTTON,B_NEWGAME //кнопка новой игры ;item = TEXTBUTTON,B_RESUMEGAME //кнопка продолжить игру item = TEXTBUTTON,B_LOAD //кнопка загрузить игру ;item = TEXTBUTTON,B_SAVE //кнопка сохранить игру item = TEXTBUTTON,B_OPTIONS //кнопка опции item = TEXTBUTTON,B_CREDITS //кнопка авторы item = PC,TEXTBUTTON,B_QUIT //кнопка выхода ;item = 410,LANG,Russian,GLOWS,LOGOGLOWS_RUS item = 120,RECTANGLE,CONFIRM_RECTANGLE item = 130,FORMATEDTEXT,TEXTWINDOW item = 132,TEXTBUTTON,CONFIRM_YES_BUTTON //кнопка подтверждения да item = 132,TEXTBUTTON,CONFIRM_NO_BUTTON // кнопка подтверждения нет item = 132,TEXTBUTTON,STOP_OK //кнопка стоп item = 132,TEXTBUTTON,STOP_EXIT //остановить и выйти start = B_NEWGAME //начать новую игру
[MAIN_WINDOW] show = 1 nodelist = VIDEOBASE,B_NEWGAME,B_LOAD,B_OPTIONS,B_CREDITS,B_QUIT,EXIT_BTN,BACKPICTURE
[B_NEWGAME] command = click command = activate command = downstep,select:B_LOAD position = 560,240,780,270 font = interface_button string = New Game
коментить иначе надо! не // но ; и с новой строки у Тебя: item = PICTURE,BACKPICTURE // картинка, в данном случае наш background а надо: ;картинка, в данном случае наш background item = PICTURE,BACKPICTURE ...и тд и тп... а по сути не читал, сори... скрипач может не знать нот и играть на слух, а Я могу не знать скрипт и скрипеть играя наобум!