Безопасный исходный код плеера
В этой теме хочу рассмотреть изменения в исходном коде плеера под игру. А именно как менять некоторые параметры и не сломать исходник.
Если есть идеи, что можно добавить, настроить или улучшить буду очень признателен.
Так же не забываем что:
PS. Про изменение исходников - если там будут какие-то существенные изменения в коде, то все изменения должны быть где-то доступны.
Это условия лицензии.
Я не программист, поэтому вряд ли смогу внести существенные изменения в код, но все же нужно об этом помнить.
Как собрать исходник в OC Windows я написал в отдельной теме - Сборка плеера(classic) под Windows
За основу взят последний свежий исходный код на сегодня - v5.9.4-b1
1. Изменить названия плеера.
2. Изменить значок .exe файла.
3. Изменить путь к auto.qsp
4. Изменить название qspgui.cfg
5. Убрать верхний toolbar и сохранить qspgui.cfg в исходник
6. Esc - fullscreen
7. Удаления апдейта.
1. Смена названия плеера -
В файле …\qspgui\frame.h
Редактируем строку -
#define QSP_LOGO "Quest Soft Player " QSPGUI_VER_STR
Например:
#define QSP_LOGO "My Best Game"
2. Смена значка .exe файла (так же меняется значок самого окна плеера).
…\misc\common\icons\logo.ico
меняем картинку при этом придерживаемся правил
1. 64x64 пикселя
2. Расширение - .ico
3. Название - logo
ВАЖНО! - Может показаться что сменилась только картинка окна плеера, при этом .exe остался старый.
Это как я понял в моем случае на Windows связано с тем что старые .exe иконки хранятся в хеше операционной системе.
Для того чтоб увидеть изменения, нужно обновить хеш или переименовать файл игры. Для других пользователей иконка будет новой, Вам же прийдется перезагрузить комп или использовать команду по сбросу хеша которую я допишу когда вспомню (пока просто меняйте название файлов и это самый быстрый способ увидеть изменения иконок).
3. Изменить путь к auto.qsp.
В файле …\qspgui\app.cpp - в самом конце есть строчка -
wxFileName autoPath(wxT("auto.qsp"));
меняем на ту которую нам надо (можно переименовать файл для автозапуска и прописать путь) -
wxFileName autoPath(wxT("data/game.qsp"));
4. Изменить название qspgui.cfg файла на свое.
В файле …\qspgui\comtools.h - есть строчка -
define QSP_CONFIG wxT("qspgui.cfg")
меняем ее на свое название и все ок -
#define QSP_CONFIG wxT("system/config.cfg")
В данном случае папки не будет, файл приклеен к .exe и создастся в конце только config.cfg
5. Убрать верхний toolbar
В файле frame.cpp закомментировал эти строки -
/*
menuBar->Append(m_fileMenu, wxT("-"));
menuBar->Append(m_gameMenu, wxT("-"));
menuBar->Append(m_settingsMenu, wxT("-"));
menuBar->Append(helpMenu, wxT("-"));
*/
меню пропало, но функционал в мести с ним, изза чего нужно установить все настройки заранее и сохранить в файле qspgui.cfg и перенести данные в наш исходник. Ниже есть страка куда мы все копируем:
wxString panels(wxT("layout2|") \
wxT("name=imgview;caption=Preview;state=1080034303;dir=1;layer=0;row=0;pos=0;prop=100000;bestw=832;besth=150;minw=50;minh=50;maxw=-1;maxh=-1;floatx=175;floaty=148;floatw=518;floath=372|") \
wxT("name=desc;caption=;state=768;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=915;besth=554;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|") \
wxT("name=objs;caption=Objects;state=6292478;dir=2;layer=1;row=0;pos=0;prop=100000;bestw=50;besth=720;minw=50;minh=50;maxw=-1;maxh=-1;floatx=1826;floaty=49;floatw=400;floath=250|") \
wxT("name=acts;caption=Actions;state=6292476;dir=3;layer=0;row=3;pos=0;prop=117349;bestw=915;besth=160;minw=50;minh=50;maxw=-1;maxh=-1;floatx=707;floaty=1022;floatw=400;floath=250|") \
wxT("name=vars;caption=Additional desc;state=6292476;dir=4;layer=2;row=0;pos=0;prop=82651;bestw=354;besth=720;minw=50;minh=50;maxw=-1;maxh=-1;floatx=-78;floaty=434;floatw=400;floath=250|") \
wxT("name=input;caption=Input area;state=2098174;dir=3;layer=0;row=4;pos=0;prop=100000;bestw=1275;besth=39;minw=50;minh=20;maxw=-1;maxh=-1;floatx=404;floaty=812;floatw=400;floath=250|") \
wxT("dock_size(5,0,0)=22|dock_size(3,0,3)=162|dock_size(4,2,0)=356|"));
Предварительно подогнать данные с файла к виду кода.
Мне данная тема очень интересна т.к. сам сейчас выбираю движок для своей игры между Renpy и QSP. QSP подходит больше, но я не программист и боюсь лезть в исходники.
Как и вас интересуют как можно убрать верхнее меню т.к. небходимости в нём нет если игра запускается с exe-шника. Такую игру проще распространять ведь даже в моём кругу общения людей которым под 40, многие не знают про текстовые игры и QSP. Ну и тем кто хочет попасть в тот же Steam меню наверно не мешало бы убрать (ведь в Steam можно? Я правильно понял условия лицензии? (Сам я не претендую, если что=))).
Ещё интересует список системных переменных. Что-то не смог его найти. Или в видео курсе от Алекса все показаны?
Хотелось бы узнать, можно ли запретить пользователю менять размеры окна плеера, или хотя бы сделать так, чтобы соотношение сторон сохранялось. А лучше чтобы игра сразу запускалась в полный экран.
Ridden,верхнего меню нет в новом плеере Qspider (но там для меня куча других недостатков) и в Quest Navigator (мне сказали что он не обновляется, но я вчера скачал игру и там уже есть поддержка новых команд. Возможно кто-то обновил для себя, пока не успел туда влезть :) ). На классике когда убрал меню то перестали работать горячие клавиши на фуллскрин (для запуска в полный экран) и на подписку окон (то есть теперь нельзя менять окна в плеере местами), хотя это может показаться и плюсом, но многие привыкли расставлять окна как им удобно. Из-за этого пришлось вернуть меню, только немного подправить.
Можете выкладывать куда угодно, вопросы появляются когда зарабатываешь больше миллиона :D , шучу, просто смотрите чтоб картинки, музыка и даже если копируете чей-то код были тоже с лицензией допускающей коммерцию.
Насчет системных переменных, то в видео показаны все основные. Так-то можно про них прочитать в справках. Я пользуюсь справкой которая устарела - Справка - qsp564help.zip
Она хоть и старая, но для меня очень удобно вызывать ее из под Qgen 1 кнопкой, главное знать какие переменные устарели и какие появились, в остальном очень простая.
Размеры окна, как и соотношение сторон это не про классик, резиновый интерфейс как я понял ток с помощью CSS, а его в классике не будет. Как я понял плеер сделали для тестирования игр или хз зачем, хотите большего - качайте недоделанные альтернативные плееры с поддержкой HTML,CSS и JS которые энтузиасты делают и потом бросают. Но тут не все так плохо, с каждым разом плееры становятся все лучше, думаю лет через 5 уже будет достойный вариант.
На счет запуска в полный экран я сомневаюсь, в любом случаи это нужно лезть глубоко в код.
Проще занести все настройки конфиг файла в исходник и при старте будет запускаться так как ты настроишь, но игроки все равно все по переставляют так как им удобно, и это правильно в виду отсутствия CSS.
На счет запретить менять размеры окна, скорее нет. Окно на то и окно чтоб менялось разрешение. Максимум можно увеличить минимальный размер окна, чтоб оно не складывалось под телефон и не сильно ломало игру (к примеру под размер HD экрана, ~1000х680).
У классика есть только недоделанный HTML, сейчас вот почти научил таблицы растягиваться по высоте (костыль на костыле).
Если хочется красиво то пожалуй Renpy будет идеален в плане оформления, но я не смог на нем писать, то что я хотел в него засунуть жутко тормозило и как оказалось у меня аллергия на код питона (я в С++ быстрее нашел все что искал, и это при том что код в 1-й рас увидел).
Я тоже далеко не программист, так что решил пока писать на qsp под классик. Извращаться с новыми* плеерами не хочеться, а костыли создавать весело. Как хобби сойдёт :D .
p.s. Я рас 5 уходил на ренпай и возвращаюсь обратно. Попробуйте писать игру паралельно на 2х платформах, в какой-то момент выбор между ними не заставит себя ждать.
6. Esc - fullscreen
В файле frame.cpp - есть код:
// Exit fullscreen mode
if (IsFullScreen() && event.GetKeyCode() == WXK_ESCAPE)
{
ShowFullScreen(false);
return;
}
Дописываем условия и сохранем:
// Exit fullscreen mode
if (IsFullScreen() && event.GetKeyCode() == WXK_ESCAPE)
{
ShowFullScreen(false);
return;
}
else
{
ShowFullScreen(true);
return;
}
Теперь кнопкой ESC вы можете открывать и закрывать fullscreen режим.
В идеале повесить на кнопку вызов меню в котором будет стандартный набор новая игра, загрузить\сохранить, полный экран и выход, но это уже сложно.
7. Удаления апдейта.
При каждом запуске плеера всплывает табличка - Доступно новое обновление?
Мы сменили название плеера и удали его версию, из-за чего плеер думает что у него версия 0.0.0, и постоянно пытается обновиться.
В файле frame.cpp - нужно закомментировать кусок кода -
/*
UpdateAppDialog dialog(this, _("Update available"),
latestVersion, releaseNotes, releaseUrl);
dialog.CenterOnParent();
if (dialog.ShowModal() == wxID_OK)
wxLaunchDefaultBrowser(releaseUrl);
*/
Теперь окно не будет появляться при каждом запуске.
Кто в теме, как изменить название библиотеки qsp.dll которая собирается с плеером?