QTfrontend/game.cpp
author nemo
Sun, 24 Jan 2010 16:46:06 +0000
changeset 2712 8f4527c9137c
parent 2584 cc049fbb65ef
child 2747 7889a3a9724f
permissions -rw-r--r--
Minor tweak, try to make long flavour text last longer, move the hurt self messages to unused messages group, so they don't get wiped by crate an instant later.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     1
/*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 949
diff changeset
     2
 * Hedgewars, a free turn based strategy game
883
07a568ba44e0 Update copyright info in source files headers
unc0rr
parents: 788
diff changeset
     3
 * Copyright (c) 2005-2008 Andrey Korotaev <unC0Rr@gmail.com>
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     4
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     8
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    12
 * GNU General Public License for more details.
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    13
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    15
 * along with this program; if not, write to the Free Software
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    17
 */
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    18
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    19
#include <QString>
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    20
#include <QByteArray>
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
    21
#include <QUuid>
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    22
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    23
#include "game.h"
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    24
#include "hwconsts.h"
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    25
#include "gameuiconfig.h"
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    26
#include "gamecfgwidget.h"
339
7535ab6c3820 Run game message added, team and config info provided for net game
displacer
parents: 324
diff changeset
    27
#include "teamselect.h"
210
440575778475 Fixed compilation on *nix .)
unc0rr
parents: 208
diff changeset
    28
#include "KB.h"
239
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
    29
#include "proto.h"
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    30
706
9e973b057a52 missing header fix
displacer
parents: 686
diff changeset
    31
#include <QTextStream>
9e973b057a52 missing header fix
displacer
parents: 686
diff changeset
    32
2468
0b62498c201a openal fix, training map selection and rcplane adjustments from Smaxx (untested, but look reasonable). Bunch of new graphics from Tiy, new translation for pt-pt from inu_
nemo
parents: 2443
diff changeset
    33
QString training; // TODO: Cleaner solution?
0b62498c201a openal fix, training map selection and rcplane adjustments from Smaxx (untested, but look reasonable). Bunch of new graphics from Tiy, new translation for pt-pt from inu_
nemo
parents: 2443
diff changeset
    34
681
7a20c50988ec working weapons select
displacer
parents: 673
diff changeset
    35
HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) :
339
7535ab6c3820 Run game message added, team and config info provided for net game
displacer
parents: 324
diff changeset
    36
  TCPBase(true),
1904
20348675b015 - Fix warnings in frontend
unc0rr
parents: 1812
diff changeset
    37
  ammostr(ammo),
20348675b015 - Fix warnings in frontend
unc0rr
parents: 1812
diff changeset
    38
  m_pTeamSelWidget(pTeamSelWidget)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    39
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    40
	this->config = config;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    41
	this->gamecfg = gamecfg;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    42
	TeamCount = 0;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    43
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    44
419
fdeed9718e6b virtual destructors for tcpBase derived classes, readarray clear removed as unneeded
displacer
parents: 406
diff changeset
    45
HWGame::~HWGame()
fdeed9718e6b virtual destructors for tcpBase derived classes, readarray clear removed as unneeded
displacer
parents: 406
diff changeset
    46
{
686
494b5880989a - Header cleanup in game.cpp
unc0rr
parents: 682
diff changeset
    47
	SetGameState(gsDestroyed);
419
fdeed9718e6b virtual destructors for tcpBase derived classes, readarray clear removed as unneeded
displacer
parents: 406
diff changeset
    48
}
fdeed9718e6b virtual destructors for tcpBase derived classes, readarray clear removed as unneeded
displacer
parents: 406
diff changeset
    49
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    50
void HWGame::onClientDisconnect()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    51
{
541
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    52
	switch (gameType) {
1490
4eb4fc12cc30 Don't rerecord a demo
unc0rr
parents: 1369
diff changeset
    53
		case gtDemo: break;
541
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    54
		case gtNet:
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    55
			emit HaveRecord(true, demo);
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    56
			break;
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    57
		default:
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    58
			if (gameState == gsInterrupted) emit HaveRecord(false, demo);
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    59
			else if (gameState == gsFinished) emit HaveRecord(true, demo);
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    60
	}
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
    61
	SetGameState(gsStopped);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    62
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    63
253
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    64
void HWGame::commonConfig()
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    65
{
318
46a43b02bbb3 Game config commands are generated by GameCFGWidget
unc0rr
parents: 312
diff changeset
    66
	QByteArray buf;
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    67
	QString gt;
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    68
	switch (gameType) {
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    69
		case gtDemo:
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    70
			gt = "TD";
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    71
			break;
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    72
		case gtNet:
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    73
			gt = "TN";
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    74
			break;
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    75
		default:
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    76
			gt = "TL";
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    77
	}
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    78
	HWProto::addStringToBuffer(buf, gt);
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
    79
318
46a43b02bbb3 Game config commands are generated by GameCFGWidget
unc0rr
parents: 312
diff changeset
    80
	HWProto::addStringListToBuffer(buf, gamecfg->getFullConfig());
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    81
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    82
	if (m_pTeamSelWidget)
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    83
	{
352
4665bfe25470 first buggy hedgehogs num net change
displacer
parents: 341
diff changeset
    84
		QList<HWTeam> teams = m_pTeamSelWidget->getPlayingTeams();
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    85
		for(QList<HWTeam>::iterator it = teams.begin(); it != teams.end(); ++it)
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    86
		{
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    87
			HWProto::addStringListToBuffer(buf,
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    88
				(*it).TeamGameConfig(gamecfg->getInitHealth()));
682
a37b6966de84 Some misc fixes
unc0rr
parents: 681
diff changeset
    89
			HWProto::addStringToBuffer(buf, QString("eammstore %1").arg(ammostr));
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    90
		}
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    91
	}
318
46a43b02bbb3 Game config commands are generated by GameCFGWidget
unc0rr
parents: 312
diff changeset
    92
	RawSendIPC(buf);
253
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    93
}
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    94
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    95
void HWGame::SendConfig()
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    96
{
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    97
	commonConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    98
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    99
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   100
void HWGame::SendQuickConfig()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   101
{
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   102
	QByteArray teamscfg;
239
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   103
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   104
	HWProto::addStringToBuffer(teamscfg, "TL");
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   105
	HWProto::addStringToBuffer(teamscfg, QString("etheme %1")
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   106
			.arg((Themes->size() > 0) ? Themes->at(rand() % Themes->size()) : "steel"));
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   107
	HWProto::addStringToBuffer(teamscfg, "eseed " + QUuid::createUuid().toString());
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   108
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   109
	HWNamegen namegen;
239
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   110
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   111
	HWTeam * team1;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   112
	team1 = new HWTeam;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   113
	team1->difficulty = 0;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   114
	team1->teamColor = *color1;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   115
	team1->numHedgehogs = 4;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   116
	namegen.TeamRandomNames(team1,TRUE);
607
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   117
	HWProto::addStringListToBuffer(teamscfg,
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   118
			team1->TeamGameConfig(100));
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   119
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   120
	HWTeam * team2;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   121
	team2 = new HWTeam;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   122
	team2->difficulty = 4;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   123
	team2->teamColor = *color2;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   124
	team2->numHedgehogs = 4;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   125
	namegen.TeamRandomNames(team2,TRUE);
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   126
	HWProto::addStringListToBuffer(teamscfg,
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   127
			team2->TeamGameConfig(100));
607
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   128
1576
a02353129a41 Check for deprecated ammo schemes at startup and delete them
unc0rr
parents: 1490
diff changeset
   129
	HWProto::addStringToBuffer(teamscfg, "eammstore " + *cDefaultAmmoStore);
a02353129a41 Check for deprecated ammo schemes at startup and delete them
unc0rr
parents: 1490
diff changeset
   130
	HWProto::addStringToBuffer(teamscfg, "eammstore " + *cDefaultAmmoStore);
607
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   131
	RawSendIPC(teamscfg);
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   132
}
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   133
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   134
void HWGame::SendTrainingConfig()
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   135
{
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   136
	QByteArray traincfg;
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   137
	HWProto::addStringToBuffer(traincfg, "TL");
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   138
2468
0b62498c201a openal fix, training map selection and rcplane adjustments from Smaxx (untested, but look reasonable). Bunch of new graphics from Tiy, new translation for pt-pt from inu_
nemo
parents: 2443
diff changeset
   139
	QFile file(datadir->absolutePath() + "/Trainings/" + training + ".txt");
596
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   140
	if(!file.open(QFile::ReadOnly))
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   141
	{
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   142
		emit ErrorMessage(tr("Error reading training config file"));
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   143
		return;
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   144
	}
2377
f3fab2b09e0c And in frontend
nemo
parents: 2049
diff changeset
   145
596
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   146
	QTextStream stream(&file);
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   147
	while(!stream.atEnd())
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   148
	{
2584
cc049fbb65ef Change mission file format to allow more flexible config
unc0rr
parents: 2468
diff changeset
   149
		QString line = stream.readLine();
cc049fbb65ef Change mission file format to allow more flexible config
unc0rr
parents: 2468
diff changeset
   150
		if(!line.isEmpty() && !line.startsWith("#"))
cc049fbb65ef Change mission file format to allow more flexible config
unc0rr
parents: 2468
diff changeset
   151
			if(line != "<binds>")
cc049fbb65ef Change mission file format to allow more flexible config
unc0rr
parents: 2468
diff changeset
   152
				HWProto::addStringToBuffer(traincfg, "e" + line);
cc049fbb65ef Change mission file format to allow more flexible config
unc0rr
parents: 2468
diff changeset
   153
			else
cc049fbb65ef Change mission file format to allow more flexible config
unc0rr
parents: 2468
diff changeset
   154
				for(int i = 0; i < BINDS_NUMBER; i++)
cc049fbb65ef Change mission file format to allow more flexible config
unc0rr
parents: 2468
diff changeset
   155
					if(!cbinds[i].strbind.isEmpty())
cc049fbb65ef Change mission file format to allow more flexible config
unc0rr
parents: 2468
diff changeset
   156
						HWProto::addStringToBuffer(traincfg, "ebind " + cbinds[i].strbind + " " + cbinds[i].action);
596
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   157
	}
593
1f5e66379a43 Triggers proof-of-concept
unc0rr
parents: 588
diff changeset
   158
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   159
	RawSendIPC(traincfg);
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   160
}
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   161
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   162
void HWGame::SendNetConfig()
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   163
{
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   164
	commonConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   165
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   166
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   167
void HWGame::ParseMessage(const QByteArray & msg)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   168
{
306
7b61834edcf6 - Better blowtorch
unc0rr
parents: 297
diff changeset
   169
	switch(msg.at(1)) {
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   170
		case '?': {
395
641ed71c7c93 - Fix net game bug
unc0rr
parents: 379
diff changeset
   171
			SendIPC("!");
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   172
			break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   173
		}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   174
		case 'C': {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   175
			switch (gameType) {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   176
				case gtLocal: {
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   177
					SendConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   178
					break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   179
				}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   180
				case gtQLocal: {
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   181
					SendQuickConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   182
					break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   183
				}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   184
				case gtDemo: break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   185
				case gtNet: {
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   186
					SendNetConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   187
					break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   188
				}
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   189
				case gtTraining: {
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   190
					SendTrainingConfig();
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   191
					break;
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   192
				}
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   193
			}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   194
			break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   195
		}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   196
		case 'E': {
660
7c155e849602 - Simplify net game objects relationship
unc0rr
parents: 622
diff changeset
   197
			int size = msg.size();
1277
752b53481057 - Unbreak previously broken themes
unc0rr
parents: 1129
diff changeset
   198
			emit ErrorMessage(QString("Last two engine messages:\n") + QString().append(msg.mid(2)).left(size - 4));
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   199
			return;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   200
		}
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   201
		case 'K': {
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   202
			ulong kb = msg.mid(2).toULong();
466
bc45a038d47a frewetype warning is now printed to console
displacer
parents: 425
diff changeset
   203
			if (kb==1) {
468
8403d6884707 some debug messages removed
displacer
parents: 466
diff changeset
   204
			  qWarning("%s", KBMessages[kb - 1].toLocal8Bit().constData());
466
bc45a038d47a frewetype warning is now printed to console
displacer
parents: 425
diff changeset
   205
			  return;
bc45a038d47a frewetype warning is now printed to console
displacer
parents: 425
diff changeset
   206
			}
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   207
			if (kb && kb <= KBmsgsCount)
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   208
			{
425
a7e1dabc8fb7 - Better AI thinking behavior
unc0rr
parents: 419
diff changeset
   209
				emit ErrorMessage(KBMessages[kb - 1]);
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   210
			}
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   211
			return;
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   212
		}
306
7b61834edcf6 - Better blowtorch
unc0rr
parents: 297
diff changeset
   213
		case 'i': {
2382
bfd378dfc4e7 Optimize network traffic a bit:
unc0rr
parents: 2377
diff changeset
   214
			emit GameStats(msg.at(2), QString::fromUtf8(msg.mid(3)));
306
7b61834edcf6 - Better blowtorch
unc0rr
parents: 297
diff changeset
   215
			break;
7b61834edcf6 - Better blowtorch
unc0rr
parents: 297
diff changeset
   216
		}
324
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   217
		case 'Q': {
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   218
			SetGameState(gsInterrupted);
324
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   219
			break;
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   220
		}
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   221
		case 'q': {
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   222
			SetGameState(gsFinished);
324
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   223
			break;
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   224
		}
1356
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   225
		case 's': {
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   226
			int size = msg.size();
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   227
			QString msgbody = QString::fromUtf8(msg.mid(2).left(size - 4));
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   228
			emit SendChat(msgbody);
2403
6c5d504af2ba - Proper /team command implementation
unc0rr
parents: 2392
diff changeset
   229
			// FIXME: /me command doesn't work here
2405
3b8607ac32c6 Fix /me chat command in demos
unc0rr
parents: 2403
diff changeset
   230
			QByteArray buf;
3b8607ac32c6 Fix /me chat command in demos
unc0rr
parents: 2403
diff changeset
   231
			HWProto::addStringToBuffer(buf, "s" + HWProto::formatChatMsg(config->netNick(), msgbody) + "\x20\x20");
3b8607ac32c6 Fix /me chat command in demos
unc0rr
parents: 2403
diff changeset
   232
			demo.append(buf);
2403
6c5d504af2ba - Proper /team command implementation
unc0rr
parents: 2392
diff changeset
   233
			break;
6c5d504af2ba - Proper /team command implementation
unc0rr
parents: 2392
diff changeset
   234
		}
6c5d504af2ba - Proper /team command implementation
unc0rr
parents: 2392
diff changeset
   235
		case 'b': {
6c5d504af2ba - Proper /team command implementation
unc0rr
parents: 2392
diff changeset
   236
			int size = msg.size();
6c5d504af2ba - Proper /team command implementation
unc0rr
parents: 2392
diff changeset
   237
			QString msgbody = QString::fromUtf8(msg.mid(2).left(size - 4));
6c5d504af2ba - Proper /team command implementation
unc0rr
parents: 2392
diff changeset
   238
			emit SendTeamMessage(msgbody);
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   239
			break;
1356
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   240
		}
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   241
		default: {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   242
			if (gameType == gtNet)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   243
			{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   244
				emit SendNet(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   245
			}
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   246
		if (msg.at(1) != 's')
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   247
			demo.append(msg);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   248
		}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   249
	}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   250
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   251
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   252
void HWGame::FromNet(const QByteArray & msg)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   253
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   254
	RawSendIPC(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   255
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   256
1356
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   257
void HWGame::FromNetChat(const QString & msg)
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   258
{
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   259
	QByteArray buf;
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   260
	HWProto::addStringToBuffer(buf, 's' + msg + "\x20\x20");
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   261
	RawSendIPC(buf);
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   262
}
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   263
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   264
void HWGame::onClientRead()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   265
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   266
	quint8 msglen;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   267
	quint32 bufsize;
406
ea90c6358054 segfault after endgame fixed?!
displacer
parents: 397
diff changeset
   268
	while (!readbuffer.isEmpty() && ((bufsize = readbuffer.size()) > 0) &&
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   269
			((msglen = readbuffer.data()[0]) < bufsize))
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   270
	{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   271
		QByteArray msg = readbuffer.left(msglen + 1);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   272
		readbuffer.remove(0, msglen + 1);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   273
		ParseMessage(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   274
	}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   275
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   276
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   277
QStringList HWGame::setArguments()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   278
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   279
	QStringList arguments;
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents: 541
diff changeset
   280
	QRect resolution = config->vid_Resolution();
497
adf1aee202c6 merge fixes from branch
displacer
parents: 486
diff changeset
   281
	arguments << cfgdir->absolutePath();
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents: 541
diff changeset
   282
	arguments << QString::number(resolution.width());
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents: 541
diff changeset
   283
	arguments << QString::number(resolution.height());
759
8da05b316d81 Enable back fps counter
unc0rr
parents: 753
diff changeset
   284
	arguments << QString::number(config->bitDepth()); // bpp
291
afa378f1e961 automatic assign of game server TCP port
displacer
parents: 271
diff changeset
   285
	arguments << QString("%1").arg(ipc_port);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   286
	arguments << (config->vid_Fullscreen() ? "1" : "0");
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   287
	arguments << (config->isSoundEnabled() ? "1" : "0");
2443
fececcbc2189 Smaxx patch for fixing all sound related issues on any system
koda
parents: 2428
diff changeset
   288
#ifdef _WIN32
2392
a55dbef5cf31 Smaxx's patch fixing openal sound issues with poor card drivers
koda
parents: 2384
diff changeset
   289
	arguments << (config->isSoundHardware() ? "1" : "0");
2443
fececcbc2189 Smaxx patch for fixing all sound related issues on any system
koda
parents: 2428
diff changeset
   290
#else
fececcbc2189 Smaxx patch for fixing all sound related issues on any system
koda
parents: 2428
diff changeset
   291
	arguments << "0";
fececcbc2189 Smaxx patch for fixing all sound related issues on any system
koda
parents: 2428
diff changeset
   292
#endif
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   293
	arguments << tr("en.txt");
1777
88674c291331 Implement initial sound volume option
unc0rr
parents: 1576
diff changeset
   294
	arguments << QString::number(config->volume()); // sound volume
297
279e10ec31b4 'Show FPS' and 'FPS limit' options
unc0rr
parents: 296
diff changeset
   295
	arguments << QString::number(config->timerInterval());
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 253
diff changeset
   296
	arguments << datadir->absolutePath();
297
279e10ec31b4 'Show FPS' and 'FPS limit' options
unc0rr
parents: 296
diff changeset
   297
	arguments << (config->isShowFPSEnabled() ? "1" : "0");
529
812682c1ab62 Option for alternative damage tags
unc0rr
parents: 512
diff changeset
   298
	arguments << (config->isAltDamageEnabled() ? "1" : "0");
949
866729775535 Use nick from frontend to prepend chat messages
unc0rr
parents: 883
diff changeset
   299
	arguments << config->netNick().toUtf8().toBase64();
1129
b74ffca22762 Add a checkbox in frontend to turn music off
unc0rr
parents: 1128
diff changeset
   300
	arguments << (config->isMusicEnabled() ? "1" : "0");
1812
3d4692e825e7 'Reduce quality' patch by nemo
unc0rr
parents: 1777
diff changeset
   301
	arguments << (config->isReducedQuality() ? "1" : "0");
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   302
	return arguments;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   303
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   304
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   305
void HWGame::AddTeam(const QString & teamname)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   306
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   307
	if (TeamCount == 5) return;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   308
	teams[TeamCount] = teamname;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   309
	TeamCount++;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   310
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   311
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   312
void HWGame::PlayDemo(const QString & demofilename)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   313
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   314
	gameType = gtDemo;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   315
	QFile demofile(demofilename);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   316
	if (!demofile.open(QIODevice::ReadOnly))
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   317
	{
425
a7e1dabc8fb7 - Better AI thinking behavior
unc0rr
parents: 419
diff changeset
   318
		emit ErrorMessage(tr("Cannot open demofile %1").arg(demofilename));
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   319
		return ;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   320
	}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   321
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   322
	// read demo
512
efc640bb60d0 Simplify reading from file ;)
unc0rr
parents: 497
diff changeset
   323
	toSendBuf = demofile.readAll();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   324
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   325
	// run engine
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   326
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   327
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   328
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   329
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   330
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   331
void HWGame::StartNet()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   332
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   333
	gameType = gtNet;
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   334
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   335
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   336
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   337
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   338
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   339
void HWGame::StartLocal()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   340
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   341
	gameType = gtLocal;
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   342
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   343
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   344
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   345
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   346
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   347
void HWGame::StartQuick()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   348
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   349
	gameType = gtQLocal;
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   350
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   351
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   352
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   353
}
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   354
2468
0b62498c201a openal fix, training map selection and rcplane adjustments from Smaxx (untested, but look reasonable). Bunch of new graphics from Tiy, new translation for pt-pt from inu_
nemo
parents: 2443
diff changeset
   355
void HWGame::StartTraining(const QString & file)
587
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   356
{
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   357
	gameType = gtTraining;
2468
0b62498c201a openal fix, training map selection and rcplane adjustments from Smaxx (untested, but look reasonable). Bunch of new graphics from Tiy, new translation for pt-pt from inu_
nemo
parents: 2443
diff changeset
   358
	training = file;
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   359
	demo.clear();
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   360
	Start();
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   361
	SetGameState(gsStarted);
587
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   362
}
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   363
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   364
void HWGame::SetGameState(GameState state)
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   365
{
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   366
	gameState = state;
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   367
	emit GameStateChanged(state);
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   368
}