# HG changeset patch # User unc0rr # Date 1154879328 0 # Node ID e7c1df9cce2c28278cebe407d1aef76105e876d9 # Parent aeeb4da6b157b84148dd5deba32d6ccba72b9590 - make the game be run from ${PREFIX}/bin with data in ${PREFIX}/share/hedgewars/Data - fix build diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/game.cpp --- a/QTfrontend/game.cpp Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/game.cpp Sun Aug 06 15:48:48 2006 +0000 @@ -97,7 +97,7 @@ SENDIPC("eadd hh2 0"); SENDIPC("eadd hh3 0"); SENDIPC("eaddteam"); - LocalCFG(1); + LocalCFG(2); SENDIPC("ecolor 16776960"); SENDIPC("eadd hh0 1"); SENDIPC("eadd hh1 1"); @@ -238,7 +238,7 @@ arguments << (config->vid_Fullscreen() ? "1" : "0"); arguments << (config->isSoundEnabled() ? "1" : "0"); arguments << tr("en.txt"); - process->start("./hwengine", arguments); + process->start(bindir->absolutePath() + "/hwengine", arguments); } void HWGame::AddTeam(const QString & teamname) @@ -250,7 +250,7 @@ QString HWGame::GetThemeBySeed() { - QFile themesfile(QString(DATA_PATH) + "/Themes/themes.cfg"); + QFile themesfile(datadir->absolutePath() + "/Themes/themes.cfg"); QStringList themes; if (themesfile.open(QIODevice::ReadOnly)) { @@ -327,10 +327,9 @@ Start(); } -void HWGame::StartNet(const QString & netseed) +void HWGame::StartNet() { gameType = gtNet; - seed = netseed; demo = new QByteArray; Start(); } diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/game.h --- a/QTfrontend/game.h Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/game.h Sun Aug 06 15:48:48 2006 +0000 @@ -59,7 +59,7 @@ void PlayDemo(const QString & demofilename); void StartLocal(); void StartQuick(); - void StartNet(const QString & netseed); + void StartNet(); signals: void SendNet(const QByteArray & msg); diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/gameuiconfig.cpp --- a/QTfrontend/gameuiconfig.cpp Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/gameuiconfig.cpp Sun Aug 06 15:48:48 2006 +0000 @@ -36,27 +36,14 @@ #include "gameuiconfig.h" #include "hwform.h" #include "pages.h" +#include "hwconsts.h" GameUIConfig::GameUIConfig(HWForm * FormWidgets) : QObject() { Form = FormWidgets; - cfgdir.setPath(cfgdir.homePath()); - if (!cfgdir.exists(".hedgewars")) - { - if (!cfgdir.mkdir(".hedgewars")) - { - QMessageBox::critical(0, - tr("Error"), - tr("Cannot create directory %1").arg("/.hedgewars"), - tr("Quit")); - return ; - } - } - cfgdir.cd(".hedgewars"); - - QFile settings(cfgdir.absolutePath() + "/options"); + QFile settings(cfgdir->absolutePath() + "/options"); if (settings.open(QIODevice::ReadOnly)) { QTextStream stream(&settings); @@ -90,12 +77,12 @@ QStringList GameUIConfig::GetTeamsList() { - return cfgdir.entryList(QStringList("*.cfg")); + return cfgdir->entryList(QStringList("*.cfg")); } void GameUIConfig::SaveOptions() { - QFile settings(cfgdir.absolutePath() + "/options"); + QFile settings(cfgdir->absolutePath() + "/options"); if (!settings.open(QIODevice::WriteOnly)) { QMessageBox::critical(0, diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/gameuiconfig.h --- a/QTfrontend/gameuiconfig.h Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/gameuiconfig.h Sun Aug 06 15:48:48 2006 +0000 @@ -47,7 +47,6 @@ public: GameUIConfig(HWForm * FormWidgets); QStringList GetTeamsList(); - QDir cfgdir; int vid_Resolution(); bool vid_Fullscreen(); bool isSoundEnabled(); diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/hedgewars.pro --- a/QTfrontend/hedgewars.pro Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/hedgewars.pro Sun Aug 06 15:48:48 2006 +0000 @@ -2,7 +2,7 @@ TARGET = hedgewars DEPENDPATH += . INCLUDEPATH += . -DESTDIR = ../hedgewars +DESTDIR = ../bin win32 { RC_FILE = ./res/hedgewars.rc diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/hwconsts.h --- a/QTfrontend/hwconsts.h Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/hwconsts.h Sun Aug 06 15:48:48 2006 +0000 @@ -31,10 +31,14 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -const char resolutions[2][4][5] = +#include + +const char resolutions[2][4][5] = { {"640", "800", "1024", "1280"}, {"480", "600", "768", "1024"} }; -#define DATA_PATH "Data" +extern QDir * cfgdir; +extern QDir * datadir; +extern QDir * bindir; diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/hwform.cpp Sun Aug 06 15:48:48 2006 +0000 @@ -132,7 +132,7 @@ void HWForm::GoToDemos() { QDir tmpdir; - tmpdir.cd(DATA_PATH); + tmpdir.cd(datadir->absolutePath()); tmpdir.cd("Demos"); tmpdir.setFilter(QDir::Files); ui.pagePlayDemo->DemosList->clear(); @@ -196,7 +196,7 @@ return ; } game = new HWGame(config, 0); - game->PlayDemo(QString(DATA_PATH) + "/Demos/" + curritem->text() + ".hwd_1"); + game->PlayDemo(datadir->absolutePath() + "/Demos/" + curritem->text() + ".hwd_1"); } void HWForm::NetConnect() diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/main.cpp --- a/QTfrontend/main.cpp Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/main.cpp Sun Aug 06 15:48:48 2006 +0000 @@ -34,19 +34,46 @@ #include #include #include +#include +#include #include "hwform.h" +#include "hwconsts.h" + +QDir * bindir; +QDir * cfgdir; +QDir * datadir; int main(int argc, char *argv[]) { QApplication app(argc, argv); + QDir mydir = QFileInfo(argv[0]).dir(); + bindir = new QDir(mydir); + cfgdir = new QDir(); + + cfgdir->setPath(cfgdir->homePath()); + if (!cfgdir->exists(".hedgewars")) + { + if (!cfgdir->mkdir(".hedgewars")) + { + QMessageBox::critical(0, + QObject::tr("Error"), + QObject::tr("Cannot create directory %1").arg("/.hedgewars"), + QObject::tr("Quit")); + } + } + cfgdir->cd(".hedgewars"); + + datadir = new QDir(mydir); + datadir->cd("../share/hedgewars/Data"); + Q_INIT_RESOURCE(hedgewars); QTranslator Translator; Translator.load(":/translations/hedgewars_" + QLocale::system().name()); app.installTranslator(&Translator); - HWForm *Form = new HWForm; + HWForm *Form = new HWForm(); Form->show(); return app.exec(); } diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/netclient.cpp --- a/QTfrontend/netclient.cpp Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/netclient.cpp Sun Aug 06 15:48:48 2006 +0000 @@ -140,7 +140,7 @@ void HWNet::RawSendNet(const QString & str) { - RawSendNet(str.toLatin1()); + RawSendNet(str.toUtf8()); } void HWNet::RawSendNet(const QByteArray & buf) @@ -262,6 +262,7 @@ case 432 : // ERR_ERRONEUSNICKNAME case 433 : // ERR_NICKNAMEINUSE { + QMessageBox::information(0, "Your net nickname is in use or cannot be used", msg); // ask for another nick } } @@ -352,6 +353,22 @@ if (configasks == playerscnt) { quint32 color = 65535; + #define ADD(a) { \ + QByteArray strmsg; \ + strmsg.append(a); \ + quint8 sz = strmsg.size(); \ + cache.append(QByteArray((char *)&sz, 1)); \ + cache.append(strmsg); \ + } + { + QByteArray cache; + ADD("eseed " + seed); + ADD("e$gmflags 0"); + ADD("etheme steel"); + QString _msg = MAGIC_CHAR MAGIC_CHAR + QString(cache.toBase64()); + RawSendNet(QString("PRIVMSG %1 :%2").arg(channel, _msg)); + hwp_chanmsg(mynick, _msg); + } for (int i = 0; i < teamsCount; i++) { QString msg; @@ -359,13 +376,6 @@ RawSendNet(QString("PRIVMSG %1 :%2").arg(channel, msg)); hwp_chanmsg(mynick, msg); QByteArray cache; - #define ADD(a) { \ - QByteArray strmsg; \ - strmsg.append(a); \ - quint8 sz = strmsg.size(); \ - cache.append(QByteArray((char *)&sz, 1)); \ - cache.append(strmsg); \ - } ADD(QString("ecolor %1").arg(color)); ADD("eadd hh0 0"); ADD("eadd hh1 0"); @@ -374,8 +384,8 @@ ADD("eadd hh4 0"); #undef ADD QString _msg = MAGIC_CHAR MAGIC_CHAR + QString(cache.toBase64()); + RawSendNet(QString("PRIVMSG %1 :%2").arg(channel, _msg)); hwp_chanmsg(mynick, _msg); - RawSendNet(QString("PRIVMSG %1 :").arg(channel) + _msg); color <<= 8; } SENDCFGSTRNET("!"); @@ -390,10 +400,10 @@ } if (state == nsJoined) { - if (msg.startsWith(MAGIC_CHAR"Start!"MAGIC_CHAR) && (who == opnick)) + if (msg.startsWith(MAGIC_CHAR"Start!") && (who == opnick)) { state = nsStarting; - RunGame(msg.mid(8)); + RunGame(); return ; } if (msg.startsWith(MAGIC_CHAR"="MAGIC_CHAR) && (who == opnick)) @@ -426,7 +436,7 @@ } if (msg.startsWith(MAGIC_CHAR MAGIC_CHAR)) // HWP message { - QByteArray em = QByteArray::fromBase64(msg.mid(2).toLocal8Bit()); + QByteArray em = QByteArray::fromBase64(msg.mid(2).toAscii()); emit FromNet(em); } else // smth other { @@ -483,18 +493,17 @@ playerscnt = players.size(); configasks = 0; - QString seed; seedgen.GenRNDStr(seed, 10); - QString msg = QString(MAGIC_CHAR"Start!"MAGIC_CHAR"%1").arg(seed); + QString msg = QString(MAGIC_CHAR"Start!"); RawSendNet(QString("PRIVMSG %1 :%2").arg(channel, msg)); hwp_chanmsg(mynick, msg); } -void HWNet::RunGame(const QString & seed) +void HWNet::RunGame() { HWGame * game = new HWGame(config, 0); connect(game, SIGNAL(SendNet(const QByteArray &)), this, SLOT(SendNet(const QByteArray &))); connect(this, SIGNAL(FromNet(const QByteArray &)), game, SLOT(FromNet(const QByteArray &))); connect(this, SIGNAL(LocalCFG(const QString &)), game, SLOT(LocalCFG(const QString &))); - game->StartNet(seed); + game->StartNet(); } diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/netclient.h --- a/QTfrontend/netclient.h Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/netclient.h Sun Aug 06 15:48:48 2006 +0000 @@ -42,7 +42,7 @@ #include "team.h" #include "rndstr.h" -#define MAGIC_CHAR "\x02" +#define MAGIC_CHAR "\x2f" struct netTeam { @@ -97,6 +97,7 @@ QString mynick; QString opnick; QString channel; + QString seed; bool isOp; quint32 opCount; netTeam teams[5]; @@ -123,7 +124,7 @@ void ConfigAsked(); void NetTeamAdded(const QString & msg); - void RunGame(const QString & seed); + void RunGame(); private slots: diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/pages.cpp --- a/QTfrontend/pages.cpp Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/pages.cpp Sun Aug 06 15:48:48 2006 +0000 @@ -221,7 +221,7 @@ QDir tmpdir; - tmpdir.cd(DATA_PATH); + tmpdir.cd(datadir->absolutePath()); tmpdir.cd("Forts"); tmpdir.setFilter(QDir::Files); @@ -239,13 +239,13 @@ void PageEditTeam::CBGrave_activated(const QString & gravename) { - QPixmap pix(QString(DATA_PATH) + "/Graphics/Graves/" + gravename + ".png"); + QPixmap pix(datadir->absolutePath() + "/Graphics/Graves/" + gravename + ".png"); GravePreview->setPixmap(pix.copy(0, 0, 32, 32)); } void PageEditTeam::CBFort_activated(const QString & fortname) { - QPixmap pix(QString(DATA_PATH) + "/Forts/" + fortname + "L.png"); + QPixmap pix(datadir->absolutePath() + "/Forts/" + fortname + "L.png"); FortPreview->setPixmap(pix); } diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/predefteams.h --- a/QTfrontend/predefteams.h Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/predefteams.h Sun Aug 06 15:48:48 2006 +0000 @@ -36,19 +36,19 @@ #include -#define PREDEFTEAMS_COUNT 2 +#define PREDEFTEAMS_COUNT 3 struct PredefinedTeam { const char * TeamName; const char * hh0name; const char * hh1name; - const char * hh2name; - const char * hh3name; - const char * hh4name; - const char * hh5name; - const char * hh6name; - const char * hh7name; + const char * hh2name; + const char * hh3name; + const char * hh4name; + const char * hh5name; + const char * hh6name; + const char * hh7name; QString Grave; QString Fort; }; @@ -79,6 +79,18 @@ QT_TRANSLATE_NOOP("teams", "Kali"), QT_TRANSLATE_NOOP("teams", "Inanna"), "Bone", "Island" + }, + { + QT_TRANSLATE_NOOP("teams", "Fruits"), + QT_TRANSLATE_NOOP("teams", "Banana"), + QT_TRANSLATE_NOOP("teams", "Apple"), + QT_TRANSLATE_NOOP("teams", "Orange"), + QT_TRANSLATE_NOOP("teams", "Lemon"), + QT_TRANSLATE_NOOP("teams", "Pineapple"), + QT_TRANSLATE_NOOP("teams", "Mango"), + QT_TRANSLATE_NOOP("teams", "Peach"), + QT_TRANSLATE_NOOP("teams", "Plum"), + "coffin", "Barrelhouse" } }; diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/team.cpp --- a/QTfrontend/team.cpp Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/team.cpp Sun Aug 06 15:48:48 2006 +0000 @@ -39,6 +39,7 @@ #include "gameuiconfig.h" #include "predefteams.h" #include "pages.h" +#include "hwconsts.h" HWTeam::HWTeam(const QString & teamname, GameUIConfig * config) { @@ -79,7 +80,7 @@ bool HWTeam::LoadFromFile() { - QFile cfgfile(config->cfgdir.absolutePath() + "/" + TeamName + ".cfg"); + QFile cfgfile(cfgdir->absolutePath() + "/" + TeamName + ".cfg"); if (!cfgfile.open(QIODevice::ReadOnly)) return false; QTextStream stream(&cfgfile); stream.setCodec("UTF-8"); @@ -133,7 +134,7 @@ bool HWTeam::SaveToFile() { - QFile cfgfile(config->cfgdir.absolutePath() + "/" + TeamName + ".cfg"); + QFile cfgfile(cfgdir->absolutePath() + "/" + TeamName + ".cfg"); if (!cfgfile.open(QIODevice::WriteOnly)) return false; QTextStream stream(&cfgfile); stream.setCodec("UTF-8"); diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/translations/hedgewars_ru.qm Binary file QTfrontend/translations/hedgewars_ru.qm has changed diff -r aeeb4da6b157 -r e7c1df9cce2c QTfrontend/translations/hedgewars_ru.ts --- a/QTfrontend/translations/hedgewars_ru.ts Sun Aug 06 15:47:20 2006 +0000 +++ b/QTfrontend/translations/hedgewars_ru.ts Sun Aug 06 15:48:48 2006 +0000 @@ -112,6 +112,14 @@ Teams Команды + + Audio/Graphic options + Настройки звука и графики + + + Net nick + Имя игрока + QLabel @@ -401,5 +409,41 @@ Inanna Инанна + + Fruits + Фрукты + + + Banana + Банан + + + Apple + Яблоко + + + Orange + Апельсин + + + Lemon + Лимон + + + Pineapple + Ананас + + + Mango + Манго + + + Peach + Персик + + + Plum + Слива + diff -r aeeb4da6b157 -r e7c1df9cce2c hedgewars/hwengine.dpr --- a/hedgewars/hwengine.dpr Sun Aug 06 15:47:20 2006 +0000 +++ b/hedgewars/hwengine.dpr Sun Aug 06 15:48:48 2006 +0000 @@ -163,9 +163,24 @@ //////////////////// procedure GetParams; var c: integer; + i: integer; + p: TPathType; +begin +PathPrefix:= ParamStr(0); +for i:= 1 to Length(PathPrefix) do + if PathPrefix[i] = '\' then PathPrefix[i]:= '/'; +i:= Length(PathPrefix); +while (i > 0) and not (PathPrefix[i] = '/') do dec(i); +Delete(PathPrefix, i, Length(PathPrefix) - i + 1); +dec(i); +while (i > 0) and not (PathPrefix[i] = '/') do dec(i); +Delete(PathPrefix, i, Length(PathPrefix) - i + 1); +PathPrefix:= PathPrefix + '/share/hedgewars/'; +for p:= Low(TPathType) to High(TPathType) do + if p <> ptMapCurrent then Pathz[p]:= PathPrefix + Pathz[p]; + {$IFDEF DEBUGFILE} - i: integer; -begin +AddFileLog('Prefix: "' + PathPrefix +'"'); for i:= 0 to ParamCount do AddFileLog(inttostr(i) + ': ' + ParamStr(i)); {$ELSE} @@ -181,7 +196,7 @@ cFullScreen:= ParamStr(5) = '1'; isSoundEnabled:= ParamStr(6) = '1'; cLocaleFName:= ParamStr(7); - end else OutError(errmsgShouldntRun, true); + end else OutError(errmsgShouldntRun, true) end; procedure ShowMainWindow; diff -r aeeb4da6b157 -r e7c1df9cce2c hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Sun Aug 06 15:47:20 2006 +0000 +++ b/hedgewars/uConsts.pas Sun Aug 06 15:48:48 2006 +0000 @@ -119,6 +119,8 @@ cKeyMaxIndex = 322; + cMaxCaptions = 4; + cInactDelay = 1500; gfForts = $00000001; @@ -179,6 +181,7 @@ Name: 'DejaVuSans.ttf') ); + PathPrefix: shortstring = './'; Pathz: array[TPathType] of string[ 64] = ( '', // ptNone 'Data', // ptData diff -r aeeb4da6b157 -r e7c1df9cce2c hedgewars/uSound.pas --- a/hedgewars/uSound.pas Sun Aug 06 15:47:20 2006 +0000 +++ b/hedgewars/uSound.pas Sun Aug 06 15:48:48 2006 +0000 @@ -84,7 +84,7 @@ WriteLnToConsole(msgOK); end; -s:= 'Data/Music/kahvi140a_alexander_chereshnev-illusion.ogg'; +s:= PathPrefix + 'Data/Music/kahvi140a_alexander_chereshnev-illusion.ogg'; WriteToConsole(msgLoading + s + ' '); Mus:= Mix_LoadMUS(PChar(s)); TryDo(Mus <> nil, msgFailed, false); diff -r aeeb4da6b157 -r e7c1df9cce2c hedgewars/uStore.pas --- a/hedgewars/uStore.pas Sun Aug 06 15:47:20 2006 +0000 +++ b/hedgewars/uStore.pas Sun Aug 06 15:48:48 2006 +0000 @@ -468,10 +468,8 @@ begin if Step = 0 then begin - WriteToConsole(msgLoading + 'progress sprite... '); - ProgrSurf:= IMG_Load(PChar(string('Data/Graphics/BigDigits.png'))); - SDLTry(ProgrSurf <> nil, true); - WriteLnToConsole(msgOK) + WriteToConsole(msgLoading + 'progress sprite: '); + ProgrSurf:= LoadImage(Pathz[ptGraphics] + '/BigDigits', false); end; SDL_FillRect(SDLPrimSurface, nil, 0); r.x:= 0; diff -r aeeb4da6b157 -r e7c1df9cce2c hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Sun Aug 06 15:47:20 2006 +0000 +++ b/hedgewars/uWorld.pas Sun Aug 06 15:48:48 2006 +0000 @@ -60,11 +60,12 @@ type TCaptionStr = record Surf: PSDL_Surface; StorePos: Longword; + Group: TCapGroup; EndTime: LongWord; end; var cWaterSprCount: integer; - Captions: array[TCapGroup] of TCaptionStr; + Captions: array[0..Pred(cMaxCaptions)] of TCaptionStr; procedure InitWorld; begin